Kaynağa Gözat

feat(all): update

Hu Cheng 2 yıl önce
ebeveyn
işleme
3f352e9b06

+ 3 - 9
src/api/index.js

@@ -1,4 +1,7 @@
 import service from "@/utils/axios";
+export * from "./modules/task";
+export * from "./modules/certificate";
+export * from "./modules/scheme";
 export * from "./modules/equipment";
 export * from "./modules/data";
 export * from "./modules/report";
@@ -21,12 +24,3 @@ export const getUpFileTokenData = (data) => {
     data,
   });
 };
-
-// 任务管理(列表)
-export const getTaskData = (data) => {
-  return service.request({
-    method: "POST",
-    url: "/Task/List",
-    data,
-  });
-};

+ 10 - 0
src/api/modules/certificate.js

@@ -0,0 +1,10 @@
+import service from "@/utils/axios";
+
+// 模板标签数据(列表)
+export const getVerifyTemplateMapData = (data) => {
+  return service.request({
+    method: "POST",
+    url: "/VerifyTemplateMapData/List",
+    data,
+  });
+};

+ 0 - 0
src/api/modules/scheme.js


+ 10 - 0
src/api/modules/task.js

@@ -0,0 +1,10 @@
+import service from "@/utils/axios";
+
+// 任务管理(列表)
+export const getTaskData = (data) => {
+  return service.request({
+    method: "POST",
+    url: "/Task/List",
+    data,
+  });
+};

+ 1 - 0
src/login/index.vue

@@ -91,6 +91,7 @@ const generalOptions = ["管理员", "用户"].map((v) => ({
   value: v,
 }));
 
+// 登录
 const handleSubmit = async () => {
   formRef.value.validate(async (errors) => {
     if (!errors) {

+ 10 - 0
src/router/index.js

@@ -16,6 +16,16 @@ const router = createRouter({
           component: () => import("@/views/project/index.vue"),
         },
         {
+          path: "/certificate/:taskId",
+          props: true,
+          component: () => import("@/views/project/certificate/index.vue"),
+        },
+        {
+          path: "/scheme/:taskId",
+          props: true,
+          component: () => import("@/views/project/scheme/index.vue"),
+        },
+        {
           path: "/equipment/:taskId",
           props: true,
           component: () => import("@/views/project/equipment/index.vue"),

+ 98 - 0
src/views/project/certificate/index.vue

@@ -0,0 +1,98 @@
+<template>
+  <n-space vertical>
+    <n-page-header @back="() => $router.back()">
+      <template #title> 返回上一级 </template>
+      <template #header>
+        <n-breadcrumb>
+          <n-breadcrumb-item>任务管理</n-breadcrumb-item>
+          <n-breadcrumb-item>实施方案</n-breadcrumb-item>
+        </n-breadcrumb>
+      </template>
+    </n-page-header>
+    <div class="w-[500px]">
+      <n-form
+        ref="formRef"
+        :model="formValue"
+        :rules="rules"
+        label-placement="left"
+        label-width="auto"
+      >
+        <template v-for="item of templateDataList" :key="item.T_VerifyTemplateMap_id">
+          <n-form-item
+            :label="item.T_name"
+            :path="item.T_field"
+            v-if="item.T_label !== 5"
+          >
+            <n-input v-model:value="formValue[item.T_field]" />
+          </n-form-item>
+          <n-divider v-else />
+        </template>
+      </n-form>
+    </div>
+  </n-space>
+  <n-modal
+    :show-icon="false"
+    v-model:show="modal.showModal"
+    preset="dialog"
+    :title="modal.title"
+    positive-text="提交"
+    negative-text="取消"
+    @positive-click="submitCallback"
+  >
+    123
+  </n-modal>
+</template>
+
+<script setup>
+import { getVerifyTemplateMapData } from "@/api";
+
+const props = defineProps({
+  taskId: String,
+});
+
+// 表单信息
+const formValue = reactive({
+  T_name: null,
+  time: null,
+  extent: null,
+});
+
+// 模板标签数据列表
+const templateDataList = ref([]);
+
+// 模态框数据源
+const modal = reactive({
+  title: "",
+  showModal: false,
+});
+
+// 验证表项的规则
+const rules = {
+  T_name: { required: true, message: "不能为空", trigger: "blur" },
+  time: { required: true, message: "不能为空", trigger: ["blur", "change"] },
+  extent: { required: true, message: "不能为空", trigger: ["blur", "change"] },
+};
+
+// 执行 positive 时执行的回调函数
+const submitCallback = () => {
+  if (modal.title === "添加") {
+    console.log("add");
+  } else {
+    console.log("edit");
+  }
+};
+
+// 模板标签数据(列表)
+const getVerifyTemplateMapDataList = async () => {
+  const { data: res } = await getVerifyTemplateMapData({
+    T_source: 1,
+    T_task_id: props.taskId,
+    T_VerifyTemplate_id: "rtxF",
+  });
+  templateDataList.value = res.Data.reverse();
+};
+
+getVerifyTemplateMapDataList();
+</script>
+
+<style scoped></style>

+ 7 - 4
src/views/project/index.vue

@@ -64,12 +64,13 @@ const columns = [
         {
           default: () =>
             [
+              "实施方案",
+              "校准证书",
               "设备管理",
               "数据来源",
               "数据编辑",
               "数据校验",
               "报告生成",
-              "报告编辑",
               "报告审核",
             ].map((item) =>
               h(
@@ -78,7 +79,11 @@ const columns = [
                   type: "primary",
                   size: "small",
                   onClick: () => {
-                    if (item === "设备管理") {
+                    if (item === "实施方案") {
+                      router.push(`/certificate/${row.T_task_id}`);
+                    } else if (item === "校准证书") {
+                      router.push(`/scheme/${row.T_task_id}`);
+                    } else if (item === "设备管理") {
                       router.push(`/equipment/${row.Id}`);
                     } else if (item === "数据来源") {
                       router.push("/data_source");
@@ -88,8 +93,6 @@ const columns = [
                       router.push("/data_checkout");
                     } else if (item === "报告生成") {
                       router.push("/report_create");
-                    } else if (item === "报告编辑") {
-                      router.push(`/report_edit/${row.T_task_id}`);
                     } else {
                       router.push(`/report_audit/${row.T_task_id}`);
                     }

+ 162 - 0
src/views/project/scheme/index.vue

@@ -0,0 +1,162 @@
+<template>
+  <n-space vertical>
+    <n-page-header @back="() => $router.back()">
+      <template #title> 返回上一级 </template>
+      <template #header>
+        <n-breadcrumb>
+          <n-breadcrumb-item>任务管理</n-breadcrumb-item>
+          <n-breadcrumb-item>实施方案</n-breadcrumb-item>
+        </n-breadcrumb>
+      </template>
+    </n-page-header>
+    <n-grid x-gap="12" :cols="3">
+      <n-gi>
+        <n-data-table :columns="columns" :data="data" :bordered="false" />
+      </n-gi>
+      <n-gi :span="2">
+        <div class="green" />
+      </n-gi>
+    </n-grid>
+  </n-space>
+  <n-modal
+    :show-icon="false"
+    v-model:show="modal.showModal"
+    preset="dialog"
+    :title="modal.title"
+    positive-text="提交"
+    negative-text="取消"
+    @positive-click="submitCallback"
+  >
+    <n-form
+      ref="formRef"
+      :model="formValue"
+      label-placement="left"
+      label-width="auto"
+      :rules="rules"
+    >
+      <n-form-item label="名称" path="T_name">
+        <n-input v-model:value="formValue.T_name" />
+      </n-form-item>
+      <n-form-item label="预览" path="T_img" required>
+        <n-space>
+          <template v-if="modal.title === '编辑'">
+            <n-image width="100" :src="formValue.T_img" />
+          </template>
+          <n-upload
+            :default-upload="false"
+            list-type="image-card"
+            :max="1"
+            @change="handleChange"
+          >
+            <template v-if="modal.title === '添加'"> 点击上传 </template>
+            <template v-else> 重新上传 </template>
+          </n-upload>
+        </n-space>
+      </n-form-item>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import VuePdfEmbed from "vue-pdf-embed";
+import { getTask, getUpFileTokenData } from "@/api";
+import * as qiniu from "qiniu-js";
+
+const message = useMessage();
+
+const props = defineProps({
+  taskId: String,
+});
+
+const pdfRef = ref(null);
+
+// 任务信息
+const taskInfo = ref({});
+
+// 表单信息
+const formValue = reactive({});
+
+// 模态框数据源
+const modal = reactive({
+  title: "",
+  showModal: false,
+});
+
+// 验证表项的规则
+const rules = {
+  T_name: { required: true, message: "不能为空", trigger: "blur" },
+};
+
+// 打印pdf
+const onPrint = () => {
+  pdfRef.value.print();
+};
+
+// 组件状态变化的回调
+const handleChange = async (options) => {
+  const token = await getUpFileToken(options.file.type.split("/")[1]);
+  const observable = qiniu.upload(
+    options.file.file,
+    options.file.name,
+    token,
+    {},
+    {
+      useCdnDomain: true,
+    }
+  );
+  observable.subscribe({
+    next: (result) => {
+      // 主要用来展示进度
+      console.warn(result);
+    },
+    error: () => {
+      message.error("上传图片失败");
+    },
+    complete: (res) => {
+      formValue.T_img = res.key;
+    },
+  });
+};
+
+// 执行 positive 时执行的回调函数
+const submitCallback = () => {
+  if (modal.title === "添加") {
+    console.log("add");
+  } else {
+    console.log("edit");
+  }
+};
+
+// 显示上传
+const showUploadModal = () => {};
+
+// 获取上传token
+const getUpFileToken = async () => {
+  const { data: res } = await getUpFileTokenData({
+    T_suffix: "pdf",
+  });
+  return res.Data;
+};
+
+// 任务(获取)
+const getTaskInfo = async () => {
+  const { data: res } = await getTask({
+    T_task_id: props.taskId,
+  });
+  taskInfo.value = res.Data;
+};
+
+getUpFileToken();
+getTaskInfo();
+</script>
+
+<style scoped>
+.light-green {
+  height: 108px;
+  background-color: rgba(0, 128, 0, 0.12);
+}
+.green {
+  height: 108px;
+  background-color: rgba(0, 128, 0, 0.24);
+}
+</style>