Commit 478d92e5 authored by XieZhiXiong's avatar XieZhiXiong

Merge branch 'dev-srm' of http://10.0.0.22:3000/lingxi/lingxi-business-paltform into dev-srm

parents 60dbb23a e68b4510
export default {
// '/api/member': {
// 'target': 'http://10.0.0.12:8100',
// 'changeOrigin': true,
// 'pathRewrite': { '^/api/member': '/member' },
// },
'/api': {
'target': process.env.BACK_GATEWAY || 'http://10.0.0.25:8100/',
// 'target': 'http://10.0.0.17:8100/' || 'http://10.0.0.25:8100/',
// 'target': 'http://192.168.168.84:8700/' || 'http://10.0.0.25:8100/',
'target': process.env.BACK_GATEWAY || 'http://10.0.0.10:8100/',
'changeOrigin': true,
'pathRewrite': { '^/api': '' },
'pathRewrite': { '^/api' : '' },
}
}
......@@ -494,12 +494,18 @@ const MemberRoute: RouterChild = {
component: '@/pages/member/memberEvaluate/createEvaluate/index',
},
{
path: '/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add',
path: '/memberCenter/memberAbility/memberEvaluate/createEvaluate/add',
name: '新建考评单',
component: '@/pages/member/memberEvaluate/createEvaluate/add',
hideInMenu: true,
},
{
path: '/memberCenter/memberAbility/memberEvaluate/createEvaluate/edit',
name: '修改考评单',
component: '@/pages/member/memberEvaluate/createEvaluate/add',
hideInMenu: true,
},
{
path: '/memberCenter/memberAbility/memberEvaluate/tobeEvaluate',
name: '待考评打分',
component: '@/pages/member/memberEvaluate/tobeEvaluate/index',
......
This diff is collapsed.
......@@ -254,10 +254,14 @@ const table = (props: any) => {
params.contractId = id;
return new Promise(resolve => {
PublicApi.getContractApplyAmountContractOrderPageList({ ...params }).then(res => {
res.data.data.findIndex((item, index) => {
item.orderTime = item.orderTime ? moment().format('YYYY-MM-DD') : '';
item.keyId = index + 1;
})
if (res.code == 1000) {
if (res.data.data) {
res.data.data.findIndex((item, index) => {
item.orderTime = item.orderTime ? moment().format('YYYY-MM-DD') : '';
item.keyId = index + 1;
})
}
}
resolve(res.data)
})
})
......
......@@ -129,6 +129,9 @@ const QueryList = () => {
{
record.outerStatus == 6 ? <span style={{ color: '#00B37A', marginRight: 20, cursor: 'pointer', }} onClick={() => like(record)}>合同变更</span> : <span> </span>
}
{/* {
record.outerStatus == 9 ? <span style={{ color: '#00B37A', marginRight: 20, cursor: 'pointer', }} >合同已到期</span> : <span> </span>
} */}
</div>
)
}
......
......@@ -12,7 +12,7 @@ const { Option } = Select;
const { Text } = Typography;
const FormList = (props: any) => {
const { currentRef, Row, sourceType } = props;
const { currentRef, Row, sourceType, onBadge } = props;
console.log(sourceType)
const refs = useRef({});
/* 显示模态框 */
......@@ -81,7 +81,7 @@ const FormList = (props: any) => {
}
console.log(sourceType)
console.log(parmas, '请求参数是啥')
fn(parmas).then(res => {
console.log(res);
if (res.code === 1000) {
......@@ -108,7 +108,7 @@ const FormList = (props: any) => {
associatedGoods: sourceType == '1' ? item.productAttributeJson : sourceType == '2' ? item.commodityName : ''// 关联品牌
}
})
console.log(data, '拉拉')
setData(data)
}
})
......@@ -358,6 +358,7 @@ const FormList = (props: any) => {
<Button block type='dashed'><PlusOutlined />选择采购物料</Button>
</div>
}
<Table
rowKey={'index'}
dataSource={dataList}
......
import React, { useRef, useState, useEffect, forwardRef } from 'react';
import { Button, Input, Select, DatePicker, Form, Drawer } from 'antd'
import { Button, Input, Select, DatePicker, Form, Drawer, message } from 'antd'
import {
LinkOutlined,
} from '@ant-design/icons'
......@@ -206,7 +206,7 @@ const Information = (props: any) => {
})
}).catch(error => {
if (error && error.errorFields) {
message.info('请输入基本资料必填内容')
}
})
})
......
......@@ -91,6 +91,7 @@ const Add: React.FC<{}> = (props: any) => {
/* 提交*/
const submit = async () => {
/* 基本信息 */
console.log('basicsVO', '拉拉')
const basicsVO = await currentBasic.current.get();
let totalAmount = 0;
if (basicsVO.data.sourceId == undefined || basicsVO.data.sourceId == '') {
......
......@@ -18,7 +18,7 @@ type Ires = {
message: string
}
function useInitialValue<T, P>(api: (params: P, headers?: HeadersType) => Promise<T & Ires>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T, refresh: (params: P) => void} {
function useInitialValue<T, P>(api: (params: P, headers?: HeadersType) => Promise<T & Ires>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T, refresh: (params: P) => void, setInitialValue: any} {
const [loading, setLoading] = useState<boolean>(false);
const [initialValue, setInitialValue] = useState<null | Ires["data"]>(null);
......@@ -42,7 +42,7 @@ function useInitialValue<T, P>(api: (params: P, headers?: HeadersType) => Promis
fetchData(params)
}, [])
return { loading, initialValue: initialValue as T, refresh }
return { loading, initialValue: initialValue as T, refresh, setInitialValue }
}
export default useInitialValue
......@@ -25,7 +25,7 @@ interface Iprops {
type?: 'radio' | "checkbox",
onSelect?: (record: any, selected: boolean, selectedRows: any[]) => void,
selectedRowKeys?: string[] | number[]
},
} & { [key: string]: any},
ref?: any,
}
......@@ -50,7 +50,7 @@ const CustomizeQueryList: React.FC<Iprops> = React.forwardRef((props: Iprops, re
const onRresh = (values: any) => {
const data = formatData?.(values) || values;
ref.current?.reload(data);
tableRef.current?.reload(data);
}
return (
......
import React from 'react';
import React, { useMemo } from 'react';
import { Spin, Card, Steps, Table, Progress, Button } from 'antd';
import AnchorPage from '@/layouts/AnchorPage';
import theme from '../../../../../config/lingxi.theme.config';
import { projectColumns, recordColumn } from '../columns/detail';
import CustomizeColumn from '@/components/CustomizeColumn';
import AuditProcess from '@/components/AuditProcess';
import useGetDetailCommon from '../hooks/useGetDetailCommon';
import { usePageStatus } from '@/hooks/usePageStatus';
import useInitialValue from '../../common/hooks/useInitialValue';
import { PublicApi } from '@/services/api';
import { GetMemberAppraisalSummaryGetResponse } from '@/services/MemberV2Api';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
const { Step } = Steps;
const EvaluateDetail = () => {
const anchorHeader = [
{
key: 'progress',
name: '流转进度',
},
{
key: 'detail',
name: '基本信息',
},
{
key: 'project',
name: '考评项目'
},
{
key: 'result',
name: '考评结果'
},
{
key: 'record',
name: '流转记录'
}
]
const columnList = [
{
title: '考聘工单号',
value: 'theme',
},
{
title: '会员名称',
value: 'memberName',
},
{
title: '附件',
value: (
<div>123</div>
)
},
{
title: '考评主题',
value: (
<div>123</div>
)
},
{
title: '考察范围',
value: 'date'
},
{
title: '',
value: '',
},
{
title: "内部状态",
value: <div>
一通报考评结果
</div>
},
{
title: "考评完成时间",
value: 'reason'
},
]
const resultList = {
col: [
{
title: '考评最终分',
dataIndex: 'score',
render: (value) => {
return (
<div style={{width: '80px', height: '40px'}}>
<Progress type="dashboard" percent={75} gapDegree={145} width={80} />
</div>
)
}
},
],
col2: [
{
title: '考察日期',
dataIndex: 'date'
},
{
title: '考察代表',
dataIndex: 'present'
},
{
title: "考察原因",
dataIndex: 'reason'
}
],
col3: [
{
title: '考察要求附件',
dataIndex: 'file',
render: (value?) => {
return (
<div>132</div>
)
}
},
]
}
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue }= useInitialValue<GetMemberAppraisalSummaryGetResponse, { id: string }>(PublicApi.getMemberAppraisalSummaryGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue})
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.subject}
anchors={anchorHeader}
// extra={headExtra && headExtra(detailInfo, returnAddress, exchangeAddress)}
>
<AuditProcess title="流转进度" id="progress" />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep > item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={columnList} title="基本信息" column={3} />
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
</div>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={projectColumns}></Table>
<Table columns={projectColumns} dataSource={initialValue?.items}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
{/* <CustomizeColumn id="result" columns={resultList} dataSource={{}} title="考评结果" /> */}
<CustomizeColumn id="result" data={evaluateResultColumn} title="考评结果" />
</div>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
</AnchorPage>
</Spin>
)
......
......@@ -2,7 +2,7 @@ import React, { useRef } from 'react';
import { Card, Space, Button } from 'antd'
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
import useEvaluateColumn from '../hooks/useEvaluateColumn';
import useEvaluateColumn, { setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { createFormActions } from '@formily/antd';
......@@ -12,29 +12,23 @@ import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilte
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { Link } from 'react-router-dom';
import { GetMemberAppraisalWaitPublishPageRequest, GetMemberAppraisalWaitPublishPageResponse, GetMemberAppraisalWaitPublishPageResponseDetail } from '@/services/MemberV2Api/id9028';
// import { GetMemberAppraisalWaitPublishPageRequest, GetMemberAppraisalWaitPublishPageResponse, GetMemberAppraisalWaitPublishPageResponseDetail } from '@/services/MemberV2Api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { GetMemberAppraisalSummaryPageResponseDetail, GetMemberAppraisalSummaryPageRequest, GetMemberAppraisalSummaryPageResponse } from '@/services/MemberV2Api';
// const formActions = createFormActions();
const defaultColumns = setColumnsByLinks({
detail: '/memberCenter/memberAbility/memberEvaluate/detail'
});
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const { fetchListData } = useFetchList();
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitPublishPageResponseDetail>([
// {
// title: '操作',
// render: (_text, _record) => (
// <Space>
// <a>删除</a>
// </Space>
// )
// }
])
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalSummaryPageResponseDetail>(defaultColumns, [])
const controllerBtns = (
<div>
<Link to={"/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add"}>
<Link to={"/memberCenter/memberAbility/memberEvaluate/createEvaluate/add"}>
<Button type="primary">
<PlusOutlined /> 新建
</Button>
......@@ -42,8 +36,8 @@ const List: React.FC<Iprops> = (props: Iprops) => {
</div>
)
const handleFetch = async (params: Partial<GetMemberAppraisalWaitPublishPageRequest>) => {
const result = fetchListData<Partial<GetMemberAppraisalWaitPublishPageRequest>, GetMemberAppraisalWaitPublishPageResponse>(PublicApi.getMemberAppraisalWaitPublishPage, params);
const handleFetch = async (params: Partial<GetMemberAppraisalSummaryPageRequest>) => {
const result = fetchListData<Partial<GetMemberAppraisalSummaryPageRequest>, GetMemberAppraisalSummaryPageResponse>(PublicApi.getMemberAppraisalSummaryPage, params);
return result
}
......
import { ColumnsType } from 'antd/es/table';
import React from 'react';
/**
* 详情页考评项目
......@@ -11,39 +12,71 @@ export const projectColumns: ColumnsType<any> = [
},
{
title: '考评项目',
dataIndex: "projectName"
dataIndex: "name"
},
{
title: '状态',
dataIndex: "status"
title: '内容',
dataIndex: "content"
},
{
title: '考评人',
dataIndex: 'member'
dataIndex: 'userName'
},
{
title: '考评人打分',
dataIndex: 'memberScoring'
dataIndex: 'sendAppraisal',
render: (text, record) => {
return record.sendAppraisal ? '是' : '否'
}
},
{
title: '权重',
dataIndex: 'weight'
dataIndex: 'scoreWeight'
},
{
title: '考评计分',
dataIndex: 'scoring'
dataIndex: 'grade'
},
{
title: '得分',
dataIndex: 'score'
dataIndex: 'score',
render: (text, record) => {
return record.grade * record.scoreWeight / 100
},
},
{
title: '考评模板',
dataIndex: 'template',
dataIndex: 'templates',
render: (text, record) => {
return (
<div style={{display: 'flex', flexDirection: "column"}}>
{
record.templates.map((_row) => {
return (
<a key={_row.url} href={_row.url}>{_row.name}</a>
)
})
}
</div>
)
}
},
{
title: '考评报告',
dataIndex: 'report'
dataIndex: 'appraisalReport',
render: (text, record) => {
return (
<div style={{display: 'flex', flexDirection: "column"}}>
{
record.appraisalReport.map((_row) => {
return (
<a key={_row.url} href={_row.url}>{_row.name}</a>
)
})
}
</div>
)
}
}
]
......@@ -54,31 +87,31 @@ export const recordColumn: ColumnsType<any> = [
dataIndex: 'id'
},
{
title: '操作角色',
dataIndex: 'role',
title: '操作',
dataIndex: 'operatorName',
},
{
title: "部门",
dataIndex: 'apartment',
dataIndex: 'operatorOrgName',
},
{
title: "职位",
dataIndex: "pos"
dataIndex: "operatorJobTitle"
},
{
title: '状态',
dataIndex: 'status'
dataIndex: 'statusName'
},
{
title: "操作",
dataIndex: 'action'
dataIndex: 'operation'
},
{
title: "操作时间",
dataIndex: 'actionTime'
dataIndex: 'createTime'
},
{
title: "审核意见",
dataIndex: 'suggest'
dataIndex: 'remark'
},
]
......@@ -27,11 +27,11 @@ const EvaluateProject: React.FC<Iprops> & { isFieldComponent: boolean } = (props
const columns = useMemo(() => [
{
title: '评估项目',
dataIndex: 'subMemberId'
dataIndex: 'name'
},
{
title: '评估内容',
dataIndex: 'name'
dataIndex: 'typeDesc'
},
], [])
......@@ -66,7 +66,7 @@ const EvaluateProject: React.FC<Iprops> & { isFieldComponent: boolean } = (props
* 业务组件,未看到复用情况,暂时写死
*/
const handleFetchData = useCallback(async (params: any): Promise<any> => {
const { data, code } = await PublicApi.getMemberInspectMembers(params);
const { data, code } = await PublicApi.getMemberAppraisalItemConfigPage(params);
if (code === 1000) {
return data;
}
......@@ -84,7 +84,7 @@ const EvaluateProject: React.FC<Iprops> & { isFieldComponent: boolean } = (props
onOk={handleOnOk}
fetchData={handleFetchData}
tableProps={{
rowKey: (record) => `${record.subMemberId}_${record.subRoleId}`,
rowKey: (record) => `${record.type}`,
}}
mode={"checkbox"}
value={value}
......
......@@ -15,7 +15,10 @@ import styles from './index.less'
const formActions = createFormActions();
interface Iprops {
value: boolean,
value: {
userId: number,
name: string,
},
editable: boolean,
schema: any,
props: {
......@@ -44,7 +47,7 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
const columns: ColumnsType = [
{
title: '序号',
dataIndex: 'id'
dataIndex: 'userId'
},
{
title: '姓名',
......@@ -52,37 +55,20 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
},
{
title: '手机号码',
dataIndex: 'telephone',
dataIndex: 'phone',
},
{
title: '所属机构',
dataIndex: 'org'
dataIndex: 'orgName'
},
{
title: '职位',
dataIndex: 'pos'
dataIndex: 'jobTitle'
}
];
const fetchListData = async (params: any) => {
if(fetchData) {
return await fetchData(params);
}
return new Promise((resolve) => {
setTimeout(() => {
resolve({
totalCount: 0,
data: [{
id: 1,
name: '123'
},
{
id: 2,
name: '456'
}]
})
}, 1000)
})
return await fetchData(params);
}
const onSelectChange = (record, selected: Boolean, selectedRows) => {
......@@ -120,7 +106,7 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
>
<StandardTable
tableProps={{
rowKey: 'id',
rowKey: 'userId',
}}
columns={columns}
currentRef={ref}
......@@ -128,7 +114,7 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
rowSelection={{
type: 'radio',
onSelect: onSelectChange,
selectedRowKeys: value ? [value?.id] : [],
selectedRowKeys: value ? [value?.userId] : [],
}}
controlRender={
<NiceForm
......
......@@ -24,13 +24,20 @@ const memberSchema: ISchema = {
grid: true,
full: true,
autoRow: true,
columns: 6,
columns: 3,
},
properties: {
summary: {
orgName: {
type: 'string',
'x-component-props': {
placeholder: '通知单摘要',
placeholder: '所属机构',
allowClear: true,
},
},
jobTitle: {
type: 'string',
'x-component-props': {
placeholder: '职位',
allowClear: true,
},
},
......
import React, { useRef } from 'react';
import { Card, Space, Button } from 'antd'
import React, { useRef, useState } from 'react';
import { Card, Space, Button, Spin } from 'antd'
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
import useEvaluateColumn from '../hooks/useEvaluateColumn';
import useEvaluateColumn, { setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { createFormActions } from '@formily/antd';
......@@ -14,17 +14,38 @@ import CustomizeQueryList from '../../components/CustomizeQueryList';
import { Link } from 'react-router-dom';
import { GetMemberAppraisalWaitPublishPageRequest, GetMemberAppraisalWaitPublishPageResponse, GetMemberAppraisalWaitPublishPageResponseDetail } from '@/services/MemberV2Api/id9028';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
const defaultColumns = setColumnsByLinks();
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const ref = useRef<any>({})
const [ rowSelection, rowController ] = useRowSelectionTable();
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const { fetchListData } = useFetchList();
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitPublishPageResponseDetail>([
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitPublishPageResponseDetail>(defaultColumns, [
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>删除</a>
{
_record.publish && (
<Spin spinning={submitLoading}>
<a onClick={() => handlePublic([_record.id])}>发布</a>
</Spin>
)
}
{
_record.updateOrDel && (
<>
<Link to={`/memberCenter/memberAbility/memberEvaluate/createEvaluate/edit?id=${_record.id}`}>修改</Link>
<Spin spinning={submitLoading}>
<a onClick={() => handleBatchRemove([_record.id])}>删除</a>
</Spin>
</>
)
}
</Space>
)
}
......@@ -32,13 +53,11 @@ const List: React.FC<Iprops> = (props: Iprops) => {
const controllerBtns = (
<Space>
<Link to={"/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add"}>
<Button type="primary">
<PlusOutlined /> 新建
</Button>
<Link to={"/memberCenter/memberAbility/memberEvaluate/createEvaluate/add"}>
<Button type="primary" icon={<PlusOutlined />}>新建</Button>
</Link>
<Button type="ghost">批量删除</Button>
<Button>批量发布</Button>
<Button loading={submitLoading} onClick={() => handleBatchRemove(rowController.selectedRowKeys)} type="ghost">批量删除</Button>
<Button loading={submitLoading} onClick={() => handlePublic(rowController.selectedRowKeys)}>批量发布</Button>
</Space>
)
......@@ -47,11 +66,32 @@ const List: React.FC<Iprops> = (props: Iprops) => {
return result
}
const handlePublic = async (ids: number[]) => {
setSubmitLoading(true)
const { code, data } = await PublicApi.postMemberAppraisalWaitPublishPublish({ids: ids});
setSubmitLoading(false)
if (code === 1000) {
ref.current?.submit();
}
}
const handleBatchRemove = async (ids: number[]) => {
setSubmitLoading(true)
const { code, data } = await PublicApi.postMemberAppraisalDelete({ids: ids});
setSubmitLoading(false)
if (code === 1000) {
ref.current?.submit();
}
}
return (
<Card>
<CustomizeQueryList
columns={columns}
ref={ref}
schema={evaluationListSchema}
rowSelection={rowSelection as any}
fetchListData={handleFetch}
expressionScope={{
controllerBtns,
......
......@@ -17,55 +17,69 @@ const TYPE = ['success', 'warning', 'default', 'danger', 'primary', 'nobility']
* 根据类型获取考评column
*/
function useEvaluateColumn<T extends { [key: string]: any } = any>(mergeColumn?: ColumnsType<T>) {
const defaultColumns: ColumnsType<T> = [
const commonColumns = [
{
title: '会员名称',
dataIndex: 'name',
},
{
title: '考评范围',
dataIndex: 'type',
render: (text, record) => {
return (
<div>
{`${record.appraisalDayStart} 至 ${record.appraisalDayEnd}`}
</div>
)
}
// filters: [],
// onFilter: (_value, record) => record.type === _value,
},
{
title: '考评完成时间',
dataIndex: 'completeDay',
sorter: (_a, _b) => _a.date - _b.date,
},
{
title: '内部状态',
dataIndex: 'status',
filters: [],
onFilter: (_value, record) => record.type === _value,
render: (text, record) => {
const offset = record.status % (TYPE.length)
return (
<StatusTag type={TYPE[offset] as "success"} title={record.statusName} />
)
}
},
]
export const setColumnsByLinks = (link?: { [key: string]: string }) => {
const linksColumns: ColumnsType<any> = [
{
title: '考评单号/主题',
dataIndex: 'name',
dataIndex: 'des',
render: (text, record) => {
return (
<div>
<Link to={`/memberCenter/memberAbility/memberEvaluate/allQuery/detail?id=${record.id}`}>{record.id}</Link>
<div style={{ display: 'flex', flexDirection: 'column', }}>
{
link?.['detail'] && (
<Link to={`${link?.['detail']}?id=${record.id}`}>{record.id}</Link>
) || (
<span>{record.id}</span>
)
}
<p>{record.subject}</p>
</div>
)
}
},
{
title: '会员名称',
dataIndex: 'name',
},
{
title: '考评范围',
dataIndex: 'type',
render: (text, record) => {
return (
<div>
{`${record.appraisalTimeStart} 至 ${record.appraisalTimeEnd}`}
</div>
)
}
// filters: [],
// onFilter: (_value, record) => record.type === _value,
},
{
title: '考评完成时间',
dataIndex: 'completeTime',
sorter: (_a, _b) => _a.date - _b.date,
},
{
title: '内部状态',
dataIndex: 'status',
filters: [],
onFilter: (_value, record) => record.type === _value,
render: (text, record) => {
const offset = record.status % (TYPE.length)
return (
<StatusTag type={TYPE[offset] as "success"} title={record.status} />
)
}
},
];
]
return linksColumns.concat(commonColumns);
}
function useEvaluateColumn<T extends { [key: string]: any } = any>(defaultColumns: ColumnsType<T>, mergeColumn?: ColumnsType<T>) {
const [columns, setColumns] = useState(() => defaultColumns.concat(mergeColumn));
const [statusOptions, setStatusOptions] = useState<OptionType[]>([]);
......
import React, { useMemo, useState } from 'react';
import { Progress } from 'antd';
import { initial } from 'lodash';
/**
* 获取考评详情页的公共部分
......@@ -40,37 +41,40 @@ function useGetDetailCommon(options: Options) {
const basicInfoList = useMemo(() => {
return [
{
title: '考聘工单号',
value: 'theme',
title: '考单号',
value: initialValue?.id,
},
{
title: '会员名称',
value: 'memberName',
value: initialValue?.name,
},
{
title: '附件',
value: (
<div>
{
initialValue?.files?.map((_row) => _row.name)
}
</div>
{
initialValue?.attachments?.map((_row) => {
return (
<a key={_row.url} href={_row.url}>{_row.name}</a>
)
})
}
</div>
)
},
{
title: '考评主题',
value: (
<div>123</div>
)
value: initialValue?.subject,
},
{
title: '考察范围',
value: 'date'
},
{
title: '',
value: '',
span: 2,
value: (
<div>
{`${initialValue?.appraisalDayStart} 至 ${initialValue?.appraisalDayEnd} `}
</div>
)
},
{
title: "内部状态",
......@@ -80,7 +84,7 @@ function useGetDetailCommon(options: Options) {
},
{
title: "考评完成时间",
value: 'reason'
value: initialValue?.completeDay
},
]
}, [initialValue]);
......@@ -91,18 +95,26 @@ function useGetDetailCommon(options: Options) {
title: '考评最终分',
value: (
<div style={{width: '60px', height: '30px'}}>
<Progress type="dashboard" percent={75} gapDegree={145} width={60} />
<Progress type="dashboard" percent={initialValue?.totalScore} gapDegree={145} width={60} />
</div>
)
},
{
title: '考察结果',
value: 'b级,需要整改',
value: initialValue?.result
},
{
title: '附件',
value: (
<div>123</div>
<div>
{
initialValue?.resultAttachments?.map((_row) => {
return (
<a key={_row.url} href={_row.url}>{_row.name}</a>
)
})
}
</div>
)
},
{
......@@ -111,10 +123,10 @@ function useGetDetailCommon(options: Options) {
},
{
title: '通知考评结果',
value: '是'
value: initialValue?.notifyMember ? '是' : '否'
}
]
}, [])
}, [initialValue])
return {anchorHeader, basicInfoList, evaluateResultColumn}
}
......
......@@ -112,7 +112,7 @@ export const evaluateAddSchema: ISchema = {
// children: '{{selectProject}}',
},
},
"array": {
"items": {
"type": "array",
"x-component": "arraytable",
"x-component-props": {
......@@ -137,7 +137,7 @@ export const evaluateAddSchema: ISchema = {
"x-component-props": {
}
},
projectName: {
name: {
title: '考评项目',
type: 'string',
"x-component-props": {},
......@@ -145,7 +145,7 @@ export const evaluateAddSchema: ISchema = {
width: 160,
}
},
projectContent: {
content: {
title: '考评内容',
type: 'textarea',
'x-props': {
......@@ -165,11 +165,12 @@ export const evaluateAddSchema: ISchema = {
width: 128,
},
"x-component": "FormilySelectMember",
// "x-component-props": {
// children: '选择考评人'
// }
"x-component-props": {
// children: '选择考评人'
fetchData: '{{fetchUserData}}'
}
},
memberScore: {
sendAppraisal: {
title: "考评人打分",
type: 'string',
'x-component': 'FormilyCheckbox',
......@@ -178,14 +179,14 @@ export const evaluateAddSchema: ISchema = {
}
},
weight: {
scoreWeight: {
title: '考评权重',
type: 'string',
"x-props": {
width: 95,
},
},
score1: {
grade: {
title: '考评计分',
type: 'string',
"x-props": {
......@@ -194,14 +195,16 @@ export const evaluateAddSchema: ISchema = {
"x-component-props": {}
},
score: {
title: '考评内容',
title: '得分',
"x-props": {
width: 95,
},
editable: false,
"x-component-props": {},
type: 'string'
},
moban: {
templates: {
title: '考评模板',
type: "object",
'x-component': 'FormilyUploadFiles',
......@@ -214,7 +217,7 @@ export const evaluateAddSchema: ISchema = {
width: 180,
}
},
baogao: {
reports: {
title: '考评报告',
type: "object",
'x-component': 'FormilyUploadFiles',
......
import React, { useEffect, useState } from 'react';
import React, { useEffect, useMemo, useState } from 'react';
import { Spin, Card, Table, Button, Drawer } from 'antd';
import AnchorPage from '@/layouts/AnchorPage';
import CustomizeColumn from '@/components/CustomizeColumn';
......@@ -12,82 +12,111 @@ import { SchemaForm, createFormActions} from '@formily/antd'
import { scoringSchema } from './schema';
import useModal from '../hooks/useModal';
import styles from './detail.less';
import { usePageStatus } from '@/hooks/usePageStatus';
import useInitialValue from '@/pages/handling/common/hooks/useInitialValue';
import { GetMemberAppraisalSummaryGetResponse } from '@/services/MemberV2Api';
import { PublicApi } from '@/services/api';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
type SubmitDataType = {
items: {
scoring: string,
id: number,
reports: {
name: string,
url: string
}[],
[key: string]: any
}
}
const formActions = createFormActions();
const TobeEvaluateDetail = () => {
const { visible, toggle } = useModal()
const [initialValue, setInitialValue] = useState({});
const { anchorHeader, basicInfoList } = useGetDetailCommon({blackList: ['project', 'result'], initialValue: initialValue})
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue }= useInitialValue<GetMemberAppraisalSummaryGetResponse, { id: string }>(PublicApi.getMemberAppraisalSummaryGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue})
const [hasScoring, setHasScoring] = useState<boolean>(false);
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
/**
* @todo 抽出来
*/
useEffect(() => {
async function init() {
return new Promise<void>((resolve) => {
setTimeout(() => {
setInitialValue({
theme: 'hellow',
files: [
{
name: '百度12312',
url: "http://www.baidu.com"
}
],
scoringList: [
{
id: 1,
projectName: "123",
memberName: {
"id": 2,
"name":"456"
},
baogao: [
{
name: '123',
url: 'http://www.baidu.com/zzz.png',
}
]
}
]
})
resolve()
}, 1500)
})
const scoringItems = useMemo(() => {
if (!initialValue) {
return {}
}
init();
}, [])
const items = initialValue?.items;
return {
items: items
}
}, [initialValue])
const onDrawerConfirm = () => {
// handleConfirm()
formActions.submit();
}
const onSubmit = (value: any) => {
console.log(value);
// handleConfirm();
toggle(false);
const onSubmit = async (value: SubmitDataType) => {
const itemList = value.items.map((_row) => {
return {
id: _row.id,
grade: _row.scoring,
reports: _row.reports?.map((_record) => ({
url: _record.url,
name: _record.name
})) || []
}
})
const postData = {
id: id,
items: itemList,
}
setSubmitLoading(true)
const { code, data } = await PublicApi.postMemberAppraisalWaitGradeGrade(postData);
setSubmitLoading(false)
if (code === 1000) {
setHasScoring(true);
toggle(false);
}
}
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.name}
anchors={anchorHeader}
extra={
<Button onClick={() => toggle(true)}>考评打分</Button>
(
!hasScoring && (
<Button type="primary" onClick={() => toggle(true)}>考评打分</Button>
)
)
}
>
<AuditProcess title="流转进度" id="progress" />
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep >= item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div id="detail" style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn data={basicInfoList} title="基本信息" column={3} />
</div>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
</AnchorPage>
<Drawer
title="考评打分"
......@@ -99,7 +128,7 @@ const TobeEvaluateDetail = () => {
<Button onClick={() => toggle(false)} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={onDrawerConfirm} type="primary">
<Button loading={submitLoading} onClick={onDrawerConfirm} type="primary">
确认
</Button>
</div>
......@@ -108,7 +137,7 @@ const TobeEvaluateDetail = () => {
<div className={styles.form}>
<SchemaForm
onSubmit={onSubmit}
initialValues={initialValue}
initialValues={scoringItems}
schema={scoringSchema}
actions={formActions}
components={{
......
import React from 'react';
import { Card, Space } from 'antd'
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import useEvaluateColumn, { setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { querySchema } from './schema';
import useFetchList from '../hooks/useFetchList';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { GetMemberAppraisalWaitGradePageResponseDetail } from '@/services/MemberV2Api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { Link } from 'umi';
interface Iprops {};
const defaultColumns = setColumnsByLinks(
{
detail: '/memberCenter/memberAbility/memberEvaluate/tobeEvaluate/detail'
}
);
const List: React.FC<Iprops> = (props: Iprops) => {
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitGradePageResponseDetail>(defaultColumns, [
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>考评打分</a>
<Link to={`/memberCenter/memberAbility/memberEvaluate/tobeEvaluate/detail?id=${_record.id}`}>考评打分</Link>
</Space>
)
}
])
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
const result = fetchListData(PublicApi.getMemberAppraisalWaitGradePage, params);
return result
}
......@@ -35,12 +45,8 @@ const List: React.FC<Iprops> = (props: Iprops) => {
schema={querySchema}
fetchListData={handleFetch}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
useStateFilterSearchLinkageEffect($, actions, 'name', FORM_FILTER_PATH);
useAsyncSelect('status', fetchStatusOptions);
}}
/>
</Card>
......
......@@ -15,9 +15,9 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索通知单号',
placeholder: '搜索会员名称',
align: 'flex-left',
tip: '输入通知单号进行搜索',
tip: '输入会员名称进行搜索',
},
},
[FORM_FILTER_PATH]: {
......@@ -27,39 +27,27 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
grid: true,
full: true,
autoRow: true,
columns: 6,
columns: 3,
},
properties: {
summary: {
subject: {
type: 'string',
'x-component-props': {
placeholder: '通知单摘要',
placeholder: '考评主题',
allowClear: true,
style: {
width: 160,
},
},
},
processName: {
type: 'string',
'x-component-props': {
placeholder: '加工企业名',
allowClear: true,
},
},
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '外部状态(全部)',
allowClear: true,
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'[appraisalDayStart,appraisalDayEnd]': {
type: 'daterange',
'x-component-props': {
placeholder: '内部状态(全部)',
placeholder: ['考评开始时间', '考评完成时间'],
allowClear: true,
style: {
width: 240,
},
},
},
submit: {
......@@ -81,7 +69,7 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
export const scoringSchema: ISchema = {
type: 'object',
properties: {
scoringList: {
items: {
"type": "array",
"x-component": "arraytable",
"x-component-props": {
......@@ -104,17 +92,19 @@ export const scoringSchema: ISchema = {
},
},
projectName: {
name: {
title: '考评项目',
type: 'string',
"x-component-props": {},
editable: false,
"x-props": {
width: 160,
}
},
projectContent: {
content: {
title: '考评内容',
type: 'textarea',
editable: false,
'x-props': {
width: 424,
},
......@@ -125,7 +115,7 @@ export const scoringSchema: ISchema = {
}
}
},
'memberName.name': {
'userName': {
title: "考评人",
type: 'string',
editable: false,
......@@ -137,7 +127,7 @@ export const scoringSchema: ISchema = {
// children: '选择考评人'
// }
},
moban: {
templates: {
title: '考评模板',
type: "object",
'x-component': 'FormilyUploadFiles',
......@@ -146,11 +136,12 @@ export const scoringSchema: ISchema = {
buttonText: '上传',
fileContainerClassName: 'customizeFileContainer'
},
editable: false,
"x-props": {
width: 180,
}
},
baogao: {
reports: {
title: '考评报告',
type: "object",
'x-component': 'FormilyUploadFiles',
......@@ -163,12 +154,22 @@ export const scoringSchema: ISchema = {
width: 180,
}
},
score1: {
scoring: {
title: '考评计分',
type: 'string',
"x-props": {
width: 95,
},
'x-rules': [
{
required: true,
message: '请填写考评计分'
},
{
pattern: /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/,
message: '请填写数字,可保留两位小数'
}
],
"x-component-props": {}
},
}
......
import React from 'react';
import React, { useMemo, useState } from 'react';
import { Spin, Card, Table, Button } from 'antd';
import { CheckCircleOutlined } from '@ant-design/icons';
import AnchorPage from '@/layouts/AnchorPage';
......@@ -11,38 +11,66 @@ import useFetchInfo from '../hooks/useFetchInfo';
import useModal from '../hooks/useModal';
import theme from '../../../../../config/lingxi.theme.config';
import ExamVerify, { SubmitDataTypes } from '@/components/ExamVerify';
import { usePageStatus } from '@/hooks/usePageStatus';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
import { GetMemberAppraisalSummaryGetResponse } from '@/services/MemberV2Api';
import { history } from 'umi'
import useInitialValue from '../../common/hooks/useInitialValue';
const TobeEvaluateDetail = () => {
const { initialValue } = useFetchInfo(PublicApi.getMemberAbilitySubGet, { id: 1})
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: [], initialValue: initialValue});
const onSubmitRes = () => {
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue }= useInitialValue<GetMemberAppraisalSummaryGetResponse, { id: string }>(PublicApi.getMemberAppraisalSummaryGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: [], initialValue: initialValue})
const [submitLoading, setSubmitLoading] = useState<boolean>(false)
const onSubmitRes = async () => {
setSubmitLoading(true)
const { code, data } = await PublicApi.postMemberAppraisalWaitNotificationNotification({ids: [id]});
setSubmitLoading(false)
if (code === 1000) {
history.goBack();
}
}
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.subject}
anchors={anchorHeader}
extra={
<Button type="primary" onClick={onSubmitRes}>提交考评结果</Button>
<Button loading={submitLoading} type="primary" onClick={onSubmitRes} icon={<CheckCircleOutlined />}>单据审核</Button>
}
>
<AuditProcess title="流转进度" id="progress" />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep > item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
</div>
<Card title="考评项目" id="project">
<Table columns={projectColumns}></Table>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={projectColumns} dataSource={initialValue?.items}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="result" data={evaluateResultColumn} title="基本信息" column={3} />
<CustomizeColumn id="result" data={evaluateResultColumn} title="考评结果" />
</div>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
</AnchorPage>
</Spin>
......
import React from 'react';
import React, { useRef, useState } from 'react';
import { Card, Space, Button } from 'antd'
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import useEvaluateColumn,{ setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { GetMemberAppraisalWaitNotificationPageRequest, GetMemberAppraisalWaitNotificationPageResponseDetail } from '@/services/MemberV2Api';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { Link } from 'umi';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
const defaultColumns = setColumnsByLinks({
detail: '/memberCenter/memberAbility/memberEvaluate/tobeInformed',
});
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const ref = useRef<any>({})
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const [ rowSelection, rowController ] = useRowSelectionTable();
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitNotificationPageResponseDetail>(defaultColumns,[
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>通报</a>
<Link to={`/memberCenter/memberAbility/memberEvaluate/tobeInformed/detail?id=${_record.id}`}>通报</Link>
</Space>
)
}
......@@ -25,12 +36,24 @@ const List: React.FC<Iprops> = (props: Iprops) => {
const controllerBtns = (
<Space>
<Button>批量通报</Button>
<Button loading={submitLoading} onClick={() => handleBatchNotice(rowController.selectedRowKeys)} >批量通报</Button>
</Space>
)
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
const handleBatchNotice = async (ids: number[]) => {
setSubmitLoading(true)
const { code, data } = await PublicApi.postMemberAppraisalWaitNotificationNotification({ids: ids});
setSubmitLoading(false)
if (code === 1000) {
ref.current?.submit();
}
}
const handleFetch = async (params: GetMemberAppraisalWaitNotificationPageRequest) => {
const result = fetchListData(PublicApi.getMemberAppraisalWaitNotificationPage, params);
return result
}
......@@ -38,11 +61,13 @@ const List: React.FC<Iprops> = (props: Iprops) => {
<Card>
<CustomizeQueryList
columns={columns}
rowSelection={rowSelection as any}
schema={evaluationListSchema}
fetchListData={handleFetch}
expressionScope={{controllerBtns}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'name', FORM_FILTER_PATH);
useAsyncSelect('status', fetchStatusOptions);
}}
/>
</Card>
......
import React from 'react';
import React, { useMemo } from 'react';
import { Spin, Card, Table, Button } from 'antd';
import { CheckCircleOutlined } from '@ant-design/icons';
import AnchorPage from '@/layouts/AnchorPage';
......@@ -7,55 +7,81 @@ import AuditProcess from '@/components/AuditProcess';
import { PublicApi } from '@/services/api';
import { projectColumns, recordColumn } from '../columns/detail';
import useGetDetailCommon from '../hooks/useGetDetailCommon';
import useFetchInfo from '../hooks/useFetchInfo';
import useModal from '../hooks/useModal';
import theme from '../../../../../config/lingxi.theme.config';
import ExamVerify, { SubmitDataTypes } from '@/components/ExamVerify';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
import useInitialValue from '../../common/hooks/useInitialValue';
import { usePageStatus } from '@/hooks/usePageStatus';
import { GetMemberAppraisalWaitAuditOneGetResponse } from '@/services/MemberV2Api';
import { history } from 'umi';
const TobeEvaluateDetail = () => {
const { initialValue } = useFetchInfo(PublicApi.getMemberAbilitySubGet, { id: 1})
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: [], initialValue: initialValue});
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue }= useInitialValue<GetMemberAppraisalWaitAuditOneGetResponse, { id: string }>(PublicApi.getMemberAppraisalWaitAuditOneGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue})
const { visible, toggle } = useModal();
const onSubmit = (values: SubmitDataTypes) => {
const onSubmit = async (values: SubmitDataTypes) => {
console.log(values)
const { data, code } = await PublicApi.postMemberAppraisalWaitAuditOneAudit({
id: id,
agree: values.status,
reason: values.reason,
})
if(code === 1000) {
history.goBack();
}
}
const onCancel = () => {
toggle(false);
}
const examValue = {
status: 0,
reason: '123'
}
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.subject}
anchors={anchorHeader}
extra={
<Button type="primary" onClick={() => toggle(true)} icon={<CheckCircleOutlined />}>单据审核</Button>
}
>
<AuditProcess title="流转进度" id="progress" />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep > item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
</div>
<Card title="考评项目" id="project">
<Table columns={projectColumns}></Table>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={projectColumns} dataSource={initialValue?.items}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="result" data={evaluateResultColumn} title="基本信息" column={3} />
<CustomizeColumn id="result" data={evaluateResultColumn} title="考评结果" />
</div>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
</AnchorPage>
<ExamVerify visible={visible} title="审核" onSubmit={onSubmit} onCancel={onCancel} value={examValue} />
<ExamVerify visible={visible} title="审核" onSubmit={onSubmit} onCancel={onCancel} showLabel={false} />
</Spin>
)
}
......
import React from 'react';
import React, { useRef, useState } from 'react';
import { Card, Space, Button } from 'antd'
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import useEvaluateColumn,{ setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { GetMemberAppraisalWaitAuditOnePageRequest, GetMemberAppraisalWaitAuditOnePageResponse, GetMemberAppraisalWaitAuditOnePageResponseDetail } from '@/services/MemberV2Api';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { Link } from 'umi';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
const defaultColumns = setColumnsByLinks({
detail: '/memberCenter/memberAbility/memberEvaluate/tobeReviewI',
});
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const ref = useRef<any>({})
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const [ rowSelection, rowController ] = useRowSelectionTable();
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitAuditOnePageResponseDetail>(defaultColumns,[
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>审核</a>
<Link to={`/memberCenter/memberAbility/memberEvaluate/tobeReviewI/detail?id=${_record.id}`}>审核</Link>
</Space>
)
}
......@@ -25,12 +36,21 @@ const List: React.FC<Iprops> = (props: Iprops) => {
const controllerBtns = (
<Space>
<Button>批量审核通过</Button>
<Button loading={submitLoading} onClick={() => handleBatchRemove(rowController.selectedRowKeys)} type="ghost">批量审核通过</Button>
</Space>
)
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
const handleBatchRemove = async (ids: number[]) => {
// setSubmitLoading(true)
// const { code, data } = await PublicApi.postMemberAppraisalDelete({ids: ids});
// setSubmitLoading(false)
// if (code === 1000) {
// ref.current?.submit();
// }
}
const handleFetch = async (params: GetMemberAppraisalWaitAuditOnePageRequest) => {
const result = fetchListData(PublicApi.getMemberAppraisalWaitAuditOnePage, params);
return result
}
......@@ -38,11 +58,13 @@ const List: React.FC<Iprops> = (props: Iprops) => {
<Card>
<CustomizeQueryList
columns={columns}
rowSelection={rowSelection as any}
schema={evaluationListSchema}
fetchListData={handleFetch}
expressionScope={{controllerBtns}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'name', FORM_FILTER_PATH);
useAsyncSelect('status', fetchStatusOptions);
}}
/>
</Card>
......
import React from 'react';
import React, { useMemo } from 'react';
import { Spin, Card, Table, Button } from 'antd';
import { CheckCircleOutlined } from '@ant-design/icons';
import AnchorPage from '@/layouts/AnchorPage';
......@@ -7,57 +7,83 @@ import AuditProcess from '@/components/AuditProcess';
import { PublicApi } from '@/services/api';
import { projectColumns, recordColumn } from '../columns/detail';
import useGetDetailCommon from '../hooks/useGetDetailCommon';
import useFetchInfo from '../hooks/useFetchInfo';
import useModal from '../hooks/useModal';
import theme from '../../../../../config/lingxi.theme.config';
import ExamVerify, { SubmitDataTypes } from '@/components/ExamVerify';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
import useInitialValue from '../../common/hooks/useInitialValue';
import { usePageStatus } from '@/hooks/usePageStatus';
import { GetMemberAppraisalWaitAuditTwoGetResponse } from '@/services/MemberV2Api';
import { history } from 'umi';
const TobeEvaluateDetail = () => {
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue }= useInitialValue<GetMemberAppraisalWaitAuditTwoGetResponse, { id: string }>(PublicApi.getMemberAppraisalWaitAuditTwoGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue})
const TobeReviewDetailII = () => {
const { initialValue } = useFetchInfo(PublicApi.getMemberAbilitySubGet, { id: 1})
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: [], initialValue: initialValue});
const { visible, toggle } = useModal();
const onSubmit = (values: SubmitDataTypes) => {
const onSubmit = async (values: SubmitDataTypes) => {
console.log(values)
const { data, code } = await PublicApi.postMemberAppraisalWaitAuditTwoAudit({
id: id,
agree: values.status,
reason: values.reason,
})
if(code === 1000) {
history.goBack();
}
}
const onCancel = () => {
toggle(false);
}
const examValue = {
status: 0,
reason: '123'
}
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.subject}
anchors={anchorHeader}
extra={
<Button type="primary" onClick={() => toggle(true)} icon={<CheckCircleOutlined />}>单据审核</Button>
}
>
<AuditProcess title="流转进度" id="progress" />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep > item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
</div>
<Card title="考评项目" id="project">
<Table columns={projectColumns}></Table>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={projectColumns} dataSource={initialValue?.items}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="result" data={evaluateResultColumn} title="基本信息" column={3} />
<CustomizeColumn id="result" data={evaluateResultColumn} title="考评结果" />
</div>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
</AnchorPage>
<ExamVerify visible={visible} title="审核" onSubmit={onSubmit} onCancel={onCancel} value={examValue} />
<ExamVerify visible={visible} title="审核" onSubmit={onSubmit} onCancel={onCancel} showLabel={false} />
</Spin>
)
}
export default TobeReviewDetailII
export default TobeEvaluateDetail
import React from 'react';
import React, { useRef, useState } from 'react';
import { Card, Space, Button } from 'antd'
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import useEvaluateColumn,{ setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { GetMemberAppraisalWaitAuditTwoPageRequest, GetMemberAppraisalWaitAuditTwoPageResponseDetail } from '@/services/MemberV2Api';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { Link } from 'umi';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
const defaultColumns = setColumnsByLinks({
detail: '/memberCenter/memberAbility/memberEvaluate/tobeReviewII',
});
interface Iprops {};
const TobeReviewListII: React.FC<Iprops> = (props: Iprops) => {
const List: React.FC<Iprops> = (props: Iprops) => {
const ref = useRef<any>({})
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const [ rowSelection, rowController ] = useRowSelectionTable();
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitAuditTwoPageResponseDetail>(defaultColumns,[
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>审核</a>
<Link to={`/memberCenter/memberAbility/memberEvaluate/tobeReviewII/detail?id=${_record.id}`}>审核</Link>
</Space>
)
}
......@@ -25,12 +36,21 @@ const TobeReviewListII: React.FC<Iprops> = (props: Iprops) => {
const controllerBtns = (
<Space>
<Button>批量审核通过</Button>
<Button loading={submitLoading} onClick={() => handleBatchRemove(rowController.selectedRowKeys)} >批量审核通过</Button>
</Space>
)
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
const handleBatchRemove = async (ids: number[]) => {
// setSubmitLoading(true)
// const { code, data } = await PublicApi.postMemberAppraisalDelete({ids: ids});
// setSubmitLoading(false)
// if (code === 1000) {
// ref.current?.submit();
// }
}
const handleFetch = async (params: GetMemberAppraisalWaitAuditTwoPageRequest) => {
const result = fetchListData(PublicApi.getMemberAppraisalWaitAuditTwoPage, params);
return result
}
......@@ -38,14 +58,16 @@ const TobeReviewListII: React.FC<Iprops> = (props: Iprops) => {
<Card>
<CustomizeQueryList
columns={columns}
rowSelection={rowSelection as any}
schema={evaluationListSchema}
fetchListData={handleFetch}
expressionScope={{controllerBtns}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'name', FORM_FILTER_PATH);
useAsyncSelect('status', fetchStatusOptions);
}}
/>
</Card>
)
}
export default TobeReviewListII
export default List
......@@ -11,12 +11,45 @@ import { modifyEvaluateScore, evaluateScoreRes } from './schema';
import { PublicApi } from '@/services/api';
import { projectColumns, recordColumn } from '../columns/detail';
import useGetDetailCommon from '../hooks/useGetDetailCommon';
import useFetchInfo from '../hooks/useFetchInfo';
import useModal from '../hooks/useModal';
import styles from './detail.less';
import theme from '../../../../../config/lingxi.theme.config';
import createRichTextUtils from '@/components/RangeTime/createRichText';
import FormilyCheckbox from '../../components/FormilyCheckBox'
import { GetMemberAppraisalWaitSubmitGetResponse } from '@/services/MemberV2Api';
import { usePageStatus } from '@/hooks/usePageStatus';
import useInitialValue from '../../common/hooks/useInitialValue';
import { findLastIndexFlowState } from '@/utils';
import FlowRecords from '@/components/FlowRecords';
import NiceForm from '@/components/NiceForm';
type EditDataType = {
appraisalId: number
appraisalReport: {
name: string,
url: string
}[],
grade: string,
id: number,
scoreWeight: string
sendAppraisal: 0 | 1,
templates: {
name: string,
url: string
}[]
type: null
userId: number
}
type SubmitData = {
totalScore: number,
result: string,
notifyMember: boolean,
resultAttachments: {
name: string,
url: string
}[]
}
const formActions = createFormActions();
const resultForm = createFormActions();
......@@ -24,8 +57,12 @@ const resultForm = createFormActions();
const TobeEvaluateDetail = () => {
const { visible, toggle } = useModal();
const { visible: resultVisible, toggle: resultToggle } = useModal();
const { initialValue } = useFetchInfo(PublicApi.getMemberAbilitySubGet, { id: 1})
const { anchorHeader, basicInfoList } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue});
const { id } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue, setInitialValue, refresh }= useInitialValue<GetMemberAppraisalWaitSubmitGetResponse, { id: string }>(PublicApi.getMemberAppraisalWaitSubmitGet, params)
const { anchorHeader, basicInfoList, evaluateResultColumn } = useGetDetailCommon({blackList: ['result'], initialValue: initialValue})
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const [ editingScoreData, setEditingScoreData ] = useState<any>({})
const withEditProjectColumns = useMemo(() => {
const temp = projectColumns.concat({
......@@ -39,10 +76,10 @@ const TobeEvaluateDetail = () => {
const editScore = (record: any) => {
setEditingScoreData(record);
toggle(true);
}
const onDrawerCancel = () => {
// handleCancel();
toggle(false)
}
......@@ -54,36 +91,103 @@ const TobeEvaluateDetail = () => {
}
}
const onSubmit = (value: any) => {
console.log(value);
const onSubmit = (value: EditDataType) => {
const { items } = initialValue;
const list = [...items];
const targetIndex = list.findIndex((_item) => value.id === _item.id);
if(targetIndex > -1) {
list[targetIndex] = {
... list[targetIndex],
scoreWeight: +value.scoreWeight,
grade: +value.grade,
score: +value.scoreWeight * +value.grade / 100,
templates: value.templates?.map((_row) => {
return {
name: _row.name,
url: _row.url
}
}),
appraisalReport: value.appraisalReport?.map((_row) => {
return {
name: _row.name,
url: _row.url
}
})
}
}
const newObject = {
...initialValue,
items: list,
}
setInitialValue(newObject)
toggle(false);
}
const resultOnSubmit = (value) => {
const resultOnSubmit = async (value: SubmitData) => {
console.log(value);
resultToggle(false);
setSubmitLoading(true)
const postData = {
id: id,
...value,
notifyMember: value.notifyMember ? 1 : 0,
items: initialValue.items.map((_row) => ({
id: _row.id,
scoreWeight: _row.scoreWeight,
grade: _row.grade,
templates: _row.templates,
reports: _row.appraisalReport
})),
resultAttachments: value.resultAttachments.map((_item) => ({
name: _item.name,
url: _item.url
}))
}
const { code, data } = await PublicApi.postMemberAppraisalWaitSubmitSubmit(postData as any);
setSubmitLoading(false)
if(code === 1000) {
refresh(params);
resultToggle(false);
}
}
return (
<Spin spinning={false}>
<Spin spinning={loading}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
title={initialValue?.subject}
anchors={anchorHeader}
extra={
<Button onClick={() => resultToggle(true)} icon={<CheckCircleOutlined />}>考评结果</Button>
(
!initialValue?.totalScore &&
<Button onClick={() => resultToggle(true)} icon={<CheckCircleOutlined />}>考评结果</Button>
)
}
>
<AuditProcess title="流转进度" id="progress" />
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" data={basicInfoList} title="基本信息" column={3} />
<AuditProcess
innerVerifySteps={
initialValue && initialValue.verifySteps ?
initialValue.verifySteps.map(item => ({
step: item.step,
stepName: item.stepName,
roleName: item.roleName,
status: initialValue?.currentStep >= item.step ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.verifySteps)}
id="progress"
/>
<div id="detail" style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn data={basicInfoList} title="基本信息" column={3} />
</div>
<Card title="考评项目" id="project">
<Table columns={withEditProjectColumns}></Table>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={withEditProjectColumns} rowKey={"id"} dataSource={initialValue?.items}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
<div id="record">
<FlowRecords
innerRowkey="id"
innerColumns={recordColumn as any}
innerDataSource={initialValue?.history}
/>
</div>
</AnchorPage>
<Drawer
......@@ -125,18 +229,18 @@ const TobeEvaluateDetail = () => {
<Button onClick={() => resultToggle(false)} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={() => onDrawerConfirm('result')} type="primary">
<Button loading={submitLoading} onClick={() => onDrawerConfirm('result')} type="primary">
确认
</Button>
</div>
}
>
<SchemaForm
onSubmit={onSubmit}
initialValues={initialValue}
<NiceForm
onSubmit={resultOnSubmit}
// initialValues={initialValue}
expressionScope={createRichTextUtils()}
schema={evaluateScoreRes}
actions={formActions}
actions={resultForm}
components={{
FormilyUploadFiles,
ArrayTable,
......
import React from 'react';
import { Card, Space, Button } from 'antd'
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import React, { useRef, useState } from 'react';
import { Card, Space, Button, Spin } from 'antd'
import useEvaluateColumn, { setColumnsByLinks } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { GetMemberAppraisalWaitSubmitPageRequest, GetMemberAppraisalWaitSubmitPageResponseDetail } from '@/services/MemberV2Api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { Link } from 'umi';
import { querySchema } from '../tobeEvaluate/schema';
const defaultColumns = setColumnsByLinks({
detail: '/memberCenter/memberAbility/memberEvaluate/tobeSubmitSummary/detail',
});
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
const { columns, fetchStatusOptions } = useEvaluateColumn<GetMemberAppraisalWaitSubmitPageResponseDetail>(defaultColumns, [
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>提交</a>
<a>编辑</a>
{
_record.submit && (
<Link to={`/memberCenter/memberAbility/memberEvaluate/tobeSubmitSummary/detail?id=${_record.id}`}>提交</Link>
)
}
</Space>
)
}
])
const controllerBtns = (
<Space>
<Button>批量提交</Button>
</Space>
)
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
const handleFetch = async (params: GetMemberAppraisalWaitSubmitPageRequest) => {
const result = fetchListData(PublicApi.getMemberAppraisalWaitSubmitPage, params);
return result
}
......@@ -39,11 +44,11 @@ const List: React.FC<Iprops> = (props: Iprops) => {
<Card>
<CustomizeQueryList
columns={columns}
schema={evaluationListSchema}
schema={querySchema}
fetchListData={handleFetch}
expressionScope={{controllerBtns}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'name', FORM_FILTER_PATH);
useAsyncSelect('status', fetchStatusOptions);
}}
/>
</Card>
......
......@@ -15,7 +15,12 @@ export const modifyEvaluateScore: ISchema = {
labelAlign: 'left'
},
properties: {
projectName: {
id: {
title: 'id',
type: 'string',
display: false
},
name: {
title: '考评项目',
type: 'string',
editable: false
......@@ -25,25 +30,25 @@ export const modifyEvaluateScore: ISchema = {
type: 'string',
editable: false,
},
memberName: {
userName: {
title: '考评人',
type: "string",
editable: false,
},
isMemberScore: {
sendAppraisal: {
title: '考评人打分',
type: 'string',
editable: false
},
weight: {
scoreWeight: {
title: '权重',
type: 'string',
},
scoring: {
grade: {
title: '考评计分',
type: 'string',
},
files: {
templates: {
title: '考评模板',
type: 'object',
'x-component': 'FormilyUploadFiles',
......@@ -51,7 +56,7 @@ export const modifyEvaluateScore: ISchema = {
fileContainerClassName: 'customizeFileContainer'
}
},
report: {
appraisalReport: {
title: '考评报告',
type: 'object',
'x-component': 'FormilyUploadFiles',
......@@ -80,20 +85,23 @@ export const evaluateScoreRes = {
labelAlign: 'left'
},
properties: {
score: {
totalScore: {
title: '考评最终分',
type: 'string',
require: true,
},
result: {
title: '考评结果',
type: 'textarea',
require: true,
},
noticeResult: {
notifyMember: {
title: "{{ text('通知考评结果',help('将考评结果通知给考察对象')) }}",
type: "string",
'x-component': 'FormilyCheckbox'
'x-component': 'FormilyCheckbox',
require: true,
},
files: {
resultAttachments: {
title: '考评模板',
type: 'object',
'x-component': 'FormilyUploadFiles',
......
......@@ -129,9 +129,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
width: '100%'
},
format: 'YYYY-MM-DD HH:mm:ss',
disabledDate:(current) => {
return moment().calendar();
},
disabled: true
}}
/>
case 'date':
......
......@@ -46,6 +46,10 @@ const AddRule:React.FC<{}> = (props) => {
params.type = dataSource[0].type
})
if(params?.time) {
params.time = Number(params.time)
}
let res: any = {}
if(pageStatus === PageStatus.EDIT){
res = await PublicApi.postOrderTradingRulesUpdata(params)
......
import React, {useEffect, useRef, useState} from 'react'
import React, {useEffect, useState} from 'react'
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus'
import { useInitValue } from '@/formSchema/effects/useInitValue'
import EyePreview from '@/components/EyePreview'
import { findItemAndDelete } from '@/utils'
import { ISchemaFormActions, ISchema, FormEffectHooks, createAsyncFormActions } from '@formily/antd'
import { ISchemaFormActions, ISchema, FormEffectHooks } from '@formily/antd'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { createAddContractTemplateEffect, useUnitPreview } from '../effects'
import { createAddContractTemplateEffect } from '../effects'
import { PublicApi } from '@/services/api'
import {
PlusOutlined,
LinkOutlined,
PlusOutlined, QuestionCircleOutlined,
} from '@ant-design/icons'
import { Button, message } from 'antd'
import { Button, message, Tooltip } from 'antd'
import NiceForm from '@/components/NiceForm'
import ModalTable from '@/components/ModalTable'
import { GlobalConfig } from '@/global/config'
......@@ -256,6 +254,11 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
addSchemaAction.setFieldValue('isElectronicContract', data.isElectronicContract ? true : false)
addSchemaAction.setFieldValue('transactionProcesssId', data.transactionProcesssId)
addSchemaAction.setFieldValue('isTacitlyApprove', data.isTacitlyApprove)
if(data.type === 1) {
addSchemaAction.setFieldState('time', state => {
state.visible = true
})
}
setInitialValue(data)
}
if(id != '') {
......@@ -288,6 +291,13 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
})
}
const help = (text: string, desc: string) => (<>
{text}&nbsp;
<Tooltip title={desc}>
<QuestionCircleOutlined />
</Tooltip>
</>)
return (
<>
<NiceForm
......@@ -298,7 +308,8 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
tableColumns,
tableAddButton,
paginationChange,
productsLength
productsLength,
help
}}
components={{
SelectProcesss,
......@@ -325,10 +336,16 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
setFieldState("MEGA_LAYOUT1_1", state => {
state.visible = false
})
setFieldState("time", state => {
state.visible = false
})
} else {
setFieldState("MEGA_LAYOUT1_1", state => {
state.visible = true
})
setFieldState("time", state => {
state.visible = true
})
}
})
}}
......
......@@ -74,6 +74,22 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({
// fetchSearch: PublicApi.getOrderTradingRulesTransactionProcessList,
// },
},
"time": {
type: 'string',
title: "{{help('订单取消时间', '单后超过多少小时未支付后自动取消订单')}}",
"x-component-props": {
placeholder: "请填写订单取消时间",
style: { width: '100%' },
suffix: '小时'
},
visible: false,
'x-rules': [
{
pattern: /^\d+(\.\d{1})?$/,
message: '数值仅限一位小数',
}
],
},
MEGA_LAYOUT1_1: {
type: 'object',
'x-component': 'mega-layout',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment