dengrui 8 months ago
parent
commit
3c64abed8a

+ 9 - 0
src/api/reject/index.ts

@@ -0,0 +1,9 @@
+import request from "@/utils/request";
+export function handle(data: any) {
+  return request({
+    url: "/api/v1/error/handle",
+    method: "post",
+    data,
+  });
+}
+

+ 4 - 0
src/components/Upload/FilesUpload.vue

@@ -105,6 +105,9 @@ const fileNameList = useVModel(props, "fileNameList", emit); //多文件上传
 
 // el-upload 绑定的值
 const fileList = ref<UploadUserFile[]>([]);
+const setFileList = (data: any) => {
+  fileList.value = data;
+};
 
 const handleChange = async (uploadFile: UploadFile) => {
   if (uploadFile.size! > props.size * 1048 * 1048) {
@@ -144,6 +147,7 @@ const handlePreview = (index: number) => {
     PDFVisible.value = true;
   }
 };
+defineExpose({ setFileList });
 </script>
 
 <style scoped lang="scss">

+ 651 - 0
src/views/quality/feedback/components/process.vue

@@ -0,0 +1,651 @@
+<template>
+  <div class="body">
+    <el-form ref="ruleFormRef" :model="formData" label-width="250">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="物料名称:">
+            <span class="text">{{ formData.materialName }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="流转卡号:">
+            <span class="text">{{ formData.seqs }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发生地点:">
+            <span class="text">{{ formData.address }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="发生时间:">
+            <span class="text">{{ formData.remark1.time }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="问题描述:">
+            <span class="text">{{ formData.remark1.content }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发起人:">
+            <span class="text">{{ formData.remark1.user1 }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="审理级别:">
+            <span class="text">{{ formData.remark1.lv }}级</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="stage" v-if="userNameArray[0]">
+        <el-form-item
+          label="不合格现象(质量问题)描述:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark2.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark3.user3"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark2.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark2.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[1]">
+        <el-form-item label="原因分析:" prop="remark1[content]">
+          <el-input type="textarea" v-model="formData.remark3.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList"
+                v-model:pdf-list="pdfUrlList"
+                v-model:file-name-list="fileNameList"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles"
+                ref="load1"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark4.user4"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark3.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark3.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[2]">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="是否有纠正措施:" prop="remark1[content]">
+              <el-radio-group v-model="formData.remark4.res">
+                <el-radio value="0">否</el-radio>
+                <el-radio value="1">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" v-if="formData.remark4.res == '1'">
+            <el-form-item label="纠正措施通知单编号:">
+              <el-input v-model="formData.remark4.resNum" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList1"
+                v-model:pdf-list="pdfUrlList1"
+                v-model:file-name-list="fileNameList1"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles1"
+                ref="load2"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark5.user5"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark4.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark4.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[3]">
+        <el-form-item label="采取的措施:" prop="remark1[content]">
+          <el-input type="textarea" v-model="formData.remark5.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList2"
+                v-model:pdf-list="pdfUrlList2"
+                v-model:file-name-list="fileNameList2"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles2"
+                ref="load3"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark6.user6"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark5.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark5.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[4]">
+        <el-form-item
+          label="不合格品评审(审理)处置意见:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark6.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark7.user7"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark6.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark6.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[5]">
+        <el-form-item
+          label="组长(或分管领导)审批意见:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark7.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6" />
+          <el-col :span="6" />
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark7.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark7.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+    </el-form>
+    <div class="btns">
+      <el-button type="primary" @click="submit" v-if="step">提交</el-button>
+      <el-button type="info" @click="toClose">返回</el-button>
+    </div>
+  </div>
+</template>
+<script setup>
+import { getUserList } from "@/api/system/user";
+import { useUserStoreHook } from "@/store/modules/user";
+import { handle } from "@/api/reject";
+const userStore = useUserStoreHook();
+const emit = defineEmits(["getList"]);
+const userName = ref("");
+const formData = inject("formData");
+const pdfUrlList = ref([]);
+const srcList = ref([]);
+const fileNameList = ref([]);
+const pdfUrlList1 = ref([]);
+const srcList1 = ref([]);
+const load1 = ref(null);
+const load2 = ref(null);
+const load3 = ref(null);
+const fileNameList1 = ref([]);
+const pdfUrlList2 = ref([]);
+const srcList2 = ref([]);
+const fileNameList2 = ref([]);
+const testFiles = () => {
+  formData.value.remark3.pdfUrlList = pdfUrlList.value;
+  formData.value.remark3.srcList = srcList.value;
+  formData.value.remark3.fileNameList = fileNameList.value;
+};
+const array1 = ref([]);
+const setFile = () => {
+  if (
+    formData.value.remark3.pdfUrlList ||
+    formData.value.remark3.srcList ||
+    formData.value.remark3.fileNameList
+  ) {
+    pdfUrlList.value = formData.value.remark3.pdfUrlList;
+    srcList.value = formData.value.remark3.srcList;
+    fileNameList.value = formData.value.remark3.fileNameList;
+    array1.value = [];
+    fileNameList.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load1.value?.setFileList(array1.value);
+  }
+  if (
+    formData.value.remark4.pdfUrlList ||
+    formData.value.remark4.srcList ||
+    formData.value.remark4.fileNameList
+  ) {
+    pdfUrlList1.value = formData.value.remark4.pdfUrlList;
+    srcList1.value = formData.value.remark4.srcList;
+    fileNameList1.value = formData.value.remark4.fileNameList;
+    array1.value = [];
+    fileNameList1.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load2.value?.setFileList(array1.value);
+  }
+  if (
+    formData.value.remark5.pdfUrlList ||
+    formData.value.remark5.srcList ||
+    formData.value.remark5.fileNameList
+  ) {
+    pdfUrlList2.value = formData.value.remark5.pdfUrlList;
+    srcList2.value = formData.value.remark5.srcList;
+    fileNameList2.value = formData.value.remark5.fileNameList;
+    array1.value = [];
+    fileNameList2.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load3.value?.setFileList(array1.value);
+  }
+};
+const testFiles1 = () => {
+  formData.value.remark4.pdfUrlList = pdfUrlList1.value;
+  formData.value.remark4.srcList = srcList1.value;
+  formData.value.remark4.fileNameList = fileNameList1.value;
+};
+const testFiles2 = () => {
+  formData.value.remark5.pdfUrlList = pdfUrlList2.value;
+  formData.value.remark5.srcList = srcList2.value;
+  formData.value.remark5.fileNameList = fileNameList2.value;
+};
+const toClose = () => {
+  formData.value = {};
+  examineStatus.value = false;
+  emit("getList");
+};
+const userNameArray = ref([]);
+const step = ref(null);
+const setShowStage = () => {
+  step.value = null;
+  if (
+    userName.value == formData.value.remark2.user2 &&
+    formData.value.remark2.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 1;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark3.user3 &&
+    formData.value.remark3.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 2;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark4.user4 &&
+    formData.value.remark4.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 3;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark5.user5 &&
+    formData.value.remark5.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 4;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark6.user6 &&
+    formData.value.remark6.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 5;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark7.user7 &&
+    formData.value.remark7.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 6;
+  } else {
+    userNameArray.value.push(false);
+  }
+};
+const setFormData = () => {
+  for (const key in formData.value.remark2) {
+    if (formData.value.remark2[key] === "") {
+      delete formData.value.remark2[key];
+    }
+  }
+  for (const key in formData.value.remark3) {
+    if (formData.value.remark3[key] === "") {
+      delete formData.value.remark3[key];
+    }
+  }
+  for (const key in formData.value.remark4) {
+    if (formData.value.remark4[key] === "") {
+      delete formData.value.remark4[key];
+    }
+  }
+  for (const key in formData.value.remark5) {
+    if (formData.value.remark5[key] === "") {
+      delete formData.value.remark5[key];
+    }
+  }
+  for (const key in formData.value.remark6) {
+    if (formData.value.remark6[key] === "") {
+      delete formData.value.remark6[key];
+    }
+  }
+  for (const key in formData.value.remark7) {
+    if (formData.value.remark7[key] === "") {
+      delete formData.value.remark7[key];
+    }
+  }
+  console.log(formData.value);
+};
+
+const submit = async () => {
+  setFormData();
+  const { code } = await handle({
+    ...formData.value,
+    step: step.value,
+    state: null,
+  });
+  if (code == "200") {
+    ElMessage.success("提交成功");
+    toClose();
+  }
+};
+const stateOption = [
+  {
+    label: "通过",
+    value: "1",
+  },
+  {
+    label: "未通过",
+    value: "0",
+  },
+  {
+    label: "待审核",
+    value: "-1",
+  },
+];
+const examineStatus = inject("examineStatus");
+
+const userList = ref([]);
+onMounted(() => {
+  getUserList({}).then((data) => {
+    userList.value = data.data;
+  });
+  userName.value = userStore.user.username;
+  setShowStage();
+});
+nextTick(() => {
+  setFile();
+});
+</script>
+<style lang="scss" scoped>
+.body {
+  padding-bottom: 40px;
+  position: relative;
+}
+.stage {
+  border: 1px solid #ccc;
+  padding: 20px;
+  margin-bottom: 20px;
+}
+.btns {
+  position: fixed;
+  width: 100%;
+  bottom: 40px;
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 216 - 5
src/views/quality/feedback/index.vue

@@ -1,7 +1,218 @@
 <template>
-  <div>src/views/quality/feedback /index</div>
+  <div class="mainContentBox">
+    <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"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
+      v-if="!examineStatus"
+    >
+      <template #menu="{ row }">
+        <el-button
+          v-if="row.state != '2' && row.state != '3'"
+          link
+          @click="toExamine(row)"
+        >
+          处理
+        </el-button>
+      </template>
+    </avue-crud>
+    <div v-else>
+      <Process :key="proccessKey" @get-list="getList" />
+    </div>
+  </div>
 </template>
-
-<script setup lang="ts"></script>
-
-<style scoped lang="scss"></style>
+<script setup>
+import { useCrud } from "@/hooks/userCrud";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+import ButtonPermKeys from "@/common/configs/buttonPermission";
+import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import SingleUpload from "@/components/Upload/SingleUpload.vue";
+import Process from "./components/process.vue";
+const { dicts } = useDictionaryStore();
+const proccessKey = ref(false);
+const examineStatus = ref(false);
+const formData = ref({});
+provide("formData", formData);
+provide("examineStatus", examineStatus);
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/error",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+onMounted(() => {
+  search.value.type = "sales";
+  dataList();
+});
+const getList = () => {
+  dataList();
+};
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  selection: false,
+  addBtn: false,
+  delBtn: false,
+  editBtn: false,
+  viewBtn: false,
+  column: [
+    {
+      label: "物料名称",
+      prop: "materialName",
+    },
+    {
+      label: "阶段",
+      prop: "stage",
+    },
+    {
+      label: "创建时间",
+      prop: "created",
+    },
+    {
+      label: "备注",
+      prop: "remark",
+    },
+    {
+      label: "状态",
+      prop: "state",
+      dicData: [
+        {
+          label: "待处理",
+          value: 0,
+        },
+        {
+          label: "审核中",
+          value: 1,
+        },
+        {
+          label: "审核驳回",
+          value: 2,
+        },
+        {
+          label: "审核完成",
+          value: 3,
+        },
+      ],
+    },
+  ],
+});
+const setJson = (row1) => {
+  const row = JSON.parse(JSON.stringify(row1));
+  //处理初始值
+  let obj = {
+    content: "",
+    user1: "",
+    user2: "",
+    user3: "",
+    user4: "",
+    user5: "",
+    user6: "",
+    user7: "",
+    time: "",
+    state: "-1",
+  };
+  if (row.remark1 == "") {
+    row.remark1 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark1)).length == 0) {
+      row.remark1 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark1 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark1),
+      };
+    }
+  }
+  if (row.remark2 == "") {
+    row.remark2 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark2)).length == 0) {
+      row.remark2 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark2 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark2),
+      };
+    }
+  }
+  if (row.remark3 == "") {
+    row.remark3 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark3)).length == 0) {
+      row.remark3 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark3 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark3),
+      };
+    }
+  }
+  if (row.remark4 == "") {
+    row.remark4 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark4)).length == 0) {
+      row.remark4 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark4 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark4),
+      };
+    }
+  }
+  if (row.remark5 == "") {
+    row.remark5 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark5)).length == 0) {
+      row.remark5 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark5 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark5),
+      };
+    }
+  }
+  if (row.remark6 == "") {
+    row.remark6 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark6)).length == 0) {
+      row.remark6 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark6 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark6),
+      };
+    }
+  }
+  if (row.remark7 == "") {
+    row.remark7 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark7)).length == 0) {
+      row.remark7 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark7 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark7),
+      };
+    }
+  }
+  return row;
+};
+const toExamine = (row) => {
+  formData.value = setJson(row);
+  proccessKey.value = !proccessKey.value;
+  examineStatus.value = true;
+};
+</script>

+ 651 - 0
src/views/quality/reject/components/process.vue

@@ -0,0 +1,651 @@
+<template>
+  <div class="body">
+    <el-form ref="ruleFormRef" :model="formData" label-width="250">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="物料名称:">
+            <span class="text">{{ formData.materialName }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="流转卡号:">
+            <span class="text">{{ formData.seqs }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发生地点:">
+            <span class="text">{{ formData.address }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="发生时间:">
+            <span class="text">{{ formData.remark1.time }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="问题描述:">
+            <span class="text">{{ formData.remark1.content }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发起人:">
+            <span class="text">{{ formData.remark1.user1 }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="审理级别:">
+            <span class="text">{{ formData.remark1.lv }}级</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="stage" v-if="userNameArray[0]">
+        <el-form-item
+          label="不合格现象(质量问题)描述:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark2.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark3.user3"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark2.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark2.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[1]">
+        <el-form-item label="原因分析:" prop="remark1[content]">
+          <el-input type="textarea" v-model="formData.remark3.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList"
+                v-model:pdf-list="pdfUrlList"
+                v-model:file-name-list="fileNameList"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles"
+                ref="load1"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark4.user4"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark3.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark3.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[2]">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="是否有纠正措施:" prop="remark1[content]">
+              <el-radio-group v-model="formData.remark4.res">
+                <el-radio value="0">否</el-radio>
+                <el-radio value="1">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8" v-if="formData.remark4.res == '1'">
+            <el-form-item label="纠正措施通知单编号:">
+              <el-input v-model="formData.remark4.resNum" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList1"
+                v-model:pdf-list="pdfUrlList1"
+                v-model:file-name-list="fileNameList1"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles1"
+                ref="load2"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark5.user5"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark4.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark4.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[3]">
+        <el-form-item label="采取的措施:" prop="remark1[content]">
+          <el-input type="textarea" v-model="formData.remark5.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="上传附件:">
+              <FilesUpload
+                v-model:src-list="srcList2"
+                v-model:pdf-list="pdfUrlList2"
+                v-model:file-name-list="fileNameList2"
+                :generate-pdf="true"
+                :limit="10"
+                @finished="testFiles2"
+                ref="load3"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark6.user6"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark5.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark5.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[4]">
+        <el-form-item
+          label="不合格品评审(审理)处置意见:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark6.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="下部流向人员:">
+              <el-select
+                v-model="formData.remark7.user7"
+                filterable
+                placeholder="请选择人员"
+                value-key="id"
+              >
+                <el-option
+                  v-for="item in userList"
+                  :key="item.id"
+                  :label="item.userName"
+                  :value="item.userName"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark6.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark6.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="stage" v-if="userNameArray[5]">
+        <el-form-item
+          label="组长(或分管领导)审批意见:"
+          prop="remark1[content]"
+        >
+          <el-input type="textarea" v-model="formData.remark7.content" />
+        </el-form-item>
+        <el-row>
+          <el-col :span="6" />
+          <el-col :span="6" />
+          <el-col :span="6">
+            <el-form-item label="日期" prop="reason">
+              <el-date-picker
+                v-model="formData.remark7.time"
+                type="date"
+                placeholder="Pick a day"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="审核结果:">
+              <el-select
+                v-model="formData.remark7.state"
+                filterable
+                placeholder="请选择结果"
+              >
+                <el-option
+                  v-for="item in stateOption"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+    </el-form>
+    <div class="btns">
+      <el-button type="primary" @click="submit" v-if="step">提交</el-button>
+      <el-button type="info" @click="toClose">返回</el-button>
+    </div>
+  </div>
+</template>
+<script setup>
+import { getUserList } from "@/api/system/user";
+import { useUserStoreHook } from "@/store/modules/user";
+import { handle } from "@/api/reject";
+const userStore = useUserStoreHook();
+const emit = defineEmits(["getList"]);
+const userName = ref("");
+const formData = inject("formData");
+const pdfUrlList = ref([]);
+const srcList = ref([]);
+const fileNameList = ref([]);
+const pdfUrlList1 = ref([]);
+const srcList1 = ref([]);
+const load1 = ref(null);
+const load2 = ref(null);
+const load3 = ref(null);
+const fileNameList1 = ref([]);
+const pdfUrlList2 = ref([]);
+const srcList2 = ref([]);
+const fileNameList2 = ref([]);
+const testFiles = () => {
+  formData.value.remark3.pdfUrlList = pdfUrlList.value;
+  formData.value.remark3.srcList = srcList.value;
+  formData.value.remark3.fileNameList = fileNameList.value;
+};
+const array1 = ref([]);
+const setFile = () => {
+  if (
+    formData.value.remark3.pdfUrlList ||
+    formData.value.remark3.srcList ||
+    formData.value.remark3.fileNameList
+  ) {
+    pdfUrlList.value = formData.value.remark3.pdfUrlList;
+    srcList.value = formData.value.remark3.srcList;
+    fileNameList.value = formData.value.remark3.fileNameList;
+    array1.value = [];
+    fileNameList.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load1.value?.setFileList(array1.value);
+  }
+  if (
+    formData.value.remark4.pdfUrlList ||
+    formData.value.remark4.srcList ||
+    formData.value.remark4.fileNameList
+  ) {
+    pdfUrlList1.value = formData.value.remark4.pdfUrlList;
+    srcList1.value = formData.value.remark4.srcList;
+    fileNameList1.value = formData.value.remark4.fileNameList;
+    array1.value = [];
+    fileNameList1.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load2.value?.setFileList(array1.value);
+  }
+  if (
+    formData.value.remark5.pdfUrlList ||
+    formData.value.remark5.srcList ||
+    formData.value.remark5.fileNameList
+  ) {
+    pdfUrlList2.value = formData.value.remark5.pdfUrlList;
+    srcList2.value = formData.value.remark5.srcList;
+    fileNameList2.value = formData.value.remark5.fileNameList;
+    array1.value = [];
+    fileNameList2.value.forEach((item) => {
+      array1.value.push({
+        name: item,
+      });
+    });
+    load3.value?.setFileList(array1.value);
+  }
+};
+const testFiles1 = () => {
+  formData.value.remark4.pdfUrlList = pdfUrlList1.value;
+  formData.value.remark4.srcList = srcList1.value;
+  formData.value.remark4.fileNameList = fileNameList1.value;
+};
+const testFiles2 = () => {
+  formData.value.remark5.pdfUrlList = pdfUrlList2.value;
+  formData.value.remark5.srcList = srcList2.value;
+  formData.value.remark5.fileNameList = fileNameList2.value;
+};
+const toClose = () => {
+  formData.value = {};
+  examineStatus.value = false;
+  emit("getList");
+};
+const userNameArray = ref([]);
+const step = ref(null);
+const setShowStage = () => {
+  step.value = null;
+  if (
+    userName.value == formData.value.remark2.user2 &&
+    formData.value.remark2.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 1;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark3.user3 &&
+    formData.value.remark3.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 2;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark4.user4 &&
+    formData.value.remark4.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 3;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark5.user5 &&
+    formData.value.remark5.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 4;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark6.user6 &&
+    formData.value.remark6.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 5;
+  } else {
+    userNameArray.value.push(false);
+  }
+  if (
+    userName.value == formData.value.remark7.user7 &&
+    formData.value.remark7.state == "-1" &&
+    step.value == null
+  ) {
+    userNameArray.value.push(true);
+    step.value = 6;
+  } else {
+    userNameArray.value.push(false);
+  }
+};
+const setFormData = () => {
+  for (const key in formData.value.remark2) {
+    if (formData.value.remark2[key] === "") {
+      delete formData.value.remark2[key];
+    }
+  }
+  for (const key in formData.value.remark3) {
+    if (formData.value.remark3[key] === "") {
+      delete formData.value.remark3[key];
+    }
+  }
+  for (const key in formData.value.remark4) {
+    if (formData.value.remark4[key] === "") {
+      delete formData.value.remark4[key];
+    }
+  }
+  for (const key in formData.value.remark5) {
+    if (formData.value.remark5[key] === "") {
+      delete formData.value.remark5[key];
+    }
+  }
+  for (const key in formData.value.remark6) {
+    if (formData.value.remark6[key] === "") {
+      delete formData.value.remark6[key];
+    }
+  }
+  for (const key in formData.value.remark7) {
+    if (formData.value.remark7[key] === "") {
+      delete formData.value.remark7[key];
+    }
+  }
+  console.log(formData.value);
+};
+
+const submit = async () => {
+  setFormData();
+  const { code } = await handle({
+    ...formData.value,
+    step: step.value,
+    state: null,
+  });
+  if (code == "200") {
+    ElMessage.success("提交成功");
+    toClose();
+  }
+};
+const stateOption = [
+  {
+    label: "通过",
+    value: "1",
+  },
+  {
+    label: "未通过",
+    value: "0",
+  },
+  {
+    label: "待审核",
+    value: "-1",
+  },
+];
+const examineStatus = inject("examineStatus");
+
+const userList = ref([]);
+onMounted(() => {
+  getUserList({}).then((data) => {
+    userList.value = data.data;
+  });
+  userName.value = userStore.user.username;
+  setShowStage();
+});
+nextTick(() => {
+  setFile();
+});
+</script>
+<style lang="scss" scoped>
+.body {
+  padding-bottom: 40px;
+  position: relative;
+}
+.stage {
+  border: 1px solid #ccc;
+  padding: 20px;
+  margin-bottom: 20px;
+}
+.btns {
+  position: fixed;
+  width: 100%;
+  bottom: 40px;
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 218 - 0
src/views/quality/reject/index.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="mainContentBox">
+    <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"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
+      v-if="!examineStatus"
+    >
+      <template #menu="{ row }">
+        <el-button
+          v-if="row.state != '2' && row.state != '3'"
+          link
+          @click="toExamine(row)"
+        >
+          处理
+        </el-button>
+      </template>
+    </avue-crud>
+    <div v-else>
+      <Process :key="proccessKey" @get-list="getList" />
+    </div>
+  </div>
+</template>
+<script setup>
+import { useCrud } from "@/hooks/userCrud";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+import ButtonPermKeys from "@/common/configs/buttonPermission";
+import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import SingleUpload from "@/components/Upload/SingleUpload.vue";
+import Process from "./components/process.vue";
+const { dicts } = useDictionaryStore();
+const proccessKey = ref(false);
+const examineStatus = ref(false);
+const formData = ref({});
+provide("formData", formData);
+provide("examineStatus", examineStatus);
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/error",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+onMounted(() => {
+  search.value.type = "eliminate";
+  dataList();
+});
+const getList = () => {
+  dataList();
+};
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  selection: false,
+  addBtn: false,
+  delBtn: false,
+  editBtn: false,
+  viewBtn: false,
+  column: [
+    {
+      label: "物料名称",
+      prop: "materialName",
+    },
+    {
+      label: "阶段",
+      prop: "stage",
+    },
+    {
+      label: "创建时间",
+      prop: "created",
+    },
+    {
+      label: "备注",
+      prop: "remark",
+    },
+    {
+      label: "状态",
+      prop: "state",
+      dicData: [
+        {
+          label: "待处理",
+          value: 0,
+        },
+        {
+          label: "审核中",
+          value: 1,
+        },
+        {
+          label: "审核驳回",
+          value: 2,
+        },
+        {
+          label: "审核完成",
+          value: 3,
+        },
+      ],
+    },
+  ],
+});
+const setJson = (row1) => {
+  const row = JSON.parse(JSON.stringify(row1));
+  //处理初始值
+  let obj = {
+    content: "",
+    user1: "",
+    user2: "",
+    user3: "",
+    user4: "",
+    user5: "",
+    user6: "",
+    user7: "",
+    time: "",
+    state: "-1",
+  };
+  if (row.remark1 == "") {
+    row.remark1 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark1)).length == 0) {
+      row.remark1 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark1 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark1),
+      };
+    }
+  }
+  if (row.remark2 == "") {
+    row.remark2 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark2)).length == 0) {
+      row.remark2 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark2 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark2),
+      };
+    }
+  }
+  if (row.remark3 == "") {
+    row.remark3 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark3)).length == 0) {
+      row.remark3 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark3 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark3),
+      };
+    }
+  }
+  if (row.remark4 == "") {
+    row.remark4 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark4)).length == 0) {
+      row.remark4 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark4 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark4),
+      };
+    }
+  }
+  if (row.remark5 == "") {
+    row.remark5 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark5)).length == 0) {
+      row.remark5 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark5 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark5),
+      };
+    }
+  }
+  if (row.remark6 == "") {
+    row.remark6 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark6)).length == 0) {
+      row.remark6 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark6 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark6),
+      };
+    }
+  }
+  if (row.remark7 == "") {
+    row.remark7 = JSON.parse(JSON.stringify(obj));
+  } else {
+    if (Object.keys(JSON.parse(row.remark7)).length == 0) {
+      row.remark7 = JSON.parse(JSON.stringify(obj));
+    } else {
+      row.remark7 = {
+        ...JSON.parse(JSON.stringify(obj)),
+        ...JSON.parse(row.remark7),
+      };
+    }
+  }
+  return row;
+};
+const toExamine = (row) => {
+  formData.value = setJson(row);
+  proccessKey.value = !proccessKey.value;
+  examineStatus.value = true;
+};
+</script>