mirror of
https://github.com/jeecgboot/JeecgBoot.git
synced 2026-02-03 00:55:33 +08:00
前端和后端源码,合并到一个git仓库中,方便用户下载,避免前后端不匹配的问题
This commit is contained in:
84
jeecgboot-vue3/src/components/jeecg/ExcelButton.vue
Normal file
84
jeecgboot-vue3/src/components/jeecg/ExcelButton.vue
Normal file
@ -0,0 +1,84 @@
|
||||
<template>
|
||||
<a-button type="primary" v-if="hasExportAuth() && config.export" preIcon="ant-design:export-outlined" @click="onExportXls()"> 导出</a-button>
|
||||
<a-upload name="file" :showUploadList="false" v-if="hasImportAuth() && config.import" :customRequest="(file) => onImportXls(file)">
|
||||
<a-button type="primary" preIcon="ant-design:import-outlined">导入</a-button>
|
||||
</a-upload>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="ExcelButton">
|
||||
import { PropType } from 'vue';
|
||||
import { usePermission } from '/@/hooks/web/usePermission';
|
||||
import { useMethods } from '/@/hooks/system/useMethods';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
|
||||
// 定义 excel 方法所需参数
|
||||
interface ExcelConfig {
|
||||
// 导出配置
|
||||
exportConfig: {
|
||||
url: string;
|
||||
// 导出文件名
|
||||
name?: string | (() => string);
|
||||
//按钮权限
|
||||
auth?: string | string[];
|
||||
};
|
||||
// 导入配置
|
||||
importConfig: {
|
||||
url: string;
|
||||
// 导出成功后的回调
|
||||
success?: (fileInfo?: any) => void;
|
||||
//按钮权限
|
||||
auth?: string | string[];
|
||||
};
|
||||
}
|
||||
/**
|
||||
* 定义组件参数
|
||||
*/
|
||||
const props = defineProps({
|
||||
config: {
|
||||
type: Object as PropType<ExcelConfig>,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
//按钮权限问题
|
||||
const { hasPermission } = usePermission();
|
||||
//导入导出方法
|
||||
const { handleExportXls, handleImportXls } = useMethods();
|
||||
|
||||
const $message = useMessage();
|
||||
// 导出 excel
|
||||
function onExportXls() {
|
||||
let { url, name } = props.config?.export ?? {};
|
||||
if (url) {
|
||||
let title = typeof name === 'function' ? name() : name;
|
||||
return handleExportXls(title as string, url);
|
||||
} else {
|
||||
$message.createMessage.warn('没有传递 export.url 参数');
|
||||
return Promise.reject();
|
||||
}
|
||||
}
|
||||
|
||||
// 导入 excel
|
||||
function onImportXls(file) {
|
||||
let { url, success } = props.config?.import ?? {};
|
||||
if (url) {
|
||||
return handleImportXls(file, url, success);
|
||||
} else {
|
||||
$message.createMessage.warn('没有传递 import.url 参数');
|
||||
return Promise.reject();
|
||||
}
|
||||
}
|
||||
|
||||
// 导入按钮权限
|
||||
function hasImportAuth() {
|
||||
let auth = props.config?.import?.auth;
|
||||
return auth && auth.length > 0 ? hasPermission(auth) : true;
|
||||
}
|
||||
|
||||
// 导出按钮权限
|
||||
function hasExportAuth() {
|
||||
let auth = props.config?.export?.auth;
|
||||
return auth && auth.length > 0 ? hasPermission(auth) : true;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
Reference in New Issue
Block a user