hujie123456 5 years ago
parent
commit
6ba57ae7dc

+ 6 - 0
css/base.less

@@ -528,3 +528,9 @@ body {
 .up-btn:hover {
     opacity: 1 !important;
 }
+.ant-form-item {
+  font-size: 12px;
+  margin-bottom: 10px !important;
+  color: rgba(0, 0, 0, 0.65);
+  vertical-align: top;
+}

+ 1 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzj.js

@@ -511,6 +511,7 @@ class ChangeDetail extends Component {
               width: "868px",
               overflow: "hidden",
               paddingLeft: "90px",
+              paddingTop: "10px",
               position: "relative",
               bottom: "20px"
             }}

+ 2 - 1
js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzy.js

@@ -959,7 +959,7 @@ class ChangeDetail extends Component {
                 下一张
               </Button>
             </Modal>
-            <Rizhi changeId={this.props.data.id} />
+            <Rizhi changeId={this.props.data.id}/>
           </Form.Item>
 
           <ul
@@ -967,6 +967,7 @@ class ChangeDetail extends Component {
               width: "868px",
               overflow: "hidden",
               paddingLeft: "90px",
+              paddingTop: "10px",
               position: "relative",
               bottom: "20px",
               fontSize: "12px",

+ 1 - 1
js/component/manageCenter/project/project/outsourceTaskAssignment.jsx

@@ -33,7 +33,7 @@ const OutsourceTaskAssignment = React.createClass({
         specially: 1, //经理
         name: this.state.nameSearch, //客户名称
         orderNo: this.state.orderNoSearch, //订单编号
-        taskId: this.state.taskId, //任务编号
+        taskId: this.state.taskNoSearch, //任务编号
         depId: this.state.departmenttSearch, //订单部门
         taskStatus: this.state.taskStatus, //任务状态
         adminName: this.state.adminName, //任务受理人

+ 272 - 48
js/component/manageCenter/project/task/myTask.jsx

@@ -3,6 +3,7 @@ import $ from "jquery";
 import moment from "moment";
 import Picture from "@/manageCenter/publicComponent/picture";
 import "@/manageCenter/financialManage/distribute/public.less";
+import "@/manageCenter/financialManage/distribute/shouKuan.less";
 import {
   Button,
   Form,
@@ -15,10 +16,13 @@ import {
   Modal,
   Radio,
   Cascader,
-  Popconfirm
+  Popconfirm,
+  Switch,
+  Tabs,
 } from "antd";
 import Assign from "@/manageCenter/publicComponent/assign";
 import { areaSelect } from "@/NewDicProvinceList";
+import { ChooseList } from "../../order/orderNew/chooseList";
 import "./table.less";
 import {
   getProcessStatus,
@@ -33,7 +37,8 @@ import {
 import { taskStatus, projectStatus } from "@/dataDic.js";
 import ShowModalDiv from "@/showModal.jsx";
 const FormItem = Form.Item;
-
+const { TabPane } = Tabs;
+const { MonthPicker, RangePicker } = DatePicker;
 const Task = React.createClass({
   loadData(pageNo) {
     this.state.data = [];
@@ -53,9 +58,9 @@ const Task = React.createClass({
         name: this.state.nameSearch, //客户名称
         depId: this.state.departmenttSearch, //订单部门
         orderNo: this.state.orderNoSearch, //订单编号
-        taskId: this.state.taskNoSearch, //任务编号
-        taskStatus: this.state.taskStatus, //任务状态
-        adminName: this.state.adminName //任务受理人
+        taskId: this.state.taskNoSearch, //项目编号
+        taskStatus: this.state.taskStatus, //项目状态
+        adminName: this.state.adminName //项目受理人
       },
       success: function(data) {
         ShowModal(this);
@@ -70,12 +75,12 @@ const Task = React.createClass({
             theArr.push({
               key: i,
               orderNo: thisdata.orderNo, //订单编号
-              id: thisdata.id, //任务ID
+              id: thisdata.id, //项目ID
               taskName: thisdata.taskName, //名称
               cname: thisdata.cname, //项目品类
               receiverName: thisdata.receiverName, //受理人
               projectStatus: thisdata.projectStatus, //项目状态
-              taskStatus: thisdata.taskStatus, //任务状态
+              taskStatus: thisdata.taskStatus, //项目状态
               taskDate: thisdata.taskDate, //分配时间
               userName:
                 thisdata.taskName.substring(0, 5) === "软件著作权"
@@ -87,7 +92,9 @@ const Task = React.createClass({
                     ")"
                   : thisdata.userName, //用户名
               depName: thisdata.depName, //部门名称
-              commodityQuantity: thisdata.commodityQuantity //任务数量
+              commodityQuantity: thisdata.commodityQuantity, //项目数量
+              hours: thisdata.hours,
+              contractNo: thisdata.contractNo
             });
           }
         }
@@ -112,6 +119,7 @@ const Task = React.createClass({
   },
   getInitialState() {
     return {
+      timeVisible: false,
       searchMore: true,
       assignVisible: false,
       releaseDate: [],
@@ -139,14 +147,38 @@ const Task = React.createClass({
           return "共" + total + "条数据";
         }
       },
+      // 子组件改变的表格title数组
+      changeList: undefined,
+      columnsTime: [
+        {
+          title: "工作时长(小时)",
+          dataIndex: "hours",
+          key: "hours"
+        },
+        {
+          title: "工作时间",
+          dataIndex: "createTimes",
+          key: "createTimes"
+        },
+        // {
+        //   title: "项目负责人",
+        //   dataIndex: "remarks",
+        //   key: "remarks"
+        // },
+        {
+          title: "备注",
+          dataIndex: "remarks",
+          key: "remarks"
+        }
+      ],
       columns: [
         {
-          title: "任务编号",
+          title: "项目编号",
           dataIndex: "id",
           key: "id"
         },
         {
-          title: "任务名称",
+          title: "项目名称",
           dataIndex: "taskName",
           key: "taskName",
           render: text => {
@@ -159,6 +191,11 @@ const Task = React.createClass({
           key: "orderNo"
         },
         {
+          title: "合同编号",
+          dataIndex: "contractNo",
+          key: "contractNo"
+        },
+        {
           title: "业务类别",
           dataIndex: "cname",
           key: "cname"
@@ -170,7 +207,7 @@ const Task = React.createClass({
           className: "userName"
         },
         {
-          title: "任务状态",
+          title: "项目状态",
           dataIndex: "taskStatus",
           key: "taskStatus",
           render: text => {
@@ -196,6 +233,11 @@ const Task = React.createClass({
           key: "depName"
         },
         {
+          title: "累计工时(小时)",
+          dataIndex: "hours",
+          key: "hours"
+        },
+        {
           title: "操作",
           dataIndex: "caozuo",
           key: "caozuo",
@@ -212,6 +254,16 @@ const Task = React.createClass({
                 </Button>
                 <Button
                   type="primary"
+                  style={{ marginLeft: 10 }}
+                  onClick={e => {
+                    e.stopPropagation(),
+                      this.evaluate(record, "咨询师经理", true);
+                  }}
+                >
+                  回退
+                </Button>
+                <Button
+                  type="primary"
                   style={{ margin: "0 10px" }}
                   onClick={e => {
                     e.stopPropagation(), this.okCancel(record);
@@ -219,13 +271,18 @@ const Task = React.createClass({
                 >
                   添加工时
                 </Button>
+
                 <Button
                   type="primary"
                   onClick={e => {
-                    e.stopPropagation(), this.evaluate(record, "咨询师经理",true);
+                    e.stopPropagation();
+                    this.setState({
+                      timeVisible: true
+                    });
+                    this.timeDetail(record);
                   }}
                 >
-                  回退
+                  工时记录
                 </Button>
               </div>
             );
@@ -457,7 +514,7 @@ const Task = React.createClass({
     this.xiangmu(record.orderNo);
     this.loaduserss(record);
   },
-  //点击修改任务详情
+  //点击修改项目详情
   tijiaoOk() {
     let attachmentUrls = [];
     if (this.state.attachmentUrl.length) {
@@ -476,10 +533,10 @@ const Task = React.createClass({
       crossDomain: false,
       url: globalConfig.context + "/api/admin/orderProject/updateOrderTask",
       data: {
-        id: this.state.id, //任务编号
+        id: this.state.id, //项目编号
         orderNo: this.state.orderNo, //订单编号
         projectStatus: this.state.projectStatus, //项目状态
-        taskStatus: this.state.taskStatus, //任务状态
+        taskStatus: this.state.taskStatus, //项目状态
         taskComment: this.state.taskComment, //说明
         startDate: this.state.startDate, //启动日期
         endDate: this.state.endDate, //结束日期
@@ -523,7 +580,7 @@ const Task = React.createClass({
       }.bind(this)
     );
   },
-  //点击修改任务详情
+  //点击修改项目详情
   tianjiaOk() {
     if (this.state.attachmentUrl.length) {
       let picArr = [];
@@ -540,7 +597,7 @@ const Task = React.createClass({
       crossDomain: false,
       url: globalConfig.context + "/api/admin/orderProject/addTaskHours",
       data: {
-        taskId: this.state.taskId, //任务编号
+        taskId: this.state.taskId, //项目编号
         hours: this.state.hours, //工时
         remarks: this.state.remarks, //说明
         taskDate: this.state.taskDate, //日期
@@ -581,11 +638,11 @@ const Task = React.createClass({
             id: thisdata.id, //ID
             orderNo: thisdata.orderNo, //订单编号
             userName: thisdata.userName, //客户名称
-            taskName: thisdata.taskName, //任务名称
+            taskName: thisdata.taskName, //项目名称
             cname: thisdata.cname, //项目品类
             contractNo: thisdata.contractNo, //合同编号
             projectStatus: thisdata.projectStatus.toString(), //项目状态
-            taskStatus: thisdata.taskStatus.toString(), //任务状态
+            taskStatus: thisdata.taskStatus.toString(), //项目状态
             taskDate: thisdata.taskDate, //分配时间
             taskComment: thisdata.taskComment, //说明
             attachmentUrl: thisdata.attachmentUrl
@@ -708,8 +765,8 @@ const Task = React.createClass({
               cname: thisdata.cname, //项目类别
               commodityPrice: thisdata.commodityPrice, //项目价格
               commodityQuantity: thisdata.commodityQuantity, //项目数量
-              main: thisdata.main, //是否为主要任务
-              taskComment: thisdata.taskComment, //任务说明
+              main: thisdata.main, //是否为主要项目
+              taskComment: thisdata.taskComment, //项目说明
               contacts: thisdata.contacts, //联系人
               contactsMobile: thisdata.contactsMobile, //联系人电话
               taskStatus: thisdata.taskStatus, //是否分配
@@ -949,7 +1006,7 @@ const Task = React.createClass({
               key: i,
               id: thisdata.id, //日志ID
               content: thisdata.content, //流程
-              taskId: thisdata.taskId, //任务ID
+              taskId: thisdata.taskId, //项目ID
               aName: thisdata.aName, //负责人
               createTimes: thisdata.createTimes //时间
             });
@@ -1003,10 +1060,10 @@ const Task = React.createClass({
     this.loadData();
   },
   reset() {
-    this.state.id = ""; //任务编号
+    this.state.id = ""; //项目编号
     this.state.orderNo = ""; //订单编号
     this.state.projectStatus = undefined; //项目状态
-    this.state.taskStatus = undefined; //任务状态
+    this.state.taskStatus = undefined; //项目状态
     this.state.taskComment = ""; //说明
     this.state.startDate = ""; //启动日期
     this.state.endDate = ""; //结束日期
@@ -1019,7 +1076,7 @@ const Task = React.createClass({
     this.state.contactMobile = ""; //联系人电话
     this.state.legalPerson = ""; //法人
     this.state.legalPersonTel = ""; //法人电话
-    this.state.taskId = ""; //任务编号
+    this.state.taskId = ""; //项目编号
     this.state.hours = ""; //工时
     this.state.remarks = ""; //说明
     this.state.taskDate = ""; //日期
@@ -1079,6 +1136,59 @@ const Task = React.createClass({
       }.bind(this)
     );
   },
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach(item => {
+      arr.forEach(val => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr
+    });
+  },
+  timeClose() {
+    this.setState({
+      timeVisible: false
+    })
+  },
+  timeDetail(record) {
+    console.log(record);
+    
+    this.setState({
+      loading: true,
+      recordHour: record.hours
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url:
+        globalConfig.context + "/api/admin/orderProject/taskHoursDetailsList",
+      data: {
+        taskId: record.id
+      },
+      success: function(data) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }else {
+            this.setState({
+              dataSourceTime: data.data
+            });
+            console.log(this.state.dataSourceTime);
+            
+          }
+      }.bind(this)
+    }).always(
+      function() {
+        this.setState({
+          loading: false
+        });
+      }.bind(this)
+    );
+  },
   render() {
     const formItemLayout = {
       labelCol: { span: 8 },
@@ -1088,10 +1198,98 @@ const Task = React.createClass({
     return (
       <div className="user-content">
         <ShowModalDiv ShowModal={this.state.showModal} />
-        <div className="content-title">
-          <span>任务派单管理</span>
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>项目派单管理</span>
         </div>
-        <div className="user-search">
+        <Tabs defaultActiveKey="2" onChange={this.callback} className="test">
+          <TabPane tab="更改表格显示数据" key="1">
+            <div style={{ marginLeft: 10 }}>
+              <ChooseList
+                columns={this.state.columns}
+                changeFn={this.changeList}
+                changeList={this.state.changeList}
+                top={55}
+                margin={11}
+              />
+            </div>
+          </TabPane>
+          <TabPane tab="搜索" key="2">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="客户名称"
+                value={this.state.nameSearch}
+                onChange={e => {
+                  this.setState({ nameSearch: e.target.value });
+                }}
+              />
+              <Input
+                placeholder="订单编号"
+                value={this.state.orderNoSearch}
+                onChange={e => {
+                  this.setState({ orderNoSearch: e.target.value });
+                }}
+              />
+              <Input
+                placeholder="项目编号"
+                value={this.state.taskNoSearch}
+                onChange={e => {
+                  this.setState({ taskNoSearch: e.target.value });
+                }}
+              />
+              <Select
+                placeholder="选择部门"
+                style={{ width: 150, marginRight: "10px" }}
+                value={this.state.departmenttSearch}
+                onChange={e => {
+                  this.setState({ departmenttSearch: e });
+                }}
+              >
+                {departmentArr.map(function(item) {
+                  return (
+                    <Select.Option key={item.id}>{item.name}</Select.Option>
+                  );
+                })}
+              </Select>
+              <Button type="primary" onClick={this.search}>
+                搜索
+              </Button>
+              <Button onClick={this.reset}>重置</Button>
+
+              {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                        <span>订单时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+                    </div>  */}
+            </div>
+          </TabPane>
+          <TabPane tab="导出Excel" key="3">
+            <Button
+              type="primary"
+              style={{ margin: "11px 0 10px 10px" }}
+              onClick={this.exportExec}
+            >
+              导出Excel
+            </Button>
+          </TabPane>
+
+          {/* <TabPane tab="批量操作" key="6">
+            <Button
+              type="primary"
+              disabled={this.state.selectedRowKeys.length == 0}
+              style={{ margin: "0px 0px 10px 10px" }}
+              onClick={e => {
+                e.stopPropagation(),
+                  this.evaluateY(this.state.selectedRowKeys, "财务专员");
+              }}
+            >
+              转交
+            </Button>
+          </TabPane> */}
+        </Tabs>
+        {/* <div className="user-search">
           <Input
             placeholder="客户名称"
             value={this.state.nameSearch}
@@ -1107,7 +1305,7 @@ const Task = React.createClass({
             }}
           />
           <Input
-            placeholder="任务编号"
+            placeholder="项目编号"
             value={this.state.taskNoSearch}
             onChange={e => {
               this.setState({ taskNoSearch: e.target.value });
@@ -1136,27 +1334,33 @@ const Task = React.createClass({
           >
             导出Excel
           </Button>
-          {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
+          <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
                     <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
                         <span>订单时间 :</span>
                         <RangePicker
                             value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
                             this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
                             onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
-                    </div> */}
-        </div>
+                    </div> 
+        </div> */}
         <div className="patent-table">
           <Spin spinning={this.state.loading}>
             <Table
-              columns={this.state.columns}
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
               dataSource={this.state.dataSource}
               pagination={this.state.pagination}
               onRowClick={this.tableRowClick.bind(this)}
+              bordered
+              size={"small"}
             />
           </Spin>
         </div>
         <Assign
-          title="任务"
+          title="项目"
           selApi={"/api/admin/orderProject/projectDistribution"}
           data={this.state.assignData}
           showDesc={this.state.assignVisible}
@@ -1545,28 +1749,28 @@ const Task = React.createClass({
                 </div>
                 {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
                 <div className="clearfix">
-                  <h3 className="sub-title">任务信息</h3>
+                  <h3 className="sub-title">项目信息</h3>
                   <FormItem
                     className="half-item"
                     {...formItemLayout}
-                    label="任务编号"
+                    label="项目编号"
                   >
                     <span>{this.state.id}</span>
                   </FormItem>
                   <FormItem
                     className="half-item"
                     {...formItemLayout}
-                    label="任务名称"
+                    label="项目名称"
                   >
                     <span>{this.state.taskName}</span>
                   </FormItem>
                   <FormItem
                     className="half-item"
                     {...formItemLayout}
-                    label="任务状态"
+                    label="项目状态"
                   >
                     <Select
-                      placeholder="选择任务状态"
+                      placeholder="选择项目状态"
                       style={{ width: "200px" }}
                       value={this.state.taskStatus}
                       onChange={e => {
@@ -1585,7 +1789,7 @@ const Task = React.createClass({
                   <FormItem
                     className="half-item"
                     {...formItemLayout}
-                    label="任务类别"
+                    label="项目类别"
                   >
                     <span>{this.state.cname}</span>
                   </FormItem>
@@ -1982,7 +2186,7 @@ const Task = React.createClass({
           onOk={this.nextCancel}
           onCancel={this.nextCancel}
           width="800px"
-          title="项目任务详情"
+          title="项目项目详情"
           footer=""
           className="admin-desc-content"
         >
@@ -2353,28 +2557,28 @@ const Task = React.createClass({
           </div>
           {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
           <div className="clearfix">
-            <h3 className="sub-title">任务信息</h3>
+            <h3 className="sub-title">项目信息</h3>
             <FormItem
               className="half-item"
               {...formItemLayout}
-              label="任务编号"
+              label="项目编号"
             >
               <span>{this.state.id}</span>
             </FormItem>
             <FormItem
               className="half-item"
               {...formItemLayout}
-              label="任务名称"
+              label="项目名称"
             >
               <span>{this.state.taskName}</span>
             </FormItem>
             <FormItem
               className="half-item"
               {...formItemLayout}
-              label="任务状态"
+              label="项目状态"
             >
               <Select
-                placeholder="选择任务状态"
+                placeholder="选择项目状态"
                 style={{ width: "200px" }}
                 value={this.state.taskStatus}
                 onChange={e => {
@@ -2391,7 +2595,7 @@ const Task = React.createClass({
             <FormItem
               className="half-item"
               {...formItemLayout}
-              label="任务类别"
+              label="项目类别"
             >
               <span>{this.state.cname}</span>
             </FormItem>
@@ -2544,6 +2748,26 @@ const Task = React.createClass({
             </Spin>
           </div>
         </Modal>
+        <Modal
+          title="工时记录"
+          visible={this.state.timeVisible}
+          onCancel={this.timeClose}
+          footer={null}
+        >
+          <Spin spinning={this.state.loading}>
+            <Table
+              columns={this.state.columnsTime}
+              dataSource={this.state.dataSourceTime}
+              pagination={false}
+              width={600}
+              bordered
+              size={"small"}
+            />
+            <p style={{ marginTop: 10, color: "red" }}>
+              累计工时(小时):{this.state.recordHour}
+            </p>
+          </Spin>
+        </Modal>
       </div>
     );
   }

+ 260 - 90
js/component/manageCenter/project/task/myTaskOutsource.jsx

@@ -3,6 +3,7 @@ import $ from "jquery";
 import moment from "moment";
 import Picture from "@/manageCenter/publicComponent/picture";
 import "@/manageCenter/financialManage/distribute/public.less";
+import "@/manageCenter/financialManage/distribute/shouKuan.less";
 import {
   Button,
   Form,
@@ -21,6 +22,7 @@ import {
 } from "antd";
 import Assign from "@/manageCenter/publicComponent/assign";
 import { areaSelect } from "@/NewDicProvinceList";
+import { ChooseList } from "../../order/orderNew/chooseList";
 import "./table.less";
 import {
   getProcessStatus,
@@ -37,7 +39,8 @@ import {
 import { taskStatus, projectStatus } from "@/dataDic.js";
 import ShowModalDiv from "@/showModal.jsx";
 const FormItem = Form.Item;
-
+const { TabPane } = Tabs;
+const { MonthPicker, RangePicker } = DatePicker;
 const MyTaskOutsource = React.createClass({
   loadData(pageNo) {
     this.state.data = [];
@@ -57,9 +60,9 @@ const MyTaskOutsource = React.createClass({
         name: this.state.nameSearch, //客户名称
         depId: this.state.departmenttSearch, //订单部门
         orderNo: this.state.orderNoSearch, //订单编号
-        taskId: this.state.taskNoSearch, //任务编号
-        taskStatus: this.state.taskStatus, //任务状态
-        adminName: this.state.adminName, //任务受理人
+        taskId: this.state.taskNoSearch, //项目编号
+        taskStatus: this.state.taskStatus, //项目状态
+        adminName: this.state.adminName, //项目受理人
         outsource: 1
       },
       success: function(data) {
@@ -75,12 +78,12 @@ const MyTaskOutsource = React.createClass({
             theArr.push({
               key: i,
               orderNo: thisdata.orderNo, //订单编号
-              id: thisdata.id, //任务ID
+              id: thisdata.id, //项目ID
               taskName: thisdata.taskName, //名称
               cname: thisdata.cname, //项目品类
               receiverName: thisdata.receiverName, //受理人
               projectStatus: thisdata.projectStatus, //项目状态
-              taskStatus: thisdata.taskStatus, //任务状态
+              taskStatus: thisdata.taskStatus, //项目状态
               taskDate: thisdata.taskDate, //分配时间
               userName:
                 thisdata.taskName.substring(0, 5) === "软件著作权"
@@ -92,8 +95,10 @@ const MyTaskOutsource = React.createClass({
                     ")"
                   : thisdata.userName, //用户名
               depName: thisdata.depName, //部门名称
-              commodityQuantity: thisdata.commodityQuantity, //任务数量
-              outsourceName: thisdata.outsourceName
+              commodityQuantity: thisdata.commodityQuantity, //项目数量
+              outsourceName: thisdata.outsourceName,
+              hours: thisdata.hours,
+              contractNo: thisdata.contractNo
             });
           }
         }
@@ -117,6 +122,7 @@ const MyTaskOutsource = React.createClass({
   getInitialState() {
     return {
       page: 1,
+      timeVisible: false,
       searchMore: true,
       assignVisible: false,
       releaseDate: [],
@@ -142,21 +148,45 @@ const MyTaskOutsource = React.createClass({
         onChange: function(page) {
           this.loadData(page);
           this.setState({
-            page,
-          })
+            page
+          });
         }.bind(this),
         showTotal: function(total) {
           return "共" + total + "条数据";
         }
       },
+      // 子组件改变的表格title数组
+      changeList: undefined,
+      columnsTime: [
+        {
+          title: "工作时长(小时)",
+          dataIndex: "hours",
+          key: "hours"
+        },
+        {
+          title: "工作时间",
+          dataIndex: "createTimes",
+          key: "createTimes"
+        },
+        // {
+        //   title: "项目负责人",
+        //   dataIndex: "remarks",
+        //   key: "remarks"
+        // },
+        {
+          title: "备注",
+          dataIndex: "remarks",
+          key: "remarks"
+        }
+      ],
       columns: [
         {
-          title: "任务编号",
+          title: "项目编号",
           dataIndex: "id",
           key: "id"
         },
         {
-          title: "任务名称",
+          title: "项目名称",
           dataIndex: "taskName",
           key: "taskName",
           render: text => {
@@ -169,6 +199,11 @@ const MyTaskOutsource = React.createClass({
           key: "orderNo"
         },
         {
+          title: "合同编号",
+          dataIndex: "contractNo",
+          key: "contractNo"
+        },
+        {
           title: "业务类别",
           dataIndex: "cname",
           key: "cname"
@@ -185,7 +220,7 @@ const MyTaskOutsource = React.createClass({
           key: "outsourceName"
         },
         {
-          title: "任务状态",
+          title: "项目状态",
           dataIndex: "taskStatus",
           key: "taskStatus",
           render: text => {
@@ -211,6 +246,11 @@ const MyTaskOutsource = React.createClass({
           key: "depName"
         },
         {
+          title: "累计工时(小时)",
+          dataIndex: "hours",
+          key: "hours"
+        },
+        {
           title: "操作",
           dataIndex: "caozuo",
           key: "caozuo",
@@ -227,6 +267,16 @@ const MyTaskOutsource = React.createClass({
                 </Button>
                 <Button
                   type="primary"
+                  style={{ marginLeft: 10 }}
+                  onClick={e => {
+                    e.stopPropagation(),
+                      this.evaluate(record, "咨询师经理", true);
+                  }}
+                >
+                  回退
+                </Button>
+                <Button
+                  type="primary"
                   style={{ margin: "0 10px" }}
                   onClick={e => {
                     e.stopPropagation(), this.okCancel(record);
@@ -234,14 +284,18 @@ const MyTaskOutsource = React.createClass({
                 >
                   添加工时
                 </Button>
+
                 <Button
                   type="primary"
                   onClick={e => {
-                    e.stopPropagation(),
-                      this.evaluate(record, "咨询师经理", true);
+                    e.stopPropagation();
+                    this.setState({
+                      timeVisible: true
+                    });
+                    this.timeDetail(record);
                   }}
                 >
-                  回退
+                  工时记录
                 </Button>
               </div>
             );
@@ -554,10 +608,10 @@ const MyTaskOutsource = React.createClass({
     this.xiangmu(record.orderNo);
     this.loaduserss(record);
   },
-  //点击修改任务详情
+  //点击修改项目详情
   tijiaoOk() {
-    if(moneyVerify(this.state.setUpAmount)) {
-      return
+    if (moneyVerify(this.state.setUpAmount)) {
+      return;
     }
     let attachmentUrls = [];
     if (this.state.attachmentUrl.length) {
@@ -576,10 +630,10 @@ const MyTaskOutsource = React.createClass({
       crossDomain: false,
       url: globalConfig.context + "/api/admin/orderProject/updateOrderTask",
       data: {
-        id: this.state.id, //任务编号
+        id: this.state.id, //项目编号
         orderNo: this.state.orderNo, //订单编号
         projectStatus: this.state.projectStatus, //项目状态
-        taskStatus: this.state.taskStatus, //任务状态
+        taskStatus: this.state.taskStatus, //项目状态
         taskComment: this.state.taskComment, //说明
         startDate: this.state.startDate, //启动日期
         endDate: this.state.endDate, //结束日期
@@ -623,7 +677,7 @@ const MyTaskOutsource = React.createClass({
       }.bind(this)
     );
   },
-  //点击修改任务详情
+  //点击修改项目详情
   tianjiaOk() {
     if (this.state.attachmentUrl.length) {
       let picArr = [];
@@ -640,7 +694,7 @@ const MyTaskOutsource = React.createClass({
       crossDomain: false,
       url: globalConfig.context + "/api/admin/orderProject/addTaskHours",
       data: {
-        taskId: this.state.taskId, //任务编号
+        taskId: this.state.taskId, //项目编号
         hours: this.state.hours, //工时
         remarks: this.state.remarks, //说明
         taskDate: this.state.taskDate, //日期
@@ -681,11 +735,11 @@ const MyTaskOutsource = React.createClass({
             id: thisdata.id, //ID
             orderNo: thisdata.orderNo, //订单编号
             userName: thisdata.userName, //客户名称
-            taskName: thisdata.taskName, //任务名称
+            taskName: thisdata.taskName, //项目名称
             cname: thisdata.cname, //项目品类
             contractNo: thisdata.contractNo, //合同编号
             projectStatus: thisdata.projectStatus.toString(), //项目状态
-            taskStatus: thisdata.taskStatus.toString(), //任务状态
+            taskStatus: thisdata.taskStatus.toString(), //项目状态
             taskDate: thisdata.taskDate, //分配时间
             taskComment: thisdata.taskComment, //说明
             attachmentUrl: thisdata.attachmentUrl
@@ -807,8 +861,8 @@ const MyTaskOutsource = React.createClass({
               cname: thisdata.cname, //项目类别
               commodityPrice: thisdata.commodityPrice, //项目价格
               commodityQuantity: thisdata.commodityQuantity, //项目数量
-              main: thisdata.main, //是否为主要任务
-              taskComment: thisdata.taskComment, //任务说明
+              main: thisdata.main, //是否为主要项目
+              taskComment: thisdata.taskComment, //项目说明
               contacts: thisdata.contacts, //联系人
               contactsMobile: thisdata.contactsMobile, //联系人电话
               taskStatus: thisdata.taskStatus, //是否分配
@@ -1051,7 +1105,7 @@ const MyTaskOutsource = React.createClass({
               key: i,
               id: thisdata.id, //日志ID
               content: thisdata.content, //流程
-              taskId: thisdata.taskId, //任务ID
+              taskId: thisdata.taskId, //项目ID
               aName: thisdata.aName, //负责人
               createTimes: thisdata.createTimes //时间
             });
@@ -1301,10 +1355,10 @@ const MyTaskOutsource = React.createClass({
     this.loadData();
   },
   reset() {
-    this.state.id = ""; //任务编号
+    this.state.id = ""; //项目编号
     this.state.orderNo = ""; //订单编号
     this.state.projectStatus = undefined; //项目状态
-    this.state.taskStatus = undefined; //任务状态
+    this.state.taskStatus = undefined; //项目状态
     this.state.taskComment = ""; //说明
     this.state.startDate = ""; //启动日期
     this.state.endDate = ""; //结束日期
@@ -1317,7 +1371,7 @@ const MyTaskOutsource = React.createClass({
     this.state.contactMobile = ""; //联系人电话
     this.state.legalPerson = ""; //法人
     this.state.legalPersonTel = ""; //法人电话
-    this.state.taskId = ""; //任务编号
+    this.state.taskId = ""; //项目编号
     this.state.hours = ""; //工时
     this.state.remarks = ""; //说明
     this.state.taskDate = ""; //日期
@@ -1377,6 +1431,58 @@ const MyTaskOutsource = React.createClass({
       }.bind(this)
     );
   },
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach(item => {
+      arr.forEach(val => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr
+    });
+  },
+  timeClose() {
+    this.setState({
+      timeVisible: false
+    });
+  },
+  timeDetail(record) {
+    console.log(record);
+
+    this.setState({
+      loading: true,
+      recordHour: record.hours
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url:
+        globalConfig.context + "/api/admin/orderProject/taskHoursDetailsList",
+      data: {
+        taskId: record.id
+      },
+      success: function(data) {
+        if (data.error && data.error.length) {
+          message.warning(data.error[0].message);
+        } else {
+          this.setState({
+            dataSourceTime: data.data
+          });
+          console.log(this.state.dataSourceTime);
+        }
+      }.bind(this)
+    }).always(
+      function() {
+        this.setState({
+          loading: false
+        });
+      }.bind(this)
+    );
+  },
   render() {
     const { TabPane } = Tabs;
     const formItemLayout = {
@@ -1387,69 +1493,115 @@ const MyTaskOutsource = React.createClass({
     return (
       <div className="user-content">
         <ShowModalDiv ShowModal={this.state.showModal} />
-        <div className="content-title">
-          <span>我的外包任务</span>
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>我的外包项目</span>
         </div>
-        <div className="user-search">
-          <Input
-            placeholder="客户名称"
-            value={this.state.nameSearch}
-            onChange={e => {
-              this.setState({ nameSearch: e.target.value });
-            }}
-          />
-          <Input
-            placeholder="订单编号"
-            value={this.state.orderNoSearch}
-            onChange={e => {
-              this.setState({ orderNoSearch: e.target.value });
-            }}
-          />
-          <Input
-            placeholder="任务编号"
-            value={this.state.taskNoSearch}
-            onChange={e => {
-              this.setState({ taskNoSearch: e.target.value });
-            }}
-          />
-          <Select
-            placeholder="选择部门"
-            style={{ width: 150, marginRight: "10px" }}
-            value={this.state.departmenttSearch}
-            onChange={e => {
-              this.setState({ departmenttSearch: e });
-            }}
-          >
-            {departmentArr.map(function(item) {
-              return <Select.Option key={item.id}>{item.name}</Select.Option>;
-            })}
-          </Select>
-          <Button type="primary" onClick={this.search}>
-            搜索
-          </Button>
-          <Button onClick={this.reset}>重置</Button>
-          {/*<Button type='primary' style={{marginLeft:'10px'}} onClick={this.exportExec}>导出Excel</Button>*/}
-          {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
+        <Tabs defaultActiveKey="2" onChange={this.callback} className="test">
+          <TabPane tab="更改表格显示数据" key="1">
+            <div style={{ marginLeft: 10 }}>
+              <ChooseList
+                columns={this.state.columns}
+                changeFn={this.changeList}
+                changeList={this.state.changeList}
+                top={55}
+                margin={11}
+              />
+            </div>
+          </TabPane>
+          <TabPane tab="搜索" key="2">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="客户名称"
+                value={this.state.nameSearch}
+                onChange={e => {
+                  this.setState({ nameSearch: e.target.value });
+                }}
+              />
+              <Input
+                placeholder="订单编号"
+                value={this.state.orderNoSearch}
+                onChange={e => {
+                  this.setState({ orderNoSearch: e.target.value });
+                }}
+              />
+              <Input
+                placeholder="项目编号"
+                value={this.state.taskNoSearch}
+                onChange={e => {
+                  this.setState({ taskNoSearch: e.target.value });
+                }}
+              />
+              <Select
+                placeholder="选择部门"
+                style={{ width: 150, marginRight: "10px" }}
+                value={this.state.departmenttSearch}
+                onChange={e => {
+                  this.setState({ departmenttSearch: e });
+                }}
+              >
+                {departmentArr.map(function(item) {
+                  return (
+                    <Select.Option key={item.id}>{item.name}</Select.Option>
+                  );
+                })}
+              </Select>
+              <Button type="primary" onClick={this.search}>
+                搜索
+              </Button>
+              <Button onClick={this.reset}>重置</Button>
+
+              {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
                     <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
                         <span>订单时间 :</span>
                         <RangePicker
                             value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
                             this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
                             onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
-                    </div> */}
-        </div>
+                    </div>  */}
+            </div>
+          </TabPane>
+          <TabPane tab="导出Excel" key="3">
+            <Button
+              type="primary"
+              style={{ margin: "11px 0 10px 10px" }}
+              onClick={this.exportExec}
+            >
+              导出Excel
+            </Button>
+          </TabPane>
+
+          {/* <TabPane tab="批量操作" key="6">
+            <Button
+              type="primary"
+              disabled={this.state.selectedRowKeys.length == 0}
+              style={{ margin: "0px 0px 10px 10px" }}
+              onClick={e => {
+                e.stopPropagation(),
+                  this.evaluateY(this.state.selectedRowKeys, "财务专员");
+              }}
+            >
+              转交
+            </Button>
+          </TabPane> */}
+        </Tabs>
         <div className="patent-table">
           <Spin spinning={this.state.loading}>
             <Table
-              columns={this.state.columns}
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
               dataSource={this.state.dataSource}
               pagination={this.state.pagination}
               onRowClick={this.tableRowClick.bind(this)}
+              bordered
+              size={"small"}
             />
           </Spin>
         </div>
         <Assign
-          title="任务"
+          title="项目"
           selApi={"/api/admin/orderProject/projectDistribution"}
           data={this.state.assignData}
           showDesc={this.state.assignVisible}
@@ -1819,28 +1971,28 @@ const MyTaskOutsource = React.createClass({
                     </div>
                     {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
                     <div className="clearfix">
-                      <h3 className="sub-title">任务信息</h3>
+                      <h3 className="sub-title">项目信息</h3>
                       <FormItem
                         className="half-item"
                         {...formItemLayout}
-                        label="任务编号"
+                        label="项目编号"
                       >
                         <span>{this.state.id}</span>
                       </FormItem>
                       <FormItem
                         className="half-item"
                         {...formItemLayout}
-                        label="任务名称"
+                        label="项目名称"
                       >
                         <span>{this.state.taskName}</span>
                       </FormItem>
                       <FormItem
                         className="half-item"
                         {...formItemLayout}
-                        label="任务状态"
+                        label="项目状态"
                       >
                         <Select
-                          placeholder="选择任务状态"
+                          placeholder="选择项目状态"
                           style={{ width: "200px" }}
                           value={this.state.taskStatus}
                           onChange={e => {
@@ -1859,7 +2011,7 @@ const MyTaskOutsource = React.createClass({
                       <FormItem
                         className="half-item"
                         {...formItemLayout}
-                        label="任务类别"
+                        label="项目类别"
                       >
                         <span>{this.state.cname}</span>
                       </FormItem>
@@ -2408,7 +2560,7 @@ const MyTaskOutsource = React.createClass({
           onOk={this.nextCancel}
           onCancel={this.nextCancel}
           width="800px"
-          title="项目任务详情"
+          title="项目项目详情"
           footer=""
           className="admin-desc-content"
         >
@@ -2765,28 +2917,28 @@ const MyTaskOutsource = React.createClass({
               </div>
               {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
               <div className="clearfix">
-                <h3 className="sub-title">任务信息</h3>
+                <h3 className="sub-title">项目信息</h3>
                 <FormItem
                   className="half-item"
                   {...formItemLayout}
-                  label="任务编号"
+                  label="项目编号"
                 >
                   <span>{this.state.id}</span>
                 </FormItem>
                 <FormItem
                   className="half-item"
                   {...formItemLayout}
-                  label="任务名称"
+                  label="项目名称"
                 >
                   <span>{this.state.taskName}</span>
                 </FormItem>
                 <FormItem
                   className="half-item"
                   {...formItemLayout}
-                  label="任务状态"
+                  label="项目状态"
                 >
                   <Select
-                    placeholder="选择任务状态"
+                    placeholder="选择项目状态"
                     style={{ width: "200px" }}
                     value={this.state.taskStatus}
                     onChange={e => {
@@ -2805,7 +2957,7 @@ const MyTaskOutsource = React.createClass({
                 <FormItem
                   className="half-item"
                   {...formItemLayout}
-                  label="任务类别"
+                  label="项目类别"
                 >
                   <span>{this.state.cname}</span>
                 </FormItem>
@@ -3106,6 +3258,24 @@ const MyTaskOutsource = React.createClass({
             </Spin>
           </div>
         </Modal>
+        <Modal
+          title="工时记录"
+          visible={this.state.timeVisible}
+          onCancel={this.timeClose}
+          footer={null}
+        >
+          <Spin spinning={this.state.loading}>
+            <Table
+              columns={this.state.columnsTime}
+              dataSource={this.state.dataSourceTime}
+              pagination={false}
+              width={600}
+              bordered
+              size={"small"}
+            />
+            <p style={{ marginTop: 10, color: "red" }}>累计工时(小时):{this.state.recordHour}</p>
+          </Spin>
+        </Modal>
       </div>
     );
   }

+ 13 - 0
js/component/manageCenter/project/task/table.less

@@ -34,4 +34,17 @@
 }
 .height-input{
 	height: 2.7em
+}
+.ant-tabs-bar {
+    border-bottom: 1px solid #d9d9d9;
+    margin-bottom: 0px !important;
+    outline: none;
+    transition: padding .45s;
+}
+.ant-tabs.ant-tabs-top.test.ant-tabs-line {
+	background-color: #f5f5f5 !important;
+	margin-bottom: 10px !important;
+}
+.ant-tabs-tab {
+    font-weight: 900 !important;
 }

+ 1 - 1
js/component/manageCenter/project/task/taskAssignment.jsx

@@ -33,7 +33,7 @@ const Task = React.createClass({
         specially: 1, //经理
         name: this.state.nameSearch, //客户名称
         orderNo: this.state.orderNoSearch, //订单编号
-        taskId: this.state.taskId, //任务编号
+        taskId: this.state.taskNoSearch, //任务编号
         depId: this.state.departmenttSearch, //订单部门
         taskStatus: this.state.taskStatus, //任务状态
         adminName: this.state.adminName //任务受理人

+ 65 - 56
js/component/manageCenter/project/task/taskQuery.jsx

@@ -26,65 +26,74 @@ const Task = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "get",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/api/admin/orderProject/selectTaskList",
-            data: {
-                pageNo: pageNo || this.state.page || 1,
-                pageSize: this.state.pagination.pageSize,
-                specially:1,//经理
-                name: this.state.nameSearch,//客户名称
-                orderNo:this.state.orderNoSearch,//订单编号
-                depId: this.state.departmenttSearch,//订单部门
-                taskId:this.state.taskId, //任务编号
-                adminName:this.state.adminName,//任务受理人
-            },
-            success: function (data) {
-				ShowModal(this);
-                let theArr = [];
-                if (!data.data || !data.data.list) {
-                    if (data.error && data.error.length) {
-                        message.warning(data.error[0].message);
-                    };
-                } else {
-                    for (let i = 0; i < data.data.list.length; i++) {
-                        let thisdata = data.data.list[i];
-                        theArr.push({
-                            key: i,
-                            orderNo: thisdata.orderNo,//订单编号
-                            id:thisdata.id,//任务ID
-		                    taskName:thisdata.taskName,//名称
-		                    cname:thisdata.cname,//项目品类
-                            receiverName:thisdata.receiverName,//受理人
-                            projectStatus:thisdata.projectStatus,//项目状态
-                            taskStatus:thisdata.taskStatus,//任务状态
-                            taskDate:thisdata.taskDate,//分配时间
-                            commodityQuantity:thisdata.commodityQuantity,//软著数量
-							alreadyNumber:thisdata.alreadyNumber,//下证数量
-                            userName:thisdata.taskName.substring(0,5) === '软件著作权'?thisdata.userName+'('+thisdata.commodityQuantity.toString()+'/'+thisdata.alreadyNumber+')':thisdata.userName,//用户名
-                            depName:thisdata.depName,//部门名称
-                            receiverName:thisdata.receiverName,//任务责任人
-                        });
-                    };
-                }
-                this.state.pagination.current = data.data.pageNo;
-                this.state.pagination.total = data.data.totalCount;
-                if(data.data&&data.data.list&&!data.data.list.length){
-					this.state.pagination.current=0
-					this.state.pagination.total=0
-				}
-                this.setState({
-                    dataSource: theArr,
-                    pagination: this.state.pagination
+          method: "get",
+          dataType: "json",
+          crossDomain: false,
+          url: globalConfig.context + "/api/admin/orderProject/selectTaskList",
+          data: {
+            pageNo: pageNo || this.state.page || 1,
+            pageSize: this.state.pagination.pageSize,
+            specially: 1, //经理
+            name: this.state.nameSearch, //客户名称
+            orderNo: this.state.orderNoSearch, //订单编号
+            depId: this.state.departmenttSearch, //订单部门
+            taskId: this.state.taskNoSearch, //任务编号
+            adminName: this.state.adminName //任务受理人
+          },
+          success: function(data) {
+            ShowModal(this);
+            let theArr = [];
+            if (!data.data || !data.data.list) {
+              if (data.error && data.error.length) {
+                message.warning(data.error[0].message);
+              }
+            } else {
+              for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                theArr.push({
+                  key: i,
+                  orderNo: thisdata.orderNo, //订单编号
+                  id: thisdata.id, //任务ID
+                  taskName: thisdata.taskName, //名称
+                  cname: thisdata.cname, //项目品类
+                  receiverName: thisdata.receiverName, //受理人
+                  projectStatus: thisdata.projectStatus, //项目状态
+                  taskStatus: thisdata.taskStatus, //任务状态
+                  taskDate: thisdata.taskDate, //分配时间
+                  commodityQuantity: thisdata.commodityQuantity, //软著数量
+                  alreadyNumber: thisdata.alreadyNumber, //下证数量
+                  userName:
+                    thisdata.taskName.substring(0, 5) === "软件著作权"
+                      ? thisdata.userName +
+                        "(" +
+                        thisdata.commodityQuantity.toString() +
+                        "/" +
+                        thisdata.alreadyNumber +
+                        ")"
+                      : thisdata.userName, //用户名
+                  depName: thisdata.depName, //部门名称
+                  receiverName: thisdata.receiverName //任务责任人
                 });
-				
-            }.bind(this),
-        }).always(function () {
+              }
+            }
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            if (data.data && data.data.list && !data.data.list.length) {
+              this.state.pagination.current = 0;
+              this.state.pagination.total = 0;
+            }
             this.setState({
-                loading: false
+              dataSource: theArr,
+              pagination: this.state.pagination
             });
-        }.bind(this));
+          }.bind(this)
+        }).always(
+          function() {
+            this.setState({
+              loading: false
+            });
+          }.bind(this)
+        );
     },
     getInitialState() {
         return {