cuilei
9 小时以前 83f051915bbe4562abfb5f1589642dd393ea8490
Merge remote-tracking branch 'origin/master'
已添加1个文件
已修改5个文件
783 ■■■■ 文件已修改
src/views/cms/CuttingInboundList.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/CuttingInventoryList.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/modules/CuttingInboundModal.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/MesMaterialTransferRequestList.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/modules/MesMaterialTransferRequestForm.vue 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/modules/WorkOrderSelectModal.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/CuttingInboundList.vue
@@ -21,8 +21,26 @@
                  dict="sys_user,realname,id,del_flag!=1"
                />
              </a-form-item>
            </a-col>
            <a-col
          </a-col>
          <a-col :md="6" :sm="8">
            <a-form-item label="确认人">
              <j-search-select-tag
                v-model="queryParam.confirmer"
                placeholder="请选择确认人"
                dict="sys_user,realname,id,del_flag!=1"
              />
            </a-form-item>
          </a-col>
<!--          <a-col :md="6" :sm="8">-->
<!--            <a-form-item label="入库时间">-->
<!--              <j-date-->
<!--                v-model="queryParam.receiveTime"-->
<!--                type="date"-->
<!--                value-format="YYYY-MM-DD"-->
<!--              />-->
<!--            </a-form-item>-->
<!--          </a-col>-->
          <a-col
            :md="6"
            :sm="8"
          >
@@ -99,8 +117,7 @@
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a @click="handleEdit(record)" :disabled="record.orderStatus == '2'">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
@@ -108,7 +125,15 @@
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
<!--              <a-menu-item v-if="record.orderStatus != '2'">-->
<!--                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">-->
<!--                  <a>删除</a>-->
<!--                </a-popconfirm>-->
<!--              </a-menu-item>-->
              <a-menu-item v-if="record.orderStatus != '2'">
                  <a @click="handleSubmit(record.id)" :disabled="record.orderStatus == '3'">提交</a>
              </a-menu-item>
              <a-menu-item v-if="record.orderStatus != '2'">
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
@@ -138,11 +163,11 @@
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import CuttingInboundModal from './modules/CuttingInboundModal'
  import CuttingInboundDetailList from './CuttingInboundDetailList'
  import { downFile } from '@api/manage'
  import { downFile, httpAction } from '@api/manage'
  import Vue from 'vue'
  import { ACCESS_TOKEN } from '@/store/mutation-types'
  import store from '@/store'
  import { Modal } from 'ant-design-vue';
  export default {
    name: 'CuttingInboundList',
@@ -222,6 +247,7 @@
          deleteBatch: "/cms/cuttingInbound/deleteBatch",
          exportXlsUrl: "/cms/cuttingInbound/exportXls",
          importExcelUrl: "cms/cuttingInbound/importExcel",
          submit: "/cms/cuttingInbound/submit",
        },
        dictOptions:{},
        superFieldList:[],
@@ -238,10 +264,13 @@
      },
    },
    methods: {
      searchQuery() {
        this.loadData(1);
      },
      searchReset() {
      this.queryParam = {}
      this.$refs.cuttingInbounDetailList.dataSource = []
      this.loadData(1);
        this.queryParam = {}
        this.$refs.cuttingInbounDetailList.dataSource = []
        this.loadData(1);
      },
      handleEdit: function (record) {
        this.$refs.modalForm.edit(record)
@@ -258,6 +287,7 @@
        this.$refs.modalForm.title="详情";
        this.$refs.modalForm.disableSubmit = true;
      },
      // è‡ªå®šä¹‰è¡Œç‚¹å‡»äº‹ä»¶
      customRow(record) {
        return {
@@ -289,9 +319,6 @@
        if(this.selectedRowKeys && this.selectedRowKeys.length>0){
          param['selections'] = this.selectedRowKeys.join(",")
        }
        console.log("导出参数",param)
        downFile(this.url.exportXlsUrl,param).then((data)=>{
          if (!data) {
@@ -382,6 +409,212 @@
          }
        }
      },
      /**
       *  å•据提交
       */
      handleSubmit: function(id) {
        if (!this.url.submit) {
          this.$message.error('请设置url.submit属性!')
          return
        }
        let targetId = id; // ä»Žå‚数获取ID
        // å¦‚果没有通过参数传递ID,则检查选中的记录
        if (!targetId) {
          if (this.selectedRowKeys.length != 1) {
            this.$message.warning('请选择一条记录!')
            return
          } else {
            targetId = this.selectedRowKeys[0]
          }
        }
        // å°†å‚数作为查询参数附加到URL上
        let httpurl = this.url.submit + '?orderId=' + encodeURIComponent(targetId)
        let method = 'get'
        var params = {}  // æ¸…空params,因为参数已经在URL中传递
        const that = this
        this.$confirm({
          title: '确认提交!',
          // content: '正在提交数据,请耐心等待...',
          okText: '确认',
          cancelText: '取消',
          onOk() {
            // æ˜¾ç¤ºåŠ è½½æç¤º
            const hide = that.$message.loading('正在提交数据,请耐心等待...', 0);
            // å‘送请求
            return httpAction(httpurl, params, method).then((res) => {
              hide(); // éšè—åŠ è½½æç¤º
              if (res.success) {
                that.$message.success(res.message)
                that.loadData()
              } else {
                that.$message.warning(res.message)
              }
            }).catch(error => {
              hide(); // éšè—åŠ è½½æç¤º
              that.$message.error('提交失败: ' + error.message)
            }).finally(() => {
              that.loading = false
            })
          }
        })
      },
      // /**
      //  *  å•据提交(支持实时进度更新)
      //  */
      // handleSubmit: function(id) {
      //   if (!this.url.submit) {
      //     this.$message.error('请设置url.submit属性!')
      //     return
      //   }
      //
      //   let targetId = id; // ä»Žå‚数获取ID
      //   // å¦‚果没有通过参数传递ID,则检查选中的记录
      //   if (!targetId) {
      //     if (this.selectedRowKeys.length != 1) {
      //       this.$message.warning('请选择一条记录!')
      //       return
      //     } else {
      //       targetId = this.selectedRowKeys[0]
      //     }
      //   }
      //
      //   const that = this
      //
      //   this.$confirm({
      //     title: '确认提交!',
      //     content: '提交过程中可能需要较长时间,请耐心等待...',
      //     okText: '确认',
      //     cancelText: '取消',
      //
      //     onOk() {
      //       // åˆ›å»ºè¿›åº¦æ¡æ¨¡æ€æ¡†
      //       let percent = 0;
      //       let totalTools = 0; // åˆ€å…·æ€»æ•°
      //       let processedTools = 0; // å·²å¤„理刀具数
      //
      //       // ä½¿ç”¨ this.$info åˆ›å»ºæ¨¡æ€æ¡†
      //       const modal = that.$info({
      //         title: '正在提交数据',
      //         content: that.$createElement('div', [
      //           that.$createElement('p', '正在处理刀具入库,请稍候...'),
      //           that.$createElement('a-progress', {
      //             props: {
      //               percent: percent,
      //               status: 'active'
      //             }
      //           }),
      //           // that.$createElement('p', {
      //           //   style: {
      //           //     marginTop: '10px'
      //           //   }
      //           // }, `进度: ${processedTools}/${totalTools} æŠŠåˆ€å…·`)
      //         ]),
      //         okButtonProps: { style: { display: 'none' } }, // éšè—ç¡®è®¤æŒ‰é’®
      //         cancelText: '取消',
      //         closable: false, // ç¦æ­¢å…³é—­æ¨¡æ€æ¡†
      //       });
      //
      //       // æ›´æ–°è¿›åº¦æ˜¾ç¤ºå‡½æ•°
      //       const updateProgress = () => {
      //         if (totalTools > 0) {
      //           percent = Math.round((processedTools / totalTools) * 100);
      //           // ç¡®ä¿è¿›åº¦ä¸è¶…过90%,保留最后10%给最终完成
      //           percent = percent > 90 ? 90 : percent;
      //         }
      //
      //         modal.update({
      //           content: that.$createElement('div', [
      //             that.$createElement('p', '正在处理刀具入库,请稍候...'),
      //             that.$createElement('a-progress', {
      //               props: {
      //                 percent: percent,
      //                 status: 'active'
      //               }
      //             }),
      //             // that.$createElement('p', {
      //             //   style: {
      //             //     marginTop: '10px'
      //             //   }
      //             // }, `进度: ${processedTools}/${totalTools} æŠŠåˆ€å…·`)
      //           ])
      //         });
      //       };
      //
      //       // å‘送请求
      //       let httpurl = that.url.submit + '?orderId=' + encodeURIComponent(targetId)
      //
      //       return httpAction(httpurl, {}, 'get').then((res) => {
      //         // æ ¹æ®åŽç«¯è¿”回的总刀具数设置进度
      //         if (res.success) {
      //           // å¦‚果后端返回了总刀具数
      //           if (res.result && res.result.quantity !== undefined) {
      //             totalTools = res.result.quantity;
      //             processedTools = res.result.totalSubmitted || 0; //已处理刀具数
      //           }
      //           // å¦‚果后端返回了明细列表,根据receive_number计算总数量
      //           else if (res.result && res.result.detailList) {
      //             // æ ¹æ®æ¯ä¸ªæ˜Žç»†çš„receive_number累加计算总刀具数
      //             totalTools = res.result.detailList.reduce((total, detail) => {
      //               return total + (detail.receiveNumber || 0);
      //             }, 0);
      //             processedTools = totalTools; // å·²å¤„理数量
      //           }
      //
      //           // æ›´æ–°è¿›åº¦æ˜¾ç¤º
      //           percent = 100; // ç›´æŽ¥æ˜¾ç¤º100%完成
      //           updateProgress();
      //
      //           // æ˜¾ç¤ºå®ŒæˆçŠ¶æ€
      //           setTimeout(() => {
      //             modal.update({
      //               content: that.$createElement('div', [
      //                 that.$createElement('p', '正在处理刀具入库,请稍候...'),
      //                 that.$createElement('a-progress', {
      //                   props: {
      //                     percent: percent,
      //                     status: 'success'
      //                   }
      //                 }),
      //                 that.$createElement('p', {
      //                   style: {
      //                     marginTop: '10px'
      //                   }
      //                 }, totalTools > 0 ?
      //                   `进度: ${processedTools}/${totalTools} æŠŠåˆ€å…·` :
      //                   '处理完成')
      //               ])
      //             });
      //
      //             // å»¶è¿Ÿå…³é—­æ¨¡æ€æ¡†
      //             setTimeout(() => {
      //               modal.destroy();
      //               that.$message.success(res.message || '提交成功');
      //               that.loadData();
      //             }, 500);
      //           }, 300);
      //         } else {
      //           // å¤„理错误情况
      //           modal.destroy();
      //           that.$message.warning(res.message || '提交失败');
      //         }
      //       }).catch(error => {
      //         modal.destroy();
      //         that.$message.error('提交失败: ' + error.message)
      //       }).finally(() => {
      //         that.loading = false
      //       })
      //     }
      //   })
      // },
    }
  }
</script>
src/views/cms/CuttingInventoryList.vue
@@ -147,7 +147,7 @@
          {
            title:'刀具编码',
            align:"center",
            dataIndex: 'cuttingId'
            dataIndex: 'cuttingId_dictText'
          },
          {
            title:'刀具条码',
@@ -179,7 +179,7 @@
          deleteBatch: "/cms/cuttingInventory/deleteBatch",
          exportXlsUrl: "/cms/cuttingInventory/exportXls",
          importExcelUrl: "cms/cuttingInventory/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
src/views/cms/modules/CuttingInboundModal.vue
@@ -60,9 +60,9 @@
        </a-row>
      </a-form>
    </a-spin>
    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()"
      >选择刀具</a-button
    >
    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()">
      é€‰æ‹©åˆ€å…·
    </a-button>
    <a-table
      ref="table"
      bordered
@@ -265,6 +265,13 @@
        this.$message.error('请先选择入库刀具')
        return
      }
      // æ ¡éªŒå…¥åº“数量是否填写
      for(let i=0; i<this.dataSource.length; i++) {
        if (!this.dataSource[i].receiveNumber || this.dataSource[i].receiveNumber <= 0) {
          this.$message.error(`必须填写入库数量`)
          return
        }
      }
      const that = this
      // è§¦å‘表单验证
      this.form.validateFields((err, values) => {
src/views/mes/MesMaterialTransferRequestList.vue
@@ -106,9 +106,9 @@
          dataIndex: 'requestCode'
        },
        {
          title: '工单ID',
          title: '任务号',
          align: 'center',
          dataIndex: 'workOrderId'
          dataIndex: 'workOrderId_dictText'
        },
        {
          title: 'SAP预留号',
@@ -116,9 +116,34 @@
          dataIndex: 'reservationCode'
        },
        {
          title: '物料编码',
          align: 'center',
          dataIndex: 'materialNumber'
        },
        {
          title: '物料名称',
          align: 'center',
          dataIndex: 'materialName'
        },
        {
          title: '理论拉动数量',
          align: 'center',
          dataIndex: 'specifiedQuantity'
        },
        {
          title: '实际拉动数量',
          align: 'center',
          dataIndex: 'actualQuantity'
        },
        {
          title: '发布状态',
          align: 'center',
          dataIndex: 'publishStatus_dictText'
        },
        {
          title: '发布时间',
          align: 'center',
          dataIndex: 'publishTime'
        },
        {
          title: '请求状态',
@@ -133,17 +158,17 @@
        {
          title: '原库存地',
          align: 'center',
          dataIndex: 'originalWarehouseId'
          dataIndex: 'originalWarehouseId_dictText'
        },
        {
          title: '目标库存地',
          align: 'center',
          dataIndex: 'targetWarehouseId'
          dataIndex: 'targetWarehouseId_dictText'
        },
        {
          title: '优先级(拉动类型)',
          title: '拉动类型',
          align: 'center',
          dataIndex: 'priority_dictText'
          dataIndex: 'materialTransferCategory_dictText'
        },
        {
          title: '最晚配送时间',
src/views/mes/modules/MesMaterialTransferRequestForm.vue
@@ -9,33 +9,44 @@
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="起始库存地点" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="originalWarehouseId">
              <j-dict-select-tag type="list" v-model="model.originalWarehouseId" dictCode="original_warehouse_list" placeholder="请选择起始库存地点" />
            <a-form-model-item label="起始库存地点" :labelCol="labelCol" :wrapperCol="wrapperCol"
                               prop="originalWarehouseId">
              <j-dict-select-tag type="list" v-model="model.originalWarehouseId" dictCode="original_warehouse_list"
                                 placeholder="请选择起始库存地点" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="任务号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workOrderId">
              <a-input v-model="model.workOrderId" placeholder="请输入工单ID"  ></a-input>
            <a-form-model-item label="任务号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workOrderCode">
              <work-order-select-modal :workOrder="workOrderObj" :submitDisabled="formDisabled"
                                       orderStatus="PUBLISHED" @ok="selectConfirm"></work-order-select-modal>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="目标库存地点" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="targetWarehouseId">
              <a-input v-model="model.targetWarehouseId" placeholder="自动获取" readOnly ></a-input>
            <a-form-model-item label="目标库存地点" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseName">
              <a-input v-model="model.warehouseName" placeholder="自动获取" readOnly></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="拉动类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialTransferCategory">
              <j-dict-select-tag type="list" v-model="model.materialTransferCategory" dictCode="material_transfer_category" placeholder="请选择拉动类型" />
            <a-form-model-item label="拉动类型" :labelCol="labelCol" :wrapperCol="wrapperCol"
                               prop="materialTransferCategory">
              <j-dict-select-tag type="list" v-model="model.materialTransferCategory"
                                 dictCode="material_transfer_category" placeholder="请选择拉动类型" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="最晚配送时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="latestDeliveryTime">
              <j-date placeholder="请选择最晚配送时间"  v-model="model.latestDeliveryTime" :show-time="false" date-format="YYYY-MM-DD" style="width: 100%" />
            <a-form-model-item label="最晚配送时间" :labelCol="labelCol" :wrapperCol="wrapperCol"
                               prop="latestDeliveryTime">
              <a-date-picker placeholder="请选择最晚配送时间" v-model="model.latestDeliveryTime"
                             value-format="YYYY-MM-DD" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="拉动物料" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialNumber">
              <j-dict-select-tag type="list" v-model="model.materialNumber" dictCode="priority" placeholder="请选择拉动物料" />
              <a-select v-model="model.materialNumber" placeholder="请选择拉动物料" @change="handleMaterialNumberChange">
                <a-select-option v-for="item in materialList" :value="item.materialNumber" :title="item.materialName" :key="item.materialNumber">
                  {{ item.materialName }}
                </a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
@@ -51,104 +62,188 @@
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
import { getAction, httpAction } from '@/api/manage'
import WorkOrderSelectModal from '@/views/mes/modules/WorkOrderSelectModal.vue'
import moment from 'moment'
  export default {
    name: 'MesMaterialTransferRequestForm',
    components: {
export default {
  name: 'MesMaterialTransferRequestForm',
  components: {
    WorkOrderSelectModal
  },
  props: {
    //表单禁用
    disabled: {
      type: Boolean,
      default: false,
      required: false
    }
  },
  data() {
    return {
      model: {},
      labelCol: {
        xs: { span: 24 },
        sm: { span: 6 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      confirmLoading: false,
      validatorRules: {
        originalWarehouseId: [
          { required: true, message: '起始库存地点必选', trigger: 'change' }
        ],
        workOrderCode: [
          { required: true, message: '任务号必选', trigger: 'change' }
        ],
        materialNumber: [
          { required: true, message: '拉动物料必选', trigger: 'change' }
        ],
        specifiedQuantity: [
          { required: true, message: '拉动数量必填', trigger: 'change' }
        ],
        materialTransferCategory: [
          { required: true, message: '拉动类型必选', trigger: 'change' }
        ]
      },
      url: {
        add: '/mes/mesMaterialTransferRequest/add',
        edit: '/mes/mesMaterialTransferRequest/edit',
        queryById: '/mes/mesMaterialTransferRequest/queryById',
        queryByMaterialNumber: '/pms/processBillMaterialsDetail/queryByMaterialNumber',
        queryByFactoryId: '/base/lineSideWarehouse/queryByFactoryId',
        workOrderQuery: '/mes/mesProductionWorkOrder/queryById'
      },
      materialList: [], //物料列表
      workOrderObj: {}, //工单对象
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    }
  },
  created() {
    //备份model原始值
    this.modelDefault = JSON.parse(JSON.stringify(this.model))
  },
  methods: {
    add() {
      this.modelDefault.latestDeliveryTime = moment()
      this.edit(this.modelDefault)
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          originalWarehouseId: [
            { required: true, message: '起始库存地点必选', trigger: 'change' }
          ],
          workOrderId: [
            { required: true, message: '任务号必选', trigger: 'change' }
          ],
          materialNumber: [
            { required: true, message: '拉动物料必选', trigger: 'change' }
          ],
          specifiedQuantity: [
            { required: true, message: '拉动数量必填', trigger: 'change' }
          ],
          materialTransferCategory: [
            { required: true, message: '拉动类型必选', trigger: 'change' }
          ],
        },
        url: {
          add: "/mes/mesMaterialTransferRequest/add",
          edit: "/mes/mesMaterialTransferRequest/edit",
          queryById: "/mes/mesMaterialTransferRequest/queryById"
    async edit(record) {
      this.model = Object.assign({}, record)
      this.model.workOrderCode = this.model.workOrderId_dictText
      this.visible = true
      if (this.model.workOrderId) {
        let workOrderRes = await this.loadProductionWorkOrder(this.model.workOrderId)
        if(!workOrderRes.success || !workOrderRes.result) {
          return;
        }
        //排产工单赋值
        this.workOrderObj = Object.assign({}, workOrderRes.result);
        //物料列表
        let materialListRes = await this.loadMaterialList(workOrderRes.result.materialNumber)
        if (materialListRes.success && materialListRes.result && materialListRes.result.length > 0) {
          this.materialList = [...materialListRes.result]
        } else {
          this.materialList = []
        }
        //目标库存地
        let warehouseRes = await this.loadLineWarehouse(workOrderRes.result.factoryId)
        if (warehouseRes.success && warehouseRes.result) {
          this.$set(this.model, 'targetWarehouseId', warehouseRes.result.id)
          this.$set(this.model, 'warehouseName', warehouseRes.result.warehouseName)
        } else {
          this.model.targetWarehouseId = undefined
          this.model.warehouseName = ''
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    async selectConfirm(rows) {
      if (rows && rows.length > 0) {
        //清空关联数据
        this.model.materialNumber = undefined;
        this.model.materialName = '';
        this.model.specifiedQuantity = 0;
        //赋值新的数据
        this.model.workOrderId = rows[0].id
        this.model.workOrderCode = rows[0].workOrderCode
        //排产工单赋值
        this.workOrderObj = Object.assign({}, rows[0]);
        let materialListRes = await this.loadMaterialList(rows[0].materialNumber)
        if (materialListRes.success && materialListRes.result && materialListRes.result.length > 0) {
          this.materialList = [...materialListRes.result]
        } else {
          this.materialList = []
        }
        let warehouseRes = await this.loadLineWarehouse(rows[0].factoryId)
        if (warehouseRes.success && warehouseRes.result) {
          this.$set(this.model, 'targetWarehouseId', warehouseRes.result.id)
          this.$set(this.model, 'warehouseName', warehouseRes.result.warehouseName)
        } else {
          this.model.targetWarehouseId = undefined
          this.model.warehouseName = ''
        }
      } else {
        //清空关联数据
        this.model.materialNumber = undefined;
        this.model.materialName = '';
        this.model.specifiedQuantity = 0;
        this.materialList = []
        this.model.targetWarehouseId = undefined
        this.model.warehouseName = ''
        this.workOrderObj = {};
      }
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
    submitForm() {
      const that = this
      // è§¦å‘表单验证
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true
          let httpurl = ''
          let method = ''
          if (!this.model.id) {
            httpurl += this.url.add
            method = 'post'
          } else {
            httpurl += this.url.edit
            method = 'put'
          }
          httpAction(httpurl, this.model, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message)
              that.$emit('ok')
            } else {
              that.$message.warning(res.message)
            }
          }).finally(() => {
            that.confirmLoading = false
          })
        }
        })
      },
      })
    },
    loadMaterialList(materialNumber) {
      return getAction(this.url.queryByMaterialNumber, { materialNumber: materialNumber })
    },
    loadLineWarehouse(factoryId) {
      return getAction(this.url.queryByFactoryId, { factoryId: factoryId })
    },
    loadProductionWorkOrder(workOrderId) {
      return getAction(this.url.workOrderQuery, { id: workOrderId })
    },
    handleMaterialNumberChange(val) {
      let find = this.materialList.find(item => item.materialNumber === val)
      if (find) {
        this.model.materialName = find.materialName
      }
      this.model.specifiedQuantity = 0
    }
  }
}
</script>
src/views/mes/modules/WorkOrderSelectModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,173 @@
<template>
  <div>
    <!---->
    <a-input @click="openModal" placeholder="请选择任务号" v-model="textVals" readOnly :disabled="submitDisabled">
      <a-icon slot="prefix" type="cluster" title="排产工单选择"/>
      <a-icon v-if="storeVals" slot="suffix" type="close-circle" @click="handleEmpty" title="清空"/>
    </a-input>
    <a-modal
      title="工单选择"
      :width="1000"
      :visible="visible"
      :confirmLoading="confirmLoading"
      @ok="handleSubmit"
      @cancel="handleCancel">
      <a-table
        ref="table"
        bordered
        size="middle"
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        @change="handleTableChange"
        :customRow="customTableRow"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio'}"></a-table>
    </a-modal>
  </div>
</template>
<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
export default {
  name: "WorkOrderSelectModal",
  mixins: [JeecgListMixin],
  props: {
    orderStatus: {
      type: String,
      default: 'null', //如果没有传值则查不到数据
    },
    submitDisabled: {
      type: Boolean,
      default: false,
    },
    workOrder: {
      type: Object,
      default: undefined,
    }
  },
  watch: {
    workOrder: {
      immediate: true,
      handler(val) {
        this.textVals = val.workOrderCode
        this.storeVals = val
      }
    }
  },
  data() {
    return {
      title: "操作",
      visible: false,
      model: {},
      confirmLoading: false,
      storeVals: undefined, //[key values]
      textVals: this.value, //[label values]
      queryParam: {
        workOrderStatus: this.orderStatus,
      },
      url: {
        list: "/mes/mesProductionWorkOrder/list"
      },
      columns: [
        {
          title: '任务号',
          align: "center",
          dataIndex: 'workOrderCode',
          fixed: 'left',
          width: 200
        },
        {
          title: '物料编码',
          align: "center",
          dataIndex: 'materialNumber',
        },
        {
          title: '物料名称',
          align: "center",
          dataIndex: 'materialName'
        },
        {
          title: '计划生产数量',
          align: "center",
          dataIndex: 'planQuantity'
        },
        {
          title: '工单状态',
          align: "center",
          dataIndex: 'workOrderStatus_dictText'
        },
      ]
    }
  },
  created() {
    //加载排产工单数据
    this.queryParam.workOrderStatus = this.orderStatus;
  },
  methods: {
    openModal(){
      this.visible = true;
      if(this.workOrder){
        this.textVals = this.workOrder.workOrderCode;
        this.storeVals = this.workOrder;
        this.selectedRowKeys = [this.workOrder.id];
        this.selectedRows = [this.workOrder]
      }else {
        this.selectedRowKeys = []
        this.selectedRows = []
        this.textVals = '';
        this.storeVals = undefined;
      }
    },
    handleEmpty(){
      this.textVals = '';
      this.storeVals = undefined;
      this.selectedRowKeys = []
      this.selectedRows = []
      this.$emit('ok', []);
    },
    close() {
      this.$emit('close');
      this.visible = false;
    },
    /**
     * è‡ªå®šä¹‰è®¾å¤‡å°è´¦è¡¨æ ¼è¡Œ
     * @param record è¡¨æ ¼è¡Œä¿¡æ¯
     * @returns {{style: {cursor: string}, on: {click: *}}} æ ·å¼å¯¹è±¡ä¸Žäº‹ä»¶æ–¹æ³•
     */
    customTableRow(record) {
      return {
        style: {
          cursor: 'pointer'
        },
        on: {
          click: () => {
            this.onSelectChange([record.id], [record]);
          }
        }
      }
    },
    handleCancel() {
      this.close()
    },
    handleSubmit() {
      if(this.selectionRows && this.selectionRows.length === 1){
        this.textVals = this.selectionRows[0].workOrderCode;
        this.storeVals = this.selectionRows[0];
        this.$emit('ok', this.selectionRows);
        this.close()
      }else {
        that.$message.warning('请选择一条记录!');
      }
    },
  }
}
</script>
<style>
</style>