Browse Source

技术评分

dev01 1 month ago
parent
commit
71ecc4d4de

+ 103 - 3
js/component/manageCenter/customer/NEW/crm/customerProfile.jsx

@@ -10,6 +10,7 @@ import {
   message,
   Form,
   Tabs,
+  DatePicker,
 } from 'antd';
 import $ from 'jquery/src/ajax';
 import { ShowModal, } from "@/tools.js";
@@ -17,10 +18,12 @@ import { industry } from "@/dataDic.js"
 import ShowModalDiv from "@/showModal.jsx";
 import { ChooseList } from "../../../order/orderNew/chooseList";
 import MainBusinessLog from './mainBusinessLog';
+import moment from 'moment';
 
 import './customer.less';
 
 const TabPane = Tabs.TabPane;
+const { RangePicker } = DatePicker;
 
 const IntentionCustomer = Form.create()(React.createClass({
 
@@ -79,6 +82,16 @@ const IntentionCustomer = Form.create()(React.createClass({
         }
       },
       {
+        title: '是否签单',
+        dataIndex: 'signBills',
+        key: 'signBills',
+        render: text => {
+          return (
+            <div>{["否", "是"][text]}</div>
+          )
+        }
+      },
+      {
         title: '主营产品',
         dataIndex: 'businessScope',
         key: 'businessScope',
@@ -102,7 +115,8 @@ const IntentionCustomer = Form.create()(React.createClass({
       {
         title: '意向合作项目',
         dataIndex: 'intendedProject',
-        key: 'intendedProject'
+        key: 'intendedProject',
+        width: 220,
       },
       {
         title: '知产情况',
@@ -141,6 +155,12 @@ const IntentionCustomer = Form.create()(React.createClass({
         width: 200,
       },
       {
+        title: '更新时间',
+        dataIndex: 'updateTime',
+        key: 'updateTime',
+        width: 80,
+      },
+      {
         title: '所属部门',
         dataIndex: 'depName',
         key: 'depName',
@@ -406,6 +426,44 @@ const IntentionCustomer = Form.create()(React.createClass({
     });
   },
 
+  exportAll() {
+    message.config({
+      duration: 20,
+    });
+    let loading = message.loading("下载中...");
+    this.setState({
+      exportPendingLoading: true,
+    });
+    let data = JSON.parse(JSON.stringify(this.state.searchInfor));
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: "/api/admin/userArchives/selectUserArchives/export",
+      data,
+      success: function (data) {
+        if (data.error.length === 0) {
+          this.download(data.data);
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        loading();
+        this.setState({
+          exportPendingLoading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  download(fileName) {
+    window.location.href =
+      globalConfig.context + "/open/download?fileName=" + fileName;
+  },
+
+
   search() {
     this.loadData();
   },
@@ -504,7 +562,7 @@ const IntentionCustomer = Form.create()(React.createClass({
                 <Select
                   mode="multiple"
                   placeholder={"请选择行业"}
-                  style={{ width: 200 }}
+                  style={{ width: 150 }}
                   value={searchInfor.industry ? searchInfor.industry.split(",") : undefined}
                   onChange={(e) => {
                     this.setState({
@@ -535,7 +593,39 @@ const IntentionCustomer = Form.create()(React.createClass({
                 <Option value="1">公共客户</Option>
                 <Option value="2">签单客户</Option>
                 <Option value="3">外联客户</Option>
+                <Option value="4">私有&签单</Option>
+              </Select>
+              <Select
+                placeholder={"是否签单"}
+                style={{ width: 100 }}
+                value={searchInfor.signBills}
+                onChange={(e) => {
+                  this.setState({
+                    searchInfor: Object.assign(searchInfor, {
+                      signBills: e,
+                    }),
+                  });
+                }}
+              >
+                <Option value="0">否</Option>
+                <Option value="1">是</Option>
               </Select>
+              <span>更新时间: </span>
+              <RangePicker
+                style={{ width: 300 }}
+                value={[
+                  searchInfor.startTime ? moment(searchInfor.startTime) : null,
+                  searchInfor.endTime ? moment(searchInfor.endTime) : null,
+                ]}
+                onChange={(data, dataString) => {
+                  this.setState({
+                    searchInfor: Object.assign(searchInfor, {
+                      startTime: dataString[0],
+                      endTime: dataString[1],
+                    }),
+                  });
+                }}
+              />
               <Button type="primary" onClick={this.search} style={{ marginRight: 10 }}>
                 搜索
               </Button>
@@ -552,6 +642,16 @@ const IntentionCustomer = Form.create()(React.createClass({
                 />
               </div>
             </TabPane>
+            <TabPane tab="导出EXCEL" key="3">
+              <Button
+                type="primary"
+                loading={this.state.exportPendingLoading}
+                onClick={this.exportAll}
+                style={{ margin: 10 }}
+              >
+                导出excel
+              </Button>
+            </TabPane>
           </Tabs>
         </div>
         <div className="patent-table">
@@ -565,7 +665,7 @@ const IntentionCustomer = Form.create()(React.createClass({
               dataSource={this.state.dataSource}
               pagination={this.state.pagination}
               bordered
-              scroll={{ x: newChannel == 0 ? "130%" : "120%" }}
+              scroll={{ x: newChannel == 0 ? "140%" : "130%" }}
             />
           </Spin>
         </div>

+ 785 - 10
js/component/manageCenter/order/orderNew/addService.jsx

@@ -186,6 +186,8 @@ const NewService = Form.create()(
     },
     getInitialState() {
       return {
+        marks: "",
+        score: "",
         type: "",
         approvaType: [],
         typeExplain: "",
@@ -399,7 +401,7 @@ const NewService = Form.create()(
             title: "项目状态",
             dataIndex: "projectStatus",
             key: "projectStatus",
-            width: 80,
+            width: 70, textAlign: "center",
             render: (text) => {
               return getProjectName(text);
             },
@@ -466,7 +468,7 @@ const NewService = Form.create()(
             title: "操作",
             dataIndex: "ABC",
             key: "ABC",
-            width: 80,
+            width: 110,
             render: (text, record) => {
               return (
                 <div>
@@ -500,6 +502,43 @@ const NewService = Form.create()(
                       </Button>
                     </div>
                   }
+                  {
+                    record.scoreStatus == 1 &&
+                    <div>
+                      <Button
+                        type="primary"
+                        onClick={(e) => {
+                          e.stopPropagation();
+                          this.setState({
+                            tid: record.id,
+                            score: "add",
+                            cSort: record.sort,
+                            cname: record.commodityName,
+                            tname: record.name,
+                          })
+                        }}
+                      >
+                        待评分
+                      </Button>
+                    </div>
+                  }
+                  {
+                    !!record.scoreNumber &&
+                    <Button
+                      type="primary"
+                      onClick={(e) => {
+                        e.stopPropagation();
+                        this.setState({
+                          cSort: record.sort,
+                          cname: record.commodityName,
+                          tname: record.name,
+                        })
+                        this.queryByTid(record.id)
+                      }}
+                    >
+                      已评{record.scoreNumber}分
+                    </Button>
+                  }
                 </div>
               );
             },
@@ -510,7 +549,7 @@ const NewService = Form.create()(
             title: "变更状态",
             dataIndex: "type",
             key: "type",
-            width: 70,
+            width: 70, textAlign: "center",
             render: (text, record) => {
               let str = "";
               let color = "";
@@ -645,7 +684,7 @@ const NewService = Form.create()(
             title: "操作",
             dataIndex: "ABC",
             key: "ABC",
-            width: 80,
+            width: 70, textAlign: "center",
             render: (text, record) => {
               return (
                 <div>
@@ -1349,7 +1388,7 @@ const NewService = Form.create()(
               }
               return (
                 <div>
-                  <div style={{ width: 70, float: "left", marginRight: 5 }}>
+                  <div style={{ width: 70, textAlign: "center", float: "left", marginRight: 5 }}>
                     <Select
                       placeholder="选择"
                       defaultValue={"金额"}
@@ -1382,7 +1421,7 @@ const NewService = Form.create()(
               // if (this.state.boFlag) {
               //   return (
               //     <div>
-              //       <div style={{ width: 70, float: "left", marginRight: 5 }}>
+              //       <div style={{ width: 70, textAlign: "center", float: "left", marginRight: 5 }}>
               //         <Select
               //           placeholder="选择"
               //           defaultValue={"金额"}
@@ -1820,7 +1859,7 @@ const NewService = Form.create()(
 
               return (
                 <div>
-                  <div style={{ width: 70, float: "left", marginRight: 5 }}>
+                  <div style={{ width: 70, textAlign: "center", float: "left", marginRight: 5 }}>
                     <Select
                       placeholder="选择"
                       defaultValue={"金额"}
@@ -1853,7 +1892,7 @@ const NewService = Form.create()(
               // if (this.state.boFlag) {
               //   return (
               //     <div>
-              //       <div style={{ width: 70, float: "left", marginRight: 5 }}>
+              //       <div style={{ width: 70, textAlign: "center", float: "left", marginRight: 5 }}>
               //         <Select
               //           placeholder="选择"
               //           defaultValue={"金额"}
@@ -5178,6 +5217,215 @@ const NewService = Form.create()(
       });
     },
 
+    getRadioList(val, cSort, name) {
+      let array = []
+      let list = []
+      let vlist1 = [30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20]
+      let vlist2 = [20, 19, 18, 17, 16, 15, 14, 13]
+      let vlist3 = [15, 14, 13, 12, 11]
+      let vlist4 = [10, 9, 8, 7]
+
+      let mlist1 = [19, 18, 17, 16, 15, 14, 13, 12, 11, 10]
+      let mlist2 = [12, 11, 10, 9, 8, 7]
+      let mlist3 = [10, 9, 8, 7, 6]
+      let mlist4 = [6, 5, 4]
+
+      let clist1 = [9, 8, 7, 6, 5, 4, 3, 2, , 1]
+      let clist2 = [6, 5, 4, 3, 2, 1]
+      let clist3 = [5, 4, 3, 2, 1]
+      let clist4 = [3, 2, 1]
+
+      if (cSort == 6) {
+        if (name == "zyd" || name == "gtl" || name == "ydhb") {
+          list = [
+            { value: 1, list: vlist2 },
+            { value: 2, list: mlist2 },
+            { value: 3, list: clist2 },
+            { value: 4, list: [0] }
+          ]
+        } else if (name == "xyd" || name == "gcxx" || name == "fwtd" || name == "ndhb") {
+          list = [
+            { value: 1, list: vlist4 },
+            { value: 2, list: mlist4 },
+            { value: 3, list: clist4 },
+            { value: 4, list: [0] }
+          ]
+        }
+      } else {
+        if (name == "zyd" || name == "gtl") {
+          list = [
+            { value: 1, list: vlist1 },
+            { value: 2, list: mlist1 },
+            { value: 3, list: clist1 },
+            { value: 4, list: [0] }
+          ]
+        } else if (name == "gcxx" || name == "fwtd") {
+          list = [
+            { value: 1, list: vlist3 },
+            { value: 2, list: mlist3 },
+            { value: 3, list: clist3 },
+            { value: 4, list: [0] }
+          ]
+        } else if (name == "xyd") {
+          list = [
+            { value: 1, list: vlist4 },
+            { value: 2, list: mlist4 },
+            { value: 3, list: clist4 },
+            { value: 4, list: [0] }
+          ]
+        }
+      }
+      list.map(function (item) {
+        if (item.value == val) {
+          array = item.list
+        }
+      })
+      return array
+    },
+
+    getPaddingLeft(val) {
+      let num = 7
+      let arr = [
+        { value: 1, key: 7 },
+        { value: 2, key: 7 },
+        { value: 3, key: 7 },
+        { value: 4, key: 7 }
+      ]
+      arr.map(function (item) {
+        if (item.value == val) {
+          num = item.key
+        }
+      })
+      return num
+    },
+
+    getScore(name, cSort, val) {
+      let data = ""
+      let list = []
+      if (cSort == 6) {
+        if (name == "zyd" || name == "gtl" || name == "ydhb") {
+          list = [
+            { title: name == "zyd" ? "很专业" : "很满意", list: [20, 19, 18, 17, 16, 15, 14, 13] },
+            { title: name == "zyd" ? "专业" : "满意", list: [12, 11, 10, 9, 8, 7] },
+            { title: "一般", list: [6, 5, 4, 3, 2, 1] },
+            { title: name == "zyd" ? "不专业" : "不满意", list: [0] },
+          ]
+        } else if (name == "xyd" || name == "gcxx" || name == "fwtd" || name == "ndhb") {
+          list = [
+            { title: name == "xyd" ? "很速度" : "很满意", list: [10, 9, 8, 7] },
+            { title: name == "xyd" ? "速度" : "满意", list: [6, 5, 4] },
+            { title: "一般", list: [3, 2, 1] },
+            { title: name == "xyd" ? "很慢" : "不满意", list: [0] },
+          ]
+        }
+      } else {
+        if (name == "zyd" || name == "gtl") {
+          list = [
+            { title: name == "zyd" ? "很专业" : "很满意", list: [30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20] },
+            { title: name == "zyd" ? "专业" : "满意", list: [19, 18, 17, 16, 15, 14, 13, 12, 11, 10] },
+            { title: "一般", list: [9, 8, 7, 6, 5, 4, 3, 2, 1] },
+            { title: name == "zyd" ? "不专业" : "不满意", list: [0] },
+          ]
+        } else if (name == "gcxx" || name == "fwtd") {
+          list = [
+            { title: "很满意", list: [15, 14, 13, 12, 11] },
+            { title: "满意", list: [10, 9, 8, 7, 6] },
+            { title: "一般", list: [5, 4, 3, 2, 1] },
+            { title: "不满意", list: [0] },
+          ]
+        } else if (name == "xyd") {
+          list = [
+            { title: "很速度", list: [10, 9, 8, 7] },
+            { title: "速度", list: [6, 5, 4] },
+            { title: "一般", list: [3, 2, 1] },
+            { title: "很慢", list: [0] },
+          ]
+        }
+      }
+      list.map(function (item) {
+        if (item.list.includes(val)) {
+          data = item.title + "(" + val + "分)"
+        }
+      })
+      return data
+    },
+
+    updateByTid() {
+      $.ajax({
+        method: "POST",
+        dataType: "json",
+        crossDomain: false,
+        url: globalConfig.context + "/api/admin/taskScore/updateByTid",
+        data: {
+          tid: this.state.tid,
+          professionalism: this.state.professionalism,
+          communicationSkills: this.state.communicationSkills,
+          responsiveness: this.state.responsiveness,
+          publicImage: this.state.publicImage,
+          serviceAttitude: this.state.serviceAttitude,
+          monthlyReport: this.state.cSort == 6 ? this.state.monthlyReport : undefined,
+          yearReport: this.state.cSort == 6 ? this.state.yearReport : undefined,
+          remarks: this.state.marks,
+        },
+        success: function (data) {
+          if (data.error.length) {
+            this.setState({
+              loading: false,
+            });
+            message.error(data.error[0].message);
+          } else {
+            this.setState({
+              score: "",
+              cSort: "",
+              cname: "",
+              tname: "",
+            })
+            message.success("操作成功");
+            this.loadData();
+          }
+        }.bind(this),
+      }).always(
+        function () {
+          this.setState({
+            loading: false,
+          });
+        }.bind(this)
+      );
+    },
+
+    queryByTid(value) {
+      this.setState({
+        loading: true,
+      })
+      $.ajax({
+        method: "get",
+        dataType: "json",
+        crossDomain: false,
+        url: globalConfig.context + "/api/admin/taskScore/queryByTid",
+        data: {
+          tid: value,
+        },
+        success: function (data) {
+          if (data.error.length) {
+            this.setState({
+              loading: false,
+            });
+            message.warning(data.error[0].message);
+          } else {
+            this.setState({
+              score: "selcet",
+              dataScore: data.data,
+            });
+          }
+        }.bind(this),
+      }).always(
+        function () {
+          this.setState({
+            loading: false,
+          });
+        }.bind(this)
+      );
+    },
 
     render() {
       const expandedRowRender = (e) => {
@@ -5716,6 +5964,53 @@ const NewService = Form.create()(
                   )
                 },
               },
+              {
+                title: "操作",
+                dataIndex: "op",
+                key: "op",
+                width: 110,
+                render: (text, record) => {
+                  return (
+                    <div>
+                      {
+                        record.scoreStatus == 1 &&
+                        <Button
+                          type="primary"
+                          onClick={(e) => {
+                            e.stopPropagation();
+                            this.setState({
+                              tid: record.id,
+                              score: "add",
+                              cSort: 6,
+                              cname: record.taskName,
+                              tname: record.receiverName,
+                            })
+                          }}
+                        >
+                          待评分
+                        </Button>
+                      }
+                      {
+                        !!record.scoreNumber &&
+                        <Button
+                          type="primary"
+                          onClick={(e) => {
+                            e.stopPropagation();
+                            this.setState({
+                              cSort: 6,
+                              cname: record.taskName,
+                              tname: record.receiverName,
+                            })
+                            this.queryByTid(record.id)
+                          }}
+                        >
+                          已评{record.scoreNumber}分
+                        </Button>
+                      }
+                    </div >
+                  )
+                },
+              }
             ];
           } else {
             columns = [
@@ -8765,8 +9060,488 @@ const NewService = Form.create()(
               onCancel={() => { this.setState({ infoVisible: false }) }}
             />
           }
-        </div >
-      );
+
+          <Modal
+            maskClosable={false}
+            visible={this.state.score != ""}
+            footer=""
+            title="项目评分"
+            width={this.state.score == "selcet" ? 400 : 740}
+            onCancel={() => {
+              this.setState({
+                score: "",
+                tid: "",
+                cSort: "",
+                cname: "",
+                tname: "",
+              })
+            }}
+          >
+            {
+              this.state.score == "add" &&
+              <div>
+                <div style={{ marginBottom: 10 }}>项目名称:{this.state.cname}</div>
+                <div style={{ marginBottom: 10 }}>项目咨询:{this.state.tname}</div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block" }}>专&nbsp;业&nbsp;度</span>:
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        zyd: e.target.value,
+                        zydList: this.getRadioList(e.target.value, this.state.cSort, "zyd"),
+                        professionalism: e.target.value == 4 ? 0 : undefined,
+                      })
+                    }}
+                    value={this.state.zyd}>
+                    {
+                      [
+                        { key: "很专业", value: 1, },
+                        { key: "专业", value: 2, },
+                        { key: "一般", value: 3, },
+                        { key: "不专业", value: 4, },
+                      ].map(item =>
+                        <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div
+                  style={{
+                    padding: "5px 0 10px 0",
+                    paddingLeft: this.getPaddingLeft(this.state.zyd),
+                    margin: "5px 0 10px 55px",
+                    borderBottom: "1px dotted black"
+                  }}
+                >
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        professionalism: e.target.value
+                      })
+                    }}
+                    value={this.state.professionalism}>
+                    {
+                      !!this.state.zydList && this.state.zydList.map(item =>
+                        <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block" }}>沟&nbsp;通&nbsp;力</span>:
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        gtl: e.target.value,
+                        gtlList: this.getRadioList(e.target.value, this.state.cSort, "gtl"),
+                        communicationSkills: e.target.value == 4 ? 0 : undefined,
+                      })
+                    }}
+                    value={this.state.gtl}>
+                    {
+                      [
+                        { key: "很满意", value: 1, },
+                        { key: "满意", value: 2, },
+                        { key: "一般", value: 3, },
+                        { key: "不满意", value: 4, },
+                      ].map(item =>
+                        <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div
+                  style={{
+                    padding: "5px 0 10px 0",
+                    paddingLeft: this.getPaddingLeft(this.state.gtl),
+                    margin: "5px 0 10px 55px",
+                    borderBottom: "1px dotted black"
+                  }}
+                >
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        communicationSkills: e.target.value
+                      })
+                    }}
+                    value={this.state.communicationSkills}>
+                    {
+                      !!this.state.gtlList && this.state.gtlList.map(item =>
+                        <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block" }}>响&nbsp;应&nbsp;度</span>:
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        xyd: e.target.value,
+                        yxdList: this.getRadioList(e.target.value, this.state.cSort, "xyd"),
+                        responsiveness: e.target.value == 4 ? 0 : undefined,
+                      })
+                    }}
+                    value={this.state.xyd}>
+                    {
+                      [
+                        { key: "很速度", value: 1, },
+                        { key: "速度", value: 2, },
+                        { key: "一般", value: 3, },
+                        { key: "很慢", value: 4, },
+                      ].map(item =>
+                        <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div
+                  style={{
+                    padding: "5px 0 10px 0",
+                    paddingLeft: this.getPaddingLeft(this.state.xyd),
+                    margin: "5px 0 10px 55px",
+                    borderBottom: "1px dotted black"
+                  }}
+                >
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        responsiveness: e.target.value
+                      })
+                    }}
+                    value={this.state.responsiveness}>
+                    {
+                      !!this.state.yxdList && this.state.yxdList.map(item =>
+                        <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block" }}>公出形象</span>:
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        gcxx: e.target.value,
+                        gcxxList: this.getRadioList(e.target.value, this.state.cSort, "gcxx"),
+                        publicImage: e.target.value == 4 ? 0 : undefined,
+                      })
+                    }}
+                    value={this.state.gcxx}>
+                    {
+                      [
+                        { key: "很满意", value: 1, },
+                        { key: "满意", value: 2, },
+                        { key: "一般", value: 3, },
+                        { key: "不满意", value: 4, },
+                      ].map(item =>
+                        <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div
+                  style={{
+                    padding: "5px 0 10px 0",
+                    paddingLeft: this.getPaddingLeft(this.state.gcxx),
+                    margin: "5px 0 10px 55px",
+                    borderBottom: "1px dotted black"
+                  }}
+                >
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        publicImage: e.target.value
+                      })
+                    }}
+                    value={this.state.publicImage}>
+                    {
+                      !!this.state.gcxxList && this.state.gcxxList.map(item =>
+                        <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block" }}>服务态度</span>:
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        fwtd: e.target.value,
+                        fwtdList: this.getRadioList(e.target.value, this.state.cSort, "fwtd"),
+                        serviceAttitude: e.target.value == 4 ? 0 : undefined,
+                      })
+                    }}
+                    value={this.state.fwtd}>
+                    {
+                      [
+                        { key: "很满意", value: 1, },
+                        { key: "满意", value: 2, },
+                        { key: "一般", value: 3, },
+                        { key: "不满意", value: 4, },
+                      ].map(item =>
+                        <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                <div
+                  style={{
+                    padding: "5px 0 10px 0",
+                    paddingLeft: this.getPaddingLeft(this.state.fwtd),
+                    margin: "5px 0 10px 55px",
+                    borderBottom: this.state.cSort == 6 ? "1px dotted black" : 0
+                  }}
+                >
+                  <RadioGroup
+                    onChange={e => {
+                      this.setState({
+                        serviceAttitude: e.target.value
+                      })
+                    }}
+                    value={this.state.serviceAttitude}>
+                    {
+                      !!this.state.fwtdList && this.state.fwtdList.map(item =>
+                        <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                      )
+                    }
+                  </RadioGroup>
+                </div>
+                {
+                  this.state.cSort == 6 &&
+                  <div>
+                    <span style={{ width: 50, display: "inline-block" }}>月度汇报</span>:
+                    <RadioGroup
+                      onChange={e => {
+                        this.setState({
+                          ydhb: e.target.value,
+                          ydhbList: this.getRadioList(e.target.value, this.state.cSort, "ydhb"),
+                          monthlyReport: e.target.value == 4 ? 0 : undefined,
+                        })
+                      }}
+                      value={this.state.ydhb}>
+                      {
+                        [
+                          { key: "很满意", value: 1, },
+                          { key: "满意", value: 2, },
+                          { key: "一般", value: 3, },
+                          { key: "不满意", value: 4, },
+                        ].map(item =>
+                          <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                        )
+                      }
+                    </RadioGroup>
+                  </div>
+                }
+                {
+                  this.state.cSort == 6 &&
+                  <div
+                    style={{
+                      padding: "5px 0 10px 0",
+                      paddingLeft: this.getPaddingLeft(this.state.ydhb),
+                      margin: "5px 0 10px 55px",
+                      borderBottom: "1px dotted black"
+                    }}
+                  >
+                    <RadioGroup
+                      onChange={e => {
+                        this.setState({
+                          monthlyReport: e.target.value
+                        })
+                      }}
+                      value={this.state.monthlyReport}>
+                      {
+                        !!this.state.ydhbList && this.state.ydhbList.map(item =>
+                          <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                        )
+                      }
+                    </RadioGroup>
+                  </div>
+                }
+                {
+                  this.state.cSort == 6 &&
+                  <div>
+                    <span style={{ width: 50, display: "inline-block" }}>年度汇报</span>:
+                    <RadioGroup
+                      onChange={e => {
+                        this.setState({
+                          ndhb: e.target.value,
+                          ndhbList: this.getRadioList(e.target.value, this.state.cSort, "ndhb"),
+                          yearReport: e.target.value == 4 ? 0 : undefined,
+                        })
+                      }}
+                      value={this.state.ndhb}>
+                      {
+                        [
+                          { key: "很满意", value: 1, },
+                          { key: "满意", value: 2, },
+                          { key: "一般", value: 3, },
+                          { key: "不满意", value: 4, },
+                        ].map(item =>
+                          <RadioButton style={{ width: 80, textAlign: "center" }} value={item.value} key={item.value}>{item.key}</RadioButton>
+                        )
+                      }
+                    </RadioGroup>
+                  </div>
+                }
+                {
+                  this.state.cSort == 6 &&
+                  <div
+                    style={{
+                      padding: "5px 0 10px 0",
+                      paddingLeft: this.getPaddingLeft(this.state.ndhb),
+                      margin: "5px 0 10px 55px",
+                    }}
+                  >
+                    <RadioGroup
+                      onChange={e => {
+                        this.setState({
+                          yearReport: e.target.value
+                        })
+                      }}
+                      value={this.state.yearReport}>
+                      {
+                        !!this.state.ndhbList && this.state.ndhbList.map(item =>
+                          <RadioButton style={{ textAlign: "center" }} value={item} key={item}>{item}分</RadioButton>
+                        )
+                      }
+                    </RadioGroup>
+                  </div>
+                }
+
+                <div style={{ marginBottom: 5, display: "flex", flexDirection: "row" }}>
+                  <span style={{ width: 50, display: "inline-block" }}>评分理由</span>:
+                  <TextArea
+                    style={{ width: 600 }}
+                    rows={3}
+                    value={this.state.marks}
+                    onChange={(e) => {
+                      this.setState({
+                        marks: e.target.value,
+                      })
+                    }}
+                    placeholder="请填写本次评分的判断依据,至少10字以上"
+                  />
+                </div>
+                <div style={{ marginTop: 10, textAlign: "center" }}>
+                  <Button
+                    type="primary"
+                    onClick={() => {
+                      if (!this.state.professionalism && this.state.professionalism != 0) {
+                        message.warning("专业度未打分")
+                        return
+                      }
+                      if (!this.state.communicationSkills && this.state.communicationSkills != 0) {
+                        message.warning("沟通力未打分")
+                        return
+                      }
+                      if (!this.state.responsiveness && this.state.responsiveness != 0) {
+                        message.warning("响应度未打分")
+                        return
+                      }
+                      if (!this.state.publicImage && this.state.publicImage != 0) {
+                        message.warning("公出形象未打分")
+                        return
+                      }
+                      if (!this.state.serviceAttitude && this.state.serviceAttitude != 0) {
+                        message.warning("服务态度未打分")
+                        return
+                      }
+                      if (this.state.cSort == 6 && !this.state.monthlyReport && this.state.monthlyReport != 0) {
+                        message.warning("月度汇报未打分")
+                        return
+                      }
+                      if (this.state.cSort == 6 && !this.state.yearReport && this.state.yearReport != 0) {
+                        message.warning("年度汇报未打分")
+                        return
+                      }
+                      if (this.state.marks.length < 10) {
+                        message.warning("请填写10字以上的评分依据")
+                        return
+                      }
+                      const _this = this
+                      confirm({
+                        title: '您确定提交本次评分吗?',
+                        content: '',
+                        onOk() {
+                          _this.updateByTid()
+                        },
+                      });
+                    }}
+                  >
+                    确定
+                  </Button>
+                </div>
+                <div style={{ textAlign: "center", marginBottom: 10, color: "red" }}>注:请公平公正为本项目咨询老师评分!评分后不可修改</div>
+              </div>
+            }
+
+            {
+              this.state.score == "selcet" &&
+              <div style={{ position: "relative" }}>
+                <div
+                  style={{
+                    position: "absolute",
+                    right: 100,
+                    top: 50,
+                    fontSize: "40px",
+                    color: "red"
+                  }}
+                >{this.state.dataScore.professionalism + this.state.dataScore.communicationSkills + this.state.dataScore.responsiveness + this.state.dataScore.publicImage + this.state.dataScore.serviceAttitude + this.state.dataScore.monthlyReport + this.state.dataScore.yearReport}分</div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>项目名称</span>:{this.state.cname}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>项目咨询</span>:{this.state.tname}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>专&nbsp;业&nbsp;度</span>:{this.getScore("zyd", this.state.cSort, this.state.dataScore.professionalism)}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>沟&nbsp;通&nbsp;力</span>:{this.getScore("gtl", this.state.cSort, this.state.dataScore.communicationSkills)}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>响&nbsp;应&nbsp;度</span>:{this.getScore("xyd", this.state.cSort, this.state.dataScore.responsiveness)}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>公出形象</span>:{this.getScore("gcxx", this.state.cSort, this.state.dataScore.publicImage)}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>服务态度</span>:{this.getScore("fwtd", this.state.cSort, this.state.dataScore.serviceAttitude)}
+                </div>
+                {this.state.cSort == 6 &&
+                  <div>
+                    <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>月度汇报</span>:{this.getScore("ydhb", this.state.cSort, this.state.dataScore.monthlyReport)}
+                  </div>}
+                {this.state.cSort == 6 &&
+                  <div>
+                    <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>年度汇报</span>:{this.getScore("ndhb", this.state.cSort, this.state.dataScore.yearReport)}
+                  </div>}
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>评分理由</span>:{this.state.dataScore.remarks}
+                </div>
+                <div>
+                  <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>评分时间</span>:{moment(this.state.dataScore.createTime).format('YYYY-MM-DD HH:mm:ss')}
+                </div>
+                <div style={{ marginTop: 10, textAlign: "center" }}>
+                  <Button
+                    type="primary"
+                    onClick={() => {
+                      this.setState({
+                        score: ""
+                      })
+                    }}
+                  >
+                    关闭
+                  </Button>
+                </div>
+              </div>
+            }
+
+          </Modal>
+
+
+        </div >);
     },
   })
 );

+ 55 - 0
js/component/manageCenter/order/orderNew/billing.jsx

@@ -694,6 +694,24 @@ const MyService = Form.create()(
                   ) : (
                     ""
                   )}
+                  {
+
+                    (record.scoreStatus == 1 || record.scoreStatus == 2) &&
+                    <Button
+                      style={{
+                        margin: "5px",
+                        background: "#87D068",
+                        color: "#ffffff",
+                        border: "none",
+                      }}
+                      onClick={(e) => {
+                        e.stopPropagation();
+                        this.tableRowClick(record)
+                      }}
+                    >
+                      评分
+                    </Button>
+                  }
                 </div>
               );
             },
@@ -777,6 +795,7 @@ const MyService = Form.create()(
           pageNo: pageNo || 1,
           pageSize: this.state.pagination.pageSize,
           specially: 0,
+          scoreStatus: this.state.scoreStatus,
           name: this.state.customerName,
           orderNo: this.state.searchOrderNo,
           depId: this.state.departmenttSearch,
@@ -827,6 +846,7 @@ const MyService = Form.create()(
                 stopProject: thisdata.stopProject, //暂停项目  0无 1有
                 type: thisdata.type || "", // 特批类型
                 typeExplain: thisdata.typeExplain,
+                scoreStatus: thisdata.scoreStatus,
               });
             }
             this.state.pagination.current = data.data.pageNo;
@@ -1651,6 +1671,7 @@ const MyService = Form.create()(
       this.setState({
         signBillVisible: false,
       });
+      this.state.scoreStatus = undefined;
       this.state.searchOrderNo = undefined;
       this.state.orderNo = undefined;
       this.state.customerName = undefined;
@@ -1889,6 +1910,23 @@ const MyService = Form.create()(
         record,
       });
     },
+    getRadioList(val) {
+      let array = []
+      let list = [
+        { value: 1, list: [6, 7, 8, 9, 10] },
+        { value: 2, list: [3, 4, 5] },
+        { value: 3, list: [1, 2] },
+        { value: 4, list: [0] }
+      ]
+      list.map(function (item) {
+        if (item.value == val) {
+          array = item.list
+        }
+      })
+      return array
+    },
+
+
     render() {
       const FormItem = Form.Item;
       const formItemLayout = {
@@ -2123,6 +2161,22 @@ const MyService = Form.create()(
                         this.setState({ releaseDate: dataString });
                       }}
                     />
+                    <span style={{ marginRight: "10px" }}>项目评分 :</span>
+                    <Select
+                      style={{ width: 150 }}
+                      placeholder="项目评分"
+                      value={this.state.scoreStatus}
+                      onChange={(e) => {
+                        this.setState({
+                          scoreStatus: e,
+                        });
+                      }}
+                    >
+                      <Option value="0">全部</Option>
+                      <Option value="1">待评分</Option>
+                      <Option value="2">部分已评分</Option>
+                      <Option value="3">全部已评分</Option>
+                    </Select>
                     {/* <Input
                       placeholder="请输入营销员名字"
                       style={{ width: 150, marginRight: 10 }}
@@ -3757,6 +3811,7 @@ const MyService = Form.create()(
                 <div style={{ textAlign: "center", marginBottom: 10 }}>审核后生效,如需修改,需重新审核</div>
               </div>
             </Modal>
+
           </div>
         </div>
       );

+ 10 - 0
js/component/manageCenter/project/content.jsx

@@ -50,6 +50,16 @@ class Content extends Component {
           });
         });
         break;
+      //人员评分表
+      case "score":
+        require.ensure([], () => {
+          const ProjectScore= require("./project/score")
+            .default;
+          this.setState({
+            component: <ProjectScore ApiUrl={""} />
+          });
+        });
+        break;
       //项目汇总表
       case "highTech":
         require.ensure([], () => {

+ 473 - 0
js/component/manageCenter/project/project/score.jsx

@@ -0,0 +1,473 @@
+import React from 'react';
+import {
+  DatePicker,
+  Tooltip,
+  Button,
+  Input,
+  Select,
+  Spin,
+  Table,
+  message,
+  Form,
+  Tabs,
+} from 'antd';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { ShowModal, } from "@/tools.js";
+import { station } from "@/dataDic";
+import ShowModalDiv from "@/showModal.jsx";
+import { ChooseList } from "../../order/orderNew/chooseList";
+
+const TabPane = Tabs.TabPane;
+
+const ProjecScore = Form.create()(React.createClass({
+
+  getInitialState() {
+    return {
+      searchValues: {},
+      loading: false,
+      exportPendingLoading: false,
+      changeList: undefined,
+      dataSource: [],
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return '共' + total + '条数据';
+        }
+      },
+      columns: [
+        {
+          title: "用户姓名",
+          dataIndex: "name",
+          key: "name",
+        },
+        {
+          title: "高新&科技评分",
+          dataIndex: "htSatScoreAverage",
+          key: "htSatScoreAverage",
+          render: (text, record) => {
+            return (
+              <div>{text}分</div>
+            )
+          },
+        },
+        {
+          title: '会员评分',
+          dataIndex: 'memberScoreAverage',
+          key: 'memberScoreAverage',
+          render: (text, record) => {
+            return (
+              <div>{text}分</div>
+            )
+          },
+        },
+        {
+          title: "高新&科技总数/待评/已评",
+          dataIndex: "htSatCount",
+          key: "htSatCount",
+          render: (text, record) => {
+            return (
+              <div>{text + " / " + record.htSatNotScoreCount + " / " + record.htSatScoreCount}</div>
+            )
+          },
+        },
+        {
+          title: "会员总数/待评/已评",
+          dataIndex: "memberCount",
+          key: "memberCount",
+          render: (text, record) => {
+            return (
+              <div>{text + " / " + record.memberNotScoreCount + " / " + record.memberScoreCount}</div>
+            )
+          },
+        },
+        {
+          title: '部门',
+          dataIndex: 'depName',
+          key: 'depName',
+        },
+        {
+          title: "上级主管姓名",
+          dataIndex: "superName",
+          key: "superName",
+        },
+        {
+          title: "状态",
+          dataIndex: "status",
+          key: "status",
+          render: (text, record) => {
+            return (
+              <div style={{ color: ["green", "red"][text] }}>{["正常", "锁定"][text]}</div>
+            )
+          }
+        },
+        {
+          title: '最后登录时间',
+          dataIndex: 'lastLoginTime',
+          key: 'lastLoginTime',
+        },
+
+      ],
+      dataSource: [],
+      departmentArr: [],
+      roleArr: [],
+    };
+  },
+
+  componentWillMount() {
+    this.departmentList();
+    this.rolesList();
+  },
+
+  loadData(pageNo) {
+    const { searchValues, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pagination.pageSize,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/taskScore/list",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          if (data.data.list) {
+            pagination.current = data.data.pageNo;
+            pagination.total = data.data.totalCount;
+            if (data.data && data.data.list && !data.data.list.length) {
+              pagination.current = 0;
+              pagination.total = 0;
+            }
+            this.setState({
+              dataSource: data.data.list,
+              pagination: this.state.pagination,
+              pageNo: data.data.pageNo,
+            });
+          } else {
+            this.setState({
+              dataSource: data.data,
+              pagination: false,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  // 部门
+  departmentList() {
+    const { searchValues } = this.state
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/organization/selectSuperId",
+      data: {},
+      success: function (data) {
+        let thedata = data.data;
+        let theArr = [];
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+          thedata = {};
+        } else {
+          thedata.map(function (item, index) {
+            theArr.push({
+              key: index,
+              name: item.name,
+              id: item.id,
+            });
+            if (item.name.includes("研发服务事业部")) {
+              searchValues["depId"] = item.id
+            }
+          });
+        }
+        this.setState({
+          departmentArr: theArr,
+          searchValues: searchValues,
+        }, () => {
+          this.loadData();
+        });
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  //角色
+  rolesList() {
+    this.setState({
+      loading: true
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/roles",
+      data: {
+
+      },
+      success: function (data) {
+        let thedata = data.data;
+        let theArr = [];
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+          thedata = {};
+        } else {
+          thedata.map(function (item, index) {
+            theArr.push({
+              key: index,
+              roleName: item.roleName,
+              id: item.id,
+            })
+          })
+        }
+        this.setState({
+          roleArr: theArr,
+        })
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    let list = this.state.columns
+    list.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+
+  exportAll() {
+    message.config({
+      duration: 20,
+    });
+    let loading = message.loading("下载中...");
+    this.setState({
+      exportPendingLoading: true,
+    });
+    let data = JSON.parse(JSON.stringify(this.state.searchValues));
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: "/api/admin/taskScore/list/export",
+      data,
+      success: function (data) {
+        if (data.error.length === 0) {
+          this.download(data.data);
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        loading();
+        this.setState({
+          exportPendingLoading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  download(fileName) {
+    window.location.href =
+      globalConfig.context + "/open/download?fileName=" + fileName;
+  },
+
+  search() {
+    this.loadData();
+  },
+
+  reset() {
+    this.setState({
+      searchValues: JSON.parse(JSON.stringify({})),
+    }, () => {
+      this.loadData();
+    })
+  },
+
+  render() {
+    const { searchValues, roleArr } = this.state
+    let departmentArr = this.state.departmentArr || [];
+    return (
+      <div className="user-content">
+        <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} />
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>评分列表</span>
+        </div>
+        <div className="user-search">
+          <Tabs
+            defaultActiveKey="1"
+            className="test">
+            <TabPane tab="搜索" key="1">
+              <div
+                className="user-search"
+                style={{
+                  marginTop: "10px",
+                  marginLeft: "10px",
+                  marginRight: "10px",
+                }}
+              >
+                <Input
+                  placeholder="用户名称"
+                  style={{
+                    width: 220,
+                    marginRight: "10px",
+                  }}
+                  value={searchValues["name"]
+                    ? searchValues["name"]
+                    : ""}
+                  onChange={(e) => {
+                    searchValues["name"] = e.target.value;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                />
+                <Select
+                  placeholder="选择负责部门"
+                  style={{ width: 170, }}
+                  value={searchValues["depId"]
+                    ? searchValues["depId"]
+                    : undefined}
+                  onChange={(e) => {
+                    searchValues["depId"] = e
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  {departmentArr.map(function (item) {
+                    return (
+                      <Select.Option key={item.id}>{item.name}</Select.Option>
+                    );
+                  })}
+                </Select>
+                <Select
+                  placeholder="角色"
+                  style={{ width: 180 }}
+                  value={this.state.rolesSearch}
+                  onChange={e => {
+                    this.setState({ rolesSearch: e });
+                  }}
+                >
+                  {roleArr.map(function (item) {
+                    return (
+                      <Select.Option key={item.id}>
+                        {item.roleName}
+                      </Select.Option>
+                    );
+                  })}
+                </Select>
+                <Select
+                  placeholder="岗位"
+                  style={{ width: 100 }}
+                  value={searchValues["position"]
+                    ? searchValues["position"]
+                    : undefined}
+                  onChange={e => {
+                    searchValues["position"] = e
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  {station.map(function (item) {
+                    return (
+                      <Select.Option key={item.value}>
+                        {item.key}
+                      </Select.Option>
+                    );
+                  })}
+                </Select>
+                <Button type="primary" onClick={this.search} style={{ marginRight: 10 }}>
+                  搜索
+                </Button>
+                <Button onClick={this.reset}>重置</Button>
+              </div>
+            </TabPane>
+            <TabPane tab="更改表格显示数据" key="2">
+              <div style={{ marginLeft: 10 }}>
+                <ChooseList
+                  columns={this.state.columns}
+                  changeFn={this.changeList}
+                  changeList={this.state.changeList}
+                  top={55}
+                  margin={11}
+                />
+              </div>
+            </TabPane>
+            <TabPane tab="导出EXCEL" key="3">
+              <Button
+                type="primary"
+                loading={this.state.exportPendingLoading}
+                onClick={this.exportAll}
+                style={{ margin: 10 }}
+              >
+                导出excel
+              </Button>
+            </TabPane>
+          </Tabs>
+        </div>
+        <div className="patent-table">
+          <Spin spinning={this.state.loading}>
+            <Table
+              columns={this.state.changeList
+                ? this.state.changeList
+                : this.state.columns}
+              dataSource={this.state.dataSource}
+              pagination={this.state.pagination}
+              bordered
+            />
+          </Spin>
+        </div>
+      </div >
+    );
+  }
+}));
+
+export default ProjecScore;

+ 197 - 18
js/component/manageCenter/project/summary/highTech.jsx

@@ -10,6 +10,7 @@ import {
   Tabs,
   Cascader,
   AutoComplete,
+  Modal,
 } from "antd";
 import { ShowModal, getApprovedType } from "@/tools";
 import { ChooseList } from "../../order/orderNew/chooseList";
@@ -36,11 +37,13 @@ class HighTech extends Component {
   constructor(props) {
     super(props);
     this.state = {
+      dataScore: {},
+      score: "",
       approvaType: [],
       tbaindex: 1,
       loading: false,
       changeList: undefined,
-      columns: currency,
+      columns: currency(this.showD.bind(this)),
       status: 0,
       page: 1,
       pagination: {
@@ -82,6 +85,56 @@ class HighTech extends Component {
     this.selectAuto = this.selectAuto.bind(this);
     this.blurChange = this.blurChange.bind(this);
 
+    this.hidD = this.hidD.bind(this);
+  }
+
+  showD(record) {
+    this.setState({
+      loading: true,
+    })
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/taskScore/queryByTid",
+      data: {
+        tid: record.id,
+      },
+      success: function (data) {
+        if (data.error.length) {
+          this.setState({
+            loading: false,
+          });
+          message.warning(data.error[0].message);
+        } else {
+          if (!data.data) {
+            this.setState({
+              score: "",
+            })
+          } else {
+            this.setState({
+              score: "selcet",
+              cSort: record.cSort,
+              cname: record.pname,
+              tname: record.techName,
+              dataScore: data.data,
+            });
+          }
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  }
+
+  hidD() {
+    this.setState({
+      score: ""
+    });
   }
 
   changeList(arr) {
@@ -196,7 +249,7 @@ class HighTech extends Component {
         deps: "",
         thchDeps: "",
         projectStatus: "",
-        columns: currency,
+        columns: currency(this.showD.bind(this)),
         status: 0,
         thchId: "",
         auto: "",
@@ -415,14 +468,14 @@ class HighTech extends Component {
       this.setState({
         columns:
           e == "0"
-            ? currency : e == "1"
-              ? patent : e == "2"
-                ? softWriting : e == "3"
-                  ? audit : e == "4"
-                    ? doubleSoft : e == "5"
-                      ? highTechColumns : e == "6"
-                        ? currency : e == "7"
-                          ? member : currency,
+            ? currency(this.showD.bind(this)) : e == "1"
+              ? patent(this.showD.bind(this)) : e == "2"
+                ? softWriting(this.showD.bind(this)) : e == "3"
+                  ? audit(this.showD.bind(this)) : e == "4"
+                    ? doubleSoft(this.showD.bind(this)) : e == "5"
+                      ? highTechColumns(this.showD.bind(this)) : e == "6"
+                        ? currency(this.showD.bind(this)) : e == "7"
+                          ? member(this.showD.bind(this)) : currency(this.showD.bind(this)),
       }, () => {
         this.defaultcolumns();
       });
@@ -438,6 +491,57 @@ class HighTech extends Component {
     }
   }
 
+  getScore(name, cSort, val) {
+    let data = ""
+    let list = []
+    if (cSort == 6) {
+      if (name == "zyd" || name == "gtl" || name == "ydhb") {
+        list = [
+          { title: name == "zyd" ? "很专业" : "很满意", list: [20, 19, 18, 17, 16, 15, 14, 13] },
+          { title: name == "zyd" ? "专业" : "满意", list: [12, 11, 10, 9, 8, 7] },
+          { title: "一般", list: [6, 5, 4, 3, 2, 1] },
+          { title: name == "zyd" ? "不专业" : "不满意", list: [0] },
+        ]
+      } else if (name == "xyd" || name == "gcxx" || name == "fwtd" || name == "ndhb") {
+        list = [
+          { title: name == "xyd" ? "很速度" : "很满意", list: [10, 9, 8, 7] },
+          { title: name == "xyd" ? "速度" : "满意", list: [6, 5, 4] },
+          { title: "一般", list: [3, 2, 1] },
+          { title: name == "xyd" ? "很慢" : "不满意", list: [0] },
+        ]
+      }
+    } else {
+      if (name == "zyd" || name == "gtl") {
+        list = [
+          { title: name == "zyd" ? "很专业" : "很满意", list: [30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20] },
+          { title: name == "zyd" ? "专业" : "满意", list: [19, 18, 17, 16, 15, 14, 13, 12, 11, 10] },
+          { title: "一般", list: [9, 8, 7, 6, 5, 4, 3, 2, 1] },
+          { title: name == "zyd" ? "不专业" : "不满意", list: [0] },
+        ]
+      } else if (name == "gcxx" || name == "fwtd") {
+        list = [
+          { title: "很满意", list: [15, 14, 13, 12, 11] },
+          { title: "满意", list: [10, 9, 8, 7, 6] },
+          { title: "一般", list: [5, 4, 3, 2, 1] },
+          { title: "不满意", list: [0] },
+        ]
+      } else if (name == "xyd") {
+        list = [
+          { title: "很速度", list: [10, 9, 8, 7] },
+          { title: "速度", list: [6, 5, 4] },
+          { title: "一般", list: [3, 2, 1] },
+          { title: "很慢", list: [0] },
+        ]
+      }
+    }
+    list.map(function (item) {
+      if (item.list.includes(val)) {
+        data = item.title + "(" + val + "分)"
+      }
+    })
+    return data
+  }
+
   render() {
     const dataSources = this.state.customerArr || [];
     const options = dataSources.map((group) => (
@@ -542,14 +646,14 @@ class HighTech extends Component {
                                         ? 5 : 0,
                           columns:
                             two == "0"
-                              ? currency : two == "1"
-                                ? patent : two == "2"
-                                  ? softWriting : two == "3"
-                                    ? audit : two == "4"
-                                      ? doubleSoft : two == "5"
-                                        ? highTechColumns : two == "6"
-                                          ? currency : two == "7"
-                                            ? member : currency,
+                              ? currency(this.showD.bind(this)) : two == "1"
+                                ? patent(this.showD.bind(this)) : two == "2"
+                                  ? softWriting(this.showD.bind(this)) : two == "3"
+                                    ? audit(this.showD.bind(this)) : two == "4"
+                                      ? doubleSoft(this.showD.bind(this)) : two == "5"
+                                        ? highTechColumns(this.showD.bind(this)) : two == "6"
+                                          ? currency(this.showD.bind(this)) : two == "7"
+                                            ? member(this.showD.bind(this)) : currency(this.showD.bind(this)),
                         }, () => {
                           this.defaultcolumns()
                         })
@@ -967,6 +1071,81 @@ class HighTech extends Component {
             }}
           />
         ) : null}
+
+        <Modal
+          maskClosable={false}
+          visible={this.state.score != ""}
+          footer=""
+          title="项目评分"
+          width={400}
+          onCancel={() => {
+            this.setState({
+              score: "",
+              cSort: "",
+              cname: "",
+              tname: "",
+            })
+          }}
+        >
+          <div style={{ position: "relative" }}>
+            <div
+              style={{
+                position: "absolute",
+                right: 100,
+                top: 50,
+                fontSize: "40px",
+                color: "red"
+              }}
+            >{this.state.dataScore.professionalism + this.state.dataScore.communicationSkills + this.state.dataScore.responsiveness + this.state.dataScore.publicImage + this.state.dataScore.serviceAttitude + this.state.dataScore.monthlyReport + this.state.dataScore.yearReport}分</div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>项目名称</span>:{this.state.cname}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>项目咨询</span>:{this.state.tname}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>专&nbsp;业&nbsp;度</span>:{this.getScore("zyd", this.state.cSort, this.state.dataScore.professionalism)}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>沟&nbsp;通&nbsp;力</span>:{this.getScore("gtl", this.state.cSort, this.state.dataScore.communicationSkills)}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>响&nbsp;应&nbsp;度</span>:{this.getScore("xyd", this.state.cSort, this.state.dataScore.responsiveness)}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>公出形象</span>:{this.getScore("gcxx", this.state.cSort, this.state.dataScore.publicImage)}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>服务态度</span>:{this.getScore("fwtd", this.state.cSort, this.state.dataScore.serviceAttitude)}
+            </div>
+            {this.state.cSort == 6 &&
+              <div>
+                <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>月度汇报</span>:{this.getScore("ydhb", this.state.cSort, this.state.dataScore.monthlyReport)}
+              </div>}
+            {this.state.cSort == 6 &&
+              <div>
+                <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>年度汇报</span>:{this.getScore("ndhb", this.state.cSort, this.state.dataScore.yearReport)}
+              </div>}
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>评分理由</span>:{this.state.dataScore.remarks}
+            </div>
+            <div>
+              <span style={{ width: 50, display: "inline-block", margin: "5px 0" }}>评分时间</span>:{moment(this.state.dataScore.createTime).format('YYYY-MM-DD HH:mm:ss')}
+            </div>
+            <div style={{ marginTop: 10, textAlign: "center" }}>
+              <Button
+                type="primary"
+                onClick={() => {
+                  this.setState({
+                    score: ""
+                  })
+                }}
+              >
+                关闭
+              </Button>
+            </div>
+          </div>
+        </Modal>
       </div>
     );
   }

+ 135 - 8
js/component/manageCenter/project/summary/highTechConfig.jsx

@@ -1,11 +1,11 @@
 import { Tooltip } from 'antd';
 import React from 'react';
 import { getProjectName, getFormRetrieves, getApprovedType } from '@/tools';
-import { Button } from 'antd';
+import { Button, Modal } from 'antd';
 
 
 // 高新会员服务
-const member = [
+const member = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -183,6 +183,24 @@ const member = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -198,7 +216,7 @@ const member = [
 ];
 
 // 高新
-const highTechColumns = [
+const highTechColumns = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -381,6 +399,24 @@ const highTechColumns = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -396,7 +432,7 @@ const highTechColumns = [
 ];
 
 // 双软
-const doubleSoft = [
+const doubleSoft = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -546,6 +582,24 @@ const doubleSoft = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -561,7 +615,7 @@ const doubleSoft = [
 ];
 
 // 软著
-const softWriting = [
+const softWriting = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -750,6 +804,24 @@ const softWriting = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -765,7 +837,7 @@ const softWriting = [
 ];
 
 // 专利
-const patent = [
+const patent = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -966,6 +1038,24 @@ const patent = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -981,7 +1071,7 @@ const patent = [
 ];
 
 // 审计
-const audit = [
+const audit = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -1162,6 +1252,24 @@ const audit = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -1177,7 +1285,7 @@ const audit = [
 ];
 
 // 通用表
-const currency = [
+const currency = (onCellClick) => [
   {
     title: "序号",
     dataIndex: "key",
@@ -1330,6 +1438,24 @@ const currency = [
     isNoD: true,
   },
   {
+    title: "评分及时间",
+    dataIndex: "scoreNumber",
+    key: "scoreNumber",
+    width: 80,
+    onCellClick: (record, e) => {
+      e.stopPropagation();
+      onCellClick(record)
+    },
+    render: (value, record) => {
+      return (
+        <div>
+          <div>{value}分</div>
+          <div>{record.scoreTime}</div>
+        </div>
+      );
+    }
+  },
+  {
     title: "满意度调查表",
     dataIndex: "formRetrieve",
     key: "formRetrieve",
@@ -1344,6 +1470,7 @@ const currency = [
   },
 ];
 
+
 export {
   member,
   highTechColumns,

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.3.25",
+  "version": "1.3.26",
   "description": "",
   "main": "index.js",
   "scripts": {