dev_ec
hjm 5 years ago
parent e2f6056d50
commit 25941dbcf4

@ -0,0 +1,123 @@
import React, { Component } from 'react';
import classNames from 'classnames'
import axios from 'axios';
import { Table, Divider, Tag, Checkbox, InputNumber, Spin, Icon, Tooltip } from 'antd';
class SelectTable extends Component {
constructor(props) {
super(props)
this.state={
}
}
componentDidMount(){
}
render() {
const { match, columns, tableData } = this.props
if (!tableData || !tableData.length) return '';
return (
<table className="edu-pop-table-all edu-txt-center color-grey-6 interval-td" cellspacing="0" cellpadding="0">
<tbody>
<tr>
{columns.map((item, index) => {
if (index == 0) return <td className="gaugeOutfit"><span>{columns[0][0]}</span><span>{columns[0][1]}</span></td>;
return (
<Tooltip title={item}>
<td >目标{index}</td>
</Tooltip>
)
})}
{/* <td data-tip-down=";">1</td>
<td data-tip-down="掌握计算机系统的分析和设计的基本方法;">目标2</td>
<td data-tip-down="具有研究开发计算机软、硬件的基本能力;">目标3</td>
<td data-tip-down="了解计算机科学与技术的发展动态;">目标4</td>
<td data-tip-down="掌握文献检索、资料查询的基本方法,具有获取信息的能力。">目标5</td> */}
</tr>
{ tableData.map((item, rowIndex) => {
const cells = item.map((cell, colIndex) => {
if(colIndex == 0) return <Tooltip title={cell}>
<td >指标点{rowIndex + 1}</td>
</Tooltip>
return (<Tooltip title={!!cell ? '取消支撑' : '选择支撑'} >
<td onClick={() => this.props.onCellClick(rowIndex, colIndex, !!cell)}>
<i className={`iconfont icon-gouxuan ${!!cell ? 'color-green' : 'color-grey-eb'} font-16 mr5`}></i>
</td>
</Tooltip>)
})
return (
<tr className="sustainLine editTd">
{cells}
</tr>
)
})}
{/* <tr className="sustainLine editTd">
<td data-tip-down="工程知识能够将数学、自然科学、工程基础和专业知识用于解决复杂工程问题。1212">指标点1</td>
<td data-tip-down="取消支撑" data-req-id="77" data-to-id="80">
<i className="iconfont icon-gouxuan color-green font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="77" data-to-id="81">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="77" data-to-id="82">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="取消支撑" data-req-id="77" data-to-id="83">
<i className="iconfont icon-gouxuan color-green font-16 mr5"></i>
</td>
<td data-tip-down="取消支撑" data-req-id="77" data-to-id="84">
<i className="iconfont icon-gouxuan color-green font-16 mr5"></i>
</td>
</tr> */}
{/* <tr className="sustainLine editTd">
<td data-tip-down="具有识别、表达、分析复杂工程问题并得出有效结论的能力。">指标点2</td>
<td data-tip-down="选择支撑" data-req-id="78" data-to-id="80">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="78" data-to-id="81">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="78" data-to-id="82">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="78" data-to-id="83">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="78" data-to-id="84">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
</tr>
<tr className="sustainLine editTd">
<td data-tip-down="具备设计和开发针对复杂工程问题的解决方案的能力。">指标点3</td>
<td data-tip-down="选择支撑" data-req-id="79" data-to-id="80">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="79" data-to-id="81">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="取消支撑" data-req-id="79" data-to-id="82">
<i className="iconfont icon-gouxuan color-green font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="79" data-to-id="83">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
<td data-tip-down="选择支撑" data-req-id="79" data-to-id="84">
<i className="iconfont icon-gouxuan color-grey-eb font-16 mr5"></i>
</td>
</tr> */}
</tbody>
</table>
);
}
}
export default (SelectTable) ;

@ -0,0 +1,144 @@
import React, { Component } from 'react';
import classNames from 'classnames'
import axios from 'axios';
import { Table, Divider, Tag, Checkbox, InputNumber, Spin, Icon } from 'antd';
import SelectTable from './SelectTable'
import update from 'immutability-helper'
const testState = {
"graduation_requirements": [
{
"id": 1,
"position": 1,
"content": "毕业要求一"
},
{
"id": 2,
"position": 2,
"content": "毕业要求二"
}
],
"training_subitems": [
{
"id": 1,
"content": "培养目标一"
},
{
"id": 2,
"content": "培养目标二"
}
],
"requirement_support_objectives": [
{
"graduation_requirement_id": 1,
"training_subitem_id": 1
},
{
"graduation_requirement_id": 2,
"training_subitem_id": 2
},
]
}
class RequirementVsObjective extends Component {
constructor(props) {
super(props)
this.state={
...testState
}
}
componentDidMount(){
// this.init()
// return;
const yearId = this.props.match.params.yearId
const url = `/ec_years/${yearId}/requirement_support_objectives.json`
axios.get(url).then((response) => {
if (response.data.graduation_requirements) {
this.setState( {...response.data} , () => {
this.init()
})
}
}).catch((e) => {
})
}
init = () => {
this.graduationRequirementsIdIndexMap = {}
this.trainingSubitemsIdIndexMap = {}
this.state.graduation_requirements.forEach((item, index) => {
this.graduationRequirementsIdIndexMap[item.id] = index
})
this.state.training_subitems.forEach((item, index) => {
this.trainingSubitemsIdIndexMap[item.id] = index
})
const tableData = []
this.state.graduation_requirements.forEach((item, index) => {
tableData.push([item.content, ...Array(this.state.training_subitems.length)])
})
this.state.requirement_support_objectives.forEach(item => {
tableData[this.graduationRequirementsIdIndexMap[item.graduation_requirement_id]][this.trainingSubitemsIdIndexMap[item.training_subitem_id]]
= true
})
this.setState({ tableData })
}
onCellClick = (rowIndex, colIndex, select) => {
console.log( rowIndex, colIndex, select )
const ec_graduation_requirement_id = this.state.graduation_requirements[rowIndex].id
const ec_training_subitem_id = this.state.training_subitems[colIndex].id
const yearId = this.props.match.params.yearId
const url = `/ec_years/${yearId}/requirement_support_objectives.json`
const method = select ? axios.delete : axios.post
method(url,
select ? {
params: {
ec_graduation_requirement_id,
ec_training_subitem_id
}
} : {
ec_graduation_requirement_id,
ec_training_subitem_id
}
).then((response) => {
if (response.data.status == 0) {
this.setState(
(prevState) => ({
tableData : update(prevState.tableData, {[rowIndex]: {[colIndex]: {$set: select ? false : true}}})
})
)
this.props.showNotification(`${select ? '取消' : '选择'}成功`)
}
}).catch((e) => {
})
if (select) { // 取消
} else { // 选择
}
}
render() {
const { match, history, current_user } = this.props
const { tableData, training_subitems, graduation_requirements, is_manager } = this.state
const columns = training_subitems && [['毕业要求', '培养目标'], ...training_subitems.map(item => item.content)]
const columnIdIndexMap = {}
console.log(columns, tableData)
return (
<div className="educontent requirementVsObjective">
requirementVsObjective
<SelectTable
columns={columns}
tableData={tableData}
onCellClick={this.onCellClick}
></SelectTable>
</div>
);
}
}
export default (RequirementVsObjective) ;

@ -40,6 +40,11 @@ const ReachCalculationInfo=Loadable({
loader: () => import('./reachCalculationInfo/index'),
loading: Loading,
});
const RequirementVsObjective=Loadable({
loader: () => import('./RequirementVsObjective/index'),
loading: Loading,
});
class EcSetting extends React.Component {
@ -132,8 +137,13 @@ class EcSetting extends React.Component {
render={ (props) => (<TrainingObjective {...this.props} {...props} {...this.state} />) }></Route>
<Route extra path='/ecs/major_schools/:majorId/years/:yearId/graduation_requirement'
render={ (props) => (<GraduationRequirement {...this.props} {...props} {...this.state} />) }></Route>
<Route extra path='/ecs/major_schools/:majorId/years/:yearId/graduation_requirement'
render={ (props) => (<GraduationRequirement {...this.props} {...props} {...this.state} />) }></Route>
{/* 毕业要求对培养目标的支撑 */}
<Route extra path='/ecs/major_schools/:majorId/years/:yearId/requirement_vs_objective'
render={ (props) => (<RequirementVsObjective {...this.props} {...props} {...this.state} />) }></Route>
{/*学生*/}
<Route extra path='/ecs/major_schools/:majorId/years/:yearId/students'
render={ (props) => (<EcStudentList {...this.props} {...props} {...this.state} />) }></Route>

Loading…
Cancel
Save