# testcode **Repository Path**: kk_ah/testcode ## Basic Information - **Project Name**: testcode - **Description**: testcode1111 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-05-12 - **Last Updated**: 2023-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 基于 Vite + Ts + Vue3 架构,使用 ibiz 平台模型生成代码 ## 目录结构 ``` |─ ─ app |─ ─ public public文件夹 |─ ─ assets 静态资源文件夹 |─ ─ vite.svg 图标 |─ ─ src 工程文件夹 |— — api 数据服务相关文件 |— — xxx 应用实体 |— — data-service 数据服务 |— — xxx-service-base.ts 数据服务对象基类 |— — xxx-service.ts 数据服务对象 |— — dto-help 应用实体DTO辅助类 |— — xxx-helpes.ts 应用实体DTO服务类集合 |— — interface 应用实体接口 |— — xxx-base.ts 应用实体对象基类 |— — xxx-keys.ts 应用实体属性集合 |— — xxx.ts 应用实体对象 |— — app |— — app.ts 当前应用对象 |— — components 组件,主要包含基础组件、功能组件、布局组件、部件组件 |— — common 基础组件 |— — function 功能组件,包括缺省页面、数据导入、登陆等组件 |— — layout 布局组件,包括首页视图布局,视图布局组件 |— — layout-element 布局元素组件,视图布局面板中使用的预置组件 |— — widgets 部件组件 |— — config 配置文件夹 |— — app-code-list-config.ts 应用代码表配置 |— — app-config.ts 应用配置 |— — app-counter-config.ts 应用计数器配置 |— — app-entity-config.ts 应用实体配置 |— — app-func-config.ts 应用功能配置 |— — app-theme-config.ts 应用主题配置 |— — app-view-config.ts 应用视图配置 |— — app-view-msg-config.ts 应用视图消息配置 |— — core 核心,包括控制器与接口 |— — controller 控制器 |— — app |— — app-controller.ts 应用控制器,由src/app/app.ts继承具体实现 |— — common |— — controller-base.ts 控制器基类 |— — view 视图控制器 |— — widgets 部件控制器 |— — interface 接口 |— — app 应用级接口,包括应用接口、应用配置接口、应用数据接口、项目配置接口 |— — common 通用基础接口,包括应用上下文接口、视图详情接口、实体详情接口、布局配置接口等 |— — modules |— — app-func 应用功能模块,包括应用功能接口、应用功能助手接口 |— — code-list 代码表模块,包括代码表接口、代码表助手接口 |— — common 通用模块,包括能力接口、控制器输入参数接口、控制器接口、事件接口、请求响应结果接口、仓库数据接口 |— — counter 计数器模块,包括计数器助手接口 |— — ctrl-service 部件服务模块,包括部件服务接口 |— — data-service 数据服务模块,包括实体标准接口、实体临时数据服务接口 |— — dev-action debug服务模块,包括debug服务助手接口 |— — dialog 对话框模块,包括对话框助手接口、自定义对话框配置接口 |— — global-action 全局界面行为模块,包括全局界面行为助手接口 |— — global-notification 全局通知模块,包括全局通知助手接口 |— — loading 加载模块,包括加载助手接口 |— — notification 消息提示模块,包括消息提示助手接口 |— — open-view 打开视图模块,包括打开视图操作结果接口、打开视图助手接口 |— — service-register 服务注册模块,包括服务注册统一接口 |— — ui-engine 界面引擎模块,包括界面引擎输入参数接口、界面引擎输入模型接口、界面引擎执行结果参数接口 |— — ui-service 界面服务模块,包括界面服务接口、界面行为执行结果接口 |— — view-logic 视图逻辑模块,包括视图逻辑输入参数接口、视图逻辑助手接口 |— — view-msg 视图消息模块,包括视图消息助手接口、视图消息接口、视图消息组接口 |— — view 视图相关接口 |— — ability 视图能力接口 |— — controller 视图控制器接口 |— — controller-params 视图控制器输入参数接口 |— — data-action 视图操作响应接口 |— — event 视图事件接口与行为类型 |— — model 视图模型接口 |— — store 视图仓库数据接口 |— — widgets 部件相关接口 |— — ability 部件能力接口 |— — controller 部件控制器接口 |— — controller-params 部件控制器输入参数接口 |— — data-action 部件操作响应接口与部件数据行为接口 |— — event 部件事件接口与行为类型 |— — model 部件模型接口 |— — store 部件仓库数据接口 |— — modules |— — code-list 代码表模块 |— — code-list-helper-base.ts 代码表助手抽象基类 |— — control-vo 部件VO模块 |— — control-vo-base.ts 部件VO基类 |— — counter 计数器模块 |— — counter-helper-base.ts 计数器助手抽象基类 |— — ctrl-service 部件服务 |— — data-service 数据服务模块 |— — data-service-base.ts 数据服务基类 |— — entity-base.ts 实体基类 |— — db-service IndexDB模块 |— — db-service.ts IndexDB库服务类 |— — entity-db-service.ts 应用实体库服务类 |— — loading 加载模块 |— — app-loading-helper.ts 应用加载助手类 |— — loading-helper.ts 加载助手类 |— — logic 界面逻辑模块 |— — const 常量 |— — logic-param 界面逻辑参数 |— — ui-engine 界面引擎模块 |— — ui-service 界面服务模块 |— — ui-service-base.ts 界面服务基类 |— — view-msg 视图消息模块 |— — view-msg-helper-base.ts 视图消息助手抽象基类 |— — utils 工具类 |— — directives 指令 |— — helper 各类助手,对core中的助手模块进行项目级的开发 |— — hooks |— — use-app.ts 应用hooks |— — use-ctrl.ts 部件hooks |— — use-editor.ts 编辑器hooks |— — use-view.ts 视图hooks |— — http |— — http.ts http工具 |— — interceptor.ts 拦截器 |— — locales 国际化文件 |— — plugins 项目插件文件 |— — ctrl-item 部件项插件 |— — de-method 实体方法插件 |— — editor 编辑器插件 |— — ui-action 界面行为插件 |— — ui-logic 界面逻辑插件 |— — view 视图插件 |— — widget 部件插件 |— — register 注册中心 |— — common-comp-register.ts 通用组件注册 |— — common-directive-register.ts 通用指令注册 |— — entity-service-register.ts 实体数据服务注册 |— — page-comp-register.ts 视图注册 |— — ui-service-register.ts 界面服务注册 |— — user-comp-register.ts 自定义组件注册 |— — router 路由 |— — guard 路由守卫 |— — auth-guard.ts 权限守卫 |— — routes |— — entity-route.ts 实体视图路由 |— — user-route.ts 用户路由 |— — view-route.ts 首页视图路由 |— — setting 项目级配置文件 |— — store 全局状态管理,Vue3使用pinia |— — modules |— — app.ts 应用模块 |— — auth-resource.ts 权限资源模块 |— — view-action.ts 视图行为模块 |— — view-ctx.ts 视图上下文模块 |— — styles 样式文件 |— — ui-service 界面服务 |— — xxx 实体标识 |— — xxx-ui-service-base.ts 实体界面服务基类 |— — xxx-ui-service.ts 实体界面服务 |— — yyy-ui-logic-base.ts 实体界面逻辑基类 |— — yyy-ui-logic.ts 实体界面逻辑 |— — utils |— — ui-util.ts 界面工具类 |— — views 视图 |— — xxx 模块标识 |— — xxx-model.ts 视图模型 |— — xxx.vue 视图vue文件 |— — widgets 部件 |— — app |— — yyy 部件标识,无数据能力的部件,例如菜单 |— — yyy-model.ts 部件模型 |— — yyy.vue 部件vue文件 |— — xxx 应用实体标识 |— — yyy 实体部件标识 |— — yyy-model.ts 实体部件模型 |— — yyy-vo.ts 实体部件对应vo对象类,只有数据部件才有此文件 |— — yyy.vue 实体部件vue文件 |─ ─ App.vue 入口组件 |─ ─ main.ts 应用入口 |─ ─ tests 单元测试文件 |─ ─ app src下app文件测试内容 |─ ─ core src下core文件测试内容 |─ ─ global 单元测试全局控制文件 |─ ─ types 类型声明 |─ ─ user 用户自定义文件,映射src目录 |─ ─ .env 环境基础文件 |─ ─ .env.development 开发环境配置文件 |─ ─ .env.production 生产环境配置文件 |─ ─ .eslintignore eslint忽略文件 |─ ─ .eslintrc.cjs eslint配置 |─ ─ .gitignore git忽略文件 |─ ─ .prettierignore prettier忽略文件 |─ ─ .prettierrc.cjs prettier配置文件 |─ ─ auto-imports.d.ts vue自动导入声明 |─ ─ components.d.ts 组件声明 |─ ─ copy.js 拷贝脚本 |─ ─ index.html |─ ─ package.json 依赖管理文件 |─ ─ README.md |─ ─ tsconfig.json ts配置文件 |─ ─ vite-config.ts vite配置文件 |─ ─ yarn.lock yarn版本锁定文件 ``` ## 准备 - [node](http://nodejs.org/) -项目开发环境 - [Vite](https://vitejs.dev/) - 熟悉 vite 特性 - [Vue3](https://v3.vuejs.org/) - 熟悉 Vue 基础语法 - [TypeScript](https://www.typescriptlang.org/) - 熟悉`TypeScript`基本语法 - [Es6+](http://es6.ruanyifeng.com/) - 熟悉 es6 基本语法 - [Ant-Design-Vue](https://2x.antdv.com/docs/vue/introduce-cn/) - ui 基本使用 ## 使用 - 安装依赖 ```bash yarn install ``` 修改`vite.config.js`中的 service.proxy 块,指向代理地址 ```json server: { port: 8080, proxy: { '/api': { target: '代理地址', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), }, }, }, ``` **注:**应用基础路径可自由修改,但与代理中的地址必须映射 - 运行 ```bash yarn dev ``` - 打包 ```bash yarn build ``` - 代码生成 该项目依赖于`ibiz-vue3-template`,动态解析由 Ibiz 平台构建的模型生成成果物代码。而对于模型的解释规范便是`模板`。 当执行以下命令时,模板会生成代码。 ```bash yarn generate ``` 该脚本命令调用`ibiz-vue3-template`包提供的 template 脚本,通过传入的参数生成代码 ```bash template generate -m ./model -o ./ --app Web --dev ``` 脚本参数说明 | 参数 | 是否必须 | 说明 | | ----------------- | -------- | ---------------------------------------------------- | | generate | 是 | 生成代码 | | -m [modelPath] | 是 | 指定模型地址 | | -t [templatePath] | 否 | 指定自定义模板地址,会合并模板内容到内置模板中再发布 | | -o [outPath] | 是 | 生成代码输出地址 | | --app [appName] | 是 | 指定识别的应用模型标识 | | --dev | 否 | 开发模式启动 | | --clean | 否 | 清理输出目录 | | --all | 否 | 结合-t 使用,将指定自定义模板全量覆盖内置模板 | **示例** 使用本地模板全量覆盖内置模板 ```bash template generate -m ./model -t ./template -o ./ --app Web --dev -all ``` - 单元测试 ```bash yarn test ``` - 覆盖率测试报告 ```bash yarn coverage ``` ## 二次开发 ### 模板开发 | 文件 | 说明 | 内容 | | -------- | -------- | ------------------------------------------------------------ | | template | 模板文件 | 对模型进行解析,解析过后生成的文件与基础文件进行合并,最终便生成了完整的成果物代码 | | asset | 基础文件 | 基础组件、核心逻辑、样式等内容 | 模板开发有两种方式: ​ 1.直接修改template或asset下的相应文件 ​ 2.其他路径新建模板路径,在成果物生成代码的脚本后增加相应指令(-t [templatePath]) #### 使用场景 当需要对所有项目进行改动,或者此次更改希望所有应用都能享受到,则可以采用模板二次开发。 ### 成果物开发 成果物是指生成的完整项目,能够正常的启动、打包。 #### 成果物开发方式一 在成果物中存在user目录,其映射当前项目根目录,例如 `user/src/App.vue`映射项目根目录`/src/App.vue` `user/index.html`映射项目根目录`/index.html` 在生成成果物代码时,user目录下的文件会将src下映射的文件覆盖。因此,进行成果物二次开发时,只需要在user下创建对应的文件即可。这种模式能够更直观的看到哪些文件进行了二次开发,方便管理,同时避免通过`generate`指令重新生成代码后覆盖二次开发。 #### 成果物开发方式二 在做过二次开发的文件里面第一行添加`/* pub-rule @skip-overwrite */`忽略模板覆盖 #### 使用场景 只是某个项目具有特殊的需求,其他项目并不需要。 #### 特殊说明 1. 在进行成果物开发后,需要启用调试模式(环境文件中`VITE_DEBUG`)方便 ba 确认当前页面是否做过二次开发,开发也需遵从组件二次开发和逻辑二次开发相关规范。 2. 部分模板发布的文件存在基本文件和其继承的base文件,例如实体服务、UI服务等,此类文件更推荐修改基本文件,避免因模型变更后导致文件内容异常。 **组件二次开发** - 使用方式 在二次开发组件中使用 `AppDevActionBar` 组件 ```vue ``` - 接收参数 | 参数 | 类型 | 说明 | | ------ | ------ | ------------ | | remark | 字符串 | 二次开发备注 | - 示例 现在需要将多语言切换组件进行二次开发,调整页面,其对应成果物路径为`项目根目录/src/components/common/lang/src/lang.vue`,如果当前修改需要在所有应用下都使用,则直接在依赖包的asset目录下找到该文件进行修改即可;若只是当前应用需要,则在当前应用成果物代码的user目录下新建`src/components/common/lang/src/lang.vue`,其内容如下: ```vue ``` **逻辑二次开发** - 使用方式 在二次开发逻辑方法中使用`@ProcessLog`注解,注意此类注解只能用到函数上 ```ts @ProcessLog('二次开发备注文案') ``` - 接收参数 | 参数 | 类型 | 说明 | | ------ | ------ | ------------ | | remark | 字符串 | 二次开发备注 | - 示例 现在有一实体名为order,其在成果物中的数据服务路径为`项目根目录/src/api/order/data-service`,其下文件有 | 名称 | 说明 | | --------------------- | -------------------------------------- | | order-service-base.ts | order实体数据服务base文件,包含API方法 | | order-service.ts | order实体数据服务,继承base文件 | 现在需要修改order实体的Get方法。 在user目录下新建文件,路径为`user/src/api/order/data-service/order-service.ts` 从order-service.ts中复制Get方法到上述文件中,进行逻辑的调整,并且补充`@ProcessLog`注解,其中写入调整描述,方便BA查看。 ```typescript @ProcessLog('重写了order实体的Get方法,具体调整为...') /** * Get * * @param {IParam} [context={}] * @param {IParam | IParam[]} [data] * @returns {Promise} * @memberof OrderService */ public async Get( context: IContext = {}, data: IParam | IParam[] ): Promise { // 重写逻辑 } ```