@@ -308,6 +308,25 @@ export default [ | |||
}, | |||
], | |||
}, | |||
{ | |||
name: '门店会员管理', | |||
icon: 'BankFilled', | |||
path: '/shopmanage/member', | |||
routes: [ | |||
{ | |||
name: '会员信息', | |||
icon: 'smile', | |||
path: '/shopmanage/member/memberInfo', | |||
component: './shopmanage/member/memberInfo', | |||
}, | |||
{ | |||
name: '会员标签', | |||
icon: 'smile', | |||
path: '/shopmanage/member/membertag', | |||
component: './shopmanage/member/membertag', | |||
}, | |||
] | |||
}, | |||
{ | |||
name: '门店管理', | |||
icon: 'BankFilled', | |||
@@ -0,0 +1,196 @@ | |||
import React, { useState, useEffect } from 'react'; | |||
import { Radio, Modal, Form, Input, Button, Select, InputNumber, DatePicker, Alert } from 'antd'; | |||
import { GetCouponStatusOrType } from '../service'; | |||
const CreateForm = (props) => { | |||
const { Option, OptGroup } = Select; | |||
const [options, setoptions] = useState(); | |||
const couponType = async () => { }; | |||
//初始化数据 | |||
useEffect(() => { | |||
const initcouponType = async (value) => { }; | |||
initcouponType(); | |||
}, []); | |||
const formItemLayout = { | |||
labelCol: { | |||
sm: { span: 4 }, | |||
}, | |||
wrapperCol: {}, | |||
}; | |||
const tailFormItemLayout = { | |||
wrapperCol: { | |||
sm: { | |||
offset: 1, | |||
}, | |||
}, | |||
}; | |||
const onTimeTypeChange = (value) => { }; | |||
return ( | |||
<Modal | |||
title={props.isLook ? "会员信息详情" : (props.values.id ? '编辑会员信息' : '新建会员信息')} | |||
width={700} | |||
maskClosable={false} | |||
visible={props.createModalVisible} | |||
// bodyStyle={{ padding: '32px 40px 48px' }} | |||
footer={null} //底部内容 | |||
//取消 | |||
onCancel={() => { | |||
props.onCancel(); | |||
}} | |||
//关闭时销毁 Modal 里的子元素 | |||
destroyOnClose | |||
> | |||
<Form | |||
{...formItemLayout} | |||
layout="Horizontal" | |||
preserve={false} | |||
initialValues={props.values} | |||
onFinish={props.onFinish} | |||
> | |||
<Form.Item name="id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="platformType" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="memberInfo_Id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="nickName" label="会员昵称" rules={[{ required: true, max: 200 }]}> | |||
<Input placeholder="请输入会员昵称" /> | |||
</Form.Item> | |||
<Form.Item | |||
name="phone" | |||
label="电话号码" | |||
rules={[{ required: true, pattern: '^1[0-9]{10}$', message: '请输入正确的电话号码' }]} | |||
> | |||
<Input placeholder="" disabled={props.platformType == 0 ? true : false} /> | |||
</Form.Item> | |||
<Form.Item | |||
noStyle | |||
shouldUpdate={(prevValues, currentValues) => | |||
prevValues.platformType !== currentValues.platformType | |||
} | |||
> | |||
{({ getFieldValue }) => | |||
!getFieldValue('id') ? ( | |||
<Form.Item | |||
name="platformType" | |||
disabled={true} | |||
label="平台" | |||
rules={[{ required: true, message: '请选择平台' }]} | |||
> | |||
<Select style={{ width: 120 }}> | |||
<Option value="1" disabled> | |||
微信 | |||
</Option> | |||
<Option value="2" disabled> | |||
支付宝 | |||
</Option> | |||
<Option value="3">POS</Option> | |||
<Option value="4">储值卡</Option> | |||
</Select> | |||
</Form.Item> | |||
) : null | |||
} | |||
</Form.Item> | |||
<Form.Item name="headImgUrl" label="头像" rules={[{ max: 500 }]}> | |||
<Input placeholder="请输入头像" /> | |||
</Form.Item> | |||
<Form.Item style={{ height: 32 }}> | |||
<Form.Item | |||
rules={[{ required: true, message: '请选择出生日期' }]} | |||
name="birthday" | |||
label="出生日期" | |||
style={{ float: 'left', marginLeft: 40 }} | |||
> | |||
<DatePicker /> | |||
</Form.Item> | |||
<Form.Item name="sex" label="性别" style={{ float: 'left', marginLeft: 110 }}> | |||
<Radio.Group> | |||
<Radio value={0}>未知</Radio> | |||
<Radio value={1}>男</Radio> | |||
<Radio value={2}>女</Radio> | |||
</Radio.Group> | |||
</Form.Item> | |||
</Form.Item> | |||
<Form.Item label="实名认证" style={{ height: 32 }}> | |||
<Form.Item name="realName" style={{ float: 'left', width: '145px' }}> | |||
<Input placeholder="请输入真实姓名" /> | |||
</Form.Item> | |||
<Form.Item name="cardNum" | |||
rules={[{ pattern: '^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$', message: '请请输入正确的身份证号码' }]} | |||
style={{ float: 'left', marginLeft: 10, width: '300px' }}> | |||
<Input placeholder="请输入身份证号码" /> | |||
</Form.Item> | |||
</Form.Item> | |||
<Form.Item name="country" label="国家"> | |||
<Input placeholder="请输入国家" /> | |||
</Form.Item> | |||
<Form.Item label="地区" style={{ height: 32 }}> | |||
<Form.Item name="province" style={{ float: 'left' }}> | |||
<Input style={{ width: '150px' }} placeholder="请输入省" /> | |||
</Form.Item> | |||
<Form.Item name="city" style={{ float: 'left', marginLeft: 10 }}> | |||
<Input style={{ width: '150px' }} placeholder="请输入市" /> | |||
</Form.Item> | |||
<Form.Item name="county" style={{ float: 'left', marginLeft: 10 }}> | |||
<Input style={{ width: '150px' }} placeholder="请输入县(区)" /> | |||
</Form.Item> | |||
</Form.Item> | |||
<Form.Item name="address" label="详细地址"> | |||
<Input placeholder="" /> | |||
</Form.Item> | |||
<Form.Item name="level_Id" label="等级"> | |||
<Input placeholder="" /> | |||
</Form.Item> | |||
{/* <Form.Item name="status" label="状态" rules={[{ required: true }]}> | |||
<Select placeholder="状态"> | |||
<Option value={0}>正常</Option> | |||
<Option value={1}>停用</Option> | |||
</Select> | |||
</Form.Item> */} | |||
<Form.Item | |||
noStyle | |||
shouldUpdate={(prevValues, currentValues) => | |||
prevValues.platformType !== currentValues.platformType | |||
} | |||
> | |||
{({ getFieldValue }) => | |||
(!props.isLook) ? ( | |||
<Form.Item> | |||
<Button | |||
disabled={props.isLook} | |||
type="primary" | |||
htmlType="submit" | |||
style={{ float: 'right' }} | |||
> | |||
保存 | |||
</Button> | |||
</Form.Item> | |||
) : null | |||
} | |||
</Form.Item> | |||
</Form> | |||
</Modal> | |||
); | |||
}; | |||
export default CreateForm; |
@@ -0,0 +1,81 @@ | |||
import React, { useRef, useState, useEffect } from 'react'; | |||
import { Radio, Modal, Form, Input, Button, Select, InputNumber, DatePicker, Drawer } from 'antd'; | |||
import { GetIntegralRecord } from '../service'; | |||
import ProTable from '@ant-design/pro-table'; | |||
const IntegralRecord = (props) => { | |||
const actionRef = useRef(); | |||
const columns = [ | |||
{ | |||
title: '主键', | |||
dataIndex: 'id', | |||
tip: '规则名称是唯一的key', | |||
hideInSearch: true, | |||
hideInTable: true, | |||
}, | |||
{ | |||
title: '变更前', | |||
dataIndex: 'beforeChange', | |||
valueType: 'textarea', | |||
search: false, | |||
}, { | |||
title: '变更类型', | |||
dataIndex: 'type', | |||
valueEnum: { | |||
1: { text: '增加',status:'Success'}, | |||
2: { text: '减少',status: 'Error'}, | |||
}, | |||
}, { | |||
title: '变更积分', | |||
dataIndex: 'integral', | |||
valueType: 'textarea', | |||
search: false, | |||
}, { | |||
title: '变更后', | |||
dataIndex: 'afterChange', | |||
valueType: 'textarea', | |||
search: false, | |||
}, { | |||
title: '变更时间', | |||
dataIndex: 'createAt', | |||
valueType: 'dateTime', | |||
}]; | |||
return ( | |||
<Drawer title="积分记录" | |||
//取消 | |||
onClose={() => { | |||
props.onClose(); | |||
}} | |||
width={720} | |||
visible={props.integralRecordVisible} | |||
placement="right" | |||
//关闭时销毁 Modal 里的子元素 | |||
destroyOnClose> | |||
<ProTable | |||
actionRef={actionRef} | |||
rowKey="id" | |||
request={async (params) => { | |||
var queryData = []; | |||
var total = 0; | |||
params.memberId = props.memberId; | |||
await GetIntegralRecord(JSON.stringify(params)).then((re) => { | |||
queryData = re.data.data; | |||
total = re.data.total; | |||
}); | |||
return { | |||
data: queryData, | |||
success: true, | |||
total: total, | |||
}; | |||
}} | |||
columns={columns} | |||
pagination={{ defaultPageSize: 10 }} | |||
/> | |||
</Drawer>); | |||
}; | |||
export default IntegralRecord; |
@@ -0,0 +1,622 @@ | |||
import { PlusOutlined } from '@ant-design/icons'; | |||
import { Checkbox, Modal, Space, Tag, Button, message, Popconfirm, Drawer } from 'antd'; | |||
import React, { useState, useRef } from 'react'; | |||
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; | |||
import ProTable from '@ant-design/pro-table'; | |||
import CreateForm from './components/CreateForm'; | |||
import IntegralRecord from './components/IntegralRecord'; | |||
import moment from 'moment'; | |||
import { | |||
GetMemberPageQuery, | |||
UpdateMemberStatus, | |||
UpdateMemberInfo, | |||
GetMemberTagAndInfo, | |||
UpdateMemberTag, | |||
SyncMember, | |||
GetPlatformMemberList, | |||
post, | |||
CreateMemberInfo, | |||
} from './service'; | |||
import { get, set } from 'lodash-es'; | |||
import { encode, decode } from 'js-base64'; | |||
const CheckboxGroup = Checkbox.Group; | |||
const plainOptions = ['Apple', 'Pear', 'Orange']; | |||
const defaultCheckedList = ['Apple', 'Orange']; | |||
const key = 'message'; | |||
/** | |||
* 判断会员名称是否被小程序加密 | |||
* @param {*} str | |||
* @returns | |||
*/ | |||
const isBase64 = (str) => { | |||
const result = decode(str); | |||
if (result.includes('BPA_BASE64')) { | |||
return true; | |||
} else { | |||
false; | |||
} | |||
}; | |||
/** | |||
* 对小程序加密的昵称进行解密 | |||
* @param {*} str | |||
* @returns | |||
*/ | |||
const decodeBPABase64 = (str) => { | |||
return decode(str).replace('BPA_BASE64', ''); | |||
}; | |||
const MemberManage = () => { | |||
const actionRef = useRef(); | |||
const actionRef2 = useRef(); | |||
/** 新建/更新窗口的弹窗 */ | |||
const [createModalVisible, SetCreateModalVisible] = useState(false); | |||
const [integralRecordVisible, SetIntegralRecordVisible] = useState(false); | |||
const [dataRow, setdataRow] = useState([]); | |||
const [dataRowKey, setDataRowKey] = useState([]); | |||
const [currentRow, setCurrentRow] = useState(); | |||
//会员标签弹窗 | |||
const [isTagModalVisible, setIsTagModalVisible] = useState(false); | |||
//会员标签和绑定详情 | |||
const [memberTagAndInfo, SetMemberTagAndInfo] = useState([]); | |||
//选中的标签 | |||
const [checkedTagList, setCheckedTagList] = React.useState(); | |||
const [isLook, setIsLook] = useState(false); | |||
const PlatformMemberList = async (memberId) => { | |||
await GetPlatformMemberList(memberId).then((r) => { | |||
setdataRow(r.data); | |||
}); | |||
}; | |||
//添加会员信息 | |||
const AddMemberInfo = async (fields) => { | |||
message.loading('正在添加...', key); | |||
try { | |||
fields.status = 0; | |||
await CreateMemberInfo(JSON.stringify(fields)).then((r) => { | |||
message.destroy(key); | |||
if (r.data) { | |||
message.success('添加成功'); | |||
} else { | |||
message.error('添加失败'); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.destroy(key); | |||
message.error('添加失败请重试!'); | |||
return false; | |||
} | |||
}; | |||
//修改会员信息 | |||
const updateMemberInfo = async (fields) => { | |||
message.loading('正在修改...', key); | |||
try { | |||
await UpdateMemberInfo(JSON.stringify(fields)).then((r) => { | |||
message.destroy(key); | |||
if (r.data) { | |||
message.success('修改成功'); | |||
} else { | |||
message.error('修改失败' + r.errors == null ? '' : r.errors); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.destroy(key); | |||
message.error('修改失败请重试!'); | |||
return false; | |||
} | |||
}; | |||
//修改会员状态 | |||
const updateMemberStatus = async (fields) => { | |||
message.loading('正在修改...', key); | |||
try { | |||
await UpdateMemberStatus(JSON.stringify(fields)).then((r) => { | |||
message.destroy(key); | |||
if (r.data) { | |||
PlatformMemberList(fields.Id); | |||
message.success('修改成功'); | |||
} else { | |||
message.error('修改失败' + r.errors == null ? '' : r.errors); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.destroy(key); | |||
message.error('修改失败请重试!'); | |||
return false; | |||
} | |||
}; | |||
//修改会员标签 | |||
const updateMemberTag = async (platformType, memberInfo_Id) => { | |||
message.loading('正在修改...', key); | |||
try { | |||
await UpdateMemberTag( | |||
JSON.stringify({ | |||
platformType: platformType, | |||
memberInfo_Id: memberInfo_Id, | |||
tags: checkedTagList, | |||
}), | |||
).then((r) => { | |||
message.destroy(key); | |||
if (r.data) { | |||
message.success('修改成功'); | |||
} else { | |||
message.error('修改失败' + r.errors == null ? '' : r.errors); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.destroy(key); | |||
message.error('修改失败请重试!'); | |||
return false; | |||
} | |||
}; | |||
//获取会员标签和会员的绑定标签 | |||
const getMemberTagAndInfo = async (memberinfoid, platformtype) => { | |||
await GetMemberTagAndInfo(memberinfoid, platformtype).then((r) => { | |||
if (r.data) { | |||
var list = []; | |||
var list2 = []; | |||
r.data.forEach((element) => { | |||
if (element.memberTagInfoId != null) { | |||
list2.push(element.id); | |||
} | |||
list.push({ label: element.name, value: element.id }); | |||
}); | |||
SetMemberTagAndInfo(list); | |||
setCheckedTagList(list2); | |||
} | |||
}); | |||
}; | |||
/** 国际化配置 */ | |||
const columns = [ | |||
{ | |||
title: '主键', | |||
dataIndex: 'id', | |||
hideInSearch: true, | |||
hideInTable: true, | |||
tip: '规则名称是唯一的 key', | |||
}, | |||
{ | |||
title: '头像', | |||
dataIndex: 'headImgUrl', | |||
search: false, | |||
hideInForm: true, | |||
render: (_, record) => ( | |||
<img src={record.headImgUrl} style={{ width: '45px', height: '45px' }}></img> | |||
), | |||
}, | |||
{ | |||
title: '昵称', | |||
dataIndex: 'nickName', | |||
valueType: 'textarea', | |||
ellipsis: { | |||
showTitle: true, | |||
}, | |||
hideInForm: true, | |||
render: (_, record) => ( | |||
<a>{isBase64(record.nickName) ? decodeBPABase64(record.nickName) : record.nickName}</a> | |||
), | |||
}, | |||
{ | |||
title: '电话', | |||
dataIndex: 'phone', | |||
valueType: 'textarea', | |||
hideInForm: true, | |||
}, | |||
{ | |||
title: '性别', | |||
dataIndex: 'sex', | |||
search: false, | |||
valueEnum: { | |||
0: { text: '未知' }, | |||
1: { text: '男' }, | |||
2: { text: '女' }, | |||
}, | |||
}, | |||
{ | |||
title: '等级', | |||
dataIndex: 'level', | |||
search: false, | |||
valueType: 'textarea', | |||
}, | |||
{ | |||
title: '状态', | |||
dataIndex: 'status', | |||
valueEnum: { | |||
0: { text: '正常', status: 'Success' }, | |||
1: { text: '禁用', status: 'error' }, | |||
}, | |||
}, | |||
{ | |||
title: '标签', | |||
dataIndex: 'memberTag', | |||
search: false, | |||
width: 300, | |||
render: (_, record) => ( | |||
<Space> | |||
{record.memberTag.map(({ id, name }) => ( | |||
<Tag color="#87d068" key={id}> | |||
{name} | |||
</Tag> | |||
))} | |||
</Space> | |||
), | |||
}, | |||
{ | |||
title: '创建时间', | |||
dataIndex: 'createAt', | |||
search: false, | |||
width: 150, | |||
valueType: 'textarea', | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'option', | |||
valueType: 'option', | |||
fixed: 'right', | |||
width: 300, | |||
render: (_, record) => { | |||
let template = [ | |||
<a | |||
key="primary" | |||
type="primary" | |||
onClick={() => { | |||
SetCreateModalVisible(true); | |||
setCurrentRow(() => { | |||
record.birthday = moment(record.birthday); | |||
setIsLook(true); | |||
return record; | |||
}); | |||
}} | |||
> | |||
详情 | |||
</a>, | |||
<a | |||
key="primary" | |||
type="primary" | |||
onClick={() => { | |||
SetCreateModalVisible(true); | |||
setCurrentRow(() => { | |||
record.birthday = moment(record.birthday); | |||
setIsLook(false); | |||
return record; | |||
}); | |||
}} | |||
> | |||
更新 | |||
</a>, | |||
// <Popconfirm | |||
// key="delete" | |||
// title={`确定要${record.status == 0 ? '禁用' : '启用'}吗?`} | |||
// onConfirm={async () => { | |||
// var data = { Id: record.id, platformType: 0, status: record.status == 0 ? 1 : 0 }; | |||
// updateMemberStatus(data); | |||
// }} | |||
// okText="确定" | |||
// cancelText="取消" | |||
// > | |||
// <a | |||
// key="primary" | |||
// type="primary" | |||
// > | |||
// {record.status == 0 ? '禁用 ' : '启用'} | |||
// </a> | |||
// </Popconfirm>, | |||
<a | |||
key="primary" | |||
type="primary" | |||
onClick={() => { | |||
getMemberTagAndInfo(record.id, 0); | |||
setIsTagModalVisible(true); | |||
setCurrentRow(() => { | |||
return record; | |||
}); | |||
}} | |||
> | |||
标签管理 | |||
</a>, | |||
// <a | |||
// key="primary" | |||
// type="primary" | |||
// onClick={() => { | |||
// setCurrentRow(record); | |||
// SetIntegralRecordVisible(true); | |||
// }} | |||
// > | |||
// 积分记录 | |||
// </a>, | |||
]; | |||
return template; | |||
}, | |||
}, | |||
]; | |||
const onExpand = (expanded, record) => { | |||
if (expanded) { | |||
setdataRow(record.platformMemberInfos); | |||
setDataRowKey([record.id]); | |||
} else { | |||
setDataRowKey([]); | |||
} | |||
}; | |||
const expandedRowRender = (data) => { | |||
return ( | |||
<ProTable | |||
rowKey="id" | |||
actionRef={actionRef2} | |||
pagination={{ | |||
pageSize: 10 | |||
}} | |||
scroll={{ | |||
x: 1300, | |||
}} | |||
columns={[ | |||
{ | |||
title: '平台', | |||
dataIndex: 'platformType', | |||
key: 'platformType', | |||
valueEnum: { | |||
1: { text: '微信' }, | |||
2: { text: '支付宝' }, | |||
3: { text: 'POS' }, | |||
4: { text: '储值卡' }, | |||
}, | |||
}, | |||
{ | |||
title: '头像', | |||
dataIndex: 'headImgUrl', | |||
valueType: 'textarea', | |||
search: false, | |||
hideInForm: true, | |||
render: (_, record) => ( | |||
<img src={record.headImgUrl} style={{ width: '45px', height: '45px' }}></img> | |||
), | |||
}, | |||
{ | |||
title: '昵称', | |||
dataIndex: 'nickName', | |||
valueType: 'textarea', | |||
hideInForm: true, | |||
render: (_, record) => ( | |||
<a> | |||
{isBase64(record.nickName) ? decodeBPABase64(record.nickName) : record.nickName} | |||
</a> | |||
), | |||
}, | |||
{ | |||
title: '性别', | |||
dataIndex: 'sex', | |||
search: false, | |||
valueEnum: { | |||
0: { text: '未知' }, | |||
1: { text: '男' }, | |||
2: { text: '女' }, | |||
}, | |||
}, | |||
{ | |||
title: '状态', | |||
dataIndex: 'status', | |||
valueEnum: { | |||
0: { text: '正常', status: 'Success' }, | |||
1: { text: '禁用', status: 'error' }, | |||
}, | |||
}, | |||
{ | |||
title: '标签', | |||
dataIndex: 'memberTag', | |||
key: 'memberTag', | |||
width: 450, | |||
render: (_, record) => ( | |||
<> | |||
<Space> | |||
{record.memberTag.map(({ id, name }) => ( | |||
<Tag color="#87d068" key={id}> | |||
{name} | |||
</Tag> | |||
))} | |||
</Space> | |||
</> | |||
), | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'option', | |||
valueType: 'option', | |||
render: (_, record) => { | |||
let template = [ | |||
// <a | |||
// key="primary" | |||
// type="primary" | |||
// onClick={() => { | |||
// SetCreateModalVisible(true); | |||
// setCurrentRow(() => { | |||
// record.birthday = moment(record.birthday); | |||
// return record; | |||
// }); | |||
// }} | |||
// > | |||
// 更新 | |||
// </a>, | |||
// <a | |||
// key="primary" | |||
// type="primary" | |||
// onClick={() => { | |||
// var data = { | |||
// Id: record.memberInfo_Id, | |||
// platformType: record.platformType, | |||
// status: record.status == 0 ? 1 : 0, | |||
// }; | |||
// updateMemberStatus(data); | |||
// }} | |||
// > | |||
// {record.status == 0 ? '禁用 ' : '启用'} | |||
// </a>, | |||
<a | |||
key="primary" | |||
type="primary" | |||
onClick={() => { | |||
getMemberTagAndInfo(record.memberInfo_Id, record.platformType); | |||
setIsTagModalVisible(true); | |||
setCurrentRow(() => { | |||
return record; | |||
}); | |||
PlatformMemberList(record.memberInfo_Id); | |||
}} | |||
> | |||
标签管理 | |||
</a>, | |||
]; | |||
return template; | |||
}, | |||
}, | |||
]} | |||
headerTitle={false} | |||
search={false} | |||
options={false} | |||
dataSource={dataRow} | |||
/> | |||
); | |||
}; | |||
return ( | |||
<PageContainer | |||
header={{ | |||
title: '', | |||
breadcrumb: {}, | |||
}} | |||
> | |||
<ProTable | |||
headerTitle="会员信息" | |||
pagination={{ | |||
pageSize: 10, | |||
}} | |||
scroll={{ | |||
x: 1300, | |||
}} | |||
actionRef={actionRef} | |||
onExpand={onExpand} | |||
expandedRowKeys={dataRowKey} | |||
rowKey="id" | |||
toolBarRender={() => [ | |||
<Button | |||
type="primary" | |||
key="primary" | |||
onClick={() => { | |||
// SyncMember(1).then((r) => { | |||
// message.success('启动同步,稍后请刷新页面'); | |||
// }); | |||
setIsLook(false); | |||
setCurrentRow({}); | |||
SetCreateModalVisible(true); | |||
}} | |||
> | |||
<PlusOutlined /> 添加会员 | |||
</Button>, | |||
]} | |||
expandable={{ expandedRowRender }} | |||
request={async (params) => { | |||
var data = []; | |||
var total = 0; | |||
await GetMemberPageQuery(params).then((r) => { | |||
data = r.data.data; | |||
total = r.data.total; | |||
}); | |||
return { | |||
data: data, | |||
success: true, | |||
total: total, | |||
}; | |||
}} | |||
columns={columns} | |||
/> | |||
{/* 修改会员 */} | |||
<CreateForm | |||
isLook={isLook} | |||
onFinish={async (value) => { | |||
// value.birthday = value.birthday._i; | |||
var success = false; | |||
value.MemberInfo_Id = value.id; | |||
if (value.id) { | |||
success = updateMemberInfo(value); | |||
} else { | |||
success = AddMemberInfo(value); | |||
} | |||
if (success) { | |||
SetCreateModalVisible(false); | |||
if (actionRef.current) { | |||
actionRef.current.reloadAndRest(); | |||
} | |||
} | |||
}} | |||
onCancel={() => { | |||
setCurrentRow(undefined); | |||
SetCreateModalVisible(false); | |||
}} | |||
createModalVisible={createModalVisible} | |||
values={currentRow || {}} | |||
/> | |||
{/* 会员标签 */} | |||
<Modal | |||
title="会员标签" | |||
visible={isTagModalVisible} | |||
onOk={() => { | |||
if ( | |||
updateMemberTag( | |||
currentRow.platformType, | |||
currentRow.platformType == 0 ? currentRow.id : currentRow.memberInfo_Id, | |||
) | |||
) { | |||
setIsTagModalVisible(false); | |||
setDataRowKey([]); | |||
} | |||
}} | |||
onCancel={() => { | |||
setCurrentRow([]); | |||
setIsTagModalVisible(false); | |||
}} | |||
> | |||
<> | |||
<CheckboxGroup | |||
options={memberTagAndInfo} | |||
value={checkedTagList} | |||
onChange={(list) => { | |||
setCheckedTagList(list); | |||
}} | |||
/> | |||
</> | |||
</Modal> | |||
{/* 积分记录 */} | |||
{/* <IntegralRecord | |||
onClose={() => { | |||
SetIntegralRecordVisible(false); | |||
}} | |||
memberId={currentRow?.id} | |||
integralRecordVisible={integralRecordVisible} | |||
/> */} | |||
</PageContainer> | |||
); | |||
}; | |||
export default MemberManage; |
@@ -0,0 +1,62 @@ | |||
import { request } from 'umi'; | |||
import { getDataBaseUrl,getStoremanagement } from '@/global_data'; | |||
//获取会员信息 | |||
export function GetMemberPageQuery(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/GetMemberPageQuery`, { | |||
method: 'post', | |||
data: data, | |||
}); | |||
} | |||
//添加会员 | |||
export function CreateMemberInfo(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/AddMember`, { | |||
method: 'post', | |||
data: data, | |||
}); | |||
} | |||
//修改会员信息 | |||
export function UpdateMemberInfo(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/UpdateMemberInfo`, { | |||
method: 'post', | |||
data: data, | |||
}); | |||
} | |||
//修改会员状态 | |||
export function UpdateMemberStatus(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/UpdateMemberStatus`, { | |||
method: 'post', | |||
data: data, | |||
}); | |||
} | |||
//获取会员 | |||
export function GetPlatformMemberList(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/GetPlatformMemberList?memberId=${data}`, { | |||
method: 'get', | |||
}); | |||
} | |||
//获取会员标签 和绑定详情 | |||
export function GetMemberTagAndInfo(memberinfoid, platformtype) { | |||
return request( | |||
getStoremanagement()+`/api/MemberInfoService/GetMemberTagAndInfo?memberInfoId=${memberinfoid}&PlatformType=${platformtype}`, | |||
{ | |||
method: 'get', | |||
}, | |||
); | |||
} | |||
//修改会员标签 | |||
export function UpdateMemberTag(data) { | |||
return request(getStoremanagement()+`/api/MemberInfoService/UpdateMemberTag`, { | |||
method: 'post', | |||
data: data, | |||
}); | |||
} | |||
@@ -0,0 +1,93 @@ | |||
import React, { useState, useEffect } from 'react'; | |||
import { Modal, Form, Input, Button, Select, InputNumber } from 'antd'; | |||
const CreateForm = (props) => { | |||
const { Option, OptGroup } = Select; | |||
return ( | |||
<Modal | |||
title={props.values.id ? '编辑' : '新建'} | |||
width={640} | |||
visible={props.createModalVisible} | |||
bodyStyle={{ padding: '32px 40px 48px' }} | |||
footer={null} | |||
onCancel={() => { | |||
props.onCancel(); | |||
}} | |||
destroyOnClose | |||
maskClosable={false} | |||
> | |||
<Form | |||
layout="vertical" | |||
preserve={false} | |||
form={props.form} | |||
initialValues={props.values} | |||
onFinish={props.onFinish} | |||
> | |||
<Form.Item name="id" hidden={true}> | |||
<Input /> | |||
</Form.Item> | |||
<Form.Item name="name" label="标签名称" rules={[{ required: true, max: 65,whitespace:true }]}> | |||
<Input placeholder="请输入标签名称" /> | |||
</Form.Item> | |||
<Form.Item | |||
name="platformType" | |||
label="平台" | |||
defaultValue={props.values.status} | |||
rules={[{ required: true, message: '请选择平台' }]} | |||
> | |||
<Select placeholder="请选择平台"> | |||
<OptGroup> | |||
<Select.Option value="0">默认</Select.Option> | |||
<Select.Option value="1">微信</Select.Option> | |||
<Select.Option value="2">支付宝</Select.Option> | |||
<Select.Option value="3">POS</Select.Option> | |||
<Select.Option value="4">储值卡</Select.Option> | |||
</OptGroup> | |||
</Select> | |||
</Form.Item> | |||
{/* <Form.Item name="sort" label="排序"> | |||
<InputNumber min={1} placeholder="请选择排序" /> | |||
</Form.Item> */} | |||
{/* <Form.Item | |||
noStyle | |||
shouldUpdate={(prevValues, currentValues) => | |||
prevValues.mode !== currentValues.mode | |||
} > | |||
{({ getFieldValue }) => | |||
(props.values.id) ? ( | |||
<Form.Item | |||
name="status" | |||
label="状态" | |||
defaultValue={props.values.status} | |||
rules={[{ required: true, message: '请选择状态' }]} | |||
> | |||
<Select placeholder="请选择状态"> | |||
<OptGroup> | |||
<Select.Option value="0">正常</Select.Option> | |||
<Select.Option value="1">停用</Select.Option> | |||
</OptGroup> | |||
</Select> | |||
</Form.Item> | |||
) : null | |||
} | |||
</Form.Item> */} | |||
<Form.Item> | |||
{/* <Button type="primary" htmlType="submit"> | |||
保存 | |||
</Button> */} | |||
<Button type="primary" htmlType="submit" style={{ float: 'right', left: 10 }} > | |||
确认 | |||
</Button> | |||
<Button htmlType="button" style={{ float: 'right' }} onClick={props.onCancel} > | |||
取消 | |||
</Button> | |||
</Form.Item> | |||
</Form> | |||
</Modal> | |||
); | |||
}; | |||
export default CreateForm; |
@@ -0,0 +1,51 @@ | |||
import React, { useState, useEffect } from 'react'; | |||
import { Modal, Form, Input, Button, Select, InputNumber } from 'antd'; | |||
const CreateForm = (props) => { | |||
const { Option, OptGroup } = Select; | |||
return ( | |||
<Modal | |||
title="分配会员平台" | |||
width={640} | |||
visible={props.createModalVisible} | |||
bodyStyle={{ padding: '32px 40px 48px' }} | |||
footer={null} | |||
onCancel={() => { | |||
props.onCancel(); | |||
}} | |||
centered={true} | |||
destroyOnClose | |||
> | |||
<Form | |||
layout="vertical" | |||
preserve={false} | |||
initialValues={props.values} | |||
onFinish={props.onFinish} | |||
> | |||
<Form.Item | |||
name="platformType" | |||
label="平台" | |||
defaultValue={props.values.status} | |||
rules={[{ required: true, message: '请选择平台', width: 50 }]} | |||
> | |||
<Select placeholder="请选择平台"> | |||
<OptGroup> | |||
<Select.Option value="-1">全部</Select.Option> | |||
<Select.Option value={0}>默认</Select.Option> | |||
<Select.Option value={1}>微信</Select.Option> | |||
<Select.Option value={2}>支付宝</Select.Option> | |||
<Select.Option value={3}>POS</Select.Option> | |||
<Select.Option value={4}>储值卡</Select.Option> | |||
</OptGroup> | |||
</Select> | |||
</Form.Item> | |||
<Form.Item> | |||
<Button type="primary" htmlType="submit"> | |||
保存 | |||
</Button> | |||
</Form.Item> | |||
</Form> | |||
</Modal> | |||
); | |||
}; | |||
export default CreateForm; |
@@ -0,0 +1,191 @@ | |||
import { PlusOutlined } from '@ant-design/icons'; | |||
import { Popconfirm, Modal, Button, message, Input, Drawer } from 'antd'; | |||
import React, { useEffect, useState, useRef } from 'react'; | |||
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; | |||
import ProTable from '@ant-design/pro-table'; | |||
import ProDescriptions from '@ant-design/pro-descriptions'; | |||
// import CreateForm from './CreateMemberInfoForm'; | |||
import api from '../services'; | |||
const key = 'message'; | |||
const memberInfoListManage = (props) => { | |||
/** 新建/更新窗口的弹窗 */ | |||
const [createModalVisible, handleModalVisible] = useState(false); | |||
const actionRef = useRef(); | |||
const [currentRow, setCurrentRow] = useState(); | |||
const [selectedRowsState, setSelectedRows] = useState([]); | |||
//分配会员 | |||
function pushMemberTagInfo(value) { | |||
try { | |||
api | |||
.AddOrUpdateMemberTagInfo({ | |||
ids: selectedRowsState.map((item, index) => item.id), | |||
memberTag_Id: props.values.id, | |||
platformType: value.platformType, | |||
}) | |||
.then((r) => { | |||
if (r.data) { | |||
message.success('分配会员成功!!!!'); | |||
} else { | |||
message.error('分配会员失败,请重试'); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.error('分配会员失败,请重试'); | |||
} | |||
} | |||
const columns = [ | |||
{ | |||
title: '主键', | |||
dataIndex: 'id', | |||
hideInSearch: true, | |||
hideInTable: true, | |||
tip: '规则名称是唯一的 key', | |||
}, | |||
{ | |||
title: '头像', | |||
dataIndex: 'headImgUrl', | |||
search: false, | |||
hideInForm: true, | |||
render: (_, record) => ( | |||
<img src={record.headImgUrl} style={{ width: '45px', height: '45px' }}></img> | |||
), | |||
}, | |||
{ | |||
title: '会员昵称', | |||
dataIndex: 'nickName', | |||
valueType: 'textarea', | |||
}, | |||
{ | |||
title: '真实姓名', | |||
dataIndex: 'realName', | |||
valueType: 'textarea', | |||
}, | |||
{ | |||
title: '性别', | |||
dataIndex: 'sex', | |||
search: false, | |||
valueEnum: { | |||
0: { text: '未知', status: 'Processing' }, | |||
1: { text: '男', status: 'Processing' }, | |||
2: { text: '女', status: 'Success' }, | |||
}, | |||
}, | |||
{ | |||
title: '电话', | |||
dataIndex: 'phone', | |||
valueType: 'textarea', | |||
}, | |||
{ | |||
title: '状态', | |||
dataIndex: 'status', | |||
valueEnum: { | |||
0: { | |||
text: '正常', | |||
status: 'Processing', | |||
}, | |||
1: { | |||
text: '停用', | |||
status: 'Success', | |||
}, | |||
}, | |||
}, | |||
]; | |||
return ( | |||
<Modal | |||
width={1200} | |||
bodyStyle={{ padding: '32px 40px 48px' }} | |||
destroyOnClose | |||
title={(props.values == undefined ? '' : props.values.name) + '分配会员'} | |||
search={false} | |||
visible={props.memberInfoModalVisible} | |||
footer={false} | |||
onCancel={() => props.onCancel()} | |||
maskClosable={false} | |||
centered={true} | |||
> | |||
<PageContainer | |||
header={{ | |||
title: '', | |||
breadcrumb: {}, | |||
}} | |||
> | |||
<ProTable | |||
headerTitle="会员信息" | |||
actionRef={actionRef} | |||
rowKey="id" | |||
search={{ | |||
labelWidth: 120, | |||
}} | |||
toolBarRender={() => [ | |||
<Button | |||
type="primary" | |||
key="primary" | |||
onClick={() => { | |||
if (selectedRowsState.length == 0) { | |||
message.error('请选择需要分配平台的会员的数据!!'); | |||
} else { | |||
//handleModalVisible(false); | |||
var success = false; | |||
var success = pushMemberTagInfo(props.values); | |||
if (success) { | |||
setSelectedRows([]); | |||
handleModalVisible(false); | |||
props.onCancel(); | |||
} | |||
} | |||
}} | |||
> | |||
分配 | |||
</Button>, | |||
]} | |||
request={async (params) => { | |||
var data = []; | |||
var total = 0; | |||
await api.GetMemberInfoPageAsync(params).then((r) => { | |||
data = r.data.data; | |||
total = r.data.total; | |||
}); | |||
return { | |||
data: data, | |||
success: true, | |||
total: total, | |||
}; | |||
}} | |||
columns={columns} | |||
rowSelection={{ | |||
onChange: (_, selectedRows) => { | |||
setSelectedRows(selectedRows); | |||
}, | |||
}} | |||
/> | |||
{/* <CreateForm | |||
onFinish={async (value) => { | |||
var success = false; | |||
var success = pushMemberTagInfo(value); | |||
if (success) { | |||
handleModalVisible(false); | |||
} | |||
}} | |||
onCancel={() => { | |||
//分配数据 | |||
handleModalVisible(false); | |||
setCurrentRow(undefined); | |||
}} | |||
createModalVisible={createModalVisible} | |||
values={currentRow || {}} | |||
/> */} | |||
</PageContainer> | |||
</Modal> | |||
); | |||
}; | |||
export default memberInfoListManage; |
@@ -0,0 +1,369 @@ | |||
import { DropboxOutlined, PlusOutlined } from '@ant-design/icons'; | |||
import { Button, message, Input, Drawer, Popconfirm } from 'antd'; | |||
import React, { useState, useRef, useEffect } from 'react'; | |||
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; | |||
import ProTable from '@ant-design/pro-table'; | |||
import ProDescriptions from '@ant-design/pro-descriptions'; | |||
import CreateForm from './components/CreateForm'; | |||
import MemberInfoTable from './components/memberInfoList'; | |||
import api from './services'; | |||
//页面 相当于 class | |||
const MemberTagManage = () => { | |||
/** 新建/更新窗口的弹窗 */ | |||
const [createModalVisible, handleModalVisible] = useState(false); | |||
/** 分布更新窗口的弹窗 */ | |||
const [showDetail, setShowDetail] = useState(false); | |||
//绑定 | |||
const actionRef = useRef(); | |||
const [currentRow, setCurrentRow] = useState(); | |||
//选中的行 | |||
const [selectedRowsState, setSelectedRows] = useState([]); | |||
//分配会员 | |||
const [memberInfoModalVisible, setMemberInfoModalVisible] = useState(false); | |||
/** | |||
* 添加节点 | |||
* | |||
* @param fields | |||
*/ | |||
function handleAdd(fields) { | |||
try { | |||
fields.status=0; | |||
api.addMemberTag(JSON.stringify(fields)).then((r) => { | |||
if (r.data) { | |||
message.success('添加成功'); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
} else { | |||
message.success('添加失败请重试!'); | |||
} | |||
}); | |||
return true; | |||
} catch (error) { | |||
message.error('添加失败请重试!'); | |||
return false; | |||
} | |||
} | |||
/** | |||
* 更新节点 | |||
* | |||
* @param fields | |||
*/ | |||
function handleUpdate(fields) { | |||
try { | |||
api.updateMemberTag(fields).then((r) => { | |||
if (r.data) { | |||
message.success('更新成功'); | |||
actionRef.current.reloadAndRest(); | |||
} else { | |||
message.error('更新失败请重试!'); | |||
} | |||
}); | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.error('更新失败请重试!'); | |||
return false; | |||
} | |||
} | |||
/** | |||
* 删除节点 | |||
* | |||
* @param selectedRows | |||
*/ | |||
function handleRemove() { | |||
try { | |||
api.removeMemberTag(selectedRowsState.map((item, index) => item.id)).then((r) => { | |||
if (r.data) { | |||
message.success('删除成功,即将刷新'); | |||
} else { | |||
message.error('删除失败,请重试'); | |||
} | |||
}); | |||
//刷新数据 | |||
actionRef.current.reloadAndRest(); | |||
return true; | |||
} catch (error) { | |||
message.error('删除失败,请重试'); | |||
} | |||
} | |||
/** 国际化配置 */ | |||
const columns = [ | |||
{ | |||
title: '主键', | |||
dataIndex: 'id', | |||
tip: '规则名称是唯一的 key', | |||
hideInSearch: true, | |||
hideInTable: true, | |||
render: (dom, entity) => { | |||
return ( | |||
<a | |||
onClick={() => { | |||
setCurrentRow(entity); | |||
setShowDetail(true); | |||
}} | |||
> | |||
{dom} | |||
</a> | |||
); | |||
}, | |||
}, | |||
{ | |||
title: '名称', | |||
dataIndex: 'name', | |||
valueType: 'textarea', | |||
ellipsis: true, | |||
}, | |||
{ | |||
title: '平台', | |||
dataIndex: 'platformType', | |||
hideInForm: true, | |||
valueEnum: { | |||
0: { | |||
text: '默认平台', | |||
defaultPlatformType: 'Processing', | |||
}, | |||
1: { | |||
text: '微信', | |||
defaultPlatformType: 'Success', | |||
}, | |||
2: { | |||
text: '支付宝', | |||
defaultPlatformType: 'Default', | |||
}, | |||
3: { | |||
text: 'POS', | |||
defaultPlatformType: 'Default', | |||
}, | |||
4: { | |||
text: '储值卡', | |||
defaultPlatformType: 'Default', | |||
}, | |||
}, | |||
}, | |||
{ | |||
title: '状态', | |||
dataIndex: 'status', | |||
hideInForm: true, | |||
hideInSearch: true, | |||
valueEnum: { | |||
0: { | |||
text: '正常', | |||
status: 'Processing', | |||
}, | |||
1: { | |||
text: '停用', | |||
status: 'Success', | |||
}, | |||
}, | |||
}, | |||
{ | |||
title: '创建时间', | |||
dataIndex: 'createAt', | |||
valueType: 'date', | |||
hideInSearch: true, | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'option', | |||
valueType: 'option', | |||
fixed: 'right', | |||
width: 150, | |||
render: (_, record) => [ | |||
<a | |||
key="config" | |||
onClick={() => { | |||
handleModalVisible(true); | |||
setCurrentRow(record); | |||
}} | |||
> | |||
更新 | |||
</a>, | |||
<Popconfirm | |||
key="primary" | |||
type="primary" | |||
title="确认删除吗" | |||
okText="是" | |||
cancelText="否" | |||
onConfirm={() => { | |||
//handleRemoveSingle(record.id); | |||
api.removeMemberTag([record.id]).then((r) => { | |||
if (r.data) { | |||
message.success('删除成功,即将刷新'); | |||
actionRef.current.reloadAndRest(); | |||
} else { | |||
message.error('删除失败,请重试'); | |||
} | |||
}); | |||
}} | |||
onCancel={() => {}} | |||
> | |||
<a href="#">删除</a> | |||
</Popconfirm>, | |||
// <a | |||
// key="primary" | |||
// onClick={() => { | |||
// setCurrentRow(record); | |||
// setMemberInfoModalVisible(true); | |||
// }} | |||
// > | |||
// {' '} | |||
// 分配会员平台 | |||
// </a>, | |||
], | |||
}, | |||
]; | |||
return ( | |||
<PageContainer header={{ | |||
title: '', | |||
breadcrumb: {}, | |||
}}> | |||
<ProTable | |||
pagination={{ | |||
pageSize: 10 | |||
}} | |||
scroll={{ | |||
x: 1300, | |||
}} | |||
headerTitle="会员标签管理" | |||
actionRef={actionRef} | |||
rowKey="id" | |||
search={{ | |||
labelWidth: 120, | |||
}} | |||
columns={columns} | |||
toolBarRender={() => [ | |||
<Button | |||
type="primary" | |||
key="primary" | |||
onClick={() => { | |||
handleModalVisible(true); | |||
}} | |||
> | |||
<PlusOutlined /> 新建 | |||
</Button>, | |||
]} | |||
//数据绑定 | |||
request={async (params) => { | |||
var memberTagData = []; | |||
var total = 0; | |||
await api.memberTagList(params).then((r) => { | |||
memberTagData = r.data.data; | |||
memberTagData.forEach((x) => { | |||
x.status = x.status.toString(); | |||
x.platformType = x.platformType.toString(); | |||
}); | |||
total = r.data.total; | |||
}); | |||
return { | |||
data: memberTagData, | |||
success: true, | |||
total: total, | |||
}; | |||
}} | |||
// 每行选择点击事件 | |||
// rowSelection={{ | |||
// onChange: (_, selectedRows) => { | |||
// setSelectedRows(selectedRows); | |||
// }, | |||
// }} | |||
></ProTable> | |||
{selectedRowsState?.length > 0 && ( | |||
<FooterToolbar | |||
extra={ | |||
<div> | |||
已选择{' '} | |||
<a | |||
style={{ | |||
fontWeight: 600, | |||
}} | |||
> | |||
{selectedRowsState.length} | |||
</a>{' '} | |||
项 | |||
</div> | |||
} | |||
> | |||
<Button | |||
onClick={() => { | |||
handleRemove(selectedRowsState); | |||
setSelectedRows([]); | |||
actionRef.current?.reloadAndRest?.(); | |||
}} | |||
type="primary" | |||
key="primary" | |||
> | |||
批量删除 | |||
</Button> | |||
</FooterToolbar> | |||
)} | |||
{/* 会员标签管理(新增,修改) */} | |||
<CreateForm | |||
isAdd="true" | |||
onFinish={async (value) => { | |||
var success = false; | |||
if (value.id) { | |||
success = await handleUpdate(value); | |||
setCurrentRow(undefined); | |||
} else { | |||
success = await handleAdd(value); | |||
} | |||
if (success) { | |||
handleModalVisible(false); | |||
if (actionRef.current) { | |||
actionRef.current.reloadAndRest(); | |||
} | |||
} | |||
}} | |||
onCancel={() => { | |||
setCurrentRow(undefined); | |||
handleModalVisible(false); | |||
}} | |||
createModalVisible={createModalVisible} | |||
values={currentRow || {}} | |||
/> | |||
<Drawer | |||
width={600} | |||
visible={showDetail} | |||
onClose={() => { | |||
setCurrentRow(undefined); | |||
setShowDetail(false); | |||
}} | |||
closable={false} | |||
> | |||
{currentRow?.name && ( | |||
<ProDescriptions | |||
column={2} | |||
title={currentRow?.name} | |||
request={async () => ({ | |||
data: currentRow || {}, | |||
})} | |||
params={{ | |||
id: currentRow?.name, | |||
}} | |||
columns={columns} | |||
/> | |||
)} | |||
</Drawer> | |||
{/* 分配会员 */} | |||
<MemberInfoTable | |||
onCancel={() => { | |||
setMemberInfoModalVisible(false); | |||
setCurrentRow({}); | |||
}} | |||
memberInfoModalVisible={memberInfoModalVisible} | |||
values={currentRow} | |||
/> | |||
</PageContainer> | |||
); | |||
}; | |||
export default MemberTagManage; |
@@ -0,0 +1,48 @@ | |||
// @ts-ignore | |||
/* eslint-disable */ | |||
import { defaultActionRender } from '@ant-design/pro-utils/lib/useEditableArray'; | |||
import { request } from 'umi'; | |||
import { getDataBaseUrl,getStoremanagement } from '@/global_data'; | |||
export default { | |||
/** 获取会员标签信息 sdsa GET /kitchen/api/rule */ | |||
memberTagList(data) { | |||
return request(getStoremanagement()+`/api/MemberTagService/MemberTagQueryDto`, { | |||
method: 'POST', | |||
data: data, | |||
// params: { ...params }, | |||
// ...(options || {}), | |||
}); | |||
}, | |||
/** 新建会员标签信息 POST /kitchen/api/rule */ | |||
addMemberTag(data) { | |||
// http://localhost:7002 | |||
return request(getStoremanagement()+`/api/MemberTagService/AddMemberTag`, { | |||
method: 'POST', | |||
// type:'json', | |||
data: data, | |||
// ...(options || {}), | |||
}); | |||
}, | |||
/** 修改会员标签信息 POST /kitchen/api/rule */ | |||
updateMemberTag(data) { | |||
// http://localhost:7002 | |||
return request(getStoremanagement()+`/api/MemberTagService/UpdateMemberTag`, { | |||
method: 'post', | |||
// type:'json', | |||
data: data, | |||
// ...(options || {}), | |||
}); | |||
}, | |||
/** 删除会员标签信息 POST /kitchen/api/rule */ | |||
removeMemberTag(data) { | |||
return request(getStoremanagement()+`/api/MemberTagService/DelMemberTag?Id=` + data, { | |||
method: 'DELETE', | |||
// ...(options || {}), | |||
}); | |||
}, | |||
}; |
@@ -35,12 +35,12 @@ const CreateForm = (props) => { | |||
</Form.Item> | |||
<Form.Item> | |||
<Button htmlType="button" style={{float:'right',left:10}} onClick={props.onCancel} > | |||
取消 | |||
</Button> | |||
<Button type="primary" htmlType="submit" style={{float:'right'}} > | |||
保存 | |||
</Button> | |||
<Button type="primary" htmlType="submit" style={{ float: 'right', left: 10 }} > | |||
确认 | |||
</Button> | |||
<Button htmlType="button" style={{ float: 'right' }} onClick={props.onCancel} > | |||
取消 | |||
</Button> | |||
</Form.Item> | |||
</Form> | |||
</Modal> | |||