import React from 'react';
import { Tabs, Button, Icon } from 'antd';
import './index.less';
import Page from '@src/containers/Page';
import Block from '@src/components/Block';
import TreeLayout from '@src/layouts/TreeLayout';
import ActionLayout from '@src/layouts/ActionLayout';
import { formatTreeData, getMap } from '@src/services/Tools';
import { asyncDelConfirm, asyncForm, asyncSMessage } from '@src/services/AsyncTools';
// import { System } from '../../../stores/system';
import { Examination } from '../../../stores/examination';
import { Exercise } from '../../../stores/exercise';
export default class extends Page {
constructor(props) {
super(props);
this.exerciseActionList = [{
key: 'addChild',
name: '增加子节点',
}, {
key: 'addBrother',
name: '增加兄弟节点',
selectNum: 1,
}, {
key: 'edit',
name: '编辑',
selectNum: 1,
}, {
key: 'delete',
name: '批量删除',
type: 'danger',
needCheck: 1,
}];
this.exerciseItemList = [{
key: 'id',
type: 'hidden',
}, {
key: 'parentId',
type: 'hidden',
}, {
key: 'parentName',
type: 'input',
name: '父节点',
disabled: true,
}, {
key: 'titleZh',
name: '中文名称',
type: 'input',
placeholder: '请输入中文名称',
required: true,
}, {
key: 'titleEn',
name: '英文名称',
type: 'input',
placeholder: '请输入英文名称',
}, {
key: 'description',
name: '描述',
type: 'textarea',
placeholder: '请输入描述',
}, {
key: 'isSentence',
type: 'hidden',
}, {
key: 'isExamination',
type: 'hidden',
}];
this.exerciseItemListLimit = [{
key: 'id',
type: 'hidden',
}, {
key: 'titleZh',
name: '中文名称',
type: 'input',
placeholder: '请输入中文名称',
required: true,
}, {
key: 'titleEn',
name: '英文名称',
type: 'input',
placeholder: '请输入英文名称',
}, {
key: 'description',
name: '描述',
type: 'textarea',
placeholder: '请输入描述',
}, {
key: 'isSentence',
type: 'hidden',
}, {
key: 'isExamination',
type: 'hidden',
}];
this.examinationActionList = [{
key: 'addChild',
name: '增加子节点',
}, {
key: 'addBrother',
name: '增加兄弟节点',
selectNum: 1,
}, {
key: 'edit',
name: '编辑',
selectNum: 1,
}, {
key: 'delete',
name: '批量删除',
type: 'danger',
needCheck: 1,
}];
this.examinationItemList = [{
key: 'id',
type: 'hidden',
}, {
key: 'parentId',
type: 'hidden',
}, {
key: 'parentName',
type: 'input',
name: '父节点',
disabled: true,
}, {
key: 'titleZh',
name: '中文名称',
type: 'input',
placeholder: '请输入中文名称',
required: true,
}, {
key: 'titleEn',
name: '英文名称',
type: 'input',
placeholder: '请输入英文名称',
}, {
key: 'description',
name: '描述',
type: 'textarea',
placeholder: '请输入描述',
}, {
key: 'isAdapt',
type: 'hidden',
}];
this.examinationItemListLimit = [{
key: 'id',
type: 'hidden',
}, {
key: 'titleZh',
name: '中文名称',
type: 'input',
placeholder: '请输入中文名称',
required: true,
}, {
key: 'titleEn',
name: '英文名称',
type: 'input',
placeholder: '请输入英文名称',
}, {
key: 'description',
name: '描述',
type: 'textarea',
placeholder: '请输入描述',
}, {
key: 'isAdapt',
type: 'hidden',
}];
this.state.tab = 'exercise';
}
initData() {
this.refresh(this.state.tab);
}
refresh(tab) {
if (!tab) {
({ tab } = this.state);
}
if (tab === 'exercise') {
return this.refreshExercise();
}
return this.refreshExamination();
}
refreshExercise() {
Exercise.allStruct().then(result => {
const list = result.map(row => { row.title = `${row.titleZh}/${row.titleEn}`; return row; });
this.exerciseItemList[1].tree = formatTreeData([{ title: '根节点', id: 0 }].concat(list), 'id', 'title', 'parentId');
this.setState({
exerciseList: list,
exerciseMap: getMap(list, 'id'),
exerciseStruct: formatTreeData(list.map(row => {
if (row.level < 4) return row;
row = Object.assign({}, row);
row.title =
{row.title}
;
return row;
}), 'id', 'title', 'parentId'),
});
});
}
refreshExamination() {
Examination.allStruct().then(result => {
const list = result.map(row => { row.title = `${row.titleZh}/${row.titleEn}`; return row; });
this.examinationItemList[1].tree = formatTreeData([{ title: '根节点', id: 0 }].concat(list), 'id', 'title', 'parentId');
this.setState({
examinationList: list,
examinationMap: getMap(list, 'id'),
examinationStruct: formatTreeData(list.map(row => {
if (row.level !== 2) return row;
row = Object.assign({}, row);
row.title = {row.title}
;
return row;
}), 'id', 'title', 'parentId'),
});
});
}
addChildAction() {
const { tab, exerciseList, examinationList, selectedKeys } = this.state;
let itemList;
let node;
let dep;
if (tab === 'exercise') {
itemList = this.exerciseItemList;
if (selectedKeys.length > 0) {
([node] = exerciseList.filter(row => row.id === Number(selectedKeys[0])));
}
// 长难句还在该逻辑内,不允许添加下属节点
if (node.level <= 1 || node.level >= 4) {
asyncSMessage('不允许添加该节点的子节点', 'warn');
return;
}
dep = {
isSentence: node.isSentence,
isCourse: node.isCourse,
isData: node.isData,
isExamination: node.isExamination,
};
} else {
itemList = this.examinationItemList;
if (selectedKeys.length > 0) {
([node] = examinationList.filter(row => row.id === Number(selectedKeys[0])));
}
if (node.level <= 0 || node.level >= 3) {
asyncSMessage('不允许添加该节点的子节点', 'warn');
return;
}
dep = {
isAdapt: node.isAdapt,
};
}
asyncForm('新增', itemList, Object.assign({ parentId: node.id, parentName: node.title }, dep), data => {
let handler;
data.parentId = Number(data.parentId);
if (tab === 'exercise') {
handler = Exercise.addStruct(data);
} else {
handler = Examination.addStruct(data);
}
return handler.then(() => {
asyncSMessage('新增成功!');
this.refresh();
});
});
}
addBrotherAction() {
const { tab, exerciseList, examinationList, selectedKeys } = this.state;
let itemList;
let node;
let dep;
if (tab === 'exercise') {
itemList = this.exerciseItemList;
if (selectedKeys.length > 0) {
([node] = exerciseList.filter(row => row.id === Number(selectedKeys[0])));
}
if (node.level <= 2) {
asyncSMessage('不允许添加该节点的兄弟节点', 'warn');
return;
}
dep = {
isSentence: node.isSentence,
isCourse: node.isCourse,
isData: node.isData,
isExamination: node.isExamination,
parentName: this.state.exerciseMap[node.parentId].title,
};
} else {
itemList = this.examinationItemList;
if (selectedKeys.length > 0) {
([node] = examinationList.filter(row => row.id === Number(selectedKeys[0])));
}
if (node.level <= 1) {
asyncSMessage('不允许添加该节点的兄弟节点', 'warn');
return;
}
dep = {
isAdapt: node.isAdapt,
parentName: this.state.examinationMap[node.parentId].title,
};
}
asyncForm('新增', itemList, Object.assign({ parentId: node.parentId, parentName: node.title }, dep), data => {
let handler;
data.parentId = Number(data.parentId);
if (tab === 'exercise') {
handler = Exercise.addStruct(data);
} else {
handler = Examination.addStruct(data);
}
return handler.then(() => {
asyncSMessage('新增成功!');
this.refresh();
});
});
}
editAction() {
const { tab, exerciseList, examinationList, selectedKeys } = this.state;
let itemList;
let node;
if (tab === 'exercise') {
itemList = this.exerciseItemList;
([node] = exerciseList.filter(row => row.id === Number(selectedKeys[0])).map(row => {
// row.parentId = `${row.parentId}`;
return row;
}));
if (node.level <= 2) {
itemList = this.exerciseItemListLimit;
}
if (node.level <= 2) {
asyncSMessage('该节点不允许编辑', 'warn');
return;
}
node.parentName = this.state.exerciseMap[node.parentId].title;
} else {
itemList = this.examinationItemList;
([node] = examinationList.filter(row => row.id === Number(selectedKeys[0])).map(row => {
// row.parentId = `${row.parentId}`;
return row;
}));
if (node.level <= 1) {
itemList = this.examinationItemListLimit;
}
// 千行可以被修改
// if (node.extend) {
// asyncSMessage('该节点不允许编辑', 'warn');
// return;
// }
node.parentName = this.state.examinationMap[node.parentId].title;
}
asyncForm('编辑', itemList, node, data => {
let handler;
data.parentId = Number(data.parentId);
if (tab === 'exercise') {
handler = Exercise.editStruct(data);
} else {
handler = Examination.editStruct(data);
}
return handler.then(() => {
asyncSMessage('编辑成功!');
this.refresh();
});
});
}
deleteAction() {
const { tab, checkedKeys } = this.state;
asyncDelConfirm('删除确认', '是否删除选中节点?', () => {
let handler;
if (tab === 'exercise') {
handler = Promise.all(checkedKeys.checked.map(row => Exercise.delStruct({ id: row })));
} else {
handler = Promise.all(checkedKeys.checked.map(row => Examination.delStruct({ id: row })));
}
return handler.then(() => {
asyncSMessage('删除成功!');
this.refresh();
});
});
}
renderExamination() {
const { loading } = this.state;
return
this.onAction(key)} />
{
this.setState({ selectedKeys });
}} checkedKeys={this.state.checkedKeys} checkStrictly onCheck={(checkedKeys, e) => {
if (e.node.props.level > 2) {
this.setState({ checkedKeys });
}
}} />
;
}
renderExercise() {
const { loading } = this.state;
return
this.onAction(key)} />
{
this.setState({ selectedKeys });
}} checkedKeys={this.state.checkedKeys} checkStrictly onCheck={(checkedKeys, e) => {
if (e.node.props.level > 2) {
this.setState({ checkedKeys });
}
}} />
;
}
renderView() {
const { tab } = this.state;
return {
this.setState({ tab: value, selectedKeys: [], checkedKeys: [] });
this.refresh(value);
}}>
{this.renderExercise()}
{this.renderExamination()}
;
}
}