瀏覽代碼

feat: update

Hu Cheng 2 年之前
父節點
當前提交
3feb499fab

+ 1 - 0
.env.development

@@ -1,2 +1,3 @@
 VITE_API_BASE_URL="https://coldverify.coldbaozhida.com/api"
 VITE_API_LOCAL_BASE_URL="http://192.168.1.23:6400"
+VITE_API_COLD_BASE_URL="https://cold.coldbaozhida.com/api"

+ 1 - 0
src/api/index.js

@@ -5,3 +5,4 @@ export * from "./modules/DeviceClassList";
 export * from "./modules/Task";
 export * from "./modules/TaskData";
 export * from "./modules/VerifyTemplateMapData";
+export * from "./modules/Data";

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

@@ -0,0 +1,10 @@
+import service from "@/utils/axios";
+import { coldBaseUrl } from "@/constant";
+
+export const getV3DataList = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${coldBaseUrl}/v3/Data/List`,
+    data,
+  });
+};

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

@@ -54,3 +54,12 @@ export const updateTaskData = (data) => {
     data,
   });
 };
+
+// 任务数据(添加)
+export const addTaskData = (data) => {
+  return service.request({
+    method: "POST",
+    url: `${localBaseUrl}/TaskData/Add`,
+    data,
+  });
+};

+ 2 - 0
src/constant/index.js

@@ -4,6 +4,8 @@ export const TOKEN = "User_tokey";
 
 export const localBaseUrl = import.meta.env.VITE_API_LOCAL_BASE_URL;
 
+export const coldBaseUrl = import.meta.env.VITE_API_COLD_BASE_URL;
+
 export const task = computed(() => {
   return window.sessionStorage.getItem("task")
     ? JSON.parse(window.sessionStorage.getItem("task"))

+ 1 - 1
src/login/index.vue

@@ -108,7 +108,7 @@ const handleLogin = async () => {
         window.sessionStorage.setItem("username", formValue.username);
       }
     } else {
-      message.error("验证失败,请填写完整信息");
+      message.error("验证失败");
     }
   });
 };

+ 5 - 4
src/views/project/certificate/index.vue

@@ -49,9 +49,10 @@ import VuePdfEmbed from "vue-pdf-embed";
 import { PrinterOutlined as PrinterIcon } from "@vicons/antd";
 import { editTask, getTask, getUpFileToken } from "@/api";
 import * as qiniu from "qiniu-js";
-import { useTaskStore } from "@/store/task";
 
-const taskStore = useTaskStore();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 const message = useMessage();
 
@@ -111,7 +112,7 @@ const showEditModal = () => {
 // 编辑
 const editTaskInfo = async () => {
   const { data: res } = await editTask({
-    T_task_id: taskStore.task.T_task_id,
+    T_task_id: task.T_task_id,
     T_pdf3: formValue.T_pdf3,
   });
   message.success(res.Msg);
@@ -121,7 +122,7 @@ const editTaskInfo = async () => {
 // 任务(获取)
 const getTaskInfo = async () => {
   const { data: res } = await getTask({
-    T_task_id: taskStore.task.T_task_id,
+    T_task_id: task.T_task_id,
   });
   taskInfo.value = res.Data;
 };

+ 5 - 4
src/views/project/data/checkout/index.vue

@@ -9,7 +9,7 @@
       :columns="columns"
       :data="dataList"
       :bordered="false"
-      :row-key="(row) => row.T_id"
+      :row-key="(row) => row.T_sn"
       :max-height="650"
     />
   </n-space>
@@ -19,13 +19,14 @@
 import { h } from "vue";
 import { checkTaskData } from "@/api";
 import { NTag } from "naive-ui";
-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_task_id: task.T_task_id,
 });
 
 // 需要展示的列

+ 142 - 0
src/views/project/data/edit/AddVue.vue

@@ -0,0 +1,142 @@
+<template>
+  <n-button type="primary" @click="showAddModal">添加数据</n-button>
+  <n-modal
+    v-model:show="showModal"
+    :show-icon="false"
+    preset="dialog"
+    title="添加"
+    positive-text="确认"
+    negative-text="取消"
+    @positive-click="addTask"
+  >
+    <n-form
+      ref="formRef"
+      :model="formValue"
+      :rules="rules"
+      label-placement="left"
+      label-width="auto"
+    >
+      <n-form-item label="测点" path="T_id">
+        <n-select
+          v-model:value="formValue.T_id"
+          label-field="T_sn"
+          value-field="T_id"
+          @update:value="handleUpdateValue"
+          :options="options"
+        />
+      </n-form-item>
+      <n-form-item label="温度" path="T_t">
+        <n-input v-model:value="formValue.T_t">
+          <template #suffix> ℃ </template>
+        </n-input>
+      </n-form-item>
+      <n-form-item label="湿度" path="T_rh">
+        <n-input v-model:value="formValue.T_rh">
+          <template #suffix> % </template>
+        </n-input>
+      </n-form-item>
+      <n-form-item label="时间" path="T_time">
+        <n-date-picker
+          v-model:formatted-value="formValue.T_time"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetime"
+          clearable
+          class="w-full"
+        />
+      </n-form-item>
+    </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+import { getTaskDataClassList, addTaskData } from "@/api";
+
+// const emit = defineEmits(["submit"]);
+
+const props = defineProps(["task"]);
+
+const message = useMessage();
+
+const formRef = ref(null);
+
+// 设备列表
+const options = ref([]);
+
+// 是否展示 Modal
+const showModal = ref(false);
+
+// 表单数据
+const formValue = reactive({
+  T_sn: null,
+  T_id: null,
+  T_t: null,
+  T_rh: null,
+  T_time: null,
+});
+
+// 表单规则
+const rules = {
+  T_id: {
+    type: "number",
+    required: true,
+    trigger: ["blur", "change"],
+    message: "不能为空",
+  },
+  T_t: {
+    required: true,
+    trigger: ["blur"],
+    message: "不能为空",
+  },
+  T_rh: {
+    required: true,
+    trigger: ["blur"],
+    message: "不能为空",
+  },
+  T_time: {
+    required: true,
+    trigger: ["blur", "change"],
+    message: "不能为空",
+  },
+};
+
+// 值更新时执行的回调
+const handleUpdateValue = (value, option) => {
+  formValue.T_id = option.T_id;
+  formValue.T_sn = option.T_sn;
+};
+
+// 显示添加
+const showAddModal = () => {
+  showModal.value = true;
+};
+
+// 获取设备列表
+const addTask = async () => {
+  formRef.value.validate(async (errors) => {
+    if (!errors) {
+      const { data: res } = await addTaskData({
+        T_task_id: props.task.T_task_id,
+        ...formValue,
+      });
+      if (res.Code === 200) {
+        message.success(res.Msg);
+      }
+    } else {
+      message.error("验证失败");
+      showModal.value = true;
+    }
+  });
+};
+
+// 获取设备列表
+const getClassList = async () => {
+  const { data: res } = await getTaskDataClassList({
+    T_task_id: props.task.T_task_id,
+  });
+  options.value = res.Data;
+};
+
+getClassList();
+</script>
+
+<style lang="scss" scoped></style>

+ 176 - 0
src/views/project/data/edit/ImportVue.vue

@@ -0,0 +1,176 @@
+<template>
+  <n-button type="primary" @click="showImportModal">导入数据</n-button>
+  <n-modal
+    style="width: 30%"
+    v-model:show="showModal"
+    :show-icon="false"
+    preset="dialog"
+    title="导入"
+  >
+    <n-space vertical>
+      <n-card>
+        <n-form
+          ref="formRef"
+          :model="formValue"
+          :rules="rules"
+          label-placement="left"
+          label-width="auto"
+        >
+          <n-form-item label="开始时间" path="Time_start">
+            <n-date-picker
+              v-model:formatted-value="formValue.Time_start"
+              value-format="yyyy.MM.dd HH:mm:ss"
+              type="datetime"
+              clearable
+              class="w-full"
+            />
+          </n-form-item>
+          <n-form-item label="结束时间" path="Time_end">
+            <n-date-picker
+              v-model:formatted-value="formValue.Time_end"
+              value-format="yyyy.MM.dd HH:mm:ss"
+              type="datetime"
+              clearable
+              class="w-full"
+            />
+          </n-form-item>
+          <n-form-item label="SN" path="T_sn">
+            <n-input v-model:value="formValue.T_sn" />
+          </n-form-item>
+          <n-form-item label="探头编号" path="T_id">
+            <n-input v-model:value="formValue.T_id" />
+          </n-form-item>
+        </n-form>
+        <template #action>
+          <div class="flex justify-end">
+            <n-button type="primary" @click="getData">查询</n-button>
+          </div>
+        </template>
+      </n-card>
+      <n-spin :show="show">
+        <n-card class="h-full" title="导入后的参数">
+          <template #header-extra>
+            <n-statistic label="数据总量" :value="data.Num" />
+          </template>
+          <n-descriptions bordered class="mt-auto">
+            <n-descriptions-item label="SN">
+              {{ formValue.T_sn }}
+            </n-descriptions-item>
+            <n-descriptions-item label="探头编号">
+              {{ formValue.T_id }}
+            </n-descriptions-item>
+          </n-descriptions>
+          <template #action>
+            <div class="flex justify-end">
+              <n-popconfirm @positive-click="handleImport">
+                <template #trigger>
+                  <n-button type="primary">导入</n-button>
+                </template>
+                是否确认导入?
+              </n-popconfirm>
+            </div>
+          </template>
+        </n-card>
+      </n-spin>
+    </n-space>
+  </n-modal>
+</template>
+
+<script setup>
+import { getV3DataList, addTaskData } from "@/api";
+
+const props = defineProps(["task"]);
+
+const message = useMessage();
+
+const formRef = ref(null);
+
+// 是否展示 Modal
+const showModal = ref(false);
+
+//
+const show = ref(false);
+
+//
+const data = ref({});
+
+// 表单数据
+const formValue = reactive({
+  Time_start: null,
+  Time_end: null,
+  T_sn: "",
+  T_id: "",
+  page: 1,
+  page_z: 9999,
+});
+
+// 表单规则
+const rules = {
+  Time_start: {
+    required: true,
+    trigger: ["blur", "change"],
+    message: "不能为空",
+  },
+  Time_end: {
+    required: true,
+    trigger: ["blur", "change"],
+    message: "不能为空",
+  },
+  T_sn: {
+    required: true,
+    trigger: "blur",
+    message: "不能为空",
+  },
+  T_id: {
+    required: true,
+    trigger: "blur",
+    message: "不能为空",
+  },
+};
+
+// 显示导入
+const showImportModal = () => {
+  showModal.value = true;
+};
+
+//
+const handleImport = () => {
+  data.value.Data.forEach((item) => {
+    addTask(item);
+  });
+};
+
+const addTask = async (item) => {
+  const { data: res } = await addTaskData({
+    T_task_id: props.task.T_task_id,
+    T_sn: formValue.T_sn,
+    T_id: item.T_id,
+    T_t: item.T_t,
+    T_rh: item.T_rh,
+    T_time: item.T_time,
+  });
+  console.log(res);
+};
+
+//
+const getData = async () => {
+  show.value = true;
+  formRef.value.validate(async (errors) => {
+    if (!errors) {
+      const { data: res } = await getV3DataList({
+        Time_start: formValue.Time_start,
+        Time_end: formValue.Time_end,
+        T_snid: `${formValue.T_sn},${formValue.T_id}|`,
+        page: 1,
+        page_z: 9999,
+      });
+      show.value = false;
+      data.value = res.Data ? res.Data : {};
+    } else {
+      message.error("验证失败");
+    }
+  });
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 69 - 0
src/views/project/data/edit/SetVue.vue

@@ -0,0 +1,69 @@
+<template>
+  <n-button type="primary" @click="showSetModal">温湿度上下限设置</n-button>
+  <n-modal
+    v-model:show="showModal"
+    :show-icon="false"
+    preset="dialog"
+    title="温湿度上下限设置"
+  >
+      <n-form
+        ref="formRef"
+        :model="formValue"
+        :rules="rules"
+        label-placement="left"
+        label-width="auto"
+      >
+        <n-divider title-placement="center"> 温度 </n-divider>
+        <n-form-item label="上限" path="value">
+          <n-input v-model:value="formValue.value" />
+        </n-form-item>
+        <n-form-item label="下限" path="value">
+          <n-input v-model:value="formValue.value" />
+        </n-form-item>
+        <n-divider title-placement="center"> 湿度 </n-divider>
+        <n-form-item label="上限" path="value">
+          <n-input v-model:value="formValue.value" />
+        </n-form-item>
+        <n-form-item label="下限" path="value">
+          <n-input v-model:value="formValue.value" />
+        </n-form-item>
+        <div class="flex justify-end">
+          <n-button type="primary">确定</n-button>
+        </div>
+      </n-form>
+  </n-modal>
+</template>
+
+<script setup>
+// 是否展示 Modal
+const showModal = ref(false);
+
+// 表单数据
+const formValue = reactive({
+  value: null,
+  datetimeValue: null,
+  selectValue: null,
+});
+
+// 表单规则
+const rules = {
+  datetimeValue: {
+    type: "number",
+    required: true,
+    trigger: ["blur", "change"],
+    message: "不能为空",
+  },
+  value: {
+    required: true,
+    trigger: ["blur"],
+    message: "不能为空",
+  },
+};
+
+// 显示设置
+const showSetModal = () => {
+  showModal.value = true;
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 133 - 181
src/views/project/data/edit/index.vue

@@ -6,12 +6,12 @@
     </n-breadcrumb>
     <n-grid x-gap="12" :cols="4">
       <n-gi>
-        <n-card class="h-full">
+        <n-card>
           <n-list>
             <template #header>
               <n-checkbox label="全选" @update:checked="handleCheckAll" />
             </template>
-            <n-scrollbar style="max-height: 600px">
+            <n-scrollbar style="max-height: 600px" @scroll="onScroll">
               <n-checkbox-group
                 @update:value="onUpdateValues"
                 v-model:value="checkValues"
@@ -43,32 +43,41 @@
       <n-gi :span="3">
         <n-space vertical>
           <n-space>
-            <n-date-picker
-              v-model:value="range"
-              type="datetimerange"
-              clearable
-            />
+            <n-space align="center">
+              <span>开始时间</span>
+              <n-date-picker
+                v-model:formatted-value="queryData.Time_start"
+                value-format="yyyy.MM.dd HH:mm:ss"
+                type="datetime"
+                clearable
+              />
+            </n-space>
+            <n-space align="center">
+              <span>结束时间</span>
+              <n-date-picker
+                v-model:formatted-value="queryData.Time_end"
+                value-format="yyyy.MM.dd HH:mm:ss"
+                type="datetime"
+                clearable
+              />
+            </n-space>
             <n-button type="primary">搜索</n-button>
             <n-button type="primary">导出数据</n-button>
-            <n-button type="primary" @click="showImportModal"
-              >导入数据</n-button
-            >
-            <n-button type="primary" @click="showAddModal">添加数据</n-button>
-            <n-button type="primary" @click="showSetModal"
-              >温湿度上下限设置</n-button
-            >
+            <ImportVue :task="task" />
+            <AddVue :task="task" />
+            <SetVue />
           </n-space>
           <n-card>
-            <n-scrollbar style="max-height: 600px">
+            <n-scrollbar style="max-height: 650px">
               <Chart
                 ref="chart1"
                 constructor-type="stockChart"
-                :options="chartOptions"
+                :options="chartOptions1"
               ></Chart>
               <Chart
                 ref="chart2"
                 constructor-type="stockChart"
-                :options="chartOptions"
+                :options="chartOptions2"
               ></Chart>
             </n-scrollbar>
           </n-card>
@@ -76,144 +85,43 @@
       </n-gi>
     </n-grid>
   </n-space>
-  <n-modal
-    v-model:show="modal.showModal"
-    :show-icon="false"
-    preset="dialog"
-    :title="modal.title"
-  >
-    <template v-if="modal.title === '详情'">
-      <n-form-item>
-        <n-input v-model:value="formValue.value" />
-      </n-form-item>
-      <n-space justify="end">
-        <n-popconfirm @positive-click="handleDelete">
-          <template #trigger>
-            <n-button type="error">删除该点</n-button>
-          </template>
-          是否确认删除?
-        </n-popconfirm>
-        <n-button type="primary">确定</n-button>
-      </n-space>
-    </template>
-    <template v-if="modal.title === '导入'">
-      <n-form
-        ref="formRef"
-        :model="formValue"
-        :rules="rules"
-        label-placement="left"
-        label-width="auto"
-      >
-        <n-form-item label="开始时间" path="datetimeValue">
-          <n-date-picker
-            v-model:value="formValue.datetimeValue"
-            type="datetime"
-            class="w-full"
-          />
-        </n-form-item>
-        <n-form-item label="结束时间" path="datetimeValue">
-          <n-date-picker
-            v-model:value="formValue.datetimeValue"
-            type="datetime"
-            class="w-full"
-          />
-        </n-form-item>
-        <n-form-item label="SN" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <n-form-item label="探头编号" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <div class="flex justify-end">
-          <n-button type="primary">查询</n-button>
-        </div>
-      </n-form>
-    </template>
-    <template v-if="modal.title === '添加'">
-      <n-form
-        ref="formRef"
-        :model="formValue"
-        :rules="rules"
-        label-placement="left"
-        label-width="auto"
-      >
-        <n-form-item label="测点" path="selectValue">
-          <n-select
-            v-model:value="formValue.selectValue"
-            :options="generalOptions"
-          />
-        </n-form-item>
-        <n-form-item label="温度" path="value">
-          <n-input v-model:value="formValue.value">
-            <template #suffix> ℃ </template>
-          </n-input>
-        </n-form-item>
-        <n-form-item label="湿度" path="value">
-          <n-input v-model:value="formValue.value">
-            <template #suffix> % </template>
-          </n-input>
-        </n-form-item>
-        <n-form-item label="时间" path="datetimeValue">
-          <n-date-picker
-            v-model:value="formValue.datetimeValue"
-            type="datetime"
-            class="w-full"
-          />
-        </n-form-item>
-        <div class="flex justify-end">
-          <n-button type="primary">添加</n-button>
-        </div>
-      </n-form>
-    </template>
-    <template v-if="modal.title === '设置'">
-      <n-form
-        ref="formRef"
-        :model="formValue"
-        :rules="rules"
-        label-placement="left"
-        label-width="auto"
-      >
-        <n-divider title-placement="center"> 温度 </n-divider>
-        <n-form-item label="上限" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <n-form-item label="下限" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <n-divider title-placement="center"> 湿度 </n-divider>
-        <n-form-item label="上限" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <n-form-item label="下限" path="value">
-          <n-input v-model:value="formValue.value" />
-        </n-form-item>
-        <div class="flex justify-end">
-          <n-button type="primary">确定</n-button>
-        </div>
-      </n-form>
-    </template>
+  <n-modal v-model:show="showModal" :show-icon="false" preset="dialog">
+    <n-form-item>
+      <n-input v-model:value="formValue.value" />
+    </n-form-item>
+    <n-space justify="end">
+      <n-popconfirm @positive-click="handleDelete">
+        <template #trigger>
+          <n-button type="error">删除该点</n-button>
+        </template>
+        是否确认删除?
+      </n-popconfirm>
+      <n-button type="primary">确定</n-button>
+    </n-space>
   </n-modal>
 </template>
 
 <script setup>
 import { Chart } from "highcharts-vue";
 import { getTaskDataClassList, getTaskDataList } from "@/api";
-import { useTaskStore } from "@/store/task";
+import AddVue from "./AddVue.vue";
+import ImportVue from "./ImportVue.vue";
+import SetVue from "./SetVue.vue";
 
-const taskStore = useTaskStore();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 const chart1 = ref(null);
 const chart2 = ref(null);
 
-const range = ref(null);
-
 // 查询数据
 const queryData = reactive({
-  T_task_id: taskStore.task.T_task_id,
+  T_task_id: task.T_task_id,
   T_sn: "",
   T_id: "",
-  Time_start: "",
-  Time_and: "",
+  Time_start: null,
+  Time_end: null,
   page: 1,
   page_z: 10,
 });
@@ -228,14 +136,8 @@ const formValue = reactive({
 // 表单规则
 const rules = {
   datetimeValue: {
-    type: "number",
-    required: true,
-    trigger: ["blur", "change"],
-    message: "不能为空",
-  },
-  value: {
     required: true,
-    trigger: ["blur"],
+    trigger: "blur",
     message: "不能为空",
   },
 };
@@ -249,6 +151,16 @@ const dataList = ref([]);
 // 选项组受控模式下的值
 const checkValues = ref([]);
 
+//
+const onScroll = (e) => {
+  const clientHeight = e.target.clientHeight;
+  const scrollTop = e.target.scrollTop;
+  const scrollHeight = e.target.scrollHeight;
+  console.log(clientHeight);
+  console.log(scrollTop);
+  console.log(scrollHeight);
+};
+
 // 全选
 const handleCheckAll = (checked) => {
   if (checked) {
@@ -264,8 +176,14 @@ const onUpdateValues = async (values, meta) => {
   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]);
+  const data1 = dataList.value.map((item) => [
+    new Date(item.T_time).getTime(),
+    item.T_t,
+  ]);
+  const data2 = dataList.value.map((item) => [
+    new Date(item.T_time).getTime(),
+    item.T_rh,
+  ]);
   if (meta.actionType === "check") {
     chart1.value.chart.addSeries({
       id: meta.value,
@@ -275,8 +193,7 @@ const onUpdateValues = async (values, meta) => {
       cursor: "pointer",
       events: {
         click() {
-          modal.showModal = true;
-          modal.title = "详情";
+          showModal.value = true;
         },
       },
     });
@@ -288,8 +205,7 @@ const onUpdateValues = async (values, meta) => {
       cursor: "pointer",
       events: {
         click(e) {
-          modal.showModal = true;
-          modal.title = "详情";
+          showModal.value = true;
           console.log(e);
         },
       },
@@ -305,13 +221,24 @@ const handleDelete = () => {
   console.log("delete");
 };
 
-const series = ref([]);
-
 // 图表配置
-const chartOptions = {
+const chartOptions1 = {
+  xAxis: {
+    labels: {
+      format: "{value:%Y-%m-%d}",
+    },
+  },
+
+  yAxis: {
+    labels: {
+      format: `{text}℃`,
+    },
+  },
+
   legend: {
     enabled: true,
   },
+
   accessibility: {
     enabled: false,
   },
@@ -331,9 +258,6 @@ const chartOptions = {
 
   subtitle: {
     align: "left",
-    style: {
-      fontWeight: "bold",
-    },
     text: "车载冷藏箱",
   },
 
@@ -341,44 +265,72 @@ const chartOptions = {
     valueDecimals: 2,
   },
 
-  series,
+  series: [],
 };
+const chartOptions2 = {
+  xAxis: {
+    labels: {
+      format: "{value:%Y-%m-%d}",
+    },
+  },
 
-// 对话框数据源
-const modal = reactive({
-  showModal: false,
-  title: "",
-});
+  yAxis: {
+    labels: {
+      format: `{text}%`,
+    },
+  },
 
-// 显示添加
-const showSetModal = () => {
-  modal.showModal = true;
-  modal.title = "设置";
-};
+  legend: {
+    enabled: true,
+  },
 
-// 显示添加
-const showAddModal = () => {
-  modal.showModal = true;
-  modal.title = "添加";
-};
+  accessibility: {
+    enabled: false,
+  },
+
+  chart: {
+    zoomType: "xy",
+  },
+
+  boost: {
+    useGPUTranslations: true,
+    seriesThreshold: 5,
+  },
+
+  title: {
+    text: "车载冷藏箱",
+  },
+
+  subtitle: {
+    align: "left",
+    text: "车载冷藏箱",
+  },
 
-// 显示导入
-const showImportModal = () => {
-  modal.showModal = true;
-  modal.title = "导入";
+  tooltip: {
+    valueDecimals: 2,
+  },
+
+  series: [],
 };
 
+// 是否展示 Modal
+const showModal = ref(false);
+
 // 获取设备列表
 const getClassList = async () => {
   const { data: res } = await getTaskDataClassList({
-    T_task_id: taskStore.task.T_task_id,
+    T_task_id: task.T_task_id,
   });
   classList.value = res.Data ? res.Data : [];
 };
 
 // 获取任务数据列表
 const getDataList = async () => {
-  const { data: res } = await getTaskDataList(queryData);
+  const { data: res } = await getTaskDataList({
+    ...queryData,
+    Time_start: queryData.Time_start ? queryData.Time_start : "",
+    Time_end: queryData.Time_end ? queryData.Time_end : "",
+  });
   dataList.value = res.Data.List ? res.Data.List : [];
 };
 

+ 41 - 22
src/views/project/data/source/index.vue

@@ -45,11 +45,11 @@
         :data="taskList"
         :pagination="pagination"
         :bordered="false"
-        :max-height="500"
+        :max-height="600"
       />
     </n-space>
   </n-spin>
-  <n-modal v-model:show="modal.showModal" :mask-closable="false">
+  <n-modal v-model:show="showModal" :mask-closable="false">
     <n-card
       title="自定义时间"
       style="width: 30%"
@@ -78,7 +78,14 @@
           />
         </n-form-item>
         <n-form-item>
-          <n-button block type="primary" @click="handleSearch"> 搜索 </n-button>
+          <n-button
+            block
+            type="primary"
+            @click="handleSearch"
+            :disabled="!(queryData.Time_start && queryData.Time_end)"
+          >
+            搜索
+          </n-button>
         </n-form-item>
       </n-form>
     </n-card>
@@ -88,18 +95,20 @@
 <script setup>
 import { NSpace } from "naive-ui";
 import { extractTaskData, getTaskDataList, importTaskData } from "@/api";
-import { useTaskStore } from "@/store/task";
+import { message } from "@/plugin/naive-ui";
 
 const notification = useNotification();
 
-const taskStore = useTaskStore();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 const pinShow = ref(false);
 const pinText = ref("");
 
 // 查询数据
 const queryData = reactive({
-  T_task_id: taskStore.task.T_task_id,
+  T_task_id: task.T_task_id,
   T_sn: "",
   T_id: "",
   Time_start: null,
@@ -133,7 +142,6 @@ const columns = [
 
 // 分页数据源
 const pagination = reactive({
-  simple: true,
   page: queryData.page,
   pageSize: queryData.page_z,
   itemCount: 10,
@@ -145,16 +153,15 @@ const pagination = reactive({
 });
 
 // modal数据源
-const modal = reactive({
-  showModal: false,
-});
+const showModal = ref(true);
 
+//
 const handleSearch = () => {
-  modal.showModal = false;
+  showModal.value = false;
   extractTaskInfo();
 };
 
-// 获取列表
+//
 const importTaskInfo = async () => {
   pinShow.value = true;
   pinText.value = "正在打包数据";
@@ -162,45 +169,57 @@ const importTaskInfo = async () => {
     T_task_id: queryData.T_task_id,
   });
   if (res.Code === 200) {
-    pinShow.value = false;
     notification.success({
       content: "打包数据成功",
       duration: 2500,
       keepAliveOnHover: true,
     });
     getDataList();
+  } else {
+    showModal.value = true;
   }
+  pinShow.value = false;
 };
 
-// 获取列表
+//
 const extractTaskInfo = async () => {
   pinShow.value = true;
   pinText.value = "正在汇总数据";
   const { data: res } = await extractTaskData({
     T_task_id: queryData.T_task_id,
-    Time_start: queryData.Time_start,
-    Time_end: queryData.Time_end,
+    Time_start: queryData.Time_start !== null ? queryData.Time_start : "",
+    Time_end: queryData.Time_end !== null ? queryData.Time_end : "",
   });
   if (res.Code === 200) {
-    pinShow.value = false;
     notification.success({
       content: "汇总数据成功",
       duration: 2500,
       keepAliveOnHover: true,
     });
     importTaskInfo();
+  } else {
+    showModal.value = true;
   }
+  pinShow.value = false;
 };
 
 // 获取列表
 const getDataList = async () => {
-  const { data: res } = await getTaskDataList(queryData);
+  const { data: res } = await getTaskDataList({
+    ...queryData,
+    Time_start: queryData.Time_start !== null ? queryData.Time_start : "",
+    Time_end: queryData.Time_end !== null ? queryData.Time_end : "",
+  });
   pagination.itemCount = res.Data.Num;
-  taskList.value = res.Data.List ? res.Data.List : [];
-  modal.showModal = taskList.value.length <= 0;
+  if (!res.Data.List) {
+    message.info("数据为空,请重新选择");
+    queryData.Time_start = null;
+    queryData.Time_end = null;
+    showModal.value = true;
+  } else {
+    taskList.value = res.Data.List;
+  }
 };
-
-getDataList();
 </script>
 
 <style scoped></style>

+ 4 - 3
src/views/project/equipment/index.vue

@@ -67,9 +67,10 @@ import {
   editDeviceClassList,
   deleteDeviceClassList,
 } from "@/api";
-import { useTaskStore } from "@/store/task";
 
-const taskStore = useTaskStore();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 const message = useMessage();
 
@@ -93,7 +94,7 @@ const rules = {
 // 查询参数
 const queryData = reactive({
   T_sn: "",
-  T_class: taskStore.task.T_class,
+  T_class: task.T_class,
 });
 
 // 需要展示的列

+ 6 - 5
src/views/project/report/audit/index.vue

@@ -56,7 +56,7 @@
         </n-scrollbar>
       </n-tab-pane>
       <n-tab-pane name="4" tab="验证数据">
-        <TabFour />
+        <TabFour :task="task" />
       </n-tab-pane>
     </n-tabs>
   </n-space>
@@ -67,13 +67,14 @@ import VuePdfEmbed from "vue-pdf-embed";
 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();
+const task = window.sessionStorage.getItem("task")
+  ? JSON.parse(window.sessionStorage.getItem("task"))
+  : {};
 
 const pdfRef = ref(null);
 
@@ -100,7 +101,7 @@ const handleCheck = () => {
 // 更新线上数据
 const updateTask = async () => {
   const { data: res } = await updateTaskData({
-    T_task_id: taskStore.task.T_task_id,
+    T_task_id: task.T_task_id,
   });
   if (res.Code === 200) {
     message.success(res.Msg);
@@ -110,7 +111,7 @@ const updateTask = async () => {
 // 任务(获取)
 const getTaskInfo = async () => {
   const { data: res } = await getTask({
-    T_task_id: taskStore.task.T_task_id,
+    T_task_id: task.T_task_id,
   });
   taskInfo.value = res.Data;
 };

+ 2 - 5
src/views/project/report/audit/tab-four/index.vue

@@ -31,14 +31,11 @@
 <script setup>
 import { extractTaskData } from "@/api";
 
-const task = window.sessionStorage.getItem("task")
-  ? JSON.parse(window.sessionStorage.getItem("task"))
-  : {};
+const props = defineProps(["task"]);
 
 // 查询参数
 const queryData = reactive({
-  T_task_id: task.T_task_id,
-  T_Class_id: task.T_class,
+  T_task_id: props.task.T_task_id,
   Time_start: "",
   Time_end: "",
   T_sn: "",

+ 2 - 4
src/views/project/scheme/index.vue

@@ -212,16 +212,14 @@
   <n-modal
     :style="{ width: modal.width }"
     v-model:show="modal.showModal"
-    :show-icon="false"
+    :show-icon="modal.title === '生成方案'"
     preset="dialog"
     :title="modal.title"
     positive-text="确认"
     negative-text="取消"
     @positive-click="submitCallback"
   >
-    <template v-if="modal.title === '生成方案'">
-      <n-alert :bordered="false" type="info"> 确定生成报告? </n-alert>
-    </template>
+    <template v-if="modal.title === '生成方案'"> 确定生成报告? </template>
     <template v-else>
       <n-form
         ref="formRef"