Merge remote-tracking branch 'origin/main' into dev/chat

dev/chat
Lei OT 2 years ago
commit 16688f2cf4

@ -15,13 +15,20 @@ const useOrderStore = create((set, get) => ({
fetchOrderDetail: async (colisn) => { fetchOrderDetail: async (colisn) => {
const json = await fetchJSON(`${API_HOST}/getorderinfo`, { colisn }) const json = await fetchJSON(`${API_HOST}/getorderinfo`, { colisn })
if (json.errcode === 0 && json.result.length > 0) { if (json.errcode === 0 && json.result.length > 0) {
const orderResult = json.result[0]
set(() => ({ set(() => ({
orderDetail: json.result[0], orderDetail: orderResult,
customerDetail: json.result[0].contact[0], customerDetail: orderResult.contact.length > 0 ? orderResult.contact[0] : {},
lastQuotation: json.result[0].quotes.length > 0 ? json.result[0].quotes[0] : {}, lastQuotation: orderResult.quotes.length > 0 ? orderResult.quotes[0] : {},
})) }))
} }
} },
setOrderPropValue: async (colisn, propName, value) => {
const json = await fetchJSON(`${API_HOST}/setorderstatus`, { colisn, stype: propName, svalue: value })
console.info(json)
},
})) }))
export default useOrderStore export default useOrderStore

@ -103,7 +103,11 @@ function AuthApp() {
trigger={['click']} trigger={['click']}
> >
<a onClick={(e) => e.preventDefault()} style={{ color: colorPrimary }}> <a onClick={(e) => e.preventDefault()} style={{ color: colorPrimary }}>
<Space><Avatar src={loginUser.avatarUrl}>{loginUser.username.substring(1)}</Avatar>{loginUser.username}<DownOutlined /></Space> <Space><Avatar
style={{
backgroundColor: colorPrimary,
}}
src={loginUser.avatarUrl}>{loginUser.username.substring(1)}</Avatar>{loginUser.username}<DownOutlined /></Space>
</a> </a>
</Dropdown> </Dropdown>

@ -67,6 +67,29 @@ const SearchForm = memo(function ({ onSubmit }) {
]} ]}
/> />
</Form.Item> </Form.Item>
<Form.Item label='顾问' name='travel' style={{width: '200px'}}>
<Select
showSearch
placeholder='Select a person'
optionFilterProp='children'
filterOption={(input, option) =>
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())}
options={[
{
value: 'Coco',
label: 'Coco',
},
{
value: 'Ann',
label: 'Ann',
},
{
value: 'Lora',
label: 'Lora',
},
]}
/>
</Form.Item>
<Form.Item label='关键词' name='orderNumber'> <Form.Item label='关键词' name='orderNumber'>
<Input placeholder='关键词' allowClear /> <Input placeholder='关键词' allowClear />
</Form.Item> </Form.Item>

@ -9,14 +9,14 @@ import QuotesHistory from './QuotesHistory'
import useOrderStore from '@/stores/OrderStore' import useOrderStore from '@/stores/OrderStore'
const CustomerProfile = (() => { const CustomerProfile = (() => {
let { state } = useLocation()
const { order_sn: order_sn } = useParams() const { order_sn: order_sn } = useParams()
const { orderDetail, customerDetail, lastQuotation, fetchOrderDetail } = useOrderStore() const { orderDetail, customerDetail, lastQuotation,
const { loginUser: currentUser } = useAuthContext() fetchOrderDetail, setOrderPropValue
} = useOrderStore()
useEffect(() => { useEffect(() => {
fetchOrderDetail(order_sn) fetchOrderDetail(order_sn)
}, []) }, [order_sn])
return ( return (
<div className=' divide-x-0 divide-y divide-dashed divide-gray-300 '> <div className=' divide-x-0 divide-y divide-dashed divide-gray-300 '>
@ -29,9 +29,13 @@ const CustomerProfile = (() => {
width: '100%' width: '100%'
}} }}
variant='borderless' variant='borderless'
defaultValue={orderDetail.tags} onSelect={(value) => {
console.info(value)
setOrderPropValue(order_sn, 'orderlabel', value)
}}
value={orderDetail.tags}
options={[ options={[
{ value: 0, label: '未设置' }, { value: 0, label: '未设置', disabled: true, },
{ value: 240003, label: '重点' }, { value: 240003, label: '重点' },
{ value: 240002, label: '次重点' }, { value: 240002, label: '次重点' },
{ value: 240001, label: '一般' } { value: 240001, label: '一般' }
@ -42,7 +46,11 @@ const CustomerProfile = (() => {
width: '100%' width: '100%'
}} }}
variant='borderless' variant='borderless'
defaultValue={orderDetail.states} onSelect={(value) => {
console.info(value)
setOrderPropValue(order_sn,'orderstatus', value)
}}
value={orderDetail.states}
options={[ options={[
{ value: 1, label: '新订单' }, { value: 1, label: '新订单' },
{ value: 2, label: '报价中' }, { value: 2, label: '报价中' },

@ -267,30 +267,64 @@ function OrderList({ formValues }) {
showTotal: (total) => { return `总数:${total}` } showTotal: (total) => { return `总数:${total}` }
} }
return ( function groupByParam(array, param) {
<Collapse defaultActiveKey={['1', '2', '3']} items={[ return array.reduce((result, item) => {
{ (result[item[param]] = result[item[param]] || []).push(item);
key: '1', return result;
label: 'AH 订单25', }, {});
children: <Table key='AH Order Table' loading={loading} dataSource={orderData} }
columns={orderColumns}
pagination={paginationProps} /> const deptMap = new Map([
}, ['1', 'CH直销组'],
{ ['2','CH大客户组'],
key: '2', ['7','市场推广'],
label: 'CH 订单25', ['8','德语市场'],
children: <Table key='CH Order Table' loading={loading} dataSource={orderData} ['9','日语市场'],
columns={orderColumns} ['10', '商旅市场'],
pagination={paginationProps} /> ['11', '法语市场'],
}, ['12', '西语市场'],
['13', '英文在线组'],
['14', '商务Biztravel'],
['15', 'CH产品'],
['16', 'APP移动项目组'],
['17', 'ChinaTravel组'],
['18', 'CT市场'],
['20', '俄语市场'],
['21', '意语市场'],
['22', '爱游网'],
['23', '三峡站'],
['24', '桂林站'],
['25', '上海站'],
['26', '北京站'],
['27', '西藏站'],
['28', 'AH亚洲项目组'],
['29', 'DMC地接组'],
['30', 'Trippest项目组'],
['31', '花梨鹰'],
['32', 'Daytours板块'],
['33', 'GH项目组'],
['34', 'trippest网站'],
['35', 'newsletter营销'],
])
const groupOrderData = groupByParam(orderData, 'OPI_DEI_SN')
const deptKeys = Object.keys(groupOrderData)
const collapseItems = []
deptKeys.forEach(deptNo => {
const deptOrderList = groupOrderData[deptNo]
collapseItems.push(
{ {
key: '3', key: deptNo,
label: 'GH 订单25', label: deptMap.get(deptNo) + '订单',
children: <Table key='GH Order Table' loading={loading} dataSource={orderData} children: <Table key={'Order Table' + deptNo} loading={loading} dataSource={deptOrderList}
columns={orderColumns} columns={orderColumns}
pagination={paginationProps} /> pagination={paginationProps} />
}]} }
/>) )
})
return (<Collapse bordered={false} activeKey={deptKeys} items={collapseItems} />)
} }
function OrderFollow() { function OrderFollow() {

Loading…
Cancel
Save