/* * @Author: cclu * @Date: 2021-12-13 11:01:23 * @LastEditTime: 2024-08-30 18:54:12 * @LastEditors: cclu 1106109051@qq.com * @Description: 账号管理 * @FilePath: \cloud-platform\src\pages\Setting\Users\index.tsx */ import { connect } from "umi"; import React, { useState, useRef } from "react"; import { Button, Drawer, Tree } from 'antd'; import ProTable from "@ant-design/pro-table"; import { PageContainer } from "@ant-design/pro-layout"; import { PlusOutlined } from "@ant-design/icons"; import type { UserModel } from "./data"; import type { ProColumns, ActionType } from '@ant-design/pro-table'; import type { ProDescriptionsItemProps } from "@ant-design/pro-descriptions"; import type { ConnectState } from "@/models/connect"; import type { CurrentUser } from '@/models/user'; import Edit from './components/edit'; import ProCard from "@ant-design/pro-card"; import useRequest from "@ahooksjs/use-request"; import ProDescriptions from "@ant-design/pro-descriptions"; import { getUserSystemRole, getUserList, getUserTypeTree } from './service' import { getOnwer } from "@/services/options"; const UserList: React.FC<{ currentUser: CurrentUser | undefined }> = (props) => { const { currentUser } = props const actionRef = useRef(); const [showDetail, setShowDetail] = useState(false); const [userTypeId, setUserTypeId] = useState>(); const [tableTab, setTableTab] = useState(`${currentUser?.UserPattern}`); const [openType, setOpenType] = useState()// 打开是编辑还是新增 const [collapsible, setCollapsible] = useState(false) // 是否显示账号分类查询树 const [currentRow, setCurrentRow] = useState(); // 当前选中行 const [createModalVisible, handleModalVisible] = useState(false); // 分布更新窗口的弹窗 const [userTypeObj, setUserTypeObj] = useState() const selectTab = useRef(`${currentUser?.UserPattern}`) const { loading: treeLoading, data: treeViews } = useRequest(async () => { const req: any = { ProvinceCode: currentUser?.UserPattern === 2000 ? currentUser?.BusinessManID : currentUser?.ProvinceCode, } const data = await getUserTypeTree(req) let res: any = [] if (data && data.length > 0) { data.forEach((item: any) => { res.push(item) if (item.children && item.children.length > 0) { item.children.forEach((subItem: any) => { res.push(subItem) if (subItem.children && subItem.children.length > 0) { subItem.children.forEach((thirdItem: any) => { res.push(thirdItem) }) } }) } }) } console.log('res', res); let obj: any = {} if (res && res.length > 0) { res.forEach((item: any) => { obj[item.value] = item.label }) } console.log('obj', obj); setUserTypeObj(obj) }) // 请求账号部门tree const { run: getUserTypeMenu, loading: typeLoading, data: userTypeTree } = useRequest((type) => getUserTypeTree({ UserTypePattern: type || tableTab, ShowStatus: true })) // const [userTypeMenu, setUserTypeMenu] = useState<{1000: {}, 2000: {}}>(()=>getUserTypeTree(tableTab)); // 分布更新窗口的弹窗 // 根据角色id查询权限树 const { run: getRoleMenu, data: roleMenuTree } = useRequest(async (SystemRoleId?: number) => { const data = await getUserSystemRole(SystemRoleId ? `${SystemRoleId}` : '') return data }, { manual: true }) const leftTab = [{ key: `1000`, name: '业主' }, { key: `4000`, name: '供应商' }, { key: `2000`, name: '商户' }, { key: `3000`, name: '游客' }, { key: `9000`, name: '内部' }] const ueserCloudTab = currentUser?.UserPattern === 9000 ? leftTab : currentUser?.UserPattern === 1000 ? [{ key: `1000`, name: '业主' }, { key: `4000`, name: '供应商' }] : leftTab.filter(n => n.key === `${currentUser?.UserPattern}`) // const ueserCloudTab = leftTab // 表格列数据显示配置 const columns: ProColumns[] = [ { title: '查询账号', dataIndex: 'searchKey', hideInDescriptions: true, hideInTable: true, fieldProps: { placeholder: '请输入账号/用户名称/业主单位/手机号/经营单位' } }, { title: '有效状态', dataIndex: 'USER_STATUS', hideInTable: true, valueType: 'select', valueEnum: { "": "全部", "1": "有效", "0": "无效" }, initialValue: "1" }, { title: '经营单位', dataIndex: 'BUSINESSMAN_NAME', sorter: (a, b) => { return (a.BUSINESSMAN_NAME || '').localeCompare((b.BUSINESSMAN_NAME || '')) }, hideInSearch: true, hideInTable: tableTab !== '2000', hideInDescriptions: tableTab !== '2000', }, { title: '账号部门', dataIndex: 'USERTYPE_ID', hideInTable: tableTab === '3000' || tableTab === '9000', hideInSearch: true, hideInDescriptions: true, valueType: "treeSelect", fieldProps: { options: userTypeTree, }, }, { title: '账号', dataIndex: 'USER_PASSPORT', sorter: (a, b) => { return (a.USER_PASSPORT || '').localeCompare((b.USER_PASSPORT || '')) }, hideInSearch: true, }, { title: '用户名称', dataIndex: 'USER_NAME', sorter: (a, b) => { return (a.USER_NAME || '').localeCompare((b.USER_NAME || '')) }, hideInDescriptions: true, hideInSearch: true, render: (_, record) => { return { getRoleMenu(record.USER_ID) setCurrentRow(record) setShowDetail(true) }}>{_} } }, { title: '手机号', dataIndex: 'USER_MOBILEPHONE', hideInSearch: true }, // { // title: '账号类型', // dataIndex: 'USER_PATTERN', // hideInSearch: true, // valueType: 'select', // valueEnum: { // 1000: { text: '业主' }, // 2000: { text: '商户' }, // }, // }, { title: '状态', dataIndex: 'USER_STATUS', hideInSearch: true, filters: true, onFilter: true, valueType: 'select', initialValue: 1, valueEnum: { all: { text: '全部', status: 'Default' }, 0: { text: '无效', status: 'Default' }, 1: { text: '有效', status: 'Processing' }, }, }, { title: '业主单位', dataIndex: 'PROVINCE_UNIT', hideInSearch: true, sorter: (a, b) => { return (a.PROVINCE_UNIT || '').localeCompare((b.PROVINCE_UNIT || '')) }, hideInTable: tableTab === '2000', // valueType: "treeSelect", valueType: "select", request: async () => { let data = await getOnwer({ ProvinceCode: "530000", DataType: 1 }) if (data && data.length > 0) { data.forEach((item: any) => { item.value = item.value.toString() }) } return data } }, { title: '备注', dataIndex: 'USER_DESC', hideInSearch: true, hideInTable: tableTab === '2000', render: (_, record) => { return record?.USER_DESC } }, { title: '操作', valueType: 'option', hideInDescriptions: true, // width: 180, render: (text, record) => [ { handleModalVisible(true); setOpenType('edit') setCurrentRow({ ...record }); }} > 编辑 , ] } ] return ( {/* 左侧树筛选 */} { setCollapsible(!collapsible) }} />} colSpan={!collapsible ? "360px" : "60px"} // title={!collapsible ? "请选择账号部门" : ""} // headerBordered // collapsed={collapsible} tabs={{ activeKey: tableTab, onChange: (key) => { console.log('key', key) setTableTab(key as string); selectTab.current = key getUserTypeMenu(key) }, }} > {ueserCloudTab.map(n => { return { setUserTypeId({ [n.key]: checkedKeys }) if (actionRef.current) { // actionRef.current?.reset() actionRef.current?.reload() } }} > })} {/* 右侧表格主体 */} headerTitle="账号管理" rowKey="USER_ID" actionRef={actionRef} request={async (params, sorter) => { console.log('params', params); const sortstr = Object.keys(sorter).map(n => { const value = sorter[n] return value ? `${n} ${value.replace('end', '')}` : '' }) const data = await getUserList({ ...params, USER_STATUS: params?.USER_STATUS, USER_PATTERN: tableTab, PROVINCE_UNIT: '911', UserTypeIds: userTypeId && userTypeId[tableTab] ? userTypeId[tableTab].toString() : '', SortStr: sortstr ? sortstr.toString() : 'USER_INDEX', keyWord: params.searchKey ? { key: "USER_PASSPORT,USER_NAME,USER_MOBILEPHONE,PROVINCE_UNIT,BUSINESSMAN_NAME", value: params.searchKey } : null, // 关键词查询 }) return data }} onReset={() => { actionRef.current?.reload() }} params={{ USER_PATTERN: tableTab }} columns={columns} toolbar={{ actions: currentUser?.UserPattern === 1000 || currentUser?.UserPattern === 9000 ? [ , ] : [] }} pagination={{ defaultPageSize: 10 }} /> {/* 用户详情 */} { setCurrentRow(undefined); setShowDetail(false); handleModalVisible(false) setOpenType('') }} closable={false} bodyStyle={createModalVisible ? { backgroundColor: "#f9f9f9", padding: 0 } : {}} > {/* 编辑或新增账号 */} {createModalVisible && { if (success) { if (actionRef.current) { actionRef.current.reload(); } } }} />} {/* 查看账号详情 */} {showDetail && column={1} title={currentRow?.USER_NAME} request={async () => ({ data: currentRow || {}, })} params={{ id: currentRow?.USER_NAME, }} columns={columns as ProDescriptionsItemProps[]} > {roleMenuTree?.length ? : '-'} } ) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser, }))(UserList);