Skip to content

Commit 4347b59

Browse files
authored
新增数据库配置信息和文档 (#67)
* fix: add database sql file * docs: update readme database * fix: fix error log * fix: fix token expire * feat: auto create database * docs: update pro readme * docs: update pro readme * docs: update pro readme * fix: pro init log info
1 parent 9318956 commit 4347b59

13 files changed

Lines changed: 209 additions & 34 deletions

File tree

packages/toolkits/pro/README.md

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@ tiny-toolkit-pro 套件,开箱即用的中后台前端/设计解决方案
1212
tiny init pro
1313
```
1414
### 配置项目名称、描述
15-
项目名称默认是当前所在文件夹名称
15+
项目名称默认是当前所在文件夹名称
1616

1717
```
1818
? 请输入项目名称:
1919
? 请输入项目描述: (基于TinyPro套件创建的中后台系统)
2020
```
2121
### 选择前端技术栈
22-
目前支持```vue``` ```angular```两种前端技术栈。
22+
目前支持`Vue` `Angular`两种前端技术栈。
2323
```
2424
? 请选择您希望使用的技术栈: (Use arrow keys)
2525
> vue
2626
angular
2727
```
2828
### 选择服务端技术栈(可选配置)
29-
**目前仅 ```vue```工程支持对接服务端,且只支持```Egg.js```,剩余功能正在开发中**
29+
**目前仅 `Vue`工程支持对接服务端,且只支持`Egg.js`,剩余功能正在开发中**
3030
如果选择不对接服务端,全部接口将采用mock数据。
3131
```
3232
? 请选择您希望使用的服务端技术栈: (Use arrow keys)
@@ -35,30 +35,51 @@ tiny init pro
3535
Nest.js
3636
暂不配置
3737
```
38-
### 配置数据库信息(可选配置)
39-
38+
### 选择数据库(可选配置)
4039
```
4140
? 请选择数据库类型: (Use arrow keys)
4241
> mySQL
4342
暂不配置
43+
```
44+
### 数据库准备工作
45+
可使用本地数据库或云数据库,请提前安装配置本地数据库服务或者云数据库服务,确保连接正常可用。
46+
- MySQL[下载链接](https://dev.mysql.com/downloads/)
47+
- 云数据库推荐使用[华为云数据库RDS](https://support.huaweicloud.com/productdesc-rds/zh-cn_topic_dashboard.html),可参考[云服务最佳实践](https://opentiny.design/vue-pro/docs/advanced/practiced) 创建数据库。
48+
49+
50+
### 配置数据库信息
4451

52+
- **初始化过程中会自动创建数据库和表,建议输入新的数据库名称以免造成数据库覆盖风险。**
53+
```
4554
? 请输入数据库地址: (localhost)
4655
? 请输入数据库端口: (3306)
4756
? 请输入数据库名称:
4857
? 请输入登录用户名: (root)
4958
? 请输入密码: [input is hidden]
5059
```
60+
- 此处配置也可在项目创建完成后在`server/config/config.default.ts`中进行配置修改。
61+
- pro套件会在初始化时自动创建数据库和表,如因配置等问题导致数据库初始化失败,有以下两种方式可帮助重新初始化数据库:
62+
- 确认好正确配置后重新运行 `tiny init pro` 覆盖安装。
63+
- 进入 `server/app/databases` 目录下手动执行相关sql。
64+
- 数据库表中会自动插入一条用户信息(账号:admin@example.com 密码:admin),可直接用于登录。
65+
- 如server服务启动失败,请确保数据库服务的地址、名称、账号、密码等与`server/config/config.default.ts` 中配置一致。
66+
- `server/app.ts` 中会同步ORM模型到数据库帮助新建表但只建议在开发环境下使用。
5167

5268
### 开启本地服务器
5369

70+
Web
71+
```
72+
cd web && npm run start
5473
```
55-
tiny start
74+
Egg
75+
```
76+
cd server && npm run dev
5677
```
5778

5879
### 代码打包
59-
80+
进入对应目录下执行
6081
```
61-
tiny build
82+
npm run build
6283
```
6384

6485
## 维护者

packages/toolkits/pro/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"ejs": "^3.1.9",
6262
"fs-extra": "^10.1.0",
6363
"inquirer": "^8.0.2",
64+
"mysql2": "^3.4.2",
6465
"open": "^8.4.0"
6566
},
6667
"devDependencies": {

packages/toolkits/pro/src/lib/init.ts

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as path from 'path';
22
import chalk from 'chalk';
33
import spawn from 'cross-spawn';
44
import * as dotenv from 'dotenv';
5+
import mysql from 'mysql2/promise';
56
import inquirer, { QuestionCollection } from 'inquirer';
67
import { cliConfig, logs, fs } from '@opentiny/cli-devkit';
78
import { ProjectInfo, ServerFrameworks } from './interfaces';
@@ -112,6 +113,57 @@ const getProjectInfo = (): Promise<ProjectInfo> => {
112113
return inquirer.prompt(question);
113114
};
114115

116+
/**
117+
* 创建数据库、表、并插入一条用户(admin)数据
118+
* @answers 询问客户端问题的选择值
119+
*/
120+
const createDatabase = async (answers: ProjectInfo) => {
121+
const { dialect, host, port, database, username, password } = answers;
122+
if (!dialect) return;
123+
124+
log.info('开始连接数据库服务...');
125+
const connection = await mysql.createConnection({
126+
host,
127+
port,
128+
user: username,
129+
password,
130+
multipleStatements: true,
131+
});
132+
133+
// 连接数据库服务
134+
await connection.connect();
135+
log.info(`连接成功,准备创建数据库(${database})和用户数据表...`);
136+
137+
// 新建数据库
138+
await connection.query(`CREATE DATABASE IF NOT EXISTS ${database}`);
139+
await connection.query(` USE ${database}`);
140+
141+
// 读取sql文件、新建表
142+
const serverPath = utils.getDistPath('server');
143+
const databaseSqlDir = path.join(serverPath, 'app', 'database');
144+
const tableSqlDirPath = path.join(databaseSqlDir, 'table');
145+
const files = fs.readdirSync(tableSqlDirPath);
146+
for (const file of files) {
147+
if (/\.sql$/.test(file)) {
148+
const sqlFilePath = path.join(tableSqlDirPath, file);
149+
const createTableSql = fs.readFileSync(sqlFilePath).toString();
150+
await connection.query(createTableSql);
151+
}
152+
}
153+
log.info(
154+
'创建成功,开始写入初始用户数据(账号:admin@example.com 密码:admin)...'
155+
);
156+
157+
// 插入初始用户数据
158+
const createUserSqlPath = path.join(databaseSqlDir, 'createuser.sql');
159+
const createUserSql = fs.readFileSync(createUserSqlPath).toString();
160+
await connection.query(createUserSql);
161+
log.success('数据库初始化成功!');
162+
163+
// 断开连接
164+
await connection.end();
165+
};
166+
115167
/**
116168
* 同步创建服务端项目文件目录、文件
117169
* @answers 询问客户端问题的选择值
@@ -131,6 +183,7 @@ const createServerSync = (answers: ProjectInfo) => {
131183
password: '123456',
132184
database: 'tiny_pro_server',
133185
};
186+
134187
fs.copyTpl(serverFrom, serverTo, dialect ? answers : defaultConfig, {
135188
overwrite: true,
136189
});
@@ -214,11 +267,26 @@ export const installDependencies = (answers: ProjectInfo) => {
214267
'\n--------------------初始化成功,请按下面提示进行操作--------------------\n'
215268
)
216269
);
217-
console.log(
218-
chalk.green(
219-
`${chalk.yellow(`$ ${prefix} start`)} # 可一键开启项目开发环境`
220-
)
221-
);
270+
271+
if (answers.serverFramework) {
272+
console.log(
273+
chalk.green(
274+
`${chalk.yellow('$ cd web && npm run start')} # 开启web开发环境`
275+
)
276+
);
277+
console.log(
278+
chalk.green(
279+
`${chalk.yellow('$ cd server && npm run dev')} # 开启server开发环境`
280+
)
281+
);
282+
} else {
283+
console.log(
284+
chalk.green(
285+
`${chalk.yellow(`$ ${prefix} start`)} # 可一键开启项目开发环境`
286+
)
287+
);
288+
}
289+
222290
console.log(
223291
chalk.green(
224292
`${chalk.yellow(`$ ${prefix} help`)} # 可查看当前套件的详细帮助`
@@ -250,6 +318,15 @@ export default async () => {
250318
log.error('项目模板创建失败');
251319
}
252320

321+
// 初始化数据库
322+
try {
323+
await createDatabase(projectInfo);
324+
} catch (e) {
325+
log.error(
326+
'数据库初始化失败,请确认数据库配置信息正确并手动初始化数据库' + e
327+
);
328+
}
329+
253330
// 安装依赖
254331
try {
255332
installDependencies(projectInfo);

packages/toolkits/pro/src/lib/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export enum ServerFrameworks {
1313
EggJs = 'eggJs',
1414
NestJs = 'nestJs',
1515
SpringCloud = 'springCloud',
16-
Skip = ''
16+
Skip = '',
1717
}
1818

1919
/**
@@ -26,7 +26,7 @@ export interface ProjectInfo {
2626
serverFramework: ServerFrameworks;
2727
dialect?: string;
2828
host?: string;
29-
port?: Number;
29+
port?: number;
3030
database?: string;
3131
username?: string;
3232
password?: string;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Application } from 'egg';
2+
3+
export default (app: Application) => {
4+
// 数据库模型同步,只建议在开发环境下使用
5+
if (app.config.env === 'local') {
6+
try {
7+
app.beforeStart(async () => {
8+
await app.model.sync({ alter: true });
9+
});
10+
} catch (error) {
11+
console.error('数据库同步失败,请检查数据库配置信息或手动创建数据库', error);
12+
}
13+
}
14+
};

packages/toolkits/pro/template/server/eggJs/app/database/buryinfo.sql

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
INSERT INTO registeruser
2+
VALUES (
3+
null,
4+
'admin@example.com',
5+
'$2b$10$W2NoJWWldrv4ksIalH7po.4vsczt3TlP8SepiEVNEanXzYTIxnIVu',
6+
'email'
7+
);
8+
9+
INSERT INTO userinfo
10+
VALUES (
11+
null,
12+
(SELECT id
13+
FROM registeruser
14+
WHERE
15+
user_name = 'admin@example.com')
16+
17+
,
18+
'admin@example.com',
19+
'Tiny-Vue-Pro',
20+
'social recruitment',
21+
'admin',
22+
'2023-06-01',
23+
'2023-09-30',
24+
'90',
25+
'2023-06-01',
26+
'2026-06-01',
27+
'beijing',
28+
'1',
29+
'Front end'
30+
)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
DROP TABLE IF EXISTS `employee`;
2+
3+
CREATE TABLE
4+
`employee` (
5+
`id` bigint(16) NOT NULL,
6+
`name` varchar(20) DEFAULT NULL COMMENT '姓名',
7+
`employee_no` varchar(50) DEFAULT NULL COMMENT '工号',
8+
`department` varchar(50) DEFAULT NULL COMMENT '部门',
9+
`department_level` varchar(50) DEFAULT NULL COMMENT '部门层级',
10+
`status` varchar(10) DEFAULT NULL COMMENT '状态',
11+
`workbench_name` varchar(50) DEFAULT NULL COMMENT '工作台名称',
12+
`project` varchar(50) DEFAULT NULL COMMENT '赋能项目',
13+
`type` varchar(50) DEFAULT NULL COMMENT '人员类型',
14+
`address` varchar(50) DEFAULT NULL COMMENT '研究所',
15+
`roles` varchar(50) DEFAULT NULL COMMENT '角色',
16+
`last_update_user` varchar(50) DEFAULT NULL COMMENT '最后更新人',
17+
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
18+
PRIMARY KEY (`id`) USING BTREE
19+
) ENGINE = InnoDB DEFAULT CHARSET = utf8 ROW_FORMAT = DYNAMIC;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
DROP TABLE IF EXISTS `registeruser`;
2+
CREATE TABLE
3+
`registeruser` (
4+
`id` bigint(50) unsigned NOT NULL AUTO_INCREMENT,
5+
`user_name` varchar(20) NOT NULL COMMENT '用户名',
6+
`password` varchar(60) NOT NULL COMMENT '密码',
7+
`register_type` varchar(10) DEFAULT NULL COMMENT '注册类型',
8+
PRIMARY KEY (`id`)
9+
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
DROP TABLE IF EXISTS `userinfo`;
2+
3+
CREATE TABLE
4+
`userinfo` (
5+
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
6+
`user_id` bigint(20) unsigned DEFAULT NULL,
7+
`user_name` varchar(32) NOT NULL COMMENT '用户名',
8+
`department` varchar(32) NOT NULL DEFAULT '' COMMENT '部门',
9+
`employee_type` varchar(32) DEFAULT NULL COMMENT '招聘类型',
10+
`role` varchar(32) DEFAULT NULL COMMENT '角色',
11+
`probation_start` date DEFAULT NULL COMMENT '试用期开始时间',
12+
`probation_end` date DEFAULT NULL COMMENT '试用期结束时间',
13+
`probation_duration` bigint(11) unsigned DEFAULT NULL COMMENT '试用期时长',
14+
`protocol_start` date DEFAULT NULL COMMENT '合同开始日期',
15+
`protocol_end` date DEFAULT NULL COMMENT '合同结束日期',
16+
`address` varchar(32) DEFAULT NULL COMMENT '地址',
17+
`status` varchar(32) DEFAULT NULL COMMENT '状态',
18+
`job` varchar(32) DEFAULT NULL COMMENT '职位',
19+
PRIMARY KEY (`id`)
20+
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

0 commit comments

Comments
 (0)