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

不合格处置修改。

jxq 3 hete
szülő
commit
7bdd531f1b

+ 104 - 35
src/views/unqualified/DetailCom.vue

@@ -1,33 +1,37 @@
 <template>
   <div>
     <div class="sale-header">不合格品(质量问题)分析评审处置表</div>
-    <div class="sale-right">编号: {{saleModel.formNo}}</div>
+    <div class="sale-right">编号: {{ saleModel.formNo }}</div>
     <table border-collapse="collapse">
-        <tr>
-          <td>产品型号</td>
-          <td>{{ saleModel.materialModel }}</td>
-          <td>产品分类</td>
-          <td>{{ saleModel.type }}</td>
-          <td>生产批号</td>
-          <td>{{ saleModel.workOrderCode }}</td>
-        </tr>
+      <tr>
+        <td>产品型号</td>
+        <td>{{ saleModel.materialModel }}</td>
+        <td>产品分类</td>
+        <td>{{ saleModel.type }}</td>
+        <td>生产批号</td>
+        <td>{{ saleModel.workOrderCode }}</td>
+      </tr>
       <tr>
         <td>产品编号</td>
-        <td colspan="2" style="font-weight: normal;text-align: left;">{{ saleModel.seqs }}</td>
+        <td colspan="2" style="font-weight: normal; text-align: left">
+          {{ saleModel.seqs }}
+        </td>
         <td>数量</td>
-        <td colspan="2" style="font-weight: normal;">{{ saleModel.seqNum }}</td>
+        <td colspan="2" style="font-weight: normal">{{ saleModel.seqNum }}</td>
+      </tr>
+      <tr>
+        <td>器件名称及型号</td>
+        <td>{{ saleModel.componentName }}</td>
+        <td>器件检验批号或器件生产批号</td>
+        <td>{{ saleModel.checkProduceNo }}</td>
+        <td>数量</td>
+        <td>{{ saleModel.num }}</td>
       </tr>
-        <tr>
-          <td>器件名称及型号</td>
-          <td>{{ saleModel.componentName }}</td>
-          <td>器件检验批号或器件生产批号</td>
-          <td>{{ saleModel.checkProduceNo }}</td>
-          <td>数量</td>
-          <td>{{ saleModel.num }}</td>
-        </tr>
       <tr>
         <td>供方单位</td>
-        <td colspan="5" style="font-weight: normal;text-align: left;">{{ saleModel.company }}</td>
+        <td colspan="5" style="font-weight: normal; text-align: left">
+          {{ saleModel.company }}
+        </td>
       </tr>
       <tr>
         <td>审理级别</td>
@@ -38,26 +42,44 @@
         <td>发生时间</td>
         <td>{{ saleModel.happenTime }}</td>
       </tr>
-        <tr v-for="(item, index) in contentArray" :key="index">
-          <td colspan="6">
-            <div class="sale-box">
-              <div class="sale-title">{{ item.title }}</div>
-              <div class="sale-content">
-                {{ item.content }}
+      <tr v-for="(item, index) in contentArray" :key="index">
+        <td colspan="6">
+          <div class="sale-box">
+            <div class="sale-title">{{ item.title }}</div>
+            <div class="sale-content">
+              {{ item.content }}
+            </div>
+            <div class="sale-bottom">
+              <div class="desc" v-if="index === 0">
+                填表人:{{ item[`user`] }}
+              </div>
+              <div class="desc" v-if="index === 0">
+                检验人员:{{ item[`user1`] }}
               </div>
-              <div class="sale-bottom">
-                <div class="desc" v-if="index === 0">填表人:{{ item[`user`] }}</div>
-                <div class="desc" v-if="index === 0">检验人员:{{ item[`user1`] }}</div>
 
-                <div class="desc" v-if="index === 1">技术人员:{{ item[`user1`] }}</div>
-                <div class="desc" v-if="index === 1">联系电话:{{ item[`phone`] }}</div>
-                <div class="desc" v-if="index === 1">责任部门:{{ item[`user2`] }}</div>
+              <div class="desc" v-if="index === 1">
+                技术人员:{{ item[`user1`] }}
+              </div>
+              <div class="desc" v-if="index === 1">
+                联系电话:{{ item[`phone`] }}
+              </div>
+              <div class="desc" v-if="index === 1">
+                责任部门:{{ item[`user2`] }}
+              </div>
 
                 <div class="desc" v-if="index === 2 && saleModel.auditType === '1' ">分析单位:{{ item[`company`] }}</div>
                 <div class="desc" v-if="index === 2 && saleModel.auditType === '2' ">责任部门:{{ item[`company`] }}</div>
+              <div class="desc" v-if="index === 2">
+                分析单位:{{ item[`company`] }}
+              </div>
 
                 <div class="desc" v-if="index === 3 && saleModel.auditType === '1' ">分析单位:{{ item[`user`]}}</div>
                 <div class="desc" v-if="index === 3 && saleModel.auditType === '2' ">责任部门:{{ item[`user`]}}</div>
+              <div class="desc" v-if="index === 3">
+                责任部门:{{
+                  saleModel.auditType === "1" ? item[`users`] : item[`user`]
+                }}
+              </div>
 
                 <div class="desc" v-if="index === 4 && saleModel.auditType === '1' ">分析单位:{{ item[`user`] }}</div>
                 <div class="desc" v-if="index === 4 && saleModel.auditType === '2' ">责任部门:{{ item[`user`] }}</div>
@@ -69,6 +91,24 @@
             </div>
           </td>
         </tr>
+              <div class="desc" v-if="index === 4">
+                责任部门:{{ item[`user`] }}
+              </div>
+              <div class="desc" v-if="index === 5">签字:{{ item[`user`] }}</div>
+              <div class="desc" v-if="index === 6">签字:{{ item[`user`] }}</div>
+              <div class="desc">时间: {{ item.time }}</div>
+              <el-button
+                v-if="item.fileUrl"
+                link
+                type="primary"
+                size="small"
+                @click="handleDownload(item)"
+                >下载附件</el-button
+              >
+            </div>
+          </div>
+        </td>
+      </tr>
     </table>
   </div>
 </template>
@@ -84,7 +124,10 @@ const refreshView = (row) => {
 
   if (row.remark1 && JSON.parse(row.remark1).content) {
     let remark1 = JSON.parse(row.remark1);
-    contentArray.value.push({ ...remark1, title: "不合格现象(质量问题)描述:" });
+    contentArray.value.push({
+      ...remark1,
+      title: "不合格现象(质量问题)描述:",
+    });
   }
   if (row.remark2 && JSON.parse(row.remark2).content) {
     let remark2 = JSON.parse(row.remark2);
@@ -104,14 +147,40 @@ const refreshView = (row) => {
   }
   if (row.remark6 && JSON.parse(row.remark6).content) {
     let remark6 = JSON.parse(row.remark6);
-    contentArray.value.push({ ...remark6, title: "不合格品评审(审理)处置意见:" });
+    contentArray.value.push({
+      ...remark6,
+      title: "不合格品评审(审理)处置意见:",
+    });
   }
   if (row.remark7 && JSON.parse(row.remark7).content) {
     let remark7 = JSON.parse(row.remark7);
-    contentArray.value.push({ ...remark7, title: "组长(或分管领导)审批意见:" });
+    contentArray.value.push({
+      ...remark7,
+      title: "组长(或分管领导)审批意见:",
+    });
   }
 };
 
+const handleDownload = (item) => {
+  let url = import.meta.env.VITE_APP_UPLOAD_URL + item.fileUrl;
+
+  // 创建一个 <a> 元素
+  var link = document.createElement("a");
+  // 设置文件的 URL
+  link.href = url;
+  // 设置下载的文件名
+  link.download = item.fileName;
+
+  // 将 <a> 元素添加到文档中(虽然不需要在页面上可见)
+  document.body.appendChild(link);
+
+  // 触发点击事件
+  link.click();
+
+  // 移除 <a> 元素
+  document.body.removeChild(link);
+};
+
 defineExpose({ refreshView });
 </script>
 

+ 15 - 1
src/views/unqualified/handle20.vue

@@ -87,6 +87,13 @@
           filterable
         />
       </el-form-item>
+      <el-form-item label="附件" prop="fileUrl">
+        <FilesUpload
+          v-model:src="remark.fileUrl"
+          :generate-pdf="false"
+          v-model:file-name-list="fileNameList"
+        />
+      </el-form-item>
       <el-form-item label="是否通过" prop="state">
         <el-radio-group v-model="remark.state">
           <el-radio :value="0">同意</el-radio>
@@ -109,6 +116,7 @@ import DetailCom from "@/views/unqualified/DetailCom.vue";
 import { dealFeedback } from "@/api/unqualified/index";
 import { getUserTree } from "@/api/user/index";
 import { useUserStore } from "@/store";
+import FilesUpload from "@/components/Upload/FilesUpload.vue";
 const drawerVisible = ref(false);
 const detailComRef = ref(null);
 const saleModel = ref({});
@@ -173,7 +181,9 @@ const remark = reactive({
   state: 0,
   users: "",
   user5: "",
+  fileUrl: "",
 });
+const fileNameList = ref([]);
 
 const cancelClick = () => {
   drawerVisible.value = false;
@@ -207,6 +217,8 @@ const confirmClick = () => {
         user2: remark.user2,
         phone: remark.phone,
         state: remark.state,
+        fileUrl: remark.fileUrl,
+        fileName: fileNameList.value?.length > 0 ? fileNameList.value[0] : "",
       };
       let remark3 = {
         content: remark.content3,
@@ -215,7 +227,9 @@ const confirmClick = () => {
       };
       let remark4 = {
         content: remark.content4,
-        users: Array.isArray(remark.users) ? remark.users.join(",") : remark.users,
+        users: Array.isArray(remark.users)
+          ? remark.users.join(",")
+          : remark.users,
         time: now,
       };
       let remark5 = {

+ 39 - 34
src/views/unqualified/handle21.vue

@@ -5,42 +5,45 @@
     </div>
 
     <el-form
-        ref="remarkRef"
-        :model="remark"
-        label-width="150"
-        :rules="rules1"
-        style="max-width: 600px; margin-left: 80px; margin-top: 20px"
+      ref="remarkRef"
+      :model="remark"
+      label-width="150"
+      :rules="rules1"
+      style="max-width: 600px; margin-left: 80px; margin-top: 20px"
     >
       <el-form-item label="分析处置要求" prop="content">
         <el-input
-            v-model="remark.content"
-            type="textarea"
-            :autosize="{ minRows: 3, maxRows: 6 }"
+          v-model="remark.content"
+          type="textarea"
+          :autosize="{ minRows: 3, maxRows: 6 }"
         />
       </el-form-item>
       <el-form-item label="技术人员" prop="user1">
-        <el-tree-select
-            v-model="remark.user1"
-            :data="userList"
-            filterable
-        />
+        <el-tree-select v-model="remark.user1" :data="userList" filterable />
       </el-form-item>
       <el-form-item label="联系电话" prop="phone">
         <el-input v-model="remark.phone" />
       </el-form-item>
       <el-form-item label="责任部门" prop="user2">
-        <el-tree-select
-            v-model="remark.user2"
-            :data="userList"
-            filterable
-        />
+        <el-tree-select v-model="remark.user2" :data="userList" filterable />
       </el-form-item>
 
-      <el-form-item label="下一步处理人" prop="nextRemarkUser" v-if="remark.state == 0">
+      <el-form-item
+        label="下一步处理人"
+        prop="nextRemarkUser"
+        v-if="remark.state == 0"
+      >
         <el-tree-select
-            v-model="remark.nextRemarkUser"
-            :data="userList"
-            filterable
+          v-model="remark.nextRemarkUser"
+          :data="userList"
+          filterable
+        />
+      </el-form-item>
+      <el-form-item label="附件" prop="fileUrl">
+        <FilesUpload
+          v-model:src="remark.fileUrl"
+          :generate-pdf="false"
+          v-model:file-name-list="fileNameList"
         />
       </el-form-item>
       <el-form-item label="是否通过" prop="state">
@@ -62,19 +65,20 @@
 
 <script setup>
 import DetailCom from "@/views/unqualified/DetailCom.vue";
-import { dealFeedback} from "@/api/unqualified/index";
+import { dealFeedback } from "@/api/unqualified/index";
 import { getUserTree } from "@/api/user/index";
-import {useUserStore} from "@/store";
+import { useUserStore } from "@/store";
+import FilesUpload from "@/components/Upload/FilesUpload.vue";
 const drawerVisible = ref(false);
 const detailComRef = ref(null);
 const saleModel = ref({});
 const userStore = useUserStore();
-const disabledDate = (time)=> {
+const disabledDate = (time) => {
   //选择今天以及今天之后的日期
-  return time.getTime() < Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择
+  return time.getTime() < Date.now() - 8.64e7; //如果没有后面的-8.64e7就是不可以选择
   //选择今天以及今天之前的日期
   //return time.getTime() > Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择今天的
-}
+};
 const showDrawer = (row) => {
   drawerVisible.value = true;
   saleModel.value = row;
@@ -91,12 +95,8 @@ const rules1 = {
     { required: true, message: "请输入投诉或建议处置意见", trigger: "blur" },
     { min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur" },
   ],
-  user1: [
-    { required: true, message: "请输入姓名", trigger: "blur" },
-  ],
-  user2: [
-    { required: true, message: "请输入姓名", trigger: "blur" },
-  ],
+  user1: [{ required: true, message: "请输入姓名", trigger: "blur" }],
+  user2: [{ required: true, message: "请输入姓名", trigger: "blur" }],
 
   phone: [{ required: true, message: "请输入联系电话", trigger: "change" }],
   nextRemarkUser: [
@@ -114,7 +114,9 @@ const remark = reactive({
   time: "",
   nextRemarkUser: "",
   state: 0,
+  fileUrl: "",
 });
+const fileNameList = ref([]);
 
 const cancelClick = () => {
   drawerVisible.value = false;
@@ -135,7 +137,8 @@ const getUserInfo = async () => {
 
 const confirmClick = () => {
   const date = new Date();
-  const now = date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日"
+  const now =
+    date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日";
   remark.user = userStore.user.username;
   remarkRef.value.validate((valid) => {
     if (valid) {
@@ -147,6 +150,8 @@ const confirmClick = () => {
         phone: remark.phone,
         time: now,
         state: remark.state,
+        fileUrl: remark.fileUrl,
+        fileName: fileNameList.value?.length > 0 ? fileNameList.value[0] : "",
       };
       let remark3 = {
         content: "",

+ 12 - 0
src/views/unqualified/handle3.vue

@@ -36,6 +36,13 @@
           filterable
         />
       </el-form-item>
+      <el-form-item label="附件" prop="fileUrl">
+        <FilesUpload
+          v-model:src="remark.fileUrl"
+          :generate-pdf="false"
+          v-model:file-name-list="fileNameList"
+        />
+      </el-form-item>
       <el-form-item label="是否通过" prop="state">
         <el-radio-group v-model="remark.state">
           <el-radio :value="0">同意</el-radio>
@@ -58,6 +65,7 @@ import DetailCom from "@/views/unqualified/DetailCom.vue";
 import { dealFeedback } from "@/api/unqualified/index";
 import { getUserTree } from "@/api/user/index";
 import { useUserStore } from "@/store";
+import FilesUpload from "@/components/Upload/FilesUpload.vue";
 const drawerVisible = ref(false);
 const detailComRef = ref(null);
 const saleModel = ref({});
@@ -107,7 +115,9 @@ const remark = reactive({
   time: "",
   nextRemarkUser: "",
   state: 0,
+  fileUrl: "",
 });
+const fileNameList = ref([]);
 
 const cancelClick = () => {
   drawerVisible.value = false;
@@ -139,6 +149,8 @@ const confirmClick = () => {
         time: now,
         company: remark.company,
         state: remark.state,
+        fileUrl: remark.fileUrl,
+        fileName: fileNameList.value?.length > 0 ? fileNameList.value[0] : "",
       };
       let remark3 = {
         content: "",

+ 36 - 19
src/views/unqualified/handle4.vue

@@ -5,32 +5,43 @@
     </div>
 
     <el-form
-        ref="remarkRef"
-        :model="remark"
-        label-width="150"
-        :rules="rules1"
-        style="max-width: 600px; margin-left: 80px; margin-top: 20px"
+      ref="remarkRef"
+      :model="remark"
+      label-width="150"
+      :rules="rules1"
+      style="max-width: 600px; margin-left: 80px; margin-top: 20px"
     >
       <el-form-item label="采取的措施" prop="content">
         <el-input
-            v-model="remark.content"
-            type="textarea"
-            :autosize="{ minRows: 3, maxRows: 6 }"
+          v-model="remark.content"
+          type="textarea"
+          :autosize="{ minRows: 3, maxRows: 6 }"
         />
       </el-form-item>
 
-<!--      <el-form-item label="责任部门" prop="user">
+      <!--      <el-form-item label="责任部门" prop="user">
         <el-tree-select
             v-model="remark.user"
             :data="userList"
             filterable
         />
       </el-form-item>-->
-      <el-form-item label="下一步处理人" prop="nextRemarkUser" v-if="remark.state == 0">
+      <el-form-item
+        label="下一步处理人"
+        prop="nextRemarkUser"
+        v-if="remark.state == 0"
+      >
         <el-tree-select
-            v-model="remark.nextRemarkUser"
-            :data="userList"
-            filterable
+          v-model="remark.nextRemarkUser"
+          :data="userList"
+          filterable
+        />
+      </el-form-item>
+      <el-form-item label="附件" prop="fileUrl">
+        <FilesUpload
+          v-model:src="remark.fileUrl"
+          :generate-pdf="false"
+          v-model:file-name-list="fileNameList"
         />
       </el-form-item>
       <el-form-item label="是否通过" prop="state">
@@ -52,19 +63,20 @@
 
 <script setup>
 import DetailCom from "@/views/unqualified/DetailCom.vue";
-import { dealFeedback} from "@/api/unqualified/index";
+import { dealFeedback } from "@/api/unqualified/index";
 import { getUserTree } from "@/api/user/index";
-import {useUserStore} from "@/store";
+import { useUserStore } from "@/store";
+import FilesUpload from "@/components/Upload/FilesUpload.vue";
 const drawerVisible = ref(false);
 const detailComRef = ref(null);
 const saleModel = ref({});
 const userStore = useUserStore();
-const disabledDate = (time)=> {
+const disabledDate = (time) => {
   //选择今天以及今天之后的日期
-  return time.getTime() < Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择
+  return time.getTime() < Date.now() - 8.64e7; //如果没有后面的-8.64e7就是不可以选择
   //选择今天以及今天之前的日期
   //return time.getTime() > Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择今天的
-}
+};
 const showDrawer = (row) => {
   drawerVisible.value = true;
   saleModel.value = row;
@@ -102,7 +114,9 @@ const remark = reactive({
   time: "",
   nextRemarkUser: "",
   state: 0,
+  fileUrl: "",
 });
+const fileNameList = ref([]);
 
 const cancelClick = () => {
   drawerVisible.value = false;
@@ -123,7 +137,8 @@ const getUserInfo = async () => {
 
 const confirmClick = () => {
   const date = new Date();
-  const now = date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日"
+  const now =
+    date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日";
   remark.user = userStore.user.username;
   remarkRef.value.validate((valid) => {
     if (valid) {
@@ -132,6 +147,8 @@ const confirmClick = () => {
         user: remark.user,
         time: now,
         state: remark.state,
+        fileUrl: remark.fileUrl,
+        fileName: fileNameList.value?.length > 0 ? fileNameList.value[0] : "",
       };
       let remark3 = {
         content: "",

+ 35 - 18
src/views/unqualified/handle5.vue

@@ -5,17 +5,17 @@
     </div>
 
     <el-form
-        ref="remarkRef"
-        :model="remark"
-        label-width="150"
-        :rules="rules1"
-        style="max-width: 600px; margin-left: 80px; margin-top: 20px"
+      ref="remarkRef"
+      :model="remark"
+      label-width="150"
+      :rules="rules1"
+      style="max-width: 600px; margin-left: 80px; margin-top: 20px"
     >
       <el-form-item label="措施落实" prop="content">
         <el-input
-            v-model="remark.content"
-            type="textarea"
-            :autosize="{ minRows: 3, maxRows: 6 }"
+          v-model="remark.content"
+          type="textarea"
+          :autosize="{ minRows: 3, maxRows: 6 }"
         />
       </el-form-item>
 
@@ -26,11 +26,22 @@
                   filterable
               />
             </el-form-item>-->
-      <el-form-item label="下一步处理人" prop="nextRemarkUser" v-if="remark.state == 0">
+      <el-form-item
+        label="下一步处理人"
+        prop="nextRemarkUser"
+        v-if="remark.state == 0"
+      >
         <el-tree-select
-            v-model="remark.nextRemarkUser"
-            :data="userList"
-            filterable
+          v-model="remark.nextRemarkUser"
+          :data="userList"
+          filterable
+        />
+      </el-form-item>
+      <el-form-item label="附件" prop="fileUrl">
+        <FilesUpload
+          v-model:src="remark.fileUrl"
+          :generate-pdf="false"
+          v-model:file-name-list="fileNameList"
         />
       </el-form-item>
       <el-form-item label="是否通过" prop="state">
@@ -52,19 +63,20 @@
 
 <script setup>
 import DetailCom from "@/views/unqualified/DetailCom.vue";
-import { dealFeedback} from "@/api/unqualified/index";
+import { dealFeedback } from "@/api/unqualified/index";
 import { getUserTree } from "@/api/user/index";
-import {useUserStore} from "@/store";
+import { useUserStore } from "@/store";
+import FilesUpload from "@/components/Upload/FilesUpload.vue";
 const drawerVisible = ref(false);
 const detailComRef = ref(null);
 const saleModel = ref({});
 const userStore = useUserStore();
-const disabledDate = (time)=> {
+const disabledDate = (time) => {
   //选择今天以及今天之后的日期
-  return time.getTime() < Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择
+  return time.getTime() < Date.now() - 8.64e7; //如果没有后面的-8.64e7就是不可以选择
   //选择今天以及今天之前的日期
   //return time.getTime() > Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择今天的
-}
+};
 const showDrawer = (row) => {
   drawerVisible.value = true;
   saleModel.value = row;
@@ -102,7 +114,9 @@ const remark = reactive({
   time: "",
   nextRemarkUser: "",
   state: 0,
+  fileUrl: "",
 });
+const fileNameList = ref([]);
 
 const cancelClick = () => {
   drawerVisible.value = false;
@@ -123,7 +137,8 @@ const getUserInfo = async () => {
 
 const confirmClick = () => {
   const date = new Date();
-  const now = date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日"
+  const now =
+    date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate() + "日";
   remark.user = userStore.user.username;
   remarkRef.value.validate((valid) => {
     if (valid) {
@@ -132,6 +147,8 @@ const confirmClick = () => {
         user: remark.user,
         time: now,
         state: remark.state,
+        fileUrl: remark.fileUrl,
+        fileName: fileNameList.value?.length > 0 ? fileNameList.value[0] : "",
       };
       let remark3 = {
         content: "",