1107
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
+22
@@ -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
|
||||
Reference in New Issue
Block a user