Browse Source

feat: update

Hu Cheng 2 years ago
parent
commit
e8f16cb7ca

+ 10 - 1
src/api/modules/TaskData.js

@@ -23,7 +23,7 @@ export const checkTaskData = (data) => {
 export const extractTaskData = (data) => {
   return service.request({
     method: "POST",
-    url: `${localBaseUrl}/TaskData/Extract_TaskData`,
+    url: "/TaskData/Extract_TaskData",
     data,
   });
 };
@@ -45,3 +45,12 @@ export const importTaskData = (data) => {
     data,
   });
 };
+
+// 更新线上数据
+export const updateTaskData = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/TaskData/Up_TaskData`,
+    data,
+  });
+};

+ 2 - 0
src/plugin/highcharts.js

@@ -2,7 +2,9 @@ import Highcharts from "highcharts";
 import stockInit from "highcharts/modules/stock";
 import boostInit from "highcharts/modules/boost";
 import exportingInit from "highcharts/modules/exporting";
+import exportDataInit from "highcharts/modules/export-data";
 
 stockInit(Highcharts);
 boostInit(Highcharts);
 exportingInit(Highcharts);
+exportDataInit(Highcharts);

+ 1 - 1
src/store/task.js

@@ -1,5 +1,5 @@
 import { defineStore } from "pinia";
-// import { computed } from "vue";
+import { computed } from "vue";
 
 export const useTaskStore = defineStore("task", () => {
   const task = computed(() => {

+ 1 - 1
src/views/project/data/checkout/index.vue

@@ -82,7 +82,7 @@ const dataList = ref([]);
 // 获取列表
 const getDataList = async () => {
   const { data: res } = await checkTaskData(queryData);
-  dataList.value = res.Data;
+  dataList.value = res.Data ? res.Data : [];
 };
 
 getDataList();

+ 137 - 90
src/views/project/data/edit/index.vue

@@ -8,37 +8,35 @@
       <n-gi>
         <n-card class="h-full">
           <n-list>
-            <template #footer>
-              <n-space align="center">
-                <n-button size="small" type="primary">全选择</n-button>
-                <n-button size="small" type="primary">全取消</n-button>
-                <n-button size="small" type="primary">反选</n-button>
-                <n-gradient-text type="info"> 传感器总数:861 </n-gradient-text>
-              </n-space>
+            <template #header>
+              <n-checkbox label="全选" @update:checked="handleCheckAll" />
             </template>
-            <n-checkbox-group @update:value="onUpdateValues">
-              <template v-for="item of generalOptions" :key="item.value">
-                <n-list-item>
-                  <template #prefix>
-                    <n-checkbox :value="item.value" />
-                  </template>
-                  <template #suffix>
-                    <n-button type="error" size="small" text>删除</n-button>
-                  </template>
-                  <n-thing>
-                    <template #avatar>
-                      <n-avatar
-                        round
-                        size="small"
-                        src="https://07akioni.oss-cn-beijing.aliyuncs.com/07akioni.jpeg"
-                      />
+            <n-scrollbar style="max-height: 600px">
+              <n-checkbox-group
+                @update:value="onUpdateValues"
+                v-model:value="checkValues"
+              >
+                <template v-for="item of classList" :key="item.T_id">
+                  <n-list-item class="mr-5">
+                    <template #prefix>
+                      <n-checkbox :value="item.T_id" />
+                    </template>
+                    <template #suffix>
+                      <n-button type="error" size="small" text>删除</n-button>
                     </template>
-                    <template #header> ID:001 </template>
-                    <template #description> 001 </template>
-                  </n-thing>
-                </n-list-item>
-              </template>
-            </n-checkbox-group>
+                    <n-thing>
+                      <template #header> ID:{{ item.T_id }} </template>
+                      <template #description> {{ item.T_sn }} </template>
+                    </n-thing>
+                  </n-list-item>
+                </template>
+              </n-checkbox-group>
+            </n-scrollbar>
+            <template #footer>
+              <n-gradient-text type="info">
+                传感器总数:{{ classList.length }}
+              </n-gradient-text>
+            </template>
           </n-list>
         </n-card>
       </n-gi>
@@ -63,7 +61,12 @@
           <n-card>
             <n-scrollbar style="max-height: 600px">
               <Chart
-                ref="chart"
+                ref="chart1"
+                constructor-type="stockChart"
+                :options="chartOptions"
+              ></Chart>
+              <Chart
+                ref="chart2"
                 constructor-type="stockChart"
                 :options="chartOptions"
               ></Chart>
@@ -81,7 +84,7 @@
   >
     <template v-if="modal.title === '详情'">
       <n-form-item>
-        <n-input v-model:value="value" type="text" />
+        <n-input v-model:value="formValue.value" />
       </n-form-item>
       <n-space justify="end">
         <n-popconfirm @positive-click="handleDelete">
@@ -194,41 +197,26 @@
 
 <script setup>
 import { Chart } from "highcharts-vue";
+import { getTaskDataClassList, getTaskDataList } from "@/api";
+import { useTaskStore } from "@/store/task";
 
-const chart = ref(null);
-
-const onUpdateValues = (values, meta) => {
-  console.log(meta);
-  if (meta.actionType === "check") {
-    let data = getData(n);
-    chart.value.chart.addSeries({
-      id: meta.value,
-      name: meta.value,
-      data,
-      lineWidth: 0.5,
-      cursor: "pointer",
-      events: {
-        click() {
-          modal.showModal = true;
-          modal.title = "详情";
-        },
-      },
-    });
-  } else {
-    chart.value.chart.get(meta.value).remove();
-  }
-};
+const taskStore = useTaskStore();
 
-const handleDelete = () => {
-  console.log("delete");
-};
+const chart1 = ref(null);
+const chart2 = ref(null);
 
 const range = ref(null);
 
-const generalOptions = ["a", "b", "c", "d", "e", "f", "g"].map((v) => ({
-  label: v,
-  value: v,
-}));
+// 查询数据
+const queryData = reactive({
+  T_task_id: taskStore.task.T_task_id,
+  T_sn: "",
+  T_id: "",
+  Time_start: "",
+  Time_and: "",
+  page: 1,
+  page_z: 10,
+});
 
 // 表单数据
 const formValue = reactive({
@@ -252,33 +240,72 @@ const rules = {
   },
 };
 
-function getData(n) {
-  let arr = [];
-  let i = "";
-  let a = "";
-  let b = "";
-  let c = "";
-  let spike = "";
-  for (let i = 0; i < n; i = i + 1) {
-    if (i % 100 === 0) {
-      a = 2 * Math.random();
-    }
-    if (i % 1000 === 0) {
-      b = 2 * Math.random();
-    }
-    if (i % 10000 === 0) {
-      c = 2 * Math.random();
-    }
-    if (i % 50000 === 0) {
-      spike = 10;
-    } else {
-      spike = 0;
-    }
-    arr.push([i, 2 * Math.sin(i / 100) + a + b + c + spike + Math.random()]);
+// 设备列表
+const classList = ref([]);
+
+// 列表
+const dataList = ref([]);
+
+// 选项组受控模式下的值
+const checkValues = ref([]);
+
+// 全选
+const handleCheckAll = (checked) => {
+  if (checked) {
+    checkValues.value = classList.value.map((item) => item.T_id);
+  } else {
+    checkValues.value = [];
+  }
+};
+
+// 选项组的值改变时的回调
+const onUpdateValues = async (values, meta) => {
+  const classInfo = classList.value.find((item) => item.T_id === meta.value);
+  queryData.T_id = classInfo.T_id;
+  queryData.T_sn = classInfo.T_sn;
+  await getDataList();
+  const data1 = dataList.value.map((item) => [item.T_time, item.T_t]);
+  const data2 = dataList.value.map((item) => [item.T_time, item.T_rh]);
+  if (meta.actionType === "check") {
+    chart1.value.chart.addSeries({
+      id: meta.value,
+      name: meta.value,
+      data: data1,
+      lineWidth: 1,
+      cursor: "pointer",
+      events: {
+        click() {
+          modal.showModal = true;
+          modal.title = "详情";
+        },
+      },
+    });
+    chart2.value.chart.addSeries({
+      id: meta.value,
+      name: meta.value,
+      data: data2,
+      lineWidth: 1,
+      cursor: "pointer",
+      events: {
+        click(e) {
+          modal.showModal = true;
+          modal.title = "详情";
+          console.log(e);
+        },
+      },
+    });
+  } else {
+    chart1.value.chart.get(meta.value).remove();
+    chart2.value.chart.get(meta.value).remove();
   }
-  return arr;
-}
-let n = 1000000;
+};
+
+// 删除
+const handleDelete = () => {
+  console.log("delete");
+};
+
+const series = ref([]);
 
 // 图表配置
 const chartOptions = {
@@ -299,18 +326,22 @@ const chartOptions = {
   },
 
   title: {
-    text: `Highcharts drawing ${n} points`,
+    text: "车载冷藏箱",
   },
 
   subtitle: {
-    text: "Using the Boost module",
+    align: "left",
+    style: {
+      fontWeight: "bold",
+    },
+    text: "车载冷藏箱",
   },
 
   tooltip: {
     valueDecimals: 2,
   },
 
-  series: [],
+  series,
 };
 
 // 对话框数据源
@@ -336,6 +367,22 @@ const showImportModal = () => {
   modal.showModal = true;
   modal.title = "导入";
 };
+
+// 获取设备列表
+const getClassList = async () => {
+  const { data: res } = await getTaskDataClassList({
+    T_task_id: taskStore.task.T_task_id,
+  });
+  classList.value = res.Data ? res.Data : [];
+};
+
+// 获取任务数据列表
+const getDataList = async () => {
+  const { data: res } = await getTaskDataList(queryData);
+  dataList.value = res.Data.List ? res.Data.List : [];
+};
+
+getClassList();
 </script>
 
 <style lang="scss" scoped></style>

+ 23 - 108
src/views/project/report/audit/index.vue

@@ -5,7 +5,7 @@
         <n-breadcrumb-item>任务管理</n-breadcrumb-item>
         <n-breadcrumb-item>报告审核</n-breadcrumb-item>
       </n-breadcrumb>
-      <n-button type="primary">审核</n-button>
+      <n-button type="primary" @click="handleCheck">审核</n-button>
     </n-space>
     <n-descriptions bordered>
       <n-descriptions-item label="报告名称">
@@ -28,10 +28,7 @@
           </n-button>
         </n-space>
         <n-scrollbar style="max-height: 450px" trigger="none">
-          <vue-pdf-embed
-            ref="pdfRef"
-            source="https://pure-admin.github.io/pure-admin-doc/pdf/Cookie%E5%92%8CSession%E5%8C%BA%E5%88%AB%E7%94%A8%E6%B3%95.pdf"
-          />
+          <vue-pdf-embed ref="pdfRef" :source="taskInfo.T_pdf1" />
         </n-scrollbar>
       </n-tab-pane>
       <n-tab-pane name="2" tab="验证报告">
@@ -43,10 +40,7 @@
           </n-button>
         </n-space>
         <n-scrollbar style="max-height: 450px" trigger="none">
-          <vue-pdf-embed
-            ref="pdfRef"
-            source="https://pure-admin.github.io/pure-admin-doc/pdf/Cookie%E5%92%8CSession%E5%8C%BA%E5%88%AB%E7%94%A8%E6%B3%95.pdf"
-          />
+          <vue-pdf-embed ref="pdfRef" :source="taskInfo.T_pdf2" />
         </n-scrollbar>
       </n-tab-pane>
       <n-tab-pane name="3" tab="校准证书">
@@ -58,10 +52,7 @@
           </n-button>
         </n-space>
         <n-scrollbar style="max-height: 450px" trigger="none">
-          <vue-pdf-embed
-            ref="pdfRef"
-            source="https://pure-admin.github.io/pure-admin-doc/pdf/Cookie%E5%92%8CSession%E5%8C%BA%E5%88%AB%E7%94%A8%E6%B3%95.pdf"
-          />
+          <vue-pdf-embed ref="pdfRef" :source="taskInfo.T_pdf3" />
         </n-scrollbar>
       </n-tab-pane>
       <n-tab-pane name="4" tab="验证数据">
@@ -69,53 +60,17 @@
       </n-tab-pane>
     </n-tabs>
   </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, getUpFileToken } from "@/api";
-import * as qiniu from "qiniu-js";
+import { getTask, updateTaskData } from "@/api";
 import { PrinterOutlined as PrinterIcon } from "@vicons/antd";
 import TabFour from "./tab-four/index.vue";
 import { useTaskStore } from "@/store/task";
 
+const dialog = useDialog();
+
 const message = useMessage();
 
 const taskStore = useTaskStore();
@@ -125,70 +80,31 @@ 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 ({ file }) => {
-  const type = file.type.split("/")[1];
-  const token = await getUpFileToken(type);
-  const observable = qiniu.upload(
-    file.file,
-    file.name,
-    token,
-    {},
-    {
-      useCdnDomain: true,
-    }
-  );
-  observable.subscribe({
-    next: (result) => {
-      // 主要用来展示进度
-      console.warn(result);
-    },
-    error: () => {
-      message.error("上传失败");
-    },
-    complete: (res) => {
-      formValue.T_img = res.key;
-    },
+//
+const handleCheck = () => {
+  dialog.info({
+    title: "审核",
+    content: "请仔细检查报告内容、报告证书、报告数据都是否有误?",
+    positiveText: "确定都没有问题",
+    negativeText: "取消",
+    maskClosable: false,
+    onPositiveClick: updateTask,
   });
 };
 
-// 执行 positive 时执行的回调函数
-const submitCallback = () => {
-  if (modal.title === "添加") {
-    console.log("add");
-  } else {
-    console.log("edit");
-  }
-};
-
-// 显示上传
-// const showUploadModal = () => {};
-
-// 获取上传token
-const getFileToken = async (T_suffix) => {
-  const { data: res } = await getUpFileToken({
-    T_suffix,
+// 更新线上数据
+const updateTask = async () => {
+  const { data: res } = await updateTaskData({
+    T_task_id: taskStore.task.T_task_id,
   });
-  return res.Data;
+  if (res.Code === 200) {
+    message.success(res.Msg);
+  }
 };
 
 // 任务(获取)
@@ -199,7 +115,6 @@ const getTaskInfo = async () => {
   taskInfo.value = res.Data;
 };
 
-getFileToken("pdf");
 getTaskInfo();
 </script>
 

+ 15 - 44
src/views/project/report/audit/tab-four/index.vue

@@ -29,67 +29,41 @@
 </template>
 
 <script setup>
-import { h } from "vue";
-import { NTag } from "naive-ui";
 import { extractTaskData } from "@/api";
-import { useTaskStore } from "@/store/task";
 
-const taskStore = useTaskStore();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 // 查询参数
 const queryData = reactive({
-  T_task_id: taskStore.task.T_task_id,
-  T_Class_id: taskStore.task.T_class,
+  T_task_id: task.T_task_id,
+  T_Class_id: task.T_class,
   Time_start: "",
   Time_end: "",
   T_sn: "",
 });
 
+// 列表
+const dataList = ref([]);
+
 // 需要展示的列
 const columns = [
   {
-    type: "expand",
-    expandable: (row) => row.Result !== 200,
-    renderExpand: (row) => row.Result_str,
+    title: "ID",
+    key: "T_id",
   },
   {
-    title: "编号",
-    key: "T_id",
+    title: "设备编号",
+    key: "T_Class_id",
   },
   {
     title: "SN",
     key: "T_sn",
   },
   {
-    title: "数据量",
-    key: "T_unm",
-  },
-  {
-    title: "时间间隔",
-    key: "T_time_interval",
-  },
-  {
-    title: "开始时间",
-    key: "Time_start",
-  },
-  {
-    title: "结束时间",
-    key: "Time_end",
-  },
-  {
-    title: "结果",
-    key: "Result",
-    render(row) {
-      return h(
-        NTag,
-        {
-          type: row.Result === 200 ? "success" : "error",
-          bordered: false,
-          size: "large",
-        },
-        { default: () => (row.Result === 200 ? "OK" : "错误") }
-      );
-    },
+    title: "温度℃",
+    key: "T_t",
   },
 ];
 
@@ -105,13 +79,10 @@ const pagination = reactive({
   },
 });
 
-// 列表
-const dataList = ref([]);
-
 // 获取列表
 const getDataList = async () => {
   const { data: res } = await extractTaskData(queryData);
-  console.log(res);
+  dataList.value = res.Data ? res.Data : [];
 };
 
 getDataList();