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 传递选项