后端将mysql改成了达梦数据库,前端增加了微应用集成框架

This commit is contained in:
root 2026-03-25 17:32:09 +08:00
parent cc5b16673c
commit 6a0a4626fb
44 changed files with 2173 additions and 39 deletions

View File

@ -0,0 +1,6 @@
- [x] Host 已集成 Wujie且可挂载名为 `process` 的子应用
- [x] 子应用 `frontend-process` 可独立启动并访问 `/process/antd-demo`
- [x] Host 访问 `/process/antd-demo` 时能显示子应用 Demo 内容
- [x] Host 开发代理 `/process/**` 已配置并可正常加载子应用资源
- [x] Demo 页面可从 Host 菜单访问(至少静态路由可见)
- [x] 本次变更未引入任何敏感信息密码、私钥、token到仓库

View File

@ -0,0 +1,60 @@
# Wujie 微前端双栈并存接入 Spec
## Why
现有系统前端Element Plus已稳定具备登录、菜单与权限管理能力但后续业务模块计划采用 Ant Design Vue。需要通过微前端方式实现双栈并存避免一次性迁移带来的回归风险并支持业务模块按菜单集成展示。
## What Changes
- 明确采用 Wujie 作为微前端方案Host=Element PlusSubApp=Ant Design Vue
- 新增 `frontend-process` 子应用:提供 `AntD Demo` 页面与 `manifest.json`(路由、权限码、入口信息)。
- 在 `front-system`(当前仓库 `frontend`)集成 Wujie新增一个 Host 页面(`/process/antd-demo`)用于挂载子应用。
- Host 开发代理:本地将 `/process/**` 代理到子应用 dev server实现“同域路径”联调。
- **BREAKING**:无(仅新增能力与页面)。
## Impact
- Affected specs:
- 微前端集成Host + SubApp
- 路由与菜单展示
- 本地联调与部署路径约定(同域 `/process/`
- Affected code:
- Host`frontend/src/main.ts`、`frontend/src/router/index.ts`、`frontend/vite.config.ts`、新增 `frontend/src/views/process/antd-demo.vue`
- SubApp新增 `frontend-process/**`
- 文档基线:`系统前端框架及集成方案.md`(不在本变更中修改其内容,仅作为实现依据)
## ADDED Requirements
### Requirement: Wujie Host 集成
系统 SHALL 在 Hostfront-system中集成 Wujie并提供可通过路由访问的挂载页面用于展示 `front-process` 子应用内容。
#### Scenario: 打开 AntD Demo开发态
- **GIVEN** Host 与 SubApp 均在本地启动
- **WHEN** 用户在 Host 中访问 `/process/antd-demo`
- **THEN** Host 页面中出现 Wujie 容器并成功加载子应用入口 `/process/`
- **AND** 子应用展示 Ant Design Vue 组件示例(按钮、表格等)
### Requirement: 子应用 Demo 页面
系统 SHALL 提供 `frontend-process` 子应用,并包含一个可访问的 Demo 页面(`/process/antd-demo`)用于验证 Ant Design Vue 在微前端容器中正常渲染。
#### Scenario: 子应用独立运行(开发态)
- **WHEN** 直接访问 `http://localhost:5174/process/antd-demo`(或等价本地地址)
- **THEN** 能看到 “Ant Design Vue Demofront-process” 标题与示例组件
### Requirement: 本地同域联调代理
系统 SHALL 在 Host Vite dev server 中提供 `/process/**` 的代理转发到子应用 dev server以实现同域路径加载。
#### Scenario: Host 以同域路径加载子应用
- **WHEN** Host 页面请求 `/process/` 及其静态资源
- **THEN** 请求被代理到子应用 dev server端口 5174
### Requirement: 菜单可集成展示Demo 级别)
系统 SHALL 使 Demo 页面可在 Host 菜单体系中被访问(可先以静态路由方式呈现,后续再与后端动态菜单配置联动)。
#### Scenario: 菜单访问
- **WHEN** 用户在 Host 菜单点击“AntD Demo”
- **THEN** 跳转到 `/process/antd-demo` 并展示子应用内容
## MODIFIED Requirements
无。
## REMOVED Requirements
无。

View File

@ -0,0 +1,26 @@
# Tasks
- [x] Task 1: 对齐方案与现状代码
- [x] 核对 Host 与 SubApp 的目录结构、路由前缀 `/process/`、端口约定5173/5174
- [x] 核对 `系统前端框架及集成方案.md` 与实现差异并记录需要补齐项
- [x] Task 2: 完成 frontend-process 子应用 Demo
- [x] 初始化 `frontend-process`Vite + Vue3
- [x] 引入 Ant Design Vue 并提供 `/process/antd-demo` Demo 页面
- [x] 添加 `public/manifest.json`,声明 `entry/routeBase/routes`
- [x] Task 3: 在 Hostfrontend集成 Wujie 并提供挂载页
- [x] 安装并注册 `wujie` / `wujie-vue3`
- [x] 新增 Host 页面 `/process/antd-demo`:使用 Wujie 挂载子应用入口
- [x] 为 Host 路由与菜单增加 Demo 入口(最小可用:静态路由显示在侧边栏)
- [x] Task 4: 开发态同域代理与联调验证
- [x] Host Vite dev server 增加 `/process/**``http://localhost:5174` 代理
- [x] 启动 Host 与 SubApp 并验证 Demo 页面渲染、按钮可交互
- [x] Task 5: 最小化回归与文档补齐
- [x] 记录“运行方式/端口/访问路径”的操作说明
- [x] 确认不引入敏感信息与硬编码密钥
# Task Dependencies
- Task 3 depends on Task 2
- Task 4 depends on Task 2 and Task 3

6
.vscode/launch.json vendored
View File

@ -16,6 +16,12 @@
"${workspaceFolder}/backend/target/classes", "${workspaceFolder}/backend/target/classes",
"${workspaceFolder}/backend/target/dependency/*" "${workspaceFolder}/backend/target/dependency/*"
], ],
"env": {
"DB_MASTER_PASSWORD": "Dm123456",
"DB_SLAVE_PASSWORD": "Dm123456",
"JASYPT_PASSWORD": "salt",
"RSA_PRIVATE_KEY": "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A=="
},
"args": [ "args": [
"--spring.profiles.active=dev" "--spring.profiles.active=dev"
], ],

View File

@ -3,7 +3,7 @@ param(
[int]$DB_PORT = 3306, [int]$DB_PORT = 3306,
[string]$DB_NAME = 'frameworkdb2023', [string]$DB_NAME = 'frameworkdb2023',
[string]$DB_USER = 'root', [string]$DB_USER = 'root',
[string]$DB_PASSWORD = 'ylfw20230626@' [string]$DB_PASSWORD = $env:DB_PASSWORD
) )
# 确保输出目录存在 # 确保输出目录存在
@ -97,4 +97,4 @@ if (Test-Path $schemaFile) {
if (Test-Path $dataFile) { if (Test-Path $dataFile) {
$dataSize = (Get-Item $dataFile).Length $dataSize = (Get-Item $dataFile).Length
Write-Host "数据文件大小: $([math]::Round($dataSize/1KB, 2)) KB" Write-Host "数据文件大小: $([math]::Round($dataSize/1KB, 2)) KB"
} }

Binary file not shown.

View File

@ -3,7 +3,7 @@ param(
[int]$DB_PORT = 3306, [int]$DB_PORT = 3306,
[string]$DB_NAME = 'frameworkdb2025', [string]$DB_NAME = 'frameworkdb2025',
[string]$DB_USER = 'root', [string]$DB_USER = 'root',
[string]$DB_PASSWORD = 'ylfw20230626@' [string]$DB_PASSWORD = $env:DB_PASSWORD
) )
$ErrorActionPreference = 'Stop' $ErrorActionPreference = 'Stop'
@ -43,4 +43,4 @@ function Invoke-MySqlFile([string]$filePath) {
Invoke-MySqlFile $schemaPath Invoke-MySqlFile $schemaPath
Invoke-MySqlFile $dataPath Invoke-MySqlFile $dataPath
Write-Host 'Import completed' Write-Host 'Import completed'

View File

@ -77,7 +77,7 @@ param(
[int]$DB_PORT = 3306, [int]$DB_PORT = 3306,
[string]$DB_NAME = "frameworkdb2025", [string]$DB_NAME = "frameworkdb2025",
[string]$DB_USER = "root", [string]$DB_USER = "root",
[string]$DB_PASSWORD = "ylfw20230626@" [string]$DB_PASSWORD = $env:DB_PASSWORD
) )
$env:MYSQL_PWD = $DB_PASSWORD $env:MYSQL_PWD = $DB_PASSWORD
@ -97,7 +97,7 @@ param(
[int]$DB_PORT = 3306, [int]$DB_PORT = 3306,
[string]$DB_NAME = "platform", [string]$DB_NAME = "platform",
[string]$DB_USER = "root", [string]$DB_USER = "root",
[string]$DB_PASSWORD = "root" [string]$DB_PASSWORD = $env:DB_PASSWORD
) )
$env:MYSQL_PWD = $DB_PASSWORD $env:MYSQL_PWD = $DB_PASSWORD
@ -131,4 +131,4 @@ Write-Host "Import completed"
- 我可以为你: - 我可以为你:
- 搭建 `framework/db-init` 目录与示例脚本、README。 - 搭建 `framework/db-init` 目录与示例脚本、README。
- 在后端新增 `DataInitializer` 组件与配置项,支持 `dev/server` 下自动初始化。 - 在后端新增 `DataInitializer` 组件与配置项,支持 `dev/server` 下自动初始化。
- 可选集成 `Flyway`,将初始化脚本迁移为 `V1__base.sql` 并接入 CI。 - 可选集成 `Flyway`,将初始化脚本迁移为 `V1__base.sql` 并接入 CI。

View File

@ -157,6 +157,14 @@
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<!-- 达梦 DM8 JDBC驱动类dm.jdbc.driver.DmDriver -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.79</version>
<scope>runtime</scope>
</dependency>
<!-- sqlite-jdbc数据库 --> <!-- sqlite-jdbc数据库 -->
<dependency> <dependency>
<groupId>org.xerial</groupId> <groupId>org.xerial</groupId>

View File

@ -18,7 +18,7 @@ import java.io.Serializable;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("rca_dictionary") @TableName("RCA_DICTIONARY")
public class Dictionary implements Serializable { public class Dictionary implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -23,7 +23,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_message") @TableName("SYS_MESSAGE")
public class Message implements Serializable { public class Message implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -23,7 +23,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_quartz_job") @TableName("SYS_QUARTZ_JOB")
public class QuartzJob implements Serializable { public class QuartzJob implements Serializable {
public static final String JOB_KEY = "JOB_KEY"; public static final String JOB_KEY = "JOB_KEY";

View File

@ -17,7 +17,7 @@ import java.sql.Timestamp;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_config") @TableName("SYS_CONFIG")
public class SysConfig implements Serializable { public class SysConfig implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -3,6 +3,7 @@ package com.yfd.platform.system.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -18,6 +19,7 @@ import java.io.Serializable;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("SYS_DICTIONARY")
public class SysDictionary implements Serializable { public class SysDictionary implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -31,25 +33,25 @@ public class SysDictionary implements Serializable {
/** /**
* 字典类型 00-系统内置 01-用户配置 * 字典类型 00-系统内置 01-用户配置
*/ */
@TableField("dicttype") @TableField("DICTTYPE")
private String dictType; private String dictType;
/** /**
* 顺序号 * 顺序号
*/ */
@TableField("orderno") @TableField("ORDERNO")
private Integer orderNo; private Integer orderNo;
/** /**
* 字典编码 * 字典编码
*/ */
@TableField("dictcode") @TableField("DICTCODE")
private String dictCode; private String dictCode;
/** /**
* 字典名称 * 字典名称
*/ */
@TableField("dictname") @TableField("DICTNAME")
private String dictName; private String dictName;
/** /**

View File

@ -3,6 +3,7 @@ package com.yfd.platform.system.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -18,6 +19,7 @@ import java.io.Serializable;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("SYS_DICTIONARY_ITEMS")
public class SysDictionaryItems implements Serializable { public class SysDictionaryItems implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -31,31 +33,31 @@ public class SysDictionaryItems implements Serializable {
/** /**
* 对应字典ID * 对应字典ID
*/ */
@TableField("dictid") @TableField("DICTID")
private String dictId; private String dictId;
/** /**
* 顺序号 * 顺序号
*/ */
@TableField("orderno") @TableField("ORDERNO")
private Integer orderNo; private Integer orderNo;
/** /**
* 项编码 * 项编码
*/ */
@TableField("itemcode") @TableField("ITEMCODE")
private String itemCode; private String itemCode;
/** /**
* 项名称 * 项名称
*/ */
@TableField("dictname") @TableField("DICTNAME")
private String dictName; private String dictName;
/** /**
* 父项编码 * 父项编码
*/ */
@TableField("parentcode") @TableField("PARENTCODE")
private String parentCode; private String parentCode;
/** /**

View File

@ -3,6 +3,7 @@ package com.yfd.platform.system.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -22,6 +23,7 @@ import java.time.LocalDateTime;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("SYS_LOG")
public class SysLog implements Serializable { public class SysLog implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -29,13 +31,13 @@ public class SysLog implements Serializable {
/** /**
* ID * ID
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "ID", type = IdType.AUTO)
private Long id; private Long id;
/** /**
* 用户账号 * 用户账号
*/ */
@TableField("usercode") @TableField("USERCODE")
private String usercode; private String usercode;
/** /**
@ -46,7 +48,7 @@ public class SysLog implements Serializable {
/** /**
* 操作类型 00-登录 01-新增 02-修改 03-删除 06-查询 09其他 * 操作类型 00-登录 01-新增 02-修改 03-删除 06-查询 09其他
*/ */
@TableField("opttype") @TableField("OPTTYPE")
private String opttype; private String opttype;
/** /**
@ -72,13 +74,13 @@ public class SysLog implements Serializable {
/** /**
* 创建时间 * 创建时间
*/ */
@TableField("logtime") @TableField("LOGTIME")
private Timestamp logtime; private Timestamp logtime;
/** /**
* 请求IP * 请求IP
*/ */
@TableField("requestip") @TableField("REQUESTIP")
private String requestip; private String requestip;
/** /**

View File

@ -19,7 +19,7 @@ import java.util.List;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_menu") @TableName("SYS_MENU")
public class SysMenu implements Serializable { public class SysMenu implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -17,7 +17,7 @@ import java.sql.Timestamp;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_organization") @TableName("SYS_ORGANIZATION")
public class SysOrganization implements Serializable { public class SysOrganization implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -17,7 +17,7 @@ import java.sql.Timestamp;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_role") @TableName("SYS_ROLE")
public class SysRole implements Serializable { public class SysRole implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -18,7 +18,7 @@ import java.sql.Timestamp;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sys_user") @TableName("SYS_USER")
public class SysUser implements Serializable { public class SysUser implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -9,14 +9,14 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
druid: druid:
master: master:
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: dm.jdbc.driver.DmDriver
url: "${DB_MASTER_URL:jdbc:mysql://localhost:3306/wppdb?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true}" url: "${DB_MASTER_URL:jdbc:dm://localhost:5236/WPPDB}"
username: "${DB_MASTER_USERNAME:root}" username: "${DB_MASTER_USERNAME:WPPDB}"
password: "${DB_MASTER_PASSWORD:}" password: "${DB_MASTER_PASSWORD:}"
slave: slave:
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: dm.jdbc.driver.DmDriver
url: "${DB_SLAVE_URL:jdbc:mysql://localhost:3306/wppdb?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true}" url: "${DB_SLAVE_URL:jdbc:dm://localhost:5236/WPPDB}"
username: "${DB_SLAVE_USERNAME:root}" username: "${DB_SLAVE_USERNAME:WPPDB}"
password: "${DB_SLAVE_PASSWORD:}" password: "${DB_SLAVE_PASSWORD:}"
mvc: mvc:

390
db.sql Normal file
View File

@ -0,0 +1,390 @@
CREATE TABLE WPPDB.PROJECT
(
PROJECT_ID CHAR(36 CHAR) NOT NULL,
CODE VARCHAR(20 CHAR) NOT NULL,
NAME VARCHAR(200 CHAR) NOT NULL,
DESCRIPTION TEXT,
TOPOLOGY CLOB,
CREATED_AT TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(),
UPDATED_AT TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(),
MODIFIER VARCHAR(40 CHAR),
NOT CLUSTER PRIMARY KEY(PROJECT_ID),
CONSTRAINT CODE UNIQUE(CODE)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON COLUMN WPPDB.PROJECT.CODE IS '项目编号';
COMMENT ON COLUMN WPPDB.PROJECT.CREATED_AT IS '创建时间';
COMMENT ON COLUMN WPPDB.PROJECT.DESCRIPTION IS '项目描述';
COMMENT ON COLUMN WPPDB.PROJECT.MODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.PROJECT.NAME IS '项目名称';
COMMENT ON COLUMN WPPDB.PROJECT.PROJECT_ID IS '项目主键';
COMMENT ON COLUMN WPPDB.PROJECT.TOPOLOGY IS '项目拓扑关系';
COMMENT ON COLUMN WPPDB.PROJECT.UPDATED_AT IS '修改时间';
CREATE TABLE WPPDB.SYS_CONFIG
(
ID VARCHAR(40 CHAR) NOT NULL,
SYSNAME VARCHAR(200 CHAR),
WELCOME VARCHAR(500 CHAR),
FUNCATION CLOB,
REMARK CLOB,
VERSIONINFO CLOB,
LASTMODIFYDATE TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_CONFIG IS '系统全局配置';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.FUNCATION IS '系统功能介绍';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.REMARK IS '备注';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.SYSNAME IS '系统名称';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.VERSIONINFO IS '版本信息';
COMMENT ON COLUMN WPPDB.SYS_CONFIG.WELCOME IS '欢迎词';
CREATE TABLE WPPDB.SYS_DICTIONARY
(
ID VARCHAR(40 CHAR) NOT NULL,
DICTTYPE VARCHAR(20 CHAR) DEFAULT '00' NOT NULL,
ORDERNO INT NOT NULL,
DICTCODE VARCHAR(40 CHAR) NOT NULL,
DICTNAME VARCHAR(100 CHAR) NOT NULL,
CUSTOM1 VARCHAR(1000 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 CLOB,
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_DICTIONARY IS '数据字典表';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.DICTCODE IS '字典编码';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.DICTNAME IS '字典名称';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.DICTTYPE IS '字典类型 00-系统内置 01-用户配置';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY.ORDERNO IS '顺序号';
CREATE TABLE WPPDB.SYS_DICTIONARY_ITEMS
(
ID VARCHAR(40 CHAR) NOT NULL,
DICTID VARCHAR(40 CHAR) NOT NULL,
ORDERNO INT NOT NULL,
ITEMCODE VARCHAR(40 CHAR) NOT NULL,
DICTNAME VARCHAR(100 CHAR) NOT NULL,
PARENTCODE VARCHAR(40 CHAR) DEFAULT '',
CUSTOM1 VARCHAR(1000 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 CLOB,
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_DICTIONARY_ITEMS IS '数据字典明细';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.DICTID IS '对应字典ID';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.DICTNAME IS '项名称';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.ITEMCODE IS '项编码';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.ORDERNO IS '顺序号';
COMMENT ON COLUMN WPPDB.SYS_DICTIONARY_ITEMS.PARENTCODE IS '父项编码';
CREATE TABLE WPPDB.SYS_LOG
(
ID BIGINT AUTO_INCREMENT NOT NULL,
USERCODE VARCHAR(200 CHAR),
USERNAME VARCHAR(200 CHAR),
OPTTYPE VARCHAR(20 CHAR),
MODULE VARCHAR(200 CHAR),
DESCRIPTION VARCHAR(400 CHAR),
METHOD VARCHAR(200 CHAR),
PARAMS TEXT,
LOGTIME TIMESTAMP(0),
REQUESTIP VARCHAR(200 CHAR),
BROWSER VARCHAR(200 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) AUTO_INCREMENT = 3455487;
COMMENT ON TABLE WPPDB.SYS_LOG IS '系统操作日志';
COMMENT ON COLUMN WPPDB.SYS_LOG.BROWSER IS '浏览器类型';
COMMENT ON COLUMN WPPDB.SYS_LOG.DESCRIPTION IS '日志描述';
COMMENT ON COLUMN WPPDB.SYS_LOG.ID IS 'ID';
COMMENT ON COLUMN WPPDB.SYS_LOG.LOGTIME IS '创建时间';
COMMENT ON COLUMN WPPDB.SYS_LOG.METHOD IS '操作方法';
COMMENT ON COLUMN WPPDB.SYS_LOG.MODULE IS '模块名称';
COMMENT ON COLUMN WPPDB.SYS_LOG.OPTTYPE IS '操作类型 00-登录 01-新增 02-修改 03-删除 06-查询 09其他';
COMMENT ON COLUMN WPPDB.SYS_LOG.PARAMS IS '方法参数';
COMMENT ON COLUMN WPPDB.SYS_LOG.REQUESTIP IS '请求IP';
COMMENT ON COLUMN WPPDB.SYS_LOG.USERCODE IS '用户账号';
COMMENT ON COLUMN WPPDB.SYS_LOG.USERNAME IS '用户名称';
CREATE OR REPLACE INDEX WPPDB.LOG_CREATE_TIME_INDEX ON WPPDB.SYS_LOG(LOGTIME ASC) STORAGE(ON MAIN, CLUSTERBTR) WITHOUT CLU_REC_ADDR ;
CREATE OR REPLACE INDEX WPPDB.INX_LOG_TYPE ON WPPDB.SYS_LOG(OPTTYPE ASC) STORAGE(ON MAIN, CLUSTERBTR) WITHOUT CLU_REC_ADDR ;
CREATE TABLE WPPDB.SYS_MENU
(
ID VARCHAR(40 CHAR) NOT NULL,
SYSTEMCODE VARCHAR(2 CHAR) NOT NULL,
TYPE VARCHAR(2 CHAR) NOT NULL,
CODE VARCHAR(20 CHAR) NOT NULL,
NAME VARCHAR(100 CHAR) NOT NULL,
ICON VARCHAR(100 CHAR),
ISLINK VARCHAR(2 CHAR),
OPTURL VARCHAR(200 CHAR),
PERMISSION VARCHAR(100 CHAR),
PARENTID VARCHAR(40 CHAR),
ORDERNO INT,
ISDISPLAY VARCHAR(2 CHAR),
LASTMODIFIER VARCHAR(40 CHAR),
LASTMODIFYDATE TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_MENU IS '菜单及按钮';
COMMENT ON COLUMN WPPDB.SYS_MENU.CODE IS '在系统内自动生成';
COMMENT ON COLUMN WPPDB.SYS_MENU.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_MENU.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_MENU.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_MENU.ICON IS '图标地址';
COMMENT ON COLUMN WPPDB.SYS_MENU.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_MENU.ISDISPLAY IS '0-不显示 1-显示';
COMMENT ON COLUMN WPPDB.SYS_MENU.ISLINK IS '是否外链';
COMMENT ON COLUMN WPPDB.SYS_MENU.LASTMODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.SYS_MENU.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_MENU.NAME IS '名称';
COMMENT ON COLUMN WPPDB.SYS_MENU.OPTURL IS '内部模块路径或者外链地址';
COMMENT ON COLUMN WPPDB.SYS_MENU.ORDERNO IS '排序号';
COMMENT ON COLUMN WPPDB.SYS_MENU.PARENTID IS '顶级为0';
COMMENT ON COLUMN WPPDB.SYS_MENU.PERMISSION IS '权限控制标识';
COMMENT ON COLUMN WPPDB.SYS_MENU.SYSTEMCODE IS '1-web 2-pad 3-mobile';
COMMENT ON COLUMN WPPDB.SYS_MENU.TYPE IS '0-目录 1-菜单 2-按钮';
CREATE TABLE WPPDB.SYS_MESSAGE
(
ID VARCHAR(40 CHAR) NOT NULL,
CREATETIME TIMESTAMP(0) NOT NULL,
TYPE VARCHAR(2 CHAR) NOT NULL,
TITLE VARCHAR(100 CHAR) NOT NULL,
CONTENT VARCHAR(400 CHAR) NOT NULL,
SENDER_NAME VARCHAR(40 CHAR),
RECEIVER_CODES VARCHAR(1000 CHAR),
RECEIVER_NAMES VARCHAR(1000 CHAR),
STATUS VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
VALIDPERIOD INT DEFAULT 24,
READTIME TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_MESSAGE IS '消息通知';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.CONTENT IS '消息内容';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.CREATETIME IS '创建时间:排序';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.ID IS 'ID';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.READTIME IS '已阅时间';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.RECEIVER_CODES IS '接收者代码 人员账号列表';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.RECEIVER_NAMES IS '接收者名称:为空 即为所有人,人员名称列表';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.SENDER_NAME IS '发送者名称,定时器,人员';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.STATUS IS '状态1、初始创建 2-消息已阅 9-消息过期';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.TITLE IS '消息标题';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.TYPE IS '消息类型1-定时任务 2-工作流触发 3-人工触发';
COMMENT ON COLUMN WPPDB.SYS_MESSAGE.VALIDPERIOD IS '有效期:小时';
CREATE TABLE WPPDB.SYS_ORGANIZATION
(
ID VARCHAR(40 CHAR) NOT NULL,
ORGTYPE VARCHAR(2 CHAR) NOT NULL,
ORGCODE VARCHAR(20 CHAR) NOT NULL,
ORGNAME VARCHAR(100 CHAR) NOT NULL,
PARENTID VARCHAR(40 CHAR),
MANAGER VARCHAR(40 CHAR),
ISVAILD VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
DESCRIPTION VARCHAR(1000 CHAR),
LASTMODIFIER VARCHAR(40 CHAR),
LASTMODIFYDATE TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_ORGANIZATION IS '系统组织框架';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.DESCRIPTION IS '描述';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.ISVAILD IS '1-是 0-否';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.LASTMODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.MANAGER IS '组织负责人';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.ORGCODE IS '两位一级';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.ORGNAME IS '组织名称';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.ORGTYPE IS '1-公司 -2-部门';
COMMENT ON COLUMN WPPDB.SYS_ORGANIZATION.PARENTID IS '上级id';
CREATE TABLE WPPDB.SYS_QUARTZ_JOB
(
ID VARCHAR(40 CHAR) NOT NULL,
ORDERNO INT NOT NULL,
JOB_NAME VARCHAR(200 CHAR) NOT NULL,
JOB_CLASS VARCHAR(200 CHAR) NOT NULL,
JOB_METHOD VARCHAR(200 CHAR),
JOB_CRON VARCHAR(300 CHAR),
JOB_PARAMS VARCHAR(200 CHAR),
DESCRIPTION VARCHAR(400 CHAR),
STATUS VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
LASTMODIFIER VARCHAR(40 CHAR) NOT NULL,
LASTMODIFYDATE TIMESTAMP(0) NOT NULL,
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_QUARTZ_JOB IS '定时任务';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.DESCRIPTION IS '任务描述';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.ID IS 'ID';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.JOB_CLASS IS '执行类名称';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.JOB_CRON IS '时间周期表达式';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.JOB_METHOD IS '执行方法名称';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.JOB_NAME IS '任务名称';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.JOB_PARAMS IS '方法参数';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.LASTMODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.ORDERNO IS '排序号';
COMMENT ON COLUMN WPPDB.SYS_QUARTZ_JOB.STATUS IS '状态0-暂停、1-启用';
CREATE TABLE WPPDB.SYS_ROLE
(
ID VARCHAR(40 CHAR) NOT NULL,
ROLECODE VARCHAR(3 CHAR) NOT NULL,
ROLENAME VARCHAR(100 CHAR) NOT NULL,
LEVEL VARCHAR(2 CHAR) NOT NULL,
DESCRIPTION VARCHAR(1000 CHAR),
ORGSCOPE VARCHAR(1000 CHAR),
OPTSCOPE VARCHAR(2000 CHAR),
BUSSCOPE VARCHAR(2000 CHAR),
ISVAILD VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
LASTMODIFIER VARCHAR(40 CHAR),
LASTMODIFYDATE TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_ROLE IS '系统角色';
COMMENT ON COLUMN WPPDB.SYS_ROLE.BUSSCOPE IS 'json格式自定义业务范围';
COMMENT ON COLUMN WPPDB.SYS_ROLE.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_ROLE.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_ROLE.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_ROLE.DESCRIPTION IS '描述';
COMMENT ON COLUMN WPPDB.SYS_ROLE.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_ROLE.ISVAILD IS '1-是 0-否';
COMMENT ON COLUMN WPPDB.SYS_ROLE.LASTMODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.SYS_ROLE.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_ROLE.LEVEL IS '1-超级管理员 2-单位管理员 3-普通用户';
COMMENT ON COLUMN WPPDB.SYS_ROLE.OPTSCOPE IS '多个操作代码(菜单、按钮)';
COMMENT ON COLUMN WPPDB.SYS_ROLE.ORGSCOPE IS 'org1,org2';
COMMENT ON COLUMN WPPDB.SYS_ROLE.ROLECODE IS '系统生成,三位编号';
COMMENT ON COLUMN WPPDB.SYS_ROLE.ROLENAME IS '角色名称';
CREATE TABLE WPPDB.SYS_ROLE_MENU
(
ID VARCHAR(40 CHAR) NOT NULL,
ROLEID VARCHAR(40 CHAR) NOT NULL,
MENUID VARCHAR(40 CHAR) NOT NULL,
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_ROLE_MENU IS '系统角色权限对照';
COMMENT ON COLUMN WPPDB.SYS_ROLE_MENU.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_ROLE_MENU.MENUID IS '权限id';
COMMENT ON COLUMN WPPDB.SYS_ROLE_MENU.ROLEID IS '角色id';
CREATE TABLE WPPDB.SYS_ROLE_USERS
(
ID VARCHAR(40 CHAR) NOT NULL,
ROLEID VARCHAR(40 CHAR) NOT NULL,
USERID VARCHAR(40 CHAR) NOT NULL,
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_ROLE_USERS IS '系统角色用户对照';
COMMENT ON COLUMN WPPDB.SYS_ROLE_USERS.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_ROLE_USERS.ROLEID IS '角色id';
COMMENT ON COLUMN WPPDB.SYS_ROLE_USERS.USERID IS '用户id';
CREATE TABLE WPPDB.SYS_USER
(
ID VARCHAR(40 CHAR) NOT NULL,
USERTYPE VARCHAR(20 CHAR) DEFAULT '' NOT NULL,
USERNAME VARCHAR(100 CHAR) NOT NULL,
NICKNAME VARCHAR(255 CHAR) NOT NULL,
PASSWORD VARCHAR(200 CHAR),
SEX VARCHAR(2 CHAR),
EMAIL VARCHAR(100 CHAR),
PHONE VARCHAR(20 CHAR),
AVATAR VARCHAR(100 CHAR),
ORGID VARCHAR(40 CHAR) NOT NULL,
STATUS VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
PWDRESETTIME TIMESTAMP(0),
LASTMODIFIER VARCHAR(40 CHAR),
LASTMODIFYDATE TIMESTAMP(0),
CUSTOM1 VARCHAR(100 CHAR),
CUSTOM2 VARCHAR(100 CHAR),
CUSTOM3 VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY(ID)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON TABLE WPPDB.SYS_USER IS '系统用户';
COMMENT ON COLUMN WPPDB.SYS_USER.AVATAR IS '用户头像';
COMMENT ON COLUMN WPPDB.SYS_USER.CUSTOM1 IS '备用1';
COMMENT ON COLUMN WPPDB.SYS_USER.CUSTOM2 IS '备用2';
COMMENT ON COLUMN WPPDB.SYS_USER.CUSTOM3 IS '备用3';
COMMENT ON COLUMN WPPDB.SYS_USER.EMAIL IS '邮箱';
COMMENT ON COLUMN WPPDB.SYS_USER.ID IS 'id';
COMMENT ON COLUMN WPPDB.SYS_USER.LASTMODIFIER IS '最近修改者';
COMMENT ON COLUMN WPPDB.SYS_USER.LASTMODIFYDATE IS '最近修改日期';
COMMENT ON COLUMN WPPDB.SYS_USER.NICKNAME IS '用户昵称(中文)';
COMMENT ON COLUMN WPPDB.SYS_USER.ORGID IS '所属组织';
COMMENT ON COLUMN WPPDB.SYS_USER.PASSWORD IS '登录密码';
COMMENT ON COLUMN WPPDB.SYS_USER.PHONE IS '手机号';
COMMENT ON COLUMN WPPDB.SYS_USER.PWDRESETTIME IS '密码修改时间';
COMMENT ON COLUMN WPPDB.SYS_USER.SEX IS '性别 0-男 1-女';
COMMENT ON COLUMN WPPDB.SYS_USER.STATUS IS '1-有效 0-停用';
COMMENT ON COLUMN WPPDB.SYS_USER.USERNAME IS '用户名称(账号)';
COMMENT ON COLUMN WPPDB.SYS_USER.USERTYPE IS '用户类型 0-管理员 1-普通用户';
CREATE TABLE WPPDB.SYS_USER_MENU
(
USERID VARCHAR(40 CHAR) NOT NULL,
MENUID VARCHAR(40 CHAR),
ORDERNO INT,
OPTURL VARCHAR(200 CHAR)) STORAGE(ON MAIN, CLUSTERBTR) ;
COMMENT ON COLUMN WPPDB.SYS_USER_MENU.MENUID IS '权限id';
COMMENT ON COLUMN WPPDB.SYS_USER_MENU.OPTURL IS '内部模块路径或者外链地址';
COMMENT ON COLUMN WPPDB.SYS_USER_MENU.ORDERNO IS '排序号';
COMMENT ON COLUMN WPPDB.SYS_USER_MENU.USERID IS '用户id';

389
db.sql.bak Normal file
View File

@ -0,0 +1,389 @@
CREATE TABLE "WPPDB"."project"
(
"project_id" CHAR(36 CHAR) NOT NULL,
"code" VARCHAR(20 CHAR) NOT NULL,
"name" VARCHAR(200 CHAR) NOT NULL,
"description" TEXT,
"topology" CLOB,
"created_at" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(),
"updated_at" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(),
"modifier" VARCHAR(40 CHAR),
NOT CLUSTER PRIMARY KEY("project_id"),
CONSTRAINT "code" UNIQUE("code")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON COLUMN WPPDB."project"."code" IS '项目编号';
COMMENT ON COLUMN WPPDB."project"."created_at" IS '创建时间';
COMMENT ON COLUMN WPPDB."project"."description" IS '项目描述';
COMMENT ON COLUMN WPPDB."project"."modifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."project"."name" IS '项目名称';
COMMENT ON COLUMN WPPDB."project"."project_id" IS '项目主键';
COMMENT ON COLUMN WPPDB."project"."topology" IS '项目拓扑关系';
COMMENT ON COLUMN WPPDB."project"."updated_at" IS '修改时间';
CREATE TABLE "WPPDB"."sys_config"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"sysname" VARCHAR(200 CHAR),
"welcome" VARCHAR(500 CHAR),
"funcation" CLOB,
"remark" CLOB,
"versioninfo" CLOB,
"lastmodifydate" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_config" IS '系统全局配置';
COMMENT ON COLUMN WPPDB."sys_config"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_config"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_config"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_config"."funcation" IS '系统功能介绍';
COMMENT ON COLUMN WPPDB."sys_config"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_config"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_config"."remark" IS '备注';
COMMENT ON COLUMN WPPDB."sys_config"."sysname" IS '系统名称';
COMMENT ON COLUMN WPPDB."sys_config"."versioninfo" IS '版本信息';
COMMENT ON COLUMN WPPDB."sys_config"."welcome" IS '欢迎词';
CREATE TABLE "WPPDB"."sys_dictionary"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"dicttype" VARCHAR(20 CHAR) DEFAULT '00' NOT NULL,
"orderno" INT NOT NULL,
"dictcode" VARCHAR(40 CHAR) NOT NULL,
"dictname" VARCHAR(100 CHAR) NOT NULL,
"custom1" VARCHAR(1000 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_dictionary" IS '数据字典表';
COMMENT ON COLUMN WPPDB."sys_dictionary"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_dictionary"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_dictionary"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_dictionary"."dictcode" IS '字典编码';
COMMENT ON COLUMN WPPDB."sys_dictionary"."dictname" IS '字典名称';
COMMENT ON COLUMN WPPDB."sys_dictionary"."dicttype" IS '字典类型 00-系统内置 01-用户配置';
COMMENT ON COLUMN WPPDB."sys_dictionary"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_dictionary"."orderno" IS '顺序号';
CREATE TABLE "WPPDB"."sys_dictionary_items"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"dictid" VARCHAR(40 CHAR) NOT NULL,
"orderno" INT NOT NULL,
"itemcode" VARCHAR(40 CHAR) NOT NULL,
"dictname" VARCHAR(100 CHAR) NOT NULL,
"parentcode" VARCHAR(40 CHAR) DEFAULT '',
"custom1" VARCHAR(1000 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" CLOB,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_dictionary_items" IS '数据字典明细';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."dictid" IS '对应字典ID';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."dictname" IS '项名称';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."itemcode" IS '项编码';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."orderno" IS '顺序号';
COMMENT ON COLUMN WPPDB."sys_dictionary_items"."parentcode" IS '父项编码';
CREATE TABLE "WPPDB"."sys_log"
(
"id" BIGINT AUTO_INCREMENT NOT NULL,
"usercode" VARCHAR(200 CHAR),
"username" VARCHAR(200 CHAR),
"opttype" VARCHAR(20 CHAR),
"module" VARCHAR(200 CHAR),
"description" VARCHAR(400 CHAR),
"method" VARCHAR(200 CHAR),
"params" TEXT,
"logtime" TIMESTAMP(0),
"requestip" VARCHAR(200 CHAR),
"browser" VARCHAR(200 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) AUTO_INCREMENT = 3455487;
COMMENT ON TABLE WPPDB."sys_log" IS '系统操作日志';
COMMENT ON COLUMN WPPDB."sys_log"."browser" IS '浏览器类型';
COMMENT ON COLUMN WPPDB."sys_log"."description" IS '日志描述';
COMMENT ON COLUMN WPPDB."sys_log"."id" IS 'ID';
COMMENT ON COLUMN WPPDB."sys_log"."logtime" IS '创建时间';
COMMENT ON COLUMN WPPDB."sys_log"."method" IS '操作方法';
COMMENT ON COLUMN WPPDB."sys_log"."module" IS '模块名称';
COMMENT ON COLUMN WPPDB."sys_log"."opttype" IS '操作类型 00-登录 01-新增 02-修改 03-删除 06-查询 09其他';
COMMENT ON COLUMN WPPDB."sys_log"."params" IS '方法参数';
COMMENT ON COLUMN WPPDB."sys_log"."requestip" IS '请求IP';
COMMENT ON COLUMN WPPDB."sys_log"."usercode" IS '用户账号';
COMMENT ON COLUMN WPPDB."sys_log"."username" IS '用户名称';
CREATE OR REPLACE INDEX "WPPDB"."log_create_time_index" ON "WPPDB"."sys_log"("logtime" ASC) STORAGE(ON "MAIN", CLUSTERBTR) WITHOUT CLU_REC_ADDR ;
CREATE OR REPLACE INDEX "WPPDB"."inx_log_type" ON "WPPDB"."sys_log"("opttype" ASC) STORAGE(ON "MAIN", CLUSTERBTR) WITHOUT CLU_REC_ADDR ;
CREATE TABLE "WPPDB"."sys_menu"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"systemcode" VARCHAR(2 CHAR) NOT NULL,
"type" VARCHAR(2 CHAR) NOT NULL,
"code" VARCHAR(20 CHAR) NOT NULL,
"name" VARCHAR(100 CHAR) NOT NULL,
"icon" VARCHAR(100 CHAR),
"islink" VARCHAR(2 CHAR),
"opturl" VARCHAR(200 CHAR),
"permission" VARCHAR(100 CHAR),
"parentid" VARCHAR(40 CHAR),
"orderno" INT,
"isdisplay" VARCHAR(2 CHAR),
"lastmodifier" VARCHAR(40 CHAR),
"lastmodifydate" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_menu" IS '菜单及按钮';
COMMENT ON COLUMN WPPDB."sys_menu"."code" IS '在系统内自动生成';
COMMENT ON COLUMN WPPDB."sys_menu"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_menu"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_menu"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_menu"."icon" IS '图标地址';
COMMENT ON COLUMN WPPDB."sys_menu"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_menu"."isdisplay" IS '0-不显示 1-显示';
COMMENT ON COLUMN WPPDB."sys_menu"."islink" IS '是否外链';
COMMENT ON COLUMN WPPDB."sys_menu"."lastmodifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."sys_menu"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_menu"."name" IS '名称';
COMMENT ON COLUMN WPPDB."sys_menu"."opturl" IS '内部模块路径或者外链地址';
COMMENT ON COLUMN WPPDB."sys_menu"."orderno" IS '排序号';
COMMENT ON COLUMN WPPDB."sys_menu"."parentid" IS '顶级为0';
COMMENT ON COLUMN WPPDB."sys_menu"."permission" IS '权限控制标识';
COMMENT ON COLUMN WPPDB."sys_menu"."systemcode" IS '1-web 2-pad 3-mobile';
COMMENT ON COLUMN WPPDB."sys_menu"."type" IS '0-目录 1-菜单 2-按钮';
CREATE TABLE "WPPDB"."sys_message"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"createtime" TIMESTAMP(0) NOT NULL,
"type" VARCHAR(2 CHAR) NOT NULL,
"title" VARCHAR(100 CHAR) NOT NULL,
"content" VARCHAR(400 CHAR) NOT NULL,
"sender_name" VARCHAR(40 CHAR),
"receiver_codes" VARCHAR(1000 CHAR),
"receiver_names" VARCHAR(1000 CHAR),
"status" VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
"validperiod" INT DEFAULT 24,
"readtime" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_message" IS '消息通知';
COMMENT ON COLUMN WPPDB."sys_message"."content" IS '消息内容';
COMMENT ON COLUMN WPPDB."sys_message"."createtime" IS '创建时间:排序';
COMMENT ON COLUMN WPPDB."sys_message"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_message"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_message"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_message"."id" IS 'ID';
COMMENT ON COLUMN WPPDB."sys_message"."readtime" IS '已阅时间';
COMMENT ON COLUMN WPPDB."sys_message"."receiver_codes" IS '接收者代码 人员账号列表';
COMMENT ON COLUMN WPPDB."sys_message"."receiver_names" IS '接收者名称:为空 即为所有人,人员名称列表';
COMMENT ON COLUMN WPPDB."sys_message"."sender_name" IS '发送者名称,定时器,人员';
COMMENT ON COLUMN WPPDB."sys_message"."status" IS '状态1、初始创建 2-消息已阅 9-消息过期';
COMMENT ON COLUMN WPPDB."sys_message"."title" IS '消息标题';
COMMENT ON COLUMN WPPDB."sys_message"."type" IS '消息类型1-定时任务 2-工作流触发 3-人工触发';
COMMENT ON COLUMN WPPDB."sys_message"."validperiod" IS '有效期:小时';
CREATE TABLE "WPPDB"."sys_organization"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"orgtype" VARCHAR(2 CHAR) NOT NULL,
"orgcode" VARCHAR(20 CHAR) NOT NULL,
"orgname" VARCHAR(100 CHAR) NOT NULL,
"parentid" VARCHAR(40 CHAR),
"manager" VARCHAR(40 CHAR),
"isvaild" VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
"description" VARCHAR(1000 CHAR),
"lastmodifier" VARCHAR(40 CHAR),
"lastmodifydate" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_organization" IS '系统组织框架';
COMMENT ON COLUMN WPPDB."sys_organization"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_organization"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_organization"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_organization"."description" IS '描述';
COMMENT ON COLUMN WPPDB."sys_organization"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_organization"."isvaild" IS '1-是 0-否';
COMMENT ON COLUMN WPPDB."sys_organization"."lastmodifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."sys_organization"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_organization"."manager" IS '组织负责人';
COMMENT ON COLUMN WPPDB."sys_organization"."orgcode" IS '两位一级';
COMMENT ON COLUMN WPPDB."sys_organization"."orgname" IS '组织名称';
COMMENT ON COLUMN WPPDB."sys_organization"."orgtype" IS '1-公司 -2-部门';
COMMENT ON COLUMN WPPDB."sys_organization"."parentid" IS '上级id';
CREATE TABLE "WPPDB"."sys_quartz_job"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"orderno" INT NOT NULL,
"job_name" VARCHAR(200 CHAR) NOT NULL,
"job_class" VARCHAR(200 CHAR) NOT NULL,
"job_method" VARCHAR(200 CHAR),
"job_cron" VARCHAR(300 CHAR),
"job_params" VARCHAR(200 CHAR),
"description" VARCHAR(400 CHAR),
"status" VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
"lastmodifier" VARCHAR(40 CHAR) NOT NULL,
"lastmodifydate" TIMESTAMP(0) NOT NULL,
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_quartz_job" IS '定时任务';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."description" IS '任务描述';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."id" IS 'ID';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."job_class" IS '执行类名称';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."job_cron" IS '时间周期表达式';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."job_method" IS '执行方法名称';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."job_name" IS '任务名称';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."job_params" IS '方法参数';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."lastmodifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."orderno" IS '排序号';
COMMENT ON COLUMN WPPDB."sys_quartz_job"."status" IS '状态0-暂停、1-启用';
CREATE TABLE "WPPDB"."sys_role"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"rolecode" VARCHAR(3 CHAR) NOT NULL,
"rolename" VARCHAR(100 CHAR) NOT NULL,
"level" VARCHAR(2 CHAR) NOT NULL,
"description" VARCHAR(1000 CHAR),
"orgscope" VARCHAR(1000 CHAR),
"optscope" VARCHAR(2000 CHAR),
"busscope" VARCHAR(2000 CHAR),
"isvaild" VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
"lastmodifier" VARCHAR(40 CHAR),
"lastmodifydate" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_role" IS '系统角色';
COMMENT ON COLUMN WPPDB."sys_role"."busscope" IS 'json格式自定义业务范围';
COMMENT ON COLUMN WPPDB."sys_role"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_role"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_role"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_role"."description" IS '描述';
COMMENT ON COLUMN WPPDB."sys_role"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_role"."isvaild" IS '1-是 0-否';
COMMENT ON COLUMN WPPDB."sys_role"."lastmodifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."sys_role"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_role"."level" IS '1-超级管理员 2-单位管理员 3-普通用户';
COMMENT ON COLUMN WPPDB."sys_role"."optscope" IS '多个操作代码(菜单、按钮)';
COMMENT ON COLUMN WPPDB."sys_role"."orgscope" IS 'org1,org2';
COMMENT ON COLUMN WPPDB."sys_role"."rolecode" IS '系统生成,三位编号';
COMMENT ON COLUMN WPPDB."sys_role"."rolename" IS '角色名称';
CREATE TABLE "WPPDB"."sys_role_menu"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"roleid" VARCHAR(40 CHAR) NOT NULL,
"menuid" VARCHAR(40 CHAR) NOT NULL,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_role_menu" IS '系统角色权限对照';
COMMENT ON COLUMN WPPDB."sys_role_menu"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_role_menu"."menuid" IS '权限id';
COMMENT ON COLUMN WPPDB."sys_role_menu"."roleid" IS '角色id';
CREATE TABLE "WPPDB"."sys_role_users"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"roleid" VARCHAR(40 CHAR) NOT NULL,
"userid" VARCHAR(40 CHAR) NOT NULL,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_role_users" IS '系统角色用户对照';
COMMENT ON COLUMN WPPDB."sys_role_users"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_role_users"."roleid" IS '角色id';
COMMENT ON COLUMN WPPDB."sys_role_users"."userid" IS '用户id';
CREATE TABLE "WPPDB"."sys_user"
(
"id" VARCHAR(40 CHAR) NOT NULL,
"usertype" VARCHAR(20 CHAR) DEFAULT '' NOT NULL,
"username" VARCHAR(100 CHAR) NOT NULL,
"nickname" VARCHAR(255 CHAR) NOT NULL,
"password" VARCHAR(200 CHAR),
"sex" VARCHAR(2 CHAR),
"email" VARCHAR(100 CHAR),
"phone" VARCHAR(20 CHAR),
"avatar" VARCHAR(100 CHAR),
"orgid" VARCHAR(40 CHAR) NOT NULL,
"status" VARCHAR(2 CHAR) DEFAULT '1' NOT NULL,
"pwdresettime" TIMESTAMP(0),
"lastmodifier" VARCHAR(40 CHAR),
"lastmodifydate" TIMESTAMP(0),
"custom1" VARCHAR(100 CHAR),
"custom2" VARCHAR(100 CHAR),
"custom3" VARCHAR(100 CHAR),
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE WPPDB."sys_user" IS '系统用户';
COMMENT ON COLUMN WPPDB."sys_user"."avatar" IS '用户头像';
COMMENT ON COLUMN WPPDB."sys_user"."custom1" IS '备用1';
COMMENT ON COLUMN WPPDB."sys_user"."custom2" IS '备用2';
COMMENT ON COLUMN WPPDB."sys_user"."custom3" IS '备用3';
COMMENT ON COLUMN WPPDB."sys_user"."email" IS '邮箱';
COMMENT ON COLUMN WPPDB."sys_user"."id" IS 'id';
COMMENT ON COLUMN WPPDB."sys_user"."lastmodifier" IS '最近修改者';
COMMENT ON COLUMN WPPDB."sys_user"."lastmodifydate" IS '最近修改日期';
COMMENT ON COLUMN WPPDB."sys_user"."nickname" IS '用户昵称(中文)';
COMMENT ON COLUMN WPPDB."sys_user"."orgid" IS '所属组织';
COMMENT ON COLUMN WPPDB."sys_user"."password" IS '登录密码';
COMMENT ON COLUMN WPPDB."sys_user"."phone" IS '手机号';
COMMENT ON COLUMN WPPDB."sys_user"."pwdresettime" IS '密码修改时间';
COMMENT ON COLUMN WPPDB."sys_user"."sex" IS '性别 0-男 1-女';
COMMENT ON COLUMN WPPDB."sys_user"."status" IS '1-有效 0-停用';
COMMENT ON COLUMN WPPDB."sys_user"."username" IS '用户名称(账号)';
COMMENT ON COLUMN WPPDB."sys_user"."usertype" IS '用户类型 0-管理员 1-普通用户';
CREATE TABLE "WPPDB"."sys_user_menu"
(
"userid" VARCHAR(40 CHAR) NOT NULL,
"menuid" VARCHAR(40 CHAR),
"orderno" INT,
"opturl" VARCHAR(200 CHAR)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON COLUMN WPPDB."sys_user_menu"."menuid" IS '权限id';
COMMENT ON COLUMN WPPDB."sys_user_menu"."opturl" IS '内部模块路径或者外链地址';
COMMENT ON COLUMN WPPDB."sys_user_menu"."orderno" IS '排序号';
COMMENT ON COLUMN WPPDB."sys_user_menu"."userid" IS '用户id';

3
frontend-process/.npmrc Normal file
View File

@ -0,0 +1,3 @@
registry=https://registry.npmmirror.com
fetch-retries=5
strict-peer-dependencies=false

View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>front-process</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@ -0,0 +1,22 @@
{
"name": "front-process",
"private": true,
"version": "0.1.0",
"scripts": {
"dev": "vite --port 5174 --strictPort",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview --port 5174 --strictPort"
},
"dependencies": {
"ant-design-vue": "^4.2.6",
"vue": "^3.2.40",
"vue-router": "^4.1.6"
},
"devDependencies": {
"@types/node": "^16.11.7",
"@vitejs/plugin-vue": "^4.0.0",
"typescript": "^4.7.4",
"vite": "^4.0.3",
"vue-tsc": "^0.35.0"
}
}

View File

@ -0,0 +1,794 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
ant-design-vue:
specifier: ^4.2.6
version: 4.2.6(vue@3.5.30(typescript@4.9.5))
vue:
specifier: ^3.2.40
version: 3.5.30(typescript@4.9.5)
vue-router:
specifier: ^4.1.6
version: 4.6.4(vue@3.5.30(typescript@4.9.5))
devDependencies:
'@types/node':
specifier: ^16.11.7
version: 16.18.126
'@vitejs/plugin-vue':
specifier: ^4.0.0
version: 4.6.2(vite@4.5.14(@types/node@16.18.126))(vue@3.5.30(typescript@4.9.5))
typescript:
specifier: ^4.7.4
version: 4.9.5
vite:
specifier: ^4.0.3
version: 4.5.14(@types/node@16.18.126)
vue-tsc:
specifier: ^0.35.0
version: 0.35.2(typescript@4.9.5)
packages:
'@ant-design/colors@6.0.0':
resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
'@ant-design/icons-svg@4.4.2':
resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
'@ant-design/icons-vue@7.0.1':
resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==}
peerDependencies:
vue: '>=3.0.3'
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.28.5':
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.2':
resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/runtime@7.29.2':
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
engines: {node: '>=6.9.0'}
'@babel/types@7.29.0':
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
'@ctrl/tinycolor@3.6.1':
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@emotion/unitless@0.8.1':
resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
'@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@simonwep/pickr@1.8.2':
resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
'@types/node@16.18.126':
resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==}
'@vitejs/plugin-vue@4.6.2':
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
'@volar/code-gen@0.35.2':
resolution: {integrity: sha512-MoZHuNnPfUWnCNkQUI5+U+gvLTxrU+XlCTusdNOTFYUUAa+M68MH0RxFIS9Ybj4uAUWTcZx0Ow1q5t/PZozo+Q==}
'@volar/source-map@0.35.2':
resolution: {integrity: sha512-PFHh9wN/qMkOWYyvmB8ckvIzolrpNOvK5EBdxxdTpiPJhfYjW82rMDBnYf6RxCe7yQxrUrmve6BWVO7flxWNVQ==}
'@volar/vue-code-gen@0.35.2':
resolution: {integrity: sha512-8H6P8EtN06eSVGjtcJhGqZzFIg6/nWoHVOlnhc5vKqC7tXwpqPbyMQae0tO7pLBd5qSb/dYU5GQcBAHsi2jgyA==}
deprecated: 'WARNING: This project has been renamed to @vue/language-core. Install using @vue/language-core instead.'
'@volar/vue-typescript@0.35.2':
resolution: {integrity: sha512-PZI6Urb+Vr5Dvgf9xysM8X7TP09inWDy1wjDtprBoBhxS7r0Dg3V0qZuJa7sSGz7M0QMa5R/CBaZPhlxFCfJBw==}
deprecated: 'WARNING: This project has been renamed to @vue/typescript. Install using @vue/typescript instead.'
'@vue/compiler-core@3.5.30':
resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==}
'@vue/compiler-dom@3.5.30':
resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==}
'@vue/compiler-sfc@3.5.30':
resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==}
'@vue/compiler-ssr@3.5.30':
resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/reactivity@3.5.30':
resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==}
'@vue/runtime-core@3.5.30':
resolution: {integrity: sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==}
'@vue/runtime-dom@3.5.30':
resolution: {integrity: sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==}
'@vue/server-renderer@3.5.30':
resolution: {integrity: sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==}
peerDependencies:
vue: 3.5.30
'@vue/shared@3.5.30':
resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==}
ant-design-vue@4.2.6:
resolution: {integrity: sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==}
engines: {node: '>=12.22.0'}
peerDependencies:
vue: '>=3.2.0'
array-tree-filter@2.1.0:
resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==}
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
compute-scroll-into-view@1.0.20:
resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
core-js@3.49.0:
resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
dayjs@1.11.20:
resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
dom-align@1.12.4:
resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
dom-scroll-into-view@2.0.1:
resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==}
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
hasBin: true
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
is-plain-object@3.0.1:
resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
engines: {node: '>=0.10.0'}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
lodash-es@4.17.23:
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash@4.17.23:
resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanopop@2.4.2:
resolution: {integrity: sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
postcss@8.5.8:
resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
resize-observer-polyfill@1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
rollup@3.30.0:
resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
shallow-equal@1.2.1:
resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
stylis@4.3.6:
resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
throttle-debounce@5.0.2:
resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
engines: {node: '>=12.22'}
typescript@4.9.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
engines: {node: '>=4.2.0'}
hasBin: true
vite@4.5.14:
resolution: {integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
lightningcss: ^1.21.0
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
vue-router@4.6.4:
resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
peerDependencies:
vue: ^3.5.0
vue-tsc@0.35.2:
resolution: {integrity: sha512-aqY16VlODHzqtKGUkqdumNpH+s5ABCkufRyvMKQlL/mua+N2DfSVnHufzSNNUMr7vmOO0YsNg27jsspBMq4iGA==}
hasBin: true
peerDependencies:
typescript: '*'
vue-types@3.0.2:
resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
engines: {node: '>=10.15.0'}
peerDependencies:
vue: ^3.0.0
vue@3.5.30:
resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
warning@4.0.3:
resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
snapshots:
'@ant-design/colors@6.0.0':
dependencies:
'@ctrl/tinycolor': 3.6.1
'@ant-design/icons-svg@4.4.2': {}
'@ant-design/icons-vue@7.0.1(vue@3.5.30(typescript@4.9.5))':
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.4.2
vue: 3.5.30(typescript@4.9.5)
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.28.5': {}
'@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
'@babel/runtime@7.29.2': {}
'@babel/types@7.29.0':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
'@ctrl/tinycolor@3.6.1': {}
'@emotion/hash@0.9.2': {}
'@emotion/unitless@0.8.1': {}
'@esbuild/android-arm64@0.18.20':
optional: true
'@esbuild/android-arm@0.18.20':
optional: true
'@esbuild/android-x64@0.18.20':
optional: true
'@esbuild/darwin-arm64@0.18.20':
optional: true
'@esbuild/darwin-x64@0.18.20':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
optional: true
'@esbuild/freebsd-x64@0.18.20':
optional: true
'@esbuild/linux-arm64@0.18.20':
optional: true
'@esbuild/linux-arm@0.18.20':
optional: true
'@esbuild/linux-ia32@0.18.20':
optional: true
'@esbuild/linux-loong64@0.18.20':
optional: true
'@esbuild/linux-mips64el@0.18.20':
optional: true
'@esbuild/linux-ppc64@0.18.20':
optional: true
'@esbuild/linux-riscv64@0.18.20':
optional: true
'@esbuild/linux-s390x@0.18.20':
optional: true
'@esbuild/linux-x64@0.18.20':
optional: true
'@esbuild/netbsd-x64@0.18.20':
optional: true
'@esbuild/openbsd-x64@0.18.20':
optional: true
'@esbuild/sunos-x64@0.18.20':
optional: true
'@esbuild/win32-arm64@0.18.20':
optional: true
'@esbuild/win32-ia32@0.18.20':
optional: true
'@esbuild/win32-x64@0.18.20':
optional: true
'@jridgewell/sourcemap-codec@1.5.5': {}
'@simonwep/pickr@1.8.2':
dependencies:
core-js: 3.49.0
nanopop: 2.4.2
'@types/node@16.18.126': {}
'@vitejs/plugin-vue@4.6.2(vite@4.5.14(@types/node@16.18.126))(vue@3.5.30(typescript@4.9.5))':
dependencies:
vite: 4.5.14(@types/node@16.18.126)
vue: 3.5.30(typescript@4.9.5)
'@volar/code-gen@0.35.2':
dependencies:
'@volar/source-map': 0.35.2
'@volar/source-map@0.35.2': {}
'@volar/vue-code-gen@0.35.2':
dependencies:
'@volar/code-gen': 0.35.2
'@volar/source-map': 0.35.2
'@vue/compiler-core': 3.5.30
'@vue/compiler-dom': 3.5.30
'@vue/shared': 3.5.30
'@volar/vue-typescript@0.35.2':
dependencies:
'@volar/code-gen': 0.35.2
'@volar/source-map': 0.35.2
'@volar/vue-code-gen': 0.35.2
'@vue/compiler-sfc': 3.5.30
'@vue/reactivity': 3.5.30
'@vue/compiler-core@3.5.30':
dependencies:
'@babel/parser': 7.29.2
'@vue/shared': 3.5.30
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.30':
dependencies:
'@vue/compiler-core': 3.5.30
'@vue/shared': 3.5.30
'@vue/compiler-sfc@3.5.30':
dependencies:
'@babel/parser': 7.29.2
'@vue/compiler-core': 3.5.30
'@vue/compiler-dom': 3.5.30
'@vue/compiler-ssr': 3.5.30
'@vue/shared': 3.5.30
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.8
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.30':
dependencies:
'@vue/compiler-dom': 3.5.30
'@vue/shared': 3.5.30
'@vue/devtools-api@6.6.4': {}
'@vue/reactivity@3.5.30':
dependencies:
'@vue/shared': 3.5.30
'@vue/runtime-core@3.5.30':
dependencies:
'@vue/reactivity': 3.5.30
'@vue/shared': 3.5.30
'@vue/runtime-dom@3.5.30':
dependencies:
'@vue/reactivity': 3.5.30
'@vue/runtime-core': 3.5.30
'@vue/shared': 3.5.30
csstype: 3.2.3
'@vue/server-renderer@3.5.30(vue@3.5.30(typescript@4.9.5))':
dependencies:
'@vue/compiler-ssr': 3.5.30
'@vue/shared': 3.5.30
vue: 3.5.30(typescript@4.9.5)
'@vue/shared@3.5.30': {}
ant-design-vue@4.2.6(vue@3.5.30(typescript@4.9.5)):
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-vue': 7.0.1(vue@3.5.30(typescript@4.9.5))
'@babel/runtime': 7.29.2
'@ctrl/tinycolor': 3.6.1
'@emotion/hash': 0.9.2
'@emotion/unitless': 0.8.1
'@simonwep/pickr': 1.8.2
array-tree-filter: 2.1.0
async-validator: 4.2.5
csstype: 3.2.3
dayjs: 1.11.20
dom-align: 1.12.4
dom-scroll-into-view: 2.0.1
lodash: 4.17.23
lodash-es: 4.17.23
resize-observer-polyfill: 1.5.1
scroll-into-view-if-needed: 2.2.31
shallow-equal: 1.2.1
stylis: 4.3.6
throttle-debounce: 5.0.2
vue: 3.5.30(typescript@4.9.5)
vue-types: 3.0.2(vue@3.5.30(typescript@4.9.5))
warning: 4.0.3
array-tree-filter@2.1.0: {}
async-validator@4.2.5: {}
compute-scroll-into-view@1.0.20: {}
core-js@3.49.0: {}
csstype@3.2.3: {}
dayjs@1.11.20: {}
dom-align@1.12.4: {}
dom-scroll-into-view@2.0.1: {}
entities@7.0.1: {}
esbuild@0.18.20:
optionalDependencies:
'@esbuild/android-arm': 0.18.20
'@esbuild/android-arm64': 0.18.20
'@esbuild/android-x64': 0.18.20
'@esbuild/darwin-arm64': 0.18.20
'@esbuild/darwin-x64': 0.18.20
'@esbuild/freebsd-arm64': 0.18.20
'@esbuild/freebsd-x64': 0.18.20
'@esbuild/linux-arm': 0.18.20
'@esbuild/linux-arm64': 0.18.20
'@esbuild/linux-ia32': 0.18.20
'@esbuild/linux-loong64': 0.18.20
'@esbuild/linux-mips64el': 0.18.20
'@esbuild/linux-ppc64': 0.18.20
'@esbuild/linux-riscv64': 0.18.20
'@esbuild/linux-s390x': 0.18.20
'@esbuild/linux-x64': 0.18.20
'@esbuild/netbsd-x64': 0.18.20
'@esbuild/openbsd-x64': 0.18.20
'@esbuild/sunos-x64': 0.18.20
'@esbuild/win32-arm64': 0.18.20
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
estree-walker@2.0.2: {}
fsevents@2.3.3:
optional: true
is-plain-object@3.0.1: {}
js-tokens@4.0.0: {}
lodash-es@4.17.23: {}
lodash@4.17.23: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
nanoid@3.3.11: {}
nanopop@2.4.2: {}
picocolors@1.1.1: {}
postcss@8.5.8:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
resize-observer-polyfill@1.5.1: {}
rollup@3.30.0:
optionalDependencies:
fsevents: 2.3.3
scroll-into-view-if-needed@2.2.31:
dependencies:
compute-scroll-into-view: 1.0.20
shallow-equal@1.2.1: {}
source-map-js@1.2.1: {}
stylis@4.3.6: {}
throttle-debounce@5.0.2: {}
typescript@4.9.5: {}
vite@4.5.14(@types/node@16.18.126):
dependencies:
esbuild: 0.18.20
postcss: 8.5.8
rollup: 3.30.0
optionalDependencies:
'@types/node': 16.18.126
fsevents: 2.3.3
vue-router@4.6.4(vue@3.5.30(typescript@4.9.5)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.30(typescript@4.9.5)
vue-tsc@0.35.2(typescript@4.9.5):
dependencies:
'@volar/vue-typescript': 0.35.2
typescript: 4.9.5
vue-types@3.0.2(vue@3.5.30(typescript@4.9.5)):
dependencies:
is-plain-object: 3.0.1
vue: 3.5.30(typescript@4.9.5)
vue@3.5.30(typescript@4.9.5):
dependencies:
'@vue/compiler-dom': 3.5.30
'@vue/compiler-sfc': 3.5.30
'@vue/runtime-dom': 3.5.30
'@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@4.9.5))
'@vue/shared': 3.5.30
optionalDependencies:
typescript: 4.9.5
warning@4.0.3:
dependencies:
loose-envify: 1.4.0

View File

@ -0,0 +1,14 @@
{
"name": "process",
"version": "0.1.0",
"entry": "/process/",
"routeBase": "/process",
"routes": [
{
"path": "/process/antd-demo",
"title": "AntD Demo",
"perm": "process:demo:view"
}
]
}

View File

@ -0,0 +1,4 @@
<template>
<router-view />
</template>

View File

@ -0,0 +1,8 @@
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
createApp(App).use(router).use(Antd).mount('#app');

View File

@ -0,0 +1,19 @@
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import Demo from '../views/Demo.vue';
const routes: RouteRecordRaw[] = [
{
path: '/',
redirect: '/antd-demo'
},
{
path: '/antd-demo',
component: Demo
}
];
export default createRouter({
history: createWebHistory('/process/'),
routes
});

View File

@ -0,0 +1,49 @@
<template>
<div style="padding: 24px">
<a-typography-title :level="3" style="margin: 0 0 12px 0">
Ant Design Vue Demofront-process
</a-typography-title>
<a-alert
message="该页面由 front-system 通过 Wujie 挂载展示"
type="success"
show-icon
style="margin-bottom: 16px"
/>
<a-space>
<a-button type="primary" @click="onClick">AntD 按钮</a-button>
<a-tag color="blue">Vue3 + Vite</a-tag>
<a-tag color="green">Ant Design Vue</a-tag>
</a-space>
<a-divider />
<a-card title="示例表格" :bordered="false">
<a-table :columns="columns" :data-source="data" :pagination="false" row-key="id" />
</a-card>
</div>
</template>
<script setup lang="ts">
import type { TableColumnsType } from 'ant-design-vue';
import { message } from 'ant-design-vue';
type Row = { id: number; name: string; status: string };
const columns: TableColumnsType<Row> = [
{ title: 'ID', dataIndex: 'id', key: 'id', width: 80 },
{ title: '名称', dataIndex: 'name', key: 'name' },
{ title: '状态', dataIndex: 'status', key: 'status', width: 120 }
];
const data: Row[] = [
{ id: 1, name: '流程A', status: '启用' },
{ id: 2, name: '流程B', status: '停用' }
];
function onClick() {
message.success('Ant Design Vue 组件工作正常');
}
</script>

View File

@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"jsx": "preserve",
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"types": ["vite/client"],
"noEmit": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

View File

@ -0,0 +1,13 @@
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
base: '/process/',
plugins: [vue()],
server: {
host: '0.0.0.0',
port: 5174,
strictPort: true
}
});

View File

@ -1,3 +1,3 @@
registry=https://registry.npmjs.org registry=https://registry.npmmirror.com
fetch-retries=5 fetch-retries=5
strict-peer-dependencies=false strict-peer-dependencies=false

View File

@ -32,7 +32,9 @@
"vue": "^3.2.40", "vue": "^3.2.40",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",
"vue-router": "^4.1.6", "vue-router": "^4.1.6",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3",
"wujie": "^1.0.24",
"wujie-vue3": "^1.0.24"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^16.2.3", "@commitlint/cli": "^16.2.3",

View File

@ -77,6 +77,12 @@ importers:
vuedraggable: vuedraggable:
specifier: ^2.24.3 specifier: ^2.24.3
version: 2.24.3 version: 2.24.3
wujie:
specifier: ^1.0.24
version: 1.0.29
wujie-vue3:
specifier: ^1.0.24
version: 1.0.29(vue@3.5.24(typescript@4.9.5))
devDependencies: devDependencies:
'@commitlint/cli': '@commitlint/cli':
specifier: ^16.2.3 specifier: ^16.2.3
@ -3286,6 +3292,14 @@ packages:
wrappy@1.0.2: wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
wujie-vue3@1.0.29:
resolution: {integrity: sha512-OGt5Veyq/DtmFzHQCANmv8nZgu877u7ZjS5qjFpSrtKARKhLjID3x99D40a4pb3Kj5UmRatkV5Gn5hqOWpziZQ==}
peerDependencies:
vue: ^3.0.0
wujie@1.0.29:
resolution: {integrity: sha512-u7PmBT4l5ov7ciwmZNG8DLIRKrYrnXDa0LnAFgRQikJ/ZrVZYzzSNz6duzEJoj8/o46dnMy/g9Hh/PBYGbgFUw==}
y18n@5.0.8: y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -6747,6 +6761,15 @@ snapshots:
wrappy@1.0.2: {} wrappy@1.0.2: {}
wujie-vue3@1.0.29(vue@3.5.24(typescript@4.9.5)):
dependencies:
vue: 3.5.24(typescript@4.9.5)
wujie: 1.0.29
wujie@1.0.29:
dependencies:
'@babel/runtime': 7.28.4
y18n@5.0.8: {} y18n@5.0.8: {}
yallist@4.0.0: {} yallist@4.0.0: {}

View File

@ -17,6 +17,7 @@ import i18n from '@/lang/index';
import '@/styles/index.scss'; import '@/styles/index.scss';
import 'element-plus/theme-chalk/index.css'; import 'element-plus/theme-chalk/index.css';
//import 'element-plus/theme-chalk/dark/css-vars.css'; //import 'element-plus/theme-chalk/dark/css-vars.css';
import WujieVue from 'wujie-vue3';
const app = createApp(App); const app = createApp(App);
// 自定义指令 // 自定义指令
@ -38,5 +39,6 @@ app
.component('Pagination', Pagination) .component('Pagination', Pagination)
.use(router) .use(router)
.use(ElementPlus) .use(ElementPlus)
.use(WujieVue)
.use(i18n) .use(i18n)
.mount('#app'); .mount('#app');

View File

@ -12,6 +12,10 @@ const permissionStore = usePermissionStoreHook();
// 白名单路由 // 白名单路由
const whiteList = ['/login']; const whiteList = ['/login'];
if (import.meta.env.DEV) {
whiteList.push('/process/antd-demo');
}
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
NProgress.start(); NProgress.start();
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();

View File

@ -52,6 +52,21 @@ export const constantRoutes: RouteRecordRaw[] = [
meta: { hidden: true } meta: { hidden: true }
}, },
] ]
},
{
path: '/process',
opturl: '/process',
component: Layout,
redirect: '/process/antd-demo',
children: [
{
path: 'antd-demo',
opturl: '/process/antd-demo',
component: () => import('@/views/process/antd-demo.vue'),
name: 'AntD Demo',
meta: { title: 'AntD Demo' }
}
]
} }
]; ];

View File

@ -0,0 +1,10 @@
<template>
<div style="height: 100%">
<WujieVue name="process" :url="entryUrl" :sync="true" />
</div>
</template>
<script setup lang="ts">
const entryUrl = import.meta.env.VITE_PROCESS_ENTRY || '/process/';
</script>

View File

@ -31,6 +31,10 @@ export default ({ mode }: ConfigEnv): UserConfig => {
changeOrigin: true, changeOrigin: true,
rewrite: path => rewrite: path =>
path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '') path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')
},
'/process': {
target: 'http://localhost:5174',
changeOrigin: true
} }
} }
}, },
@ -49,4 +53,4 @@ export default ({ mode }: ConfigEnv): UserConfig => {
} }
} }
}; };
}; };

View File

@ -0,0 +1,225 @@
# 系统前端框架及集成方案微前端Wujie双栈并存
## 1. 背景与目标
### 1.1 背景
- 现有 `front-system`:基于 Vue3 + Vite + Element Plus已完成登录、首页布局、菜单框架、权限管理配置等平台能力。
- 计划新增 `front-process`:基于 Vue3 + Vite + Ant Design Vue承载“全过程平台”的业务模块开发。
- 诉求:业务模块页面能够被集成到 `front-system` 的菜单体系中,在同一系统壳内统一展示与导航。
- 约束:不要求子应用独立部署到不同域名(允许同域名不同路径)。
### 1.2 总体目标
- 双栈并存:`front-system` 使用 Element Plus`front-process` 使用 Ant Design Vue。
- 平台壳统一:登录、鉴权、菜单、导航、用户态由 `front-system` 统一提供。
- 业务独立迭代:`front-process` 可独立开发、独立构建、独立发布(至少独立产物与版本),但最终可同域名部署。
- 集成稳定:支持深链接/刷新不 404支持主/子应用通信;支持权限控制与菜单动态加载。
### 1.3 非目标(明确不做)
- 不在同一个页面/同一个组件树内混用 Element Plus 与 Ant Design Vue 的核心表单/表格/弹窗(避免样式与交互冲突)。
- 不追求主/子应用“运行时共享同一个 Vue 实例”这一类高复杂度共享(除非后续明确要求并引入更强的共享机制)。
## 2. 总体架构
### 2.1 角色划分
- Host主应用`front-system`
- 职责登录、token 生命周期、用户信息、权限与菜单、系统配置、统一布局header/sidebar/tabs、全局路由守卫。
- 职责:提供微前端容器,负责挂载/卸载子应用。
- SubApp子应用`front-process`
- 职责:全过程业务模块页面与路由、业务页面内的权限展示(按钮/菜单项可见性)以及业务接口调用。
- 约束:不自行实现登录与 token 刷新;不与 Host 的存储策略强耦合(通过 Host SDK 读取)。
### 2.2 路由策略(同域名)
- 约定统一路由前缀:
- Host 自己页面:`/login`、`/system/**`、`/`(首页等)
- SubApp 页面前缀:`/process/**`
- Host 在路由命中 `/process/**` 时:
- 渲染“微前端容器页”(仅保留壳:菜单/页签/面包屑等)
- 将当前路径转发给子应用(由子应用 router 接管内部视图)
### 2.3 菜单与权限模型
- 菜单数据由 Host 统一维护(系统权限管理模块)。
- Host 菜单支持两类节点:
- Host 页面:`type=host`,如 `/system/role`
- 子应用页面:`type=micro`,如 `/process/order/list`,并包含 `app=process`
- 权限判断:
- Host用于决定“菜单是否出现/路由是否允许进入”。
- SubApp用于按钮/页面内部功能点可见性(通过 Host SDK 获取权限集合)。
## 3. 技术选型Wujie已选定
### 3.1 选型结论
- 本方案明确选用WujieVue3 + Vite 场景)。
- 目标:在 `front-system`Element Plus不大改动的前提下接入 `front-process`Ant Design Vue并进行样式隔离与生命周期治理。
### 3.2 选型理由
- 接入路径更直接:同域名、路由前缀、容器挂载属于 Wujie 的典型场景。
- 隔离能力更容易落地:可选 Shadow DOM/样式隔离能力,更适配现有 Host 中 Tailwind 与 Element Plus 全局样式覆盖的现状。
### 3.3 统一要求
- 明确“接入协议”(路由、菜单、鉴权、通信)并版本化。
- 子应用必须在容器内可重复 mount/unmount不泄露全局事件、定时器、全局样式。
## 4. 仓库与工程结构建议
### 4.1 当前仓库结构(建议演进)
建议把前端拆为两个目录(可在同仓库内):
```
WholeProcessPlatform/
frontend-system/ # HostElement Plus
frontend-process/ # SubAppAnt Design Vue
backend/ # Spring Boot
```
如果短期不希望移动目录,也可以先在现有 `frontend/` 基础上复制一份 `frontend-process/`,逐步迁移到标准结构。
### 4.2 子应用产物与路径约定(同域名)
- Host 发布到:`/`(例如 `https://example.com/`
- SubApp 发布到:`/process/`(例如 `https://example.com/process/`
- 子应用构建时必须配置:
- `base: '/process/'`
- 资源路径、路由刷新策略与后端 rewrite 一致
## 5. 接入协议(核心:可迭代)
### 5.1 子应用 Manifest推荐
Host 通过一个标准 manifest 获取子应用信息,避免硬编码:
`GET /process/manifest.json`(同域名静态文件或接口均可)
示例:
```json
{
"name": "process",
"version": "1.0.0",
"entry": "/process/",
"routeBase": "/process",
"routes": [
{ "path": "/process/order/list", "title": "订单列表", "perm": "process:order:list" }
]
}
```
Host 使用方式:
- 菜单配置模块把 `perm/path/title/app` 写入系统菜单表。
- 或者 Host 启动时拉取 manifest生成“可选菜单项”供管理员配置。
### 5.2 Host SDK推荐共享通信与鉴权
提供一个统一 SDK同仓库内共享文件或独立包子应用只能通过 SDK 获取宿主能力。
接口建议(最小闭环):
- `getToken(): string | null`
- `getUser(): { id: string; username: string; roles: string[]; perms: string[] } | null`
- `hasPerm(code: string): boolean`
- `onAuthChanged(cb): () => void`
- `navigate(path: string): void`(由 Host 控制主路由)
- `getAppConfig(): Record<string, any>`
通信方式建议:
- 同窗口同域名:优先使用自定义事件(`window.dispatchEvent(new CustomEvent(...))`)或轻量事件总线。
- 避免子应用直接读写 Host 的 pinia/vuex store强耦合
### 5.3 鉴权约定
- token 统一由 Host 管理:登录、刷新、退出、失效重登。
- 子应用请求后端 API 的 token 获取:
- `Authorization: Bearer <token>` 由子应用拦截器从 Host SDK 注入。
- 子应用不得自行实现登录页面与 token 刷新逻辑(避免双重刷新与状态打架)。
## 6. 样式隔离与 UI 共存策略(关键风险治理)
### 6.1 原则
- HostElement Plus与 SubAppAntD在同一 DOM 上下文时,必须最小化全局样式污染。
- 禁止在子应用里全局覆盖宿主样式(也不建议在宿主覆盖子应用)。
### 6.2 治理手段
- 选择 wujie 时:
- 优先开启样式隔离能力(根据实际接入方式选择 Shadow DOM 或样式沙箱)。
- Tailwind 风险:
- Host 当前使用 Tailwind 全局注入时,会影响子应用的基础样式(尤其 preflight/base
- 建议后续收敛:对子应用范围做隔离,或在 Host 中通过约定限制 tailwind base 的影响范围。
- 弹层与 z-index
- AntD 与 Element Plus 都有 modal/message/notification。
- 约定:子应用弹层仅覆盖子应用容器;宿主弹层覆盖全局;避免跨应用调用对方 UI 弹层。
## 7. 本地开发联调模式Dev
### 7.1 端口约定(示例)
- backend`8093`
- Hostfront-system`5173`
- SubAppfront-process`5174`
### 7.2 代理与同域策略
由于“不要求独立域名”,本地开发仍建议通过代理实现“看起来同域”:
- Host dev server 代理:
- `/api``http://localhost:8093`
- `/process/``http://localhost:5174/`(子应用 dev server
这样 Host 在开发态加载子应用时仍以 `/process/` 作为 entry最大程度贴近生产路径。
## 7.3 Demo 联调(本仓库)
- Hostsystem菜单项`/process/antd-demo`
- 子应用process入口`/process/`(由 Host 通过 Wujie 挂载)
- 本地启动顺序:
- 前置Node.js 建议 18+(推荐 20+pnpm 建议 9+(若本机 pnpm 版本过旧,可使用 `npx -y pnpm@9.15.4 ...` 代替 `pnpm ...`
- 启动 `frontend-process`(子应用,端口 5174
- `cd frontend-process && pnpm install && pnpm dev`
- 启动 `front-system`Host当前仓库的 `frontend`,端口 5173/自动找可用端口):
- `cd frontend && pnpm install && pnpm dev`
- 在 Host 菜单中进入“AntD Demo”页面进行验证
## 8. 生产部署方案(同域名)
### 8.1 Nginx推荐
- Host 静态文件:`/` 指向 host dist
- SubApp 静态文件:`/process/` 指向 subapp dist
- 后端接口:`/api/` 反向代理到 Spring Boot
- 路由刷新:对 `/``/process/` 分别做 fallback 到对应的 `index.html`
### 8.2 Spring Boot 静态资源(可行但需约束)
如果用 Spring Boot 统一承载静态资源:
- Host 构建产物放入 `backend/src/main/resources/static/`
- SubApp 构建产物放入 `backend/src/main/resources/static/process/`
- 需确保:
- Host 与 SubApp 的资源路径不冲突
- Spring MVC 对前端路由做 rewrite尤其 `/process/**` 刷新)
## 9. 迭代计划(按里程碑)
### M1微前端骨架1 条链路跑通)
- Host 增加微前端容器页 `/process/**`
- SubApp 实现最小页面(例如 `/process/health`
- Host 菜单可配置一个子应用菜单项并打开该页面
- Host SDK实现 `getToken/getUser/hasPerm/navigate`
### M2权限与菜单联动
- 菜单管理支持 `type=micro``app=process`
- 子应用按 `perm` 做按钮级展示
- 深链接与刷新校验通过(直接打开 `/process/**`
### M3工程治理
- 样式隔离策略固化shadow dom / css sandbox
- 错误边界:子应用加载失败时 Host 给出可恢复提示
- 性能优化:按路由懒加载子应用、预加载关键模块
## 10. 风险清单与应对
### 10.1 路由刷新 404
- 风险:/process/** 刷新时服务端不 rewrite 到 index.html。
- 应对Nginx 或 Spring Boot rewrite 规则必须补齐,并对 Host/SubApp 各自生效。
### 10.2 鉴权状态不一致
- 风险:子应用自行刷新 token 或自行维护登录态。
- 应对:只允许 Host 管理 token子应用通过 SDK 读取并订阅变更。
### 10.3 样式污染与弹层冲突
- 风险Tailwind base、全局 reset、z-index。
- 应对:隔离策略 + 约定弹层边界 + 视觉回归检查。
### 10.4 版本错配
- 风险Host 菜单/协议升级,子应用未同步。
- 应对manifest 版本化Host 对协议做兼容或强制版本一致发布。
## 11. 最小验收标准(可作为迭代验收)
- 登录成功后Host 菜单可进入 `/process/**` 页面并正常展示子应用内容。
- 浏览器刷新 `/process/**` 不 404。
- 子应用通过 Host SDK 获取 token 调用后端 API 成功。
- Host 退出登录后,子应用自动感知并回到登录页(由 Host 控制导航)。
- 子应用异常(加载失败/运行时错误)不会导致 Host 白屏Host 能提示并支持重试。

Binary file not shown.