From 7fa3671f5a04f6f4943d064bf05f491cff9d5576 Mon Sep 17 00:00:00 2001
From: ali <ali9696@163.com>
Date: 星期四, 23 一月 2025 15:48:02 +0800
Subject: [PATCH] 节能项目+政策法规

---
 zhitan-vue/src/views/energyconservation/policyrule/policyRule.vue                            |  187 ++++----
 zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/projectManage.vue        |  205 +++++-----
 zhitan-vue/src/components/FileUpload/index.vue                                               |  144 +++---
 zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/components/EditModal.vue |  198 ++++----
 zhitan-vue/src/api/policy/policy.js                                                          |   44 ++
 zhitan-vue/src/utils/dict.js                                                                 |   28 
 zhitan-vue/src/views/monitor/cache/index.vue                                                 |  137 ++++--
 zhitan-vue/src/api/policy/project.js                                                         |   44 ++
 zhitan-vue/src/views/energyconservation/policyrule/components/EditModal.vue                  |  158 ++++---
 9 files changed, 662 insertions(+), 483 deletions(-)

diff --git a/zhitan-vue/src/api/policy/policy.js b/zhitan-vue/src/api/policy/policy.js
new file mode 100644
index 0000000..9af2df4
--- /dev/null
+++ b/zhitan-vue/src/api/policy/policy.js
@@ -0,0 +1,44 @@
+import request from "@/utils/request"
+
+// 鑾峰彇鍒楄〃
+export function policyPage(params) {
+  return request({
+    url: "/policiesRegulations/page",
+    method: "get",
+    params,
+  })
+}
+
+// 鏂板
+export function policyAdd(data) {
+  return request({
+    url: "/policiesRegulations/add",
+    method: "post",
+    data,
+  })
+}
+
+// 鏌ヨ鎯�
+export function policyInfo(params) {
+  return request({
+    url: "/policiesRegulations/detail?id=" + params,
+    method: "get",
+  })
+}
+
+// 缂栬緫
+export function policyEdit(data) {
+  return request({
+    url: "/policiesRegulations/edit",
+    method: "post",
+    data,
+  })
+}
+
+//鍒犻櫎
+export function policyDel(id) {
+  return request({
+    url: "/policiesRegulations/delete/" + id,
+    method: "delete",
+  })
+}
diff --git a/zhitan-vue/src/api/policy/project.js b/zhitan-vue/src/api/policy/project.js
new file mode 100644
index 0000000..861a90c
--- /dev/null
+++ b/zhitan-vue/src/api/policy/project.js
@@ -0,0 +1,44 @@
+import request from "@/utils/request"
+
+// 鑾峰彇鍒楄〃
+export function projectPage(params) {
+  return request({
+    url: "/energySavingProject/page",
+    method: "get",
+    params,
+  })
+}
+
+// 鏂板
+export function projectAdd(data) {
+  return request({
+    url: "/energySavingProject/add",
+    method: "post",
+    data,
+  })
+}
+
+// 鏌ヨ鎯�
+export function projectInfo(params) {
+  return request({
+    url: "/energySavingProject/getById?id=" + params,
+    method: "get",
+  })
+}
+
+// 缂栬緫
+export function projectEdit(data) {
+  return request({
+    url: "/energySavingProject/edit",
+    method: "post",
+    data,
+  })
+}
+
+//鍒犻櫎
+export function projectDel(id) {
+  return request({
+    url: "/energySavingProject/del/" + id,
+    method: "delete",
+  })
+}
diff --git a/zhitan-vue/src/components/FileUpload/index.vue b/zhitan-vue/src/components/FileUpload/index.vue
index 488d3ee..044aeda 100644
--- a/zhitan-vue/src/components/FileUpload/index.vue
+++ b/zhitan-vue/src/components/FileUpload/index.vue
@@ -20,8 +20,12 @@
     <!-- 涓婁紶鎻愮ず -->
     <div class="el-upload__tip" v-if="showTip">
       璇蜂笂浼�
-      <template v-if="fileSize"> 澶у皬涓嶈秴杩� <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
-      <template v-if="fileType"> 鏍煎紡涓� <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
+      <template v-if="fileSize">
+        澶у皬涓嶈秴杩� <b style="color: #f56c6c">{{ fileSize }}MB</b>
+      </template>
+      <template v-if="fileType">
+        鏍煎紡涓� <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+      </template>
       鐨勬枃浠�
     </div>
     <!-- 鏂囦欢鍒楄〃 -->
@@ -39,7 +43,7 @@
 </template>
 
 <script setup>
-import { getToken } from "@/utils/auth";
+import { getToken } from "@/utils/auth"
 const props = defineProps({
   modelValue: [String, Object, Array],
   // 鏁伴噺闄愬埗
@@ -55,110 +59,112 @@
   // 鏂囦欢绫诲瀷, 渚嬪['png', 'jpg', 'jpeg']
   fileType: {
     type: Array,
-    default: () => ["doc", "xls", "ppt", "txt", "pdf","docx"],
+    default: () => ["doc", "xls", "ppt", "txt", "pdf", "docx"],
   },
   // 鏄惁鏄剧ず鎻愮ず
   isShowTip: {
     type: Boolean,
-    default: true
-  }
-});
+    default: true,
+  },
+})
 
-const { proxy } = getCurrentInstance();
-const emit = defineEmits();
-const number = ref(0);
-const uploadList = ref([]);
-const baseUrl = import.meta.env.VITE_APP_BASE_API;
-const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 涓婁紶鏂囦欢鏈嶅姟鍣ㄥ湴鍧�
-const headers = ref({ Authorization: "Bearer " + getToken() });
-const fileList = ref([]);
-const showTip = computed(
-  () => props.isShowTip && (props.fileType || props.fileSize)
-);
+const { proxy } = getCurrentInstance()
+const emit = defineEmits()
+const number = ref(0)
+const uploadList = ref([])
+const baseUrl = import.meta.env.VITE_APP_BASE_API
+const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload") // 涓婁紶鏂囦欢鏈嶅姟鍣ㄥ湴鍧�
+const headers = ref({ Authorization: "Bearer " + getToken() })
+const fileList = ref([])
+const showTip = computed(() => props.isShowTip && (props.fileType || props.fileSize))
 
-watch(() => props.modelValue, val => {
-  if (val) {
-    let temp = 1;
-    // 棣栧厛灏嗗�艰浆涓烘暟缁�
-    const list = Array.isArray(val) ? val : props.modelValue.split(',');
-    // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁�
-    fileList.value = list.map(item => {
-      if (typeof item === "string") {
-        item = { name: item, url: item };
-      }
-      item.uid = item.uid || new Date().getTime() + temp++;
-      return item;
-    });
-  } else {
-    fileList.value = [];
-    return [];
-  }
-},{ deep: true, immediate: true });
+watch(
+  () => props.modelValue,
+  (val) => {
+    if (val) {
+      let temp = 1
+      // 棣栧厛灏嗗�艰浆涓烘暟缁�
+      const list = Array.isArray(val) ? val : props.modelValue.split(",")
+      // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁�
+      fileList.value = list.map((item) => {
+        if (typeof item === "string") {
+          item = { name: item, url: item }
+        }
+        item.uid = item.uid || new Date().getTime() + temp++
+        return item
+      })
+    } else {
+      fileList.value = []
+      return []
+    }
+  },
+  { deep: true, immediate: true }
+)
 
 // 涓婁紶鍓嶆牎妫�鏍煎紡鍜屽ぇ灏�
 function handleBeforeUpload(file) {
   // 鏍℃鏂囦欢绫诲瀷
   if (props.fileType.length) {
-    const fileName = file.name.split('.');
-    const fileExt = fileName[fileName.length - 1];
-    const isTypeOk = props.fileType.indexOf(fileExt) >= 0;
+    const fileName = file.name.split(".")
+    const fileExt = fileName[fileName.length - 1]
+    const isTypeOk = props.fileType.indexOf(fileExt) >= 0
     if (!isTypeOk) {
-      proxy.$modal.msgError(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${props.fileType.join("/")}鏍煎紡鏂囦欢!`);
-      return false;
+      proxy.$modal.msgError(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${props.fileType.join("/")}鏍煎紡鏂囦欢!`)
+      return false
     }
   }
   // 鏍℃鏂囦欢澶у皬
   if (props.fileSize) {
-    const isLt = file.size / 1024 / 1024 < props.fileSize;
+    const isLt = file.size / 1024 / 1024 < props.fileSize
     if (!isLt) {
-      proxy.$modal.msgError(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${props.fileSize} MB!`);
-      return false;
+      proxy.$modal.msgError(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${props.fileSize} MB!`)
+      return false
     }
   }
-  proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��...");
-  number.value++;
-  return true;
+  proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��...")
+  number.value++
+  return true
 }
 
 // 鏂囦欢涓暟瓒呭嚭
 function handleExceed() {
-  proxy.$modal.msgError(`涓婁紶鏂囦欢鏁伴噺涓嶈兘瓒呰繃 ${props.limit} 涓�!`);
+  proxy.$modal.msgError(`涓婁紶鏂囦欢鏁伴噺涓嶈兘瓒呰繃 ${props.limit} 涓�!`)
 }
 
 // 涓婁紶澶辫触
 function handleUploadError(err) {
-  proxy.$modal.msgError("涓婁紶鏂囦欢澶辫触");
+  proxy.$modal.msgError("涓婁紶鏂囦欢澶辫触")
 }
 
 // 涓婁紶鎴愬姛鍥炶皟
 function handleUploadSuccess(res, file) {
   if (res.code === 200) {
-    uploadList.value.push({ name: res.fileName, url: res.fileName });
-    uploadedSuccessfully();
+    uploadList.value.push({ name: res.fileName, url: res.fileName, fullUrl: res.url })
+    uploadedSuccessfully()
   } else {
-    number.value--;
-    proxy.$modal.closeLoading();
-    proxy.$modal.msgError(res.msg);
-    proxy.$refs.fileUpload.handleRemove(file);
-    uploadedSuccessfully();
+    number.value--
+    proxy.$modal.closeLoading()
+    proxy.$modal.msgError(res.msg)
+    proxy.$refs.fileUpload.handleRemove(file)
+    uploadedSuccessfully()
   }
 }
 
 // 鍒犻櫎鏂囦欢
 function handleDelete(index) {
-  fileList.value.splice(index, 1);
-  emit("update:modelValue", fileList.value);
+  fileList.value.splice(index, 1)
+  emit("update:modelValue", fileList.value)
 }
 
 // 涓婁紶缁撴潫澶勭悊
 function uploadedSuccessfully() {
   if (number.value > 0 && uploadList.value.length === number.value) {
-    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
-    uploadList.value = [];
-    number.value = 0;
+    fileList.value = fileList.value.filter((f) => f.url !== undefined).concat(uploadList.value)
+    uploadList.value = []
+    number.value = 0
     console.log(fileList.value)
-    emit("update:modelValue", fileList.value);
-    proxy.$modal.closeLoading();
+    emit("update:modelValue", fileList.value)
+    proxy.$modal.closeLoading()
   }
 }
 
@@ -166,22 +172,22 @@
 function getFileName(name) {
   // 濡傛灉鏄痷rl閭d箞鍙栨渶鍚庣殑鍚嶅瓧 濡傛灉涓嶆槸鐩存帴杩斿洖
   if (name.lastIndexOf("/") > -1) {
-    return name.slice(name.lastIndexOf("/") + 1);
+    return name.slice(name.lastIndexOf("/") + 1)
   } else {
-    return name;
+    return name
   }
 }
 
 // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅�
 function listToString(list, separator) {
-  let strs = "";
-  separator = separator || ",";
+  let strs = ""
+  separator = separator || ","
   for (let i in list) {
     if (list[i].url) {
-      strs += list[i].url + separator;
+      strs += list[i].url + separator
     }
   }
-  return strs != '' ? strs.substr(0, strs.length - 1) : '';
+  return strs != "" ? strs.substr(0, strs.length - 1) : ""
 }
 </script>
 
diff --git a/zhitan-vue/src/utils/dict.js b/zhitan-vue/src/utils/dict.js
index 9648f14..b86a885 100644
--- a/zhitan-vue/src/utils/dict.js
+++ b/zhitan-vue/src/utils/dict.js
@@ -1,24 +1,30 @@
-import useDictStore from '@/store/modules/dict'
-import { getDicts } from '@/api/system/dict/data'
+import useDictStore from "@/store/modules/dict"
+import { getDicts } from "@/api/system/dict/data"
 
 /**
  * 鑾峰彇瀛楀吀鏁版嵁
  */
 export function useDict(...args) {
-  const res = ref({});
+  const res = ref({})
   return (() => {
     args.forEach((dictType, index) => {
-      res.value[dictType] = [];
-      const dicts = useDictStore().getDict(dictType);
+      res.value[dictType] = []
+      const dicts = useDictStore().getDict(dictType)
       if (dicts) {
-        res.value[dictType] = dicts;
+        res.value[dictType] = dicts
       } else {
-        getDicts(dictType).then(resp => {
-          res.value[dictType] = resp.data.map(p => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass }))
-          useDictStore().setDict(dictType, res.value[dictType]);
+        getDicts(dictType).then((resp) => {
+          console.log(resp)
+          res.value[dictType] = resp.data.map((p) => ({
+            label: p.dictLabel,
+            value: p.dictValue,
+            elTagType: p.listClass,
+            elTagClass: p.cssClass,
+          }))
+          useDictStore().setDict(dictType, res.value[dictType])
         })
       }
     })
-    return toRefs(res.value);
+    return toRefs(res.value)
   })()
-}
\ No newline at end of file
+}
diff --git a/zhitan-vue/src/views/energyconservation/policyrule/components/EditModal.vue b/zhitan-vue/src/views/energyconservation/policyrule/components/EditModal.vue
index fc5f899..732084e 100644
--- a/zhitan-vue/src/views/energyconservation/policyrule/components/EditModal.vue
+++ b/zhitan-vue/src/views/energyconservation/policyrule/components/EditModal.vue
@@ -1,92 +1,116 @@
 <template>
-    <el-dialog v-model="visible" :title="title" width="600" @close="handleClose">
-        <el-form :model="form" ref="queryRef" :rules="formRules" label-width="120px" v-loading="loading">
-            <el-form-item label="鏂囦欢鏍囬" prop="limitName">
-                <el-input v-model="form.value1" placeholder="璇疯緭鍏ユ枃浠舵爣棰�" />
-            </el-form-item>
-            <el-form-item label="鏂囦欢绫诲埆">
-                <el-select v-model="form.value2" placeholder="璇烽�夋嫨">
-                    <el-option v-for="item in 6" :key="item" :label="item" :value="item">
-                    </el-option>
-                </el-select>
-            </el-form-item>
-
-        </el-form>
-        <div slot="footer" class="text-right">
-            <el-button type="primary" @click="submitForm" :loading="loading">纭� 瀹�</el-button>
-            <el-button @click="handleClose">鍙� 娑�</el-button>
-        </div>
-    </el-dialog>
+  <el-dialog v-model="visible" :title="title" width="600" @close="handleClose">
+    <el-form :model="form" ref="queryRef" :rules="formRules" label-width="120px" v-loading="loading">
+      <el-form-item label="鏂囦欢鏍囬" prop="title">
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ枃浠舵爣棰�" />
+      </el-form-item>
+      <el-form-item label="鏂囦欢绫诲埆" prop="type">
+        <el-select v-model="form.type" placeholder="鏂囦欢绫诲埆" style="width: 100%">
+          <el-option v-for="dict in policy_sort" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鍗板彂閮ㄩ棬" prop="dept">
+        <el-input v-model="form.dept" placeholder="璇疯緭鍏ュ嵃鍙戦儴闂�" />
+      </el-form-item>
+      <el-form-item label="鍗板彂鏃堕棿" prop="issuingTime">
+        <el-date-picker
+          v-model="form.issuingTime"
+          type="date"
+          placeholder="璇烽�夋嫨鍗板彂鏃堕棿"
+          format="YYYY-MM-DD"
+          date-format="YYYY/MM/DD"
+        />
+      </el-form-item>
+      <el-form-item label="闄勪欢" prop="url">
+        <FileUpload :limit="1" :modelValue="fileList" @update:modelValue="(val) => (fileList = val)"></FileUpload>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="text-right">
+      <el-button type="primary" @click="submitForm" :loading="loading">纭� 瀹�</el-button>
+      <el-button @click="handleClose">鍙� 娑�</el-button>
+    </div>
+  </el-dialog>
 </template>
 
 <script setup>
-const { proxy } = getCurrentInstance();
-
+import { policyAdd, policyEdit } from "@/api/policy/policy"
+const { proxy } = getCurrentInstance()
+const { policy_sort } = proxy.useDict("policy_sort")
 
 let visible = ref(false)
-let title = ref('')
+let title = ref("")
 let loading = ref(false)
 let form = ref({
-    value1: '',
-    value2: '',
+  title: "",
+  type: "",
+  url: "",
 })
-let emit = defineEmits(['get-list'])
+const fileList = ref([])
+let emit = defineEmits(["get-list"])
 const formRules = {
-    value1: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ枃浠舵爣棰�" }],
-    value2: [{ required: true, trigger: "change", message: "璇烽�夋嫨鏂囦欢绫诲瀷" }],
+  title: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ枃浠舵爣棰�" }],
+  type: [{ required: true, trigger: "change", message: "璇烽�夋嫨鏂囦欢绫诲瀷" }],
 }
 
 function submitForm() {
-    proxy.$refs.queryRef.validate(valid => {
-        if (valid) {
-            // loading.value = true;
-            // let obj = form.value.id ? alarmEdit(form.value) : alarmAdd(form.value)
-            // obj.then((res) => {
-            //     if (res.code == 200) {
-            //         proxy.$modal.msgSuccess(res.message);
-            //         emit('get-list')
-            //     } else {
-            //         proxy.$modal.msgError(res.message);
-            //     }
-
-            // }).catch((err) => {
-
-            // }).finally(() => {
-            //     handleClose()
-            // });
-        }
-    })
+  proxy.$refs.queryRef.validate((valid) => {
+    if (valid) {
+      loading.value = true
+      if (fileList.value.length > 0) {
+        form.value.url = fileList.value[0].fullUrl
+      } else {
+        form.value.url = ""
+      }
+      let obj = form.value.id ? policyEdit(form.value) : policyAdd(form.value)
+      obj
+        .then((res) => {
+          if (res.code == 200) {
+            proxy.$modal.msgSuccess(res.msg)
+            emit("get-list")
+            handleClose()
+          } else {
+            proxy.$modal.msgError(res.msg)
+          }
+        })
+        .catch((err) => {})
+        .finally(() => {
+          loading.value = false
+        })
+    }
+  })
 }
 
-
-
-
-
 function handleOpen(row) {
-    if (row && row.id) {
-        title.value = "缂栬緫鏀跨瓥娉曡"
-        form.value = JSON.parse(JSON.stringify(row))
-    } else {
-        title.value = "娣诲姞鏀跨瓥娉曡"
+  fileList.value = []
+  if (row && row.id) {
+    title.value = "缂栬緫鏀跨瓥娉曡"
+    form.value = JSON.parse(JSON.stringify(row))
+    if (row.url) {
+      fileList.value = [
+        {
+          url: row.url,
+          name: row.url,
+        },
+      ]
     }
-    visible.value = true
+  } else {
+    title.value = "娣诲姞鏀跨瓥娉曡"
+    fileList.value = []
+  }
+  visible.value = true
 }
 
 function handleClose(value) {
-    visible.value = false
-    loading.value = false
-    proxy.$refs.queryRef.resetFields()
-    form.value = {
-        value1: '',
-        value2: '',
-
-    }
+  visible.value = false
+  loading.value = false
+  proxy.$refs.queryRef.resetFields()
+  form.value = {
+    value1: "",
+    value2: "",
+  }
 }
 
 defineExpose({ handleOpen })
-
 </script>
 
-
-
-<style lang="scss" scoped></style>
\ No newline at end of file
+<style lang="scss" scoped></style>
diff --git a/zhitan-vue/src/views/energyconservation/policyrule/policyRule.vue b/zhitan-vue/src/views/energyconservation/policyrule/policyRule.vue
index f6dbeb1..558747a 100644
--- a/zhitan-vue/src/views/energyconservation/policyrule/policyRule.vue
+++ b/zhitan-vue/src/views/energyconservation/policyrule/policyRule.vue
@@ -1,123 +1,128 @@
 <template>
-    <div class="page">
-        <div class="form-card">
-            <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px">
-                <el-form-item label="鏂囦欢绫诲埆">
-                    <el-select v-model="queryParams.value1" placeholder="璇烽�夋嫨">
-                        <el-option v-for="item in 6" :key="item" :label="item" :value="item">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="鏂囦欢鏍囬">
-                    <el-input v-model="queryParams.value2" placeholder="璇疯緭鍏ユ枃浠舵爣棰�" />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
-                    <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
-                </el-form-item>
-            </el-form>
-        </div>
-        <div class="table-box">
-            <div class="mt20 mb20">
-                <el-button type="primary" icon="plus" @click="handleAdd">鏂板</el-button>
-                <!-- <el-button type="primary" icon="Delete">鍒犻櫎</el-button> -->
-            </div>
-            <el-table :data="tableData" v-loading="loading">
-                <el-table-column prop="value1" label="鏂囦欢鏍囬" show-overflow-tooltip align="center" />
-                <el-table-column prop="value2" label="鏂囦欢绫诲埆" show-overflow-tooltip align="center" />
-                <el-table-column prop="value3" label="鍗板彂鏃堕棿" show-overflow-tooltip align="center" />
-                <el-table-column label="鎿嶄綔" width="300" align="center">
-                    <template #default="scope">
-                        <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)">
-                            淇敼
-                        </el-button>
-                        <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)">
-                            鍒犻櫎
-                        </el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                v-model:limit="queryParams.pageSize" @pagination="getList" />
-
-        </div>
-        <EditModal ref="editModalRef" @get-list="getList" />
+  <div class="page">
+    <div class="form-card">
+      <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px">
+        <el-form-item label="鏂囦欢鏍囬">
+          <el-input v-model="queryParams.title" placeholder="璇疯緭鍏ユ枃浠舵爣棰�" clearable />
+        </el-form-item>
+        <el-form-item label="鏂囦欢绫诲埆">
+          <el-select v-model="queryParams.type" placeholder="鏂囦欢绫诲埆" style="width: 100%" clearable>
+            <el-option v-for="dict in policy_sort" :key="dict.value" :label="dict.label" :value="dict.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
     </div>
+    <div class="table-box">
+      <div class="mt20 mb20">
+        <el-button type="primary" icon="plus" @click="handleAdd">鏂板</el-button>
+        <!-- <el-button type="primary" icon="Delete">鍒犻櫎</el-button> -->
+      </div>
+      <el-table :data="tableData" v-loading="loading">
+        <el-table-column prop="title" label="鏂囦欢鏍囬" show-overflow-tooltip align="center" />
+        <el-table-column prop="typeName" label="鏂囦欢绫诲埆" show-overflow-tooltip align="center" />
+        <el-table-column prop="dept" label="鍗板彂閮ㄩ棬" show-overflow-tooltip align="center" />
+        <el-table-column prop="issuingTime" label="鍗板彂鏃堕棿" show-overflow-tooltip align="center" />
+        <el-table-column label="鎿嶄綔" width="300" align="center">
+          <template #default="scope">
+            <el-button v-if="scope.row.url" link type="primary" icon="Files" @click="handleFile(scope.row.url)">
+              闄勪欢
+            </el-button>
+            <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> 淇敼 </el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> 鍒犻櫎 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+    <EditModal ref="editModalRef" @get-list="getList" />
+  </div>
 </template>
 
 <script setup>
-import EditModal from './components/EditModal'
+import EditModal from "./components/EditModal"
+import { policyPage, policyDel } from "@/api/policy/policy"
+const { proxy } = getCurrentInstance()
+const { policy_sort } = proxy.useDict("policy_sort")
 
-let { proxy } = getCurrentInstance()
-let loading = ref(false);
-let total = ref(2);
-let tableData = ref([
-    { id: 1, value1: '1111', value2: 'value2', value3: '2024骞�10鏈�17鏃�11:15:39' },
-    { id: 2, value1: '222', value2: '222', value3: '2024骞�10鏈�17鏃�11:16:39' }])
+let loading = ref(false)
+let total = ref(2)
+let tableData = ref([])
 let queryParams = ref({
-    value1: '',
-    value2: '',
-    pageNum: 1,
-    pageSize: 10,
+  value1: "",
+  value2: "",
+  pageNum: 1,
+  pageSize: 10,
 })
 
 function getList() {
-    // loading.value = true
-    // alarmList(queryParams.value).then(res => {
-    //     console.log(res.rows)
-    //     tableData.value = res.rows
-    //     total.value = res.total
-    //     loading.value = false
-    // })
+  loading.value = true
+  policyPage(queryParams.value).then((res) => {
+    console.log(res.rows)
+    tableData.value = res.rows
+    total.value = res.total
+    loading.value = false
+  })
 }
 
 getList()
 
-let editModalRef = ref('')
+let editModalRef = ref("")
 function handleAdd(row) {
-    if (editModalRef.value) {
-        editModalRef.value.handleOpen(row)
-    }
-
+  if (editModalRef.value) {
+    editModalRef.value.handleOpen(row)
+  }
 }
 
 function handleDel(row) {
-    // proxy.$modal.confirm('鏄惁纭鍒犻櫎鏁版嵁椤�?').then(function () {
-    //     return alarmDel(row.id);
-    // }).then(() => {
-    //     getList();
-    //     proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-    // }).catch(() => { });
+  proxy.$modal
+    .confirm("鏄惁纭鍒犻櫎鏁版嵁椤�?")
+    .then(function () {
+      return policyDel(row.id)
+    })
+    .then(() => {
+      getList()
+      proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛")
+    })
+    .catch(() => {})
+}
+
+function handleFile(url) {
+  window.open(url)
 }
 
 function handleQuery() {
-    queryParams.value.pageNum = 1
-    getList()
-
+  queryParams.value.pageNum = 1
+  getList()
 }
 
 function resetQuery() {
-    queryParams.value = {
-        value1: '',
-        value2: '',
-        pageNum: 1,
-        pageSize: 10,
-    }
-    getList()
+  queryParams.value = {
+    value1: "",
+    value2: "",
+    pageNum: 1,
+    pageSize: 10,
+  }
+  getList()
 }
-
-
 </script>
 
 <style lang="scss" scoped>
 @import "@/assets/styles/page.scss";
 
-
 .header-box {
-    :deep .el-form-item__content {
-        color: #fff;
-        font-size: 16px;
-    }
-
+  :deep .el-form-item__content {
+    color: #fff;
+    font-size: 16px;
+  }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/components/EditModal.vue b/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/components/EditModal.vue
index b0068a9..e97551a 100644
--- a/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/components/EditModal.vue
+++ b/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/components/EditModal.vue
@@ -1,124 +1,124 @@
 <template>
-    <el-dialog v-model="visible" :title="title" width="600" @close="handleClose">
-        <el-form :model="form" ref="queryRef" :rules="formRules" label-width="120px" v-loading="loading">
-            <el-form-item label="椤圭洰鍚嶇О" prop="value1">
-                <el-input v-model="form.value1" placeholder="璇疯緭鍏ラ」鐩悕绉�" />
-            </el-form-item>
-            <el-form-item label="鑺傝兘璁″垝" prop="value2">
-                <el-input v-model="form.value2" placeholder="璇疯緭鍏ヨ妭鑳借鍒�" />
-            </el-form-item>
-            <el-form-item label="鑺傝兘鐩爣" prop="value3">
-                <el-input v-model="form.value3" placeholder="璇疯緭鍏ヨ妭鑳界洰鏍�" />
-            </el-form-item>
-            <el-form-item label="寮�濮嬫椂闂�" prop="value4">
-                <el-date-picker v-model="form.value4" type="date" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" format="YYYY-MM-DD"
-                    date-format="YYYY/MM/DD" />
-            </el-form-item>
-            <el-form-item label="缁撴潫鏃堕棿" prop="value5">
-                <el-date-picker v-model="form.value5" type="date" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" format="YYYY-MM-DD"
-                    date-format="YYYY/MM/DD" />
-            </el-form-item>
-            <el-form-item label="璐熻矗浜�" prop="value6">
-                <el-input v-model="form.value6" placeholder="璇疯緭鍏ヨ礋璐d汉" />
-            </el-form-item>
-            <el-form-item label="鍒跺畾鏃舵" prop="value7">
-                <el-date-picker v-model="form.value7" type="date" placeholder="璇烽�夋嫨鍒跺畾鏃舵" format="YYYY-MM-DD"
-                    date-format="YYYY/MM/DD" />
-            </el-form-item>
-        </el-form>
-        <div slot="footer" class="text-right">
-            <el-button type="primary" @click="submitForm" :loading="loading">纭� 瀹�</el-button>
-            <el-button @click="handleClose">鍙� 娑�</el-button>
-        </div>
-    </el-dialog>
+  <el-dialog v-model="visible" :title="title" width="600" @close="handleClose">
+    <el-form :model="form" ref="queryRef" :rules="formRules" label-width="120px" v-loading="loading">
+      <el-form-item label="鎬讳綋璁″垝" prop="plan">
+        <el-input v-model="form.plan" placeholder="璇疯緭鍏ユ�讳綋璁″垝" />
+      </el-form-item>
+      <el-form-item label="瀹炴柦璁″垝" prop="implementationPlan">
+        <el-input v-model="form.implementationPlan" placeholder="璇疯緭鍏ュ疄鏂借鍒�" />
+      </el-form-item>
+      <el-form-item label="褰撳墠宸ヤ綔" prop="currentWork">
+        <el-input v-model="form.currentWork" placeholder="璇疯緭鍏ュ綋鍓嶅伐浣�" />
+      </el-form-item>
+      <el-form-item label="鑺傜害閲�" prop="savingAmount">
+        <el-input-number style="width: 100%" v-model="form.savingAmount" placeholder="璇疯緭鍏ヨ妭绾﹂噺" />
+      </el-form-item>
+      <!-- <el-form-item label="寮�濮嬫椂闂�" prop="value4">
+        <el-date-picker
+          v-model="form.value4"
+          type="date"
+          placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
+          format="YYYY-MM-DD"
+          date-format="YYYY/MM/DD"
+        />
+      </el-form-item>
+      <el-form-item label="缁撴潫鏃堕棿" prop="value5">
+        <el-date-picker
+          v-model="form.value5"
+          type="date"
+          placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
+          format="YYYY-MM-DD"
+          date-format="YYYY/MM/DD"
+        />
+      </el-form-item> -->
+      <el-form-item label="璐熻矗浜�" prop="liablePerson">
+        <el-input v-model="form.liablePerson" placeholder="璇疯緭鍏ヨ礋璐d汉" />
+      </el-form-item>
+      <el-form-item label="瀹屾垚鏃堕棿" prop="completionTime">
+        <el-date-picker
+          v-model="form.completionTime"
+          type="date"
+          placeholder="璇烽�夋嫨瀹屾垚鏃堕棿"
+          format="YYYY-MM-DD"
+          date-format="YYYY/MM/DD"
+        />
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="text-right">
+      <el-button type="primary" @click="submitForm" :loading="loading">纭� 瀹�</el-button>
+      <el-button @click="handleClose">鍙� 娑�</el-button>
+    </div>
+  </el-dialog>
 </template>
 
 <script setup>
-import { alarmAdd, alarmEdit } from '@/api/businessConfiguration/businessConfiguration'
-const { proxy } = getCurrentInstance();
-let props = defineProps(['alarmTypeList', 'operatorList'])
-
+import { projectEdit, projectAdd } from "@/api/policy/project"
+const { proxy } = getCurrentInstance()
+let props = defineProps(["alarmTypeList", "operatorList"])
 
 let visible = ref(false)
-let title = ref('')
+let title = ref("")
 let loading = ref(false)
 let form = ref({
-    value1: null,
-    value2: null,
-    value3: null,
-    value4: null,
-    value5: null,
-    value6: null,
-    value7: null,
-
+  plan: null,
+  implementationPlan: null,
+  remark: null,
+  liablePerson: null,
+  currentWork: null,
+  completionTime: null,
+  savingAmount: null,
 })
-let emit = defineEmits(['getList'])
+let emit = defineEmits(["getList"])
 const formRules = {
-    value1: [{ required: true, trigger: "blur", message: "璇疯緭鍏ラ」鐩悕绉�" }],
-    value2: [{ required: true, trigger: "blur", message: "璇疯緭鍏ヨ妭鑳借鍒�" }],
-    value3: [{ required: true, trigger: "blur", message: "璇疯緭鍏ヨ妭鑳界洰鏍�" }],
-    value4: [{ required: true, trigger: "blur", message: "璇烽�夋嫨寮�濮嬫椂闂�" }],
-    value5: [{ required: true, trigger: "blur", message: "璇烽�夋嫨缁撴潫鏃堕棿" }],
-    value6: [{ required: true, trigger: "blur", message: "璇疯緭鍏ヨ礋璐d汉" }],
-    value7: [{ required: true, trigger: "blur", message: "璇烽�夋嫨鍒跺畾鏃舵" }],
-
+  plan: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ繀濉」" }],
+  implementationPlan: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ繀濉」" }],
+  savingAmount: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ繀濉」" }],
+  liablePerson: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ繀濉」" }],
+  currentWork: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ繀濉」" }],
 }
 
 function submitForm() {
-    proxy.$refs.queryRef.validate(valid => {
-        if (valid) {
-            // loading.value = true;
-            // let obj = form.value.id ? alarmEdit(form.value) : alarmAdd(form.value)
-            // obj.then((res) => {
-            //     if (res.code == 200) {
-            //         proxy.$modal.msgSuccess(res.message);
-            //         emit('getList')
-            //     } else {
-            //         proxy.$modal.msgError(res.message);
-            //     }
-
-            // }).catch((err) => {
-
-            // }).finally(() => {
-            //     handleClose()
-            // });
-        }
-    })
+  proxy.$refs.queryRef.validate((valid) => {
+    if (valid) {
+      loading.value = true
+      let obj = form.value.id ? projectEdit(form.value) : projectAdd(form.value)
+      obj
+        .then((res) => {
+          if (res.code == 200) {
+            proxy.$modal.msgSuccess(res.msg)
+            emit("getList")
+            handleClose()
+          } else {
+            proxy.$modal.msgError(res.msg)
+          }
+        })
+        .catch((err) => {})
+        .finally(() => {})
+    }
+  })
 }
 
-
-
-
-
 function handleOpen(row) {
-    if (row && row.id) {
-        title.value = "缂栬緫鑺傝兘椤圭洰绠$悊"
-        form.value = JSON.parse(JSON.stringify(row))
-    } else {
-        title.value = "娣诲姞鑺傝兘椤圭洰绠$悊"
-    }
-    visible.value = true
+  if (row && row.id) {
+    title.value = "缂栬緫鑺傝兘椤圭洰绠$悊"
+    form.value = JSON.parse(JSON.stringify(row))
+  } else {
+    title.value = "娣诲姞鑺傝兘椤圭洰绠$悊"
+  }
+  visible.value = true
 }
 
 function handleClose(value) {
-    visible.value = false
-    loading.value = false
-    proxy.$refs.queryRef.resetFields()
-    form.value = {
-        value1: null,
-        value2: null,
-        value3: null,
-        value4: null,
-        value5: null,
-        value6: null,
-        value7: null,
-    }
+  visible.value = false
+  loading.value = false
+  proxy.$refs.queryRef.resetFields()
+  form.value = {}
 }
 
 defineExpose({ handleOpen })
-
 </script>
-
-
 
 <style lang="scss" scoped></style>
diff --git a/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/projectManage.vue b/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/projectManage.vue
index 164cb19..0e76221 100644
--- a/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/projectManage.vue
+++ b/zhitan-vue/src/views/energyconservation/projectmanage/projectmanage/projectManage.vue
@@ -1,135 +1,136 @@
 <template>
-    <div class="page">
-        <div class="form-card">
-            <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px">
-                <el-form-item label="椤圭洰鍚嶇О">
-                    <el-input v-model="queryParams.value1" placeholder="璇疯緭鍏ラ」鐩悕绉�" />
-                </el-form-item>
-                <el-form-item label="缁熻鏃堕棿">
-                    <el-date-picker v-model="queryParams.value2" type="daterange" start-placeholder="閫夋嫨寮�濮嬫椂闂�"
-                        end-placeholder="閫夋嫨缁撴潫鏃堕棿" format="YYYY-MM-DD" date-format="YYYY/MM/DD" />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
-                    <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
-                </el-form-item>
-            </el-form>
-        </div>
-        <div class="table-box">
-            <div class="mt20 mb20">
-                <el-button type="primary" icon="plus" @click="handleAdd">鏂板</el-button>
-                <el-button type="primary" icon="Download" @click="handleAdd"> 瀵煎嚭 </el-button>
-            </div>
-            <el-table :data="tableData" v-loading="loading">
-                <el-table-column prop="value1" label="椤圭洰鍚嶇О" show-overflow-tooltip align="center" />
-                <el-table-column prop="value2" label="鑺傝兘璁″垝" show-overflow-tooltip align="center" />
-                <el-table-column prop="value3" label="鑺傝兘鐩爣" show-overflow-tooltip align="center" />
-                <el-table-column prop="value4" label="寮�濮嬫椂闂�" show-overflow-tooltip align="center" />
-                <el-table-column prop="value5" label="缁撴潫鏃堕棿" show-overflow-tooltip align="center" />
-                <el-table-column prop="value6" label="璐熻矗浜�" show-overflow-tooltip align="center" />
-                <el-table-column prop="value7" label="鍒跺畾鏃舵" show-overflow-tooltip align="center" />
-                <el-table-column prop="value8" label="鍒涘缓浜�" show-overflow-tooltip align="center" />
-
-                <el-table-column label="鎿嶄綔" width="300" align="center">
-                    <template #default="scope">
-                        <el-button link type="primary" icon="Files" @click=" ">
-                            闄勪欢
-                        </el-button>
-                        <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)">
-                            淇敼
-                        </el-button>
-                        <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)">
-                            鍒犻櫎
-                        </el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                v-model:limit="queryParams.pageSize" @pagination="getList" />
-
-        </div>
-        <edit-modal ref="EditModalRef" @getList="getList" />
+  <div class="page">
+    <div class="form-card">
+      <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px">
+        <el-form-item label="鎬讳綋璁″垝">
+          <el-input v-model="queryParams.plan" placeholder="璇疯緭鍏ユ�讳綋璁″垝" />
+        </el-form-item>
+        <el-form-item label="璐熻矗浜�">
+          <el-input v-model="queryParams.liablePerson" placeholder="璇疯緭鍏ヨ礋璐d汉" />
+        </el-form-item>
+        <!-- <el-form-item label="缁熻鏃堕棿">
+          <el-date-picker
+            v-model="queryParams.value2"
+            type="daterange"
+            start-placeholder="閫夋嫨寮�濮嬫椂闂�"
+            end-placeholder="閫夋嫨缁撴潫鏃堕棿"
+            format="YYYY-MM-DD"
+            date-format="YYYY/MM/DD"
+          />
+        </el-form-item> -->
+        <el-form-item>
+          <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
     </div>
+    <div class="table-box">
+      <div class="mt20 mb20">
+        <el-button type="primary" icon="plus" @click="handleAdd">鏂板</el-button>
+        <!-- <el-button type="primary" icon="Download" @click="handleAdd"> 瀵煎嚭 </el-button> -->
+      </div>
+      <el-table :data="tableData" v-loading="loading">
+        <el-table-column prop="plan" label="鎬讳綋璁″垝" show-overflow-tooltip align="center" />
+        <el-table-column prop="implementationPlan" label="瀹炴柦璁″垝" show-overflow-tooltip align="center" />
+        <el-table-column prop="savingAmount" label="鑺傜害閲�" show-overflow-tooltip align="center" />
+        <!-- <el-table-column prop="value4" label="寮�濮嬫椂闂�" show-overflow-tooltip align="center" />
+        <el-table-column prop="value5" label="缁撴潫鏃堕棿" show-overflow-tooltip align="center" /> -->
+        <el-table-column prop="currentWork" label="褰撳墠宸ヤ綔" show-overflow-tooltip align="center" />
+        <el-table-column prop="liablePerson" label="璐熻矗浜�" show-overflow-tooltip align="center" />
+        <el-table-column prop="completionTime" label="瀹屾垚鏃堕棿" show-overflow-tooltip align="center" />
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" show-overflow-tooltip align="center" />
+        <el-table-column prop="remark" label="澶囨敞" show-overflow-tooltip align="center" />
+
+        <el-table-column label="鎿嶄綔" width="300" align="center">
+          <template #default="scope">
+            <!-- <el-button link type="primary" icon="Files" @click=""> 闄勪欢 </el-button> -->
+            <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> 淇敼 </el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> 鍒犻櫎 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+    <edit-modal ref="EditModalRef" @getList="getList" />
+  </div>
 </template>
 
 <script setup>
-import EditModal from './components/EditModal.vue'
-
+import EditModal from "./components/EditModal.vue"
+import { projectPage, projectDel } from "@/api/policy/project"
 
 let { proxy } = getCurrentInstance()
-let loading = ref(false);
-let total = ref(0);
-let tableData = ref([
-    {id:1, value1: '1', value2: '2', value3: '3', value4: '4', value5: '5', value6: '6', value7: '7', value8: '8' },
-    { id:2, value1: '1', value2: '2', value3: '3', value4: '4', value5: '5', value6: '6', value7: '7', value8: '8' },
-    { id:3, value1: '1', value2: '2', value3: '3', value4: '4', value5: '5', value6: '6', value7: '7', value8: '8' },
-    { id:4, value1: '1', value2: '2', value3: '3', value4: '4', value5: '5', value6: '6', value7: '7', value8: '8' },
-])
+let loading = ref(false)
+let total = ref(0)
+let tableData = ref([])
 let queryParams = ref({
-    value1: '',
-    value2: [],
-    pageNum: 1,
-    pageSize: 10,
+  value1: "",
+  value2: [],
+  pageNum: 1,
+  pageSize: 10,
 })
 
 function getList() {
-    // loading.value = true
-    // alarmList(queryParams.value).then(res => {
-    //     console.log(res.rows)
-    //     tableData.value = res.rows
-    //     total.value = res.total
-    //     loading.value = false
-    // })
+  loading.value = true
+  projectPage(queryParams.value).then((res) => {
+    console.log(res.rows)
+    tableData.value = res.rows
+    total.value = res.total
+    loading.value = false
+  })
 }
 
 getList()
 
-
-let EditModalRef = ref('')
+let EditModalRef = ref("")
 function handleAdd(row) {
-    if (EditModalRef.value) {
-        EditModalRef.value.handleOpen(row)
-    }
-
+  if (EditModalRef.value) {
+    EditModalRef.value.handleOpen(row)
+  }
 }
 
 function handleDel(row) {
-    // proxy.$modal.confirm('鏄惁纭鍒犻櫎鏁版嵁椤�?').then(function () {
-    //     return alarmDel(row.id);
-    // }).then(() => {
-    //     getList();
-    //     proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-    // }).catch(() => { });
+  proxy.$modal
+    .confirm("鏄惁纭鍒犻櫎鏁版嵁椤�?")
+    .then(function () {
+      return projectDel(row.id)
+    })
+    .then(() => {
+      getList()
+      proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛")
+    })
+    .catch(() => {})
 }
 
 function handleQuery() {
-    queryParams.value.pageNum = 1
-    getList()
-
+  queryParams.value.pageNum = 1
+  getList()
 }
 
 function resetQuery() {
-    queryParams.value = {
-        value1: '',
-        value2: [],
-        pageNum: 1,
-        pageSize: 10,
-    }
-    getList()
+  queryParams.value = {
+    value1: "",
+    value2: [],
+    pageNum: 1,
+    pageSize: 10,
+  }
+  getList()
 }
-
-
 </script>
 
 <style lang="scss" scoped>
 @import "@/assets/styles/page.scss";
 
-
 .header-box {
-    :deep .el-form-item__content {
-        color: #fff;
-        font-size: 16px;
-    }
-
+  :deep .el-form-item__content {
+    color: #fff;
+    font-size: 16px;
+  }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/zhitan-vue/src/views/monitor/cache/index.vue b/zhitan-vue/src/views/monitor/cache/index.vue
index aa46bf2..02a99b7 100644
--- a/zhitan-vue/src/views/monitor/cache/index.vue
+++ b/zhitan-vue/src/views/monitor/cache/index.vue
@@ -3,39 +3,72 @@
     <el-row>
       <el-col :span="24" class="card-box">
         <el-card>
-          <template #header><Monitor style="width: 1em; height: 1em; vertical-align: middle;" /> <span style="vertical-align: middle;">鍩烘湰淇℃伅</span></template>
+          <template #header
+            ><Monitor style="width: 1em; height: 1em; vertical-align: middle" />
+            <span style="vertical-align: middle">鍩烘湰淇℃伅</span></template
+          >
           <div class="el-table el-table--enable-row-hover el-table--medium">
             <table cellspacing="0" style="width: 100%">
               <tbody>
                 <tr>
                   <td class="el-table__cell is-leaf"><div class="cell">Redis鐗堟湰</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_version }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.redis_version }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">杩愯妯″紡</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_mode == "standalone" ? "鍗曟満" : "闆嗙兢" }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">
+                      {{ cache.info.redis_mode == "standalone" ? "鍗曟満" : "闆嗙兢" }}
+                    </div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">绔彛</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.tcp_port }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.tcp_port }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">瀹㈡埛绔暟</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.connected_clients }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.connected_clients }}</div>
+                  </td>
                 </tr>
                 <tr>
                   <td class="el-table__cell is-leaf"><div class="cell">杩愯鏃堕棿(澶�)</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.uptime_in_days }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.uptime_in_days }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">浣跨敤鍐呭瓨</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.used_memory_human }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.used_memory_human }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">浣跨敤CPU</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">
+                      {{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}
+                    </div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">鍐呭瓨閰嶇疆</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.maxmemory_human }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.maxmemory_human }}</div>
+                  </td>
                 </tr>
                 <tr>
                   <td class="el-table__cell is-leaf"><div class="cell">AOF鏄惁寮�鍚�</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.aof_enabled == "0" ? "鍚�" : "鏄�" }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.aof_enabled == "0" ? "鍚�" : "鏄�" }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">RDB鏄惁鎴愬姛</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.rdb_last_bgsave_status }}</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">{{ cache.info.rdb_last_bgsave_status }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">Key鏁伴噺</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.dbSize">{{ cache.dbSize }} </div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.dbSize">{{ cache.dbSize }}</div>
+                  </td>
                   <td class="el-table__cell is-leaf"><div class="cell">缃戠粶鍏ュ彛/鍑哄彛</div></td>
-                  <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps</div></td>
+                  <td class="el-table__cell is-leaf">
+                    <div class="cell" v-if="cache.info">
+                      {{ cache.info.instantaneous_input_kbps }}kps/{{ cache.info.instantaneous_output_kbps }}kps
+                    </div>
+                  </td>
                 </tr>
               </tbody>
             </table>
@@ -45,7 +78,10 @@
 
       <el-col :span="12" class="card-box">
         <el-card>
-          <template #header><PieChart style="width: 1em; height: 1em; vertical-align: middle;" /> <span style="vertical-align: middle;">鍛戒护缁熻</span></template>
+          <template #header
+            ><PieChart style="width: 1em; height: 1em; vertical-align: middle" />
+            <span style="vertical-align: middle">鍛戒护缁熻</span></template
+          >
           <div class="el-table el-table--enable-row-hover el-table--medium">
             <div ref="commandstats" style="height: 420px" />
           </div>
@@ -54,7 +90,10 @@
 
       <el-col :span="12" class="card-box">
         <el-card>
-          <template #header><Odometer style="width: 1em; height: 1em; vertical-align: middle;" /> <span style="vertical-align: middle;">鍐呭瓨淇℃伅</span></template>
+          <template #header
+            ><Odometer style="width: 1em; height: 1em; vertical-align: middle" />
+            <span style="vertical-align: middle">鍐呭瓨淇℃伅</span></template
+          >
           <div class="el-table el-table--enable-row-hover el-table--medium">
             <div ref="usedmemory" style="height: 420px" />
           </div>
@@ -65,25 +104,25 @@
 </template>
 
 <script setup name="Cache">
-import { getCache } from '@/api/monitor/cache';
-import * as echarts from 'echarts';
+import { getCache } from "@/api/monitor/cache"
+import * as echarts from "echarts"
 
-const cache = ref([]);
-const commandstats = ref(null);
-const usedmemory = ref(null);
-const { proxy } = getCurrentInstance();
+const cache = ref([])
+const commandstats = ref(null)
+const usedmemory = ref(null)
+const { proxy } = getCurrentInstance()
 
 function getList() {
-  proxy.$modal.loading("姝e湪鍔犺浇缂撳瓨鐩戞帶鏁版嵁锛岃绋嶅�欙紒");
-  getCache().then(response => {
-    proxy.$modal.closeLoading();
-    cache.value = response.data;
+  proxy.$modal.loading("姝e湪鍔犺浇缂撳瓨鐩戞帶鏁版嵁锛岃绋嶅�欙紒")
+  getCache().then((response) => {
+    proxy.$modal.closeLoading()
+    cache.value = response.data
 
-    const commandstatsIntance = echarts.init(commandstats.value, "macarons");
+    const commandstatsIntance = echarts.init(commandstats.value, "macarons")
     commandstatsIntance.setOption({
       tooltip: {
         trigger: "item",
-        formatter: "{a} <br/>{b} : {c} ({d}%)"
+        formatter: "{a} <br/>{b} : {c} ({d}%)",
       },
       series: [
         {
@@ -94,14 +133,14 @@
           center: ["50%", "38%"],
           data: response.data.commandStats,
           animationEasing: "cubicInOut",
-          animationDuration: 1000
-        }
-      ]
-    });
-    const usedmemoryInstance = echarts.init(usedmemory.value, "macarons");
+          animationDuration: 1000,
+        },
+      ],
+    })
+    const usedmemoryInstance = echarts.init(usedmemory.value, "macarons")
     usedmemoryInstance.setOption({
       tooltip: {
-        formatter: "{b} <br/>{a} : " + cache.value.info.used_memory_human
+        formatter: "{b} <br/>{a} : " + cache.value.info.used_memory_human,
       },
       series: [
         {
@@ -110,23 +149,33 @@
           min: 0,
           max: 1000,
           detail: {
-            formatter: cache.value.info.used_memory_human
+            formatter: cache.value.info.used_memory_human,
           },
           data: [
             {
               value: parseFloat(cache.value.info.used_memory_human),
-              name: "鍐呭瓨娑堣��"
-            }
-          ]
-        }
-      ]
+              name: "鍐呭瓨娑堣��",
+            },
+          ],
+        },
+      ],
     })
-    window.addEventListener("resize", () => {
-      commandstatsIntance.resize();
-      usedmemoryInstance.resize();
-    },{passive: true});
+    window.addEventListener(
+      "resize",
+      () => {
+        commandstatsIntance.resize()
+        usedmemoryInstance.resize()
+      },
+      { passive: true }
+    )
   })
 }
 
-getList();
+getList()
 </script>
+
+<style lang="scss" scoped>
+.el-table {
+  color: #333;
+}
+</style>

--
Gitblit v1.9.3