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