import { createApp } from 'vue'; import pinia from '/@/stores/index'; import App from '/@/App.vue'; import router from '/@/router'; import { directive } from '/@/directive/index'; import { i18n } from '/@/i18n/index'; import other from '/@/utils/other'; import ElementPlus from 'element-plus'; import '/@/theme/index.scss'; import 'virtual:uno.css' // 动画库 import 'animate.css'; // 栅格布局 import VueGridLayout from 'vue-grid-layout'; // 电子签名 import VueSignaturePad from 'vue-signature-pad'; // 组织架构图 import vue3TreeOrg from 'vue3-tree-org'; import 'vue3-tree-org/lib/vue3-tree-org.css'; // VForm3 表单设计 import VForm3 from 'vform3-builds'; import 'vform3-builds/dist/designer.style.css'; // Vxe-Table import { setupVXETable } from '/@/hooks/setupVXETableHook'; // 关闭自动打印 import { disAutoConnect } from 'vue-plugin-hiprint'; disAutoConnect(); const app = createApp(App); directive(app); other.elSvg(app); // #region FastCrud配置 import { FastCrud } from '@fast-crud/fast-crud'; import '@fast-crud/fast-crud/dist/style.css'; import ui from '@fast-crud/ui-element'; import { FsExtendsUploader, FsExtendsEditor } from '@fast-crud/fast-extends'; import '@fast-crud/fast-extends/dist/style.css'; app.use(ui); app.use(FastCrud, { i18n, commonOptions() { return { request: { transformQuery: ({ page, form, sort }) => { const order = sort == null ? {} : { orderProp: sort.prop, orderAsc: sort.asc }; return { page: page?.currentPage, pageSize: page?.pageSize, ...form, ...order }; }, // page请求结果转换 transformRes: ({ res }) => { const records = res.data.result.items; const total = res.data.result.total; const currentPage = res.data.result.page; const pageSize = res.data.result.pageSize; return { currentPage: currentPage, pageSize: pageSize, total: total, records, }; }, form: { display: 'flex', // 表单布局 labelWidth: '120px', // 表单label宽度 }, }, }; }, }); const baseURL = import.meta.env.VITE_API_URL; import request from '/@/utils/request'; import { getToken } from '/@/utils/axios-utils'; // 文件上传 app.use(FsExtendsUploader, { defaultType: 'form', form: { action: baseURL + '/api/sysFile/uploadFile', name: 'file', withCredentials: false, uploadRequest: async (props) => { const { action, file, onProgress } = props; const data = new FormData(); data.append('file', file); const token = getToken(); const Authorization = token ? `Bearer ${token}` : null; const result = await request({ url: action, method: 'post', data, headers: { 'Content-Type': 'multipart/form-data', Authorization: Authorization, }, timeout: 60000, onUploadProgress(progress) { onProgress({ percent: Math.round((progress.loaded / progress.total!) * 100) }); }, }); if (result) { return result.data; } else { throw new Error(result.message); } }, async successHandle(ret: any) { return { url: baseURL + '/' + ret.result.filePath + '/' + ret.result.id + ret.result.suffix, key: ret.result.fileName, }; }, }, }); // 富文本编辑器 app.use(FsExtendsEditor, { wangEditor: {}, }); // #endregion app.use(pinia).use(router).use(ElementPlus).use(setupVXETable).use(i18n).use(VueGridLayout).use(VForm3).use(VueSignaturePad).use(vue3TreeOrg).mount('#app');