Commit a470cecced8d8b9bbad624a8a70285b90277b314

Authored by 王强
1 parent a162734b

优化 学习项目,适用范围、适用角色 选择筛选;

src/pages/admin/Role/entity.ts
1 1 /*
2 2 * @Date: 2021-07-14 10:54:47
3 3 * @LastEditors: wangqiang@feewee.cn
4   - * @LastEditTime: 2021-07-29 14:50:55
  4 + * @LastEditTime: 2023-02-27 17:18:17
5 5 */
6 6 export enum RoleTypeEnum {
7   - '系统角色' = 1,
8   - '流程角色',
9   - '功能角色'
  7 + "系统角色" = 1,
  8 + "流程角色",
  9 + "功能角色",
10 10 }
11 11  
12 12 export const roleTypeTag = {
13   - 1: 'geekblue',
14   - 2: 'purple',
15   - 3: 'orange'
  13 + 1: "geekblue",
  14 + 2: "purple",
  15 + 3: "orange",
16 16 };
17 17  
18 18 export const roleRange = [1, 2, 3, 4];
19 19 export const roleRangeType = {
20   - 1: '展厅',
21   - 2: '服务站',
22   - 3: '二手车店',
23   - 4: '租赁店',
  20 + 1: "展厅",
  21 + 2: "服务站",
  22 + 3: "二手车店",
  23 + 4: "租赁店",
24 24 };
25 25  
  26 +export enum EnumRoleRangeType {
  27 + "展厅" = 1,
  28 + "服务站",
  29 + "二手车店",
  30 + "租赁店",
  31 +}
  32 +
26 33 /** 角色输入类型 */
27 34 export enum RoleRangeTypeEnum {
28   - '允许' = 1,
29   - '不允许'
  35 + "允许" = 1,
  36 + "不允许",
30 37 }
31 38  
32 39 /** 角色用途枚举 */
33 40 export enum UseTypeEnum {
34   - '默认' = 1,
35   - '业务',
36   - '审批',
37   - '管理'
  41 + "默认" = 1,
  42 + "业务",
  43 + "审批",
  44 + "管理",
38 45 }
39 46  
40 47 /** 角色用途颜色枚举 */
41 48 export enum UseTypeColorEnum {
42   - '#4189FD' = 1,
43   - '#20C688',
44   - '#FF921C',
45   - '#F93939'
46   -}
47 49 \ No newline at end of file
  50 + "#4189FD" = 1,
  51 + "#20C688",
  52 + "#FF921C",
  53 + "#F93939",
  54 +}
... ...
src/pages/ehr/ProgramOfStudy/Settings/components/Modal.tsx
1 1 import SelectBrandOrSeries from "@/pages/ehr/ProgramOfStudy/components/SelectBrandOrSeries";
2   -import RangeRoleSelector from "@/pages/ehr/ProgramOfStudy/components/RangeRoleSelector";
  2 +import RangeRoleSelector, {
  3 + RangeRoleSelectorRef,
  4 +} from "@/pages/ehr/ProgramOfStudy/components/RangeRoleSelector";
3 5 import {
4 6 Button,
5 7 DatePicker,
... ... @@ -49,6 +51,7 @@ export default function ProgramOfStudySettingsModal() {
49 51 const [confirmLoading, setConfirmLoading] = useState(false);
50 52 const submitType = useRef<"save" | "draft">("save");
51 53 const tempItem = useRef<EHrProgramOfStudySettings.ListVO>();
  54 + const rangeRoleSelectorRef = useRef<RangeRoleSelectorRef>(null);
52 55  
53 56 useEffect(() => {
54 57 if (visible) {
... ... @@ -354,6 +357,13 @@ export default function ProgramOfStudySettingsModal() {
354 357 type?: number;
355 358 list?: { value?: string; label?: string }[];
356 359 }) => {
  360 + console.log("x", form.getFieldValue("rangeRole"));
  361 + // 如果选择的是 1 按品牌 或 2 按车系 则角色的 authRange 必须包含 1 展厅 3 二手车店
  362 + if (value?.type === 1 || value?.type === 2) {
  363 + rangeRoleSelectorRef.current?.setIncludesPreSale(true);
  364 + } else {
  365 + rangeRoleSelectorRef.current?.setIncludesPreSale(false);
  366 + }
357 367 questionBankInitial.setParams(
358 368 {
359 369 adapterType: value?.type,
... ... @@ -390,7 +400,12 @@ export default function ProgramOfStudySettingsModal() {
390 400 return value;
391 401 }}
392 402 >
393   - <RangeRoleSelector disabled={isView} labelInValue mode="multiple" />
  403 + <RangeRoleSelector
  404 + ref={rangeRoleSelectorRef}
  405 + disabled={isView}
  406 + labelInValue
  407 + mode="multiple"
  408 + />
394 409 </Form.Item>
395 410 <Form.Item
396 411 label="过期时间"
... ...
src/pages/ehr/ProgramOfStudy/components/RangeRoleSelector/index.tsx
... ... @@ -2,18 +2,25 @@
2 2 * @Author: wangqiang@feewee.cn
3 3 * @Date: 2022-11-21 16:07:40
4 4 * @LastEditors: wangqiang@feewee.cn
5   - * @LastEditTime: 2022-11-30 16:17:02
  5 + * @LastEditTime: 2023-02-27 17:46:14
6 6 */
7   -import React, { useMemo } from "react";
  7 +import React, {
  8 + forwardRef,
  9 + Ref,
  10 + useImperativeHandle,
  11 + useMemo,
  12 + useState,
  13 +} from "react";
8 14 import { Radio, Select } from "antd";
9 15 import useInitail from "@/hooks/useInitail";
10 16 import { getAllRoleCodeApi } from "@/common/api";
11 17 import { CommonUseType } from "@/common/utils";
12   -import FeeweeFilterOption from '@/pages/notice/components/FeeweeFilterOption';
  18 +import FeeweeFilterOption from "@/pages/notice/components/FeeweeFilterOption";
  19 +import { EnumRoleRangeType } from "@/pages/admin/Role/entity";
13 20  
14 21 interface ValueVO {
15 22 type?: number; // 1 全部 2 部分
16   - list?: { value?: string; label?: string }[];
  23 + list?: { value?: string; label?: string; authRange?: string; }[];
17 24 }
18 25  
19 26 interface Props {
... ... @@ -26,25 +33,43 @@ interface Props {
26 33 useFilter?: boolean; // 是否用作筛选
27 34 }
28 35  
  36 +export interface RangeRoleSelectorRef {
  37 + setIncludesPreSale: (includesPreSale: boolean) => void;
  38 +}
  39 +
29 40 /**
30 41 * @description: 根据授权查询角色选择器-适用于表单
31 42 */
32   -export default function StandardAuthRoleSelector({
33   - value,
34   - onChange,
35   - style,
36   - disabled = false,
37   - mode,
38   - labelInValue,
39   - useFilter,
40   -}: Props) {
  43 +export default forwardRef(StandardAuthRoleSelector);
  44 +
  45 +function StandardAuthRoleSelector(
  46 + {
  47 + value,
  48 + onChange,
  49 + style,
  50 + disabled = false,
  51 + mode,
  52 + labelInValue,
  53 + useFilter,
  54 + }: Props,
  55 + ref: Ref<RangeRoleSelectorRef>
  56 +) {
  57 + const [includesPreSale, setIncludesPreSale] = useState(false);
41 58 const { data } = useInitail(getAllRoleCodeApi, [], { roleType: 2 });
42 59 const roleList = useMemo(
43   - () => data.filter((role) => [CommonUseType.业务, CommonUseType.管理].includes(role.useType!)
  60 + () => data.filter((role) => ([CommonUseType.业务, CommonUseType.管理].includes(role.useType!) &&
  61 + includesPreSale
  62 + ? role.authRange?.includes("" + EnumRoleRangeType.展厅) ||
  63 + role.authRange?.includes("" + EnumRoleRangeType.二手车店)
  64 + : true)
44 65 ),
45   - [data]
  66 + [data, includesPreSale]
46 67 );
47 68  
  69 + useImperativeHandle(ref, () => ({
  70 + setIncludesPreSale,
  71 + }));
  72 +
48 73 return !useFilter ? (
49 74 <div style={style}>
50 75 <Radio.Group
... ... @@ -70,12 +95,19 @@ export default function StandardAuthRoleSelector({
70 95 value={value?.list}
71 96 showSearch
72 97 optionFilterProp="children"
73   - onChange={(list) => onChange && onChange({ type: value?.type, list })}
  98 + onChange={(selected, list: any) => {
  99 + onChange && onChange({ type: value?.type, list });
  100 + }}
74 101 style={{ flex: 1, width: "100%" }}
75 102 getPopupContainer={(triggerNode) => triggerNode.parentNode}
76 103 >
77 104 {(roleList || []).map((role) => (
78   - <Select.Option key={role.roleCode} value={role.roleCode!}>
  105 + <Select.Option
  106 + key={role.roleCode}
  107 + value={role.roleCode!}
  108 + label={role.roleName}
  109 + authRange={role.authRange}
  110 + >
79 111 {role.roleName}
80 112 </Select.Option>
81 113 ))}
... ...