From bfc994cd12bc84f2be62085bda79eee240575496 Mon Sep 17 00:00:00 2001 From: Jimmy Liow Date: Mon, 17 Jun 2024 15:56:24 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E7=95=8C=E9=9D=A2=E5=8E=9F=E5=9E=8B=EF=BC=9B=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=B5=B7=E5=A4=96=E4=BE=9B=E5=BA=94=E5=95=86=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=8A=A0=E4=B8=8A=E6=9D=83=E8=AF=81=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/价格管理平台.bmpr | Bin 271360 -> 272384 bytes src/components/RequireAuth.jsx | 8 ++-- src/config.js | 14 +++++++ src/main.jsx | 28 ++++++------- src/stores/Auth.js | 8 ++-- src/views/account/Management.jsx | 68 +++++++++++++++++++++++++------ 6 files changed, 92 insertions(+), 34 deletions(-) diff --git a/doc/价格管理平台.bmpr b/doc/价格管理平台.bmpr index 2e3bd02a8100699120fbaaa86a57f39c363f07c1..a33839a8211b67d4c152a12ac5c7b00e9d030095 100644 GIT binary patch delta 49412 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≶3z#atj98ocb2DTaDx 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 CT state.isPermitted) + const { userId } = usingStorage() if (isPermitted(props.subject)) { - // if (props.subject === '/account/management') { + // if (props.subject === '/account/management1') { return children } else if (props.result) { return ( ) } diff --git a/src/config.js b/src/config.js index b6e379a..86ed5a3 100644 --- a/src/config.js +++ b/src/config.js @@ -11,8 +11,22 @@ const __BUILD_VERSION__ = `__BUILD_VERSION__`.replace(/"/g, '') export const BUILD_VERSION = import.meta.env.PROD ? __BUILD_VERSION__ : import.meta.env.MODE; // 权限常量定义 +// 账号、权限管理 +// category: system export const PERM_ACCOUNT_MANAGEMENT = '/account/management' export const PERM_ACCOUNT_NEW = '/account/new' export const PERM_ACCOUNT_DISABLE = '/account/disable' export const PERM_ACCOUNT_RESET_PASSWORD = '/account/reset-password' export const PERM_ROLE_NEW = '/account/role/new' + +// 海外供应商 +// category: oversea +export const PERM_OVERSEA = '/oversea/all' + +// 国内供应商 +// category: domestic +export const PERM_DOMESTIC = '/domestic/all' + +// 机票供应商 +// category: air-ticket +export const PERM_AIR_TICKET = '/air-ticket/all' diff --git a/src/main.jsx b/src/main.jsx index 953db33..643a27e 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -32,7 +32,7 @@ import InvoicePaid from "@/views/invoice/Paid"; import InvoicePaidDetail from "@/views/invoice/PaidDetail"; import Airticket from "@/views/airticket/Index"; -import { PERM_ACCOUNT_MANAGEMENT } from '@/config' +import { PERM_ACCOUNT_MANAGEMENT, PERM_OVERSEA, PERM_AIR_TICKET } from '@/config' import './i18n'; @@ -52,22 +52,22 @@ const router = createBrowserRouter([ errorElement: , children: [ { index: true, element: }, - { path: "reservation/newest", element: }, - { path: "reservation/:reservationId", element: }, { path: "account/change-password", element: }, { path: "account/profile", element: }, { path: "account/management", element: }, - { path: "feedback", element: }, - { path: "feedback/:GRI_SN/:CII_SN/:RefNo", element: }, - { path: "feedback/:GRI_SN/:RefNo", element: }, - { path: "report", element: }, - { path: "notice", element: }, - { path: "notice/:CCP_BLID", element: }, - { path: "invoice",element:}, - { path: "invoice/detail/:GMDSN/:GSN",element:}, - { path: "invoice/paid",element:}, - { path: "invoice/paid/detail/:flid",element:}, - { path: "airticket",element:}, + { path: "reservation/newest", element: }, + { path: "reservation/:reservationId", element: }, + { path: "feedback", element: }, + { path: "feedback/:GRI_SN/:CII_SN/:RefNo", element: }, + { path: "feedback/:GRI_SN/:RefNo", element: }, + { path: "report", element: }, + { path: "notice", element: }, + { path: "notice/:CCP_BLID", element: }, + { path: "invoice",element:}, + { path: "invoice/detail/:GMDSN/:GSN",element:}, + { path: "invoice/paid",element:}, + { path: "invoice/paid/detail/:flid", element: }, + { path: "airticket",element: }, ] }, { diff --git a/src/stores/Auth.js b/src/stores/Auth.js index f7f31f3..59e27cc 100644 --- a/src/stores/Auth.js +++ b/src/stores/Auth.js @@ -55,13 +55,13 @@ const useAuthStore = create((set, get) => ({ // 以下是权限列表从数据库读取后使用的方法 // return this.permissionList.some((value, key, arry) => { // if (value.indexOf(WILDCARD_TOKEN) > -1) { - // return true; + // return true // } // if (value === perm) { - // return true; + // return true // } - // return false; - // }); + // return false + // }) }, diff --git a/src/views/account/Management.jsx b/src/views/account/Management.jsx index d98dbd8..4266fa3 100644 --- a/src/views/account/Management.jsx +++ b/src/views/account/Management.jsx @@ -12,6 +12,18 @@ import { PERM_ROLE_NEW } from '@/config' const { Title } = Typography const permissionData = [ + { + title: '海外供应商', + value: 'oversea-0', + key: 'oversea-0', + children: [ + { + title: '所有海外功能', + value: 'oversea-0-0', + key: 'oversea-0-0', + }, + ], + }, { title: '机票管理', value: '0-0', @@ -29,6 +41,11 @@ const permissionData = [ value: '0-1', key: '0-1', children: [ + { + title: '搜索供应商产品', + value: 'B-1-0', + key: 'B-1-0', + }, { title: '录入产品价格', value: '0-1-0', @@ -52,19 +69,29 @@ const permissionData = [ key: '2-1', children: [ { - title: '重置账号密码', - value: '2-1-0', - key: '2-1-0', + title: '搜索账号', + value: '2-1-01', + key: '2-1-01', + }, + { + title: '新增账号', + value: '2-1-11', + key: '2-1-11', }, { title: '禁用账号', - value: '2-1-1', - key: '2-1-1', + value: '2-1-21', + key: '2-1-21', }, { - title: '分配账号角色', - value: '2-1-2', - key: '2-1-2', + title: '重置账号密码', + value: '2-1-31', + key: '2-1-31', + }, + { + title: '新增角色', + value: '2-1-41', + key: '2-1-41', }, ], }, @@ -83,6 +110,10 @@ function Management() { title: t('account:realname'), dataIndex: 'realname', }, + { + title: t('account:travelAgency'), + dataIndex: 'travelAgency', + }, { title: t('account:email'), dataIndex: 'email', @@ -138,6 +169,7 @@ function Management() { key: 1, username: 'bjyiran', realname: '怡小芳', + travelAgency: '三千界', email: 'xiaofang@yiran.com', role: '国内供应商', lastLogin: '2024-06-12 13:53' @@ -146,6 +178,7 @@ function Management() { key: 2, username: 'int-robin', realname: 'Robin', + travelAgency: 'IAT', email: 'robin@int.com', role: '海外供应商', lastLogin: '2024-06-12 13:53' @@ -154,6 +187,7 @@ function Management() { key: 3, username: 'betty-wu', realname: '吴雪', + travelAgency: '桂林国旅', email: 'betty@hainatravel.com', role: '客服组', lastLogin: '2024-06-12 13:53' @@ -162,6 +196,7 @@ function Management() { key: 4, username: 'lancy', realname: '吴金倩', + travelAgency: '海纳国旅', email: 'lancy@hainatravel.com', role: '产品组', lastLogin: '2024-06-12 13:53' @@ -170,6 +205,7 @@ function Management() { key: 5, username: 'LYJ', realname: '廖一军', + travelAgency: '海纳国际旅行社', email: 'lyj@hainatravel.com', role: 'Web 开发组,海外测试供应商', lastLogin: '2024-06-12 13:53' @@ -178,9 +214,6 @@ function Management() { const formValuesToSub = useFormStore((state) => state.formValuesToSub) - - const isPermitted = useAuthStore((state) => state.isPermitted) - const [editAccountForm, editRoleForm] = Form.useForm() const [fetchReservationList] = useReservationStore((state) => @@ -286,6 +319,15 @@ function Management() { > + + + Date: Tue, 18 Jun 2024 10:15:34 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20Mobx-Zustand=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E5=88=A0=E9=99=A4=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=92=8C=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 -- src/components/SearchForm.jsx | 16 +++++++++++++ src/main.jsx | 5 ---- src/stores/Root.js | 39 -------------------------------- src/stores/StoreContext.js | 7 ------ src/views/account/Management.jsx | 35 ++++++++++++++-------------- 6 files changed, 34 insertions(+), 70 deletions(-) delete mode 100644 src/stores/Root.js delete mode 100644 src/stores/StoreContext.js diff --git a/package.json b/package.json index 7b26815..dd39be7 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,6 @@ "i18next": "^23.11.5", "i18next-browser-languagedetector": "^8.0.0", "i18next-http-backend": "^2.5.2", - "mobx": "^6.9.0", - "mobx-react": "^7.6.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-i18next": "^14.1.2", diff --git a/src/components/SearchForm.jsx b/src/components/SearchForm.jsx index 0e33c82..46021f9 100644 --- a/src/components/SearchForm.jsx +++ b/src/components/SearchForm.jsx @@ -176,6 +176,22 @@ function getFields(props) { , fieldProps?.dates?.col || midCol ), + item( + 'username', + 3, + + + , + fieldProps?.username?.col || 4 + ), + item( + 'realname', + 4, + + + , + fieldProps?.realname?.col || 4 + ), ]; baseChildren = baseChildren diff --git a/src/main.jsx b/src/main.jsx index cc113a9..565edab 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -5,8 +5,6 @@ import { createBrowserRouter, RouterProvider, } from "react-router-dom"; -import RootStore from "@/stores/Root"; -import { StoreContext } from '@/stores/StoreContext'; import "@/assets/global.css"; import App from "@/views/App"; import Standlone from "@/views/Standlone"; @@ -81,15 +79,12 @@ const router = createBrowserRouter([ } ]); -const rootStore = new RootStore(); ReactDOM.createRoot(document.getElementById("root")).render( // -
Loading...
} /> -
//
); diff --git a/src/stores/Root.js b/src/stores/Root.js deleted file mode 100644 index a24bd54..0000000 --- a/src/stores/Root.js +++ /dev/null @@ -1,39 +0,0 @@ -import { makeAutoObservable } from "mobx"; -import { Auth } from "./Auth"; - -class Root { - constructor() { - this.authStore = new Auth(this); - makeAutoObservable(this); - } - - clearSession() { - if (window.sessionStorage) { - const sessionStorage = window.sessionStorage; - sessionStorage.clear(); - } else { - console.error('browser not support sessionStorage!'); - } - } - - getSession(key) { - if (window.sessionStorage) { - const sessionStorage = window.sessionStorage; - return sessionStorage.getItem(key); - } else { - console.error('browser not support sessionStorage!'); - return null; - } - } - - putSession(key, value) { - if (window.sessionStorage) { - const sessionStorage = window.sessionStorage; - return sessionStorage.setItem(key, value); - } else { - console.error('browser not support sessionStorage!'); - } - } -} - -export default Root; diff --git a/src/stores/StoreContext.js b/src/stores/StoreContext.js deleted file mode 100644 index aca4a62..0000000 --- a/src/stores/StoreContext.js +++ /dev/null @@ -1,7 +0,0 @@ -import { createContext, useContext } from "react"; - -export const StoreContext = createContext(); - -export function useStore() { - return useContext(StoreContext); -} \ No newline at end of file diff --git a/src/views/account/Management.jsx b/src/views/account/Management.jsx index 4266fa3..42855ee 100644 --- a/src/views/account/Management.jsx +++ b/src/views/account/Management.jsx @@ -283,7 +283,7 @@ function Management() { open={isAccountModalOpen} onOk={handleAccountOk} onCancel={handleAccountCancel} >
{ - setDataLoading(true) - fetchReservationList(formVal) - .catch(ex => { - notification.error({ - message: 'Notification', - description: ex.message, - placement: 'top', - duration: 4, - }) - }) - .finally(() => { - setDataLoading(false) - }) + onSubmit={(err, formValues, filedsVal) => { + console.info(formValues) + // setDataLoading(true) + // fetchReservationList(formVal) + // .catch(ex => { + // notification.error({ + // message: 'Notification', + // description: ex.message, + // placement: 'top', + // duration: 4, + // }) + // }) + // .finally(() => { + // setDataLoading(false) + // }) }} /> From 74a68d705c968d3f3ff53a7c283d8da7c9d2b78c Mon Sep 17 00:00:00 2001 From: Jimmy Liow Date: Tue, 18 Jun 2024 10:31:18 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20ThemeContext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.jsx | 10 ++++++---- src/stores/ThemeContext.js | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 src/stores/ThemeContext.js diff --git a/src/main.jsx b/src/main.jsx index 565edab..d485281 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -82,9 +82,11 @@ const router = createBrowserRouter([ ReactDOM.createRoot(document.getElementById("root")).render( // -
Loading...
} - /> + +
Loading...
} + /> +
//
); diff --git a/src/stores/ThemeContext.js b/src/stores/ThemeContext.js new file mode 100644 index 0000000..f4f7aa7 --- /dev/null +++ b/src/stores/ThemeContext.js @@ -0,0 +1,7 @@ +import { createContext, useContext } from 'react' + +export const ThemeContext = createContext({}) + +export function useThemeContext() { + return useContext(ThemeContext) +} \ No newline at end of file From f22c9eb4971dff1d26fde22f8042c48016090974 Mon Sep 17 00:00:00 2001 From: Jimmy Liow Date: Tue, 18 Jun 2024 10:45:04 +0800 Subject: [PATCH 4/6] =?UTF-8?q?bug:=20=E4=BF=AE=E5=A4=8D=20ThemeContext=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.jsx | 1 + src/stores/Auth.js | 17 +---------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/main.jsx b/src/main.jsx index d485281..2782a85 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -30,6 +30,7 @@ import InvoicePaid from "@/views/invoice/Paid"; import InvoicePaidDetail from "@/views/invoice/PaidDetail"; import Airticket from "@/views/airticket/Index"; import AirticketPlan from "@/views/airticket/Plan"; +import { ThemeContext } from '@/stores/ThemeContext' import { PERM_ACCOUNT_MANAGEMENT, PERM_OVERSEA, PERM_AIR_TICKET } from '@/config' diff --git a/src/stores/Auth.js b/src/stores/Auth.js index 59e27cc..fe0900e 100644 --- a/src/stores/Auth.js +++ b/src/stores/Auth.js @@ -154,19 +154,4 @@ const useAuthStore = create((set, get) => ({ }, })) -export default useAuthStore - -export class Auth { - // TODO: 等待所有获取用户信息修改完后删除 - login = { - token: '', - userId: 0, // LMI_SN - username: '0', - travelAgencyId: 0, // VEI_SN - travelAgencyName: '', - telephone: '', - emailAddress: '', - cityId: 0, - timeout: false - } -} +export default useAuthStore \ No newline at end of file From 2cb059cc066ff28e06ec1dc2050e99e86fff0f29 Mon Sep 17 00:00:00 2001 From: Jimmy Liow Date: Tue, 18 Jun 2024 16:57:26 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20postForm=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=94=99=E8=AF=AF=E6=A0=A1=E9=AA=8C=EF=BC=8C?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=B8=90=E5=8F=B7=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E3=80=81=E7=BC=96=E8=BE=91=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/Account.js | 108 ++++++++++++ src/utils/request.js | 1 + src/views/account/Management.jsx | 290 +++++++++++++++---------------- 3 files changed, 247 insertions(+), 152 deletions(-) create mode 100644 src/stores/Account.js diff --git a/src/stores/Account.js b/src/stores/Account.js new file mode 100644 index 0000000..6ab625f --- /dev/null +++ b/src/stores/Account.js @@ -0,0 +1,108 @@ +import { create } from 'zustand' +import { fetchJSON, postForm } from '@/utils/request' +import { HT_HOST } from "@/config" +import { usingStorage } from '@/hooks/usingStorage' + +export const postAccountStatus = async (formData) => { + + const { errcode, result } = await postForm( + `${HT_HOST}/service-CooperateSOA/set_account_status`, formData) + return errcode !== 0 ? {} : result +} + +export const fetchAccountList = async (params) => { + + const { errcode, result } = await fetchJSON( + `${HT_HOST}/service-CooperateSOA/search_account`, params) + return errcode !== 0 ? {} : result +} + +export const postAccountForm = async (formData) => { + + const { errcode, result } = await postForm( + `${HT_HOST}/service-CooperateSOA/new_or_update_account`, formData) + return errcode !== 0 ? {} : result +} + +export const fetchRoleList = async () => { + + const { errcode, result } = await fetchJSON( + `${HT_HOST}/service-CooperateSOA/get_role_list`) + return errcode !== 0 ? {} : result +} + +const useAccountStore = create((set, get) => ({ + + accountList: [], + + selectedAccount: null, + + selectAccount: (account) => { + set(() => ({ + selectedAccount: account + })) + }, + + disableAccount: async (accountId) => { + + const formData = new FormData() + formData.append('wu_id', accountId) + formData.append('account_status', 'enable') + + const result = await postAccountStatus(formData) + + console.info(result) + }, + + saveOrUpdateAccount: async (formValues) => { + const { selectedAccount } = get() + const { userId } = usingStorage() + const formData = new FormData() + formData.append('wu_id', selectedAccount.userId) + formData.append('lmi_sn', selectedAccount.lmi_sn) + formData.append('lmi2_sn', selectedAccount.lmi2_sn) + formData.append('user_name', formValues.username) + formData.append('real_name', formValues.realname) + formData.append('email', formValues.email) + + formData.append('travel_agency_id', formValues.travelAgencyId) + formData.append('roles', formValues.roleId) + + formData.append('opi_sn', userId) + + return postAccountForm(formData) + }, + + searchAccountByCriteria: async (formValues) => { + + const searchParams = { + username: formValues.username, + realname: formValues.realname, + lgc: 2 + } + + const resultArray = await fetchAccountList(searchParams) + + const mapAccoutList = resultArray.map((r) => { + return { + userId: r.wu_id, + lmi_sn: r.lmi_sn, + lmi2_sn: r.lmi2_sn, + username: r.user_name, + realname: r.real_name, + email: r.email, + lastLogin: r.wu_lastlogindate, + travelAgency: r.travel_agency_name, + travelAgencyId: r.travel_agency_id, + roleId: r.roles, + role: r.roles_name, + } + }) + + set(() => ({ + accountList: mapAccoutList + })) + }, +})) + +export default useAccountStore \ No newline at end of file diff --git a/src/utils/request.js b/src/utils/request.js index 68d80a6..ac97803 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -106,6 +106,7 @@ export function postForm(url, data) { } }).then(checkStatus) .then(response => response.json()) + .then(checkBizCode) .catch(error => { throw error }) diff --git a/src/views/account/Management.jsx b/src/views/account/Management.jsx index 42855ee..e05eaa1 100644 --- a/src/views/account/Management.jsx +++ b/src/views/account/Management.jsx @@ -4,7 +4,8 @@ import { ExclamationCircleFilled } from '@ant-design/icons' import { useTranslation } from 'react-i18next' import useFormStore from '@/stores/Form' import useAuthStore from '@/stores/Auth' -import useReservationStore from '@/stores/Reservation' +import useAccountStore from '@/stores/Account' +import { fetchRoleList } from '@/stores/Account' import SearchForm from '@/components/SearchForm' import RequireAuth from '@/components/RequireAuth' import { PERM_ROLE_NEW } from '@/config' @@ -134,9 +135,9 @@ function Management() { }, ] - function accountRender(text) { + function accountRender(text, account) { return ( - + ) } @@ -146,11 +147,11 @@ function Management() { ) } - function actionRender() { + function actionRender(text, account) { return ( - - + + ) } @@ -160,68 +161,36 @@ function Management() { setPermissionValue(newValue) } + const onAccountSeleted = async (account) => { + selectAccount(account) + console.info(account) + const roleList = await fetchRoleList() + setRoleAllList(roleList.map(r => { + return { + value: r.role_id, + label: r.role_name, + disabled: r.role_id === 1 + } + })) + setAccountModalOpen(true) + } + const [permissionValue, setPermissionValue] = useState(['0-0-0']) const [isAccountModalOpen, setAccountModalOpen] = useState(false) const [isRoleModalOpen, setRoleModalOpen] = useState(false) const [dataLoading, setDataLoading] = useState(false) - const [accountList, setaccountList] = useState([ - { - key: 1, - username: 'bjyiran', - realname: '怡小芳', - travelAgency: '三千界', - email: 'xiaofang@yiran.com', - role: '国内供应商', - lastLogin: '2024-06-12 13:53' - }, - { - key: 2, - username: 'int-robin', - realname: 'Robin', - travelAgency: 'IAT', - email: 'robin@int.com', - role: '海外供应商', - lastLogin: '2024-06-12 13:53' - }, - { - key: 3, - username: 'betty-wu', - realname: '吴雪', - travelAgency: '桂林国旅', - email: 'betty@hainatravel.com', - role: '客服组', - lastLogin: '2024-06-12 13:53' - }, - { - key: 4, - username: 'lancy', - realname: '吴金倩', - travelAgency: '海纳国旅', - email: 'lancy@hainatravel.com', - role: '产品组', - lastLogin: '2024-06-12 13:53' - }, - { - key: 5, - username: 'LYJ', - realname: '廖一军', - travelAgency: '海纳国际旅行社', - email: 'lyj@hainatravel.com', - role: 'Web 开发组,海外测试供应商', - lastLogin: '2024-06-12 13:53' - } - ]) - - const formValuesToSub = useFormStore((state) => state.formValuesToSub) + const [roleAllList, setRoleAllList] = useState([]) const [editAccountForm, editRoleForm] = Form.useForm() - const [fetchReservationList] = - useReservationStore((state) => - [state.fetchAllGuideList, state.fetchReservationList, state.reservationList, state.reservationPage, state.cityList, state.selectReservation, state.getCityListByReservationId]) + const [searchAccountByCriteria, accountList, disableAccount, selectedAccount, saveOrUpdateAccount, selectAccount] = + useAccountStore((state) => + [state.searchAccountByCriteria, state.accountList, state.disableAccount, state.selectedAccount, state.saveOrUpdateAccount, state.selectAccount]) const { notification, modal } = App.useApp() const handleAccountOk = () => { + console.info('handleAccountOk') + console.info(editAccountForm) } const handleAccountCancel = () => { @@ -229,49 +198,54 @@ function Management() { } const handleRoleOk = () => { + console.info('handleRoleOk') } const handleRoleCancel = () => { setRoleModalOpen(false) } - const onFinish = (values) => { + const onAccountFinish = (values) => { console.log(values) + saveOrUpdateAccount(values) + .catch(ex => { + console.info(ex.message) + notification.error({ + message: 'Notification', + description: ex.message, + placement: 'top', + duration: 4, + }) + }) } - const onFinishFailed = (error) => { + const onAccountFinishFailed = (error) => { console.log('Failed:', error) // form.resetFields() } - // 默认重新搜索第一页,所有状态的计划 - const onSearchClick = (current = 1, status = null) => { - } - - const showDisableConfirm = () => { + const showDisableConfirm = (account) => { modal.confirm({ title: 'Do you want to disable this account?', icon: , - content: 'Username: Ivy, Realname: 怡小芳', + content: `Username: ${account.username}, Realname: ${account.realname}`, onOk() { - console.log('OK') + disableAccount(account.userId) }, onCancel() { - console.log('Cancel') }, }) } - const showResetPasswordConfirm = () => { + const showResetPasswordConfirm = (account) => { modal.confirm({ title: 'Do you want to reset password?', icon: , - content: 'Username: Ivy, Realname: 怡小芳', + content: `Username: ${account.username}, Realname: ${account.realname}`, onOk() { - console.log('OK') + console.log('ResetPassword') }, onCancel() { - console.log('Cancel') }, }) } @@ -280,77 +254,92 @@ function Management() { <> - ( + - {t('account:management.newAccount')} - - - - - - - - - - - - - - - - + {dom} + + )} + > + + + + + + + + + + + + + + + {/* Role Edit */} {t('account:management.newRole')} @@ -407,10 +396,6 @@ function Management() { {t('account:management.tile')} { console.info(formValues) - // setDataLoading(true) - // fetchReservationList(formVal) - // .catch(ex => { - // notification.error({ - // message: 'Notification', - // description: ex.message, - // placement: 'top', - // duration: 4, - // }) - // }) - // .finally(() => { - // setDataLoading(false) - // }) + setDataLoading(true) + searchAccountByCriteria(formValues) + .catch(ex => { + notification.error({ + message: 'Notification', + description: ex.message, + placement: 'top', + duration: 4, + }) + }) + .finally(() => { + setDataLoading(false) + }) }} /> @@ -449,6 +434,7 @@ function Management() { Date: Wed, 19 Jun 2024 15:38:11 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/价格管理平台.bmpr | Bin 272384 -> 272384 bytes src/main.jsx | 4 +- src/stores/Account.js | 16 ++ src/views/App.jsx | 3 +- src/views/account/Management.jsx | 111 +++--------- src/views/account/RoleList.jsx | 286 +++++++++++++++++++++++++++++++ 6 files changed, 327 insertions(+), 93 deletions(-) create mode 100644 src/views/account/RoleList.jsx diff --git a/doc/价格管理平台.bmpr b/doc/价格管理平台.bmpr index a33839a8211b67d4c152a12ac5c7b00e9d030095..e1065f737e4b4c4b23473125fbab526ac344148e 100644 GIT binary patch delta 30669 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 q3;ic&KKgKx|KyC^z6<>)XNLYg`t73r$=NOD?M{ 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, { path: "account/profile", element: }, { path: "account/management", element: }, + { path: "account/role-list", element: }, { path: "reservation/newest", element: }, { path: "reservation/:reservationId", element: }, { path: "feedback", element: }, diff --git a/src/stores/Account.js b/src/stores/Account.js index 6ab625f..a2391be 100644 --- a/src/stores/Account.js +++ b/src/stores/Account.js @@ -24,6 +24,13 @@ export const postAccountForm = async (formData) => { return errcode !== 0 ? {} : result } +export const postRoleForm = async (formData) => { + + const { errcode, result } = await postForm( + `${HT_HOST}/service-CooperateSOA/new_or_update_role`, formData) + return errcode !== 0 ? {} : result +} + export const fetchRoleList = async () => { const { errcode, result } = await fetchJSON( @@ -54,6 +61,15 @@ const useAccountStore = create((set, get) => ({ console.info(result) }, + saveOrUpdateRole: async (formValues) => { + const formData = new FormData() + formData.append('role_id', formValues.role_id) + formData.append('role_name', formValues.role_name) + formData.append('res_ids', '2,3') + + return postRoleForm(formData) + }, + saveOrUpdateAccount: async (formValues) => { const { selectedAccount } = get() const { userId } = usingStorage() diff --git a/src/views/App.jsx b/src/views/App.jsx index dd2dec6..779993c 100644 --- a/src/views/App.jsx +++ b/src/views/App.jsx @@ -149,8 +149,9 @@ function App() { { label: {t('ChangePassword')}, key: '0' }, { label: {t('Profile')}, key: '1' }, { label: {t('account:management.tile')}, key: '3' }, + { label: {t('account:management.roleList')}, key: '4' }, { type: 'divider' }, - { label: {t('Logout')}, key: '4' }, + { label: {t('Logout')}, key: '99' }, ], { type: 'divider' }, { label: <>v{BUILD_VERSION}, key: 'BUILD_VERSION' }, diff --git a/src/views/account/Management.jsx b/src/views/account/Management.jsx index e05eaa1..f0e7b9f 100644 --- a/src/views/account/Management.jsx +++ b/src/views/account/Management.jsx @@ -161,48 +161,32 @@ function Management() { setPermissionValue(newValue) } - const onAccountSeleted = async (account) => { - selectAccount(account) - console.info(account) - const roleList = await fetchRoleList() - setRoleAllList(roleList.map(r => { - return { - value: r.role_id, - label: r.role_name, - disabled: r.role_id === 1 - } - })) - setAccountModalOpen(true) - } - const [permissionValue, setPermissionValue] = useState(['0-0-0']) const [isAccountModalOpen, setAccountModalOpen] = useState(false) const [isRoleModalOpen, setRoleModalOpen] = useState(false) const [dataLoading, setDataLoading] = useState(false) const [roleAllList, setRoleAllList] = useState([]) - const [editAccountForm, editRoleForm] = Form.useForm() + const [accountForm] = Form.useForm() const [searchAccountByCriteria, accountList, disableAccount, selectedAccount, saveOrUpdateAccount, selectAccount] = useAccountStore((state) => [state.searchAccountByCriteria, state.accountList, state.disableAccount, state.selectedAccount, state.saveOrUpdateAccount, state.selectAccount]) const { notification, modal } = App.useApp() - const handleAccountOk = () => { - console.info('handleAccountOk') - console.info(editAccountForm) - } - - const handleAccountCancel = () => { - setAccountModalOpen(false) - } - - const handleRoleOk = () => { - console.info('handleRoleOk') - } - - const handleRoleCancel = () => { - setRoleModalOpen(false) + const onAccountSeleted = async (account) => { + accountForm.setFieldsValue(account) + selectAccount(account) + console.info(account) + const roleList = await fetchRoleList() + setRoleAllList(roleList.map(r => { + return { + value: r.role_id, + label: r.role_name, + disabled: r.role_id === 1 + } + })) + setAccountModalOpen(true) } const onAccountFinish = (values) => { @@ -219,7 +203,7 @@ function Management() { }) } - const onAccountFinishFailed = (error) => { + const onAccountFailed = (error) => { console.log('Failed:', error) // form.resetFields() } @@ -259,20 +243,20 @@ function Management() { htmlType: 'submit', }} title={t('account:management.newAccount')} - open={isAccountModalOpen} onOk={handleAccountOk} onCancel={handleAccountCancel} - destroyOnClose + open={isAccountModalOpen} onOk={() => setAccountModalOpen(false)} onCancel={() => setAccountModalOpen(false)} + destroyOnClose={true} + clearOnDestroy={true} modalRender={(dom) => (
{dom} @@ -341,58 +325,6 @@ function Management() { - {/* Role Edit */} - - - {t('account:management.newRole')} - - - - - - - - {t('account:management.tile')} - - - diff --git a/src/views/account/RoleList.jsx b/src/views/account/RoleList.jsx new file mode 100644 index 0000000..923d43e --- /dev/null +++ b/src/views/account/RoleList.jsx @@ -0,0 +1,286 @@ +import { useState, useEffect } from 'react' +import { Row, Col, Space, Button, Table, Select, TreeSelect, Typography, Modal, App, Form, Input } from 'antd' +import { ExclamationCircleFilled } from '@ant-design/icons' +import { useTranslation } from 'react-i18next' +import useFormStore from '@/stores/Form' +import useAuthStore from '@/stores/Auth' +import useAccountStore from '@/stores/Account' +import { fetchRoleList } from '@/stores/Account' +import SearchForm from '@/components/SearchForm' +import RequireAuth from '@/components/RequireAuth' +import { PERM_ROLE_NEW } from '@/config' + +const { Title } = Typography + +const permissionData = [ + { + title: '海外供应商', + value: 'oversea-0', + key: 'oversea-0', + children: [ + { + title: '所有海外功能', + value: 'oversea-0-0', + key: 'oversea-0-0', + }, + ], + }, + { + title: '机票管理', + value: '0-0', + key: '0-0', + children: [ + { + title: '录入机票价格', + value: '0-0-0', + key: '0-0-0', + }, + ], + }, + { + title: '产品管理', + value: '0-1', + key: '0-1', + children: [ + { + title: '搜索供应商产品', + value: 'B-1-0', + key: 'B-1-0', + }, + { + title: '录入产品价格', + value: '0-1-0', + key: '0-1-0', + }, + { + title: '新增产品描述', + value: '0-1-1', + key: '0-1-1', + }, + { + title: '复制供应商产品信息', + value: '0-1-2', + key: '0-1-2', + }, + ], + }, + { + title: '账号管理', + value: '2-1', + key: '2-1', + children: [ + { + title: '搜索账号', + value: '2-1-01', + key: '2-1-01', + }, + { + title: '新增账号', + value: '2-1-11', + key: '2-1-11', + }, + { + title: '禁用账号', + value: '2-1-21', + key: '2-1-21', + }, + { + title: '重置账号密码', + value: '2-1-31', + key: '2-1-31', + }, + { + title: '新增角色', + value: '2-1-41', + key: '2-1-41', + }, + ], + }, +] + +function RoleList() { + const { t } = useTranslation() + + const roleListColumns = [ + { + title: t('account:rolename'), + dataIndex: 'role_name', + render: roleRender + }, + { + title: t('account:createdOn'), + dataIndex: 'created_on', + }, + { + title: t('account:action'), + dataIndex: 'account:action', + render: actionRender + }, + ] + + function roleRender(text, role) { + return ( + + ) + } + + function actionRender(text, account) { + return ( + + + + + ) + } + + const onPermissionChange = (newValue) => { + console.log('onChange ', newValue) + setPermissionValue(newValue) + } + + useEffect (() => { + fetchRoleList() + .then(r => { + setRoleAllList(r) + }) + }, []) + + const [permissionValue, setPermissionValue] = useState(['0-0-0']) + const [isRoleModalOpen, setRoleModalOpen] = useState(false) + const [dataLoading, setDataLoading] = useState(false) + const [roleAllList, setRoleAllList] = useState([]) + + const [roleForm] = Form.useForm() + const [saveOrUpdateRole] = + useAccountStore((state) => + [state.saveOrUpdateRole]) + + const { notification, modal } = App.useApp() + + const onRoleSeleted = async (role) => { + roleForm.setFieldsValue(role) + // selectAccount(account) + // console.info(account) + setRoleModalOpen(true) + } + + const onRoleFinish = (values) => { + console.log(values) + saveOrUpdateRole(values) + .catch(ex => { + console.info(ex.message) + notification.error({ + message: 'Notification', + description: ex.message, + placement: 'top', + duration: 4, + }) + }) + } + + const onRoleFailed = (error) => { + console.log('Failed:', error) + // form.resetFields() + } + + return ( + <> + setRoleModalOpen(false)} onCancel={() => setRoleModalOpen(false)} + destroyOnClose={true} + clearOnDestroy={true} + modalRender={(dom) => ( +
+ {dom} + + )} + > + + + + + + + + + +
+ + {t('account:management.roleList')} + +
+ + + + + + + + + +
{ return t('Total') + `:${total}` } + }} + onChange={(pagination) => { onSearchClick(pagination.current) }} + columns={roleListColumns} dataSource={roleAllList} + /> + + + + + ) +} + +export default RoleList