20261008
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
const requireFn = function(path) {
|
||||
return require(path);
|
||||
}
|
||||
const initConfig = {
|
||||
baseDir: __dirname, // 云函数根目录地址
|
||||
requireFn,
|
||||
customUtil :{
|
||||
// 你自己的工具包,写这里后即可听过customUtil.mynpm1调用
|
||||
// mynpm1:mynpm1
|
||||
}
|
||||
};
|
||||
module.exports = initConfig;
|
||||
@@ -0,0 +1,29 @@
|
||||
// 加载模块 - 数据库dao层 API 请勿改动此文件-----------------------------------
|
||||
const modulesPath = __dirname + "/modules";
|
||||
const fs = require('fs');
|
||||
const fileList = fs.readdirSync(modulesPath);
|
||||
const moduleObj = {};
|
||||
const modulesNames = [];
|
||||
fileList.map((file, index) => {
|
||||
if (file.indexOf("Dao.js") > -1) {
|
||||
modulesNames.push(file.substring(0, file.length - 3));
|
||||
}
|
||||
});
|
||||
modulesNames.map((modulesName, index) => {
|
||||
try {
|
||||
moduleObj[modulesName] = require(modulesPath + "/" + modulesName);
|
||||
} catch (err) {
|
||||
console.error(`【异常】加载【${modulesName}】异常,请检查!↓↓↓请查看下方的错误提示↓↓↓`);
|
||||
console.error(err);
|
||||
console.error(`【异常】加载【${modulesName}】异常,请检查!↑↑↑请查看上方的错误提示↑↑↑`);
|
||||
}
|
||||
});
|
||||
moduleObj.init = function(obj) {
|
||||
modulesNames.map((modulesName, index) => {
|
||||
if (typeof moduleObj[modulesName] === "object" && typeof moduleObj[modulesName].init === "function") {
|
||||
moduleObj[modulesName].init(obj);
|
||||
}
|
||||
});
|
||||
}
|
||||
module.exports = moduleObj;
|
||||
// 加载模块 - 数据库dao层 API 请勿改动此文件-----------------------------------
|
||||
@@ -0,0 +1,621 @@
|
||||
// 涉及的表名
|
||||
const dbName = {
|
||||
user: "uni-id-users", // 用户
|
||||
};
|
||||
|
||||
var dao = {};
|
||||
var util = {};
|
||||
// 初始化
|
||||
dao.init = function(obj) {
|
||||
util = obj;
|
||||
}
|
||||
/**
|
||||
* 获取用户信息
|
||||
* 调用示例
|
||||
* await vk.daoCenter.userDao.findById(user_id);
|
||||
* data 请求参数说明
|
||||
* @param {String} user_id 用户ID
|
||||
*/
|
||||
dao.findById = async (user_id) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.findById({
|
||||
dbName: dbName.user,
|
||||
id: user_id,
|
||||
fieldJson: { token: false, password: false },
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 根据whereJson获取单条记录
|
||||
* @param {Object} whereJson 条件
|
||||
* @param {Object} fieldJson 字段显示规则
|
||||
* 调用示例
|
||||
let userInfo = await vk.daoCenter.userDao.findByWhereJson({
|
||||
|
||||
});
|
||||
*/
|
||||
dao.findByWhereJson = async (whereJson, fieldJson={ token: false, password: false }) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.findByWhereJson({
|
||||
dbName: dbName.user,
|
||||
whereJson,
|
||||
fieldJson
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 根据邀请码获取用户信息
|
||||
* let inviterUserInfo = await vk.daoCenter.userDao.findByInviteCode(invite_code);
|
||||
* @param {String} invite_code 邀请码
|
||||
*/
|
||||
dao.findByInviteCode = async (invite_code) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.findByWhereJson({
|
||||
dbName: dbName.user,
|
||||
whereJson: {
|
||||
my_invite_code: invite_code
|
||||
},
|
||||
fieldJson: { token: false, password: false }
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 增 - 添加一条记录
|
||||
* @param {Object} dataJson 添加的数据
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.add({
|
||||
|
||||
});
|
||||
或
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.add({
|
||||
db: transaction,
|
||||
dataJson: {
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.add = async (obj) => {
|
||||
let { vk, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
if (obj.db && obj.dataJson) {
|
||||
// 支持事务
|
||||
res = await vk.baseDao.add({
|
||||
...obj,
|
||||
cancelAddTime: true, // 因为user表使用了register_date作为创建时间
|
||||
dbName: dbName.user,
|
||||
});
|
||||
} else {
|
||||
// 不支持事务
|
||||
res = await vk.baseDao.add({
|
||||
dbName: dbName.user,
|
||||
cancelAddTime: true, // 因为user表使用了register_date作为创建时间
|
||||
dataJson: obj
|
||||
});
|
||||
}
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 增 - 添加多条记录
|
||||
* @param {Object} dataJson 添加的数据
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.adds(dataArr);
|
||||
*/
|
||||
dao.adds = async (dataArr) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.adds({
|
||||
dbName: dbName.user,
|
||||
cancelAddTime: true, // 因为user表使用了register_date作为创建时间
|
||||
dataJson: dataArr
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 删 - 删除多条记录
|
||||
* @param {Object} whereJson 条件
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.del({
|
||||
|
||||
});
|
||||
*/
|
||||
dao.del = async (whereJson) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.del({
|
||||
dbName: dbName.user,
|
||||
whereJson
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 删 - 据ID删除单条数据
|
||||
* @param {String} _id
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.deleteById(_id);
|
||||
或
|
||||
await vk.daoCenter.userDao.deleteById(_id, transaction);
|
||||
*/
|
||||
dao.deleteById = async (_id, db) => {
|
||||
let { vk, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.deleteById({
|
||||
db,
|
||||
dbName: dbName.user,
|
||||
id: _id
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 改 - 批量修改
|
||||
* @param {Object} whereJson 条件
|
||||
* @param {Object} dataJson 修改的数据
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.update({
|
||||
whereJson:{
|
||||
|
||||
},
|
||||
dataJson:{
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.update = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.update({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 改 - 根据id修改
|
||||
* @param {Object} whereJson 条件
|
||||
* @param {Object} dataJson 修改的数据
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.updateById({
|
||||
id: uid,
|
||||
dataJson:{
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.updateById = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.updateById({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 改 - 更新并返回更新后的数据(无论条件匹配到多少条记录,只会修改第一条记录,同时返回修改后的数据)
|
||||
* @param {Object} whereJson 条件
|
||||
* @param {Object} dataJson 修改的数据
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.updateAndReturn({
|
||||
whereJson:{
|
||||
|
||||
},
|
||||
dataJson:{
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.updateAndReturn = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.updateAndReturn({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 获取记录总条数
|
||||
* @param {Object} whereJson 条件
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.count(whereJson);
|
||||
*/
|
||||
dao.count = async (whereJson) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.count({
|
||||
dbName: dbName.user,
|
||||
whereJson
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 查 - 求和
|
||||
* @param {String} fieldName 需要求和的字段名
|
||||
* @param {Object} whereJson 筛选条件
|
||||
* 调用示例
|
||||
let userSum = await vk.daoCenter.userDao.sum({
|
||||
fieldName: "",
|
||||
whereJson: {
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.sum = async (obj) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.sum({
|
||||
...obj,
|
||||
dbName: dbName.user,
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 求最大值
|
||||
* @param {String} fieldName 需要求最大值的字段名
|
||||
* @param {Object} whereJson 筛选条件
|
||||
* 调用示例
|
||||
let userMax = await vk.daoCenter.userDao.max({
|
||||
fieldName: "",
|
||||
whereJson: {
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.max = async (obj) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.max({
|
||||
...obj,
|
||||
dbName: dbName.user,
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 求最小值
|
||||
* @param {String} fieldName 需要求最小值的字段名
|
||||
* @param {Object} whereJson 筛选条件
|
||||
* 调用示例
|
||||
let userMin = await vk.daoCenter.userDao.min({
|
||||
fieldName: "",
|
||||
whereJson: {
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.min = async (obj) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.min({
|
||||
...obj,
|
||||
dbName: dbName.user,
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 求最平均值
|
||||
* @param {String} fieldName 需要求最平均值的字段名
|
||||
* @param {Object} whereJson 筛选条件
|
||||
* 调用示例
|
||||
let userAvg = await vk.daoCenter.userDao.avg({
|
||||
fieldName: "",
|
||||
whereJson: {
|
||||
|
||||
}
|
||||
});
|
||||
*/
|
||||
dao.avg = async (obj) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.avg({
|
||||
...obj,
|
||||
dbName: dbName.user,
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 获取数据列表
|
||||
* 调用示例
|
||||
let userList = await vk.daoCenter.userDao.select({
|
||||
pageIndex:1,
|
||||
pageSize:20,
|
||||
getMain:false,
|
||||
whereJson:{
|
||||
|
||||
},
|
||||
fieldJson:{},
|
||||
sortArr:[{ "name":"_id", "type":"desc" }],
|
||||
});
|
||||
*/
|
||||
dao.select = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.select({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 获取数据列表
|
||||
* 调用示例
|
||||
let userList = await vk.daoCenter.userDao.selects({
|
||||
pageIndex:1,
|
||||
pageSize:20,
|
||||
getMain:false,
|
||||
whereJson:{
|
||||
|
||||
},
|
||||
fieldJson:{},
|
||||
sortArr:[{ "name":"_id", "type":"desc" }],
|
||||
// 副表列表
|
||||
foreignDB:[
|
||||
{
|
||||
dbName:"副表表名",
|
||||
localKey:"主表外键名",
|
||||
foreignKey:"副表外键名",
|
||||
as:"副表as字段",
|
||||
limit:1
|
||||
}
|
||||
]
|
||||
});
|
||||
*/
|
||||
dao.selects = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.selects({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 查 - 获取数据列表
|
||||
* 调用示例
|
||||
res = await vk.daoCenter.userDao.getTableData({
|
||||
data
|
||||
});
|
||||
*/
|
||||
dao.getTableData = async (obj = {}) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = {};
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await vk.baseDao.getTableData({
|
||||
...obj,
|
||||
dbName: dbName.user
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户信息(旧版)
|
||||
* _id
|
||||
* username
|
||||
* mobile
|
||||
* email
|
||||
* wx_openid.app-plus
|
||||
* wx_openid.mp-weixin
|
||||
* wx_unionid
|
||||
* ali_openid
|
||||
* my_invite_code
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.findByUserInfo({
|
||||
mobile:mobile
|
||||
});
|
||||
* data 请求参数说明
|
||||
* @param {Object} userInfo 用户信息
|
||||
*/
|
||||
dao.findByUserInfo = async (userInfo) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res;
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
let whereJson = {};
|
||||
let list = [
|
||||
"_id",
|
||||
"username",
|
||||
"mobile",
|
||||
"email",
|
||||
"wx_openid.app-plus",
|
||||
"wx_openid.mp-weixin",
|
||||
"wx_unionid",
|
||||
"ali_openid",
|
||||
"my_invite_code"
|
||||
];
|
||||
let orArr = [];
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
let keyName = list[i];
|
||||
let orObj = {};
|
||||
if (vk.pubfn.isNotNull(userInfo[keyName])) orObj[keyName] = userInfo[keyName];
|
||||
if (vk.pubfn.isNotNull(orObj)) {
|
||||
orArr.push(orObj);
|
||||
}
|
||||
}
|
||||
if (orArr.length > 0) {
|
||||
whereJson = _.or(orArr);
|
||||
res = await vk.baseDao.findByWhereJson({
|
||||
dbName: dbName.user,
|
||||
fieldJson: { token: false, password: false },
|
||||
whereJson: whereJson
|
||||
});
|
||||
}
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
/**
|
||||
* 根据ID数组获取用户列表 最多支持500个
|
||||
* 调用示例
|
||||
* await vk.daoCenter.userDao.listByIds(userIdArr);
|
||||
* data 请求参数说明
|
||||
* @param {Array} userIdArr 用户ID数组
|
||||
*/
|
||||
dao.listByIds = async (userIdArr) => {
|
||||
let { vk, db, _ } = util;
|
||||
let res = await vk.baseDao.select({
|
||||
dbName: dbName.user,
|
||||
pageIndex: 1,
|
||||
pageSize: 500,
|
||||
getMain: true,
|
||||
fieldJson: { token: false, password: false },
|
||||
whereJson: {
|
||||
_id: _.in(userIdArr)
|
||||
},
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
/**
|
||||
* 根据手机号直接注册账号并登录
|
||||
* 若手机号已存在,则直接登录
|
||||
* @param {Object} data 参数
|
||||
* mobile 手机号 必填
|
||||
* password 初始密码
|
||||
* inviteCode 邀请人的邀请码
|
||||
* myInviteCode 设置当前注册用户自己的邀请码
|
||||
* needPermission 设置为true时会在checkToken时返回用户权限(permission),建议在管理控制台中使用
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.registerUserByMobile({
|
||||
mobile,
|
||||
});
|
||||
*/
|
||||
dao.registerUserByMobile = async (data) => {
|
||||
let { vk, db, _, uniID } = util;
|
||||
let res = {};
|
||||
let {
|
||||
mobile,
|
||||
password,
|
||||
inviteCode,
|
||||
myInviteCode,
|
||||
needPermission
|
||||
} = data;
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
let code = vk.pubfn.random(6);
|
||||
// 设置验证码
|
||||
await uniID.setVerifyCode({
|
||||
mobile,
|
||||
code,
|
||||
expiresIn: 60,
|
||||
type: "login"
|
||||
});
|
||||
// 若手机号不存在,则注册并登录。存在,则直接登录。
|
||||
res = await uniID.loginBySms({
|
||||
mobile,
|
||||
code,
|
||||
password,
|
||||
inviteCode,
|
||||
myInviteCode,
|
||||
needPermission
|
||||
});
|
||||
if (res.uid && vk.pubfn.isNull(res.userInfo)) {
|
||||
res.userInfo = await vk.daoCenter.userDao.findById(res.uid);
|
||||
}
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
* data 请求参数说明
|
||||
* @param {String} uid 用户ID
|
||||
* @param {String} password 需要重置的密码
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.resetPwd({
|
||||
uid: uid,
|
||||
password: "123456"
|
||||
});
|
||||
*/
|
||||
dao.resetPwd = async (data) => {
|
||||
let { vk, db, _, uniID } = util;
|
||||
let res = {};
|
||||
let {
|
||||
uid,
|
||||
password
|
||||
} = data;
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
res = await uniID.resetPwd({ uid, password });
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取一个未被使用的6位数分享码
|
||||
* 调用示例
|
||||
await vk.daoCenter.userDao.getValidInviteCode();
|
||||
*/
|
||||
dao.getValidInviteCode = async (data) => {
|
||||
let { vk, db, _ } = util;
|
||||
// 数据库操作开始-----------------------------------------------------------
|
||||
let inviteCode = await vk.pubfn.randomAsync(6, "23456789ABCDEFGHJKLMNPQRSTUVWXYZ", async (val)=>{
|
||||
let num = await vk.baseDao.count({
|
||||
dbName: dbName.user,
|
||||
whereJson:{
|
||||
my_invite_code: val
|
||||
}
|
||||
}, 10); // 最大重试10次
|
||||
return num === 0 ? true : false;
|
||||
});
|
||||
// 数据库操作结束-----------------------------------------------------------
|
||||
return inviteCode;
|
||||
};
|
||||
|
||||
module.exports = dao;
|
||||
@@ -0,0 +1,7 @@
|
||||
'use strict';
|
||||
// 注意:此为云函数路由入口文件,请勿修改此文件代码,你自己的云函数逻辑应写在service目录下
|
||||
const vkCloud = require('vk-unicloud'); // 引入 vk-unicloud
|
||||
const vk = vkCloud.createInstance(require('./config.js')); // 通过 vkCloud.createInstance 创建 vk 实例
|
||||
exports.main = async (event, context) => {
|
||||
return await vk.router({ event, context, vk });
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
// 加载模块 - 中间件 请勿改动此文件-----------------------------------
|
||||
const modulesPath = __dirname+"/modules";
|
||||
const fs = require('fs');
|
||||
const fileList = fs.readdirSync(modulesPath);
|
||||
var moduleList = [];
|
||||
var modulesNames = [];
|
||||
|
||||
fileList.map((file, index) => {
|
||||
if(file.indexOf(".js") > -1){
|
||||
modulesNames.push(file.substring(0,file.length-3));
|
||||
}
|
||||
});
|
||||
|
||||
modulesNames.map((modulesName, index) => {
|
||||
try {
|
||||
moduleList.push(require(modulesPath+"/"+modulesName));
|
||||
} catch (err) {
|
||||
console.error(`【异常】加载中间件【${modulesName}】异常,请检查!↓↓↓请查看下方的错误提示↓↓↓`);
|
||||
console.error(err);
|
||||
console.error(`【异常】加载中间件【${modulesName}】异常,请检查!↑↑↑请查看上方的错误提示↑↑↑`);
|
||||
}
|
||||
});
|
||||
|
||||
var middlewareList = [];
|
||||
moduleList.map((moduleItem, index) => {
|
||||
middlewareList = middlewareList.concat(moduleItem);
|
||||
});
|
||||
module.exports = middlewareList;
|
||||
// 加载模块 - 中间件 请勿改动此文件-----------------------------------
|
||||
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* 添加操作日志
|
||||
*/
|
||||
|
||||
// 需要添加日志的云函数列表
|
||||
const urlList = [
|
||||
{ url: "admin/system/user/sys/add", title: "用户添加" },
|
||||
{ url: "admin/system/user/sys/update", title: "用户修改" },
|
||||
{ url: "admin/system/user/sys/delete", title: "用户删除" },
|
||||
{ url: "admin/system/user/sys/batchUpdateStatus", title: "批量修改用户冻结状态" }
|
||||
];
|
||||
|
||||
// 生成regExp规则
|
||||
let regExp = urlList.map((item, index) => {
|
||||
return `^${item.url}$`;
|
||||
});
|
||||
|
||||
module.exports = [{
|
||||
id: "addAdminLog",
|
||||
// 需要添加操作日志的云函数列表
|
||||
regExp,
|
||||
description: "添加admin操作日志",
|
||||
index: 999, // 确保最后执行即可
|
||||
mode: "onActionExecuted", // 可选 onActionExecuting onActionExecuted
|
||||
enable: true, // 通过设置enable=false可以关闭该中间件
|
||||
main: async function(event, serviceRes) {
|
||||
let { url, data = {}, uniIdToken, util, filterResponse, originalParam } = event;
|
||||
let { uniID, config, vk, db, _ } = util;
|
||||
let { userInfo = {} } = filterResponse;
|
||||
let res = serviceRes;
|
||||
try {
|
||||
// 此处加 try catch 保证即使添加日志环节出错,不影响业务运行。
|
||||
if (res.code === 0) {
|
||||
// 只有请求成功的请求才添加日志
|
||||
let item = vk.pubfn.getListItem(urlList, "url", url);
|
||||
let title = item && item.title ? item.title : "未分类";
|
||||
delete data.uid;
|
||||
// 日志写入数据库
|
||||
// 获取请求id(只有云端云函数才有请求id,本地运行的云函数无请求id)
|
||||
let request_id;
|
||||
if (typeof vk.pubfn.getUniCloudRequestId === "function") {
|
||||
request_id = vk.pubfn.getUniCloudRequestId();
|
||||
}
|
||||
await vk.baseDao.add({
|
||||
dbName: "opendb-admin-log",
|
||||
dataJson: {
|
||||
user_id: userInfo._id,
|
||||
user_name: userInfo.nickname,
|
||||
title,
|
||||
ip: originalParam.context.CLIENTIP,
|
||||
url: url,
|
||||
request_param: data,
|
||||
response: serviceRes,
|
||||
request_id
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("添加日志异常", err);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}]
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* 自定义过滤器 - 前置
|
||||
*/
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
id: "xxxx1",
|
||||
regExp: "^xxx1/kh", // 正则匹配规则,这个是以^xxx1/kh/开头的云函数会被拦截
|
||||
description: "这里是你过滤器1号的描述",
|
||||
index: 310,// 此处必须>300 因为检测用户是否登录的过滤器的index是200(sys是300,因此为了能通用,建议填大于300的值)(越小越先执行)
|
||||
mode:"onActionExecuting", // 可选 onActionExecuting onActionExecuted
|
||||
main: async function(event) {
|
||||
// 这里是拦截规则,可以查数据库,最终code:0 代表通过,其他均为未通过,msg是被拦截的原因
|
||||
let { data = {}, util } = event;
|
||||
let { vk } = util;
|
||||
return {
|
||||
code: -1,
|
||||
msg: "被自定义过滤器1号拦截了"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* 自定义过滤器 - 后置
|
||||
*/
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
id: "xxxx2",
|
||||
regExp: "^xxx2/kh", // 正则匹配规则,这个是以^xxx2/kh/开头的云函数会被拦截
|
||||
description: "这里是你过滤器2号的描述",
|
||||
index: 310,// 此处必须>300 因为检测用户是否登录的过滤器的index是200(sys是300,因此为了能通用,建议填大于300的值)(越小越先执行)
|
||||
mode:"onActionExecuted", // 可选 onActionExecuting onActionExecuted
|
||||
main: async function(event, serviceRes) {
|
||||
let { data = {}, util } = event;
|
||||
let { vk } = util;
|
||||
serviceRes.msg = "被过滤器修改后的值";
|
||||
return serviceRes;
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* 注册成功后,统一给用户初始化字段值
|
||||
*/
|
||||
|
||||
module.exports = [{
|
||||
id: "registerInit",
|
||||
// 符合下方正则条件的云函数才会进入该中间件
|
||||
regExp: [
|
||||
"^user/pub/register(.*)",
|
||||
"^user/pub/login(.*)",
|
||||
"^admin/system/user/sys/add"
|
||||
],
|
||||
description: "注册成功后,统一给用户初始化字段值",
|
||||
index: 301,
|
||||
mode: "onActionExecuted", // 可选 onActionExecuting onActionExecuted
|
||||
enable: true, // 通过设置enable=false可以关闭该中间件
|
||||
main: async function(event, serviceRes) {
|
||||
let { data = {}, util, filterResponse, originalParam } = event;
|
||||
let { vk, config, db, _ } = util;
|
||||
let res = serviceRes;
|
||||
|
||||
// 初始化用户信息(只在用户注册成功时才执行下面的代码)
|
||||
if (res.code === 0 && res.type === "register" && res.uid) {
|
||||
let uniIdConfig = vk.pubfn.getUniIdConfig(config); // 获取uniID的配置
|
||||
// 你要初始化的字段数据
|
||||
let initData = {
|
||||
// 这里可以加你想要初始化的其他字段,如 status字段初始化为 0
|
||||
status: 0, // 用户状态:0 正常 1 禁用 2 审核中 3 审核拒绝
|
||||
|
||||
};
|
||||
// 如果开启了删除dcloud_appid功能,则初始化数据带上 dcloud_appid: _.remove()
|
||||
if (uniIdConfig.removeDcloudAppid) {
|
||||
// remove功能是删除该字段(代表关闭隔离不同端用户功能),该用户在其他项目中登录时就不会产生新的账号 详见:https://uniapp.dcloud.io/uniCloud/uni-id.html#isolate-user
|
||||
initData["dcloud_appid"] = _.remove();
|
||||
}
|
||||
// 修改用户信息,并返回修改后的用户信息
|
||||
res.userInfo = await vk.daoCenter.userDao.updateAndReturn({
|
||||
whereJson: {
|
||||
_id: res.uid,
|
||||
},
|
||||
dataJson: initData
|
||||
});
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}]
|
||||
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* 返回用户信息
|
||||
* 由于通常前端需要对用户信息、登录token进行缓存
|
||||
* 故云函数对用户进行修改后,需要返回给前端最新的用户信息,以便前端始终能够缓存最新用户信息
|
||||
*/
|
||||
|
||||
module.exports = [{
|
||||
id: "returnUserInfo",
|
||||
regExp: [
|
||||
"^user/pub/login(.*)",
|
||||
"^user/pub/register(.*)",
|
||||
"^user/kh/bind(.*)",
|
||||
"^user/kh/unbind(.*)",
|
||||
"^user/kh/update(.*)",
|
||||
"^user/kh/set(.*)",
|
||||
"^user/kh/acceptInvite$",
|
||||
"^user/kh/getMyUserInfo$",
|
||||
"^client/user/pub/register(.*)",
|
||||
"^client/user/pub/login(.*)"
|
||||
],
|
||||
description: "用于指定哪些云函数请求后需要通知前端更新userInfo、token、tokenExpired",
|
||||
index: 310,
|
||||
mode: "onActionExecuted", // 可选 onActionExecuting onActionExecuted
|
||||
enable: true, // 通过设置enable=false可以关闭该中间件
|
||||
main: async function(event, serviceRes) {
|
||||
let { data = {}, uniIdToken, util, filterResponse, originalParam } = event;
|
||||
let { uniID, config = {}, vk, db, _ } = util;
|
||||
let { userInfo = {} } = filterResponse;
|
||||
let res = serviceRes;
|
||||
if (res.code === 0) {
|
||||
if (vk.pubfn.isNull(res.userInfo)) {
|
||||
if (vk.pubfn.isNotNull(res.uid)) {
|
||||
res.userInfo = await vk.daoCenter.userDao.findById(res.uid);
|
||||
} else if (vk.pubfn.isNotNull(uniIdToken)) {
|
||||
let tokenRes = await uniID.checkToken(uniIdToken);
|
||||
if (tokenRes.code === 0) {
|
||||
res.userInfo = tokenRes.userInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (vk.pubfn.isNotNull(res.userInfo)) {
|
||||
if (res.type === "login") {
|
||||
// 如果是登录
|
||||
// 判断用户当前 token数量 是否超过了最大限制 若 tokenMaxLimit 设置为0,代表不限制
|
||||
let tokenMaxLimit = config.uni && config.uni.tokenMaxLimit;
|
||||
if (tokenMaxLimit > 0) {
|
||||
let newUserInfo = await vk.baseDao.findById({
|
||||
dbName: "uni-id-users",
|
||||
id: res.userInfo._id,
|
||||
fieldJson: { token: true }
|
||||
});
|
||||
let token = newUserInfo.token || [];
|
||||
if (token.length > tokenMaxLimit) {
|
||||
// 淘汰旧的 token
|
||||
token = token.splice(tokenMaxLimit * -1);
|
||||
await vk.baseDao.updateById({
|
||||
dbName: "uni-id-users",
|
||||
id: res.userInfo._id,
|
||||
dataJson: {
|
||||
token: _.set(token)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
res.needUpdateUserInfo = true;
|
||||
// 此处可以继续去除你不想返回给前端的字段
|
||||
let deleteKeys = ["token", "password"];
|
||||
res.userInfo = vk.pubfn.deleteObjectKeys(res.userInfo, deleteKeys);
|
||||
}
|
||||
if (vk.pubfn.isNotNullAll(res.token, res.tokenExpired)) {
|
||||
// 当返回vk_uni_token对象后,框架会让token自动被前端缓存,前端不需要手动再保存token至本地缓存了。
|
||||
res.vk_uni_token = {
|
||||
token: res.token,
|
||||
tokenExpired: res.tokenExpired
|
||||
};
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}]
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "router",
|
||||
"version": "1.0.0",
|
||||
"description": "在router目录下执行 npm i",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"uni-config-center": "file:../../../uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center",
|
||||
"uni-id": "file:../../../uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id",
|
||||
"vk-unicloud": "file:../../../uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud"
|
||||
},
|
||||
"private": true,
|
||||
"cloudfunction-config": {
|
||||
"concurrency": 1,
|
||||
"memorySize": 512,
|
||||
"path": "",
|
||||
"timeout": 60,
|
||||
"triggers": [],
|
||||
"runtime": "Nodejs12",
|
||||
"keepRunningAfterReturn": false
|
||||
},
|
||||
"extensions": {}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
// 运行方法:右键云函数根目录(如router目录),并点击【运行-本地云函数】即可。
|
||||
// 若函数需要登录才能访问,则填写uni_id_token的值,值为对应用户的token(可直接从数据库中复制1个过来)
|
||||
// $url 是 云函数运行路径,如 user/pub/checkToken
|
||||
// data 是 请求参数,为标准json格式(属性名需要加双引号)
|
||||
|
||||
{
|
||||
"uni_id_token":"",
|
||||
"$url":"template/openapi/weixin/pub/getTemplateList",
|
||||
"data":{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加单条数据
|
||||
* @url admin/kong/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* 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 : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let {
|
||||
params1,
|
||||
params2,
|
||||
params3
|
||||
} = data;
|
||||
// 这里需要把 params1 params2 params3 改成你数据库里允许用户添加的字段
|
||||
let dbName = "vk-test";
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson:{
|
||||
params1,
|
||||
params2,
|
||||
params3
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 数据删除
|
||||
* @url admin/kong/sys/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* 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 : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let { _id } = data;
|
||||
if(vk.pubfn.isNull(_id)){
|
||||
return { code : -1, msg : 'id不能为空' };
|
||||
}
|
||||
let dbName = "vk-test";
|
||||
await vk.baseDao.deleteById({
|
||||
dbName,
|
||||
id:_id
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 查询多条记录 分页
|
||||
* @url admin/kong/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 dbName = "vk-test";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改数据
|
||||
* @url admin/kong/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* 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 : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let {
|
||||
_id,
|
||||
params1,
|
||||
params2,
|
||||
params3
|
||||
} = data;
|
||||
// 这里需要把 params1 params2 params3 改成你数据库里允许用户添加的字段
|
||||
if(vk.pubfn.isNullOne(_id)){
|
||||
return { code : -1, msg : '参数错误' };
|
||||
}
|
||||
let dbName = "vk-test";
|
||||
await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id:_id,
|
||||
dataJson:{
|
||||
params1,
|
||||
params2,
|
||||
params3
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 查询用户列表(用于后端用户选择器的搜索数据)
|
||||
* @url admin/select/kh/user 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} searchvalue 搜索内容
|
||||
* 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 { searchvalue } = data;
|
||||
if (!searchvalue) {
|
||||
return { code: 0, list: [] };
|
||||
}
|
||||
let dbName = "uni-id-users";
|
||||
let fieldJson = {
|
||||
_id: true,
|
||||
username: true,
|
||||
nickname: true,
|
||||
mobile: true,
|
||||
};
|
||||
let sortArr = [];
|
||||
// 排序规则开始-----------------------------------------------------------
|
||||
sortArr.push({
|
||||
"name": "register_date",
|
||||
"type": "desc"
|
||||
});
|
||||
// 排序规则结束-----------------------------------------------------------
|
||||
// 查询条件开始-----------------------------------------------------------
|
||||
let whereJson = {};
|
||||
let andArr = [];
|
||||
if (searchvalue) {
|
||||
// 查询包含searchvalue的数据
|
||||
try {
|
||||
let regExp = new RegExp(searchvalue);
|
||||
let orObj = _.or([
|
||||
{
|
||||
"username": regExp
|
||||
},
|
||||
{
|
||||
"nickname": regExp
|
||||
},
|
||||
{
|
||||
"mobile": regExp
|
||||
},
|
||||
{
|
||||
"_id": searchvalue
|
||||
}
|
||||
]);
|
||||
andArr.push(orObj);
|
||||
} catch (err) {
|
||||
return { code: -1, msg: '请输入合法的查询内容' };
|
||||
}
|
||||
}
|
||||
if (andArr.length > 0) {
|
||||
whereJson = _.and(andArr);
|
||||
}
|
||||
// 查询条件结束-----------------------------------------------------------
|
||||
let selectRes = await vk.baseDao.select({
|
||||
dbName: dbName,
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
fieldJson: fieldJson,
|
||||
whereJson: whereJson,
|
||||
sortArr: sortArr
|
||||
}, util);
|
||||
let list = [];
|
||||
for (let i in selectRes.rows) {
|
||||
let item = selectRes.rows[i];
|
||||
let value = item._id;
|
||||
let label = item.nickname || "未设置昵称";
|
||||
if (item.mobile) {
|
||||
item.mobile = vk.pubfn.hidden(item.mobile, 3, 4);
|
||||
label += `(${item.mobile})`;
|
||||
} else if (item.username) {
|
||||
item.username = vk.pubfn.hidden(item.username, 2, 3);
|
||||
label += `(${item.username})`;
|
||||
}
|
||||
list.push({
|
||||
value: value,
|
||||
label: label
|
||||
});
|
||||
}
|
||||
res.list = list;
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加或修改
|
||||
* @url admin/system/app-upgrade-center/sys/addUpdate, 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} appid 应用的AppID
|
||||
* res 返回参数说明
|
||||
* @param {Number} code 错误码,0表示成功
|
||||
* @param {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code: 0, msg: 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
if (data.platformRadio && vk.pubfn.isNull(data.platform)) {
|
||||
data.platform = [data.platformRadio];
|
||||
}
|
||||
let {
|
||||
_id,
|
||||
appid,
|
||||
name,
|
||||
title,
|
||||
contents,
|
||||
platform,
|
||||
platformRadio,
|
||||
type,
|
||||
version,
|
||||
min_uni_version,
|
||||
url,
|
||||
stable_publish,
|
||||
is_silently,
|
||||
is_mandatory,
|
||||
create_env = "upgrade-center",
|
||||
store_list
|
||||
} = data;
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let mode = _id ? "update" : "add";
|
||||
let formRulesRes = await formRules[mode](event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
if (type === "wgt") {
|
||||
if (vk.pubfn.isNull(min_uni_version)) return { code: -1, msg: "最低app版本号不能为空" };
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
appid = appid.trim();
|
||||
let create_date = Date.now();
|
||||
let uni_platform = platform.indexOf("Android") > -1 ? "android" : "ios";
|
||||
let dbName = "opendb-app-versions";
|
||||
// 添加和修改公共的dataJson
|
||||
let dataJson = {
|
||||
title,
|
||||
contents,
|
||||
url,
|
||||
min_uni_version,
|
||||
stable_publish,
|
||||
is_silently,
|
||||
is_mandatory,
|
||||
store_list
|
||||
};
|
||||
|
||||
if (mode === "add") {
|
||||
// 获取最新的已发布的版本信息
|
||||
let info = await vk.baseDao.select({
|
||||
dbName,
|
||||
getCount: false,
|
||||
getMain: true,
|
||||
getOne: true,
|
||||
pageIndex: 1,
|
||||
pageSize: 1,
|
||||
whereJson: {
|
||||
appid,
|
||||
type,
|
||||
platform,
|
||||
stable_publish: true
|
||||
},
|
||||
sortArr: [{ name: "create_date", type: "desc" }],
|
||||
});
|
||||
// 版本必须比之前的版本高
|
||||
if (info && info.version && compareVersion(version, info.version) !== 1) {
|
||||
return { code: -1, msg: `版本必须大于${info.version}` };
|
||||
}
|
||||
// 添加
|
||||
vk.pubfn.objectAssign(dataJson, {
|
||||
appid,
|
||||
name,
|
||||
platform,
|
||||
version,
|
||||
type,
|
||||
create_date,
|
||||
uni_platform,
|
||||
create_env,
|
||||
});
|
||||
_id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson
|
||||
});
|
||||
if (_id) {
|
||||
res.success = true;
|
||||
res.msg = "添加成功";
|
||||
}
|
||||
} else {
|
||||
// 修改并返回修改后的数据
|
||||
res.info = await vk.baseDao.updateAndReturn({
|
||||
dbName,
|
||||
whereJson: {
|
||||
_id
|
||||
},
|
||||
dataJson
|
||||
});
|
||||
if (res.info) {
|
||||
res.success = true;
|
||||
res.msg = "修改成功";
|
||||
}
|
||||
}
|
||||
|
||||
if (res.success && dataJson.stable_publish) {
|
||||
// 将其他版本设置为已下线
|
||||
await vk.baseDao.update({
|
||||
dbName,
|
||||
whereJson: {
|
||||
appid,
|
||||
type,
|
||||
platform,
|
||||
stable_publish: true,
|
||||
_id: _.neq(_id)
|
||||
},
|
||||
dataJson: {
|
||||
stable_publish: false
|
||||
}
|
||||
});
|
||||
}
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 比较2个版本号的大小
|
||||
* 1 version1 > version2
|
||||
* 0 version1 = version2
|
||||
* -1 version1 < version2
|
||||
*/
|
||||
function compareVersion(version1, version2) {
|
||||
let arr1 = version1.split(".");
|
||||
let arr2 = version2.split(".");
|
||||
if (Number(arr1[0]) === Number(arr2[0]) && Number(arr1[1]) === Number(arr2[1]) && Number(arr1[2]) === Number(arr2[2])) {
|
||||
return 0;
|
||||
}
|
||||
if (Number(arr1[0]) > Number(arr2[0])) {
|
||||
return 1;
|
||||
}
|
||||
if (Number(arr1[0]) === Number(arr2[0]) && Number(arr1[1]) > Number(arr2[1])) {
|
||||
return 1;
|
||||
}
|
||||
if (Number(arr1[0]) === Number(arr2[0]) && Number(arr1[1]) === Number(arr2[1]) && Number(arr1[2]) > Number(arr2[2])) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system/app-upgrade-center/sys/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* res 返回参数说明
|
||||
* @param {Number} code 错误码,0表示成功
|
||||
* @param {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code: 0, msg: 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let { _id } = data;
|
||||
if (vk.pubfn.isNull(_id)) return { code: -1, msg: 'id不能为空' };
|
||||
let dbName = "opendb-app-versions";
|
||||
let info = await vk.baseDao.findById({
|
||||
dbName,
|
||||
id: _id,
|
||||
});
|
||||
if (vk.pubfn.isNull(info)) return { code: -1, msg: "版本不存在" };
|
||||
if (info.stable_publish) return { code: -1, msg: "不可删除已上线的版本" };
|
||||
res.num = await vk.baseDao.deleteById({
|
||||
dbName,
|
||||
id: _id
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system/app-upgrade-center/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 } = event;
|
||||
let { vk, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code: 0, msg: '' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 可写与数据库的交互逻辑等等
|
||||
let dbName = "opendb-app-versions";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
sortArr: [{ name: "create_date", type: "desc" }]
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
appid: [
|
||||
// 必填
|
||||
{ required: true, message: "appid不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
contents: [
|
||||
// 必填
|
||||
{ required: true, message: "更新内容不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
platform: [
|
||||
// 必填
|
||||
{ required: true, message: "平台不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
version: [
|
||||
// 必填
|
||||
{ required: true, message: "版本号不能为空", trigger: ['blur','change'] },
|
||||
{ validator: vk.pubfn.validator("version"), message: '版本号格式必须为:xx.xx.xx(3个数字组成,数字范围1-99,0-99,0-99) 如1.0.1 不可以是1.0.01', trigger: 'blur' }
|
||||
],
|
||||
url: [
|
||||
// 必填
|
||||
{ required: true, message: "链接不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
_id: [
|
||||
{ required: true, message: 'id不能为空', trigger: 'blur' },
|
||||
],
|
||||
contents: [
|
||||
// 必填
|
||||
{ required: true, message: "更新内容不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
url: [
|
||||
// 必填
|
||||
{ required: true, message: "链接不能为空", trigger: ['blur','change'] }
|
||||
],
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -0,0 +1,100 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加应用
|
||||
* @url admin/system/app/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* @param {String} appid 应用的AppID
|
||||
* @param {String} type 应用类型
|
||||
* @param {String} name 应用名称
|
||||
* @param {String} description 应用描述
|
||||
* 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: 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let {
|
||||
appid,
|
||||
type,
|
||||
name,
|
||||
description,
|
||||
// 1.13.4 新增以下字段(主要用于生成统一发布页和APP升级中心)
|
||||
enable_upgrade_center,
|
||||
introduction,
|
||||
icon_url,
|
||||
screenshot,
|
||||
app_android,
|
||||
app_ios,
|
||||
mp_weixin,
|
||||
mp_alipay,
|
||||
mp_baidu,
|
||||
mp_toutiao,
|
||||
mp_qq,
|
||||
mp_kuaishou,
|
||||
mp_lark,
|
||||
mp_jd,
|
||||
mp_dingtalk,
|
||||
quickapp,
|
||||
h5,
|
||||
store_list,
|
||||
} = data;
|
||||
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
appid = appid.trim();
|
||||
let dbName = "opendb-app-list";
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
appid
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: 'appid已存在,请勿重复添加' };
|
||||
}
|
||||
|
||||
let create_date = Date.now();
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson: {
|
||||
appid,
|
||||
type,
|
||||
name,
|
||||
description,
|
||||
create_date,
|
||||
// 1.13.4 新增以下字段(主要用于生成统一发布页和APP升级中心)
|
||||
enable_upgrade_center,
|
||||
creator_uid: uid, // 创建者
|
||||
introduction,
|
||||
icon_url,
|
||||
screenshot,
|
||||
app_android,
|
||||
app_ios,
|
||||
mp_weixin,
|
||||
mp_alipay,
|
||||
mp_baidu,
|
||||
mp_toutiao,
|
||||
mp_qq,
|
||||
mp_kuaishou,
|
||||
mp_lark,
|
||||
mp_jd,
|
||||
mp_dingtalk,
|
||||
quickapp,
|
||||
h5,
|
||||
store_list,
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
const createPublishHtml = require('../util/createPublishHtml/index.js')
|
||||
module.exports = {
|
||||
/**
|
||||
* 生成发布页HTML
|
||||
* @url admin/system/app/sys/createPublishHtml 前端调用的url参数地址
|
||||
* data 请求参数
|
||||
* @param {String} params1 参数1
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk, db, _ } = util;
|
||||
let res = { code: 0, msg: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let { id } = data;
|
||||
res = await createPublishHtml({
|
||||
id
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除应用
|
||||
* @url admin/system/app/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 : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 这里id不传默认设置成"___" 是为了防止因未传_id导致误删所有数据.
|
||||
let { _id } = data;
|
||||
if(vk.pubfn.isNull(_id)){
|
||||
return { code : -1, msg : 'id不能为空' };
|
||||
}
|
||||
let dbName = "opendb-app-list";
|
||||
res.num = await vk.baseDao.deleteById({
|
||||
dbName,
|
||||
id:_id
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 根据id获取信息
|
||||
* @url admin/system/app/sys/getInfo 前端调用的url参数地址
|
||||
* data 请求参数
|
||||
* @param {String} params1 参数1
|
||||
*/
|
||||
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 { appid } = data;
|
||||
let dbName = "opendb-app-list";
|
||||
res.info = await vk.baseDao.findByWhereJson({
|
||||
dbName,
|
||||
whereJson:{
|
||||
appid
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询应用
|
||||
* @url admin/system/app/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 dbName = "opendb-app-list";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
sortArr: [{ name: "_id", type: "asc" }]
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改应用
|
||||
* @url admin/system/app/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* @param {String} name 应用名称
|
||||
* @param {String} type 应用类型
|
||||
* @param {String} description 应用描述
|
||||
* 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 : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let {
|
||||
_id,
|
||||
appid,
|
||||
type,
|
||||
name,
|
||||
description,
|
||||
// 1.13.4 新增以下字段(主要用于生成统一发布页和APP升级中心)
|
||||
enable_upgrade_center,
|
||||
introduction,
|
||||
icon_url,
|
||||
screenshot,
|
||||
app_android,
|
||||
app_ios,
|
||||
mp_weixin,
|
||||
mp_alipay,
|
||||
mp_baidu,
|
||||
mp_toutiao,
|
||||
mp_qq,
|
||||
mp_kuaishou,
|
||||
mp_lark,
|
||||
mp_jd,
|
||||
mp_dingtalk,
|
||||
quickapp,
|
||||
h5,
|
||||
store_list,
|
||||
} = data;
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.update(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
appid = appid.trim();
|
||||
let dbName = "opendb-app-list";
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
_id: _.neq(_id),
|
||||
appid
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: '修改失败,appid已存在!' };
|
||||
}
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id:_id,
|
||||
dataJson:{
|
||||
appid,
|
||||
type,
|
||||
name,
|
||||
description,
|
||||
// 1.13.4 新增以下字段(主要用于生成统一发布页和APP升级中心)
|
||||
enable_upgrade_center,
|
||||
introduction,
|
||||
icon_url,
|
||||
screenshot,
|
||||
app_android,
|
||||
app_ios,
|
||||
mp_weixin,
|
||||
mp_alipay,
|
||||
mp_baidu,
|
||||
mp_toutiao,
|
||||
mp_qq,
|
||||
mp_kuaishou,
|
||||
mp_lark,
|
||||
mp_jd,
|
||||
mp_dingtalk,
|
||||
quickapp,
|
||||
h5,
|
||||
store_list,
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const TE = require('./lib/art-template.js');
|
||||
|
||||
// 标准语法的界定符规则
|
||||
TE.defaults.openTag = '{@'
|
||||
TE.defaults.closeTag = '@}'
|
||||
|
||||
const success = {
|
||||
code: 0,
|
||||
success: true,
|
||||
}
|
||||
const fail = {
|
||||
code: -1,
|
||||
success: false
|
||||
}
|
||||
|
||||
async function translateTCB(_fileList = []) {
|
||||
if (!_fileList.length) return _fileList
|
||||
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
|
||||
const {
|
||||
fileList
|
||||
} = await uniCloud.getTempFileURL({
|
||||
fileList: _fileList
|
||||
});
|
||||
return fileList.map((item, index) => item.tempFileURL ? item.tempFileURL : _fileList[index])
|
||||
}
|
||||
|
||||
function hasValue(value) {
|
||||
if (typeof value !== 'object') return !!value
|
||||
if (value instanceof Array) return !!value.length
|
||||
return !!(value && Object.keys(value).length && value.enable)
|
||||
}
|
||||
|
||||
module.exports = async function(data = {}) {
|
||||
let {
|
||||
id,
|
||||
template
|
||||
} = data;
|
||||
if (!id) {
|
||||
return {
|
||||
...fail,
|
||||
code: -1,
|
||||
errMsg: 'id required'
|
||||
};
|
||||
}
|
||||
|
||||
// 方式一:使用网络资源
|
||||
let templatePage;
|
||||
if (template) {
|
||||
try {
|
||||
let htmlBuffer = await vk.request({
|
||||
url: template,
|
||||
method: "GET",
|
||||
dataType: "default"
|
||||
});
|
||||
templatePage = htmlBuffer.toString("utf8");
|
||||
} catch (err) {
|
||||
return {
|
||||
...fail,
|
||||
code: -2,
|
||||
errMsg: 'page template no found',
|
||||
err
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// 方式二:使用本地资源
|
||||
templatePage = fs.readFileSync(path.resolve(__dirname, './template.html'), 'utf8');
|
||||
if (!templatePage) {
|
||||
return {
|
||||
...fail,
|
||||
code: -2,
|
||||
errMsg: 'page template no found'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let appInfo = await vk.baseDao.findById({
|
||||
dbName: "opendb-app-list",
|
||||
id: id
|
||||
});
|
||||
|
||||
if (appInfo) {
|
||||
|
||||
const defaultOptions = {
|
||||
hasApp: false,
|
||||
hasMP: false,
|
||||
hasH5: false,
|
||||
hasQuickApp: false
|
||||
}
|
||||
|
||||
defaultOptions.mpNames = {
|
||||
'mp_weixin': '微信',
|
||||
'mp_alipay': '支付宝',
|
||||
'mp_baidu': '百度',
|
||||
'mp_toutiao': '字节',
|
||||
'mp_qq': 'QQ',
|
||||
'mp_dingtalk': '钉钉',
|
||||
'mp_kuaishou': '快手',
|
||||
'mp_lark': '飞书',
|
||||
'mp_jd': '京东'
|
||||
}
|
||||
|
||||
const imageList = [];
|
||||
['app_android'].forEach(key => {
|
||||
if (!hasValue(appInfo[key])) return
|
||||
imageList.push({
|
||||
key,
|
||||
urlKey: 'url',
|
||||
url: appInfo[key].url
|
||||
})
|
||||
})
|
||||
Object.keys(defaultOptions.mpNames).concat('quickapp').forEach(key => {
|
||||
if (!hasValue(appInfo[key])) return
|
||||
imageList.push({
|
||||
key,
|
||||
urlKey: 'qrcode_url',
|
||||
url: appInfo[key].qrcode_url
|
||||
})
|
||||
});
|
||||
['icon_url'].forEach(key => {
|
||||
if (!hasValue(appInfo[key])) return
|
||||
imageList.push({
|
||||
key,
|
||||
url: appInfo[key]
|
||||
})
|
||||
})
|
||||
const filelist = await translateTCB(imageList.map(item => item.url))
|
||||
imageList.forEach((item, index) => {
|
||||
if (item.urlKey) {
|
||||
appInfo[item.key][item.urlKey] = filelist[index]
|
||||
} else {
|
||||
appInfo[item.key] = filelist[index]
|
||||
}
|
||||
})
|
||||
if (hasValue(appInfo.screenshot)) {
|
||||
appInfo.screenshot = await translateTCB(appInfo.screenshot)
|
||||
}
|
||||
|
||||
{
|
||||
const appInfoKeys = Object.keys(appInfo)
|
||||
if (appInfoKeys.some(key => {
|
||||
return key.indexOf('app_') !== -1 && hasValue(appInfo[key])
|
||||
})) {
|
||||
defaultOptions.hasApp = true
|
||||
}
|
||||
if (appInfoKeys.some(key => {
|
||||
return key.indexOf('mp') !== -1 && hasValue(appInfo[key])
|
||||
})) {
|
||||
defaultOptions.hasMP = true
|
||||
}
|
||||
if (appInfo.h5 && appInfo.h5.url) {
|
||||
defaultOptions.hasH5 = true
|
||||
}
|
||||
if (appInfo.quickapp && appInfo.quickapp.qrcode_url) {
|
||||
defaultOptions.hasQuickApp = true
|
||||
}
|
||||
|
||||
// app
|
||||
if (defaultOptions.hasApp && appInfo.app_android && appInfo.app_android.url) {
|
||||
defaultOptions.android_url = appInfo.app_android.url
|
||||
} else {
|
||||
defaultOptions.android_url = ''
|
||||
}
|
||||
if (defaultOptions.hasApp && appInfo.app_ios && appInfo.app_ios.url) {
|
||||
defaultOptions.ios_url = appInfo.app_ios.url
|
||||
} else {
|
||||
defaultOptions.ios_url = ''
|
||||
}
|
||||
|
||||
// mp
|
||||
defaultOptions.mpKeys = Object.keys(appInfo).filter(key => {
|
||||
return key.indexOf('mp') !== -1 && hasValue(appInfo[key])
|
||||
})
|
||||
}
|
||||
|
||||
// 解决二维码不显示的问题
|
||||
if (appInfo.icon_url && appInfo.icon_url.indexOf("http") == 0) {
|
||||
let imageBuffer = await vk.request({
|
||||
url: appInfo.icon_url,
|
||||
method: "GET",
|
||||
dataType: "default"
|
||||
});
|
||||
appInfo.icon_url = "data:image/png;base64," + imageBuffer.toString('base64');
|
||||
}
|
||||
|
||||
const html = TE.render(templatePage)(Object.assign({}, appInfo, defaultOptions));
|
||||
|
||||
if (!(defaultOptions.hasApp || defaultOptions.hasH5 || defaultOptions.hasMP || defaultOptions
|
||||
.hasQuickApp)) {
|
||||
return {
|
||||
...fail,
|
||||
code: -100,
|
||||
errMsg: '缺少应用信息,App、小程序、H5、快应用请至少填写一项'
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...success,
|
||||
mpserverlessComposedResponse: true, // 使用阿里云返回集成响应是需要此字段为true
|
||||
statusCode: 200,
|
||||
headers: {
|
||||
'content-type': 'text/html'
|
||||
},
|
||||
body: html
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...fail,
|
||||
code: -3,
|
||||
errMsg: 'no record'
|
||||
};
|
||||
}
|
||||
+2
File diff suppressed because one or more lines are too long
+241
File diff suppressed because one or more lines are too long
@@ -0,0 +1,72 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
appid: [
|
||||
{ required: true, message: '应用的AppID为必填字段', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '应用名称为必填字段', trigger: 'blur' }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: '应用类型为必填字段', trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
_id: [
|
||||
{ required: true, message: 'id不能为空', trigger: 'blur' },
|
||||
],
|
||||
appid: [
|
||||
{ required: true, message: '应用的AppID为必填字段', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '应用名称为必填字段', trigger: 'blur' }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: '应用类型为必填字段', trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -0,0 +1,87 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 新增
|
||||
* @url admin/system/menu/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} menu_id 菜单Id,唯一标识
|
||||
* @param {String} name 菜单名称
|
||||
* @param {String} comment 备注
|
||||
* @param {String} url 页面路径
|
||||
* @param {String} icon 菜单图标
|
||||
* @param {Number} sort 排序(越大越在前面)
|
||||
* @param {String} parent_id 父级id
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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 {
|
||||
menu_id,
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort = 0,
|
||||
parent_id,
|
||||
enable = true,
|
||||
hidden_menu
|
||||
} = data;
|
||||
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if(formRulesRes.code !== 0){
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dbName = "opendb-admin-menus";
|
||||
// 检测menu_id是否存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson:{
|
||||
menu_id
|
||||
}
|
||||
});
|
||||
if(num > 0){
|
||||
return { code : -1, msg : `标识【${menu_id}】不能重复!` };
|
||||
}
|
||||
let dataJson = {
|
||||
menu_id,
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort,
|
||||
parent_id,
|
||||
enable,
|
||||
hidden_menu
|
||||
};
|
||||
// 检测parent_id是否不存在
|
||||
if(vk.pubfn.isNotNull(parent_id)){
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson:{
|
||||
menu_id : parent_id
|
||||
}
|
||||
});
|
||||
if(num <= 0){
|
||||
return { code : -1, msg : `父标识【${parent_id}】不存在!` };
|
||||
}
|
||||
}else{
|
||||
delete dataJson.parent_id;
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 批量新增
|
||||
* @url admin/system/menu/sys/adds 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {Number} mode 模式 1 :覆盖 2:忽略
|
||||
* @param {Array<Object>} menus 菜单json
|
||||
* 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 {
|
||||
mode,
|
||||
menus,
|
||||
} = data;
|
||||
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.adds(event);
|
||||
if(formRulesRes.code !== 0){
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dataArr = [];
|
||||
for(let i=0;i<menus.length;i++){
|
||||
let {
|
||||
menu_id,
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort = 0,
|
||||
parent_id,
|
||||
enable = true,
|
||||
hidden_menu
|
||||
} = menus[i];
|
||||
|
||||
dataArr.push({
|
||||
menu_id,
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort,
|
||||
parent_id,
|
||||
enable,
|
||||
hidden_menu
|
||||
});
|
||||
}
|
||||
if(mode == 1){
|
||||
// 如果是覆盖,则先删除原先的数据
|
||||
let menuIds = vk.pubfn.arrayObjectGetArray(dataArr, "menu_id");
|
||||
await vk.baseDao.del({
|
||||
dbName:"opendb-admin-menus",
|
||||
whereJson:{
|
||||
menu_id : _.in(menuIds)
|
||||
}
|
||||
});
|
||||
}
|
||||
// 执行数据库API请求
|
||||
await vk.baseDao.adds({
|
||||
dbName:"opendb-admin-menus",
|
||||
dataJson:dataArr
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 为菜单设置内置权限
|
||||
* 角色拥有菜单后,将同时拥有菜单内的所有内置权限
|
||||
* @url admin/system/menu/sys/bindPermission 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} menu_id 菜单id(menu_id)
|
||||
* @param {Array} permissionList 权限Id(permission_id)列表
|
||||
* @param {Boolean} reset 是否直接覆盖权限,true:直接将permissionList设置为权限,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 {
|
||||
menu_id,
|
||||
permissionList,
|
||||
reset
|
||||
} = data;
|
||||
res = await vk.system.sysDao.menuBindPermission({
|
||||
menu_id,
|
||||
permissionList,
|
||||
reset
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system/menu/sys/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} menu_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 { menu_id } = data;
|
||||
if(vk.pubfn.isNullOne(menu_id)){
|
||||
return { code : -1, msg : 'menu_id不能为空' };
|
||||
}
|
||||
// 检查是否有子项
|
||||
let num = await vk.baseDao.count({
|
||||
dbName:"opendb-admin-menus",
|
||||
whereJson:{
|
||||
parent_id : menu_id
|
||||
}
|
||||
});
|
||||
if(num > 0){
|
||||
return { code : -1, msg : '该项含有子项,请先删除子项!' };
|
||||
}
|
||||
res.num = await vk.baseDao.del({
|
||||
dbName:"opendb-admin-menus",
|
||||
whereJson:{
|
||||
menu_id
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 获取菜单列表(一次性获取全部)
|
||||
* @url admin/system/menu/sys/getAll 前端调用的url参数地址
|
||||
* 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: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 返回树状结构代码详情见:https://vkdoc.fsq.pub/client/uniCloud/db/getTree.html
|
||||
res = await vk.system.sysDao.listMenuToTree({
|
||||
pageIndex: 1,
|
||||
pageSize: 500,
|
||||
whereJson: {
|
||||
parent_id: _.in([null, ""]),
|
||||
menu_id: _.exists(true)
|
||||
},
|
||||
treeProps: {
|
||||
level: 3
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 获取菜单级联数据(懒加载形式)
|
||||
* @url admin/system/menu/sys/getCascader 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {Object} node 当前点击的节点
|
||||
* 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 { node = {} } = data;
|
||||
let whereJson = {
|
||||
enable: true
|
||||
};
|
||||
if (node.root) {
|
||||
whereJson["parent_id"] = null;
|
||||
} else {
|
||||
whereJson["parent_id"] = node.value;
|
||||
}
|
||||
res = await vk.baseDao.selects({
|
||||
dbName: "opendb-admin-menus",
|
||||
pageIndex: 1,
|
||||
pageSize: 500,
|
||||
whereJson,
|
||||
sortArr: [{ name: "sort", type: "asc" }],
|
||||
// 副表列表
|
||||
foreignDB: [
|
||||
{
|
||||
dbName: "opendb-admin-menus",
|
||||
localKey:"menu_id",
|
||||
foreignKey: "parent_id",
|
||||
as: "hasChildren",
|
||||
limit: 1, // 避免浪费查询,这里设置limit:1
|
||||
}
|
||||
]
|
||||
});
|
||||
// 数据预处理
|
||||
let rows = res.rows;
|
||||
for (let i in rows) {
|
||||
let item = rows[i];
|
||||
rows[i].label = `${item.name}(${item.menu_id})`;
|
||||
if(vk.pubfn.isNull(item.hasChildren)){
|
||||
rows[i].leaf = true;
|
||||
}
|
||||
}
|
||||
res.rows = rows;
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改
|
||||
* @url admin/system/menu/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} menu_id 菜单Id,唯一标识
|
||||
* @param {String} name 菜单名称
|
||||
* @param {String} comment 备注
|
||||
* @param {String} url 页面路径
|
||||
* @param {String} icon 菜单图标
|
||||
* @param {Number} sort 排序(越大越在前面)
|
||||
* @param {String} parent_id 父级id
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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 {
|
||||
menu_id,
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort = 0,
|
||||
parent_id,
|
||||
enable = true,
|
||||
hidden_menu
|
||||
} = data;
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.update(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dbName = "opendb-admin-menus";
|
||||
let dataJson = {
|
||||
name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort,
|
||||
parent_id,
|
||||
enable,
|
||||
hidden_menu
|
||||
};
|
||||
// 检测parent_id是否不存在
|
||||
if (vk.pubfn.isNotNull(parent_id)) {
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
menu_id: parent_id
|
||||
}
|
||||
});
|
||||
if (num <= 0) {
|
||||
return { code: -1, msg: `父标识【${parent_id}】不存在!` };
|
||||
}
|
||||
let info = await vk.baseDao.findByWhereJson({
|
||||
dbName,
|
||||
whereJson: {
|
||||
menu_id
|
||||
}
|
||||
});
|
||||
if (vk.pubfn.isNotNull(info) && info.menu_id === parent_id) {
|
||||
return { code: -1, msg: `不可以设置自己为父菜单` };
|
||||
}
|
||||
} else {
|
||||
dataJson["parent_id"] = _.remove();
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName,
|
||||
whereJson: {
|
||||
menu_id
|
||||
},
|
||||
dataJson
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改基础信息
|
||||
* @url admin/system/menu/sys/updateBase 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id _id
|
||||
* @param {Number} sort 排序
|
||||
* @param {Boolean} enable 是否启用
|
||||
* @param {Boolean} hidden_menu 是否隐藏(左侧菜单中不显示)
|
||||
* 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,
|
||||
sort,
|
||||
enable,
|
||||
hidden_menu
|
||||
} = data;
|
||||
if (vk.pubfn.isNull(_id)) return { code: -1, msg: "_id不能为空" };
|
||||
|
||||
let dbName = "opendb-admin-menus";
|
||||
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id: _id,
|
||||
dataJson: {
|
||||
sort,
|
||||
enable,
|
||||
hidden_menu
|
||||
},
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event){
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code : 0, msg : '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
menu_id: [
|
||||
{ required: true, message: '菜单标识不能为空', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '菜单名称不能为空', trigger: 'blur' },
|
||||
],
|
||||
sort:[
|
||||
{ type: 'number', message: '排序值必须为数字'}
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data : data,
|
||||
rules : rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event){
|
||||
return this.add(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加
|
||||
*/
|
||||
async adds(event){
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code : 0, msg : '' };
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
menu_id: [
|
||||
{ required: true, message: '菜单标识不能为空', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '菜单名称不能为空', trigger: 'blur' },
|
||||
],
|
||||
sort:[
|
||||
{ type: 'number', message: '排序值必须为数字'}
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
let { menus } = data;
|
||||
for(let i=0;i<menus.length;i++){
|
||||
let formValidateRes = vk.pubfn.formValidate({
|
||||
data : menus[i],
|
||||
rules : rules
|
||||
});
|
||||
if(formValidateRes.code != 0){
|
||||
res = formValidateRes;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -0,0 +1,96 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 新增权限
|
||||
* @url admin/system/permission/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} permission_id 权限Id,唯一标识
|
||||
* @param {String} permission_name 权限名称,展示用
|
||||
* @param {String} comment 备注
|
||||
* @param {String} url 云函数路径
|
||||
* @param {String} icon 图标
|
||||
* @param {Number} sort 排序(越大越在前面)
|
||||
* @param {String} parent_id 父级id
|
||||
* @param {Boolean} enable 是否启用
|
||||
* @param {Boolean} match_mode 0:完整路径 1:通配符 2:正则表达式
|
||||
* @param {Boolean} curd_category 0:未分类 1:增 2:删 3:改 4:查 5:特殊
|
||||
* @param {Boolean} level 0:未分类 1:子弹级 2:炸弹级 3:榴弹级 4:核弹级
|
||||
* 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 {
|
||||
permission_id,
|
||||
permission_name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort = 0,
|
||||
parent_id,
|
||||
enable = true,
|
||||
match_mode = 0,
|
||||
curd_category,
|
||||
level
|
||||
} = data;
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dbName = "uni-id-permissions";
|
||||
// 检测permission_id是否存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
permission_id
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: `标识【${permission_id}】不能重复!` };
|
||||
}
|
||||
let dataJson = {
|
||||
permission_id,
|
||||
permission_name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort,
|
||||
parent_id,
|
||||
enable,
|
||||
match_mode,
|
||||
curd_category,
|
||||
level
|
||||
};
|
||||
// 检测parent_id是否不存在
|
||||
if (vk.pubfn.isNotNull(parent_id)) {
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
permission_id: parent_id
|
||||
}
|
||||
});
|
||||
if (num <= 0) {
|
||||
return { code: -1, msg: `父标识【${parent_id}】不存在!` };
|
||||
}
|
||||
} else{
|
||||
delete dataJson.parent_id;
|
||||
}
|
||||
if(url === "" || JSON.stringify(url) === '[""]'){
|
||||
delete dataJson.url;
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除权限
|
||||
* @url admin/system/permission/sys/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} permission_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 { permission_id } = data;
|
||||
if (vk.pubfn.isNullOne(permission_id)) {
|
||||
return { code: -1, msg: 'permission_id不能为空' };
|
||||
}
|
||||
let dbName = "uni-id-permissions";
|
||||
// 检查是否有子项
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
parent_id: permission_id
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: '该项含有子项,请先删除子项!' };
|
||||
}
|
||||
res = uniID.deletePermission({
|
||||
permissionID: permission_id
|
||||
});
|
||||
res.msg = res.message;
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 获取权限列表
|
||||
* @url admin/system/permission/sys/getAll 前端调用的url参数地址
|
||||
* 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: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
res = await vk.system.sysDao.listPermissionToTree({
|
||||
pageIndex: 1,
|
||||
pageSize: 500,
|
||||
whereJson: {
|
||||
parent_id: _.in([null, ""]),
|
||||
permission_id: _.exists(true)
|
||||
},
|
||||
treeProps: {
|
||||
level: 3
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改权限
|
||||
* @url admin/system/permission/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} permission_id 权限Id,唯一标识
|
||||
* @param {String} permission_name 权限名称,展示用
|
||||
* @param {String} comment 备注
|
||||
* @param {String} url 云函数路径
|
||||
* @param {String} icon 图标
|
||||
* @param {Number} sort 排序(越大越在前面)
|
||||
* @param {String} parent_id 父级id
|
||||
* @param {Boolean} enable 是否启用
|
||||
* @param {Number} match_mode 0:完整路径 1:通配符 2:正则表达式
|
||||
* @param {Number} curd_category 0:未分类 1:增 2:删 3:改 4:查 5:特殊
|
||||
* @param {Number} level 0:未分类 1:子弹级 2:炸弹级 3:榴弹级 4:核弹级
|
||||
* 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 {
|
||||
permission_id,
|
||||
permission_name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort = 0,
|
||||
parent_id,
|
||||
enable = true,
|
||||
match_mode = 0,
|
||||
curd_category,
|
||||
level
|
||||
} = data;
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.update(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dbName = "uni-id-permissions";
|
||||
let dataJson = {
|
||||
permission_name,
|
||||
comment,
|
||||
url,
|
||||
icon,
|
||||
sort,
|
||||
parent_id,
|
||||
enable,
|
||||
match_mode,
|
||||
curd_category,
|
||||
level
|
||||
};
|
||||
// 检测parent_id是否不存在
|
||||
if (vk.pubfn.isNotNull(parent_id)) {
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
permission_id: parent_id
|
||||
}
|
||||
});
|
||||
if (num <= 0) {
|
||||
return { code: -1, msg: `父标识【${parent_id}】不存在!` };
|
||||
}
|
||||
let info = await vk.baseDao.findByWhereJson({
|
||||
dbName,
|
||||
whereJson: {
|
||||
permission_id
|
||||
}
|
||||
});
|
||||
if (vk.pubfn.isNotNull(info) && info.permission_id === parent_id) {
|
||||
return { code: -1, msg: `不可以设置自己为父级` };
|
||||
}
|
||||
} else {
|
||||
dataJson["parent_id"] = _.remove();
|
||||
}
|
||||
if (url === "" || JSON.stringify(url) === '[""]') {
|
||||
dataJson["url"] = _.remove();
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName,
|
||||
whereJson: {
|
||||
permission_id
|
||||
},
|
||||
dataJson
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改基础信息
|
||||
* @url admin/system/permission/sys/updateBase 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* @param {Number} sort 排序
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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,
|
||||
sort,
|
||||
enable,
|
||||
} = data;
|
||||
if (vk.pubfn.isNull(_id)) return { code: -1, msg: "_id不能为空" };
|
||||
|
||||
let dbName = "uni-id-permissions";
|
||||
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id: _id,
|
||||
dataJson: {
|
||||
sort,
|
||||
enable,
|
||||
},
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改权限分类
|
||||
* @url admin/system/permission/sys/updateCategory 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id 权限Id
|
||||
* @param {Number} curd_category 0:未分类 1:增 2:删 3:改 4:查 5:特殊
|
||||
* 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,
|
||||
curd_category=0,
|
||||
} = data;
|
||||
let dbName = "uni-id-permissions";
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id:_id,
|
||||
dataJson:{
|
||||
curd_category
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改权限等级
|
||||
* @url admin/system/permission/sys/updateLevel 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id 权限Id
|
||||
* @param {Number} level 0:未分类 1:子弹级 2:炸弹级 3:榴弹级 4:核弹级
|
||||
* 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,
|
||||
level=0,
|
||||
} = data;
|
||||
let dbName = "uni-id-permissions";
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id:_id,
|
||||
dataJson:{
|
||||
level
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
permission_id: [
|
||||
{ required: true, message: '权限标识不能为空', trigger: 'blur' },
|
||||
],
|
||||
permission_name: [
|
||||
{ required: true, message: '权限名称不能为空', trigger: 'blur' },
|
||||
],
|
||||
sort: [
|
||||
{ type: 'number', message: '排序值必须为数字' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
return this.add(event);
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -0,0 +1,58 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 新增角色
|
||||
* @url admin/system/role/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} role_id 角色Id(role_id)
|
||||
* @param {String} role_name 角色名称,展示用
|
||||
* @param {String} comment 备注
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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 {
|
||||
role_id,
|
||||
role_name,
|
||||
comment,
|
||||
enable = true,
|
||||
} = data;
|
||||
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
let dbName = "uni-id-roles";
|
||||
// 检查role_id是否存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
role_id
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: `标识【${role_id}】不能重复!` };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson: {
|
||||
role_id,
|
||||
role_name,
|
||||
comment,
|
||||
enable
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 为角色绑定菜单
|
||||
* @url admin/system/role/sys/bindMenu 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {Array} role_id 角色Id(role_id)
|
||||
* @param {Array} menuList 菜单Id(menu_id)列表
|
||||
* @param {Boolean} reset 是否直接覆盖菜单,true:直接将menuList设置为角色菜单,false:在角色已有菜单后追加菜单
|
||||
* @param {Boolean} addPermission 是否自动添加菜单内置的权限 默认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 { role_id, menuList, reset, addPermission } = data;
|
||||
res = await vk.system.sysDao.roleBindMenu({
|
||||
role_id,
|
||||
menuList,
|
||||
reset,
|
||||
addPermission
|
||||
});
|
||||
if (res.code !== 0) return res;
|
||||
let dbName = "uni-id-roles";
|
||||
let roleInfo = await vk.baseDao.findByWhereJson({
|
||||
dbName,
|
||||
whereJson: {
|
||||
role_id,
|
||||
}
|
||||
});
|
||||
let count = roleInfo.menu ? roleInfo.menu.length : 0;
|
||||
// 修改stats_count_info统计信息
|
||||
res.info = await vk.baseDao.updateAndReturn({
|
||||
dbName,
|
||||
whereJson: {
|
||||
role_id
|
||||
},
|
||||
dataJson: {
|
||||
["stats_count_info.type.0.count"]: count
|
||||
},
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 为角色绑定权限
|
||||
* @url admin/system/role/sys/bindPermission 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {Array} role_id 角色Id(role_id)
|
||||
* @param {Array} permissionList 权限Id(permission_id)列表
|
||||
* @param {Boolean} reset 是否直接覆盖角色权限,true:直接将permissionList设置为角色权限,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 { role_id, permissionList, reset, stats_count_info = {} } = data;
|
||||
res = await uniID.bindPermission({
|
||||
roleID: role_id,
|
||||
permissionList,
|
||||
reset
|
||||
});
|
||||
if (res.code !== 0) return res;
|
||||
res.msg = res.message;
|
||||
// 修改stats_count_info统计信息
|
||||
res.info = await vk.baseDao.updateAndReturn({
|
||||
dbName: "uni-id-roles",
|
||||
whereJson: {
|
||||
role_id
|
||||
},
|
||||
dataJson: {
|
||||
stats_count_info: _.set(stats_count_info)
|
||||
},
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除角色
|
||||
* @url admin/system/role/sys/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} role_id 角色Id(role_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 { role_id } = data;
|
||||
if (vk.pubfn.isNullOne(role_id)) {
|
||||
return { code: -1, msg: 'role_id不能为空' };
|
||||
}
|
||||
res = uniID.deleteRole({
|
||||
roleID: role_id
|
||||
});
|
||||
res.msg = res.message;
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 查询角色列表
|
||||
* @url admin/system/role/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 dbName = "uni-id-roles";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
// 副表列表
|
||||
foreignDB: [
|
||||
{
|
||||
dbName: "uni-id-permissions",
|
||||
localKey: "permission",
|
||||
localKeyType: "array",
|
||||
foreignKey: "permission_id",
|
||||
as: "permissionList",
|
||||
limit: 500,
|
||||
fieldJson: { permission_id:true, permission_name:true,comment:true, enable:true, url:true },
|
||||
},
|
||||
{
|
||||
dbName: "opendb-admin-menus",
|
||||
localKey: "menu",
|
||||
localKeyType: "array",
|
||||
foreignKey: "menu_id",
|
||||
as: "menuList",
|
||||
limit: 500,
|
||||
fieldJson: { menu_id:true, name:true,comment:true, enable:true, url:true },
|
||||
},
|
||||
]
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
const formRules = require("../util/formRules.js");
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改角色
|
||||
* @url admin/system/role/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} role_id 角色Id(role_id)
|
||||
* @param {String} role_name 角色名称,展示用
|
||||
* @param {String} comment 备注
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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 {
|
||||
role_id,
|
||||
role_name,
|
||||
comment,
|
||||
enable = true,
|
||||
} = data;
|
||||
|
||||
// 参数合法校验开始-----------------------------------------------------------
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
// 参数合法校验结束-----------------------------------------------------------
|
||||
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName: "uni-id-roles",
|
||||
whereJson: {
|
||||
role_id
|
||||
},
|
||||
dataJson: {
|
||||
role_name,
|
||||
comment,
|
||||
enable
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改基础信息
|
||||
* @url admin/system/role/sys/updateBase 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* @param {Boolean} enable 是否启用
|
||||
* 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,
|
||||
enable,
|
||||
} = data;
|
||||
if (vk.pubfn.isNull(_id)) return { code: -1, msg: "_id不能为空" };
|
||||
|
||||
let dbName = "uni-id-roles";
|
||||
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id: _id,
|
||||
dataJson: {
|
||||
enable,
|
||||
},
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
role_id: [
|
||||
{ required: true, message: '角色标识不能为空', trigger: 'blur' },
|
||||
],
|
||||
role_name: [
|
||||
{ required: true, message: '角色名称不能为空', trigger: 'change' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
return this.add(event);
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
+78
@@ -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;
|
||||
}
|
||||
}
|
||||
+42
@@ -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,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,54 @@
|
||||
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
|
||||
}],
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
username: [
|
||||
{ required: true, validator: vk.pubfn.validator("username"),
|
||||
message: '用户名以字母开头,长度在6~18之间,只能包含字母、数字和下划线', trigger: 'blur' }
|
||||
],
|
||||
nickname: [
|
||||
{ required: true, message: '昵称为必填字段', trigger: 'blur' },
|
||||
{ min: 2, max: 20, message: '昵称长度在 2 到 20 个字符', trigger: 'blur' }
|
||||
],
|
||||
password: [
|
||||
{ validator:vk.pubfn.validator("password"), message: '密码长度在6~18之间,只能包含字母、数字和下划线', trigger: 'blur' }
|
||||
],
|
||||
mobile: [
|
||||
{ validator: vk.pubfn.validator("mobile"), message: '手机号格式错误', trigger: 'blur' }
|
||||
],
|
||||
email: [
|
||||
{ validator: vk.pubfn.validator("email"), message: '邮箱格式错误', trigger: 'blur' }
|
||||
],
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
_id: [
|
||||
{ required: true, message: '用户ID不能为空', trigger: 'blur' },
|
||||
],
|
||||
nickname: [
|
||||
{ required: true, message: '昵称为必填字段', trigger: 'blur' },
|
||||
{ min: 2, max: 20, message: '昵称长度在 2 到 20 个字符', trigger: 'blur' }
|
||||
],
|
||||
mobile: [
|
||||
{ validator: vk.pubfn.validator("mobile"), message: '手机号格式错误', trigger: 'blur' }
|
||||
],
|
||||
email: [
|
||||
{ validator: vk.pubfn.validator("email"), message: '邮箱格式错误', trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
@@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/admin-log/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 dbName = "opendb-admin-log";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson:{
|
||||
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加
|
||||
* @url admin/system_uni/components-dynamic/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} data_id 组件数据id
|
||||
* @param {String} title 数据标题
|
||||
* @param {Object} data 组件数据
|
||||
* 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 {
|
||||
data_id,
|
||||
data: dynamicData,
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
sort = 0,
|
||||
show = true,
|
||||
name
|
||||
} = data;
|
||||
|
||||
// 参数非空检测
|
||||
if (vk.pubfn.isNull(data_id)) return { code: -1, msg: 'data_id不能为空' };
|
||||
|
||||
let dbName = "vk-components-dynamic";
|
||||
// 检测key是否已存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName: dbName,
|
||||
whereJson: {
|
||||
data_id,
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: `组件数据id不能重复!` };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson: {
|
||||
data: dynamicData,
|
||||
data_id,
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
sort,
|
||||
show,
|
||||
name
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system_uni/components-dynamic/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不能为空' };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
let num = await vk.baseDao.del({
|
||||
dbName:"vk-components-dynamic",
|
||||
whereJson:{
|
||||
_id
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/components-dynamic/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 dbName = "vk-components-dynamic";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson:{
|
||||
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改
|
||||
* @url admin/system_uni/components-dynamic/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} data_id 组件数据id
|
||||
* @param {String} title 数据标题
|
||||
* @param {Object} data 组件数据
|
||||
* @param {Object} description 数据描述
|
||||
* 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_id,
|
||||
data: dynamicData,
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
sort,
|
||||
show,
|
||||
name
|
||||
} = data;
|
||||
|
||||
// 参数非空检测
|
||||
if (vk.pubfn.isNull(_id)) return { code: -1, msg: 'id不能为空' };
|
||||
|
||||
let dbName = "vk-components-dynamic";
|
||||
|
||||
if (vk.pubfn.isNotNull(data_id)) {
|
||||
// 检测data_id是否已存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
data_id,
|
||||
_id: _.neq(_id)
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: `组件数据id不能重复!` };
|
||||
}
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id: _id,
|
||||
dataJson: {
|
||||
data: dynamicData,
|
||||
data_id,
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
sort,
|
||||
show,
|
||||
name
|
||||
}
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
const formRules = require('../util/formRules.js');
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加
|
||||
* @url admin/system_uni/global-data/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} key 键名
|
||||
* @param {any} value 键值
|
||||
* @param {time} expired_at 过期时间
|
||||
* @param {String} comment 备注
|
||||
* 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 {
|
||||
key,
|
||||
value,
|
||||
expired_at,
|
||||
comment
|
||||
} = data;
|
||||
if (!expired_at) expired_at = 0;
|
||||
// 参数合法校验
|
||||
let formRulesRes = await formRules.add(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
|
||||
let dbName = "vk-global-data";
|
||||
// 检测key是否已存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson: {
|
||||
key
|
||||
}
|
||||
});
|
||||
if (num > 0) {
|
||||
return { code: -1, msg: `键值【${key}】不能重复!` };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson: {
|
||||
_id: key, // 此处将_id也设置为key,方便使用doc查询提高性能
|
||||
key,
|
||||
value,
|
||||
expired_at,
|
||||
comment
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system_uni/global-data/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不能为空' };
|
||||
}
|
||||
let dbName = "vk-global-data";
|
||||
// 执行数据库API请求
|
||||
let num = await vk.baseDao.del({
|
||||
dbName:dbName,
|
||||
whereJson:{
|
||||
_id
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/global-data/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 dbName = "vk-global-data";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson:{
|
||||
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
const formRules = require('../util/formRules.js');
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改
|
||||
* @url admin/system_uni/global-data/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} key 键名
|
||||
* @param {any} value 键值
|
||||
* @param {time} expired_at 过期时间
|
||||
* @param {any} comment 备注
|
||||
* @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,
|
||||
key,
|
||||
value,
|
||||
expired_at,
|
||||
comment
|
||||
} = data;
|
||||
if (typeof expired_at !== "undefined" && !expired_at) expired_at = 0;
|
||||
// 参数合法校验
|
||||
let formRulesRes = await formRules.update(event);
|
||||
if (formRulesRes.code !== 0) {
|
||||
return formRulesRes;
|
||||
}
|
||||
let dbName = "vk-global-data";
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName: dbName,
|
||||
whereJson: {
|
||||
_id: key
|
||||
},
|
||||
dataJson: {
|
||||
value,
|
||||
expired_at,
|
||||
comment
|
||||
}
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
'use strict';
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
class Util {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
async add(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
key: [
|
||||
{ required: true, message: '键名不能为空', trigger: 'blur' },
|
||||
],
|
||||
value: [
|
||||
{ required: true, message: '键值不能为空', trigger: 'change' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
async update(event) {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
let res = { code: 0, msg: '' };
|
||||
|
||||
// 验证规则开始 -----------------------------------------------------------
|
||||
let rules = {
|
||||
key: [
|
||||
{ required: true, message: '键名不能为空', trigger: 'blur' },
|
||||
],
|
||||
value: [
|
||||
{ required: true, message: '键值不能为空', trigger: 'change' }
|
||||
]
|
||||
};
|
||||
// 验证规则结束 -----------------------------------------------------------
|
||||
|
||||
// 开始进行验证
|
||||
res = vk.pubfn.formValidate({
|
||||
data: data,
|
||||
rules: rules
|
||||
});
|
||||
// 返回验证结果
|
||||
return res;
|
||||
}
|
||||
}
|
||||
module.exports = new Util
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 重新执行回调通知
|
||||
* @url admin/system_uni/pay-orders/sys/afreshNotice 前端调用的url参数地址
|
||||
* data 请求参数
|
||||
* @param {String} params1 参数1
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { config, pubFun, vk, db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code: 0, msg: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let {
|
||||
_id, // 订单id
|
||||
} = data;
|
||||
|
||||
let dbName = "vk-pay-orders";
|
||||
|
||||
// 获取异步回调配置
|
||||
let spaceId = originalParam.context.SPACEINFO.spaceId; // 服务空间ID
|
||||
let currentNotifyUrl = getNotifyUrl(config, spaceId);
|
||||
if (!currentNotifyUrl || currentNotifyUrl.indexOf("http") !== 0) {
|
||||
return { code: -1, msg: "请先配置正确的异步回调URL,参考配置文档:https://vkdoc.fsq.pub/vk-uni-pay/config.html" }
|
||||
}
|
||||
|
||||
// 获取订单信息
|
||||
let orderInfo = await vk.baseDao.findById({
|
||||
dbName,
|
||||
id: _id
|
||||
});
|
||||
if (vk.pubfn.isNull(orderInfo)) return { code: -1, msg: "订单不存在" };
|
||||
if (orderInfo.status !== 1) return { code: -1, msg: "订单状态错误" };
|
||||
if (orderInfo.user_order_success) return { code: -1, msg: "无需重新通知" };
|
||||
|
||||
// 先将订单的状态改为未支付(重新回调需要)
|
||||
let updateNum = await vk.baseDao.update({
|
||||
dbName,
|
||||
whereJson: {
|
||||
_id,
|
||||
status: 1
|
||||
},
|
||||
dataJson: {
|
||||
status: 0,
|
||||
user_order_success: _.remove()
|
||||
}
|
||||
});
|
||||
|
||||
if (!updateNum) {
|
||||
return { code: -1, msg: "订单状态错误" };
|
||||
}
|
||||
|
||||
let { original_data, out_trade_no } = orderInfo;
|
||||
try {
|
||||
// 执行回调
|
||||
let requestRes = await vk.request({
|
||||
url: `${currentNotifyUrl}${original_data.path}`,
|
||||
method: "POST",
|
||||
dataType: "text",
|
||||
header: original_data.headers,
|
||||
content: original_data.body
|
||||
});
|
||||
} catch (err) {}
|
||||
// 再次获取订单信息,判断是否回调成功
|
||||
let payOrderInfo = await vk.baseDao.findById({
|
||||
dbName,
|
||||
id: _id
|
||||
});
|
||||
if (payOrderInfo.status === 1) {
|
||||
// 等待回调全部执行完成,最大等待20秒
|
||||
let await_max_time = 20;
|
||||
if (typeof payOrderInfo.user_order_success == "undefined") {
|
||||
let whileTime = 0; // 当前循环已执行的时间(毫秒)
|
||||
let whileInterval = 1000; // 每次循环间隔时间(毫秒)
|
||||
let maxTime = await_max_time * 1000; // 循环执行时间超过此值则退出循环(毫秒)
|
||||
while (typeof payOrderInfo.user_order_success == "undefined" && whileTime <= maxTime) {
|
||||
await vk.pubfn.sleep(whileInterval);
|
||||
whileTime += whileInterval;
|
||||
// 查询最新的订单信息
|
||||
payOrderInfo = await vk.baseDao.findById({
|
||||
dbName,
|
||||
id: _id
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 还原部分信息(如支付时间不可被重新回调修改)
|
||||
await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id: _id,
|
||||
dataJson: {
|
||||
status: orderInfo.status,
|
||||
pay_date: orderInfo.pay_date,
|
||||
original_data: orderInfo.original_data,
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
// 获取异步回调配置
|
||||
function getNotifyUrl(config, spaceId) {
|
||||
const payConifg = config["uni-pay"];
|
||||
const { notifyUrl } = payConifg;
|
||||
let currentNotifyUrl = notifyUrl[spaceId]; // 异步回调地址
|
||||
// 兼容正式版阿里云与公测版阿里云spaceId开始-----------------------------------------------------------
|
||||
if (!currentNotifyUrl) {
|
||||
if (spaceId.indexOf("mp-") === 0) {
|
||||
currentNotifyUrl = notifyUrl[spaceId.substring(3)];
|
||||
} else {
|
||||
currentNotifyUrl = notifyUrl[`mp-${spaceId}`];
|
||||
}
|
||||
}
|
||||
// 兼容正式版阿里云与公测版阿里云spaceId结束-----------------------------------------------------------
|
||||
return currentNotifyUrl;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* vk-pay支付插件支付订单查询
|
||||
* @url admin/system_uni/pay-orders/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 dbName = "vk-pay-orders";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/uni-id-files/categories/kh/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 dbName = "vk-files-categories";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson:{
|
||||
|
||||
},
|
||||
sortArr:[{ name:"_id", type:"asc" }]
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加
|
||||
* @url admin/system_uni/uni-id-files/categories/sys/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} name 分类名称
|
||||
* @param {String} description 数据描述
|
||||
* @param {Number} sort 排序值
|
||||
* 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 {
|
||||
name,
|
||||
description,
|
||||
sort,
|
||||
} = data;
|
||||
// 参数非空检测
|
||||
if(vk.pubfn.isNull(name)){
|
||||
return { code : -1, msg : '名称不能为空' };
|
||||
}
|
||||
let dbName = "vk-files-categories";
|
||||
// 检测key是否已存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson:{
|
||||
name,
|
||||
}
|
||||
});
|
||||
if(num > 0){
|
||||
return { code : -1, msg : `名称【${name}】不能重复!` };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName,
|
||||
dataJson:{
|
||||
name,
|
||||
description,
|
||||
sort
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system_uni/uni-id-files/categories/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不能为空' };
|
||||
}
|
||||
let dbName = "vk-files-categories";
|
||||
await vk.baseDao.deleteById({
|
||||
dbName,
|
||||
id:_id
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改
|
||||
* @url admin/system_uni/uni-id-files/categories/sys/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} _id id
|
||||
* @param {String} name 分类名称
|
||||
* @param {String} description 数据描述
|
||||
* @param {Number} sort 排序值
|
||||
* @param {String} parent_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,
|
||||
name,
|
||||
description,
|
||||
sort
|
||||
} = data;
|
||||
// 参数非空检测
|
||||
if(vk.pubfn.isNull(name)){
|
||||
return { code : -1, msg : '名称不能为空' };
|
||||
}
|
||||
let dbName = "vk-files-categories";
|
||||
|
||||
// 检测data_id是否已存在
|
||||
let num = await vk.baseDao.count({
|
||||
dbName,
|
||||
whereJson:{
|
||||
name,
|
||||
_id : _.neq(_id)
|
||||
}
|
||||
});
|
||||
if(num > 0){
|
||||
return { code : -1, msg : `名称【${name}】不能重复!` };
|
||||
}
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.updateById({
|
||||
dbName,
|
||||
id:_id,
|
||||
dataJson:{
|
||||
name,
|
||||
description,
|
||||
sort
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 删除
|
||||
* @url admin/system_uni/uni-id-files/files/kh/delete 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String,Array<String>} _id 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不能为空' };
|
||||
}
|
||||
let whereJson = {};
|
||||
let { role = [] } = userInfo;
|
||||
if (role.indexOf("admin") === -1) {
|
||||
// 如果不是admin角色用户,则只能删除自己上传的
|
||||
whereJson["user_id"] = uid;
|
||||
}
|
||||
if (typeof _id === "string") {
|
||||
// 单条删除
|
||||
whereJson["_id"] = _id;
|
||||
} else if (typeof _id === "object") {
|
||||
// 批量删除
|
||||
whereJson["_id"] = _.in(_id);
|
||||
}
|
||||
let selectRes = await vk.baseDao.select({
|
||||
dbName: "vk-files",
|
||||
pageIndex: 1,
|
||||
pageSize: 500,
|
||||
getMain: true,
|
||||
whereJson,
|
||||
fieldJson: {
|
||||
file_id: true
|
||||
}
|
||||
});
|
||||
if (selectRes.length > 0) {
|
||||
try {
|
||||
let fileList = vk.pubfn.arrayObjectGetArray(selectRes, "file_id");
|
||||
await uniCloud.deleteFile({ fileList });
|
||||
} catch (err) {}
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.del({
|
||||
dbName: "vk-files",
|
||||
whereJson
|
||||
});
|
||||
}
|
||||
res.msg = "ok";
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/uni-id-files/files/kh/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 dbName = "vk-files";
|
||||
let whereJson = {};
|
||||
let { role = [] } = userInfo;
|
||||
let { formData = {} } = data;
|
||||
let { category_id } = formData;
|
||||
if (category_id == "null") {
|
||||
whereJson["category_id"] = null;
|
||||
}
|
||||
if (role.indexOf("admin") === -1) {
|
||||
// 如果不是admin角色用户,则只能查看自己上传的
|
||||
whereJson["user_id"] = uid;
|
||||
}
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson
|
||||
});
|
||||
return res;
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改
|
||||
* @url admin/system_uni/uni-id-files/files/kh/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} display_name 显示在后台的文件名称
|
||||
* @param {String} category_id 分类id
|
||||
* @param {Number} status 0:未审核 1:已审核通过 2:审核不通过
|
||||
* 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,
|
||||
display_name,
|
||||
category_id,
|
||||
cover_image,
|
||||
status = 0
|
||||
} = data;
|
||||
// 参数非空检测
|
||||
if (vk.pubfn.isNullOne(_id)) {
|
||||
return { code: -1, msg: '_id不能为空' };
|
||||
}
|
||||
let dbName = "vk-files";
|
||||
let whereJson = {};
|
||||
let dataJson = {
|
||||
display_name,
|
||||
category_id,
|
||||
cover_image,
|
||||
status
|
||||
};
|
||||
let { role = [] } = userInfo;
|
||||
if (role.indexOf("admin") === -1) {
|
||||
// 如果不是admin角色用户,则只能修改自己上传的
|
||||
whereJson["user_id"] = uid;
|
||||
}
|
||||
if (typeof _id === "string") {
|
||||
// 单条操作
|
||||
whereJson["_id"] = _id;
|
||||
} else if (typeof _id === "object") {
|
||||
// 批量操作
|
||||
whereJson["_id"] = _.in(_id);
|
||||
}
|
||||
if (category_id == "null" || category_id === "") {
|
||||
dataJson["category_id"] = _.remove();
|
||||
}
|
||||
|
||||
// 执行数据库API请求
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName: dbName,
|
||||
whereJson,
|
||||
dataJson
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 分页查询
|
||||
* @url admin/system_uni/uni-id-log/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-log";
|
||||
res = await vk.baseDao.getTableData({
|
||||
dbName,
|
||||
data,
|
||||
whereJson,
|
||||
// 副表列表
|
||||
foreignDB: [{
|
||||
dbName: "opendb-app-list",
|
||||
localKey: "dcloud_appid",
|
||||
foreignKey: "appid",
|
||||
localKeyType: "array",
|
||||
as: "appList",
|
||||
limit: 500
|
||||
},
|
||||
{
|
||||
dbName: "uni-id-users",
|
||||
localKey: "user_id",
|
||||
foreignKey: "_id",
|
||||
as: "userInfo",
|
||||
limit: 1,
|
||||
fieldJson: {
|
||||
_id: true,
|
||||
avatar: true,
|
||||
nickname: true,
|
||||
gender: true
|
||||
}
|
||||
}
|
||||
],
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
## PC后台admin管理端
|
||||
#### `router/service/admin` 目录为后台管理端逻辑
|
||||
#### 以下的目录并非强制性,只是建议,便于统一开发规范。
|
||||
|
||||
```
|
||||
.
|
||||
├── admin──────────────────────# 后台管理端逻辑
|
||||
│ └── system────────────────# 系统(用户、角色、权限、菜单、应用)
|
||||
│ └── system_uni────────────# 系统插件
|
||||
│ └── user──────────────────# 用户管理
|
||||
│ └── order─────────────────# 订单管理
|
||||
│ ── └── xxxxxxxxxxxxxxx──────#
|
||||
│ ── └── xxxxxxxxxxxxxxx──────#
|
||||
│ ── └── xxxxxxxxxxxxxxx──────#
|
||||
│ ── └── xxxxxxxxxxxxxxx──────#
|
||||
└─────────────────────────────────
|
||||
```
|
||||
@@ -0,0 +1,11 @@
|
||||
## 客户端(H5、小程序、APP客户端)
|
||||
#### `router/service/client` 目录为客户端端逻辑
|
||||
#### 以下的目录并非强制性,只是建议,便于统一开发规范。
|
||||
|
||||
```
|
||||
.
|
||||
├── client──────────────────────# 客户端逻辑
|
||||
│ └── user───────────────────# 用户服务
|
||||
│ └── order──────────────────# 订单服务
|
||||
└─────────────────────────────────
|
||||
```
|
||||
@@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 此函数名称
|
||||
* @url user/pub/test1 前端调用的url参数地址
|
||||
* @description 此函数描述
|
||||
* @param {Object} data 请求参数
|
||||
* @param {String} uniIdToken 用户token
|
||||
* @param {String} userInfo 当前登录用户信息(可信任,仅kh目录下的函数有此值)
|
||||
* pub目录下请求参数需要带上 need_user_info = true
|
||||
* @param {Object} util 公共工具包
|
||||
* @param {Object} filterResponse 过滤器返回的数据
|
||||
* @param {Object} originalParam 原始请求参数(包含了原始event和context)
|
||||
* data 请求参数 说明
|
||||
* @param {String} uid 当前登录用户id(可信任,仅kh目录下的函数有此值)
|
||||
* res 返回参数说明
|
||||
* @param {Number} code 错误码,0表示成功
|
||||
* @param {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
// 注意: userInfo 和 uid 是可信任的,但默认只有kh目录下的函数才有此值
|
||||
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
|
||||
let { customUtil, uniID, config, pubFun, vk, db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code: 0, msg: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 可写与数据库的交互逻辑等等
|
||||
|
||||
|
||||
|
||||
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 此函数名称
|
||||
* @url user/pub/test1 前端调用的url参数地址
|
||||
* data 请求参数
|
||||
* @param {String} params1 参数1
|
||||
*/
|
||||
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: "" };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 可写与数据库的交互逻辑等等
|
||||
|
||||
|
||||
|
||||
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 获取accessToken
|
||||
* @url plugs/baidu/client/pub/getAccessToken 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} image 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
|
||||
* @param {String} url 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效请注意关闭URL防盗链
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, config, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : '' };
|
||||
res.access_token = await vk.openapi.baidu.open.auth.getAccessToken();
|
||||
return res;
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 营业执照识别
|
||||
* @url plugs/baidu/client/pub/ocr/business_license 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} image 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
|
||||
* @param {String} url 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效请注意关闭URL防盗链
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, config, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : '' };
|
||||
let { image, url } = data;
|
||||
res = await vk.openapi.baidu.open.request({
|
||||
action:"ocr/v1/business_license",
|
||||
actionVersion: "2.0",
|
||||
data:{
|
||||
image,
|
||||
url
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
/**
|
||||
* 身份证识别
|
||||
* @url plugs/baidu/client/pub/ocr/idcard 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @param {String} image 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
|
||||
* @param {String} url 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效请注意关闭URL防盗链
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, config, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : '' };
|
||||
let { image, url } = data;
|
||||
res = await vk.openapi.baidu.open.request({
|
||||
action:"ocr/v1/idcard",
|
||||
actionVersion: "2.0",
|
||||
data:{
|
||||
image,
|
||||
url
|
||||
}
|
||||
});
|
||||
return res;
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 此函数名称
|
||||
* @url plugs/components_dynamic/client/pub/getComponentsDynamicData 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* @params {String} uid 当前登录用户id,若用户已登录且token有效,则data中会带uid参数
|
||||
* (此参数是后端过滤器通过token获取并添加到data中的,是可信任的)(只有kh函数才带此参数)
|
||||
* @params {Array<String>} ids 需要获取的组件数据 id数组
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, config, pubFun, vk , db, _ } = util;
|
||||
let { uid, ids } = data;
|
||||
let res = { code : 0, msg : '' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 根据ids获取组件动态数据列表
|
||||
let res_select = await vk.baseDao.select({
|
||||
dbName:"vk-components-dynamic",
|
||||
getCount:false,
|
||||
pageSize:100,
|
||||
whereJson:{
|
||||
data_id : _.in(ids)
|
||||
},
|
||||
}, event.util);
|
||||
// 将数组形式 转换成 组件需要的格式
|
||||
res.componentsDynamic = {};
|
||||
for(let i in res_select.rows){
|
||||
let item = res_select.rows[i];
|
||||
res.componentsDynamic[item.data_id] = item.data;
|
||||
}
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 初始化数据
|
||||
* @url plugs/components_dynamic/client/pub/init 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 承载所有读操作的 promise 的数组
|
||||
let dbName = "vk-components-dynamic";
|
||||
let data_ids = [
|
||||
"vk-test-notice-bar-01",
|
||||
"vk-test-notice-bar-02",
|
||||
"vk-test-notice-bar-03",
|
||||
"vk-test-notice-bar-04",
|
||||
"vk-test-index-swiper-01",
|
||||
"vk-test-grid-button-01"
|
||||
];
|
||||
let whereJson = {
|
||||
data_id:_.in(data_ids)
|
||||
};
|
||||
res = await vk.baseDao.select({
|
||||
dbName:dbName,
|
||||
getCount:true,
|
||||
pageIndex:1,
|
||||
pageSize:100,
|
||||
whereJson:whereJson
|
||||
}, event.util);
|
||||
if(res.rows.length == data_ids.length){
|
||||
return res;
|
||||
}
|
||||
await vk.baseDao.del({
|
||||
dbName:dbName,
|
||||
whereJson:whereJson
|
||||
},event.util);
|
||||
let dataArr = [
|
||||
{
|
||||
"data_id": "vk-test-notice-bar-01",
|
||||
"data": {
|
||||
"list": [
|
||||
"公告111公告111公告111公告111公告111公告111公告111"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"data_id": "vk-test-notice-bar-02",
|
||||
"data": {
|
||||
"list": [
|
||||
"公告222公告222公告222公告222公告222公告222公告222"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"data_id": "vk-test-notice-bar-03",
|
||||
"data": {
|
||||
"list": [
|
||||
"公告333333公告333333公告333333公告333333公告333333"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"data_id": "vk-test-notice-bar-04",
|
||||
"data": {
|
||||
"list": [
|
||||
"公告44444公告44444公告44444公告44444公告44444公告44444"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"data_id": "vk-test-index-swiper-01",
|
||||
"data": {
|
||||
"list": [
|
||||
{
|
||||
"title": "标题11111111",
|
||||
"image": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594798331539&di=fe544344d765e4f23f90457f02a2d361&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F1%2F58f03bf05fddb.jpg%3Fdown"
|
||||
},
|
||||
{
|
||||
"title": "标题2222222",
|
||||
"image": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594798658581&di=bcd5486940ad88cf88a904f411c53e94&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn15%2F600%2Fw1920h1080%2F20180505%2Fad66-hacuuvt5802647.jpg"
|
||||
},
|
||||
{
|
||||
"title": "标题3333333",
|
||||
"image": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594798022306&di=ed613c19ef36df7856b383601acb2f05&imgtype=0&src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fwallpaper%2F1306%2F17%2Fc1%2F22199754_1371460645988.jpg"
|
||||
}
|
||||
],
|
||||
"height": 300
|
||||
}
|
||||
},
|
||||
{
|
||||
"data_id": "vk-test-grid-button-01",
|
||||
"data": {
|
||||
"col":4,
|
||||
"icon-size":46,
|
||||
"text-margin-top":10,
|
||||
"text-color":"#000000",
|
||||
"icon-color":"#000000",
|
||||
"border":false,
|
||||
"list":[
|
||||
{
|
||||
"icon":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594798331539&di=fe544344d765e4f23f90457f02a2d361&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F1%2F58f03bf05fddb.jpg%3Fdown",
|
||||
"text":"按钮1",
|
||||
"page":"../vk-u-notice-bar/vk-u-notice-bar"
|
||||
},
|
||||
{
|
||||
"icon":"red-packet",
|
||||
"text":"按钮2",
|
||||
"icon-color":"red",
|
||||
"page":"../vk-u-swiper/vk-u-swiper"
|
||||
},
|
||||
{
|
||||
"icon":"red-packet",
|
||||
"text":"按钮3",
|
||||
"text-color":"red"
|
||||
},
|
||||
{
|
||||
"icon":"red-packet",
|
||||
"text":"按钮4"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
];
|
||||
await vk.baseDao.adds({
|
||||
dbName:dbName,
|
||||
dataJson:dataArr
|
||||
},event.util);
|
||||
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 修改数据
|
||||
* @url plugs/components_dynamic/client/pub/update 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, pubFun, vk , db, _ } = util;
|
||||
let { uid, data_id, data_value } = data;
|
||||
let res = { code : 0, msg : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
res.num = await vk.baseDao.update({
|
||||
dbName:"vk-components-dynamic",
|
||||
whereJson:{
|
||||
data_id : data_id,
|
||||
},
|
||||
dataJson:{
|
||||
data : data_value
|
||||
}
|
||||
},event.util);
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
## 插件
|
||||
#### `router/service/plugs`
|
||||
#### 此目录一般为插件作者开发的一些通用功能,如动态数据组件的API将在此目录,未来会新增微信小程序订阅消息发送等等。
|
||||
|
||||
```
|
||||
.
|
||||
├── plugs──────────────────────# 插件逻辑
|
||||
│ └── plugs-A───────────────────# 插件A
|
||||
│ ────└── admin───────────────────# 插件A admin端
|
||||
│ ────└── client──────────────────# 插件A client端
|
||||
│ └── plugs-B───────────────────# 插件B
|
||||
│ ────└── admin───────────────────# 插件B admin端
|
||||
│ ────└── client──────────────────# 插件B client端
|
||||
└─────────────────────────────────
|
||||
```
|
||||
@@ -0,0 +1,54 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 此函数名称
|
||||
* @url template/db_api/user/pub/Promise.all 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
let dbName = "vk-test";
|
||||
let runTime1 = new Date().getTime();
|
||||
let addNum = 200;
|
||||
console.log(new Date(runTime1),"开始运行,添加"+addNum+"条数据");
|
||||
// 承载所有读操作的 promise 的数组
|
||||
let tasks = [];
|
||||
for(let i = 1; i <= addNum; i++){
|
||||
let promise = vk.baseDao.add({
|
||||
dbName:dbName,
|
||||
dataJson:{
|
||||
"money": 10.02+i,
|
||||
"_add_time": 1597456395010+i,
|
||||
"user_id": "001"
|
||||
}
|
||||
});
|
||||
tasks.push(promise);
|
||||
}
|
||||
// 等待所有
|
||||
let ids = [];
|
||||
try {
|
||||
res = await Promise.all(tasks).then((values) => {
|
||||
return {
|
||||
//ids:values,
|
||||
total:values.length
|
||||
};
|
||||
});
|
||||
} catch (e) {
|
||||
//console.log("异常:",e,res);
|
||||
console.log("异常:运行超时");
|
||||
res.msg = "运行超时";
|
||||
}
|
||||
let runTime2 = new Date().getTime();
|
||||
let runTime = (runTime2 - runTime1) / 1000 + "秒";
|
||||
console.log(new Date(runTime2),"运行结束,耗时:"+runTime);
|
||||
res.runTime = runTime;
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
module.exports = {
|
||||
/**
|
||||
* 添加单条数据
|
||||
* @url template/db_api/pub/add 前端调用的url参数地址
|
||||
* data 请求参数 说明
|
||||
* res 返回参数说明
|
||||
* @params {Number} code 错误码,0表示成功
|
||||
* @params {String} msg 详细信息
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util, originalParam } = event;
|
||||
let { uniID, pubFun, vk , db, _ } = util;
|
||||
let { uid } = data;
|
||||
let res = { code : 0, msg : 'ok' };
|
||||
// 业务逻辑开始-----------------------------------------------------------
|
||||
// 随机定位开始-----------------------------------------------------------
|
||||
// 为了方便测试,这里固定在杭州市西湖区附近
|
||||
let longitude = 120.12792 + Math.floor(Math.random() * 500) / 10000;
|
||||
let latitude = 30.228932 + Math.floor(Math.random() * 500) / 10000;
|
||||
// 随机定位结束-----------------------------------------------------------
|
||||
res.id = await vk.baseDao.add({
|
||||
dbName:"vk-test",
|
||||
dataJson:{
|
||||
"money": Math.floor(Math.random() * 9 + 1),
|
||||
"user_id": "00"+Math.floor(Math.random() * 2 + 1),
|
||||
"location":new db.Geo.Point(longitude, latitude),
|
||||
"position":{
|
||||
"longitude":longitude,
|
||||
"latitude":latitude,
|
||||
},
|
||||
}
|
||||
});
|
||||
// 业务逻辑结束-----------------------------------------------------------
|
||||
return res;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user