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