2 files added
6 files modified
| | |
| | | |
| | | // 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'; |
| | |
| | | import searchLawFind from './searchLawFind'; |
| | | import searchLawSave from './searchLawSave'; |
| | | import searchLawDelete from './searchLawDelete'; |
| | | import questionFindPersonById from './questionFindPersonById'; |
| | | |
| | | export default { |
| | | domain, |
| | |
| | | searchLaw, |
| | | searchLawFind, |
| | | searchLawSave, |
| | | searchLawDelete |
| | | searchLawDelete, |
| | | questionFindPersonById |
| | | }; |
New file |
| | |
| | | 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) |
| | | ); |
| | |
| | | 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'; |
| | |
| | | {/* <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> |
| | |
| | | <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} /> |
| | |
| | | <Route path='/noInspectionReportDetail/:id/:flag' component={NoInspectionReportDetail} /> |
| | | |
| | | |
| | | |
| | | |
| | | <Route path='/' component={Index} /> |
| | | </Switch> |
| | | </Layout> |
| | |
| | | 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); |
| | |
| | | loading: false, |
| | | data: [], |
| | | initData: null, |
| | | btnLoading: false |
| | | |
| | | btnLoading: false, |
| | | dateSource: [] |
| | | }; |
| | | } |
| | | |
| | |
| | | }); |
| | | 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) => { |
| | |
| | | |
| | | 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} /> |
| | |
| | | {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> |
| | | } |
| | | |
New file |
| | |
| | | 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 "刑执监督"; |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | this.temp = ''; |
| | | this.otherOptionInput = ''; |
| | | |
| | | this.answer = {}; |
| | | this.answer = { |
| | | radio: { |
| | | optionIndex: "0", |
| | | optionValue: "大于10小于50" |
| | | } |
| | | }; |
| | | } |
| | | |
| | | // static defaultProps = { |
| | |
| | | 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 : []; |
| | | /* |
| | | * |
| | | * 以下元素为编辑状态下的元素 |
| | |
| | | <span>{otherOptionBackwards}</span> |
| | | </div> |
| | | ) : ( |
| | | data |
| | | )} |
| | | data |
| | | )} |
| | | </span> |
| | | </label> |
| | | ); |
| | |
| | | <span>{otherOptionBackwards}</span> |
| | | </div> |
| | | ) : ( |
| | | data |
| | | )} |
| | | data |
| | | )} |
| | | </span> |
| | | </label> |
| | | ); |
| | |
| | | type === 'dropdown' |
| | | ? subDropdownEl |
| | | : type === 'radio' |
| | | ? subRadioEl |
| | | : subCheckboxEl; |
| | | ? subRadioEl |
| | | : subCheckboxEl; |
| | | //填写状态下的单行文本、多行文本 |
| | | const subTextEl = ( |
| | | <input |
| | |
| | | </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> |
| | | ); |
| | | } |