Kaynağa Gözat

1.工艺路线:物料采集,点检,设备记录。2.防抖button。3.组件提示逻辑4.useCrud批量更新。

jiaxiaoqiang 1 yıl önce
ebeveyn
işleme
b20fe6fc74

+ 6 - 7
src/hooks/userCrud.ts

@@ -135,7 +135,7 @@ export const useCrud = (config?: UseCrudConfig) => {
           data.value = res?.data || [];
         }
         for (let i = 0; i < data.value.length; i++) {
-          data.value[i].$cellEdit=true;
+          data.value[i].$cellEdit = true;
         }
         console.info(data);
         config?.done && config?.done();
@@ -224,22 +224,21 @@ export const useCrud = (config?: UseCrudConfig) => {
      * */
     multipleUpdate: async () => {
       try {
+        // 由于数据带有$开头的属性,所以需要处理下,改为只传id和sortNum。
+        const dtosArray: { id: string; sortNum: number }[] = [];
         for (let i = 0; i < data.value.length; i++) {
           let cur = page.value.currentPage ?? 1;
           cur = cur - 1;
           const size = page.value.pageSize ?? 10;
           let sortNum = cur * size;
           sortNum = sortNum + i;
-          console.log("sortNum", cur, size, sortNum);
-          data.value[i].sortNum = sortNum;
+
+          dtosArray.push({ id: data.value[i].id, sortNum: sortNum });
         }
-        const p = {
-          dtos: data.value,
-        };
         const res = await request({
           url: `${url.value}/batch-update`,
           method: "post",
-          data: p,
+          data: dtosArray,
         });
         Methords.dataList();
         config?.done && config?.done();

+ 2 - 1
src/store/modules/dictionary.ts

@@ -24,6 +24,7 @@ export const useDictionaryStore = defineStore("dictionaryStore", {
       "skill_requirements",
       "station_type",
       "danwei_type",
+      "trace_type",
     ],
     dicts: [],
   }),
@@ -40,6 +41,6 @@ export const useDictionaryStore = defineStore("dictionaryStore", {
 });
 
 export function useDictionaryStoreHook() {
-	// console.log('dicts:',useDictionaryStore(store))
+  // console.log('dicts:',useDictionaryStore(store))
   return useDictionaryStore(store);
 }

+ 48 - 20
src/views/base/craftManagement/route/components/bottomTable.vue

@@ -1,21 +1,29 @@
 <template>
-  <avue-crud
-    ref="crudRef"
-    v-model:search="search"
-    v-model="form"
-    :data="data"
-    :option="option"
-    v-model:page="page"
-    @row-save="createRow"
-    @row-update="updateRow"
-    @row-del="deleteRow"
-    @selection-change="selectionChange"
-    @sortable-change="onSortChange"
-    @search-change="searchChange"
-    @search-reset="resetChange"
-    @size-change="dataList"
-    @current-change="dataList"
-  />
+  <div>
+    <avue-crud
+      ref="crudRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @selection-change="selectionChange"
+      @sortable-change="onSortChange"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+    />
+    <CommonTable
+      ref="commonTableRef"
+      :tableTitle="tableTitle"
+      :tableType="commonTableType"
+      @selected-sure="onSelectedFinish"
+    />
+  </div>
 </template>
 <script setup>
 import { ref, getCurrentInstance } from "vue";
@@ -50,7 +58,11 @@ const { selectionChange, multipleUpdate } = Methords; //选中和批量删除事
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 
 const startCreat = () => {
-  crudRef.value && crudRef.value.rowAdd();
+  if (props.tableType === "wuliaocaiji") {
+    commonTableRef.value && commonTableRef.value.startSelect();
+  } else {
+    crudRef.value && crudRef.value.rowAdd();
+  }
 };
 
 const saveSortData = async () => {
@@ -65,6 +77,21 @@ const onSortChange = () => {
   });
 };
 
+// ============公共弹窗table选择相关,物料采集等使用===============
+const commonTableRef = ref({});
+const commonTableType = ref("MARTERIAL");
+const onSelectedFinish = (itemValue) => {
+  crudRef.value && crudRef.value.rowAdd();
+  if (props.tableType === "wuliaocaiji") {
+    form.value.itemName = itemValue.materialName;
+    form.value.itemCode = itemValue.materialCode;
+    form.value.itemModel = itemValue.spec;
+    form.value.num = 1;
+    form.value.traceType = "S";
+    form.value.unit = itemValue.unitDictValue;
+  }
+};
+
 onMounted(() => {
   url.value = tableConfig[props.tableType].url;
   option.value = Object.assign(option.value, {
@@ -83,9 +110,10 @@ watch(
     console.log("faslegb");
     url.value = tableConfig[props.tableType].url;
     option.value = Object.assign(option.value, {
-      menu: false,
-      highlightCurrentRow: true,
       addBtn: false,
+      searchShow: false,
+      header: false,
+      sortable: true,
       column: tableConfig[props.tableType].column,
     });
     dataList();

+ 111 - 29
src/views/base/craftManagement/route/components/configs.ts

@@ -30,55 +30,137 @@ export const getTableConfig = (id: string) => {
         { label: "下限值", prop: "lower" },
       ],
     },
-
-    FACTORY: {
-      url: "/api/v1/base/workShop",
+    //工序物料
+    wuliaocaiji: {
+      url: "/api/v1/op/operationItem",
       column: [
         {
-          label: "车间名称",
-          prop: "name",
+          label: "工序id",
+          prop: "operationId",
+          display: false,
+          hide: true,
+          value: id,
+        },
+        { label: "物料名称", prop: "itemName" },
+        { label: "物料编码", prop: "itemCode" },
+        { label: "物料规格", prop: "itemModel" },
+        { label: "所需数量", prop: "num" },
+        {
+          label: "追溯类型",
+          prop: "traceType",
           search: true,
+          filterable: true,
+          type: "select",
+          dataType: "string",
+          dicData: dicts.trace_type,
+          props: { label: "dictLabel", value: "dictValue" },
         },
         {
-          label: "车间负责人",
-          prop: "manager",
+          label: "单位",
+          prop: "unit",
+          search: true,
+          filterable: true,
+          type: "select",
+          dataType: "string",
+          dicData: dicts.danwei_type,
+          props: { label: "dictLabel", value: "dictValue" },
+        },
+        {
+          label: "是否需要",
+          prop: "isTrace",
+          type: "radio", //类型为单选框
+          dicData: [
+            {
+              label: "需采集物料",
+              value: 1,
+            },
+            {
+              label: "非必须采集物料",
+              value: 0,
+            },
+          ],
+          value: 1,
           rules: [
             {
               required: true,
-              message: "请选择厂区负责人",
+              message: "是否需要",
               trigger: "blur",
             },
           ],
-          type: "select",
-          dicUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/user/list",
-          dicMethod: "post",
-          props: {
-            label: "userName", // 下拉菜单显示的字段
-            value: "userName", // 下拉菜单值的字段
-          },
-        },
-        {
-          label: "车间位置",
-          prop: "position",
         },
+      ],
+    },
+    dianjian: {
+      url: `/api/v1/op/operationCheck`,
+      column: [
         {
-          label: "所属工厂",
-          prop: "factoryName",
+          label: "工序id",
+          prop: "operationId",
           display: false,
+          hide: true,
+          value: id,
         },
+        { label: "工序点检项名称", prop: "checkName" },
+        { label: "工序点检项编码", prop: "checkCode" },
+        { label: "内容", prop: "content" },
         {
-          label: "车间描述",
-          prop: "remark",
+          label: "单位",
+          prop: "unit",
+          search: true,
+          filterable: true,
+          type: "select",
+          dataType: "string",
+          dicData: dicts.danwei_type,
+          props: { label: "dictLabel", value: "dictValue" },
         },
+        { label: "标准值", prop: "standard" },
+        { label: "上限值", prop: "upper" },
+        { label: "下限值", prop: "lower" },
+      ],
+    },
+    shebeijilu: {
+      url: "/api/v1/op/operationEquit",
+      column: [
         {
-          label: "创建人",
-          prop: "creator",
+          label: "工序id",
+          prop: "operationId",
           display: false,
+          hide: true,
+          value: id,
         },
+        { label: "所需数量", prop: "num" },
         {
-          label: "创建时间",
-          prop: "created",
-          display: false,
+          label: "设备类型",
+          prop: "equitType",
+          search: true,
+          filterable: true,
+          type: "select",
+          dataType: "string",
+          dicData: dicts.device_type,
+          props: { label: "dictLabel", value: "dictValue" },
+        },
+        {
+          label: "必须采集",
+          prop: "collection",
+          type: "radio", //类型为单选框
+          dicData: [
+            {
+              label: "必须",
+              value: 1,
+            },
+            {
+              label: "非必须",
+              value: 0,
+            },
+          ],
+          value: 1,
+          rules: [
+            {
+              required: true,
+              message: "是否必须采集",
+              trigger: "blur",
+            },
+          ],
         },
       ],
     },
@@ -121,7 +203,7 @@ export const comTypes: comType[] = [
   },
   {
     compentName: "铭牌绑定",
-    compentType: "mingpai",
+    compentType: "c",
   },
   {
     compentName: "多媒体采集",

+ 23 - 8
src/views/base/craftManagement/route/components/processComponent.vue

@@ -53,10 +53,7 @@
     </div>
     <div class="binContainer">
       <div v-if="isChanged || selectIndex === -1">
-        <el-empty
-          :image-size="200"
-          description="请先保存组件,然后再进行操作"
-        />
+        <el-empty :image-size="200" :description="getTipContent()" />
       </div>
       <div v-else>
         <div class="tipTitle">{{ tipTitle }}</div>
@@ -105,7 +102,6 @@ const loadTopList = () => {
 
 onMounted(async () => {
   await loadTopList();
-  isChanged.value = false;
 });
 
 // 顶部====================
@@ -140,13 +136,18 @@ const handleCommand = (itme) => {
 const clickToolCom = (com, index) => {
   selectIndex.value = index;
   currentCom.value = com;
-
-  tableType.value = com.compentType;
+  if (com.compentType === "mingpai" || com.compentType === "duomeiticaiji") {
+    isChanged.value = true;
+  } else {
+    tableType.value = com.compentType;
+    isChanged.value = false;
+  }
 };
 
 const onUpdate = () => {
   console.log("update");
   isChanged.value = true;
+  selectIndex.value = -1;
 };
 
 const clickDelete = (index) => {
@@ -171,6 +172,20 @@ const creatNewData = () => {
 const saveSortData = () => {
   bottomTableRef.value && bottomTableRef.value.saveSortData();
 };
+
+const getTipContent = (itemValue) => {
+  let str = "";
+  if (isChanged.value) {
+    if (selectIndex.value === -1) {
+      str = "请先保存组件,然后再进行操作";
+    } else {
+      str = "标准组件无需编辑";
+    }
+  } else {
+    str = "请先选择组件";
+  }
+  return str;
+};
 </script>
 
 <style lang="scss" scoped>
@@ -259,7 +274,7 @@ const saveSortData = () => {
 }
 
 .binContainer {
-  height: calc(100vh - 165px);
+  height: calc(100vh - 280px);
   width: 100%;
   background-color: #f5f7f9;
   overflow-y: auto;

+ 10 - 3
src/views/demo/hooksDemo.vue

@@ -2,7 +2,14 @@
   <div>{{ form }}</div>
   <div>{{ search }}</div>
   <el-button @click="test">测试公共弹窗</el-button>
-  <el-button v-debounce:click="testDebunce">测试防抖截流</el-button>
+  <el-button
+    v-debounce:click="
+      () => {
+        testDebunce('这是传递的参数');
+      }
+    "
+    >测试防抖截流</el-button
+  >
   <div class="mainContentBox">
     <avue-crud
       ref="crudRef"
@@ -84,8 +91,8 @@ const onSelectedFinish = (selectedValue) => {
   console.log("onSelectedFinish", selectedValue);
 };
 
-const testDebunce = () => {
-  console.log("执行了事件");
+const testDebunce = (args) => {
+  console.log("执行了事件", args);
 };
 
 // 传入一个url,后面不带/