fix: 修复部分缺陷
This commit is contained in:
parent
ad343567b7
commit
b14435e35b
|
@ -22,6 +22,7 @@
|
|||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.7.9",
|
||||
"boxen": "^8.0.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"esbuild": "^0.25.1",
|
||||
"eslint": "^9.9.1",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
|
@ -29,8 +30,6 @@
|
|||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"eslint-plugin-vue": "^9.27.0",
|
||||
"gradient-string": "^3.0.0",
|
||||
"js-cookie": "^3.0.5",
|
||||
"list": "^2.0.19",
|
||||
"naive-ui": "^2.41.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"pinia": "^2.3.1",
|
||||
|
@ -48,7 +47,6 @@
|
|||
"stylelint-prettier": "^5.0.3",
|
||||
"terser": "^5.39.0",
|
||||
"unocss": "^66.0.0",
|
||||
"vfonts": "^0.0.3",
|
||||
"vite-plugin-cdn-import": "^1.0.1",
|
||||
"vite-plugin-remove-console": "^2.2.0",
|
||||
"vite-plugin-vue-inspector": "^5.3.1",
|
||||
|
|
|
@ -62,12 +62,6 @@ importers:
|
|||
gradient-string:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0
|
||||
js-cookie:
|
||||
specifier: ^3.0.5
|
||||
version: 3.0.5
|
||||
list:
|
||||
specifier: ^2.0.19
|
||||
version: 2.0.19
|
||||
naive-ui:
|
||||
specifier: ^2.41.0
|
||||
version: 2.41.0(vue@3.5.13(typescript@5.7.3))
|
||||
|
@ -119,9 +113,6 @@ importers:
|
|||
unocss:
|
||||
specifier: ^66.0.0
|
||||
version: 66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))
|
||||
vfonts:
|
||||
specifier: ^0.0.3
|
||||
version: 0.0.3
|
||||
vite-plugin-cdn-import:
|
||||
specifier: ^1.0.1
|
||||
version: 1.0.1(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
|
||||
|
@ -1980,10 +1971,6 @@ packages:
|
|||
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
|
||||
hasBin: true
|
||||
|
||||
js-cookie@3.0.5:
|
||||
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
js-tokens@4.0.0:
|
||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||
|
||||
|
@ -2050,9 +2037,6 @@ packages:
|
|||
lines-and-columns@1.2.4:
|
||||
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
||||
|
||||
list@2.0.19:
|
||||
resolution: {integrity: sha512-nnVaRp4RaMAQkCpypTThsdxKqgPMiSwJq93eAm2/IbpUa8sd04XKBhkKu+bMk63HmdjK8b8Cuh4xARHWX2ye/Q==}
|
||||
|
||||
local-pkg@1.0.0:
|
||||
resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==}
|
||||
engines: {node: '>=14'}
|
||||
|
@ -2729,9 +2713,6 @@ packages:
|
|||
peerDependencies:
|
||||
vue: ^3.0.11
|
||||
|
||||
vfonts@0.0.3:
|
||||
resolution: {integrity: sha512-nguyw8L6Un8eelg1vQ31vIU2ESxqid7EYmy8V+MDeMaHBqaRSkg3dTBToC1PR00D89UzS/SLkfYPnx0Wf23IQQ==}
|
||||
|
||||
vite-plugin-cdn-import@1.0.1:
|
||||
resolution: {integrity: sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==}
|
||||
|
||||
|
@ -4695,8 +4676,6 @@ snapshots:
|
|||
|
||||
jiti@2.4.2: {}
|
||||
|
||||
js-cookie@3.0.5: {}
|
||||
|
||||
js-tokens@4.0.0: {}
|
||||
|
||||
js-tokens@9.0.1: {}
|
||||
|
@ -4761,8 +4740,6 @@ snapshots:
|
|||
|
||||
lines-and-columns@1.2.4: {}
|
||||
|
||||
list@2.0.19: {}
|
||||
|
||||
local-pkg@1.0.0:
|
||||
dependencies:
|
||||
mlly: 1.7.4
|
||||
|
@ -5482,8 +5459,6 @@ snapshots:
|
|||
evtd: 0.2.4
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
|
||||
vfonts@0.0.3: {}
|
||||
|
||||
vite-plugin-cdn-import@1.0.1(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)):
|
||||
dependencies:
|
||||
rollup-plugin-external-globals: 0.10.0(rollup@4.34.8)
|
||||
|
|
|
@ -5,3 +5,8 @@ import type { BaseResult } from '@/types/request'; /* 获取所有数据表 */
|
|||
export const generator = (data: any) => {
|
||||
return request<any, BaseResult<any>>({ url: '/vms/generator', method: 'post', data });
|
||||
};
|
||||
|
||||
/* 获取vms文件路径 */
|
||||
export const getVmsPathList = () => {
|
||||
return request<any, BaseResult<any>>({ url: '/vms/getVmsPathList', method: 'get' });
|
||||
};
|
||||
|
|
|
@ -23,10 +23,4 @@ export const resetRouter = () => {
|
|||
router.replace({ path: '/' }).then();
|
||||
};
|
||||
|
||||
// router.afterEach((to, from) => {
|
||||
// const toDepth = to.path.split('/').length;
|
||||
// const fromDepth = from.path.split('/').length;
|
||||
// to.meta.transition = toDepth < fromDepth ? 'slide-right' : 'slide-left';
|
||||
// });
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
import { defineStore } from 'pinia';
|
||||
|
||||
import { generator } from '@/api/vms';
|
||||
import { generator, getVmsPathList } from '@/api/vms';
|
||||
|
||||
export const useVmsStore = defineStore('vmsStore', {
|
||||
state: () => ({
|
||||
generators: [],
|
||||
// 生成服务端内容
|
||||
serverOptions: [],
|
||||
// 生成前端内容
|
||||
webOptions: [],
|
||||
}),
|
||||
getters: {},
|
||||
actions: {
|
||||
|
@ -16,8 +20,21 @@ export const useVmsStore = defineStore('vmsStore', {
|
|||
(window as any).$message.error(result.message);
|
||||
}
|
||||
|
||||
this.generators = result.data;
|
||||
this.generators = result.data.map((i) => ({ ...i, path: i.path.replace('.vm', '') }));
|
||||
(window as any).$message.success(`生成成功,共 ${this.generators.length} 数据`);
|
||||
},
|
||||
|
||||
/* 获取vms文件路径 */
|
||||
async getVmsPathList() {
|
||||
const result = await getVmsPathList();
|
||||
// 需要确保已经在 setup 中执行了 window.$message = message
|
||||
if (result.code !== 200) {
|
||||
(window as any).$message.error(result.message);
|
||||
return {};
|
||||
}
|
||||
|
||||
this.webOptions = result.data.web;
|
||||
this.serverOptions = result.data.server;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
|
@ -7,7 +7,7 @@ export function downloadTextAsFile(text: string, filename: string) {
|
|||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
console.log(filename);
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
<script lang="ts" setup>
|
||||
import { NCheckbox, NCheckboxGroup, NFormItemGi, NGrid, NInput, NSpace } from 'naive-ui';
|
||||
|
||||
import { useVmsStore } from '@/store/modules/vms';
|
||||
import SelectButtonGroup from '@/views/generator-code/components/generator/components/select-button-group.vue';
|
||||
import {
|
||||
formOption,
|
||||
formValue,
|
||||
serverOptions,
|
||||
webOptions,
|
||||
} from '@/views/generator-code/components/generator/option';
|
||||
import { formOption, formValue } from '@/views/generator-code/components/generator/option';
|
||||
|
||||
const vmsStore = useVmsStore();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -42,14 +40,18 @@ import {
|
|||
<n-form-item-gi :span="8" label="生成后端" path="generatorServer">
|
||||
<n-checkbox-group v-model:value="formOption.generatorServer">
|
||||
<n-space>
|
||||
<n-checkbox v-for="(item, index) in serverOptions" :key="index" :value="item.name">
|
||||
<n-checkbox
|
||||
v-for="(item, index) in vmsStore.serverOptions"
|
||||
:key="index"
|
||||
:value="item.name"
|
||||
>
|
||||
{{ item.label }}
|
||||
</n-checkbox>
|
||||
|
||||
<!-- 选择按钮 -->
|
||||
<select-button-group
|
||||
v-model:selected="formOption.generatorServer"
|
||||
:data="serverOptions"
|
||||
:data="vmsStore.serverOptions"
|
||||
id-key="name"
|
||||
/>
|
||||
</n-space>
|
||||
|
@ -58,14 +60,18 @@ import {
|
|||
<n-form-item-gi :span="8" label="生成前端" path="generatorWeb">
|
||||
<n-checkbox-group v-model:value="formOption.generatorWeb">
|
||||
<n-space>
|
||||
<n-checkbox v-for="(item, index) in webOptions" :key="index" v-model:value="item.name">
|
||||
<n-checkbox
|
||||
v-for="(item, index) in vmsStore.webOptions"
|
||||
:key="index"
|
||||
v-model:value="item.name"
|
||||
>
|
||||
{{ item.label }}
|
||||
</n-checkbox>
|
||||
|
||||
<!-- 选择按钮 -->
|
||||
<select-button-group
|
||||
v-model:selected="formOption.generatorWeb"
|
||||
:data="webOptions"
|
||||
:data="vmsStore.webOptions"
|
||||
id-key="name"
|
||||
/>
|
||||
</n-space>
|
||||
|
|
|
@ -10,10 +10,8 @@ const message = useMessage();
|
|||
const vmsStore = useVmsStore();
|
||||
|
||||
const download = (code: string, filename: string) => {
|
||||
const extension = filename.includes('web') ? 'ts' : 'java';
|
||||
filename = `${filename.split('/')[1]}.${extension}`;
|
||||
|
||||
let inputValue = ref(filename);
|
||||
filename = filename.split('/')[1];
|
||||
const inputValue = ref(filename);
|
||||
|
||||
dialog.info({
|
||||
title: '修改文件名',
|
||||
|
@ -24,7 +22,7 @@ const download = (code: string, filename: string) => {
|
|||
placeholder="Tiny Input"
|
||||
clearable
|
||||
value={inputValue.value}
|
||||
onInput={(value) => (inputValue.value = value)}
|
||||
onInput={(value: any) => (inputValue.value = value)}
|
||||
/>
|
||||
),
|
||||
onPositiveClick: () => {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import { reactive } from 'vue';
|
||||
|
||||
import { serverOptions, webOptions } from '@/views/generator-code/components/generator/option';
|
||||
import { useVmsStore } from '@/store/modules/vms';
|
||||
|
||||
const vmsStore = useVmsStore();
|
||||
|
||||
export const formOption = reactive({
|
||||
generatorServer: [],
|
||||
|
@ -32,21 +34,21 @@ export const formValueInit = (tableName: any) => {
|
|||
|
||||
/* 全部选择 */
|
||||
export const selectAll = () => {
|
||||
formOption.generatorServer = serverOptions.map((option: any) => option.name);
|
||||
formOption.generatorWeb = webOptions.map((option: any) => option.name);
|
||||
formOption.generatorServer = vmsStore.serverOptions.map((option: any) => option.name);
|
||||
formOption.generatorWeb = vmsStore.webOptions.map((option: any) => option.name);
|
||||
};
|
||||
|
||||
/* 全部反选 */
|
||||
export const selectAllInvert = () => {
|
||||
// 反选server
|
||||
const serverNames: string[] = serverOptions.map((item) => item['name']);
|
||||
const serverNames: string[] = vmsStore.serverOptions.map((item) => item['name']);
|
||||
const generatorServer = formOption.generatorServer;
|
||||
formOption.generatorServer = serverNames.filter(
|
||||
(name: string) => !generatorServer.includes(name)
|
||||
);
|
||||
|
||||
// 反选web
|
||||
const webNames: string[] = webOptions.map((item) => item['name']);
|
||||
const webNames: string[] = vmsStore.webOptions.map((item) => item['name']);
|
||||
const generatorWeb = formOption.generatorWeb;
|
||||
formOption.generatorWeb = webNames.filter((name) => !generatorWeb.includes(name));
|
||||
};
|
||||
|
|
|
@ -3,21 +3,28 @@
|
|||
<generator-form />
|
||||
|
||||
<n-form-item>
|
||||
<n-button-group>
|
||||
<n-button attr-type="button" type="success" @click="selectAll">全部选择</n-button>
|
||||
<n-button attr-type="button" type="warning" @click="selectAllInvert">全部反选</n-button>
|
||||
<n-button attr-type="button" type="error" @click="selectCancelAll">全选取消</n-button>
|
||||
<n-button attr-type="button" type="info" @click="onSubmit">开始生成</n-button>
|
||||
<n-button
|
||||
:disabled="!(vmsStore.generators.length > 0 && formValue.path.length > 0)"
|
||||
attr-type="button"
|
||||
type="info"
|
||||
@click="downloadAll"
|
||||
>
|
||||
{{ formValue.path.length }}
|
||||
下载全部
|
||||
</n-button>
|
||||
</n-button-group>
|
||||
<n-grid class="justify-items-center" cols="3" x-gap="24">
|
||||
<n-gi>
|
||||
<n-button attr-type="button" type="success" @click="selectAll">全部选择</n-button>
|
||||
<n-button attr-type="button" type="warning" @click="selectAllInvert">全部反选</n-button>
|
||||
<n-button attr-type="button" type="error" @click="selectCancelAll">全选取消</n-button>
|
||||
</n-gi>
|
||||
|
||||
<n-gi>
|
||||
<n-button attr-type="button" type="success" @click="onSubmit">开始生成</n-button>
|
||||
<n-button attr-type="button" type="error" @click="() => (vmsStore.generators = [])">
|
||||
清空已生成
|
||||
</n-button>
|
||||
<n-button
|
||||
:disabled="!(vmsStore.generators.length > 0)"
|
||||
attr-type="button"
|
||||
type="primary"
|
||||
@click="downloadAll"
|
||||
>
|
||||
下载全部 {{ vmsStore.generators.length }}
|
||||
</n-button>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
</n-form-item>
|
||||
</n-form>
|
||||
|
||||
|
@ -26,7 +33,7 @@
|
|||
</template>
|
||||
|
||||
<script lang="tsx" setup>
|
||||
import { NButton, NButtonGroup, NForm, NFormItem, useMessage } from 'naive-ui';
|
||||
import { NButton, NForm, NFormItem, NGi, NGrid, useMessage } from 'naive-ui';
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { toRaw } from 'vue-demi';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
@ -55,12 +62,8 @@ const onSubmit = (e: MouseEvent) => {
|
|||
formRef.value?.validate(async (errors: any) => {
|
||||
if (!errors) {
|
||||
// 选择要生成的模板
|
||||
const generatorWeb = formOption.generatorWeb;
|
||||
const generatorServer = formOption.generatorServer;
|
||||
|
||||
// 整理好路径
|
||||
const server = generatorServer.map((server: string) => `server/${server}`);
|
||||
const web = generatorWeb.map((server: string) => `web/${server}`);
|
||||
const web = formOption.generatorWeb;
|
||||
const server = formOption.generatorServer;
|
||||
|
||||
// 整理好数据
|
||||
formValue.path = [...server, ...web];
|
||||
|
@ -85,12 +88,9 @@ const onSubmit = (e: MouseEvent) => {
|
|||
const downloadAll = () => {
|
||||
vmsStore.generators.forEach((vms) => {
|
||||
const code = vms.code;
|
||||
const path = vms.path;
|
||||
const path = vms.path.split('/')[1];
|
||||
|
||||
const extension = path.includes('web') ? 'ts' : 'java';
|
||||
let filename = `${path.split('/')[1]}.${extension}`;
|
||||
|
||||
downloadTextAsFile(code, filename);
|
||||
downloadTextAsFile(code, path);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -98,5 +98,7 @@ onMounted(() => {
|
|||
// 初始化表名称
|
||||
const tableName: any = route.query.tableName;
|
||||
formValueInit(tableName);
|
||||
|
||||
vmsStore.getVmsPathList();
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -7,26 +7,6 @@ const validatorFormOption = () => {
|
|||
return formOption.generatorServer.length > 0 || formOption.generatorWeb.length > 0;
|
||||
};
|
||||
|
||||
// 生成服务端内容
|
||||
export const serverOptions = [
|
||||
{ name: 'controller', label: 'controller' },
|
||||
{ name: 'mapper', label: 'mapper' },
|
||||
{ name: 'resourceMapper', label: 'resourceMapper' },
|
||||
{ name: 'service', label: 'service' },
|
||||
{ name: 'serviceImpl', label: 'serviceImpl' },
|
||||
];
|
||||
|
||||
// 生成前端内容
|
||||
export const webOptions = [
|
||||
{ name: 'api', label: 'api' },
|
||||
{ name: 'columns', label: 'columns' },
|
||||
{ name: 'dialog', label: 'dialog' },
|
||||
{ name: 'hook', label: 'hook' },
|
||||
{ name: 'index', label: 'index' },
|
||||
{ name: 'store', label: 'store' },
|
||||
{ name: 'types', label: 'types' },
|
||||
];
|
||||
|
||||
// 表单验证
|
||||
export const rules: FormRules = {
|
||||
author: { required: true, trigger: ['blur', 'change', 'input'], message: '作者不能为空' },
|
||||
|
|
Loading…
Reference in New Issue