From c88680ad0983a0daea258fbb4f1b217c29edbb66 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Thu, 26 Mar 2026 11:07:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E6=AE=B5=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend_vue.py | 4 +- generator.py | 45 +- templates/java/21.controller.java.j2 | 2 +- templates/java/CommonController.java.j2 | 66 ++ templates/java/CommonVueEnumsEntity.java.j2 | 21 + templates/java/controller.java.j2 | 33 +- templates/vue/index.vue.j2 | 11 +- utils.py | 18 +- vue-vben-admin/apps/web-antd/src/api/fun.ts | 69 -- .../web-antd/src/router/routes/modules/fun.ts | 31 - .../apps/web-antd/src/views/fun/data.ts | 253 ------- .../apps/web-antd/src/views/fun/form.ts | 276 ------- .../apps/web-antd/src/views/fun/index.vue | 675 ------------------ 13 files changed, 161 insertions(+), 1343 deletions(-) create mode 100644 templates/java/CommonController.java.j2 create mode 100644 templates/java/CommonVueEnumsEntity.java.j2 delete mode 100644 vue-vben-admin/apps/web-antd/src/api/fun.ts delete mode 100644 vue-vben-admin/apps/web-antd/src/router/routes/modules/fun.ts delete mode 100644 vue-vben-admin/apps/web-antd/src/views/fun/data.ts delete mode 100644 vue-vben-admin/apps/web-antd/src/views/fun/form.ts delete mode 100644 vue-vben-admin/apps/web-antd/src/views/fun/index.vue diff --git a/frontend_vue.py b/frontend_vue.py index 7feae27..dc99123 100644 --- a/frontend_vue.py +++ b/frontend_vue.py @@ -24,7 +24,7 @@ def build_fields(table): for c in cols: field = {} field["name"] = to_camel(c["column_name"]) - field["comment"] = c["column_comment"] + field["comment"] = tab_chane_comment(c["column_comment"]) field["type"] = c["data_type"] # ⭐ 在这里调用组件解析 field["component"] = parse_component(c) @@ -45,7 +45,7 @@ def generate(table): EDIT_FIELDS = cfg["frontend"]["editFields"] table_info = get_table(table) - entity = table.replace("health_","") + entity = table # table.replace("health_","") ctx = { "table":table, "table_comment":table_info["table_comment"], diff --git a/generator.py b/generator.py index 8a592a7..29d4622 100644 --- a/generator.py +++ b/generator.py @@ -19,7 +19,7 @@ def build_fields(table_name): "java_name": to_camel(c["column_name"]), "tab_name": c["column_name"], "tab_type": c["data_type"], - "java_get_name": to_m_camel(c["column_name"]), + "java_get_name": to_class(c["column_name"]), "java_type": mysql_to_java(c["data_type"]), "comment": c["column_comment"] }) @@ -80,28 +80,6 @@ def render(template_name, out_path, context, java_version, overwrite=False): def generate(table_names: list[str], model_names: list[str], conf_name: str, over_write: bool, java_version: str): - # context = { - # "mainModule": MAIN_MODULE, - # "moduleName": MODULE_NAME, - # "groupId": GROUP_ID, - # "author": AUTHOR, - # "wechat": WECHAT, - # "date": datetime.now().strftime("%Y-%m-%d"), - # "entityLombokModel": True, - # "package": { - # "Base": BASE_PACKAGE, - # "Common": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.common", - # "Entity": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.entity", - # "Service": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.service", - # "Controller": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.controller", - # "ServiceImpl": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.service.impl", - # "Mapper": f"{BASE_PACKAGE}.{DEFAULT_PREFIX_URL}.mapper" - # }, - # "db": DB, - # "application": APPLICATION, - # "restControllerStyle": REST_CONTROLLER_STYLE - # } - with open(conf_name, "r", encoding="utf-8") as f: cfg = yaml.safe_load(f) cfg = resolve_config(cfg) @@ -140,6 +118,7 @@ def generate(table_names: list[str], model_names: list[str], conf_name: str, ove context.update({ "fields": build_fields(table_name), "table": { + "tabToPath": tab_to_path(table_name), "entity": entity, "lowerEntity": lower_first(entity), "name": table_name, @@ -354,6 +333,26 @@ def generate(table_names: list[str], model_names: list[str], conf_name: str, ove context, java_version ) + case "vue": + # 如果生成vue,则一定要有table_names + if table_names is None or len(table_names) == 0: + print("生成vue相关公共,需要生成相对应的表") + else : + render( + "CommonController.java.j2", + f"{BASE_DIR}{MAIN_OUTPUT_DIR}/controller/CommonController.java", + context, + java_version, + over_write + ) + + render( + "CommonVueEnumsEntity.java.j2", + f"{BASE_DIR}{MAIN_OUTPUT_DIR}/entity/CommonVueEnumsEntity.java", + context, + java_version, + over_write + ) if __name__ == "__main__": args = parse_args() diff --git a/templates/java/21.controller.java.j2 b/templates/java/21.controller.java.j2 index 4a617d0..af9dcd5 100644 --- a/templates/java/21.controller.java.j2 +++ b/templates/java/21.controller.java.j2 @@ -28,7 +28,7 @@ import java.util.List; {% else %} @Controller {% endif %} -@RequestMapping("{{ table.name }}") +@RequestMapping("{{ table.tabToPath }}") public class {{ table.entity }}Controller { @Resource diff --git a/templates/java/CommonController.java.j2 b/templates/java/CommonController.java.j2 new file mode 100644 index 0000000..d0053b7 --- /dev/null +++ b/templates/java/CommonController.java.j2 @@ -0,0 +1,66 @@ +package {{ package.Controller }}; + +//VUE 固定引入 CommonEnums +import {{ package.Entity }}.CommonEnums; +import {{ package.Service }}.{{ table.entity }}Service; +import {{ package.Common }}.vo.Result; + +//--- import 固定引入 ---// +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; +//--- import 固定引入 ---// + +/** + *

+ * 后台枚举 前端控制器 + *

+ * + * @author tiger + * @since 2026-03-17 + */ +@Api(tags = "公共方法对外接口") +@RestController +@RequestMapping("/model/common") +public class CommonController { + + @Resource + private {{ table.entity }}Service {{table.lowerEntity}}Service; + + + @ApiOperation(value = "枚举列表查询", response = {{ table.entity }}.class) + @PostMapping(value = "/optionList") + public Result optionList(@Valid @RequestBody {{ table.entity }} param, + @RequestHeader("token") String token, + @RequestHeader(value = "version", defaultValue = "1.0") String version) { + + List<{{ table.entity }}> list = {{table.lowerEntity}}Service.list(param); + if (list == null) { + return Result.error("无数据"); + } + List option = new ArrayList<>(); + list.forEach(item -> { + AtomicReference isExt = new AtomicReference<>(false); + option.forEach(item2 -> { + if (item.getFieldName().equals(item2.getFieldName()) + && item.getFieldLabel().equals(item2.getFieldLabel())) { + item2.getOptions().add(item); + isExt.set(true); + } + }); + if(!isExt.get()){ + CommonVueEnumsEntity optionItem = new CommonVueEnumsEntity(); + optionItem.setFieldName(item.getFieldName()); + optionItem.setFieldLabel(item.getFieldLabel()); + optionItem.setOptions(new ArrayList<>()); + optionItem.getOptions().add(item); + option.add(optionItem); + } + }); + return Result.OK( option ); + } +} diff --git a/templates/java/CommonVueEnumsEntity.java.j2 b/templates/java/CommonVueEnumsEntity.java.j2 new file mode 100644 index 0000000..08cb335 --- /dev/null +++ b/templates/java/CommonVueEnumsEntity.java.j2 @@ -0,0 +1,21 @@ +package {{ package.Entity }}; + +import lombok.Data; + +import java.util.List; + +/** + *

+ * 枚举自增 + *

+ * + * @author zmm + * @since 2026-03-12 + */ +@Data +public class CommonVueEnumsEntity { + private static final long serialVersionUID = 1L; + private String fieldName; + private String fieldLabel; + private List options; +} diff --git a/templates/java/controller.java.j2 b/templates/java/controller.java.j2 index 2a5c1cf..f899c8e 100644 --- a/templates/java/controller.java.j2 +++ b/templates/java/controller.java.j2 @@ -28,7 +28,7 @@ import java.util.List; {% else %} @Controller {% endif %} -@RequestMapping("{{ table.name }}") +@RequestMapping("{{ table.tabToPath }}") public class {{ table.entity }}Controller { @Resource @@ -104,4 +104,35 @@ public class {{ table.entity }}Controller { } + @ApiOperation(value = "枚举自增分页列表查询", response = HealthEnums.class) + @PostMapping(value = "/optionList") + public Result allList(@Valid @RequestBody HealthEnums param, + @RequestHeader("token") String token, + @RequestHeader(value = "version", defaultValue = "1.0") String version) { + List list = healthEnumsService.list(param); + if (list == null) { + return Result.error("无数据"); + } + List option = new ArrayList<>(); + list.forEach(item -> { + AtomicReference isExt = new AtomicReference<>(false); + option.forEach(item2 -> { + if (item.getFieldName().equals(item2.getFieldName()) + && item.getFieldLabel().equals(item2.getFieldLabel())) { + item2.getOptions().add(item); + isExt.set(true); + } + }); + if(!isExt.get()){ + HealthEnumsOption optionItem = new HealthEnumsOption(); + optionItem.setFieldName(item.getFieldName()); + optionItem.setFieldLabel(item.getFieldLabel()); + optionItem.setOptions(new ArrayList<>()); + optionItem.getOptions().add(item); + option.add(optionItem); + } + }); + return Result.OK( option ); + } + } diff --git a/templates/vue/index.vue.j2 b/templates/vue/index.vue.j2 index 1949336..2b1ce43 100644 --- a/templates/vue/index.vue.j2 +++ b/templates/vue/index.vue.j2 @@ -231,7 +231,7 @@ const [Modal, modalApi] = useVbenModal({ closable: true, maskClosable: false, draggable: true, - width: 800, + class: 'w-[60vw]', onCancel() { modalApi.close(); }, @@ -258,7 +258,6 @@ const [Modal, modalApi] = useVbenModal({ await {{entity}}Api.save({...finalSubmitValues, id: currentRow.value.id}); Object.assign(currentRow.value, finalSubmitValues); modalApi.close(); - gridApi.reloadRow(currentRow.value); loadingMessage(); isEdit.value = false; message.success('保存成功!'); @@ -438,13 +437,7 @@ const getEditFormSchema = () => { const [Form, formApi] = useVbenForm({ schema: editFormSchema, showDefaultActions: false, - wrapperClass: 'grid-cols-1 md:grid-cols-2', - commonConfig: { - componentProps: { - class: 'w-full', - autocomplete: 'off', - }, - }, + wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3', }) // ========== 上传文件 ========== diff --git a/utils.py b/utils.py index 7872bc7..196bf0f 100644 --- a/utils.py +++ b/utils.py @@ -2,29 +2,39 @@ import argparse import re from copy import deepcopy +# 下划线转-划线 def to_kebab(name): parts = name.split("_") return "-".join(parts) +# 下划线转驼峰,首单词的首字母小写 def to_camel(name): parts = name.split("_") return parts[0] + "".join(p.capitalize() for p in parts[1:]) +# 下划线转驼峰,首单词的首字母大写 def to_m_camel(name): return "".join(p.capitalize() for p in name.split("_")) def to_class(name): return "".join(p.capitalize() for p in name.split("_")) +# 根据逗号分隔符,将字段名转换成驼峰 def to_class_join(name): parts = name.split(",") return "'"+"','".join(to_camel(p) for p in parts)+"'" +# 表名转路径 +def tab_to_path(name): + return "/"+"/".join(p for p in name.split("_")) + + def lower_first(s: str) -> str: if not s: return s return s[0].lower() + s[1:] +# 路径转换 def to_path(name): parts = name.split(".") if len(parts) < 2: # 如果没有".",parts长度就是1 @@ -43,6 +53,9 @@ def get_first_part(name, default=""): return parts[0].capitalize() +def tab_chane_comment(name, default="", delimiter=":"): + return name.split(delimiter, 1)[0] if name else default + def parse_args(): parser = argparse.ArgumentParser(description="Java Code Generator") @@ -129,7 +142,7 @@ def resolve_config(config: dict, max_rounds=5) -> dict: return result - +# mysql类型转java类型 def mysql_to_java(mysql_type): mapping = { "bigint": "Long", @@ -143,8 +156,8 @@ def mysql_to_java(mysql_type): } return mapping.get(mysql_type, "String") +# mysql类型转element-ui组件 def parse_component(field): - t = field["data_type"] if "datetime" in t: return "DatePicker" @@ -152,5 +165,4 @@ def parse_component(field): return "InputTextArea" if "int" in t: return "InputNumber" - return "Input" \ No newline at end of file diff --git a/vue-vben-admin/apps/web-antd/src/api/fun.ts b/vue-vben-admin/apps/web-antd/src/api/fun.ts deleted file mode 100644 index 63f3ea4..0000000 --- a/vue-vben-admin/apps/web-antd/src/api/fun.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * 自动生成 API - * 负责调用后端接口 - */ - -import { requestClient } from '#/api/request'; -import { useAppConfig } from '@vben/hooks'; -import { useAccessStore } from '@vben/stores'; - -export namespace funApi { - - const applicationConfig = useAppConfig(import.meta.env, import.meta.env.PROD); - console.log('=== 接口域名 ===', applicationConfig.javaURL) - - /** - * 分页查询 - */ - export function page(params: any) { - return requestClient.post(applicationConfig.javaURL+'/health-fun/page', params, - { headers: {'Content-Type': 'application/json', Token: useAccessStore().accessToken, version: '1.0.1'}}); - } - - /** - * 获取详情 - */ - export function get(id: number) { - return requestClient.get(applicationConfig.javaURL+'/health-fun/' + id); - } - - /** - * 新增 - */ - export function add(data: any) { - return requestClient.post(applicationConfig.javaURL+'/health-fun/add', data, - { headers: {'Content-Type': 'application/json', Token: useAccessStore().accessToken, version: '1.0.1'}}); - } - - /** - * 修改 - */ - export function save(data: any) { - return requestClient.post(applicationConfig.javaURL+'/health-fun/modify', data, - { headers: {'Content-Type': 'application/json', Token: useAccessStore().accessToken, version: '1.0.1'}}); - } - - /** - * 删除 - */ - export function remove(id: number) { - return requestClient.delete(applicationConfig.javaURL+'/health-fun/' + id); - } - - /** - * 枚举列表 - */ - export function enumList(params: any) { - return requestClient.post(applicationConfig.javaURL+'/health-enums/optionList', params, - { headers: {'Content-Type': 'application/json', Token: useAccessStore().accessToken, version: '1.0.1'}}); - } - - /** - * 上传图片 - */ - export function upload(params: any) { - return requestClient.post(applicationConfig.javaURL+'/file/up', params, - { headers: {'Content-Type': 'multipart/form-data', Token: useAccessStore().accessToken, version: '1.0.1'}}); - } - -} \ No newline at end of file diff --git a/vue-vben-admin/apps/web-antd/src/router/routes/modules/fun.ts b/vue-vben-admin/apps/web-antd/src/router/routes/modules/fun.ts deleted file mode 100644 index 5cc53a4..0000000 --- a/vue-vben-admin/apps/web-antd/src/router/routes/modules/fun.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 自动生成路由 - */ - -import type { RouteRecordRaw } from 'vue-router'; - -const routes: RouteRecordRaw[] = [ - -{ - path: '/fun', - name: '功能配置表模块', - meta: { - icon: 'ic:baseline-view-in-ar', - order: 1000, - keepAlive: true, - title: '', - }, - children: [ - { - meta: { - title: "功能配置表列表", - }, - name: 'funList', - path: '/fun', - component: () => import('#/views/fun/index.vue'), - }, - ], - } -]; - -export default routes; \ No newline at end of file diff --git a/vue-vben-admin/apps/web-antd/src/views/fun/data.ts b/vue-vben-admin/apps/web-antd/src/views/fun/data.ts deleted file mode 100644 index 898e714..0000000 --- a/vue-vben-admin/apps/web-antd/src/views/fun/data.ts +++ /dev/null @@ -1,253 +0,0 @@ -/** - * 表格列配置 - */ - -import type { VxeGridProps } from '#/adapter/vxe-table'; - -export const columns: VxeGridProps['columns'] = [ - - -{ - // 列标题 - title: '主键ID', - - // 对应字段 - field: 'id', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '父类ID', - - // 对应字段 - field: 'funParentId', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '功能名称', - - // 对应字段 - field: 'funName', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '功能码对外做映射用', - - // 对应字段 - field: 'funCode', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '功能数值', - - // 对应字段 - field: 'funValue', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '告警级别: 0默认,1级,2级,3级', - - // 对应字段 - field: 'funWarnLevel', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '用位运算组合', - - // 对应字段 - field: 'funWarnType', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '是否在首页展示: 0展示,1不展示', - - // 对应字段 - field: 'funIndex', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '创建时间', - - // 对应字段 - field: 'createdAt', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '创建人', - - // 对应字段 - field: 'createdBy', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '更新时间', - - // 对应字段 - field: 'updatedAt', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '更新人', - - // 对应字段 - field: 'updatedBy', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '删除 0 默认 1删除', - - // 对应字段 - field: 'deletedFlag', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '用户ID', - - // 对应字段 - field: 'userId', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '设备唯一标识', - - // 对应字段 - field: 'deviceCode', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '功能图', - - // 对应字段 - field: 'funImg', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '设备类型', - - // 对应字段 - field: 'deviceType', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '功能状态: 默认 0开通,1关闭,2隐藏', - - // 对应字段 - field: 'funStatus', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '完成10,30,60逐级提升告警持续', - - // 对应字段 - field: 'graduallyIntervalTime', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '消息展示语', - - // 对应字段 - field: 'funMsgTitle', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '持续时间默认值', - - // 对应字段 - field: 'funStatisticsTimes', - - // 宽度 - width: 150 -}, - -{ - // 列标题 - title: '短消息提示语言', - - // 对应字段 - field: 'funShortMsg', - - // 宽度 - width: 150 -}, - - -]; \ No newline at end of file diff --git a/vue-vben-admin/apps/web-antd/src/views/fun/form.ts b/vue-vben-admin/apps/web-antd/src/views/fun/form.ts deleted file mode 100644 index 20493cd..0000000 --- a/vue-vben-admin/apps/web-antd/src/views/fun/form.ts +++ /dev/null @@ -1,276 +0,0 @@ -/** - * 表单 schema - * component 类型来自 parse_component() - */ - -import type { VbenFormSchema } from '#/adapter/form'; - -export const formSchema: VbenFormSchema[] = [ - - -{ - // 字段名 - fieldName: 'id', - - // label - label: '主键ID', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funParentId', - - // label - label: '父类ID', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funName', - - // label - label: '功能名称', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funCode', - - // label - label: '功能码对外做映射用', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funValue', - - // label - label: '功能数值', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funWarnLevel', - - // label - label: '告警级别: 0默认,1级,2级,3级', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funWarnType', - - // label - label: '用位运算组合', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funIndex', - - // label - label: '是否在首页展示: 0展示,1不展示', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'createdAt', - - // label - label: '创建时间', - - // 自动组件 - component: 'DatePicker' - -}, - -{ - // 字段名 - fieldName: 'createdBy', - - // label - label: '创建人', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'updatedAt', - - // label - label: '更新时间', - - // 自动组件 - component: 'DatePicker' - -}, - -{ - // 字段名 - fieldName: 'updatedBy', - - // label - label: '更新人', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'deletedFlag', - - // label - label: '删除 0 默认 1删除', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'userId', - - // label - label: '用户ID', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'deviceCode', - - // label - label: '设备唯一标识', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funImg', - - // label - label: '功能图', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'deviceType', - - // label - label: '设备类型', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funStatus', - - // label - label: '功能状态: 默认 0开通,1关闭,2隐藏', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'graduallyIntervalTime', - - // label - label: '完成10,30,60逐级提升告警持续', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funMsgTitle', - - // label - label: '消息展示语', - - // 自动组件 - component: 'Input' - -}, - -{ - // 字段名 - fieldName: 'funStatisticsTimes', - - // label - label: '持续时间默认值', - - // 自动组件 - component: 'InputNumber' - -}, - -{ - // 字段名 - fieldName: 'funShortMsg', - - // label - label: '短消息提示语言', - - // 自动组件 - component: 'Input' - -}, - - -]; \ No newline at end of file diff --git a/vue-vben-admin/apps/web-antd/src/views/fun/index.vue b/vue-vben-admin/apps/web-antd/src/views/fun/index.vue deleted file mode 100644 index 779a556..0000000 --- a/vue-vben-admin/apps/web-antd/src/views/fun/index.vue +++ /dev/null @@ -1,675 +0,0 @@ - - - - - \ No newline at end of file