guoyuji
2024-06-21 ea952b446a6fca053c27178bccf1c2af6f25f30b
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -6,6 +6,7 @@
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"
@@ -24,6 +25,7 @@
const maxTableLen =ref(150)
let errorArea = ref(0.4)
const userStore = useUserInfoStore()
const company = companyInfo()
const router = useRouter()
const route = useRoute()
const xGrid = ref()
@@ -58,8 +60,8 @@
  otherMoneyRemarks:'',
  processingNote:'',
  createOrder:0,
  creatorId:userStore.user.userName,
  creator:userStore.user.userId,
  creatorId:userStore.user.userId,
  creator:userStore.user.userName,
})
//定义接收加载表头下拉数据
const titleSelectJson = ref({
@@ -139,9 +141,9 @@
  },//表头参数
  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},
@@ -218,9 +220,10 @@
    width:[
      {
        validator ({ cellValue }) {
          const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
          //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('basicData.msg.range99999Dec2'))
            return new Error(t(company.widHeiLength.msg))
          }
        }
      }
@@ -228,9 +231,9 @@
    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)))
          }
        }
      }
@@ -242,7 +245,8 @@
      {'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'
@@ -337,40 +341,93 @@
              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(
                  /*t('order.msg.calculationAreaPrompt1')+
                  ${errorAreaList.length}+
                  t('order.msg.calculationAreaPrompt2')+
                  ${errorArea.value}+
                      t('order.msg.calculationAreaPrompt3')+
                  ${errorArea.value}+*/
                      t('order.msg.calculationAreaPrompt4'),
                  'Warning',
                  {
                    confirmButtonText: t('basicData.confirmButtonText'),
                    cancelButtonText: t('basicData.cancelButtonText'),
                    type: 'warning',
                  }
              ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')}
                  ${errorAreaList.length}
                  ${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)
@@ -396,7 +453,23 @@
            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':{
@@ -421,12 +494,33 @@
          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
@@ -435,12 +529,34 @@
          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
@@ -538,9 +654,15 @@
        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
      }
@@ -569,6 +691,10 @@
          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
@@ -666,9 +792,48 @@
  }
})
//查询重复订单方法
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'})
@@ -702,7 +867,7 @@
// 审核订单
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){
@@ -830,6 +995,13 @@
      return o[p];
    }
  }, 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;
}
//行单元格修改修改触发此事件
@@ -990,7 +1162,7 @@
        </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"
@@ -999,7 +1171,7 @@
        </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"
@@ -1154,6 +1326,7 @@
    >
      <order-size-check
          @getParent="gaveOrderSizeCheck"
          :orderId="titleUploadData.orderId"
          :OrderDetail="xGrid"/>
    </el-dialog>
@@ -1198,7 +1371,5 @@
    height: 90%;
    width: 100%;
  }
</style>