Commit cf32c84d authored by Bill's avatar Bill

feat: 添加考评详情

parent 961df397
......@@ -319,8 +319,19 @@ const MemberRoute: RouterChild = {
name: '会员考评',
routes: [
{
path: '/memberCenter/memberAbility/memberEvaluate/allQuery',
name: '会员考评查询',
component: '@/pages/member/memberEvaluate/allQuery/index',
},
{
path: '/memberCenter/memberAbility/memberEvaluate/detail',
name: '会员考评详情',
component: '@/pages/member/memberEvaluate/allQuery/detail',
noMargin: true,
},
{
path: '/memberCenter/memberAbility/memberEvaluate/createEvaluate',
name: '会员考评管理',
name: '待新建考评单',
component: '@/pages/member/memberEvaluate/createEvaluate/index',
},
{
......
.container {
display: flex;
flex: row;
.row {
display: flex;
flex-direction: row;
margin-bottom: @margin-md;
}
.col {
flex: 1;
.title {
color: #909399;
font-size: 12;
width: 104px;
display: inline-block;
}
}
.lastRow {
margin-bottom: 0;
}
}
/**
* 详情页分裂显示,
* 这里类似table 组件, 同样有column
*/
import React from 'react';
import MellowCard, { MellowCardProps } from '@/components/MellowCard';
import styles from './index.less';
import cx from 'classnames';
type ColumnType = {
dataIndex: string,
title: string,
render?: (value?: any, record?: any, dataIndex?: string) => React.ReactNode
}
interface Iprops extends MellowCardProps {
/**
* 列
*/
columns: { [key: string]: ColumnType[] },
/**
* 数据
*/
dataSource: {
[key: string]: any
}
}
const CustomizeColumn: React.FC<Iprops> = (props: Iprops) => {
const { columns, dataSource, ...rest } = props;
return (
<MellowCard {...rest}>
<div className={styles.container}>
{
Object.keys(columns).map((_item) => {
return (
<div className={styles.col} key={_item}>
{
columns[_item].map((_row, index) => {
const length = columns[_item].length;
return (
<div className={cx(styles.row, { [styles.lastRow]: index === length - 1 })} key={_row.dataIndex}>
<span className={styles.title}>{_row.title}</span>
{
_row.render && (_row.render(dataSource[_row.dataIndex], dataSource, _row.dataIndex))
|| (<span>{dataSource[_row.dataIndex]}</span>)
}
</div>
)
})
}
</div>
)
})
}
</div>
</MellowCard>
)
}
export default CustomizeColumn
/**
* 通用的列表页
*/
import React, { useRef } from 'react';
import { Card } from 'antd'
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
import { createFormActions, ISchema } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { ColumnsType } from 'antd/es/table';
interface Iprops {
columns: ColumnsType,
schema: ISchema,
fetchListData: <T>(params: T) => Promise<any>,
effects: ($: any, actions: any) => void,
expressionScope?: any,
}
const formActions = createFormActions();
const CustomizeColumn: React.FC<Iprops> = (props: Iprops) => {
const { columns, schema, fetchListData, expressionScope, effects } = props;
const ref = useRef<any>({});
const handleEffects = ($, action) => {
effects?.($, action)
}
return (
// <Card>
<StandardTable
tableProps={{
rowKey: 'validateId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
schema={schema}
actions={formActions}
onSubmit={values => ref.current?.reload(values)}
expressionScope={expressionScope}
effects={($, actions) => handleEffects($, actions)}
/>
}
/>
// </Card>
)
}
CustomizeColumn.defaultProps = {
expressionScope: {},
effects: null
}
export default CustomizeColumn
import React from 'react';
import { Checkbox } from 'antd';
import { CheckboxChangeEvent } from 'antd/lib/checkbox'
interface Iprops {
value: boolean,
editable: boolean,
props: {
['x-component-props']: any,
},
mutators: {
change: (checked: boolean) => void
},
}
const FormilyCheckBox: React.FC<Iprops> & { isFieldComponent?: boolean } = (props: Iprops) => {
const { value, editable } = props;
const componentProps = props.props?.['x-component-props'] || {};
const children = props.props?.['x-component-props']?.['children'] || ''
const checked = !!value;
const handleChange = (e: CheckboxChangeEvent) => {
props.mutators.change(e.target.checked);
}
return (
<Checkbox checked={checked} onChange={handleChange} disabled={!editable} {...componentProps}>
{children}
</Checkbox>
)
}
FormilyCheckBox.isFieldComponent = true
export default FormilyCheckBox
import React 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';
const { Step } = Steps;
const EvaluateDetail = () => {
const anchorHeader = [
{
key: 'progress',
name: '流转进度',
},
{
key: 'detail',
name: '基本信息',
},
{
key: 'project',
name: '考评项目'
},
{
key: 'result',
name: '考评结果'
},
{
key: 'record',
name: '流转记录'
}
]
const columnList = {
col1: [
{
title: '考察主题',
dataIndex: 'theme',
},
{
title: '会员名称',
dataIndex: 'memberName',
},
{
title: '考察类型',
dataIndex: 'type'
}
],
col2: [
{
title: '考察日期',
dataIndex: 'date'
},
{
title: '考察代表',
dataIndex: 'present'
},
{
title: "考察原因",
dataIndex: 'reason'
}
],
col3: [
{
title: '考察要求附件',
dataIndex: 'file',
render: (value?) => {
return (
<div>132</div>
)
}
},
]
}
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>
)
}
},
]
}
return (
<Spin spinning={false}>
<AnchorPage
title={`温州市隆昌皮业有限公式`}
anchors={anchorHeader}
// extra={headExtra && headExtra(detailInfo, returnAddress, exchangeAddress)}
>
<Card title="流转进度" id="progress">
<Steps current={1} progressDot>
<Step title="Finished" description="You can hover on the dot." />
<Step title="In Progress" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
</Steps>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="detail" columns={columnList} dataSource={{}} title="基本信息" />
</div>
<Card title="考评项目" id="project" style={{ margin: `${theme["@margin-md"]} 0` }}>
<Table columns={projectColumns}></Table>
</Card>
<div style={{ margin: `${theme["@margin-md"]} 0` }}>
<CustomizeColumn id="result" columns={resultList} dataSource={{}} title="考评结果" />
</div>
<Card title="流转记录" id="record" extra={<Button>内部流转</Button>}>
<Table columns={recordColumn}></Table>
</Card>
</AnchorPage>
</Spin>
)
}
export default EvaluateDetail;
import React, { useRef } from 'react';
import { Card, Space, Button } from 'antd'
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import { evaluationListSchema } from '../schema';
import useFetchList from '../hooks/useFetchList';
import { createFormActions } from '@formily/antd';
import { PlusOutlined } from '@ant-design/icons';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
import CustomizeQueryList from '../../components/CustomizeQueryList';
// const formActions = createFormActions();
interface Iprops {};
const List: React.FC<Iprops> = (props: Iprops) => {
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
{
title: '操作',
render: (_text, _record) => (
<Space>
<a>删除</a>
</Space>
)
}
])
const controllerBtns = (
<div>
<Button type="primary">
<PlusOutlined /> 新建
</Button>
</div>
)
const handleFetch = async (params) => {
const result = fetchListData(PublicApi.getMemberAbilitySubPage, params);
return result
}
return (
<Card>
<CustomizeQueryList
columns={columns}
schema={evaluationListSchema}
fetchListData={handleFetch}
expressionScope={{
controllerBtns,
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
}}
/>
</Card>
)
}
export default List
import { ColumnsType } from 'antd/es/table';
/**
* 详情页考评项目
*/
export const projectColumns: ColumnsType<any> = [
{
title: '序号',
dataIndex: 'id',
},
{
title: '考评项目',
dataIndex: "projectName"
},
{
title: '状态',
dataIndex: "status"
},
{
title: '考评人',
dataIndex: 'member'
},
{
title: '考评人打分',
dataIndex: 'memberScoring'
},
{
title: '权重',
dataIndex: 'weight'
},
{
title: '考评计分',
dataIndex: 'scoring'
},
{
title: '得分',
dataIndex: 'score'
},
{
title: '考评模板',
dataIndex: 'template',
},
{
title: '考评报告',
dataIndex: 'report'
}
]
export const recordColumn: ColumnsType<any> = [
{
title: '序号',
dataIndex: 'id'
},
{
title: '操作角色',
dataIndex: 'role',
},
{
title: "部门",
dataIndex: 'apartment',
},
{
title: "职位",
dataIndex: "pos"
},
{
title: '状态',
dataIndex: 'status'
},
{
title: "操作",
dataIndex: 'action'
},
{
title: "操作时间",
dataIndex: 'actionTime'
},
{
title: "审核意见",
dataIndex: 'suggest'
},
]
.value {
display: flex;
flex-direction: column;
.name {
margin-bottom: 4px;
}
}
.main {
color: @main-color;
cursor: pointer;
}
import React, { useCallback, useRef, useState } from 'react';
import { Drawer, Button } from 'antd';
// import { useModel } from '@/.umi/plugin-model/useModel';
import useModel from '../../hooks/useModal';
import { StandardTable } from 'god';
import { ColumnsType } from 'antd/es/table';
import { createFormActions } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { PublicApi } from '@/services/api';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import memberSchema from './schema';
import styles from './index.less'
const formActions = createFormActions();
interface Iprops {
value: boolean,
editable: boolean,
schema: any,
props: {
['x-component-props']: any,
},
mutators: {
change: (checked: boolean) => void
},
}
const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (props: Iprops) => {
const { value, editable } = props;
const ref = useRef<any>({});
const { visible, toggleShow, handleCancel, handleConfirm } = useModel({});
const [selectedRecord, setSelectedRecord] = useState<any>(null);
// schema.getExtendsComponentProps() || {}
const columns: ColumnsType = [
{
title: '序号',
dataIndex: 'id'
},
{
title: '姓名',
dataIndex: 'name'
},
{
title: '手机号码',
dataIndex: 'telephone',
},
{
title: '所属机构',
dataIndex: 'org'
},
{
title: '职位',
dataIndex: 'pos'
}
];
const fetchListData = async (params: any) => {
return {
totalCount: 0,
data: [{
id: 1,
name: '123'
},
{
id: 2,
name: '456'
}]
}
}
const onSelectChange = (record, selected, selectedRows) => {
console.log('selectedRowKeys changed: ', record, selected, selectedRows);
setSelectedRecord(record);
};
const onCancel = useCallback(() => {
handleCancel()
}, [handleCancel])
const onConfirm = () => {
handleConfirm(() => {
props.mutators.change(selectedRecord);
})
}
return (
<div>
<Drawer
title="选择用户"
width={1000}
visible={visible}
onClose={onCancel}
footer={
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={onCancel} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={onConfirm} type="primary">
提交
</Button>
</div>
}
>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
rowSelection={{
type: 'radio',
onSelect: onSelectChange,
selectedRowKeys: value ? [value?.id] : [],
}}
controlRender={
<NiceForm
schema={memberSchema}
actions={formActions}
onSubmit={values => ref.current?.reload(values)}
expressionScope={{}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
}}
/>
}
/>
</Drawer>
<div className={styles.value}>
<span className={styles.name}>{value?.name}</span>
{
editable && (
<span className={styles.main} onClick={toggleShow}>{value ? '重新选择' : '选择考评人'}</span>
)
}
</div>
</div>
)
}
FormilySelectMember.isFieldComponent = true
export default FormilySelectMember
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema } from '@formily/antd';
const memberSchema: ISchema = {
type: 'object',
properties: {
mageLayout: {
type: 'object',
'x-component': 'Mega-Layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
},
properties: {
// ctl: {
// type: 'object',
// 'x-component': 'Children',
// 'x-component-props': {
// children: '{{controllerBtns}}',
// },
// },
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
tip: '输入 会员名称 进行搜索',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'Flex-Layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
roleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
export default memberSchema
......@@ -3,5 +3,8 @@
.ant-table-cell {
padding: 8px 8px;
}
.ant-btn {
padding: 2px 0px;
}
}
}
......@@ -5,20 +5,15 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { LinkOutlined, PlusOutlined, SaveOutlined } from '@ant-design/icons';
import { createFormActions } from '@formily/antd';
import {
Input,
ArrayTable,
DatePicker,
FormBlock,
FormItemGrid,
FormLayout
} from '@formily/antd-components'
import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm';
import { evaluateAddSchema } from '../schema/add';
import UploadFiles from '@/components/UploadFiles/UploadFiles';
import { UploadProps, UploadChangeParam, UploadFile } from 'antd/lib/upload/interface'
import FormilyUploadFiles from '@/components/UploadFiles/FormilyUploadFiles';
import FormilyRangeTime from '@/components/RangeTime/FormilyRangeTime';
import FormilyCheckbox from '../../components/FormilyCheckBox';
import FormilySelectMember from '../components/FormilySelectMember';
import moment from 'moment';
import theme from '../../../../../config/lingxi.theme.config';
import styles from './add.less';
......@@ -46,6 +41,16 @@ const EvaluateAdd = () => {
time: [
moment('2015/01/01', 'YYYY/MM/DD'),
moment('2015/01/08', 'YYYY/MM/DD'),
],
array: [
{
id: 1,
projectName: "123",
memberName: {
"id": 2,
"name":"456"
}
}
]
})
resolve()
......@@ -65,6 +70,23 @@ const EvaluateAdd = () => {
</div>
)
const handleRemove = (index) => {
console.log(index);
}
const renderListTableRemove = (index: number) => (
<>
<a
onClick={() => handleRemove(index)}
style={{
color: '#ff4d4f',
}}
>
删除
</a>
</>
);
return (
<PageHeaderWrapper
onBack={() => history.goBack()}
......@@ -91,7 +113,13 @@ const EvaluateAdd = () => {
initialValues={initialValue}
schema={evaluateAddSchema}
actions={formActions}
components={{FormilyUploadFiles, FormilyRangeTime, ArrayTable}}
components={{
FormilyUploadFiles,
FormilyRangeTime,
ArrayTable,
FormilyCheckbox,
FormilySelectMember
}}
expressionScope={{
renderAddition: renderAddition,
connectMember: (
......@@ -100,6 +128,7 @@ const EvaluateAdd = () => {
选择
</div>
),
renderListTableRemove,
}}
effects={() => {}}
/>
......
......@@ -9,7 +9,8 @@ import { evaluationListSchema } from '../schema';
import { PublicApi } from '@/services/api';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import useEvaluateColumn from '../hooks/useEvaluateColumn';
import useEvaluateColumn, { InspectionData } from '../hooks/useEvaluateColumn';
import useFetchList from '../hooks/useFetchList';
const formActions = createFormActions();
......@@ -18,38 +19,6 @@ const formActions = createFormActions();
*/
interface Iprops {};
/**
* @todo 修改类型
*/
interface InspectionData {
id: number,
/**
* 会员名称
*/
name: string;
/**
* 考察主题
*/
theme: string,
/**
* 考察类型
* 1 => 入库考察, 2 => 真该考察, 3 => 计划考察, 4 => 入库考察
*/
type: number,
/**
* 考察日期
*/
date: number,
/**
* 考察评分
*/
score: number,
/**
* 内部状态
*/
status: 0 | 1,
}
type PaginationParam = {
current: number,
pageSize: number,
......@@ -57,6 +26,7 @@ type PaginationParam = {
const MemberEvaluate: React.FC<Iprops> = (props: Iprops) => {
const ref = useRef<any>({});
const { fetchListData } = useFetchList();
const { columns } = useEvaluateColumn<InspectionData>([
{
title: '操作',
......@@ -73,21 +43,9 @@ const MemberEvaluate: React.FC<Iprops> = (props: Iprops) => {
<Button type="primary">
<PlusOutlined /> 新建
</Button>
<Button>
导入
</Button>
<Button> 导入 </Button>
</div>
)
const fetchListData = async (params: PaginationParam & { theme?: string, type?: number }) => {
console.log(params);
return {
totalCount: 0,
data: []
}
}
return (
<Card>
<StandardTable
......@@ -96,7 +54,7 @@ const MemberEvaluate: React.FC<Iprops> = (props: Iprops) => {
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
fetchTableData={(params: any) => fetchListData(PublicApi.getMemberAbilitySubPage, params)}
controlRender={
<NiceForm
schema={evaluationListSchema}
......@@ -112,10 +70,6 @@ const MemberEvaluate: React.FC<Iprops> = (props: Iprops) => {
'name',
FORM_FILTER_PATH,
);
// useAsyncInitSelect(
// ['memberTypeId', 'roleId', 'level', 'source', 'innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
/>
}
......
import React, { useState } from 'react';
import { ColumnsType } from 'antd/es/table';
export interface InspectionData {
id: number,
/**
* 会员名称
*/
name: string;
/**
* 考察主题
*/
theme: string,
/**
* 考察类型
* 1 => 入库考察, 2 => 真该考察, 3 => 计划考察, 4 => 入库考察
*/
type: number,
/**
* 考察日期
*/
date: number,
/**
* 考察评分
*/
score: number,
/**
* 内部状态
*/
status: 0 | 1,
}
/**
* 根据类型获取考评column
*/
......
import { useCallback } from "react";
type ResultType<R = any> = {
totalCount: number,
data: R[]
}
interface IdefaultRes {
code: number,
data: any,
message: string
}
function useFetchList() {
const fetchListData = useCallback(
async <P extends IdefaultRes, T extends Object, K = any>(api: (params: T) => Promise<P>, params: T): Promise<ResultType<K>> =>
{
const { code, data } = await api(params);
if (code === 1000) {
return data;
}
return {
totalCount: 0,
data: []
}
}, [])
return { fetchListData }
}
export default useFetchList
import React, { useCallback, useEffect, useState } from 'react';
type ParamsType = {
// onCancel?: (() => void) | (() => Promise<any>)
// onConfirm?: (() => void) | (() => Promise<any>)
onVisible?: (() => void)
}
const isPromise = (value: any) => {
return value && Object.prototype.toString.call(value) === "[object Promise]"
}
function useModal(params: ParamsType) {
const [visible, setVisible] = useState<boolean>(false);
const [loading, setLoading] = useState<boolean>(false);
useEffect(() => {
if (visible) {
params.onVisible?.()
}
}, [visible])
/**
* 取消
*/
const handleCancel = useCallback((onCancel?: (() => void) | (() => Promise<any>)) => {
if (isPromise(onCancel)) {
setLoading(() => true);
(onCancel() as Promise<any>)
.then((data) => {
setLoading(() => false);
setVisible(() => false)
})
return;
}
onCancel?.();
setVisible(false);
}, [])
/**
* 确认
*/
const handleConfirm = useCallback((onConfirm?: (() => void) | (() => Promise<any>)) => {
if (isPromise(onConfirm)) {
setLoading(() => true);
(onConfirm() as Promise<any>)
.then((data) => {
setLoading(() => false);
setVisible(() => false)
})
return;
}
onConfirm?.();
setVisible(() => false)
}, [])
const toggleShow = useCallback(() => {
setVisible(() => true)
}, [])
return { visible, loading, handleConfirm, handleCancel, toggleShow }
}
export default useModal
import { ISchema } from '@formily/antd';
import React from 'react';
import styles from '../createEvaluate/add.less';
export const evaluateAddSchema: ISchema = {
type: "object",
......@@ -118,90 +116,89 @@ export const evaluateAddSchema: ISchema = {
"type": "array",
"x-component": "arraytable",
"x-component-props": {
// "operationsWidth": 300
// rowClassName: styles.evaluateRow,
operations: false,
// operations: false,
renderAddition: "{{renderAddition}}",
renderRemove: '{{renderListTableRemove}}',
renderMoveDown: () => null,
renderMoveUp: () => null,
operations: {
title: '操作'
},
},
items: {
type: "object",
properties: {
id: {
title: "序号",
// type: 'Text',
"x-component": 'Text',
"x-props": {
width: 65,
},
"x-component-props": {
style: {
width: 30
},
operations: {
operationsWidth: 30,
width: 30
}
}
// 'x-component': 'Children',
// "x-component": "input",
// "description": "hello world",
},
projectName: {
title: '考评项目',
type: 'string',
"x-component-props": {
operations: {
operationsWidth: 30,
width: 30
}
// operationswidth: 30,
"x-component-props": {},
"x-props": {
width: 160,
}
},
projectContent: {
title: '考评内容',
type: 'textarea',
"x-component-props": {
'x-props': {
width: 424,
},
'x-component-props': {
row: 1,
style: {
// width: 408,
},
width: 30,
height: 32,
}
}
},
memberName: {
title: "考评人",
type: 'string'
type: 'object',
'x-props': {
width: 128,
},
"x-component": "FormilySelectMember",
// "x-component-props": {
// children: '选择考评人'
// }
},
memberScore: {
title: "考评人打分",
type: 'string',
'x-component': 'FormilyCheckbox',
"x-props": {
width: 128
}
},
// memberScore: {
// title: "考评人打分",
// type: 'string',
// 'x-component': 'CheckboxGroup',
// enum: []
// },
weight: {
title: '考评权重',
type: 'string',
"x-component-props": {
style: {
width: 80
}
}
"x-props": {
width: 95,
},
},
score1: {
title: '考评计分',
type: 'string',
"x-component-props": {
style: {
width: 80
}
}
"x-props": {
width: 95,
},
"x-component-props": {}
},
score: {
title: '考评内容',
"x-component-props": {
style: {
width: 80
}
"x-props": {
width: 95,
},
"x-component-props": {},
type: 'string'
},
moban: {
......@@ -211,6 +208,9 @@ export const evaluateAddSchema: ISchema = {
'x-component-props': {
mode: 'link',
buttonText: '上传'
},
"x-props": {
width: 180,
}
},
baogao: {
......@@ -220,9 +220,11 @@ export const evaluateAddSchema: ISchema = {
'x-component-props': {
mode: 'link',
buttonText: '上传'
},
"x-props": {
width: 180,
}
}
},
}
}
}
......
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