From 1871dcfd0ba67f6838abc0a5e254a9e139f1da95 Mon Sep 17 00:00:00 2001 From: ylj20011123 Date: Wed, 28 Jan 2026 19:00:06 +0800 Subject: [PATCH] update --- src/pages/Interface/InterfaceParams/Index.tsx | 2 +- src/pages/Setting/Users/components/edit.tsx | 108 +++++++++++-- src/pages/Setting/Users/components/style.less | 32 ++++ .../basicManage/ServerpartShop/index.tsx | 151 +++++++++++++----- 4 files changed, 236 insertions(+), 57 deletions(-) create mode 100644 src/pages/Setting/Users/components/style.less diff --git a/src/pages/Interface/InterfaceParams/Index.tsx b/src/pages/Interface/InterfaceParams/Index.tsx index b0aa35d..8e477da 100644 --- a/src/pages/Interface/InterfaceParams/Index.tsx +++ b/src/pages/Interface/InterfaceParams/Index.tsx @@ -13,7 +13,7 @@ import type { CurrentUser } from "umi"; import type { ConnectState } from '@/models/connect'; import type { ActionType, ProColumns } from '@ant-design/pro-table'; import type { ProDescriptionsItemProps } from '@ant-design/pro-descriptions'; -import type { FormInstance } from 'antd'; +import type { FormInstance } from 'antd'; import type { ServerpartshopModel } from './data'; import { getFieldEnum, getServerpartTree } from "@/services/options"; // 枚举和树相关的引用,没有使用可以删除 import { getList, delserverpartshop, updateserverpartshop } from './service'; diff --git a/src/pages/Setting/Users/components/edit.tsx b/src/pages/Setting/Users/components/edit.tsx index 7cc190a..d91454a 100644 --- a/src/pages/Setting/Users/components/edit.tsx +++ b/src/pages/Setting/Users/components/edit.tsx @@ -6,7 +6,7 @@ import { Card, Col, Form, Row, Tree, message, Switch, Button, TreeSelect, Radio, import { useEffect, useRef, useState } from "react"; import { history } from "umi"; -import type { ProFormInstance } from "@ant-design/pro-form"; +import type { FormInstance, ProFormInstance } from "@ant-design/pro-form"; import type { UserModel } from "../data"; import type { CurrentUser } from '@/models/user'; @@ -16,6 +16,9 @@ import { getRoleList, getSystemMenuTree, handleAnalysisPermission, handleSupplie import BusinessManDrawer from "@/pages/basicManage/businessMan/components/businessManDrawer"; import session from "@/utils/session"; import moment from 'moment' +import close from '@/assets/ai/close.png' +import searchIcon from '@/assets/ai/searchIcon.png' +import './style.less' // 提交账号数据 const handleAddUpdate = async (item: UserModel, type: boolean) => { @@ -57,6 +60,7 @@ const handelResetPassWord = async (item: any) => { */ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, pageType, BUSINESSMAN_ID, onShow }: { onShow?: boolean, BUSINESSMAN_ID?: any, pageType?: string, selectTab?: any, tableTab?: any, openType?: string, detail?: UserModel, reloadTable: any, currentUser: CurrentUser | undefined }) => { const detailForm = useRef() // 表单对象 + const searchTreeRef = useRef(); const [checkedRole, setCheckedRole] = useState(); // 当前选中的行 角色 id const [checkedServerpart, setCheckedServerpart] = useState(); // 当前选中的行 服务区id const [checkedShop, setCheckedShop] = useState(); // 当前选中的行 服务区门店id @@ -80,6 +84,12 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, const [checkManageerCenterList, setCheckManageerCenterList] = useState() // 当前这个用户实际的管理中心权限 const [currentUserInfoManager, setCurrentUserInfoManager] = useState() + // 显示服务区树搜索框 + const [showServiceSearchBox, setShowServiceSearchBox] = useState(false) + // 显示的管理中心数据 + const [wareHouseList, setWareHouseList] = useState() + // 全部的管理中心数据 + const [allWareHouseList, setAllWareHouseList] = useState() // const { data: roleTree } = useRequest(async () => { // if (currentUser?.UserPattern===9000){ @@ -132,10 +142,10 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, return data.map(n => n.children ? n : { ...n, children: [] }) }) // 查询可配置的管理中心 - const { data: wareHouseList } = useRequest(async () => { + const { data: wareHouseListData } = useRequest(async () => { let req: any = { SearchParameter: { - // PROVINCE_CODE: detail?.USER_PROVINCE || "", + PROVINCE_CODES: detail?.USER_PROVINCE || "", WAREHOUSE_STATE: 1 }, SortStr: "SELLER_ID,WAREHOUSE_TYPE,WAREHOUSE_ID", @@ -143,7 +153,8 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, PageSize: 999999 } const data = await handleGetWareHouseList(req) - console.log('wareHouseListwareHouseList', data); + setWareHouseList(data) + setAllWareHouseList(data) return data }) @@ -156,8 +167,6 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, // 查询可选商家 const { run: handleGetMerchantTree, data: merchantTree } = useRequest(async () => { const data = await getMerchantTreeNosessoin() - console.log('3213123123213123213123', data); - return data }, { manual: true }) @@ -320,9 +329,27 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, WAREHOUSE_ID: checkManageerCenterList.toString() } const data = await handleSynchroRTSELLERPASSPORT(req) - console.log('data321wfDSFSDFSFS', data); } + // 管理中心权限 + const handleFilterManagerList = (values: any) => { + console.log('values', values); + console.log('allWareHouseListallWareHouseList', allWareHouseList); + let list: any = JSON.parse(JSON.stringify(allWareHouseList)) + if (list && list.length > 0) { + if (values) { + let res: any = [] + list.forEach((item: any) => { + if (item.WAREHOUSE_NAME.includes(values)) { + res.push(item) + } + }) + setWareHouseList(res) + } else { + setWareHouseList(allWareHouseList) + } + } + } // 判断账号的正则 // 1表示全数字 0 表示 默认 @@ -441,6 +468,8 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, console.log('list', list); setCheckManageerCenterList(list) + } else { + setCheckManageerCenterList([]) } // 请求获取该账户绑定的角色拥有的模块权限 @@ -1258,7 +1287,7 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, { initialDetail.USER_PATTERN === 1000 || initialDetail.USER_PATTERN === 4000 ? - + { @@ -1267,10 +1296,51 @@ const Edit = ({ tableTab, openType, detail, reloadTable, currentUser, selectTab, style={{ borderColor: "#97D6FE", height: 424 }} size="small" title="管理中心权限" headStyle={{ backgroundColor: '#E7F7FF' }} - extra={ { - setCheckManageerCenterList([]) + extra={}> { - setCheckManageerCenterList(checkedKeys) + // 若showServiceSearchBox 是true 那么就是搜索模式 就是加入新选的内容 + // 若 为false 那么就是正常的 就是根据 选择的 + if (showServiceSearchBox) { + let list: any = JSON.parse(JSON.stringify(checkManageerCenterList)) + if (checkedKeys && checkedKeys.length > 0) { + checkedKeys.forEach((item: any) => { + if (list.indexOf(item) === -1) { + list.push(item) + } + }) + } + setCheckManageerCenterList(list) + } else { + setCheckManageerCenterList(checkedKeys) + } return checkedKeys }} > diff --git a/src/pages/Setting/Users/components/style.less b/src/pages/Setting/Users/components/style.less new file mode 100644 index 0000000..b00cc5f --- /dev/null +++ b/src/pages/Setting/Users/components/style.less @@ -0,0 +1,32 @@ +.managerCardBox { + .managerCardTopBox { + position: relative; + + .searchIcon { + width: 20px; + height: 20px; + cursor: pointer; + margin-right: 15px; + } + + .fixedBox { + position: absolute; + width: 300px; + background: #fff; + right: -10px; + box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05); + border-radius: 8px; + box-sizing: border-box; + padding: 12px; + z-index: 2; + display: flex; + align-items: center; + + .noBottom { + .ant-form-item { + margin-bottom: 0 !important; + } + } + } + } +} \ No newline at end of file diff --git a/src/pages/basicManage/ServerpartShop/index.tsx b/src/pages/basicManage/ServerpartShop/index.tsx index cfcab1f..361a618 100644 --- a/src/pages/basicManage/ServerpartShop/index.tsx +++ b/src/pages/basicManage/ServerpartShop/index.tsx @@ -13,7 +13,7 @@ import ProTable from "@ant-design/pro-table"; import useRequest from "@ahooksjs/use-request"; import { getFieldEnum, getFieldEnumTree, getServerpartOption, getServerpartTree } from "@/services/options"; import { MenuFoldOutlined, PlusOutlined } from "@ant-design/icons"; -import { ModalForm, ProFormDatePicker, ProFormSelect, ProFormText } from "@ant-design/pro-form"; +import ProForm, { ModalForm, ProFormDatePicker, ProFormSelect, ProFormText } from "@ant-design/pro-form"; import { PageContainer } from "@ant-design/pro-layout"; import { Button, Tree, Col, Row, Drawer, message, Popconfirm, Space, Menu, Avatar, Form, TreeSelect, Modal } from "antd"; import type { ProDescriptionsItemProps } from "@ant-design/pro-descriptions"; @@ -36,12 +36,14 @@ import LogTable from "./component/logTable"; import Draggable from "react-draggable"; import React from "react"; import BusinessInforForm from "./component/businessInforForm"; +import LeftSelectTree from "@/pages/reports/settlementAccount/component/leftSelectTree"; // 服务区门店组件主体 const ServerpartShopTable: React.FC<{ currentUser: CurrentUser }> = ({ currentUser }) => { const actionRef = useRef() const formRef = useRef() + const updateShopStateModalFormRef = useRef() const BusinessInforFormRef = useRef() const ShopOperateRef = useRef() const formDetailRef = useRef() @@ -49,14 +51,21 @@ const ServerpartShopTable: React.FC<{ currentUser: CurrentUser }> = ({ currentUs const [showDetail, setShowDetail] = useState() const [currenMenu, setCurrenMenu] = useState(); // 当前选中的左侧菜单 const [modalVisible, handleModalVisible] = useState() - const [serverpartId, setServerpartId] = useState() - // const [serverpartId, setServerpartId] = useState<[]>([]) + const [serverpartId, setServerpartId] = useState() const [collapsible, setCollapsible] = useState(false) + // 同步门店状态的悬浮框 + const [updateShopStateModal, setUpdateShopStateModal] = useState(false) // 添加经营信息的悬浮框 const [showAddBusinessModal, setShowAddBusinessModal] = useState(false) const [bounds, setBounds] = useState<{ left: number, right: number, top: number, bottom: number }>() // 移动的位置 const [disabled, setDraggleDisabled] = useState() // 是否拖动 const draggleRef = React.createRef() + // 选择的服务区 + const [selectServerPartList, setSelectServerPartList] = useState() + // 门店更新状态的loading + const [updateShopStateLoading, setUpdateShopStateLoading] = useState() + + const businessStateList = session.get('businessStateList') const onDraggaleStart = (event, uiData) => { const { clientWidth, clientHeight } = window.document.documentElement; const targetRect = draggleRef.current?.getBoundingClientRect(); @@ -83,6 +92,7 @@ const ServerpartShopTable: React.FC<{ currentUser: CurrentUser }> = ({ currentUs }) const ServerpartIdsList = session.get('ServerpartIdsList') + const columns: ProColumns[] = [ { dataIndex: 'SHOPNAME', @@ -268,57 +278,52 @@ const ServerpartShopTable: React.FC<{ currentUser: CurrentUser }> = ({ currentUs }) } + // 同步门店经营状态 + const handleUpdateShopState = async (value: any) => { + setUpdateShopStateLoading(true) + setUpdateShopStateLoading(false) + + } + return ( - - - { setCollapsible(!collapsible) }} />} - colSpan={!collapsible ? "240px" : "60px"} - title={!collapsible ? "请选择服务区" : ""} - headerBordered - collapsed={collapsible} - > - { - const serverparts = info.checkedNodes.filter(n => n?.type === 1) - setServerpartId(serverparts.map(n => n?.value)?.toString() || '') - actionRef?.current?.reload() - }} - // switcherIcon={} - > - - - - +
+
+ +
+ { if (serverpartId && serverpartId.length > 0) { - const data = await getList({ ...params, SERVERPART_IDS: serverpartId }) + const data = await getList({ + ...params, + SERVERPART_IDS: serverpartId, + current: 1, + pageSize: 999999 + }) return data } return { data: [], success: true } }} + scroll={{ x: "100%", y: "calc(100vh - 450px)" }} actionRef={actionRef} search={{ span: 6 }} columns={columns} bordered toolbar={{ actions: [ + , , + >门店 ] }} options={false} - pagination={{ defaultPageSize: 10, showSizeChanger: false }} + rowSelection={{ + type: 'checkbox', + selectedRowKeys: selectServerPartList, + preserveSelectedRowKeys: true, + onChange: (selectedRowKeys: any, selectedRows: any) => { + console.log('selectedRowKeys', selectedRowKeys); + setSelectServerPartList(selectedRowKeys) + } + }} /> - - +
+
+ + {/* 同步门店状态的悬浮框 */} + { + setUpdateShopStateModal(false) + }} + confirmLoading={updateShopStateLoading} + onOk={() => { + updateShopStateModalFormRef.current?.validateFields().then((res: any) => { + handleUpdateShopState(res) + }) + }} + modalRender={(modal) => { + return onDraggaleStart(event, uiData)} + > +
{modal}
+
+ }} + > + + + + + + + +
= ({ currentUs > - +
); } export default connect(({ user }: ConnectState) => ({