Forráskód Böngészése

1.编辑工业路线的工序添加上传文件功能。

jiaxiaoqiang 1 éve
szülő
commit
2ea147825c

+ 5 - 0
src/views/base/craftManagement/route/bindConfig.ts

@@ -164,5 +164,10 @@ export const formOption = {
       span: 24,
       type: "textarea",
     },
+    {
+      label: "tbom文件",
+      prop: "tbomUrl",
+      span: 24,
+    },
   ],
 };

+ 293 - 289
src/views/base/craftManagement/route/bindProcess.vue

@@ -13,13 +13,13 @@
           :icon="Document"
           size="small"
           @click="saveFlow"
-        >保存</el-button
+          >保存</el-button
         >
       </el-space>
     </div>
     <div class="binContainer">
       <div class="processTree">
-        <el-scrollbar >
+        <el-scrollbar>
           <el-collapse v-model="activeNames">
             <el-collapse-item
               v-for="(pProcess, pIndex) in list1"
@@ -53,32 +53,32 @@
         </el-scrollbar>
       </div>
       <div class="flowBox">
-        <el-scrollbar style="padding-bottom: 20px;">
-        <VueDraggable
-          v-model="list2"
-          :animation="150"
-          group="people"
-          @update="onUpdate"
-          style="min-width: 400px"
-          @add="onClone"
-        >
-          <div
-            v-for="(item, index) in list2"
-            :key="item.uuid"
-            class="flowItem"
-            @click="clickFlowItem(item, index)"
+        <el-scrollbar style="padding-bottom: 20px">
+          <VueDraggable
+            v-model="list2"
+            :animation="150"
+            group="people"
+            @update="onUpdate"
+            style="min-width: 400px"
+            @add="onClone"
           >
-            <div class="indexLabel">工序 {{ index + 1 }}</div>
-            <div :class="getFlowNameClass(index)">
-              {{ item?.operationVO?.operationName }}
-            </div>
-            <div>
-              <Delete class="flowDelete" @click.stop="clickDelete(index)" />
+            <div
+              v-for="(item, index) in list2"
+              :key="item.uuid"
+              class="flowItem"
+              @click="clickFlowItem(item, index)"
+            >
+              <div class="indexLabel">工序 {{ index + 1 }}</div>
+              <div :class="getFlowNameClass(index)">
+                {{ item?.operationVO?.operationName }}
+              </div>
+              <div>
+                <Delete class="flowDelete" @click.stop="clickDelete(index)" />
+              </div>
+              <Bottom class="arrow" v-show="index < list2.length - 1" />
             </div>
-            <Bottom class="arrow" v-show="index < list2.length - 1" />
-          </div>
-        </VueDraggable>
-      </el-scrollbar>
+          </VueDraggable>
+        </el-scrollbar>
       </div>
       <div class="detailInfo">
         <div v-if="selectIndex > -1 && !isChanged">
@@ -87,10 +87,14 @@
             :option="formOption"
             v-model="currentProcess"
             style="padding: 10px; background-color: white"
-          />
+          >
+            <template #tbomUrl>
+              <FilesUpload v-model:src="currentProcess.tbomUrl" />
+            </template>
+          </avue-form>
           <div class="editProcces">
             <el-button type="primary" :icon="Grid" @click="editProComponent"
-            >编辑工序组件</el-button
+              >编辑工序组件</el-button
             >
           </div>
         </div>
@@ -100,310 +104,310 @@
   </div>
 </template>
 <script setup>
-  import {
-    Back,
-    Download,
-    Document,
-    Delete,
-    Bottom,
-    Grid,
-  } from "@element-plus/icons-vue";
-  import { VueDraggable } from "vue-draggable-plus";
-  import { processTreeList } from "@/api/craft/process/index";
-  import { useCommonStoreHook, useDictionaryStore } from "@/store";
-  import {
-    processesByRouteId,
-    saveProcessInRoute,
-    updateProcess,
-  } from "@/api/craft/route/index";
-  import { v4 as uuidv4 } from "uuid";
-  import { formOption } from "./bindConfig";
-  import { ElMessage } from "element-plus";
+import {
+  Back,
+  Download,
+  Document,
+  Delete,
+  Bottom,
+  Grid,
+} from "@element-plus/icons-vue";
+import { VueDraggable } from "vue-draggable-plus";
+import { processTreeList } from "@/api/craft/process/index";
+import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {
+  processesByRouteId,
+  saveProcessInRoute,
+  updateProcess,
+} from "@/api/craft/route/index";
+import { v4 as uuidv4 } from "uuid";
+import { formOption } from "./bindConfig";
+import { ElMessage } from "element-plus";
 
-  const router = useRouter();
-  const route = useRoute();
+const router = useRouter();
+const route = useRoute();
 
-  // 数据字典相关
-  const { dicts } = useDictionaryStore();
+// 数据字典相关
+const { dicts } = useDictionaryStore();
 
-  // 顶部====================
-  const back = () => {
-    router.back();
-  };
+// 顶部====================
+const back = () => {
+  router.back();
+};
 
-  const download = () => {};
+const download = () => {};
 
-  // 左侧工序树====================
-  const activeNames = ref([0]);
-  const handleChange = (val) => {};
+// 左侧工序树====================
+const activeNames = ref([0]);
+const handleChange = (val) => {};
 
-  const list1 = ref([]);
+const list1 = ref([]);
 
-  // 由于工序和(工序-工艺)模型字段不同,需要自定义克隆
-  const clone = (origin) => {
-    const data = JSON.parse(JSON.stringify(origin));
-    return {
-      created: "",
-      creator: "",
-      deleted: 0,
-      deptId: "",
-      id: null,
-      uuid: uuidv4(),
-      nextOperationId: "", //下一工序id
-      operationId: "", //	当前工序id
-      operationSort: 0, //当前工序排序号
-      operationVO: data,
-      orgId: "",
-      processRouteId: route.params.id, //工艺路线id
-      updated: "",
-      updator: "",
-      virtualCode: "",
-    };
+// 由于工序和(工序-工艺)模型字段不同,需要自定义克隆
+const clone = (origin) => {
+  const data = JSON.parse(JSON.stringify(origin));
+  return {
+    created: "",
+    creator: "",
+    deleted: 0,
+    deptId: "",
+    id: null,
+    uuid: uuidv4(),
+    nextOperationId: "", //下一工序id
+    operationId: "", //	当前工序id
+    operationSort: 0, //当前工序排序号
+    operationVO: data,
+    orgId: "",
+    processRouteId: route.params.id, //工艺路线id
+    updated: "",
+    updator: "",
+    virtualCode: "",
   };
+};
 
-  // 保存中间的工序列表
-  const saveFlow = async () => {
-    for (let i = 0; i < list2.value.length; i++) {
-      list2.value[i].operationSort = i;
-      list2.value[i].operationId = list2.value[i]?.operationVO?.id;
-      list2.value[i].operation = list2.value[i]?.operationVO; //后端入参和返回不一样,在这里处理一下。
-      if (i === list2.value.length - 1) {
-        list2.value[i].nextOperationId = null;
-      } else {
-        list2.value[i].nextOperationId = list2.value[i + 1]?.operationVO?.id;
-      }
+// 保存中间的工序列表
+const saveFlow = async () => {
+  for (let i = 0; i < list2.value.length; i++) {
+    list2.value[i].operationSort = i;
+    list2.value[i].operationId = list2.value[i]?.operationVO?.id;
+    list2.value[i].operation = list2.value[i]?.operationVO; //后端入参和返回不一样,在这里处理一下。
+    if (i === list2.value.length - 1) {
+      list2.value[i].nextOperationId = null;
+    } else {
+      list2.value[i].nextOperationId = list2.value[i + 1]?.operationVO?.id;
     }
-    let p = {
-      processRouteId: route.params.id,
-      routeOpList: list2.value,
-    };
-    let res = await saveProcessInRoute(p);
-    // Elmessage.success("保存成功");
-    loadProcessesFlow();
+  }
+  let p = {
+    processRouteId: route.params.id,
+    routeOpList: list2.value,
   };
+  let res = await saveProcessInRoute(p);
+  // Elmessage.success("保存成功");
+  loadProcessesFlow();
+};
 
-  const loadTreeData = () => {
-    processTreeList().then((res) => {
-      list1.value = res.data ?? [];
-    });
-  };
+const loadTreeData = () => {
+  processTreeList().then((res) => {
+    list1.value = res.data ?? [];
+  });
+};
 
-  // 中间列表====================
-  const list2 = ref([]);
-  const selectIndex = ref(-1);
-  const isChanged = ref(true); //如果中间列表发生了改变则不显示右侧信息
-  // 点击中间列表事件,需要设置index和值
-  const clickFlowItem = (item, index) => {
-    if (isChanged.value) {
-      ElMessage.warning("请先保存工序列表");
-      return;
-    }
-    selectIndex.value = index;
-    currentProcess.value = item.operationVO;
-  };
+// 中间列表====================
+const list2 = ref([]);
+const selectIndex = ref(-1);
+const isChanged = ref(true); //如果中间列表发生了改变则不显示右侧信息
+// 点击中间列表事件,需要设置index和值
+const clickFlowItem = (item, index) => {
+  if (isChanged.value) {
+    ElMessage.warning("请先保存工序列表");
+    return;
+  }
+  selectIndex.value = index;
+  currentProcess.value = item.operationVO;
+};
 
-  const clickDelete = (index) => {
-    list2.value.splice(index, 1);
-    onUpdate();
-  };
+const clickDelete = (index) => {
+  list2.value.splice(index, 1);
+  onUpdate();
+};
 
-  const onClone = () => {
-    isChanged.value = true;
-    tipContent.value = "请先保存工序列表,再选择工序进行编辑";
-  };
+const onClone = () => {
+  isChanged.value = true;
+  tipContent.value = "请先保存工序列表,再选择工序进行编辑";
+};
 
-  const onUpdate = () => {
-    //   中间发生了改变调用
-    selectIndex.value = -1;
-    isChanged.value = true;
-    tipContent.value = "请先保存工序列表,再选择工序进行编辑";
-  };
+const onUpdate = () => {
+  //   中间发生了改变调用
+  selectIndex.value = -1;
+  isChanged.value = true;
+  tipContent.value = "请先保存工序列表,再选择工序进行编辑";
+};
 
-  const getFlowNameClass = (index) => {
-    return index === selectIndex.value ? "nameLabelSelect" : "nameLabelCommon";
-  };
+const getFlowNameClass = (index) => {
+  return index === selectIndex.value ? "nameLabelSelect" : "nameLabelCommon";
+};
 
-  const loadProcessesFlow = async () => {
-    const res = await processesByRouteId(route.params.id);
+const loadProcessesFlow = async () => {
+  const res = await processesByRouteId(route.params.id);
 
-    list2.value = res.data ?? [];
-    isChanged.value = false;
-    tipContent.value = "请选择需要编辑的工序";
-  };
+  list2.value = res.data ?? [];
+  isChanged.value = false;
+  tipContent.value = "请选择需要编辑的工序";
+};
 
-  // 右侧具体信息====================
-  const formRef = ref(null);
-  const currentProcess = ref({});
-  const tipContent = ref("");
-  const handleSubmit = () => {};
+// 右侧具体信息====================
+const formRef = ref(null);
+const currentProcess = ref({});
+const tipContent = ref("");
+const handleSubmit = () => {};
 
-  const editProComponent = async () => {
-    // saveFlow();
-    let res = await updateProcess(currentProcess.value);
-    ElMessage.success("保存成功");
-    router.push({
-      path: `/base/craftManagement/processCom/${currentProcess.value.id}`,
-      query: { prodtCode: route.query.prodtCode, routeId: route.query.routeId },
-    });
-  };
+const editProComponent = async () => {
+  // saveFlow();
+  let res = await updateProcess(currentProcess.value);
+  ElMessage.success("保存成功");
+  router.push({
+    path: `/base/craftManagement/processCom/${currentProcess.value.id}`,
+    query: { prodtCode: route.query.prodtCode, routeId: route.query.routeId },
+  });
+};
 
-  // 全局=======
+// 全局=======
 
-  onMounted(() => {
-    loadTreeData();
-    loadProcessesFlow();
-  });
+onMounted(() => {
+  loadTreeData();
+  loadProcessesFlow();
+});
 
-  const getNameByDictType = (dictValue) => {
-    let str = "";
-    dicts?.workshop_section?.forEach((element) => {
-      if (element?.dictValue === dictValue) {
-        str = element?.dictLabel ?? "===";
-      }
-    });
-    return str;
-  };
+const getNameByDictType = (dictValue) => {
+  let str = "";
+  dicts?.workshop_section?.forEach((element) => {
+    if (element?.dictValue === dictValue) {
+      str = element?.dictLabel ?? "===";
+    }
+  });
+  return str;
+};
 </script>
 
 <style lang="scss" scoped>
-  .binContainer {
-    height: calc(100vh - 165px);
-    background-color: #f5f7f9;
-    overflow-y: scroll;
-    // background-color: white;
-    padding: 0;
-    display: flex;
-  }
+.binContainer {
+  height: calc(100vh - 165px);
+  background-color: #f5f7f9;
+  overflow-y: scroll;
+  // background-color: white;
+  padding: 0;
+  display: flex;
+}
 
-  .header {
-    height: 50px;
-    display: flex;
-    background-color: #f5f7f9;
-    justify-content: space-between;
-    align-items: center;
-    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-  }
+.header {
+  height: 50px;
+  display: flex;
+  background-color: #f5f7f9;
+  justify-content: space-between;
+  align-items: center;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
 
-  .processTree {
-    width: 220px;
-    height: 100%;
-    border-right: 1px solid rgba(0, 0, 0, 0.1);
-    .treeChild {
-      background: #f2f2f2;
-      padding: 20px 8px 10px 8px;
-      .childItem {
-        width: 100%;
-        height: 28px;
-        background: #ffffff;
-        border-radius: 4px 4px 4px 4px;
-        border: 1px solid rgba(35, 32, 50, 0.1);
-        margin-bottom: 10px;
-        text-align: center;
-      }
+.processTree {
+  width: 220px;
+  height: 100%;
+  border-right: 1px solid rgba(0, 0, 0, 0.1);
+  .treeChild {
+    background: #f2f2f2;
+    padding: 20px 8px 10px 8px;
+    .childItem {
+      width: 100%;
+      height: 28px;
+      background: #ffffff;
+      border-radius: 4px 4px 4px 4px;
+      border: 1px solid rgba(35, 32, 50, 0.1);
+      margin-bottom: 10px;
+      text-align: center;
     }
   }
+}
 
-  .flowBox {
-    flex: 1;
-    display: flex;
-    justify-content: center;
-    overflow-y: auto;
-    padding-top: 47px;
-    padding-bottom: 47px;
-    .flowContain {
-      width: 400px;
+.flowBox {
+  flex: 1;
+  display: flex;
+  justify-content: center;
+  overflow-y: auto;
+  padding-top: 47px;
+  padding-bottom: 47px;
+  .flowContain {
+    width: 400px;
 
-      min-height: 200px;
-    }
-    .flowItem {
-      height: 50px;
-      width: 400px;
-      margin-bottom: 20px;
-      display: flex;
-      justify-content: space-between;
-      position: relative;
-      .indexLabel {
-        line-height: 50px;
+    min-height: 200px;
+  }
+  .flowItem {
+    height: 50px;
+    width: 400px;
+    margin-bottom: 20px;
+    display: flex;
+    justify-content: space-between;
+    position: relative;
+    .indexLabel {
+      line-height: 50px;
 
-        font-size: 14px;
-        color: #6e7993;
+      font-size: 14px;
+      color: #6e7993;
 
-        text-align: left;
-      }
-      .nameLabelCommon {
-        width: 299px;
-        line-height: 50px;
-        background: #ffffff;
-        box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.5);
-        border-radius: 4px 4px 4px 4px;
-        border: 1px solid #232032;
-        text-align: center;
-      }
-      .nameLabelSelect {
-        width: 299px;
-        line-height: 50px;
-        background: rgba(10, 89, 247, 0.2);
-        box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.5);
-        border-radius: 4px 4px 4px 4px;
-        border: 2px solid #0a59f7;
-        text-align: center;
-      }
-      .flowDelete {
-        width: 1em;
-        height: 1em;
-        color: red;
-        visibility: hidden;
-      }
-      .arrow {
-        position: absolute;
-        width: 10px;
-        height: 18px;
-        top: 50px;
-        left: 50%;
-      }
+      text-align: left;
+    }
+    .nameLabelCommon {
+      width: 299px;
+      line-height: 50px;
+      background: #ffffff;
+      box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.5);
+      border-radius: 4px 4px 4px 4px;
+      border: 1px solid #232032;
+      text-align: center;
     }
-    .flowItem:hover {
-      .flowDelete {
-        visibility: visible;
-      }
+    .nameLabelSelect {
+      width: 299px;
+      line-height: 50px;
+      background: rgba(10, 89, 247, 0.2);
+      box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.5);
+      border-radius: 4px 4px 4px 4px;
+      border: 2px solid #0a59f7;
+      text-align: center;
+    }
+    .flowDelete {
+      width: 1em;
+      height: 1em;
+      color: red;
+      visibility: hidden;
+    }
+    .arrow {
+      position: absolute;
+      width: 10px;
+      height: 18px;
+      top: 50px;
+      left: 50%;
     }
   }
-
-  .detailInfo {
-    width: 320px;
-    height: 100%;
-    border-left: 1px solid rgba(0, 0, 0, 0.1);
-    .editProcces {
-      display: flex;
-      justify-content: center;
-      margin-top: 15px;
+  .flowItem:hover {
+    .flowDelete {
+      visibility: visible;
     }
   }
+}
 
-  .title {
-    line-height: 44px;
-    color: #6f7991;
-    font-size: 14px;
-    font-weight: bold;
-    text-align: left;
-    margin-left: 20px;
-  }
-  .title2 {
-    color: #232032;
-    font-size: 14px;
-    text-align: left;
-    margin-left: 19px;
-  }
-  .tipContent {
-    width: 100%;
-    text-align: center;
-    margin-top: 20px;
-    color: #e6a23c;
+.detailInfo {
+  width: 320px;
+  height: 100%;
+  border-left: 1px solid rgba(0, 0, 0, 0.1);
+  .editProcces {
+    display: flex;
+    justify-content: center;
+    margin-top: 15px;
   }
+}
+
+.title {
+  line-height: 44px;
+  color: #6f7991;
+  font-size: 14px;
+  font-weight: bold;
+  text-align: left;
+  margin-left: 20px;
+}
+.title2 {
+  color: #232032;
+  font-size: 14px;
+  text-align: left;
+  margin-left: 19px;
+}
+.tipContent {
+  width: 100%;
+  text-align: center;
+  margin-top: 20px;
+  color: #e6a23c;
+}
 </style>
 
 <style>
-  .el-collapse-item__content {
-    padding: 0;
-  }
+.el-collapse-item__content {
+  padding: 0;
+}
 </style>

+ 1 - 1
src/views/plan/order/index.vue

@@ -680,7 +680,7 @@ const queryExpandAlias = () => {
 };
 
 const handleQuery = (params, done) => {
-  console.log(JSON.stringify(option.value.column));
+  // console.log(JSON.stringify(option.value.column));
   loading.value = true;
   const querySearch = {
     pageSize: page.value.pageSize,