为了与OA系统进行用户数据同步和关联,需要在系统中支持OA_UserID字段:
1. 用户登录成功后,在用户信息中加载OA_UserID
2. 在后台创建用户时,可以输入并保存OA_UserID
3. 在后台修改用户时,可以修改OA_UserID
文件: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
SysUser实体类已包含oaUserId字段:
```java
/** SQL Server中的OA用户ID */
private Integer oaUserId;
public Integer getOaUserId() {
return oaUserId;
}
public void setOaUserId(Integer oaUserId) {
this.oaUserId = oaUserId;
}
```
文件: ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
ResultMap映射:xml <resultMap type="SysUser" id="SysUserResult"> <!-- ... 其他字段 --> <result property="oaUserId" column="oa_user_id" /> </resultMap>
查询SQL包含oaUserId:xml <sql id="selectUserVo"> select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark, <!-- ... --> from sys_user u <!-- ... --> </sql>
插入操作:xml <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( <!-- ... 其他字段 --> <if test="oaUserId != null">oa_user_id,</if> <!-- ... --> )values( <!-- ... 其他字段值 --> <if test="oaUserId != null">#{oaUserId},</if> <!-- ... --> ) </insert>
更新操作:xml <update id="updateUser" parameterType="SysUser"> update sys_user <set> <!-- ... 其他字段 --> <if test="oaUserId != null">oa_user_id = #{oaUserId},</if> <!-- ... --> </set> where user_id = #{userId} </update>
文件: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
在getInfo()方法中返回oaUserId:
@GetMapping("getInfo")
public AjaxResult getInfo()
{
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = loginUser.getUser();
// ... 其他代码
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
ajax.put("branchCompanyId", branchCompanyId);
ajax.put("branchCompanyName", branchCompanyName);
ajax.put("oaUserId", user.getOaUserId()); // 新增:返回OA用户ID
return ajax;
}
文件: ruoyi-ui/src/views/system/user/index.vue
在用户列表中显示OA用户ID列:html <el-table-column label="OA用户ID" align="center" key="oaUserId" prop="oaUserId" v-if="columns[1].visible" width="120"> <template slot-scope="scope"> <span v-if="scope.row.oaUserId">{{ scope.row.oaUserId }}</span> <span v-else style="color: #909399;">-</span> </template> </el-table-column>
在新增/修改用户对话框中添加OA用户ID输入框:html <el-row> <el-col :span="12"> <el-form-item label="OA用户ID" prop="oaUserId"> <el-input v-model="form.oaUserId" placeholder="OA系统的用户ID" type="number" /> </el-form-item> </el-col> </el-row>
注意:
- type="number" 确保只能输入数字
- 移除了 :disabled="true" 属性,允许编辑
- 在创建和修改时都可以输入OA用户ID
在reset()方法中包含oaUserId:javascript reset() { this.form = { userId: undefined, deptId: undefined, userName: undefined, nickName: undefined, oaUserId: undefined, // 初始化OA用户ID password: undefined, phonenumber: undefined, email: undefined, sex: undefined, status: "0", remark: undefined, postIds: [], roleIds: [] }; this.resetForm("form"); }
添加OA用户ID列到columns配置:javascript columns: [ { key: 0, label: `用户编号`, visible: true }, { key: 1, label: `OA用户ID`, visible: true }, // 新增列 { key: 2, label: `用户名称`, visible: true }, { key: 3, label: `用户昵称`, visible: true }, { key: 4, label: `部门`, visible: true }, { key: 5, label: `手机号码`, visible: true }, { key: 6, label: `状态`, visible: true }, { key: 7, label: `创建时间`, visible: true } ]
文件: app/store/modules/user.js
文件: app/utils/constant.js
添加oaUserId常量:javascript const constant = { userId: 'vuex_userId', avatar: 'vuex_avatar', name: 'vuex_name', roles: 'vuex_roles', permissions: 'vuex_permissions', deptId: 'vuex_deptId', branchCompanyId: 'vuex_branchCompanyId', branchCompanyName: 'vuex_branchCompanyName', oaUserId: 'vuex_oaUserId' // 新增 }
在store中添加oaUserId状态:javascript state: { token: getToken(), userId: storage.get(constant.userId), name: storage.get(constant.name), avatar: storage.get(constant.avatar), roles: storage.get(constant.roles), permissions: storage.get(constant.permissions), deptId: storage.get(constant.deptId), branchCompanyId: storage.get(constant.branchCompanyId), branchCompanyName: storage.get(constant.branchCompanyName), oaUserId: storage.get(constant.oaUserId) // 新增 }
添加SET_OA_USER_ID mutation:javascript mutations: { // ... 其他mutations SET_OA_USER_ID: (state, oaUserId) => { state.oaUserId = oaUserId storage.set(constant.oaUserId, oaUserId) } }
在GetInfo action中保存oaUserId:
```javascript
GetInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo().then(res => {
const user = res.user
// ... 其他代码
commit('SET_USER_ID', userId)
commit('SET_NAME', username)
commit('SET_AVATAR', avatar)
commit('SET_DEPT_ID', deptId)
commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
commit('SET_OA_USER_ID', res.oaUserId) // 新增:保存OA用户ID
resolve(res)
}).catch(error => {
reject(error)
})
})
}
```
用户登录
↓
调用 /login 接口
↓
返回 token
↓
调用 /getInfo 接口
↓
返回用户信息(包含oaUserId)
↓
保存到 Vuex store
↓
存储到 localStorage
↓
在应用中使用 this.$store.state.user.oaUserId 访问
点击"新增"按钮
↓
打开对话框
↓
填写用户信息(包括OA用户ID)
↓
点击"确定"提交
↓
调用 addUser() 接口
↓
后端保存到数据库(oa_user_id字段)
↓
返回成功
↓
刷新用户列表
点击"修改"按钮
↓
加载用户信息(包含OA用户ID)
↓
修改OA用户ID
↓
点击"确定"提交
↓
调用 updateUser() 接口
↓
后端更新数据库(oa_user_id字段)
↓
返回成功
↓
刷新用户列表
表名: sys_user
字段: oa_user_id
- 类型: INT
- 可空: YES
- 默认值: NULL
- 说明: 存储OA系统中的用户ID,用于与外部OA系统进行用户数据关联
SQL创建语句(已存在):sql ALTER TABLE sys_user ADD COLUMN oa_user_id INT NULL COMMENT 'OA系统用户ID';
在移动端应用中访问OA用户ID:javascript // 在组件中 export default { computed: { ...mapState({ oaUserId: state => state.user.oaUserId }) }, mounted() { console.log('当前用户的OA用户ID:', this.oaUserId) } }
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java - 用户实体类ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml - 用户Mapper配置ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java - 登录控制器ruoyi-ui/src/views/system/user/index.vue - 用户管理页面app/utils/constant.js - 常量定义app/store/modules/user.js - 用户状态管理sys_user 表 - oa_user_id 字段添加唯一性约束
sql ALTER TABLE sys_user ADD UNIQUE INDEX idx_oa_user_id (oa_user_id);
添加OA用户ID验证