import { Badge, Tag } from 'antd'
import { ReactNode } from 'react'
/** 欢迎语模板适用产品 */
export const welcomeTemplateData = [
{
label: '通用',
value: 0
},
{
label: '洗粉',
value: 1
},
{
label: '大主宰',
value: 2
},
{
label: '大队辅导员',
value: 3
}
]
/** 欢迎语内容组发送模式 */
export const welcomeContentData = [
{
label: '顺序依次发送',
value: 1
},
{
label: '随机发送',
value: 0
}
]
/** 业务类型 */
export const businessPlanData = [
{ label: '付费小说', value: 'NOVEL' },
{ label: '小说IAA', value: 'NOVEL_IAA' },
{ label: '付费游戏', value: 'GAME' },
{ label: '游戏IAA', value: 'GAME_IAA' },
{ label: '短剧IAA', value: 'SKIT_IAA' },
]
export const WEEK_SERIRES = [{ label: '周一', value: 1 }, { label: '周二', value: 2 }, { label: '周三', value: 3 }, { label: '周四', value: 4 }, { label: '周五', value: 5 }, { label: '周六', value: 6 }, { label: '周天', value: 7 }]
export const WEEK_SERIRES_DX: { [x: string]: string } = {
'1': '周一',
'2': '周二',
'3': '周三',
'4': '周四',
'5': '周五',
'6': '周六',
'7': '周天'
}
export const STATUS_ZJ: { [x: string]: JSX.Element } = {
'TASK_STATUS_CREATE': ,
'TASK_STATUS_WAIT': ,
'TASK_STATUS_RUN': ,
'TASK_STATUS_FINISH': ,
'TASK_STATUS_FAIL': ,
'TASK_STATUS_SUSPEND': ,
'TASK_STATUS_CANCEL':
}
export enum StatusEnum {
TASK_STATUS_CREATE = '创建中',
TASK_STATUS_WAIT = '等待中',
TASK_STATUS_RUN = '执行中',
TASK_STATUS_FINISH = '执行完成',
TASK_STATUS_FAIL = '执行失败',
TASK_STATUS_SUSPEND = '执行暂停',
TASK_STATUS_CANCEL = '执行取消'
}
export const TIME_TYPE: { [x: string]: string } = {
TIME_TYPE_SINGLE_TIMELY: '立即发送',
TIME_TYPE_SINGLE_PLACE: '定时发送',
TIME_TYPE_REPEAT_DAY: '每日循环',
TIME_TYPE_REPEAT_WEEK: '每周循环',
TIME_TYPE_REPEAT_MONTH: '每月循环'
}
export const TIME_TYPE_ZJ: { [x: string]: ReactNode } = {
TIME_TYPE_SINGLE_TIMELY: 立即发送,
TIME_TYPE_SINGLE_PLACE: 定时发送,
TIME_TYPE_REPEAT_DAY: 每日循环,
TIME_TYPE_REPEAT_WEEK: 每周循环,
TIME_TYPE_REPEAT_MONTH: 每月循环
}
export const GENDER_TYPE: { [x: string]: string } = {
'2': '女',
'1': '男',
'0': '未知'
}
export const EUTTaskStatus = { 0: , 1: , 2: , 3: }
/**
* 返回处理过的客户继承数据
* @param schedulingStrategyDTO
* @param taskName
* @returns
*/
export const getUserInDataData = (schedulingStrategyDTO: any[], taskName?: string): { taskName: string, strategyData: { [x: string]: any }, inheritData: { [x: string]: any }, strategyIndex: number, inheritIndex: number }[] => {
const userInData = []
schedulingStrategyDTO?.forEach((item, index) => {
// 1、策略 名称 、时间、周期
const { inheritDto, ...strategyData } = JSON.parse(JSON.stringify(item))
inheritDto?.forEach((item1, index1) => {
// 2、转移对象、文本
userInData.push({
taskName: taskName || '--',
strategyData,
inheritData: item1,
strategyIndex: index + 1,
inheritIndex: index1 + 1
})
})
})
return userInData
}
/**
* 返回处理过的群发数据
* @param settings
* @returns
*/
export const getGroupData = (settings: TASK_CREATE.SettingsProps): {
groupSendName: string,
strategyData: { [x: string]: any },
sendData: { [x: string]: any },
content: { [x: string]: any },
strategyIndex: number,
sendDataIndex: number,
contentIndex: number,
sendMode: 0 | 1,
strategyDataCount: number,
sendDataRowSpan: number,
}[] => {
const msgData = []
settings?.massSendingContent?.massSendingContentDTO?.forEach((mediaItem, index) => {
// 2、策略信息 发送 发送时间
const strategyData = settings?.massSendingStrategy?.strategySettings?.[index]
// 下面总共多少发送对象
const strategyDataCount = mediaItem?.sendContentDto?.reduce((pre, cur) => {
return pre + cur.contentDTO.length
}, 0)
// console.log('策略信息' + (index + 1), strategyData)
mediaItem?.sendContentDto?.forEach((contentItem, contentindex) => {
// 发送对象
const sendData = strategyData?.sendData?.[contentindex]
const sendDataCount = contentItem.contentDTO.length
// console.log('发送对象' + (contentindex + 1), sendData)
// 4、群发内容
contentItem?.contentDTO.forEach((item, i) => {
// console.log('发送内容' + (i + 1), item)
const { sendData: aa, ...sd } = strategyData
msgData.push({
groupSendName: settings?.massSendingStrategy?.groupSendName,
// 策略信息
strategyData: sd,
// 发送模式
sendMode: contentItem?.sendMode,
// 发送对象
sendData,
// 群发内容
content: item,
strategyIndex: index + 1,
sendDataIndex: contentindex + 1,
contentIndex: i + 1,
strategyDataCount,
sendDataRowSpan: i === 0 ? sendDataCount : 0
})
})
})
})
return msgData
}
/**
* 返回处理过的高级群发数据
* @param settings
* @returns
*/
export const getHighGroupData = (settings: TASK_CREATE.SettingsProps): {
groupSendName: string,
strategyData: { [x: string]: any },
sendData: { [x: string]: any },
content: { [x: string]: any },
strategyIndex: number,
sendDataIndex: number,
contentIndex: number,
sendMode: 0 | 1,
strategyDataCount: number,
sendDataRowSpan: number,
strategyItemSendDataCount: number
}[] => {
const msgData = []
settings?.highMassSendingContent?.massSendingContentDTO?.forEach((mediaItem, index) => {
// 2、策略信息 发送 发送时间
const strategyData = settings?.highMassSendingStrategy?.strategySettings?.[index]
// 下面总共多少发送对象
const strategyDataCount = mediaItem?.sendContentDto?.reduce((pre, cur) => {
return pre + cur.contentDTO.length
}, 0)
// console.log('策略信息' + (index + 1), strategyData)
mediaItem?.sendContentDto?.forEach((contentItem, contentindex) => {
// 发送对象
const sendData = strategyData?.sendData?.[contentindex]
const strategyItemSendDataCount = strategyData?.sendData.length
const sendDataCount = contentItem.contentDTO.length
// console.log('发送对象' + (contentindex + 1), sendData)
// 4、群发内容
contentItem?.contentDTO.forEach((item, i) => {
// console.log('发送内容' + (i + 1), item)
const { sendData: aa, ...sd } = strategyData
msgData.push({
groupSendName: settings?.highMassSendingStrategy?.groupSendName,
// 策略信息
strategyData: sd,
// 发送模式
sendMode: contentItem?.sendMode,
// 发送对象
sendData,
// 群发内容
content: item,
strategyIndex: index + 1,
sendDataIndex: contentindex + 1,
contentIndex: i + 1,
strategyDataCount,
strategyItemSendDataCount,
sendDataRowSpan: i === 0 ? sendDataCount : 0
})
})
})
})
return msgData
}
/**
* 重置客户继承数据成可编辑数据
* @param externalUserTransferTasksDTO
* @returns
*/
export const restoreUserInheritData = (externalUserTransferTasksDTO: { [x: string]: any }) => {
const { taskName, schedulingStrategyDTO } = externalUserTransferTasksDTO
return {
taskName,
schedulingStrategyDTO: schedulingStrategyDTO.map(schedulingStrategyDTOItem => {
const { transferStrategyContentDTOS, ...strategy } = schedulingStrategyDTOItem
return {
...strategy,
inheritDto: transferStrategyContentDTOS.map(item => {
const { externalUserFilter, transferSuccessMsg } = item
const inherit: { [x: string]: any } = {
transferSuccessMsg
}
if (externalUserFilter) {
inherit.transferType = 'specify'
const { configName, ...configContent } = externalUserFilter
inherit.transferUserDto = {
configName,
configContent
}
} else {
inherit.transferType = 'all'
}
return inherit
})
}
})
}
}
/**
* 重置群发数据为可编辑数据
* @param groupSendTaskAddDTO
*/
export const restoreGroupData = (groupSendTaskAddDTO: { [x: string]: any }, configType?: BUSINES_SPLAN_API.ConfigTypeProps) => {
const type = configType || 'USER_GROUP'
const { groupSendName, strategyList } = groupSendTaskAddDTO
const massSendingContentDTO: { [x: string]: any }[] = []
const strategySettings = strategyList.map(item => {
const { taskDetail, ...strategy } = item
const sendContentDto = []
const sendData = taskDetail.map(item1 => {
const { sendMode, contentDTO, externalUserFilter } = item1
sendContentDto.push({
sendMode,
contentDTO: type === 'USER_GROUP' ? contentDTO : contentDTO.map(item2 => {
const { msgType, ...content } = item2
if (msgType === 'TASK_STATUS_MINIPROGRAM') {
const { miniprogram: { appId, page, title, picUrl } } = content
return [{
miniprogramAppid: appId,
miniprogramPage: page,
miniprogramTitle: title,
miniprogramPicurl: picUrl,
mediaType: 'miniprogram'
}]
} else if (msgType === 'TASK_CONTENT_TEXT') {
const { text } = content
return [{
textContent: text?.content,
mediaType: 'text'
}]
} else if (msgType === 'TASK_CONTENT_LINK') {
const { link: { desc, picUrl, title, url } } = content
return [{
linkDesc: desc,
linkPicurl: picUrl,
linkTitle: title,
linkUrl: url,
mediaType: 'link'
}]
} else if (msgType === 'TASK_CONTENT_IMAGE') {
const { image: { picUrl } } = content
return [{
imageUrl: picUrl,
mediaType: 'image'
}]
} else if (msgType === 'TASK_STATUS_VIDEO') {
const { video: { videoUrl } } = content
return [{
videoUrl: videoUrl,
mediaType: 'video'
}]
} else if (msgType === 'TASK_STATUS_FILE') {
const { file: { fileUrl } } = content
return [{
fileUrl: fileUrl,
mediaType: 'file'
}]
}
return {
msgType,
content
}
})
})
if (externalUserFilter) {
const { configName, ...configContent } = externalUserFilter
return {
externalUserType: 'specify',
externalUserFilter: {
configName,
configContent
}
}
}
return {
externalUserType: 'all'
}
})
massSendingContentDTO.push({
sendContentDto
})
return {
...strategy,
sendData
}
})
return {
massSendingStrategy: {
groupSendName,
strategySettings
},
massSendingContent: {
massSendingContentDTO
}
}
}
export const momentAttachmentList = (attachmentList: any[]) => {
return attachmentList.map((item: any) => {
switch (item.msgType) {
case 'TASK_CONTENT_IMAGE':
return {
mediaType: 'image',
imageUrl: item.image.picUrl,
mediaFormat: item.image.mediaFormat,
mediaSize: item.image.mediaSize,
mediaPlayTime: item.image.mediaPlayTime,
mediaWidth: item.image.mediaWidth,
mediaHeight: item.image.mediaHeight
}
case 'TASK_STATUS_VIDEO':
return {
mediaType: 'video',
videoUrl: item.video.videoUrl,
mediaFormat: item.image.mediaFormat,
mediaSize: item.image.mediaSize,
mediaPlayTime: item.image.mediaPlayTime,
mediaWidth: item.image.mediaWidth,
mediaHeight: item.image.mediaHeight
}
case 'TASK_STATUS_FILE':
return { mediaType: 'file', fileUrl: item.file.fileUrl }
case "TASK_CONTENT_LINK":
return { mediaType: 'link', linkDesc: item.link.desc, linkPicurl: item.link.picUrl, linkTitle: item.link.title, linkUrl: item.link.url }
case 'TASK_STATUS_MINIPROGRAM':
return {
mediaType: 'miniprogram',
miniprogramAppid: item.miniprogram.appId,
miniprogramPage: item.miniprogram.page,
miniprogramPicurl: item.miniprogram.picUrl,
miniprogramTitle: item.miniprogram.title
}
}
})
}
/**
* 重置朋友圈数据为可编辑数据
* @param momentCreateDTO
* @returns
*/
export const restoreMomentData = (momentCreateDTO: { [x: string]: any }) => {
const { momentSendName, strategyList } = momentCreateDTO
const friendsContentDTO: { [x: string]: any }[] = []
const strategySettings = strategyList.map(item => {
const { taskDetail, ...params } = item
friendsContentDTO.push({
...taskDetail,
contentDTO: taskDetail.contentDTO.map(content => {
return {
text: content.text,
attachmentList: momentAttachmentList(content.attachmentList)
}
})
})
return params
})
return {
friendsStrategy: {
momentSendName,
strategySettings
},
friendsContent: {
friendsContentDTO
}
}
}
// excel 配置
// // 复杂表头示例(两级表头)
// import XLSX from "xlsx-js-style";
// const headers = [
// [
// { v: "账号", s: headerStyle },
// { v: '欢迎语标题', s: headerStyle },
// { v: '智能标签', s: headerStyle },
// { v: '内容组发送模式', s: headerStyle },
// { v: '欢迎语内容', s: headerStyle },
// { v: '图文链接', s: headerStyle },
// { v: '小程序APPID', s: headerMustStyle },
// { v: '小程序路径', s: headerMustStyle }
// ]
// ];
// // 数据内容
// const data = settings?.corpUserList?.map((item) => {
// return mediaContent?.map((mediaItem) => {
// return {
// '账号': `${item.name}(${item.corpUserId})`,
// '欢迎语标题': `${welcomeName}`,
// '智能标签': `${business ? `业务:${businessPlanData.find(i => i.value === business)?.label}` : '--'}\n${bookCity ? `书城;${bookPlatForm.find(i => i.id === bookCity)?.platformName}` : '--'}\n${product ? `产品:${bookList.find(i => i.id === product)?.bookName}` : '--'}`,
// '内容组发送模式': welcomeContentData.find(i => i.value === welcomeContentType)?.label,
// '欢迎语内容': '--',
// '图文链接': '--',
// '小程序APPID': '--',
// '小程序路径': '--'
// }
// })
// })
// // 将数据转换为二维数组
// const dataArray = [
// ...headers,
// ...data.map(row => [
// row['账号'],
// row['欢迎语标题'],
// row['智能标签'],
// row['内容组发送模式'],
// row['欢迎语内容'],
// row['图文链接'],
// row['小程序APPID'],
// row['小程序路径']
// ])
// ];
// // 创建工作表并合并单元格
// const worksheet = XLSX.utils.aoa_to_sheet(dataArray);
// worksheet["!rows"] = [{ hpx: 30 }, ...Array(1000).fill({ hpx: 20 })]; // 设置行高
// worksheet['!cols'] = [{ width: 40 }, { width: 25 }, { width: 30 }, { width: 30 }, { width: 40 }, { width: 30 }, { width: 30 }, { width: 30 }]; // 设置列宽
// // worksheet['!merges'] = [
// // // 合并主标题1(合并前两列)
// // { s: { r: 1, c: 0 }, e: { r: 1, c: 1 } }
// // ];
// // 创建工作簿并导出
// const workbook = XLSX.utils.book_new();
// XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
// const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
// saveAs(blob, 'complex_data.xlsx');
// console.log(dataArray);
// 表头样式
export const headerStyle = {
font: { bold: true, sz: 14, color: { rgb: "FFFFFF" }, name: "微软雅黑" },
fill: { fgColor: { rgb: "1890FF" } },
alignment: { vertical: "center", horizontal: "center" },
border: {
top: { style: "thin", color: { rgb: "FFFFFF" } },
bottom: { style: "thin", color: { rgb: "FFFFFF" } },
left: { style: "thin", color: { rgb: "FFFFFF" } },
right: { style: "thin", color: { rgb: "FFFFFF" } }
}
};
// 必填样式
export const headerMustStyle = {
font: { bold: true, sz: 14, color: { rgb: "FFFFFF" }, name: "微软雅黑" },
fill: { fgColor: { rgb: "ff7875" } },
alignment: { vertical: "center", horizontal: "center" },
border: {
top: { style: "thin", color: { rgb: "FFFFFF" } },
bottom: { style: "thin", color: { rgb: "FFFFFF" } },
left: { style: "thin", color: { rgb: "FFFFFF" } },
right: { style: "thin", color: { rgb: "FFFFFF" } }
}
};
// JS表格头样式
export const headerJsStyle = {
fill: {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: '1890ff' } // 蓝色背景
},
font: {
name: '微软雅黑',
size: 14,
bold: true,
color: { argb: 'FFFFFF' }
},
alignment: {
vertical: 'middle',
horizontal: 'center'
},
border: {
top: { style: 'thin', color: { argb: 'FFFFFF' } },
bottom: { style: 'thin', color: { argb: 'FFFFFF' } },
left: { style: 'thin', color: { argb: 'FFFFFF' } },
right: { style: 'thin', color: { argb: 'FFFFFF' } }
}
};
// JS必填样式
export const headerJsMustStyle = {
fill: {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'ff7875' } // 蓝色背景
},
font: {
name: '微软雅黑',
size: 14,
bold: true,
color: { argb: 'FFFFFF' }
},
alignment: {
vertical: 'middle',
horizontal: 'center'
},
border: {
top: { style: 'thin', color: { argb: 'FFFFFF' } },
bottom: { style: 'thin', color: { argb: 'FFFFFF' } },
left: { style: 'thin', color: { argb: 'FFFFFF' } },
right: { style: 'thin', color: { argb: 'FFFFFF' } }
}
};