guoyuji
2024-09-06 1e9a52cf65f364b4332a008210700adbaea0c35e
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -10,6 +10,11 @@
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
import OrderOtherMoney from "@/components/sd/order/OrderOtherMoney.vue";
import footSum from "@/hook/footSum";
import {changeFilterEvent,filterChanged} from "@/hook"
import companyInfo from "@/stores/sd/companyInfo";
import {multiply} from "@/utils/decimal";
//语言获取
const { t } = useI18n()
@@ -18,8 +23,11 @@
const userStore = useUserInfoStore()
const username = userStore.user.userName
const userid = userStore.user.userId
const company = companyInfo()
let produceList = ref([])
let cellArea = ref()
let otherMoneyVisible = ref(false)
let otherMoney = ref(null)
const hasDecimal=(value)=>{
@@ -30,6 +38,7 @@
const hasDecimalhtml=(item,row)=>{
  let aa=item.split('.').length
  if (aa===2){
    return row[item.split('.')[0]][item.split('.')[1]]
  }else if(aa===3){
    return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]]
@@ -41,13 +50,16 @@
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  deliveryOtherMoney:[],
  paymentTerms:[],
  payMethod:[]
})
// 定义表头上传数据
let titleUploadData = ref({
  deliveryId:'',
  deliveryState:'',
  stockState:'',
  paymentTerms:'',
  customerId:'',
  customerName:'',
@@ -63,6 +75,9 @@
  deliveryDate:'',
  salesmanId:'',
  salesman:'',
  freight:'',
  freightPrice:'',
  freightQuantity:'',
  creatorId:userStore.user.userid,
  creator:userStore.user.userName
})
@@ -92,7 +107,10 @@
    remarks:'',
    createTime:'',
    deliveryDate:'',
    creator:''
    creator:'',
    freight:'',
    freightPrice:'',
    freightQuantity:'',
  },
  finishedGoodsInventory:{
    quantityAvailable:'',
@@ -102,26 +120,37 @@
  },
})
const initOrder = async ()=> {
//页面第一次加载
request.get(`/basicData/BasicDataByType/delivery`).then((res) => {
  await request.get(`/basicData/BasicDataByType/delivery`).then((res) => {
  if(res.code==200){
    titleSelectJson.value=deepClone(res.data)
    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)
  }
})
    if (res.code == 200) {
      titleSelectJson.value = deepClone(res.data)
      //其他金额
      otherMoney.value = titleSelectJson.value.deliveryOtherMoney[0]
      //let columns = []
      otherMoney.value.forEach(item => {
        let column = {field: `otherColumns.${item.column}`, width: 50, title: item.alias, editRender: {name: 'input'}}
        //columns.push(column)
        gridOptions.columns.push(column)
      })
      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)
    }
  })
}
const  xGrid = ref();
const  number = ref();
onMounted(()=>{
onMounted( async()=>{
  await initOrder()
  //启用表格拖动选中
  addListener(xGrid.value,gridOptions,cellArea.value)
  //发货新增
@@ -139,8 +168,9 @@
        titleUploadData.value=deepClone(res.data.title)
        titleUploadData.value.paymentTerms = titleSelectJson.value.paymentTerms[0].basicName
        titleUploadData.value.payMethod = titleSelectJson.value.payMethod[0].basicName
        titleUploadData.value.deliveryId=""
        const today = new Date
        today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000))
        today.setTime(today.getTime() )
        titleUploadData.value.deliveryDate=today.getFullYear() +
            '-' + ("0" + (today.getMonth() + 1)).slice(-2)
            + '-' + ("0" + today.getDate()).slice(-2)
@@ -181,7 +211,7 @@
      if(res.code==200){
        pageTotal.value=res.data.total
        titleUploadData.value=deepClone(res.data.delivery)
        titleUploadData.value.deliveryId=str
        //根据审核状态显示审核按钮或者是反审按钮
@@ -192,8 +222,22 @@
        if(titleUploadData.value.deliveryState===0){
          gridOptions.toolbarConfig.buttons[2].disabled = true
        }
        if(titleUploadData.value.stockState!==0){
          gridOptions.toolbarConfig.buttons[2].disabled = true
        }
        pageNum=1
        produceList = deepClone(res.data.data)
        const orderDetails = res.data.data
        orderDetails.forEach(item => {
          item.otherColumns = JSON.parse(item.otherColumns)
        })
        otherMoney.value =res.data.orderOtherMoneyList
        titleUploadData.value.creator=userStore.user.userName
        titleUploadData.value.creatorId=userStore.user.userId
        xGrid.value.reloadData(orderDetails)
        xGrid.value.loadData(produceList)
        //隐藏复选框
        /*xGrid.value.hideColumn("select")
@@ -217,76 +261,6 @@
//定义当前页数
let pageNum=$ref(1)
const changeFilterEvent = (event, option, $panel) => {
  // 手动触发筛选
  $panel.changeOption(event, !!option.data, option)
}
//前端筛选
const filterChanged = ({ option, row, column }) => {
  if (option.data) {
    let param = column.field
    if(param.indexOf(".")>-1){
      let  array = param.split('.')
      return row[array[0]][array[1]].toString().toLowerCase().indexOf(option.data) > -1
    }else{
      return row[param].toString().toLowerCase().indexOf(option.data) > -1
    }
  }
  return true
  //@filter-change="filterChanged"
  /*gridOptions.loading=true
  //筛选条件发生变化条件发生变化
  let value = column.datas[0]!=undefined?column.datas[0]:''
  value = value.trim()
  //判断是否存在外键
  if (column.property.indexOf('.')>-1){
    const  columnArr = column.property.split('.')
    filterData.value[columnArr[0]] = {
      [columnArr[1]]:value
    }
  }else{
    filterData.value[column.property] = value
  }
  const str = route.query.deliveryID
  if (typeof str != 'undefined' && str != null && str !== '' && str !== '\n' && str !== '\r'){
    filterData.value.deliveryDetail.deliveryId=str
    request.post("/Delivery/getseletShippingOrderDetail/1/100",filterData.value).then((res) => {
      if(res.code==200){
        pageTotal.value=res.data.total
        pageNum=1
        produceList = deepClone(res.data.data)
        xGrid.value.reloadData(produceList)
        gridOptions.loading=false
      }else{
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
  }
  const orderId = route.query.orderId
  if (typeof orderId !== 'undefined' && orderId !== null && orderId !== '' && orderId !== '\n' && orderId !== '\r'){
    filterData.value.orderId=orderId
    request.post("/Delivery/getseletShippingOrderDetails/1/100",filterData.value).then((res) => {
      if(res.code==200){
        pageTotal.value=res.data.total
        pageNum=1
        produceList = deepClone(res.data.data)
        xGrid.value.loadData(produceList)
        gridOptions.loading=false
      }else{
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    })
  }*/
}
@@ -297,7 +271,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'CreateDelivery',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
@@ -308,7 +282,8 @@
    body: {
      options: [
        [
          { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          //{ code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }
        ]
      ]
    }
@@ -323,30 +298,34 @@
  customConfig: {
    storage: true
  },
  checkboxConfig:{checkAll:true},
  mouseConfig:{selected: true},//鼠标选中
  keyboardConfig:{isArrow: true, isDel: true, isEnter: true, isTab: true, isEdit: true, isChecked: true},
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
    trigger: 'dblclick',
    mode: 'cell',
    showStatus: true,
    showIcon:false
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 60},
    //{type:'expand',fixed:"left",slots: { content:'content' },width: 60},
    {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
    {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:120,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    //{field: 'buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:120,   title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:120,  title: t('order.price'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:120,  title: t('order.price'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.storageRegion',width:120,  title: t('productStock.inventoryArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.money',width:120,  title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.actualSignalArea',width:120,   title: t('productStock.singlePieceArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:120,   title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -372,20 +351,24 @@
    custom: true
  },
  footerMethod ({ columns, data }) {//页脚函数
    let footList=['deliveryDetail.quantity','quantity','deliveryDetail.money']
    //let footList=[]
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return t('basicData.total')
        }
        // if (props.tableProp.footList.includes(column.field)) {
        //   return sumNum(data, column.field)
        // }
        if (footList.includes(column.field)) {
          return footSum(data, column.field)
        }
        return ''
      })
    ]
  }
})
const gridEvents = {
  async toolbarButtonClick({code}) {
@@ -420,25 +403,47 @@
            ElMessage.error(t('delivery.pleaseEnterThePaymentMethod'))
            return
          }
          const freightPrice = titleUploadData.value.freightPrice
          if(freightPrice=== null || freightPrice === undefined || freightPrice === ''){
            titleUploadData.value.freightPrice=0
          }
          const freightQuantity = titleUploadData.value.freightQuantity
          if(freightQuantity=== null || freightQuantity === undefined || freightQuantity === ''){
            titleUploadData.value.freightQuantity=0
          }
          let flowData = ref({
            delivery: selectRecords,
            title: titleUploadData.value,
            deliveryId: route.query.deliveryID
            deliveryId: route.query.deliveryID,
            otherMoney:otherMoney.value,
            deliveryIdType:company.deliveryIdType
          })
          console.log(flowData)
           request.post("/Delivery/insertDelivery", flowData.value).then((res) => {
             if(res.code==200){
             if(res.code==200 && res.data==="true"){
               ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully'))
               router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
               //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
               if(titleUploadData.value.deliveryId.trim()===""){
                 router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
               }else{
                 router.push({path:'/main/delivery/createDelivery',query:{
                     deliveryID:titleUploadData.value.deliveryId,
                     random:Math.random()}})
               }
             }else if(res.data==="false1"){
               ElMessage.warning(t('delivery.pleaseMsg1'))
             }else if(res.data==="false2"){
               ElMessage.warning("订单存在已发货请刷新界面")
             }else if(res.data==="false3"){
               ElMessage.warning("数据不存在")
             }else{
               ElMessage.warning(res.msg)
               router.push("/login")
               ElMessage.warning(t('basicData.msg.saveFail'))
             }
           }).catch((err)=>{
             ElMessage.error(t('basicData.msg.ServerConnectionError'))
             router.push("/login")
           })
          break
        }
@@ -449,13 +454,18 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
            if (res.code == 200 && res.data===true) {
              ElMessage.success(t('basicData.msg.ReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
              //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
              router.push({path:'/main/delivery/createDelivery',query:{
                  deliveryID:titleUploadData.value.deliveryId,
                  random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
              router.push("/login")
              ElMessage.warning(t('basicData.msg.reviewFail'))
            }
          }).catch((err)=>{
            ElMessage.error(t('basicData.msg.ServerConnectionError'))
            router.push("/login")
          })
          break
        }
@@ -466,13 +476,18 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
            if (res.code == 200 && res.data===true) {
              ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
              //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
              router.push({path:'/main/delivery/createDelivery',query:{
                  deliveryID:titleUploadData.value.deliveryId,
                  random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
              router.push("/login")
              ElMessage.warning(t('basicData.msg.reviewFail'))
            }
          }).catch((err)=>{
            ElMessage.error(t('basicData.msg.ServerConnectionError'))
            router.push("/login")
          })
          break
        }
@@ -509,19 +524,41 @@
          }
          break
        }
        case 'otherMoney' :{
          otherMoneyVisible.value=true
          break
        }
      }
    }
  }
}
//计算金钱
const countMoney = (list) => {
  let  countMoney = 0
  list.forEach((item)=>{
    countMoney += parseFloat(item.grossAmount)
  })
  // otherMoney.value.forEach(item => {
  //   countMoney+=item.quantity*item.price
  // })
  return parseFloat((countMoney).toFixed(2))
}
//关闭其他金额界面
const refOtherMoney = ref()
const closeOtherMoneyDialog = async (done) => {
  const flag = await refOtherMoney.value.validate()
  if(flag){
    done()
    //titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
  }
}
/*数据校验*/
const validRules = ref({
  quantity: [
    { type: 'number', min: 0, message: t('delivery.pleaseEnterANumericalValueGreaterThanOrEqualTo0') }
  ],
    "deliveryDetail.quantity": [{
  "deliveryDetail.quantity": [{
       validator (e) {
          if (e.row.deliveryDetail.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
            return new Error(t('delivery.theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity'))
@@ -535,9 +572,29 @@
       }
    }]
  }],
  price: [
    {
      validator ({ cellValue }) {
        const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
        if ( !regex.test(cellValue) ) {
          return new Error(t('basicData.msg.range99999Dec2') )
        }
      }
    }
  ],
})
const editClosedEvent = ({ row, column }) => {
  if (['deliveryDetail.quantity'].includes(column.property)) {
    if(parseInt(row.deliveryDetail.quantity)===0){
      xGrid.value.setCheckboxRow(row, false);
    }
  }
}
</script>
@@ -554,7 +611,7 @@
        <el-col  :span="5"><el-input v-model="titleUploadData.project" :readonly="true"></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>{{$t('order.project')}}:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.paymentTerms')}}:</el-text></el-col>
        <el-col  :span="3">
          <el-select v-model="titleUploadData.paymentTerms"  clearable placeholder=""  >
            <el-option
@@ -572,6 +629,8 @@
          <el-date-picker
              v-model="titleUploadData.payDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
@@ -604,6 +663,8 @@
          <el-date-picker
              v-model="titleUploadData.deliveryDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
      </el-row>
@@ -612,6 +673,12 @@
        <el-col  :span="3"><el-input v-model="titleUploadData.salesman" :readonly="true"/></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.shipper')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.creator" :readonly="true"/></el-col>
        <el-col  :span="1"><el-text>{{$t('delivery.freightPrice')}}:</el-text></el-col>
        <el-col  :span="1"><el-input v-model="titleUploadData.freightPrice" /></el-col>
        <el-col  :span="1"><el-text>{{$t('delivery.freightQuantity')}}:</el-text></el-col>
        <el-col  :span="1"><el-input v-model="titleUploadData.freightQuantity" /></el-col>
        <el-col  :span="1"><el-text>{{$t('delivery.freight')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.freight" :readonly="true"/></el-col>
      </el-row>
    </div>
    <div class="order-detail">
@@ -622,6 +689,7 @@
          v-bind="gridOptions"
          v-on="gridEvents"
          :edit-rules="validRules"
          @edit-closed="editClosedEvent"
      >
        <template #num1_filter="{ column, $panel }">
@@ -650,6 +718,18 @@
      <span class="vxe-table--cell-active-area"  ></span>
    </div>
    <el-dialog v-model="otherMoneyVisible"
               :title="$t('basicData.otherAmounts')"
               :close-on-click-modal="false"
               :close-on-press-escape="false"
               :before-close="closeOtherMoneyDialog"
               style="width: 614px;height:445px ">
      <order-other-money
          ref="refOtherMoney"
          :otherMoney="otherMoney"
          style="width: 100%;height: 100%" />
    </el-dialog>
  </div>
</template>
@@ -682,4 +762,9 @@
  -ms-user-select: none;
  user-select: none;
}
:deep(#product .el-dialog__body){
  height: 90%;
  width: 100%;
}
</style>