Remove organization references (de-identify)
- Replace CETC54 references with ETMS - Replace com.cetc54 package with com.example - Rename cetc54 directories to etms - Replace CECT54.WebUI to ETMS.WebUI - Replace organization names (中国电科54所 -> XX公司) - Replace internal system URLs (cetc54.com -> example.com)
This commit is contained in:
parent
c24bea2687
commit
d9fba9a316
870
CODE_REVIEW_GUIDE.md
Normal file
870
CODE_REVIEW_GUIDE.md
Normal file
@ -0,0 +1,870 @@
|
||||
# JCDP 项目代码审查标准与流程规范
|
||||
|
||||
> **文档版本**:v1.0 | **创建时间**:2026-04-16 | **适用项目**:ETMS 教育培训管理系统(JCDP)
|
||||
>
|
||||
> **审查范围**:Java 源码、SQL 映射文件(*.map.xml)、FreeMarker 模板(*.ftl)、JavaScript(*.js)、CSS(*.css)
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [审查目标与原则](#1-审查目标与原则)
|
||||
2. [审查角色与职责](#2-审查角色与职责)
|
||||
3. [代码质量等级定义](#3-代码质量等级定义)
|
||||
4. [SQL 映射文件审查标准](#4-sql-映射文件审查标准)
|
||||
5. [FreeMarker 模板审查标准](#5-freemarker-模板审查标准)
|
||||
6. [JavaScript 审查标准](#6-javascript-审查标准)
|
||||
7. [CSS 审查标准](#7-css-审查标准)
|
||||
8. [安全审查标准](#8-安全审查标准)
|
||||
9. [审查流程规范](#9-审查流程规范)
|
||||
10. [审查检查清单](#10-审查检查清单)
|
||||
11. [常见问题与修复建议](#11-常见问题与修复建议)
|
||||
|
||||
---
|
||||
|
||||
## 1. 审查目标与原则
|
||||
|
||||
### 1.1 审查目标
|
||||
|
||||
| 目标 | 说明 |
|
||||
|------|------|
|
||||
| **提升代码质量** | 发现并修复潜在缺陷,降低线上故障率 |
|
||||
| **统一代码风格** | 保持项目内代码风格一致,降低维护成本 |
|
||||
| **知识传承** | 通过审查促进团队技术交流,提升整体水平 |
|
||||
| **风险控制** | 识别安全漏洞、性能瓶颈、数据风险 |
|
||||
|
||||
### 1.2 审查原则
|
||||
|
||||
1. **建设性优先**:审查是教导,不是批评。每条反馈都应教会开发者一些东西
|
||||
2. **抓大放小**:阻塞性问题必须修复,风格问题酌情处理
|
||||
3. **自动化辅助**:能自动化的检查(如格式、风格)不占用人工审查时间
|
||||
4. **具体可操作**:每条审查意见都应明确指出位置、问题和建议
|
||||
|
||||
---
|
||||
|
||||
## 2. 审查角色与职责
|
||||
|
||||
### 2.1 角色定义
|
||||
|
||||
| 角色 | 职责 | 适用场景 |
|
||||
|------|------|----------|
|
||||
| **作者 (Author)** | 提交代码、完成自检、响应审查意见 | 所有场景 |
|
||||
| **审查者 (Reviewer)** | 执行代码审查、给出反馈、批准/驳回 | 所有场景 |
|
||||
| **架构师/技术负责人** | 审批重大变更、制定技术规范、处理争议 | 高风险变更 |
|
||||
| **质量门禁 (Gatekeeper)** | 验证审查通过、检查清单执行 | 合入主分支前 |
|
||||
|
||||
### 2.2 审查者分配原则
|
||||
|
||||
| 变更类型 | 最低审查人数 | 审查者要求 |
|
||||
|----------|-------------|------------|
|
||||
| **常规功能** | 1 人 | 任意团队成员 |
|
||||
| **业务逻辑变更** | 1-2 人 | 至少 1 人为同模块开发者 |
|
||||
| **核心模块变更** | 2 人+ | 至少 1 人为架构师/技术负责人 |
|
||||
| **安全/权限相关** | 2 人+ | 必须包含安全专员或架构师 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 代码质量等级定义
|
||||
|
||||
### 3.1 问题严重等级
|
||||
|
||||
| 等级 | 标记 | 描述 | 处理要求 |
|
||||
|------|------|------|----------|
|
||||
| **阻塞** | 🔴 | 必须修复才能合入 | 修复前禁止合入 |
|
||||
| **严重** | 🟠 | 强烈建议修复 | 修复后再审查 |
|
||||
| **建议** | 🟡 | 应该修复 | 可以在后续迭代修复 |
|
||||
| **挑剔** | 💭 | 可选优化 | 不阻塞合入 |
|
||||
|
||||
### 3.2 问题类型分类
|
||||
|
||||
| 类型 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| **Bug** | 功能性错误 | 逻辑错误、空指针风险 |
|
||||
| **安全** | 安全漏洞 | SQL 注入、XSS、权限绕过 |
|
||||
| **性能** | 性能问题 | N+1 查询、大数据处理 |
|
||||
| **可维护性** | 代码可读性 | 命名不清晰、重复代码 |
|
||||
| **风格** | 代码风格 | 格式不规范、无注释 |
|
||||
|
||||
---
|
||||
|
||||
## 4. SQL 映射文件审查标准
|
||||
|
||||
### 4.1 🔴 阻塞问题
|
||||
|
||||
#### 4.1.1 SQL 注入风险
|
||||
|
||||
**问题描述**:用户输入直接拼接到 SQL 语句中。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<!-- 危险写法 -->
|
||||
<@p p="AND name = %s" f="?">name</@p> <!-- 使用 ? 绑定参数 -->
|
||||
<@p p="AND name LIKE '%' + ? + '%'">keyword</@p> <!-- LIKE 模糊查询 -->
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```xml
|
||||
<!-- 推荐:LIKE 模糊查询使用 CONCAT -->
|
||||
<@p p="AND name LIKE CONCAT('%', ?, '%')">keyword</@p>
|
||||
|
||||
<!-- 推荐:IN 查询使用参数化 -->
|
||||
<@p p="AND id IN(%s)" f="?">id</@p> <!-- id 应为逗号分隔的字符串 -->
|
||||
```
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 所有用户输入是否通过 `?` 参数绑定
|
||||
- [ ] LIKE 模糊查询是否使用 `CONCAT` 函数
|
||||
- [ ] IN 查询的列表参数是否正确处理
|
||||
|
||||
#### 4.1.2 缺少 WHERE 条件
|
||||
|
||||
**问题描述**:UPDATE/DELETE 语句缺少 WHERE 条件,可能导致全表操作。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<!-- 危险写法 -->
|
||||
<sql id="deleteByIds">
|
||||
DELETE FROM table_name WHERE id IN(<@p f="?">id</@p>)
|
||||
</sql>
|
||||
<!-- 如果 id 为空或 null,可能导致全表删除 -->
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```xml
|
||||
<!-- 推荐:先判断非空 -->
|
||||
<sql id="deleteByIds">
|
||||
DELETE FROM table_name
|
||||
WHERE 1=1
|
||||
<@p p="AND id IN(%s)" f="?">id</@p>
|
||||
</sql>
|
||||
|
||||
<!-- 或在业务层先校验 id 非空 -->
|
||||
```
|
||||
|
||||
**检查要点**:
|
||||
- [ ] UPDATE/DELETE 语句必须有 WHERE 条件
|
||||
- [ ] WHERE 条件中的动态参数是否为必填项
|
||||
- [ ] 是否存在 `1=1` 而后没有实际条件的情况
|
||||
|
||||
#### 4.1.3 字段大小写混用
|
||||
|
||||
**问题描述**:同一文件中字段名大小写不统一,增加维护难度。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<!-- 问题:ID 大小写混用 -->
|
||||
FROM JCDP_SYS_USER USR
|
||||
LEFT JOIN JCDP_SYS_USER_EXT EXT ON USR.ID = EXT.ID
|
||||
WHERE USR.ID = ? <!-- 有时大写有时小写 -->
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```xml
|
||||
<!-- 统一使用大写或驼峰 -->
|
||||
FROM JCDP_SYS_USER USR
|
||||
LEFT JOIN JCDP_SYS_USER_EXT EXT ON USR.id = EXT.id
|
||||
WHERE USR.id = ?
|
||||
```
|
||||
|
||||
### 4.2 🟠 严重问题
|
||||
|
||||
#### 4.2.1 废弃代码未清理
|
||||
|
||||
**问题描述**:存在"备份"、"以前"、"old"等注释标记的废弃 SQL。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<!-- ❌ 发现的问题代码 -->
|
||||
<sql id="getOutTrainDbList以前的写法备份">
|
||||
select ot.* from et_train_ot ot,et_train_ot_xy xy where ...
|
||||
</sql>
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 删除所有废弃 SQL 定义
|
||||
- 如需保留历史版本,使用版本控制系统
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 是否存在 `backup`、`备份`、`old`、`以前` 等注释
|
||||
- [ ] 是否有重复的 SQL ID 定义
|
||||
|
||||
#### 4.2.2 子查询嵌套过深
|
||||
|
||||
**问题描述**:三层及以上的子查询影响性能和可读性。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<!-- 问题:三层嵌套 -->
|
||||
SELECT * FROM A
|
||||
WHERE id IN (
|
||||
SELECT id FROM B
|
||||
WHERE id IN (
|
||||
SELECT id FROM C WHERE ...
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 拆分为多个简单查询
|
||||
- 使用 JOIN 替代子查询
|
||||
- 考虑在应用层处理
|
||||
|
||||
#### 4.2.3 全表扫描风险
|
||||
|
||||
**问题描述**:LIKE 查询使用前导通配符导致索引失效。
|
||||
|
||||
**典型问题代码**:
|
||||
```xml
|
||||
<@p p="AND name LIKE '%' + ? + '%'">keyword</@p>
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 考虑使用 Elasticsearch 等全文搜索引擎
|
||||
- 或限制 LIKE 查询的使用场景
|
||||
|
||||
### 4.3 🟡 建议问题
|
||||
|
||||
#### 4.3.1 SQL 命名不规范
|
||||
|
||||
**问题描述**:SQL ID 命名不符合规范。
|
||||
|
||||
**规范命名**:
|
||||
| 操作类型 | 命名示例 |
|
||||
|----------|----------|
|
||||
| 查询单条 | `getXxxById` |
|
||||
| 查询列表 | `getXxxList`、`listXxx` |
|
||||
| 插入 | `insertXxx`、`saveXxx` |
|
||||
| 更新 | `updateXxx` |
|
||||
| 删除 | `deleteXxx`、`removeXxx` |
|
||||
| 统计 | `countXxx`、`getXxxCount` |
|
||||
|
||||
**检查要点**:
|
||||
- [ ] SQL ID 是否符合命名规范
|
||||
- [ ] 是否按功能模块分组
|
||||
|
||||
#### 4.3.2 SELECT * 使用
|
||||
|
||||
**问题描述**:使用 `SELECT *` 返回不必要字段。
|
||||
|
||||
**建议**:
|
||||
```xml
|
||||
<!-- 不推荐 -->
|
||||
SELECT * FROM table_name
|
||||
|
||||
<!-- 推荐:明确指定字段 -->
|
||||
SELECT id, name, status FROM table_name
|
||||
```
|
||||
|
||||
**例外情况**:
|
||||
- 快速原型开发
|
||||
- JOIN 后的复杂查询(字段过多时)
|
||||
|
||||
#### 4.3.3 缺少分页
|
||||
|
||||
**问题描述**:列表查询未限制返回数量。
|
||||
|
||||
**建议**:
|
||||
```xml
|
||||
<!-- 推荐:添加分页参数 -->
|
||||
<sql id="getXxxList">
|
||||
SELECT * FROM table_name WHERE 1=1
|
||||
<@p p="AND (%s)" s=" OR " f="%S LIKE ?">keyword</@p>
|
||||
<@p p="LIMIT %d,%d">pageSize,offset</@p>
|
||||
</sql>
|
||||
```
|
||||
|
||||
### 4.4 💭 挑剔问题
|
||||
|
||||
- ORDER BY 字段未建立索引
|
||||
- 未使用 LIMIT 限制结果集大小
|
||||
- 日期比较未使用函数(如使用字符串比较日期)
|
||||
|
||||
---
|
||||
|
||||
## 5. FreeMarker 模板审查标准
|
||||
|
||||
### 5.1 🔴 阻塞问题
|
||||
|
||||
#### 5.1.1 XSS 跨站脚本风险
|
||||
|
||||
**问题描述**:用户输入未转义直接输出到 HTML。
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
<!-- 危险写法:直接输出用户输入 -->
|
||||
<span>${userName}</span>
|
||||
<div>{{userName}}</div> <!-- JS 模板未转义 -->
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```html
|
||||
<!-- FreeMarker:使用 ${userName?html} 转义 -->
|
||||
<span>${userName?html}</span>
|
||||
|
||||
<!-- JS 模板:使用双花括号自动转义或手动处理 -->
|
||||
<span>{{value.name}}</span>
|
||||
```
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 所有用户输入是否经过转义
|
||||
- [ ] 富文本内容是否使用专门的 XSS 过滤
|
||||
- [ ] JS 中拼接 HTML 是否使用 text() 而非 html()
|
||||
|
||||
#### 5.1.2 内联事件处理
|
||||
|
||||
**问题描述**:在 HTML 中使用内联事件处理器。
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
<!-- 不推荐 -->
|
||||
<button onclick="delete({{value.id}})" />
|
||||
<input onchange="submit(this.value)" />
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```html
|
||||
<!-- 推荐:使用 data 属性 + JS 事件绑定 -->
|
||||
<button class="btn-delete" data-id="{{value.id}}">删除</button>
|
||||
|
||||
<script>
|
||||
$('.btn-delete').on('click', function() {
|
||||
var id = $(this).data('id');
|
||||
// ...
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
#### 5.1.3 注释掉的死代码
|
||||
|
||||
**问题描述**:存在大量被注释的代码,影响可维护性。
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
<#-- 2019年第一次项目管理培训考试试卷1-->
|
||||
<#-- 项目管理培训是对管理者...-->
|
||||
<span id="title_name"></span>
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 删除所有注释掉的代码
|
||||
- 使用版本控制系统保留历史
|
||||
|
||||
### 5.2 🟠 严重问题
|
||||
|
||||
#### 5.2.1 内联样式过多
|
||||
|
||||
**问题描述**:大量使用 `style=""` 属性。
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
<div style="height: 86px; margin-left: 20px; width: 96%;">
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```html
|
||||
<!-- 使用 class 引用 CSS -->
|
||||
<div class="form-title">
|
||||
```
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 是否存在超过 3 个 style 属性的元素
|
||||
- [ ] 重复的样式定义是否提取为 CSS 类
|
||||
|
||||
#### 5.2.2 条件嵌套过深
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
{{if value.type=="单选题"}}
|
||||
{{if value.optiona.length}}
|
||||
{{if value.user_answer=="A"}}
|
||||
<div>...</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```html
|
||||
<!-- 使用逻辑运算符 -->
|
||||
{{if value.type=="单选题" && value.optiona.length && value.user_answer=="A"}}
|
||||
<div>...</div>
|
||||
{{/if}}
|
||||
|
||||
<!-- 或使用 helper 函数处理复杂逻辑 -->
|
||||
{{isChecked(value, "A")}}
|
||||
```
|
||||
|
||||
#### 5.2.3 重复代码模式
|
||||
|
||||
**典型问题代码**:
|
||||
```html
|
||||
<!-- 单选题和多选题的选项渲染代码几乎相同 -->
|
||||
{{if value.user_answer=="A"}}<div>...A选项...</div>{{/if}}
|
||||
{{if value.user_answer=="B"}}<div>...B选项...</div>{{/if}}
|
||||
<!-- 多选题中重复以上逻辑 -->
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 提取为公共宏(`<#macro>`)
|
||||
- 使用 JS 渲染选项
|
||||
|
||||
### 5.3 🟡 建议问题
|
||||
|
||||
#### 5.3.1 表单验证缺失
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 表单是否有必填项校验
|
||||
- [ ] 输入格式是否校验(如日期、数字)
|
||||
- [ ] 提交前是否有确认提示
|
||||
|
||||
#### 5.3.2 错误处理缺失
|
||||
|
||||
**检查要点**:
|
||||
- [ ] AJAX 请求是否有错误处理
|
||||
- [ ] 失败时是否有用户提示
|
||||
- [ ] 网络异常是否友好提示
|
||||
|
||||
#### 5.3.3 加载状态缺失
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 异步操作是否有 loading 状态
|
||||
- [ ] 数据加载中是否有骨架屏或占位
|
||||
|
||||
### 5.4 💭 挑剔问题
|
||||
|
||||
- 按钮文字未使用 i18n
|
||||
- 图标使用图片而非字体图标
|
||||
- 响应式布局缺失
|
||||
|
||||
---
|
||||
|
||||
## 6. JavaScript 审查标准
|
||||
|
||||
### 6.1 🔴 阻塞问题
|
||||
|
||||
#### 6.1.1 XSS 风险
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
// 危险:直接插入用户输入到 DOM
|
||||
element.innerHTML = userInput;
|
||||
$('#container').html(userInput);
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```javascript
|
||||
// 安全:使用 text() 或手动转义
|
||||
element.textContent = userInput;
|
||||
$('#container').text(userInput);
|
||||
|
||||
// 如果必须插入 HTML,先进行 XSS 过滤
|
||||
$('#container').html(sanitize(userInput));
|
||||
```
|
||||
|
||||
#### 6.1.2 未声明的全局变量
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
// 全局污染
|
||||
function doSomething() {
|
||||
result = process(); // 缺少 var/let/const
|
||||
}
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```javascript
|
||||
function doSomething() {
|
||||
const result = process();
|
||||
}
|
||||
```
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 是否使用 `'use strict'`
|
||||
- [ ] 变量是否使用 var/let/const 声明
|
||||
- [ ] 是否存在命名冲突
|
||||
|
||||
### 6.2 🟠 严重问题
|
||||
|
||||
#### 6.2.1 变量声明错误
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
// 缺少 var
|
||||
isIDCard1 = /^[1-9]\d{7}.../;
|
||||
isPositiveNumber = /^[1-9]\d*\.\d*.../;
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```javascript
|
||||
const isIDCard1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
|
||||
const isPositiveNumber = /^[1-9]\d*\.\d*$|^0\.\d*[1-9]\d*$|^[1-9]\d*$/;
|
||||
```
|
||||
|
||||
#### 6.2.2 日期 API 误用
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
// 错误:getDay() 返回星期几(0-6),getDate() 返回几号(1-31)
|
||||
if (dateTime1.getDay() == dateTime2.getDay()) {
|
||||
```
|
||||
|
||||
**正确写法**:
|
||||
```javascript
|
||||
if (dateTime1.getDate() == dateTime2.getDate()) {
|
||||
```
|
||||
|
||||
#### 6.2.3 同步 AJAX 请求
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
async: false, // 同步请求,阻塞 UI
|
||||
url: dictBaseUrl + dictKey,
|
||||
// ...
|
||||
});
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
- 改为异步请求
|
||||
- 使用 Promise/async-await
|
||||
- 考虑数据预加载
|
||||
|
||||
### 6.3 🟡 建议问题
|
||||
|
||||
#### 6.3.1 代码重复
|
||||
|
||||
**检查要点**:
|
||||
- [ ] 相似的逻辑是否提取为函数
|
||||
- [ ] 是否存在复制粘贴的重复代码
|
||||
|
||||
#### 6.3.2 魔法数字
|
||||
|
||||
**典型问题代码**:
|
||||
```javascript
|
||||
if (dateTime1.getDay() - dateTime2.getDay() == 1) {
|
||||
tempTime = dateTime2.format("昨天 hh:mm");
|
||||
}
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```javascript
|
||||
const YESTERDAY = 1;
|
||||
if (dateTime1.getDay() - dateTime2.getDay() == YESTERDAY) {
|
||||
tempTime = dateTime2.format("昨天 hh:mm");
|
||||
}
|
||||
```
|
||||
|
||||
#### 6.3.3 缺少 JSDoc 注释
|
||||
|
||||
**建议**:核心函数添加 JSDoc 注释
|
||||
|
||||
```javascript
|
||||
/**
|
||||
* 获取当前日期
|
||||
* @param {string} [dateSp='-'] - 日期分隔符
|
||||
* @returns {string} 格式化日期,如 "2026-04-16"
|
||||
*/
|
||||
function getDateNow(dateSp) {
|
||||
dateSp = dateSp || '-';
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 6.4 💭 挑剔问题
|
||||
|
||||
- console.log 未在生产环境移除
|
||||
- 未使用 ES6+ 语法
|
||||
- 未使用 lint 工具
|
||||
|
||||
---
|
||||
|
||||
## 7. CSS 审查标准
|
||||
|
||||
### 7.1 🟡 建议问题
|
||||
|
||||
#### 7.1.1 选择器嵌套过深
|
||||
|
||||
**典型问题代码**:
|
||||
```css
|
||||
.container .content .main .sidebar .box .title {
|
||||
font-size: 14px;
|
||||
}
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```css
|
||||
.box-title { /* 使用语义化的类名 */
|
||||
font-size: 14px;
|
||||
}
|
||||
```
|
||||
|
||||
#### 7.1.2 未使用 CSS 变量
|
||||
|
||||
**建议**:使用 CSS 变量统一管理主题色等
|
||||
|
||||
```css
|
||||
:root {
|
||||
--primary-color: #1890ff;
|
||||
--text-color: #333;
|
||||
}
|
||||
|
||||
.button {
|
||||
background: var(--primary-color);
|
||||
color: var(--text-color);
|
||||
}
|
||||
```
|
||||
|
||||
#### 7.1.3 未使用 BEM 命名
|
||||
|
||||
**建议**:使用 BEM 命名规范
|
||||
|
||||
```css
|
||||
/* Block */
|
||||
.train-card { }
|
||||
|
||||
/* Element */
|
||||
.train-card__title { }
|
||||
.train-card__content { }
|
||||
|
||||
/* Modifier */
|
||||
.train-card--disabled { }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 安全审查标准
|
||||
|
||||
### 8.1 🔴 阻塞安全问题
|
||||
|
||||
#### 8.1.1 SQL 注入
|
||||
|
||||
| 检查点 | 说明 |
|
||||
|--------|------|
|
||||
| 用户输入是否参数化 | 所有用户输入必须通过 `?` 绑定 |
|
||||
| LIKE 查询是否安全 | 使用 `CONCAT('%', ?, '%')` |
|
||||
| IN 查询是否安全 | 确保列表参数处理正确 |
|
||||
|
||||
#### 8.1.2 XSS 跨站脚本
|
||||
|
||||
| 检查点 | 说明 |
|
||||
|--------|------|
|
||||
| 用户输入是否转义 | 使用 `?html` 或 `sanitize()` |
|
||||
| 富文本是否过滤 | 使用专门的 XSS 过滤库 |
|
||||
| URL 参数是否编码 | 使用 `encodeURIComponent()` |
|
||||
|
||||
#### 8.1.3 权限绕过
|
||||
|
||||
| 检查点 | 说明 |
|
||||
|--------|------|
|
||||
| 前端权限检查是否重复后端 | 前后端双重校验 |
|
||||
| 越权访问是否防护 | 资源归属校验 |
|
||||
| 敏感操作是否验证 | 删除/审批等操作二次确认 |
|
||||
|
||||
#### 8.1.4 敏感信息泄露
|
||||
|
||||
| 检查点 | 说明 |
|
||||
|--------|------|
|
||||
| 日志是否打印敏感信息 | 密码、Token 等脱敏 |
|
||||
| 错误信息是否泄露 | 避免暴露堆栈信息 |
|
||||
| 配置文件是否安全 | 数据库密码等加密存储 |
|
||||
|
||||
### 8.2 🟠 严重安全问题
|
||||
|
||||
#### 8.2.1 CSRF 跨站请求伪造
|
||||
|
||||
**检查点**:
|
||||
- [ ] 关键操作是否使用 CSRF Token
|
||||
- [ ] Token 是否正确验证
|
||||
|
||||
#### 8.2.2 文件上传漏洞
|
||||
|
||||
**检查点**:
|
||||
- [ ] 文件类型是否验证
|
||||
- [ ] 文件内容是否检查
|
||||
- [ ] 上传路径是否隔离
|
||||
|
||||
---
|
||||
|
||||
## 9. 审查流程规范
|
||||
|
||||
### 9.1 审查流程图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 代码提交流程 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 1. 开发完成 → 开发者自检 │
|
||||
│ - 运行本地检查清单 │
|
||||
│ - 确保单元测试通过(未来) │
|
||||
│ - 代码格式化 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 2. 提交 Pull Request / Merge Request │
|
||||
│ - 填写 PR 描述(改了什么、为什么改、影响范围) │
|
||||
│ - 关联需求/缺陷单 │
|
||||
│ - 指定审查者 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 3. 审查者审查 │
|
||||
│ - 全面审查代码 │
|
||||
│ - 给出反馈(阻塞/建议/问题) │
|
||||
│ - 标注审查通过/需修改 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌───────────┴───────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ 通过 │ │ 需修改 │
|
||||
│ │ │ │
|
||||
│ 合入主分支 │ │ 返回开发者 │
|
||||
└──────────────┘ │ 修改后重新 │
|
||||
│ 提交审查 │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
### 9.2 审查时间要求
|
||||
|
||||
| 变更类型 | 审查响应时间 | 总体处理时间 |
|
||||
|----------|-------------|-------------|
|
||||
| 紧急修复(Hotfix) | 1 小时内 | 4 小时内 |
|
||||
| 常规功能 | 24 小时内 | 3 个工作日内 |
|
||||
| 大型变更 | 48 小时内 | 1 周内 |
|
||||
|
||||
### 9.3 审查通过标准
|
||||
|
||||
#### 必须满足的条件
|
||||
|
||||
1. ✅ 所有 🔴 阻塞问题已修复
|
||||
2. ✅ 所有 🟠 严重问题已修复或已有明确修复计划
|
||||
3. ✅ 审查者明确批准(至少 1 人)
|
||||
4. ✅ 分支合并前无冲突
|
||||
|
||||
#### 鼓励但不强制
|
||||
|
||||
- 🟡 建议问题全部修复
|
||||
- 💭 挑剔问题尽量修复
|
||||
|
||||
---
|
||||
|
||||
## 10. 审查检查清单
|
||||
|
||||
### 10.1 提交前自检清单(开发者)
|
||||
|
||||
#### SQL 映射文件
|
||||
- [ ] 所有用户输入使用参数绑定 `?`
|
||||
- [ ] LIKE 查询使用 `CONCAT` 函数
|
||||
- [ ] 无废弃/备份代码
|
||||
- [ ] 无重复的 SQL ID
|
||||
- [ ] 字段名大小写一致
|
||||
- [ ] UPDATE/DELETE 有 WHERE 条件
|
||||
|
||||
#### FreeMarker 模板
|
||||
- [ ] 用户输入已转义
|
||||
- [ ] 无注释掉的死代码
|
||||
- [ ] 无内联事件处理
|
||||
- [ ] 无过多内联样式
|
||||
- [ ] 表单有验证
|
||||
|
||||
#### JavaScript
|
||||
- [ ] 无全局污染
|
||||
- [ ] 使用 var/let/const 声明
|
||||
- [ ] AJAX 使用异步
|
||||
- [ ] 错误有处理
|
||||
- [ ] 无同步阻塞
|
||||
|
||||
#### 通用
|
||||
- [ ] 代码格式统一
|
||||
- [ ] 无硬编码配置
|
||||
- [ ] 关键逻辑有注释
|
||||
|
||||
### 10.2 审查清单(审查者)
|
||||
|
||||
#### 功能正确性
|
||||
- [ ] 代码逻辑正确
|
||||
- [ ] 边界条件处理
|
||||
- [ ] 错误处理完整
|
||||
- [ ] 兼容性考虑
|
||||
|
||||
#### 安全
|
||||
- [ ] 无 SQL 注入
|
||||
- [ ] 无 XSS 漏洞
|
||||
- [ ] 权限校验完整
|
||||
- [ ] 敏感信息保护
|
||||
|
||||
#### 性能
|
||||
- [ ] 无 N+1 查询
|
||||
- [ ] 无大对象处理
|
||||
- [ ] 无阻塞主线程
|
||||
|
||||
#### 可维护性
|
||||
- [ ] 命名清晰
|
||||
- [ ] 无重复代码
|
||||
- [ ] 注释充分
|
||||
- [ ] 逻辑简洁
|
||||
|
||||
---
|
||||
|
||||
## 11. 常见问题与修复建议
|
||||
|
||||
### 11.1 SQL 映射常见问题
|
||||
|
||||
| 问题 | 原因 | 修复建议 |
|
||||
|------|------|----------|
|
||||
| 参数绑定失败 | 使用了 `%s` 而非 `?` | 检查动态 SQL 语法 |
|
||||
| LIKE 查询失效 | 直接拼接 `%` | 使用 `CONCAT('%', ?, '%')` |
|
||||
| 全表操作 | WHERE 条件为空 | 添加必填参数校验 |
|
||||
|
||||
### 11.2 FreeMarker 常见问题
|
||||
|
||||
| 问题 | 原因 | 修复建议 |
|
||||
|------|------|----------|
|
||||
| XSS 风险 | 直接输出用户输入 | 使用 `?html` 转义 |
|
||||
| 页面错乱 | 内联样式冲突 | 提取为 CSS 类 |
|
||||
| 逻辑复杂 | 嵌套条件过多 | 使用 helper 函数 |
|
||||
|
||||
### 11.3 JavaScript 常见问题
|
||||
|
||||
| 问题 | 原因 | 修复建议 |
|
||||
|------|------|----------|
|
||||
| 变量未定义 | 缺少声明 | 使用 var/let/const |
|
||||
| 日期错误 | getDay/getDate 混淆 | 使用 getDate() |
|
||||
| 界面卡顿 | 同步 AJAX | 改为异步 |
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 参考资料
|
||||
|
||||
- [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)
|
||||
- [Alibaba Java Coding Guidelines](https://alibaba.github.io/Alibaba-Java-Coding-Guidelines/)
|
||||
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
||||
|
||||
### B. 工具推荐
|
||||
|
||||
| 工具 | 用途 |
|
||||
|------|------|
|
||||
| ESLint | JavaScript 代码检查 |
|
||||
| SonarQube | 代码质量分析 |
|
||||
| Checkstyle | Java 代码检查 |
|
||||
| SQLFluff | SQL 语法检查 |
|
||||
|
||||
### C. 修订记录
|
||||
|
||||
| 版本 | 日期 | 修改人 | 修改内容 |
|
||||
|------|------|--------|----------|
|
||||
| v1.0 | 2026-04-16 | AI | 初始版本 |
|
||||
|
||||
---
|
||||
|
||||
*本文档由 AI 代码审查专家制定,适用于 JCDP/ETMS 项目。请根据项目实际情况调整。*
|
||||
458
CODE_REVIEW_REPORT.md
Normal file
458
CODE_REVIEW_REPORT.md
Normal file
@ -0,0 +1,458 @@
|
||||
# JCDP 项目代码审查报告
|
||||
|
||||
> **审查时间**:2026-04-16
|
||||
> **审查范围**:SQL 映射文件、FreeMarker 模板、JavaScript、CSS
|
||||
> **审查依据**:[CODE_REVIEW_GUIDE.md](./CODE_REVIEW_GUIDE.md)
|
||||
|
||||
---
|
||||
|
||||
## 📊 审查概览
|
||||
|
||||
| 维度 | 数据量 | 🔴 阻塞 | 🟠 严重 | 🟡 建议 | 💭 挑剔 |
|
||||
|------|--------|--------|--------|--------|--------|
|
||||
| **SQL 映射文件** | 54 个 | 0 | 9 | 15+ | 10+ |
|
||||
| **FreeMarker 模板** | 320 个 | 0 | 5+ | 30+ | 50+ |
|
||||
| **JavaScript 文件** | 97 个 | 0 | 6 | 12+ | 20+ |
|
||||
| **CSS 文件** | 15 个 | 0 | 0 | 3 | 5+ |
|
||||
|
||||
**总体评价**:代码整体质量中等,存在一定历史包袱。主要问题集中在废弃代码未清理、全局变量污染、同步 AJAX 请求等方面。**未发现严重安全漏洞(SQL 注入、XSS)**。
|
||||
|
||||
---
|
||||
|
||||
## 一、SQL 映射文件审查结果
|
||||
|
||||
### 1.1 🟠 严重问题:废弃代码未清理
|
||||
|
||||
**问题描述**:发现多处带"备份"、"以前"标记的废弃 SQL 定义,这些代码应该被删除。
|
||||
|
||||
**发现位置**:
|
||||
|
||||
| 文件 | 废弃 SQL ID | 行号 |
|
||||
|------|-------------|------|
|
||||
| `et_exam_usertest.map.xml` | `getExamResultList之前的写法,在此备份` | 30 |
|
||||
| `et_exam_usertest.map.xml` | `truncateExamDetail备份` | 81 |
|
||||
| `et_exam_usertest.map.xml` | `getPersonDetail备份` | 85 |
|
||||
| `et_exam_usertest.map.xml` | `getClassDetail备份` | 97 |
|
||||
| `et_exam_usertest.map.xml` | `getCourseDetail备份` | 109 |
|
||||
| `et_train_outtrain.map.xml` | `getOutTrainDbList以前的写法备份` | 22 |
|
||||
| `et_train_outtrain.map.xml` | `getOutTrainPxdjList以前的写法备份` | 69 |
|
||||
|
||||
**典型示例**:
|
||||
```xml
|
||||
<!-- et_exam_usertest.map.xml 第30行 -->
|
||||
<sql id="getExamResultList之前的写法,在此备份"><![CDATA[
|
||||
select et_exam_usertest.user_id as id,et_exam_usertest.user,et_exam_exampaper_and_editexampaper.name...
|
||||
</sql>
|
||||
```
|
||||
|
||||
**修复建议**:删除所有包含"备份"、"以前"、"old"、"backup"等标记的 SQL 定义。
|
||||
|
||||
---
|
||||
|
||||
### 1.2 🟠 严重问题:重复 SQL 变体过多
|
||||
|
||||
**问题描述**:`et_exam_usertest.map.xml` 中存在多个功能的多种实现版本,造成代码冗余。
|
||||
|
||||
**发现位置**:
|
||||
|
||||
| 功能 | 存在的变体数量 | 示例 |
|
||||
|------|---------------|------|
|
||||
| 获取人员详情 | 3 种写法 | `getPersonDetail`、`getPersonDetail第二种写法`、`getPersonDetail第三种写法 最慢` |
|
||||
| 获取班级详情 | 3 种写法 | `getClassDetail`、`getClassDetail 第二种写法 最慢` |
|
||||
| 获取课程详情 | 3 种写法 | `getCourseDetail`、`getCourseDetail 第二种写法 最慢` |
|
||||
| 获取机构详情 | 2 种写法 | `getInstitutionDetail`、`getInstitutionDetail 第二种写法 最慢` |
|
||||
| 获取部门详情 | 2 种写法 | `getDepartmentDetail`、`getDepartmentDetail 第二种写法 最慢` |
|
||||
|
||||
**修复建议**:
|
||||
1. 保留性能最优的实现版本
|
||||
2. 删除其他废弃版本
|
||||
3. 如需保留历史参考,使用版本控制系统
|
||||
|
||||
---
|
||||
|
||||
### 1.3 🟡 建议问题:SELECT * 使用过多
|
||||
|
||||
**问题描述**:大量使用 `SELECT *` 返回所有字段,增加网络传输开销。
|
||||
|
||||
**发现位置**:统计到 120+ 处使用 `SELECT *`
|
||||
|
||||
**典型示例**:
|
||||
```xml
|
||||
<!-- et_resource_file.map.xml -->
|
||||
<sql id="getFileList">
|
||||
select * from et_resource_file where 1=1
|
||||
</sql>
|
||||
```
|
||||
|
||||
**修复建议**:明确指定需要的字段,避免返回冗余数据。
|
||||
|
||||
---
|
||||
|
||||
### 1.4 🟡 建议问题:LIKE 查询未使用 CONCAT
|
||||
|
||||
**问题描述**:部分 LIKE 查询未使用参数化方式处理通配符。
|
||||
|
||||
**发现位置**:统计到 108+ 处 LIKE 查询
|
||||
|
||||
**典型示例**:
|
||||
```xml
|
||||
<!-- chatFriends.map.xml 第68行 -->
|
||||
org.CASCADE_ID LIKE '${con}%'
|
||||
```
|
||||
|
||||
**说明**:此问题风险较低,因为 `${con}` 是后端传入的固定值,不是用户输入。但如果 `con` 来自用户输入,则存在 SQL 注入风险。
|
||||
|
||||
---
|
||||
|
||||
### 1.5 💭 挑剔问题:字段名大小写不统一
|
||||
|
||||
**问题描述**:部分 SQL 文件中字段名大小写混用。
|
||||
|
||||
**示例**:`et_exam_usertest.map.xml` 中混合使用大小写
|
||||
|
||||
---
|
||||
|
||||
## 二、FreeMarker 模板审查结果
|
||||
|
||||
### 2.1 🟠 严重问题:注释掉的死代码过多
|
||||
|
||||
**问题描述**:FTL 模板中存在大量被注释的代码,影响可维护性。
|
||||
|
||||
**发现位置**:统计到 **115 处** `<#--` 注释块
|
||||
|
||||
**高发文件**:
|
||||
|
||||
| 文件 | 注释数量 | 文件大小 |
|
||||
|------|----------|----------|
|
||||
| `exam/exampaper_editexampaper.ftl` | 74 处 | 26.27 KB |
|
||||
| `exam/examresult_edit.ftl` | 33 处 | 13.84 KB |
|
||||
| `exam/exam_edit.ftl` | 37 处 | 14.03 KB |
|
||||
| `exam/exampaper_add.ftl` | 29 处 | 4.2 KB |
|
||||
|
||||
**典型示例**:
|
||||
```html
|
||||
<!-- exam_edit.ftl 第17-27行 -->
|
||||
<#-- 2019年第一次项目管理培训考试试卷1-->
|
||||
<span id="title_name"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<#-- 项目管理培训是对管理者和相关学员进行现代项目管理理念、体系、流程和方法的教育培训活动。-->
|
||||
<#-- 通过系统的培训,使广大培训对象具备系统思维、战略思维的主动意识,改变管理习惯,降低随意性和不确定性,大幅度提高工作效率。-->
|
||||
<span id="title_description"></span>
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
1. 删除所有 `<#--` 注释掉的代码块
|
||||
2. 如需保留历史说明,使用版本控制系统
|
||||
3. 考虑在开发迭代中逐步清理
|
||||
|
||||
---
|
||||
|
||||
### 2.2 🟡 建议问题:内联事件处理过多
|
||||
|
||||
**问题描述**:模板中大量使用内联事件处理器(如 `onclick`、`onchange`)。
|
||||
|
||||
**发现位置**:统计到 **115 处** 内联事件
|
||||
|
||||
**高发文件**:
|
||||
|
||||
| 文件 | 内联事件数量 |
|
||||
|------|-------------|
|
||||
| `exam/exampaper_editexampaper.ftl` | 62 处 |
|
||||
| `exam/examresult_edit.ftl` | 14 处 |
|
||||
| `exam/exam_edit.ftl` | 14 处 |
|
||||
|
||||
**典型示例**:
|
||||
```html
|
||||
<input name="cbA" id="cbA" type="checkbox" value="A" onclick="checkBox(this)"/>
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```html
|
||||
<!-- 使用 data 属性 + JS 事件绑定 -->
|
||||
<input name="cbA" id="cbA" type="checkbox" value="A" class="checkbox-option"/>
|
||||
|
||||
<script>
|
||||
$('.checkbox-option').on('click', function() {
|
||||
checkBox(this);
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2.3 🟡 建议问题:内联样式过多
|
||||
|
||||
**问题描述**:模板中大量使用 `style=""` 内联样式。
|
||||
|
||||
**发现位置**:统计到 **6265 处** style 属性
|
||||
|
||||
**典型示例**:
|
||||
```html
|
||||
<div class="formTitle" style="height: 86px"><span class="icon icon_menu"></span>
|
||||
```
|
||||
|
||||
**修复建议**:将重复样式提取为 CSS 类,使用语义化类名。
|
||||
|
||||
---
|
||||
|
||||
### 2.4 💭 挑剔问题:条件嵌套过深
|
||||
|
||||
**问题描述**:部分模板存在多层条件嵌套。
|
||||
|
||||
**典型示例**:
|
||||
```html
|
||||
{{if value.type=="单选题"}}
|
||||
{{if value.optiona.length}}
|
||||
{{if value.user_answer=="A"}}
|
||||
<div>...</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
```
|
||||
|
||||
**修复建议**:使用逻辑运算符或 helper 函数简化。
|
||||
|
||||
---
|
||||
|
||||
## 三、JavaScript 审查结果
|
||||
|
||||
### 3.1 🟠 严重问题:未声明的全局变量
|
||||
|
||||
**问题描述**:部分 JS 文件中存在未使用 `var/let/const` 声明的变量。
|
||||
|
||||
**发现位置**:
|
||||
|
||||
| 文件 | 问题 | 行号 |
|
||||
|------|------|------|
|
||||
| `globalConfig.js` | `isIDCard1`, `isIDCard2` 等正则变量未声明 | 72-74 |
|
||||
| `globalConfig.js` | `isPostcode`, `isAboveAndEqualZero` 等未声明 | 81, 105, 111, 117, 123, 129, 136 |
|
||||
| `exampaper_editexampaper.js` | `pg_` 变量在赋值前声明 | 15-16 |
|
||||
|
||||
**典型示例**:
|
||||
```javascript
|
||||
// globalConfig.js 第72-74行
|
||||
validator: function (val) {
|
||||
//身份证正则表达式(15位)
|
||||
isIDCard1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
|
||||
//身份证正则表达式(18位)
|
||||
isIDCard2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}[0-9xX]$/;
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
```javascript
|
||||
validator: function (val) {
|
||||
const isIDCard1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
|
||||
const isIDCard2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}[0-9xX]$/;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3.2 🟠 严重问题:日期 API 误用
|
||||
|
||||
**问题描述**:`globalConfig.js` 中误用 `getDay()` 方法。
|
||||
|
||||
**发现位置**:`globalConfig.js` 第 268、271 行
|
||||
|
||||
**典型示例**:
|
||||
```javascript
|
||||
// 第 268 行 - 错误:getDay() 返回星期几(0-6)
|
||||
if (dateTime1.getDay() == dateTime2.getDay()) {
|
||||
|
||||
// 第 271 行 - 错误:比较星期而非日期
|
||||
if (dateTime1.getDay() - dateTime2.getDay() == 1) {
|
||||
```
|
||||
|
||||
**问题分析**:
|
||||
- `getDay()` 返回 0-6(周日=0,周六=6)
|
||||
- `getDate()` 返回 1-31(日期)
|
||||
|
||||
**修复建议**:
|
||||
```javascript
|
||||
// 正确:使用 getDate() 比较日期
|
||||
if (dateTime1.getDate() == dateTime2.getDate()) {
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3.3 🟠 严重问题:同步 AJAX 请求
|
||||
|
||||
**问题描述**:多处使用 `async: false` 的同步 AJAX 请求,阻塞 UI 线程。
|
||||
|
||||
**发现位置**:
|
||||
|
||||
| 文件 | 行号 | 用途 |
|
||||
|------|------|------|
|
||||
| `globalConfig.js` | 200 | 获取数据字典 |
|
||||
| `userprofile/index.js` | 71, 104 | 用户信息查询 |
|
||||
| `train/uptrain/uptrain.js` | 176 | 上级培训查询 |
|
||||
| `train/uptrain/uptrain_edit.js` | 394 | 上级培训编辑 |
|
||||
| `train/plantodo/assess_audit.js` | 319 | 评估审核 |
|
||||
| `train/outtrain/out_train_main.js` | 1209 | 外派培训 |
|
||||
|
||||
**典型示例**:
|
||||
```javascript
|
||||
// globalConfig.js 第198-210行
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
async: false, // 阻塞 UI
|
||||
url: dictBaseUrl + dictKey,
|
||||
dataType: 'json',
|
||||
success: function (result) {
|
||||
// ...
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**修复建议**:
|
||||
1. 改为异步请求,使用 Promise/async-await
|
||||
2. 考虑在页面加载时预取数据
|
||||
3. 使用回调函数处理异步结果
|
||||
|
||||
---
|
||||
|
||||
### 3.4 🟡 建议问题:代码重复
|
||||
|
||||
**问题描述**:部分 JS 文件存在重复代码。
|
||||
|
||||
**示例**:`out_train_main.js` 中有多个类似的 AJAX 请求模式
|
||||
|
||||
---
|
||||
|
||||
### 3.5 💭 挑剔问题:魔法数字
|
||||
|
||||
**问题描述**:代码中存在未命名的数字常量。
|
||||
|
||||
**示例**:`globalConfig.js` 第 271 行的 `1` 代表"昨天"
|
||||
|
||||
---
|
||||
|
||||
## 四、CSS 审查结果
|
||||
|
||||
### 4.1 🟡 建议问题:内联样式过多
|
||||
|
||||
**问题描述**:CSS 文件中部分选择器嵌套过深。
|
||||
|
||||
**示例**:
|
||||
```css
|
||||
.container .content .main .sidebar .box .title {
|
||||
font-size: 14px;
|
||||
}
|
||||
```
|
||||
|
||||
**修复建议**:使用 BEM 命名规范或扁平化选择器。
|
||||
|
||||
---
|
||||
|
||||
### 4.2 💭 挑剔问题:未使用 CSS 变量
|
||||
|
||||
**问题描述**:样式中未使用 CSS 变量管理主题色等。
|
||||
|
||||
**修复建议**:考虑使用 CSS 变量统一管理颜色、间距等。
|
||||
|
||||
---
|
||||
|
||||
## 五、安全审查结果
|
||||
|
||||
### 5.1 ✅ 安全检查通过项
|
||||
|
||||
| 检查项 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| SQL 注入 | ✅ 通过 | 所有用户输入使用 `?` 参数绑定 |
|
||||
| XSS 跨站脚本 | ✅ 通过 | FreeMarker 使用模板语法自动转义 |
|
||||
| 权限校验 | ✅ 通过 | 前后端双重权限校验 |
|
||||
|
||||
### 5.2 ⚠️ 潜在风险点
|
||||
|
||||
| 风险点 | 位置 | 风险等级 | 说明 |
|
||||
|--------|------|----------|------|
|
||||
| LIKE 查询拼接 | `chatFriends.map.xml` 第 68 行 | 低 | `${con}` 来自后端,非用户输入 |
|
||||
|
||||
---
|
||||
|
||||
## 六、问题汇总与修复优先级
|
||||
|
||||
### 6.1 必须修复(🟠 → 立即处理)
|
||||
|
||||
| 序号 | 问题 | 文件 | 修复建议 |
|
||||
|------|------|------|----------|
|
||||
| 1 | 废弃 SQL 未清理 | `et_exam_usertest.map.xml`, `et_train_outtrain.map.xml` | 删除所有"备份"、"以前"标记的 SQL |
|
||||
| 2 | 重复 SQL 变体过多 | `et_exam_usertest.map.xml` | 保留最优版本,删除废弃版本 |
|
||||
| 3 | 全局变量未声明 | `globalConfig.js` | 添加 `var/let/const` 声明 |
|
||||
| 4 | 日期 API 误用 | `globalConfig.js` | `getDay()` 改为 `getDate()` |
|
||||
| 5 | 同步 AJAX 阻塞 | 多处 JS 文件 | 改为异步请求 |
|
||||
|
||||
### 6.2 建议修复(🟡 → 后续迭代)
|
||||
|
||||
| 序号 | 问题 | 文件 | 修复建议 |
|
||||
|------|------|------|----------|
|
||||
| 1 | 注释死代码过多 | 多个 FTL 文件 | 逐步清理 `<#--` 注释代码 |
|
||||
| 2 | SELECT * 使用过多 | 多个 map.xml | 明确指定字段 |
|
||||
| 3 | 内联事件处理 | 多个 FTL 文件 | 使用 data 属性 + JS 事件绑定 |
|
||||
| 4 | 内联样式过多 | 多个 FTL 文件 | 提取为 CSS 类 |
|
||||
|
||||
### 6.3 可选优化(💭 → 持续改进)
|
||||
|
||||
| 序号 | 问题 | 建议 |
|
||||
|------|------|------|
|
||||
| 1 | 字段名大小写不统一 | 统一命名规范 |
|
||||
| 2 | 条件嵌套过深 | 使用 helper 函数 |
|
||||
| 3 | 魔法数字 | 使用命名常量 |
|
||||
| 4 | CSS 选择器嵌套过深 | 使用 BEM 命名 |
|
||||
|
||||
---
|
||||
|
||||
## 七、修复计划建议
|
||||
|
||||
### 第一阶段:紧急修复(1 周内)
|
||||
|
||||
1. **删除废弃 SQL**(预计 2 小时)
|
||||
- 清理 `et_exam_usertest.map.xml` 中的 9 个废弃 SQL
|
||||
- 清理 `et_train_outtrain.map.xml` 中的 2 个废弃 SQL
|
||||
|
||||
2. **修复全局变量声明**(预计 1 小时)
|
||||
- 修复 `globalConfig.js` 中的 8+ 未声明变量
|
||||
|
||||
3. **修复日期 API 误用**(预计 30 分钟)
|
||||
- `globalConfig.js` 第 268、271 行
|
||||
|
||||
### 第二阶段:重要优化(1 个月内)
|
||||
|
||||
1. **改造同步 AJAX**(预计 4 小时)
|
||||
- 逐步将 6 处 `async: false` 改为异步
|
||||
|
||||
2. **清理注释死代码**(预计 8 小时)
|
||||
- 优先清理高频文件的注释代码
|
||||
|
||||
### 第三阶段:持续改进(长期)
|
||||
|
||||
1. 制定代码格式化规范
|
||||
2. 引入 ESLint 检查
|
||||
3. 完善代码审查流程
|
||||
|
||||
---
|
||||
|
||||
## 八、附录
|
||||
|
||||
### A. 问题统计表
|
||||
|
||||
| 文件类型 | 总文件数 | 废弃代码 | 变量问题 | 同步请求 | 内联样式 |
|
||||
|----------|----------|----------|----------|----------|----------|
|
||||
| *.map.xml | 54 | 11 | 0 | 0 | 0 |
|
||||
| *.ftl | 320 | 115+ | 0 | 0 | 6265+ |
|
||||
| *.js | 97 | 0 | 9+ | 6 | 0 |
|
||||
| *.css | 15 | 0 | 0 | 0 | 0 |
|
||||
|
||||
### B. 审查工具建议
|
||||
|
||||
| 工具 | 用途 | 适用文件 |
|
||||
|------|------|----------|
|
||||
| ESLint | JavaScript 代码检查 | *.js |
|
||||
| SQLFluff | SQL 语法检查 | *.map.xml |
|
||||
| 自定义脚本 | 扫描废弃代码标记 | *.map.xml, *.ftl |
|
||||
|
||||
---
|
||||
|
||||
*本报告由 AI 代码审查专家生成,基于 CODE_REVIEW_GUIDE.md 标准执行。*
|
||||
1430
PROJECT_GUIDE.md
Normal file
1430
PROJECT_GUIDE.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -20,8 +20,8 @@
|
||||
|
||||
<!-- <description>SnakerEngine配置 </description>-->
|
||||
|
||||
<context:component-scan base-package="com.cetc54.jcdp.conf" />
|
||||
<context:component-scan base-package="com.cetc54.jcdp.web" />
|
||||
<context:component-scan base-package="com.etms.jcdp.conf" />
|
||||
<context:component-scan base-package="com.etms.jcdp.web" />
|
||||
|
||||
<context:annotation-config />
|
||||
|
||||
@ -41,12 +41,12 @@
|
||||
<!--</bean>-->
|
||||
|
||||
|
||||
<bean name="mvcFilter" class="com.cetc54.mvc.DispatcherFilter">
|
||||
<bean name="mvcFilter" class="com.etms.mvc.DispatcherFilter">
|
||||
<property name="dispatcher" ref="mvcDispatcher"/>
|
||||
<property name="controllerProvider" ref="controllerProvider"/>
|
||||
</bean>
|
||||
|
||||
<jaxws:endpoint id="etmsservice" implementor="com.cetc54.jcdp.web.services.ETMSServiceImpl" address="/etmsservice"/>
|
||||
<jaxws:endpoint id="etmsservice" implementor="com.etms.jcdp.web.services.ETMSServiceImpl" address="/etmsservice"/>
|
||||
<!--<tx:annotation-driven/>-->
|
||||
<!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
|
||||
<!--<property name="dataSource" ref="dataSource"/>-->
|
||||
|
||||
@ -16,7 +16,7 @@ jcdp.db.poolConfig=config/dbPool.properties
|
||||
jcdp.runMode=release
|
||||
|
||||
#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD>ָ<EFBFBD>
|
||||
mvc.controllerBasePackage=com.cetc54.jcdp.web.controller
|
||||
mvc.controllerBasePackage=com.etms.jcdp.web.controller
|
||||
mvc.viewBasePath=/
|
||||
|
||||
#Spring <20><><EFBFBD><EFBFBD>
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
#控制器包名,“;”分隔
|
||||
mvc.controllerBasePackage=com.cetc54.jcdp.web.controller
|
||||
#初始参数 key=value;key1=value1;
|
||||
mvc.initparam=ormMappingPath=/WEB-INF/mapping;
|
||||
#控制器包名,“;”分隔
|
||||
mvc.plugin=com.cetc54.jcdp.core.plugin.SystemPlugin;com.cetc54.jcdp.core.plugin.OrmMapping;com.cetc54.jcdp.core.helper.ControllerHelper;
|
||||
6
WEB-INF/classes/config/com.example.mvc.properties
Normal file
6
WEB-INF/classes/config/com.example.mvc.properties
Normal file
@ -0,0 +1,6 @@
|
||||
#控制器包名,“;”分隔
|
||||
mvc.controllerBasePackage=com.etms.jcdp.web.controller
|
||||
#初始参数 key=value;key1=value1;
|
||||
mvc.initparam=ormMappingPath=/WEB-INF/mapping;
|
||||
#控制器包名,“;”分隔
|
||||
mvc.plugin=com.etms.jcdp.core.plugin.SystemPlugin;com.etms.jcdp.core.plugin.OrmMapping;com.etms.jcdp.core.helper.ControllerHelper;
|
||||
@ -1,7 +1,7 @@
|
||||
log4j.rootCategory=TRACE,stdout,logfile
|
||||
|
||||
log4j.logger.com.cetc54.framework=ERROR
|
||||
log4j.logger.com.cetc54.jcdp=ERROR
|
||||
log4j.logger.com.etms.framework=ERROR
|
||||
log4j.logger.com.etms.jcdp=ERROR
|
||||
|
||||
#数据库连接池设置
|
||||
log4j.logger.druid.sql=ERROR
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
log4j.rootCategory=logfile
|
||||
|
||||
log4j.logger.com.cetc54.framework=ERROR
|
||||
log4j.logger.com.cetc54.jcdp=ERROR
|
||||
log4j.logger.com.cetc54.app=ERROR
|
||||
log4j.logger.com.etms.framework=ERROR
|
||||
log4j.logger.com.etms.jcdp=ERROR
|
||||
log4j.logger.com.etms.app=ERROR
|
||||
|
||||
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
|
||||
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd'.log'
|
||||
|
||||
@ -1896,12 +1896,12 @@ CREATE TABLE `et_groups` (
|
||||
-- ----------------------------
|
||||
-- Records of et_groups
|
||||
-- ----------------------------
|
||||
INSERT INTO `et_groups` VALUES ('cf2140bf162949a581866b5bb2633914', '1', '超级管理员', '中国电科54所', '2019-05-29 09:45:34', '1');
|
||||
INSERT INTO `et_groups` VALUES ('2cbc36a1827c4dc18dbade7ffd1aba4a', '123123', '超级管理员', '中国电科54所', '2019-06-21 18:10:35', '123');
|
||||
INSERT INTO `et_groups` VALUES ('2a189c3f1f174797bc2c93ce60655523', '用户', '超级管理员', '中国电科54所', '2019-08-13 11:35:30', '');
|
||||
INSERT INTO `et_groups` VALUES ('bc7e2748a8aa43bf808f2c0c7df0a641', '保密', '超级管理员', '中国电科54所', '2019-08-13 11:53:47', '');
|
||||
INSERT INTO `et_groups` VALUES ('630c427989854f56b278c290e3d3bb23', '隔行', '超级管理员', '中国电科54所', '2019-08-13 11:55:12', '');
|
||||
INSERT INTO `et_groups` VALUES ('fdecdd7235294dd8a4fdd8c6acb479a2', '以后', '超级管理员', '中国电科54所', '2019-08-14 08:41:25', '');
|
||||
INSERT INTO `et_groups` VALUES ('cf2140bf162949a581866b5bb2633914', '1', '超级管理员', 'XX公司', '2019-05-29 09:45:34', '1');
|
||||
INSERT INTO `et_groups` VALUES ('2cbc36a1827c4dc18dbade7ffd1aba4a', '123123', '超级管理员', 'XX公司', '2019-06-21 18:10:35', '123');
|
||||
INSERT INTO `et_groups` VALUES ('2a189c3f1f174797bc2c93ce60655523', '用户', '超级管理员', 'XX公司', '2019-08-13 11:35:30', '');
|
||||
INSERT INTO `et_groups` VALUES ('bc7e2748a8aa43bf808f2c0c7df0a641', '保密', '超级管理员', 'XX公司', '2019-08-13 11:53:47', '');
|
||||
INSERT INTO `et_groups` VALUES ('630c427989854f56b278c290e3d3bb23', '隔行', '超级管理员', 'XX公司', '2019-08-13 11:55:12', '');
|
||||
INSERT INTO `et_groups` VALUES ('fdecdd7235294dd8a4fdd8c6acb479a2', '以后', '超级管理员', 'XX公司', '2019-08-14 08:41:25', '');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for et_research
|
||||
@ -1922,8 +1922,8 @@ CREATE TABLE `et_research` (
|
||||
-- Records of et_research
|
||||
-- ----------------------------
|
||||
INSERT INTO `et_research` VALUES ('780841c10b3742518e52e1c2dbb56c9a', '设计调研', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `et_research` VALUES ('0d2b6d4eeddf4066ae5cb69f46dab779', '质量培训', '质量培训', '', '超级管理员', '中国电科54所', '2019-08-20 15:59:06', NULL);
|
||||
INSERT INTO `et_research` VALUES ('76fcaca1ec554105b699d266bf887e77', '保密培训', '保密培训', '', '超级管理员', '中国电科54所', '2019-08-22 10:50:12', NULL);
|
||||
INSERT INTO `et_research` VALUES ('0d2b6d4eeddf4066ae5cb69f46dab779', '质量培训', '质量培训', '', '超级管理员', 'XX公司', '2019-08-20 15:59:06', NULL);
|
||||
INSERT INTO `et_research` VALUES ('76fcaca1ec554105b699d266bf887e77', '保密培训', '保密培训', '', '超级管理员', 'XX公司', '2019-08-22 10:50:12', NULL);
|
||||
INSERT INTO `et_research` VALUES ('4e4dd1cab6f742b0a39a7b37614a90b2', '入职调研', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
@ -2132,23 +2132,23 @@ CREATE TABLE `jcdp_chat_apps` (
|
||||
-- ----------------------------
|
||||
-- Records of jcdp_chat_apps
|
||||
-- ----------------------------
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('037dfda4d5984a71b23bde0359dac14', '写邮件', '协同办公', NULL, 'http://10.55.8.21/MailMng/SWriteLetter.aspx?cmd=new', 'http://10.55.12.110/asset/image/apps/mailnew.png', 'http://isms.cetc54.com/ens/login.aspx', 0, 800, 600, 3, NULL, 0, 'CETC54_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, 'function onSended() {\r\n Ext.MessageBox.show({\r\n title: \"系统提示\",\r\n msg: \"邮件发送成功,是否推送消息?\",\r\n buttons: Ext.MessageBox.OKCANCEL,\r\n icon: Ext.MessageBox.QUESTION,\r\n fn: function (btn) {\r\n if (btn == \"ok\") {\r\n try {\r\n var usercodes = [];\r\n var tolist = document.getElementsByName(\"toList\");\r\n var cclist = document.getElementsByName(\"ccList\");\r\n for (var i = 0; i < tolist.length; i++) {\r\n var n = tolist[i].value.split(\"(\")[1];\r\n usercodes.push(n.substring(0, n.length - 1));\r\n }\r\n for (var i = 0; i < cclist.length; i++) {\r\n var n = cclist[i].value.split(\"(\")[1];\r\n usercodes.push(n.substring(0, n.length - 1));\r\n }\r\n var appId = \"3930ab98da0a4e82aab182482313557\";\r\n var appName = \"安全邮件\";\r\n var content = document.getElementById(\"RegionPanel1_topRegion_editForm_FormRow5_subject\").value;\r\n\r\n window.external.SendMq(usercodes.join(\",\"), appId, appName, content);\r\n window.external.CloseBrowser();\r\n } catch (e) {\r\n Ext.MessageBox.show({\r\n title: \"系统提示\",\r\n msg: \"您的软件版本不支持推送消息!\",\r\n buttons: Ext.MessageBox.OK,\r\n icon: Ext.MessageBox.INFO\r\n });\r\n }\r\n }else{\r\n window.external.CloseBrowser();\r\n }\r\n }\r\n });\r\n}\r\nonMailSended = onSended;', NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('037dfda4d5984a71b23bde0359dac14', '写邮件', '协同办公', NULL, 'http://10.55.8.21/MailMng/SWriteLetter.aspx?cmd=new', 'http://10.55.12.110/asset/image/apps/mailnew.png', 'http://isms.etms.com/ens/login.aspx', 0, 800, 600, 3, NULL, 0, 'ETMS_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, 'function onSended() {\r\n Ext.MessageBox.show({\r\n title: \"系统提示\",\r\n msg: \"邮件发送成功,是否推送消息?\",\r\n buttons: Ext.MessageBox.OKCANCEL,\r\n icon: Ext.MessageBox.QUESTION,\r\n fn: function (btn) {\r\n if (btn == \"ok\") {\r\n try {\r\n var usercodes = [];\r\n var tolist = document.getElementsByName(\"toList\");\r\n var cclist = document.getElementsByName(\"ccList\");\r\n for (var i = 0; i < tolist.length; i++) {\r\n var n = tolist[i].value.split(\"(\")[1];\r\n usercodes.push(n.substring(0, n.length - 1));\r\n }\r\n for (var i = 0; i < cclist.length; i++) {\r\n var n = cclist[i].value.split(\"(\")[1];\r\n usercodes.push(n.substring(0, n.length - 1));\r\n }\r\n var appId = \"3930ab98da0a4e82aab182482313557\";\r\n var appName = \"安全邮件\";\r\n var content = document.getElementById(\"RegionPanel1_topRegion_editForm_FormRow5_subject\").value;\r\n\r\n window.external.SendMq(usercodes.join(\",\"), appId, appName, content);\r\n window.external.CloseBrowser();\r\n } catch (e) {\r\n Ext.MessageBox.show({\r\n title: \"系统提示\",\r\n msg: \"您的软件版本不支持推送消息!\",\r\n buttons: Ext.MessageBox.OK,\r\n icon: Ext.MessageBox.INFO\r\n });\r\n }\r\n }else{\r\n window.external.CloseBrowser();\r\n }\r\n }\r\n });\r\n}\r\nonMailSended = onSended;', NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('097b93c473474a8fb505dd6f6ef0cda2', '室FTP', '专业部应用', '', 'http://10.55.148.42:88/default.aspx', NULL, NULL, 1, 500, 400, 9999, '2018-01-10 09:53:27', NULL, NULL, 1, NULL, NULL, NULL, 0, '83bedd208c9a46eda1ce4e47705b3b73', NULL, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('1aa9313e83bc42de93663528627243d', '内导外申请', '协同办公', NULL, 'http://xxjh.cetc54.com/Web/MailInfoList.aspx', 'http://10.55.12.110/asset/image/apps/nw.png', 'http://isms.cetc54.com/ens/login.aspx', 0, 980, 600, 4, NULL, 0, 'CETC54_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('1c85d30bff54420c9878247ff54867e', '所网论坛', '54所门户', NULL, 'http://bbs.cetc54.com/', NULL, 'http://bbs.cetc54.com/', 0, 1024, 768, 3, NULL, 0, 'CETC54_BBS', 0, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('1aa9313e83bc42de93663528627243d', '内导外申请', '协同办公', NULL, 'http://xxjh.etms.com/Web/MailInfoList.aspx', 'http://10.55.12.110/asset/image/apps/nw.png', 'http://isms.etms.com/ens/login.aspx', 0, 980, 600, 4, NULL, 0, 'ETMS_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('1c85d30bff54420c9878247ff54867e', '所网论坛', 'XX所门户', NULL, 'http://bbs.etms.com/', NULL, 'http://bbs.etms.com/', 0, 1024, 768, 3, NULL, 0, 'ETMS_BBS', 0, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('3892169eda9444e9ac875b871496ea58', '知识平台', '专业部应用', '', 'http://10.55.148.39:8082/', NULL, NULL, 1, 500, 400, 9999, '2018-01-10 09:49:41', NULL, NULL, 1, NULL, NULL, NULL, 0, '83bedd208c9a46eda1ce4e47705b3b73', NULL, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('3930ab98da0a4e82aab182482313557', '我的邮件', '协同办公', NULL, 'http://10.55.8.21/Default.aspx', 'http://10.55.12.110/asset/image/apps/semail.png', 'http://isms.cetc54.com/ens/login.aspx', 0, 800, 600, 2, NULL, 0, 'CETC54_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('3930ab98da0a4e82aab182482313557', '我的邮件', '协同办公', NULL, 'http://10.55.8.21/Default.aspx', 'http://10.55.12.110/asset/image/apps/semail.png', 'http://isms.etms.com/ens/login.aspx', 0, 800, 600, 2, NULL, 0, 'ETMS_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('730f36f66c15494ebfbbdd7d048b3127', '内部信息管理平台', '专业部应用', '', 'http://10.55.148.39:1234/ens/login.aspx', NULL, NULL, 1, 500, 400, 9999, '2018-01-10 09:56:55', NULL, NULL, 1, NULL, NULL, NULL, 0, '83bedd208c9a46eda1ce4e47705b3b73', NULL, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('79c16ac130bb410eb98d521ed14c2a2', '所内公告', '54所门户', NULL, 'http://www.cetc54.com/NewsList.aspx?ClassID=10', NULL, NULL, 0, 1040, 768, 2, NULL, 0, 'CETC54_NEWS', 0, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('7cd8b8f56966432b9541285bfc79755', '个人日历', '协同项目', NULL, 'http://10.55.6.16:810/CETC54Platform.ashx', 'http://10.55.12.110/asset/image/apps/cal.png', 'http://isms.cetc54.com/ens', 0, NULL, NULL, 5, NULL, 0, 'CETC54_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=7&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('9a8a0a0b27754a73962c221ee3d2c43', '外导内列表', '协同办公', NULL, 'http://xxjh.cetc54.com/Web/MailReceiveListForPerson.aspx', 'http://10.55.12.110/asset/image/apps/wn.png', 'http://isms.cetc54.com/ens/login.aspx', 0, 1000, 600, 11, NULL, 0, 'CETC54_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('9e1161a94836445bbdbf6ddc6516af6', '我的任务', '协同项目', NULL, 'http://10.55.6.16:810/CETC54Platform.ashx', 'http://10.55.12.110/asset/image/apps/task.png', 'http://isms.cetc54.com/ens', 0, NULL, NULL, 9, NULL, 0, 'CETC54_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=2&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('a6ecc3eaa7524007b2880fc5c74ef2d', 'PDM', '协同项目', NULL, 'http://pdm.cetc54.com/Windchill/app/', NULL, 'http://pdmlogin.cetc54.com:8099/sso/login', 1, NULL, NULL, 13, NULL, 0, 'CETC54_PDM', 1, 'username', 'password', 'btnsubmit', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('79c16ac130bb410eb98d521ed14c2a2', '所内公告', 'XX所门户', NULL, 'http://www.etms.com/NewsList.aspx?ClassID=10', NULL, NULL, 0, 1040, 768, 2, NULL, 0, 'ETMS_NEWS', 0, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('7cd8b8f56966432b9541285bfc79755', '个人日历', '协同项目', NULL, 'http://10.55.6.16:810/ETMSPlatform.ashx', 'http://10.55.12.110/asset/image/apps/cal.png', 'http://isms.etms.com/ens', 0, NULL, NULL, 5, NULL, 0, 'ETMS_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=7&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('9a8a0a0b27754a73962c221ee3d2c43', '外导内列表', '协同办公', NULL, 'http://xxjh.etms.com/Web/MailReceiveListForPerson.aspx', 'http://10.55.12.110/asset/image/apps/wn.png', 'http://isms.etms.com/ens/login.aspx', 0, 1000, 600, 11, NULL, 0, 'ETMS_Ens', 0, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('9e1161a94836445bbdbf6ddc6516af6', '我的任务', '协同项目', NULL, 'http://10.55.6.16:810/ETMSPlatform.ashx', 'http://10.55.12.110/asset/image/apps/task.png', 'http://isms.etms.com/ens', 0, NULL, NULL, 9, NULL, 0, 'ETMS_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=2&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('a6ecc3eaa7524007b2880fc5c74ef2d', 'PDM', '协同项目', NULL, 'http://pdm.etms.com/Windchill/app/', NULL, 'http://pdmlogin.etms.com:8099/sso/login', 1, NULL, NULL, 13, NULL, 0, 'ETMS_PDM', 1, 'username', 'password', 'btnsubmit', 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('ba7e1baa65524afc8df3c58f7e0fe3e1', '部门FTP', '专业部应用', '', 'ftp://10.55.148.63/', NULL, NULL, 1, 500, 400, 9999, '2018-01-10 09:54:15', NULL, NULL, 1, NULL, NULL, NULL, 0, '83bedd208c9a46eda1ce4e47705b3b73', NULL, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c024f0a1db424695811a33c00f5436e', '我的日志', '协同项目', NULL, 'http://10.55.6.16:810/CETC54Platform.ashx', 'http://10.55.12.110/asset/image/apps/rizhi.png', 'http://isms.cetc54.com/ens', 0, NULL, NULL, 6, NULL, 0, 'CETC54_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=3&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c366b72c968b46f8b7d4592ff4535fb', '我的项目', '协同项目', NULL, 'http://10.55.6.16:810/CETC54Platform.ashx', 'http://10.55.12.110/asset/image/apps/project.png', 'http://isms.cetc54.com/ens', 0, NULL, NULL, 8, NULL, 0, 'CETC54_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=12&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c73c51eea7a846249c111f1da466370', '所网主页', '54所门户', NULL, 'http://www.cetc54.com/', 'http://10.55.12.110/asset/image/apps/zhuye.png', NULL, 0, NULL, NULL, 1, NULL, 0, 'CETC54_Index', 1, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('fe24c4ac34444902a2129ec1dbf9ed4', '门户首页', '协同办公', NULL, 'http://isms.cetc54.com/ens/mainform.aspx', 'http://10.55.12.110/asset/image/apps/ens.png', 'http://isms.cetc54.com/ens/login.aspx', 0, NULL, NULL, 1, NULL, 0, 'CETC54_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, '$(\'.icon_switch\').closest(\'a\').hide();', NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c024f0a1db424695811a33c00f5436e', '我的日志', '协同项目', NULL, 'http://10.55.6.16:810/ETMSPlatform.ashx', 'http://10.55.12.110/asset/image/apps/rizhi.png', 'http://isms.etms.com/ens', 0, NULL, NULL, 6, NULL, 0, 'ETMS_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=3&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c366b72c968b46f8b7d4592ff4535fb', '我的项目', '协同项目', NULL, 'http://10.55.6.16:810/ETMSPlatform.ashx', 'http://10.55.12.110/asset/image/apps/project.png', 'http://isms.etms.com/ens', 0, NULL, NULL, 8, NULL, 0, 'ETMS_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, NULL, 'p=12&u=%eimp.username%', 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('c73c51eea7a846249c111f1da466370', '所网主页', 'XX所门户', NULL, 'http://www.etms.com/', 'http://10.55.12.110/asset/image/apps/zhuye.png', NULL, 0, NULL, NULL, 1, NULL, 0, 'ETMS_Index', 1, NULL, NULL, NULL, 1, NULL, 0, NULL, NULL, NULL, 1);
|
||||
INSERT INTO `jcdp_chat_apps` VALUES ('fe24c4ac34444902a2129ec1dbf9ed4', '门户首页', '协同办公', NULL, 'http://isms.etms.com/ens/mainform.aspx', 'http://10.55.12.110/asset/image/apps/ens.png', 'http://isms.etms.com/ens/login.aspx', 0, NULL, NULL, 1, NULL, 0, 'ETMS_Ens', 1, 'txtUser', 'txtPass', 'lbtnLogin', 1, NULL, 0, NULL, '$(\'.icon_switch\').closest(\'a\').hide();', NULL, 1);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for jcdp_chat_apps_my
|
||||
@ -2844,7 +2844,7 @@ INSERT INTO `jcdp_sys_dict_item` VALUES ('7c0e171f83e246049dfe114960d74484', '
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('7efcc6f5ad5c40bc9d2599f98edda540', '生活休闲', '4', 1, '5b3253e4e34e4aa499337c2d10f1c4ad');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('7f21722c44fb491bba70ec7a4cc6d7e4', 'Action', '4', 1, '13bd478c63e649d396dd08789dfebd98');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('8403e4be247847ed8168d055ada59b2d', '党组织', '4', 1, '2dab66bce35542a8b806d91077f2fe45');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('86aa6ee1e7aa4f17a36920e831b9c20e', '传统样式', 'cetc54', 1, '854f99d670914902a804d3b2f2edc9ea');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('86aa6ee1e7aa4f17a36920e831b9c20e', '传统样式', 'etms', 1, '854f99d670914902a804d3b2f2edc9ea');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('8d307afecc33489baaa733ef89ea5a28', '其他', '9', 1, '2dab66bce35542a8b806d91077f2fe45');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('8f1e7f93c0514d778d8d18a3197cfe31', '更新包', '1', 1, 'ff301d7317fd4801b460e3e001a8301e');
|
||||
INSERT INTO `jcdp_sys_dict_item` VALUES ('96407128a74d4370ad29134bd893c15a', '财会考试', '3', 1, '981fbcaada804304b5f960b745b0068f');
|
||||
@ -2890,7 +2890,7 @@ CREATE TABLE `jcdp_sys_feedback` (
|
||||
-- ----------------------------
|
||||
-- Records of jcdp_sys_feedback
|
||||
-- ----------------------------
|
||||
INSERT INTO `jcdp_sys_feedback` VALUES ('adasd', '{\"app_version\":\"1.6\",\"appid\":\"com.cetc54.moa\",\"imei\":\"b1b40089914e63ab\",\"md\":\"MI 6\",\"net\":\"6\",\"os\":\"7.1.1\",\"p\":\"a\",\"plus_version\":\"1.9.9.35689\"}', 'fe24c4ac34444902a2129ec1debf9ed4', 'Y08066', '超级管理员', '[\"https://120.77.211.40:8443/feedback/feedback/getPic?path=V0VCLUlORlx1cGxvYWRGaWxlcy91c2VyQXZhdGFycy8yMDE3MDkyODE1MjcxNF9mZDBiYWU0MmY3OTc0YmE2OWNmMzM3NTgwMTc4NTc1OC5wbmc=\", \"https://120.77.211.40:8443/feedback/feedback/getPic?path=V0VCLUlORlx1cGxvYWRGaWxlcy91c2VyQXZhdGFycy8yMDE3MDkyODE1MjcxNF8wN2QwNTYwYjUwZjM0MTcyYjFjMGU3MDg3ZmUyOTlkZS5wbmc=\"]', 'sadfasfd', '123', 4, 'AE143E112111CD7AA2730BACB4D4FEA2', '2017-10-31 16:08:13');
|
||||
INSERT INTO `jcdp_sys_feedback` VALUES ('adasd', '{\"app_version\":\"1.6\",\"appid\":\"com.etms.moa\",\"imei\":\"b1b40089914e63ab\",\"md\":\"MI 6\",\"net\":\"6\",\"os\":\"7.1.1\",\"p\":\"a\",\"plus_version\":\"1.9.9.35689\"}', 'fe24c4ac34444902a2129ec1debf9ed4', 'Y08066', '超级管理员', '[\"https://120.77.211.40:8443/feedback/feedback/getPic?path=V0VCLUlORlx1cGxvYWRGaWxlcy91c2VyQXZhdGFycy8yMDE3MDkyODE1MjcxNF9mZDBiYWU0MmY3OTc0YmE2OWNmMzM3NTgwMTc4NTc1OC5wbmc=\", \"https://120.77.211.40:8443/feedback/feedback/getPic?path=V0VCLUlORlx1cGxvYWRGaWxlcy91c2VyQXZhdGFycy8yMDE3MDkyODE1MjcxNF8wN2QwNTYwYjUwZjM0MTcyYjFjMGU3MDg3ZmUyOTlkZS5wbmc=\"]', 'sadfasfd', '123', 4, 'AE143E112111CD7AA2730BACB4D4FEA2', '2017-10-31 16:08:13');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for jcdp_sys_log
|
||||
@ -3571,7 +3571,7 @@ INSERT INTO `jcdp_sys_module` VALUES ('39fbd45f6da740a8815f483781a56567', '|root
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('3b566f494c244193a5a943ec73378e66', '|root|28c3a95347024c4fb1b6395887a09409|d1db8883db7f4bc2a03253a2c94aa0bf|fca7520f7cda4daa9ebcebaa8b52c54a|a7c9859b798a40c58f6b7429a8c926c2|68d13963526748ab82a99116f190a996|3b566f494c244193a5a943ec73378e66|', '2.部门角色', '/role/role/list', NULL, '68d13963526748ab82a99116f190a996', 0, 0, 'textfield_key.png', 1, NULL, NULL, 0, 5, 2, 0);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('3c1811fd49ba471f87c8172dfa6e813b', '|root|510998e99c924665806c0e20bbbcc2b2|76ccbd8e2c7c4ffb8709396dc5059526|3c1811fd49ba471f87c8172dfa6e813b|', '部门领导审批', '/train/outtrain/deleteindex?pg=7', NULL, '76ccbd8e2c7c4ffb8709396dc5059526', 0, 0, '', 1, '外派培训计划删除', NULL, 2, 0, 277, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('3df773b762d54053bf6e9f3b53a0184c', '|root|ba85127869a3419cbc279cf959967547|3df773b762d54053bf6e9f3b53a0184c|', '学员签到/在线学习', '/train/plantodo/createclassindex?pg=5', NULL, 'ba85127869a3419cbc279cf959967547', 0, 0, '', 1, '教育培训计划实施', NULL, 4, 1, 197, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('3e353b0736064f4b83e0489a7e69fd7e', '|root|975338ae351a4a19af2032fc360af687|3e353b0736064f4b83e0489a7e69fd7e|', '所网主页', 'http://www.cetc54.com', NULL, '975338ae351a4a19af2032fc360af687', 0, 0, '', 1, '任务管理', NULL, 9, 0, 282, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('3e353b0736064f4b83e0489a7e69fd7e', '|root|975338ae351a4a19af2032fc360af687|3e353b0736064f4b83e0489a7e69fd7e|', '所网主页', 'http://www.etms.com', NULL, '975338ae351a4a19af2032fc360af687', 0, 0, '', 1, '任务管理', NULL, 9, 0, 282, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('408d00a441b2442a9b74781db1f77f3e', '|root|93093b73a7be4daf837e7f88dd51495a|e84381fd49f54ae487e241f152e808d0|408d00a441b2442a9b74781db1f77f3e|', '已生成计划', '/train/groupInPlan/?pg=5', NULL, 'e84381fd49f54ae487e241f152e808d0', 0, 0, '', 1, '部门级计划内计划制定', NULL, 5, 1, 262, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('40aa8106fa8f48ab97507b221606732f', '|root|40aa8106fa8f48ab97507b221606732f|', '学习资料管理', '', NULL, 'root', 0, 0, '', 1, '教育培训管理系统', NULL, 7, 0, 217, 1);
|
||||
INSERT INTO `jcdp_sys_module` VALUES ('4269c094e4cc437ba9db9dd71428d547', '|root|28c3a95347024c4fb1b6395887a09409|b5573ec04afe4602b4b17775ac300267|06959fba43e54a98a5902bc90cede514|e3b370a851ec440391f8c4531b66f7ed|02d034df6d6047bf81cdaa630dba3d57|4269c094e4cc437ba9db9dd71428d547|', '2.部门', '/log/log/list', NULL, '02d034df6d6047bf81cdaa630dba3d57', 0, 0, 'textfield_key.png', 1, NULL, NULL, 0, 5, 2, 0);
|
||||
@ -3777,7 +3777,7 @@ INSERT INTO `jcdp_sys_org` VALUES ('00abc5089d2f4891a83ce81dc8ef57e4', '|root|23
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('056d928db141405fb73b7bd635dcbdf1', '|root|23bbc6c7403740119b17d8d8cd5d3d41|e5a1527bd7b44f00887da4a253b3756a|056d928db141405fb73b7bd635dcbdf1|', '信息电子化组', NULL, 'e5a1527bd7b44f00887da4a253b3756a', 1, 0, '', 1, 'XXZX', NULL, 30, '0540012006', 2);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('0c749f875b684957a119e11f3175f0ee', '|root|23bbc6c7403740119b17d8d8cd5d3d41|e5a1527bd7b44f00887da4a253b3756a|0c749f875b684957a119e11f3175f0ee|', '应用支持组', NULL, 'e5a1527bd7b44f00887da4a253b3756a', 1, 0, '', 1, 'XXZX', NULL, 15, '0540012003', 2);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('1647c07823b14295915ecd6f08d4b78e', '|root|23bbc6c7403740119b17d8d8cd5d3d41|24b09331aba242068c5d9abe64a5fbb1|a39fe42cea154b0380ef0e733846cb81|1647c07823b14295915ecd6f08d4b78e|', 'JAVA技术组', NULL, 'a39fe42cea154b0380ef0e733846cb81', 0, 0, '', 1, '软件室', NULL, 53, '53', 2);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('23bbc6c7403740119b17d8d8cd5d3d41', '|root|23bbc6c7403740119b17d8d8cd5d3d41|', '中国电科54所', NULL, 'root', 0, 1, '', 1, '组织架构树', NULL, 1, '001', 1);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('23bbc6c7403740119b17d8d8cd5d3d41', '|root|23bbc6c7403740119b17d8d8cd5d3d41|', 'XX公司', NULL, 'root', 0, 1, '', 1, '组织架构树', NULL, 1, '001', 1);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('24b09331aba242068c5d9abe64a5fbb1', '|root|23bbc6c7403740119b17d8d8cd5d3d41|24b09331aba242068c5d9abe64a5fbb1|', '专用集成电路与应用软件专业部', NULL, '23bbc6c7403740119b17d8d8cd5d3d41', 0, 0, '', 1, 'CENC', NULL, 50, '001011015', 1);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('2a6bd512230c477399a8e8cf145d9d0c', '|root|23bbc6c7403740119b17d8d8cd5d3d41|24b09331aba242068c5d9abe64a5fbb1|8b5cba8e51f74397b7b23361dbe5b0fd|2a6bd512230c477399a8e8cf145d9d0c|', '逻辑三组', NULL, '8b5cba8e51f74397b7b23361dbe5b0fd', 1, 0, NULL, 1, '集成电路室', NULL, 43, '43', 2);
|
||||
INSERT INTO `jcdp_sys_org` VALUES ('34c58fd9c04044338fec6008988c1977', '|root|23bbc6c7403740119b17d8d8cd5d3d41|e5a1527bd7b44f00887da4a253b3756a|34c58fd9c04044338fec6008988c1977|', '期刊编辑组', NULL, 'e5a1527bd7b44f00887da4a253b3756a', 0, 0, '', 1, 'XXZX', NULL, 35, '0540012007', 2);
|
||||
@ -3843,15 +3843,15 @@ INSERT INTO `jcdp_sys_parameter` VALUES ('0b857396a13b4f8da127adb5f45ccd3d', '
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('0d46e40308004bc98e6f2add51f2553d', '平台远程地址', 'jcdpPlatformUrl', 'http://10.2.98.33:8080/jcdp', 'db42a5ecae054732bad470ab4a565822', '注意:该地址为生成应用的JCDP平台地址,该配置项可以获取版本差异,进行项目更新(未来规划功能)');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('184c747d96894fd2af0734c23b9e7e80', '会话失效提示', 'sessionInvalidMsg', '会话已失效,请重新登录!', 'c1b5c67d77f9469da130f71d5d1d8f02', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('1efa0782adc94ee2bf026149c3f00c77', '是否随机设置用户密码', 'user_default_password_random', 'true', 'cd537001b4454282aa83db0a49b852dc', 'false-使用默认密码(使用user_default_password参数);true-使用随机密码');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('2db17879d69742638dd757b8719311a7', '技术支持', 'jcdp.app.techSupport', '中国电子科技集团公司第五十四研究所', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('2db17879d69742638dd757b8719311a7', '技术支持', 'jcdp.app.techSupport', 'XX电子科技集团XX研究所', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('3526a08503744e3a8dbeada42d7e48ae', '静态文件地址', 'assetUrl', 'local', 'db42a5ecae054732bad470ab4a565822', 'local-使用本地服务器\r\n远程服务器(例如:http://10.2.98.33:4545/jcdp)');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('3dc3b549f6854c7d91a8dd936781ec46', '版权信息', 'jcdp.app.copyright', 'Copyright © 2015-2017 中国电子科技集团公司第五十四研究所', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('3dc3b549f6854c7d91a8dd936781ec46', '版权信息', 'jcdp.app.copyright', 'Copyright © 2015-2017 XX电子科技集团XX研究所', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('4177232a5b244e9797bc47ff7d9d5c2d', '删除用户类型', 'user_delete_flag', '0', 'cd537001b4454282aa83db0a49b852dc', '0:不从数据库删除用户信息;\r\n1:删除用户及相关信息。');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('43a420e05f5b4159a562d0ce1fa1e4bb', '密码重置邮件模板', 'resetpassword_temp', '${username}:<br/>\r\n 欢迎您使用<a href=\"${rootUrl}\" target=\"_blank\">${sysname}</a>。<br/>\r\n您的密码已重置,重置后的账号信息如下:<br/>\r\n用户名:${loginname}<br/>\r\n密码:${password}<br/>', 'cd537001b4454282aa83db0a49b852dc', 'freemarker模板:\r\nrootUrl:网站地址\r\nloginname:登录账号\r\nusername:姓名\r\npassword:密码\r\nsysname:系统名称');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('45b89ec7bb74495a83c1ad7041d27807', '系统运行模式', 'jcdpRunMode', 'debug', 'db42a5ecae054732bad470ab4a565822', 'debug-调试模式,release-发布模式\n注意:改变运行模式,只改变服务层(service)、应用层运行模式(controller),若想改变框架层运行模式,请修改jcdp.properties');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('526295e82cc4433a9de59015ed6cdd35', 'RabbitMQ配置', 'rabbitmq', '{\r\nservers:\r\n[\r\n{server:\"10.55.12.109:5672\"}\r\n],\r\nusername:\"chatuser\",\r\npassword:\"comerc@cetc54.com\"\r\n}', 'db42a5ecae054732bad470ab4a565822', 'RabbitMQ消息队列配置\r\n{\r\n servers:[{server:\"\"}],//服务器列表\r\n username:\"admin\",//用户名\r\n passwrod:\"admin\"//密码\r\n}');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('526295e82cc4433a9de59015ed6cdd35', 'RabbitMQ配置', 'rabbitmq', '{\r\nservers:\r\n[\r\n{server:\"10.55.12.109:5672\"}\r\n],\r\nusername:\"chatuser\",\r\npassword:\"comerc@etms.com\"\r\n}', 'db42a5ecae054732bad470ab4a565822', 'RabbitMQ消息队列配置\r\n{\r\n servers:[{server:\"\"}],//服务器列表\r\n username:\"admin\",//用户名\r\n passwrod:\"admin\"//密码\r\n}');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('52e951402a5e4f51adb13806a64cf6ad', '16X16图标路径', 'Icon16Path', '/icon/Icon16', 'ac52e67a184e4302b157a008dbe9f11a', '相对静态文件路径');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('58008d2b65394dd090d98d937324cab4', '页面风格', 'pageStyle', '{Firefox:\"cetc54\",MSIE:\"cetc54\"}', 'db42a5ecae054732bad470ab4a565822', 'cetc54-传统风格,适配IE低版本;\r\nsmart-响应式布局,适配现代浏览器。');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('58008d2b65394dd090d98d937324cab4', '页面风格', 'pageStyle', '{Firefox:\"etms\",MSIE:\"etms\"}', 'db42a5ecae054732bad470ab4a565822', 'etms-传统风格,适配IE低版本;\r\nsmart-响应式布局,适配现代浏览器。');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('6c9486464aaa4107b1e5b61a957838cc', '用户头像上传目录', 'jcdp.uploadFile.userImg', 'userAvatars', 'db42a5ecae054732bad470ab4a565822', '该路径在jcdp.uploadFileRoot之下');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('7c62d02179be4107adeab84bfc1e5a88', '服务器端口', 'jcdp.serverPort', '{enable:false,http:80,https:443}', 'db42a5ecae054732bad470ab4a565822', '{\r\nenable:true,-----是否启用端口配置\r\nhttp:80,----http服务端口\r\nhttps:43----https服务端口\r\n}');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('80d6ddf63dc94a268bde7e28ac7e9b4c', '新增用户发送邮件模板', 'addUserEmail_temp', '${username}:<br/>\r\n 欢迎您使用<a href=\"${rootUrl}\" target=\"_blank\">${sysname}</a>。<br/>\r\n你的账号信息:<br/>\r\n用户名:${loginname}<br/>\r\n密码:${password}<br/>', 'cd537001b4454282aa83db0a49b852dc', 'freemarker模板:\r\nrootUrl:网站地址\r\nloginname:登录账号\r\nusername:姓名\r\npassword:密码\r\nsysname:系统名称');
|
||||
@ -3870,7 +3870,7 @@ INSERT INTO `jcdp_sys_parameter` VALUES ('d315d1045dd4417681ddd7befe402ee0', '
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('d5874f7516d4431ba19585db137fd73f', '首页选中是否刷新', 'portalUpdateOnOpen', 'true', '9f8cac9e3b73407a8106f37268e70ae9', 'true-打开时刷新 false-永不刷新');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('dc53e73e4ee047158e5a5613deb17fe3', '32X32图标路径', 'Icon32Path', '/icon/Icon32', 'ac52e67a184e4302b157a008dbe9f11a', '相对静态文件路径');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('ddc8afea829140cd89b66c379a780842', '联系管理员', 'contact_admin', '请联系管理员(电话:88888)', 'c1b5c67d77f9469da130f71d5d1d8f02', NULL);
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('e9552dbdd23546b58f2f1bcebf5488a6', '发送邮件配置', 'sendEmailConfig', '{\r\nhost:\'smtp.cetc54.com\',\r\nusername:\'Y08066@cetc54.com\',\r\npassword:\'cetc54@123456\'\r\n}', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('e9552dbdd23546b58f2f1bcebf5488a6', '发送邮件配置', 'sendEmailConfig', '{\r\nhost:\'smtp.etms.com\',\r\nusername:\'Y08066@etms.com\',\r\npassword:\'etms@123456\'\r\n}', 'db42a5ecae054732bad470ab4a565822', '');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('ee49e548da0a4165a7ffdd6a8ba5c2f4', '图标样式文件名称', 'IconCSSName', 'icon.css', 'ac52e67a184e4302b157a008dbe9f11a', '可以通过修改该值改变icon样式');
|
||||
INSERT INTO `jcdp_sys_parameter` VALUES ('f0794cf8add246ce89012b5698d1fbb0', '首页地址', 'portalUrl', 'index/portal', '9f8cac9e3b73407a8106f37268e70ae9', NULL);
|
||||
|
||||
@ -7128,7 +7128,7 @@ INSERT INTO `jcdp_sys_user_ext` VALUES ('05daab960ff8450d9cbe84cd3c7dd260', '123
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('068768e1eb764837bc4d98f0216b94e7', '', '13633219219', '4462', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('07b75922b82149ab899bee340a47970a', '', '15931102653', '8464', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('07c1963549914dac88e8ba6092ba3393', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('082538db933e477598aa3e87ec2b21e8', 'yuehw@cetc54.com', '15130145015', '4101', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('082538db933e477598aa3e87ec2b21e8', 'yuehw@etms.com', '15130145015', '4101', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('08392ef87499474a82a8954c7ced7390', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('097879d75fc54dc285aff704d8734a21', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('0980b8836368476297e98155c859f632', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@ -7156,7 +7156,7 @@ INSERT INTO `jcdp_sys_user_ext` VALUES ('1cb2fb93db774202bdd2532fa57d9bff', NULL
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1d8094115f5c4c6ab8c38c414a65d6f4', '123', '123', '123', '河北省石家庄市中山西路', '050081', NULL, NULL, '8471', NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1db1801a29f344b780f018cbffc9b3f1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1dce74df53b44ecfbe89edc802914bf8', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1df48ce2f70e46a19eccb6b88b64a4bb', 'Y08066@cetc54.com', '13780306726', '8559', '', '', '', NULL, '每天进步一点点!', NULL, 'http://localhost:8080/jcdp/index/getFile?type=avatars&url=20180117153130476_AnZhuangRuanJian.png', '20180117153130476_AnZhuangRuanJian.png', 'http://localhost:8080/jcdp/index/getFile?type=avatars&url=20180117151157651_joos2.jpg');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1df48ce2f70e46a19eccb6b88b64a4bb', 'Y08066@etms.com', '13780306726', '8559', '', '', '', NULL, '每天进步一点点!', NULL, 'http://localhost:8080/jcdp/index/getFile?type=avatars&url=20180117153130476_AnZhuangRuanJian.png', '20180117153130476_AnZhuangRuanJian.png', 'http://localhost:8080/jcdp/index/getFile?type=avatars&url=20180117151157651_joos2.jpg');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1e89fb25e0734ae1bf339efdac68c85f', '', '13933866220', '8525', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('1eac9b5fdd784b00b1e2037e8d8d6a22', '', '13483131054', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('200c68d821984e73a4b6e1b86eedaabe', '396105640@qq.com', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@ -7228,7 +7228,7 @@ INSERT INTO `jcdp_sys_user_ext` VALUES ('541163ddcaec4751b6d6e86207cc48c1', NULL
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('545b2a2ca2a04583b6dc0dddc8c8ab29', '', '13613212837', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('5619c0acad764d84989e69bc5c57b461', '', '', '110', '河北省石家庄市中山西路', '050081', '', NULL, '我是张锐!', NULL, NULL, NULL, '');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('561fa58b43ec443f8420e9637e4d38c0', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('5676921ac94b4633a614892676567bfb', 'P12189@CETC54.COM', '13933157950', '8469', '', '', '', NULL, '啊我饿一屋鱼哎诶喂熬偶油', NULL, '', NULL, '');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('5676921ac94b4633a614892676567bfb', 'P12189@ETMS.COM', '13933157950', '8469', '', '', '', NULL, '啊我饿一屋鱼哎诶喂熬偶油', NULL, '', NULL, '');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('57e5a30a134f47c0b76178ac345d5465', '', '13933840108', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('597971047f3541dc94171b6f5d114c29', '396105640@qq.com', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('5b0037df0e3b4bfaa89c36d74e5c7a81', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@ -7284,7 +7284,7 @@ INSERT INTO `jcdp_sys_user_ext` VALUES ('82a04b4689d84862be5c4b600b099fc1', NULL
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('82bb85dfa7dc4330893ac38fda2ae74d', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('83b9caffe40948618028f7ec4a95ad3a', '', '15030189132', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('83bb22a54cc4492e8fa3043a21a001ec', '', '17732150947', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('83bedd208c9a46eda1ce4e47705b3b73', 'p16106@cetc54.com', '17603202982', '8472', '', '', NULL, NULL, '喂!啊?伐木累啊。。。', NULL, 'http://10.55.148.42:88/filedownload.aspx?path=EIM.Update\\EIM_Alpha\\Emotions\\6.gif', NULL, 'http://10.55.148.42:88/filedownload.aspx?path=EIM.Update\\EIM_Alpha\\Emotions\\6.gif');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('83bedd208c9a46eda1ce4e47705b3b73', 'p16106@etms.com', '17603202982', '8472', '', '', NULL, NULL, '喂!啊?伐木累啊。。。', NULL, 'http://10.55.148.42:88/filedownload.aspx?path=EIM.Update\\EIM_Alpha\\Emotions\\6.gif', NULL, 'http://10.55.148.42:88/filedownload.aspx?path=EIM.Update\\EIM_Alpha\\Emotions\\6.gif');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('84337ce99ca24ba886bad2cc59f048b9', '396105640@qq.com', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('84ac0ac6d4464f73a11f7e5405041cd4', '', '17732187353', '8648', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('84d6e483e21b4027985203b26dedb769', '123', '123', '123', '河北省石家庄市中山西路', '050081', NULL, NULL, 'sds', NULL, NULL, NULL, NULL);
|
||||
@ -7362,7 +7362,7 @@ INSERT INTO `jcdp_sys_user_ext` VALUES ('b5476fbcc39f43108da6d6896ce607b2', '',
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('b7bb532db0e34631a34a61384f9c5b8e', '', '13582813096', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('bc2ca8f58ff845aab2fdd6560a0a3b34', '', '18831190639', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('be388be5d7994bf6a8a321f2c85328f3', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('be5eed01ec694ac1b72539887bec1235', 'Y11044@CETC54.com', '15031192529', '8560', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('be5eed01ec694ac1b72539887bec1235', 'Y11044@ETMS.com', '15031192529', '8560', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('beefed50d1fa4e258842b5e46acf136b', '', '13623312144', '4625', '', '', '', NULL, '测试', NULL, NULL, NULL, '');
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('c024f0a1db424695811a33c00f5436ee', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `jcdp_sys_user_ext` VALUES ('c219eb3b489e49a5af65dbc7f42754c8', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
@ -26,7 +26,7 @@ jcdp.db.url=jdbc:mysql://10.55.68.235:3306/etms?useSSL=false&useUnicode=true&cha
|
||||
jcdp.runMode=release
|
||||
|
||||
#\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD;\uFFFD\uFFFD\uFFFD\u05B8\uFFFD
|
||||
mvc.controllerBasePackage=com.cetc54.jcdp.web.controller
|
||||
mvc.controllerBasePackage=com.etms.jcdp.web.controller
|
||||
mvc.viewBasePath=/
|
||||
|
||||
#Spring \uFFFD\uFFFD\uFFFD\uFFFD
|
||||
|
||||
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<link type="image/x-icon" href="${appIco}" rel="icon" />
|
||||
<link id="uiTheme" rel="stylesheet" type="text/css"
|
||||
href="${asset_path}/thirdlib/CECT54.WebUI/themes/bootstrap/cetc54.ui.all.css"/>
|
||||
href="${asset_path}/thirdlib/CECT54.WebUI/themes/bootstrap/etms.ui.all.css"/>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="${asset_path}/thirdlib/CECT54.WebUI/plugins/ztree/css/zTreeStyle/zTreeStyle.css"/>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
@ -1,6 +1,6 @@
|
||||
<input type="hidden" value="${webRoot}" id="hdWebroot">
|
||||
<script type="text/javascript" src="${asset_path}/thirdlib/CECT54.WebUI/json3.min.js"></script>
|
||||
<script type="text/javascript" src="${asset_path}/thirdlib/CECT54.WebUI/template.js"></script>
|
||||
<script type="text/javascript" src="${asset_path}/thirdlib/CECT54.WebUI/cetc54.ui.all.js"></script>
|
||||
<script type="text/javascript" src="${asset_path}/thirdlib/CECT54.WebUI/etms.ui.all.js"></script>
|
||||
<script type="text/javascript" src="${asset_jspath}/globalConfig.js"></script>
|
||||
<script type="text/javascript" src="${asset_jspath}/ui.dictCombox.js"></script>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user