This commit is contained in:
2026-10-08 18:19:39 +08:00
parent 25b8d0104f
commit 75527ae81d
425 changed files with 53925 additions and 2645 deletions
@@ -0,0 +1,93 @@
const formRules = require("../util/formRules.js");
module.exports = {
/**
* 添加用户
* @url admin/system/user/sys/add 前端调用的url参数地址
* data 请求参数 说明
* @param {String} username 用户名
* @param {String} nickname 昵称
* @param {String} gender 性别
* @param {Boolean} mobile 手机号
* @param {String} comment 备注
* @param {Array} dcloud_appid 允许登录的应用列表
* @param {Number} login_appid_type 0:全部应用 1:部分应用
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let {
username,
password,
nickname,
gender,
mobile,
email,
comment,
allow_login_background,
dcloud_appid = [],
login_appid_type
} = data;
if (!password) password = "234567";
// 参数合法校验开始-----------------------------------------------------------
let formRulesRes = await formRules.add(event);
if (formRulesRes.code !== 0) {
return formRulesRes;
}
// 参数合法校验结束-----------------------------------------------------------
let dbName = "uni-id-users";
// 检测username
let num = await vk.baseDao.count({ dbName, whereJson: { username } });
if (num > 0) return { code: -1, msg: `用户名【${username}】已注册!` };
// 检测mobile
if (mobile) {
let num = await vk.baseDao.count({ dbName, whereJson: { mobile } });
if (num > 0) return { code: -1, msg: `手机号【${mobile}】已注册!` };
}
// 检测email
if (email) {
let num = await vk.baseDao.count({ dbName, whereJson: { email } });
if (num > 0) return { code: -1, msg: `邮箱【${email}】已注册!` };
}
if (typeof uniID.addUser !== "function") return { code: -1, msg: `请升级uni-id版本至3.3.14或以上。` };
let addUserRes = await uniID.addUser({
username,
password,
mobile,
email,
authorizedApp: dcloud_appid
});
if (addUserRes.code !== 0 || !addUserRes.uid) {
return addUserRes;
}
// 用户其他信息
let dataJson = {
nickname,
gender,
comment,
allow_login_background,
status: 0,
};
// 如果设置允许登录所有应用,则直接删除dcloud_appid字段
if (login_appid_type === 0) {
dataJson["dcloud_appid"] = _.remove();
}
// 设置用户其他信息
await vk.baseDao.update({
dbName,
whereJson: {
_id: addUserRes.uid
},
dataJson
});
res.type = "register";
res.uid = addUserRes.uid;
return res;
}
}
@@ -0,0 +1,78 @@
'use strict';
module.exports = {
/**
* 批量修改用户可登录的客户端
* @url admin/system/user/sys/batchUpdateAppLogin 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { uniID, customUtil, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: "" };
// 业务逻辑开始-----------------------------------------------------------
// 可写与数据库的交互逻辑等等
let {
user_ids,
allow_login_background = false,
dcloud_appid,
login_appid_type,
mode
} = data;
if(vk.pubfn.isNullOne(user_ids, login_appid_type, mode)){
return { code: -1, msg: "参数错误" };
}
if(mode !== 1 && typeof dcloud_appid !== "string"){
return { code: -1, msg: "新增和移除模式下,dcloud_appid只能是字符串" };
}
let dataJson = {};
dataJson["allow_login_background"] = allow_login_background;
if(login_appid_type === 0){
// 可登录全部应用
dataJson["dcloud_appid"] = _.remove();
} else{
res.successNum = 0;
res.failNum = 0;
for(let i=0; i<user_ids.length; i++){
let user_id = user_ids[i];
let updateRes;
try {
if(mode === 1){
// 可登录部分应用
updateRes = await uniID.setAuthorizedAppLogin({
uid: user_id,
dcloudAppidList: dcloud_appid
});
}else if(mode === 2){
// 可登录部分应用
updateRes = await uniID.authorizeAppLogin({
uid: user_id,
dcloudAppid: dcloud_appid
});
}else if(mode === 3){
// 可登录部分应用
updateRes = await uniID.forbidAppLogin({
uid: user_id,
dcloudAppid: dcloud_appid
});
}
}catch(err){}
if(updateRes.code === 0){
res.successNum ++;
}else{
res.failNum ++;
}
}
}
res.num = await vk.baseDao.update({
dbName:"uni-id-users",
whereJson:{
_id: _.in(user_ids)
},
dataJson
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,42 @@
module.exports = {
/**
* 修改用户推荐人
* @url admin/system/user/sys/batchUpdateInviterUid 前端调用的url参数地址
* data 请求参数 说明
* @param {String} user_id 用户ID
* @param {String} parent_id 修改成的用户推荐人邀请码
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { user_id, parent_id } = data;
// 参数非空检测
if (vk.pubfn.isNullOne(user_id)) {
return { code: -1, msg: '参数错误' };
}
let parentUser = await vk.baseDao.findById({
dbName: "uni-id-users",
id: parent_id,
});
if (vk.pubfn.isNull(parentUser)) {
return { code: -1, msg: '父标识对应的用户不存在!' };
}
let { my_invite_code } = parentUser;
if (vk.pubfn.isNull(my_invite_code)) {
return { code: -1, msg: '父标识对应的用户无邀请码,无法邀请!' };
}
// 执行数据库API请求
res = await uniID.acceptInvite({
uid: user_id,
inviteCode: my_invite_code
});
res.msg = res.message;
return res;
}
}
@@ -0,0 +1,40 @@
module.exports = {
/**
* 批量修改用户状态
* @url admin/system/user/sys/batchUpdateStatus 前端调用的url参数地址
* data 请求参数 说明
* @param {Array} user_ids 用户id数组
* @param {Integer} status 修改成的用户状态:0 正常 1 禁用 2 审核中 3 审核拒绝
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { user_ids, status } = data;
// 参数非空检测
if (vk.pubfn.isNullOne(user_ids, status)) {
return { code: -1, msg: '参数错误' };
}
if (user_ids.indexOf(uid) > -1 && status === 1) {
return { code: -1, msg: '不可禁用自己' };
}
// 执行数据库API请求
res.num = await vk.baseDao.update({
dbName: "uni-id-users",
whereJson: {
_id: _.in(user_ids)
},
dataJson: {
status: status
}
});
return res;
}
}
@@ -0,0 +1,29 @@
module.exports = {
/**
* 为用户绑定角色
* @url admin/system/user/sys/bindRole 前端调用的url参数地址
* data 请求参数 说明
* @param {String} user_id 用户id
* @param {Array} roleList 角色Id(role_id)列表
* @param {Boolean} reset 是否直接覆盖用户角色,true:直接将roleList设置为用户角色,false:在用户已有角色后追加角色
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { user_id, roleList, reset } = data;
res = uniID.bindRole({
uid: user_id,
roleList,
reset
});
res.msg = res.message;
return res;
}
}
@@ -0,0 +1,22 @@
'use strict';
module.exports = {
/**
* 通用字段修改
* @url admin/system/user/sys/changeField 前端调用的url参数地址
*/
main: async (event) => {
let {data = {}, util} = event;
let {vk} = util;
const {id, field, value} = data;
let dataJson = {};
dataJson[field] = value;
await vk.baseDao.updateAndReturn({
dbName: 'uni-id-users',
whereJson: {
_id: id
},
dataJson
});
return {code: 0, msg: ''};
}
}
@@ -0,0 +1,60 @@
'use strict';
const PROFILE_KEY = 'notaryUnionPayProfile';
module.exports = {
/**
* 审核金久信公正银联资料
* @url admin/system/user/sys/changeNotaryUnionPayProfileStatus 前端调用的url参数地址
*/
main: async (event) => {
const {data = {}, util} = event;
const {vk} = util;
const {id, status, refuseReason = null} = data;
const user = await vk.baseDao.findByWhereJson({
dbName: 'uni-id-users',
whereJson: {_id: id}
});
if (!user || !user[PROFILE_KEY]) {
return {
code: -1,
msg: '未找到银联资料'
};
}
const profile = {
...user[PROFILE_KEY],
status,
refuseReason: status === 2 ? refuseReason : null,
reviewTime: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
reviewTimestamp: Date.now(),
};
await vk.baseDao.updateById({
dbName: 'uni-id-users',
id,
dataJson: {
[PROFILE_KEY]: profile,
isNotaryBusiness: status === 1 ? 1 : 0
}
});
await vk.baseDao.add({
dbName: "jjx-message",
dataJson: {
uid: id,
title: '银联资料审核结果',
content: `尊敬的用户,您的金久信公正银联资料已${status === 1 ? '审核通过' : '审核拒绝'}。${status === 2 && refuseReason ? `拒绝原因:${refuseReason}` : ''}`,
type: 'notary-union-pay-profile',
hasRead: false
}
});
return {
code: 0,
msg: '操作成功'
};
}
}
@@ -0,0 +1,32 @@
module.exports = {
/**
* 删除用户
* @url admin/system/user/sys/delete 前端调用的url参数地址
* data 请求参数 说明
* @param {String} _id 用户ID
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { _id } = data;
if (vk.pubfn.isNullOne(_id)) {
return { code: -1, msg: '_id不能为空' };
}
if (uid === _id) {
return { code: -1, msg: '请勿删除当前登录账户!' };
}
// 执行数据库API请求
res.num = await vk.baseDao.deleteById({
dbName: "uni-id-users",
id:_id
});
return res;
}
}
@@ -0,0 +1,59 @@
module.exports = {
/**
* 查询用户列表(可登录后台的)
* @url admin/system/user/sys/getList 前端调用的url参数地址
* data 请求参数 说明
* @param {Number} pageIndex 当前页码
* @param {Number} pageSize 每页显示数量
* @param {Array<Object>} sortRule 排序规则
* @param {object} formData 查询条件数据源
* @param {Array<Object>} columns 查询条件规则
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { dcloud_appid, appids } = data.formData || {};
let whereJson = {};
if (dcloud_appid) {
if (dcloud_appid === "___empty-array___") {
whereJson["dcloud_appid"] = [];
} else if (dcloud_appid === "___error___") {
whereJson["dcloud_appid"] = _.and(_.exists(true), _.nin(appids));
} else if (dcloud_appid === "___non-existent___") {
whereJson["dcloud_appid"] = _.exists(false);
} else {
whereJson["dcloud_appid"] = _.or(_.eq(dcloud_appid), _.exists(false));
}
}
let dbName = "uni-id-users";
res = await vk.baseDao.getTableData({
dbName,
data,
whereJson,
sortArr: [{ "name": "register_date", "type": "desc" }],
// 副表列表
foreignDB: [{
dbName: "opendb-app-list",
localKey: "dcloud_appid",
foreignKey: "appid",
localKeyType: "array",
as: "appList",
limit: 500
}],
});
for (let i = 0; i < res.rows.length; i++) {
if (res.rows[i].isNotaryBusiness === undefined || res.rows[i].isNotaryBusiness === null) {
res.rows[i].isNotaryBusiness = res.rows[i].notaryUnionPayProfile && res.rows[i].notaryUnionPayProfile.status === 1 ? 1 : 0;
}
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,27 @@
module.exports = {
/**
* 强制重置用户密码
* @url admin/system/user/sys/resetPassword 前端调用的url参数地址
* data 请求参数 说明
* @param {String} user_id 用户ID
* @param {String} password 重置后的密码
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { uniID, customUtil, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: "" };
// 业务逻辑开始-----------------------------------------------------------
let { user_id, password } = data;
// 重置密码
res = await uniID.resetPwd({
uid: user_id,
password
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,102 @@
const formRules = require("../util/formRules.js");
module.exports = {
/**
* 修改用户信息
* @url admin/system/user/sys/update 前端调用的url参数地址
* data 请求参数 说明
* @param {String} _id 用户ID
* @param {String} nickname 昵称
* @param {String} gender 性别
* @param {Boolean} mobile 手机号
* @param {String} comment 备注
* @param {Array} dcloud_appid 允许登录的应用列表
* @param {Number} login_appid_type 0:全部应用 1:部分应用
* res 返回参数说明
* @param {Number} code 错误码,0表示成功
* @param {String} msg 详细信息
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let {
_id,
nickname,
gender,
mobile,
email,
comment,
allow_login_background,
dcloud_appid = [],
login_appid_type
} = data;
let mobile_confirmed;
let email_confirmed;
// 参数合法校验开始-----------------------------------------------------------
let formRulesRes = await formRules.update(event);
if (formRulesRes.code !== 0) {
return formRulesRes;
}
// 参数合法校验结束-----------------------------------------------------------
let dbName = "uni-id-users";
// 检测mobile
if (mobile) {
let num = await vk.baseDao.count({
dbName,
whereJson: {
mobile: mobile,
_id: _.neq(_id)
}
});
if (num > 0) return { code: -1, msg: `手机号【${mobile}】已注册!` };
mobile_confirmed = 1; // 设置该手机号为已验证(否则无法通过手机号进行登录)
}
// 检测email
if (email) {
let num = await vk.baseDao.count({
dbName,
whereJson: {
email: email,
_id: _.neq(_id)
}
});
if (num > 0) return { code: -1, msg: `邮箱【${email}】已注册!` };
email_confirmed = 1; // 设置该邮箱为已验证(否则无法通过邮箱进行登录)
}
let dataJson = {
nickname,
gender,
mobile,
mobile_confirmed,
email,
email_confirmed,
comment,
allow_login_background
};
// 设置允许登录的应用列表
if (login_appid_type && typeof uniID.setAuthorizedAppLogin === "function") {
let setAuthorizedAppLoginRes = await uniID.setAuthorizedAppLogin({
uid: _id,
dcloudAppidList: dcloud_appid
});
if (setAuthorizedAppLoginRes.code !== 0) {
return setAuthorizedAppLoginRes;
}
} else if (login_appid_type === 0) {
dataJson["dcloud_appid"] = _.remove();
}
// 执行数据库API请求
res.num = await vk.baseDao.updateById({
dbName,
id: _id,
dataJson
});
return res;
}
}