|
|
@ -0,0 +1,13 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = false
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# production
|
||||
/dist
|
||||
/demo
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.idea
|
||||
yarn.lock
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
public-hoist-pattern[]=*loader
|
||||
public-hoist-pattern[]=html-webpack-plugin
|
||||
public-hoist-pattern[]=react-refresh
|
||||
public-hoist-pattern[]=@rspack/plugin-react-refresh
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
# 微应用模板说明文档
|
||||
|
||||
## 在线文档
|
||||
|
||||
https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko
|
||||
|
||||
|
||||
## 安装依赖
|
||||
项目依赖可通过 **yarn** 或 **npm** 进行安装:
|
||||
|
||||
```bash
|
||||
# 使用 yarn
|
||||
yarn
|
||||
|
||||
# 或使用 npm
|
||||
npm i
|
||||
```
|
||||
|
||||
## 开发服务&打包应用
|
||||
|
||||
```bash
|
||||
# 启动开发服务
|
||||
yarn serve:<env>
|
||||
# 或
|
||||
npm run serve:<env>
|
||||
|
||||
# 开发环境打包
|
||||
yarn build:<env>
|
||||
# 或
|
||||
npm run build:<env>
|
||||
```
|
||||
|
||||
## 路由配置&路由访问&自动化路由
|
||||
所有页面必须放在`src/pages/container`目录下,启动访问页面请在浏览器地址栏输入`/<appIdentifier>/container/<你的路由页面文件名称>`
|
||||
解释:
|
||||
1. 所有页面组件命名为`index.js`或`index.jsx`,必须放在一个首字母大写的文件中。
|
||||
2. `container`为固定路径访问格式
|
||||
3. `<appIdentifier>`为应用的唯一标识符,也是应用路由的`basename`,在底座中用于区分其他应用。可在根目录 `jjb.config.js` 文件的 `appIdentifier` 节点中进行修改。
|
||||
4. 自动化路由将根据`pages/container`中的路由页面文件自动生成路由树。
|
||||
5. `id`匹配路由,文件夹命名`_id`
|
||||
|
||||
## 应用接口环境配置
|
||||
应用接口环境相关配置在根目录 `jjb.config.js` 文件的 `environment` 节点中进行定义。
|
||||
|
||||
## 应用开发服务配置
|
||||
应用开发服务相关配置在根目录 `jjb.config.js` 文件的 `server` 节点中进行定义。
|
||||
|
||||
## Babel 配置
|
||||
应用的 `Babel` 配置在根目录 `jjb.babel.js` 文件中进行管理。
|
||||
|
||||
## 目录说明
|
||||
|
||||
1. `src/api/` 配置各个 store 模块的接口数据。
|
||||
2. `src/components/` 全局公共组件。
|
||||
3. `src/enumerate/` 全局各种枚举配置。
|
||||
4. `src/pages/` 页面文件目录。
|
||||
5. `src/main.js` 应用的入口文件。
|
||||
|
||||
## 核心依赖
|
||||
1. `@cqsjjb/jjb-common-decorator`
|
||||
1. 公共装饰器库,内部包含:
|
||||
1. 按钮权限处理
|
||||
2. antd/Table 控制
|
||||
3. 文本重命名处理
|
||||
4. 具体使用方式可参考各个模块的 `d.ts`。
|
||||
2. `@cqsjjb/jjb-common-lib`
|
||||
1. 公共工具库,具体 API 使用请查看 `d.ts`
|
||||
3. `@cqsjjb/jjb-dva-runtime`
|
||||
1. 核心运行时,基于 `dvajs` 实现。
|
||||
1. 应用核心依赖模块
|
||||
2. 应用的自动化路由
|
||||
3. `store` 模块接口数据处理
|
||||
4. 均基于此依赖实现,具体使用方式请查看 `d.ts`。
|
||||
4. `@cqsjjb/jjb-react-admin-component`
|
||||
1. 公共组件库,具体组件使用方式请查看 `d.ts`。
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
_ooOoo_
|
||||
o8888888o
|
||||
88" . "88
|
||||
(| -_- |)
|
||||
O\ = /O
|
||||
____/`---'\____
|
||||
. ' \\| |// `.
|
||||
/ \\||| : |||// \
|
||||
/ _||||| -:- |||||- \
|
||||
| | \\\ - /// | |
|
||||
| \_| ''\---/'' | |
|
||||
\ .-\__ `-` ___/-. /
|
||||
___`. .' /--.--\ `. . __
|
||||
."" '< `.___\_<|>_/___.' >'"".
|
||||
| | : `- \`.;`\ _ /`;.`/ - ` : | |
|
||||
\ \ `-. \_ __\ /__ _/ .-` / /
|
||||
======`-.____`-.___\_____/___.-`____.-'======
|
||||
`=---='
|
||||
|
||||
.............................................
|
||||
佛祖保佑 永无BUG
|
||||
佛曰:
|
||||
写字楼里写字间,写字间里程序员;
|
||||
程序人员写程序,又拿程序换酒钱。
|
||||
酒醒只在网上坐,酒醉还来网下眠;
|
||||
酒醉酒醒日复日,网上网下年复年。
|
||||
但愿老死电脑间,不愿鞠躬老板前;
|
||||
奔驰宝马贵者趣,公交自行程序员。
|
||||
别人笑我忒疯癫,我笑自己命太贱;
|
||||
不见满街漂亮妹,哪个归得程序员?
|
||||
*/
|
||||
|
||||
const blessedByBuddha
|
||||
= "%c _ooOoo_\n"
|
||||
+ " o8888888o\n"
|
||||
+ " 88\" . \"88\n"
|
||||
+ " (| -_- |)\n"
|
||||
+ " O\\ = /O\n"
|
||||
+ " ____/`---'\\____\n"
|
||||
+ " . ' \\\\| |// `.\n"
|
||||
+ " / \\\\||| : |||// \\\n"
|
||||
+ " / _||||| -:- |||||- \\\n"
|
||||
+ " | | \\\\\\ - /// | |\n"
|
||||
+ " | \\_| ''\\---/'' | |\n"
|
||||
+ " \\ .-\\__ `-` ___/-. /\n"
|
||||
+ " ___`. .' /--.--\\ `. . __\n"
|
||||
+ " .\"\" '< `.___\\_<|>_/___.' >'\"\".\n"
|
||||
+ " | | : `- \\`.;`\\ _ /`;.`/ - ` : | |\n"
|
||||
+ " \\ \\ `-. \\_ __\\ /__ _/ .-` / /\n"
|
||||
+ " ======`-.____`-.___\\_____/___.-`____.-'======\n"
|
||||
+ " `=---='\n"
|
||||
+ "\n"
|
||||
+ "%c .............................................\n"
|
||||
+ " 佛祖保佑 永无BUG\n"
|
||||
+ "\n"
|
||||
+ "%c 佛曰:\n"
|
||||
+ " 写字楼里写字间,写字间里程序员;\n"
|
||||
+ " 程序人员写程序,又拿程序换酒钱。\n"
|
||||
+ " 酒醒只在网上坐,酒醉还来网下眠;\n"
|
||||
+ " 酒醉酒醒日复日,网上网下年复年。\n"
|
||||
+ " 但愿老死电脑间,不愿鞠躬老板前;\n"
|
||||
+ " 奔驰宝马贵者趣,公交自行程序员。\n"
|
||||
+ " 别人笑我忒疯癫,我笑自己命太贱;\n"
|
||||
+ " 不见满街漂亮妹,哪个归得程序员?";
|
||||
console.log(blessedByBuddha, "color:#ffd700", "color:red", "color:#1e80ff");
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
# 使用文档
|
||||
|
||||
建教帮(JJB)微应用,基于 `@cqsjjb/scripts` + Rspack 构建。
|
||||
|
||||
## 环境要求
|
||||
|
||||
- Node.js >= 14(推荐 18+)
|
||||
- pnpm / npm / yarn
|
||||
|
||||
## 安装
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
# 或 npm install
|
||||
```
|
||||
|
||||
## 启动开发
|
||||
|
||||
```bash
|
||||
npm run serve:development
|
||||
```
|
||||
|
||||
默认地址:`http://127.0.0.1:8080`
|
||||
|
||||
端口、host 在 `jjb.config.js` → `server` 中配置。
|
||||
|
||||
## 打包
|
||||
|
||||
```bash
|
||||
# 开发环境产物
|
||||
npm run build:development
|
||||
|
||||
# 生产环境产物
|
||||
npm run build:production
|
||||
```
|
||||
|
||||
输出目录:`dist/`(子目录名与 `appIdentifier` 一致,当前为 `safetyEval-h5/`)
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `npm run serve:development` | 开发模式启动 |
|
||||
| `npm run serve:production` | 生产配置启动(本地调试) |
|
||||
| `npm run build:production` | 生产打包 |
|
||||
| `npm run clean-cache` | 清除构建缓存 |
|
||||
| `npm run lint` | ESLint 检查并自动修复 |
|
||||
|
||||
## 路由访问
|
||||
|
||||
页面放在 `src/pages/Container/<PageName>/index.js`,访问格式:
|
||||
|
||||
```
|
||||
http://{host}:{port}/{appIdentifier}/container/{PageName}
|
||||
```
|
||||
|
||||
| 页面 | 路径 |
|
||||
|------|------|
|
||||
| 用户注册 | `/safetyEval-h5/container/Register` |
|
||||
| 机构信息填报 | `/safetyEval-h5/container/RegisterMore` |
|
||||
| 地图大屏 | `/safetyEval-h5/container/Map` |
|
||||
| Driver 入口 | `/safetyEval-h5/container/Driver` |
|
||||
| 分公司白底屏 | `/safetyEval-h5/container/White/BranchOffice` |
|
||||
| 监管白底屏 | `/safetyEval-h5/container/White/Share` |
|
||||
|
||||
`appIdentifier` 在 `jjb.config.js` 中配置,当前为 `safetyEval-h5`。
|
||||
|
||||
## 核心配置
|
||||
|
||||
**`jjb.config.js`**
|
||||
|
||||
| 节点 | 说明 |
|
||||
|------|------|
|
||||
| `appIdentifier` | 路由前缀 / 打包目录名 |
|
||||
| `environment.*.API_HOST` | 接口网关地址 |
|
||||
| `contextInject.fileUrl` | 文件服务地址 |
|
||||
| `server.port` / `server.host` | 开发服务端口 |
|
||||
|
||||
**接口环境**
|
||||
|
||||
- 开发:`http://127.0.0.1`(可按需改 `development.API_HOST`)
|
||||
- 生产:`https://gbs-gateway.qhdsafety.com`
|
||||
|
||||
运行时可通过 `sessionStorage.API_HOST` 覆盖网关。
|
||||
|
||||
## GBS 基座集成
|
||||
|
||||
从基座跳转时,URL 可携带鉴权参数,Map / Driver 页会自动写入 `sessionStorage`:
|
||||
|
||||
- `token`
|
||||
- `accessTicket`
|
||||
- `clientId`
|
||||
- `orgId`
|
||||
|
||||
Driver 页根据接口 `GET /safetyEval/org-department/checkTerminalType` 判断终端类型:
|
||||
|
||||
- `1` → 机构端 Dashboard
|
||||
- `2` → 监管端驾驶舱(Cockpit)
|
||||
|
||||
左上角「返回」:关闭窗口或跳转 GBS 网关。
|
||||
|
||||
**接口错误全局处理**:`public/index.html` 配置了 HTTP 响应拦截,当接口返回 `success: false` 时自动返回基座(`checkTerminalType` 除外,失败时停留在 Driver 页)。
|
||||
|
||||
## 目录说明
|
||||
|
||||
```
|
||||
src/
|
||||
├── api/ # 接口声明(declareRequest)
|
||||
├── pages/Container/ # 业务页面(约定式路由)
|
||||
├── components/ # 全局公共组件
|
||||
├── enumerate/ # namespace / context / 常量
|
||||
└── main.js # 微应用入口(qiankun 生命周期)
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [对外开放接口(images)](./对外开放接口-images.md)
|
||||
- [JJB 微应用模板说明](https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko)
|
||||
|
||||
## 常见问题
|
||||
|
||||
**编译异常 / 路由报错**
|
||||
|
||||
```bash
|
||||
npm run clean-cache
|
||||
npm run serve:development
|
||||
```
|
||||
|
||||
**8080 端口占用**
|
||||
|
||||
修改 `jjb.config.js` → `server.port`,或结束占用进程后重启。
|
||||
|
||||
**pnpm 依赖问题**
|
||||
|
||||
项目使用 pnpm,`jjb.config.js` 中已配置 `resolve.symlinks: true`,勿随意关闭。
|
||||
|
|
@ -0,0 +1,443 @@
|
|||
# 对外开放接口文档(ImagesOpenController)
|
||||
|
||||
## 目录
|
||||
|
||||
- [接口概览](#接口概览)
|
||||
- [通用说明](#通用说明)
|
||||
- [用户接口(Account)](#用户接口account)
|
||||
- [机构信息接口(OrgInfo)](#机构信息接口orginfo)
|
||||
- [数据模型](#数据模型)
|
||||
|
||||
---
|
||||
|
||||
## 接口概览
|
||||
|
||||
> 所有接口统一前缀:`/safetyEval/images`
|
||||
> **免登录、免鉴权**,适用于注册、短信验证等对外开放场景。
|
||||
|
||||
| 模块 | 方法 | 路径 | 说明 |
|
||||
|------|------|------|------|
|
||||
| 用户 | `POST` | `/safetyEval/images/account/save` | 新增用户(注册) |
|
||||
| 用户 | `GET` | `/safetyEval/images/account/get` | 查询用户详情 |
|
||||
| 用户 | `POST` | `/safetyEval/images/account/modify` | 修改用户 |
|
||||
| 用户 | `POST` | `/safetyEval/images/account/delete` | 删除用户 |
|
||||
| 用户 | `GET` | `/safetyEval/images/account/page` | 分页查询用户 |
|
||||
| 用户 | `GET` | `/safetyEval/images/account/syncUserToGBS` | 用户同步 GBS |
|
||||
| 用户 | `GET` | `/safetyEval/images/account/verificationCode` | 验证码校验 |
|
||||
| 用户 | `GET` | `/safetyEval/images/account/checkTerminalType` | 校验终端类型 |
|
||||
| 用户 | `POST` | `/safetyEval/images/account/sendMessage` | 发送短信验证码 |
|
||||
| 机构 | `POST` | `/safetyEval/images/org-info/save` | 新增机构信息(注册) |
|
||||
|
||||
---
|
||||
|
||||
## 通用说明
|
||||
|
||||
### 基础路径
|
||||
|
||||
```
|
||||
开发环境: http://{host}:{port}/safetyEval/images
|
||||
生产环境: http://{gateway}/safetyEval/images
|
||||
```
|
||||
|
||||
### 鉴权说明
|
||||
|
||||
- 无需携带 Token / Cookie
|
||||
- 已配置 GBS 白名单:`/**/images/**`
|
||||
- 与 `/safetyEval/account/**` 内部接口功能相同,但路径不同;内部接口仍需登录
|
||||
|
||||
### 统一响应体(SingleResponse)
|
||||
|
||||
大部分接口返回项目自定义 `SingleResponse`:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": "0",
|
||||
"message": null,
|
||||
"errMessage": null,
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `success` | boolean | 是否成功 |
|
||||
| `code` | string | 响应码,`0` 表示成功 |
|
||||
| `message` | string | 响应消息 |
|
||||
| `errMessage` | string | 错误消息(失败时) |
|
||||
| `data` | object | 业务数据 |
|
||||
|
||||
### 分页响应体(PageResponse)
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": "0",
|
||||
"data": [],
|
||||
"total": 100
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `data` | array | 当前页数据列表 |
|
||||
| `total` | long | 总条数 |
|
||||
|
||||
### 短信接口响应体(COLA SingleResponse)
|
||||
|
||||
`sendMessage` 接口返回 GBS COLA 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"errCode": null,
|
||||
"errMessage": null,
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 用户接口(Account)
|
||||
|
||||
### 1. 新增用户(注册)
|
||||
|
||||
```
|
||||
POST /safetyEval/images/account/save
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体(AccountAddCmd)**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `userName` | string | 否 | 用户名称/姓名 |
|
||||
| `account` | string | 否 | 账号 |
|
||||
| `phone` | string | 否 | 手机号 |
|
||||
| `password` | string | 否 | 密码 |
|
||||
| `profileUrl` | string | 否 | 头像地址 |
|
||||
| `verificationCode` | string | 否 | 短信验证码 |
|
||||
| `type` | integer | 否 | 类型:`1` 机构端,`2` 监管端(默认 `1`) |
|
||||
|
||||
**请求示例**
|
||||
|
||||
```json
|
||||
{
|
||||
"userName": "张三",
|
||||
"account": "zhangsan",
|
||||
"phone": "13800138000",
|
||||
"password": "a123456",
|
||||
"verificationCode": "123456",
|
||||
"type": 1
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"code": "0",
|
||||
"data": {
|
||||
"id": 1001,
|
||||
"userName": "张三",
|
||||
"account": "zhangsan",
|
||||
"phone": "13800138000",
|
||||
"profileUrl": null,
|
||||
"type": 1,
|
||||
"tenantId": 1001
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询用户详情
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/get?id={id}
|
||||
```
|
||||
|
||||
**Query 参数**
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `id` | long | 是 | 用户主键 ID |
|
||||
|
||||
**响应**:`SingleResponse<AccountCO>`
|
||||
|
||||
---
|
||||
|
||||
### 3. 修改用户
|
||||
|
||||
```
|
||||
POST /safetyEval/images/account/modify
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体(AccountModifyCmd)**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `id` | long | 是 | 主键 ID |
|
||||
| `userName` | string | 否 | 用户名称/姓名 |
|
||||
| `account` | string | 否 | 账号 |
|
||||
| `phone` | string | 否 | 手机号 |
|
||||
| `password` | string | 否 | 密码 |
|
||||
| `profileUrl` | string | 否 | 头像地址 |
|
||||
| `type` | integer | 否 | 类型:`1` 机构端,`2` 监管端 |
|
||||
|
||||
**响应**:`SingleResponse<AccountCO>`
|
||||
|
||||
---
|
||||
|
||||
### 4. 删除用户
|
||||
|
||||
```
|
||||
POST /safetyEval/images/account/delete
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `data` | long | 是 | 用户主键 ID |
|
||||
|
||||
**请求示例**
|
||||
|
||||
```json
|
||||
{
|
||||
"data": 1001
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:`SingleResponse<Void>`
|
||||
|
||||
---
|
||||
|
||||
### 5. 分页查询用户
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/page
|
||||
```
|
||||
|
||||
**Query 参数(AccountPageQuery)**
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `current` | long | 否 | 当前页,默认 `1` |
|
||||
| `size` | long | 否 | 每页条数,默认 `10` |
|
||||
| `orders` | string | 否 | 排序,格式:`column:asc\|desc`,多个逗号分隔 |
|
||||
| `startTime` | datetime | 否 | 开始时间,格式 `yyyy-MM-dd HH:mm:ss` |
|
||||
| `endTime` | datetime | 否 | 结束时间,格式 `yyyy-MM-dd HH:mm:ss` |
|
||||
| `userName` | string | 否 | 用户名称(模糊) |
|
||||
| `account` | string | 否 | 账号 |
|
||||
| `phone` | string | 否 | 手机号 |
|
||||
| `type` | integer | 否 | 类型:`1` 机构端,`2` 监管端 |
|
||||
|
||||
**请求示例**
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/page?current=1&size=10&userName=张&type=1
|
||||
```
|
||||
|
||||
**响应**:`PageResponse<AccountCO>`
|
||||
|
||||
---
|
||||
|
||||
### 6. 用户同步 GBS
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/syncUserToGBS?account={account}
|
||||
```
|
||||
|
||||
**Query 参数**
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `account` | string | 是 | 用户账号 |
|
||||
|
||||
**响应**:`SingleResponse<AccountCO>`
|
||||
|
||||
---
|
||||
|
||||
### 7. 验证码校验
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/verificationCode?phone={phone}&code={code}
|
||||
```
|
||||
|
||||
**Query 参数**
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `phone` | string | 是 | 手机号 |
|
||||
| `code` | string | 是 | 短信验证码 |
|
||||
|
||||
**响应**:`SingleResponse<AccountCO>`
|
||||
|
||||
---
|
||||
|
||||
### 8. 校验终端类型
|
||||
|
||||
```
|
||||
GET /safetyEval/images/account/checkTerminalType
|
||||
```
|
||||
|
||||
**说明**:校验当前用户是机构端还是监管端。
|
||||
|
||||
**响应**:`SingleResponse<Integer>`
|
||||
|
||||
| 返回值 | 说明 |
|
||||
|--------|------|
|
||||
| `1` | 机构端 |
|
||||
| `2` | 监管端 |
|
||||
|
||||
---
|
||||
|
||||
### 9. 发送短信验证码
|
||||
|
||||
```
|
||||
POST /safetyEval/images/account/sendMessage
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体(SendMessageCmd)**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `mobile` | string | **是** | 手机号 |
|
||||
| `params` | object | 否 | 消息模板参数 |
|
||||
|
||||
**请求示例**
|
||||
|
||||
```json
|
||||
{
|
||||
"mobile": "13800138000"
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 机构信息接口(OrgInfo)
|
||||
|
||||
### 10. 新增机构信息(注册)
|
||||
|
||||
```
|
||||
POST /safetyEval/images/org-info/save
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体(OrgInfoAddCmd)**
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `unitName` | string | 否 | 生产经营单位名称 |
|
||||
| `creditCode` | string | 否 | 统一社会信用代码 |
|
||||
| `safetyIndustryCategoryCode` | string | 否 | 安全生产监管行业类别编码 |
|
||||
| `safetyIndustryCategoryName` | string | 否 | 安全生产监管行业类别名称 |
|
||||
| `districtCode` | string | 否 | 所属县区编码 |
|
||||
| `districtName` | string | 否 | 所属县区名称 |
|
||||
| `townStreet` | string | 否 | 所属镇街道 |
|
||||
| `villageCommunity` | string | 否 | 属村社区 |
|
||||
| `longitude` | decimal | 否 | 经度 |
|
||||
| `latitude` | decimal | 否 | 纬度 |
|
||||
| `registerAddress` | string | 否 | 注册地址 |
|
||||
| `businessAddress` | string | 否 | 经营地址 |
|
||||
| `ownershipTypeCode` | string | 否 | 归属类型编码 |
|
||||
| `ownershipTypeName` | string | 否 | 归属类型名称 |
|
||||
| `legalRepresentative` | string | 否 | 法定代表人 |
|
||||
| `legalRepresentativePhone` | string | 否 | 法定代表人联系电话 |
|
||||
| `principalName` | string | 否 | 主要负责人 |
|
||||
| `principalPhone` | string | 否 | 主要负责人联系电话 |
|
||||
| `safetyDeptManager` | string | 否 | 安全管理部门负责人 |
|
||||
| `safetyDeptManagerPhone` | string | 否 | 安全管理部门负责人联系电话 |
|
||||
| `safetyDeputyPhone` | string | 否 | 主管安全副总联系电话 |
|
||||
| `productionDate` | date | 否 | 投产日期,格式 `yyyy-MM-dd` |
|
||||
| `businessStatusCode` | integer | 否 | 企业经营状态编码 |
|
||||
| `businessStatusName` | string | 否 | 企业经营状态名称 |
|
||||
| `infoDisclosureUrl` | string | 否 | 信息公开网址 |
|
||||
| `workplaceArea` | decimal | 否 | 工作场所建筑面积(平方米) |
|
||||
| `archiveRoomArea` | decimal | 否 | 档案室面积(平方米) |
|
||||
| `fulltimeEvaluatorCount` | integer | 否 | 专职安全评价师数量 |
|
||||
| `registeredEngineerCount` | integer | 否 | 注册安全工程师数量 |
|
||||
| `economyIndustryCode` | string | 否 | 国民经济行业分类编码 |
|
||||
| `economyIndustryName` | string | 否 | 国民经济行业分类名称 |
|
||||
| `authStatusCode` | integer | 否 | 认证状态:`1` 填写信息,`2` 审核中,`3` 通过 |
|
||||
| `authStatusName` | string | 否 | 认证状态名称 |
|
||||
| `enterpriseStatusCode` | integer | 否 | 企业状态:`1` 正常,`2` 停业,`3` 注销 |
|
||||
| `enterpriseStatusName` | string | 否 | 企业状态名称 |
|
||||
| `enterpriseScaleCode` | string | 否 | 企业规模编码 |
|
||||
| `enterpriseScaleName` | string | 否 | 企业规模名称(大/中/小/微型) |
|
||||
| `filingTypeCode` | string | 否 | 备案类型:`1` 审核备案,`2` 确认备案 |
|
||||
| `filingTypeName` | string | 否 | 备案类型名称 |
|
||||
| `filingRecordStatusCode` | integer | 否 | 备案状态:`1` 已备案,`2` 未备案 |
|
||||
| `filingRecordStatusName` | string | 否 | 备案状态名称 |
|
||||
| `attachmentUrls` | string | 否 | 上传附件地址(多个逗号分隔) |
|
||||
| `registerUserId` | long | 否 | 注册用户 ID |
|
||||
|
||||
**响应**:`SingleResponse<OrgInfoCO>`
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### AccountCO
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | long | 主键 ID |
|
||||
| `userName` | string | 用户名称/姓名 |
|
||||
| `account` | string | 账号 |
|
||||
| `phone` | string | 手机号 |
|
||||
| `profileUrl` | string | 头像地址 |
|
||||
| `type` | integer | `1` 机构端,`2` 监管端 |
|
||||
| `tenantId` | long | 租户 ID |
|
||||
|
||||
### OrgInfoCO(主要字段)
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | long | 主键 ID |
|
||||
| `unitName` | string | 单位名称 |
|
||||
| `creditCode` | string | 统一社会信用代码 |
|
||||
| `authStatusCode` | integer | 认证状态编码 |
|
||||
| `enterpriseStatusCode` | integer | 企业状态编码 |
|
||||
| `filingRecordStatusCode` | integer | 备案状态编码 |
|
||||
| `state` | integer | 状态:`0` 启用,`1` 禁用 |
|
||||
| `tenantId` | long | 租户 ID |
|
||||
| `orgId` | long | 单位 ID |
|
||||
| `createTime` | datetime | 创建时间 |
|
||||
|
||||
> `OrgInfoCO` 完整字段见 `OrgInfoAddCmd` 请求体字段及代码 `OrgInfoCO.java`。
|
||||
|
||||
---
|
||||
|
||||
## 与内部接口对照
|
||||
|
||||
| 开放接口(免鉴权) | 内部接口(需登录) |
|
||||
|--------------------|--------------------|
|
||||
| `/safetyEval/images/account/save` | `/safetyEval/account/save` |
|
||||
| `/safetyEval/images/account/get` | `/safetyEval/account/get` |
|
||||
| `/safetyEval/images/account/modify` | `/safetyEval/account/modify` |
|
||||
| `/safetyEval/images/account/delete` | `/safetyEval/account/delete` |
|
||||
| `/safetyEval/images/account/page` | `/safetyEval/account/page` |
|
||||
| `/safetyEval/images/account/syncUserToGBS` | `/safetyEval/account/syncUserToGBS` |
|
||||
| `/safetyEval/images/account/verificationCode` | `/safetyEval/account/verificationCode` |
|
||||
| `/safetyEval/images/account/checkTerminalType` | `/safetyEval/account/checkTerminalType` |
|
||||
| `/safetyEval/images/account/sendMessage` | —(仅开放接口) |
|
||||
| `/safetyEval/images/org-info/save` | `/safetyEval/org-info/save` |
|
||||
|
||||
---
|
||||
|
||||
*文档来源:`ImagesOpenController.java`,生成时间:2026-07-08*
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import antfu from "@antfu/eslint-config";
|
||||
|
||||
export default antfu({
|
||||
// Remove formatter configuration that might be causing issues
|
||||
formatters: false,
|
||||
test: false,
|
||||
typescript: true,
|
||||
react: true,
|
||||
vue: false,
|
||||
markdown: false,
|
||||
stylistic: {
|
||||
semi: true,
|
||||
quotes: "double",
|
||||
},
|
||||
overrides: {
|
||||
react: {
|
||||
"react/no-comment-textnodes": "off",
|
||||
"react-hooks-extra/no-unnecessary-use-prefix": "off",
|
||||
"react-hooks-extra/prefer-use-state-lazy-initialization": "off",
|
||||
"react-hooks/exhaustive-deps": "off",
|
||||
},
|
||||
javascript: {
|
||||
"no-console": process.env.NODE_ENV === "production" ? "error" : "warn",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "warn",
|
||||
"no-alert": process.env.NODE_ENV === "production" ? "error" : "warn",
|
||||
"no-restricted-syntax": [
|
||||
"error",
|
||||
{
|
||||
selector: "VariableDeclarator[id.name='pd']",
|
||||
message: "不允许使用 pd,请改用有语义化的变量名",
|
||||
},
|
||||
{
|
||||
selector: "ObjectExpression > Property[key.name='pd']",
|
||||
message: "不允许使用 pd,请改用有语义化的变量名",
|
||||
},
|
||||
],
|
||||
"no-unused-vars": ["error", { varsIgnorePattern: "^React$" }],
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
"antfu/top-level-function": "off",
|
||||
"node/prefer-global/process": "off",
|
||||
"dot-notation": "off",
|
||||
"linebreak-style": ["off", "windows"],
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// 开发服务器会注入 react-refresh/babel,该插件要求 Babel 环境为 development。
|
||||
// serve:production 需保持 NODE_ENV=production 以加载 jjb.config 生产配置,此处仅修正 Babel 编译环境。
|
||||
const lifecycle = process.env.npm_lifecycle_event || "";
|
||||
if ((lifecycle === "serve" || lifecycle.startsWith("serve:")) && process.env.NODE_ENV === "production") {
|
||||
process.env.BABEL_ENV = "development";
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
compact: false,
|
||||
// 插件
|
||||
plugins: [
|
||||
[
|
||||
"@babel/plugin-proposal-decorators",
|
||||
{
|
||||
legacy: true,
|
||||
},
|
||||
],
|
||||
],
|
||||
// 预设
|
||||
presets: [
|
||||
["@babel/preset-env", {
|
||||
targets: {
|
||||
browsers: ["ie >= 10"],
|
||||
},
|
||||
}],
|
||||
["@babel/preset-react", {
|
||||
runtime: "automatic",
|
||||
}],
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
module.exports = {
|
||||
// 应用后端git地址,部署上线需要
|
||||
javaGit: "<git-url>",
|
||||
// 应用后端仓库名称,部署上线需要
|
||||
javaGitName: "<git-name>",
|
||||
// 环境配置
|
||||
environment: {
|
||||
development: {
|
||||
// 应用后端分支名称,部署上线需要
|
||||
javaGitBranch: "<branch-name>",
|
||||
// 接口服务地址(注册/填报开放接口需对接网关,本地后端可通过 sessionStorage.API_HOST 覆盖)
|
||||
API_HOST: "https://gbs-gateway.qhdsafety.com",
|
||||
// API_HOST: "http://127.0.0.1",
|
||||
},
|
||||
production: {
|
||||
// 应用后端分支名称,部署上线需要
|
||||
javaGitBranch: "<branch-name>",
|
||||
// 接口服务地址
|
||||
// API_HOST: "",
|
||||
API_HOST: "https://gbs-gateway.qhdsafety.com",
|
||||
},
|
||||
},
|
||||
// 应用唯一标识符
|
||||
appIdentifier: "safetyEval-h5",
|
||||
// 应用上下文注入全局变量
|
||||
contextInject: {
|
||||
// 应用Key
|
||||
appKey: "",
|
||||
fileUrl: "https://jpfz.qhdsafety.com/gbsFileTest/",
|
||||
// fileUrl: "http://192.168.20.240:9787/mnt/",
|
||||
},
|
||||
// public/index.html注入全局变量
|
||||
windowInject: {
|
||||
// 应用标题
|
||||
title: "微应用模板",
|
||||
// 注入css链接集合
|
||||
links: [],
|
||||
element: {
|
||||
root: {
|
||||
// 挂载DOM元素ID
|
||||
id: "root",
|
||||
},
|
||||
},
|
||||
// 注入js链接集合
|
||||
scripts: [],
|
||||
},
|
||||
// 开发服务
|
||||
server: {
|
||||
// 监听端口号
|
||||
port: "8080",
|
||||
// 服务地址
|
||||
host: "127.0.0.1",
|
||||
// 是否自动打开浏览器
|
||||
open: true,
|
||||
},
|
||||
// 框架
|
||||
framework: {
|
||||
// ant-design
|
||||
antd: {
|
||||
// 全局antd-class-name前缀
|
||||
"ant-prefix": "micro-temp",
|
||||
// 全局字体
|
||||
"fontFamily": "PingFangSC-Regular",
|
||||
// 全局主题色
|
||||
"colorPrimary": "#1677ff",
|
||||
// 全局圆角
|
||||
"borderRadius": 2,
|
||||
},
|
||||
},
|
||||
// webpack
|
||||
webpackConfig: {
|
||||
// 单页面插件
|
||||
htmlWebpackPluginOption: {
|
||||
// 自动注入编译后的文件到public/index.html中
|
||||
inject: true,
|
||||
},
|
||||
resolve: {
|
||||
// pnpm 依赖隔离依赖 symlink,关闭后 react-router@5 会错误解析到 path-to-regexp@8.x
|
||||
symlinks: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "src",
|
||||
"paths": {
|
||||
"~/*": ["*"]
|
||||
},
|
||||
"jsx": "react"
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"name": "micro-app",
|
||||
"version": "2.0.0",
|
||||
"description": "建教帮微应用模板",
|
||||
"author": "JJB",
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"serve": "node node_modules/@cqsjjb/scripts/rspack.dev.server.js",
|
||||
"build": "node node_modules/@cqsjjb/scripts/rspack.build.js",
|
||||
"push": "jjb-cmd push java production",
|
||||
"clean-cache": "rimraf node_modules/.cache/webpack",
|
||||
"serve:development": "cross-env NODE_ENV=development npm run serve",
|
||||
"serve:production": "cross-env NODE_ENV=production npm run serve",
|
||||
"build:development": "cross-env NODE_ENV=development npm run build",
|
||||
"build:production": "cross-env NODE_ENV=production npm run build",
|
||||
"code-optimization": "node node_modules/@cqsjjb/scripts/code-optimization.js",
|
||||
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "6.3.2",
|
||||
"@ant-design/pro-components": "^2.8.10",
|
||||
"@cqsjjb/jjb-common-decorator": "latest",
|
||||
"@cqsjjb/jjb-common-lib": "latest",
|
||||
"@cqsjjb/jjb-dva-runtime": "latest",
|
||||
"@cqsjjb/jjb-react-admin-component": "latest",
|
||||
"ahooks": "^3.9.5",
|
||||
"animate.css": "^4.1.1",
|
||||
"antd": "6.5.0",
|
||||
"autofit.js": "^3.2.8",
|
||||
"dayjs": "^1.11.7",
|
||||
"echarts": "^6.0.0",
|
||||
"immer": "^11.1.4",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mitt": "^3.0.1",
|
||||
"motion": "^12.23.26",
|
||||
"react": "^18.2.0",
|
||||
"react-countup": "^6.5.3",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-transition-group": "^4.4.5",
|
||||
"sass": "^1.97.0",
|
||||
"sass-loader": "^16.0.6",
|
||||
"zy-react-library": "^2.0.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^5.4.1",
|
||||
"@babel/plugin-proposal-decorators": "^7.19.3",
|
||||
"@cqsjjb/scripts": "latest",
|
||||
"@eslint-react/eslint-plugin": "^2.2.2",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^9.37.0",
|
||||
"eslint-plugin-format": "^1.0.2",
|
||||
"eslint-plugin-react-hooks": "^7.0.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.23",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
<!--BEGIN-->
|
||||
<!--<% var { env: $env, process: $process, mode: $mode, builtInfo: $builtInfo, links: $links, redirectLogin: $redirectLogin, framework: $framework, scripts: $scripts, element: $element } = htmlWebpackPlugin.options %>-->
|
||||
<!--<% var { appKey: $appKey, antd: $antd, basename: $basename, API_HOST: $API_HOST } = $process %>-->
|
||||
<!--<% var { ['ant-prefix']: $antPrefix, fontFamily: $fontFamily, colorPrimary: $colorPrimary, borderRadius: $borderRadius } = $antd %>-->
|
||||
<!--NED-->
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head data-built-info="<%= $builtInfo %>">
|
||||
<meta charset="UTF-8"/>
|
||||
<meta name="renderer" content="webkit"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/>
|
||||
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover">
|
||||
<meta charset="UTF-8" name="referrer" content="strict-origin-when-cross-origin"/>
|
||||
<% for (const item of $links) { %>
|
||||
<link type="text/css" rel="stylesheet" href="<%= item %>"></link>
|
||||
<% } %>
|
||||
<title>大屏</title>
|
||||
<script>
|
||||
(function () {
|
||||
const APP_ENV = {
|
||||
antd: {
|
||||
'ant-prefix': '<%= $antPrefix %>',
|
||||
fontFamily: '<%= $fontFamily %>',
|
||||
colorPrimary: '<%= $colorPrimary %>',
|
||||
borderRadius: parseInt('<%= $borderRadius %>')
|
||||
},
|
||||
appKey: '<%= $appKey %>',
|
||||
basename: '<%= $basename %>',
|
||||
API_HOST: '<%= $API_HOST %>'
|
||||
};
|
||||
APP_ENV.API_HOST = '<%= $API_HOST %>';
|
||||
const injectedApiHost = APP_ENV.API_HOST;
|
||||
const isDev = '<%= $mode %>' === 'development';
|
||||
if (isDev && injectedApiHost && injectedApiHost.indexOf('http') === 0) {
|
||||
APP_ENV.API_HOST = injectedApiHost;
|
||||
} else {
|
||||
APP_ENV.API_HOST = sessionStorage.API_HOST || injectedApiHost || window.location.origin;
|
||||
}
|
||||
window.process = {
|
||||
env: { app: APP_ENV },
|
||||
NODE_ENV: '<%= $mode %>'
|
||||
};
|
||||
window.__JJB_ENVIRONMENT__ = {
|
||||
API_HOST: APP_ENV.API_HOST,
|
||||
redirect: '<%= $redirectLogin %>',
|
||||
FRAMEWORK: APP_ENV.antd
|
||||
};
|
||||
|
||||
/** 返回 GBS 基座(与 Map 页左上角返回一致) */
|
||||
window.backToBase = function () {
|
||||
window.close();
|
||||
setTimeout(function () {
|
||||
if (!window.closed && !window.opener) {
|
||||
var apiHost = (window.__JJB_ENVIRONMENT__ && window.__JJB_ENVIRONMENT__.API_HOST)
|
||||
|| (window.process && window.process.env && window.process.env.app && window.process.env.app.API_HOST)
|
||||
|| 'https://gbs-gateway.qhdsafety.com/';
|
||||
window.location.href = apiHost.slice(-1) === '/' ? apiHost : apiHost + '/';
|
||||
}
|
||||
}, 500);
|
||||
};
|
||||
|
||||
/** 全局 HTTP 拦截器 */
|
||||
window.jjbCommonGlobalConfig = {
|
||||
httpInterceptor: {
|
||||
request: function (url, method, params, headers) {
|
||||
if (sessionStorage.getItem('orgInfoId')) {
|
||||
headers.orgInfoId = sessionStorage.getItem('orgInfoId');
|
||||
}
|
||||
return Promise.resolve([url, method, params, headers]);
|
||||
},
|
||||
response: function (res) {
|
||||
var url = (res && res.config && res.config.url)
|
||||
|| (res.response && res.response.config && res.response.config.url)
|
||||
|| '';
|
||||
// 注册/填报开放接口、终端类型检测、文件上传失败时不自动返回基座
|
||||
if (
|
||||
url.indexOf('checkTerminalType') !== -1
|
||||
|| url.indexOf('/safetyEval/images/') !== -1
|
||||
|| url.indexOf('/safetyEval/file/upload') !== -1
|
||||
) {
|
||||
return Promise.resolve(res);
|
||||
}
|
||||
var data = res && (res.data || (res.response && res.response.data));
|
||||
if (data && data.success === false) {
|
||||
window.backToBase();
|
||||
}
|
||||
return Promise.resolve(res);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** Driver 鉴权参数提前解析,避免首屏请求时 sessionStorage 尚未写入 */
|
||||
(function bootstrapDriverAuthParams() {
|
||||
var AUTH_KEYS = ['token', 'accessTicket', 'clientId', 'orgId', 'code'];
|
||||
function parseQuery(search) {
|
||||
var params = {};
|
||||
if (!search) return params;
|
||||
try {
|
||||
var normalized = search.charAt(0) === '?' ? search : '?' + search;
|
||||
var urlParams = new URLSearchParams(normalized);
|
||||
urlParams.forEach(function (value, key) {
|
||||
if (value) params[key] = value;
|
||||
});
|
||||
} catch (e) { /* ignore */ }
|
||||
return params;
|
||||
}
|
||||
function parseUrl(url) {
|
||||
if (!url) return {};
|
||||
try {
|
||||
return parseQuery(new URL(url, window.location.origin).search);
|
||||
} catch (e) {
|
||||
var idx = url.indexOf('?');
|
||||
return idx === -1 ? {} : parseQuery(url.slice(idx));
|
||||
}
|
||||
}
|
||||
function parseHash() {
|
||||
var hash = window.location.hash || '';
|
||||
var idx = hash.indexOf('?');
|
||||
return idx === -1 ? {} : parseQuery(hash.slice(idx));
|
||||
}
|
||||
function mergeParams() {
|
||||
var sources = [
|
||||
parseQuery(window.location.search),
|
||||
parseHash(),
|
||||
parseUrl(window.location.href),
|
||||
parseUrl(document.referrer)
|
||||
];
|
||||
var result = {};
|
||||
sources.forEach(function (source) {
|
||||
AUTH_KEYS.forEach(function (key) {
|
||||
if (!result[key] && source[key]) result[key] = source[key];
|
||||
});
|
||||
});
|
||||
AUTH_KEYS.forEach(function (key) {
|
||||
if (!result[key]) {
|
||||
var stored = sessionStorage.getItem(key);
|
||||
if (stored) result[key] = stored;
|
||||
}
|
||||
});
|
||||
AUTH_KEYS.forEach(function (key) {
|
||||
if (result[key]) sessionStorage.setItem(key, result[key]);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
mergeParams();
|
||||
})();
|
||||
})();
|
||||
</script>
|
||||
<!-- SCRIPTS -->
|
||||
<% for (const item of $scripts) { %>
|
||||
<script src="<%= item %>" type="text/javascript"></script>
|
||||
<% } %>
|
||||
</head>
|
||||
<body>
|
||||
<!-- NOSCRIPT -->
|
||||
<noscript>此网页需要开启JavaScript功能。</noscript>
|
||||
<!-- MAIN -->
|
||||
<% const { root } = $element; %>
|
||||
<div id="<%= root.id %>" style="width: 100%; height: 100%; position: relative;overflow-y: auto;"></div>
|
||||
</body>
|
||||
<script src="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"></script>
|
||||
<link href="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
|
||||
</html>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import { declareRequest } from '@cqsjjb/jjb-dva-runtime';
|
||||
|
||||
export const getWeather = declareRequest(
|
||||
'biLoading',
|
||||
'Get > https://api.map.baidu.com/weather/v1/?district_id=130300&data_type=all&ak=dIqOi34IlTg5FkNck1vqoBpLhPAj36S1',
|
||||
);
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
|
||||
|
||||
function resolveDriverConfig(res) {
|
||||
const data = res?.data;
|
||||
const isValid = res?.success === true && (data === 1 || data === 2);
|
||||
return {
|
||||
driverConfig: isValid ? data : null,
|
||||
};
|
||||
}
|
||||
|
||||
export const queryDriverConfig = declareRequest(
|
||||
"queryDriverConfigLoading",
|
||||
"Get > /safetyEval/org-department/checkTerminalType",
|
||||
resolveDriverConfig,
|
||||
);
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
export {};
|
||||
|
||||
// export const riskList = declareRequest(
|
||||
// "loading",
|
||||
// "Post > @/xxx",
|
||||
// "dataSource: [] | res.data || [] & total: 0 | res.totalCount || 0 & pageIndex: 1 | res.pageIndex || 1 & pageSize: 10 | res.pageSize || 10",
|
||||
// );
|
||||
// export const riskDelete = declareRequest(
|
||||
// "loading",
|
||||
// "Delete > @/xxx/{id}",
|
||||
// );
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
|
||||
|
||||
// 发送短信验证码
|
||||
export const sendMessageAction = declareRequest(
|
||||
"sendMessageLoading",
|
||||
"Post > @/safetyEval/images/account/sendMessage"
|
||||
);
|
||||
|
||||
// 新增用户(注册)
|
||||
export const registerAction = declareRequest(
|
||||
"registerLoading",
|
||||
"Post > @/safetyEval/images/account/save"
|
||||
);
|
||||
|
||||
|
||||
export const orgInfoSave = declareRequest(
|
||||
"registerLoading",
|
||||
"Post > @/safetyEval/images/org-info/save"
|
||||
);
|
||||
|
||||
|
||||
export const syncUserToGBS = declareRequest(
|
||||
"syncUserToGBSLoading",
|
||||
"Get > /safetyEval/images/account/syncUserToGBS"
|
||||
);
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |