From aa995b8564c6864d5c9f43273c0b303af8f9bd4d Mon Sep 17 00:00:00 2001
From: whychdw <496960745@qq.com>
Date: 星期六, 21 六月 2025 09:16:53 +0800
Subject: [PATCH] 标准参数内容丰富

---
 src/utils/getBaseUrl.js                    |   12 ++
 src/api/standardParams.js                  |   34 ++++++
 src/views/dcPowerStatus/dialog/addEdit.vue |   23 ++--
 src/views/dcPowerStatus/standardParams.vue |  181 ++++++++++++++++++++++++++++++++---
 src/utils/downloadFile.js                  |   12 ++
 5 files changed, 232 insertions(+), 30 deletions(-)

diff --git a/src/api/standardParams.js b/src/api/standardParams.js
index a47ff2d..3f5a25b 100644
--- a/src/api/standardParams.js
+++ b/src/api/standardParams.js
@@ -1,4 +1,5 @@
 import request from '@/utils/request';
+import axios from "axios";
 
 /**
  * 鏍规嵁鏍囧噯鍙傛暟绫诲瀷鏌ヨ鏍囧噯鍙傛暟
@@ -27,3 +28,36 @@
     data
   });
 }
+
+/**
+ * 鏍规嵁鏂囦欢鍚嶇О锛堟ā绯婏級鍜屾暟鎹被鍨嬫煡璇㈡爣鍑嗘枃浠�
+ * @param fileName 鏂囦欢鍚嶇О
+ * @param powerType 绫诲瀷
+ * @returns {*}
+ */
+export function getStandFileApi(fileName, powerType) {
+  return request({
+    url: '/stand/getStandFile',
+    method: 'GET',
+    params: {
+      fileName,
+      powerType
+    }
+  });
+}
+
+/**
+ * 涓婁紶鏍囧噯鍙傛暟鏂囦欢
+ * @param data
+ * @returns {Promise<axios.AxiosResponse<any>>}
+ */
+export function uploadStandFileApi(data) {
+  return request({
+    method: "POST",
+    url: "/stand/uploadStandFile",
+    headers: {
+      "Content-Type": "multipart/form-data"
+    },
+    data
+  });
+}
diff --git a/src/utils/downloadFile.js b/src/utils/downloadFile.js
new file mode 100644
index 0000000..ddd8a85
--- /dev/null
+++ b/src/utils/downloadFile.js
@@ -0,0 +1,12 @@
+import getBaseUrl from "./getBaseUrl.js";
+function downloadFile(url, fileName) {
+  const baseUrl = getBaseUrl();
+  const link = document.createElement('a');
+  link.href = baseUrl+url;
+  link.download = fileName;
+  document.body.appendChild(link); // 娣诲姞鍒� DOM
+  link.click();
+  window.URL.revokeObjectURL(url);
+}
+
+export default downloadFile;
diff --git a/src/utils/getBaseUrl.js b/src/utils/getBaseUrl.js
new file mode 100644
index 0000000..ee911de
--- /dev/null
+++ b/src/utils/getBaseUrl.js
@@ -0,0 +1,12 @@
+function getBaseUrl() {
+  let url = "";
+  if (process.env.NODE_ENV == 'development') {
+    // 璺ㄥ煙璇锋眰
+    url = 'http://localhost:8108/pis/';
+  } else {
+    url = location.protocol + '//' + location.host + '/pis/';
+  }
+  return url;
+}
+
+export default getBaseUrl;
diff --git a/src/views/dcPowerStatus/dialog/addEdit.vue b/src/views/dcPowerStatus/dialog/addEdit.vue
index d9c0cdf..6147e34 100644
--- a/src/views/dcPowerStatus/dialog/addEdit.vue
+++ b/src/views/dcPowerStatus/dialog/addEdit.vue
@@ -3,7 +3,7 @@
 import {ElLoading, ElMessageBox, ElMessage} from "element-plus";
 import {setPwrStandParamApi} from "@/api/standardParams.js";
 import useElement from "@/hooks/useElement.js";
-const { $loading, $message, $confirm } = useElement();
+const { $loading, $message } = useElement();
 const formRef = ref();
 const props = defineProps({
   info: {
@@ -16,7 +16,7 @@
         paramType: 1,
         basisVal: 0,
         alarmLimith: 0,
-        alarmLimithUpeper: 0,
+        alarmLimithUpper: 0,
         alarmLimitl: 0,
         alarmLimitlLower: 0,
         fileName: "",
@@ -33,7 +33,7 @@
   paramType: 1,
   basisVal: 0,
   alarmLimith: 0,
-  alarmLimithUpeper: 0,
+  alarmLimithUpper: 0,
   alarmLimitl: 0,
   alarmLimitlLower: 0,
   fileName: "",
@@ -47,7 +47,7 @@
       trigger: ["blur", "change"],
     },
   ],
-  alarmLimithUpeper: [
+  alarmLimithUpper: [
     {
       required: true,
       message: "涓嶈兘涓虹┖",
@@ -122,11 +122,8 @@
 }
 async function setParams() {
   const info = JSON.parse(JSON.stringify(params));
-  console.log(info);
-  const loading = ElLoading.service({
-    lock: true,
-    text: '鏁版嵁鍔犺浇涓�...',
-    background: 'rgba(0, 0, 0, 0.7)',
+  const loading = $loading({
+    text: "鏁版嵁鍔犺浇涓�..."
   });
 
   try {
@@ -158,7 +155,7 @@
 }
 
 function validatorH(rule, value, callback) {
-  if(value<params.alarmLimithUpeper) {
+  if(value<params.alarmLimithUpper) {
     callback();
   }else {
     callback(new Error('涓婇檺鍊奸渶灏忎簬涓婁笂闄愬��'));
@@ -191,7 +188,7 @@
         <el-row :gutter="layout.gutter">
           <el-col :span="layout.span">
             <el-form-item label="鍙傛暟鍚嶇О:">
-              <el-input v-model="params.paramType"></el-input>
+              <el-input v-model="params.standName" :disabled="true"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="layout.span">
@@ -200,8 +197,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="layout.span">
-            <el-form-item label="涓婁笂闄�:" prop="alarmLimithUpeper">
-              <el-input v-model="params.alarmLimithUpeper"></el-input>
+            <el-form-item label="涓婁笂闄�:" prop="alarmLimithUpper">
+              <el-input v-model="params.alarmLimithUpper"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="layout.span">
diff --git a/src/views/dcPowerStatus/standardParams.vue b/src/views/dcPowerStatus/standardParams.vue
index 57325ba..aa6dfca 100644
--- a/src/views/dcPowerStatus/standardParams.vue
+++ b/src/views/dcPowerStatus/standardParams.vue
@@ -1,13 +1,16 @@
 <script setup name="StandardParams">
 import {ref, onMounted, computed} from "vue";
-import {ElLoading} from "element-plus";
 import ycCard from "@/components/ycCard/index.vue";
 import TabButton from "@/components/TabButton/index.vue";
 import HdwButton from "@/components/HdwButton/index.vue";
 import NoData from "@/components/noData.vue";
-import {getPwrStandParamApi} from "@/api/standardParams.js";
+import {getPwrStandParamApi, getStandFileApi, uploadStandFileApi} from "@/api/standardParams.js";
 import addEdit from "./dialog/addEdit.vue";
+import useElement from "@/hooks/useElement.js";
+import downloadFile from "@/utils/downloadFile.js";
+import {ExportFile} from "@/utils/exportFile.js";
 
+const {$loading, $message} = useElement();
 const headers = [
   {
     prop: "standName",
@@ -30,7 +33,7 @@
     width: "80",
   },
   {
-    prop: "alarmLimithUpeper",
+    prop: "alarmLimithUpper",
     label: "涓婁笂闄�",
     width: "80",
   },
@@ -57,15 +60,9 @@
   searchData();
 }
 
-const searchText = ref("");
-const downloadText =ref("");
-const fileList = ref([]);
-
 async function searchData() {
-  const loading = ElLoading.service({
-    lock: true,
-    text: '鏁版嵁鍔犺浇涓�...',
-    background: 'rgba(0, 0, 0, 0.7)',
+  const loading = $loading({
+    text: "鏁版嵁鍔犺浇涓�..."
   });
 
   try {
@@ -91,6 +88,97 @@
   selectInfo.value = info;
   addEditVisible.value = true;
 }
+
+const searchText = ref("");
+const downloadText =ref("");
+const fileList = ref([]);
+const selectFile = ref({
+  fileName: "",
+  standFilePath: "",
+});
+
+async function searchFileList() {
+  if(!searchText.value) {
+    $message.warning("璇疯緭鍏ユ枃浠跺悕绉�");
+    return;
+  }
+
+  const loading = $loading({
+    text: "鏁版嵁鍔犺浇涓�..."
+  });
+  try {
+    const rs = await getStandFileApi(searchText.value, acButton.value);
+    loading.close();
+    if(rs.code === 1 && rs.data) {
+      fileList.value = rs.data2;
+    }else {
+      fileList.value = [];
+    }
+  }catch (e) {
+    console.log(e);
+    loading.close();
+  }
+}
+
+function handleSelectFile(info) {
+  console.log(info);
+  selectFile.value = info;
+}
+
+function handleDownloadFile() {
+  if(selectFile.value.standFilePath) {
+    downloadFile(selectFile.value.standFilePath, "");
+  }else {
+    $message.warning("璇烽�夋嫨涓嬭浇鐨勬枃浠�");
+  }
+
+}
+
+function handleUploadFile(options) {
+  console.log(selectInfo.value);
+  const formData = new FormData();
+  formData.append('multipartFile', options.file); // 娣诲姞鏂囦欢鍒癋ormData涓�
+  formData.append('num', selectInfo.value.num); // 娣诲姞棰濆鍙傛暟
+  const loading = $loading();
+  uploadStandFileApi(formData).then(res=>{
+    loading.close();
+    if(res.code === 1 && res.data) {
+      $message.success("涓婁紶鎴愬姛锛侊紒锛�");
+    }else {
+      $message.warning("涓婁紶澶辫触锛侊紒锛�");
+    }
+    searchData();
+  }).catch(error=>{
+    loading.close();
+    console.log(error);
+    $message.warning("涓婁紶澶辫触锛岃鑱旂郴绠$悊鍛橈紒锛侊紒");
+  });
+}
+
+
+function changeSelectRow(info) {
+  selectInfo.value = info;
+}
+
+/**
+ * 瀵煎嚭琛ㄦ牸鏁版嵁
+ */
+function exportExcel() {
+  if(!listRef.value.length) {
+    $message.warning("鏃犳暟鎹紝涓嶇敤瀵煎嚭");
+    return;
+  }
+  let _headers = headers.map(v => {
+    let prop = v.prop;
+    let label = v.label;
+    return {
+      prop,
+      label
+    };
+  });
+  ExportFile(_headers, listRef.value, "鏍囧噯鍙傛暟绠$悊");
+}
+
 onMounted(()=>{
   changeAcButton(acButton.value);
 });
@@ -107,7 +195,7 @@
               <tab-button style="margin-left: 24px;" :active="acButton === 2" @click="changeAcButton(2)">閫氫俊鐢垫簮</tab-button>
             </div>
             <div class="tools-right">
-              <hdw-button>瀵煎嚭</hdw-button>
+              <hdw-button @click="exportExcel">瀵煎嚭</hdw-button>
             </div>
           </div>
           <div class="page-content-table-wrapper">
@@ -121,7 +209,18 @@
                     <el-table-column label="鎿嶄綔" fixed="right" width="180" align="center">
                       <template #default="scope">
                         <el-button type="primary" size="small" @click="setParams(scope.row)">鍙傛暟璁惧畾</el-button>
-                        <el-button type="success" size="small">涓婁紶</el-button>
+                        <div class="upload-file">
+                          <el-upload
+                            ref="uploadRef"
+                            class="upload-demo"
+                            action=""
+                            :show-file-list="false"
+                            :http-request="handleUploadFile">
+                            <template #trigger>
+                              <el-button type="success" size="small" @click="changeSelectRow(scope.row)">涓婁紶</el-button>
+                            </template>
+                          </el-upload>
+                        </div>
                       </template>
                     </el-table-column>
                   </el-table>
@@ -132,17 +231,40 @@
               <div class="file-tools">
                 <div class="file-tools-item">
                   <input class="file-tools-input" type="text" v-model="searchText" />
-                  <hdw-button icon-class="search-data">鏌� 璇�</hdw-button>
+                  <hdw-button icon-class="search-data" @click="searchFileList">鏌� 璇�</hdw-button>
                 </div>
                 <div class="file-tools-item bottom">
-                  <input disabled class="file-tools-input" type="text" v-model="downloadText" />
-                  <hdw-button type="warning" icon-class="download">涓� 杞�</hdw-button>
+                  <input v-if="!selectFile.fileName" disabled class="file-tools-input" type="text" v-model="selectFile.fileName" />
+                  <el-tooltip
+                    v-else
+                    class="box-item"
+                    effect="dark"
+                    :content="selectFile.fileName"
+                    placement="top">
+                    <input disabled class="file-tools-input" type="text" v-model="selectFile.fileName" />
+                  </el-tooltip>
+                  <hdw-button type="warning" icon-class="download" @click="handleDownloadFile">涓� 杞�</hdw-button>
                 </div>
               </div>
               <div class="file-list-content">
                 <div class="pos-rel">
                   <div class="pos-abs">
-                    <el-scrollbar v-if="fileList.length !== 0"></el-scrollbar>
+                    <el-scrollbar v-if="fileList.length !== 0">
+                      <div class="file-list">
+                        <div
+                          class="file-item-wrapper"
+                          v-for="(item, key) in fileList" :key="'key'+key"
+                          @click="handleSelectFile(item)">
+                          <el-tooltip
+                            class="box-item"
+                            effect="dark"
+                            :content="item.fileName"
+                            placement="left-start">
+                            <div class="file-item">{{ item.fileName }}</div>
+                          </el-tooltip>
+                        </div>
+                      </div>
+                    </el-scrollbar>
                     <no-data v-else text="鏆傛棤瑙勮寖鏂囦欢"></no-data>
                   </div>
                 </div>
@@ -165,6 +287,9 @@
       <add-edit
         v-model:close="addEditVisible"
         :info="selectInfo" @success="changeAcButton(acButton)"></add-edit>
+    </el-dialog>
+    <el-dialog title="鏂囦欢涓婁紶">
+
     </el-dialog>
   </div>
 </template>
@@ -267,4 +392,26 @@
     }
   }
 }
+
+.file-list {
+  padding: 8px 0;
+  user-select: none;
+  .file-item-wrapper {
+    padding: 8px;
+    background-color: #1B4C79;
+    cursor: pointer;
+    margin-top: 4px;
+    &:hover {
+      font-weight: 700;
+    }
+    .file-item {
+      font-size: 14px;
+      white-space: nowrap;
+    }
+  }
+}
+.upload-file {
+  display: inline-block;
+  margin-left: 8px;
+}
 </style>

--
Gitblit v1.9.1