forked from Open-CT/OpenPBL
feat: show count result
This commit is contained in:
parent
23ab8c8ed4
commit
a6ae24d066
|
@ -18,7 +18,7 @@ type Question struct {
|
|||
QuestionTitle string `json:"questionTitle"`
|
||||
QuestionType string `json:"questionType"`
|
||||
QuestionOptions string `json:"questionOptions" xorm:"text"`
|
||||
QuestionCount string `json:"question" xorm:"text"`
|
||||
QuestionCount string `json:"questionCount" xorm:"text"`
|
||||
}
|
||||
type SurveyDetail struct {
|
||||
Survey `json:"survey" xorm:"extends"`
|
||||
|
|
|
@ -68,6 +68,7 @@ function PreviewSection(obj) {
|
|||
if (t[i].questions !== undefined && t[i].questions != null) {
|
||||
for (let j = 0; j < t[i].questions.length; j++) {
|
||||
t[i].questions[j].questionOptions = t[i].questions[j].questionOptions.split(",")
|
||||
t[i].questions[j].questionCount = t[i].questions[j].questionCount.split(",")
|
||||
}
|
||||
} else {
|
||||
t[i].questions = []
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
import React from "react";
|
||||
import {Button, Checkbox, Divider, Input, Radio, message} from "antd";
|
||||
import qs from 'qs'
|
||||
import React, {useEffect, useState} from "react";
|
||||
import {Button, Checkbox, Divider, Input, Radio, message, Collapse} from "antd";
|
||||
|
||||
import Question from "../../CreateProject/Survey/component/Question"
|
||||
import "../preview.less"
|
||||
import "../../CreateProject/Section/component/section-edit.less"
|
||||
import SubmitApi from "../../../../api/SubmitApi";
|
||||
import ReactEcharts from "echarts-for-react";
|
||||
|
||||
const blank = Question.blank
|
||||
|
||||
function FillSurvey(obj) {
|
||||
const [submitLoading, setSubmitLoading] = useState(false)
|
||||
|
||||
const submitSurvey = e => {
|
||||
setSubmitLoading(true)
|
||||
obj.item.submit.submitType = 'survey'
|
||||
let data = Object.assign({}, obj.item.submit)
|
||||
let c = [...obj.item.choices]
|
||||
|
@ -21,6 +24,7 @@ function FillSurvey(obj) {
|
|||
data['choices'] = JSON.stringify(c)
|
||||
SubmitApi.createSubmit(obj.pid, obj.item.id, data)
|
||||
.then(res=>{
|
||||
setSubmitLoading(false)
|
||||
if (res.data.code === 200) {
|
||||
message.success(res.data.msg)
|
||||
obj.getTasks()
|
||||
|
@ -31,7 +35,9 @@ function FillSurvey(obj) {
|
|||
.catch(e=>{console.log(e)})
|
||||
}
|
||||
const updateSurvey = e => {
|
||||
setSubmitLoading(true)
|
||||
obj.item.submit.submitType = 'survey'
|
||||
|
||||
let data = Object.assign({}, obj.item.submit)
|
||||
let c = [...obj.item.choices]
|
||||
for (let i=0; i<c.length; i++) {
|
||||
|
@ -40,6 +46,7 @@ function FillSurvey(obj) {
|
|||
data['choices'] = JSON.stringify(c)
|
||||
SubmitApi.updateSubmit(obj.pid, obj.item.id, obj.item.submit.id, data)
|
||||
.then(res=>{
|
||||
setSubmitLoading(false)
|
||||
if (res.data.code === 200) {
|
||||
message.success(res.data.msg)
|
||||
obj.getTasks()
|
||||
|
@ -60,10 +67,43 @@ function FillSurvey(obj) {
|
|||
}
|
||||
const changeBlankFill = (v, subIndex, optIndex) => {
|
||||
obj.item.choices[subIndex].choiceOptions[optIndex] = v.target.value
|
||||
obj.setTaskItem(obj.item, obj.index)
|
||||
}
|
||||
const changeBriefAnswer = (v, subIndex) => {
|
||||
obj.item.choices[subIndex].choiceOptions[0] = v.target.value
|
||||
obj.setTaskItem(obj.item, obj.index)
|
||||
}
|
||||
|
||||
|
||||
const showCount = e => {
|
||||
if (e.length > 0) {
|
||||
console.log('draw')
|
||||
}
|
||||
}
|
||||
const getOption = subIndex => {
|
||||
return {
|
||||
title: {
|
||||
x: 'center',
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: obj.item.questions[subIndex].questionOptions
|
||||
},
|
||||
yAxis: {
|
||||
minInterval: 1,
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'bar',
|
||||
data: obj.item.questions[subIndex].questionCount
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="survey">
|
||||
<h2 style={{textAlign: 'center'}}>{obj.item.survey.surveyTitle}</h2>
|
||||
|
@ -106,7 +146,7 @@ function FillSurvey(obj) {
|
|||
<div style={{marginTop: '10px'}} key={optIndex.toString()}>
|
||||
{optItem === blank ?
|
||||
<span style={{float: 'left', margin: '5px'}}>
|
||||
<Input value={obj.item.choices[subIndex].choiceOptions[optIndex]} onChange={v=>changeBlankFill(v, subIndex, optIndex)} style={{borderBottom: '2px solid black'}} bordered={false}/>
|
||||
<Input value={obj.item.choices[subIndex].choiceOptions[optIndex]} onChange={v=>changeBlankFill(v, subIndex, optIndex)} style={{borderBottom: '1.5px solid black'}} bordered={false}/>
|
||||
</span>
|
||||
:
|
||||
<span style={{float: 'left', margin: '5px'}}>{optItem}</span>}
|
||||
|
@ -128,9 +168,33 @@ function FillSurvey(obj) {
|
|||
</div>
|
||||
<div style={{textAlign: 'right', marginTop: '10px'}}>
|
||||
{obj.item.submitted ?
|
||||
<Button disabled={!obj.editable} type="primary" onClick={updateSurvey}>更新</Button>
|
||||
<>
|
||||
<Button disabled={!obj.editable} type="primary" onClick={updateSurvey} loading={submitLoading}>
|
||||
更新
|
||||
</Button>
|
||||
<div style={{textAlign: 'left', marginTop: '20px'}}>
|
||||
<Collapse onChange={showCount}>
|
||||
<Collapse.Panel key={1} header="查看统计结果">
|
||||
{obj.item.questions.map((subItem, subIndex)=>(
|
||||
<div key={subIndex.toString()}>
|
||||
{subItem.questionType==='singleChoice' || subItem.questionType==='multipleChoice'
|
||||
|| subItem.questionType==='scale5' || subItem.questionType==='scale7' ?
|
||||
<div style={{textAlign: "left", marginTop: '10px'}}>
|
||||
<p>{subItem.questionTitle}</p>
|
||||
<ReactEcharts option={getOption(subIndex)}/>
|
||||
<Divider />
|
||||
</div>
|
||||
:
|
||||
null
|
||||
}
|
||||
</div>
|
||||
))}
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
</div>
|
||||
</>
|
||||
:
|
||||
<Button disabled={!obj.editable} type="primary" onClick={submitSurvey}>提交</Button>
|
||||
<Button disabled={!obj.editable} type="primary" onClick={submitSurvey} loading={submitLoading}>提交</Button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue