@skyfox2000/webui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +23 -0
- package/.prettierrc +11 -0
- package/.vscode/settings.json +25 -0
- package/README.md +104 -0
- package/env.d.ts +11 -0
- package/index.html +19 -0
- package/lib/AceEditor.d.ts +4 -0
- package/lib/BasicLayout.d.ts +4 -0
- package/lib/Error403.d.ts +4 -0
- package/lib/Error404.d.ts +4 -0
- package/lib/ExcelForm.d.ts +4 -0
- package/lib/UploadForm.d.ts +4 -0
- package/lib/assets/modules/basicLayout-YP_-EySb.js +726 -0
- package/lib/assets/modules/error403-Bi0E2twj.js +33 -0
- package/lib/assets/modules/error404-BF7vasR_.js +33 -0
- package/lib/assets/modules/excelForm-Dzndz-SG.js +109 -0
- package/lib/assets/modules/excelForm-WJVQmaDT.js +317 -0
- package/lib/assets/modules/index-FzWSvscZ.js +107 -0
- package/lib/assets/modules/index-ekkaExvB.js +49 -0
- package/lib/assets/modules/uploadForm-BahGnrAq.js +415 -0
- package/lib/assets/modules/uploadForm-DEnOjhwc.js +308 -0
- package/lib/components/common/button/index.vue.d.ts +42 -0
- package/lib/components/common/button/index.vue.d.ts.map +1 -0
- package/lib/components/common/icon/appicon.vue.d.ts +12 -0
- package/lib/components/common/icon/appicon.vue.d.ts.map +1 -0
- package/lib/components/common/icon/fullscreen.vue.d.ts +4 -0
- package/lib/components/common/icon/fullscreen.vue.d.ts.map +1 -0
- package/lib/components/common/icon/helper.vue.d.ts +23 -0
- package/lib/components/common/icon/helper.vue.d.ts.map +1 -0
- package/lib/components/common/icon/index.vue.d.ts +244 -0
- package/lib/components/common/icon/index.vue.d.ts.map +1 -0
- package/lib/components/common/icon/layoutIcon.vue.d.ts +44 -0
- package/lib/components/common/icon/layoutIcon.vue.d.ts.map +1 -0
- package/lib/components/common/icon/projectIcon.vue.d.ts +60 -0
- package/lib/components/common/icon/projectIcon.vue.d.ts.map +1 -0
- package/lib/components/common/icon/toolIcon.vue.d.ts +44 -0
- package/lib/components/common/icon/toolIcon.vue.d.ts.map +1 -0
- package/lib/components/common/index.d.ts +19 -0
- package/lib/components/common/index.d.ts.map +1 -0
- package/lib/components/common/tooltip/index.vue.d.ts +22 -0
- package/lib/components/common/tooltip/index.vue.d.ts.map +1 -0
- package/lib/components/content/dialog/excelForm.vue.d.ts +31 -0
- package/lib/components/content/dialog/excelForm.vue.d.ts.map +1 -0
- package/lib/components/content/dialog/index.vue.d.ts +35 -0
- package/lib/components/content/dialog/index.vue.d.ts.map +1 -0
- package/lib/components/content/dialog/uploadForm.vue.d.ts +25 -0
- package/lib/components/content/dialog/uploadForm.vue.d.ts.map +1 -0
- package/lib/components/content/drawer/index.vue.d.ts +27 -0
- package/lib/components/content/drawer/index.vue.d.ts.map +1 -0
- package/lib/components/content/form/formItem.vue.d.ts +26 -0
- package/lib/components/content/form/formItem.vue.d.ts.map +1 -0
- package/lib/components/content/form/index.vue.d.ts +26 -0
- package/lib/components/content/form/index.vue.d.ts.map +1 -0
- package/lib/components/content/index.d.ts +27 -0
- package/lib/components/content/index.d.ts.map +1 -0
- package/lib/components/content/search/index.vue.d.ts +30 -0
- package/lib/components/content/search/index.vue.d.ts.map +1 -0
- package/lib/components/content/search/searchItem.vue.d.ts +24 -0
- package/lib/components/content/search/searchItem.vue.d.ts.map +1 -0
- package/lib/components/content/table/index.vue.d.ts +37 -0
- package/lib/components/content/table/index.vue.d.ts.map +1 -0
- package/lib/components/content/table/tableOperate.vue.d.ts +19 -0
- package/lib/components/content/table/tableOperate.vue.d.ts.map +1 -0
- package/lib/components/content/toolbar/icontool.vue.d.ts +8 -0
- package/lib/components/content/toolbar/icontool.vue.d.ts.map +1 -0
- package/lib/components/content/toolbar/index.vue.d.ts +19 -0
- package/lib/components/content/toolbar/index.vue.d.ts.map +1 -0
- package/lib/components/content/tree/index.vue.d.ts +47 -0
- package/lib/components/content/tree/index.vue.d.ts.map +1 -0
- package/lib/components/error/error403.vue.d.ts +4 -0
- package/lib/components/error/error403.vue.d.ts.map +1 -0
- package/lib/components/error/error404.vue.d.ts +4 -0
- package/lib/components/error/error404.vue.d.ts.map +1 -0
- package/lib/components/form/aceEditor/aceConfig.d.ts +9 -0
- package/lib/components/form/aceEditor/aceConfig.d.ts.map +1 -0
- package/lib/components/form/aceEditor/index.vue.d.ts +13 -0
- package/lib/components/form/aceEditor/index.vue.d.ts.map +1 -0
- package/lib/components/form/autoComplete/index.vue.d.ts +140 -0
- package/lib/components/form/autoComplete/index.vue.d.ts.map +1 -0
- package/lib/components/form/cascader/index.vue.d.ts +110 -0
- package/lib/components/form/cascader/index.vue.d.ts.map +1 -0
- package/lib/components/form/checkbox/index.vue.d.ts +129 -0
- package/lib/components/form/checkbox/index.vue.d.ts.map +1 -0
- package/lib/components/form/datePicker/index.vue.d.ts +7 -0
- package/lib/components/form/datePicker/index.vue.d.ts.map +1 -0
- package/lib/components/form/index.d.ts +41 -0
- package/lib/components/form/index.d.ts.map +1 -0
- package/lib/components/form/input/index.vue.d.ts +27 -0
- package/lib/components/form/input/index.vue.d.ts.map +1 -0
- package/lib/components/form/input/inputIcon.vue.d.ts +11 -0
- package/lib/components/form/input/inputIcon.vue.d.ts.map +1 -0
- package/lib/components/form/input/inputNumber.vue.d.ts +4 -0
- package/lib/components/form/input/inputNumber.vue.d.ts.map +1 -0
- package/lib/components/form/input/inputPassword.vue.d.ts +4 -0
- package/lib/components/form/input/inputPassword.vue.d.ts.map +1 -0
- package/lib/components/form/propEditor/index.vue.d.ts +13 -0
- package/lib/components/form/propEditor/index.vue.d.ts.map +1 -0
- package/lib/components/form/radio/index.vue.d.ts +134 -0
- package/lib/components/form/radio/index.vue.d.ts.map +1 -0
- package/lib/components/form/radio/radioStatus.vue.d.ts +32 -0
- package/lib/components/form/radio/radioStatus.vue.d.ts.map +1 -0
- package/lib/components/form/rangePicker/index.vue.d.ts +17 -0
- package/lib/components/form/rangePicker/index.vue.d.ts.map +1 -0
- package/lib/components/form/select/index.vue.d.ts +143 -0
- package/lib/components/form/select/index.vue.d.ts.map +1 -0
- package/lib/components/form/switch/index.vue.d.ts +44 -0
- package/lib/components/form/switch/index.vue.d.ts.map +1 -0
- package/lib/components/form/textarea/index.vue.d.ts +4 -0
- package/lib/components/form/textarea/index.vue.d.ts.map +1 -0
- package/lib/components/form/transfer/index.vue.d.ts +39 -0
- package/lib/components/form/transfer/index.vue.d.ts.map +1 -0
- package/lib/components/form/transfer/transferTable.vue.d.ts +39 -0
- package/lib/components/form/transfer/transferTable.vue.d.ts.map +1 -0
- package/lib/components/form/treeSelect/index.vue.d.ts +39 -0
- package/lib/components/form/treeSelect/index.vue.d.ts.map +1 -0
- package/lib/components/form/upload/uploadList.vue.d.ts +477 -0
- package/lib/components/form/upload/uploadList.vue.d.ts.map +1 -0
- package/lib/components/index.d.ts +9 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/layout/breadcrumb/index.vue.d.ts +4 -0
- package/lib/components/layout/breadcrumb/index.vue.d.ts.map +1 -0
- package/lib/components/layout/content/index.vue.d.ts +23 -0
- package/lib/components/layout/content/index.vue.d.ts.map +1 -0
- package/lib/components/layout/datetime/index.vue.d.ts +4 -0
- package/lib/components/layout/datetime/index.vue.d.ts.map +1 -0
- package/lib/components/layout/header/headerExits.vue.d.ts +4 -0
- package/lib/components/layout/header/headerExits.vue.d.ts.map +1 -0
- package/lib/components/layout/header/index.vue.d.ts +4 -0
- package/lib/components/layout/header/index.vue.d.ts.map +1 -0
- package/lib/components/layout/index.d.ts +17 -0
- package/lib/components/layout/index.d.ts.map +1 -0
- package/lib/components/layout/menu/index.vue.d.ts +7 -0
- package/lib/components/layout/menu/index.vue.d.ts.map +1 -0
- package/lib/components/layout/menu/menuTabs.vue.d.ts +4 -0
- package/lib/components/layout/menu/menuTabs.vue.d.ts.map +1 -0
- package/lib/components/layout/page/basicLayout.vue.d.ts +7 -0
- package/lib/components/layout/page/basicLayout.vue.d.ts.map +1 -0
- package/lib/es/AceEditor/index.js +168 -0
- package/lib/es/BasicLayout/index.js +4 -0
- package/lib/es/Error403/index.js +4 -0
- package/lib/es/Error404/index.js +4 -0
- package/lib/es/ExcelForm/index.js +5 -0
- package/lib/es/UploadForm/index.js +5 -0
- package/lib/index.d.ts +2 -0
- package/lib/webui.css +1 -0
- package/lib/webui.es.js +3349 -0
- package/package.json +66 -0
- package/plugins/vite-plugin-auto-generate-vue.ts +105 -0
- package/postcss.config.ts +6 -0
- package/src/assets/global.css +9 -0
- package/src/components/common/button/index.vue +126 -0
- package/src/components/common/icon/appicon.vue +28 -0
- package/src/components/common/icon/fullscreen.vue +13 -0
- package/src/components/common/icon/helper.vue +30 -0
- package/src/components/common/icon/index.vue +426 -0
- package/src/components/common/icon/layoutIcon.vue +33 -0
- package/src/components/common/icon/projectIcon.vue +41 -0
- package/src/components/common/icon/toolIcon.vue +33 -0
- package/src/components/common/index.ts +19 -0
- package/src/components/common/tooltip/index.vue +25 -0
- package/src/components/content/dialog/excelForm.vue +479 -0
- package/src/components/content/dialog/index.vue +149 -0
- package/src/components/content/dialog/uploadForm.vue +228 -0
- package/src/components/content/drawer/index.vue +93 -0
- package/src/components/content/form/formItem.vue +76 -0
- package/src/components/content/form/index.vue +48 -0
- package/src/components/content/index.ts +32 -0
- package/src/components/content/search/index.vue +135 -0
- package/src/components/content/search/searchItem.vue +52 -0
- package/src/components/content/table/index.vue +215 -0
- package/src/components/content/table/tableOperate.vue +131 -0
- package/src/components/content/toolbar/icontool.vue +151 -0
- package/src/components/content/toolbar/index.vue +107 -0
- package/src/components/content/tree/index.vue +140 -0
- package/src/components/error/error403.vue +14 -0
- package/src/components/error/error404.vue +14 -0
- package/src/components/form/aceEditor/aceConfig.ts +90 -0
- package/src/components/form/aceEditor/index.vue +175 -0
- package/src/components/form/autoComplete/index.vue +171 -0
- package/src/components/form/cascader/index.vue +110 -0
- package/src/components/form/checkbox/index.vue +108 -0
- package/src/components/form/datePicker/index.vue +29 -0
- package/src/components/form/index.ts +54 -0
- package/src/components/form/input/index.vue +70 -0
- package/src/components/form/input/inputIcon.vue +39 -0
- package/src/components/form/input/inputNumber.vue +23 -0
- package/src/components/form/input/inputPassword.vue +22 -0
- package/src/components/form/propEditor/index.vue +81 -0
- package/src/components/form/radio/index.vue +132 -0
- package/src/components/form/radio/radioStatus.vue +42 -0
- package/src/components/form/rangePicker/index.vue +64 -0
- package/src/components/form/select/index.vue +186 -0
- package/src/components/form/switch/index.vue +58 -0
- package/src/components/form/textarea/index.vue +23 -0
- package/src/components/form/transfer/index.vue +95 -0
- package/src/components/form/transfer/transferTable.vue +124 -0
- package/src/components/form/treeSelect/index.vue +108 -0
- package/src/components/form/upload/uploadList.vue +235 -0
- package/src/components/index.ts +97 -0
- package/src/components/layout/breadcrumb/index.vue +38 -0
- package/src/components/layout/content/index.vue +28 -0
- package/src/components/layout/datetime/index.vue +16 -0
- package/src/components/layout/header/headerExits.vue +28 -0
- package/src/components/layout/header/index.vue +43 -0
- package/src/components/layout/index.ts +16 -0
- package/src/components/layout/menu/index.vue +64 -0
- package/src/components/layout/menu/menuTabs.vue +56 -0
- package/src/components/layout/page/basicLayout.vue +67 -0
- package/src/vite-env.d.ts +8 -0
- package/tailwind.config.ts +11 -0
- package/tsconfig.json +53 -0
- package/vite.config.ts +117 -0
- package//344/273/243/347/240/201/350/247/204/350/214/203/345/217/212/351/243/216/346/240/274/346/214/207/345/215/227.md +116 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { onMounted, ref, watch } from 'vue';
|
|
3
|
+
import { Layout, LayoutSider } from 'ant-design-vue';
|
|
4
|
+
import Tooltip from '../../common/tooltip/index.vue';
|
|
5
|
+
import Icon from '../../common/icon/index.vue';
|
|
6
|
+
import Menu from '../menu/index.vue';
|
|
7
|
+
import Header from '../header/index.vue';
|
|
8
|
+
import MenuTabs from '../menu/menuTabs.vue';
|
|
9
|
+
import AppIcon from '../../common/icon/appicon.vue';
|
|
10
|
+
import { useAppInfo, usePageInfo, useSettingInfo } from '@skyfox2000/webbase';
|
|
11
|
+
import message from 'vue-m-message';
|
|
12
|
+
|
|
13
|
+
const props = defineProps<{ routes: any }>();
|
|
14
|
+
|
|
15
|
+
const appInfoStore = useAppInfo();
|
|
16
|
+
const settingInfoStore = useSettingInfo();
|
|
17
|
+
const pageInfoStore = usePageInfo();
|
|
18
|
+
|
|
19
|
+
const bodyClass = ref('h-[calc(100vh-80px)]');
|
|
20
|
+
watch(
|
|
21
|
+
() => settingInfoStore.fullscreen,
|
|
22
|
+
(newVal) => {
|
|
23
|
+
bodyClass.value = newVal ? 'h-[calc(100vh-40px)]' : 'h-[calc(100vh-80px)]';
|
|
24
|
+
},
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
onMounted(() => {
|
|
28
|
+
message.closeAll();
|
|
29
|
+
});
|
|
30
|
+
</script>
|
|
31
|
+
<template>
|
|
32
|
+
<Layout class="h-screen">
|
|
33
|
+
<LayoutSider
|
|
34
|
+
class="overflow-auto h-screen left-0 top-0 bottom-0"
|
|
35
|
+
v-model:collapsed="settingInfoStore.menuCollapse"
|
|
36
|
+
collapsible
|
|
37
|
+
v-if="!settingInfoStore.fullscreen"
|
|
38
|
+
>
|
|
39
|
+
<div
|
|
40
|
+
class="h-[40px] max-h-[40px] bg-[rgba(240,240,240,0.2)] flex flex-nowrap items-center justify-center text-white font-bold text-lg overflow-hidden text-ellipsis"
|
|
41
|
+
>
|
|
42
|
+
<Tooltip :title="settingInfoStore.menuCollapse ? appInfoStore.appInfo.Name : ''" placement="right">
|
|
43
|
+
<Icon
|
|
44
|
+
v-if="appInfoStore.appInfo.Icon?.startsWith('sym-')"
|
|
45
|
+
:icon="appInfoStore.appInfo.Icon"
|
|
46
|
+
fontsize="30px"
|
|
47
|
+
size="26px"
|
|
48
|
+
/>
|
|
49
|
+
<AppIcon v-else :icon="appInfoStore.appInfo.Icon" class="mx-1" />
|
|
50
|
+
</Tooltip>
|
|
51
|
+
<span v-if="!settingInfoStore.menuCollapse" class="ml-[10px]">{{ appInfoStore.appInfo.Name }}</span>
|
|
52
|
+
</div>
|
|
53
|
+
<Menu :routes="props.routes"></Menu>
|
|
54
|
+
</LayoutSider>
|
|
55
|
+
<Layout class="overflow-y-auto block">
|
|
56
|
+
<Header v-if="!settingInfoStore.fullscreen"></Header>
|
|
57
|
+
<MenuTabs v-if="pageInfoStore.TabEnabled"></MenuTabs>
|
|
58
|
+
<div class="relative overflow-y-auto" :class="bodyClass">
|
|
59
|
+
<router-view v-slot="{ Component, route }">
|
|
60
|
+
<keep-alive :include="appInfoStore.CachedComponents" :exclude="appInfoStore.ExcludeComponents">
|
|
61
|
+
<component :is="appInfoStore.cacheComponent(Component, route)" />
|
|
62
|
+
</keep-alive>
|
|
63
|
+
</router-view>
|
|
64
|
+
</div>
|
|
65
|
+
</Layout>
|
|
66
|
+
</Layout>
|
|
67
|
+
</template>
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"declarationMap": true,
|
|
6
|
+
"emitDeclarationOnly": false,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"target": "ESNext",
|
|
9
|
+
"useDefineForClassFields": true,
|
|
10
|
+
"module": "ESNext",
|
|
11
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
12
|
+
"skipLibCheck": true,
|
|
13
|
+
"removeComments": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
|
|
16
|
+
"composite": true,
|
|
17
|
+
"allowSyntheticDefaultImports": true,
|
|
18
|
+
|
|
19
|
+
/* Bundler mode */
|
|
20
|
+
"moduleResolution": "Bundler",
|
|
21
|
+
"resolveJsonModule": true,
|
|
22
|
+
"isolatedModules": true,
|
|
23
|
+
"noEmit": false,
|
|
24
|
+
"jsx": "preserve",
|
|
25
|
+
|
|
26
|
+
/* Linting */
|
|
27
|
+
"strict": true,
|
|
28
|
+
"noUnusedLocals": true,
|
|
29
|
+
"noUnusedParameters": true,
|
|
30
|
+
"noFallthroughCasesInSwitch": true,
|
|
31
|
+
"baseUrl": ".",
|
|
32
|
+
"paths": {
|
|
33
|
+
"@/*": ["src/*"]
|
|
34
|
+
},
|
|
35
|
+
"typeRoots": ["./node_modules/@types", "./types"],
|
|
36
|
+
"rootDir": "./",
|
|
37
|
+
"outDir": "lib",
|
|
38
|
+
|
|
39
|
+
"allowJs": true,
|
|
40
|
+
"types": ["vite/client", "node"],
|
|
41
|
+
"sourceMap": true,
|
|
42
|
+
"verbatimModuleSyntax": false
|
|
43
|
+
},
|
|
44
|
+
"include": [
|
|
45
|
+
"src/**/**.ts",
|
|
46
|
+
"src/**/**.d.ts",
|
|
47
|
+
"src/**/**.vue",
|
|
48
|
+
"types/**/*.d.ts",
|
|
49
|
+
"vite.config.ts",
|
|
50
|
+
"plugins/**/*.ts"
|
|
51
|
+
],
|
|
52
|
+
"exclude": ["node_modules", "lib", "dist"]
|
|
53
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ConfigEnv, defineConfig, loadEnv } from 'vite';
|
|
2
|
+
import vue from '@vitejs/plugin-vue';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
// import tailwindcss from 'tailwindcss';
|
|
5
|
+
// import autoGenerateVue from './plugins/vite-plugin-auto-generate-vue';
|
|
6
|
+
import dts from 'vite-plugin-dts';
|
|
7
|
+
|
|
8
|
+
// https://vitejs.dev/config/
|
|
9
|
+
export default defineConfig(({ mode }: ConfigEnv) => {
|
|
10
|
+
const root = process.cwd();
|
|
11
|
+
const env = loadEnv(mode, root);
|
|
12
|
+
console.log(new Date().toLocaleTimeString(), ' ', env);
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
plugins: [
|
|
16
|
+
// autoGenerateVue({
|
|
17
|
+
// dir: './src/components',
|
|
18
|
+
// skip: ['./src/components/error', './src/components/form/aceEditor', './src/components/layout/page'],
|
|
19
|
+
// output: './src/components/index.ts',
|
|
20
|
+
// }),
|
|
21
|
+
vue(),
|
|
22
|
+
dts({
|
|
23
|
+
outDir: 'lib',
|
|
24
|
+
entryRoot: 'src',
|
|
25
|
+
// 确保Vue文件也能生成类型
|
|
26
|
+
include: ['src/components/**/*.ts', 'src/components/**/*.vue'],
|
|
27
|
+
// 排除不需要的文件
|
|
28
|
+
exclude: ['node_modules/**', 'src/components/**/*.test.ts'],
|
|
29
|
+
// 不使用API Extractor来生成类型
|
|
30
|
+
rollupTypes: false,
|
|
31
|
+
// 启用静态导入,避免某些Vue模块解析问题
|
|
32
|
+
staticImport: true,
|
|
33
|
+
// 生成.d.ts入口文件
|
|
34
|
+
insertTypesEntry: true,
|
|
35
|
+
// 复制外部.d.ts文件
|
|
36
|
+
copyDtsFiles: true,
|
|
37
|
+
}),
|
|
38
|
+
],
|
|
39
|
+
// esmExternals: true,
|
|
40
|
+
// css: {
|
|
41
|
+
// postcss: {
|
|
42
|
+
// plugins: [tailwindcss()],
|
|
43
|
+
// },
|
|
44
|
+
// },
|
|
45
|
+
resolve: {
|
|
46
|
+
alias: {
|
|
47
|
+
'@': path.resolve('./src'),
|
|
48
|
+
'@skyfox2000/fapi': path.resolve('../502417_fapi'),
|
|
49
|
+
'@skyfox2000/microbase': path.resolve('../502424_MicroBase'),
|
|
50
|
+
'@skyfox2000/webabase': path.resolve('../502428_WebBase'),
|
|
51
|
+
},
|
|
52
|
+
extensions: ['.js', '.ts', '.vue', 'json'],
|
|
53
|
+
},
|
|
54
|
+
build: {
|
|
55
|
+
outDir: 'lib',
|
|
56
|
+
assetsDir: 'assets',
|
|
57
|
+
lib: {
|
|
58
|
+
entry: {
|
|
59
|
+
index: 'src/components/index.ts',
|
|
60
|
+
AceEditor: 'src/components/form/aceEditor/index.vue',
|
|
61
|
+
ExcelForm: 'src/components/content/dialog/excelForm.vue',
|
|
62
|
+
UploadForm: 'src/components/content/dialog/uploadForm.vue',
|
|
63
|
+
Error403: 'src/components/error/error403.vue',
|
|
64
|
+
Error404: 'src/components/error/error404.vue',
|
|
65
|
+
BasicLayout: 'src/components/layout/page/basicLayout.vue',
|
|
66
|
+
},
|
|
67
|
+
fileName: (format, entryName) => {
|
|
68
|
+
if (entryName === 'index') return `webui.${format}.js`;
|
|
69
|
+
return `es/${entryName}/index.js`;
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
rollupOptions: {
|
|
73
|
+
// 外部化处理那些你并不打算打包进库的依赖
|
|
74
|
+
external: [
|
|
75
|
+
'pinia',
|
|
76
|
+
'pinia-plugin-persistedstate',
|
|
77
|
+
'dayjs',
|
|
78
|
+
'vue',
|
|
79
|
+
'vue-router',
|
|
80
|
+
'ant-design-vue',
|
|
81
|
+
'vue-m-message',
|
|
82
|
+
'@skyfox2000/fapi',
|
|
83
|
+
'@skyfox2000/webbase',
|
|
84
|
+
'@skyfox2000/microbase',
|
|
85
|
+
|
|
86
|
+
'@vue-office/excel',
|
|
87
|
+
// 添加ace相关的依赖为external
|
|
88
|
+
'ace-builds',
|
|
89
|
+
'vue3-ace-editor',
|
|
90
|
+
'ace-builds/src-min-noconflict/ext-language_tools',
|
|
91
|
+
'ace-builds/src-min-noconflict/mode-json',
|
|
92
|
+
'ace-builds/src-min-noconflict/mode-javascript',
|
|
93
|
+
'ace-builds/src-min-noconflict/mode-yaml',
|
|
94
|
+
'ace-builds/src-min-noconflict/theme-github',
|
|
95
|
+
'ace-builds/src-min-noconflict/theme-monokai',
|
|
96
|
+
'ace-builds/src-min-noconflict/theme-twilight',
|
|
97
|
+
],
|
|
98
|
+
// 如果你使用 TypeScript,则需要提供类型声明文件的输出路径
|
|
99
|
+
output: [
|
|
100
|
+
{
|
|
101
|
+
globals: {}, // 这里指定 crypto-js 的全局变量名为 CryptoJS
|
|
102
|
+
extend: false,
|
|
103
|
+
format: 'es',
|
|
104
|
+
dir: 'lib',
|
|
105
|
+
chunkFileNames: (assetInfo) => {
|
|
106
|
+
let name = assetInfo.name;
|
|
107
|
+
if (name.indexOf('.') > -1) name = name.substring(0, name.indexOf('.'));
|
|
108
|
+
return `assets/modules/${name}-[hash].js`;
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
minify: true, // 开启压缩
|
|
114
|
+
sourcemap: false,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# 代码规范及风格指南
|
|
2
|
+
|
|
3
|
+
1. 技术栈要求:
|
|
4
|
+
|
|
5
|
+
> 核心技术栈: Vue3 + TypeScript + Vite4 + Pinia + VueRouter
|
|
6
|
+
>
|
|
7
|
+
> UI组件: [AntDesign-vue v3.2.x](https://antdv.com/components/overview)
|
|
8
|
+
>
|
|
9
|
+
> CSS预处理器: [Windi CSS](https://windicss.org/integrations/vite.html)(优先), 其次`less`
|
|
10
|
+
>
|
|
11
|
+
> Vite插件:
|
|
12
|
+
>
|
|
13
|
+
> * [File system based route generator](https://github.com/hannoeru/vite-plugin-pages)
|
|
14
|
+
> * [Vue Layouts](https://github.com/JohnCampionJr/vite-plugin-vue-layouts)
|
|
15
|
+
> * [Auto import APIs](https://github.com/antfu/unplugin-auto-import)
|
|
16
|
+
> * [Components auto importing](https://github.com/antfu/unplugin-vue-components)
|
|
17
|
+
|
|
18
|
+
2. Git commit 风格指南
|
|
19
|
+
|
|
20
|
+
> - feat: 增加新功能
|
|
21
|
+
> - fix: 修复问题
|
|
22
|
+
> - style: 代码风格相关无影响运行结果的
|
|
23
|
+
> - perf: 优化/性能提升
|
|
24
|
+
> - refactor: 重构
|
|
25
|
+
> - revert: 撤销修改
|
|
26
|
+
> - test: 测试相关
|
|
27
|
+
> - docs: 文档/注释
|
|
28
|
+
> - chore: 依赖更新/脚手架配置修改等
|
|
29
|
+
> - ci: 持续集成
|
|
30
|
+
|
|
31
|
+
3. 使用`pnpm`进行包管理
|
|
32
|
+
|
|
33
|
+
4. `README.md`中要写清楚如下内容:
|
|
34
|
+
|
|
35
|
+
* 目录结构说明
|
|
36
|
+
* 使用到的技术栈: 如第三方组件库, UI库, 工具库等等
|
|
37
|
+
* 最低NodeJS的版本要求
|
|
38
|
+
* 初始化项目的过程: 如何安装NodeJS, pnpm, 如何安装依赖, 如何启用项目
|
|
39
|
+
* 打包: 打包的命令, 注意事项等
|
|
40
|
+
|
|
41
|
+
5. 代码书写风格可以不使用perttier等插件进行约束, 但总体书写风格请参考prettierrc.json:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"semi": true,
|
|
46
|
+
"tabWidth": 2,
|
|
47
|
+
"useTabs": false,
|
|
48
|
+
"singleQuote": true,
|
|
49
|
+
"quoteProps": 'as-needed',
|
|
50
|
+
"printWidth": 120,
|
|
51
|
+
"trailingComma": "all",
|
|
52
|
+
"endOfLine": 'lf',
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
6. 项目中若用到了`ES6`之后更高级的特性, Build时请考虑是否需要`Polyfill`, 参考官方插件`@vitejs/plugin-legacy`
|
|
57
|
+
|
|
58
|
+
> `备注`: 需要支持Chrome 69以上
|
|
59
|
+
|
|
60
|
+
7. 请使用MockJS进行API Mock, 参考插件`vite-plugin-mock`
|
|
61
|
+
|
|
62
|
+
8. 参考Vite中关于dotenv章节的说明, 使用.env区分不同环境, 如: staing, dev, production. 同时结合第四点, 实现dev使用Mockjs, sating使用测试接口地址, production使用正式接口地址
|
|
63
|
+
|
|
64
|
+
9. TypeScript的typing类型声明, 如果是公用的, 统一放在 `src/typings`下, 如果是组件内部使用的类型声明, 定义在组件内部或者同级目录下
|
|
65
|
+
|
|
66
|
+
10. 所有的 API 请求和响应参数, 都要申明ts的typings(放在统一的`api.d.ts`文件中), 同时入参和出参有公共参数, 请抽离, 参考如下:
|
|
67
|
+
```typescript
|
|
68
|
+
export type AnyObject = Record<string | number, any> | Array | any;
|
|
69
|
+
|
|
70
|
+
export declare namespace Request {
|
|
71
|
+
|
|
72
|
+
interface SignableRequest<D = AnyObject> {
|
|
73
|
+
traceid: string; // 跟踪ID
|
|
74
|
+
timestamp: string; // 请求时间: yyyy-MM-dd HH:mm:ss
|
|
75
|
+
data?: D;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface PagingRequest {
|
|
79
|
+
pageNo: number;
|
|
80
|
+
pageSize: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
interface QueryUserInfo extends SignableRequest {
|
|
84
|
+
userId: number;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export declare namespace Model {
|
|
89
|
+
|
|
90
|
+
interface UserInfo {
|
|
91
|
+
userName: string;
|
|
92
|
+
userId: string;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export declare namespace Response {
|
|
97
|
+
|
|
98
|
+
interface AbstractResponse<D = AnyObject> {
|
|
99
|
+
status: number; // 状态码
|
|
100
|
+
message?: string;
|
|
101
|
+
timestamp: string; // 请求时间: yyyy-MM-dd HH:mm:ss
|
|
102
|
+
data?: D;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
declare type User = AbstractResponse<Model.UserInfo>;
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
11. API接口请统一封装在 `src/api`目录下, 根据模块进行文件分割, 避免各个API URL散落在各个页面和组件中
|
|
110
|
+
|
|
111
|
+
12. Vue风格指南, 请参考: https://vuejs.org/style-guide/rules-strongly-recommended.html#priority-b-rules-strongly-recommended
|
|
112
|
+
1. 单文件组件, 首字母要大写, 不要仅用一个单词进行命名, 使用驼峰命名. 项目有这样的命名`left.vue`
|
|
113
|
+
2. Base组件, 请统一在组件命名时, 增加前缀, 如`Base`或`App`. 项目有这样的命名`header.vue`
|
|
114
|
+
3. pages下的Vue文件, 如果是自定义组件的, 参考上述要求, 如果是用作路由的, 请使用小写
|
|
115
|
+
|
|
116
|
+
13. import 路径禁止出现这种 `import shangHaiMap from "./../../../assets/shanghai.json"`, 使用`@`符号代替根路径, 调整成 `import shangHaiMap from '@/assets/shanghai.json''`
|