Commit 70da4672 authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

feat(平台营销活动管理): 活动规则完善

parent bb664d91
import React from 'react';
import React, { useState } from 'react';
import { Modal } from 'antd';
import {
SchemaForm, SchemaMarkupField as Field,
......@@ -37,7 +37,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
modalType,
fetch,
} = props;
const [loading, setLoading] = useState<boolean>(false);
const useFormEffects = () => {
const { setFieldState } = createFormActions()
if (modalType === 'audit') {
......@@ -107,6 +107,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
const handleSubmit = (val: any) => {
let value = { ...val }
let params: any = {}
setLoading(true)
if (modalType === 'audit') {
params.id = id;
params.state = value.state;
......@@ -123,9 +124,11 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
}
fetch({ ...params }).then(res => {
if (res.code === 1000) {
onOk()
if (res.code !== 1000) {
setLoading(false)
return
}
onOk && onOk()
})
}
......@@ -140,6 +143,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
title={title}
visible={visible}
onCancel={handleClose}
confirmLoading={loading}
onOk={() => actions.submit()}
afterClose={() => actions.reset()}
>
......
......@@ -368,13 +368,13 @@ export const GeneralEffect = (int, data) => {
return [
{
col: [
{ label: '抽取用户时间', extra: '' },
{ label: '抽取用户时间', extra: data.extractAttemptUserTime && format(data.extractAttemptUserTime) },
{ label: '活动描述', extra: data.describe },
]
},
{
col: [
{ label: '试用结束时间', extra: '' },
{ label: '试用结束时间', extra: data.attemptEndTime && format(data.attemptEndTime) },
]
}
]
......
......@@ -3,21 +3,22 @@
align-items: center;
h5 { margin-bottom: 2em; }
.label {
flex: 0 0 25%;
flex: 0 0 84.66px;
color: #909399;
}
.content {
flex: 0 0 70%;
display: flex;
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
.selector {
max-width: 130px;
min-width: 56px;
padding: 0px 6px;
min-width: 68px;
height: 32px;
color: #252D37;
background: #FAFBFC;
text-align: center;
line-height: 32px;
padding: 0px 4px;
}
}
}
......
......@@ -14,7 +14,9 @@ interface ActivityUserLayoutProps {
/** 适用用户 */
isFlag?: boolean,
/** 数据回显 */
dataScoure?: any
dataScoure?: any,
/** 适用用户 */
allUsers?: any[],
}
const PIC_MAP = {
......@@ -25,7 +27,7 @@ const PIC_MAP = {
};
const ActivityUserLayout: React.FC<ActivityUserLayoutProps> = (props: any) => {
const { title, isFlag, dataScoure } = props;
const { title, isFlag, dataScoure, allUsers } = props;
const [data, setData] = useState<any>({});
const [memberLevelList, setMemberLevelList] = useState<any[]>([]);
......@@ -41,26 +43,43 @@ const ActivityUserLayout: React.FC<ActivityUserLayoutProps> = (props: any) => {
title={title}
>
<Row gutter={[8, 8]}>
<Col span={8}>
<div className={style.cell}>
<h5 className={style.label}>适用用户: </h5>
<h5 className={style.content}>
<Space>
{data.newMember !== 0 && <div className={style.selector}>新会员(平台会员)</div>}
{data.oldMember !== 0 && <div className={style.selector}>老会员(平台会员)</div>}
</Space>
</h5>
</div>
<div className={style.cell}>
<h5 className={style.label}>适用用户角色: </h5>
<h5 className={style.content}>
<Space>
{data.enterpriseMember !== 0 && <div className={style.selector}>企业会员</div>}
{data.personalMember !== 0 && <div className={style.selector}>个人会员</div>}
</Space>
</h5>
</div>
</Col>
{!isEmpty(allUsers) ?
allUsers.map((item, i) => (
<Col span={24} key={`allUsers_${i}`}>
<div className={style.cell}>
<h5 className={style.label}>{item.title}: </h5>
<h5 className={style.content}>
<Space>
{item.value.filter(_item => _item.key !== 0).map((_item, _i) => (
<div className={style.selector} key={`_item_${_i}`}>{_item.name}</div>
))}
</Space>
</h5>
</div>
</Col>
))
: (
<Col span={24}>
<div className={style.cell}>
<h5 className={style.label}>适用用户: </h5>
<h5 className={style.content}>
<Space>
{data.newMember && <div className={style.selector}>新会员(平台会员)</div>}
{data.oldMember && <div className={style.selector}>老会员(平台会员)</div>}
</Space>
</h5>
</div>
<div className={style.cell}>
<h5 className={style.label}>适用用户角色: </h5>
<h5 className={style.content}>
<Space>
{data.enterpriseMember && <div className={style.selector}>企业会员</div>}
{data.personalMember && <div className={style.selector}>个人会员</div>}
</Space>
</h5>
</div>
</Col>
)}
</Row>
{!isFlag && (
<Row gutter={[24, 24]}>
......
export const _data = {
id: 1,
activityId: 888,
activityName: '自建营销活动管理',
marketingNo: 'XJBX888888',
externalState: 5,
externalStateName: '已结束',
interiorState: 5,
interiorStateName: '已结束',
activityType: 1,
orderModal: '询价报价下单',
membersName: '温州龙昌手袋有限公司',
creationTime: 1624603001552,
activityStartTime: 1624603001552,
activityEndTime: 1624603001552,
externalLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "供应商",
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "平台",
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "上线营销活动",
roleName: "供应商",
state: 1,
stateName: null,
},
],
externalLogs: [
{
auditOpinion: "",
createMemberId: 20,
createMemberRoleId: 11,
createTime: 1624600139800,
id: 1,
operation: "提交营销活动",
purchaseInquiryId: 956,
roleName: "供应商",
state: 2,
stateName: "待平台审核",
},
{
auditOpinion: "同意",
createMemberId: 20,
createMemberRoleId: 11,
createTime: 1624600139800,
id: 2,
operation: "审核营销活动",
purchaseInquiryId: 956,
roleName: "平台",
state: 2,
stateName: "待上线活动",
},
],
interiorLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "新增营销活动",
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "审核营销活动(一级)",
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动(二级)",
roleName: "运营总监",
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "提交营销活动",
roleName: "运营人员",
state: 1,
stateName: null,
},
],
interiorLogs: [
{
auditOpinion: "",
createMemberId: 20,
createRoleId: 11,
createTime: 1624600137942,
department: "运营人员",
id: 3968,
memberId: null,
memberRoleId: null,
operation: "新增营销活动",
position: "运营部",
purchaseInquiryId: 956,
roleName: "张三",
state: 1,
stateName: "待审核(一级)",
step: 1,
},
],
}
......@@ -34,7 +34,9 @@ const DetialLayout = () => {
const { query: { id, signUpId }, pathname }: any = history.location;
const [path] = useState(pathname.split('/')[pathname.split('/').length - 1]);
const [pathPci] = useState(pathname.split('/')[pathname.split('/').length - 2]);
const [visible, setVisible] = useState<boolean>(false)
const [visible, setVisible] = useState<boolean>(false);
const [allUsers, setAllusers] = useState<any[]>([]);
const format = (text, fmt?: string) => {
return <>{moment(text).format(fmt || "YYYY-MM-DD HH:mm:ss")}</>
}
......@@ -49,7 +51,6 @@ const DetialLayout = () => {
{
col: [
{ label: '活动ID', extra: data.id },
{ label: '活动名称', extra: data.activityName },
{ label: '外部状态', extra: data.outerStatusName },
{ label: '内部状态', extra: data.innerStatusName },
]
......@@ -57,14 +58,15 @@ const DetialLayout = () => {
{
col: [
{ label: '活动类型', extra: data.activityTypeName },
{ label: '活动参与类型', extra: data.activitySignUpTypeName },
{ label: '活动开始时间', extra: format(data.startTime) },
{ label: '活动结束时间', extra: format(data.endTime) },
{ label: '活动名称', extra: data.activityName },
{ label: '会员名称', extra: data.activitySignUpTypeName },
]
},
{
col: [
{ label: '要求报名时间', extra: <>{format(data.signUpStartTime)}~{format(data.signUpEndTime)}</> },
{ label: '活动开始时间', extra: format(data.startTime) },
{ label: '活动结束时间', extra: format(data.endTime) },
{ label: '创建时间', extra: format(data.createTime) },
]
},
])
......@@ -83,9 +85,7 @@ const DetialLayout = () => {
}
let { data } = res;
let externalLogStates: any = [];
let interiorLogStates: any = [];
let externalLogs: any = [];
let interiorLogs: any = [];
if (data.outerTaskList) {
data.outerTaskList.forEach((item: any) => {
externalLogStates.push({
......@@ -98,18 +98,6 @@ const DetialLayout = () => {
})
data.externalLogStates = externalLogStates;
}
if (data.innerTaskList) {
data.innerTaskList.forEach((item: any) => {
interiorLogStates.push({
state: item.step,
stateName: null,
isExecute: item.isExecute,
operationalProcess: item.taskName,
roleName: item.roleName,
})
})
data.interiorLogStates = interiorLogStates;
}
if (data.outerRecordDOList) {
data.outerRecordDOList.forEach((item: any, index: number) => {
externalLogs.push({
......@@ -125,23 +113,24 @@ const DetialLayout = () => {
})
data.externalLogs = externalLogs;
}
if (data.innerRecordDOList) {
data.innerRecordDOList.forEach((item: any, index: number) => {
interiorLogs.push({
department: item.department,
position: item.jobTitle,
operation: item.operate,
createTime: item.operateTime,
roleName: item.operator,
auditOpinion: item.opinion,
stateName: item.statusName,
id: index + 1,
state: item.status,
step: index,
})
})
data.interiorLogs = interiorLogs;
}
setAllusers([
{
title: '适用用户',
value: [{
key: data.newUser,
name: '新用户(不包含会员)'
},{
key: data.oldUser,
name: '老用户(不包含会员)'
},{
key: data.newMember,
name: '新会员(仅会员用户)'
},{
key: data.oldMember,
name: '老会员(仅会员用户)'
}]
}
])
setDataSource(data);
handleBasicEffect(data)
handleGeneralEffect(data.activityDefinedBO, data.activityType)
......@@ -204,7 +193,7 @@ const DetialLayout = () => {
title="活动商品"
columns={columns}
/>
<ActivityUserLayout dataScoure={dataSource} />
<ActivityUserLayout dataScoure={dataSource} allUsers={allUsers} />
<DemandLayout storeList={dataSource.shopList} />
<RecordLyout />
</Fragment>
......@@ -214,7 +203,7 @@ const DetialLayout = () => {
<ModalOperate
id={signUpId ? signUpId : id}
title="单据审核"
modalType={ signUpId ? 'merkeingAudit' : 'merkeingAuditId'}
modalType={signUpId ? 'merkeingAudit' : 'merkeingAuditId'}
visible={visible}
fetch={fetchLink()}
onCancel={() => setVisible(false)}
......
......@@ -22,7 +22,7 @@ const MerchantMarketingSearch = () => {
title: '活动名称',
key: 'activityName',
dataIndex: 'activityName',
render: (text, record) => <EyePreview url={`/merchantMarketing/merchantMarketingSearch/preview?id=${record.id}`}>{text}</EyePreview>
render: (text, record) => <EyePreview url={`/marketingManage/merchantMarketing/merchantMarketingSearch/preview?id=${record.id}`}>{text}</EyePreview>
},
{
title: '活动类型',
......
......@@ -50,7 +50,7 @@ const WaitAuditMerchantMarketing = () => {
title: '活动名称',
key: 'activityName',
dataIndex: 'activityName',
render: (text, record) => <EyePreview url={`/merchantMarketing/waitAuditMerchantMarketing/preview?id=${record.id}`}>{text}</EyePreview>
render: (text, record) => <EyePreview url={`/marketingManage/merchantMarketing/waitAuditMerchantMarketing/preview?id=${record.id}`}>{text}</EyePreview>
},
{
title: '活动类型',
......@@ -86,7 +86,7 @@ const WaitAuditMerchantMarketing = () => {
title: '操作',
key: 'state',
dataIndex: 'state',
render: (_text, record) => <Button type='link' onClick={() => history.push(`/merchantMarketing/waitAuditMerchantMarketing/detail?id=${record.id}`)}>审核</Button>
render: (_text, record) => ( record.exam && <Button type='link' onClick={() => history.push(`/marketingManage/merchantMarketing/waitAuditMerchantMarketing/detail?id=${record.id}`)}>审核</Button>)
}
]
......
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