guoyuji
2024-05-29 49c052b10687fa8734470bea9eb68e952ec88d30
提交 1.差异尺寸设置默认值0.4,
2.报表框选导出excel
3个文件已修改
151 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/BasicTable.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/hook/mouseMove.ts 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/BasicTable.vue
@@ -4,8 +4,10 @@
import {changeFilterEvent} from "@/hook"
import request from "@/utils/request"
import exportExcel  from "@/hook/exportExcel"
import {addListener,exportData} from "@/hook/mouseMove"
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import * as XLSX from "xlsx";
const xGrid = ref()
let filterData = ref({})
const gridOptions = reactive({
@@ -37,8 +39,17 @@
    mode: 'row',
    showStatus: true
  },//表头参数
  columns:[
  menuConfig: {
    body: {
      options: [
        [
          { code: 'exportExcelChecked', name: '导出选中', prefixIcon: 'vxe-icon-download', visible: true }
        ]
      ]
    }
  },
  columns:[
  ],//表头按钮
  toolbarConfig: {
@@ -69,6 +80,26 @@
  }
})
const gridEvents = {
  menuClick ({ menu, row, column }) {
    const $grid = xGrid.value
    if ($grid) {
      switch (menu.code) {
        case 'exportExcelChecked': {
          let result = exportData()
          if(result){
            // 将数据转换为 worksheet 对象
            const worksheet = XLSX.utils.aoa_to_sheet(result);
            const workbook = XLSX.utils.book_new();
            XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
            XLSX.writeFile(workbook, 'data.xlsx');
          }
          break
        }
      }
    }
  }
}
const props = defineProps({
@@ -101,6 +132,7 @@
onMounted(() => {
  gridOptions.columns = props.childrenData.columns
  getReportData()
  addListener(xGrid.value,gridOptions)
})
@@ -174,6 +206,7 @@
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
      >
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row }">
@@ -242,4 +275,16 @@
  height:  calc(100% - 30px);
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
:deep(#product .el-dialog__body){
  height: 90%;
  width: 100%;
}
</style>
north-glass-erp/northglass-erp/src/hook/mouseMove.ts
@@ -34,7 +34,7 @@
    //cellarea.value = newElement
    //添加多选列
    nextTick(() => {
        window.addEventListener("keypress", (event)=>{
        window.addEventListener("keypress", ()=>{
            destroyAreaBox()
        })
        window.addEventListener("mousedown", tableOutDestroyAreaBox)//给window添加鼠标按下事件,判断是否在表格外,是销毁
@@ -451,18 +451,60 @@
}
const exportData = () => {
    // //这里需要是visibleData
    let tableData = getTablexGrid().getTableData().visibleData//获取处理条件之后的全量表体数据
    let rowStart = selectionStart.rowIndex//获取选中起始行索引
    let rowEnd = selectionEnd.rowIndex//获取选中结束行索引
    let selectRows = tableData.filter((col, index: number) => {//col参数不能改否则会获取不到数据
        //这里修改从右下往左上拖动的数据显示
        if (rowStart <= rowEnd) {
            return rowStart <= index && rowEnd >= index
        } else {
            return rowStart >= index && rowEnd <= index
        }
    })
    //这里需要是visibleColumn
    let colStart = selectionStart.cellIndex//获取选中起始列索引
    let colEnd = selectionEnd.cellIndex//获取选中结束列索引
    let tableColumn = getTablexGrid().getTableColumn().visibleColumn//获取处理条件之后的全量表头列
    let selectCols = tableColumn.filter((col, index: number) => {//col参数不能改否则会获取不到数据
        //这里修改从右下往左上拖动的数据显示
        if (colStart <= colEnd) {
            return colStart <= index && colEnd >= index
        } else {
            return colStart >= index && colEnd <= index
        }
    })
    let data = []
    let title = []
    selectCols.forEach((col, index) => {
        title.push(col['title'])
    })
    data.push(title)
    selectRows.forEach((row, index) => {
        let rowData = []
        selectCols.forEach((col, index) => {
            const parts = col['property'].split('.')
            let result = row
            for (const part of parts) {
                if (result && result[part] !== undefined) {
                    result = result[part];
                } else {
                    return null;
                }
            }
            rowData.push(result)
        })
        data.push(rowData)
    })
    return  data
}
export {
    addListener,
    toolbarButtonClickEvent
    toolbarButtonClickEvent,
    exportData
}
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -19,7 +19,7 @@
let productVisible = ref(false)
let errorAreaVisible = ref(false)
let otherMoneyVisible = ref(false)
let errorArea = ref(null)
let errorArea = ref(0.4)
const userStore = useUserInfoStore()
const router = useRouter()
const route = useRoute()
@@ -97,7 +97,7 @@
      options: [
        [
          { code: 'addRow', name: t('basicData.add'), prefixIcon: 'vxe-icon-square-plus', visible: true, disabled: false },
          { code: 'deleteRow', name: t('basicData.delete'), prefixIcon: 'vxe-icon-delete', visible: true, disabled: true },
          { code: 'deleteRow', name: t('basicData.delete'), prefixIcon: 'vxe-icon-delete', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
          { code: 'clearChecked', name: t('basicData.clearSelection'), prefixIcon: 'vxe-icon-indicator', visible: true, disabled: false },
@@ -119,7 +119,17 @@
    storage: true
  },
  mouseConfig:{selected: true},//鼠标选中
  keyboardConfig:{isArrow: true, isDel: true, isEnter: true, isTab: true, isEdit: true, isChecked: true},
  keyboardConfig:{
    isArrow: true,
    isDel: true,
    isEnter: true,
    isTab: true,
    isEdit: true,
    isChecked: true,
    editMethod:()=>{
      alert(1)
    }
  },
  editConfig: {
    trigger: 'dblclick',
    mode: 'cell',
@@ -132,10 +142,10 @@
    {field: 'productId',width:140,  title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:300,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:140,  title: t('order.price'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:140,  title: t('order.quantity'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossAmount',width:160,  title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width') ,editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:140,  title: t('order.height'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:140,  title: t('order.quantity'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:150,  title: t('order.trueArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:160,  title: t('order.trueGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:180,  title: t('order.computeArea'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -347,11 +357,21 @@
          break
        }
        case 'deleteRow':{
          // $grid.remove(rowClickIndex.value)
          // rowClickIndex.value = null
          // gridOptions.menuConfig.body.options[0][1].disabled=true
          // gridOptions.menuConfig.body.options[0][5].disabled=false
          $grid.remove(rowClickIndex.value)
          rowClickIndex.value = null
          gridOptions.menuConfig.body.options[0][1].disabled=true
          gridOptions.menuConfig.body.options[0][5].disabled=false
          let result = toolbarButtonClickEvent()
          if(result){
            const dataList = xGrid.value.getTableData().visibleData
            const val = dataList[result.start][result.cell]
            dataList.forEach((item,index) =>{
              if(index>=result.start && index<=result.end){
                $grid.remove(item)
              }
            })
          }
          break
        }
        case 'copyChecked' :{
@@ -429,9 +449,9 @@
  },
  cellClick({ row }){
    rowClickIndex.value = row
    //rowClickIndex.value = row
    //右键菜单删除启用
    gridOptions.menuConfig.body.options[0][1].disabled=false
    //gridOptions.menuConfig.body.options[0][1].disabled=false
  }
}
//获取子页面产品方法
@@ -918,7 +938,7 @@
        <el-col  :span="2"><el-input  v-model="titleUploadData.batch"/></el-col>
        <el-col  :span="2"><el-text>{{$t('order.calculateType')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select @change="changeCalculateType" v-model="titleUploadData.calculateType"  clearable placeholder=" " >
          <el-select @change="changeCalculateType" v-model="titleUploadData.calculateType"   placeholder=" " >
            <el-option :value="1" label="面积金额(单片)"/>
            <el-option :value="2" label="面积金额(总面积)"/>
          </el-select>