feat: 生成并返回内容

This commit is contained in:
bunny 2025-04-05 16:32:27 +08:00
parent b5e3ea5ffa
commit b795fab7c9
11 changed files with 110 additions and 40 deletions

View File

@ -13,7 +13,6 @@
},
"dependencies": {
"@eslint/js": "^9.21.0",
"@parcel/watcher": "^2.5.1",
"@types/node": "^22.13.10",
"@typescript-eslint/eslint-plugin": "^8.24.1",
"@typescript-eslint/parser": "^8.24.1",

View File

@ -11,9 +11,6 @@ importers:
'@eslint/js':
specifier: ^9.21.0
version: 9.21.0
'@parcel/watcher':
specifier: ^2.5.1
version: 2.5.1
'@types/node':
specifier: ^22.13.10
version: 22.13.10
@ -1354,8 +1351,8 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.3:
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
@ -3479,6 +3476,7 @@ snapshots:
'@parcel/watcher-win32-arm64': 2.5.1
'@parcel/watcher-win32-ia32': 2.5.1
'@parcel/watcher-win32-x64': 2.5.1
optional: true
'@pkgjs/parseargs@0.11.0':
optional: true
@ -4053,7 +4051,7 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
call-bound@1.0.3:
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
@ -4181,7 +4179,8 @@ snapshots:
destr@2.0.3: {}
detect-libc@1.0.3: {}
detect-libc@1.0.3:
optional: true
dir-glob@3.0.1:
dependencies:
@ -4883,7 +4882,8 @@ snapshots:
sax: 1.4.1
optional: true
node-addon-api@7.1.1: {}
node-addon-api@7.1.1:
optional: true
node-fetch-native@1.6.6: {}
@ -5162,14 +5162,14 @@ snapshots:
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.3
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4

View File

@ -1,6 +1,7 @@
<template>
<n-config-provider>
<n-message-provider>
<content />
<router-view v-slot="{ Component, route }">
<transition :name="route.meta.transition || 'fade-transform'" mode="out-in">
<component :is="Component" :key="route.path" />
@ -11,4 +12,6 @@
</template>
<script lang="ts" setup>
import { NConfigProvider, NMessageProvider } from 'naive-ui';
import Content from '@/views/content.vue';
</script>

View File

@ -1,7 +0,0 @@
import request from '@/api/server/requestMock';
import type { BaseResult } from '@/types/request'; /* 获取所有数据表 */
/* 获取所有数据表 */
export const getAllTableMetaData = () => {
return request<any, BaseResult<any>>({ url: '/table/getAllTableMetaData', method: 'get' });
};

7
src/api/vms.ts Normal file
View File

@ -0,0 +1,7 @@
import request from '@/api/server/request';
import type { BaseResult } from '@/types/request'; /* 获取所有数据表 */
/* 获取所有数据表 */
export const generator = (data: any) => {
return request<any, BaseResult<any>>({ url: '/vms/generator', method: 'post', data });
};

View File

@ -1,4 +1,3 @@
import { useMessage } from 'naive-ui';
import { defineStore } from 'pinia';
import { getAllTableMetaData, getColumnInfo, getTableMetaData } from '@/api/table';
@ -12,10 +11,9 @@ export const useTableStore = defineStore('tableStore', {
actions: {
/* 获取所有数据表 */
async getAllTableMetaData() {
const message = useMessage();
const result = await getAllTableMetaData();
if (result.code !== 200) {
message.error(result.message);
(window as any).$message.error(result.message);
}
this.tableList = result.data;
@ -23,10 +21,9 @@ export const useTableStore = defineStore('tableStore', {
/* 获取表属性 */
async getTableMetaData(tableName: string) {
const message = useMessage();
const result = await getTableMetaData({ tableName });
if (result.code !== 200) {
message.error(result.message);
(window as any).$message.error(result.message);
return {};
}
@ -35,10 +32,9 @@ export const useTableStore = defineStore('tableStore', {
/* 获取表属性 */
async getColumnInfo(tableName: string) {
const message = useMessage();
const result = await getColumnInfo({ tableName });
if (result.code !== 200) {
message.error(result.message);
(window as any).$message.error(result.message);
return {};
}

23
src/store/modules/vms.ts Normal file
View File

@ -0,0 +1,23 @@
import { defineStore } from 'pinia';
import { generator } from '@/api/vms';
export const useVmsStore = defineStore('vmsStore', {
state: () => ({
generators: [],
}),
getters: {},
actions: {
/* 获取所有数据表 */
async generator(data: any) {
const result = await generator(data);
// 需要确保已经在 setup 中执行了 window.$message = message
if (result.code !== 200) {
(window as any).$message.error(result.message);
}
this.generators = result.data;
(window as any).$message.success(`生成成功,共 ${this.generators.length} 数据`);
},
},
});

13
src/views/content.vue Normal file
View File

@ -0,0 +1,13 @@
<template></template>
<script>
import { useMessage } from 'naive-ui';
import { defineComponent } from 'vue';
// content
export default defineComponent({
setup() {
window.$message = useMessage();
},
});
</script>

View File

@ -29,7 +29,7 @@
<n-input v-model:value="formValue.tablePrefixes" placeholder="电话号码" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="生成后端" path="generatorServer">
<n-checkbox-group v-model:value="formValue.generatorServer">
<n-checkbox-group v-model:value="formOption.generatorServer">
<n-space>
<n-checkbox v-for="(item, index) in serverOptions" :key="index" :value="item.name">
{{ item.label }}
@ -38,7 +38,7 @@
</n-checkbox-group>
</n-form-item-gi>
<n-form-item-gi :span="8" label="生成前端" path="generatorWeb">
<n-checkbox-group v-model:value="formValue.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">
{{ item.label }}
@ -54,6 +54,23 @@
</n-button>
</n-form-item>
</n-form>
<!-- 生成好的数据 -->
<n-collapse>
<n-collapse-item
v-for="(item, index) in vmsStore.generators"
:key="index"
:name="item.path"
:title="item.path"
>
<n-input
:autosize="{ minRows: 3 }"
:placeholder="item.comment"
:value="item.code"
type="textarea"
/>
</n-collapse-item>
</n-collapse>
</template>
<script lang="ts" setup>
@ -61,6 +78,8 @@ import {
NButton,
NCheckbox,
NCheckboxGroup,
NCollapse,
NCollapseItem,
NForm,
NFormItem,
NFormItemGi,
@ -70,8 +89,10 @@ import {
useMessage,
} from 'naive-ui';
import { onMounted, reactive, ref } from 'vue';
import { toRaw } from 'vue-demi';
import { useRoute } from 'vue-router';
import { useVmsStore } from '@/store/modules/vms';
import {
rules,
serverOptions,
@ -79,8 +100,14 @@ import {
} from '@/views/generator-code/components/generator-form/generatorOptions';
const route = useRoute();
const vmsStore = useVmsStore();
const message = useMessage();
const formRef = ref();
const formOption = reactive({
generatorServer: [],
generatorWeb: [],
});
const formValue = reactive({
author: 'Bunny',
packageName: 'cn.bunny.services',
@ -89,8 +116,7 @@ const formValue = reactive({
tableName: '',
simpleDateFormat: 'yyyy-MM-dd HH:mm:ss',
tablePrefixes: 't_,sys_,qrtz_,log_',
generatorServer: undefined,
generatorWeb: undefined,
path: [],
});
/* 提交表单 */
@ -98,8 +124,23 @@ const onSubmit = (e: MouseEvent) => {
e.preventDefault();
formRef.value?.validate(async (errors: any) => {
if (!errors) {
console.log(formValue);
message.success('验证成功');
//
const generatorWeb = formOption.generatorWeb;
const generatorServer = formOption.generatorServer;
//
const server = generatorServer.map((server: string) => `server/${server}`);
const web = generatorWeb.map((server: string) => `web/${server}`);
//
formValue.path = [...server, ...web];
if (formValue.path.length <= 0) {
message.error(`选择要生成的模板`);
return;
}
//
await vmsStore.generator(toRaw(formValue));
} else {
errors.forEach((error: any) => {
error.forEach((err: any) => {

View File

@ -45,12 +45,12 @@ onMounted(() => {
</template>
<n-tabs animated type="line">
<n-tab-pane name="columns-info" tab="列字段">
<index />
<n-tab-pane name="generator-code" tab="生成">
<generator-form />
</n-tab-pane>
<n-tab-pane name="the beatles" tab="生成">
<generator-form />
<n-tab-pane name="columns-info" tab="列字段">
<index />
</n-tab-pane>
</n-tabs>
</n-card>

View File

@ -1,5 +0,0 @@
<script lang="ts" setup></script>
<template>初始化页面</template>
<style scoped></style>