import React from 'react';
import { Switch, Icon, Upload, Form, Button, Radio, Input, Spin, Table, message, Select, Modal, Cascader, Transfer, InputNumber } from 'antd';
import { technicalSourceList } from '../../../../dataDic.js';
import { techFieldList, getTechField } from '../../../../DicTechFieldList.js';
import { getPreview, getTechnicalSource, beforeUploadFile, newDownloadFile, getProportion, saveProportion } from '../../../../tools.js';
import moment from 'moment';
import ajax from 'jquery/src/ajax/xhr.js';
import $ from 'jquery/src/ajax';
if (!Array.prototype.includes) {
Object.defineProperty(Array.prototype, 'includes', {
value: function (searchElement, fromIndex) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If len is 0, return false.
if (len === 0) {
return false;
}
// 4. Let n be ? ToInteger(fromIndex).
// (If fromIndex is undefined, this step produces the value 0.)
var n = fromIndex | 0;
// 5. If n ≥ 0, then
// a. Let k be n.
// 6. Else n < 0,
// a. Let k be len + n.
// b. If k < 0, let k be 0.
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
// 7. Repeat, while k < len
while (k < len) {
// a. Let elementK be the result of ? Get(O, ! ToString(k)).
// b. If SameValueZero(searchElement, elementK) is true, return true.
// c. Increase k by 1.
// NOTE: === provides the correct "SameValueZero" comparison needed here.
if (o[k] === searchElement) {
return true;
}
k++;
}
// 8. Return false
return false;
}
});
}
const TechProductDescFrom = Form.create()(React.createClass({
getInitialState() {
return {
loading: false,
targetKeys: [],
selectedKeys: [],
technicalSourceOption: [],
};
},
componentWillMount() {
let _me = this;
technicalSourceList.map(function (item) {
_me.state.technicalSourceOption.push(
{item.key}
)
});
this.state.targetKeys = this.props.data.intellectualPropertyNumber || [];
},
componentWillReceiveProps(nextProps) {
if (!this.props.visible && nextProps.visible && nextProps.data && this.props.resetForm) {
this.state.targetKeys = nextProps.data.intellectualPropertyNumber || [];
this.props.form.resetFields();
this.state.accountUrl = undefined;
this.state.fileList = [];
};
},
handleSubmit(e) {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.props.spinState(true);
$.ajax({
method: "POST",
dataType: "json",
crossDomain: false,
url: globalConfig.context + "/api/admin/techProduct",
data: {
id: this.props.data.id,
uid: this.props.uid,
serialNumber: values.serialNumber,
productName: values.productName,
technicalField1: values.techField[0],
technicalField2: values.techField[1],
technicalField3: values.techField[2],
technicalSource: values.technicalSource,
lastYearRevenue: values.lastYearRevenue,
mainProduct: values.mainProduct,
intellectualPropertyNumber: this.state.targetKeys ? this.state.targetKeys.join(",") : '',
keyTechnology: values.keyTechnology,
competitiveEdge: values.competitiveEdge,
conditionEffect: values.conditionEffect,
accountUrl: this.state.accountUrl
}
}).done(function (data) {
if (!data.error.length) {
message.success('保存成功!');
this.props.clickOk();
this.props.form.resetFields();
this.state.targetKeys = [];
this.state.selectedKeys = [];
this.props.spinState(false);
} else {
message.warning(data.error[0].message);
this.props.spinState(false);
}
}.bind(this));
}
});
},
intellectualChange(nextTargetKeys, direction, moveKeys) {
this.setState({ targetKeys: nextTargetKeys });
},
intellectualSelectChange(sourceSelectedKeys, targetSelectedKeys) {
this.setState({ selectedKeys: [...sourceSelectedKeys, ...targetSelectedKeys] });
},
render() {
const FormItem = Form.Item;
const { getFieldDecorator } = this.props.form;
const theData = this.props.data;
const formItemLayout = {
labelCol: { span: 10 },
wrapperCol: { span: 12 },
};
const _me = this;
return (
);
},
}));
const TechProductDesc = React.createClass({
getInitialState() {
return {
visible: false,
loading: false
};
},
componentWillReceiveProps(nextProps) {
this.state.visible = nextProps.showDesc
},
showModal() {
this.setState({
visible: true,
resetForm: false
});
},
handleOk() {
this.setState({
visible: false,
resetForm: true
});
this.props.closeDesc(false, true);
},
handleCancel(e) {
this.setState({
visible: false,
resetForm: true
});
this.props.closeDesc(false);
},
spinChange(e) {
this.setState({
loading: e
});
},
render() {
return (
);
},
});
const TechProduct = React.createClass({
loadData(pageNo) {
this.state.data = [];
this.setState({
loading: true
});
$.when($.ajax({
method: "post",
dataType: "json",
crossDomain: false,
url: globalConfig.context + "/api/admin/techProductList",
data: {
pageNo: pageNo || 1,
pageSize: this.state.pagination.pageSize,
uid: this.props.data.uid
}
}), $.ajax({
method: "post",
dataType: "json",
crossDomain: false,
url: globalConfig.context + "/api/admin/intellectualList",
data: {
pageNo: pageNo || 1,
pageSize: 99,
uid: this.props.data.uid
}
})).done((data1, data2) => {
let data = data1[0];
let intellectualList = data2[0];
if (data.error.length || !data.data || !data.data.list) {
message.warning(data.error[0].message);
return;
};
if (intellectualList.error.length || !intellectualList.data || !intellectualList.data.list) {
message.warning(intellectualList.error[0].message);
return;
};
let theArr = [], theObj = {};
for (let i = 0; i < intellectualList.data.list.length; i++) {
theArr.push({
key: intellectualList.data.list[i].id,
number: intellectualList.data.list[i].intellectualPropertyNumber,
name: intellectualList.data.list[i].intellectualPropertyName
});
theObj[intellectualList.data.list[i].id] = intellectualList.data.list[i].intellectualPropertyNumber;
};
this.state.mockData = theArr;
this.state.mockDataObj = theObj;
for (let i = 0; i < data.data.list.length; i++) {
let thisdata = data.data.list[i];
this.state.data.push({
key: i,
id: thisdata.id,
uid: thisdata.uid,
mockData: this.state.mockData,
mockDataObj: this.state.mockDataObj,
serialNumber: thisdata.serialNumber,
productName: thisdata.productName,
techField: [thisdata.technicalField1, thisdata.technicalField2, thisdata.technicalField3],
technicalField: getTechField(thisdata.technicalField1, thisdata.technicalField2, thisdata.technicalField3),
technicalField1: thisdata.technicalField1,
technicalField2: thisdata.technicalField2,
technicalField3: thisdata.technicalField3,
technicalSource: String(thisdata.technicalSource),
lastYearRevenue: thisdata.lastYearRevenue,
mainProduct: thisdata.mainProduct,
PropertyNumber: thisdata.intellectualPropertyNumber,
intellectualPropertyNumber: thisdata.intellectualPropertyNumber ? thisdata.intellectualPropertyNumber.split(",") : [],
keyTechnology: thisdata.keyTechnology,
competitiveEdge: thisdata.competitiveEdge,
conditionEffect: thisdata.conditionEffect,
year: thisdata.year,
createTime: thisdata.createTime,
accountDownloadFileName: thisdata.accountDownloadFileName,
accountUrl: thisdata.accountUrl
});
};
this.state.pagination.current = data.data.pageNo;
this.state.pagination.total = data.data.totalCount;
this.setState({
dataSource: this.state.data,
pagination: this.state.pagination
});
}).always(function () {
this.setState({
loading: false
});
}.bind(this));
let _me = this;
getProportion(this.props.data.uid, function (data) { _me.setState({ proportion: data }); });
},
getInitialState() {
return {
selectedRowKeys: [],
selectedRows: [],
mockData: [],
mockDataObj: {},
loading: false,
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: 'serialNumber',
key: 'serialNumber'
}, {
title: '产品(服务)名称',
dataIndex: 'productName',
key: 'productName'
}, {
title: '技术领域',
dataIndex: 'technicalField',
key: 'technicalField'
}, {
title: '技术来源',
dataIndex: 'technicalSource',
key: 'technicalSource',
render: (text) => { return getTechnicalSource(text) }
}, {
title: '上年度销售收入(万元)',
dataIndex: 'lastYearRevenue',
key: 'lastYearRevenue'
}, {
title: '是否主要产品(服务)',
dataIndex: 'mainProduct',
key: 'mainProduct',
render: (text) => { if (text == "1") { return '是' } else { return '否' } }
}, {
title: '知识产权编号',
dataIndex: 'PropertyNumber',
key: 'PropertyNumber',
render: (text) => {
let arr = [], _me = this;
if (text && text.split(',').length) {
text.split(',').map((item) => {
arr.push(_me.state.mockDataObj[item]);
});
};
return arr.join(',');
}
}
],
dataSource: []
};
},
componentWillMount() {
this.loadData();
},
tableRowClick(record, index) {
this.state.RowData = record;
this.setState({
showDesc: true
});
},
delectRow() {
let deletedIds = [];
for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
let rowItem = this.state.selectedRows[idx];
if (rowItem.id) {
deletedIds.push(rowItem.id)
}
}
this.setState({
selectedRowKeys: [],
loading: deletedIds.length > 0
});
$.ajax({
method: "POST",
dataType: "json",
crossDomain: false,
url: globalConfig.context + "/api/admin/deleteTechProduct",
data: {
ids: deletedIds
}
}).done(function (data) {
if (!data.error.length) {
message.success('删除成功!');
this.setState({
loading: false,
});
} else {
message.warning(data.error[0].message);
};
this.loadData();
}.bind(this));
},
closeDesc(e, s) {
this.state.showDesc = e;
if (s) {
this.loadData();
};
},
search() {
this.loadData();
},
reset() {
this.loadData();
},
render() {
const rowSelection = {
selectedRowKeys: this.state.selectedRowKeys,
onChange: (selectedRowKeys, selectedRows) => {
this.setState({
selectedRows: selectedRows,
selectedRowKeys: selectedRowKeys
});
}
};
const hasSelected = this.state.selectedRowKeys.length > 0;
return (
高新技术产品(服务)情况表
是否已完成:
{
e ? this.state.proportion.techProject = 1 : this.state.proportion.techProject = 0;
saveProportion(this.state.proportion.id, this.props.data.uid, 'techProject', this.state.proportion.techProject);
this.setState({ proportion: this.state.proportion });
}} />
);
}
});
export default TechProduct;