xlb-main-login
Version:
``` yarn install ```
571 lines (530 loc) • 20.4 kB
JavaScript
import { wei_url } from '@/api/config'
import { axios } from '@/utils/request'
import { weichat } from '@/api/config'
const baseUrl = '/demo-wechat-work'
//列表
export function LuckDrawFissionList(params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery',
method: 'get',
params,
})
}
// 开启检测
export function enableSwitch(data) {
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: wei_url + baseUrl + '/v1/fission/lottery',
method: 'put',
data,
})
}
// 删除
export function del(id) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery?id=' + id,
method: 'delete',
})
}
//**************新增和编辑******************/
//新增
export function add(data) {
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: wei_url + baseUrl + '/v1/fission/lottery',
method: 'post',
data,
})
}
//编辑
export function edit(data) {
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: wei_url + baseUrl + '/v1/fission/lottery',
method: 'put',
data,
})
}
// 回显
export function getDetail(id) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/' + id,
method: 'get',
})
}
//******************推广******************/
//列表
export function extensionList(params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/spread',
method: 'get',
params,
})
}
// 删除
export function extensionDel(eventId, id) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/spread?id=' + id + '&eventId=' + eventId,
method: 'delete',
})
}
//新增
export function extensionAdd(data) {
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: wei_url + baseUrl + '/v1/fission/lottery/spread',
method: 'post',
data,
})
}
//编辑抽奖渠道码列表
export function puTDraw(data) {
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: wei_url + baseUrl + '/v1/fission/lottery/spread',
method: 'put',
data,
})
}
//下载-内部推广渠道的二维码
export function downqrcode(id, eventId) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/spread/' + id + '/qr' + '?eventId=' + eventId,
method: 'get',
})
}
//下载-复制链接
export function downqrcodecopyLink(id, eventId) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/spread/' + id + '/url' + '?eventId=' + eventId,
method: 'get',
})
}
//下载-一键群发
export function downqrcodesendMsg(id, eventId) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/spread/' + id + '/sendMsg' + '?eventId=' + eventId,
method: 'get',
})
}
//*************************** 数据分析 ****************************/
//查看基础数据
export function basicDataAnalysis(eventId, params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/base/info' + '?eventId=' + eventId,
method: 'get',
params,
})
}
//用户数据
export function userDataAnalysis(eventId, params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/user/list?eventId=' + eventId,
method: 'get',
params,
})
}
//用户下级数据
export function subordinateDataAnalysis(params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/user/item/list',
method: 'get',
params,
})
}
//查看中奖数据
export function winningDataAnalysis(params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/lottery/list',
method: 'get',
params,
})
}
//查看用户数据导出
export function dataExportAnalysis(eventId, params) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/user/list/e' + '?eventId=' + eventId,
method: 'get',
params,
})
}
//查看下级用户数据导出
export function subordinateDataExportAnalysis(eventId, userId) {
return axios({
url:
wei_url + baseUrl + '/v1/fission/lottery/analysis/user/item/list/e' + '?eventId=' + eventId + '&userId=' + userId,
method: 'get',
})
}
//查看中奖数据导出
export function winningDataExportAnalysis(eventId) {
return axios({
url: wei_url + baseUrl + '/v1/fission/lottery/analysis/lottery/list/e?eventId=' + eventId,
method: 'get',
})
}
// 黑名单列表
export function getworkblackpeolist(eventId, params) {
return axios({
url: wei_url + '/demo-wechat-work/v1/fission/lottery/analysis/ban/list?eventId=' + eventId,
method: 'get',
params,
})
}
// 删除黑名单
export function delworkblackpeo(params) {
return axios({
url: wei_url + '/demo-wechat-work/v1/fission/lottery/analysis/ban/cancel',
method: 'delete',
params,
})
}
// 抽奖新的 新增接口
export function addEvent(formData, eventId = '') {
const formTemp = {}
// id
formTemp.id = eventId ? eventId : ''
formTemp.state = eventId ? formData.advanced.state : 0
/***************** 第一步 ******************/
// 第一步 活动名称
formTemp.title = formData.information.title
// 第一步 活动描述
formTemp.eventDescription = formData.information.eventDescription
// 第一步 上传封面图
formTemp.path = formData.information.coverMap
// 第一步 抽奖规则
const fissionLotteryObtain = {
freeNum: formData.information.threshold, //无门槛抽奖次数
inviteNum: formData.information.people, //每邀请人数
eachExtraNum: formData.information.additionalNum, //额外抽奖次数
maxExtraNum: formData.information.totalNum, //最多额外抽奖次数
}
formTemp.fissionLotteryObtain = JSON.stringify(fissionLotteryObtain)
// 第一步 活动说明
formTemp.description = formData.information.description
// 第一步 起止时间
formTemp.startTime = formData.information.startTime
formTemp.endTime = formData.information.endTime
// 第一步 获客成员
formTemp.staffList = JSON.stringify(formData.information.staffUserId)
/***************** 第二步 ******************/
// 第二步 奖品管理
formTemp.lotteryItemList = JSON.stringify(formData.luckDrawSecond.prizeList)
// 第二步 上传客服二维码
formTemp.serverImgPath = formData.luckDrawSecond.QRCode
/***************** 第三步 ******************/
// 第三步 海报
const posterList = []
formData.poster.posterFormData.forEach((item) => {
posterList.push({
background: item.posterForm.background, // 背景图
circle: item.headData.circle, // 圆形头像 1_开启 0_关闭
dr: item.posterForm.dr || 0, // 默认0
eventId: eventId, // 对应活动的id
fontColor: item.nameData.fontColor ? item.nameData.fontColor.replace('#', '0x') : '', //字体颜色
fontName: '', // 新增为空 编辑时有接口返回默认值
fontSize: item.nameData.fontSize, // 字体大小 为0就是隐藏
fontStyle: 0, // 新增为空 编辑时有接口返回默认值
fontx: item.nameData.fontSize == 0 ? 0 : parseInt(item.nameData.x * 2.5), // 字体x轴坐标
fonty: item.nameData.fontSize == 0 ? 0 : parseInt(item.nameData.y * 2.5), // 字体y轴坐标
headUrl: '', // 头像 为空
headUrlHeight: item.headData.show ? parseInt(item.headData.h * 2.5) : 0, // 头像大小 为0就是隐藏
headUrlWidth: item.headData.show ? parseInt(item.headData.w * 2.5) : 0, // 头像大小 为0就是隐藏
headUrlx: item.headData.show ? parseInt(item.headData.x * 2.5) : 0, // 头像大小 为0就是隐藏
headUrly: item.headData.show ? parseInt(item.headData.y * 2.5) : 0, // 头像大小 为0就是隐藏
id: item.posterForm.id || '', // 新增为空 编辑时有接口返回默认值
mini: 1, // mini头像
qrCodeHeight: item.qrData.h == 0 ? 0 : parseInt(item.qrData.h * 2.5), // 二维码大小 为0就是隐藏
qrCodeWeight: item.qrData.w == 0 ? 0 : parseInt(item.qrData.w * 2.5), // 二维码大小 为0就是隐藏
qrCodex: item.qrData.x == 0 ? 0 : parseInt(item.qrData.x * 2.5), // 二维码大小 为0就是隐藏
qrCodey: item.qrData.y == 0 ? 0 : parseInt(item.qrData.y * 2.5), // 二维码大小 为0就是隐藏
})
})
formTemp.posterList = JSON.stringify(posterList)
/***************** 第四步 ******************/
const msgList = []
// 裂变规则文案
msgList.push({
enable: 1,
msg: formData.reminder.fissionText,
msgType: 0,
wxMsgType: 'text',
})
// 成功助力好友推送文案
msgList.push({
enable: 1,
msg: formData.reminder.successfully,
msgType: 1,
wxMsgType: 'text',
})
// 用户重复助力提醒文案
msgList.push({
enable: 1,
msg: formData.reminder.repeatedText,
msgType: 4,
wxMsgType: 'text',
})
// 活动结束文案
msgList.push({
enable: formData.reminder.endTextEnable ? 1 : 0,
msg: formData.reminder.endText,
msgType: 6,
wxMsgType: 'text',
})
// 活动结束图片
msgList.push({
enable: formData.reminder.endImgEnable ? 1 : 0,
msg: formData.reminder.endImg,
msgType: 6,
wxMsgType: 'image',
})
/***************** 第五步 ******************/
// 新添加用户才能给好友助力
msgList.push({
enable: formData.advanced.newUserTextEnable ? 1 : 0,
msg: formData.advanced.newUserText,
msgType: 8,
wxMsgType: 'text',
})
// 参与限制提示语
msgList.push({
enable: formData.advanced.participationEnable ? 1 : 0,
msg: formData.advanced.participationText,
msgType: 9,
wxMsgType: 'text',
})
formTemp.msgList = JSON.stringify(msgList) // 保存所有的文案
// 第五步 助力失效
formTemp.enableRepeat = formData.advanced.helpEnable ? 1 : 0
// 第五步 参与限制
const fissionLimit = {
enable: formData.advanced.participationEnable ? 1 : 0, // 是否开启拦截 1_开启 0_关闭
sexWhiteList: formData.advanced.genderId.join(), // 性别 黑名单("1,2")1:男,2:女,0:未知
}
formTemp.fissionLimit = JSON.stringify(fissionLimit)
// 第五步 防刷检测
const fissionBanConfig = {
enable: formData.advanced.antiEnable ? 1 : 0, // 是否开启防刷检测 1_开启 0_关闭
limitNum: formData.advanced.antiNum, // 检测数量(人)
limitTime: formData.advanced.antiTime, // 触发检测时间(秒)
}
formTemp.fissionBanConfig = JSON.stringify(fissionBanConfig)
// 第五步 智能防刷
formTemp.antiRush = formData.advanced.intelligentEnable ? 1 : 0 // 智能防刷 1_开启 0_关闭
// 第五步 自动打标签
const tagList = []
if (formData.advanced.autoTagEnable) {
formData.advanced.tagList.forEach((item) => {
const idList = []
item.tagList.forEach((info) => {
if (info.dr != 1) {
idList.push(info.tagId)
}
})
console.log(idList)
const obj = {
type: item.type,
num: item.num,
tagIdList: idList,
}
if (item.type == 2) {
obj.num = item.userNum
} else if (item.type == 1) {
obj.num = item.ladder
} else if (item.type == 4) {
obj.num = item.levelNum
} else if (item.type == 5) {
obj.num = item.userType
} else {
obj.num = 0
}
tagList.push(obj)
})
}
console.log('formData.advanced.tagList', formData.advanced.tagList)
const fissionTagList = {
enable: formData.advanced.autoTagEnable ? 1 : 0, // 开启自动打标签 1_开启 0_关闭
tagList: tagList,
}
formTemp.fissionTagList = JSON.stringify(fissionTagList)
console.log('抽奖新增/编辑的参数formTemp', formTemp)
// 新增/编辑 抽奖获客活动
return axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
url: weichat + 'v1/fission/lottery',
method: eventId !== '' ? 'put' : 'post',
data: formTemp,
})
}
function getMagItem(type, magList, key = 'msg', msgType = 'text') {
const indexId = magList.findIndex((items) => items.msgType == type && items.wxMsgType == msgType)
if (indexId !== -1) {
return magList[indexId][key]
} else {
return null
}
}
//抽奖获客活动详情
export function getEvent(id) {
const formData = {
information: {}, // 第一步
luckDrawSecond: {}, // 第二步
poster: {
//第三步
posterFormData: [],
},
reminder: {}, // 第四步
advanced: {}, // 第五步
}
return new Promise((resolve) => {
axios({
url: weichat + 'v1/fission/lottery/' + id,
method: 'get',
}).then((res) => {
console.time()
const resData = JSON.parse(JSON.stringify(res.data))
/***************** 第一步 ******************/
// 获客成员数组内字段名要改一下
const staffList = []
JSON.parse(resData.staffList).forEach((item) => {
const obj = {}
obj.name = item.name
// obj.dr = 0
obj.avatar = item.headImgUrl
obj.userId = item.userId
staffList.push(obj)
})
formData.information = {
title: resData.title, //活动名称
eventDescription: resData.eventDescription, //活动描述
coverMap: resData.path, //上传封面图
threshold: JSON.parse(resData.fissionLotteryObtain).freeNum, //抽奖规则 无门槛抽奖次数
people: JSON.parse(resData.fissionLotteryObtain).inviteNum, //抽奖规则 每邀请人数
additionalNum: JSON.parse(resData.fissionLotteryObtain).eachExtraNum, //抽奖规则 额外抽奖次数
totalNum: JSON.parse(resData.fissionLotteryObtain).maxExtraNum, //抽奖规则 最多额外抽奖次数
description: resData.description, //活动说明
startTime: resData.startTime ? resData.startTime : null, // 触发时间
endTime: resData.endTime ? resData.endTime : null, // 触发时间
staffList: staffList, //获客成员
staffUserId: JSON.parse(resData.staffList), //获客成员id
}
/***************** 第二步 ******************/
formData.luckDrawSecond = {
QRCode: resData.serverImgPath, // 上传客服二维码
prizeList: JSON.parse(resData.lotteryItemList), // 表格
}
/***************** 第三步 ******************/
// 海报
JSON.parse(resData.posterList).forEach((item, index) => {
formData.poster.posterFormData.push({
headData: {
show: item.headUrly + item.headUrlx + item.headUrlWidth + item.headUrlHeight == 0 ? false : true,
circle: item.circle,
y: item.headUrlWidth + item.headUrlHeight == 0 ? 20 : parseInt(item.headUrly / 2.5),
x: item.headUrlWidth + item.headUrlHeight == 0 ? 20 : parseInt(item.headUrlx / 2.5),
w: item.headUrlWidth + item.headUrlHeight == 0 ? 60 : parseInt(item.headUrlWidth / 2.5),
h: item.headUrlWidth + item.headUrlHeight == 0 ? 60 : parseInt(item.headUrlHeight / 2.5),
},
nameData: {
y: item.fontSize == 0 ? 20 : parseInt(item.fonty / 2.5),
x: item.fontSize == 0 ? 90 : parseInt(item.fontx / 2.5),
fontSize: item.fontSize,
fontColor: item.fontColor ? item.fontColor.replace('0x', '#') : '',
},
qrData: {
y: item.qrCodeWeight + item.qrCodeHeight == 0 ? 20 : parseInt(item.qrCodey / 2.5),
x: item.qrCodeWeight + item.qrCodeHeight == 0 ? 20 : parseInt(item.qrCodex / 2.5),
w: item.qrCodeWeight + item.qrCodeHeight == 0 ? 60 : parseInt(item.qrCodeWeight / 2.5),
h: item.qrCodeWeight + item.qrCodeHeight == 0 ? 60 : parseInt(item.qrCodeHeight / 2.5),
},
posterForm: {
dr: item.dr || 0,
id: item.id || '',
background: item.background,
},
})
})
/***************** 第四步 ******************/
const msgList = JSON.parse(resData.msgList)
formData.reminder = {
fissionText: getMagItem(0, msgList), // 裂变规则文案
successfully: getMagItem(1, msgList), // 成功助力好友推送文案
repeatedText: getMagItem(4, msgList), // 用户重复助力提醒文案
endText: getMagItem(6, msgList, 'msg', 'text'), // 活动结束文案
endTextEnable: getMagItem(6, msgList, 'enable', 'text') == 1 ? true : false, // 活动结束文案-开关
endImgEnable: getMagItem(6, msgList, 'enable', 'image') == 1 ? true : false, // 活动结束图片-开关
endImg: getMagItem(6, msgList, 'msg', 'image'), // 活动结束图片
}
/***************** 第五步 ******************/
if (!resData.fissionBanConfig) {
resData.fissionBanConfig = JSON.stringify({
enable: 0, // 是否开启防刷检测 1_开启 0_关闭
limitNum: 10, // 检测数量(人)
limitTime: 60, // 触发检测时间(秒)
})
}
formData.advanced = {
// 存储非页面所用的id
state: resData.state, // 活动是否开启
// 存储非页面所用的id end
newUserText: getMagItem(8, msgList), // 新添加用户才能给好友助力
newUserTextEnable: getMagItem(8, msgList, 'enable', 'text') == 1 ? true : false, // 新添加用户才能给好友助力-开关
helpEnable: resData.enableRepeat == 1 ? true : false, // 助力失效
participationEnable: JSON.parse(resData.fissionLimit).enable == 1 ? true : false, // 参与限制-开关
participationText: getMagItem(9, msgList), // 参与限制提示语
genderId:
JSON.parse(resData.fissionLimit).sexWhiteList !== ''
? JSON.parse(resData.fissionLimit).sexWhiteList.split(',')
: [], // 参与限制-性别
antiEnable: JSON.parse(resData.fissionBanConfig).enable == 1 ? true : false, //防刷检测 是否开启防刷检测
antiTime: JSON.parse(resData.fissionBanConfig).limitTime, //防刷检测 触发检测时间(秒)
antiNum: JSON.parse(resData.fissionBanConfig).limitNum, //防刷检测 检测数量(人)
intelligentEnable: resData.antiRush == 1 ? true : false,
autoTagEnable: JSON.parse(resData.fissionTagList).enable == 1 ? true : false,
tagList: [],
}
const fissionTagList = JSON.parse(resData.fissionTagList).tagList // 标签
if (fissionTagList && fissionTagList.length >= 1) {
fissionTagList.forEach((item) => {
const tagItem = {
id: item.id || '',
dr: item.dr || 0,
type: item.type,
userNum: 1,
ladder: 1,
levelNum: 1,
userType: 1,
tagList: getTagData(item.tagIdList, JSON.parse(resData.tagNameList)),
}
if (item.type == 2) {
tagItem.userNum = item.num
} else if (item.type == 1) {
tagItem.ladder = item.num
} else if (item.type == 4) {
tagItem.levelNum = item.num
} else if (item.type == 5) {
tagItem.userType = item.num
}
formData.advanced.tagList.push(tagItem)
})
}
console.timeEnd()
console.log('回显转换过的formData', formData)
// 输出结构化后的数据
return resolve(formData)
})
})
}
// 回显时,标签的数组格式要改一下,tagNameList只用来回显,保存时不用提交
function getTagData(idList, list) {
const listTemp = []
if (idList && idList.length > 0) {
idList.forEach((item) => {
const idIndex = list.findIndex((items) => items.tagId == item)
if (idIndex !== -1) {
listTemp.push(list[idIndex])
}
})
}
return listTemp
}