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()} ; } }