From a0ec2242677dced1e6e098c114460da3d56be157 Mon Sep 17 00:00:00 2001 From: liuwh <hugeinfo123> Date: Tue, 31 Mar 2020 05:48:24 +0800 Subject: [PATCH] 提交 --- SunshineIns/src/page/QuestionDetail.jsx | 49 +++++++ SunshineIns/src/fetch/questionFindPersonById.js | 9 + SunshineIns/src/fetch/index.js | 4 SunshineIns/src/fetch/_fetch.js | 4 SunshineIns/src/view/QuestionnairEditor/index.js | 135 +++++++++++---------- SunshineIns/src/view/QuestionnairAnswer/index.js | 1 SunshineIns/src/index.jsx | 11 + SunshineIns/src/page/QuestionPersonDetail.jsx | 146 ++++++++++++++++++++++++ 8 files changed, 283 insertions(+), 76 deletions(-) diff --git a/SunshineIns/src/fetch/_fetch.js b/SunshineIns/src/fetch/_fetch.js index 059c54a..0bf32a9 100644 --- a/SunshineIns/src/fetch/_fetch.js +++ b/SunshineIns/src/fetch/_fetch.js @@ -2,8 +2,8 @@ // export const base = 'http://xnwj.gznsjc.gov.cn'; // export const base = 'http://1p885086k1.iok.la'; -export const base = 'http://nsjcy.hugeinfo.com.cn'; -// export const base = 'http://1p885086k1.iok.la'; +// export const base = 'http://nsjcy.hugeinfo.com.cn'; +export const base = 'http://1p885086k1.iok.la'; // export const base = 'http://localhost:8080'; diff --git a/SunshineIns/src/fetch/index.js b/SunshineIns/src/fetch/index.js index f69802e..6d84652 100644 --- a/SunshineIns/src/fetch/index.js +++ b/SunshineIns/src/fetch/index.js @@ -99,6 +99,7 @@ import searchLawFind from './searchLawFind'; import searchLawSave from './searchLawSave'; import searchLawDelete from './searchLawDelete'; +import questionFindPersonById from './questionFindPersonById'; export default { domain, @@ -201,5 +202,6 @@ searchLaw, searchLawFind, searchLawSave, - searchLawDelete + searchLawDelete, + questionFindPersonById }; \ No newline at end of file diff --git a/SunshineIns/src/fetch/questionFindPersonById.js b/SunshineIns/src/fetch/questionFindPersonById.js new file mode 100644 index 0000000..fff74df --- /dev/null +++ b/SunshineIns/src/fetch/questionFindPersonById.js @@ -0,0 +1,9 @@ +import fetch from './_fetch'; +import { message } from 'antd'; +export default (id, userId) => fetch(`api/question/find/${id}?${userId || null}`) + .then( + json => json.data + ) + .catch( + error => message.error('详情加载失败,请联系管理员', 2) + ); diff --git a/SunshineIns/src/index.jsx b/SunshineIns/src/index.jsx index e18b46a..b7a2ee3 100644 --- a/SunshineIns/src/index.jsx +++ b/SunshineIns/src/index.jsx @@ -48,6 +48,7 @@ import Newly from './page/Newly'; import SignIn from './page/SignIn'; import QuestionDetail from './page/QuestionDetail'; +import QuestionPersonDetail from './page/QuestionPersonDetail'; import NoInspectionReportList from './page/NoInspectionReportList'; import NoInspectionReportDetail from './page/NoInspectionReportDetail'; @@ -69,8 +70,8 @@ {/* <Route path='/questionnaire/newly' component={AttTree} /> */} {/* 问卷详情 */} <Route path='/activeManageEditquestionnaire/:id' component={null} /> - {/* 签到墙 */} - <Route path='/signIn/:id' component={null} /> + {/* 签到墙 */} + <Route path='/signIn/:id' component={null} /> <Route component={Menu} /> </Switch> <Switch> @@ -119,8 +120,10 @@ <Route path='/questionnaire/newly/:id' component={Newly} /> {/* 问卷详情 */} <Route path='/questionnaire/detail/:id' component={QuestionDetail} /> + {/* 小程序提交的任务详情 */} + <Route path='/questionnaire/persondetail/:id/:userId' component={QuestionPersonDetail} /> - + {/* 公安审核 */} <Route path='/entry/policeSecurity' component={PoliceSecurity} /> <Route path='/entry/policeSecurityEdit/:id' component={policeSecurityEdit} /> @@ -133,7 +136,7 @@ <Route path='/noInspectionReportDetail/:id/:flag' component={NoInspectionReportDetail} /> - + <Route path='/' component={Index} /> </Switch> </Layout> diff --git a/SunshineIns/src/page/QuestionDetail.jsx b/SunshineIns/src/page/QuestionDetail.jsx index 709e7e8..90c9703 100644 --- a/SunshineIns/src/page/QuestionDetail.jsx +++ b/SunshineIns/src/page/QuestionDetail.jsx @@ -2,8 +2,13 @@ import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Spin, Breadcrumb } from 'antd'; import Questionnair from '../page/Questionnair' import Fetch from '../fetch' +import TableView from '../view/TableView'; import HeadView from '../view/HeadView'; +import moment from 'moment'; +const divStyle = { + margin: '20px' +} export default class QuestionDetail extends React.Component { constructor(props) { super(props); @@ -11,8 +16,8 @@ loading: false, data: [], initData: null, - btnLoading: false - + btnLoading: false, + dateSource: [] }; } @@ -26,11 +31,20 @@ }); Fetch.questionFindById(id).then(res => { console.log('res', res); + console.log('res.mps', res.submitMaps); this.setState({ loading: false, - initData: res + initData: res, + dateSource: res.submitMaps || [], }) }) + } + + + showModal = (userId) => { + const { id } = this.props.match.params; + console.log(id) + this.props.history.push("/questionnaire/persondetail/" + id + '/' + userId); } submitQuestionTemp = (questionDtos, extraData) => { @@ -69,7 +83,26 @@ render() { - const { data, loading, resetKey, initData, btnLoading } = this.state; + const { data, loading, resetKey, initData, btnLoading, dateSource } = this.state; + console.log(dateSource) + const act2columns = [{ + title: '提交人昵称', + dataIndex: 'userName', + key: 'userName' + }, + { + title: '提交时间', + dataIndex: 'createTime', + key: 'createTime', + render: text => <span>{text || ''}</span> + }, { + title: '操作', + dataIndex: 'isHit', + key: 'isHit', + render: (text, record) => ( + <label className='theme-color' onClick={() => this.showModal(record.userId)} style={{ cursor: 'pointer' }}>查看</label> + ) + }]; return ( <div className="app-page"> <HeadView history={this.props.history} /> @@ -115,6 +148,14 @@ {initData && initData.questionDtos.map((item, index) => ( <Questionnair.Editor editor={item} acitveAnswer={true} key={item.questionId} index={index} /> ))} + + { + dateSource.length > 0 ? + <div style={divStyle}> + <Divider orientation="left" style={{ margin: '20px', width: '97%' }}>问卷提交记录</Divider> + <TableView columns={act2columns} data={dateSource} pageSize='6' size='small' /> + </div> : null + } </React.Fragment> } diff --git a/SunshineIns/src/page/QuestionPersonDetail.jsx b/SunshineIns/src/page/QuestionPersonDetail.jsx new file mode 100644 index 0000000..d4c4475 --- /dev/null +++ b/SunshineIns/src/page/QuestionPersonDetail.jsx @@ -0,0 +1,146 @@ +import React from 'react'; +import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Spin, Breadcrumb } from 'antd'; +import Questionnair from './Questionnair' +import Fetch from '../fetch' +import TableView from '../view/TableView'; +import HeadView from '../view/HeadView'; + +export default class QuestionPersonDetail extends React.Component { + constructor(props) { + super(props); + this.state = { + loading: false, + data: [], + initData: null, + btnLoading: false, + dateSource: [] + }; + } + + componentDidMount() { + + document.title = '问卷详情'; + const { id } = this.props.match.params; + const { userId } = this.props.match.params; + console.log(id) + console.log(userId) + this.setState({ + loading: true + }); + Fetch.questionFindPersonById(id, userId).then(res => { + console.log('res', res); + this.setState({ + loading: false, + initData: res + }) + }) + } + + + showModal = (id) => { + this.props.history.push("/activeManageEdit/" + id); + } + + submitQuestionTemp = (questionDtos, extraData) => { + const { initData } = this.state; + console.log('questionDtos', questionDtos); + console.log('initData', initData); + if (!extraData.questionnairTitle) { + return message.error('请填写问卷标题'); + } + questionDtos = questionDtos.map(({ type, title, required, remarkText, options, scores, warnFlag }) => ({ + type, title, required, remarkText, options, scores, warnFlag + })); + this.setState({ + btnLoading: true + }) + Fetch.saveQuestionTemp({ + ...initData, + title: extraData.questionnairTitle, + content: extraData.questionnairDescription, + businessType: extraData.questionnairBusinessType, + questionDtos + }).then(res => { + console.log('res', res); + this.setState({ + btnLoading: false + }) + if (res.code == 0) { + message.success('问卷提交成功'); + } + }) + } + + getData = () => { + + } + + render() { + + const { data, loading, resetKey, initData, btnLoading, dateSource } = this.state; + return ( + <div className="app-page"> + <HeadView history={this.props.history} /> + <div style={{ + margin: 10 + }}> + <Breadcrumb> + <Breadcrumb.Item> + <a onClick={() => { + this.props.history.goBack(); + }}>问卷管理</a> + </Breadcrumb.Item> + + <Breadcrumb.Item> + 问卷详情 + </Breadcrumb.Item> + </Breadcrumb> + </div> + { + loading ? + <div style={{ height: 200, width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}> + <Spin spinning={loading} /> + </div> : + <React.Fragment> + {/* <Questionnair submitQuestionTemp={this.submitQuestionTemp} btnLoading={btnLoading} /> */} + { + initData && + <div style={{ background: '#fff', marginTop: 10 }}> + <div style={{ width: 700, margin: '0 auto', padding: '20px 0 0 0 ' }}> + <h3> + 问卷标题:{initData.title || '暂无'} + </h3> + <h4 style={{ marginBottom: 0 }}> + 问卷描述:{initData.content || '暂无'} + </h4> + <h4 style={{ marginBottom: 0 }}> + 业务类型:{typeStatus(initData.businessType) || '暂无'} + </h4> + </div> + </div> + } + + {initData && initData.questionDtos.map((item, index) => ( + <Questionnair.Editor editor={item} acitveAnswer={true} data={initData} key={item.questionId} index={index} /> + ))} + </React.Fragment> + } + + </div> + ); + } + +} + +function typeStatus(type) { + switch (type) { + case 1: + return "企业体检"; + case 2: + return "培训活动"; + case 3: + return "未检调查"; + case 4: + return "刑执监督"; + } +} diff --git a/SunshineIns/src/view/QuestionnairAnswer/index.js b/SunshineIns/src/view/QuestionnairAnswer/index.js index 1e75f8a..8454b92 100644 --- a/SunshineIns/src/view/QuestionnairAnswer/index.js +++ b/SunshineIns/src/view/QuestionnairAnswer/index.js @@ -3,6 +3,7 @@ const QuestionnairAnswer = ({ answer }) => { + console.log(answer) return ( <div style={{ minHeight: 60 }}> <div style={{ color: '#666' }}>{`${index + 1}.${answer.type === 'input' ? answer.completionForwards : answer.title + ':'}`}</div> diff --git a/SunshineIns/src/view/QuestionnairEditor/index.js b/SunshineIns/src/view/QuestionnairEditor/index.js index 734af73..b535f71 100644 --- a/SunshineIns/src/view/QuestionnairEditor/index.js +++ b/SunshineIns/src/view/QuestionnairEditor/index.js @@ -19,7 +19,12 @@ this.temp = ''; this.otherOptionInput = ''; - this.answer = {}; + this.answer = { + radio: { + optionIndex: "0", + optionValue: "大于10小于50" + } + }; } // static defaultProps = { @@ -416,9 +421,9 @@ answer, warnFlag } = editor; - this.answer = answer ? JSON.parse(JSON.stringify(answer)) : {}; - this.otherOptionValue = answer ? this.answer[type].otherOptionValue : []; - + console.log(this.answer) + // this.answer = answer ? JSON.parse(JSON.stringify(answer)) : {}; + // this.otherOptionValue = answer ? this.answer[type].otherOptionValue : []; /* * * 以下元素为编辑状态下的元素 @@ -681,8 +686,8 @@ <span>{otherOptionBackwards}</span> </div> ) : ( - data - )} + data + )} </span> </label> ); @@ -733,8 +738,8 @@ <span>{otherOptionBackwards}</span> </div> ) : ( - data - )} + data + )} </span> </label> ); @@ -760,8 +765,8 @@ type === 'dropdown' ? subDropdownEl : type === 'radio' - ? subRadioEl - : subCheckboxEl; + ? subRadioEl + : subCheckboxEl; //填写状态下的单行文本、多行文本 const subTextEl = ( <input @@ -919,69 +924,69 @@ </div> </ShakeTransition> ) : ( - <div - className="questionnair-subject" - style={{ - background: drag ? '' : hover ? '#F5F5F5' : '#fff', - borderTopColor: drag && index === 0 ? '#dbdbdb' : '', - borderBottomColor: drag ? '#dbdbdb' : '', - cursor: acitveAnswer ? '' : 'move', - display: 'flex', - justifyContent: 'center' - }} - onMouseEnter={this.mouseEnter} - onMouseLeave={this.mouseLeave} - > <div - className="questionnair-subject-inner" - style={{ margin: acitveAnswer ? '' : '0 auto' }} + className="questionnair-subject" + style={{ + background: drag ? '' : hover ? '#F5F5F5' : '#fff', + borderTopColor: drag && index === 0 ? '#dbdbdb' : '', + borderBottomColor: drag ? '#dbdbdb' : '', + cursor: acitveAnswer ? '' : 'move', + display: 'flex', + justifyContent: 'center' + }} + onMouseEnter={this.mouseEnter} + onMouseLeave={this.mouseLeave} > - <div className="subject-row"> - <span>{index + 1}.</span> - {'input' === type ? subCompletionEl : <span>{title}</span>} - {required == 'true' && ( - <span className="subject-title-require">*</span> - )} - - {type == 'checkbox' && <span>(多选题)</span>} - {type == 'radio' && <span>(单选题)</span>} - </div> - {remark && ( - <div className="subject-row subject-remarks">{remarkText}</div> - )} - <div className="subject-row"> - {['radio', 'dropdown', 'checkbox'].includes(type) && optionsEl} - {type === 'text' && subTextEl} - {type === 'textarea' && subTextareaEl} - </div> - </div> - {!acitveAnswer && ( <div - className="subject-control-mask" - style={{ - background: - curMoveItem === index ? 'rgba(245,245,245,0.3)' : '' - }} - ></div> - )} - <div - className="subject-control-bar" - style={{ transform: drag ? '' : hover ? 'translateX(0)' : '' }} - > - <div className="control-bar-inner"> - <div className="control-bar-button" onClick={this.edit}> - <i className="iconfont icon-grey_bianji"></i> + className="questionnair-subject-inner" + style={{ margin: acitveAnswer ? '' : '0 auto' }} + > + <div className="subject-row"> + <span>{index + 1}.</span> + {'input' === type ? subCompletionEl : <span>{title}</span>} + {required == 'true' && ( + <span className="subject-title-require">*</span> + )} + + {type == 'checkbox' && <span>(多选题)</span>} + {type == 'radio' && <span>(单选题)</span>} </div> - <div className="control-bar-button" onClick={this.copy}> - <i className="iconfont icon-grey_fuzhi"></i> + {remark && ( + <div className="subject-row subject-remarks">{remarkText}</div> + )} + <div className="subject-row"> + {['radio', 'dropdown', 'checkbox'].includes(type) && optionsEl} + {type === 'text' && subTextEl} + {type === 'textarea' && subTextareaEl} </div> - <div className="control-bar-button" onClick={this.remove}> - <i className="iconfont icon-grey_shanchu"></i> + </div> + {!acitveAnswer && ( + <div + className="subject-control-mask" + style={{ + background: + curMoveItem === index ? 'rgba(245,245,245,0.3)' : '' + }} + ></div> + )} + <div + className="subject-control-bar" + style={{ transform: drag ? '' : hover ? 'translateX(0)' : '' }} + > + <div className="control-bar-inner"> + <div className="control-bar-button" onClick={this.edit}> + <i className="iconfont icon-grey_bianji"></i> + </div> + <div className="control-bar-button" onClick={this.copy}> + <i className="iconfont icon-grey_fuzhi"></i> + </div> + <div className="control-bar-button" onClick={this.remove}> + <i className="iconfont icon-grey_shanchu"></i> + </div> </div> </div> </div> - </div> - )} + )} </div> ); } -- Gitblit v1.8.0