浏览代码

feat: 指标库

ystl_myq 7 月之前
父节点
当前提交
1f7e0e9c85

+ 12 - 2
src/api/download.ts

@@ -1,11 +1,11 @@
 // / 下载模板
 import axios from "axios";
-const FLIE_URL = import.meta.env.VITE_BASE_URL + "/quota/downloaQuotaTemplate";
+const FLIE_URL = import.meta.env.VITE_BASE_URL;
 import { ElMessage } from "element-plus";
 export const GetdownloadDataRosterTemplateApi = async () => {
   const token = localStorage.getItem("token") || "";
   try {
-    const response = await axios.get(FLIE_URL, {
+    const response = await axios.get(FLIE_URL + "/quota/downloaQuotaTemplate", {
       responseType: "blob", // 确保接收的是二进制数据
       headers: {
         satoken: token // 将 token 添加到请求头
@@ -28,3 +28,13 @@ export const GetdownloadDataRosterTemplateApi = async () => {
     ElMessage.error("模板下载失败,请重试");
   }
 };
+
+export const postUpdateDeptApi = async data => {
+  const token = localStorage.getItem("token") || "";
+  return axios.post(`${FLIE_URL}/quota/importQuotaTemplate`, data, {
+    headers: {
+      "Content-Type": "multipart/form-data", // 指定内容类型
+      satoken: token // 将 Token 添加到请求头
+    }
+  });
+};

+ 7 - 0
src/api/indexDefine.ts

@@ -41,3 +41,10 @@ export const GetdownloadDataRosterTemplate = () => {
 export const postImportQuotaTemplate = data => {
   return http.request<QuotaPage>("post", "/quota/importQuotaTemplate", data);
 };
+// 日志
+export const getQuotaLogInfo = data => {
+  return http.request<QuotaPageList>(
+    "get",
+    `/quota/getQuotaLogInfo/&quotaId=${data}`
+  );
+};

+ 12 - 3
src/api/select.ts

@@ -1,21 +1,30 @@
 import { http } from "@/utils/http";
 import { ref } from "vue";
 export const select = ref<any>([]);
+export const selectFrom = ref<any>([]);
 // 字典
 type QuotaPageList = {
   code: number;
   msg: string;
   data: Array<any>;
 };
-export const selectDictList = () => {
+export const selectDictList = data => {
   return http.request<QuotaPageList>("get", "/commonDict/selectDictList", {
-    dictType: "1"
+    data
   });
 };
 export const getSelectDictListtApi = async () => {
-  const { code, data } = await selectDictList();
+  const { code, data } = await selectDictList({ dictType: "1" });
   if (code == 200) {
     select.value = data;
     return data;
   }
 };
+export const getFromSelectDictListtApi = async () => {
+  const { code, data } = await selectDictList({ dictType: "2" });
+  if (code == 200) {
+    selectFrom.value = data;
+    console.log("11111", data);
+    return data;
+  }
+};

+ 13 - 3
src/views/indexDefine/children/components/dialog.vue

@@ -2,7 +2,12 @@
 import { reactive, computed, ref, onMounted } from "vue";
 import { ElMessage } from "element-plus";
 import { addQuota } from "@/api/indexDefine";
-import { getSelectDictListtApi, select } from "@/api/select";
+import {
+  getSelectDictListtApi,
+  select,
+  getFromSelectDictListtApi,
+  selectFrom
+} from "@/api/select";
 // import dayjs from "dayjs";
 const emit = defineEmits(["closeDialog"]);
 const visible = ref(false);
@@ -17,6 +22,7 @@ const form = reactive({
 });
 onMounted(() => {
   getSelectDictListtApi();
+  getFromSelectDictListtApi();
 });
 const msgName = ref("");
 const addQuotaApi = async () => {
@@ -127,8 +133,12 @@ defineExpose({
         </el-form-item>
         <el-form-item label="来源">
           <el-select v-model="form.source" placeholder="请选择">
-            <el-option label="Zone No.1" value="shanghai" />
-            <el-option label="Zone No.2" value="beijing" />
+            <el-option
+              v-for="(item, index) in selectFrom"
+              :key="index"
+              :label="item.dictValue"
+              :value="item.dictValue"
+            />
           </el-select>
         </el-form-item>
         <el-form-item label="状态" prop="statue">

+ 16 - 5
src/views/indexDefine/children/components/editDrawer.vue

@@ -3,15 +3,19 @@ import { ref, reactive, onMounted } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 import { postUpdateDept, getQuotaSourceList } from "@/api/indexDefine";
-import { getSelectDictListtApi, select } from "@/api/select";
+import {
+  getSelectDictListtApi,
+  select,
+  getFromSelectDictListtApi,
+  selectFrom
+} from "@/api/select";
 import { getStateData, getStateType } from "@/config/tag";
 const emit = defineEmits(["closeEditDialog"]);
-// closeEditDialog
-// const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
 const disabledShow = ref<any>(true);
 onMounted(() => {
   getSelectDictListtApi();
+  getFromSelectDictListtApi();
 });
 const direction = ref<DrawerProps["direction"]>("rtl");
 const formLabelAlign = reactive({
@@ -130,10 +134,17 @@ defineExpose({
               />
             </el-form-item>
             <el-form-item label="来源" label-position="top">
-              <el-input
+              <el-select
                 v-model="formLabelAlign.source"
                 :disabled="disabledShow"
-              />
+                placeholder="请选择来源"
+              >
+                <el-option
+                  v-for="(item, index) in selectFrom"
+                  :key="index"
+                  :label="item.dictValue"
+                  :value="item.dictValue"
+              /></el-select>
             </el-form-item>
             <el-form-item label="状态" label-position="top" prop="statue">
               <el-select

+ 16 - 40
src/views/indexDefine/children/components/logDrawer.vue

@@ -3,45 +3,25 @@ import { ref, reactive } from "vue";
 import { ElMessageBox } from "element-plus";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
+import { getQuotaLogInfo } from "@/api/indexDefine";
+import dayjs from "dayjs";
 const drawer = ref(false);
+const quotaId = ref();
 const direction = ref<DrawerProps["direction"]>("rtl");
-const formLabelAlign = reactive({
-  name: "",
-  region: "",
-  type: ""
-});
-const handleClose = (done: () => void) => {
-  ElMessageBox.confirm("配置项未保存,确认关闭", {
-    type: "warning"
-  }).then(() => {
-    drawer.value = false;
-  });
-};
-const logList = reactive([
-  {
-    name: "张三",
-    time: "2022-01-01 12:00:00",
-    content:
-      "修改了配置项修改了配置项修改了配置项修改了配置项修改了配置项修改了配置项修改了配置项修改了配置项修改了配置项"
-  },
-  {
-    name: "李四",
-    time: "2022-01-01 12:00:00",
-    content: "修改了配置项"
-  },
-  {
-    name: "王五",
-    time: "2022-01-01 12:00:00",
-    content: "修改了配置项修改了配置项"
+const logList = ref([]);
+const getQuotaLogInfoApi = async () => {
+  const { code, data } = await getQuotaLogInfo(quotaId.value);
+  console.log(data);
+  if (code === 200) {
+    logList.value = data;
   }
-]);
+};
 function cancelClick() {
   drawer.value = false;
 }
-function confirmClick() {
-  console.log(1111);
-}
 const open = row => {
+  quotaId.value = row.id;
+  getQuotaLogInfoApi();
   drawer.value = true;
 };
 defineExpose({
@@ -52,11 +32,7 @@ const timer = ref("");
 
 <template>
   <div>
-    <el-drawer
-      v-model="drawer"
-      :direction="direction"
-      :before-close="handleClose"
-    >
+    <el-drawer v-model="drawer" :direction="direction">
       <template #header>
         <h4>指标日志</h4>
       </template>
@@ -68,7 +44,7 @@ const timer = ref("");
               <div
                 class="bg-gray-100 pl-3 pb-2 pt-2 rounded text-sm text-gray-500"
               >
-                {{ item.name }}
+                {{ item.updateUser }}
               </div>
             </div>
             <div class="mt-4">
@@ -76,7 +52,7 @@ const timer = ref("");
               <div
                 class="bg-gray-100 pl-3 pb-2 pt-2 rounded text-sm text-gray-500"
               >
-                {{ item.time }}
+                {{ dayjs(item.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
               </div>
             </div>
             <div class="mt-4">
@@ -84,7 +60,7 @@ const timer = ref("");
               <div
                 class="bg-gray-100 pl-3 pr-3 pb-2 pt-2 rounded text-sm text-gray-500"
               >
-                {{ item.content }}
+                {{ item.updateContent }}
               </div>
               <el-divider />
             </div>

+ 1 - 1
src/views/indexDefine/children/define.vue

@@ -122,7 +122,7 @@ const GoSizeImport = () => {
 };
 // 日志
 const logs = row => {
-  logDrawerRef.value.open();
+  logDrawerRef.value.open(row);
   logDrawerShow.value = true;
 };
 // 发布

+ 54 - 30
src/views/indexDefine/children/import/index.vue

@@ -4,15 +4,19 @@ defineOptions({
 });
 import { ref } from "vue";
 import * as XLSX from "xlsx";
-import { postImportQuotaTemplate } from "@/api/indexDefine";
-import { GetdownloadDataRosterTemplateApi } from "@/api/download";
+import {
+  GetdownloadDataRosterTemplateApi,
+  postUpdateDeptApi
+} from "@/api/download";
 import { ElMessage } from "element-plus";
-
+import { useRouter } from "vue-router";
+const $router = useRouter();
 const emit = defineEmits(["handleImport"]);
 const uploadShow = ref(true);
 const fileDocument = ref<File | null>(null); // 存储文件
 
 // 上传文件函数
+// 上传文件函数
 const uploadFile = async () => {
   if (!fileDocument.value) {
     ElMessage.error("请先上传文件");
@@ -21,16 +25,31 @@ const uploadFile = async () => {
 
   try {
     const formData = new FormData();
-    formData.append("file", fileDocument.value); // 将文件添加到 FormData 中
+    formData.append("file", fileDocument.value); // 将文件添加到表单数据
+
+    // 调用 API 上传文件
+    const { code, msg } = await postUpdateDeptApi(formData);
 
-    const { code } = await postImportQuotaTemplate(formData); // 发送 FormData
     if (code === 200) {
-      ElMessage.success("上传成功");
-      emit("handleImport");
+      // 根据后端返回的 code 判断是否成功
+      ElMessage.success("文件上传并导入成功");
+      // 重置上传状态
+      // uploadShow.value = true;
+      $router.push("/IndexDefine/children/define");
+      tableHeaders.value = []; // 清空表头
+      tableData.value = [
+        { name: "" },
+        { defin: "" },
+        { caliber: "" },
+        { type: "" },
+        { from: "" }
+      ]; // 清空表格数据
+    } else {
+      ElMessage.error(msg);
     }
   } catch (error) {
-    console.error("上传文件时出错:", error);
-    ElMessage.error("上传文件时出错,请检查文件格式");
+    ElMessage.error("上传失败,请重试");
+    console.error(error);
   }
 };
 
@@ -51,29 +70,34 @@ const backDefine = () => {
 const handleUploadChange = (file: File) => {
   fileDocument.value = file; // 保存文件
   const reader = new FileReader();
+  let fileType = file.name.slice(-4);
+  console.log("文件", file.name.slice(-4));
+  if (fileType == "xlsx") {
+    reader.onload = e => {
+      const data = new Uint8Array(e.target?.result as ArrayBuffer);
+      const workbook = XLSX.read(data, { type: "array" }); // 读取 Excel 文件
+      const firstSheetName = workbook.SheetNames[0]; // 获取第一个工作表名
+      const worksheet = workbook.Sheets[firstSheetName]; // 获取第一个工作表
+      const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); // 将工作表转为 JSON
 
-  reader.onload = e => {
-    const data = new Uint8Array(e.target?.result as ArrayBuffer);
-    const workbook = XLSX.read(data, { type: "array" }); // 读取 Excel 文件
-    const firstSheetName = workbook.SheetNames[0]; // 获取第一个工作表名
-    const worksheet = workbook.Sheets[firstSheetName]; // 获取第一个工作表
-    const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); // 将工作表转为 JSON
-
-    if (jsonData.length > 0) {
-      tableHeaders.value = jsonData[0]; // 表头
-      tableData.value = jsonData.slice(1).map(row => {
-        const rowData = {};
-        tableHeaders.value.forEach((header, index) => {
-          rowData[header] = row[index] !== undefined ? row[index] : null; // 填充缺失值
+      if (jsonData.length > 0) {
+        tableHeaders.value = jsonData[0]; // 表头
+        tableData.value = jsonData.slice(1).map(row => {
+          const rowData = {};
+          tableHeaders.value.forEach((header, index) => {
+            rowData[header] = row[index] !== undefined ? row[index] : null; // 填充缺失值
+          });
+          return rowData;
         });
-        return rowData;
-      });
-      ElMessage.success("文件上传成功");
-      uploadShow.value = false; // 隐藏上传区域,显示数据表
-    } else {
-      ElMessage.error("文件为空或格式不正确");
-    }
-  };
+        ElMessage.success("文件上传成功");
+        uploadShow.value = false; // 隐藏上传区域,显示数据表
+      } else {
+        ElMessage.error("文件为空或格式不正确");
+      }
+    };
+  } else {
+    ElMessage.error("请上传xlsx文件");
+  }
 
   reader.readAsArrayBuffer(file); // 读取文件为 ArrayBuffer
 };