diff --git a/src/common/libs/valtio/actions.ts b/src/common/libs/valtio/actions.ts index 1d2c4d5..d2cc0bd 100644 --- a/src/common/libs/valtio/actions.ts +++ b/src/common/libs/valtio/actions.ts @@ -17,6 +17,7 @@ export const stateActions = { state.session.campus = res.data.campus; state.session.company_configs = res.data.company_configs; state.session.permissions = res.data.permissions; + state.session.company = res.data.company; state.session.current_project = res.data.current_project; if (res.data?.token?.access_token) state.storage.access_token = res.data?.token?.access_token; diff --git a/src/common/libs/valtio/state.ts b/src/common/libs/valtio/state.ts index 83c185b..a1dbc1b 100644 --- a/src/common/libs/valtio/state.ts +++ b/src/common/libs/valtio/state.ts @@ -35,6 +35,10 @@ type SessionType = { id: number; name: string; }; + company?: { + id?: number; + name?: string; + }; company_configs?: { config_value?: { logo?: { diff --git a/src/pages/company/employees/index.tsx b/src/pages/company/employees/index.tsx index 11bf919..8586d6f 100644 --- a/src/pages/company/employees/index.tsx +++ b/src/pages/company/employees/index.tsx @@ -40,6 +40,24 @@ export default function Index({ title = '员工管理' }) { { + try { + await Apis.Company.CompanyEmployees.SyncWechatEmployees(); + action?.reload?.(); + } catch (error) { + console.error('同步企微信息失败:', error); + } + }} + /> + ), add: ( { @@ -70,6 +69,17 @@ export default function Update(props: MyBetaModalFormProps) { colProps: { span: 24 }, formItemProps: { ...rulesHelper.phone }, }, + { + title: '初始登录密码', + key: 'password', + type: 'password', + // formItemProps: { ...rulesHelper.text }, + tooltip: '必须超6位数,包含数字、大小字母、#-_@&*特殊字符', + colProps: { span: 24 }, + fieldProps: { + placeholder: '必须超6位数,包含数字、大小字母、#-_@&*特殊字符', + }, + }, MyFormItems.EnumRadio({ key: 'sex', title: '性别', diff --git a/src/pages/quality/renovation/modals/WorkerCreate.tsx b/src/pages/quality/renovation/modals/WorkerCreate.tsx index f5cc2dc..9605062 100644 --- a/src/pages/quality/renovation/modals/WorkerCreate.tsx +++ b/src/pages/quality/renovation/modals/WorkerCreate.tsx @@ -89,7 +89,7 @@ export default function Index(props: MyBetaModalFormProps) { formItemProps: { ...rulesHelper.array }, }), { - title: '证件有效期-开始', + title: '开始通行时间', colProps: { span: 12 }, valueType: 'date', key: 'valid_from', @@ -97,7 +97,7 @@ export default function Index(props: MyBetaModalFormProps) { formItemProps: { ...rulesHelper.text }, }, { - title: '证件有效期-结束', + title: '结束通行时间', colProps: { span: 12 }, valueType: 'date', key: 'valid_to', diff --git a/src/pages/quality/routing_inspection/index.tsx b/src/pages/quality/routing_inspection/index.tsx new file mode 100644 index 0000000..ce3a4de --- /dev/null +++ b/src/pages/quality/routing_inspection/index.tsx @@ -0,0 +1,157 @@ +import { MyColumns, MyPageContainer, MyProTableProps } from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { + HouseWorkOrdersAssignStatusEnum, + HouseWorkOrdersLevelEnum, + HouseWorkOrdersTypeEnum, +} from '@/gen/Enums'; +import WorkOrderShow from '@/pages/work_order/list/modals/WorkOrderShow'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import RenovationAssign from './modals/RenovationAssign'; + +export const RenovationWorkOrdersStatusEnum = { + Pending: { text: '待处理', color: '#FFA500', value: 'Pending' }, + Processing: { text: '处理中', color: '#1E90FF', value: 'Processing' }, + Completed: { text: '已完成', color: '#28A745', value: 'Completed' }, + Closed: { text: '已关闭', color: '#6C757D', value: 'Closed' }, +}; + +export default function Index({ title = '装修验收' }) { + return ( + + > + {...MyProTableProps.props} + headerTitle={title} + request={async (params, sort) => { + return MyProTableProps.request( + { + ...params, + type: [ + HouseWorkOrdersTypeEnum.RenovationInspection.value, + HouseWorkOrdersTypeEnum.RenovationAcceptance.value, + ], + }, + sort, + Apis.WorkOrder.HouseWorkOrders.List, + ); + }} + // toolBarRender={(action) => [toolBarRender(action)]} + columns={[ + MyColumns.ID({ search: false }), + Selects?.AssetProjects({ + title: '选择项目', + key: 'asset_projects_id', + hidden: true, + }), + MyColumns.EnumTag({ + title: '处理状态', + dataIndex: 'status', + valueEnum: RenovationWorkOrdersStatusEnum, + }), + { + title: '项目名称', + dataIndex: 'project_name', + hidden: true, + }, + MyColumns.EnumTag({ + title: '分配状态', + dataIndex: 'assign_status', + valueEnum: HouseWorkOrdersAssignStatusEnum, + }), + MyColumns.EnumTag({ + title: '工单类型', + dataIndex: 'type', + valueEnum: HouseWorkOrdersTypeEnum, + search: false, + }), + // MyColumns.EnumTag({ + // title: '报修位置', + // dataIndex: 'location', + // valueEnum: HouseWorkOrdersLocationEnum, + // search: false, + // }), + { + title: '位置信息', + dataIndex: ['asset_house', 'full_name'], + render: (_, record) => { + return ( + + {record?.asset_house?.full_name + ? record?.asset_house?.full_name + : record?.asset_project?.name} + + ); + }, + search: { + transform: (value) => { + return { house_name: value }; + }, + }, + }, + // { + // title: '工单描述', + // dataIndex: 'content', + // search: false, + // width: 200, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽) + // render: (text) => ( + //
+ // {text} + //
+ // ), + // }, + MyColumns.EnumTag({ + title: '优先级', + dataIndex: 'level', + valueEnum: HouseWorkOrdersLevelEnum, + search: false, + }), + + { + title: '处理人', + dataIndex: ['assign_employee', 'name'], + search: false, + render: (_, record) => { + return `${record?.assign_employee?.name || ''}-${ + record?.assign_employee?.phone || '' + }`; + }, + }, + MyColumns.CreatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + + ), + }), + ]} + /> +
+ ); +} diff --git a/src/pages/quality/routing_inspection/modals/RenovationAssign.tsx b/src/pages/quality/routing_inspection/modals/RenovationAssign.tsx new file mode 100644 index 0000000..0f021a7 --- /dev/null +++ b/src/pages/quality/routing_inspection/modals/RenovationAssign.tsx @@ -0,0 +1,137 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { HouseWorkOrdersTypeEnum } from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; + +export default function WorkOrderAssign( + props: MyBetaModalFormProps & { item: any }, +) { + const [form] = Form.useForm(); + return ( + + {...MyModalFormProps.props} + title={`指派工单`} + wrapperCol={{ span: 19 }} + width="600px" + layout="horizontal" + labelCol={{ span: 5 }} + labelAlign="left" + trigger={ + + } + key={new Date().getTime()} + form={form} + request={async () => { + const res = await Apis.WorkOrder.HouseWorkOrders.Show({ + id: props.item.id, + }); + return { + title: res.data.title, + assign_employee_id: res.data.assign_employee_id, + content: res.data.content, + attachments: res.data.attachments, + complaint_type: res.data.complaint_type, + locationInfo: res.data.asset_house.full_name, + type: res.data.type, + }; + }} + onFinish={async (values: any) => { + Apis.WorkOrder.HouseWorkOrders.Assign({ + ...values, + id: props.item.id, + predict_complete_at: values.predict_complete_at, + }) + .then(() => { + props.reload?.(); + message.success('指派工单成功'); + return true; + }) + .catch(() => false); + }} + columns={[ + MyFormItems.EnumRadio({ + key: 'type', + title: '工单类型', + colProps: { span: 24 }, + valueEnum: HouseWorkOrdersTypeEnum, + readonly: true, + }), + { + key: 'locationInfo', + title: '房屋信息', + colProps: { span: 24 }, + readonly: true, + }, + { + key: 'content', + title: '工单描述', + colProps: { span: 24 }, + readonly: true, + fieldProps: { + disabled: true, + }, + }, + { valueType: 'divider' }, + + // MyFormItems.EnumRadio({ + // key: 'level', + // title: '优先级', + // colProps: { span: 24 }, + // valueEnum: HouseWorkOrdersLevelEnum, + // required: true, + // }), + // { + // key: 'predict_complete_at', + // title: '完成时间要求', + // valueType: 'date', + // colProps: { span: 24 }, + // formItemProps: { ...rulesHelper.text }, + // fieldProps: { + // disabledDate: (current: any) => { + // // 只能选今天及以后的日期 + // const today = new Date(); + // today.setHours(0, 0, 0, 0); // 设置为今天的00:00:00 + // return current && current < today; + // }, + // addonAfter: '前', + // }, + // }, + Selects?.Employees({ + title: '选择处理人', + key: 'assign_employees_id', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + params: { + companies_id: props.item.companies_id, + }, + required: true, + }), + { + key: 'assign_remark', + title: '备注', + valueType: 'textarea', + colProps: { span: 24 }, + fieldProps: { + rows: 3, + // placeholder: '请输入指派备注(可选)', + }, + }, + ]} + /> + ); +}