提升excel导出功能的用户体验

dev
smallchill 4 years ago
parent c075f1c170
commit c7e524ad24
  1. 13
      src/api/common.js
  2. 7
      src/util/date.js
  3. 24
      src/util/util.js
  4. 15
      src/views/base/region.vue
  5. 37
      src/views/system/user.vue

@ -0,0 +1,13 @@
import request from "@/router/axios";
/**
* 文件流返回
* @param url 接口地址
*/
export const exportBlob = (url) => {
return request({
url: url,
method: 'get',
responseType: 'blob'
})
}

@ -49,3 +49,10 @@ export function dateFormat(date, format) {
return ''; return '';
} }
/**
* 当前时间戳
*/
export function dateNow() {
return dateFormat(new Date(), "yyyyMMddhhmmss");
}

@ -365,3 +365,27 @@ export const downloadFileBase64 = (path, name) => {
} }
}; };
} }
/**
* 下载excel
* @param {blob} fileArrayBuffer 文件流
* @param {String} filename 文件名称
*/
export const downloadXls = (fileArrayBuffer, filename) => {
let data = new Blob([fileArrayBuffer], {type: 'application/vnd.ms-excel,charset=utf-8'});
if (typeof window.chrome !== 'undefined') {
// Chrome
var link = document.createElement('a');
link.href = window.URL.createObjectURL(data);
link.download = filename;
link.click();
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE
var blob = new Blob([data], {type: 'application/force-download'});
window.navigator.msSaveBlob(blob, filename);
} else {
// Firefox
var file = new File([data], filename, {type: 'application/force-download'});
window.open(URL.createObjectURL(file));
}
}

@ -52,9 +52,14 @@
<script> <script>
import {getLazyTree, getDetail, submit, remove} from "@/api/base/region"; import {getLazyTree, getDetail, submit, remove} from "@/api/base/region";
import {exportBlob} from "@/api/common";
import {mapGetters} from "vuex"; import {mapGetters} from "vuex";
import {validatenull} from "@/util/validate"; import {validatenull} from "@/util/validate";
import {downloadXls} from "@/util/util";
import {dateNow} from "@/util/date";
import {getToken} from "@/util/auth"; import {getToken} from "@/util/auth";
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
export default { export default {
data() { data() {
@ -392,11 +397,17 @@
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
window.open(`/api/blade-system/region/export-region?${this.website.tokenHeader}=${getToken()}`); NProgress.start();
exportBlob(`/api/blade-system/region/export-region?${this.website.tokenHeader}=${getToken()}`).then(res => {
downloadXls(res.data, `行政区划数据${dateNow()}.xlsx`);
NProgress.done();
})
}); });
}, },
handleTemplate() { handleTemplate() {
window.open(`/api/blade-system/region/export-template?${this.website.tokenHeader}=${getToken()}`); exportBlob(`/api/blade-system/region/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
downloadXls(res.data, "行政区划模板.xlsx");
})
}, },
} }
}; };

@ -166,23 +166,28 @@
</template> </template>
<script> <script>
import { import {
getList, getList,
getUser, getUser,
getUserPlatform, getUserPlatform,
remove, remove,
update, update,
updatePlatform, updatePlatform,
add, add,
grant, grant,
resetPassword, unlock resetPassword, unlock
} from "@/api/system/user"; } from "@/api/system/user";
import {exportBlob} from "@/api/common";
import {getDeptTree, getDeptLazyTree} from "@/api/system/dept"; import {getDeptTree, getDeptLazyTree} from "@/api/system/dept";
import {getRoleTree} from "@/api/system/role"; import {getRoleTree} from "@/api/system/role";
import {getPostList} from "@/api/system/post"; import {getPostList} from "@/api/system/post";
import {mapGetters} from "vuex"; import {mapGetters} from "vuex";
import website from '@/config/website'; import website from '@/config/website';
import {getToken} from '@/util/auth'; import {getToken} from '@/util/auth';
import {downloadXls} from "@/util/util";
import {dateNow} from "@/util/date";
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
export default { export default {
data() { data() {
@ -902,11 +907,17 @@ import {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
window.open(`/api/blade-user/export-user?${this.website.tokenHeader}=${getToken()}&account=${this.search.account}&realName=${this.search.realName}`); NProgress.start();
exportBlob(`/api/blade-user/export-user?${this.website.tokenHeader}=${getToken()}&account=${this.search.account}&realName=${this.search.realName}`).then(res => {
downloadXls(res.data, `用户数据表${dateNow()}.xlsx`);
NProgress.done();
})
}); });
}, },
handleTemplate() { handleTemplate() {
window.open(`/api/blade-user/export-template?${this.website.tokenHeader}=${getToken()}`); exportBlob(`/api/blade-user/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
downloadXls(res.data, "用户数据模板.xlsx");
})
}, },
beforeOpen(done, type) { beforeOpen(done, type) {
if (["edit", "view"].includes(type)) { if (["edit", "view"].includes(type)) {

Loading…
Cancel
Save