Răsfoiți Sursa

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend into dev

yusheng 1 an în urmă
părinte
comite
c9deacdb0b

+ 9 - 0
src/api/material/BOM.js

@@ -324,6 +324,15 @@ export async function workingStepUpdate(data) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 修改单个工步
+export async function workingSingleUpdate(data) {
+  const res = await request.put(`/main/categoryparamstep/updateStepItem`, data);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
 // 获取工步详情
 export async function getStepDetailById(id) {
   const res = await request.get(`/main/categoryparamstep/getById/${id}`);

+ 7 - 13
src/views/material/BOMmanage/components/StepModal1.vue

@@ -114,17 +114,6 @@
             width: 55,
             align: 'center'
           },
-          {
-            slot: 'type',
-            label: '类型',
-            showOverflowTooltip: true,
-            align: 'center',
-            minWidth: 110,
-            formatter: (_row) => {
-              return this.typeList.filter((item) => item.value == _row.type)[0]
-                .label;
-            }
-          },
           {
             align: 'center',
             prop: 'code',
@@ -183,6 +172,8 @@
 
       /* 表格数据源 */
       async datasource({ page, limit, where, order }) {
+        // 过滤失效工步数据
+        where.status = 0;
         const res = await parameter.list({
           ...where,
           ...order,
@@ -221,7 +212,7 @@
             this.$message.error('请至少选择一条数据');
             return;
           }
-          workingStepUpdate({
+          const formData = {
             ...this.currentRow,
             id: this.current.id,
             bomCategoryId: this.current.bomCategoryId,
@@ -229,7 +220,10 @@
             categoryId: this.current.categoryId,
             stepId: this.currentRow.id,
             paramId: this.current.paramId
-          }).then(() => {
+          }
+          formData.type = this.currentRow.type.code;
+          console.log(2333333, formData)
+          workingStepUpdate(formData).then(() => {
             this.$message.success('修改成功');
             this.$emit('chooseModal', [], this.current);
           });

+ 98 - 24
src/views/material/BOMmanage/components/workmanship.vue

@@ -10,18 +10,30 @@
         <el-row type="flex" :gutter="24">
           <el-col :span="6">
             <el-form-item label="工序编码:" label-width="100px">
-              <el-input clearable v-model.trim="where.code" placeholder="请输入" />
+              <el-input
+                clearable
+                v-model.trim="where.code"
+                placeholder="请输入"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="6">
             <el-form-item label="工序名称:" label-width="100px">
-              <el-input clearable v-model.trim="where.name" placeholder="请输入" />
+              <el-input
+                clearable
+                v-model.trim="where.name"
+                placeholder="请输入"
+              />
             </el-form-item>
           </el-col>
 
           <el-col :span="6">
             <el-form-item label="所属工作中心" label-width="100px">
-              <el-input clearable v-model.trim="where.workCenterName" placeholder="请输入" />
+              <el-input
+                clearable
+                v-model.trim="where.workCenterName"
+                placeholder="请输入"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="4">
@@ -45,7 +57,6 @@
         ref="table"
         :columns="columns"
         :datasource="datasource"
-        
         :need-page="false"
         row-key="id"
       >
@@ -79,11 +90,14 @@
               :key="row.code + '-' + $index"
             >
               <template v-slot:sort="{ row }">
-                <el-input v-model="row.sort"></el-input>
+                <el-input
+                  @input="(e) => validateNumber(e, row)"
+                  v-model.number="row.sort"
+                ></el-input>
               </template>
 
               <!-- 默认值 -->
-              <template v-slot:defaultValue="{ row }">
+              <!-- <template v-slot:defaultValue="{ row }">
                 <el-input
                   v-if="
                     row.textType == 1 || row.textType == 4 || row.textType == 5
@@ -99,17 +113,33 @@
                   <el-option label="TRUE" :value="'TRUE'" />
                   <el-option label="FALSE" :value="'FALSE'" />
                 </el-select>
+              </template> -->
+              <template v-slot:name="{ row }">
+                <el-input v-model="row.name" placeholder="请输入"></el-input>
+              </template>
+              <template v-slot:defaultValue="{ row }">
+                <el-input
+                  v-model="row.defaultValue"
+                  placeholder="请输入"
+                ></el-input>
               </template>
-
               <!-- 操作列 -->
               <template v-slot:action="{ row }">
-                <el-link
+                <!-- <el-link
                   type="primary"
                   :underline="false"
                   icon="el-icon-edit"
                   @click="editWorkingStep(row)"
                 >
                   修改
+                </el-link> -->
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  icon="el-icon-house"
+                  @click="saveWorking(row)"
+                >
+                  保存
                 </el-link>
                 <el-link
                   type="primary"
@@ -134,7 +164,6 @@
                 >
                   <template v-slot:reference>
                     <el-link
-                
                       type="danger"
                       :underline="false"
                       icon="el-icon-delete"
@@ -149,7 +178,7 @@
         </template>
 
         <!-- 操作列 -->
-        <template v-slot:action="{ row }"  >
+        <template v-slot:action="{ row }">
           <el-link
             type="primary"
             :underline="false"
@@ -222,7 +251,8 @@
   import {
     workingProcedureUpdate,
     getStepListById,
-    workingStepSave
+    workingStepSave,
+    workingSingleUpdate
   } from '@/api/material/BOM';
   import ProcessModal from './processModal.vue';
   import ParamModal from './ParamModal.vue';
@@ -240,21 +270,21 @@
       workingStep
     },
     props: {
-      resourceBomId: Number,
+      resourceBomId: String,
 
       taskParam: Object,
       attributeData: {
         type: Object,
         default: {}
-      },
+      }
     },
 
     watch: {
       attributeData: {
         handler(val) {
-         this.$nextTick(() => {
-          this.reload()
-         })
+          this.$nextTick(() => {
+            this.reload();
+          });
         },
         deep: true,
         immediate: true
@@ -293,7 +323,7 @@
             align: 'center',
             minWidth: 110
           },
-   
+
           {
             align: 'center',
             prop: 'controlName',
@@ -330,21 +360,23 @@
           },
           {
             prop: 'code',
-            label: '工步类型',
+            label: '工步编码',
             showOverflowTooltip: true,
             align: 'center',
             minWidth: 110
           },
           {
             prop: 'name',
-            label: '工步编码',
+            slot: 'name',
+            label: '工步名称',
             showOverflowTooltip: true,
             align: 'center',
             minWidth: 110
           },
           {
-            prop: 'name',
-            label: '工序名称',
+            slot: 'defaultValue',
+            prop: 'defaultValue',
+            label: '工序内容',
             showOverflowTooltip: true,
             align: 'center',
             minWidth: 110
@@ -378,6 +410,46 @@
       };
     },
     methods: {
+      // 单个工步数据保存
+      saveWorking(row) {
+        if (!row.name) {
+          this.$message.warning('请输入工步名称');
+          return;
+        }
+        if (!row.sort) {
+          this.$message.warning('请输入工步排序');
+          return;
+        }
+        let data = {
+          stepName: row.name,
+          id: row.id,
+          defaultValue: row.defaultValue,
+          sort: row.sort
+        };
+        workingSingleUpdate(data)
+          .then((res) => {
+            if (res.data) {
+              this.$message.success('保存成功');
+            }else{
+               this.$message.error('保存失败');
+            }
+          })
+          .catch((err) => {
+            console.log(err, 'err');
+          });
+      },
+      validateNumber(e, row) {
+        if (e == 0) {
+          row.sort = '';
+          return;
+        }
+        let value = '';
+        value = e.replace(/[^\d]/g, '');
+        if (value.startsWith('0') && value.length > 1) {
+          value = value.replace(/^0+/, '');
+        }
+        row.sort = value;
+      },
       // expandChange(row, rows) {
       //   if (rows.length > 0) {
       //     // 展开
@@ -454,7 +526,6 @@
         this.$refs.table.reload({ where });
       },
       chooseProcess(data) {
-
         // let _arr = [...data, ...this.$refs.table.getData()];
         // this.$refs.table.setData([...data, ...this.$refs.table.getData()]);
         // this.$emit('chooseProcess', _arr);
@@ -496,7 +567,7 @@
       chooseStepModal(data, current) {
         if (data?.length > 0) {
           let params = data.map((item) => {
-            return {
+            const itemData = {
               ...item,
               paramId: current.id,
               stepId: item.id,
@@ -504,12 +575,15 @@
               bomCategoryId: this.taskParam.id,
               categoryCode: this.taskParam.categoryCode
             };
+            itemData.type = item.type.code;
+            return itemData;
           });
           workingStepSave(params).then((data) => {
             this.$message.success('保存成功');
+            this.reload();
           });
         }
-        this.reload();
+        // this.reload();
         console.log(data);
         console.log(current);
       },

+ 3 - 3
src/views/technology/parameter/components/user-edit.vue

@@ -151,7 +151,7 @@
             >
           </div>
           <el-table
-         
+
             :data="form.intervalList"
             tooltip-effect="dark"
             style="width: 100%"
@@ -175,9 +175,9 @@
             <el-table-column label="公式" min-width="120px">
               <template slot-scope="scope">
                  :prop="'intervalList.' + scope.$index + 'formula'"
-                 :rules="tableFormRules.formula" 
+                 :rules="tableFormRules.formula"
                 <el-form-item
-    
+
                   label-width="px"
                 >
                   <el-input

+ 295 - 295
src/views/technology/stepManagement/components/user-edit.vue

@@ -1,26 +1,26 @@
 <!-- 用户编辑弹窗 -->
 <template>
-  <ele-modal width="960px" :visible="visible" :append-to-body="true" :close-on-click-modal="false"
-    custom-class="ele-dialog-form" :title="isView ? '查看工步' : isUpdate ? '修改工步' : '添加工步'" @update:visible="updateVisible"
-    :maxable="true">
+  <ele-modal
+    width="960px"
+    :visible="visible"
+    :append-to-body="true"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    :title="isView ? '查看工步' : isUpdate ? '修改工步' : '添加工步'"
+    @update:visible="updateVisible"
+    :maxable="true"
+  >
     <header-title title="基本信息"></header-title>
     <el-form ref="form" :model="form" :rules="rules" label-width="140px">
       <el-row>
         <el-col :span="8">
-          <el-form-item label="类型:" prop="type">
-            <el-select :disabled="isView" v-model="form.type" filterable>
-              <el-option :label="item.label" :value="item.value" v-for="(item, index) in typeList" :key="index">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-
-        <el-col :span="8">
-          <!-- <el-form-item label="编码:" v-if="clientEnvironmentId == 9"> -->
-            <!-- <el-input  disabled v-model="form.code" clearable placeholder="请输入"></el-input> -->
-          <!-- </el-form-item> -->
-          <el-form-item label="编码:" >
-            <el-input disabled v-model="form.code" clearable placeholder="请输入" />
+          <el-form-item label="编码:">
+            <el-input
+              disabled
+              v-model="form.code"
+              clearable
+              placeholder="请输入"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="8">
@@ -28,329 +28,329 @@
             <el-input :disabled="isView" v-model="form.name" />
           </el-form-item>
         </el-col>
-
-        <el-col :span="8">
-          <el-form-item label="排序:" prop="sort">
-            <el-input :disabled="isView" v-model="form.sort" />
-          </el-form-item>
-        </el-col>
-
         <el-col :span="8">
-          <el-form-item label="附件上传:" prop="sort">
-            <fileUpload v-model="form.files"></fileUpload>
+          <el-form-item label="状态:" prop="status">
+            <el-select
+              v-model="form.status"
+              placeholder="请选择"
+              style="width: 100%"
+              :disabled="isView"
+            >
+              <el-option label="生效" :value="0" />
+              <el-option label="失效" :value="1" />
+            </el-select>
           </el-form-item>
         </el-col>
-      </el-row>
-
-      <header-title title="工步节拍时间"></header-title>
-
-      <el-row>
-        <el-col :span="24">
-          <el-form-item label="节拍生产数量" prop="beatProduceNum">
-            <el-row>
-              <el-col :span="16">
-                <el-input :disabled="isView" placeholder="请输入" v-model.number="form.workBeat.beatProduceNum">
-                </el-input></el-col>
-              <el-col :span="1">&nbsp;</el-col>
-              <el-col :span="7">
-                <DictSelection :isProhibit="isView" dictName="计量单位" v-model="form.workBeat.beatProduceUnit" />
-              </el-col>
-            </el-row>
+        <el-col :span="24" v-if="form.textType === '7'">
+          <el-form-item label="内容:" prop="defaultValue">
+            <el-input
+              v-model="form.defaultValue"
+              type="textarea"
+              :disabled="isView"
+            >
+            </el-input>
           </el-form-item>
         </el-col>
-
         <el-col :span="24">
-          <el-form-item label="对应物料数量" label-width="140px" prop="categoryNum">
-            <el-row>
-              <el-col :span="16">
-                <el-input :disabled="isView" placeholder="请输入" v-model.number="form.workBeat.categoryNum">
-                </el-input></el-col>
-              <el-col :span="1">&nbsp;</el-col>
-              <el-col :span="7">
-                <DictSelection :isProhibit="isView" dictName="计量单位" v-model="form.workBeat.categoryUnit" />
-              </el-col>
-            </el-row>
-          </el-form-item>
-        </el-col>
-
-        <el-col :span="8">
-          <el-form-item label="工步休息时长:">
-            <el-input :disabled="isView" v-model="form.workBeat.restTimes" placeholder="请输入" />
+          <el-form-item label="备注:" prop="remark">
+            <el-input
+              placeholder="请输入"
+              v-model="form.remark"
+              type="textarea"
+              :disabled="isView"
+            />
           </el-form-item>
         </el-col>
-
         <el-col :span="8">
-          <el-form-item label="工步准备时长:">
-            <el-input :disabled="isView" v-model="form.workBeat.preTimes" clearable placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="设备生产时长:">
-            <el-input :disabled="isView" v-model="form.workBeat.proTimes" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="其他时长:">
-            <el-input :disabled="isView" placeholder="请输入" v-model="form.workBeat.otherTimes" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="节拍时间:">
-            <el-input :disabled="isView" disabled :value="totalTime"></el-input>
+          <el-form-item label="排序:" prop="sort">
+            <!--            <el-input :disabled="isView" type="number" v-model="form.sort" />-->
+            <el-input-number v-model="form.sort" :min="1" :disabled="isView" />
           </el-form-item>
         </el-col>
-
         <el-col :span="8">
-          <el-form-item label="节拍时间单位:">
-            <el-select :disabled="isView" v-model="form.workBeat.beatTimesUnit">
-              <el-option v-for="item in timeType2" :key="item.code" :label="item.label" :value="item.code">
-              </el-option>
-            </el-select>
+          <el-form-item label="附件上传:" prop="sort">
+            <fileUpload v-model="form.files" :disabled="isView"></fileUpload>
           </el-form-item>
         </el-col>
       </el-row>
 
-      <header-title title="工步间隔时间"></header-title>
+      <!-- 工步参数修改 2025-06-24 -->
+      <headerTitle title="物品清单">
+        <el-button
+          type="primary"
+          size="small"
+          @click="handleAdd"
+          v-show="!isView"
+          >新增</el-button
+        >
+      </headerTitle>
 
-      <el-row>
-        <el-col :span="12">
-          <el-form-item label="间隔策略:" label-width="200px">
-            <el-select :disabled="isView" style="width: 100%" v-model="form.intervalTime.tactics" filterable>
-              <el-option v-for="item in tacticsType" :key="item.code" :label="item.label" :value="item.code">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
+      <el-table
+        ref="multipleTable"
+        :data="form.toolList"
+        tooltip-effect="dark"
+        style="width: 100%"
+        stripe
+        :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
+      >
+        <el-table-column label="编码" prop="code" min-width="120">
+          <template slot-scope="{ row }">
+            {{ row.code }}
+          </template></el-table-column
+        >
 
-        <el-col :span="12">
-          <el-form-item label="间隔时间单位:" label-width="200px">
-            <el-select :disabled="isView" style="width: 100%" v-model="form.timeUnit">
-              <el-option v-for="item in timeType" :key="item.code" :label="item.label" :value="item.code">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
+        <el-table-column label="名称" prop="code" min-width="120">
+          <template slot-scope="{ row }">
+            {{ row.name }}
+          </template></el-table-column
+        >
+        <el-table-column label="规格" prop="brandNum" min-width="120">
+          <template slot-scope="{ row }">
+            {{ row.specification }}
+          </template></el-table-column
+        >
 
-        <el-col :span="12">
-          <el-form-item label="下工步标准准备时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.nextStandardPreTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="下工步最短准备时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.nextShortPreTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="本工步标准等待时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.thisStandardWaitTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="本工步最短准备时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.thisShortPreTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="本工步结束后标准周转时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.thisStandardBoatTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="本工步结束后周转最短时间:" label-width="200px">
-            <el-input :disabled="isView" v-model="form.intervalTime.thisShortBoatTime" placeholder="请输入" />
-          </el-form-item>
-        </el-col>
-      </el-row>
+        <el-table-column label="型号" prop="modelType" min-width="120">
+          <template slot-scope="{ row }">
+            {{ row.modelType }}
+          </template></el-table-column
+        >
+
+        <el-table-column label="操作" fixed="right">
+          <template slot-scope="{ $index, row }">
+            <el-button
+              type="text"
+              @click="removeItem($index, row)"
+              v-show="!isView"
+              >删除设备</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <headerTitle title="注意事项" class="focus-item">
+        <el-button
+          type="primary"
+          size="small"
+          @click="addPostscript"
+          v-show="!isView"
+          >新增</el-button
+        >
+      </headerTitle>
+
+      <el-table
+        ref="multipleTable"
+        :data="form.postscriptList"
+        tooltip-effect="dark"
+        style="width: 100%"
+        stripe
+        :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
+      >
+        <el-table-column label="排序" prop="" width="140">
+          <template slot-scope="{ row }">
+            <el-input
+              placeholder="请输入"
+              type="number"
+              v-model.number="row.sort"
+              clearable
+              :disabled="isView"
+            ></el-input> </template
+        ></el-table-column>
+
+        <el-table-column label="注意事项" prop="" min-width="120">
+          <template slot-scope="{ row }">
+            <el-input
+              placeholder="请输入"
+              type="textarea"
+              :rows="1"
+              v-model="row.content"
+              clearable
+              :disabled="isView"
+            ></el-input> </template
+        ></el-table-column>
+
+        <el-table-column label="操作" fixed="right" width="100">
+          <template slot-scope="{ $index, row }">
+            <el-button
+              type="text"
+              @click="removePostscript($index, row)"
+              v-show="!isView"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
     </el-form>
 
     <template v-slot:footer>
       <el-button @click="updateVisible(false)">取消</el-button>
-      <el-button type="primary" :loading="loading" @click="save">
+      <el-button
+        type="primary"
+        :loading="loading"
+        @click="save"
+        v-show="!isView"
+      >
         保存
       </el-button>
     </template>
 
     <!-- 工作中心弹窗 -->
-    <WorkCenter ref="centerRefs" @changeCenter="determineChoose" />
+    <ProductModalMultiple ref="productRefs" @selection="chooseModal" />
   </ele-modal>
 </template>
 
 <script>
-import stepManagement from '@/api/technology/stepManagement';
-import WorkCenter from './WorkCenter.vue';
-import fileUpload from '@/components/addDoc/fileUpload.vue'
-export default {
-  components: {
-    WorkCenter,
-    fileUpload
-  },
-  props: {
-    // 弹窗是否打开
-    visible: Boolean,
-    // 修改回显的数据
-    data: Object,
-    isView: Boolean,
-    controlList: Array,
-    typeList: Array
-  },
-  data() {
-    const defaultForm = function () {
+  import stepManagement from '@/api/technology/stepManagement';
+  import fileUpload from '@/components/addDoc/fileUpload.vue';
+  import ProductModalMultiple from '@/views/material/BOMmanage/components/ProductModalMultiple.vue';
+  export default {
+    components: {
+      ProductModalMultiple,
+      fileUpload
+    },
+    props: {
+      // 弹窗是否打开
+      visible: Boolean,
+      // 修改回显的数据
+      data: Object,
+      isView: Boolean,
+      controlList: Array,
+      typeList: Array
+    },
+    data() {
+      const defaultForm = function () {
+        return {
+          id: null,
+          code: '',
+          name: '',
+          sort: null,
+          files: [],
+          status: 0,
+          postscriptList: [],
+          toolList: [],
+          toolRemoveIds: [],
+          postscriptRemoveIds: [],
+          textType: '7',
+          defaultValue: '',
+          remark: ''
+        };
+      };
       return {
-        id: null,
-        code: '',
-        name: '',
-        type: 1,
-        workCenterId: '',
-        workCenterName: '',
-        timeUnit: '',
-        sort: null,
-        intervalTime: {
-          nextShortPreTime: '', // 时间单位转换后的下一个短周期的时间,格式为YYYY-MM-DDTHH'
-          nextStandardPreTime: '', // 时间单位转换后的下一个正式的周期的时间,格式为YYYY-MM-DD'
-          tactics: 1, // 周期工艺描述,格式为JSON字符串或数组形式的对象形式的数据类
-          thisShortBoatTime: '',
-          thisShortPreTime: '',
-          thisStandardBoatTime: '',
-          thisStandardWaitTime: ''
+        defaultForm,
+        // 表单数据
+        form: defaultForm(),
+        // 表单验证规则
+        rules: {
+          name: [{ required: true, message: '请输入工步名称', trigger: 'blur' }]
         },
-
-        workBeat: {
-          beatProduceNum: '',
-          beatProduceUnit: '',
-          categoryNum: '',
-          categoryUnit: '',
-          beatTimes: '',
-          otherTimes: '',
-          preTimes: '',
-          proTimes: '',
-          restTimes: '',
-          beatTimesUnit: ''
-        }
+        // 提交状态
+        loading: false,
+        // 是否是修改
+        isUpdate: false,
+        chooseItem: null
       };
-    };
-    return {
-      defaultForm,
-      // 表单数据
-      form: defaultForm(),
-
-      timeType: [
-        { code: 1, label: '分' },
-        { code: 2, label: '时' }
-      ],
-
-      timeType2: [
-        { code: '1', label: '分' },
-        { code: '2', label: '时' }
-      ],
-
-      tacticsType: [
-        { code: 1, label: '标准时间' },
-        { code: 2, label: '最短时间' }
-      ],
-
-      // 表单验证规则
-      rules: {
-        name: [
-          { required: true, message: '请输入工步名称', trigger: 'blur' }
-        ],
-        code: [{ required: true, trigger: 'change', message: '工序编码' }],
-        'workBeat.beatTimesUnit': [
-          { required: true, message: '请选择时间单位', trigger: 'change' }
-        ],
-        timeUnit: [
-          { required: true, message: '请选择间隔时间单位', trigger: 'change' }
-        ]
-      },
-      // 提交状态
-      loading: false,
-      // 是否是修改
-      isUpdate: false,
-      chooseItem: null
-    };
-  },
-  computed: {
-    totalTime() {
-      let to =
-        (-this.form.workBeat.restTimes +
-          -this.form.workBeat.preTimes +
-          -this.form.workBeat.proTimes +
-          -this.form.workBeat.otherTimes) *
-        -1;
-      return to;
-    },
-    clientEnvironmentId() {
-      return this.$store.state.user.info.clientEnvironmentId;
     },
+    computed: {
+      clientEnvironmentId() {
+        return this.$store.state.user.info.clientEnvironmentId;
+      },
       // 是否开启响应式布局
       styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
-    }
-  },
-  methods: {
-    chooseWorkCenter() {
-      this.$refs.centerRefs.open(this.form);
-    },
-    determineChoose(row) {
-      this.$set(this.form, 'workCenterName', row.name);
-      this.$set(this.form, 'workCenterId', row.id);
+        return this.$store.state.theme.styleResponsive;
+      }
     },
-    /* 保存编辑 */
-    save() {
-      this.$refs.form.validate((valid) => {
-        if (!valid) {
-          return false;
-        }
-        if (!this.isUpdate) {
-          delete this.form.id;
-        }
-
-        this.form.workBeat.beatTimes = this.totalTime;
+    methods: {
+      /* 添加质量工具 */
+      handleAdd() {
+        this.$refs.productRefs.open(2, '', this.form.toolList);
+      },
+      chooseModal(data) {
+        this.form.toolList = [...this.form.toolList, ...data];
+      },
+      removeItem(idx, row) {
+        this.$confirm(`是否删除这个设备?`).then(async () => {
+          this.form.toolList.splice(idx, 1);
 
-        this.loading = true;
-        stepManagement
-          .save(this.form)
-          .then((msg) => {
-            this.loading = false;
-            this.$message.success(
-              (this.isUpdate ? '修改' : '新建') + msg.message
-            );
-            this.updateVisible(false);
-            this.$emit('done');
-          })
-          .catch((e) => {
-            this.loading = false;
-            // this.$message.error(e.message);
-          });
-      });
+          if (row.id) {
+            this.form.toolRemoveIds.push(row.id);
+          }
+        });
+      },
+      /* 添加注意事项 */
+      addPostscript() {
+        this.form.postscriptList.push({ sort: null, content: '' });
+      },
+      removePostscript(idx, row) {
+        this.$confirm(`是否删除这个注意事项?`).then(async () => {
+          this.form.postscriptList.splice(idx, 1);
+          if (row.id) {
+            this.form.postscriptRemoveIds.push(row.id);
+          }
+        });
+      },
+      /* 保存编辑 */
+      save() {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return false;
+          }
+          if (!this.isUpdate) {
+            delete this.form.id;
+          }
+          this.loading = true;
+          stepManagement
+            .save(this.form)
+            .then((msg) => {
+              this.loading = false;
+              this.$message.success(
+                (this.isUpdate ? '修改' : '新建') + msg.message
+              );
+              this.updateVisible(false);
+              this.$emit('done');
+            })
+            .catch((e) => {
+              this.loading = false;
+              // this.$message.error(e.message);
+            });
+        });
+      },
+      /* 更新visible */
+      updateVisible(value) {
+        this.form = { ...this.defaultForm() };
+        this.$emit('update:visible', value);
+      }
     },
-    /* 更新visible */
-    updateVisible(value) {
-      this.form = { ...this.defaultForm() };
-      this.$emit('update:visible', value);
-    }
-  },
 
-  watch: {
-    async visible(visible) {
-      if (visible) {
-        if (this.data) {
-          const res = await stepManagement.getById(this.data.id);
-          console.log('res----------------');
-          console.log(res);
-          this.$util.assignObject(this.form, {
-            ...res
-          });
-          this.isUpdate = true;
+    watch: {
+      async visible(visible) {
+        if (visible) {
+          if (this.data) {
+            const res = await stepManagement.getById(this.data.id);
+            this.$util.assignObject(this.form, {
+              ...res
+            });
+            // reset remove id data by copy from remote data
+            this.form.toolRemoveIds = [];
+            this.form.postscriptRemoveIds = [];
+            this.isUpdate = true;
+          } else {
+            this.form = { ...this.defaultForm() };
+            this.isUpdate = false;
+          }
         } else {
+          this.$refs.form.clearValidate();
           this.form = { ...this.defaultForm() };
-          this.isUpdate = false;
+          // reset remove id data by copy from remote data
+          this.form.toolRemoveIds = [];
+          this.form.postscriptRemoveIds = [];
         }
-      } else {
-        this.$refs.form.clearValidate();
-        this.form = { ...this.defaultForm() };
       }
     }
-  }
-};
+  };
 </script>
+
+<style lang="scss" scoped>
+  .focus-item {
+    margin-top: 10px;
+  }
+</style>

+ 34 - 44
src/views/technology/stepManagement/index.vue

@@ -52,29 +52,30 @@
             icon="el-icon-download"
             class="ele-btn-icon"
             plain
-
             @click="uploadFile()"
           >
             导入
           </el-button>
         </template>
-
-        <template v-slot:name="{ row }">
+        <template v-slot:code="{ row }">
           <el-link
-            v-if="row.type == 2"
             type="primary"
             :underline="false"
-            @click="sampleParam(row)"
+            @click="openEdit(row, true)"
+            >{{ row.code }}</el-link
           >
-            {{ row.name }}
-          </el-link>
-          <span v-else> {{ row.name }}</span>
         </template>
-        <!-- 状态列 -->
-
-        <template v-slot:type="{ row }">
-          {{ typeLabel(row.type) }}
+        <template v-slot:name="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="openEdit(row, true)"
+            >{{ row.name }}</el-link
+          >
         </template>
+        <!-- <template v-slot:name="{ row }">
+          <span> {{ row.name }}</span>
+        </template> -->
 
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
@@ -86,14 +87,14 @@
           >
             修改
           </el-link>
-          <el-link
+          <!-- <el-link
             type="primary"
             :underline="false"
             icon="el-icon-setting"
             @click="openEdit(row, true)"
           >
             详情
-          </el-link>
+          </el-link> -->
 
           <el-popconfirm
             class="ele-action"
@@ -125,7 +126,13 @@
       @close="close"
     ></SampleParam>
 
-    <importDialog :defModule="moudleName" ref="importDialogRef" @success="reload" />
+    <importDialog
+      :defModule="moduleName"
+      ref="importDialogRef"
+      :fileUrl="'/main/producestep/downLoadTemplate'"
+      fileName="工艺_工步导入模板"
+      @success="reload"
+    />
   </div>
 </template>
 
@@ -137,11 +144,11 @@
   import SampleParam from './components/sampleParam.vue';
   import stepManagement from '@/api/technology/stepManagement';
   import control from '@/api/technology/control';
-  import importDialog from "@/components/upload/import-dialog.vue";
+  import importDialog from '@/components/upload/import-dialogNew.vue';
 
   export default {
     name: 'technologyProduction',
-    mixins:[tabMixins],
+    mixins: [tabMixins],
     components: {
       UserSearch,
       UserEdit,
@@ -151,7 +158,7 @@
     },
     data() {
       return {
-        moudleName : "mainProduceStep",
+        moduleName: 'mainProduceStep',
         // 表格列配置
         columns: [
           {
@@ -173,7 +180,8 @@
             prop: 'code',
             label: '编码',
             showOverflowTooltip: true,
-            minWidth: 110
+            minWidth: 110,
+            slot: 'code'
           },
           {
             slot: 'name',
@@ -183,23 +191,18 @@
             minWidth: 110
           },
           {
-            slot: 'type',
-            label: '类型',
+            label: '内容',
+            prop: 'defaultValue',
             showOverflowTooltip: true,
             align: 'center',
-            minWidth: 110,
-            formatter: (_row) => {
-              return this.typeList.filter((item) => item.id == _row.type)[0]
-                .label;
-            }
+            minWidth: 330
           },
-
           {
             prop: 'status',
             label: '状态',
             align: 'center',
             showOverflowTooltip: true,
-            minWidth: 110,
+            minWidth: 50,
             formatter: (_row) => {
               return ['生效', '失效'][_row.status];
             }
@@ -211,10 +214,9 @@
             // sortable: 'custom',
             showOverflowTooltip: true,
             align: 'center',
-            minWidth: 110
+            minWidth: 40
           },
 
-
           {
             columnKey: 'action',
             label: '操作',
@@ -260,25 +262,13 @@
             label: '一工一检(常规质检)'
           }
         ],
-
+        isView: false,
         sampleShow: false,
         taskId: null,
         cacheKeyUrl: '8aeb1092-technology-stepManagement'
       };
     },
     methods: {
-      typeLabel(type) {
-        return (
-          this.typeList.find((m) => m.value == type) &&
-          this.typeList.find((m) => m.value == type).label
-        );
-      },
-
-      /*配置工艺参数 */
-      openSetting(row) {
-        this.current = row;
-        this.showSetting = true;
-      },
       /* 表格数据源 */
       async datasource({ page, limit, where, order }) {
         const res = await stepManagement.list({
@@ -364,7 +354,7 @@
       close(done) {
         this.sampleShow = false;
       },
-      uploadFile () {
+      uploadFile() {
         this.$refs.importDialogRef.open();
       }
     }