From 5e440a7dc434c43eb828fa62cf9c12b0078b8565 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期一, 20 一月 2025 11:36:18 +0800
Subject: [PATCH] !173 发布 5.3.0-BETA 公测版本 Merge pull request !173 from 疯狂的狮子Li/dev

---
 src/views/system/oss/index.vue |  479 ++++++++++++++++++++++++++++-------------------------------
 1 files changed, 224 insertions(+), 255 deletions(-)

diff --git a/src/views/system/oss/index.vue b/src/views/system/oss/index.vue
index f3c1a08..f76dbab 100644
--- a/src/views/system/oss/index.vue
+++ b/src/views/system/oss/index.vue
@@ -1,157 +1,123 @@
 <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 v-show="showSearch" class="mb-[10px]">
+        <el-card shadow="hover">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+            <el-form-item label="鏂囦欢鍚�" prop="fileName">
+              <el-input v-model="queryParams.fileName" placeholder="璇疯緭鍏ユ枃浠跺悕" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鍘熷悕" prop="originalName">
+              <el-input v-model="queryParams.originalName" placeholder="璇疯緭鍏ュ師鍚�" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鏂囦欢鍚庣紑" prop="fileSuffix">
+              <el-input v-model="queryParams.fileSuffix" placeholder="璇疯緭鍏ユ枃浠跺悗缂�" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="鍒涘缓鏃堕棿" style="width: 308px">
+              <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 @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 v-hasPermi="['system:oss:upload']" type="primary" plain icon="Upload" @click="handleFile">涓婁紶鏂囦欢</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['system:oss:upload']" type="primary" plain icon="Upload" @click="handleImage">涓婁紶鍥剧墖</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['system:oss:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">
+              鍒犻櫎
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              v-hasPermi="['system:oss:edit']"
+              :type="previewListResource ? 'danger' : 'warning'"
+              plain
+              @click="handlePreviewListResource(!previewListResource)"
+              >棰勮寮�鍏� : {{ previewListResource ? '绂佺敤' : '鍚敤' }}</el-button
+            >
+          </el-col>
+          <el-col :span="1.5">
+            <el-button v-hasPermi="['system:ossConfig:list']" type="info" plain icon="Operation" @click="handleOssConfig">閰嶇疆绠$悊</el-button>
+          </el-col>
+          <right-toolbar v-model:show-search="showSearch" @query-table="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-if="showTable"
+        v-loading="loading"
+        :data="ossList"
+        :header-cell-class-name="handleHeaderClass"
+        @selection-change="handleSelectionChange"
+        @header-click="handleHeaderCLick"
+      >
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column v-if="false" label="瀵硅薄瀛樺偍涓婚敭" align="center" prop="ossId" />
+        <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-if="!checkFileSuffix(scope.row.fileSuffix) || !previewListResource" v-text="scope.row.url" />
+          </template>
+        </el-table-column>
+        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180" sortable="custom">
+          <template #default="scope">
+            <span>{{ proxy.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 v-hasPermi="['system:oss:download']" link type="primary" icon="Download" @click="handleDownload(scope.row)"></el-button>
+            </el-tooltip>
+            <el-tooltip content="鍒犻櫎" placement="top">
+              <el-button v-hasPermi="['system:oss:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></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" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @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 v-model="dialog.visible" :title="dialog.title" 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-if="type === 0" v-model="form.file" />
+          <imageUpload v-if="type === 1" v-model="form.file" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -164,81 +130,87 @@
   </div>
 </template>
 
-<script setup name="Oss">
-import { listOss, delOss } from "@/api/system/oss";
-import ImagePreview from "@/components/ImagePreview/index.vue";
+<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: [
-      { required: true, message: "鏂囦欢涓嶈兘涓虹┖", trigger: "blur" }
-    ]
+    file: [{ required: true, message: '鏂囦欢涓嶈兘涓虹┖', trigger: 'blur' }]
   }
 });
 
 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;
-  });
-}
-function checkFileSuffix(fileSuffix) {
-  let arr = ["png", "jpg", "jpeg"];
-  return arr.some(type => {
-    return fileSuffix.indexOf(type) > -1;
-  });
+  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: string | string[]) {
+  const arr = ['.png', '.jpg', '.jpeg'];
+  const suffixArray = Array.isArray(fileSuffix) ? fileSuffix : [fileSuffix];
+  return suffixArray.some((suffix) => arr.includes(suffix.toLowerCase()));
 }
 /** 鍙栨秷鎸夐挳 */
 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,26 +220,26 @@
 /** 閲嶇疆鎸夐挳鎿嶄綔 */
 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) {
-  ids.value = selection.map(item => item.ossId);
+function handleSelectionChange(selection: OssVO[]) {
+  ids.value = selection.map((item) => item.ossId);
   single.value = selection.length != 1;
   multiple.value = !selection.length;
 }
-// 璁剧疆鍒楃殑鎺掑簭涓烘垜浠嚜瀹氫箟鐨勬帓搴�
-function handleHeaderClass({column}) {
-  column.order = column.multiOrder
-}
-// 鐐瑰嚮琛ㄥご杩涜鎺掑簭
-function handleHeaderCLick(column) {
+/** 璁剧疆鍒楃殑鎺掑簭涓烘垜浠嚜瀹氫箟鐨勬帓搴� */
+const handleHeaderClass = ({ column }: any): any => {
+  column.order = column.multiOrder;
+};
+/** 鐐瑰嚮琛ㄥご杩涜鎺掑簭 */
+const handleHeaderCLick = (column: any) => {
   if (column.sortable !== 'custom') {
-    return
+    return;
   }
   switch (column.multiOrder) {
     case 'descending':
@@ -280,20 +252,20 @@
       column.multiOrder = 'descending';
       break;
   }
-  handleOrderChange(column.property, column.multiOrder)
-}
-function handleOrderChange(prop, order) {
-  let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(",") : [];
-  let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(",") : [];
-  let propIndex = orderByArr.indexOf(prop)
+  handleOrderChange(column.property, column.multiOrder);
+};
+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);
   if (propIndex !== -1) {
     if (order) {
       //鎺掑簭閲屽凡瀛樺湪 鍙慨鏀规帓搴�
       isAscArr[propIndex] = order;
     } else {
       //濡傛灉order涓簄ull 鍒欏垹闄ゆ帓搴忓瓧娈靛拰灞炴��
-      isAscArr.splice(propIndex, 1);//鍒犻櫎鎺掑簭
-      orderByArr.splice(propIndex, 1);//鍒犻櫎灞炴��
+      isAscArr.splice(propIndex, 1); //鍒犻櫎鎺掑簭
+      orderByArr.splice(propIndex, 1); //鍒犻櫎灞炴��
     }
   } else {
     //鎺掑簭閲屼笉瀛樺湪鍒欐柊澧炴帓搴�
@@ -301,63 +273,60 @@
     isAscArr.push(order);
   }
   //鍚堝苟鎺掑簭
-  queryParams.value.orderByColumn = orderByArr.join(",");
-  queryParams.value.isAsc = isAscArr.join(",");
+  queryParams.value.orderByColumn = orderByArr.join(',');
+  queryParams.value.isAsc = isAscArr.join(',');
   getList();
-}
+};
 /** 浠诲姟鏃ュ織鍒楄〃鏌ヨ */
-function handleOssConfig() {
-  router.push('/system/oss-config/index')
-}
+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)
-}
-/** 鐢ㄦ埛鐘舵�佷慨鏀�  */
-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 handleDownload = (row: OssVO) => {
+  proxy?.$download.oss(row.ossId);
+};
+/** 棰勮寮�鍏虫寜閽�  */
+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