|
@@ -1,51 +1,10 @@
|
|
|
import React from 'react';
|
|
|
import { Icon, Form, Button, Input, Select, Spin, Table, DatePicker, message, Modal, Checkbox, Upload } from 'antd';
|
|
|
import { cognizanceStateList } from '../../../dataDic.js';
|
|
|
-import { getCognizanceState, beforeUpload, getBase64 } from '../../../tools.js';
|
|
|
+import { getCognizanceState, beforeUpload, getBase64, beforeUploadFile, downloadFile } from '../../../tools.js';
|
|
|
import ajax from 'jquery/src/ajax/xhr.js';
|
|
|
import $ from 'jquery/src/ajax';
|
|
|
|
|
|
-class Avatar extends React.Component {
|
|
|
- constructor(props) {
|
|
|
- super(props);
|
|
|
- this.state = {
|
|
|
- imageUrl: ''
|
|
|
- }
|
|
|
- }
|
|
|
- handleChange(info) {
|
|
|
- if (!this.props.oid || this.props.oid === "") {
|
|
|
- message.warning('请先选择公司!');
|
|
|
- return;
|
|
|
- };
|
|
|
- if (info.file.status === 'done') {
|
|
|
- // Get this url from response in real world.
|
|
|
- getBase64(info.file.originFileObj, imageUrl => this.setState({ imageUrl }));
|
|
|
- this.props.urlData(info.file.response.data);
|
|
|
- }
|
|
|
- }
|
|
|
- render() {
|
|
|
- const imageUrl = this.state.imageUrl;
|
|
|
- return (
|
|
|
- <Upload
|
|
|
- className="avatar-uploader"
|
|
|
- name="avatar"
|
|
|
- showUploadList={false}
|
|
|
- action={globalConfig.context + "/techservice/patent/patentFile"}
|
|
|
- data={{ 'sign': this.props.name, 'oid': this.props.oid }}
|
|
|
- beforeUpload={beforeUpload}
|
|
|
- onChange={this.handleChange.bind(this)}
|
|
|
- >
|
|
|
- {
|
|
|
- imageUrl ?
|
|
|
- <img src={imageUrl} role="presentation" className="avatar" /> :
|
|
|
- <Icon type="plus" className="avatar-uploader-trigger" />
|
|
|
- }
|
|
|
- </Upload>
|
|
|
- );
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-
|
|
|
const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
loadData() {
|
|
|
this.setState({
|
|
@@ -55,38 +14,28 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
method: "post",
|
|
|
dataType: "json",
|
|
|
crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/cognizanceDetail",
|
|
|
+ url: globalConfig.context + "/api/admintechproject/techProjectDetial",
|
|
|
data: {
|
|
|
- cid: this.props.data.cid,
|
|
|
- uid: this.props.data.uid,
|
|
|
- year: this.props.data.year
|
|
|
+ pid: this.props.data.pid
|
|
|
},
|
|
|
success: function (data) {
|
|
|
+
|
|
|
if (data.error.length || !data.data) {
|
|
|
message.warning(data.error[0].message);
|
|
|
return;
|
|
|
};
|
|
|
this.state.data = data.data;
|
|
|
- this.state.cid = this.props.data.cid;
|
|
|
- this.state.moneyTable = [{
|
|
|
- key: 1,
|
|
|
- year: '第一年',
|
|
|
- netAsset: data.data.netAsset1,
|
|
|
- salesRevenue: data.data.salesRevenue1,
|
|
|
- grossProfit: data.data.grossProfit1
|
|
|
- }, {
|
|
|
- key: 2,
|
|
|
- year: '第二年',
|
|
|
- netAsset: data.data.netAsset2,
|
|
|
- salesRevenue: data.data.salesRevenue2,
|
|
|
- grossProfit: data.data.grossProfit2
|
|
|
- }, {
|
|
|
- key: 3,
|
|
|
- year: '第三年',
|
|
|
- netAsset: data.data.netAsset3,
|
|
|
- salesRevenue: data.data.salesRevenue3,
|
|
|
- grossProfit: data.data.grossProfit3
|
|
|
- }];
|
|
|
+
|
|
|
+ if (data.data.projectMode == 1) {
|
|
|
+ this.state.projectMode = data.data.projectMode;
|
|
|
+ this.setState({projectModeState:true});
|
|
|
+ }
|
|
|
+ if (data.data.subsidy == 1) {
|
|
|
+ this.state.subsidy = data.data.subsidy;
|
|
|
+ this.setState({subsidyState:true});
|
|
|
+ }
|
|
|
+ this.getDepartmentList();
|
|
|
+ this.getContactsList();
|
|
|
}.bind(this),
|
|
|
}).always(function () {
|
|
|
this.setState({
|
|
@@ -102,21 +51,22 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
method: "post",
|
|
|
dataType: "json",
|
|
|
crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/cognizanceLog",
|
|
|
+ url: globalConfig.context + "/api/admintechproject/techProjectLog",
|
|
|
data: {
|
|
|
- cid: this.props.data.cid
|
|
|
+ pid: this.props.data.pid
|
|
|
},
|
|
|
success: function (data) {
|
|
|
if (data.error.length || !data.data) {
|
|
|
message.warning(data.error[0].message);
|
|
|
return;
|
|
|
};
|
|
|
+ var myDate = new Date();
|
|
|
this.state.stateTable = [];
|
|
|
for (let i = 0; i < data.data.length; i++) {
|
|
|
this.state.stateTable.push({
|
|
|
key: i,
|
|
|
- recordTimeFormattedDate: data.data[i].recordTimeFormattedDate,
|
|
|
state: data.data[i].state,
|
|
|
+ recordTime: myDate.toLocaleDateString(data.data[i].recordTime),
|
|
|
principal: data.data[i].principal,
|
|
|
comment: data.data[i].comment
|
|
|
});
|
|
@@ -128,13 +78,73 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
});
|
|
|
}.bind(this));
|
|
|
},
|
|
|
+ getDepartmentList () {
|
|
|
+ this.setState({
|
|
|
+ loading: true
|
|
|
+ });
|
|
|
+ $.ajax({
|
|
|
+ method: "post",
|
|
|
+ dataType: "json",
|
|
|
+ crossDomain: false,
|
|
|
+ url: globalConfig.context + "/api/user/getDepartment",
|
|
|
+ data: {
|
|
|
+ uid: this.props.data.uid,
|
|
|
+ },
|
|
|
+ success: function (data) {
|
|
|
+ if (data.error.length || !data.data) {
|
|
|
+ message.warning(data.error[0].message);
|
|
|
+ return;
|
|
|
+ };
|
|
|
+ for (var item in data.data) {
|
|
|
+ this.state.departmentOption.push(
|
|
|
+ <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
|
|
|
+ )
|
|
|
+ };
|
|
|
+ this.setState({department:data.data[this.state.data.department]});
|
|
|
+ }.bind(this),
|
|
|
+ }).always(function () {
|
|
|
+ this.setState({
|
|
|
+ loading: false
|
|
|
+ });
|
|
|
+ }.bind(this));
|
|
|
+ },
|
|
|
+ getContactsList() {
|
|
|
+ $.ajax({
|
|
|
+ method: "post",
|
|
|
+ dataType: "json",
|
|
|
+ crossDomain: false,
|
|
|
+ url: globalConfig.context + "/api/admin/getContacts",
|
|
|
+ data: {
|
|
|
+ uid: this.props.data.uid,
|
|
|
+ },
|
|
|
+ success: function (data) {
|
|
|
+ let theOption = [];
|
|
|
+ if (data.error.length || !data.data) {
|
|
|
+ return;
|
|
|
+ };
|
|
|
+ for (let item in data.data) {
|
|
|
+ let theData = data.data[item];
|
|
|
+ theOption.push(
|
|
|
+ <Select.Option value={theData} key={theData}>{theData}</Select.Option>
|
|
|
+ );
|
|
|
+ };
|
|
|
+ this.setState({
|
|
|
+ contactsOption: theOption,
|
|
|
+ contacts: data.data[this.state.data.contacts]
|
|
|
+ });
|
|
|
+ }.bind(this),
|
|
|
+ });
|
|
|
+ },
|
|
|
getInitialState() {
|
|
|
return {
|
|
|
loading: false,
|
|
|
stateOption: [],
|
|
|
- introduce:'',
|
|
|
- projectCheck: 0,
|
|
|
+ departmentOption: [],
|
|
|
+ projectDes:'',
|
|
|
+ projectMode: 0,
|
|
|
subsidy: 0,
|
|
|
+ projectModeState: false,
|
|
|
+ subsidyState: false,
|
|
|
stateColumns: [{
|
|
|
title: '专利状态',
|
|
|
dataIndex: 'state',
|
|
@@ -142,8 +152,8 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
render: (text) => { return getCognizanceState(text) }
|
|
|
}, {
|
|
|
title: '处理时间',
|
|
|
- dataIndex: 'recordTimeFormattedDate',
|
|
|
- key: 'recordTimeFormattedDate',
|
|
|
+ dataIndex: 'recordTime',
|
|
|
+ key: 'recordTime'
|
|
|
}, {
|
|
|
title: '负责人',
|
|
|
dataIndex: 'principal',
|
|
@@ -165,6 +175,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
});
|
|
|
this.loadData();
|
|
|
this.getStateData();
|
|
|
+
|
|
|
},
|
|
|
handleSubmit(e) {
|
|
|
e.preventDefault();
|
|
@@ -181,13 +192,21 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
method: "POST",
|
|
|
dataType: "json",
|
|
|
crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/disposeCognizanceDetail",
|
|
|
+ url: globalConfig.context + "/api/admintechproject/updateTechProject",
|
|
|
data: {
|
|
|
- id: this.props.data.cid,
|
|
|
- technicalField: values.technicalField,
|
|
|
- basicResearchCost: values.basicResearchCost,
|
|
|
- accident: values.accident,
|
|
|
-
|
|
|
+ id: this.props.data.pid,
|
|
|
+ uid: this.props.data.uid,
|
|
|
+ contacts: values.contacts,
|
|
|
+ department: values.department,
|
|
|
+ projectName: values.projectName,
|
|
|
+ projectCatagory: values.projectCatagory,
|
|
|
+ techField: values.techField,
|
|
|
+ projectDes: values.projectDes,
|
|
|
+ projectMode: this.state.projectMode,
|
|
|
+ projectApproval: values.projectApproval,
|
|
|
+ subsidy: this.state.subsidy,
|
|
|
+ approvalUrl: this.state.approvalUrl,
|
|
|
+
|
|
|
recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
|
|
|
state: values.state,
|
|
|
principal: values.principal,
|
|
@@ -198,8 +217,6 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
message.success('保存成功!');
|
|
|
this.props.closeModal();
|
|
|
this.props.form.resetFields();
|
|
|
- this.state.targetKeys = [];
|
|
|
- this.state.selectedKeys = [];
|
|
|
this.props.spinState(false);
|
|
|
} else {
|
|
|
message.warning(data.error[0].message);
|
|
@@ -215,26 +232,27 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
this.loadData();
|
|
|
};
|
|
|
if (nextProps.data) {
|
|
|
- this.state.xid = nextProps.data.pid;
|
|
|
+ this.state.pid = nextProps.data.pid;
|
|
|
}
|
|
|
},
|
|
|
projectEstablishmentCheck(e) {
|
|
|
if (e.target.checked == true) {
|
|
|
- this.state.projectCheck = 1;
|
|
|
+ this.setState({projectModeState:true})
|
|
|
+ this.state.projectMode = 1;
|
|
|
} else if (e.target.checked == false) {
|
|
|
- this.state.projectCheck = 0;
|
|
|
+ this.setState({projectModeState:false})
|
|
|
+ this.state.projectMode = 0;
|
|
|
};
|
|
|
},
|
|
|
subsidyCheck(e) {
|
|
|
if (e.target.checked == true) {
|
|
|
+ this.setState({subsidyState:true})
|
|
|
this.state.subsidy = 1;
|
|
|
} else if (e.target.checked == false) {
|
|
|
+ this.setState({subsidyState:false})
|
|
|
this.state.subsidy = 0;
|
|
|
};
|
|
|
},
|
|
|
- avatarUrl(e) {
|
|
|
- this.state.avatarUrl = e;
|
|
|
- },
|
|
|
render() {
|
|
|
const FormItem = Form.Item;
|
|
|
const { getFieldDecorator } = this.props.form;
|
|
@@ -258,28 +276,38 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
</div>
|
|
|
<div className="half-item">
|
|
|
<span className="item-title">公司地址: </span>
|
|
|
- <span>{theData.postalAddress}</span>
|
|
|
+ <span>{theData.province+' '+theData.city+' '+theData.area}</span>
|
|
|
</div>
|
|
|
<div className="half-item">
|
|
|
- <span className="item-title">联系人: </span>
|
|
|
- <span>{theData.contacts}</span>
|
|
|
+ <FormItem
|
|
|
+ labelCol={{ span: 4 }}
|
|
|
+ wrapperCol={{ span: 10 }}
|
|
|
+ label="联系人:"
|
|
|
+ >
|
|
|
+ {getFieldDecorator('contacts', {
|
|
|
+ initialValue: this.state.contacts
|
|
|
+ })(
|
|
|
+ <Select>{this.state.contactsOption}</Select>
|
|
|
+ )}
|
|
|
+ </FormItem>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
<div className="clearfix">
|
|
|
<FormItem className="third-item"
|
|
|
{...formItemLayout}
|
|
|
label="科技部门"
|
|
|
>
|
|
|
- {getFieldDecorator('technicalDepartment')(
|
|
|
- <Select placeholder="选择科技部门">{this.props.authorOption}</Select>
|
|
|
- )}
|
|
|
+ {getFieldDecorator('department', {
|
|
|
+ initialValue: this.state.department
|
|
|
+ })(
|
|
|
+ <Select>{this.state.departmentOption}</Select>
|
|
|
+ )}
|
|
|
</FormItem>
|
|
|
</div>
|
|
|
<div className="clearfix">
|
|
|
<div className="half-item">
|
|
|
<span className="item-title">派单信息: </span>
|
|
|
- <span>{theData.firmTotal}</span>
|
|
|
+ <span>{theData.dispatchInfo}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="clearfix">
|
|
@@ -289,9 +317,11 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
wrapperCol={{ span: 12 }}
|
|
|
label="项目名称"
|
|
|
>
|
|
|
- {getFieldDecorator('projectName')(
|
|
|
- <Input />
|
|
|
- )}
|
|
|
+ {getFieldDecorator('projectName', {
|
|
|
+ initialValue: theData.projectName
|
|
|
+ })(
|
|
|
+ <Input />
|
|
|
+ )}
|
|
|
</FormItem>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -302,9 +332,11 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
wrapperCol={{ span: 12 }}
|
|
|
label="项目类型"
|
|
|
>
|
|
|
- {getFieldDecorator('projectType')(
|
|
|
- <Input />
|
|
|
- )}
|
|
|
+ {getFieldDecorator('projectCatagory', {
|
|
|
+ initialValue: theData.projectCatagory
|
|
|
+ })(
|
|
|
+ <Input />
|
|
|
+ )}
|
|
|
</FormItem>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -315,55 +347,84 @@ const ApplyChangeFrom = Form.create()(React.createClass({
|
|
|
wrapperCol={{ span: 12 }}
|
|
|
label="技术领域"
|
|
|
>
|
|
|
- {getFieldDecorator('technicalField')(
|
|
|
- <Input />
|
|
|
- )}
|
|
|
+ {getFieldDecorator('techField', {
|
|
|
+ initialValue: theData.techField
|
|
|
+ })(
|
|
|
+ <Input />
|
|
|
+ )}
|
|
|
</FormItem>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="clearfix">
|
|
|
<span className="item-title">项目简介: </span>
|
|
|
- <Input type="textarea"
|
|
|
- placeholder="多行输入"
|
|
|
- value={this.state.introduce}
|
|
|
- onChange={(e) => { this.setState({ introduce: e.target.value }); } }
|
|
|
- rows={6} />
|
|
|
+ {getFieldDecorator('projectDes', {
|
|
|
+ initialValue: theData.projectDes
|
|
|
+ })(
|
|
|
+ <Input type="textarea"
|
|
|
+ placeholder="多行输入"
|
|
|
+ rows={6} />
|
|
|
+ )}
|
|
|
</div>
|
|
|
<div className="clearfix">
|
|
|
<div className="half-item">
|
|
|
<span className="item-title">是否立项: </span>
|
|
|
- <Checkbox onChange={this.projectEstablishmentCheck}></Checkbox>
|
|
|
+ <Checkbox
|
|
|
+ onChange={this.projectEstablishmentCheck}
|
|
|
+ checked={this.state.projectModeState}
|
|
|
+ >
|
|
|
+ </Checkbox>
|
|
|
</div>
|
|
|
<div className="half-item">
|
|
|
<FormItem
|
|
|
{...formItemLayout}
|
|
|
label="立项金额"
|
|
|
>
|
|
|
- {getFieldDecorator('projectAmounts')(
|
|
|
- <Input className="mini-input" />
|
|
|
- )}
|
|
|
+ {getFieldDecorator('projectApproval', {
|
|
|
+ initialValue: theData.projectApproval
|
|
|
+ })(
|
|
|
+ <Input />
|
|
|
+ )}
|
|
|
</FormItem>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="clearfix">
|
|
|
<div className="half-item">
|
|
|
<span className="item-title">是否后补助: </span>
|
|
|
- <Checkbox onChange={this.subsidyCheck}></Checkbox>
|
|
|
+ <Checkbox
|
|
|
+ onChange={this.subsidyCheck}
|
|
|
+ checked={this.state.subsidyState}
|
|
|
+ >
|
|
|
+ </Checkbox>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <FormItem
|
|
|
- {...formItemLayout}
|
|
|
- label="项目材料上传"
|
|
|
- labelCol={{ span: 24 }}
|
|
|
- wrapperCol={{ span: 12 }}
|
|
|
- >
|
|
|
- {getFieldDecorator('avatar')(
|
|
|
- <Avatar urlData={this.avatarUrl} name='patent_prory_statement' oid={theData.unitName} />
|
|
|
- )}
|
|
|
- </FormItem>
|
|
|
+ <div className="hrSituation-roster">
|
|
|
+ <Upload
|
|
|
+ name="avatar"
|
|
|
+ action={globalConfig.context + "/api/techproject/upload"}
|
|
|
+ data={{ 'uid': this.props.data.uid }}
|
|
|
+ beforeUpload={beforeUploadFile}
|
|
|
+ showUploadList={false}
|
|
|
+ onChange={(info) => {
|
|
|
+ if (info.file.status !== 'uploading') {
|
|
|
+ console.log(info.file, info.fileList);
|
|
|
+ }
|
|
|
+ if (info.file.status === 'done') {
|
|
|
+ if (!info.file.response.error.length) {
|
|
|
+ message.success(`${info.file.name} 文件上传成功!`);
|
|
|
+ } else {
|
|
|
+ message.warning(info.file.response.error[0].message);
|
|
|
+ return;
|
|
|
+ };
|
|
|
+ this.state.approvalUrl = info.file.response.data;
|
|
|
+ } else if (info.file.status === 'error') {
|
|
|
+ message.error(`${info.file.name} 文件上传失败。`);
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <Button><Icon type="upload" /> 项目材料上传 </Button>
|
|
|
+ </Upload>
|
|
|
+ <p style={{ marginTop: '10px' }}>{theData.approvalUrl ? <a onClick={downloadFile.bind(null, theData.approvalUrl, theData.approvalDownloadFileName)}>{theData.approvalDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
|
|
|
</div>
|
|
|
-
|
|
|
<div className="form-title">状态流转记录: </div>
|
|
|
<Table pagination={false} dataSource={this.state.stateTable} columns={this.state.stateColumns} />
|
|
|
<div className="clearfix">
|