From 09b4797fb18e2971434c8cfc217f706628e0126e Mon Sep 17 00:00:00 2001 From: Mr Ke <kelq@hugeinfo.com.cn> Date: Tue, 31 Mar 2020 11:57:41 +0800 Subject: [PATCH] 问卷答题详情 --- SunshineIns/src/fetch/index.js | 4 SunshineIns/src/view/QuestionnairEditor/index.js | 6 + SunshineIns/src/view/QuestionnairAnswer/index.js | 64 ++++++++++++---- SunshineIns/src/page/QuestionPersonDetail.jsx | 104 ++++++++++++++++++++++---- SunshineIns/src/fetch/getAnswer.js | 6 + SunshineIns/src/page/Login.jsx | 4 6 files changed, 151 insertions(+), 37 deletions(-) diff --git a/SunshineIns/src/fetch/getAnswer.js b/SunshineIns/src/fetch/getAnswer.js new file mode 100644 index 0000000..054b138 --- /dev/null +++ b/SunshineIns/src/fetch/getAnswer.js @@ -0,0 +1,6 @@ +import fetch from './_fetch'; +import { message } from 'antd'; +export default ({ id, userId }) => + fetch(`api/question/getAnswer?id=${id}&userId=${userId}`) + .then(json => json.data) + .catch(error => message.error('详情加载失败,请联系管理员', 2)); diff --git a/SunshineIns/src/fetch/index.js b/SunshineIns/src/fetch/index.js index 6d84652..c7d04dc 100644 --- a/SunshineIns/src/fetch/index.js +++ b/SunshineIns/src/fetch/index.js @@ -100,6 +100,7 @@ import searchLawSave from './searchLawSave'; import searchLawDelete from './searchLawDelete'; import questionFindPersonById from './questionFindPersonById'; +import getAnswer from './getAnswer'; export default { domain, @@ -203,5 +204,6 @@ searchLawFind, searchLawSave, searchLawDelete, - questionFindPersonById + questionFindPersonById, + getAnswer }; \ No newline at end of file diff --git a/SunshineIns/src/page/Login.jsx b/SunshineIns/src/page/Login.jsx index 2a6752b..e719d7d 100644 --- a/SunshineIns/src/page/Login.jsx +++ b/SunshineIns/src/page/Login.jsx @@ -42,8 +42,8 @@ // debugger; if (res.code === 0) { // location.href = res.data; - // location.href ='http://localhost:8080/index.html#/' - location.href ='http://nsjcy.hugeinfo.com.cn/nsjc-charge/pc/index.html#/' + location.href ='http://localhost:8080/index.html#/' + // location.href ='http://nsjcy.hugeinfo.com.cn/nsjc-charge/pc/index.html#/' } else { message.error(res.msg, 2) } diff --git a/SunshineIns/src/page/QuestionPersonDetail.jsx b/SunshineIns/src/page/QuestionPersonDetail.jsx index d4c4475..761a906 100644 --- a/SunshineIns/src/page/QuestionPersonDetail.jsx +++ b/SunshineIns/src/page/QuestionPersonDetail.jsx @@ -1,9 +1,10 @@ import React from 'react'; -import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Spin, Breadcrumb } from 'antd'; +import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Spin, Breadcrumb, Table } from 'antd'; import Questionnair from './Questionnair' import Fetch from '../fetch' import TableView from '../view/TableView'; import HeadView from '../view/HeadView'; +import moment from 'moment'; export default class QuestionPersonDetail extends React.Component { constructor(props) { @@ -13,7 +14,7 @@ data: [], initData: null, btnLoading: false, - dateSource: [] + dateSource: null }; } @@ -27,11 +28,12 @@ this.setState({ loading: true }); - Fetch.questionFindPersonById(id, userId).then(res => { + Fetch.getAnswer({ id, userId }).then(res => { + console.log('res', res); console.log('res', res); this.setState({ loading: false, - initData: res + dataSoure: res }) }) } @@ -75,9 +77,64 @@ } + switchByType = (type) => { + switch (type) { + case 'radio': + return '单选题'; + case 'checkbox': + return '多选题' + } + } + + columns = () => { + return [ + { + title: '问题', + dataIndex: 'questionTitle', + key: 'questionTitle', + }, + { + title: '问题类型', + dataIndex: 'type', + key: 'type', + render: (cur, item) => { + return this.switchByType(cur) + } + }, + { + title: '问题选项', + dataIndex: 'options', + key: 'options', + render: (cur) => { + return cur.map((a, idx) => { + return <div> + {idx + 1}、{a}; + </div> + }) + } + }, + { + title: '答题情况', + dataIndex: 'itemDesc', + key: 'itemDesc', + render: (cur, item) => { + return cur || '未提供答案' + } + }, + { + title: '得分', + dataIndex: 'score', + key: 'score', + render: (cur) => { + return cur + '分' + } + }, + ]; + } + render() { - const { data, loading, resetKey, initData, btnLoading, dateSource } = this.state; + const { loading, dataSoure } = this.state; return ( <div className="app-page"> <HeadView history={this.props.history} /> @@ -88,11 +145,10 @@ <Breadcrumb.Item> <a onClick={() => { this.props.history.goBack(); - }}>问卷管理</a> + }}>返回</a> </Breadcrumb.Item> - <Breadcrumb.Item> - 问卷详情 + 问卷答题详情 </Breadcrumb.Item> </Breadcrumb> </div> @@ -104,25 +160,41 @@ <React.Fragment> {/* <Questionnair submitQuestionTemp={this.submitQuestionTemp} btnLoading={btnLoading} /> */} { - initData && + dataSoure && <div style={{ background: '#fff', marginTop: 10 }}> - <div style={{ width: 700, margin: '0 auto', padding: '20px 0 0 0 ' }}> + <div style={{ width: 600, margin: '0 auto', padding: '20px 0 0 0 ' }}> <h3> - 问卷标题:{initData.title || '暂无'} + 问卷标题:{dataSoure[0].title || '暂无'} </h3> <h4 style={{ marginBottom: 0 }}> - 问卷描述:{initData.content || '暂无'} + 答题人:{dataSoure[0].userName || '暂无'} </h4> <h4 style={{ marginBottom: 0 }}> - 业务类型:{typeStatus(initData.businessType) || '暂无'} + 答题时间:{dataSoure[0].createTime ? moment(dataSoure[0].createTime).format("YYYY-MM-DD HH:mm") : '暂无'} + </h4> + <h4 style={{ marginBottom: 0 }}> + 答题总得分:{dataSoure.map(({ score }) => score).reduce(function (prev, cur, index, array) { + return prev + cur + })}分 </h4> </div> </div> } - {initData && initData.questionDtos.map((item, index) => ( - <Questionnair.Editor editor={item} acitveAnswer={true} data={initData} key={item.questionId} index={index} /> - ))} + {/* {initData && initData.questionDtos.map((item, index) => ( + <React.Fragment> + <Questionnair.Editor editor={item} acitveAnswer={true} data={initData} key={item.questionId} index={index} disabled={true}/> + <Questionnair.Answer answer={item} index={index} /> + </React.Fragment> + ))} */} + + { + dataSoure && + <div style={{ background: '#fff', padding: 40 }}> + <Table columns={this.columns()} dataSource={dataSoure} style={{ width: '80%', margin: '0 auto' }} pagination={false}></Table> + </div> + } + </React.Fragment> } diff --git a/SunshineIns/src/view/QuestionnairAnswer/index.js b/SunshineIns/src/view/QuestionnairAnswer/index.js index 8454b92..d9af57f 100644 --- a/SunshineIns/src/view/QuestionnairAnswer/index.js +++ b/SunshineIns/src/view/QuestionnairAnswer/index.js @@ -1,23 +1,55 @@ import React from 'react'; +import { Table, Tag } from 'antd'; -const QuestionnairAnswer = ({ - answer -}) => { - console.log(answer) +const QuestionnairAnswer = ({ answer, index }) => { + // console.log(answer); + // const columns = [ + // { + // title: 'Name', + // dataIndex: 'name', + // key: 'name', + // render: text => <a>{text}</a>, + // }, + // { + // title: 'Age', + // dataIndex: 'age', + // key: 'age', + // }, + // { + // title: 'Address', + // dataIndex: 'address', + // key: 'address', + // }, return ( + // {`${index + 1}. <div style={{ minHeight: 60 }}> - <div style={{ color: '#666' }}>{`${index + 1}.${answer.type === 'input' ? answer.completionForwards : answer.title + ':'}`}</div> - <div style={{ paddingLeft: 12, color: '#151515' }}>{typeof answer.answer[answer.type] !== 'string' ? ( - typeof answer.answer[answer.type].optionValue !== 'string' ? ( - answer.answer[answer.type].optionValue.map((item, index) => { - return ( - item && <span key={index} style={{ marginRight: 15 }}>{item}</span> - ) - }) - ) : answer.answer[answer.type].optionValue - ) : answer.answer[answer.type]}</div> + {answer.answer && ( + <React.Fragment> + <div style={{ color: '#666' }}> + {index + 1}、 + {answer.type === 'input' + ? answer.completionForwards + : answer.title + ':'} + </div> + <div style={{ paddingLeft: 12, color: '#151515' }}> + {typeof answer.answer[answer.type] !== 'string' + ? typeof answer.answer[answer.type].optionValue !== 'string' + ? answer.answer[answer.type].optionValue.map((item, index) => { + return ( + item && ( + <span key={index} style={{ marginRight: 15 }}> + {item} + </span> + ) + ); + }) + : answer.answer[answer.type].optionValue + : answer.answer[answer.type]} + </div> + </React.Fragment> + )} </div> ); -} +}; -export default QuestionnairAnswer; \ No newline at end of file +export default QuestionnairAnswer; diff --git a/SunshineIns/src/view/QuestionnairEditor/index.js b/SunshineIns/src/view/QuestionnairEditor/index.js index b535f71..12005a3 100644 --- a/SunshineIns/src/view/QuestionnairEditor/index.js +++ b/SunshineIns/src/view/QuestionnairEditor/index.js @@ -386,7 +386,7 @@ } }; render() { - const { index, curMoveItem, drag, acitveAnswer } = this.props; + const { index, curMoveItem, drag, acitveAnswer, disabled } = this.props; const { toggleMutiOption, editor, @@ -660,6 +660,7 @@ <input type="radio" name="radio" + disabled={disabled || false} data-index={index} value={data} defaultChecked={ @@ -710,11 +711,12 @@ <input type="checkbox" name="checkbox" + disabled={disabled || false} value={data} data-index={index} defaultChecked={ answer && - this.answer.checkbox !== '' && + this.answer.checkbox && this.answer.checkbox.optionIndex.includes(index + '') } onChange={this.handleAnswerChange} -- Gitblit v1.8.0