Prechádzať zdrojové kódy

feat: 添加排序号校验和获取下一个可用排序号的逻辑

xieyong 1 týždeň pred
rodič
commit
92ab108378

+ 37 - 3
src/views/technology/route/components/user-taskinstance.vue

@@ -33,7 +33,11 @@
         </template>
 
         <template v-slot:orderNum="{ row }">
-          <el-input v-model="row.orderNum" placeholder="请输入排序"></el-input>
+          <el-input
+            v-model="row.orderNum"
+            placeholder="请输入排序"
+            @blur="checkOrderNum(row)"
+          ></el-input>
         </template>
 
         <template v-slot:processLabel="{ row }">
@@ -268,10 +272,40 @@
     },
 
     methods: {
+      // 获取下一个可用的 orderNum,避免重复
+      getNextOrderNum() {
+        const data = this.$refs.table.getData();
+        if (!data || data.length === 0) {
+          return 1;
+        }
+        const orderNums = data
+          .map((item) => Number(item.orderNum))
+          .filter((n) => !isNaN(n));
+        if (orderNums.length === 0) {
+          return 1;
+        }
+        return Math.max(...orderNums) + 1;
+      },
+      // 校验排序号是否重复
+      checkOrderNum(row) {
+        if (row.orderNum === '' || row.orderNum === null || row.orderNum === undefined) {
+          return;
+        }
+        const data = this.$refs.table.getData();
+        const dup = data.find(
+          (item) => item !== row && String(item.orderNum) === String(row.orderNum)
+        );
+        if (dup) {
+          this.$message.warning(`排序号 ${row.orderNum} 已存在,请重新输入`);
+          this.$nextTick(() => {
+            row.orderNum = '';
+          });
+        }
+      },
       addParamrter() {
         // console.log(this.$refs.ProductionCom?.selection);
         let arr = this.$refs.ProductionCom.selection;
-        let len = this.$refs.table.getData().length + 1;
+        let len = this.getNextOrderNum();
         let arrM = arr.map((item, index) => {
           return {
             ...item.detail,
@@ -370,7 +404,7 @@
         }
 
         if (data.length != 0) {
-          let len = this.$refs.table.getData().length + 1;
+          let len = this.getNextOrderNum();
           let arrM = data.map((item, index) => {
             return {
               ...item.detail,