Browse Source

feat: update

Hu Cheng 2 years ago
parent
commit
6d466dfbdb

+ 29 - 0
src/api/modules/GenerateReport.js

@@ -0,0 +1,29 @@
+import service from "@/utils/axios";
+import { localBaseUrl } from "@/constant";
+
+// 验证报告生成 方案
+export const generateScheme = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/GenerateReport/Generate_scheme`,
+    data,
+  });
+};
+
+// 验证报告生成 报告
+export const generateReport = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/GenerateReport/Generate_report`,
+    data,
+  });
+};
+
+// 验证报告生成 获取报告
+export const generateReportKey = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/GenerateReport/Generate_key`,
+    data,
+  });
+};

+ 18 - 0
src/api/modules/TaskData.js

@@ -81,3 +81,21 @@ export const exportTaskData = (data) => {
     data,
   });
 };
+
+// 任务数据 设备编辑
+export const editTaskDataClass = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/TaskData/TaskDataClass_Edit`,
+    data,
+  });
+};
+
+// 任务数据 设备删除
+export const deleteTaskDataClass = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/TaskData/TaskDataClass_Del`,
+    data,
+  });
+};

+ 1 - 2
src/views/certificate/index.vue

@@ -158,8 +158,7 @@ const handleDelete = async (row) => {
 
 //
 const handleChange = async ({ file }) => {
-  const type = file.type.split("/")[1];
-  const token = await getFileToken(type);
+  const token = await getFileToken(file.name.split("/")[1]);
   const observable = qiniu.upload(
     file.file,
     file.name,

+ 47 - 0
src/views/data/edit/DeleteTaskClass.vue

@@ -0,0 +1,47 @@
+<template>
+  <n-popconfirm @positive-click="handleDelete">
+    <template #trigger>
+      <n-button type="error" size="small">删除</n-button>
+    </template>
+    一切都将一去杳然,任何人都无法将其捕获。
+  </n-popconfirm>
+</template>
+
+<script setup>
+import { deleteTaskDataClass } from "@/api";
+
+const message = useMessage();
+
+const props = defineProps({
+  task: {
+    type: Object,
+    default: () => ({}),
+  },
+  taskClass: {
+    type: Object,
+    default: () => ({}),
+  },
+  getClassList: {
+    type: Function,
+    default: () => {},
+  },
+});
+
+//
+const handleDelete = async () => {
+  try {
+    const { data: res } = await deleteTaskDataClass({
+      T_task_id: props.task.T_task_id,
+      T_sn: props.taskClass.T_sn,
+    });
+    if (res.Code === 200) {
+      message.success(res.Msg);
+      props.getClassList();
+    }
+  } catch (e) {
+    console.log(e);
+  }
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 79 - 0
src/views/data/edit/EditTaskClass.vue

@@ -0,0 +1,79 @@
+<template>
+  <n-button :loading="loading" type="primary" size="small" @click="showEditModal">编辑</n-button>
+  <n-modal
+    v-model:show="showModal"
+    preset="dialog"
+    positive-text="确认"
+    negative-text="取消"
+    :show-icon="false"
+    @positive-click="handleEdit"
+  >
+    <n-form :model="formValue" label-width="auto" show-require-mark>
+      <n-form-item label="ID" path="T_id">
+        <n-input v-model:value="formValue.T_id" />
+      </n-form-item>
+      <n-form-item label="SN" path="T_sn">
+        <n-input v-model:value="formValue.T_sn" />
+      </n-form-item>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import { editTaskDataClass } from "@/api";
+
+//
+const loading = ref(false);
+
+const message = useMessage();
+
+const props = defineProps({
+  task: {
+    type: Object,
+    default: () => ({}),
+  },
+  taskClass: {
+    type: Object,
+    default: () => ({}),
+  },
+  getClassList: {
+    type: Function,
+    default: () => {},
+  },
+});
+
+//
+const showModal = ref(false);
+
+//
+const formValue = reactive({
+  T_sn: props.taskClass.T_sn,
+  T_id: props.taskClass.T_id,
+});
+
+//
+const handleEdit = async () => {
+  try {
+    loading.value = true;
+    const { data: res } = await editTaskDataClass({
+      T_task_id: props.task.T_task_id,
+      T_sn: formValue.T_sn,
+      T_id: formValue.T_id,
+    });
+    if (res.Code === 200) {
+      message.success(res.Msg);
+      props.getClassList();
+    }
+    loading.value = false;
+  } catch (e) {
+    console.log(e);
+  }
+};
+
+//
+const showEditModal = () => {
+  showModal.value = true;
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 1 - 1
src/views/data/edit/ImportPlatform.vue

@@ -128,7 +128,7 @@ const handleImport = () => {
 const addTask = async (item) => {
   const { data: res } = await addTaskData({
     T_task_id: props.task.T_task_id,
-    T_sn: formValue.T_sn,
+    T_sn: `${formValue.T_sn}-${item.T_id}`,
     T_id: item.T_id,
     T_t: item.T_t,
     T_rh: item.T_rh,

+ 1 - 1
src/views/data/edit/SetVue.vue

@@ -5,7 +5,7 @@
     :show-icon="false"
     preset="dialog"
     title="温湿度上下限设置"
-    positive-text="确"
+    positive-text="确"
     negative-text="取消"
     @positive-click="submitCallback"
   >

+ 33 - 4
src/views/data/edit/index.vue

@@ -24,7 +24,10 @@
                     <n-checkbox :value="item.T_id" />
                   </template>
                   <template #suffix>
-                    <n-button type="error" size="small" text>删除</n-button>
+                    <n-space>
+                      <EditClass :task="task" :taskClass="item" :getClassList="getClassList" />
+                      <DeleteClass :task="task" :taskClass="item" :getClassList="getClassList" />
+                    </n-space>
                   </template>
                   <n-thing>
                     <template #header> ID:{{ item.T_id }} </template>
@@ -129,6 +132,8 @@ import ExportVue from "./ExportVue.vue";
 import TemplateForm from "./TemplateForm.vue";
 import { useWindowSize } from "@vueuse/core";
 import { useNow, useDateFormat } from "@vueuse/core";
+import EditClass from "./EditTaskClass.vue";
+import DeleteClass from "./DeleteTaskClass.vue";
 
 const formatted = useDateFormat(useNow(), "YYYY-MM-DD HH:mm:ss");
 
@@ -290,6 +295,7 @@ const handleCheckAll = (checked) => {
 
 // 选项组的值改变时的回调
 const onUpdateValues = async (values, meta) => {
+  checkValues.value = values;
   const classInfo = classList.value.find((item) => item.T_id === meta.value);
   queryData.T_id = classInfo.T_id;
   queryData.T_sn = classInfo.T_sn;
@@ -481,8 +487,15 @@ const getDataList = async () => {
   }
   const { data: res } = await getTaskDataList(data);
   dataList.value = res.Data.List || [];
-  if (queryData.page_z < res.Data.Page_size) {
-    getDataList();
+  if (queryData.page_z <= res.Data.Page_size) {
+    const arr = classList.value.filter((item) =>
+      checkValues.value.includes(item.T_sn)
+    );
+    arr.forEach((item) => {
+      item.T_sn = queryData.T_sn;
+      item.T_id = queryData.T_id;
+      getDataList();
+    });
   }
 };
 
@@ -496,10 +509,26 @@ if (task.T_collection_state === 0) {
     duration: 2500,
     keepAliveOnHover: true,
   });
+} else if (task.T_collection_state === 1) {
+  notification.info({
+    closable: false,
+    title: "已完成",
+    meta: `当前时间:${formatted.value}`,
+    duration: 2500,
+    keepAliveOnHover: true,
+  });
 } else if (task.T_collection_state === 2) {
   notification.info({
     closable: false,
-    title: "采集中",
+    title: "处理中",
+    meta: `当前时间:${formatted.value}`,
+    duration: 2500,
+    keepAliveOnHover: true,
+  });
+} else if (task.T_collection_state === 3) {
+  notification.info({
+    closable: false,
+    title: "已采集-无数据",
     meta: `当前时间:${formatted.value}`,
     duration: 2500,
     keepAliveOnHover: true,

+ 0 - 7
src/views/data/source/index.vue

@@ -188,13 +188,6 @@ const getDataList = async () => {
     pagination.itemCount = res.Data.Num;
     if (!res.Data.List) {
       showModal.value = true;
-      notification.info({
-        title: "数据为空!",
-        description: `${queryData.Time_start} 至 ${queryData.Time_end}`,
-        meta: `当前时间:${formatted.value}`,
-        duration: 2500,
-        keepAliveOnHover: true,
-      });
     } else {
       showModal.value = false;
       taskList.value = res.Data.List;

+ 58 - 9
src/views/project/index.vue

@@ -12,7 +12,14 @@
 
 <script setup>
 import { h } from "vue";
-import { NButton, NSpace, NCard, NTag, NIcon } from "naive-ui";
+import {
+  NButton,
+  NSpace,
+  NCard,
+  NTag,
+  NIcon,
+  NTooltip,
+} from "naive-ui";
 import { getTaskList } from "@/api";
 import { ArrowRightOutlined as ArrowRightIcon } from "@vicons/antd";
 
@@ -29,6 +36,13 @@ const queryData = reactive({
 // 任务列表
 const data = ref([]);
 
+const renderTooltip = (trigger, content) => {
+  return h(NTooltip, null, {
+    trigger: () => trigger,
+    default: () => h(NSpace, null, { default: () => content }),
+  });
+};
+
 // 需要展示的列
 const columns = [
   {
@@ -47,7 +61,40 @@ const columns = [
     width: 180,
   },
   {
-    title: "流程",
+    title() {
+      return renderTooltip(
+        "流程(?)",
+        [0, 1, 2, 3].map((item) =>
+          h(
+            NTag,
+            {
+              bordered: false,
+              type:
+                item === 0
+                  ? "error"
+                  : item === 1
+                  ? "success"
+                  : item === 2
+                  ? "warning"
+                  : "default",
+            },
+            {
+              default: () => {
+                if (item === 0) {
+                  return "未完成";
+                } else if (item === 1) {
+                  return "已完成";
+                } else if (item === 2) {
+                  return "处理中";
+                } else {
+                  return "已采集-无数据";
+                }
+              },
+            }
+          )
+        )
+      );
+    },
     key: "T_task_id",
     width: 460,
     render(row) {
@@ -77,7 +124,7 @@ const columns = [
                     NTag,
                     {
                       class: "w-full",
-                      type: row.T_scheme_state === 0 ? "warning" : "success",
+                      type: row.T_scheme_state === 0 ? "error" : "success",
                       bordered: false,
                     },
                     {
@@ -108,10 +155,12 @@ const columns = [
                       class: "w-full",
                       type:
                         row.T_collection_state === 0
-                          ? "warning"
+                          ? "error"
                           : row.T_collection_state === 1
                           ? "success"
-                          : "info",
+                          : row.T_collection_state === 2
+                          ? "warning"
+                          : "default",
                       bordered: false,
                     },
                     {
@@ -140,7 +189,7 @@ const columns = [
                     NTag,
                     {
                       class: "w-full",
-                      type: row.T_reporting_state === 0 ? "warning" : "success",
+                      type: row.T_reporting_state === 0 ? "error" : "success",
                       bordered: false,
                     },
                     {
@@ -171,10 +220,10 @@ const columns = [
                       class: "w-full",
                       type:
                         row.T_delivery_state === 0
-                          ? "warning"
+                          ? "error"
                           : row.T_delivery_state === 1
-                            ? "success"
-                            : "info",
+                          ? "success"
+                          : "warning",
                       bordered: false,
                     },
                     {

+ 23 - 25
src/views/report/create/index.vue

@@ -221,31 +221,29 @@ const modal = reactive({
 });
 
 //
-const handleChange = async (options) => {
-  if (options.file.type.split("/")[1] === "pdf") {
-    const token = await getFileToken(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) => {
-        pdf2.value = res.key;
-      },
-    });
-  }
+const handleChange = async ({ file }) => {
+  const token = await getFileToken(file.name.split("/")[1]);
+  const observable = qiniu.upload(
+    file.file,
+    file.name,
+    token,
+    {},
+    {
+      useCdnDomain: true,
+    }
+  );
+  observable.subscribe({
+    next: (result) => {
+      // 主要用来展示进度
+      console.warn(result);
+    },
+    error: () => {
+      message.error("上传失败");
+    },
+    complete: (res) => {
+      pdf2.value = res.key;
+    },
+  });
 };
 
 // 全选

+ 23 - 25
src/views/scheme/index.vue

@@ -221,31 +221,29 @@ const modal = reactive({
 });
 
 //
-const handleChange = async (options) => {
-  if (options.file.type.split("/")[1] === "pdf") {
-    const token = await getFileToken(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) => {
-        pdf1.value = res.key;
-      },
-    });
-  }
+const handleChange = async ({ file }) => {
+  const token = await getFileToken(file.name.split("/")[1]);
+  const observable = qiniu.upload(
+    file.file,
+    file.name,
+    token,
+    {},
+    {
+      useCdnDomain: true,
+    }
+  );
+  observable.subscribe({
+    next: (result) => {
+      // 主要用来展示进度
+      console.warn(result);
+    },
+    error: () => {
+      message.error("上传失败");
+    },
+    complete: (res) => {
+      pdf1.value = res.key;
+    },
+  });
 };
 
 // 全选