From c5504a5e60f7025bc8a57f7791a4c63639a1d5cc Mon Sep 17 00:00:00 2001 From: aliceDxr Date: Thu, 25 May 2023 17:55:19 -0700 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=AB=AF=E7=9B=AE=E5=BD=95=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/toolkits/pro/package.json | 2 +- packages/toolkits/pro/src/lib/init.ts | 53 +++++++++++++++---- packages/toolkits/pro/src/lib/interfaces.ts | 2 + .../toolkits/pro/template/sever/eggJs/egg.js | 0 .../pro/template/sever/nestJs/nest.js | 0 .../template/sever/springCloud/spingCloud.js | 0 6 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 packages/toolkits/pro/template/sever/eggJs/egg.js create mode 100644 packages/toolkits/pro/template/sever/nestJs/nest.js create mode 100644 packages/toolkits/pro/template/sever/springCloud/spingCloud.js diff --git a/packages/toolkits/pro/package.json b/packages/toolkits/pro/package.json index f82048dc..a191ef96 100644 --- a/packages/toolkits/pro/package.json +++ b/packages/toolkits/pro/package.json @@ -54,7 +54,7 @@ "node": ">=8.9" }, "dependencies": { - "@opentiny/cli-devkit": "^1.0.0-alpha.0", + "@opentiny/cli-devkit": "^1.0.1", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "fs-extra": "^10.1.0", diff --git a/packages/toolkits/pro/src/lib/init.ts b/packages/toolkits/pro/src/lib/init.ts index 7991f160..c25f5fcf 100644 --- a/packages/toolkits/pro/src/lib/init.ts +++ b/packages/toolkits/pro/src/lib/init.ts @@ -36,18 +36,40 @@ const getInitAnswers = (): Promise => { { type: 'list', name: 'framework', - message: '请选择您希望使用的技术栈:', + message: '请选择您希望使用的客户端技术栈:', choices: [ { name: 'vue', value: vueTemplatePath }, { name: 'angular', value: ngTemplatePath }, ], default: vueTemplatePath, }, + { + type: 'list', + name: 'useSever', + message: '是否需要对接服务端:', + choices: [ + { name: 'Yes', value: true }, + { name: 'Don`t need', value: false }, + ], + default: true, + }, ] as const; return inquirer.prompt(question); }; - +const severQuestion: Array = [ + { + type: 'list', + name: 'severType', + message: '请选择您希望使用的服务端技术栈:', + choices: [ + { name: 'Spring Cloud', value: 'springCloud' }, + { name: 'Egg.js', value: 'eggJs' }, + { name: 'Nest.js', value: 'nestJs' }, + ], + default: 'springCloud', + }, +]; /** * 同步创建项目文件目录、文件 * @answers 询问问题的选择值 @@ -71,8 +93,13 @@ const createProjectSync = (answers: InitAnswers) => { pluginFullname: fullName, }; - const { framework, description, name: packageJsonName } = answers; - + const { + framework, + description, + name: packageJsonName, + useSever, + severType, + } = answers; const templatePath = framework === vueTemplatePath ? vueTemplatePath : ngTemplatePath; @@ -80,8 +107,7 @@ const createProjectSync = (answers: InitAnswers) => { const from = utils.getTemplatePath(templatePath); // 复制模板的目标目录 - const to = utils.getDistPath(); - + const to = utils.getDistPath('web'); // 项目名称,跟当前目录保持一致 fs.copyTpl(from, to, data, { @@ -95,7 +121,12 @@ const createProjectSync = (answers: InitAnswers) => { return filename; }, }); - + // 如果对接服务端,复制相关目录 + if (useSever) { + const severFrom = utils.getTemplatePath(`sever/${severType}`); + const severTo = utils.getDistPath('sever'); + fs.copyTpl(severFrom, severTo); + } // 将项目名称、描述写入 package.json中 { const packageJsonPath = path.join(to, 'package.json'); @@ -121,7 +152,7 @@ export const installDependencies = () => { // npm 依赖安装 log.info('正在安装 npm 依赖,安装过程需要几十秒,请耐心等待...'); - spawn.sync('npm', ['install'], { stdio: 'inherit' }); + spawn.sync('npm', ['install'], { cwd: 'web/', stdio: 'inherit' }); log.success('npm 依赖安装成功'); @@ -159,7 +190,11 @@ export default async () => { // 拷贝模板到当前目录 try { // 创建项目文件夹及文件 - const answers = await getInitAnswers(); + const baseAnswers = await getInitAnswers(); + let severAnswer: Object = {}; + if (baseAnswers.useSever) + severAnswer = await inquirer.prompt(severQuestion); + const answers = Object.assign(baseAnswers, severAnswer); createProjectSync(answers); } catch (e) { log.error('项目模板创建失败'); diff --git a/packages/toolkits/pro/src/lib/interfaces.ts b/packages/toolkits/pro/src/lib/interfaces.ts index 6925ae7a..297e4fbb 100644 --- a/packages/toolkits/pro/src/lib/interfaces.ts +++ b/packages/toolkits/pro/src/lib/interfaces.ts @@ -13,4 +13,6 @@ export interface InitAnswers { description: string; framework: string; name: string; + useSever: boolean; + severType: string; } diff --git a/packages/toolkits/pro/template/sever/eggJs/egg.js b/packages/toolkits/pro/template/sever/eggJs/egg.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/toolkits/pro/template/sever/nestJs/nest.js b/packages/toolkits/pro/template/sever/nestJs/nest.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/toolkits/pro/template/sever/springCloud/spingCloud.js b/packages/toolkits/pro/template/sever/springCloud/spingCloud.js new file mode 100644 index 00000000..e69de29b From 1d94326ab8e55e8de3924793160a10acc75bdae2 Mon Sep 17 00:00:00 2001 From: aliceDxr Date: Fri, 26 May 2023 11:31:59 -0700 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/toolkits/pro/src/lib/init.ts | 41 +++++++++++-------- packages/toolkits/pro/src/lib/interfaces.ts | 4 +- .../template/{sever => server}/eggJs/egg.js | 0 .../template/{sever => server}/nestJs/nest.js | 0 .../springCloud/spingCloud.js | 0 5 files changed, 26 insertions(+), 19 deletions(-) rename packages/toolkits/pro/template/{sever => server}/eggJs/egg.js (100%) rename packages/toolkits/pro/template/{sever => server}/nestJs/nest.js (100%) rename packages/toolkits/pro/template/{sever => server}/springCloud/spingCloud.js (100%) diff --git a/packages/toolkits/pro/src/lib/init.ts b/packages/toolkits/pro/src/lib/init.ts index c25f5fcf..c6ae7c58 100644 --- a/packages/toolkits/pro/src/lib/init.ts +++ b/packages/toolkits/pro/src/lib/init.ts @@ -45,7 +45,7 @@ const getInitAnswers = (): Promise => { }, { type: 'list', - name: 'useSever', + name: 'useServer', message: '是否需要对接服务端:', choices: [ { name: 'Yes', value: true }, @@ -57,10 +57,10 @@ const getInitAnswers = (): Promise => { return inquirer.prompt(question); }; -const severQuestion: Array = [ +const serverQuestion: Array = [ { type: 'list', - name: 'severType', + name: 'serverType', message: '请选择您希望使用的服务端技术栈:', choices: [ { name: 'Spring Cloud', value: 'springCloud' }, @@ -97,8 +97,8 @@ const createProjectSync = (answers: InitAnswers) => { framework, description, name: packageJsonName, - useSever, - severType, + useServer, + serverType, } = answers; const templatePath = framework === vueTemplatePath ? vueTemplatePath : ngTemplatePath; @@ -107,7 +107,7 @@ const createProjectSync = (answers: InitAnswers) => { const from = utils.getTemplatePath(templatePath); // 复制模板的目标目录 - const to = utils.getDistPath('web'); + const to = utils.getDistPath(useServer ? 'web' : ''); // 项目名称,跟当前目录保持一致 fs.copyTpl(from, to, data, { @@ -122,10 +122,10 @@ const createProjectSync = (answers: InitAnswers) => { }, }); // 如果对接服务端,复制相关目录 - if (useSever) { - const severFrom = utils.getTemplatePath(`sever/${severType}`); - const severTo = utils.getDistPath('sever'); - fs.copyTpl(severFrom, severTo); + if (useServer) { + const serverFrom = utils.getTemplatePath(`server/${serverType}`); + const serverTo = utils.getDistPath('server'); + fs.copyTpl(serverFrom, serverTo); } // 将项目名称、描述写入 package.json中 { @@ -147,12 +147,16 @@ const createProjectSync = (answers: InitAnswers) => { }; // 安装依赖 -export const installDependencies = () => { +export const installDependencies = (useServer: boolean) => { const prefix = cliConfig.getBinName(); // npm 依赖安装 log.info('正在安装 npm 依赖,安装过程需要几十秒,请耐心等待...'); - spawn.sync('npm', ['install'], { cwd: 'web/', stdio: 'inherit' }); + console.log(cwd, 'cccccwwwwdddd'); + spawn.sync('npm', ['install'], { + cwd: useServer ? 'web/' : null, + stdio: 'inherit', + }); log.success('npm 依赖安装成功'); @@ -188,13 +192,16 @@ export const installDependencies = () => { export default async () => { // 拷贝模板到当前目录 + let useServerAnswer = false; try { // 创建项目文件夹及文件 const baseAnswers = await getInitAnswers(); - let severAnswer: Object = {}; - if (baseAnswers.useSever) - severAnswer = await inquirer.prompt(severQuestion); - const answers = Object.assign(baseAnswers, severAnswer); + useServerAnswer = baseAnswers.useServer; + let serverAnswer: Object = {}; + if (baseAnswers.useServer) { + serverAnswer = await inquirer.prompt(serverQuestion); + } + const answers = Object.assign(baseAnswers, serverAnswer); createProjectSync(answers); } catch (e) { log.error('项目模板创建失败'); @@ -203,7 +210,7 @@ export default async () => { } // 安装依赖 try { - installDependencies(); + installDependencies(useServerAnswer); } catch (e) { log.error('npm 依赖安装失败'); log.error('请手动执行 tiny i 或 npm i'); diff --git a/packages/toolkits/pro/src/lib/interfaces.ts b/packages/toolkits/pro/src/lib/interfaces.ts index 297e4fbb..5440abab 100644 --- a/packages/toolkits/pro/src/lib/interfaces.ts +++ b/packages/toolkits/pro/src/lib/interfaces.ts @@ -13,6 +13,6 @@ export interface InitAnswers { description: string; framework: string; name: string; - useSever: boolean; - severType: string; + useServer: boolean; + serverType: string; } diff --git a/packages/toolkits/pro/template/sever/eggJs/egg.js b/packages/toolkits/pro/template/server/eggJs/egg.js similarity index 100% rename from packages/toolkits/pro/template/sever/eggJs/egg.js rename to packages/toolkits/pro/template/server/eggJs/egg.js diff --git a/packages/toolkits/pro/template/sever/nestJs/nest.js b/packages/toolkits/pro/template/server/nestJs/nest.js similarity index 100% rename from packages/toolkits/pro/template/sever/nestJs/nest.js rename to packages/toolkits/pro/template/server/nestJs/nest.js diff --git a/packages/toolkits/pro/template/sever/springCloud/spingCloud.js b/packages/toolkits/pro/template/server/springCloud/spingCloud.js similarity index 100% rename from packages/toolkits/pro/template/sever/springCloud/spingCloud.js rename to packages/toolkits/pro/template/server/springCloud/spingCloud.js From c6aea1d438c94dda8a8222c2b667a8cf798003f3 Mon Sep 17 00:00:00 2001 From: aliceDxr Date: Mon, 29 May 2023 18:26:31 -0700 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=91=BD=E4=BB=A4=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/toolkits/pro/package.json | 5 +- packages/toolkits/pro/src/lib/init.ts | 56 ++++++++++++++++--- packages/toolkits/pro/src/lib/interfaces.ts | 2 + packages/toolkits/pro/template/tinyvue/.env | 1 + .../toolkits/pro/template/tinyvue/.env.pages | 1 - 5 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 packages/toolkits/pro/template/tinyvue/.env delete mode 100644 packages/toolkits/pro/template/tinyvue/.env.pages diff --git a/packages/toolkits/pro/package.json b/packages/toolkits/pro/package.json index a191ef96..422be34d 100644 --- a/packages/toolkits/pro/package.json +++ b/packages/toolkits/pro/package.json @@ -57,9 +57,10 @@ "@opentiny/cli-devkit": "^1.0.1", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", "fs-extra": "^10.1.0", - "open": "^8.4.0", - "inquirer": "^8.0.2" + "inquirer": "^8.0.2", + "open": "^8.4.0" }, "devDependencies": { "@bitjson/npm-scripts-info": "^1.0.0", diff --git a/packages/toolkits/pro/src/lib/init.ts b/packages/toolkits/pro/src/lib/init.ts index c6ae7c58..ab832c9f 100644 --- a/packages/toolkits/pro/src/lib/init.ts +++ b/packages/toolkits/pro/src/lib/init.ts @@ -5,6 +5,8 @@ import inquirer, { QuestionCollection } from 'inquirer'; import { cliConfig, logs, fs, user, modules } from '@opentiny/cli-devkit'; import { InitAnswers } from './interfaces'; import utils from './utils'; +import * as dotenv from 'dotenv'; +dotenv.config(); const log = logs('tiny-toolkit-pro'); const cwd = process.cwd(); @@ -42,22 +44,19 @@ const getInitAnswers = (): Promise => { { name: 'angular', value: ngTemplatePath }, ], default: vueTemplatePath, + prefix: '*', }, { - type: 'list', + type: 'confirm', name: 'useServer', message: '是否需要对接服务端:', - choices: [ - { name: 'Yes', value: true }, - { name: 'Don`t need', value: false }, - ], default: true, }, ] as const; return inquirer.prompt(question); }; -const serverQuestion: Array = [ +const serverQuestion: QuestionCollection = [ { type: 'list', name: 'serverType', @@ -68,6 +67,23 @@ const serverQuestion: Array = [ { name: 'Nest.js', value: 'nestJs' }, ], default: 'springCloud', + prefix: '*', + }, + { + type: 'input', + name: 'host', + message: '请输入服务端Host:', + // 必填校验 + validate: (input: string) => Boolean(input), + prefix: '*', + }, + { + type: 'input', + name: 'port', + message: '请输入服务端Port:', + // 必填校验 + validate: (input: string) => Boolean(input), + prefix: '*', }, ]; /** @@ -99,6 +115,8 @@ const createProjectSync = (answers: InitAnswers) => { name: packageJsonName, useServer, serverType, + host, + port, } = answers; const templatePath = framework === vueTemplatePath ? vueTemplatePath : ngTemplatePath; @@ -138,6 +156,28 @@ const createProjectSync = (answers: InitAnswers) => { packageJson.name = packageJsonName; packageJson.description = description; + if (useServer) { + const envPath = path.join(to, '.env'); + const envConfig = dotenv.parse( + fs.readFileSync(envPath, writeOrReadOptions) + ); + envConfig.VITE_SEVER_HOST = `${host}:${port}`; + const config = Object.keys(envConfig) + .map((key) => `${key} = ${envConfig[key]}`) + .join('\n'); + fs.writeFileSync(envPath, config); + } else { + const envPath = path.join(to, '.env'); + const envConfig = dotenv.parse( + fs.readFileSync(envPath, writeOrReadOptions) + ); + envConfig.VITE_USE_MOCK = 'true'; + const config = Object.keys(envConfig) + .map((key) => `${key} = ${envConfig[key]}`) + .join('\n'); + fs.writeFileSync(envPath, config); + } + fs.writeFileSync( packageJsonPath, JSON.stringify(packageJson, null, 2), @@ -152,7 +192,6 @@ export const installDependencies = (useServer: boolean) => { // npm 依赖安装 log.info('正在安装 npm 依赖,安装过程需要几十秒,请耐心等待...'); - console.log(cwd, 'cccccwwwwdddd'); spawn.sync('npm', ['install'], { cwd: useServer ? 'web/' : null, stdio: 'inherit', @@ -160,6 +199,8 @@ export const installDependencies = (useServer: boolean) => { log.success('npm 依赖安装成功'); + if (useServer) process.chdir('web'); + /* prettier-ignore-start */ console.log( chalk.yellow( @@ -208,6 +249,7 @@ export default async () => { log.debug(e); throw e; } + // 安装依赖 try { installDependencies(useServerAnswer); diff --git a/packages/toolkits/pro/src/lib/interfaces.ts b/packages/toolkits/pro/src/lib/interfaces.ts index 5440abab..80e1c760 100644 --- a/packages/toolkits/pro/src/lib/interfaces.ts +++ b/packages/toolkits/pro/src/lib/interfaces.ts @@ -15,4 +15,6 @@ export interface InitAnswers { name: string; useServer: boolean; serverType: string; + port: string; + host: string; } diff --git a/packages/toolkits/pro/template/tinyvue/.env b/packages/toolkits/pro/template/tinyvue/.env new file mode 100644 index 00000000..f8eafcc7 --- /dev/null +++ b/packages/toolkits/pro/template/tinyvue/.env @@ -0,0 +1 @@ +VITE_CONTEXT=/vue-pro/ \ No newline at end of file diff --git a/packages/toolkits/pro/template/tinyvue/.env.pages b/packages/toolkits/pro/template/tinyvue/.env.pages deleted file mode 100644 index 57ea5834..00000000 --- a/packages/toolkits/pro/template/tinyvue/.env.pages +++ /dev/null @@ -1 +0,0 @@ -VITE_CONTEXT=/vue-pro/pages/ \ No newline at end of file From 658ac6f0cf01180944056b9dd13229732dd8c5f4 Mon Sep 17 00:00:00 2001 From: aliceDxr Date: Mon, 29 May 2023 19:40:05 -0700 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E6=9C=8D=E5=8A=A1=E7=AB=AF=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/toolkits/pro/package.json | 8 +- .../pro/template/server/eggJs/.autod.conf.js | 28 + .../pro/template/server/eggJs/.dockerignore | 21 + .../pro/template/server/eggJs/.eslintignore | 2 + .../pro/template/server/eggJs/.eslintrc | 6 + .../pro/template/server/eggJs/.gitignore | 20 + .../pro/template/server/eggJs/.travis.yml | 12 + .../pro/template/server/eggJs/Dockerfile | 20 + .../pro/template/server/eggJs/README.md | 58 +++ .../server/eggJs/app/controller/employee.ts | 42 ++ .../server/eggJs/app/database/README.md | 5 + .../server/eggJs/app/database/buryinfo.sql | 17 + .../eggJs/app/database/initdatabase.sql | 3 + .../server/eggJs/app/extend/helper.ts | 60 +++ .../server/eggJs/app/model/employee.ts | 76 +++ .../pro/template/server/eggJs/app/router.ts | 11 + .../server/eggJs/app/service/employee.ts | 7 + .../server/eggJs/app/utils/base-utils.ts | 27 + .../pro/template/server/eggJs/appveyor.yml | 14 + .../server/eggJs/config/config.default.ts | 34 ++ .../server/eggJs/config/config.local.ts | 6 + .../server/eggJs/config/config.prod.ts | 34 ++ .../template/server/eggJs/config/plugin.ts | 10 + .../pro/template/server/eggJs/package.json | 58 +++ .../pro/template/server/eggJs/tsconfig.json | 30 ++ .../eggJs/typings/app/controller/index.d.ts | 12 + .../eggJs/typings/app/extend/helper.d.ts | 10 + .../server/eggJs/typings/app/index.d.ts | 7 + .../server/eggJs/typings/app/model/index.d.ts | 12 + .../eggJs/typings/app/service/index.d.ts | 16 + .../server/eggJs/typings/config/index.d.ts | 12 + .../server/eggJs/typings/config/plugin.d.ts | 36 ++ .../template/server/eggJs/typings/index.d.ts | 5 + packages/toolkits/pro/template/tinyvue/.env | 4 +- .../tinyvue/config/vite.config.base.ts | 18 +- .../tinyvue/config/vite.config.dev.ts | 28 +- .../config/vite.config.preview.base.ts | 66 --- .../tinyvue/config/vite.config.preview.dev.ts | 22 - ...ig.preview.prod.ts => vite.config.prod.ts} | 12 +- .../pro/template/tinyvue/package.json | 6 +- .../pro/template/tinyvue/src/api/list.ts | 7 +- .../pro/template/tinyvue/src/env.d.ts | 26 - .../toolkits/pro/template/tinyvue/src/main.ts | 2 +- .../pro/template/tinyvue/src/mock/list.ts | 67 +-- .../tinyvue/src/router/guard/index.ts | 2 +- .../src/views/list/search-table/index.vue | 487 +++++++++--------- .../views/list/search-table/locale/en-US.ts | 1 + .../views/list/search-table/locale/zh-CN.ts | 1 + .../src/views/login/components/login-info.vue | 14 + 49 files changed, 1041 insertions(+), 441 deletions(-) create mode 100644 packages/toolkits/pro/template/server/eggJs/.autod.conf.js create mode 100644 packages/toolkits/pro/template/server/eggJs/.dockerignore create mode 100644 packages/toolkits/pro/template/server/eggJs/.eslintignore create mode 100644 packages/toolkits/pro/template/server/eggJs/.eslintrc create mode 100644 packages/toolkits/pro/template/server/eggJs/.gitignore create mode 100644 packages/toolkits/pro/template/server/eggJs/.travis.yml create mode 100644 packages/toolkits/pro/template/server/eggJs/Dockerfile create mode 100644 packages/toolkits/pro/template/server/eggJs/README.md create mode 100644 packages/toolkits/pro/template/server/eggJs/app/controller/employee.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/database/README.md create mode 100644 packages/toolkits/pro/template/server/eggJs/app/database/buryinfo.sql create mode 100644 packages/toolkits/pro/template/server/eggJs/app/database/initdatabase.sql create mode 100644 packages/toolkits/pro/template/server/eggJs/app/extend/helper.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/model/employee.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/router.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/service/employee.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/utils/base-utils.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/appveyor.yml create mode 100644 packages/toolkits/pro/template/server/eggJs/config/config.default.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/config/config.local.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/config/config.prod.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/config/plugin.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/package.json create mode 100644 packages/toolkits/pro/template/server/eggJs/tsconfig.json create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/app/extend/helper.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/app/index.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/config/index.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/typings/index.d.ts delete mode 100644 packages/toolkits/pro/template/tinyvue/config/vite.config.preview.base.ts delete mode 100644 packages/toolkits/pro/template/tinyvue/config/vite.config.preview.dev.ts rename packages/toolkits/pro/template/tinyvue/config/{vite.config.preview.prod.ts => vite.config.prod.ts} (63%) delete mode 100644 packages/toolkits/pro/template/tinyvue/src/env.d.ts diff --git a/packages/toolkits/pro/package.json b/packages/toolkits/pro/package.json index 422be34d..3d951599 100644 --- a/packages/toolkits/pro/package.json +++ b/packages/toolkits/pro/package.json @@ -1,6 +1,6 @@ { "name": "@opentiny/tiny-toolkit-pro", - "version": "1.0.0", + "version": "1.0.2", "description": "TinyPro 开箱即用的中后台前端/设计解决方案", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -99,6 +99,12 @@ ] }, "changeLog": [ + { + "version": "1.0.2", + "log": [ + "feat: 清理vue模板冗余的文件" + ] + }, { "version": "1.0.0", "log": [ diff --git a/packages/toolkits/pro/template/server/eggJs/.autod.conf.js b/packages/toolkits/pro/template/server/eggJs/.autod.conf.js new file mode 100644 index 00000000..cd4bc15b --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.autod.conf.js @@ -0,0 +1,28 @@ +'use strict'; + +module.exports = { + write: true, + plugin: 'autod-egg', + prefix: '^', + devprefix: '^', + exclude: [ + 'test/fixtures', + 'coverage', + ], + dep: [ + 'egg', + 'egg-scripts', + ], + devdep: [ + 'autod', + 'autod-egg', + 'egg-bin', + 'tslib', + 'typescript', + ], + keep: [ + ], + semver: [ + ], + test: 'scripts', +}; diff --git a/packages/toolkits/pro/template/server/eggJs/.dockerignore b/packages/toolkits/pro/template/server/eggJs/.dockerignore new file mode 100644 index 00000000..6a51e9e2 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.dockerignore @@ -0,0 +1,21 @@ +logs/ +npm-debug.log +node_modules/ +coverage/ +.idea/ +run/ +logs/ +.DS_Store +.vscode +*.swp +*.lock +*.js +!.autod.conf.js + +app/**/*.js +test/ +config/**/*.js +app/**/*.map +test/**/*.map +config/**/*.map +.git diff --git a/packages/toolkits/pro/template/server/eggJs/.eslintignore b/packages/toolkits/pro/template/server/eggJs/.eslintignore new file mode 100644 index 00000000..40a8aad8 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.eslintignore @@ -0,0 +1,2 @@ +**/*.d.ts +node_modules/ diff --git a/packages/toolkits/pro/template/server/eggJs/.eslintrc b/packages/toolkits/pro/template/server/eggJs/.eslintrc new file mode 100644 index 00000000..be3536f1 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": "eslint-config-egg/typescript", + "parserOptions": { + "project": "./tsconfig.json" + } +} \ No newline at end of file diff --git a/packages/toolkits/pro/template/server/eggJs/.gitignore b/packages/toolkits/pro/template/server/eggJs/.gitignore new file mode 100644 index 00000000..c039540f --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.gitignore @@ -0,0 +1,20 @@ +logs/ +npm-debug.log +node_modules/ +coverage/ +.idea/ +run/ +logs/ +.DS_Store +.vscode +*.swp +*.lock +*.js +!.autod.conf.js + +app/**/*.js +test/**/*.js +config/**/*.js +app/**/*.map +test/**/*.map +config/**/*.map diff --git a/packages/toolkits/pro/template/server/eggJs/.travis.yml b/packages/toolkits/pro/template/server/eggJs/.travis.yml new file mode 100644 index 00000000..fc5fd2a5 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/.travis.yml @@ -0,0 +1,12 @@ + +language: node_js +node_js: + - '8' +before_install: + - npm i npminstall@5 -g +install: + - npminstall +script: + - npm run ci +after_script: + - npminstall codecov && codecov diff --git a/packages/toolkits/pro/template/server/eggJs/Dockerfile b/packages/toolkits/pro/template/server/eggJs/Dockerfile new file mode 100644 index 00000000..88d35748 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/Dockerfile @@ -0,0 +1,20 @@ +FROM node:12.6.0-alpine + +# 创建app目录 +RUN mkdir -p /usr/src/app + +# 设置容器内工作目录 +WORKDIR /usr/src/app + +COPY package.json /usr/src/app/ + +RUN yarn + +# 拷贝所有源代码到工作目录 +COPY . /usr/src/app + +# 暴露容器端口 +EXPOSE 7001 + +# 启动node应用 +ENTRYPOINT ["npm", "run"] diff --git a/packages/toolkits/pro/template/server/eggJs/README.md b/packages/toolkits/pro/template/server/eggJs/README.md new file mode 100644 index 00000000..d4f81b1b --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/README.md @@ -0,0 +1,58 @@ +# egg cli 服务 + +[建议读官方文档](https://eggjs.org/zh-cn/intro/quickstart.html) + +>推荐使用docker启动egg服务 + +## 开发测试 + +step: + +1. ```yarn``` + +2. ```npm run dev``` + +## 线上 + +```docker run --name test-egg -p 9999:7001 --net egg-mysql-net tgc-egg:v1.4 -d start``` + +接口路径:host:9999 + +## 关于连接mysql数据库注意事项 + +docker 服务启动后创建一个新的网络模式egg-mysql-net(bridger)更好的管理namsespace +``` +docker network create egg-mysql-net +``` + + +建议直接使用mysql官方的docker镜像启动服务 +``` +docker run --name test-mysql -p 3333:3306 --net egg-mysql-net -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 +``` +进入到mysql容器内: + +```docker exec -it test-mysql sh``` + +登录mysql: + +```mysql -u root -p 123456``` + + +将/app/databases 中的sql运行一遍即可 + +或者用主机连接容器内部的数据库(推荐使用Navicat fo MySQL) + +``` +->新建连接 -> 常规 + +连接名:xxxx + +主机名:localhost + +端口:3333 + +用户名:root + +密码:123456 +``` diff --git a/packages/toolkits/pro/template/server/eggJs/app/controller/employee.ts b/packages/toolkits/pro/template/server/eggJs/app/controller/employee.ts new file mode 100644 index 00000000..2a61ae9e --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/controller/employee.ts @@ -0,0 +1,42 @@ +import { Controller } from 'egg'; + +export default class EmployeeController extends Controller { + public async getEmployee() { + const { ctx } = this; + const { query } = ctx; + const { pageIndex = '1', pageSize = '20', searchInfo = '{}' } = query; + const [ offset, limit ] = ctx.helper.getPagination(pageIndex, pageSize); + + try { + const where = ctx.helper.getWhere(JSON.parse(searchInfo)); + let { sortField, sortType } = query; + + [sortField, sortType] = ctx.helper.getSortFieldAndType( + sortField, + sortType, + ); + const options = { + where, + limit, + offset, + order: [[sortField, sortType]], + raw: true, + }; + + this.logger.info('[ controller | employee ] getEmployee : 进入getEmployee方法'); + const result = await ctx.service.employee.getEmployee(options); + ctx.helper.commonJson( + ctx, + { + data: result.rows, + total: result.count, + }, + 200, + ); + } catch (error) { + console.log('error', error) + // ctx.helper.exceptionHandling(ctx, error); + ctx.helper.commonJson(ctx, {}, 500, 'CM087'); + } + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/app/database/README.md b/packages/toolkits/pro/template/server/eggJs/app/database/README.md new file mode 100644 index 00000000..4d13d815 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/database/README.md @@ -0,0 +1,5 @@ +# 关于数据库及表生成注意事项 + +**初始化数据库的时候建议直接使用sql语句** + +初始化新表时最好是将表对应的sql写到每个文件中 diff --git a/packages/toolkits/pro/template/server/eggJs/app/database/buryinfo.sql b/packages/toolkits/pro/template/server/eggJs/app/database/buryinfo.sql new file mode 100644 index 00000000..e9fdb313 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/database/buryinfo.sql @@ -0,0 +1,17 @@ +CREATE TABLE buryinfo( + `_id` INT NOT NULL AUTO_INCREMENT COMMENT '自增id', + `type_id` VARCHAR(50) NOT NULL COMMENT '埋点ID', + `business_desc` VARCHAR(255) NOT NULL COMMENT '业务描述', + `parameter` VARCHAR(255) COMMENT '埋点自定义参数', + `user_email` VARCHAR(50) COMMENT '注册人邮箱', + `user_phone` VARCHAR(20) COMMENT '注册人电话', + `user_name` VARCHAR(50) NOT NULL COMMENT '注册人姓名', + `is_registered` TINYINT(3) DEFAULT 1 COMMENT '是否在鲁班上注册过', + `disable` TINYINT(3) DEFAULT 1 COMMENT '是否启用埋点', + `platform` VARCHAR(50) NOT NULL COMMENT '平台', + `category` VARCHAR(255) NOT NULL COMMENT '目录', + `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (_id), + INDEX locktype (platform, category) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 diff --git a/packages/toolkits/pro/template/server/eggJs/app/database/initdatabase.sql b/packages/toolkits/pro/template/server/eggJs/app/database/initdatabase.sql new file mode 100644 index 00000000..e1940880 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/database/initdatabase.sql @@ -0,0 +1,3 @@ +CREATE DATABASE tiny_server_test; + +USE tiny_server_test; diff --git a/packages/toolkits/pro/template/server/eggJs/app/extend/helper.ts b/packages/toolkits/pro/template/server/eggJs/app/extend/helper.ts new file mode 100644 index 00000000..1de20079 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/extend/helper.ts @@ -0,0 +1,60 @@ +import { Op } from 'sequelize'; +import BaseUtils from '../utils/base-utils'; + +const DEFAULT_SORT_FIELD = 'create_time'; +const SORT_ASC = 'asc'; +const SORT_DESC = 'desc'; + +export default { + exceptionHandling(ctx, error, message = '') { + const errMsg = BaseUtils.getErrorMessage(error); + + if (message) { + ctx.logger.error(message, errMsg); + } else { + ctx.logger.error(errMsg); + } + }, + + commonJson( + ctx, + data?: Record, + httpStatus?: number, + errCode?: string, + errMsg?: string, + ) { + const responseBody = { + code: errCode ? errCode : '0', + errMsg: errMsg || (errCode ? ctx.__(errCode) : ''), + data: data ? data : {}, + }; + ctx.status = httpStatus ? httpStatus : 200; + ctx.body = responseBody; + }, + + getPagination(pageIndex: string = '1', pageSize: string = '20') { + let no = Number(pageIndex); + let size = Number(pageSize); + no = isNaN(no) || no < 1 ? 1 : no; + size = isNaN(size) || size < 0 ? 20 : size; + return [ (no - 1) * size, size ]; + }, + + getSortFieldAndType(sortField: string, sortType: string = 'desc') { + return [ (sortField || DEFAULT_SORT_FIELD), (sortType === SORT_ASC)? SORT_ASC : SORT_DESC ]; + }, + + getWhere(searchInfo: { [prop: string]: string } = {}) { + const where = {}; + + Object.keys(searchInfo).map(key => { + const value = searchInfo[key]; + + where[key] = { + [Op.like]: `%${value}%`, + } + }) + + return where; + } +}; diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/employee.ts b/packages/toolkits/pro/template/server/eggJs/app/model/employee.ts new file mode 100644 index 00000000..91e7ef9f --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/model/employee.ts @@ -0,0 +1,76 @@ +/* indent size: 4 */ + +module.exports = (app: any) => { + const DataTypes = app.Sequelize; + + const Model = app.model.define( + 'employee', + { + id: { + type: DataTypes.INTEGER(16), + allowNull: false, + primaryKey: true, + autoIncrement: true, + }, + name: { + type: DataTypes.STRING(20), + allowNull: false, + }, + employee_no: { + type: DataTypes.STRING(50), + allowNull: false, + }, + department: { + type: DataTypes.STRING(50), + allowNull: false, + }, + department_level: { + type: DataTypes.STRING(50), + allowNull: false, + }, + status: { + type: DataTypes.STRING(10), + allowNull: false, + }, + workbench_name: { + type: DataTypes.STRING(50), + allowNull: false, + }, + project: { + type: DataTypes.STRING(50), + allowNull: false, + }, + type: { + type: DataTypes.STRING(50), + allowNull: false, + }, + address: { + type: DataTypes.STRING(50), + allowNull: false, + }, + roles: { + type: DataTypes.STRING(50), + allowNull: false, + }, + last_update_user: { + type: DataTypes.STRING(50), + allowNull: false, + }, + create_time: { + type: DataTypes.TIME, + allowNull: true, + defaultValue: DataTypes.literal('CURRENT_TIMESTAMP'), + }, + }, + { + tableName: 'employee', + underscored: false, + freezeTableName: true, + omitNull: false, + timestamps: false, + paranoid: false, + }, + ); + + return Model; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/app/router.ts b/packages/toolkits/pro/template/server/eggJs/app/router.ts new file mode 100644 index 00000000..323a5947 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/router.ts @@ -0,0 +1,11 @@ +import { Application } from 'egg'; + +export default (app: Application) => { + const { controller, router } = app; + + // todo: init database connect + // router.post('/v1/database/init'); + + router.get('/v1/employee/getEmployee', controller.employee.getEmployee); + +}; diff --git a/packages/toolkits/pro/template/server/eggJs/app/service/employee.ts b/packages/toolkits/pro/template/server/eggJs/app/service/employee.ts new file mode 100644 index 00000000..4fda753b --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/service/employee.ts @@ -0,0 +1,7 @@ +import { Service } from 'egg'; + +export default class Employee extends Service { + public async getEmployee(options): Promise { + return this.ctx.model.Employee.findAndCountAll(options); + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/app/utils/base-utils.ts b/packages/toolkits/pro/template/server/eggJs/app/utils/base-utils.ts new file mode 100644 index 00000000..ce10ba4c --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/utils/base-utils.ts @@ -0,0 +1,27 @@ +type CommonError = { + message: string; +}; +export function isCommonError(error: unknown): error is CommonError { + return typeof error === 'object' && + error !== null && + 'message' in error && + typeof (error as Record).message === 'string'; +} + +export default class BaseUtils { + public static getErrorMessage(error: unknown): string { + console.log('err', error) + return this.convertToCommonError(error).message; + } + + private static convertToCommonError(error: unknown): CommonError { + if (isCommonError(error)) { + return error; + } + try { + return new Error(JSON.stringify(error)); + } catch (e) { + return new Error(String(error)); + } + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/appveyor.yml b/packages/toolkits/pro/template/server/eggJs/appveyor.yml new file mode 100644 index 00000000..5fd5337d --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/appveyor.yml @@ -0,0 +1,14 @@ +environment: + matrix: + - nodejs_version: '8' + +install: + - ps: Install-Product node $env:nodejs_version + - npm i npminstall@5 && node_modules\.bin\npminstall + +test_script: + - node --version + - npm --version + - npm run test + +build: off diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts new file mode 100644 index 00000000..0d15788e --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts @@ -0,0 +1,34 @@ +import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg'; + +export default (appInfo: EggAppInfo) => { + const config = {} as PowerPartial; + + // override config from framework / plugin + // use for cookie sign key, should change to your own and keep security + config.keys = appInfo.name + '_1597038250886_3781'; + + // add your egg config in here + config.middleware = []; + + config.sequelize = { + dialect: 'mysql', + host: 'localhost', + port: 3306, + username: 'root', + password: '123456', + define: { + timestamps: true, + freezeTableName: true, + underscored: false, + createdAt: 'created_at', + updatedAt: 'updated_at', + }, + timezone: '+08:00', + database: 'tiny_server_test' + }; + + // the return config will combines to EggAppConfig + return { + ...config + }; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.local.ts b/packages/toolkits/pro/template/server/eggJs/config/config.local.ts new file mode 100644 index 00000000..56415cec --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/config/config.local.ts @@ -0,0 +1,6 @@ +import { EggAppConfig, PowerPartial } from 'egg'; + +export default () => { + const config: PowerPartial = {}; + return config; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.prod.ts b/packages/toolkits/pro/template/server/eggJs/config/config.prod.ts new file mode 100644 index 00000000..0089ca35 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/config/config.prod.ts @@ -0,0 +1,34 @@ +import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg'; + +export default (appInfo: EggAppInfo) => { + const config = {} as PowerPartial; + + // override config from framework / plugin + // use for cookie sign key, should change to your own and keep security + config.keys = appInfo.name + '_1597038250886_3781'; + + // add your egg config in here + config.middleware = ['formatData']; + + config.sequelize = { + dialect: 'mysql', + host: 'localhost', + port: 3306, + username: 'root', + password: '123456', + define: { + timestamps: true, + freezeTableName: true, + underscored: false, + createdAt: 'created_at', + updatedAt: 'updated_at', + }, + timezone: '+08:00', + database: 'tiny_server_test' + }; + + // the return config will combines to EggAppConfig + return { + ...config + }; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/config/plugin.ts b/packages/toolkits/pro/template/server/eggJs/config/plugin.ts new file mode 100644 index 00000000..3231533b --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/config/plugin.ts @@ -0,0 +1,10 @@ +import { EggPlugin } from 'egg'; + +const plugin: EggPlugin = { + sequelize: { + enable: true, + package: 'egg-sequelize', + }, +}; + +export default plugin; diff --git a/packages/toolkits/pro/template/server/eggJs/package.json b/packages/toolkits/pro/template/server/eggJs/package.json new file mode 100644 index 00000000..f8b3eacf --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/package.json @@ -0,0 +1,58 @@ +{ + "name": "TinyProServer-EggJS", + "version": "1.0.0", + "private": true, + "egg": { + "typescript": true, + "declarations": true + }, + "scripts": { + "start": "npm run stop && npm run tsc && egg-scripts start --title=egg-server-tgc-trace-server --ignore-stderr", + "stop": "ets clean && egg-scripts stop --title=egg-server-tgc-trace-server", + "dev": "egg-bin dev", + "debug": "egg-bin debug", + "test-local": "egg-bin test", + "test": "npm run lint -- --fix && npm run test-local", + "cov": "egg-bin cov", + "tsc": "ets && tsc -p tsconfig.json", + "ci": "npm run lint && npm run cov && npm run tsc", + "autod": "autod", + "lint": "eslint . --ext .ts", + "clean": "ets clean" + }, + "dependencies": { + "egg": "^2.6.1", + "egg-scripts": "^2.6.0", + "egg-sequelize": "^5.2.2", + "mysql2": "^2.1.0" + }, + "devDependencies": { + "@types/mocha": "^2.2.40", + "@types/node": "^7.0.12", + "@types/supertest": "^2.0.0", + "autod": "^3.0.1", + "autod-egg": "^1.1.0", + "egg-bin": "^4.11.0", + "egg-ci": "^1.8.0", + "egg-mock": "^3.16.0", + "eslint": "^6.7.2", + "eslint-config-egg": "^8.0.0", + "tslib": "^1.9.0", + "typescript": "^3.0.0" + }, + "engines": { + "node": ">=8.9.0" + }, + "ci": { + "version": "8" + }, + "repository": { + "type": "git", + "url": "" + }, + "eslintIgnore": [ + "coverage" + ], + "author": "Sunbridger", + "license": "MIT" +} diff --git a/packages/toolkits/pro/template/server/eggJs/tsconfig.json b/packages/toolkits/pro/template/server/eggJs/tsconfig.json new file mode 100644 index 00000000..b522c82e --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es2017", + "module": "commonjs", + "strict": true, + "noImplicitAny": false, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "charset": "utf8", + "allowJs": false, + "pretty": true, + "noEmitOnError": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "strictPropertyInitialization": false, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "inlineSourceMap": true, + "importHelpers": true + }, + "exclude": [ + "app/public", + "app/views", + "node_modules*" + ] +} diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts new file mode 100644 index 00000000..300fc60b --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts @@ -0,0 +1,12 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +import ExportEmployee from '../../../app/controller/employee'; + +declare module 'egg' { + interface IController { + employee: ExportEmployee; + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/extend/helper.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/extend/helper.d.ts new file mode 100644 index 00000000..1e96493d --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/extend/helper.d.ts @@ -0,0 +1,10 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +import ExtendIHelper from '../../../app/extend/helper'; +type ExtendIHelperType = typeof ExtendIHelper; +declare module 'egg' { + interface IHelper extends ExtendIHelperType { } +} \ No newline at end of file diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/index.d.ts new file mode 100644 index 00000000..92fbc982 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/index.d.ts @@ -0,0 +1,7 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +export * from 'egg'; +export as namespace Egg; diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts new file mode 100644 index 00000000..13833dec --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts @@ -0,0 +1,12 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +import ExportEmployee from '../../../app/model/employee'; + +declare module 'egg' { + interface IModel { + Employee: ReturnType; + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts new file mode 100644 index 00000000..567c6c80 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts @@ -0,0 +1,16 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +type AnyClass = new (...args: any[]) => any; +type AnyFunc = (...args: any[]) => T; +type CanExportFunc = AnyFunc> | AnyFunc>; +type AutoInstanceType : T> = U extends AnyClass ? InstanceType : U; +import ExportEmployee from '../../../app/service/employee'; + +declare module 'egg' { + interface IService { + employee: AutoInstanceType; + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/typings/config/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/config/index.d.ts new file mode 100644 index 00000000..a2d4ad76 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/config/index.d.ts @@ -0,0 +1,12 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +import { EggAppConfig } from 'egg'; +import ExportConfigDefault from '../../config/config.default'; +type ConfigDefault = ReturnType; +type NewEggAppConfig = ConfigDefault; +declare module 'egg' { + interface EggAppConfig extends NewEggAppConfig { } +} \ No newline at end of file diff --git a/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts new file mode 100644 index 00000000..c8f1c015 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts @@ -0,0 +1,36 @@ +// This file is created by egg-ts-helper@1.34.7 +// Do not modify this file!!!!!!!!! +/* eslint-disable */ + +import 'egg'; +import 'egg-onerror'; +import 'egg-session'; +import 'egg-i18n'; +import 'egg-watcher'; +import 'egg-multipart'; +import 'egg-security'; +import 'egg-development'; +import 'egg-logrotator'; +import 'egg-schedule'; +import 'egg-static'; +import 'egg-jsonp'; +import 'egg-view'; +import 'egg-sequelize'; +import { EggPluginItem } from 'egg'; +declare module 'egg' { + interface EggPlugin { + onerror?: EggPluginItem; + session?: EggPluginItem; + i18n?: EggPluginItem; + watcher?: EggPluginItem; + multipart?: EggPluginItem; + security?: EggPluginItem; + development?: EggPluginItem; + logrotator?: EggPluginItem; + schedule?: EggPluginItem; + static?: EggPluginItem; + jsonp?: EggPluginItem; + view?: EggPluginItem; + sequelize?: EggPluginItem; + } +} \ No newline at end of file diff --git a/packages/toolkits/pro/template/server/eggJs/typings/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/index.d.ts new file mode 100644 index 00000000..c81035ac --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/typings/index.d.ts @@ -0,0 +1,5 @@ +import 'egg'; + +declare module 'egg' { + +} \ No newline at end of file diff --git a/packages/toolkits/pro/template/tinyvue/.env b/packages/toolkits/pro/template/tinyvue/.env index f8eafcc7..689ce3fb 100644 --- a/packages/toolkits/pro/template/tinyvue/.env +++ b/packages/toolkits/pro/template/tinyvue/.env @@ -1 +1,3 @@ -VITE_CONTEXT=/vue-pro/ \ No newline at end of file + +VITE_CONTEXT=/vue-pro/ +VITE_BASE_API='/api' diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.base.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.base.ts index f7927ae4..abd265a1 100644 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.base.ts +++ b/packages/toolkits/pro/template/tinyvue/config/vite.config.base.ts @@ -5,23 +5,26 @@ import vueJsx from '@vitejs/plugin-vue-jsx'; import svgLoader from 'vite-svg-loader'; import { viteMockServe } from 'vite-plugin-mock'; -export default defineConfig({ +const useMock = !! process.env.VITE_USE_MOCK + +const config = { plugins: [ vue(), vueJsx(), svgLoader({ svgoConfig: {} }), viteMockServe({ - // 更多配置见最下方 mockPath: '../src/mock', // mock文件地址 - localEnabled: true, // 开发打包开关 - prodEnabled: true, // 生产打包开关 // 这样可以控制关闭mock的时候不让mock打包到最终代码内 + localEnabled:useMock, // 开发打包开关 + prodEnabled:true, // 生产打包开关 // 这样可以控制关闭mock的时候不让mock打包到最终代码内 injectCode: ` import { setupProdMockServer } from '../src/mockProdServer'; setupProdMockServer(); `, - logger: false, // 是否在控制台显示请求日志 + logger: true, // 是否在控制台显示请求日志 supportTs: false, // 打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件 + watchFiles:true, injectFile: resolve('../src/main.ts'), - }), + }) ], build: { + outDir: resolve(__dirname, '../dist'), commonjsOptions: { transformMixedEsModules: true, }, @@ -62,4 +65,5 @@ export default defineConfig({ }, }, }, -}); +} +export default defineConfig(config); diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts index ca8d177d..c40f0204 100644 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts +++ b/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts @@ -1,7 +1,16 @@ -import { mergeConfig } from 'vite'; +import { mergeConfig,loadEnv } from 'vite'; import eslint from 'vite-plugin-eslint'; -import baseConig from './vite.config.base'; +import baseConfig from './vite.config.base'; + +const proxyConfig = { + [loadEnv('',process.cwd()).VITE_BASE_API]: { + target: loadEnv('',process.cwd()).VITE_SEVER_HOST, + changeOrigin: true, + logLevel: 'debug', + rewrite: path => path.replace(new RegExp(`${loadEnv('',process.cwd()).VITE_BASE_API}`), '') + } +} export default mergeConfig( { mode: 'development', @@ -10,6 +19,9 @@ export default mergeConfig( fs: { strict: true, }, + proxy: { + ...proxyConfig + } }, plugins: [ eslint({ @@ -17,16 +29,6 @@ export default mergeConfig( exclude: ['node_modules'], }), ], - build: { - rollupOptions: { - output: { - manualChunks: { - vue: ['vue', 'vue-router', 'pinia', '@vueuse/core', 'vue-i18n'], - }, - }, - }, - chunkSizeWarningLimit: 2000, - }, }, - baseConig + baseConfig ); diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.base.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.base.ts deleted file mode 100644 index 05b4765b..00000000 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.base.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { resolve } from 'path'; -import { defineConfig } from 'vite'; -import vue from '@vitejs/plugin-vue'; -import vueJsx from '@vitejs/plugin-vue-jsx'; -import svgLoader from 'vite-svg-loader'; -import { viteMockServe } from 'vite-plugin-mock'; - -export default defineConfig({ - plugins: [ - vue(), - vueJsx(), - svgLoader({ svgoConfig: {} }), - viteMockServe({ - // 更多配置见最下方 - mockPath: '../src/mock', // mock文件地址 - localEnabled: true, // 开发打包开关 - prodEnabled: true, // 生产打包开关 // 这样可以控制关闭mock的时候不让mock打包到最终代码内 - injectCode: ` import { setupProdMockServer } from '../src/mockProdServer'; setupProdMockServer(); `, - logger: false, // 是否在控制台显示请求日志 - supportTs: false, // 打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件 - injectFile: resolve('../src/main.ts'), - }), - ], - build: { - outDir: resolve(__dirname, '../dist/vue-pro/pages'), - commonjsOptions: { - transformMixedEsModules: true, - }, - }, - resolve: { - alias: [ - { - find: '@', - replacement: resolve(__dirname, '../src'), - }, - { - find: 'assets', - replacement: resolve(__dirname, '../src/assets'), - }, - { - find: 'vue-i18n', - replacement: 'vue-i18n/dist/vue-i18n.cjs.js', // Resolve the i18n warning issue - }, - { - find: 'vue', - replacement: 'vue/dist/vue.esm-bundler.js', // compile template - }, - ], - extensions: ['.ts', '.js'], - }, - define: { - 'process.env': {}, - }, - css: { - preprocessorOptions: { - less: { - modifyVars: { - hack: `true; @import (reference) "${resolve( - 'src/assets/style/breakpoint.less' - )}";`, - }, - javascriptEnabled: true, - }, - }, - }, -}); diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.dev.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.dev.ts deleted file mode 100644 index 2071c0aa..00000000 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.dev.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { mergeConfig } from 'vite'; -import eslint from 'vite-plugin-eslint'; -import baseConfig from './vite.config.preview.base'; - -export default mergeConfig( - { - mode: 'development', - server: { - open: true, - fs: { - strict: true, - }, - }, - plugins: [ - eslint({ - include: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'], - exclude: ['node_modules'], - }), - ], - }, - baseConfig -); diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.prod.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.prod.ts similarity index 63% rename from packages/toolkits/pro/template/tinyvue/config/vite.config.preview.prod.ts rename to packages/toolkits/pro/template/tinyvue/config/vite.config.prod.ts index a114930f..684cd1d3 100644 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.preview.prod.ts +++ b/packages/toolkits/pro/template/tinyvue/config/vite.config.prod.ts @@ -1,14 +1,18 @@ import { mergeConfig } from 'vite'; -import baseConig from './vite.config.preview.base'; +import baseConig from './vite.config.base'; import configCompressPlugin from './plugin/compress'; import configVisualizerPlugin from './plugin/visualizer'; +import configArcoResolverPlugin from './plugin/arcoResolver'; export default mergeConfig( { - mode: 'pages', + mode: 'production', mock: true, - base: `${process.env.static_url_prefix}/tiny-pro-vue/${process.env.staticReleaseVersion}/vue-pro/pages`, - plugins: [configCompressPlugin('gzip'), configVisualizerPlugin()], + plugins: [ + configCompressPlugin('gzip'), + configVisualizerPlugin(), + configArcoResolverPlugin(), + ], build: { rollupOptions: { output: { diff --git a/packages/toolkits/pro/template/tinyvue/package.json b/packages/toolkits/pro/template/tinyvue/package.json index 16c9cc38..6379d6c7 100644 --- a/packages/toolkits/pro/template/tinyvue/package.json +++ b/packages/toolkits/pro/template/tinyvue/package.json @@ -6,8 +6,8 @@ "author": "Tiny Team", "license": "MIT", "scripts": { - "start": "vite --config ./config/vite.config.preview.dev.ts --mode pages --port 3000", - "build": "vite build --config ./config/vite.config.preview.prod.ts", + "start": "vite --config ./config/vite.config.dev.ts --port 3031", + "build": "vite build --config ./config/vite.config.prod.ts", "report": "cross-env REPORT=true npm run build", "lint-staged": "npx lint-staged", "prepare": "git init && husky install" @@ -28,7 +28,7 @@ ] }, "dependencies": { - "@opentiny/hwc-client": "^0.0.14", + "@opentiny/hwc-client": "^0.0.12", "@opentiny/vue": "^3.6.8", "@types/mockjs": "^1.0.4", "@vueuse/core": "^7.3.0", diff --git a/packages/toolkits/pro/template/tinyvue/src/api/list.ts b/packages/toolkits/pro/template/tinyvue/src/api/list.ts index c1daaa49..0f827714 100644 --- a/packages/toolkits/pro/template/tinyvue/src/api/list.ts +++ b/packages/toolkits/pro/template/tinyvue/src/api/list.ts @@ -6,6 +6,9 @@ export interface QueryTaskParmas { [key: string]: any; } -export function queryTaskList(params: QueryTaskParmas) { - return axios.post('/api/list/tasks', params); +export function queryEmployeeList(params: QueryTaskParmas) { + return axios.post('/api/v1/employee/getEmployee', params); +} +export function deleteEmployee(id:string) { + return axios.delete(`/api/v1/employee/delete?id=${id}`); } diff --git a/packages/toolkits/pro/template/tinyvue/src/env.d.ts b/packages/toolkits/pro/template/tinyvue/src/env.d.ts deleted file mode 100644 index 1556eaa5..00000000 --- a/packages/toolkits/pro/template/tinyvue/src/env.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -/// - -declare module '*.vue' { - import { DefineComponent } from 'vue'; - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any>; - export default component; -} - -declare module 'vue/types/vue' { - interface Vue { - $echarts: any; - } -} - -interface ImportMetaEnv { - readonly VITE_API_BASE_URL: string; -} - -declare module '@opentiny/vue-locale'; -declare module '@opentiny/vue'; -declare module '@opentiny/vue-icon'; -declare module '@opentiny/vue-theme/theme-tool.js'; -declare module '@opentiny/vue-theme/theme'; -declare module 'echarts4'; -declare module 'query-string'; diff --git a/packages/toolkits/pro/template/tinyvue/src/main.ts b/packages/toolkits/pro/template/tinyvue/src/main.ts index 00df1eb9..7cbdeb7e 100644 --- a/packages/toolkits/pro/template/tinyvue/src/main.ts +++ b/packages/toolkits/pro/template/tinyvue/src/main.ts @@ -16,7 +16,7 @@ import config from '../hwc-exports.json'; import 'echarts4/map/js/china.js'; import chinaMap from './assets/chaina.json'; -setupProdMockServer(); +if(import.meta.env.VITE_USE_MOCK) setupProdMockServer(); echarts4.registerMap('china', chinaMap); const app = createApp(App); diff --git a/packages/toolkits/pro/template/tinyvue/src/mock/list.ts b/packages/toolkits/pro/template/tinyvue/src/mock/list.ts index eeada3d7..9b3d9053 100644 --- a/packages/toolkits/pro/template/tinyvue/src/mock/list.ts +++ b/packages/toolkits/pro/template/tinyvue/src/mock/list.ts @@ -9,11 +9,17 @@ const taskList = Mock.mock({ 'name': 'xiaoming', 'rank': '初级', 'description': '一段描述文字', - 'createdTime': '@datetime', + 'createTime': '@datetime', 'status|1': ['0', '1', '2'], - 'owner': 'Tiny Design', - 'workbench': 'work', - 'role': '前端', + 'type': 'Tiny Design', + 'roles': '前端', + 'employeeNo': '00022456', + 'department': '公共服务', + 'departmentLevel': '中级', + 'workbenchName': 'work', + 'project': 'TinyDesign', + 'address': '西安研究所', + 'lastUpdateUser': '张三' }, ], }); @@ -23,69 +29,22 @@ let treeData = []; export default [ // list { - url: '/api/list/tasks', + url: '/api/v1/employee/getEmployee', method: 'post', response: (params: requestParam) => { const { pageIndex = 1, pageSize = 10, - status, - name, - department, - role, - workname, - enablement, - type, - study, } = JSON.parse(JSON.stringify(params.body)); const index = pageIndex as number; const size = pageSize as number; const offset = (index - 1) * size; const count = index * size; - - if (status !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { status: string }) => item.status === status); - } else if (name !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { name: string }) => item.name === name); - } else if (department !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter( - (item: { department: string }) => item.department === department - ); - } else if (role !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { role: string }) => item.role === role); - } else if (workname !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { workname: string }) => item.workname === workname); - } else if (enablement !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter( - (item: { enablement: string }) => item.enablement === enablement - ); - } else if (type !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { type: string }) => item.type === type); - } else if (study !== undefined) { - treeData = taskList.list - .slice(offset, count) - .filter((item: { study: string }) => item.study === study); - } else { - treeData = taskList.list.slice(offset, count); - } + treeData = taskList.list.slice(offset, count); const data = Mock.mock({ total: 60, - list: treeData, + data: treeData, }); return successResponseWrapper(data); diff --git a/packages/toolkits/pro/template/tinyvue/src/router/guard/index.ts b/packages/toolkits/pro/template/tinyvue/src/router/guard/index.ts index 490ea49b..ce34d576 100644 --- a/packages/toolkits/pro/template/tinyvue/src/router/guard/index.ts +++ b/packages/toolkits/pro/template/tinyvue/src/router/guard/index.ts @@ -11,5 +11,5 @@ function setupPageGuard(router: Router) { export default function createRouteGuard(router: Router) { setupPageGuard(router); - setupPermissionGuard(router); + if(import.meta.env.VITE_USE_MOCK) setupPermissionGuard(router); } diff --git a/packages/toolkits/pro/template/tinyvue/src/views/list/search-table/index.vue b/packages/toolkits/pro/template/tinyvue/src/views/list/search-table/index.vue index d930eec4..6eb0000c 100644 --- a/packages/toolkits/pro/template/tinyvue/src/views/list/search-table/index.vue +++ b/packages/toolkits/pro/template/tinyvue/src/views/list/search-table/index.vue @@ -1,64 +1,64 @@