@hkyhy/marsun-components-core 0.1.138 → 0.1.139

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"IamUsersPage.js","sources":["../../../../src/components/Iam/pages/IamUsersPage.tsx"],"sourcesContent":["import { ModulePageShell } from '@/components/Layout';\nimport { Modal } from '@/components/Modal';\nimport {\n PermissionBindPanel,\n type PermissionBindCatalog,\n type PermissionBindItem,\n} from '@/components/PermissionBindPanel';\nimport Filter, {\n getFilterValue,\n InputFilterItem as ReactInputFilterItem,\n type FilterValue,\n} from '@/components/ReactFilter';\nimport { Table } from '@/components/Table';\nimport { SEMANTIC_COLORS, Tags } from '@/components/Tag';\nimport { CommonDescriptions, type DescriptionItem } from '@/components/Descriptions';\nimport { FormDataSync, FormInfo, FormModal, Select } from '@/components/Form';\nimport { Button, Space, Typography, message } from 'antd';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react';\nimport type { IamClient } from '../client';\nimport type { IamRole, IamSharedGroup, IamUser } from '../types';\nimport { catalogToItems } from '../utils/catalogToItems';\nimport { buildDraftEffectivePermissions } from '../utils/draftEffectivePermissions';\nimport { MULTI_TAG_SHOW_LENGTH, multiTagSelectProps } from '../utils/multiTagSelect';\nimport { roleDisplayName, roleSelectOption } from '../utils/roleDisplay';\n\nconst ReactFilterBar = Filter as ComponentType<{\n value: FilterValue;\n onChange: (next: FilterValue) => void;\n list: unknown;\n}>;\n\nconst EP_PANEL_HEIGHT = 420;\n\nfunction buildViewItems(user: IamUser): DescriptionItem[] {\n const rolesValue: ReactNode = user.roles?.length ? (\n <Tags\n tags={user.roles.map((r) => roleDisplayName(r))}\n showLength={MULTI_TAG_SHOW_LENGTH}\n color={SEMANTIC_COLORS.INFO}\n empty=\"—\"\n />\n ) : (\n '—'\n );\n\n return [\n { label: '工号', value: user.employeeId || '—' },\n { label: '姓名', value: user.displayName || '—' },\n { label: '邮箱', value: user.email || '—' },\n {\n label: '组织',\n value:\n user.orgs\n ?.map((o) => o.name)\n .filter(Boolean)\n .join('、') || '—',\n span: 2,\n },\n { label: '角色', value: rolesValue, span: 2 },\n ];\n}\n\nexport type IamUsersPageProps = {\n client: IamClient;\n catalog: PermissionBindCatalog;\n systemEntryCodes: readonly string[];\n tableName?: string;\n title?: string;\n};\n\nexport default function IamUsersPage({\n client,\n catalog,\n systemEntryCodes,\n tableName = 'iam_users',\n title = '用户管理',\n}: IamUsersPageProps) {\n const [loading, setLoading] = useState(false);\n const [rows, setRows] = useState<IamUser[]>([]);\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(1);\n const [filterValue, setFilterValue] = useState<FilterValue>([]);\n const keyword = useMemo(() => {\n const flat = getFilterValue(filterValue) as Record<string, unknown>;\n return String(flat.keyword ?? '');\n }, [filterValue]);\n const [viewUser, setViewUser] = useState<IamUser | null>(null);\n const [viewLoading, setViewLoading] = useState(false);\n const [permUser, setPermUser] = useState<IamUser | null>(null);\n const [roles, setRoles] = useState<IamRole[]>([]);\n const [groups, setGroups] = useState<IamSharedGroup[]>([]);\n const [roleCodes, setRoleCodes] = useState<string[]>([]);\n const [groupIds, setGroupIds] = useState<string[]>([]);\n const [permFormEpoch, setPermFormEpoch] = useState(0);\n\n const catalogNameByCode = useMemo(() => {\n const m: Record<string, string> = {};\n for (const item of catalogToItems(catalog)) {\n m[item.code] = item.name;\n }\n return m;\n }, [catalog]);\n\n const draftEp = useMemo(\n () =>\n buildDraftEffectivePermissions({\n roleCodes,\n groupIds,\n roles,\n groups,\n nameByCode: catalogNameByCode,\n }),\n [roleCodes, groupIds, roles, groups, catalogNameByCode],\n );\n\n const panelPermissions = useMemo((): PermissionBindItem[] => {\n const epItems = draftEp\n .filter((p) => p.layer !== 'RESOURCE')\n .map((p) => ({\n id: p.code,\n code: p.code,\n name: p.name || p.code,\n layer: p.layer,\n }));\n const byCode = new Map(epItems.map((p) => [p.code, p]));\n const fromCatalog = catalogToItems(catalog).map((item) => {\n const hit = byCode.get(item.code);\n return hit ? { ...item, name: hit.name || item.name, layer: hit.layer || item.layer } : item;\n });\n const used = new Set(fromCatalog.map((p) => p.code));\n return [...fromCatalog, ...epItems.filter((p) => !used.has(p.code))];\n }, [draftEp, catalog]);\n\n const checkedEpIds = useMemo(\n () => draftEp.filter((p) => p.layer !== 'RESOURCE').map((p) => p.code),\n [draftEp],\n );\n\n const roleOptions = useMemo(() => roles.map((r) => roleSelectOption(r)), [roles]);\n const groupOptions = useMemo(\n () =>\n groups.map((g) => ({\n value: g.id,\n label: g.name || g.code,\n title: g.code ? `编码:${g.code}` : g.name,\n })),\n [groups],\n );\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const data = await client.listUsers({ page, pageSize: 20, keyword: keyword || undefined });\n setRows(data.pageData);\n setTotal(data.total);\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载失败');\n } finally {\n setLoading(false);\n }\n }, [client, page, keyword]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n const openView = async (u: IamUser) => {\n setViewUser(u);\n setViewLoading(true);\n try {\n const detail = await client.getUser(u.id);\n setViewUser({\n ...u,\n ...detail,\n orgs: detail.orgs?.length ? detail.orgs : u.orgs,\n roles: detail.roles?.length ? detail.roles : u.roles,\n });\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载用户详情失败');\n } finally {\n setViewLoading(false);\n }\n };\n\n const openPerm = async (u: IamUser) => {\n setPermUser(u);\n try {\n const [r, g, mine, detail] = await Promise.all([\n client.listRoles(),\n client.listSharedGroups(),\n client.listUserSharedGroups(u.id),\n client.getUser(u.id),\n ]);\n setRoles(r);\n setGroups(g);\n setGroupIds(mine.map((x) => x.id));\n const appRoleCodes =\n detail.roles?.filter((x) => r.some((rr) => rr.code === x.code)).map((x) => x.code) || [];\n setRoleCodes(appRoleCodes);\n setPermFormEpoch((n) => n + 1);\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载权限失败');\n }\n };\n\n const onPermFormSync = useCallback((data: Record<string, unknown>) => {\n if (Array.isArray(data.groupIds)) setGroupIds(data.groupIds.map(String));\n if (Array.isArray(data.roleCodes)) setRoleCodes(data.roleCodes.map(String));\n }, []);\n\n const viewItems = useMemo(() => (viewUser ? buildViewItems(viewUser) : []), [viewUser]);\n\n return (\n <ModulePageShell title={title} fillHeight={false}>\n <div style={{ marginBottom: 12 }}>\n <ReactFilterBar\n value={filterValue}\n onChange={(next) => {\n setFilterValue(next);\n setPage(1);\n }}\n list={[\n [\n {\n type: ReactInputFilterItem,\n props: {\n name: 'keyword',\n label: '工号/姓名',\n placeholder: '工号/姓名',\n },\n },\n ],\n ]}\n />\n </div>\n <Table\n rowKey=\"id\"\n loading={loading}\n dataSource={rows}\n tableName={tableName}\n pagination={{\n current: page,\n total,\n pageSize: 20,\n onChange: setPage,\n }}\n columns={[\n { title: '工号', dataIndex: 'employeeId' },\n { title: '姓名', dataIndex: 'displayName' },\n { title: '邮箱', dataIndex: 'email', render: (v: string | null) => v || '—' },\n {\n title: '组织',\n key: 'org',\n render: (_: unknown, r: IamUser) =>\n r.orgs?.find((o) => o.isPrimary)?.name || r.orgs?.[0]?.name || '—',\n },\n {\n title: '操作',\n key: 'ops',\n render: (_: unknown, r: IamUser) => (\n <Space>\n <Button type=\"link\" size=\"small\" onClick={() => void openView(r)}>\n 查看\n </Button>\n <Button type=\"link\" size=\"small\" onClick={() => void openPerm(r)}>\n 权限管理\n </Button>\n </Space>\n ),\n },\n ]}\n />\n\n <Modal\n open={Boolean(viewUser)}\n title=\"查看用户\"\n onCancel={() => setViewUser(null)}\n footer={null}\n size=\"M\"\n scrollable\n >\n {viewUser ? (\n <CommonDescriptions\n content={viewItems}\n column={1}\n bordered\n size=\"small\"\n title={viewLoading ? '加载中…' : undefined}\n />\n ) : null}\n </Modal>\n\n <FormModal\n key={`iam-perm-${permUser?.id || 'x'}-${permFormEpoch}`}\n open={Boolean(permUser)}\n title={`权限管理 · ${permUser?.displayName || ''}`}\n width={920}\n onCancel={() => setPermUser(null)}\n okText=\"保存\"\n cancelText=\"取消\"\n formProps={{\n data: {\n dataScope: 'COMPANY',\n groupIds,\n roleCodes,\n },\n onSubmit: async (data: { groupIds?: string[]; roleCodes?: string[] }) => {\n if (!permUser) return;\n try {\n await client.setUserAppRoleCodes(permUser.id, data.roleCodes ?? roleCodes);\n await client.setUserSharedGroups(permUser.id, data.groupIds ?? groupIds);\n message.success('已保存');\n setPermUser(null);\n void load();\n } catch (e) {\n message.error(e instanceof Error ? e.message : '保存失败');\n throw e;\n }\n },\n }}\n >\n <Space direction=\"vertical\" style={{ width: '100%' }} size=\"middle\">\n <FormInfo\n column={2}\n gap={16}\n list={[\n <Select\n key=\"dataScope\"\n name=\"dataScope\"\n label=\"数据权限\"\n disabled\n options={[{ value: 'COMPANY', label: '全公司' }]}\n />,\n <Select\n key=\"groupIds\"\n name=\"groupIds\"\n label=\"共享组\"\n mode=\"multiple\"\n allowClear\n options={groupOptions}\n placeholder=\"请选择共享组(可选)\"\n {...multiTagSelectProps}\n />,\n <Select\n key=\"roleCodes\"\n name=\"roleCodes\"\n label=\"用户角色\"\n mode=\"multiple\"\n allowClear\n options={roleOptions}\n placeholder=\"请选择本应用角色(可选)\"\n {...multiTagSelectProps}\n />,\n ]}\n />\n <FormDataSync onChange={onPermFormSync} />\n <div>\n <Typography.Text strong>权限点(只读预览)</Typography.Text>\n {panelPermissions.length === 0 ? (\n <Typography.Text type=\"secondary\" style={{ display: 'block', marginTop: 8 }}>\n 暂无权限点\n </Typography.Text>\n ) : (\n <div style={{ marginTop: 8 }}>\n <PermissionBindPanel\n catalog={catalog}\n permissions={panelPermissions}\n value={checkedEpIds}\n onChange={() => undefined}\n systemEntryCodes={[...systemEntryCodes]}\n readOnly\n height={EP_PANEL_HEIGHT}\n />\n </div>\n )}\n </div>\n </Space>\n </FormModal>\n </ModulePageShell>\n );\n}\n"],"names":["ReactFilterBar","Filter","EP_PANEL_HEIGHT","buildViewItems","user","rolesValue","_a","jsx","Tags","r","roleDisplayName","MULTI_TAG_SHOW_LENGTH","SEMANTIC_COLORS","_b","o","IamUsersPage","client","catalog","systemEntryCodes","tableName","title","loading","setLoading","useState","rows","setRows","total","setTotal","page","setPage","filterValue","setFilterValue","keyword","useMemo","flat","getFilterValue","viewUser","setViewUser","viewLoading","setViewLoading","permUser","setPermUser","roles","setRoles","groups","setGroups","roleCodes","setRoleCodes","groupIds","setGroupIds","permFormEpoch","setPermFormEpoch","catalogNameByCode","m","item","catalogToItems","draftEp","buildDraftEffectivePermissions","panelPermissions","epItems","p","byCode","fromCatalog","hit","used","checkedEpIds","roleOptions","roleSelectOption","groupOptions","g","load","useCallback","data","message","useEffect","openView","u","detail","e","openPerm","mine","x","appRoleCodes","rr","n","onPermFormSync","viewItems","jsxs","ModulePageShell","next","ReactInputFilterItem","Table","v","_","_d","_c","Space","Button","Modal","CommonDescriptions","FormModal","FormInfo","Select","multiTagSelectProps","FormDataSync","Typography","PermissionBindPanel"],"mappings":"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"}
1
+ {"version":3,"file":"IamUsersPage.js","sources":["../../../../src/components/Iam/pages/IamUsersPage.tsx"],"sourcesContent":["import { ModulePageShell } from '@/components/Layout';\nimport { Modal } from '@/components/Modal';\nimport {\n PermissionBindPanel,\n type PermissionBindCatalog,\n type PermissionBindItem,\n} from '@/components/PermissionBindPanel';\nimport Filter, {\n getFilterValue,\n InputFilterItem as ReactInputFilterItem,\n type FilterValue,\n} from '@/components/ReactFilter';\nimport { Table } from '@/components/Table';\nimport { SEMANTIC_COLORS, Tags } from '@/components/Tag';\nimport { CommonDescriptions, type DescriptionItem } from '@/components/Descriptions';\nimport { FormDataSync, FormInfo, FormModal, Select } from '@/components/Form';\nimport { Alert, Button, Space, Typography, message } from 'antd';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react';\nimport type { IamClient } from '../client';\nimport type { IamRole, IamSharedGroup, IamUser } from '../types';\nimport { catalogToItems } from '../utils/catalogToItems';\nimport { buildDraftEffectivePermissions } from '../utils/draftEffectivePermissions';\nimport { MULTI_TAG_SHOW_LENGTH, multiTagSelectProps } from '../utils/multiTagSelect';\nimport { roleDisplayName, roleSelectOption } from '../utils/roleDisplay';\n\nconst ReactFilterBar = Filter as ComponentType<{\n value: FilterValue;\n onChange: (next: FilterValue) => void;\n list: unknown;\n}>;\n\nconst EP_PANEL_HEIGHT = 420;\n\nfunction buildViewItems(user: IamUser): DescriptionItem[] {\n const rolesValue: ReactNode = user.roles?.length ? (\n <Tags\n tags={user.roles.map((r) => roleDisplayName(r))}\n showLength={MULTI_TAG_SHOW_LENGTH}\n color={SEMANTIC_COLORS.INFO}\n empty=\"—\"\n />\n ) : (\n '—'\n );\n\n return [\n { label: '工号', value: user.employeeId || '—' },\n { label: '姓名', value: user.displayName || '—' },\n { label: '邮箱', value: user.email || '—' },\n {\n label: '组织',\n value:\n user.orgs\n ?.map((o) => o.name)\n .filter(Boolean)\n .join('、') || '—',\n span: 2,\n },\n { label: '角色', value: rolesValue, span: 2 },\n ];\n}\n\nexport type IamPersonalDataScopeConfig = {\n /** value 用 '' 表示未设置(提交转 null) */\n options: { value: string; label: string }[];\n /** 选未设置时展示 */\n unsetHint?: string;\n};\n\nexport type IamUsersPageProps = {\n client: IamClient;\n catalog: PermissionBindCatalog;\n systemEntryCodes: readonly string[];\n tableName?: string;\n title?: string;\n /**\n * 个人数据范围(S3):传入后启用可编辑 Select,并调用 client.get/setUserAppDataScope。\n * Assets 不传则保持只读「全公司」占位。\n */\n personalDataScope?: IamPersonalDataScopeConfig;\n};\n\nexport default function IamUsersPage({\n client,\n catalog,\n systemEntryCodes,\n tableName = 'iam_users',\n title = '用户管理',\n personalDataScope,\n}: IamUsersPageProps) {\n const [loading, setLoading] = useState(false);\n const [rows, setRows] = useState<IamUser[]>([]);\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(1);\n const [filterValue, setFilterValue] = useState<FilterValue>([]);\n const keyword = useMemo(() => {\n const flat = getFilterValue(filterValue) as Record<string, unknown>;\n return String(flat.keyword ?? '');\n }, [filterValue]);\n const [viewUser, setViewUser] = useState<IamUser | null>(null);\n const [viewLoading, setViewLoading] = useState(false);\n const [permUser, setPermUser] = useState<IamUser | null>(null);\n const [roles, setRoles] = useState<IamRole[]>([]);\n const [groups, setGroups] = useState<IamSharedGroup[]>([]);\n const [roleCodes, setRoleCodes] = useState<string[]>([]);\n const [groupIds, setGroupIds] = useState<string[]>([]);\n const [dataScope, setDataScope] = useState<string>('');\n const [permFormEpoch, setPermFormEpoch] = useState(0);\n const scopeEditable = Boolean(\n personalDataScope?.options?.length && client.getUserAppDataScope && client.setUserAppDataScope,\n );\n\n const catalogNameByCode = useMemo(() => {\n const m: Record<string, string> = {};\n for (const item of catalogToItems(catalog)) {\n m[item.code] = item.name;\n }\n return m;\n }, [catalog]);\n\n const draftEp = useMemo(\n () =>\n buildDraftEffectivePermissions({\n roleCodes,\n groupIds,\n roles,\n groups,\n nameByCode: catalogNameByCode,\n }),\n [roleCodes, groupIds, roles, groups, catalogNameByCode],\n );\n\n const panelPermissions = useMemo((): PermissionBindItem[] => {\n const epItems = draftEp\n .filter((p) => p.layer !== 'RESOURCE')\n .map((p) => ({\n id: p.code,\n code: p.code,\n name: p.name || p.code,\n layer: p.layer,\n }));\n const byCode = new Map(epItems.map((p) => [p.code, p]));\n const fromCatalog = catalogToItems(catalog).map((item) => {\n const hit = byCode.get(item.code);\n return hit ? { ...item, name: hit.name || item.name, layer: hit.layer || item.layer } : item;\n });\n const used = new Set(fromCatalog.map((p) => p.code));\n return [...fromCatalog, ...epItems.filter((p) => !used.has(p.code))];\n }, [draftEp, catalog]);\n\n const checkedEpIds = useMemo(\n () => draftEp.filter((p) => p.layer !== 'RESOURCE').map((p) => p.code),\n [draftEp],\n );\n\n const roleOptions = useMemo(() => roles.map((r) => roleSelectOption(r)), [roles]);\n const groupOptions = useMemo(\n () =>\n groups.map((g) => ({\n value: g.id,\n label: g.name || g.code,\n title: g.code ? `编码:${g.code}` : g.name,\n })),\n [groups],\n );\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const data = await client.listUsers({ page, pageSize: 20, keyword: keyword || undefined });\n setRows(data.pageData);\n setTotal(data.total);\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载失败');\n } finally {\n setLoading(false);\n }\n }, [client, page, keyword]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n const openView = async (u: IamUser) => {\n setViewUser(u);\n setViewLoading(true);\n try {\n const detail = await client.getUser(u.id);\n setViewUser({\n ...u,\n ...detail,\n orgs: detail.orgs?.length ? detail.orgs : u.orgs,\n roles: detail.roles?.length ? detail.roles : u.roles,\n });\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载用户详情失败');\n } finally {\n setViewLoading(false);\n }\n };\n\n const openPerm = async (u: IamUser) => {\n setPermUser(u);\n try {\n const [r, g, mine, detail, scope] = await Promise.all([\n client.listRoles(),\n client.listSharedGroups(),\n client.listUserSharedGroups(u.id),\n client.getUser(u.id),\n scopeEditable && client.getUserAppDataScope\n ? client.getUserAppDataScope(u.id)\n : Promise.resolve(null),\n ]);\n setRoles(r);\n setGroups(g);\n setGroupIds(mine.map((x) => x.id));\n const appRoleCodes =\n detail.roles?.filter((x) => r.some((rr) => rr.code === x.code)).map((x) => x.code) || [];\n setRoleCodes(appRoleCodes);\n setDataScope(scope || '');\n setPermFormEpoch((n) => n + 1);\n } catch (e) {\n message.error(e instanceof Error ? e.message : '加载权限失败');\n }\n };\n\n const onPermFormSync = useCallback((data: Record<string, unknown>) => {\n if (Array.isArray(data.groupIds)) setGroupIds(data.groupIds.map(String));\n if (Array.isArray(data.roleCodes)) setRoleCodes(data.roleCodes.map(String));\n if (typeof data.dataScope === 'string') setDataScope(data.dataScope);\n }, []);\n\n const viewItems = useMemo(() => (viewUser ? buildViewItems(viewUser) : []), [viewUser]);\n\n return (\n <ModulePageShell title={title} fillHeight={false}>\n <div style={{ marginBottom: 12 }}>\n <ReactFilterBar\n value={filterValue}\n onChange={(next) => {\n setFilterValue(next);\n setPage(1);\n }}\n list={[\n [\n {\n type: ReactInputFilterItem,\n props: {\n name: 'keyword',\n label: '工号/姓名',\n placeholder: '工号/姓名',\n },\n },\n ],\n ]}\n />\n </div>\n <Table\n rowKey=\"id\"\n loading={loading}\n dataSource={rows}\n tableName={tableName}\n pagination={{\n current: page,\n total,\n pageSize: 20,\n onChange: setPage,\n }}\n columns={[\n { title: '工号', dataIndex: 'employeeId' },\n { title: '姓名', dataIndex: 'displayName' },\n { title: '邮箱', dataIndex: 'email', render: (v: string | null) => v || '—' },\n {\n title: '组织',\n key: 'org',\n render: (_: unknown, r: IamUser) =>\n r.orgs?.find((o) => o.isPrimary)?.name || r.orgs?.[0]?.name || '—',\n },\n {\n title: '操作',\n key: 'ops',\n render: (_: unknown, r: IamUser) => (\n <Space>\n <Button type=\"link\" size=\"small\" onClick={() => void openView(r)}>\n 查看\n </Button>\n <Button type=\"link\" size=\"small\" onClick={() => void openPerm(r)}>\n 权限管理\n </Button>\n </Space>\n ),\n },\n ]}\n />\n\n <Modal\n open={Boolean(viewUser)}\n title=\"查看用户\"\n onCancel={() => setViewUser(null)}\n footer={null}\n size=\"M\"\n scrollable\n >\n {viewUser ? (\n <CommonDescriptions\n content={viewItems}\n column={1}\n bordered\n size=\"small\"\n title={viewLoading ? '加载中…' : undefined}\n />\n ) : null}\n </Modal>\n\n <FormModal\n key={`iam-perm-${permUser?.id || 'x'}-${permFormEpoch}`}\n open={Boolean(permUser)}\n title={`权限管理 · ${permUser?.displayName || ''}`}\n width={920}\n onCancel={() => setPermUser(null)}\n okText=\"保存\"\n cancelText=\"取消\"\n formProps={{\n data: {\n dataScope: scopeEditable ? dataScope : 'COMPANY',\n groupIds,\n roleCodes,\n },\n onSubmit: async (data: {\n groupIds?: string[];\n roleCodes?: string[];\n dataScope?: string;\n }) => {\n if (!permUser) return;\n try {\n if (scopeEditable && client.setUserAppDataScope) {\n const raw = String(data.dataScope ?? dataScope ?? '').trim();\n await client.setUserAppDataScope(permUser.id, raw || null);\n }\n await client.setUserAppRoleCodes(permUser.id, data.roleCodes ?? roleCodes);\n await client.setUserSharedGroups(permUser.id, data.groupIds ?? groupIds);\n message.success('已保存');\n setPermUser(null);\n void load();\n } catch (e) {\n message.error(e instanceof Error ? e.message : '保存失败');\n throw e;\n }\n },\n }}\n >\n <Space direction=\"vertical\" style={{ width: '100%' }} size=\"middle\">\n {scopeEditable && !dataScope && personalDataScope?.unsetHint ? (\n <Alert type=\"warning\" showIcon message={personalDataScope.unsetHint} />\n ) : null}\n <FormInfo\n column={2}\n gap={16}\n list={[\n <Select\n key=\"dataScope\"\n name=\"dataScope\"\n label=\"数据范围\"\n disabled={!scopeEditable}\n options={\n scopeEditable\n ? personalDataScope!.options\n : [{ value: 'COMPANY', label: '全公司' }]\n }\n placeholder=\"请选择个人数据范围\"\n />,\n <Select\n key=\"groupIds\"\n name=\"groupIds\"\n label=\"共享组\"\n mode=\"multiple\"\n allowClear\n options={groupOptions}\n placeholder=\"请选择共享组(可选)\"\n {...multiTagSelectProps}\n />,\n <Select\n key=\"roleCodes\"\n name=\"roleCodes\"\n label=\"用户角色\"\n mode=\"multiple\"\n allowClear\n options={roleOptions}\n placeholder=\"请选择本应用角色(可选)\"\n {...multiTagSelectProps}\n />,\n ]}\n />\n <FormDataSync onChange={onPermFormSync} />\n <div>\n <Typography.Text strong>权限点(只读预览)</Typography.Text>\n {panelPermissions.length === 0 ? (\n <Typography.Text type=\"secondary\" style={{ display: 'block', marginTop: 8 }}>\n 暂无权限点\n </Typography.Text>\n ) : (\n <div style={{ marginTop: 8 }}>\n <PermissionBindPanel\n catalog={catalog}\n permissions={panelPermissions}\n value={checkedEpIds}\n onChange={() => undefined}\n systemEntryCodes={[...systemEntryCodes]}\n readOnly\n height={EP_PANEL_HEIGHT}\n />\n </div>\n )}\n </div>\n </Space>\n </FormModal>\n </ModulePageShell>\n );\n}\n"],"names":["ReactFilterBar","Filter","EP_PANEL_HEIGHT","buildViewItems","user","rolesValue","_a","jsx","Tags","r","roleDisplayName","MULTI_TAG_SHOW_LENGTH","SEMANTIC_COLORS","_b","o","IamUsersPage","client","catalog","systemEntryCodes","tableName","title","personalDataScope","loading","setLoading","useState","rows","setRows","total","setTotal","page","setPage","filterValue","setFilterValue","keyword","useMemo","flat","getFilterValue","viewUser","setViewUser","viewLoading","setViewLoading","permUser","setPermUser","roles","setRoles","groups","setGroups","roleCodes","setRoleCodes","groupIds","setGroupIds","dataScope","setDataScope","permFormEpoch","setPermFormEpoch","scopeEditable","catalogNameByCode","m","item","catalogToItems","draftEp","buildDraftEffectivePermissions","panelPermissions","epItems","p","byCode","fromCatalog","hit","used","checkedEpIds","roleOptions","roleSelectOption","groupOptions","g","load","useCallback","data","message","useEffect","openView","u","detail","e","openPerm","mine","scope","x","appRoleCodes","rr","n","onPermFormSync","viewItems","jsxs","ModulePageShell","next","ReactInputFilterItem","Table","v","_","_d","_c","Space","Button","Modal","CommonDescriptions","FormModal","raw","Alert","FormInfo","Select","multiTagSelectProps","FormDataSync","Typography","PermissionBindPanel"],"mappings":"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"}
@@ -13,6 +13,8 @@ export type CreateActionFormProps = {
13
13
  scopeMode?: CreateActionScopeMode;
14
14
  /** F4:任务标题 placeholder(App 注入;禁写死业务文案) */
15
15
  titlePlaceholder?: string;
16
+ /** F4:任务描述 placeholder(App 注入) */
17
+ descriptionPlaceholder?: string;
16
18
  /** F4:关联指标 placeholder */
17
19
  metricPlaceholder?: string;
18
20
  /** scopeMode=none 时展示在截止日期下的短提示(App 注入) */
@@ -1,16 +1,16 @@
1
- import { jsx as a, jsxs as w } from "react/jsx-runtime";
2
- import { useState as u, useRef as ye, useMemo as P, useCallback as he, useEffect as F } from "react";
1
+ import { jsx as a, jsxs as X } from "react/jsx-runtime";
2
+ import { useState as u, useRef as ye, useMemo as S, useCallback as pe, useEffect as F } from "react";
3
3
  import Se from "../../../Form/FormDataSync.js";
4
4
  import { message as b } from "antd";
5
- import J from "classnames";
6
- import X from "./PersonRoleCascaderField.js";
7
- import { SetFormFields as Pe } from "./SetFormFields.js";
8
- import S from "./CreateActionForm.module.scss.js";
9
- import { createPagedSuperSelectApi as be, pagedSuperSelectGetSearchProps as pe, pagedSuperSelectPagination as ve } from "../../../Form/createPagedSuperSelectApi.js";
10
- import { Input as I, DatePicker as Fe } from "../../../FormInfo/fields.js";
11
- import { SuperSelect as p } from "../../../Form/SuperSelect.js";
12
- import Ie from "../../../FormInfo/FormInfo.js";
13
- import { useFormApi as Ce } from "@kne/react-form";
5
+ import w from "classnames";
6
+ import J from "./PersonRoleCascaderField.js";
7
+ import { SetFormFields as be } from "./SetFormFields.js";
8
+ import p from "./CreateActionForm.module.scss.js";
9
+ import { createPagedSuperSelectApi as Pe, pagedSuperSelectGetSearchProps as ve, pagedSuperSelectPagination as Fe } from "../../../Form/createPagedSuperSelectApi.js";
10
+ import { Input as I, TextArea as Ie, DatePicker as Ce } from "../../../FormInfo/fields.js";
11
+ import { SuperSelect as P } from "../../../Form/SuperSelect.js";
12
+ import Ue from "../../../FormInfo/FormInfo.js";
13
+ import { useFormApi as Ve } from "@kne/react-form";
14
14
  const C = 20, U = 15e3;
15
15
  function V(e, o) {
16
16
  return Promise.race([
@@ -23,46 +23,47 @@ function V(e, o) {
23
23
  })
24
24
  ]);
25
25
  }
26
- function Ue(e) {
26
+ function Ee(e) {
27
27
  return e == null || e === "" ? "" : Array.isArray(e) ? String(e[0] ?? "").trim() : typeof e == "object" ? String(e.value ?? "").trim() : String(e).trim();
28
28
  }
29
- function Ke(e, o) {
30
- return o ? /* @__PURE__ */ w("span", { className: S["assignee-option"], children: [
31
- /* @__PURE__ */ a("span", { className: S["assignee-option-name"], children: e }),
32
- /* @__PURE__ */ a("span", { className: S["assignee-option-org"], children: o })
29
+ function qe(e, o) {
30
+ return o ? /* @__PURE__ */ X("span", { className: p["assignee-option"], children: [
31
+ /* @__PURE__ */ a("span", { className: p["assignee-option-name"], children: e }),
32
+ /* @__PURE__ */ a("span", { className: p["assignee-option-org"], children: o })
33
33
  ] }) : e;
34
34
  }
35
- const Qe = ({
35
+ const ze = ({
36
36
  scopeLock: e,
37
37
  varietyLabel: o,
38
38
  lockedContext: l,
39
39
  scopeMode: O = "form",
40
40
  titlePlaceholder: R,
41
- metricPlaceholder: k,
41
+ descriptionPlaceholder: k,
42
+ metricPlaceholder: L,
42
43
  noneScopeHint: E,
43
- dimensionOptions: L,
44
+ dimensionOptions: ee,
44
45
  loaders: n,
45
- emptyAssigneeHint: ee = "暂无执行人",
46
- emptyAllocatorHint: te = "暂无分配人",
47
- allocatorPlaceholder: re = "先选角色,再选分配人",
48
- assigneePlaceholder: ae = "先选角色,再选执行人",
49
- allocatorDisabled: le = !0,
50
- defaultAssigneeUserId: ne = "",
46
+ emptyAssigneeHint: te = "暂无执行人",
47
+ emptyAllocatorHint: re = "暂无分配人",
48
+ allocatorPlaceholder: ae = "先选角色,再选分配人",
49
+ assigneePlaceholder: le = "先选角色,再选执行人",
50
+ allocatorDisabled: ne = !0,
51
+ defaultAssigneeUserId: ie = "",
51
52
  onAssigneeOptionsReady: s,
52
- onAllocatorOptionsReady: f
53
+ onAllocatorOptionsReady: m
53
54
  }) => {
54
55
  var q, z, H, W;
55
- const D = Ce(), [ie, M] = u([]), [oe, T] = u([]), [m, N] = u([]), [_, A] = u(!0), [j, x] = u(!1), [B, ue] = u(""), [Y, G] = u(() => {
56
+ const T = Ve(), [oe, D] = u([]), [ue, M] = u([]), [f, N] = u([]), [_, x] = u(!0), [A, j] = u(!1), [B, se] = u(""), [Y, G] = u(() => {
56
57
  var t;
57
58
  return ((t = e == null ? void 0 : e.factory) == null ? void 0 : t.trim()) || "";
58
- }), d = ye(((q = e == null ? void 0 : e.factory) == null ? void 0 : q.trim()) || ""), c = !!(l && l.length > 0), g = (c ? "locked" : O === "none" ? "none" : "form") === "none", $ = !!((z = e == null ? void 0 : e.factory) != null && z.trim()), y = !!((H = e == null ? void 0 : e.variety) != null && H.trim()), se = !!((W = e == null ? void 0 : e.metric) != null && W.trim()), h = typeof n.loadVarietyPage == "function", K = !!Y || y, fe = P(() => {
59
+ }), d = ye(((q = e == null ? void 0 : e.factory) == null ? void 0 : q.trim()) || ""), c = !!(l && l.length > 0), g = (c ? "locked" : O === "none" ? "none" : "form") === "none", $ = !!((z = e == null ? void 0 : e.factory) != null && z.trim()), h = !!((H = e == null ? void 0 : e.variety) != null && H.trim()), me = !!((W = e == null ? void 0 : e.metric) != null && W.trim()), y = typeof n.loadVarietyPage == "function", K = !!Y || h, fe = S(() => {
59
60
  var r;
60
61
  const t = (r = e == null ? void 0 : e.factory) == null ? void 0 : r.trim();
61
- return !t || m.some((i) => i.value === t) ? m : [{ value: t, label: t }, ...m];
62
- }, [m, e == null ? void 0 : e.factory]), Q = P(() => {
63
- if (!h || !n.loadVarietyPage) return;
62
+ return !t || f.some((i) => i.value === t) ? f : [{ value: t, label: t }, ...f];
63
+ }, [f, e == null ? void 0 : e.factory]), Q = S(() => {
64
+ if (!y || !n.loadVarietyPage) return;
64
65
  const t = n.loadVarietyPage;
65
- return be({
66
+ return Pe({
66
67
  pageSize: C,
67
68
  loadPage: (r) => t({
68
69
  ...r,
@@ -70,23 +71,23 @@ const Qe = ({
70
71
  }),
71
72
  onError: () => b.error("品种列表加载失败")
72
73
  });
73
- }, [h, n.loadVarietyPage]), me = P(
74
- () => pe(C),
75
- []
76
- ), de = P(
74
+ }, [y, n.loadVarietyPage]), de = S(
77
75
  () => ve(C),
78
76
  []
79
- ), ce = he(
77
+ ), ce = S(
78
+ () => Fe(C),
79
+ []
80
+ ), ge = pe(
80
81
  (t) => {
81
82
  if (c || g) return;
82
- const r = Ue(t.factory);
83
+ const r = Ee(t.factory);
83
84
  if (r === d.current) return;
84
85
  const i = d.current;
85
- d.current = r, G(r), i && r !== i && h && !y && queueMicrotask(() => {
86
- D.openApi.setFieldValue({ name: "variety" }, "", { runValidate: !1 });
86
+ d.current = r, G(r), i && r !== i && y && !h && queueMicrotask(() => {
87
+ T.openApi.setFieldValue({ name: "variety" }, "", { runValidate: !1 });
87
88
  });
88
89
  },
89
- [D.openApi, h, y, c, g]
90
+ [T.openApi, y, h, c, g]
90
91
  );
91
92
  F(() => {
92
93
  var r;
@@ -94,34 +95,34 @@ const Qe = ({
94
95
  t && (d.current = t, G(t));
95
96
  }, [e == null ? void 0 : e.factory]), F(() => {
96
97
  let t = !1;
97
- return A(!0), Promise.all([
98
+ return x(!0), Promise.all([
98
99
  V(n.loadAssigneeCatalog(), U),
99
100
  V(n.loadAllocatorCatalog(), U)
100
101
  ]).then(([r, i]) => {
101
102
  if (!t)
102
- if (r.status === "fulfilled" ? (M(r.value.cascadeOptions), s == null || s(r.value.options)) : (b.error("执行人列表加载失败"), M([]), s == null || s([])), i.status === "fulfilled") {
103
- T(i.value.cascadeOptions), f == null || f(i.value.options);
103
+ if (r.status === "fulfilled" ? (D(r.value.cascadeOptions), s == null || s(r.value.options)) : (b.error("执行人列表加载失败"), D([]), s == null || s([])), i.status === "fulfilled") {
104
+ M(i.value.cascadeOptions), m == null || m(i.value.options);
104
105
  const Z = n.pickDefaultAllocatorUserId;
105
- ue(Z ? Z(i.value.options) : "");
106
+ se(Z ? Z(i.value.options) : "");
106
107
  } else
107
- b.error("分配人列表加载失败"), T([]), f == null || f([]);
108
+ b.error("分配人列表加载失败"), M([]), m == null || m([]);
108
109
  }).finally(() => {
109
- t || A(!1);
110
+ t || x(!1);
110
111
  }), () => {
111
112
  t = !0;
112
113
  };
113
114
  }, []), F(() => {
114
115
  if (c || g || !n.loadFactoryOptions) return;
115
116
  let t = !1;
116
- return x(!0), V(n.loadFactoryOptions(), U).then((r) => {
117
+ return j(!0), V(n.loadFactoryOptions(), U).then((r) => {
117
118
  t || (r.status === "fulfilled" ? N(r.value) : (b.error("分厂列表加载失败"), N([])));
118
119
  }).finally(() => {
119
- t || x(!1);
120
+ t || j(!1);
120
121
  }), () => {
121
122
  t = !0;
122
123
  };
123
124
  }, []);
124
- const ge = c ? (l || []).map((t, r) => /* @__PURE__ */ a(
125
+ const he = c ? (l || []).map((t, r) => /* @__PURE__ */ a(
125
126
  I,
126
127
  {
127
128
  name: `lockedContext_${r}`,
@@ -131,35 +132,35 @@ const Qe = ({
131
132
  `locked-${r}-${t.label}`
132
133
  )) : g ? [] : [
133
134
  /* @__PURE__ */ a(
134
- p,
135
+ P,
135
136
  {
136
137
  name: "factory",
137
138
  label: "分厂",
138
139
  single: !0,
139
140
  options: fe,
140
- placeholder: j ? "加载分厂…" : "选择分厂",
141
- disabled: j || $,
141
+ placeholder: A ? "加载分厂…" : "选择分厂",
142
+ disabled: A || $,
142
143
  allowClear: !$
143
144
  },
144
145
  "factory"
145
146
  ),
146
- h && Q ? /* @__PURE__ */ a(
147
- p,
147
+ y && Q ? /* @__PURE__ */ a(
148
+ P,
148
149
  {
149
150
  name: "variety",
150
151
  label: o || "品种",
151
152
  single: !0,
152
153
  api: Q,
153
- getSearchProps: me,
154
- pagination: de,
154
+ getSearchProps: de,
155
+ pagination: ce,
155
156
  placeholder: K ? "选择品种" : "请先选择分厂",
156
- disabled: y || !K,
157
- allowClear: !y,
157
+ disabled: h || !K,
158
+ allowClear: !h,
158
159
  searchPlaceholder: "搜索品种"
159
160
  },
160
161
  `variety-${Y || "none"}`
161
162
  ) : /* @__PURE__ */ a(
162
- p,
163
+ P,
163
164
  {
164
165
  name: "variety",
165
166
  label: o || "品种",
@@ -175,17 +176,17 @@ const Qe = ({
175
176
  {
176
177
  name: "metric",
177
178
  label: "关联指标",
178
- placeholder: k || "可选",
179
+ placeholder: L || "可选",
179
180
  maxLength: 40,
180
- disabled: se
181
+ disabled: me
181
182
  },
182
183
  "metric"
183
184
  )
184
- ], v = String(ne || "").trim();
185
- return /* @__PURE__ */ w("div", { className: J("create-action-form", S["create-action-form"]), children: [
186
- /* @__PURE__ */ a(Se, { onChange: ce }),
185
+ ], v = String(ie || "").trim();
186
+ return /* @__PURE__ */ X("div", { className: w("create-action-form", p["create-action-form"]), children: [
187
+ /* @__PURE__ */ a(Se, { onChange: ge }),
187
188
  /* @__PURE__ */ a(
188
- Pe,
189
+ be,
189
190
  {
190
191
  patch: {
191
192
  allocatorUserId: B,
@@ -194,7 +195,7 @@ const Qe = ({
194
195
  }
195
196
  ),
196
197
  /* @__PURE__ */ a(
197
- Ie,
198
+ Ue,
198
199
  {
199
200
  column: 1,
200
201
  list: [
@@ -210,46 +211,59 @@ const Qe = ({
210
211
  "title"
211
212
  ),
212
213
  /* @__PURE__ */ a(
213
- p,
214
+ Ie,
215
+ {
216
+ name: "description",
217
+ label: "任务描述",
218
+ labelTips: "可选",
219
+ rows: 5,
220
+ block: !0,
221
+ maxLength: 2e3,
222
+ placeholder: k || "说明目前情况、问题与需改进点,便于执行人理解背景"
223
+ },
224
+ "description"
225
+ ),
226
+ /* @__PURE__ */ a(
227
+ P,
214
228
  {
215
229
  name: "dimension",
216
230
  label: "任务类型",
217
231
  rule: "REQ",
218
232
  single: !0,
219
- options: L,
233
+ options: ee,
220
234
  placeholder: "选择任务类型"
221
235
  },
222
236
  "dimension"
223
237
  ),
224
238
  /* @__PURE__ */ a(
225
- X,
239
+ J,
226
240
  {
227
241
  name: "allocatorUserId",
228
242
  label: "分配人",
229
- cascadeOptions: oe,
243
+ cascadeOptions: ue,
230
244
  loading: _,
231
- disabled: le,
232
- emptyHint: te,
233
- placeholder: re,
245
+ disabled: ne,
246
+ emptyHint: re,
247
+ placeholder: ae,
234
248
  defaultUserId: B
235
249
  },
236
250
  "allocatorUserId"
237
251
  ),
238
252
  /* @__PURE__ */ a(
239
- X,
253
+ J,
240
254
  {
241
255
  name: "assigneeUserId",
242
256
  label: "执行人",
243
- cascadeOptions: ie,
257
+ cascadeOptions: oe,
244
258
  loading: _,
245
- emptyHint: ee,
246
- placeholder: ae,
259
+ emptyHint: te,
260
+ placeholder: le,
247
261
  defaultUserId: v
248
262
  },
249
263
  "assigneeUserId"
250
264
  ),
251
265
  /* @__PURE__ */ a(
252
- Fe,
266
+ Ce,
253
267
  {
254
268
  name: "dueDate",
255
269
  label: "截止日期",
@@ -260,16 +274,16 @@ const Qe = ({
260
274
  },
261
275
  "dueDate"
262
276
  ),
263
- ...ge
277
+ ...he
264
278
  ]
265
279
  }
266
280
  ),
267
- g && E ? /* @__PURE__ */ a("p", { className: J("create-action-none-hint", S["create-action-none-hint"]), children: E }) : null
281
+ g && E ? /* @__PURE__ */ a("p", { className: w("create-action-none-hint", p["create-action-none-hint"]), children: E }) : null
268
282
  ] });
269
283
  };
270
284
  export {
271
285
  C as CREATE_ACTION_VARIETY_PAGE_SIZE,
272
- Qe as default,
273
- Ke as renderPersonOptionLabel
286
+ ze as default,
287
+ qe as renderPersonOptionLabel
274
288
  };
275
289
  //# sourceMappingURL=CreateActionForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateActionForm.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionForm.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n DatePicker,\n FormInfo,\n Input,\n SuperSelect,\n createPagedSuperSelectApi,\n pagedSuperSelectGetSearchProps,\n pagedSuperSelectPagination,\n} from '../../../FormInfo';\nimport FormDataSync from '../../../Form/FormDataSync';\nimport { useFormApi } from '../../../Form';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport PersonRoleCascaderField from './PersonRoleCascaderField';\nimport { SetFormFields } from './SetFormFields';\nimport type {\n ActionPersonCascadeOption,\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionScopeLock,\n CreateActionScopeMode,\n CreateActionSelectOption,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionForm.module.scss';\n\n/** 建单品种下拉页大小(服务端分页) */\nexport const CREATE_ACTION_VARIETY_PAGE_SIZE = 20;\n\nconst CATALOG_LOAD_TIMEOUT_MS = 15_000;\n\nfunction settleWithTimeout<T>(promise: Promise<T>, ms: number): Promise<PromiseSettledResult<T>> {\n return Promise.race([\n promise.then(\n (value) => ({ status: 'fulfilled' as const, value }),\n (reason) => ({ status: 'rejected' as const, reason }),\n ),\n new Promise<PromiseSettledResult<T>>((resolve) => {\n setTimeout(() => resolve({ status: 'rejected', reason: new Error('timeout') }), ms);\n }),\n ]);\n}\n\nfunction asFactoryValue(raw: unknown): string {\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw)) return String(raw[0] ?? '').trim();\n if (typeof raw === 'object') {\n const o = raw as { value?: unknown };\n return String(o.value ?? '').trim();\n }\n return String(raw).trim();\n}\n\nexport type CreateActionFormProps = {\n scopeLock?: CreateActionScopeLock;\n varietyLabel?: string;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** F4:任务标题 placeholder(App 注入;禁写死业务文案) */\n titlePlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时展示在截止日期下的短提示(App 注入) */\n noneScopeHint?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n allocatorPlaceholder?: string;\n assigneePlaceholder?: string;\n /**\n * 分配人只读。新建/编辑均禁用改派(默认 true);\n * 值由 pickDefaultAllocatorUserId / 表单初值写入。\n */\n allocatorDisabled?: boolean;\n /** 编辑回填:执行人 userId(级联选项就绪后写入) */\n defaultAssigneeUserId?: string;\n onAssigneeOptionsReady?: (options: ActionPersonOption[]) => void;\n onAllocatorOptionsReady?: (options: ActionPersonOption[]) => void;\n};\n\nexport function renderPersonOptionLabel(name: string, org: string): ReactNode {\n if (!org) return name;\n return (\n <span className={styles['assignee-option']}>\n <span className={styles['assignee-option-name']}>{name}</span>\n <span className={styles['assignee-option-org']}>{org}</span>\n </span>\n );\n}\n\ntype OpenApiLike = {\n setFieldValue: (\n token: { name: string },\n value: unknown,\n options?: { runValidate?: boolean },\n ) => void;\n};\n\n/** 新建跟踪任务 / 下发任务字段(FormModal + FormInfo);数据经 loaders 注入 */\nconst CreateActionForm: React.FC<CreateActionFormProps> = ({\n scopeLock,\n varietyLabel,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n titlePlaceholder,\n metricPlaceholder,\n noneScopeHint,\n dimensionOptions,\n loaders,\n emptyAssigneeHint = '暂无执行人',\n emptyAllocatorHint = '暂无分配人',\n allocatorPlaceholder = '先选角色,再选分配人',\n assigneePlaceholder = '先选角色,再选执行人',\n allocatorDisabled = true,\n defaultAssigneeUserId = '',\n onAssigneeOptionsReady,\n onAllocatorOptionsReady,\n}) => {\n const formApi = useFormApi() as { openApi: OpenApiLike };\n const [assigneeCascade, setAssigneeCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [allocatorCascade, setAllocatorCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [factoryOptions, setFactoryOptions] = useState<CreateActionSelectOption[]>([]);\n const [personLoading, setPersonLoading] = useState(true);\n const [factoryLoading, setFactoryLoading] = useState(false);\n const [defaultAllocatorUserId, setDefaultAllocatorUserId] = useState('');\n const [factoryKey, setFactoryKey] = useState(() => scopeLock?.factory?.trim() || '');\n const factoryRef = useRef(scopeLock?.factory?.trim() || '');\n\n const useLockedContext = Boolean(lockedContext && lockedContext.length > 0);\n const resolvedScopeMode: CreateActionScopeMode = useLockedContext\n ? 'locked'\n : scopeModeProp === 'none'\n ? 'none'\n : 'form';\n const useNoneScope = resolvedScopeMode === 'none';\n const lockFactory = Boolean(scopeLock?.factory?.trim());\n const lockVariety = Boolean(scopeLock?.variety?.trim());\n const lockMetric = Boolean(scopeLock?.metric?.trim());\n const hasVarietyPage = typeof loaders.loadVarietyPage === 'function';\n const canLoadVariety = Boolean(factoryKey) || lockVariety;\n\n const factorySelectOptions = useMemo(() => {\n const locked = scopeLock?.factory?.trim();\n if (!locked) return factoryOptions;\n if (factoryOptions.some((o) => o.value === locked)) return factoryOptions;\n return [{ value: locked, label: locked }, ...factoryOptions];\n }, [factoryOptions, scopeLock?.factory]);\n\n const varietySelectApi = useMemo(() => {\n if (!hasVarietyPage || !loaders.loadVarietyPage) return undefined;\n const loadPage = loaders.loadVarietyPage;\n return createPagedSuperSelectApi({\n pageSize: CREATE_ACTION_VARIETY_PAGE_SIZE,\n loadPage: (query) =>\n loadPage({\n ...query,\n factory: factoryRef.current,\n }),\n onError: () => message.error('品种列表加载失败'),\n });\n }, [hasVarietyPage, loaders.loadVarietyPage]);\n\n const varietyGetSearchProps = useMemo(\n () => pagedSuperSelectGetSearchProps(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const varietyPagination = useMemo(\n () => pagedSuperSelectPagination(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const handleFormSync = useCallback(\n (data: Record<string, unknown>) => {\n if (useLockedContext || useNoneScope) return;\n const next = asFactoryValue(data.factory);\n if (next === factoryRef.current) return;\n const prev = factoryRef.current;\n factoryRef.current = next;\n setFactoryKey(next);\n if (prev && next !== prev && hasVarietyPage && !lockVariety) {\n queueMicrotask(() => {\n formApi.openApi.setFieldValue({ name: 'variety' }, '', { runValidate: false });\n });\n }\n },\n [formApi.openApi, hasVarietyPage, lockVariety, useLockedContext, useNoneScope],\n );\n\n useEffect(() => {\n const locked = scopeLock?.factory?.trim() || '';\n if (!locked) return;\n factoryRef.current = locked;\n setFactoryKey(locked);\n }, [scopeLock?.factory]);\n\n /** 人员目录:独立加载 + 超时,避免拖死分厂 */\n useEffect(() => {\n let cancelled = false;\n setPersonLoading(true);\n Promise.all([\n settleWithTimeout(loaders.loadAssigneeCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n settleWithTimeout(loaders.loadAllocatorCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n ])\n .then(([usersRes, allocRes]) => {\n if (cancelled) return;\n if (usersRes.status === 'fulfilled') {\n setAssigneeCascade(usersRes.value.cascadeOptions);\n onAssigneeOptionsReady?.(usersRes.value.options);\n } else {\n message.error('执行人列表加载失败');\n setAssigneeCascade([]);\n onAssigneeOptionsReady?.([]);\n }\n if (allocRes.status === 'fulfilled') {\n setAllocatorCascade(allocRes.value.cascadeOptions);\n onAllocatorOptionsReady?.(allocRes.value.options);\n const pick = loaders.pickDefaultAllocatorUserId;\n setDefaultAllocatorUserId(pick ? pick(allocRes.value.options) : '');\n } else {\n message.error('分配人列表加载失败');\n setAllocatorCascade([]);\n onAllocatorOptionsReady?.([]);\n }\n })\n .finally(() => {\n if (!cancelled) setPersonLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n /** 分厂:与人员并行、互不阻塞(对齐 EAM CycleForm 静态 options) */\n useEffect(() => {\n if (useLockedContext || useNoneScope || !loaders.loadFactoryOptions) return;\n let cancelled = false;\n setFactoryLoading(true);\n settleWithTimeout(loaders.loadFactoryOptions(), CATALOG_LOAD_TIMEOUT_MS)\n .then((factoriesRes) => {\n if (cancelled) return;\n if (factoriesRes.status === 'fulfilled') {\n setFactoryOptions(factoriesRes.value);\n } else {\n message.error('分厂列表加载失败');\n setFactoryOptions([]);\n }\n })\n .finally(() => {\n if (!cancelled) setFactoryLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n const scopeFields: ReactNode[] = useLockedContext\n ? (lockedContext || []).map((field, idx) => (\n <Input\n key={`locked-${idx}-${field.label}`}\n name={`lockedContext_${idx}`}\n label={field.label}\n disabled\n />\n ))\n : useNoneScope\n ? []\n : [\n <SuperSelect\n key=\"factory\"\n name=\"factory\"\n label=\"分厂\"\n single\n options={factorySelectOptions}\n placeholder={factoryLoading ? '加载分厂…' : '选择分厂'}\n disabled={factoryLoading || lockFactory}\n allowClear={!lockFactory}\n />,\n hasVarietyPage && varietySelectApi ? (\n <SuperSelect\n key={`variety-${factoryKey || 'none'}`}\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n api={varietySelectApi}\n getSearchProps={varietyGetSearchProps}\n pagination={varietyPagination}\n placeholder={canLoadVariety ? '选择品种' : '请先选择分厂'}\n disabled={lockVariety || !canLoadVariety}\n allowClear={!lockVariety}\n searchPlaceholder=\"搜索品种\"\n />\n ) : (\n <SuperSelect\n key=\"variety\"\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n options={[]}\n placeholder=\"App 未注入 loadVarietyPage\"\n disabled\n />\n ),\n <Input\n key=\"metric\"\n name=\"metric\"\n label=\"关联指标\"\n placeholder={metricPlaceholder || '可选'}\n maxLength={40}\n disabled={lockMetric}\n />,\n ];\n\n const assigneeDefault = String(defaultAssigneeUserId || '').trim();\n\n return (\n <div className={classNames('create-action-form', styles['create-action-form'])}>\n <FormDataSync onChange={handleFormSync} />\n <SetFormFields\n patch={{\n allocatorUserId: defaultAllocatorUserId,\n ...(assigneeDefault ? { assigneeUserId: assigneeDefault } : {}),\n }}\n />\n <FormInfo\n column={1}\n list={[\n <Input\n key=\"title\"\n name=\"title\"\n label=\"任务标题\"\n rule=\"REQ\"\n placeholder={titlePlaceholder || '请输入任务标题'}\n maxLength={120}\n />,\n <SuperSelect\n key=\"dimension\"\n name=\"dimension\"\n label=\"任务类型\"\n rule=\"REQ\"\n single\n options={dimensionOptions}\n placeholder=\"选择任务类型\"\n />,\n <PersonRoleCascaderField\n key=\"allocatorUserId\"\n name=\"allocatorUserId\"\n label=\"分配人\"\n cascadeOptions={allocatorCascade}\n loading={personLoading}\n disabled={allocatorDisabled}\n emptyHint={emptyAllocatorHint}\n placeholder={allocatorPlaceholder}\n defaultUserId={defaultAllocatorUserId}\n />,\n <PersonRoleCascaderField\n key=\"assigneeUserId\"\n name=\"assigneeUserId\"\n label=\"执行人\"\n cascadeOptions={assigneeCascade}\n loading={personLoading}\n emptyHint={emptyAssigneeHint}\n placeholder={assigneePlaceholder}\n defaultUserId={assigneeDefault}\n />,\n <DatePicker\n key=\"dueDate\"\n name=\"dueDate\"\n label=\"截止日期\"\n labelTips=\"可选\"\n format=\"YYYY-MM-DD\"\n placeholder=\"选择截止日期\"\n allowClear\n />,\n ...scopeFields,\n ]}\n />\n {useNoneScope && noneScopeHint ? (\n <p className={classNames('create-action-none-hint', styles['create-action-none-hint'])}>\n {noneScopeHint}\n </p>\n ) : null}\n </div>\n );\n};\n\nexport default CreateActionForm;\n"],"names":["CREATE_ACTION_VARIETY_PAGE_SIZE","CATALOG_LOAD_TIMEOUT_MS","settleWithTimeout","promise","ms","value","reason","resolve","asFactoryValue","raw","renderPersonOptionLabel","name","org","jsxs","styles","jsx","CreateActionForm","scopeLock","varietyLabel","lockedContext","scopeModeProp","titlePlaceholder","metricPlaceholder","noneScopeHint","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","allocatorPlaceholder","assigneePlaceholder","allocatorDisabled","defaultAssigneeUserId","onAssigneeOptionsReady","onAllocatorOptionsReady","formApi","useFormApi","assigneeCascade","setAssigneeCascade","useState","allocatorCascade","setAllocatorCascade","factoryOptions","setFactoryOptions","personLoading","setPersonLoading","factoryLoading","setFactoryLoading","defaultAllocatorUserId","setDefaultAllocatorUserId","factoryKey","setFactoryKey","_a","factoryRef","useRef","useLockedContext","useNoneScope","lockFactory","_b","lockVariety","_c","lockMetric","_d","hasVarietyPage","canLoadVariety","factorySelectOptions","useMemo","locked","o","varietySelectApi","loadPage","createPagedSuperSelectApi","query","message","varietyGetSearchProps","pagedSuperSelectGetSearchProps","varietyPagination","pagedSuperSelectPagination","handleFormSync","useCallback","data","next","prev","useEffect","cancelled","usersRes","allocRes","pick","factoriesRes","scopeFields","field","idx","Input","SuperSelect","assigneeDefault","classNames","FormDataSync","SetFormFields","FormInfo","PersonRoleCascaderField","DatePicker"],"mappings":"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"}
1
+ {"version":3,"file":"CreateActionForm.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionForm.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n DatePicker,\n FormInfo,\n Input,\n SuperSelect,\n TextArea,\n createPagedSuperSelectApi,\n pagedSuperSelectGetSearchProps,\n pagedSuperSelectPagination,\n} from '../../../FormInfo';\nimport FormDataSync from '../../../Form/FormDataSync';\nimport { useFormApi } from '../../../Form';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport PersonRoleCascaderField from './PersonRoleCascaderField';\nimport { SetFormFields } from './SetFormFields';\nimport type {\n ActionPersonCascadeOption,\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionScopeLock,\n CreateActionScopeMode,\n CreateActionSelectOption,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionForm.module.scss';\n\n/** 建单品种下拉页大小(服务端分页) */\nexport const CREATE_ACTION_VARIETY_PAGE_SIZE = 20;\n\nconst CATALOG_LOAD_TIMEOUT_MS = 15_000;\n\nfunction settleWithTimeout<T>(promise: Promise<T>, ms: number): Promise<PromiseSettledResult<T>> {\n return Promise.race([\n promise.then(\n (value) => ({ status: 'fulfilled' as const, value }),\n (reason) => ({ status: 'rejected' as const, reason }),\n ),\n new Promise<PromiseSettledResult<T>>((resolve) => {\n setTimeout(() => resolve({ status: 'rejected', reason: new Error('timeout') }), ms);\n }),\n ]);\n}\n\nfunction asFactoryValue(raw: unknown): string {\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw)) return String(raw[0] ?? '').trim();\n if (typeof raw === 'object') {\n const o = raw as { value?: unknown };\n return String(o.value ?? '').trim();\n }\n return String(raw).trim();\n}\n\nexport type CreateActionFormProps = {\n scopeLock?: CreateActionScopeLock;\n varietyLabel?: string;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** F4:任务标题 placeholder(App 注入;禁写死业务文案) */\n titlePlaceholder?: string;\n /** F4:任务描述 placeholder(App 注入) */\n descriptionPlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时展示在截止日期下的短提示(App 注入) */\n noneScopeHint?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n allocatorPlaceholder?: string;\n assigneePlaceholder?: string;\n /**\n * 分配人只读。新建/编辑均禁用改派(默认 true);\n * 值由 pickDefaultAllocatorUserId / 表单初值写入。\n */\n allocatorDisabled?: boolean;\n /** 编辑回填:执行人 userId(级联选项就绪后写入) */\n defaultAssigneeUserId?: string;\n onAssigneeOptionsReady?: (options: ActionPersonOption[]) => void;\n onAllocatorOptionsReady?: (options: ActionPersonOption[]) => void;\n};\n\nexport function renderPersonOptionLabel(name: string, org: string): ReactNode {\n if (!org) return name;\n return (\n <span className={styles['assignee-option']}>\n <span className={styles['assignee-option-name']}>{name}</span>\n <span className={styles['assignee-option-org']}>{org}</span>\n </span>\n );\n}\n\ntype OpenApiLike = {\n setFieldValue: (\n token: { name: string },\n value: unknown,\n options?: { runValidate?: boolean },\n ) => void;\n};\n\n/** 新建跟踪任务 / 下发任务字段(FormModal + FormInfo);数据经 loaders 注入 */\nconst CreateActionForm: React.FC<CreateActionFormProps> = ({\n scopeLock,\n varietyLabel,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n titlePlaceholder,\n descriptionPlaceholder,\n metricPlaceholder,\n noneScopeHint,\n dimensionOptions,\n loaders,\n emptyAssigneeHint = '暂无执行人',\n emptyAllocatorHint = '暂无分配人',\n allocatorPlaceholder = '先选角色,再选分配人',\n assigneePlaceholder = '先选角色,再选执行人',\n allocatorDisabled = true,\n defaultAssigneeUserId = '',\n onAssigneeOptionsReady,\n onAllocatorOptionsReady,\n}) => {\n const formApi = useFormApi() as { openApi: OpenApiLike };\n const [assigneeCascade, setAssigneeCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [allocatorCascade, setAllocatorCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [factoryOptions, setFactoryOptions] = useState<CreateActionSelectOption[]>([]);\n const [personLoading, setPersonLoading] = useState(true);\n const [factoryLoading, setFactoryLoading] = useState(false);\n const [defaultAllocatorUserId, setDefaultAllocatorUserId] = useState('');\n const [factoryKey, setFactoryKey] = useState(() => scopeLock?.factory?.trim() || '');\n const factoryRef = useRef(scopeLock?.factory?.trim() || '');\n\n const useLockedContext = Boolean(lockedContext && lockedContext.length > 0);\n const resolvedScopeMode: CreateActionScopeMode = useLockedContext\n ? 'locked'\n : scopeModeProp === 'none'\n ? 'none'\n : 'form';\n const useNoneScope = resolvedScopeMode === 'none';\n const lockFactory = Boolean(scopeLock?.factory?.trim());\n const lockVariety = Boolean(scopeLock?.variety?.trim());\n const lockMetric = Boolean(scopeLock?.metric?.trim());\n const hasVarietyPage = typeof loaders.loadVarietyPage === 'function';\n const canLoadVariety = Boolean(factoryKey) || lockVariety;\n\n const factorySelectOptions = useMemo(() => {\n const locked = scopeLock?.factory?.trim();\n if (!locked) return factoryOptions;\n if (factoryOptions.some((o) => o.value === locked)) return factoryOptions;\n return [{ value: locked, label: locked }, ...factoryOptions];\n }, [factoryOptions, scopeLock?.factory]);\n\n const varietySelectApi = useMemo(() => {\n if (!hasVarietyPage || !loaders.loadVarietyPage) return undefined;\n const loadPage = loaders.loadVarietyPage;\n return createPagedSuperSelectApi({\n pageSize: CREATE_ACTION_VARIETY_PAGE_SIZE,\n loadPage: (query) =>\n loadPage({\n ...query,\n factory: factoryRef.current,\n }),\n onError: () => message.error('品种列表加载失败'),\n });\n }, [hasVarietyPage, loaders.loadVarietyPage]);\n\n const varietyGetSearchProps = useMemo(\n () => pagedSuperSelectGetSearchProps(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const varietyPagination = useMemo(\n () => pagedSuperSelectPagination(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const handleFormSync = useCallback(\n (data: Record<string, unknown>) => {\n if (useLockedContext || useNoneScope) return;\n const next = asFactoryValue(data.factory);\n if (next === factoryRef.current) return;\n const prev = factoryRef.current;\n factoryRef.current = next;\n setFactoryKey(next);\n if (prev && next !== prev && hasVarietyPage && !lockVariety) {\n queueMicrotask(() => {\n formApi.openApi.setFieldValue({ name: 'variety' }, '', { runValidate: false });\n });\n }\n },\n [formApi.openApi, hasVarietyPage, lockVariety, useLockedContext, useNoneScope],\n );\n\n useEffect(() => {\n const locked = scopeLock?.factory?.trim() || '';\n if (!locked) return;\n factoryRef.current = locked;\n setFactoryKey(locked);\n }, [scopeLock?.factory]);\n\n /** 人员目录:独立加载 + 超时,避免拖死分厂 */\n useEffect(() => {\n let cancelled = false;\n setPersonLoading(true);\n Promise.all([\n settleWithTimeout(loaders.loadAssigneeCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n settleWithTimeout(loaders.loadAllocatorCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n ])\n .then(([usersRes, allocRes]) => {\n if (cancelled) return;\n if (usersRes.status === 'fulfilled') {\n setAssigneeCascade(usersRes.value.cascadeOptions);\n onAssigneeOptionsReady?.(usersRes.value.options);\n } else {\n message.error('执行人列表加载失败');\n setAssigneeCascade([]);\n onAssigneeOptionsReady?.([]);\n }\n if (allocRes.status === 'fulfilled') {\n setAllocatorCascade(allocRes.value.cascadeOptions);\n onAllocatorOptionsReady?.(allocRes.value.options);\n const pick = loaders.pickDefaultAllocatorUserId;\n setDefaultAllocatorUserId(pick ? pick(allocRes.value.options) : '');\n } else {\n message.error('分配人列表加载失败');\n setAllocatorCascade([]);\n onAllocatorOptionsReady?.([]);\n }\n })\n .finally(() => {\n if (!cancelled) setPersonLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n /** 分厂:与人员并行、互不阻塞(对齐 EAM CycleForm 静态 options) */\n useEffect(() => {\n if (useLockedContext || useNoneScope || !loaders.loadFactoryOptions) return;\n let cancelled = false;\n setFactoryLoading(true);\n settleWithTimeout(loaders.loadFactoryOptions(), CATALOG_LOAD_TIMEOUT_MS)\n .then((factoriesRes) => {\n if (cancelled) return;\n if (factoriesRes.status === 'fulfilled') {\n setFactoryOptions(factoriesRes.value);\n } else {\n message.error('分厂列表加载失败');\n setFactoryOptions([]);\n }\n })\n .finally(() => {\n if (!cancelled) setFactoryLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n const scopeFields: ReactNode[] = useLockedContext\n ? (lockedContext || []).map((field, idx) => (\n <Input\n key={`locked-${idx}-${field.label}`}\n name={`lockedContext_${idx}`}\n label={field.label}\n disabled\n />\n ))\n : useNoneScope\n ? []\n : [\n <SuperSelect\n key=\"factory\"\n name=\"factory\"\n label=\"分厂\"\n single\n options={factorySelectOptions}\n placeholder={factoryLoading ? '加载分厂…' : '选择分厂'}\n disabled={factoryLoading || lockFactory}\n allowClear={!lockFactory}\n />,\n hasVarietyPage && varietySelectApi ? (\n <SuperSelect\n key={`variety-${factoryKey || 'none'}`}\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n api={varietySelectApi}\n getSearchProps={varietyGetSearchProps}\n pagination={varietyPagination}\n placeholder={canLoadVariety ? '选择品种' : '请先选择分厂'}\n disabled={lockVariety || !canLoadVariety}\n allowClear={!lockVariety}\n searchPlaceholder=\"搜索品种\"\n />\n ) : (\n <SuperSelect\n key=\"variety\"\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n options={[]}\n placeholder=\"App 未注入 loadVarietyPage\"\n disabled\n />\n ),\n <Input\n key=\"metric\"\n name=\"metric\"\n label=\"关联指标\"\n placeholder={metricPlaceholder || '可选'}\n maxLength={40}\n disabled={lockMetric}\n />,\n ];\n\n const assigneeDefault = String(defaultAssigneeUserId || '').trim();\n\n return (\n <div className={classNames('create-action-form', styles['create-action-form'])}>\n <FormDataSync onChange={handleFormSync} />\n <SetFormFields\n patch={{\n allocatorUserId: defaultAllocatorUserId,\n ...(assigneeDefault ? { assigneeUserId: assigneeDefault } : {}),\n }}\n />\n <FormInfo\n column={1}\n list={[\n <Input\n key=\"title\"\n name=\"title\"\n label=\"任务标题\"\n rule=\"REQ\"\n placeholder={titlePlaceholder || '请输入任务标题'}\n maxLength={120}\n />,\n <TextArea\n key=\"description\"\n name=\"description\"\n label=\"任务描述\"\n labelTips=\"可选\"\n rows={5}\n block\n maxLength={2000}\n placeholder={\n descriptionPlaceholder || '说明目前情况、问题与需改进点,便于执行人理解背景'\n }\n />,\n <SuperSelect\n key=\"dimension\"\n name=\"dimension\"\n label=\"任务类型\"\n rule=\"REQ\"\n single\n options={dimensionOptions}\n placeholder=\"选择任务类型\"\n />,\n <PersonRoleCascaderField\n key=\"allocatorUserId\"\n name=\"allocatorUserId\"\n label=\"分配人\"\n cascadeOptions={allocatorCascade}\n loading={personLoading}\n disabled={allocatorDisabled}\n emptyHint={emptyAllocatorHint}\n placeholder={allocatorPlaceholder}\n defaultUserId={defaultAllocatorUserId}\n />,\n <PersonRoleCascaderField\n key=\"assigneeUserId\"\n name=\"assigneeUserId\"\n label=\"执行人\"\n cascadeOptions={assigneeCascade}\n loading={personLoading}\n emptyHint={emptyAssigneeHint}\n placeholder={assigneePlaceholder}\n defaultUserId={assigneeDefault}\n />,\n <DatePicker\n key=\"dueDate\"\n name=\"dueDate\"\n label=\"截止日期\"\n labelTips=\"可选\"\n format=\"YYYY-MM-DD\"\n placeholder=\"选择截止日期\"\n allowClear\n />,\n ...scopeFields,\n ]}\n />\n {useNoneScope && noneScopeHint ? (\n <p className={classNames('create-action-none-hint', styles['create-action-none-hint'])}>\n {noneScopeHint}\n </p>\n ) : null}\n </div>\n );\n};\n\nexport default CreateActionForm;\n"],"names":["CREATE_ACTION_VARIETY_PAGE_SIZE","CATALOG_LOAD_TIMEOUT_MS","settleWithTimeout","promise","ms","value","reason","resolve","asFactoryValue","raw","renderPersonOptionLabel","name","org","jsxs","styles","jsx","CreateActionForm","scopeLock","varietyLabel","lockedContext","scopeModeProp","titlePlaceholder","descriptionPlaceholder","metricPlaceholder","noneScopeHint","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","allocatorPlaceholder","assigneePlaceholder","allocatorDisabled","defaultAssigneeUserId","onAssigneeOptionsReady","onAllocatorOptionsReady","formApi","useFormApi","assigneeCascade","setAssigneeCascade","useState","allocatorCascade","setAllocatorCascade","factoryOptions","setFactoryOptions","personLoading","setPersonLoading","factoryLoading","setFactoryLoading","defaultAllocatorUserId","setDefaultAllocatorUserId","factoryKey","setFactoryKey","_a","factoryRef","useRef","useLockedContext","useNoneScope","lockFactory","_b","lockVariety","_c","lockMetric","_d","hasVarietyPage","canLoadVariety","factorySelectOptions","useMemo","locked","o","varietySelectApi","loadPage","createPagedSuperSelectApi","query","message","varietyGetSearchProps","pagedSuperSelectGetSearchProps","varietyPagination","pagedSuperSelectPagination","handleFormSync","useCallback","data","next","prev","useEffect","cancelled","usersRes","allocRes","pick","factoriesRes","scopeFields","field","idx","Input","SuperSelect","assigneeDefault","classNames","FormDataSync","SetFormFields","FormInfo","TextArea","PersonRoleCascaderField","DatePicker"],"mappings":"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"}
@@ -16,6 +16,8 @@ export type CreateActionModalProps = {
16
16
  varietyLabel?: string;
17
17
  /** F4:任务标题 placeholder */
18
18
  titlePlaceholder?: string;
19
+ /** F4:任务描述 placeholder */
20
+ descriptionPlaceholder?: string;
19
21
  /** F4:关联指标 placeholder */
20
22
  metricPlaceholder?: string;
21
23
  /** scopeMode=none 时短提示(App 注入) */