From 7916a958c24d69f841d978a5b317a426e94fd3b3 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期五, 24 四月 2026 18:24:53 +0800
Subject: [PATCH] apk文件上传
---
src/views/system/appVersion/index.vue | 150 +++++++++++++------------------------------------
1 files changed, 40 insertions(+), 110 deletions(-)
diff --git a/src/views/system/appVersion/index.vue b/src/views/system/appVersion/index.vue
index 6d68c07..92157a4 100644
--- a/src/views/system/appVersion/index.vue
+++ b/src/views/system/appVersion/index.vue
@@ -7,9 +7,9 @@
</el-row>
<el-table v-loading="loading" :data="versionList">
- <el-table-column label="ID" prop="id" align="center" width="80" />
- <el-table-column label="搴旂敤鍚嶇О" prop="name" align="center" min-width="150" />
- <el-table-column label="鐗堟湰鍙�" prop="version" align="center" width="120" />
+ <el-table-column label="ID" prop="id" align="center" width="80"/>
+ <el-table-column label="搴旂敤鍚嶇О" prop="name" align="center" min-width="150"/>
+ <el-table-column label="鐗堟湰鍙�" prop="version" align="center" width="120"/>
<el-table-column label="鍒涘缓鏃堕棿" prop="createTime" align="center" width="170">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}:{s}") }}</span>
@@ -20,7 +20,7 @@
<span>{{ parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}:{s}") }}</span>
</template>
</el-table-column>
- <el-table-column label="鍒涘缓浜�" prop="createUser" align="center" width="100" />
+ <el-table-column label="鍒涘缓浜�" prop="createUser" align="center" width="100"/>
<el-table-column label="鎿嶄綔" align="center" width="100" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="downloadAttachment(scope.row)">涓嬭浇</el-button>
@@ -29,37 +29,24 @@
</el-table>
<pagination
- v-show="total > 0"
- :total="total"
- v-model:page="queryParams.current"
- v-model:limit="queryParams.size"
- @pagination="getList"
+ v-show="total > 0"
+ :total="total"
+ v-model:page="queryParams.current"
+ v-model:limit="queryParams.size"
+ @pagination="getList"
/>
<el-dialog title="涓婁紶APK" v-model="uploadOpen" width="560px" append-to-body @close="resetUploadForm">
<el-form ref="uploadRef" :model="uploadForm" :rules="uploadRules" label-width="90px">
<el-form-item label="搴旂敤鍚嶇О" prop="name">
- <el-input v-model="uploadForm.name" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�" />
+ <el-input v-model="uploadForm.name" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�"/>
</el-form-item>
<el-form-item label="鐗堟湰鍙�" prop="version">
- <el-input v-model="uploadForm.version" placeholder="璇疯緭鍏ョ増鏈彿" />
+ <el-input v-model="uploadForm.version" placeholder="璇疯緭鍏ョ増鏈彿"/>
</el-form-item>
- <el-form-item label="APK鏂囦欢" prop="file">
- <el-upload
- :auto-upload="false"
- :show-file-list="true"
- :limit="1"
- accept=".apk"
- :on-change="handleApkChange"
- :on-remove="handleApkRemove"
- :on-exceed="handleApkExceed"
- :before-upload="beforeApkUpload"
- >
- <el-button type="primary">閫夋嫨APK鏂囦欢</el-button>
- <template #tip>
- <div class="el-upload__tip">鍙兘涓婁紶 APK 鏂囦欢锛屼笖涓嶈秴杩� 200MB</div>
- </template>
- </el-upload>
+ <el-form-item label="APK鏂囦欢" prop="storageBlobDTOList">
+ <FileUpload v-model:file-list="uploadForm.storageBlobDTOList" :limit="1" :file-type="['apk']"
+ :file-size="200"/>
</el-form-item>
</el-form>
<template #footer>
@@ -73,9 +60,10 @@
</template>
<script setup name="SystemAppVersion">
-import { listAppVersion, uploadApk } from "@/api/system/appVersion";
+import {listAppVersion, add} from "@/api/system/appVersion";
+import FileUpload from "@/components/AttachmentUpload/file/index.vue";
-const { proxy } = getCurrentInstance();
+const {proxy} = getCurrentInstance();
const loading = ref(false);
const versionList = ref([]);
@@ -91,13 +79,13 @@
const uploadForm = reactive({
name: "",
version: "",
- file: null,
+ storageBlobDTOList: null,
});
const uploadRules = {
- name: [{ required: true, message: "璇疯緭鍏ュ簲鐢ㄥ悕绉�", trigger: "blur" }],
- version: [{ required: true, message: "璇疯緭鍏ョ増鏈彿", trigger: "blur" }],
- file: [{ required: true, message: "璇蜂笂浼燗PK鏂囦欢", trigger: "change" }],
+ name: [{required: true, message: "璇疯緭鍏ュ簲鐢ㄥ悕绉�", trigger: "blur"}],
+ version: [{required: true, message: "璇疯緭鍏ョ増鏈彿", trigger: "blur"}],
+ storageBlobDTOList: [{required: true, message: "璇蜂笂浼燗PK鏂囦欢", trigger: "change"}],
};
function normalizeListResp(res) {
@@ -113,14 +101,14 @@
function getList() {
loading.value = true;
listAppVersion(queryParams)
- .then(res => {
- const result = normalizeListResp(res);
- versionList.value = result.records;
- total.value = result.total;
- })
- .finally(() => {
- loading.value = false;
- });
+ .then(res => {
+ const result = normalizeListResp(res);
+ versionList.value = result.records;
+ total.value = result.total;
+ })
+ .finally(() => {
+ loading.value = false;
+ });
}
function openUploadDialog() {
@@ -131,86 +119,28 @@
function resetUploadForm() {
uploadForm.name = "";
uploadForm.version = "";
- uploadForm.file = null;
+ uploadForm.storageBlobDTOList = null;
proxy.resetForm("uploadRef");
}
-function beforeApkUpload(file) {
- const isApk = /\.apk$/i.test(file.name);
- if (!isApk) {
- proxy.$modal.msgWarning("鍙兘涓婁紶APK鏂囦欢");
- return false;
- }
- const isLt200M = file.size / 1024 / 1024 < 200;
- if (!isLt200M) {
- proxy.$modal.msgWarning("APK 鏂囦欢澶у皬涓嶈兘瓒呰繃 200MB");
- return false;
- }
- return true;
-}
-
-function handleApkChange(file) {
- if (!file || !file.raw) return;
- if (!beforeApkUpload(file.raw)) {
- uploadForm.file = null;
- proxy.$refs.uploadRef?.clearValidate("file");
- return;
- }
- uploadForm.file = file.raw;
-}
-
-function handleApkRemove() {
- uploadForm.file = null;
-}
-
-function handleApkExceed() {
- proxy.$modal.msgWarning("鍙兘涓婁紶涓�涓狝PK鏂囦欢");
-}
function downloadAttachment(row) {
- const filePath =
- (row.commonFileList &&
- row.commonFileList.length > 0 &&
- row.commonFileList[0].url) ||
- row.url;
- if (!filePath) {
- proxy.$modal.msgError("涓嬭浇閾炬帴涓嶅瓨鍦�");
- return;
- }
-
- const link = document.createElement("a");
- const rawName = String(row.name || "").trim();
- const fallbackName = String(filePath).split("/").pop()?.split("?")[0] || "app";
- const baseName = rawName || fallbackName;
- const downloadName = /\.apk$/i.test(baseName) ? baseName : `${baseName}.apk`;
- console.log(downloadName,filePath,'downloadName,filePath');
- link.href = filePath;
- link.download = downloadName;
- link.target = "_blank";
- link.rel = "noopener noreferrer";
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
+ window.open(row.downloadURL, "_blank");
}
function submitUpload() {
proxy.$refs.uploadRef.validate(valid => {
if (!valid) return;
- const formData = new FormData();
- formData.append("name", uploadForm.name);
- formData.append("version", uploadForm.version);
- formData.append("file", uploadForm.file);
-
uploading.value = true;
- uploadApk(formData)
- .then(() => {
- proxy.$modal.msgSuccess("涓婁紶鎴愬姛");
- uploadOpen.value = false;
- getList();
- })
- .finally(() => {
- uploading.value = false;
- });
+ add(uploadForm)
+ .then(() => {
+ proxy.$modal.msgSuccess("涓婁紶鎴愬姛");
+ uploadOpen.value = false;
+ getList();
+ })
+ .finally(() => {
+ uploading.value = false;
+ });
});
}
--
Gitblit v1.9.3