forked from nsjcy/frontEnd/nsjcy

liuwh
2020-03-31 a0ec2242677dced1e6e098c114460da3d56be157
提交
2 files added
6 files modified
359 ■■■■ changed files
SunshineIns/src/fetch/_fetch.js 4 ●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/index.js 4 ●●● patch | view | raw | blame | history
SunshineIns/src/fetch/questionFindPersonById.js 9 ●●●●● patch | view | raw | blame | history
SunshineIns/src/index.jsx 11 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/QuestionDetail.jsx 49 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/QuestionPersonDetail.jsx 146 ●●●●● patch | view | raw | blame | history
SunshineIns/src/view/QuestionnairAnswer/index.js 1 ●●●● patch | view | raw | blame | history
SunshineIns/src/view/QuestionnairEditor/index.js 135 ●●●● patch | view | raw | blame | history
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';
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
};
SunshineIns/src/fetch/questionFindPersonById.js
New file
@@ -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)
    );
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>
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>
        }
SunshineIns/src/page/QuestionPersonDetail.jsx
New file
@@ -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 "刑执监督";
  }
}
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>
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>
    );
  }