| | |
| | | import request from "@/utils/request" |
| | | import deepClone from "@/utils/deepClone" |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | import companyInfo from "@/stores/sd/companyInfo" |
| | | import SelectProduct from "@/views/sd/product/SelectProduct.vue" |
| | | import OrderOtherMoney from "@/components/sd/order/OrderOtherMoney.vue" |
| | | import OrderSizeCheck from "@/components/sd/order/OrderSizeCheck.vue" |
| | |
| | | const maxTableLen =ref(150) |
| | | let errorArea = ref(0.4) |
| | | const userStore = useUserInfoStore() |
| | | const company = companyInfo() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | const xGrid = ref() |
| | | let cellArea = ref() |
| | | const shapeList = ref([ |
| | | {label:'普形',value:'1'}, {label:'异形',value:'2'} |
| | | {label:t('order.universalShape'),value:'1'}, {label:t('order.alien'),value:'2'} |
| | | ]) |
| | | |
| | | // 定义表头上传数据 |
| | |
| | | otherMoneyRemarks:'', |
| | | processingNote:'', |
| | | createOrder:0, |
| | | creatorId:userStore.user.userName, |
| | | creator:userStore.user.userId, |
| | | creatorId:userStore.user.userId, |
| | | creator:userStore.user.userName, |
| | | }) |
| | | //定义接收加载表头下拉数据 |
| | | const titleSelectJson = ref({ |
| | |
| | | { 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 }, |
| | | { code: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true }, |
| | | { code: 'errorArea', name: '误差结算面积', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: '其他金额', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'sizeCheck', name: '尺寸审核', prefixIcon: 'vxe-icon-eye-fill', 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 } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | // {field: 'buildingNumber',width:120, title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged}, |
| | | {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: '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}, |
| | |
| | | } |
| | | }} |
| | | ], |
| | | width:[ |
| | | bendRadius:[ |
| | | { |
| | | validator ({ cellValue }) { |
| | | const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/ |
| | | if (!regex.test(cellValue)) { |
| | | if (cellValue && !regex.test(cellValue)) { |
| | | return new Error(t('basicData.msg.range99999Dec2')) |
| | | } |
| | | } |
| | | } |
| | | ], |
| | | width:[ |
| | | { |
| | | validator ({ cellValue }) { |
| | | //const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/ |
| | | const regex = company.widHeiLength.regexp |
| | | if (!regex.test(cellValue)) { |
| | | return new Error(t(company.widHeiLength.msg)) |
| | | } |
| | | } |
| | | } |
| | |
| | | height:[ |
| | | { |
| | | validator ({ cellValue }) { |
| | | const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/ |
| | | const regex = company.widHeiLength.regexp |
| | | if ( !regex.test(cellValue)) { |
| | | return new Error(t('basicData.msg.range99999Dec2')) |
| | | return new Error(t(t(company.widHeiLength.msg))) |
| | | } |
| | | } |
| | | } |
| | |
| | | {'code': 'Craft', 'name': t('order.technology'),status: 'primary',disabled: true}, |
| | | {'code': 'review', 'name': t('basicData.review'),status: 'primary',disabled: true}, |
| | | {'code': 'updateMoney', 'name': t('order.amountReset'),status: 'primary',disabled: true}, |
| | | {'code': 'saveOrder', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save',disabled: false} |
| | | {'code': 'saveOrder', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save',disabled: false}, |
| | | |
| | | ], |
| | | slots: { |
| | | tools: 'toolbar_buttons' |
| | |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return |
| | | } |
| | | |
| | | if($grid.getTableData().tableData.length!=$grid.getTableData().fullData.length){ |
| | | ElMessage.error("请先取消筛选") |
| | | return |
| | | } |
| | | let order ={ |
| | | title:titleUploadData.value, |
| | | detail:$grid.getTableData().fullData, |
| | | detail:$grid.getTableData().tableData, |
| | | otherMoney:otherMoney.value |
| | | } |
| | | const errorAreaList = $grid.getTableData().fullData.filter( |
| | | item=>item.computeArea*1 < errorArea.value*1 |
| | | ) |
| | | if(errorAreaList.length){ |
| | | ElMessageBox.confirm( |
| | | `存在 |
| | | ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')} |
| | | ${errorAreaList.length} |
| | | 条结算单片面积小于 |
| | | ${errorArea.value}是否按照${errorArea.value}计算`, |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | } |
| | | ${t('order.msg.calculationAreaPrompt2')} |
| | | ${errorArea.value} |
| | | ${t('order.msg.calculationAreaPrompt3')} |
| | | ${errorArea.value} |
| | | ${t('order.msg.calculationAreaPrompt4')}`, |
| | | t('order.msg.warning'), |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | | errorAreaComputed() |
| | | saveOrder(order) |
| | | selectOrder(order) |
| | | }).catch(()=>{ |
| | | saveOrder(order) |
| | | selectOrder(order) |
| | | }) |
| | | |
| | | }else { |
| | | saveOrder(order) |
| | | selectOrder(order) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | break |
| | | } |
| | | case 'saveOrderTitle': { |
| | | if(!gridOptions.menuConfig.body.options[0][5].disabled){ |
| | | ElMessage.error(t('order.msg.amountReset')) |
| | | return |
| | | } |
| | | |
| | | const project = titleUploadData.value.project |
| | | if(project === null || project === undefined || project === ''){ |
| | | ElMessage.error(t('order.msg.projectCheck')) |
| | | return |
| | | } |
| | | const customer = titleUploadData.value.customerId |
| | | if(customer === null || customer === undefined || customer === ''){ |
| | | ElMessage.error(t('order.msg.customerCheck')) |
| | | return |
| | | } |
| | | const salasMan = titleUploadData.value.salesman |
| | | if(salasMan === null || salasMan === undefined || salasMan === ''){ |
| | | ElMessage.error(t('order.msg.salasManCheck')) |
| | | return |
| | | } |
| | | const calculateType = titleUploadData.value.calculateType |
| | | if(calculateType === null || calculateType === undefined || calculateType === ''){ |
| | | ElMessage.error(t('order.msg.calculateTypeCheck')) |
| | | return |
| | | } |
| | | |
| | | if ($grid) { |
| | | const errMap = await $grid.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return |
| | | } |
| | | |
| | | let order ={ |
| | | title:titleUploadData.value, |
| | | } |
| | | const errorAreaList = $grid.getTableData().fullData.filter( |
| | | item=>item.computeArea*1 < errorArea.value*1 |
| | | ) |
| | | |
| | | saveOrderTitle(order) |
| | | |
| | | |
| | | |
| | | |
| | |
| | | ElMessage.error(t('order.msg.tableLengthMax')) |
| | | return |
| | | } |
| | | $grid.insertAt({}, $grid.getTableData.length || -1) |
| | | if ($grid.getTableData().tableData.length != $grid.getTableData().fullData.length){ |
| | | ElMessage.error("请先取消筛选") |
| | | return |
| | | } |
| | | let result = toolbarButtonClickEvent() |
| | | let lengths = 0 |
| | | if (result!=null){ |
| | | lengths=result.start |
| | | } |
| | | /*console.log($grid.getTableData().tableData) |
| | | console.log($grid.getTableData().fullData)*/ |
| | | //$grid.insertAt({}, $grid.getTableData.length || -1) |
| | | if($grid.getTableData().fullData.length>lengths+1){ |
| | | $grid.insertAt({}, lengths+1) |
| | | }else{ |
| | | $grid.insertAt({}, -1) |
| | | } |
| | | break |
| | | } |
| | | case 'deleteRow':{ |
| | |
| | | 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){ |
| | | item[result.cell] = val |
| | | } |
| | | }) |
| | | if(result.cell=='productName'){ |
| | | const val = dataList[result.start][result.cell] |
| | | const val1 = dataList[result.start]["productId"] |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start && index<=result.end){ |
| | | item[result.cell] = val |
| | | item["productId"] = val1 |
| | | } |
| | | }) |
| | | }else if(result.cell=='productId'){ |
| | | const val = dataList[result.start][result.cell] |
| | | const val1 = dataList[result.start]["productName"] |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start && index<=result.end){ |
| | | item[result.cell] = val |
| | | item["productName"] = val1 |
| | | } |
| | | }) |
| | | }else{ |
| | | |
| | | const val = getNestedProperty(dataList[result.start],result.cell) |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start && index<=result.end){ |
| | | setNestedValue(item,result.cell,val) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | gridOptions.menuConfig.body.options[0][5].disabled=false |
| | | break |
| | |
| | | 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 ){ |
| | | item[result.cell] = val |
| | | } |
| | | }) |
| | | if(result.cell=='productName'){ |
| | | |
| | | const val = dataList[result.start][result.cell] |
| | | const val1 = dataList[result.start]["productId"] |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start ){ |
| | | item[result.cell] = val |
| | | item["productId"] = val1 |
| | | } |
| | | }) |
| | | }else if(result.cell=='productId'){ |
| | | const val = dataList[result.start][result.cell] |
| | | const val1 = dataList[result.start]["productName"] |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start ){ |
| | | item[result.cell] = val |
| | | item["productName"] = val1 |
| | | } |
| | | }) |
| | | }else{ |
| | | const val = getNestedProperty(dataList[result.start],result.cell) |
| | | dataList.forEach((item,index) =>{ |
| | | if(index>=result.start ){ |
| | | setNestedValue(item,result.cell,val) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | } |
| | | gridOptions.menuConfig.body.options[0][5].disabled=false |
| | | break |
| | |
| | | titleUploadData.value.delivery=null |
| | | titleUploadData.value.createTime=null |
| | | |
| | | const orderDetails = res.data.orderDetails |
| | | orderDetails.forEach(item => { |
| | | item.otherColumns = JSON.parse(item.otherColumns) |
| | | }) |
| | | |
| | | if(history.state.type=='copy'){ |
| | | xGrid.value.reloadData(res.data.orderDetails) |
| | | xGrid.value.reloadData(orderDetails) |
| | | } |
| | | |
| | | gridOptions.loading = false |
| | | return |
| | | } |
| | |
| | | status: 'primary', |
| | | 'name': (res.data.order.orderReview>0?t('basicData.cancel'):t('basicData.restore'))} |
| | | gridOptions.toolbarConfig.buttons.push(button) |
| | | const buttonTitle = {'code': 'saveOrderTitle', |
| | | status: 'primary', |
| | | 'name': (res.data.order.orderReview>0?'保存表头':'保存表头')} |
| | | gridOptions.toolbarConfig.buttons.push(buttonTitle) |
| | | if(res.data.order.orderReview===-2){ |
| | | gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | gridOptions.toolbarConfig.buttons[3].disabled = true |
| | |
| | | } |
| | | }) |
| | | |
| | | //查询重复订单方法 |
| | | 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')}`, |
| | | t('order.msg.warning'), |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | | saveOrder(order) |
| | | }).catch(()=>{ |
| | | }) |
| | | }else{ |
| | | saveOrder(order) |
| | | } |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | | |
| | | //保存订单方法 |
| | | const saveOrder = (order) => { |
| | | request.post(`/order/saveOrder`,order).then((res) => { |
| | | if(res.code==200){ |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path:'/main/order/selectOrder'}) |
| | | }else { |
| | | ElMessage.error(res.msg) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | //保存订单表头方法 |
| | | const saveOrderTitle = (order) => { |
| | | request.post(`/order/saveOrderTitle`,order).then((res) => { |
| | | if(res.code==200){ |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path:'/main/order/selectOrder'}) |
| | |
| | | |
| | | // 审核订单 |
| | | const reviewOrder = (state) => { |
| | | request.post(`/order/reviewOrderById/${titleUploadData.value.orderId}/${state}`).then(res =>{ |
| | | request.post(`/order/reviewOrderById/${titleUploadData.value.orderId}/${state}/${userStore.user.userId}/${userStore.user.userName}`).then(res =>{ |
| | | if(res.code==200){ |
| | | gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | if(state==2){ |
| | |
| | | }, obj); |
| | | } |
| | | |
| | | function setNestedValue(obj, path, value) { |
| | | const keys = path.split('.'); |
| | | const lastKey = keys.pop(); |
| | | const lastObj = keys.reduce((obj, key) => obj[key], obj); |
| | | lastObj[lastKey] = value; |
| | | } |
| | | |
| | | //行单元格修改修改触发此事件 |
| | | const editClosedEvent = ({ row, column }) => { |
| | | //判断修改相应的数值修改面积与金额 |
| | |
| | | } |
| | | const fullData = xGrid.value.getTableData().fullData |
| | | if (!fullData.length){ |
| | | ElMessage.warning("表格中无产品数据") |
| | | ElMessage.warning(t('basicData.msg.noProductDataInTheTable')) |
| | | } |
| | | fullData.forEach((item,index) => { |
| | | if( !isNaN(item.computeArea*1) && item.computeArea != null && item.computeArea*1 < errorArea.value){ |
| | |
| | | } |
| | | const length = xGrid.value.getTableData().fullData.length |
| | | if(length>maxTableLen.value){ |
| | | ElMessage.warning('表格数据超过最大限制') |
| | | ElMessage.warning(t('basicData.msg.tableDataExceedsMaximumLimit')) |
| | | return |
| | | } |
| | | if(evnt.$event.keyCode === 13 ){ |
| | |
| | | </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=" " > |
| | | <el-select v-model="titleUploadData.icon" clearable placeholder=" " allow-create filterable> |
| | | <el-option v-for="item in titleSelectJson['icon']" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | </el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.packType')}}:</el-text></el-col> |
| | | <el-col :span="2"> |
| | | <el-select v-model="titleUploadData.packType" clearable placeholder=" " > |
| | | <el-select v-model="titleUploadData.packType" clearable placeholder=" " allow-create filterable > |
| | | <el-option v-for="item in titleSelectJson['packType']" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | <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" placeholder=" " > |
| | | <el-option :value="1" label="面积金额(单片)"/> |
| | | <el-option :value="2" label="面积金额(总面积)"/> |
| | | <el-option :value="1" :label="t('order.areaAmountPerPiece')"/> |
| | | <el-option :value="2" :label="t('order.areaAmountAge')"/> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>*{{$t('order.salesman')}}:</el-text></el-col> |
| | |
| | | <vxe-button @click="importEvent">{{$t('order.import')}}</vxe-button> |
| | | </template> |
| | | <template #default_shape="{ row }"> |
| | | <span>{{ row.shape=='1'?'普形':row.shape=='2'?'异形':null }}</span> |
| | | <span>{{ row.shape=='1'? t('order.universalShape'):row.shape=='2'? t('order.alien'):null }}</span> |
| | | </template> |
| | | <template #shape_edit="{ row }"> |
| | | <vxe-select v-model="row.shape" transfer :options="shapeList" placeholder=" "/> |
| | |
| | | <el-col :span="10"> |
| | | <el-input |
| | | v-model="errorArea" |
| | | :placeholder="'误差值'" |
| | | :placeholder="$t('order.errorValue')" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-button @click="errorAreaComputed">确认</el-button> |
| | | <el-button @click="errorAreaComputed">{{$t('basicData.confirmButtonText')}}</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </el-dialog> |
| | | <el-dialog v-model="otherMoneyVisible" |
| | | :title="'其他金额'" |
| | | :title="$t('basicData.otherAmounts')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | :before-close="closeOtherMoneyDialog" |
| | |
| | | <el-dialog |
| | | id="sizeCheck" |
| | | v-model="sizeCheckVisible" |
| | | :title="'尺寸校验'" |
| | | :title="$t('basicData.sizeReview')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | style="width: 614px;height:445px " |
| | | > |
| | | <order-size-check |
| | | @getParent="gaveOrderSizeCheck" |
| | | :orderId="titleUploadData.orderId" |
| | | :OrderDetail="xGrid"/> |
| | | </el-dialog> |
| | | |