From aed8c89dedf94b98c4b6e988388fbe147f99dab5 Mon Sep 17 00:00:00 2001
From: David Wei
Date: 星期日, 08 十月 2023 16:05:58 +0800
Subject: [PATCH] update 优化 通过参数键名获取键值接口的返回体

---
 src/views/system/oss/index.vue |  416 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 194 insertions(+), 222 deletions(-)

diff --git a/src/views/system/oss/index.vue b/src/views/system/oss/index.vue
index f3c1a08..ec11708 100644
--- a/src/views/system/oss/index.vue
+++ b/src/views/system/oss/index.vue
@@ -1,157 +1,125 @@
 <template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
-      <el-form-item label="鏂囦欢鍚�" prop="fileName">
-        <el-input
-          v-model="queryParams.fileName"
-          placeholder="璇疯緭鍏ユ枃浠跺悕"
-          clearable
-          style="width: 200px"
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍘熷悕" prop="originalName">
-        <el-input
-          v-model="queryParams.originalName"
-          placeholder="璇疯緭鍏ュ師鍚�"
-          clearable
-          style="width: 200px"
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix">
-        <el-input
-          v-model="queryParams.fileSuffix"
-          placeholder="璇疯緭鍏ユ枃浠跺悗缂�"
-          clearable
-          style="width: 200px"
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿">
-        <el-date-picker
-          v-model="daterangeCreateTime"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-          :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏈嶅姟鍟�" prop="service">
-        <el-input
-          v-model="queryParams.service"
-          placeholder="璇疯緭鍏ユ湇鍔″晢"
-          clearable
-          style="width: 200px"
-          @keyup.enter="handleQuery"
-        />
-      </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 class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div class="mb-[10px]" v-show="showSearch">
+        <el-card shadow="hover">
+          <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
+            <el-form-item label="鏂囦欢鍚�" prop="fileName">
+              <el-input v-model="queryParams.fileName" placeholder="璇疯緭鍏ユ枃浠跺悕" clearable style="width: 200px" @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鍘熷悕" prop="originalName">
+              <el-input v-model="queryParams.originalName" placeholder="璇疯緭鍏ュ師鍚�" clearable style="width: 200px" @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix">
+              <el-input v-model="queryParams.fileSuffix" placeholder="璇疯緭鍏ユ枃浠跺悗缂�" clearable style="width: 200px" @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鍒涘缓鏃堕棿">
+              <el-date-picker
+                v-model="dateRangeCreateTime"
+                value-format="YYYY-MM-DD HH:mm:ss"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="寮�濮嬫棩鏈�"
+                end-placeholder="缁撴潫鏃ユ湡"
+                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
+              ></el-date-picker>
+            </el-form-item>
+            <el-form-item label="鏈嶅姟鍟�" prop="service">
+              <el-input v-model="queryParams.service" placeholder="璇疯緭鍏ユ湇鍔″晢" clearable style="width: 200px" @keyup.enter="handleQuery" />
+            </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>
+        </el-card>
+      </div>
+    </transition>
 
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleFile"
-          v-hasPermi="['system:oss:upload']"
-        >涓婁紶鏂囦欢</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleImage"
-          v-hasPermi="['system:oss:upload']"
-        >涓婁紶鍥剧墖</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['system:oss:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          :type="previewListResource ? 'danger' : 'warning'"
-          plain
-          @click="handlePreviewListResource(!previewListResource)"
-          v-hasPermi="['system:oss:edit']"
-        >棰勮寮�鍏� : {{previewListResource ? "绂佺敤" : "鍚敤"}}</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="info"
-          plain
-          icon="Operation"
-          @click="handleOssConfig"
-          v-hasPermi="['system:oss:list']"
-        >閰嶇疆绠$悊</el-button>
-      </el-col>
-      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
+    <el-card shadow="hover">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Upload" @click="handleFile" v-hasPermi="['system:oss:upload']">涓婁紶鏂囦欢</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Upload" @click="handleImage" v-hasPermi="['system:oss:upload']">涓婁紶鍥剧墖</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:oss:remove']">
+              鍒犻櫎
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              :type="previewListResource ? 'danger' : 'warning'"
+              plain
+              @click="handlePreviewListResource(!previewListResource)"
+              v-hasPermi="['system:oss:edit']"
+              >棰勮寮�鍏� :
+              {{
+                previewListResource ? "绂佺敤" : "鍚敤" }}</el-button
+            >
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="info" plain icon="Operation" @click="handleOssConfig" v-hasPermi="['system:oss:list']">閰嶇疆绠$悊</el-button>
+          </el-col>
+          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+      </template>
 
-    <el-table v-loading="loading" :data="ossList" @selection-change="handleSelectionChange"
-              :header-cell-class-name="handleHeaderClass"
-              @header-click="handleHeaderCLick"
-              v-if="showTable">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="瀵硅薄瀛樺偍涓婚敭" align="center" prop="ossId" v-if="false"/>
-      <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" />
-      <el-table-column label="鍘熷悕" align="center" prop="originalName" />
-      <el-table-column label="鏂囦欢鍚庣紑" align="center" prop="fileSuffix" />
-      <el-table-column label="鏂囦欢灞曠ず" align="center" prop="url">
-        <template #default="scope">
-          <ImagePreview
-            v-if="previewListResource && checkFileSuffix(scope.row.fileSuffix)"
-            :width="100" :height="100"
-            :src="scope.row.url"
-            :preview-src-list="[scope.row.url]"/>
-          <span v-text="scope.row.url"
-                v-if="!checkFileSuffix(scope.row.fileSuffix) || !previewListResource"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180" sortable="custom">
-        <template #default="scope">
-          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="涓婁紶浜�" align="center" prop="createByName" />
-      <el-table-column label="鏈嶅姟鍟�" align="center" prop="service" sortable="custom"/>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleDownload(scope.row)" v-hasPermi="['system:oss:download']">淇敼</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:oss:remove']">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
+      <el-table
+        v-loading="loading"
+        :data="ossList"
+        @selection-change="handleSelectionChange"
+        :header-cell-class-name="handleHeaderClass"
+        @header-click="handleHeaderCLick"
+        v-if="showTable"
+      >
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="瀵硅薄瀛樺偍涓婚敭" align="center" prop="ossId" v-if="false" />
+        <el-table-column label="鏂囦欢鍚�" align="center" prop="fileName" />
+        <el-table-column label="鍘熷悕" align="center" prop="originalName" />
+        <el-table-column label="鏂囦欢鍚庣紑" align="center" prop="fileSuffix" />
+        <el-table-column label="鏂囦欢灞曠ず" align="center" prop="url">
+          <template #default="scope">
+            <ImagePreview
+              v-if="previewListResource && checkFileSuffix(scope.row.fileSuffix)"
+              :width="100"
+              :height="100"
+              :src="scope.row.url"
+              :preview-src-list="[scope.row.url]"
+            />
+            <span v-text="scope.row.url" v-if="!checkFileSuffix(scope.row.fileSuffix) || !previewListResource" />
+          </template>
+        </el-table-column>
+        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180" sortable="custom">
+          <template #default="scope">
+            <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="涓婁紶浜�" align="center" prop="createByName" />
+        <el-table-column label="鏈嶅姟鍟�" align="center" prop="service" sortable="custom" />
+        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-tooltip content="涓嬭浇" placement="top">
+              <el-button link type="primary" icon="Download" @click="handleDownload(scope.row)" v-hasPermi="['system:oss:download']"></el-button>
+            </el-tooltip>
+            <el-tooltip content="鍒犻櫎" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:oss:remove']"></el-button>
+            </el-tooltip>
+          </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"
-    />
-
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
     <!-- 娣诲姞鎴栦慨鏀筄SS瀵硅薄瀛樺偍瀵硅瘽妗� -->
-    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
-      <el-form ref="ossRef" :model="form" :rules="rules" label-width="80px">
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="ossFormRef" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="鏂囦欢鍚�">
-          <fileUpload v-model="form.file" v-if="type === 0"/>
-          <imageUpload v-model="form.file" v-if="type === 1"/>
+          <fileUpload v-model="form.file" v-if="type === 0" />
+          <imageUpload v-model="form.file" v-if="type === 1" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -164,41 +132,54 @@
   </div>
 </template>
 
-<script setup name="Oss">
+<script setup name="Oss" lang="ts">
 import { listOss, delOss } from "@/api/system/oss";
 import ImagePreview from "@/components/ImagePreview/index.vue";
+import { OssForm, OssQuery, OssVO } from "@/api/system/oss/types";
 
 const router = useRouter();
-const { proxy } = getCurrentInstance();
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
-const ossList = ref([]);
-const open = ref(false);
+const ossList = ref<OssVO[]>([]);
 const showTable = ref(true);
 const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const ids = ref([]);
+const ids = ref<Array<string | number>>([]);
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
-const title = ref("");
 const type = ref(0);
 const previewListResource = ref(true);
-const daterangeCreateTime = ref([]);
-// 榛樿鎺掑簭
-const defaultSort = ref({prop: 'createTime', order: 'ascending'});
+const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']);
 
-const data = reactive({
-  form: {},
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+// 榛樿鎺掑簭
+const defaultSort = ref({ prop: 'createTime', order: 'ascending' });
+
+const ossFormRef = ref<ElFormInstance>();
+const queryFormRef = ref<ElFormInstance>();
+
+const initFormData = {
+  file: undefined,
+}
+const data = reactive<PageData<OssForm, OssQuery>>({
+  form: { ...initFormData },
   // 鏌ヨ鍙傛暟
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    fileName: undefined,
-    originalName: undefined,
-    fileSuffix: undefined,
-    createTime: undefined,
-    service: undefined
+    fileName: '',
+    originalName: '',
+    fileSuffix: '',
+    createTime: '',
+    service: '',
+    orderByColumn: defaultSort.value.prop,
+    isAsc: defaultSort.value.order
   },
   rules: {
     file: [
@@ -210,19 +191,17 @@
 const { queryParams, form, rules } = toRefs(data);
 
 /** 鏌ヨOSS瀵硅薄瀛樺偍鍒楄〃 */
-function getList() {
+const getList = async () => {
   loading.value = true;
-  proxy.getConfigKey("sys.oss.previewListResource").then(response => {
-    previewListResource.value = response.msg === undefined ? true : response.msg === 'true';
-  });
-  listOss(proxy.addDateRange(queryParams.value, daterangeCreateTime.value, "CreateTime")).then(response => {
-    ossList.value = response.rows;
-    total.value = response.total;
-    loading.value = false;
-    showTable.value = true;
-  });
+  const res = await proxy?.getConfigKey("sys.oss.previewListResource");
+  previewListResource.value = res?.data === undefined ? true : res.data === 'true';
+  const response = await listOss(proxy?.addDateRange(queryParams.value, dateRangeCreateTime.value, "CreateTime"));
+  ossList.value = response.rows;
+  total.value = response.total;
+  loading.value = false;
+  showTable.value = true;
 }
-function checkFileSuffix(fileSuffix) {
+function checkFileSuffix(fileSuffix: string[]) {
   let arr = ["png", "jpg", "jpeg"];
   return arr.some(type => {
     return fileSuffix.indexOf(type) > -1;
@@ -230,15 +209,13 @@
 }
 /** 鍙栨秷鎸夐挳 */
 function cancel() {
-  open.value = false;
+  dialog.visible = false;
   reset();
 }
 /** 琛ㄥ崟閲嶇疆 */
 function reset() {
-  form.value = {
-    file: undefined,
-  };
-  proxy.resetForm("ossRef");
+  form.value = { ...initFormData };
+  ossFormRef.value?.resetFields();
 }
 /** 鎼滅储鎸夐挳鎿嶄綔 */
 function handleQuery() {
@@ -248,24 +225,24 @@
 /** 閲嶇疆鎸夐挳鎿嶄綔 */
 function resetQuery() {
   showTable.value = false;
-  daterangeCreateTime.value = [];
-  proxy.resetForm("queryRef");
+  dateRangeCreateTime.value = ['', ''];
+  queryFormRef.value?.resetFields();
   queryParams.value.orderByColumn = defaultSort.value.prop;
   queryParams.value.isAsc = defaultSort.value.order;
   handleQuery();
 }
 /** 閫夋嫨鏉℃暟  */
-function handleSelectionChange(selection) {
+function handleSelectionChange(selection: OssVO[]) {
   ids.value = selection.map(item => item.ossId);
   single.value = selection.length != 1;
   multiple.value = !selection.length;
 }
-// 璁剧疆鍒楃殑鎺掑簭涓烘垜浠嚜瀹氫箟鐨勬帓搴�
-function handleHeaderClass({column}) {
+/** 璁剧疆鍒楃殑鎺掑簭涓烘垜浠嚜瀹氫箟鐨勬帓搴� */
+const handleHeaderClass = ({ column }: any): any => {
   column.order = column.multiOrder
 }
-// 鐐瑰嚮琛ㄥご杩涜鎺掑簭
-function handleHeaderCLick(column) {
+/** 鐐瑰嚮琛ㄥご杩涜鎺掑簭 */
+const handleHeaderCLick = (column: any) => {
   if (column.sortable !== 'custom') {
     return
   }
@@ -282,7 +259,7 @@
   }
   handleOrderChange(column.property, column.multiOrder)
 }
-function handleOrderChange(prop, order) {
+const handleOrderChange = (prop: string, order: string) => {
   let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(",") : [];
   let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(",") : [];
   let propIndex = orderByArr.indexOf(prop)
@@ -306,58 +283,53 @@
   getList();
 }
 /** 浠诲姟鏃ュ織鍒楄〃鏌ヨ */
-function handleOssConfig() {
+const handleOssConfig = () => {
   router.push('/system/oss-config/index')
 }
 /** 鏂囦欢鎸夐挳鎿嶄綔 */
-function handleFile() {
+const handleFile = () => {
   reset();
-  open.value = true;
-  title.value = "涓婁紶鏂囦欢";
   type.value = 0;
+  dialog.visible = true;
+  dialog.title = "涓婁紶鏂囦欢";
 }
 /** 鍥剧墖鎸夐挳鎿嶄綔 */
-function handleImage() {
+const handleImage = () => {
   reset();
-  open.value = true;
-  title.value = "涓婁紶鍥剧墖";
   type.value = 1;
+  dialog.visible = true;
+  dialog.title = "涓婁紶鍥剧墖";
 }
 /** 鎻愪氦鎸夐挳 */
-function submitForm() {
-  open.value = false;
+const submitForm = () => {
+  dialog.visible = false;
   getList();
 }
 /** 涓嬭浇鎸夐挳鎿嶄綔 */
-function handleDownload(row) {
-  proxy.$download.oss(row.ossId)
+const handleDownload = (row: OssVO) => {
+  proxy?.$download.oss(row.ossId)
 }
 /** 鐢ㄦ埛鐘舵�佷慨鏀�  */
-function handlePreviewListResource(previewListResource) {
-  let text = previewListResource ? "鍚敤" : "鍋滅敤";
-  proxy.$modal.confirm('纭瑕�"' + text + '""棰勮鍒楄〃鍥剧墖"閰嶇疆鍚�?').then(() => {
-    return proxy.updateConfigByKey("sys.oss.previewListResource", previewListResource);
-  }).then(() => {
-    getList()
-    proxy.$modal.msgSuccess(text + "鎴愬姛");
-  }).catch(function () {
-    previewListResource.value = previewListResource.value !== true;
-  });
+const handlePreviewListResource = async (preview: boolean) => {
+  let text = preview ? "鍚敤" : "鍋滅敤";
+  try {
+    await proxy?.$modal.confirm('纭瑕�"' + text + '""棰勮鍒楄〃鍥剧墖"閰嶇疆鍚�?');
+    await proxy?.updateConfigByKey("sys.oss.previewListResource", preview);
+    await getList()
+    proxy?.$modal.msgSuccess(text + "鎴愬姛");
+  } catch { return }
 }
 /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-function handleDelete(row) {
-  const ossIds = row.ossId || ids.value;
-  proxy.$modal.confirm('鏄惁纭鍒犻櫎OSS瀵硅薄瀛樺偍缂栧彿涓�"' + ossIds + '"鐨勬暟鎹」?').then(() => {
-    loading.value = true;
-    return delOss(ossIds);
-  }).then(() => {
-    loading.value = false;
-    getList();
-    proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-  }).finally(() => {
-    loading.value = false;
-  });
+const handleDelete = async (row?: OssVO) => {
+  const ossIds = row?.ossId || ids.value;
+  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎OSS瀵硅薄瀛樺偍缂栧彿涓�"' + ossIds + '"鐨勬暟鎹」?');
+  loading.value = true;
+  await delOss(ossIds).finally(() => loading.value = false);
+  await getList();
+  proxy?.$modal.msgSuccess("鍒犻櫎鎴愬姛");
 }
 
-getList();
+onMounted(() => {
+  getList();
+})
 </script>

--
Gitblit v1.9.3