From 3156b6a86e64e6d1157e934c15e00e35040d2fcb Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Sat, 28 Mar 2026 17:02:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BB=E8=80=81=E8=A1=A5=E8=B4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../old-age-allowance/old-age-allowance.js | 29 ++ src/utils/downloadRequest.js | 28 +- src/views/OldAgeAllowance/OldAgeAllowance.vue | 275 ++++++++++++++++++ vue.config.js | 2 +- 4 files changed, 328 insertions(+), 6 deletions(-) create mode 100644 src/api/old-age-allowance/old-age-allowance.js create mode 100644 src/views/OldAgeAllowance/OldAgeAllowance.vue diff --git a/src/api/old-age-allowance/old-age-allowance.js b/src/api/old-age-allowance/old-age-allowance.js new file mode 100644 index 0000000..41b68ab --- /dev/null +++ b/src/api/old-age-allowance/old-age-allowance.js @@ -0,0 +1,29 @@ +import request from '@/utils/request' + +export function index(params, isLoading = true) { + return request({ + method: 'get', + url: '/api/admin/old-age-allowance/index', + params, + isLoading + }) +} + +export function show(params, isLoading = true) { + return request({ + method: 'get', + url: '/api/admin/old-age-allowance/show', + params, + isLoading + }) +} + +export function destroy(params, isLoading = true) { + return request({ + method: 'get', + url: '/api/admin/old-age-allowance/destroy', + params, + isLoading + }) +} + diff --git a/src/utils/downloadRequest.js b/src/utils/downloadRequest.js index 5489be5..71afdbf 100644 --- a/src/utils/downloadRequest.js +++ b/src/utils/downloadRequest.js @@ -48,11 +48,29 @@ export async function download(url, method = "get", info, filename) { loading.close(); - // 提取文件名 + // 提取文件名(兼容 Content-Disposition: filename / filename*) if (!filename) { - filename = - response.headers["content-disposition"]?.match(/filename=(.*)/)[1] || + const cd = + response.headers["content-disposition"] || + response.headers["Content-Disposition"] || ""; + let fromHeader = ""; + if (cd) { + const star = cd.match(/filename\*=(?:UTF-8'')?([^;\n]+)/i); + const plain = cd.match(/filename[^*]=["']?([^";\n]+)["']?/i); + fromHeader = (star && star[1]) || (plain && plain[1]) || ""; + if (fromHeader.includes("%")) { + try { + fromHeader = decodeURIComponent(fromHeader.trim()); + } catch (e) { + fromHeader = fromHeader.trim(); + } + } + } + filename = fromHeader || "导出.xlsx"; + if (!/\.(xlsx|xls|csv)$/i.test(filename)) { + filename += ".xlsx"; + } } // 将二进制流转为blob @@ -61,7 +79,7 @@ export async function download(url, method = "get", info, filename) { }); if (typeof window.navigator.msSaveBlob !== "undefined") { // 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件 - window.navigator.msSaveBlob(blob, decodeURI(filename)); + window.navigator.msSaveBlob(blob, filename); } else { // 创建新的URL并指向File对象或者Blob对象的地址 const blobURL = window.URL.createObjectURL(blob); @@ -69,7 +87,7 @@ export async function download(url, method = "get", info, filename) { const tempLink = document.createElement("a"); tempLink.style.display = "none"; tempLink.href = blobURL; - tempLink.setAttribute("download", decodeURI(filename)); + tempLink.setAttribute("download", filename); // 兼容:某些浏览器不支持HTML5的download属性 if (typeof tempLink.download === "undefined") { tempLink.setAttribute("target", "_blank"); diff --git a/src/views/OldAgeAllowance/OldAgeAllowance.vue b/src/views/OldAgeAllowance/OldAgeAllowance.vue new file mode 100644 index 0000000..4d56d78 --- /dev/null +++ b/src/views/OldAgeAllowance/OldAgeAllowance.vue @@ -0,0 +1,275 @@ + + + + + + diff --git a/vue.config.js b/vue.config.js index 6035c8e..a303356 100644 --- a/vue.config.js +++ b/vue.config.js @@ -25,7 +25,7 @@ module.exports = { * Detail: https://cli.vuejs.org/config/#publicpath */ publicPath: process.env.ENV === 'staging' ? '/admin_test' : '/admin', - outputDir: `/Users/mac/Documents/朗业/2024/y-四世同堂-医康养/yikangyang/public${process.env.ENV === 'staging' ? '/admin_test' : '/admin'}`, + outputDir: `../yikangyang/public${process.env.ENV === 'staging' ? '/admin_test' : '/admin'}`, assetsDir: 'static', css: { loaderOptions: { // 向 CSS 相关的 loader 传递选项