From 227089fcb8f0facbc0d4456f876a75a747ee6af3 Mon Sep 17 00:00:00 2001 From: Mr Ke <kelq@hugeinfo.com.cn> Date: Fri, 29 May 2020 20:44:30 +0800 Subject: [PATCH] 绩效考核 --- src/components/common/SearchFormView/index.jsx | 1 src/components/oa/merits/meritsDetail/index.jsx | 113 +++++++++++++++--- src/components/oa/merits/meritsDispose/index.jsx | 4 src/components/oa/merits/meritsOverview/index.jsx | 57 ++++++--- src/components/oa/merits/meritsDispose/index.scss | 1 src/routeDom/oaRouteDom.jsx | 4 src/components/common/TableView/index.jsx | 3 src/index.css | 164 ++++++++++++++++++++++++-- 8 files changed, 289 insertions(+), 58 deletions(-) diff --git a/src/components/common/SearchFormView/index.jsx b/src/components/common/SearchFormView/index.jsx index c709027..24d7197 100644 --- a/src/components/common/SearchFormView/index.jsx +++ b/src/components/common/SearchFormView/index.jsx @@ -220,6 +220,7 @@ console.log(date, dateString); this.monthPickerChange(item.key, date, dateString); }} + disabledDate={item.disabledDate || false} value={formData[item.key] ? moment(formData[item.key], 'YYYY-MM') : undefined} /> </Form.Item> diff --git a/src/components/common/TableView/index.jsx b/src/components/common/TableView/index.jsx index 3522f21..11265b1 100644 --- a/src/components/common/TableView/index.jsx +++ b/src/components/common/TableView/index.jsx @@ -107,11 +107,12 @@ } render() { - const { columns, rowSelection, showPagination = true } = this.props; + const { columns, rowSelection, showPagination = true, rowClassName = '' } = this.props; const { page, size, } = this.props.formData; return ( <div className="table-view-main"> <Table + rowClassName={rowClassName} rowSelection={rowSelection || null} size="middle" className="rowColor" diff --git a/src/components/oa/merits/meritsDetail/index.jsx b/src/components/oa/merits/meritsDetail/index.jsx index 210cf34..51f2e1f 100644 --- a/src/components/oa/merits/meritsDetail/index.jsx +++ b/src/components/oa/merits/meritsDetail/index.jsx @@ -7,11 +7,14 @@ /** 绩效详情 */ import React, { ReactNode, ReactEventHandler, Component } from 'react'; import TableView from '../../../common/TableView'; -import { Row, Col, Button, InputNumber, message } from 'antd'; +import { Row, Col, Button, InputNumber, message, DatePicker } from 'antd'; import { createHashHistory } from 'history'; import './index.scss'; const history = createHashHistory(); + import fetch from '../../../../api/request'; +import moment from 'moment'; +const { MonthPicker } = DatePicker; export default class MeritsDetail extends Component { @@ -22,13 +25,41 @@ this.state = { formData: { __key: Date.now(), - ...this.props.match.params + // userId: this.props.match.params.userId || loginUser.userId, + meritsMonth: this.props.match.params.meritsMonth || moment().month(moment().month() - 1).format('YYYY-MM') }, - + title: null, + boolean: this.props.match.params.boolean || false }; } - componentDidMount() { } + componentDidMount() { + var loginUser = window.localStorage.getItem('loginUser') || '{}'; + loginUser = JSON.parse(loginUser); + this.setState({ + formData: { + ...this.state.formData, + userId: this.props.match.params.userId || loginUser.userId + } + }, () => { + this.findTitle(); + }) + } + + findTitle = () => { + fetch({ + url: `api/merits/assess/findTitle`, + params: { + userId: this.state.formData.userId + } + }).then(res => { + if (res) { + this.setState({ + title: res + }) + } + }) + } setFormData = data => { console.log('form', data); @@ -40,15 +71,15 @@ // 保存操作 onSave = (item) => { console.log('item', item); - let { id , meritsGrade} = item; + let { id, meritsGrade } = item; fetch({ url: `api/merits/assess/modifyGrade`, params: { id, meritsGrade } - }).then( res=> { - if(res) { + }).then(res => { + if (res) { message.success('保存成功'); this.setState({ formData: { @@ -58,11 +89,10 @@ }) } }) - } renderColumns = () => { - return [ + var cols = [ { title: '编号', dataIndex: 'id', width: '3%' }, { title: '评分项目', dataIndex: 'scoreItems', width: '6%' }, { title: '评分目标', dataIndex: 'scoreTarget', width: '10%' }, @@ -104,41 +134,84 @@ }} /> } }, - { + + ]; + if (this.props.match.params.boolean) { + return cols.concat({ title: '操作', dataIndex: 'operation', width: '10%', render: (cur, item) => { return <a onClick={() => { this.onSave(item) }}>保存</a> } - } - - ]; + }) + } else { + return cols + } } onBack = () => { history.goBack(); } + monthPickerChange = (m, d) => { + let { formData } = this.state; + this.setState({ + formData: { + ...formData, + meritsMonth: d + } + }, () => { + this.setState({ + formData: { + ...this.state.formData, + __key: Date.now() + } + }) + }) + } + render() { - const { formData } = this.state; + const { formData, title, boolean } = this.state; let tableParams = { url: `api/merits/assess/findMeritsDetail`, - formData, + formData: { + ...formData, + userId: this.props.match.params.userId || JSON.parse(window.localStorage.getItem('loginUser')) + }, key: formData.__key, columns: this.renderColumns(), extraFromData: {}, setFormData: this.setFormData, - showPagination: false + showPagination: false, + } + + function disabledDate(current) { + return current && current >= moment().endOf('day'); } return ( <div className="merits-detail-main"> - <h2>2020年4月绩效评分表(初级研发工程师)</h2> - <TableView {...tableParams} ref="table-view" /> - <Row className="margin-top"> + + <Row className="margin-bottom" type="flex" justify="center" gutter={20}> <Col> - <Button onClick={this.onBack}>返回</Button> + <MonthPicker value={formData.meritsMonth ? moment(formData.meritsMonth, 'YYYY-MM') : ''} format={'YYYY-MM'} onChange={this.monthPickerChange} disabledDate={disabledDate} /> </Col> + { + title && + <Col> + <h2>{title}</h2> + </Col> + } </Row> + + <TableView {...tableParams} ref="table-view" /> + { + boolean && + <Row className="margin-top"> + <Col> + <Button onClick={this.onBack}>返回</Button> + </Col> + </Row> + } </div> ) } diff --git a/src/components/oa/merits/meritsDispose/index.jsx b/src/components/oa/merits/meritsDispose/index.jsx index 847687e..c1a4e5d 100644 --- a/src/components/oa/merits/meritsDispose/index.jsx +++ b/src/components/oa/merits/meritsDispose/index.jsx @@ -196,6 +196,10 @@ extraFromData: {}, setFormData: this.setFormData, showPagination: false, + rowClassName: (cur, index) => { + console.log(cur, index) + return !cur.validStatus && 'text-grey' + } } return ( diff --git a/src/components/oa/merits/meritsDispose/index.scss b/src/components/oa/merits/meritsDispose/index.scss index abc3b10..24fd9cd 100644 --- a/src/components/oa/merits/meritsDispose/index.scss +++ b/src/components/oa/merits/meritsDispose/index.scss @@ -16,5 +16,6 @@ & .ant-tag { cursor: pointer; } + } } diff --git a/src/components/oa/merits/meritsOverview/index.jsx b/src/components/oa/merits/meritsOverview/index.jsx index 20bd6b4..3a3794b 100644 --- a/src/components/oa/merits/meritsOverview/index.jsx +++ b/src/components/oa/merits/meritsOverview/index.jsx @@ -12,6 +12,7 @@ import { createHashHistory } from 'history'; import fetch from '../../../../api/request'; import './index.scss'; +import moment from 'moment'; const history = createHashHistory(); @@ -25,14 +26,25 @@ __key: Date.now(), page: 1, size: 10, - keyWord: '' + countMonth: moment().month(moment().month() - 1).format('YYYY-MM') }, + queryTerms: null }; } componentDidMount() { + this.loadqueryTerms() + } - + loadqueryTerms = () => { + fetch({ + url: `api/merits/assess/queryTerms`, + }).then(res => { + if (res) { + console.log('res', res); + this.setState({ queryTerms: res }) + } + }) } setFormData = data => { @@ -44,7 +56,7 @@ linkDetail = (item) => { let { userId, countMonth } = item; - history.push(`/merits/meritsOverview/meritsDetail/${userId}/${countMonth}`) + history.push(`/merits/meritsOverview/meritsDetail/${userId}/true/${countMonth}`) } renderColumns = () => { @@ -70,7 +82,7 @@ render() { - const { formData } = this.state; + const { formData, queryTerms } = this.state; let tableParams = { url: `api/merits/assess/queryMerits`, @@ -80,22 +92,31 @@ extraFromData: {}, setFormData: this.setFormData } + + function disabledDate(current) { + return current && current >= moment().endOf('day'); + } + return ( <div className="merits-overview-main"> - <SearchFormView - formData={formData} - setFormData={this.setFormData} - data={[ - { type: 'select', name: '部门', label: '部门', key: 'bumen', list: [{ name: '1', value: '部门1' }, { name: '2', value: '部门2' }], }, - { type: 'select', name: '岗位', label: '岗位', key: 'gangwei', list: [{ name: '1', value: '岗位1' }, { name: '2', value: '岗位2' }], }, - { type: 'input', name: '姓名', label: '姓名', key: 'name' }, - { - type: 'monthPicker', - label: '考评月份', - name: '考评月份', - key: 'kpyf', - }, - ]} /> + { + queryTerms && + <SearchFormView + formData={formData} + setFormData={this.setFormData} + data={[ + { type: 'select', name: '部门', label: '部门', key: 'userDeptId', list: queryTerms.dept ? queryTerms.dept.map(({ name, id }) => ({ name, value: id })) : [], }, + { type: 'select', name: '岗位', label: '岗位', key: 'meritsPostId', list: queryTerms.post ? queryTerms.post.map(({ name, id }) => ({ name, value: id })) : [], }, + { type: 'input', name: '姓名', label: '姓名', key: 'userName' }, + { + type: 'monthPicker', + label: '考评月份', + name: '考评月份', + key: 'countMonth', + disabledDate + }, + ]} /> + } <TableView {...tableParams} /> </div> ) diff --git a/src/index.css b/src/index.css index f7df747..dc7e8f4 100644 --- a/src/index.css +++ b/src/index.css @@ -30,11 +30,138 @@ .ant-layout-content { overflow: auto; } -.ant-table-middle > .ant-table-content > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, .ant-table-middle > .ant-table-content > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-body > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-tbody > tr > td, .ant-table-middle > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-tbody > tr > td{ +.ant-table-middle + > .ant-table-content + > .ant-table-header + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-body + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-scroll + > .ant-table-header + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-scroll + > .ant-table-body + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-left + > .ant-table-header + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-right + > .ant-table-header + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-left + > .ant-table-body-outer + > .ant-table-body-inner + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-right + > .ant-table-body-outer + > .ant-table-body-inner + > table + > .ant-table-thead + > tr + > th, +.ant-table-middle + > .ant-table-content + > .ant-table-header + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-body + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-scroll + > .ant-table-header + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-scroll + > .ant-table-body + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-left + > .ant-table-header + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-right + > .ant-table-header + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-left + > .ant-table-body-outer + > .ant-table-body-inner + > table + > .ant-table-tbody + > tr + > td, +.ant-table-middle + > .ant-table-content + > .ant-table-fixed-right + > .ant-table-body-outer + > .ant-table-body-inner + > table + > .ant-table-tbody + > tr + > td { padding: 9px 8px !important; } -.border{ +.border { border: 20px solid #ededed; } @@ -42,42 +169,42 @@ margin: 20px; } -.padding{ +.padding { padding: 20px; } -.bg-white{ +.bg-white { background: #fff; } -.ant-divider-horizontal{ +.ant-divider-horizontal { margin: 20px 0 !important; } -.margin-top{ +.margin-top { margin-top: 20px; } -.margin-bottom{ +.margin-bottom { margin-bottom: 20px; } -.fontSize12{ +.fontSize12 { font-size: 12px; } -.ant-divider-horizontal{ +.ant-divider-horizontal { margin: 20px 0 !important; } -.ant-card-head-title{ +.ant-card-head-title { font-weight: bold !important; } -div{ +div { box-sizing: border-box; } -.flex-box-column{ +.flex-box-column { display: flex; flex-direction: column; } @@ -86,11 +213,11 @@ display: flex; } -.align-center{ +.align-center { align-items: center; } -.justify-content{ +.justify-content { justify-content: center; } @@ -99,10 +226,10 @@ overflow: auto; } -.ant-spin-nested-loading{ +.ant-spin-nested-loading { height: 100%; } -.ant-spin-container{ +.ant-spin-container { height: 100%; } @@ -117,4 +244,7 @@ padding: 2px 8px !important; } - +.text-grey { + /* background: #ccc; */ + color: #b3aaaa; +} diff --git a/src/routeDom/oaRouteDom.jsx b/src/routeDom/oaRouteDom.jsx index eff360c..e7ccc56 100644 --- a/src/routeDom/oaRouteDom.jsx +++ b/src/routeDom/oaRouteDom.jsx @@ -37,10 +37,10 @@ <Route path="/logManage/operLog" component={OperLog} /> <Route path="/logManage/rawler" component={Rawler} /> <Route path="/personal/information" component={Information} /> - <Route path="/merits/meritsOverview/meritsDetail/:userId/:meritsMonth" component={MeritsDetail} /> + <Route path="/merits/meritsOverview/meritsDetail/:userId/:boolean/:meritsMonth" component={MeritsDetail} /> <Route path="/merits/meritsOverview" component={MeritsOverview} /> <Route path="/merits/meritsDispose" component={MeritsDispose} /> - <Route path="/merits/meritsExamine" component={MeritsExamine} /> + <Route path="/merits/meritsExamine" component={MeritsDetail} /> {/* <Route path="/" component={Workbench} /> */} -- Gitblit v1.8.0