From 00064cb80d74bb19e499764cb39d499a3e3f08b2 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 25 三月 2025 14:41:01 +0800
Subject: [PATCH] 外购件完成80%

---
 src/api/business/productOrder.js             |  122 +++++++-------
 src/components/Table/lims-table.vue          |    4 
 src/views/business/outsourcedParts/index.vue |  289 ++++++++++++++++++++++++++++++++++++
 src/api/business/outsourcedParts.js          |   29 +++
 4 files changed, 381 insertions(+), 63 deletions(-)

diff --git a/src/api/business/outsourcedParts.js b/src/api/business/outsourcedParts.js
new file mode 100644
index 0000000..e05ec57
--- /dev/null
+++ b/src/api/business/outsourcedParts.js
@@ -0,0 +1,29 @@
+// 澶栬喘浠堕〉闈㈢浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+// 鍒楄〃
+export function selectInspection(query) {
+  return request({
+    url: "/inspectionPurchased/selectInspection",
+    method: "get",
+    params: query,
+  });
+}
+
+// 缂栬緫/鏂板
+export function addOrUpdateInspection(query) {
+  return request({
+    url: "/inspectionPurchased/addOrUpdateInspection",
+    method: "post",
+    data: query,
+  });
+}
+
+// 鍒犻櫎
+export function delInspection(query) {
+  return request({
+    url: "/inspectionPurchased/delInspection",
+    method: "delete",
+    params: query,
+  });
+}
diff --git a/src/api/business/productOrder.js b/src/api/business/productOrder.js
index 8be32b1..f72cb01 100644
--- a/src/api/business/productOrder.js
+++ b/src/api/business/productOrder.js
@@ -1,124 +1,124 @@
 // 鎴愬搧涓嬪崟椤甸潰鐩稿叧鎺ュ彛
-import request from '@/utils/request'
+import request from "@/utils/request";
 
 // 鏌ヨ鎴愬搧涓嬪崟鍒楄〃
 export function selectInsOrderParameter(query) {
   return request({
-    url: '/insOrder/selectInsOrderParameter',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrder/selectInsOrderParameter",
+    method: "get",
+    params: query,
+  });
 }
 // 淇敼鎴愬搧濮旀墭缂栧彿
 export function updateOrderEntrustCode(query) {
   return request({
-    url: '/insOrder/updateOrderEntrustCode',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/updateOrderEntrustCode",
+    method: "post",
+    data: query,
+  });
 }
 // 鎴愬搧妫�楠屽崟鍏ㄩ儴淇℃伅瀵煎嚭
 export function rawAllInsOrderExport(query) {
   return request({
-    url: '/insOrder/rawAllInsOrderExport',
-    method: 'get',
+    url: "/insOrder/rawAllInsOrderExport",
+    method: "get",
     params: query,
-    responseType: "blob"
-  })
+    responseType: "blob",
+  });
 }
 // 灏嗗緟妫�楠岀殑鐨勬挙閿�杩涜鏇存敼
 export function updateInspected(query) {
   return request({
-    url: '/insOrder/updateInspected',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/updateInspected",
+    method: "post",
+    data: query,
+  });
 }
 // 鎾ら攢瀹℃牳閫氳繃
 export function checkUpdate(query) {
   return request({
-    url: '/insOrder/checkUpdate',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/checkUpdate",
+    method: "post",
+    data: query,
+  });
 }
 // 鏌ヨ璁㈠崟鎬诲叡棰勮鏃堕棿
 export function selectOrderManDay(query) {
   return request({
-    url: '/insOrder/selectOrderManDay',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrder/selectOrderManDay",
+    method: "get",
+    params: query,
+  });
 }
 // 浠诲姟浜ゆ帴
 export function upPlanUser2(query) {
   return request({
-    url: '/insOrderPlan/upPlanUser2',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrderPlan/upPlanUser2",
+    method: "get",
+    params: query,
+  });
 }
 // 妫�楠屼笅鍙�
 export function upInsOrder(query) {
   return request({
-    url: '/insOrder/upInsOrder',
-    method: 'post',
-    params: query
-  })
+    url: "/insOrder/upInsOrder",
+    method: "post",
+    params: query,
+  });
 }
 // 灏嗗緟瀹℃牳鏇存柊鎴愭挙閿�鐘舵��
 export function updateStatus(query) {
   return request({
-    url: '/insOrder/updateStatus',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/updateStatus",
+    method: "post",
+    data: query,
+  });
 }
 // 灏嗗緟瀹℃牳鏇存柊鎴愭挙閿�鐘舵��
 export function delInsOrder(query) {
   return request({
-    url: '/insOrder/delInsOrder',
-    method: 'delete',
-    params: query
-  })
+    url: "/insOrder/delInsOrder",
+    method: "delete",
+    params: query,
+  });
 }
 // 灏嗗緟瀹℃牳鏇存柊鎴愭挙閿�鐘舵��
 export function selectNoProducts(query) {
   return request({
-    url: '/insOrder/selectNoProducts',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrder/selectNoProducts",
+    method: "get",
+    params: query,
+  });
 }
 // 鏌ヨ鎴愬搧鏍囩鎵撳嵃淇℃伅
 export function labelOrderPrinting(query) {
   return request({
-    url: '/insOrder/labelOrderPrinting',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/labelOrderPrinting",
+    method: "post",
+    data: query,
+  });
 }
 // 鏍规嵁璁㈠崟id鏌ヨ鏍峰搧
 export function getSampleByOrderId(query) {
   return request({
-    url: '/insOrder/getSampleByOrderId',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrder/getSampleByOrderId",
+    method: "get",
+    params: query,
+  });
 }
 // 鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鏍�
 export function getProductTreeBySampleId(query) {
   return request({
-    url: '/insOrder/getProductTreeBySampleId',
-    method: 'get',
-    params: query
-  })
+    url: "/insOrder/getProductTreeBySampleId",
+    method: "get",
+    params: query,
+  });
 }
 // 娣诲姞閬楁紡鐨勬楠岄」
 export function addOmitOrderProduct(query) {
   return request({
-    url: '/insOrder/addOmitOrderProduct',
-    method: 'post',
-    data: query
-  })
+    url: "/insOrder/addOmitOrderProduct",
+    method: "post",
+    data: query,
+  });
 }
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index 6bd9259..f3f3b41 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -15,7 +15,7 @@
         :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true"
         :min-width="item.dataType == 'action' ? btnWidth : getTitleWidth(item)" :sortable="item.sortable ? true : false"
         :type="item.type"
-        :width="item.dataType == 'action' ? btnWidth : (column.length < 6 ? 'auto' : getTitleWidth(item))"
+        :width="item.dataType == 'action' ? btnWidth : (column.length < 10 ? 'auto' : getTitleWidth(item))"
         align="center">
         <!-- <div class="123" v-if="item.type == ''"> -->
         <template v-if="item.hasOwnProperty('colunmTemplate')" :slot="item.colunmTemplate" slot-scope="scope">
@@ -305,7 +305,7 @@
       return count * 15 + 50 + "px";
     },
     getTitleWidth(row) {
-      if (row.label.includes('鏃堕棿') || row.label.includes('缂栧彿') || row.label.includes('鏍峰搧鍚嶇О') || row.label.includes('闆朵欢')) {
+      if (row.label.includes('鏃堕棿') || row.label.includes('鍙�') || row.label.includes('鏍峰搧鍚嶇О') || row.label.includes('闆朵欢')) {
         return 160
       } else if (row.label.includes('浜у搧') || row.label.includes('妯℃澘鍚嶇О')) {
         return 200
diff --git a/src/views/business/outsourcedParts/index.vue b/src/views/business/outsourcedParts/index.vue
new file mode 100644
index 0000000..eaecbd8
--- /dev/null
+++ b/src/views/business/outsourcedParts/index.vue
@@ -0,0 +1,289 @@
+<template>
+  <div class="app-container">
+    <div class="search">
+      <el-form :model="queryParams" ref="queryParams" size="small" :inline="true">
+        <el-row>
+          <el-form-item label="浜у搧鍚嶇О" prop="name">
+            <el-input v-model="queryParams.name" clearable placeholder="璇疯緭鍏�" size="small"
+              @keyup.enter.native="refreshTable"></el-input>
+          </el-form-item>
+          <el-form-item label="SP鍙�" prop="spNum">
+            <el-input v-model="queryParams.spNum" clearable placeholder="璇疯緭鍏�" size="small"
+              @keyup.enter.native="refreshTable">
+            </el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="mini" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+            <el-button size="mini" @click="refresh()">閲� 缃�</el-button>
+          </el-form-item>
+        </el-row>
+      </el-form>
+      <div>
+        <el-button size="mini" type="primary">鑾峰彇璁㈠崟</el-button>
+        <el-button size="mini" type="primary" @click="openAdd('鏂板')">鏂板</el-button>
+      </div>
+    </div>
+    <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 220px)'"
+      :page="page" @pagination="pagination"></lims-table>
+    <!-- 鏂板/缂栬緫 -->
+    <el-dialog :title="title" :visible.sync="addDia" width="500px">
+      <el-form :model="addForm" v-if="addDia" ref="addForm" :rules="addRules" label-position="right"
+        label-width="120px">
+        <el-form-item label="浜у搧" prop="name">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.name"
+            :disabled="title == '妫�楠�'"></el-input>
+        </el-form-item>
+        <el-form-item label="鏉ユ枡鏁伴噺" prop="num">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.num" :disabled="title == '妫�楠�'">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="渚涜揣鍘傚" prop="supplier">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.supplier" :disabled="title == '妫�楠�'">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="璁㈠崟鍙�" prop="orderNum">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.orderNum" :disabled="title == '妫�楠�'">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="SP鍙�" prop="spNum">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.spNum" :disabled="title == '妫�楠�'">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input size="small" placeholder="璇疯緭鍏�" type="textarea" :rows="2" clearable v-model="addForm.remark"
+            :disabled="title == '妫�楠�'">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="澶栬" prop="inspectionItems" v-if="title == '妫�楠�'">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.inspectionItems">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="妫�娴嬬粨鏋�" prop="result" v-if="title == '妫�楠�'">
+          <el-switch v-model="addForm.result" active-text="鍚堟牸" inactive-text="涓嶅悎鏍�" active-value="鍚堟牸"
+            inactive-value="涓嶅悎鏍�">
+          </el-switch>
+        </el-form-item>
+        <el-form-item label="娴嬭瘯鏂囦欢" prop="file" v-if="title == '妫�楠�'">
+          <el-upload action="#" :auto-upload="false" :multiple="false"
+            accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.pdf,' :on-change="handleChangeUpload">
+            <el-button size="mini" type="primary">涓婁紶闄勪欢</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addDia = false">鍙� 娑�</el-button>
+        <el-button :loading="uploading" type="primary" @click="submitProduct('addForm')">纭� 璁�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import { selectInspection, addOrUpdateInspection, delInspection } from '@/api/business/outsourcedParts.js'
+export default {
+  components: { limsTable },
+  data() {
+    return {
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "濮旀墭缂栧彿", prop: "entrustmentNo" },
+        { label: "浜у搧", prop: "name" },
+        { label: "鏉ユ枡鏁伴噺", prop: "num" },
+        {
+          label: "渚涜揣鍘傚",
+          prop: "supplier"
+        },
+        { label: "璁㈠崟鍙�", prop: "orderNum" },
+        { label: "SP鍙�", prop: "spNum" },
+        {
+          label: "妫�楠岀姸鎬�", prop: "inspectionStatus", dataType: 'tag',
+          formatData: (params) => {
+            let obj = this.inspectionTaskState.find(m => m.value == params)
+            if (obj) {
+              return obj.label
+            } else {
+              return ''
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return 'danger'
+            } else {
+              return 'success'
+            }
+          }
+        },
+        { label: "澶囨敞", prop: "remark" },
+        {
+          dataType: "action",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.openAdd("缂栬緫", row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "妫�楠�",
+              type: "text",
+              clickFun: (row) => {
+                this.openAdd('妫�楠�', row);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 20,
+        current: 0,
+      },
+      tableLoading: false,
+      title: "鏂板",
+      addDia: false,
+      addForm: {},
+      addRules: {
+        name: [{ required: true, message: "璇疯緭鍏ヤ骇鍝佸悕绉�", trigger: "blur" }],
+        num: [
+          { required: true, message: "璇疯緭鍏ユ潵鏂欐暟閲�", trigger: "blur" },
+        ],
+        supplier: [
+          { required: true, message: "璇疯緭鍏ヤ緵璐у巶瀹�", trigger: "blur" },
+        ],
+        orderNum: [{ required: true, message: "璇疯緭鍏ヨ鍗曞彿", trigger: "blur" }],
+        spNum: [
+          { required: true, message: "璇疯緭鍏P鍙�", trigger: "blur" },
+        ],
+        inspectionItems: [
+          { required: true, message: "璇疯緭鍏ュ瑙�", trigger: "blur" },
+        ],
+      },
+      uploading: false,
+      inspectionTaskState: []
+    }
+  },
+  mounted() {
+    this.getDicts("inspection_task_state").then((response) => {
+      this.inspectionTaskState = this.dictToValue(response.data);
+    });
+  },
+  methods: {
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      selectInspection({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
+    },
+    refresh() {
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
+    },
+    // 鏂板/缂栬緫/妫�楠�
+    openAdd(title, row) {
+      this.title = title;
+      this.file = null;
+      if (row) {
+        this.addForm = row;
+      } else {
+        this.addForm = {};
+      }
+      this.addDia = true;
+    },
+    // 鏂板/缂栬緫/妫�楠�--鎻愪氦
+    submitProduct(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.uploading = true;
+          if (this.title == "鏂板" || this.title == "缂栬緫") {
+            addOrUpdateInspection(this.addForm)
+              .then((res) => {
+                this.uploading = false;
+                if (res.code != 200) {
+                  return;
+                }
+                this.$message.success("鎻愪氦鎴愬姛");
+                this.refresh();
+                this.addDia = false;
+              })
+              .catch((err) => {
+                this.uploading = false;
+              });
+          } else {
+            // 妫�楠�
+            let fd = new FormData();
+            //鏂囦欢淇℃伅涓璻aw鎵嶆槸鐪熺殑鏂囦欢
+            if (this.file) {
+              fd.append("file", this.file.raw);
+            }
+          }
+        } else {
+          return false;
+        }
+      });
+    },
+    // 鍒犻櫎
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delInspection({ id: row.id }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("鍒犻櫎鎴愬姛");
+              this.refresh();
+            }
+          });
+        })
+        .catch(() => { });
+    },
+    handleChangeUpload(file, fileLists) {
+      this.addForm.file = file
+    },
+
+  }
+}
+</script>
+
+<style scoped>
+.search {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3