|
@@ -9,7 +9,7 @@ import { getGroupData, headerJsMustStyle, headerJsStyle, TIME_TYPE, welcomeConte
|
|
|
import ExcelJS from 'exceljs';
|
|
|
import FilterUserText from '@/pages/weComTask/components/filterUser/filterUserText';
|
|
|
import { RcFile } from 'antd/es/upload';
|
|
|
-import { groupBy, readFileAsBuffer } from '@/utils/utils';
|
|
|
+import { cutByBytes, groupBy, readFileAsBuffer } from '@/utils/utils';
|
|
|
import { saveAs } from 'file-saver';
|
|
|
import SettingsFriends from './settingsFriends';
|
|
|
import PreviewFriendsStrategy from './previewFriendsStrategy';
|
|
@@ -27,6 +27,7 @@ const Friends: React.FC = () => {
|
|
|
const [downloadLoading, setDownloadLoading] = useState<boolean>(false)
|
|
|
/***************************************************/
|
|
|
|
|
|
+ // 下载配置表格
|
|
|
const exportExcel = async () => {
|
|
|
setDownloadLoading(true)
|
|
|
const workbook = new ExcelJS.Workbook(); // 创建空工作簿
|
|
@@ -51,10 +52,10 @@ const Friends: React.FC = () => {
|
|
|
|
|
|
worksheet.columns = [
|
|
|
{ key: 'A1', width: 20, header: '账号' },
|
|
|
- { key: 'A2', width: 20, header: '群发标题' },
|
|
|
+ { key: 'A2', width: 20, header: '朋友圈标题' },
|
|
|
{ key: 'A3', width: 30, header: '策略信息' },
|
|
|
{ key: 'A4', width: 40, header: '发送对象' },
|
|
|
- { key: 'A5', width: 70, header: '群发内容' },
|
|
|
+ { key: 'A5', width: 70, header: '朋友圈内容' },
|
|
|
{ key: 'A6', width: 30, header: '图文链接' },
|
|
|
{ key: 'A7', width: 30, header: '小程序APPID' },
|
|
|
{ key: 'A8', width: 30, header: '小程序路径' },
|
|
@@ -67,24 +68,156 @@ const Friends: React.FC = () => {
|
|
|
// 设置表头字体样式
|
|
|
worksheet.getCell(headerRowIndex, col).style = index >= 5 ? headerJsMustStyle as any : headerJsStyle as any;
|
|
|
})
|
|
|
-
|
|
|
-
|
|
|
- const data = getGroupData(settings)
|
|
|
- console.log('数据', data)
|
|
|
-
|
|
|
- const corpUserListLength = settings?.corpUsers?.length || 0;
|
|
|
- const dataLength = data.length || 0;
|
|
|
// 合并单元集合
|
|
|
const mergeCells = [];
|
|
|
// 解放填写限制区域
|
|
|
const unLockArea = [];
|
|
|
- let dataRow = 1
|
|
|
+
|
|
|
+ let dataRow = 0
|
|
|
// 数据内容
|
|
|
settings?.corpUsers?.forEach((item, i) => {
|
|
|
- // 1、客服号 群发标题
|
|
|
+ let strategyIndex = 0
|
|
|
+
|
|
|
+ settings?.friendsStrategy?.strategySettings?.forEach((strategyItem, index) => {
|
|
|
+ const friendsContentDTO = settings?.friendsContent?.friendsContentDTO?.[index]
|
|
|
+ const startRow = 2 + dataRow
|
|
|
+ const endRow = startRow + (friendsContentDTO?.contentDTO?.length || 0) - 1
|
|
|
+ mergeCells.push({
|
|
|
+ startRow,
|
|
|
+ startColumn: 3,
|
|
|
+ endRow,
|
|
|
+ endColumn: 3,
|
|
|
+ })
|
|
|
+ mergeCells.push({
|
|
|
+ startRow,
|
|
|
+ startColumn: 4,
|
|
|
+ endRow,
|
|
|
+ endColumn: 4,
|
|
|
+ })
|
|
|
+ friendsContentDTO.contentDTO.forEach((contentItem, contentIndex) => {
|
|
|
+ strategyIndex++;
|
|
|
+ let linkPlaceholder = '<空>'
|
|
|
+ let miniprogramPlaceholder = '<空>'
|
|
|
+
|
|
|
+ const mediaItem = JSON.parse(JSON.stringify(contentItem?.attachmentList || []))
|
|
|
+ if (contentItem?.text?.content) {
|
|
|
+ mediaItem.push({
|
|
|
+ mediaType: 'text',
|
|
|
+ textContent: contentItem?.text?.content
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const contentRichText = mediaItem.map(item => {
|
|
|
+ switch (item.mediaType) {
|
|
|
+ case 'link':
|
|
|
+ linkPlaceholder = '请输入'
|
|
|
+ return { text: `链接:${item.linkTitle}_${item.linkDesc}\n`, font: { color: { argb: "FF0000" } } }
|
|
|
+ case 'miniprogram':
|
|
|
+ miniprogramPlaceholder = '请输入'
|
|
|
+ return { text: `小程序:${item.miniprogramTitle}\n`, font: { color: { argb: "FF0000" } } }
|
|
|
+ case 'file':
|
|
|
+ return { text: `文件:${item.fileUrl}\n` }
|
|
|
+ case 'video':
|
|
|
+ return { text: `视频:${item.videoUrl}\n` }
|
|
|
+ case 'image':
|
|
|
+ return { text: `图片:${item.imageUrl}\n` }
|
|
|
+ case 'text':
|
|
|
+ return { text: `文本:${item.textContent}\n` }
|
|
|
+ default:
|
|
|
+ return { text: `该类型没有请联系管理员` }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const richText = {
|
|
|
+ richText: [
|
|
|
+ { text: `(内容${contentIndex + 1})\n` },
|
|
|
+ ...contentRichText
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ dataRow++;
|
|
|
+
|
|
|
+ if (linkPlaceholder !== '<空>') {
|
|
|
+ unLockArea.push(`${dataRow}_6`)
|
|
|
+ }
|
|
|
+ if (miniprogramPlaceholder !== '<空>') {
|
|
|
+ unLockArea.push(`${dataRow}_7`, `${dataRow}_8`)
|
|
|
+ }
|
|
|
+
|
|
|
+ worksheet.addRow([
|
|
|
+ // 账号
|
|
|
+ `${item.name}(ID:${item.corpUserId})`,
|
|
|
+ // 朋友圈标题
|
|
|
+ `${settings?.friendsStrategy?.momentSendName}`,
|
|
|
+ // 策略信息
|
|
|
+ {
|
|
|
+ richText: [
|
|
|
+ { text: `(策略${index + 1})\n`, font: { bold: true } },
|
|
|
+ { text: `名称:${strategyItem?.strategyName || '<空>'}\n` },
|
|
|
+ {
|
|
|
+ text: (`执行类型:${TIME_TYPE[strategyItem?.timeRepeatType]}\n`) +
|
|
|
+ (strategyItem?.sendDay ? `执行时间:${strategyItem?.sendDay}\n` : '') +
|
|
|
+ (strategyItem?.startTime ? `执行日期:${strategyItem?.startTime}~${strategyItem?.endTime ? strategyItem?.endTime : '长期执行'}\n` : '') +
|
|
|
+ (strategyItem?.sendTime ? '执行时间:' + strategyItem?.sendTime + '\n' : '') +
|
|
|
+ (strategyItem?.repeatArray ? `执行天数:${strategyItem?.repeatArray.join('、')}\n` : '')
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ // 发送对象
|
|
|
+ {
|
|
|
+ richText: [
|
|
|
+ { text: `发送对象:${item?.friendsTagContent?.length > 0 ? cutByBytes(item?.friendsTagContent?.map(i => i.title).join('、'), 160) : '全部'}\n`, font: { bold: true } },
|
|
|
+ { text: `发送模式:${welcomeContentData?.find(i => i.value === friendsContentDTO?.sendMode)?.label}\n` },
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ // 群发内容
|
|
|
+ richText,
|
|
|
+ // 图文链接
|
|
|
+ linkPlaceholder,
|
|
|
+ // 小程序APPID
|
|
|
+ miniprogramPlaceholder,
|
|
|
+ // 小程序路径
|
|
|
+ miniprogramPlaceholder
|
|
|
+ ])
|
|
|
+
|
|
|
+ worksheet.getRow(dataRow + headerRowIndex).height = 100; // 设置行高
|
|
|
+ worksheet.getRow(dataRow + headerRowIndex).alignment = {
|
|
|
+ vertical: 'middle',
|
|
|
+ wrapText: true
|
|
|
+ }
|
|
|
+ // 分组设置背景色
|
|
|
+ if (i % 2 === 0) {
|
|
|
+ worksheet.getRow(dataRow + headerRowIndex).eachCell(function (cell, rowNumber) {
|
|
|
+ if (rowNumber <= 8) {
|
|
|
+ cell.border = {
|
|
|
+ top: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ bottom: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ left: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ right: { style: 'thin', color: { argb: 'D4D4D4' } }
|
|
|
+ }
|
|
|
+ cell.fill = {
|
|
|
+ type: 'pattern',
|
|
|
+ pattern: 'solid',
|
|
|
+ fgColor: { argb: 'f0f0f0' }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ worksheet.getRow(dataRow + headerRowIndex).eachCell(function (cell, rowNumber) {
|
|
|
+ if (rowNumber <= 8) {
|
|
|
+ cell.border = {
|
|
|
+ top: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ bottom: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ left: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
+ right: { style: 'thin', color: { argb: 'D4D4D4' } }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
|
|
|
- const startRow = 2 + (i * dataLength)
|
|
|
- const endRow = startRow + dataLength - 1
|
|
|
+ const startRow = 2 + (i * strategyIndex)
|
|
|
+ const endRow = startRow + strategyIndex - 1
|
|
|
mergeCells.push({
|
|
|
startRow,
|
|
|
startColumn: 1,
|
|
@@ -97,178 +230,27 @@ const Friends: React.FC = () => {
|
|
|
endRow,
|
|
|
endColumn: 2,
|
|
|
})
|
|
|
+ })
|
|
|
+ console.log('mergeCells--->', mergeCells)
|
|
|
+ // 合并单元格
|
|
|
+ mergeCells.forEach(({ startRow, startColumn, endRow, endColumn }) => {
|
|
|
+ worksheet.mergeCells(startRow, startColumn, endRow, endColumn); // 合并单元格
|
|
|
+ })
|
|
|
|
|
|
- let strategyIndex = 0
|
|
|
-
|
|
|
- data.forEach((dataItem, index, row) => {
|
|
|
- if (strategyIndex !== dataItem.strategyIndex) {
|
|
|
- const startRow = i * row.length + (index + 2)
|
|
|
- mergeCells.push({
|
|
|
- startRow,
|
|
|
- startColumn: 3,
|
|
|
- endRow: startRow + dataItem.strategyDataCount - 1,
|
|
|
- endColumn: 3,
|
|
|
- })
|
|
|
- }
|
|
|
- if (dataItem.sendDataRowSpan) {
|
|
|
- const startRow = i * row.length + (index + 2)
|
|
|
- mergeCells.push({
|
|
|
- startRow,
|
|
|
- startColumn: 4,
|
|
|
- endRow: startRow + dataItem.sendDataRowSpan - 1,
|
|
|
- endColumn: 4,
|
|
|
- })
|
|
|
- }
|
|
|
- const mediaItem = JSON.parse(JSON.stringify(dataItem?.content?.attachmentList || []))
|
|
|
- if (dataItem?.content?.text?.content) {
|
|
|
- mediaItem.push({
|
|
|
- msgType: 'TASK_CONTENT_TEXT',
|
|
|
- textContent: dataItem?.content?.text?.content
|
|
|
- })
|
|
|
- }
|
|
|
- let linkPlaceholder = '<空>'
|
|
|
- let miniprogramPlaceholder = '<空>'
|
|
|
- const contentRichText = mediaItem.map(item => {
|
|
|
- // 'TASK_CONTENT_TEXT' | 'TASK_CONTENT_IMAGE' | 'TASK_CONTENT_LINK' | 'TASK_STATUS_MINIPROGRAM' | 'TASK_STATUS_VIDEO' | 'TASK_STATUS_FILE'
|
|
|
- switch (item.msgType) {
|
|
|
- case 'TASK_CONTENT_LINK':
|
|
|
- linkPlaceholder = '请输入'
|
|
|
- return { text: `链接:${item.link.title}_${item.link.desc}\n`, font: { color: { argb: "FF0000" } } }
|
|
|
- case 'TASK_STATUS_MINIPROGRAM':
|
|
|
- miniprogramPlaceholder = '请输入'
|
|
|
- return { text: `小程序:${item.miniprogram.title}\n`, font: { color: { argb: "FF0000" } } }
|
|
|
- case 'TASK_STATUS_FILE':
|
|
|
- return { text: `文件:${item.file.fileUrl}\n` }
|
|
|
- case 'TASK_STATUS_VIDEO':
|
|
|
- return { text: `视频:${item.video.videoUrl}\n` }
|
|
|
- case 'TASK_CONTENT_IMAGE':
|
|
|
- return { text: `图片:${item.image.picUrl}\n` }
|
|
|
- case 'TASK_CONTENT_TEXT':
|
|
|
- return { text: `文本:${item.textContent}\n` }
|
|
|
- default:
|
|
|
- return { text: `该类型没有请联系管理员` }
|
|
|
+ // 设置可填写区域
|
|
|
+ for (let rowNum = 1; rowNum <= dataRow; rowNum++) {
|
|
|
+ for (let colNum = 1; colNum <= 3; colNum++) {
|
|
|
+ if (unLockArea.includes(`${rowNum}_${colNum + 5}`)) {
|
|
|
+ const cell = worksheet.getCell(rowNum + 1, colNum + 5);
|
|
|
+ cell.protection = { locked: false };
|
|
|
+ cell.fill = {
|
|
|
+ type: 'pattern',
|
|
|
+ pattern: 'solid',
|
|
|
+ fgColor: { argb: 'ffadd2' }
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
- const richText = {
|
|
|
- richText: [
|
|
|
- { text: `(内容${dataItem?.contentIndex})\n`, font: { bold: true } },
|
|
|
- ...contentRichText
|
|
|
- ]
|
|
|
- }
|
|
|
-
|
|
|
- if (linkPlaceholder !== '<空>') {
|
|
|
- unLockArea.push(`${dataRow}_6`)
|
|
|
}
|
|
|
- if (miniprogramPlaceholder !== '<空>') {
|
|
|
- unLockArea.push(`${dataRow}_7`, `${dataRow}_8`)
|
|
|
- }
|
|
|
- dataRow++;
|
|
|
- strategyIndex = dataItem.strategyIndex
|
|
|
- worksheet.addRow([
|
|
|
- // 账号
|
|
|
- `${item.name}(ID:${item.corpUserId})`,
|
|
|
- // 群发标题
|
|
|
- `${dataItem?.groupSendName}`,
|
|
|
- // 策略信息
|
|
|
- {
|
|
|
- richText: [
|
|
|
- { text: `(策略${dataItem?.strategyIndex})\n`, font: { bold: true } },
|
|
|
- { text: `名称:${dataItem?.strategyData?.strategyName || '<空>'}\n` },
|
|
|
- {
|
|
|
- text: (`执行类型:${TIME_TYPE[dataItem?.strategyData?.timeRepeatType]}\n`) +
|
|
|
- (dataItem?.strategyData?.sendDay ? `执行时间:${dataItem?.strategyData?.sendDay}\n` : '') +
|
|
|
- (dataItem?.strategyData?.startTime ? `执行日期:${dataItem?.strategyData?.startTime}~${dataItem?.strategyData?.endTime ? dataItem?.strategyData?.endTime : '长期执行'}\n` : '') +
|
|
|
- (dataItem?.strategyData?.sendTime ? '执行时间:' + dataItem?.strategyData?.sendTime + '\n' : '') +
|
|
|
- (dataItem?.strategyData?.repeatArray ? `执行天数:${dataItem?.strategyData?.repeatArray.join('、')}\n` : '')
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- // 发送对象
|
|
|
- {
|
|
|
- richText: [
|
|
|
- { text: `(发送对象${dataItem?.sendDataIndex})\n`, font: { bold: true } },
|
|
|
- { text: `发送模式:${welcomeContentData?.find(i => i.value === dataItem?.sendMode)?.label}\n` },
|
|
|
- {
|
|
|
- text: `类型:${dataItem?.sendData?.externalUserType === 'all' ? '全部' : '指定'}\n` +
|
|
|
- (dataItem?.sendData?.externalUserType === 'specify' && dataItem?.sendData?.externalUserFilter ? FilterUserText({
|
|
|
- data: dataItem?.sendData?.externalUserFilter?.configContent,
|
|
|
- configName: dataItem?.sendData?.externalUserFilter?.configName,
|
|
|
- bookCityList: bookPlatForm?.map(item => ({ label: item.platformName, value: item.platformKey })),
|
|
|
- bookPlatForm,
|
|
|
- bookList
|
|
|
- }) : '')
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- // 群发内容
|
|
|
- richText,
|
|
|
- // 图文链接
|
|
|
- linkPlaceholder,
|
|
|
- // 小程序APPID
|
|
|
- miniprogramPlaceholder,
|
|
|
- // 小程序路径
|
|
|
- miniprogramPlaceholder
|
|
|
- ])
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
- // Array(corpUserListLength * dataLength).fill(0).forEach((_, index) => {
|
|
|
- // worksheet.getRow(index + headerRowIndex + 1).height = 100; // 设置行高
|
|
|
- // worksheet.getRow(index + headerRowIndex + 1).alignment = {
|
|
|
- // vertical: 'middle',
|
|
|
- // wrapText: true
|
|
|
- // }
|
|
|
- // // 分组设置背景色
|
|
|
- // if (index % (dataLength * 2) < dataLength) {
|
|
|
- // worksheet.getRow(index + headerRowIndex + 1).eachCell(function (cell, rowNumber) {
|
|
|
- // if (rowNumber <= 8) {
|
|
|
- // cell.border = {
|
|
|
- // top: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // bottom: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // left: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // right: { style: 'thin', color: { argb: 'D4D4D4' } }
|
|
|
- // }
|
|
|
- // cell.fill = {
|
|
|
- // type: 'pattern',
|
|
|
- // pattern: 'solid',
|
|
|
- // fgColor: { argb: 'f0f0f0' }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // })
|
|
|
- // } else {
|
|
|
- // worksheet.getRow(index + headerRowIndex + 1).eachCell(function (cell, rowNumber) {
|
|
|
- // if (rowNumber <= 8) {
|
|
|
- // cell.border = {
|
|
|
- // top: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // bottom: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // left: { style: 'thin', color: { argb: 'D4D4D4' } },
|
|
|
- // right: { style: 'thin', color: { argb: 'D4D4D4' } }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // })
|
|
|
- // }
|
|
|
- // })
|
|
|
-
|
|
|
- // // 合并单元格
|
|
|
- // mergeCells.forEach(({ startRow, startColumn, endRow, endColumn }) => {
|
|
|
- // worksheet.mergeCells(startRow, startColumn, endRow, endColumn); // 合并单元格
|
|
|
- // })
|
|
|
-
|
|
|
- // // 设置可填写区域
|
|
|
- // for (let rowNum = 1; rowNum <= corpUserListLength * dataLength; rowNum++) {
|
|
|
- // for (let colNum = 1; colNum <= 3; colNum++) {
|
|
|
- // if (unLockArea.includes(`${rowNum}_${colNum + 5}`)) {
|
|
|
- // const cell = worksheet.getCell(rowNum + 1, colNum + 5);
|
|
|
- // cell.protection = { locked: false };
|
|
|
- // cell.fill = {
|
|
|
- // type: 'pattern',
|
|
|
- // pattern: 'solid',
|
|
|
- // fgColor: { argb: 'ffadd2' }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
+ }
|
|
|
+ }
|
|
|
// 生成文件内容
|
|
|
workbook.xlsx.writeBuffer().then(buffer => {
|
|
|
// 通过 Blob 下载
|
|
@@ -278,6 +260,71 @@ const Friends: React.FC = () => {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ // 读取Excel
|
|
|
+ const readExcelContent = async (file: RcFile) => {
|
|
|
+ const buffer: any = await readFileAsBuffer(file);
|
|
|
+ const workbook = new ExcelJS.Workbook();
|
|
|
+ await workbook.xlsx.load(buffer); // 加载 Excel 内容
|
|
|
+
|
|
|
+ const worksheet = workbook.worksheets[0]; // 获取第一个工作表
|
|
|
+ const data = [];
|
|
|
+
|
|
|
+ worksheet.eachRow((row) => {
|
|
|
+ const rowData = {};
|
|
|
+ row.eachCell((cell, colNumber) => {
|
|
|
+ if (cell.isHyperlink) {
|
|
|
+ rowData[`col${colNumber}`] = cell.text || '';
|
|
|
+ } else {
|
|
|
+ rowData[`col${colNumber}`] = cell.value || '';
|
|
|
+ }
|
|
|
+ });
|
|
|
+ data.push(rowData);
|
|
|
+ });
|
|
|
+
|
|
|
+ data.shift(); // 删除表头
|
|
|
+ const NULLDATA = ['请输入', '']
|
|
|
+ if (data?.some(item => (NULLDATA.includes(item.col6) || !item?.col6 || NULLDATA.includes(item.col7) || !item?.col7 || NULLDATA.includes(item.col8) || !item?.col8))) {
|
|
|
+ message.error('请正确填写Excel内容!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (settings?.corpUsers?.reduce((pre) => pre + settings?.friendsStrategy?.strategySettings.reduce((sPre, _, index) => sPre + settings?.friendsContent?.friendsContentDTO?.[index]?.contentDTO?.length, 0), 0) !== data?.length) {
|
|
|
+ message.error('数量对不上,请正确填写Excel内容!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ const groupData = groupBy(data, (item) => [item['col1']]).reduce((acc, cur) => {
|
|
|
+ const id = cur[0]['col1'].split('ID:')[1].replace(/\)$/, '');
|
|
|
+ acc[id] = cur
|
|
|
+ return acc;
|
|
|
+ }, {});
|
|
|
+ // console.log('读取的Excel数据', data, groupData)
|
|
|
+
|
|
|
+ const corpUsers = settings?.corpUsers?.map(item => {
|
|
|
+ const friendsMsgContent = []
|
|
|
+ groupData[item.corpUserId]?.forEach((i: any) => {
|
|
|
+ const strategyIndex = i.col3.richText[0].text.split('(策略')[1]?.split(')')[0]
|
|
|
+ const contentIndex = i.col5.richText[0].text.split('(内容')[1]?.split(')')[0]
|
|
|
+ const layer1 = strategyIndex - 1;
|
|
|
+ if (!friendsMsgContent[layer1]) friendsMsgContent[layer1] = [];
|
|
|
+ friendsMsgContent[strategyIndex - 1][contentIndex - 1] = {
|
|
|
+ linkUrl: i.col6 === '<空>' ? undefined : i.col6?.toString()?.trim(),
|
|
|
+ miniprogramAppid: i.col7 === '<空>' ? undefined : i.col7?.toString()?.trim(),
|
|
|
+ miniprogramPage: i.col8 === '<空>' ? undefined : i.col8?.toString()?.trim()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ friendsMsgContent
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // console.log('corpUsers', corpUsers)
|
|
|
+ setSettings({
|
|
|
+ ...settings,
|
|
|
+ corpUsers
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
return <>
|
|
|
<div className={`${style.settingsBody_content_row}`}>
|
|
|
<div className={`${style.settingsBody_content_col}`}>
|
|
@@ -307,7 +354,7 @@ const Friends: React.FC = () => {
|
|
|
loading={downloadLoading}
|
|
|
onClick={() => { exportExcel() }}
|
|
|
>下载</Button>
|
|
|
- {/* <Upload
|
|
|
+ <Upload
|
|
|
accept={'.xlsx'}
|
|
|
action="#"
|
|
|
showUploadList={false}
|
|
@@ -320,8 +367,8 @@ const Friends: React.FC = () => {
|
|
|
<Button
|
|
|
type="link"
|
|
|
style={{ padding: 0, fontSize: 12 }}
|
|
|
- >{settings?.corpUsers?.every(item => item?.groupMsgContent?.length) ? 'Excel内容已上传,重新上传' : '上传Excel'}</Button>
|
|
|
- </Upload> */}
|
|
|
+ >{settings?.corpUsers?.every(item => item?.friendsMsgContent?.length) ? 'Excel内容已上传,重新上传' : '上传Excel'}</Button>
|
|
|
+ </Upload>
|
|
|
</>}
|
|
|
<Button
|
|
|
type="link"
|
|
@@ -329,6 +376,7 @@ const Friends: React.FC = () => {
|
|
|
style={{ padding: 0, fontSize: 12 }}
|
|
|
onClick={() => {
|
|
|
const corpUsers = settings?.corpUsers?.map(item => {
|
|
|
+ delete item?.friendsTagContent
|
|
|
delete item?.friendsMsgContent
|
|
|
return item
|
|
|
})
|
|
@@ -383,21 +431,15 @@ const Friends: React.FC = () => {
|
|
|
setNewVisible(false)
|
|
|
}}
|
|
|
onChange={(values, type) => {
|
|
|
- const corpUsers = settings?.corpUsers?.map(item => {
|
|
|
- delete item?.friendsMsgContent
|
|
|
- return item
|
|
|
- })
|
|
|
- if (!values?.friendsContent && settings?.corpUsers?.some(item => item?.friendsMsgContent?.length)) {
|
|
|
+ if (!values?.friendsContent && settings?.corpUsers?.some(item => item?.friendsTagContent?.length)) {
|
|
|
setSettings({
|
|
|
...settings,
|
|
|
...values,
|
|
|
- corpUsers
|
|
|
})
|
|
|
} else {
|
|
|
setSettings({
|
|
|
...settings,
|
|
|
...values,
|
|
|
- corpUsers
|
|
|
})
|
|
|
}
|
|
|
|