提交 1.差异尺寸设置默认值0.4,
2.报表框选导出excel
| | |
| | | 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({ |
| | |
| | | mode: 'row', |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns:[ |
| | | menuConfig: { |
| | | body: { |
| | | options: [ |
| | | [ |
| | | |
| | | { code: 'exportExcelChecked', name: '导出选中', prefixIcon: 'vxe-icon-download', visible: true } |
| | | ] |
| | | ] |
| | | } |
| | | }, |
| | | columns:[ |
| | | |
| | | ],//表头按钮 |
| | | toolbarConfig: { |
| | |
| | | } |
| | | |
| | | }) |
| | | 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({ |
| | |
| | | onMounted(() => { |
| | | gridOptions.columns = props.childrenData.columns |
| | | getReportData() |
| | | addListener(xGrid.value,gridOptions) |
| | | |
| | | |
| | | }) |
| | |
| | | class="mytable-scrollbar" |
| | | ref="xGrid" |
| | | v-bind="gridOptions" |
| | | v-on="gridEvents" |
| | | > |
| | | <!-- 下拉显示所有信息插槽--> |
| | | <template #content="{ row }"> |
| | |
| | | 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> |
| | |
| | | //cellarea.value = newElement |
| | | //添加多选列 |
| | | nextTick(() => { |
| | | window.addEventListener("keypress", (event)=>{ |
| | | window.addEventListener("keypress", ()=>{ |
| | | destroyAreaBox() |
| | | }) |
| | | window.addEventListener("mousedown", tableOutDestroyAreaBox)//给window添加鼠标按下事件,判断是否在表格外,是销毁 |
| | |
| | | |
| | | |
| | | } |
| | | 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 |
| | | } |
| | |
| | | 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() |
| | |
| | | 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 }, |
| | |
| | | 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', |
| | |
| | | {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}, |
| | |
| | | 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' :{ |
| | |
| | | |
| | | }, |
| | | cellClick({ row }){ |
| | | rowClickIndex.value = row |
| | | //rowClickIndex.value = row |
| | | //右键菜单删除启用 |
| | | gridOptions.menuConfig.body.options[0][1].disabled=false |
| | | //gridOptions.menuConfig.body.options[0][1].disabled=false |
| | | } |
| | | } |
| | | //获取子页面产品方法 |
| | |
| | | <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> |