wjx hai 5 días
pai
achega
69570a5451

+ 20 - 1
src/pages/launchSystemV3/monitorEWList/astraSupport‌.tsx

@@ -5,6 +5,7 @@ import { Button, Card, DatePicker, Input, Select, Table } from 'antd';
 import React, { useEffect, useState } from 'react';
 import moment from 'moment';
 import { CorpUserDayListTableConfig } from './tableConfig';
+import GroupUserEdit from '../tencenTasset/corpWechat/csgroup/components/group/groupUserEdit';
 
 /**
  * 客服号加粉数据
@@ -16,6 +17,7 @@ const AstraSupport: React.FC = () => {
     const [corpWechatList, setCorpWechatList] = useState<{ label: string, value: string }[]>([]);
     const [queryParamsNew, setQueryParamsNew] = useState<GetCorpUserDayListProps>({ pageNum: 1, pageSize: 20 });
     const [queryParams, setQueryParams] = useState<GetCorpUserDayListProps>({ pageNum: 1, pageSize: 20 });
+    const [upDateAddFans, setUpDateAddFans] = useState<{ visible?: boolean, idList: number[] }>({ visible: false, idList: [] })
 
     const getCorpWechatAll = useAjax((params) => getCorpWechatAllApi(params))
     const getCorpUserDayList = useAjax((params) => getCorpUserDayListApi(params))
@@ -33,6 +35,10 @@ const AstraSupport: React.FC = () => {
         getCorpUserDayList.run(queryParamsNew)
     }, [queryParamsNew])
 
+    const updateLimitAddFansOfDay = (data: any) => {
+        setUpDateAddFans({ visible: true, idList: [data.signId] })
+    }
+
     return <Card
         title={<div style={{ display: 'flex', gap: 8 }}>
             <DatePicker
@@ -68,7 +74,7 @@ const AstraSupport: React.FC = () => {
     >
         <Table
             dataSource={getCorpUserDayList?.data?.records}
-            columns={CorpUserDayListTableConfig()}
+            columns={CorpUserDayListTableConfig(updateLimitAddFansOfDay)}
             size='small'
             bordered
             rowKey={'id'}
@@ -103,6 +109,19 @@ const AstraSupport: React.FC = () => {
                 setQueryParams({ ...newQueryForm })
             }}
         />
+
+        {/* 修改单日限制加粉 */}
+        {upDateAddFans?.visible && <GroupUserEdit
+            {...upDateAddFans}
+            isUpdatePoolType={false}
+            onChange={() => {
+                setUpDateAddFans({ visible: false, idList: [] })
+                getCorpUserDayList.refresh()
+            }}
+            onClose={() => {
+                setUpDateAddFans({ visible: false, idList: [] })
+            }}
+        />}
     </Card>
 };
 

+ 8 - 4
src/pages/launchSystemV3/monitorEWList/tableConfig.tsx

@@ -6,9 +6,10 @@ import AstraGroupHourEle from "./astraGroupHourEle";
 import AstraGroupIndexEle from "./astraGroupIndexEle";
 import DoubleDelDetails from "./doubleDelDetails";
 import { POOLTYPEEle } from "../tencenTasset/corpWechat/csgroup/const";
+import { FormOutlined } from "@ant-design/icons";
 
 /** 客服号加粉 */
-export const CorpUserDayListTableConfig = (): ColumnsType<never> => {
+export const CorpUserDayListTableConfig = (updateLimitAddFansOfDay: (data: any) => void): ColumnsType<never> => {
 
     return [
         {
@@ -126,8 +127,11 @@ export const CorpUserDayListTableConfig = (): ColumnsType<never> => {
             width: 100,
             align: 'right',
             sorter: true,
-            render(value) {
-                return <span style={{ fontSize: 12 }}>{(value || value === 0) ? value : '--'}</span>
+            render(value, record: any) {
+                return <Space>
+                    <span style={{ fontSize: 12 }}>{(value || value === 0) ? value : '--'}</span>
+                    {record?.signId && <a onClick={() => updateLimitAddFansOfDay(record)}><FormOutlined /></a>}
+                </Space>
             },
         },
         {
@@ -138,7 +142,7 @@ export const CorpUserDayListTableConfig = (): ColumnsType<never> => {
             align: 'right',
             sorter: true,
             render(value) {
-                return <span style={{ fontSize: 12 }}>{(value || value === 0) ? value : '--'}</span>
+                return <span style={((value || value === 0) && value < 5) ? { fontSize: 12, color: 'red' } : { fontSize: 12 }}>{(value || value === 0) ? value : '--'}</span>
             },
         },
         {

+ 5 - 4
src/pages/launchSystemV3/tencenTasset/corpWechat/csgroup/components/group/groupUserEdit.tsx

@@ -10,9 +10,10 @@ interface GroupUserEditProps {
     visible?: boolean;
     onClose?: () => void;
     onChange?: () => void;
+    isUpdatePoolType?: boolean
 }
 
-const GroupUserEdit: React.FC<GroupUserEditProps> = ({ idList, visible, onClose, onChange }) => {
+const GroupUserEdit: React.FC<GroupUserEditProps> = ({ idList, visible, onClose, onChange, isUpdatePoolType = true }) => {
 
     /**************************************/
     const [form] = Form.useForm();
@@ -31,7 +32,7 @@ const GroupUserEdit: React.FC<GroupUserEditProps> = ({ idList, visible, onClose,
     }
 
     return <Modal
-        title={<strong>批量客服修改</strong>}
+        title={<strong>{idList?.length > 1 ? '批量' : ''}客服修改</strong>}
         open={visible}
         onCancel={onClose}
         onOk={handleOk}
@@ -45,7 +46,7 @@ const GroupUserEdit: React.FC<GroupUserEditProps> = ({ idList, visible, onClose,
             colon={false}
             layout='vertical'
         >
-            <Form.Item label={<strong>归属客服池</strong>} name="poolType" rules={[{ required: idList?.length > 0 ? false : true, message: '请选择归属客服池!' }]}>
+            {isUpdatePoolType && <Form.Item label={<strong>归属客服池</strong>} name="poolType" rules={[{ required: idList?.length > 0 ? false : true, message: '请选择归属客服池!' }]}>
                 <Select
                     showSearch
                     placeholder="归属客服池"
@@ -55,7 +56,7 @@ const GroupUserEdit: React.FC<GroupUserEditProps> = ({ idList, visible, onClose,
                     allowClear
                     options={Object.keys(POOLTYPE).map((key) => ({ label: POOLTYPE[key as keyof typeof POOLTYPE], value: key }))}
                 />
-            </Form.Item>
+            </Form.Item>}
             <Form.Item label={<strong>客服号单日限制加粉数量</strong>} name="limitAddFansOfDay">
                 <InputNumber style={{ width: '100%' }} placeholder='请输入客服号单日限制加粉数量' />
             </Form.Item>

+ 84 - 11
src/pages/launchSystemV3/tencenTasset/corpWechat/csgroup/components/group/groupUserInfo.tsx

@@ -1,7 +1,7 @@
 import { useAjax } from '@/Hook/useAjax';
-import { delLocalCorpCsgroupUserApi, GetCustomerServiceGroupUserListProps, getLocalCorpCsgroupUserAllListApi, getLocalCorpCsgroupUserListApi } from '@/services/adqV3/global';
+import { delLocalCorpCsgroupUserApi, GetCustomerServiceGroupUserListProps, getLocalCorpCsgroupUserAllListApi, getLocalCorpCsgroupUserListApi, getUserlogListApi } from '@/services/adqV3/global';
 import { DeleteOutlined, EditOutlined, PlusOutlined, SearchOutlined, TeamOutlined } from '@ant-design/icons';
-import { Button, Card, Drawer, Input, message, Popconfirm, Select, Space, Table } from 'antd';
+import { Button, Card, Drawer, Input, message, Modal, Popconfirm, Select, Space, Table } from 'antd';
 import React, { useCallback, useEffect, useState } from 'react';
 import '../../../../../tencentAdPutIn/index.less';
 import SettingsEnterprise from './settingsEnterprise';
@@ -28,8 +28,11 @@ const GroupUserInfo: React.FC<GroupUserInfoProps> = ({ groupData: { id: localCsg
     const [queryParamsNew, setQueryParamsNew] = useState<GetCustomerServiceGroupUserListProps>({ pageNum: 1, pageSize: 20, localCsgroupId });
     const [selectedRows, setSelectedRows] = useState<any[]>([])
     const [userEditData, setUserEditData] = useState<{ visible: boolean, idList: number[] }>();
+    const [logData, setLogData] = useState<{ visible: boolean, data: any }>();
+    const [logParams, setLogParams] = useState<{ pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 20 })
 
     const getLocalCorpCsgroupUserList = useAjax((params) => getLocalCorpCsgroupUserListApi(params))
+    const getUserlogList = useAjax((params) => getUserlogListApi(params))
     const getLocalCorpCsgroupUserAllList = useAjax((params) => getLocalCorpCsgroupUserAllListApi(params))
     const delLocalCorpCsgroupUser = useAjax((params) => delLocalCorpCsgroupUserApi(params))
     /********************************************/
@@ -75,6 +78,16 @@ const GroupUserInfo: React.FC<GroupUserInfoProps> = ({ groupData: { id: localCsg
         setUserEditData({ visible: true, idList: selectedRows.map(item => item.id) });
     }
 
+    const handleLog = (data: any) => {
+        setLogData({ visible: true, data })
+    }
+
+    useEffect(() => {
+        if (logData?.visible) {
+            getUserlogList.run({ ...logParams, id: logData.data.id })
+        }
+    }, [logParams, logData])
+
     return <>
         <Button icon={<TeamOutlined />} style={{ border: 'none', fontSize: 12 }} size='small' onClick={() => handleUser()}>成员</Button>
         {visible && <Drawer
@@ -192,18 +205,21 @@ const GroupUserInfo: React.FC<GroupUserInfoProps> = ({ groupData: { id: localCsg
                                     title: '操作',
                                     dataIndex: 'cz',
                                     key: 'cz',
-                                    width: 50,
+                                    width: 85,
                                     align: 'center',
                                     fixed: 'right',
                                     render(_, records) {
-                                        return <Popconfirm
-                                            title="确定删除?"
-                                            onConfirm={() => {
-                                                delUser([records.id])
-                                            }}
-                                        >
-                                            <a style={{ color: 'red' }}>删除</a>
-                                        </Popconfirm>
+                                        return <Space>
+                                            <a onClick={() => { handleLog(records) }}>日志</a>
+                                            <Popconfirm
+                                                title="确定删除?"
+                                                onConfirm={() => {
+                                                    delUser([records.id])
+                                                }}
+                                            >
+                                                <a style={{ color: 'red' }}>删除</a>
+                                            </Popconfirm>
+                                        </Space>
                                     }
                                 },
                             ]}
@@ -284,6 +300,63 @@ const GroupUserInfo: React.FC<GroupUserInfoProps> = ({ groupData: { id: localCsg
                 onClose={() => setUserEditData(undefined)}
             />}
         </Drawer>}
+
+        {logData?.visible && <Modal
+            title={<strong>{logData?.data?.localCorpUserName} 日志</strong>}
+            open={logData?.visible}
+            onCancel={() => setLogData(undefined)}
+            footer={null}
+            className='modalResetCss'
+        >
+            <Table
+                columns={[
+                    {
+                        title: '客服名称',
+                        dataIndex: 'localCorpUserName',
+                        key: 'localCorpUserName',
+                        width: 220,
+                        ellipsis: true,
+                        render(value, records) {
+                            return <span style={{ fontSize: 12 }}>{value}({records.localCorpUserId})</span>
+                        }
+                    },
+                    {
+                        title: '归属客服池',
+                        dataIndex: 'poolType',
+                        key: 'poolType',
+                        width: 100,
+                        align: 'center',
+                        render(value) {
+                            return <span style={{ fontSize: 12 }}>{POOLTYPEEle[value as keyof typeof POOLTYPEEle]}</span>
+                        }
+                    },
+                    {
+                        title: '创建时间',
+                        dataIndex: 'createTime',
+                        key: 'createTime',
+                        width: 140,
+                        render(value) {
+                            return <span style={{ fontSize: 12 }}>{value}</span>
+                        }
+                    }
+                ]}
+                dataSource={getUserlogList.data?.records}
+                size="small"
+                loading={getUserlogList?.loading}
+                scroll={{ y: 500 }}
+                rowKey={'id'}
+                pagination={{
+                    total: getUserlogList.data?.total,
+                    defaultPageSize: 20,
+                    current: getUserlogList.data?.current,
+                    pageSize: getUserlogList.data?.size
+                }}
+                onChange={(pagination) => {
+                    const { current, pageSize } = pagination
+                    setLogParams({ ...logParams, pageNum: current as number, pageSize: pageSize as number || 20 })
+                }}
+            />
+        </Modal>}
     </>
 };
 

+ 13 - 1
src/services/adqV3/global.ts

@@ -1081,6 +1081,18 @@ export async function getLocalCorpCsgroupUserListApi(data: GetCustomerServiceGro
     })
 }
 
+/**
+ * 用户日志
+ * @param data 
+ * @returns 
+ */
+export async function getUserlogListApi(data: { pageNum: number, pageSize: number, id: number }) {
+    return request(api + `/adq/localCorpCsgroup/userLog/listOfPage`, {
+        method: 'POST',
+        data
+    })
+}
+
 /**
  * 所有成员
  * @param data 
@@ -1129,7 +1141,7 @@ export async function delLocalCorpCsgroupUserApi(data: { idList: number[] }) {
  * @param data 
  * @returns 
  */
-export async function modifyLocalCorpCsgroupUserApi(data: { idList: number[], limitAddFansOfDay: number, poolType: 'BLOCKLIST' | 'OFFLINE' | 'ONLINE' | 'WAITING' | 'WARRING' }) {
+export async function modifyLocalCorpCsgroupUserApi(data: { idList: number[], limitAddFansOfDay: number, poolType?: 'BLOCKLIST' | 'OFFLINE' | 'ONLINE' | 'WAITING' | 'WARRING' }) {
     return request(api + `/adq/localCorpCsgroup/user/modifyBatch`, {
         method: 'PATCH',
         data