Commit a10dc8ee authored by jisiyu's avatar jisiyu

Merge branch 'master' into feature/merchant-managemet

# Conflicts:
#	server/controllers/goods.js
#	server/router.js
#	src/pages/Groupmeal/components/PageHeader/config.js
#	src/router/Groupmeal/index.js
#	src/service/Goods/goods.js
parents 72b7c588 f37987f3
......@@ -26,6 +26,8 @@
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<script src="http://webapi.amap.com/maps?v=1.3&key=bb057625545d8cf77df1379e7aaae0b5"></script>
<script src="http://webapi.amap.com/ui/1.0/main.js"></script>
<div id="app"></div>
</body>
......
......@@ -11,8 +11,8 @@ const PANDORA_URI = {
};
const API_INTERNAL_URI = {
test: "http://bp-dev.ini.yidian-inc.com",
development: "http://bp-test.ini.yidian-inc.com",
test: "http://bp-test.ini.yidian-inc.com",
development: "http://bp-dev.ini.yidian-inc.com",
production: "http://bp.int.yidian-inc.com",
preprod: "http://bp.pre.int.yidian-inc.com",
};
......
......@@ -2,183 +2,183 @@ const ACTIVITY_URI = require("../config.js").ACTIVITY_URI;
const req = require("../utils/request").httpReq;
// 获取商家列表
exports.getBusinessList = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/ota_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
exports.getBusinessList = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/ota_list`;
const opts = {
url,
method: "GET",
};
ctx.body = await req(ctx, opts);
};
// 添加商品
exports.addGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/add_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.addGoods = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/add_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 商品库列表
exports.pindanGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/pindan_goods`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
exports.pindanGoods = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/pindan_goods`;
const opts = {
url,
method: "GET",
};
ctx.body = await req(ctx, opts);
};
// 查看商品详情
exports.markGoodsInfo = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/marketing_goods_info`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
exports.markGoodsInfo = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/marketing_goods_info`;
const opts = {
url,
method: "GET",
};
ctx.body = await req(ctx, opts);
};
// 编辑商品
exports.editGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.editGoods = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 获取活动过列表
exports.getActivityList = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
exports.getActivityList = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_list`;
const opts = {
url,
method: "GET",
};
ctx.body = await req(ctx, opts);
};
// 修改商品
exports.editGoodsDetail = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.editGoodsDetail = async (ctx) => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 添加营销活动
exports.addMarketing = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/add_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.addMarketing = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/add_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 编辑营销活动
exports.updateMarketing = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.updateMarketing = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 营销活动详情
exports.marketingInfo = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.marketingInfo = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 关闭/开启 活动
exports.updateActivity = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing_online_status`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.updateActivity = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing_online_status`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 查看活动订单
exports.checkActivityDetail = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.checkActivityDetail = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 查看活动订单
exports.checkActivityDetailInfo = async ctx => {
const url = `${ACTIVITY_URI}/order/background/pindan_marketing_info_data_statistics`;
const opts = {
url,
method: "GET",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.checkActivityDetailInfo = async (ctx) => {
const url = `${ACTIVITY_URI}/order/background/pindan_marketing_info_data_statistics`;
const opts = {
url,
method: "GET",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 获取自提点列表
exports.getPlaceList = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/take_place_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
exports.getPlaceList = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/take_place_list`;
const opts = {
url,
method: "GET",
};
ctx.body = await req(ctx, opts);
};
// 添加自提点
exports.addPlace = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/add_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.addPlace = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/add_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
//删除自提点
exports.deletePlace = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/delete_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.deletePlace = async (ctx) => {
const url = `${ACTIVITY_URI}/marketing/background/delete_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
......@@ -3,128 +3,128 @@ const req = require("../utils/request").httpReq;
const controller_utils = require("./utils");
// 获取企业信息列表
exports.auditList = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/audit_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = JSON.stringify(await req(ctx, opts));
exports.auditList = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/audit_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = JSON.stringify(await req(ctx, opts));
};
// 企业认证获取验证码
exports.sendCode = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/lifeinner/send_code`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.sendCode = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/lifeinner/send_code`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 企业认证校验验证码
exports.checkCode = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/lifeinner/check_code`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.checkCode = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/lifeinner/check_code`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 审核列表详情页回显信息列表
exports.getRecordInfo = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/get_record_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
let permission = await controller_utils.getUserPermission(ctx);
permission = JSON.parse(permission);
const request = await req(ctx, opts);
if (permission.is_sensitive_data !== 1) {
request.result.record.entterprise_image = null; // 营业执照照片
request.result.record.legal_person = "********"; // 法人姓名
request.result.record.legal_id_card = "********"; // 法人身份证号
request.result.record.legal_validity_start_time = "********"; // 法人身份证开始时间
request.result.record.legal_validity_end_time = "********"; // 法人身份证结束时间
request.result.record.legal_front_id_card = null; // 法人身份证正面照
request.result.record.legal_back_id_card = null; // 法人身份证反面照
request.result.record.legal_id_card_hash = "********"; // 法人身份证哈希值
request.result.record.enterprice_address = "********"; // 企业地址
request.result.record.legal_issued_by = "********"; // 法人身份证地址
request.result.record.legal_nationality = "********"; // 法人民族
request.result.record.mobile = "********"; // 法人电话
request.result.record.sensitiveWord = false; // 是否有查看敏感词权限
} else {
request.result.record.sensitiveWord = true; // 是否有查看敏感词权限
}
ctx.body = request;
exports.getRecordInfo = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/get_record_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
let permission = await controller_utils.getUserPermission(ctx);
permission = JSON.parse(permission);
const request = await req(ctx, opts);
if (permission.is_sensitive_data !== 1) {
request.result.record.entterprise_image = null; // 营业执照照片
request.result.record.legal_person = "********"; // 法人姓名
request.result.record.legal_id_card = "********"; // 法人身份证号
request.result.record.legal_validity_start_time = "********"; // 法人身份证开始时间
request.result.record.legal_validity_end_time = "********"; // 法人身份证结束时间
request.result.record.legal_front_id_card = null; // 法人身份证正面照
request.result.record.legal_back_id_card = null; // 法人身份证反面照
request.result.record.legal_id_card_hash = "********"; // 法人身份证哈希值
request.result.record.enterprice_address = "********"; // 企业地址
request.result.record.legal_issued_by = "********"; // 法人身份证地址
request.result.record.legal_nationality = "********"; // 法人民族
request.result.record.mobile = "********"; // 法人电话
request.result.record.sensitiveWord = false; // 是否有查看敏感词权限
} else {
request.result.record.sensitiveWord = true; // 是否有查看敏感词权限
}
ctx.body = request;
};
// 历史提交审核日志详情页
exports.getLog = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/get_log`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.getLog = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/get_log`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 企业资料审核
exports.postAudit = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/audit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.postAudit = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/audit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 企业资料修改
exports.opBusinessUpdate = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_business_update`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
}
exports.opBusinessUpdate = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_business_update`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 商户上传营业执照信息
exports.postBusiness = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_business_commit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.postBusiness = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_business_commit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 商户信息代提交(op后台)
exports.opCommit = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_commit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
exports.opCommit = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/inner/op_commit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
......@@ -194,6 +194,45 @@ exports.updateMarketingList = async (ctx) => {
ctx.body = res;
};
//团长列表
exports.coloneList = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/colonel_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//团长申请列表
exports.coloneApplyList = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/colonel_apply_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//团长申请操作
exports.colonelAudit = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/colonel_audit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 商家列表
exports.otaList = async (ctx) => {
const url = `${GOODS_URI}/goods/background/ota_list`;
......@@ -219,7 +258,6 @@ exports.addOta = async (ctx) => {
const res = await req(ctx, opts);
ctx.body = res;
};
// 商家列表-禁用
exports.deleteOta = async (ctx) => {
const url = `${GOODS_URI}/goods/background/delete_ota`;
......@@ -256,3 +294,106 @@ exports.undeleteOta = async (ctx) => {
const res = await req(ctx, opts);
ctx.body = res;
};
//团长获取自提点信息
exports.colonelApplyPoint = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/colonel_show_apply_point`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//团长添加自提点
exports.colonelAddApplyPoint = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/colonel_add_apply_point`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-活动列表
exports.yingxiaoList = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/yingxiao_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-活动列表
exports.toogleYingxiaoOnlineStatus = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/toogle_yingxiao_online_status`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-充值
exports.addAmount = async (ctx) => {
const url = `${GOODS_URI}/coupon/background/add_amount`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-获取充值详情
exports.capitalPoolDetail = async (ctx) => {
const url = `${GOODS_URI}/coupon/background/capital_pool_detail`;
const opts = {
url,
method: "GET",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-查看活动配置
exports.yingxiaoConfig = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/yingxiao_config`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
//营销中心-修改活动配置
exports.yingxiaoSaveConfig = async (ctx) => {
const url = `${GOODS_URI}/marketing/background/yingxiao_save_config`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
This diff is collapsed.
const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const API_INTERNAL_URI = require("../config.js").API_INTERNAL_URI;
//生活号列表
const req = require('../utils/request').httpReq
const req = require("../utils/request").httpReq;
exports.get_life_list = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/lifeinner/life_list`;
var opts = {
url: url,
method: 'GET',
qs: ctx.request.query
}
var url = `${API_INTERNAL_URI}/merchant/lifeinner/life_list`;
var opts = {
url: url,
method: "GET",
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts)
}
ctx.body = await req(ctx, opts);
};
//生活号详情
exports.get_life_info = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/lifeinner/life_info`;
var opts = {
url: url,
method: 'POST',
json: true,
timeout: 8000,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/lifeinner/life_info`;
var opts = {
url: url,
method: "POST",
json: true,
timeout: 8000,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
const qr = require('qr-image');
const qr = require("qr-image");
exports.gen_qr_code = async (ctx) => {
const url = ctx.query.url;
try {
let img = qr.image(decodeURIComponent(url));
ctx.type= 'image/png';
ctx.type = "image/png";
ctx.body = img;
} catch (e) {
ctx.type='text/html;charset=utf-8';
ctx.body='<h1>414 Request-URI Too Large</h1>';
ctx.type = "text/html;charset=utf-8";
ctx.body = "<h1>414 Request-URI Too Large</h1>";
}
};
const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const req = require('../utils/request').httpReq
const controller_utils = require('./utils')
const API_INTERNAL_URI = require("../config.js").API_INTERNAL_URI;
const req = require("../utils/request").httpReq;
const controller_utils = require("./utils");
exports.getAll_role_list = async (ctx, next) => {
ctx.body = await controller_utils.getUserPermission(ctx);
}
ctx.body = await controller_utils.getUserPermission(ctx);
};
exports.getRole_list = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/role_list`;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/role_list`;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.getAdd_role = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/add_role`;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/add_role`;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.get_role_info = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/get_role_info`;
var opts = {
url: url,
method: 'POST',
json: true,
timeout: 8000,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/get_role_info`;
var opts = {
url: url,
method: "POST",
json: true,
timeout: 8000,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.getUpdate_role = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/update_role`;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/update_role`;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.getDelete_role = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/delete_role`;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/delete_role`;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
......@@ -2,37 +2,36 @@ const PANDORA_URI = require("../config.js").PANDORA_URI;
const req = require("../utils/request").httpReq;
const { API_INTERNAL_URI, API_YD_LOGIN } = require("../config.js");
exports.fetch_user = async (ctx, next) => {
const url = `${PANDORA_URI}/api/user/getuser`;
const opts = {
url: url,
method: "GET",
headers: {
Cookie: ctx.request.header.cookie
}
};
ctx.body = await req(ctx, opts);
const url = `${PANDORA_URI}/api/user/getuser`;
const opts = {
url: url,
method: "GET",
headers: {
Cookie: ctx.request.header.cookie,
},
};
ctx.body = await req(ctx, opts);
};
exports.J_login = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/login`;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/login`;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.YD_login = async (ctx, next) => {
var url = API_YD_LOGIN;
var opts = {
url: url,
method: 'POST',
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = API_YD_LOGIN;
var opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const req = require('../utils/request').httpReq
const controller_utils = require('./utils')
const API_INTERNAL_URI = require("../config.js").API_INTERNAL_URI;
const req = require("../utils/request").httpReq;
const controller_utils = require("./utils");
//用户详情
exports.getUser_detail = async (ctx, next) => {
var url = `${API_INTERNAL_URI}/merchant/authority/get_user_info`;
var opts = {
url: url,
method: 'POST',
json: true,
timeout: 8000,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
var url = `${API_INTERNAL_URI}/merchant/authority/get_user_info`;
var opts = {
url: url,
method: "POST",
json: true,
timeout: 8000,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
var query = {
async get_permissions (ctx) {
ctx.body = await controller_utils.getUserPermission(ctx);
}
async get_permissions(ctx) {
ctx.body = await controller_utils.getUserPermission(ctx);
},
};
exports.query = async (ctx, next) => {
var type = ctx.params.type;
if (query[type]) {
try {
ctx.set("Content-Type", "application/json; charset=utf-8");
await query[type](ctx, next);
} catch (e) {
console.error("/api/v1 error", e, ctx.url, ctx.headers["cookie"]);
ctx.body = { status: "failed", reason: "Internal Server Error" };
var type = ctx.params.type;
if (query[type]) {
try {
ctx.set("Content-Type", "application/json; charset=utf-8");
await query[type](ctx, next);
} catch (e) {
console.error("/api/v1 error", e, ctx.url, ctx.headers["cookie"]);
ctx.body = { status: "failed", reason: "Internal Server Error" };
}
} else {
ctx.body = {
status: "failed",
reason: "Invalid type param",
};
}
} else {
ctx.body = {
status: "failed",
reason: "Invalid type param"
};
}
};
exports.user_list = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/merchant/authority/get_user_list`;
const opts = {
url: url,
method: "GET",
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
const url = `${API_INTERNAL_URI}/merchant/authority/get_user_list`;
const opts = {
url: url,
method: "GET",
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
exports.user_detail = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/merchant/authority/get_user_info`;
const opts = {
url: url,
method: "GET",
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
const url = `${API_INTERNAL_URI}/merchant/authority/get_user_info`;
const opts = {
url: url,
method: "GET",
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
exports.user_edit = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/merchant/authority/update_user`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
const url = `${API_INTERNAL_URI}/merchant/authority/update_user`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
exports.user_new = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/merchant/authority/add_user_role`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
const url = `${API_INTERNAL_URI}/merchant/authority/add_user_role`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
//通过手机号获取小程序用户信息
exports.getPhoneWechat = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/user/background/get_phone_wechat`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 配置优惠券
exports.couponGrant = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/coupon/background/grant`;
const opts = {
url: url,
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const req = require('../utils/request').httpReq
const API_INTERNAL_URI = require("../config.js").API_INTERNAL_URI;
const req = require("../utils/request").httpReq;
exports.getUserPermission = async (ctx) => {
const url = `${API_INTERNAL_URI}/merchant/authority/get_role_list`;
const { email, op_cur_user } = ctx.request.query;
const user = email || op_cur_user;
const opts = {
url,
method: "GET",
qs: {
// user_email: "jianghaiming@126.com"
user_email: user
}
};
return await req(ctx, opts);
}
\ No newline at end of file
const url = `${API_INTERNAL_URI}/merchant/authority/get_role_list`;
const { email, op_cur_user } = ctx.request.query;
const user = email || op_cur_user;
const opts = {
url,
method: "GET",
qs: {
// user_email: "jianghaiming@126.com"
user_email: user,
},
};
return await req(ctx, opts);
};
......@@ -17,139 +17,139 @@ const req = require("../utils/request").httpReq;
* };
*/
// 获取提现审核列表
exports.getApplyList = async ctx => {
exports.getApplyList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/apply_list`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
// 获取黑名单冻结账户
exports.getBlackList = async ctx => {
exports.getBlackList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/blacklist`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 获取通过、拒绝订单审核
exports.getWithdrawAudit = async ctx => {
exports.getWithdrawAudit = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/withdraw_audit`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
timeout: 10000
}
ctx.body = await req(ctx, opts)
}
timeout: 10000,
};
ctx.body = await req(ctx, opts);
};
// 获取提现失败冻结
exports.getFreezingFund = async ctx => {
exports.getFreezingFund = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/back_freezing_fund`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 获取提现审核详情
exports.getApplyDetail = async ctx => {
exports.getApplyDetail = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/apply_detail`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx, opts)
}
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
// 提现审核迭代
// 获取钱包账户列表
exports.getAccountList = async ctx => {
exports.getAccountList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/account_list`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx, opts)
}
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
// 获取钱包账户流水列表
exports.getRecordList = async ctx => {
exports.getRecordList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/record_list`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx, opts)
}
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
// 钱包账户黑名单
exports.getAccountBlackList = async ctx => {
exports.getAccountBlackList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/blacklist`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 钱包账户释放
exports.getReblackList = async ctx => {
exports.getReblackList = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/reblacklist`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
// 获取钱包账户余额状态
exports.getWalletAccountStatus = async ctx=>{
exports.getWalletAccountStatus = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/get_wallet_account_status`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx,opts)
}
qs: ctx.request.query,
};
ctx.body = await req(ctx, opts);
};
// 钱包账户余额状态
exports.resetAccountStatus = async ctx=>{
exports.resetAccountStatus = async (ctx) => {
const url = `${WITHDRAWAL_URI}/wallet/background/reset_wallet_account_status`;
const opts = {
url,
method:"POST",
json:true,
body:ctx.request.body
}
ctx.body = await req(ctx,opts)
}
method: "POST",
json: true,
body: ctx.request.body,
};
ctx.body = await req(ctx, opts);
};
const getUserPermission = async (ctx) => {
const url = `${WITHDRAWAL_URI}/merchant/authority/get_role_list`;
const { email, op_cur_user } = ctx.request.query;
const user = email || op_cur_user;
const opts = {
url,
method: "GET",
qs: {
// user_email: "jianghaiming@126.com"
user_email: user
}
url,
method: "GET",
qs: {
// user_email: "jianghaiming@126.com"
user_email: user,
},
};
return await req(ctx, opts);
}
exports.getAll_role_list = async (ctx, next) => {
};
exports.getAll_role_list = async (ctx, next) => {
ctx.body = await getUserPermission(ctx);
}
\ No newline at end of file
};
......@@ -26,6 +26,8 @@ router.get(`${API_VERSION}/users`, user.user_list);
router.get(`${API_VERSION}/users/detail`, user.user_detail);
router.post(`${API_VERSION}/users/edit`, user.user_edit);
router.post(`${API_VERSION}/users/new`, user.user_new);
router.post(`${API_VERSION}/users/getPhoneWechat`, user.getPhoneWechat);
router.post(`${API_VERSION}/users/couponGrant`, user.couponGrant);
router.post(`${API_VERSION}/merchant/authority/role_list`, role.getRole_list);
router.post(`${API_VERSION}/merchant/authority/add_role`, role.getAdd_role);
......@@ -70,6 +72,17 @@ router.post(`${API_VERSION}/addOta`, goods.addOta);
router.post(`${API_VERSION}/deleteOta`, goods.deleteOta);
router.post(`${API_VERSION}/updateOta`, goods.updateOta);
router.post(`${API_VERSION}/undeleteOta`, goods.undeleteOta);
router.post(`${API_VERSION}/coloneList`, goods.coloneList);
router.post(`${API_VERSION}/coloneApplyList`, goods.coloneApplyList);
router.post(`${API_VERSION}/colonelAudit`, goods.colonelAudit);
router.post(`${API_VERSION}/colonelApplyPoint`, goods.colonelApplyPoint);
router.post(`${API_VERSION}/colonelAddApplyPoint`, goods.colonelAddApplyPoint);
router.post(`${API_VERSION}/yingxiaoList`, goods.yingxiaoList);
router.post(`${API_VERSION}/addAmount`, goods.addAmount);
router.get(`${API_VERSION}/capitalPoolDetail`, goods.capitalPoolDetail);
router.post(`${API_VERSION}/toogleYingxiaoOnlineStatus`, goods.toogleYingxiaoOnlineStatus);
router.post(`${API_VERSION}/yingxiaoConfig`, goods.yingxiaoConfig);
router.post(`${API_VERSION}/yingxiaoSaveConfig`, goods.yingxiaoSaveConfig);
//生活号
router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info);
......
<template>
<div class="YDDialog">
<el-dialog
:title="dialogTitle"
v-model="dialogVisible"
:width="dialogWidth"
:show-close="showDialogClose"
:top="dialogMarginTop"
:modal="dialogModel"
:close-on-click-modal="dialogCloseOnClickModal"
:close-on-press-escape="dialogCloseOnPressEscape"
:center="dialogCenter"
>
<slot></slot>
<template #footer>
<span class="dialog-footer">
<el-button v-show="isShowCancelButton" @click="cancel">{{
cancelButtonText
}}</el-button>
<el-button
v-show="isShowConfirmButton"
type="primary"
@click="cofirm"
>{{ confirmButtonText }}</el-button
>
</span>
</template>
</el-dialog>
</div>
<div class="YDDialog">
<el-dialog
:title="dialogTitle"
v-model="dialogVisible"
:width="dialogWidth"
:show-close="showDialogClose"
:top="dialogMarginTop"
:modal="dialogModel"
:close-on-click-modal="dialogCloseOnClickModal"
:close-on-press-escape="dialogCloseOnPressEscape"
:center="dialogCenter"
>
<slot></slot>
<template #footer>
<span class="dialog-footer">
<el-button v-show="isShowCancelButton" @click="cancel">{{ cancelButtonText }}</el-button>
<el-button v-show="isShowConfirmButton" type="primary" @click="cofirm">{{ confirmButtonText }}</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script>
export default {
props: {
// 标题
dialogTitle: {
type: String,
default: "标题"
},
// dialog 显示控制
myDialogVisible: {
type: Boolean,
default: false
},
// 确认button文案
confirmButtonText: {
type: String,
default: "确 定"
},
// 取消button文案
cancelButtonText: {
type: String,
default: "取 消"
},
// 宽度
dialogWidth: {
type: String,
default: "50%"
},
// 距离顶部的margin
dialogMarginTop: {
type: String,
default: "15vh"
},
// 是否需要遮罩层
dialogModel: {
type: Boolean,
default: true
},
// 点击遮罩层是否关闭dialog
dialogCloseOnClickModal: {
type: Boolean,
default: false
},
// 是否显示关闭(右上角X)
showDialogClose: {
type: Boolean,
default: false
},
// 是否展示确定按钮
isShowConfirmButton: {
type: Boolean,
default: true
},
// 是否展示取消按钮
isShowCancelButton: {
type: Boolean,
default: true
},
// 点击esc是否关闭
dialogCloseOnPressEscape: {
type: Boolean,
default: false
},
// 底部按钮是否居中显示
dialogCenter: {
type: Boolean,
default: false
},
// cancelDialog 方法名称
cancelDialogMethodName: {
type: String,
default: "dialogCancel"
},
// confirmDialog 方法名称
confirmDialogMethodName: {
type: String,
default: "dialogConfirm"
}
},
data() {
return {
dialogVisible: this.myDialogVisible
};
},
export default {
props: {
// 标题
dialogTitle: {
type: String,
default: "标题",
},
// dialog 显示控制
myDialogVisible: {
type: Boolean,
default: false,
},
// 确认button文案
confirmButtonText: {
type: String,
default: "确 定",
},
// 取消button文案
cancelButtonText: {
type: String,
default: "取 消",
},
// 宽度
dialogWidth: {
type: String,
default: "50%",
},
// 距离顶部的margin
dialogMarginTop: {
type: String,
default: "15vh",
},
// 是否需要遮罩层
dialogModel: {
type: Boolean,
default: true,
},
// 点击遮罩层是否关闭dialog
dialogCloseOnClickModal: {
type: Boolean,
default: false,
},
// 是否显示关闭(右上角X)
showDialogClose: {
type: Boolean,
default: false,
},
// 是否展示确定按钮
isShowConfirmButton: {
type: Boolean,
default: true,
},
// 是否展示取消按钮
isShowCancelButton: {
type: Boolean,
default: true,
},
// 点击esc是否关闭
dialogCloseOnPressEscape: {
type: Boolean,
default: false,
},
// 底部按钮是否居中显示
dialogCenter: {
type: Boolean,
default: false,
},
// cancelDialog 方法名称
cancelDialogMethodName: {
type: String,
default: "dialogCancel",
},
// confirmDialog 方法名称
confirmDialogMethodName: {
type: String,
default: "dialogConfirm",
},
},
data() {
return {
dialogVisible: this.myDialogVisible,
};
},
watch: {
myDialogVisible(newVal) {
this.dialogVisible = newVal;
}
},
methods: {
cancel() {
this.$emit(this.cancelDialogMethodName);
},
cofirm() {
this.$emit(this.confirmDialogMethodName);
}
}
};
watch: {
myDialogVisible(newVal) {
this.dialogVisible = newVal;
},
},
methods: {
cancel() {
this.$emit(this.cancelDialogMethodName);
},
cofirm() {
this.$emit(this.confirmDialogMethodName);
},
},
};
</script>
<style lang="less" scoped></style>
<template>
<div class="page-footer"></div>
<div class="page-footer"></div>
</template>
<script>
export default {};
export default {};
</script>
<style></style>
<template>
<el-dropdown>
<div class="user-info">
<el-avatar
:src="userInfo.avatar || DEFAULT_AVATAR"
size="small"
></el-avatar>
<span class="user-name">{{userInfo.name}}</span>
</div>
<template #dropdown>
<el-dropdown-menu trigger="hover">
<el-dropdown-item>
{{ userEmail }}
</el-dropdown-item>
<el-dropdown-item @click="$emit('logout')">
退出登录
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<div class="user-info">
<el-avatar :src="userInfo.avatar || DEFAULT_AVATAR" size="small"></el-avatar>
<span class="user-name">{{ userInfo.name }}</span>
</div>
<template #dropdown>
<el-dropdown-menu trigger="hover">
<el-dropdown-item>
{{ userEmail }}
</el-dropdown-item>
<el-dropdown-item @click="$emit('logout')">退出登录</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<script>
import { mapState } from 'vuex'
import { HEADER_CONFIG } from '@/config/pageconfig';
import { getCookie } from "@/utils/util";
import { mapState } from "vuex";
import { HEADER_CONFIG } from "@/config/pageconfig";
import { getCookie } from "@/utils/util";
export default {
computed: mapState({
userInfo: state => (state.userInfo || {}),
}),
export default {
computed: mapState({
userInfo: (state) => state.userInfo || {},
}),
data () {
return {
DEFAULT_AVATAR: HEADER_CONFIG.miscellaneous.defaultAvatar,
userEmail: ''
data() {
return {
DEFAULT_AVATAR: HEADER_CONFIG.miscellaneous.defaultAvatar,
userEmail: "",
};
},
mounted() {
this.userEmail = getCookie("username") || "";
},
};
},
mounted() {
this.userEmail = getCookie('username') || ''
}
};
</script>
<style lang="less" scoped>
.user-info {
display: flex;
align-items: center;
}
.user-info {
display: flex;
align-items: center;
}
.user-name {
margin-left: 12px;
color: #fff;
}
.user-name {
margin-left: 12px;
color: #fff;
}
</style>
const headerConfig = {
appName: 'OP运营管理后台',
logo: 'http://si1.go2yd.com/get-image/0ZAJxXeZ6iu',
menuItems: [
{
path: '/enterprise/certification',
name: '企业认证管理'
appName: "OP运营管理后台",
logo: "http://si1.go2yd.com/get-image/0ZAJxXeZ6iu",
menuItems: [
{
path: "/enterprise/certification",
name: "企业认证管理",
},
{
path: "/lifeNo",
name: "生活号管理",
},
{
path: "/role",
name: "角色管理",
},
{
path: "/user",
name: "用户管理",
},
],
miscellaneous: {
// 配置当用户头像不存在时使用的fallback头像图URL
defaultAvatar: "//s.go2yd.com/a/thead_meiguoduizhang.png",
},
{
path: '/lifeNo',
name: '生活号管理'
},
{
path: '/role',
name: '角色管理'
},
{
path: '/user',
name: '用户管理'
}
],
miscellaneous: {
// 配置当用户头像不存在时使用的fallback头像图URL
defaultAvatar: '//s.go2yd.com/a/thead_meiguoduizhang.png',
},
};
export default headerConfig;
\ No newline at end of file
export default headerConfig;
<template>
<div>
<el-menu
:router="true"
background-color="#545c64"
text-color="#fff"
:default-active="activeMenu"
active-text-color="#ffd04b"
mode="horizontal"
>
<el-menu-item
v-for="item in menuItemsWithAuth"
:index="item.path"
:key="item.name"
<div>
<el-menu
:router="true"
background-color="#545c64"
text-color="#fff"
:default-active="activeMenu"
active-text-color="#ffd04b"
mode="horizontal"
>
{{ item.name }}
</el-menu-item>
<el-menu-item key="usermenu" class="user-menu">
<user @logout="handleLogout"></user>
</el-menu-item>
</el-menu>
</div>
<el-menu-item v-for="item in menuItemsWithAuth" :index="item.path" :key="item.name">
{{ item.name }}
</el-menu-item>
<el-menu-item key="usermenu" class="user-menu">
<user @logout="handleLogout"></user>
</el-menu-item>
</el-menu>
</div>
</template>
<script>
import { HEADER_CONFIG } from "@/config/pageconfig";
import User from './User.vue';
import { createNamespacedHelpers } from 'vuex'
const { mapActions } = createNamespacedHelpers('login')
const { menuItems } = HEADER_CONFIG;
import { HEADER_CONFIG } from "@/config/pageconfig";
import User from "./User.vue";
import { createNamespacedHelpers } from "vuex";
const { mapActions } = createNamespacedHelpers("login");
const { menuItems } = HEADER_CONFIG;
export default {
name: "PageHeader",
components: {
User,
},
data () {
return {
menuItems,
};
},
computed: {
menuItemsWithAuth: function () {
const keys = Object.keys(this.$store.getters.subPermissions)
return this.menuItems.filter(ele => keys.includes(ele.key))
},
export default {
name: "PageHeader",
components: {
User,
},
data() {
return {
menuItems,
};
},
computed: {
menuItemsWithAuth: function () {
const keys = Object.keys(this.$store.getters.subPermissions);
return this.menuItems.filter((ele) => keys.includes(ele.key));
},
activeMenu: function () {
return this.$route.path;
},
},
beforeMount () {
},
methods: {
...mapActions(['logout']),
handleLogout() {
this.logout()
},
},
};
activeMenu: function () {
return this.$route.path;
},
},
beforeMount() {},
methods: {
...mapActions(["logout"]),
handleLogout() {
this.logout();
},
},
};
</script>
<style lang="less">
.menu-router {
display: inline-block;
line-height: 60px;
width: 100%;
}
.user-menu {
float: right !important;
margin-right: 20px;
}
.menu-router {
display: inline-block;
line-height: 60px;
width: 100%;
}
.user-menu {
float: right !important;
margin-right: 20px;
}
</style>
<template>
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
v-model:currentPage="currentPage"
:page-size="pageSize"
layout=" total,prev, pager, next"
:total="totalNum"
>
</el-pagination>
</div>
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
v-model:currentPage="currentPage"
:page-size="pageSize"
layout=" total,prev, pager, next"
:total="totalNum"
></el-pagination>
</div>
</template>
<script>
export default {
props: {
data: Object,
totalNum: Number,
pageSize: {
type: Number,
default: 20,
}
},
data () {
return {
currentPage: 1
}
},
methods: {
handleSizeChange (size) {
console.log(`每页 ${size} 条`);
this.$emit('update', { pageSize: size, })
},
handleCurrentChange (pageIndex) {
console.log(`当前页: ${pageIndex}`);
this.$emit('update', { page: pageIndex })
}
},
}
export default {
props: {
data: Object,
totalNum: Number,
pageSize: {
type: Number,
default: 20,
},
},
data() {
return {
currentPage: 1,
};
},
methods: {
handleSizeChange(size) {
console.log(`每页 ${size} 条`);
this.$emit("update", { pageSize: size });
},
handleCurrentChange(pageIndex) {
console.log(`当前页: ${pageIndex}`);
this.$emit("update", { page: pageIndex });
},
},
};
</script>
<style lang="less">
.block {
margin-top: 50px;
}
</style>
\ No newline at end of file
.block {
margin-top: 50px;
}
</style>
This diff is collapsed.
This diff is collapsed.
<template>
<div class="user-container">
<el-dialog :title="title" v-model="modalVisable" :before-close="cancel">
<el-form :model="data">
<el-form-item label="用户ID" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_id }}</text>
</el-form-item>
<el-form-item label="状态" :label-width="formLabelWidth">
<text class="form-val">{{
data.user_status == 1 ? "启用" : "禁用"
}}</text>
</el-form-item>
<el-form-item label="姓名" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_name }}</text>
</el-form-item>
<el-form-item label="账号" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_email }}</text>
</el-form-item>
<el-form-item label="手机号" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_mobile }}</text>
</el-form-item>
<el-form-item label="所属组织" :label-width="formLabelWidth">
<text class="form-val">{{ data.organization }}</text>
</el-form-item>
<el-form-item label="添加账号人" :label-width="formLabelWidth">
<text class="form-val">{{ data.create_user_name }}</text>
</el-form-item>
<el-form-item label="添加时间" :label-width="formLabelWidth">
<text class="form-val">{{ data.create_time }}</text>
</el-form-item>
<el-form-item label="最后修改人账号" :label-width="formLabelWidth">
<text class="form-val">{{ data.update_user_name }}</text>
</el-form-item>
<el-form-item label="最后修改时间" :label-width="formLabelWidth">
<text class="form-val">{{ data.update_time }}</text>
</el-form-item>
<div class="user-container">
<el-dialog :title="title" v-model="modalVisable" :before-close="cancel">
<el-form :model="data">
<el-form-item label="用户ID" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_id }}</text>
</el-form-item>
<el-form-item label="状态" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_status == 1 ? "启用" : "禁用" }}</text>
</el-form-item>
<el-form-item label="姓名" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_name }}</text>
</el-form-item>
<el-form-item label="账号" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_email }}</text>
</el-form-item>
<el-form-item label="手机号" :label-width="formLabelWidth">
<text class="form-val">{{ data.user_mobile }}</text>
</el-form-item>
<el-form-item label="所属组织" :label-width="formLabelWidth">
<text class="form-val">{{ data.organization }}</text>
</el-form-item>
<el-form-item label="添加账号人" :label-width="formLabelWidth">
<text class="form-val">{{ data.create_user_name }}</text>
</el-form-item>
<el-form-item label="添加时间" :label-width="formLabelWidth">
<text class="form-val">{{ data.create_time }}</text>
</el-form-item>
<el-form-item label="最后修改人账号" :label-width="formLabelWidth">
<text class="form-val">{{ data.update_user_name }}</text>
</el-form-item>
<el-form-item label="最后修改时间" :label-width="formLabelWidth">
<text class="form-val">{{ data.update_time }}</text>
</el-form-item>
<el-form-item label="授权角色信息" :label-width="formLabelWidth">
<text class="form-val">{{
data.roles.map(ele => ele.role_name).join(",")
}}</text>
</el-form-item>
<el-form-item label="敏感词权限" :label-width="formLabelWidth">
<text class="form-val">{{
data.is_sensitive_authority === 1 ? "是" : "否"
}}</text>
</el-form-item>
</el-form>
</el-dialog>
</div>
<el-form-item label="授权角色信息" :label-width="formLabelWidth">
<text class="form-val">{{ data.roles.map((ele) => ele.role_name).join(",") }}</text>
</el-form-item>
<el-form-item label="敏感词权限" :label-width="formLabelWidth">
<text class="form-val">{{ data.is_sensitive_authority === 1 ? "是" : "否" }}</text>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
export default {
name: "UserInfoModal",
props: {
mode: {
type: String,
default: "check"
},
data: Object,
title: {
type: String,
default: "用户信息"
},
visable: {
type: Boolean,
default: false
}
},
data() {
return {
formLabelWidth: "180px",
modalVisable: false
export default {
name: "UserInfoModal",
props: {
mode: {
type: String,
default: "check",
},
data: Object,
title: {
type: String,
default: "用户信息",
},
visable: {
type: Boolean,
default: false,
},
},
data() {
return {
formLabelWidth: "180px",
modalVisable: false,
};
},
watch: {
visable(val) {
this.modalVisable = val;
},
},
methods: {
cancel: function () {
this.$emit("cancel");
},
},
};
},
watch: {
visable(val) {
this.modalVisable = val;
}
},
methods: {
cancel: function() {
this.$emit("cancel");
}
}
};
</script>
<style lang="less">
.form-val {
margin-left: 20px;
}
.form-val {
margin-left: 20px;
}
</style>
This diff is collapsed.
<template>
<el-dialog
title="提示"
v-model="dialogVisible"
width="30%"
:before-close="handleClose"
>
<span>这是一段信息</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button
>
</span>
</template>
</el-dialog>
<el-dialog title="提示" v-model="dialogVisible" width="30%" :before-close="handleClose">
<span>这是一段信息</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</span>
</template>
</el-dialog>
</template>
<script>
export default {
components: {},
props: {},
data() {
return {
dialogVisible: true
export default {
components: {},
props: {},
data() {
return {
dialogVisible: true,
};
},
watch: {},
computed: {},
methods: {},
created() {},
mounted() {},
};
},
watch: {},
computed: {},
methods: {},
created() {},
mounted() {}
};
</script>
<style lang="less" scoped></style>
const currEnv = "prod"
const currEnv = "prod";
const API_URI = {
'dev': "XXX",
'test': "XXX",
'prod': "XXX"
}
dev: "XXX",
test: "XXX",
prod: "XXX",
};
export default {
API_URI: API_URI[currEnv],
}
\ No newline at end of file
API_URI: API_URI[currEnv],
};
exports.KS3_CONST = {
AccessKeyID: 'AKLTTpZx6fNBQsGSKe5chqHdXA',
AccessKeySecret: 'OG9Bk93RUHwaH71U9K+OtWkvx44AdMheywjFlifILikvh96jNGgznJm+AyR5l4wPhw==',
DOMAIN: 'ks3-cn-beijing.ksyun.com'
}
\ No newline at end of file
AccessKeyID: "AKLTTpZx6fNBQsGSKe5chqHdXA",
AccessKeySecret: "OG9Bk93RUHwaH71U9K+OtWkvx44AdMheywjFlifILikvh96jNGgznJm+AyR5l4wPhw==",
DOMAIN: "ks3-cn-beijing.ksyun.com",
};
// 系统顶栏header展示项
export const HEADER_CONFIG = {
appName: 'OP运营管理后台',
logo: 'http://si1.go2yd.com/get-image/0ZAJxXeZ6iu',
menuItems: [
{
path: '/op/enterprise/certification',
name: '企业认证管理',
key: 'enterprise',
appName: "OP运营管理后台",
logo: "http://si1.go2yd.com/get-image/0ZAJxXeZ6iu",
menuItems: [
{
path: "/op/enterprise/certification",
name: "企业认证管理",
key: "enterprise",
},
{
path: "/op/lifeNo",
name: "生活号管理",
key: "lifeNo",
},
{
path: "/op/roleManageRole",
name: "角色管理",
key: "role",
},
{
path: "/op/user",
name: "用户管理",
key: "user",
},
],
miscellaneous: {
// 配置当用户头像不存在时使用的fallback头像图URL
defaultAvatar: "//s.go2yd.com/a/thead_meiguoduizhang.png",
},
{
path: '/op/lifeNo',
name: '生活号管理',
key: 'lifeNo',
},
{
path: '/op/roleManageRole',
name: '角色管理',
key: 'role',
},
{
path: '/op/user',
name: '用户管理',
key: 'user',
}
],
miscellaneous: {
// 配置当用户头像不存在时使用的fallback头像图URL
defaultAvatar: '//s.go2yd.com/a/thead_meiguoduizhang.png',
},
};
/**
......@@ -35,29 +35,29 @@ export const HEADER_CONFIG = {
* key需要与 「HEADER_CONFIG」 中的key对应。
*/
export const PAGEMODULE_PERMISSIONNAME = {
enterprise: 'enterprise_certification_management',
lifeNo: 'life_official_account_management',
role: 'role_management',
user: 'user_management'
}
enterprise: "enterprise_certification_management",
lifeNo: "life_official_account_management",
role: "role_management",
user: "user_management",
};
export const PERMISSIONNAME_PAGEMODULE = (function () {
const obj = {}
for (let ele in PAGEMODULE_PERMISSIONNAME) {
obj[PAGEMODULE_PERMISSIONNAME[ele]] = ele
}
return obj;
})()
const obj = {};
for (let ele in PAGEMODULE_PERMISSIONNAME) {
obj[PAGEMODULE_PERMISSIONNAME[ele]] = ele;
}
return obj;
})();
/**
* 页面路由对应的权限名称。
* router 用该配置做路由权限拦截。需要增加权限拦截的路由,需在此添加配置。
*/
export const PATH_PERMISSION_NAME = {
'/op/enterprise/certification': 'enterprise_certification_management',
'/op/enterprise/audit': 'enterprise_certification_management.audit',
'/op/enterprise/establish': 'enterprise_certification_management.create',
'/op/lifeNo': 'life_official_account_management',
'/op/roleManageRole': 'role_management',
'/op/user': 'user_management'
}
\ No newline at end of file
"/op/enterprise/certification": "enterprise_certification_management",
"/op/enterprise/audit": "enterprise_certification_management.audit",
"/op/enterprise/establish": "enterprise_certification_management.create",
"/op/lifeNo": "life_official_account_management",
"/op/roleManageRole": "role_management",
"/op/user": "user_management",
};
<template>
<div class="layout">
<!-- 页面公共 header -->
<page-header class="page-header"></page-header>
<div class="layout">
<!-- 页面公共 header -->
<page-header class="page-header"></page-header>
<!-- 页面主体部分 -->
<div class="main">
<slot></slot>
</div>
<!-- 页面主体部分 -->
<div class="main">
<slot></slot>
</div>
<!-- 页面公共 footer -->
<!-- <page-footer class="page-footer"></page-footer> -->
</div>
<!-- 页面公共 footer -->
<!-- <page-footer class="page-footer"></page-footer> -->
</div>
</template>
<script>
import PageHeader from '@/components/PageHeader';
// import PageFooter from '@/components/PageFooter';
import PageHeader from "@/components/PageHeader";
// import PageFooter from '@/components/PageFooter';
export default {
components: {
PageHeader,
// PageFooter,
},
};
export default {
components: {
PageHeader,
// PageFooter,
},
};
</script>
<style lang="less" src="./index.less"></style>
......@@ -94,7 +94,8 @@
<p class="price">
<span class="nowPrice">{{ `¥${goodsItem.price}` }}</span>
<span class="originPrice">{{ `¥${goodsItem.original_price} ` }}</span>
<span class="sold">已售{{ goodsItem.all_have_buy_goods_count }}</span>
<span class="sold" v-if="goodsItem.inventory_rest == 0">抢光了</span>
<span class="sold" v-else>已售{{ goodsItem.all_have_buy_goods_count }}</span>
</p>
</div>
</div>
......
This diff is collapsed.
......@@ -438,6 +438,7 @@
this.hideUpload = false;
this.inventoryRest = 0;
this.commodityForm.total_amount_order = 0;
this.commodityForm.total_amount_sold = 0;
this.addCommodityTitle = "商品添加";
} else {
this.addCommodityTitle = "商品编辑";
......@@ -453,7 +454,7 @@
goods_name: this.commodityForm.goods_name,
desc_pic_url: this.picStr,
desc: "",
inventory: this.commodityForm.inventory_total - this.inventory,
inventory: this.commodityForm.inventory_total,
original_price: this.commodityForm.original_price,
marketing_type: "4",
price: this.commodityForm.price,
......@@ -600,11 +601,13 @@
width: 90%;
margin: 0 auto;
}
.buttons_actions {
display: flex;
justify-content: space-around;
align-items: center;
}
.btnGroup {
margin-bottom: 15px;
}
......@@ -613,8 +616,8 @@
margin: 0 20px 0 0;
}
.infoForm /deep/.el-form-item:nth-child(1),
.infoForm /deep/.el-form-item:nth-child(2) {
.infoForm /deep/ .el-form-item:nth-child(1),
.infoForm /deep/ .el-form-item:nth-child(2) {
width: 100%;
}
......
<template>
<div>
没有权限!
</div>
<div>没有权限!</div>
</template>
<script>
export default {
};
export default {};
</script>
<style lang="less">
</style>
<style lang="less"></style>
<template>
<div>
<layout>
页面不存在!
</layout>
</div>
<div>
<layout>页面不存在!</layout>
</div>
</template>
<script>
import Layout from '@/layouts';
export default {
components: {
Layout,
},
};
import Layout from "@/layouts";
export default {
components: {
Layout,
},
};
</script>
<style lang="less">
</style>
<style lang="less"></style>
This diff is collapsed.
<template>
<layout>
<!-- 标题 -->
<el-page-header
class="title"
content="企业信息提交"
@back="goBack"
></el-page-header>
<layout>
<!-- 标题 -->
<el-page-header class="title" content="企业信息提交" @back="goBack"></el-page-header>
<enterprise-form :type="'SUBMIT'"></enterprise-form>
</layout>
<enterprise-form :type="'SUBMIT'"></enterprise-form>
</layout>
</template>
<style lang="less" src="./index.less" scope></style>
<script>
import Layout from "@/layouts";
import EnterpriseForm from "../components/enterpriseForm.vue";
export default {
name: "Establish",
components: { Layout, EnterpriseForm },
import Layout from "@/layouts";
import EnterpriseForm from "../components/enterpriseForm.vue";
export default {
name: "Establish",
components: { Layout, EnterpriseForm },
created () {
},
created() {},
data () {
return {};
},
data() {
return {};
},
methods: {
// 返回
goBack () {
this.$router.replace({ name: "Certification" });
},
}
};
methods: {
// 返回
goBack() {
this.$router.replace({ name: "Certification" });
},
},
};
</script>
This diff is collapsed.
<template>
<el-dropdown>
<div class="user-info">
<el-avatar
:src="userInfo.avatar || DEFAULT_AVATAR"
size="small"
></el-avatar>
<span class="user-name">{{userInfo.name}}</span>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
{{ userEmail }}
</el-dropdown-item>
<el-dropdown-item @click="$emit('logout')">
退出登录
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<div class="user-info">
<el-avatar :src="userInfo.avatar || DEFAULT_AVATAR" size="small"></el-avatar>
<span class="user-name">{{ userInfo.name }}</span>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
{{ userEmail }}
</el-dropdown-item>
<el-dropdown-item @click="$emit('logout')">退出登录</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<script>
import { mapState } from 'vuex'
import { HEADER_CONFIG } from '@/config/pageconfig';
import { getCookie } from "@/utils/util";
export default {
computed: mapState({
userInfo: state => (state.userInfo || {}),
}),
import { mapState } from "vuex";
import { HEADER_CONFIG } from "@/config/pageconfig";
import { getCookie } from "@/utils/util";
export default {
computed: mapState({
userInfo: (state) => state.userInfo || {},
}),
data () {
return {
DEFAULT_AVATAR: HEADER_CONFIG.miscellaneous.defaultAvatar,
userEmail: ''
data() {
return {
DEFAULT_AVATAR: HEADER_CONFIG.miscellaneous.defaultAvatar,
userEmail: "",
};
},
mounted() {
this.userEmail = getCookie("username") || "";
},
};
},
mounted() {
this.userEmail = getCookie('username') || ''
}
};
</script>
<style lang="less" scoped>
.user-info {
display: flex;
align-items: center;
}
.user-info {
display: flex;
align-items: center;
}
.user-name {
margin-left: 12px;
color: #fff;
}
.user-name {
margin-left: 12px;
color: #fff;
}
</style>
const headerConfig = [
{
name: "商品管理",
path: "/op/goods/list"
},
{
name: "分销",
path: "/op/goods/retail"
},
{
name: "商品管理",
path: "/op/goods/list",
},
{
name: "分销",
path: "/op/goods/retail",
},
];
export default headerConfig;
\ No newline at end of file
export default headerConfig;
<template>
<div class="layout">
<!-- 页面公共 header -->
<page-header class="page-header"></page-header>
<div class="layout">
<!-- 页面公共 header -->
<page-header class="page-header"></page-header>
<!-- 页面主体部分 -->
<div class="main">
<slot></slot>
<!-- 页面主体部分 -->
<div class="main">
<slot></slot>
</div>
</div>
</div>
</template>
<script>
import PageHeader from "../components/PageHeader";
import PageHeader from "../components/PageHeader";
export default {
components: { PageHeader }
};
export default {
components: { PageHeader },
};
</script>
<style lang="less" src="./index.less"></style>
// 检测内容是否带表情符号
function checkString (strings) {
const checkKey = /[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g;
if (checkKey.test(strings)) {
return false;
} else {
return true;
};
};
export default { checkString }
\ No newline at end of file
function checkString(strings) {
const checkKey =
/[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g;
if (checkKey.test(strings)) {
return false;
} else {
return true;
}
}
export default { checkString };
This diff is collapsed.
......@@ -19,6 +19,18 @@ const headerConfig = [
path: "/op/groupmeal/merchantManagement",
name: "商家管理",
},
{
path: "/op/groupmeal/marketing",
name: "营销中心",
},
{
path: "/op/groupmeal/headManagement",
name: "团长管理",
},
{
path: "/op/groupmeal/couponManagement",
name: "优惠券配置",
},
];
export default headerConfig;
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
export const defaultParams = {
appid: "merchant-op-auditing"
}
appid: "merchant-op-auditing",
};
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment