chenlu
2024-03-13 033fb309b323e1e6b50d79bc6dd628d427e3ac11
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -9,6 +9,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
const userStore = useUserInfoStore()
@@ -327,39 +331,39 @@
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 60},
    {field: 'select',type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', title: '自序', width: 80 ,fixed:"left"},
    {field: 'orderId',width:120,  title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.batch',width:120,  title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: '库存可发',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:120,  title: '未发数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: '总数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: '发货数量',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: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:120,  title: '单价',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.storageRegion',width:120,  title: '库区',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.money',width:120,  title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: '宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: '高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.actualSignalArea',width:120,   title: '单片面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:120,   title: '总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:120,  title: '结算单片面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:120,  title: '结算总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:120,  title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.deliveryDetailRemakes',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'edgingType',width:120,  title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'perimeter',width:120,  title: '周长',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {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: '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: '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: '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},
    {field: 'computeArea',width:120,  title: t('order.computeArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.deliveryDetailRemakes',width:120,  title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'edgingType',width:120,  title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'perimeter',width:120,  title: t('productStock.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '保存',status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': '审核',status: 'primary'},
      {'code': 'CounterExamination', 'name': '反审',status: 'primary'}
      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'},
      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}
    ],
    /*import: false,
   export: true,
@@ -371,7 +375,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `页数:${pageNum}/${pageTotal.value}`
          return t('basicData.total')
        }
        // if (props.tableProp.footList.includes(column.field)) {
        //   return sumNum(data, column.field)
@@ -392,28 +396,28 @@
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          const errMap = await $grid.validate(selectRecords)
          if (errMap) {
            ElMessage.warning("数据校验失败")
            ElMessage.warning(t('productStock.dataVerificationFailed'))
            return
          }
          //表头数据校验
          const project = titleUploadData.value.project
          if(project === null || project === undefined || project === ''){
            ElMessage.error('输入项目名称!')
            ElMessage.error(t('delivery.pleaseEnterTheAmountOfFunds'))
            return
          }
          const paymentTerms = titleUploadData.value.paymentTerms
          if(paymentTerms === null || paymentTerms === undefined || paymentTerms === ''){
            ElMessage.error('请选择付款条件!')
            ElMessage.error(t('delivery.pleaseSelectPaymentTerms'))
            return
          }
          const payMethod = titleUploadData.value.payMethod
          if(payMethod === null || payMethod === undefined || payMethod === ''){
            ElMessage.error('请输入收款方式!')
            ElMessage.error(t('delivery.pleaseEnterThePaymentMethod'))
            return
          }
@@ -429,7 +433,7 @@
          console.log(flowData)
           request.post("/Delivery/insertDelivery", flowData.value).then((res) => {
             if(res.code==200){
               ElMessage.success("发货单提交成功")
               ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully'))
               router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
             }else{
               ElMessage.warning(res.msg)
@@ -446,7 +450,7 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
              ElMessage.success("审核成功")
              ElMessage.success(t('basicData.msg.ReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
@@ -463,7 +467,7 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
              ElMessage.success("反审成功")
              ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
@@ -514,19 +518,19 @@
/*数据校验*/
const validRules = ref({
  quantity: [
    { type: 'number', min: 0, message: '请输入大于等于0的数值' }
    { type: 'number', min: 0, message: t('delivery.pleaseEnterANumericalValueGreaterThanOrEqualTo0') }
  ],
    "deliveryDetail.quantity": [{
       validator (e) {
          if (e.row.deliveryDetail.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
            return new Error('发货数量不能大于库存数')
            return new Error(t('delivery.theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity'))
          }else if (e.row.deliveryDetail.quantity ==="") {
            return new Error('发货数量不能为空或者是0')
            return new Error(t('delivery.theShipmentQuantityCannotBeEmptyOr0'))
         }
         const regex = /^[1-9]\d*$/g
         if ( !regex.test(e.row.deliveryDetail.quantity) ) {
           return new Error('请输入正整数')
           return new Error(t('productStock.pleaseEnterAPositiveInteger'))
         }
       }
@@ -542,15 +546,15 @@
  <div class="main-div">
    <div class="order-primary" style="background-color: white">
      <el-row>
        <el-col  :span="2"><el-text>客户编码:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
        <el-col  :span="3"><el-input style="font-size: large;color: #181818" v-model="titleUploadData.customerId" :readonly="true" ></el-input></el-col>
        <el-col  :span="2"><el-text>客户名称:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerName')}}:</el-text></el-col>
        <el-col  :span="5"><el-input  v-model="titleUploadData.customerName" :readonly="true"></el-input></el-col>
        <el-col  :span="2"><el-text>项目名称:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
        <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>付款条件:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.project')}}:</el-text></el-col>
        <el-col  :span="3">
          <el-select v-model="titleUploadData.paymentTerms"  clearable placeholder=""  >
            <el-option
@@ -561,20 +565,20 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>联系人:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.contacts')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.contacts"/></el-col>
        <el-col  :span="2"><el-text>收款日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.paymentDate')}}:</el-text></el-col>
        <el-col  :span="5">
          <el-date-picker
              v-model="titleUploadData.payDate"
              type="date"
              placeholder="选择日期"/>
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>收款方式:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.paymentMethod')}}:</el-text></el-col>
        <el-col  :span="3">
          <el-select v-model="titleUploadData.payMethod"  clearable placeholder=""  >
            <el-option
@@ -585,28 +589,28 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>联系电话:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.telephone')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.contactNumber"/></el-col>
        <el-col  :span="2"><el-text>送货地址:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.address')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.deliveryAddress"/></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>备注:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('basicData.remarks')}}:</el-text></el-col>
        <el-col  :span="3"><el-input v-model="titleUploadData.remarks"/></el-col>
        <el-col  :span="2"><el-text>报表日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.deliveryReportDate')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.createTime" :readonly="true"></el-input></el-col>
        <el-col  :span="2"><el-text>发货报表日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.deliveryDate')}}:</el-text></el-col>
        <el-col  :span="5">
          <el-date-picker
              v-model="titleUploadData.deliveryDate"
              type="date"
              placeholder="选择日期"/>
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>业务员:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.salesman')}}:</el-text></el-col>
        <el-col  :span="3"><el-input v-model="titleUploadData.salesman" :readonly="true"/></el-col>
        <el-col  :span="2"><el-text>发货员:</el-text></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-row>
    </div>
@@ -671,4 +675,11 @@
  width: 100%;
  height: 70%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>