| | |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | | exportConfig: {}, |
| | | scrollY:{ enabled: true,gt:13 },//开启虚拟滚动 |
| | | scrollX:{ enabled: true,gt:7 },//开启虚拟滚动 |
| | | scrollY:{ enabled: true,gt:0 },//开启虚拟滚动 |
| | | scrollX:{ enabled: true,gt:0 },//开启虚拟滚动 |
| | | showOverflow:true, |
| | | menuConfig: { |
| | | body: { |
| | |
| | | { code: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true }, |
| | | { code: 'errorArea', name: t('basicData.errorSettlementArea'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'sizeCheck', name: t('basicData.sizeReview'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: true } |
| | | { code: 'sizeCheck', name: t('basicData.sizeReview'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: false } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {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: 'buildingNumber',width:120, title: t('order.floorNumber'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'buildingNumber',width:120, title: t('order.buildingNumber'),editRender: { name: 'input'},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: '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}, |
| | |
| | | ElMessage.error( t('order.msg.tableLengthNot')) |
| | | return |
| | | } |
| | | computedMoney() |
| | | if(!gridOptions.menuConfig.body.options[0][5].disabled){ |
| | | ElMessage.error(t('order.msg.amountReset')) |
| | | return |
| | |
| | | return |
| | | } |
| | | if($grid.getTableData().tableData.length!=$grid.getTableData().fullData.length){ |
| | | ElMessage.error("请先取消筛选") |
| | | ElMessage.error(t('order.msg.pleaseCancelTheFilteringFirst')) |
| | | return |
| | | } |
| | | //xGrid.value.clearSort() |
| | | let order ={ |
| | | title:titleUploadData.value, |
| | | detail:$grid.getTableData().tableData, |
| | | otherMoney:otherMoney.value |
| | | otherMoney:otherMoney.value, |
| | | orderIdType:company.orderIdType |
| | | } |
| | | const errorAreaList = $grid.getTableData().fullData.filter( |
| | | item=>item.computeArea*1 < errorArea.value*1 |
| | | item=>item.width*item.height/1000000 < errorArea.value*1 |
| | | ) |
| | | if(errorAreaList.length){ |
| | | ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')} |
| | |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | distinguishCancelAndClose: true, |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | | errorAreaComputed() |
| | | selectOrder(order) |
| | | }).catch(()=>{ |
| | | selectOrder(order) |
| | | }).catch((action)=>{ |
| | | if(action === 'cancel'){ |
| | | selectOrder(order) |
| | | } |
| | | |
| | | }) |
| | | |
| | | }else { |
| | |
| | | ) |
| | | |
| | | saveOrderTitle(order) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | break |
| | | } |
| | |
| | | return |
| | | } |
| | | if ($grid.getTableData().tableData.length != $grid.getTableData().fullData.length){ |
| | | ElMessage.error("请先取消筛选") |
| | | ElMessage.error(t('order.msg.pleaseCancelTheFilteringFirst')) |
| | | return |
| | | } |
| | | let result = toolbarButtonClickEvent() |
| | |
| | | } |
| | | }) |
| | | } |
| | | computedMoney() |
| | | break |
| | | } |
| | | case 'copyChecked' :{ |
| | |
| | | }) |
| | | } |
| | | } |
| | | computedMoney() |
| | | gridOptions.menuConfig.body.options[0][5].disabled=false |
| | | break |
| | | } |
| | |
| | | } |
| | | }) |
| | | }else{ |
| | | console.log(dataList) |
| | | const val = getNestedProperty(dataList[result.start],result.cell) |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start ){ |
| | | setNestedValue(item,result.cell,val) |
| | | } |
| | | |
| | | }) |
| | | } |
| | | |
| | | } |
| | | computedMoney() |
| | | gridOptions.menuConfig.body.options[0][5].disabled=false |
| | | break |
| | | } |
| | |
| | | } |
| | | }) |
| | | } |
| | | computedMoney() |
| | | gridOptions.menuConfig.body.options[0][5].disabled=false |
| | | break |
| | | } |
| | | case 'computedMoney' :{ |
| | | const dataList = xGrid.value.getTableData().fullData |
| | | dataList.forEach((item,index) =>{ |
| | | item.area = area(item) |
| | | item.grossArea = countArea(item) |
| | | item.computeArea = item.area |
| | | item.computeGrossArea = item.grossArea |
| | | item.grossAmount=parseFloat((item.price * item.computeGrossArea).toFixed(2)) |
| | | }) |
| | | titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString() |
| | | computedMoney() |
| | | |
| | | gridOptions.menuConfig.body.options[0][5].disabled=true |
| | | break |
| | | } |
| | | case 'errorArea' :{ |
| | |
| | | } |
| | | } |
| | | //获取子页面产品方法 |
| | | const getProductRow = (row) => { |
| | | const getProductRow = (row,type) => { |
| | | if(row.state!=1){ |
| | | ElMessage.warning(t('order.msg.productStateCheck')) |
| | | return |
| | | } |
| | | |
| | | rowIndex.productName = row.productName |
| | | if(type==1){ |
| | | rowIndex.productName = row.productName |
| | | }else{ |
| | | rowIndex.productName = row.productAbbreviation |
| | | } |
| | | rowIndex.productId = row.id |
| | | productVisible.value = false |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //初始化判断是否有id传入 |
| | | onMounted(()=>{ |
| | | onMounted(async ()=>{ |
| | | gridOptions.loading = true |
| | | await initOrder() |
| | | |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value,gridOptions) |
| | | const str = route.query.orderId || history.state.orderId |
| | | if (typeof str === 'undefined' || str === null || str === '' || str === '\n' || str === '\r'){ |
| | | |
| | | gridOptions.loading = false |
| | | return |
| | | } |
| | | gridOptions.loading = true |
| | | |
| | | request.post(`/order/getOrderById/${str}`).then((res) => { |
| | | if(res.code==200){ |
| | | titleUploadData.value = res.data.order |
| | |
| | | //工艺审核后,订单未审核 取消审核按钮禁用和尺寸审核 |
| | | if(res.data.order.processReview === 2 && res.data.order.orderReview === 0){ |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | gridOptions.menuConfig.body.options[0][8].disabled =false |
| | | //gridOptions.menuConfig.body.options[0][8].disabled =false |
| | | } |
| | | |
| | | //按钮审核过后变为反审 |
| | |
| | | orderDetails.forEach(item => { |
| | | item.otherColumns = JSON.parse(item.otherColumns) |
| | | }) |
| | | otherMoney.value =res.data.orderOtherMoneyList.filter(item => item.column.indexOf('M')>-1) |
| | | otherMoney.value =res.data.orderOtherMoneyList |
| | | //加载副表数据 |
| | | xGrid.value.reloadData(orderDetails) |
| | | gridOptions.loading = false |
| | |
| | | } |
| | | }) |
| | | } |
| | | const computedMoney = () => { |
| | | const dataList = xGrid.value.getTableData().fullData |
| | | dataList.forEach((item,index) =>{ |
| | | item.area = area(item) |
| | | item.grossArea = countArea(item) |
| | | item.computeArea = item.area |
| | | item.computeGrossArea = item.grossArea |
| | | item.grossAmount=parseFloat((item.price * item.computeGrossArea).toFixed(2)) |
| | | }) |
| | | titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString() |
| | | |
| | | gridOptions.menuConfig.body.options[0][5].disabled=true |
| | | |
| | | } |
| | | |
| | | |
| | | //页面第一次加载执行 |
| | | request.get(`/basicData/orderBasicData`).then((res) => { |
| | | if(res.code==200){ |
| | | titleSelectJson.value=deepClone(res.data) |
| | | //其他金额 |
| | | otherMoney.value = titleSelectJson.value.orderOtherMoney[0] |
| | | //let columns = [] |
| | | otherMoney.value.forEach(item => { |
| | | let column = { |
| | | field: `otherColumns.${item.column}`, |
| | | width:100, |
| | | title: item.alias, |
| | | editRender: { |
| | | name: 'input', |
| | | const initOrder = async ()=>{ |
| | | |
| | | await request.get(`/basicData/orderBasicData`).then((res) => { |
| | | if(res.code==200){ |
| | | titleSelectJson.value=deepClone(res.data) |
| | | //其他金额 |
| | | otherMoney.value = titleSelectJson.value.orderOtherMoney[0] |
| | | //let columns = [] |
| | | otherMoney.value.forEach(item => { |
| | | let column = { |
| | | field: `otherColumns.${item.column}`, |
| | | width:100, |
| | | title: item.alias, |
| | | editRender: { |
| | | name: 'input', |
| | | } |
| | | } |
| | | } |
| | | //判断 其他列是否是数字 |
| | | if(item.column.indexOf('M')>-1){ |
| | | gridOptions.editRules[`otherColumns.${item.column}`] = [ |
| | | { |
| | | validator ({ cellValue }) { |
| | | const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/ |
| | | if (cellValue && !regex.test(cellValue)) { |
| | | return new Error(t('basicData.msg.range99999Dec2')) |
| | | //判断 其他列是否是数字 |
| | | if(item.column.indexOf('M')>-1){ |
| | | gridOptions.editRules[`otherColumns.${item.column}`] = [ |
| | | { |
| | | validator ({ cellValue }) { |
| | | const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/ |
| | | if (cellValue && !regex.test(cellValue)) { |
| | | return new Error(t('basicData.msg.range99999Dec2')) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | }else{ |
| | | gridOptions.editRules[`otherColumns.${item.column}`] = [ |
| | | { required: false}, |
| | | { min: 0, max: 255, message: t('basicData.msg.max255') } |
| | | ] |
| | | } |
| | | ] |
| | | }else{ |
| | | gridOptions.editRules[`otherColumns.${item.column}`] = [ |
| | | { required: false}, |
| | | { min: 0, max: 255, message: t('basicData.msg.max255') } |
| | | ] |
| | | } |
| | | |
| | | //columns.push(column) |
| | | gridOptions.columns.push(column) |
| | | //columns.push(column) |
| | | gridOptions.columns.push(column) |
| | | |
| | | }) |
| | | }) |
| | | |
| | | //进入页面下拉框设置默认值 |
| | | titleUploadData.value.orderType = titleSelectJson.value.orderType[0].basicName |
| | | titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].basicName |
| | | titleUploadData.value.icon = titleSelectJson.value.icon[0].basicName |
| | | titleUploadData.value.packType = titleSelectJson.value.packType[0].basicName |
| | | titleUploadData.value.alType = titleSelectJson.value.alType[0].basicName |
| | | titleUploadData.value.calculateType = 2 |
| | | const today = new Date |
| | | today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000)) |
| | | titleUploadData.value.deliveryDate = today.getFullYear() + |
| | | '-' + ("0" + (today.getMonth() + 1)).slice(-2) |
| | | + '-' + ("0" + today.getDate()).slice(-2) |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | //进入页面下拉框设置默认值 |
| | | titleUploadData.value.orderType = titleSelectJson.value.orderType[0].basicName |
| | | titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].basicName |
| | | titleUploadData.value.icon = titleSelectJson.value.icon[0].basicName |
| | | titleUploadData.value.packType = titleSelectJson.value.packType[0].basicName |
| | | titleUploadData.value.alType = titleSelectJson.value.alType[0].basicName |
| | | titleUploadData.value.calculateType = 2 |
| | | const today = new Date |
| | | today.setTime(today.getTime() + (7 * 24 * 60 * 60 * 1000)) |
| | | titleUploadData.value.deliveryDate = today.getFullYear() + |
| | | '-' + ("0" + (today.getMonth() + 1)).slice(-2) |
| | | + '-' + ("0" + today.getDate()).slice(-2) |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | //查询重复订单方法 |
| | | const selectOrder = (order) => { |
| | | request.post(`/order/selectOrder`,order).then((res) => { |
| | | if(res.code==200){ |
| | | if(res.data.data>0){ |
| | | ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')} |
| | | ${t('order.msg.calculationAreaPrompt5')}`, |
| | | let orderId='' |
| | | if(res.data.data.length>0){ |
| | | for (let i=0;i<res.data.data.length;i++){ |
| | | orderId+=res.data.data[i].orderId+'|' |
| | | } |
| | | } |
| | | if(orderId!=''){ |
| | | ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')}, |
| | | ${orderId+t('order.msg.calculationAreaPrompt5')}`, |
| | | t('order.msg.warning'), |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | |
| | | }) |
| | | } |
| | | |
| | | //更新金额 |
| | | //更新金额重置 |
| | | const updateMoney = () => { |
| | | const updateData = { |
| | | order: titleUploadData.value, |
| | | detail: xGrid.value.getTableData().fullData |
| | | detail: xGrid.value.getTableData().fullData, |
| | | otherMoney:otherMoney.value |
| | | } |
| | | request.post(`/order/updateOrderMoney`,updateData).then(res => { |
| | | if (res.code == 200){ |
| | |
| | | } |
| | | |
| | | const gaveOrderSizeCheck = () => { |
| | | |
| | | |
| | | |
| | | reviewOrder(2) |
| | | } |
| | | |
| | |
| | | titleUploadData.value.project = customer[0].project |
| | | titleUploadData.value.salesmanId = customer[0].salesmanId |
| | | titleUploadData.value.salesman = customer[0].salesman |
| | | |
| | | //titleSelectJson.value.customer |
| | | } |
| | | |
| | | const changeSaleMan = () => { |
| | |
| | | } |
| | | |
| | | const area = (row) => { |
| | | |
| | | return parseFloat((row.width * row.height/1000000).toFixed(2)) |
| | | } |
| | | const countArea = (row) => { |
| | |
| | | list.forEach((item)=>{ |
| | | countMoney += parseFloat(item.grossAmount) |
| | | }) |
| | | // otherMoney.value.forEach(item => { |
| | | // countMoney+=item.quantity*item.price |
| | | // }) |
| | | return parseFloat((countMoney).toFixed(2)) |
| | | } |
| | | //导入功能 |
| | |
| | | const data = event.target ? event.target.result : '' |
| | | const workbook = XLXS.read(data, { type: 'binary' }) |
| | | let jsonData = XLXS.utils.sheet_to_json(workbook.Sheets.Sheet1).slice(1) |
| | | |
| | | if(jsonData.length>maxTableLen.value){ |
| | | ElMessage.error(`${t('order.msg.importMaxCheckFailFirst')} |
| | | ${jsonData.length} |
| | |
| | | return |
| | | } |
| | | jsonData.forEach((item,index) => { |
| | | for(let key in item){ |
| | | if(key.indexOf('.')!==-1){ |
| | | const value = item[key]; |
| | | delete item[key]; // 删除原有的属性 |
| | | setNestedProperty(item, key, value); |
| | | } |
| | | } |
| | | |
| | | |
| | | if(item.computeArea === undefined){ |
| | | item.computeArea = area(item) |
| | | } |
| | |
| | | const importTemplate = () => { |
| | | downLoadFile('/importTemplate.xlsx','importTemplate.xlsx') |
| | | } |
| | | |
| | | function setNestedProperty(obj, path, value) { |
| | | const keys = path.split('.'); |
| | | const lastKey = keys.pop(); |
| | | let cursor = obj; |
| | | |
| | | keys.forEach(key => { |
| | | cursor = cursor[key] !== undefined ? cursor[key] : (cursor[key] = {}); |
| | | }); |
| | | |
| | | cursor[lastKey] = value; |
| | | } |
| | | |
| | | |
| | | //字符串转object |
| | | |
| | |
| | | ElMessage.warning(t('basicData.msg.noProductDataInTheTable')) |
| | | } |
| | | fullData.forEach((item,index) => { |
| | | if( !isNaN(item.computeArea*1) && item.computeArea != null && item.computeArea*1 < errorArea.value){ |
| | | let trueArea = item.width*item.height/1000000 |
| | | if( !isNaN(item.computeArea*1) && item.computeArea != null && trueArea < errorArea.value){ |
| | | item.computeArea = errorArea.value |
| | | item.computeGrossArea = parseFloat((item.computeArea*item.quantity).toFixed(2)) |
| | | item.grossAmount=parseFloat((item.price * item.computeGrossArea).toFixed(2)) |
| | |
| | | return |
| | | } |
| | | if(evnt.$event.keyCode === 13 ){ |
| | | const { rowIndex } = xGrid.value.getSelectedCell() || xGrid.value.getEditRecord() |
| | | const { rowIndex,row,column } = xGrid.value.getSelectedCell() || xGrid.value.getEditRecord() |
| | | // if(xGrid.value.getEditRecord()===null){ |
| | | // xGrid.value.setEditCell(row,column) |
| | | // } |
| | | if(rowIndex === length-1){ |
| | | xGrid.value.insertAt({}, xGrid.value.getTableData.length || -1) |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | const inputFocus = ()=>{ |
| | | xGrid.value.clearSelected() |
| | | } |
| | | |
| | | </script> |
| | |
| | | </el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.icon')}}:</el-text></el-col> |
| | | <el-col :span="2"> |
| | | <el-select v-model="titleUploadData.icon" clearable placeholder=" " allow-create filterable> |
| | | <el-select v-model="titleUploadData.icon" clearable placeholder=" " allow-create filterable default-first-option> |
| | | <el-option v-for="item in titleSelectJson['icon']" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="titleUploadData.deliveryDate" |
| | | type="date" |
| | | placeholder="" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.batch')}}:</el-text></el-col> |
| | |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input type="text" |
| | | v-model="option.data" |
| | | @focus="inputFocus" |
| | | @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |