Merge branch 'master' of http://120.79.193.119:9090/r/nsjcy/frontEnd/nsjcy
# Conflicts:
# SunshineIns/src/fetch/index.js
# SunshineIns/src/index.jsx
14 files added
27 files modified
| | |
| | | path: '/sweeping' |
| | | }, { |
| | | id: 'activeManage', |
| | | name: '活动管理', |
| | | name: '法制活动', |
| | | icon: active, |
| | | iconCheck: activeCheck, |
| | | path: '/activeManage' |
| | |
| | | path: '/careList' |
| | | }, |
| | | { |
| | | id: 'underAgeList', |
| | | name: '涉未成年负责部门组织', |
| | | icon: active, |
| | | iconCheck: activeCheck, |
| | | path: '/underAgeList' |
| | | }, |
| | | { |
| | | id: 'questionnaire', |
| | | name: '问卷管理部分', |
| | | icon: msgManage, |
| | |
| | | |
| | | // export const base = 'http://xnwj.gznsjc.gov.cn'; |
| | | export const base = 'http://nsjc.vaiwan.com'; |
| | | // export const base = 'http://nsjcy.hugeinfo.com.cn'; |
| | | |
| | | // export const base = 'http://192.168.0.147:8081'; |
| | | |
| | | export const domain = base + '/nsjc-charge/'; |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default () => fetch(`api/activity/finds?`) |
| | | export default ({ activityType, activityStatus, startTime, endTime }) => fetch(`api/activity/finds?activityType=${activityType||''}&activityStatus=${activityStatus || ''}&startTime=${startTime || ''}&endTime=${endTime || ''}`) |
| | | .then( |
| | | json => json.data |
| | | ) |
New file |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default ({ id, result}) => fetch(`api/activity/addResult?id=${id||''}&result=${result || ''}`) |
| | | .catch( |
| | | error => message.error('列表加载失败,请联系管理员', 2) |
| | | ); |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default ({page,size, type}) => fetch(`api/entry/query?rows=${size}&page=${page}&type=${type}`) |
| | | export default ({page,size, type, status,startTime,endTime,createrName}) => fetch(`api/entry/query?rows=${size||''}&page=${page||''}&type=${type||''}&status=${status||''}&startTime=${startTime||''}&endTime=${endTime||''}&createrName=${createrName||''}`) |
| | | .then( |
| | | json => json |
| | | ) |
| | |
| | | import saveQuestionTemp from './saveQuestionTemp'; |
| | | import questionQuery from './questionQuery'; |
| | | import questionAudit from './questionAudit'; |
| | | import signinfo from './signinfo'; |
| | | import addResult from './addResult'; |
| | | import socialCompany from './socialCompany'; |
| | | import socialCompanySave from './socialCompanySave'; |
| | | import socialCompanyDetail from './socialCompanyDetail'; |
| | | import socialCompanydelete from './socialCompanydelete'; |
| | | |
| | | export default { |
| | | domain, |
| | |
| | | questionFindById, |
| | | saveQuestionTemp, |
| | | questionQuery, |
| | | questionAudit |
| | | questionAudit, |
| | | signinfo, |
| | | addResult, |
| | | socialCompany, |
| | | socialCompanySave, |
| | | socialCompanyDetail, |
| | | socialCompanydelete |
| | | }; |
New file |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | |
| | | export default (id) => fetch(`/api/activity/signInfo?id=${id}`) |
| | | .catch(error => message.error('信息加载失败,请联系管理员', 2)); |
New file |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default ({ companyName, companyLegal,companyTel,companyAccount, createTime }) => fetch(`api/socialCompany/finds?companyName=${companyName || ''}&companyLegal=${companyLegal || ''}&companyTel=${companyTel || ''}&companyAccount=${companyAccount || ''}&createTime=${createTime || ''}`) |
| | | .then( |
| | | json => json.rows |
| | | ) |
| | | .catch( |
| | | error => message.error('列表加载失败,请联系管理员', 2) |
| | | ); |
New file |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default (id) => fetch(`api/socialCompany/find?id=${id||'new'}`) |
| | | .then( |
| | | json => json |
| | | ) |
| | | .catch( |
| | | error => message.error('详情加载失败,请联系管理员', 2) |
| | | ); |
New file |
| | |
| | | |
| | | import fetch from './_fetch'; |
| | | |
| | | export default (savedate) => { |
| | | return fetch(`api/socialCompany/save`, |
| | | savedate |
| | | ); |
| | | } |
New file |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default (id) => fetch(`api/socialCompany/delete?id=${id}`) |
| | | .then( |
| | | json => json |
| | | ) |
| | | .catch( |
| | | error => message.error('删除失败,请联系管理员', 2) |
| | | ); |
| | |
| | | import fetch from './_fetch'; |
| | | import { message } from 'antd'; |
| | | export default ({page,size}) => fetch(`api/social/query?size=${size}&page=${page}`) |
| | | export default ({page,size, taskType, status, startTime,endTime}) => fetch(`api/social/query?size=${size}&page=${page}&taskType=${taskType}&status=${status}&startTime=${startTime}&endTime=${endTime}`) |
| | | .then( |
| | | json => json |
| | | ) |
| | |
| | | import BusDetail from './page/BusDetail'; |
| | | import SupPerson from './page/SupPerson'; |
| | | import Company from './page/Company'; |
| | | // 涉未成年负责部门组织 |
| | | import UnderAgeList from './page/UnderAgeList'; |
| | | import ActiveManage from './page/ActiveManage'; |
| | | import ActiveManageEdit from './page/ActiveManageEdit'; |
| | | import KnowledgeBase from './page/KnowledgeBase'; |
| | |
| | | <Route path='/active' component={Active} /> |
| | | <Route path='/supPerson' component={SupPerson} /> |
| | | <Route path='/company' component={Company} /> |
| | | <Route path='/underAgeList' component={UnderAgeList} /> |
| | | <Route path='/knowledgeBase' component={KnowledgeBase} /> |
| | | <Route path='/articlePublish' component={ArticlePublish} /> |
| | | <Route path='/articleEidt/:id' component={ArticleEidt} /> |
| | |
| | | /** |
| | | * 徐祥健<xuxj@hugeinfo.com.cn> |
| | | * 2018年8月28日 10:41 |
| | | * |
| | | */ |
| | | |
| | | |
| | | import React from 'react'; |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import { Divider, Modal, message, Tooltip, Progress } from 'antd' |
| | | import CommonSearchForm from '../view/CommonSearchForm'; |
| | | import { Divider, Modal, message, Button, Row, Col, Progress, Input, Upload, Icon } from 'antd' |
| | | import moment from 'moment' |
| | | import Fetch from '../fetch'; |
| | | import { domain } from '../fetch/_fetch'; |
| | | import TableView from '../view/TableView'; |
| | | const confirm = Modal.confirm; |
| | | const { TextArea } = Input; |
| | | function typeOfName(type) { |
| | | switch (type) { |
| | | case 0: |
| | |
| | | return "普法预约"; |
| | | } |
| | | } |
| | | |
| | | const taskNodeIds = { |
| | | 'act_1': '南检活动', |
| | | 'act_2': '法治培训', |
| | | 'act_3': '普法预约', |
| | | } |
| | | |
| | | const activityTypeList = [ |
| | | 'act_1', |
| | | 'act_2', |
| | | 'act_3', |
| | | ] |
| | | |
| | | const activityStatusIds = { |
| | | 0: '未发布', |
| | | 1: '报名中', |
| | | 2: '活动中', |
| | | 3: '已结束', |
| | | 100: '已摇号', |
| | | } |
| | | |
| | | const activityStatusList = [ |
| | | 0, |
| | | 1, |
| | | 2, |
| | | 3, |
| | | 100, |
| | | ] |
| | | export default class ActiveManage extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | resetKey: Date.now() |
| | | resetKey: Date.now(), |
| | | loading: false, |
| | | confirmLoading: false, |
| | | modal: false, |
| | | closeKey: Date.now(), |
| | | formData: { |
| | | __key: Date.now(), |
| | | activityType: '', |
| | | activityStatus: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | }, |
| | | savedate: {}, |
| | | fileList: [], |
| | | previewVisible: false, |
| | | previewImage: '', |
| | | }; |
| | | } |
| | | |
| | |
| | | document.title = '活动管理'; |
| | | this.getData(); |
| | | } |
| | | |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | handlePreview = (file) => { |
| | | this.setState({ |
| | | previewImage: file.url || file.thumbUrl, |
| | | previewVisible: true, |
| | | }); |
| | | } |
| | | |
| | | handleOk = () => { |
| | | console.log('success') |
| | | this.setState({ confirmLoading: true }); |
| | | const { savedate } = this.state; |
| | | console.log(savedate) |
| | | |
| | | if (!savedate.result) { |
| | | return message.warning("培训结果不能为空"); |
| | | } |
| | | Fetch.addResult({ ...savedate }) |
| | | .then(res => { |
| | | console.log(res) |
| | | if (res.code === 0) { |
| | | this.setState({ |
| | | confirmLoading: false, |
| | | modal: false, |
| | | closeKey: Date.now() |
| | | }, this.getData); |
| | | message.success("提交成功!") |
| | | } else { |
| | | message.error('保存失败,请联系管理员', 2) |
| | | } |
| | | }); |
| | | } |
| | | |
| | | handleCancel = () => { |
| | | this.setState({ |
| | | closeKey: Date.now(), |
| | | modal: false |
| | | }); |
| | | } |
| | | |
| | | searchonClick = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | this.getData(); |
| | | } |
| | | |
| | | saveInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ savedate }) => ({ |
| | | savedate: { |
| | | ...savedate, |
| | | [name]: value |
| | | } |
| | | })) |
| | | } |
| | | |
| | | getData = () => { |
| | | // this.setState({ |
| | | // data: [] |
| | | // }); |
| | | Fetch.activeManage() |
| | | this.setState({ loading: true }) |
| | | Fetch.activeManage({ ...this.state.formData }) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res |
| | | data: res, |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | |
| | | this.props.history.push("/activeManageEdit/" + id); |
| | | } |
| | | |
| | | signIn= (id) => { |
| | | signIn = (id) => { |
| | | window.open('index.html#/signIn/' + id); |
| | | } |
| | | |
| | | addResult = (id) => { |
| | | this.setState(({ savedate }) => ({ |
| | | savedate: { |
| | | ...savedate, |
| | | id: id |
| | | }, |
| | | modal: true |
| | | })) |
| | | } |
| | | |
| | | pulish = (id) => { |
| | |
| | | <Divider type="vertical" /> |
| | | <label className='theme-color' onClick={() => this.deleteItems(record.id)} style={{ cursor: 'pointer' }}>删除</label> |
| | | </span> |
| | | : |
| | | record.status == 2 ? |
| | | : |
| | | record.status == 2 ? |
| | | <span> |
| | | <label className='theme-color' onClick={() => this.showModal(record.id)} style={{ cursor: 'pointer' }}>查看</label> |
| | | <Divider type="vertical" /> |
| | | <label className='theme-color' onClick={() => this.signIn(record.id)} style={{ cursor: 'pointer' }}>签到上墙</label> |
| | | </span> |
| | | : |
| | | <span><label className='theme-color' onClick={() => this.showModal(record.id)} style={{ cursor: 'pointer' }}>查看</label></span> |
| | | : |
| | | record.status == 3 ? |
| | | <span> |
| | | <label className='theme-color' onClick={() => this.showModal(record.id)} style={{ cursor: 'pointer' }}>查看</label> |
| | | {!record.result && |
| | | <React.Fragment> |
| | | <Divider type="vertical" /> |
| | | <label className='theme-color' onClick={() => this.addResult(record.id)} style={{ cursor: 'pointer' }}>添加结果</label> |
| | | </React.Fragment> |
| | | } |
| | | </span> |
| | | : |
| | | <span><label className='theme-color' onClick={() => this.showModal(record.id)} style={{ cursor: 'pointer' }}>查看</label></span> |
| | | |
| | | ) |
| | | ), |
| | | }]; |
| | | const { data, resetKey } = this.state; |
| | | const { data, previewImage, formData, loading, modal, fileList, previewVisible, confirmLoading, closeKey, savedate } = this.state; |
| | | const props = { |
| | | action: domain + 'api/v1/attachment/materials?associateTypeId=1020&entityId=' + savedate.id, |
| | | onChange: ({ file, fileList }) => { |
| | | this.setState({ fileList }); |
| | | }, |
| | | fileList: fileList, |
| | | onRemove: (file) => { |
| | | Fetch.deleteAttachment(file.uid) |
| | | .then(res => { |
| | | message.success("移除成功!"); |
| | | }); |
| | | this.setState(({ fileList }) => { |
| | | const index = fileList.indexOf(file); |
| | | const newFileList = fileList.slice(); |
| | | newFileList.splice(index, 1); |
| | | return { |
| | | fileList: newFileList, |
| | | }; |
| | | }); |
| | | } |
| | | }; |
| | | return ( |
| | | <div className="app-page"> |
| | | <div className="app-page" > |
| | | <HeadView history={this.props.history} /> |
| | | <TableBtnView key={-resetKey} type="infoManage" name='活动一览' btnName='活动发布' onClick={() => this.showModal('new')}> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' /> |
| | | <div style={{ marginLeft: '90%', marginBottom: '20px', marginTop: '20px' }}> |
| | | <Button type="primary" size='large' onClick={() => this.showModal('new')}>活动发布</Button> |
| | | </div> |
| | | {/* <TableBtnView key={-resetKey} type="infoManage" name='活动一览' btnName='活动发布' onClick={() => this.showModal('new')}> |
| | | </TableBtnView> */} |
| | | <div style={{ background: '#fff', margin: 20 }}> |
| | | <CommonSearchForm |
| | | {...this.props} |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | searchonClick={this.searchonClick} |
| | | pathName={this.props.location.pathname} |
| | | data={[ |
| | | { |
| | | type: 'select', name: '活动类型', label: '活动类型', key: 'activityType', list: activityTypeList.map(key => ({ |
| | | id: key, |
| | | name: taskNodeIds[key] |
| | | })), |
| | | }, |
| | | { |
| | | type: 'select', name: '活动状态', label: '活动状态', key: 'activityStatus', list: activityStatusList.map(key => ({ |
| | | id: key, |
| | | name: activityStatusIds[key] |
| | | })), |
| | | }, |
| | | { |
| | | type: 'rangePicker', |
| | | label: '任务生成时间', |
| | | name: JSON.stringify(['开始时间', '结束时间']), |
| | | key: JSON.stringify(['startTime', 'endTime']), |
| | | keylistName: 'rangeTimelist', |
| | | }, |
| | | ]} /> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | </div> |
| | | <Modal |
| | | key={closeKey} |
| | | confirmLoading={confirmLoading} |
| | | visible={modal} |
| | | width={'50%'} |
| | | title="添加结果" |
| | | onOk={this.handleOk} |
| | | onCancel={this.handleCancel} |
| | | > |
| | | <Row type="flex" align='middle' style={{ margin: '12px 0' }} justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>培训结果</span></Col> |
| | | <Col span={18} push={0} ><TextArea rows={4} placeholder="请输入培训结果" value={savedate.result || ""} onChange={this.saveInputChange} name='result' /></Col> |
| | | </Row> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>培训材料</span></Col> |
| | | <Col span={18} push={0} > |
| | | <Upload listType="picture-card" onPreview={this.handlePreview} {...props}> |
| | | <div> |
| | | <Icon type="plus" /> |
| | | <div className="ant-upload-text">上传图片</div> |
| | | </div> |
| | | </Upload> |
| | | <Modal visible={previewVisible} footer={null} onCancel={this.handleCancel}> |
| | | <img alt="example" style={{ width: '100%' }} src={previewImage} /> |
| | | </Modal> |
| | | </Col> |
| | | </Row> |
| | | </Modal> |
| | | </div> |
| | | ); |
| | | } |
| | |
| | | */ |
| | | import React from 'react'; |
| | | |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin, Breadcrumb } from 'antd'; |
| | | const { TextArea } = Input; |
| | | import HeadView from '../view/HeadView'; |
| | | import BusDetailView from '../view/BusDetailView'; |
| | | import TableView from '../view/TableView'; |
| | | import ImageBoxView from '../view/ImageBoxView' |
| | | // 引入编辑器以及编辑器样式 |
| | | import BraftEditor from 'braft-editor' |
| | | import 'braft-editor/dist/index.css' |
| | | import Fetch from '../fetch'; |
| | | import moment from 'moment'; |
| | | const format = 'HH:mm'; |
| | |
| | | disabled: true, |
| | | status: '', |
| | | loading: false, |
| | | code: '', |
| | | editorState: BraftEditor.createEditorState(null) |
| | | }; |
| | | } |
| | | |
| | |
| | | if (endTime == null) { |
| | | endTime = Date.now(); |
| | | } |
| | | console.log |
| | | this.setState({ |
| | | savedate: { |
| | | ...res.activity, |
| | |
| | | endHour: moment(endTime).format(format), |
| | | activityType: res.activity.activityType || 'act_1', |
| | | }, |
| | | code: res.code || '', |
| | | editorState: BraftEditor.createEditorState(res.activity.course), |
| | | activityType: res.activity.activityType || 'act_1', |
| | | status: res.activity.activityStatus || '', |
| | | disabled: res.activity.activityStatus == 0 ? false : true, |
| | |
| | | return; |
| | | } |
| | | if (savedate.activityPhone) { |
| | | if (!validator.phone(savedate.activityPhone)) { |
| | | return message.warning("联系电话格式不正确"); |
| | | if (!savedate.activityPhone) { |
| | | return message.warning("联系电话不能为空"); |
| | | } |
| | | } |
| | | Fetch.saveActive(savedate) |
| | |
| | | ) |
| | | } |
| | | |
| | | uploadFn = (param) => { |
| | | |
| | | const serverURL = domain + 'api/v1/attachment/upload' |
| | | const xhr = new XMLHttpRequest |
| | | const fd = new FormData() |
| | | const successFn = (response) => { |
| | | // 假设服务端直接返回文件上传后的地址 |
| | | // 上传成功后调用param.success并传入上传后的文件地址 |
| | | //Pz |
| | | const res = JSON.parse(xhr.responseText); |
| | | param.success({ |
| | | url: domain + 'api/v1/attachment/image/' + res[0].id, |
| | | meta: { |
| | | id: res[0].id, |
| | | title: res[0].name, |
| | | alt: res[0].name, |
| | | loop: true, // 指定音视频是否循环播放 |
| | | autoPlay: true, // 指定音视频是否自动播放 |
| | | controls: true, // 指定音视频是否显示控制栏 |
| | | poster: domain + 'api/v1/attachment/image/' + res[0].id, // 指定视频播放器的封面 |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | | const progressFn = (event) => { |
| | | // 上传进度发生变化时调用param.progress |
| | | param.progress(event.loaded / event.total * 100) |
| | | } |
| | | |
| | | const errorFn = (response) => { |
| | | // 上传发生错误时调用param.error |
| | | param.error({ |
| | | msg: 'unable to upload.' |
| | | }) |
| | | } |
| | | xhr.upload.addEventListener("progress", progressFn, false) |
| | | xhr.addEventListener("load", successFn, false) |
| | | xhr.addEventListener("error", errorFn, false) |
| | | xhr.addEventListener("abort", errorFn, false) |
| | | fd.append('file', param.file) |
| | | xhr.open('POST', serverURL, true) |
| | | xhr.send(fd) |
| | | } |
| | | |
| | | handleEditorChange = (editorState) => { |
| | | this.setState({ editorState }) |
| | | } |
| | | |
| | | submitContent = () => { |
| | | // 在编辑器获得焦点时按下ctrl+s会执行此方法 |
| | | // 编辑器内容提交到服务端之前,可直接调用editorState.toHTML()来获取HTML格式的内容 |
| | | const htmlContent = this.state.editorState.toHTML() |
| | | this.setState(({ savedate }) => ({ |
| | | savedate: { |
| | | ...savedate, |
| | | course: htmlContent |
| | | } |
| | | })) |
| | | } |
| | | |
| | | handleCancel = () => this.setState({ previewVisible: false }) |
| | | render() { |
| | | const { savedate, previewVisible, previewImage, fileList, dateSource, hitList, activityType, disabled, loading } = this.state; |
| | | const { savedate, previewVisible, previewImage,editorState, fileList, dateSource, code, hitList, activityType, disabled, loading } = this.state; |
| | | console.log('disabled', disabled) |
| | | const props = { |
| | | action: domain + 'api/v1/attachment/materials?entityId=' + savedate.id, |
| | |
| | | <div className="app-page"> |
| | | <Spin spinning={loading}> |
| | | <HeadView history={this.props.history} /> |
| | | <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="index.html#/activeManage">活动管理</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>活动发布</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <BusDetailView type='活动发布' > |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | |
| | | <Option value='act_3'>普法预约</Option> |
| | | </Select> |
| | | </Col> |
| | | <Col span={12} pull={0}></Col> |
| | | </Row> |
| | | </div> |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>主持人</span></Col> |
| | | <Col span={6} push={0} ><Input disabled={disabled} placeholder="请输入主持人姓名" style={{ width: '300px' }} name='host' onChange={this.saveInputChange} value={savedate.host || ""} /></Col> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>报名要求</span></Col> |
| | | <Col span={6} push={0} ><Input disabled={disabled} placeholder="请输入报名要求" style={{ width: '300px' }} name='requirement' onChange={this.saveInputChange} value={savedate.requirement || ""} /></Col> |
| | | </Row> |
| | | </div> |
| | | |
| | |
| | | <Col span={18} push={0} ><TextArea disabled={disabled} rows={4} placeholder="请输入活动描述" style={{ width: '92%' }} value={savedate.activityDesc || ""} onChange={this.saveInputChange} name='activityDesc' /></Col> |
| | | </Row> |
| | | </div> |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>报名要求</span></Col> |
| | | <Col span={18} push={0} ><TextArea disabled={disabled} placeholder="请输入报名要求" style={{ width: '92%' }} name='requirement' onChange={this.saveInputChange} value={savedate.requirement || ""} /></Col> |
| | | </Row> |
| | | </div> |
| | | |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='top' justify="space-around"> |
| | |
| | | </div> |
| | | |
| | | { |
| | | code && <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>活动二维码</span></Col> |
| | | <Col span={18} push={0} ><img style={{ width: '150px', height: '150px' }} src={`data:image/png;base64,${code}`} /></Col> |
| | | </Row> |
| | | </div> |
| | | |
| | | } |
| | | |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='top' justify="space-around"> |
| | | <Col span={6} pull={0} style={{ textAlign: 'center' }}><span>活动进程</span></Col> |
| | | <Col span={18} push={0} style={{ border: 'solid 1px rgba(0, 0, 0, 0.25)', borderRadius: '5PX' }} > |
| | | <BraftEditor |
| | | value={editorState} |
| | | disabled={disabled} |
| | | placeholder='请输入活动进程' |
| | | media={{ |
| | | allowPasteImage: true, // 是否允许直接粘贴剪贴板图片(例如QQ截图等)到编辑器 |
| | | image: true, // 开启图片插入功能 |
| | | video: false, // 开启视频插入功能 |
| | | audio: false, // 开启音频插入功能 |
| | | uploadFn: this.uploadFn |
| | | }} |
| | | excludeControls={['emoji']} |
| | | onChange={this.handleEditorChange} |
| | | onSave={this.submitContent} |
| | | onBlur={this.submitContent} |
| | | /> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | |
| | | { |
| | | activityType == 'act_1' ? (dateSource.length > 0 ? |
| | | <div style={divStyle}> |
| | | <Divider orientation="left" style={{ margin: '20px', width: '97%' }}>报名人员信息</Divider> |
| | |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import CommonSearchForm from '../view/CommonSearchForm'; |
| | | import TableView from '../view/TableView'; |
| | | import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Tooltip } from 'antd'; |
| | | import moment from 'moment'; |
| | | import Fetch from '../fetch'; |
| | | import TableView from '../view/TableView'; |
| | | const Option = Select.Option; |
| | | function typeOfName(type) { |
| | | switch (type) { |
| | |
| | | return "已反馈"; |
| | | } |
| | | } |
| | | |
| | | const activityStatusIds = { |
| | | 1: '待处理', |
| | | 2: '已受理', |
| | | 3: '已反馈', |
| | | } |
| | | |
| | | const activityStatusList = [ |
| | | 1, |
| | | 2, |
| | | 3, |
| | | ] |
| | | export default class ApplyFor extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | formdata: { |
| | | formData: { |
| | | __key: Date.now(), |
| | | page: 1, |
| | | size: 10, |
| | | type:1, |
| | | }, |
| | | resetKey: Date.now(), |
| | | loading: false |
| | |
| | | this.getData(); |
| | | } |
| | | |
| | | getData = () => { |
| | | const { formdata } = this.state; |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | searchonClick = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | this.setState({ loading: true }) |
| | | Fetch.entryQuery({ ...formdata }) |
| | | Fetch.entryQuery({ ...data,type:1 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | |
| | | } |
| | | this.setState({ |
| | | data: res.rows, |
| | | loading:false |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | getData = () => { |
| | | this.setState({ loading: true }) |
| | | Fetch.entryQuery({ ...this.state.formData,type:1 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | | res.rows[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res.rows, |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | |
| | | </span> |
| | | ), |
| | | }]; |
| | | const { data, loading, resetKey } = this.state; |
| | | const { data, loading, resetKey, formData } = this.state; |
| | | return ( |
| | | <div className="app-page"> |
| | | <HeadView history={this.props.history} /> |
| | | <div style={{ marginLeft: '90%', marginBottom: '20px', marginTop: '20px' }}> |
| | | <Button type="primary" size='large' onClick={() => this.showModal('new')}>添加申请</Button> |
| | | </div> |
| | | {/* <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="">后台中心</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>社会关护</Breadcrumb.Item> |
| | | </Breadcrumb> */} |
| | | <TableBtnView name={''} key={resetKey}> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据举报性质查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'nature', value } })} |
| | | > |
| | | <Option value="1">涉黑涉恶违法犯罪行为</Option> |
| | | <Option value="2">涉黑涉恶违法犯罪保护伞</Option> |
| | | <Option value="3">其他</Option> |
| | | </Select> |
| | | <Input placeholder="根据内容模糊查询" style={{ width: "200px" }} name='content' onChange={this.onInputChange} /> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据状态查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'status', value } })} |
| | | > |
| | | <Option value="2">已回复</Option> |
| | | <Option value="1">待回复</Option> |
| | | </Select> |
| | | |
| | | <DatePicker onChange={(_, value) => this.onInputChange({ target: { name: 'createTime', value } })} placeholder="根据创建时间查询" /> |
| | | <Button type="primary" onClick={this.Seaech}>查询</Button> |
| | | <Button onClick={this.Reset}>重置</Button> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | <div style={{ background: '#fff', margin: 20 }}> |
| | | <CommonSearchForm |
| | | {...this.props} |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | searchonClick={this.searchonClick} |
| | | pathName={this.props.location.pathname} |
| | | data={[ |
| | | { |
| | | type: 'select', name: '状态', label: '活动状态', key: 'status', list: activityStatusList.map(key => ({ |
| | | id: key, |
| | | name: activityStatusIds[key] |
| | | })), |
| | | }, |
| | | { |
| | | type: 'rangePicker', |
| | | label: '申请时间', |
| | | name: JSON.stringify(['开始时间', '结束时间']), |
| | | key: JSON.stringify(['startTime', 'endTime']), |
| | | keylistName: 'rangeTimelist', |
| | | }, |
| | | ]} /> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | </div> |
| | | </div> |
| | | ); |
| | | } |
| | |
| | | |
| | | import React from 'react'; |
| | | |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, Breadcrumb, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | const { TextArea } = Input; |
| | | import HeadView from '../view/HeadView'; |
| | | import BusDetailView from '../view/BusDetailView'; |
| | |
| | | <div className="app-page"> |
| | | <Spin spinning={loading}> |
| | | <HeadView history={this.props.history} /> |
| | | <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="index.html#/entry/applyFor">入职查询</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>入职申请</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <BusDetailView type='入职申请' > |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import CommonSearchForm from '../view/CommonSearchForm'; |
| | | import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge } from 'antd'; |
| | | import moment from 'moment'; |
| | | import Fetch from '../fetch'; |
| | |
| | | return "心理疏导"; |
| | | } |
| | | } |
| | | |
| | | const taskNodeIds = { |
| | | 1: '跟踪帮教', |
| | | 2: '合适成年人', |
| | | 3: '社会调查', |
| | | 4: '心理疏导', |
| | | } |
| | | |
| | | const activityTypeList = [ |
| | | 1, |
| | | 2, |
| | | 3, |
| | | ] |
| | | const activityStatusIds = { |
| | | 0: '未开始', |
| | | 1: '进行中', |
| | | 2: '已结束', |
| | | 99: '结束', |
| | | } |
| | | |
| | | const activityStatusList = [ |
| | | 1, |
| | | 2, |
| | | 3, |
| | | ] |
| | | export default class CareList extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | formdata: { |
| | | formData: { |
| | | __key: Date.now(), |
| | | page: 1, |
| | | size: 10, |
| | | }, |
| | |
| | | } |
| | | |
| | | componentDidMount() { |
| | | |
| | | document.title = '社会关护管理'; |
| | | this.getData(); |
| | | } |
| | | |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | searchonClick = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | this.getData(); |
| | | } |
| | | |
| | | getData = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.socialQuery({ ...formdata }) |
| | | const { formData } = this.state; |
| | | this.setState({loading:true}) |
| | | Fetch.socialQuery({ ...formData }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | | res.rows[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res.rows |
| | | data: res.rows, |
| | | loading:false, |
| | | }); |
| | | }); |
| | | } |
| | | onInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ formdata }) => ({ |
| | | formdata: { |
| | | ...formdata, |
| | | this.setState(({ formData }) => ({ |
| | | formData: { |
| | | ...formData, |
| | | [name]: value |
| | | } |
| | | })) |
| | |
| | | } |
| | | |
| | | Seaech = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.getSweeping(formdata) |
| | | const { formData } = this.state; |
| | | Fetch.getSweeping(formData) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | |
| | | Reset = () => { |
| | | this.setState({ |
| | | resetKey: Date.now(), |
| | | formdata: {} |
| | | formData: {} |
| | | }, this.getData); |
| | | } |
| | | |
| | |
| | | key: 'status', |
| | | render: text => ( |
| | | text == 0 ? |
| | | <Badge style={{ backgroundColor: '#6C757C' }} count={'未开始'} /> :text == 1 ? <Badge count={'F1C40F'} style={{ backgroundColor: '#6C757C' }} /> : <Badge count={'已结束'} style={{ backgroundColor: '#2ECC71' }} /> |
| | | <Badge style={{ backgroundColor: '#6C757C' }} count={'已结束'} /> : text == 1 ? <Badge count={'进行中'} style={{ backgroundColor: '#6C757C' }} />: text == 2 ? <Badge count={'进行中'} style={{ backgroundColor: '#6C757C' }} /> : <Badge count={'已结束'} style={{ backgroundColor: '#2ECC71' }} /> |
| | | ) |
| | | }, { |
| | | title: '创建时间', |
| | |
| | | key: 'createTime', |
| | | render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span> |
| | | }, { |
| | | title: '开始时间', |
| | | dataIndex: 'startTime', |
| | | key: 'startTime', |
| | | render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span> |
| | | }, { |
| | | title: '结束时间', |
| | | dataIndex: 'endTime', |
| | | key: 'endTime', |
| | | render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span> |
| | | },{ |
| | | title: '操作', |
| | | key: 'action', |
| | | render: (text, record) => ( |
| | |
| | | <a href="#">删除</a> |
| | | </Popconfirm> |
| | | { |
| | | record.status==1? |
| | | <React.Fragment> |
| | | <Divider type="vertical" /> |
| | | <a onClick={() => this.showModal(record.id)}>结束任务</a> |
| | | </React.Fragment>:'' |
| | | record.status == 1 ? |
| | | <React.Fragment> |
| | | <Divider type="vertical" /> |
| | | <a onClick={() => this.showModal(record.id)}>结束任务</a> |
| | | </React.Fragment> : '' |
| | | } |
| | | </span> |
| | | ), |
| | | }]; |
| | | const { data, loading, resetKey } = this.state; |
| | | const { data, loading, resetKey, formData } = this.state; |
| | | return ( |
| | | <div className="app-page"> |
| | | <HeadView history={this.props.history} /> |
| | |
| | | <Breadcrumb.Item><a href="">后台中心</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>社会关护</Breadcrumb.Item> |
| | | </Breadcrumb> */} |
| | | <TableBtnView name={''} key={resetKey}> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据举报性质查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'nature', value } })} |
| | | > |
| | | <Option value="1">涉黑涉恶违法犯罪行为</Option> |
| | | <Option value="2">涉黑涉恶违法犯罪保护伞</Option> |
| | | <Option value="3">其他</Option> |
| | | </Select> |
| | | <Input placeholder="根据内容模糊查询" style={{ width: "200px" }} name='content' onChange={this.onInputChange} /> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据状态查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'status', value } })} |
| | | > |
| | | <Option value="2">已回复</Option> |
| | | <Option value="1">待回复</Option> |
| | | </Select> |
| | | |
| | | <DatePicker onChange={(_, value) => this.onInputChange({ target: { name: 'createTime', value } })} placeholder="根据创建时间查询" /> |
| | | <Button type="primary" onClick={this.Seaech}>查询</Button> |
| | | <Button onClick={this.Reset}>重置</Button> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | <div style={{ background: '#fff', margin: 20 }}> |
| | | <CommonSearchForm |
| | | {...this.props} |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | searchonClick={this.searchonClick} |
| | | pathName={this.props.location.pathname} |
| | | data={[ |
| | | { |
| | | type: 'select', name: '任务类型', label: '任务类型', key: 'taskType', list: activityTypeList.map(key => ({ |
| | | id: key, |
| | | name: taskNodeIds[key] |
| | | })), |
| | | }, |
| | | { |
| | | type: 'select', name: '状态', label: '状态', key: 'status', list: activityStatusList.map(key => ({ |
| | | id: key, |
| | | name: activityStatusIds[key] |
| | | })), |
| | | }, |
| | | { |
| | | type: 'rangePicker', |
| | | label: '创建时间', |
| | | name: JSON.stringify(['开始时间', '结束时间']), |
| | | key: JSON.stringify(['startTime', 'endTime']), |
| | | keylistName: 'rangeTimelist', |
| | | }, |
| | | ]} /> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading}/> |
| | | </div> |
| | | </div> |
| | | ); |
| | | } |
| | |
| | | |
| | | import React from 'react'; |
| | | |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Breadcrumb, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | const { TextArea } = Input; |
| | | import HeadView from '../view/HeadView'; |
| | | import BusDetailView from '../view/BusDetailView'; |
| | |
| | | <div className="app-page"> |
| | | <Spin spinning={loading}> |
| | | <HeadView history={this.props.history} /> |
| | | <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="index.html#/entry/applyFor">社会关护管理</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>社会关护管理活动</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <BusDetailView type='社会关护管理活动' > |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import CommonSearchForm from '../view/CommonSearchForm'; |
| | | import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Tooltip } from 'antd'; |
| | | import moment from 'moment'; |
| | | import Fetch from '../fetch'; |
| | |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | formdata: { |
| | | formData: { |
| | | __key: Date.now(), |
| | | page: 1, |
| | | size: 10, |
| | | type:2, |
| | | }, |
| | | resetKey: Date.now(), |
| | | loading: false |
| | |
| | | this.getData(); |
| | | } |
| | | |
| | | getData = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.entryQuery({ ...formdata }) |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | searchonClick = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | this.setState({ loading: true }) |
| | | Fetch.entryQuery({ ...data, type: 2 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | | res.rows[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res.rows |
| | | data: res.rows, |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | getData = () => { |
| | | this.setState({ loading: true }) |
| | | console.log(this.state.formData) |
| | | Fetch.entryQuery({ ...this.state.formData, type: 2 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | | res.rows[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res.rows, |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | | onInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ formdata }) => ({ |
| | | formdata: { |
| | | ...formdata, |
| | | this.setState(({ formData }) => ({ |
| | | formData: { |
| | | ...formData, |
| | | [name]: value |
| | | } |
| | | })) |
| | | } |
| | | showModal = (id) => { |
| | | this.props.history.push("/entry/ExamineEdit/" + id); |
| | | } |
| | | |
| | | Seaech = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.getSweeping(formdata) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res |
| | | }); |
| | | }); |
| | | } |
| | | Reset = () => { |
| | | this.setState({ |
| | | resetKey: Date.now(), |
| | | formdata: {} |
| | | }, this.getData); |
| | | } |
| | | |
| | | confirm = (e) => { |
| | |
| | | </span> |
| | | ), |
| | | }]; |
| | | const { data, loading, resetKey } = this.state; |
| | | const { data, loading, resetKey, formData } = this.state; |
| | | console.log(formData) |
| | | return ( |
| | | <div className="app-page"> |
| | | <HeadView history={this.props.history} /> |
| | | <TableBtnView name={''} key={resetKey} style={{marginTop:"20px"}}> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据举报性质查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'nature', value } })} |
| | | > |
| | | <Option value="1">涉黑涉恶违法犯罪行为</Option> |
| | | <Option value="2">涉黑涉恶违法犯罪保护伞</Option> |
| | | <Option value="3">其他</Option> |
| | | </Select> |
| | | <Input placeholder="根据内容模糊查询" style={{ width: "200px" }} name='content' onChange={this.onInputChange} /> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据状态查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'status', value } })} |
| | | > |
| | | <Option value="2">已回复</Option> |
| | | <Option value="1">待回复</Option> |
| | | </Select> |
| | | |
| | | <DatePicker onChange={(_, value) => this.onInputChange({ target: { name: 'createTime', value } })} placeholder="根据创建时间查询" /> |
| | | <Button type="primary" onClick={this.Seaech}>查询</Button> |
| | | <Button onClick={this.Reset}>重置</Button> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | <div style={{ background: '#fff', margin: 20 }}> |
| | | <CommonSearchForm |
| | | {...this.props} |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | searchonClick={this.searchonClick} |
| | | pathName={this.props.location.pathname} |
| | | data={[ |
| | | { type: 'input', name: '申请人', label: '申请人', key: 'createrName' }, |
| | | { |
| | | type: 'rangePicker', |
| | | label: '申请时间', |
| | | name: JSON.stringify(['开始时间', '结束时间']), |
| | | key: JSON.stringify(['startTime', 'endTime']), |
| | | keylistName: 'rangeTimelist', |
| | | }, |
| | | ]} /> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | </div> |
| | | </div> |
| | | ); |
| | | } |
| | |
| | | |
| | | import React from 'react'; |
| | | |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, Breadcrumb, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | const { TextArea } = Input; |
| | | import HeadView from '../view/HeadView'; |
| | | import BusDetailView from '../view/BusDetailView'; |
| | |
| | | <div className="app-page"> |
| | | <Spin spinning={loading}> |
| | | <HeadView history={this.props.history} /> |
| | | <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="index.html#/entry/applyFor">检察院审核</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>检察院审核详情</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <BusDetailView type='检察院审核' > |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
| | |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import CommonSearchForm from '../view/CommonSearchForm'; |
| | | import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge, Tooltip } from 'antd'; |
| | | import moment from 'moment'; |
| | | import Fetch from '../fetch'; |
| | |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | formdata: { |
| | | formData: { |
| | | __key: Date.now(), |
| | | page: 1, |
| | | size: 10, |
| | | type:3, |
| | | }, |
| | | resetKey: Date.now(), |
| | | loading: false |
| | |
| | | this.getData(); |
| | | } |
| | | |
| | | getData = () => { |
| | | const { formdata } = this.state; |
| | | setFormData = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | } |
| | | |
| | | searchonClick = data => { |
| | | console.log('form', data); |
| | | this.setState({ |
| | | formData: data, |
| | | }); |
| | | this.setState({ loading: true }) |
| | | Fetch.entryQuery({ ...formdata }) |
| | | Fetch.entryQuery({ ...data, type: 3 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | |
| | | } |
| | | this.setState({ |
| | | data: res.rows, |
| | | loading: false |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | getData = () => { |
| | | this.setState({ loading: true }) |
| | | Fetch.entryQuery({ ...this.state.formData, type: 3 }) |
| | | .then(res => { |
| | | console.log(res) |
| | | for (var i = 0; i < res.rows.length; i++) { |
| | | res.rows[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res.rows, |
| | | loading: false |
| | | }); |
| | | }); |
| | | } |
| | | onInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ formdata }) => ({ |
| | | formdata: { |
| | | ...formdata, |
| | | this.setState(({ formData }) => ({ |
| | | formData: { |
| | | ...formData, |
| | | [name]: value |
| | | } |
| | | })) |
| | |
| | | } |
| | | |
| | | Seaech = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.getSweeping(formdata) |
| | | const { formData } = this.state; |
| | | Fetch.getSweeping(formData) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | |
| | | Reset = () => { |
| | | this.setState({ |
| | | resetKey: Date.now(), |
| | | formdata: {} |
| | | formData: {} |
| | | }, this.getData); |
| | | } |
| | | |
| | |
| | | </span> |
| | | ), |
| | | }]; |
| | | const { data, loading, resetKey } = this.state; |
| | | const { data, loading, resetKey, formData } = this.state; |
| | | return ( |
| | | <div className="app-page"> |
| | | <HeadView history={this.props.history} /> |
| | | <TableBtnView key={resetKey} style={{marginTop:"20px"}}> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据举报性质查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'nature', value } })} |
| | | > |
| | | <Option value="1">涉黑涉恶违法犯罪行为</Option> |
| | | <Option value="2">涉黑涉恶违法犯罪保护伞</Option> |
| | | <Option value="3">其他</Option> |
| | | </Select> |
| | | <Input placeholder="根据内容模糊查询" style={{ width: "200px" }} name='content' onChange={this.onInputChange} /> |
| | | <Select |
| | | style={{ width: 200 }} |
| | | placeholder="根据状态查询" |
| | | onChange={(value) => this.onInputChange({ target: { name: 'status', value } })} |
| | | > |
| | | <Option value="2">已回复</Option> |
| | | <Option value="1">待回复</Option> |
| | | </Select> |
| | | |
| | | <DatePicker onChange={(_, value) => this.onInputChange({ target: { name: 'createTime', value } })} placeholder="根据创建时间查询" /> |
| | | <Button type="primary" onClick={this.Seaech}>查询</Button> |
| | | <Button onClick={this.Reset}>重置</Button> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | <div style={{ background: '#fff', margin: 20 }}> |
| | | <CommonSearchForm |
| | | {...this.props} |
| | | formData={formData} |
| | | setFormData={this.setFormData} |
| | | searchonClick={this.searchonClick} |
| | | pathName={this.props.location.pathname} |
| | | data={[ |
| | | { type: 'input', name: '申请人', label: '申请人', key: 'createrName' }, |
| | | { |
| | | type: 'rangePicker', |
| | | label: '申请时间', |
| | | name: JSON.stringify(['开始时间', '结束时间']), |
| | | key: JSON.stringify(['startTime', 'endTime']), |
| | | keylistName: 'rangeTimelist', |
| | | }, |
| | | ]} /> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' loading={loading} /> |
| | | </div> |
| | | </div> |
| | | ); |
| | | } |
| | |
| | | import React from 'react'; |
| | | import { Input, Button, DatePicker, Divider, message, Popconfirm, Select, Badge } from 'antd'; |
| | | import { Icon, Button, DatePicker, Divider, Affix, Spin, Card, Row, Col } from 'antd'; |
| | | |
| | | import Fetch from '../fetch'; |
| | | import sign from './../asset/image/sign.png'; |
| | | import moment from 'moment'; |
| | | |
| | | |
| | | const format = 'YYYY-MM-DD HH:mm'; |
| | | |
| | | const list = [ |
| | | { name: '一号' }, |
| | | { name: '二号' }, |
| | | { name: '三号' }, |
| | | { name: '四号' }, |
| | | { name: '五号' }, |
| | | { name: '六号' }, |
| | | { name: '七号' }, |
| | | ] |
| | | export default class SignIn extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | |
| | | personList: [], |
| | | activityName: '', |
| | | code: '', |
| | | loading: false, |
| | | }; |
| | | } |
| | | |
| | | componentDidMount() { |
| | | |
| | | document.title = '签到上墙'; |
| | | // this.getData(); |
| | | this.getData(); |
| | | } |
| | | |
| | | getData = () => { |
| | | |
| | | // signinfo |
| | | const { id } = this.props.match.params; |
| | | this.setState({ loading: true }) |
| | | Fetch.signinfo(id) |
| | | .then(res => { |
| | | console.log(res) |
| | | this.setState({ |
| | | code: res.data.code, |
| | | personList: res.data.personList, |
| | | activityName: res.data.activityName, |
| | | loading: false, |
| | | }); |
| | | }) |
| | | } |
| | | |
| | | |
| | | render() { |
| | | |
| | | const { data, loading, resetKey } = this.state; |
| | | |
| | | const { code, loading, personList, activityName } = this.state; |
| | | return ( |
| | | <div className="app-page"> |
| | | 签到上墙 |
| | | <Spin spinning={loading}> |
| | | <Affix style={{ position: 'absolute', top: 520, right: 20 }}> |
| | | <Card> |
| | | < img style={{ width: '150px', height: '150px' }} src={`data:image/png;base64,${code}`} alt=""></img> |
| | | </Card> |
| | | </Affix> |
| | | <Card style={{ margin: "8%" }}> |
| | | <div> |
| | | <Row type="flex" justify="center" align="middle" style={{ borderBottom: '1px solid #D8D8D8' }}> |
| | | <Col style={{ color: '#3D444D', fontSize: 26, fontWeight: 'bold', lineHeight: '75px' }}> |
| | | {activityName} |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | |
| | | <div style={{ display: 'flex' }}> |
| | | { |
| | | personList.length > 0 ? personList.map((item, index) => ( |
| | | <div style={{ display: 'flex', flexWrap: 'wrap', flexDirection: 'column', width: '168px', height: '168px', justifyContent: 'center', alignItems: 'center',color:'#fff',textAlign:'center',lineHeight:'150px' }} key={index}> |
| | | <img src={item.imgUrl} style={{ width: '150px', height: '150px' }} /> |
| | | { |
| | | item.signStatus !== 3 ? |
| | | <div style={{ width: '150px', height: '150px', backgroundColor: '#000', opacity: '0.2', position: 'absolute' }}>未签到</div> : '' |
| | | } |
| | | { |
| | | item.signStatus == 3 ? |
| | | // <div style={{ width: '150px', height: '50px', color:'#000', position: 'absolute' }}>签到时间:{moment(item.updateTime).format(format)}</div> : '' |
| | | <div style={{ width: '150px', height: '150px', color:'#000', position: 'absolute', display:'flex',justifyContent:'flex-end' }}><Icon type="check-circle" style={{fontSize:'32px'}} theme="twoTone" twoToneColor="#52c41a" /></div> : '' |
| | | } |
| | | </div> |
| | | )) : <span>暂无数据</span> |
| | | } |
| | | </div> |
| | | </Card> |
| | | </Spin> |
| | | </div> |
| | | ); |
| | | } |
New file |
| | |
| | | import React from 'react'; |
| | | |
| | | import HeadView from '../view/HeadView'; |
| | | import TableBtnView from '../view/TableBtnView'; |
| | | import { Input, Button, DatePicker, Divider, Modal, message } from 'antd' |
| | | import moment from 'moment' |
| | | import Fetch from '../fetch'; |
| | | import TableView from '../view/TableView'; |
| | | const confirm = Modal.confirm; |
| | | export default class Company extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | data: [], |
| | | loading: false, |
| | | visible: false, |
| | | savedate: {}, |
| | | formdata: {}, |
| | | resetKey: Date.now(), |
| | | closeKey: Date.now() |
| | | }; |
| | | } |
| | | |
| | | componentDidMount() { |
| | | document.title = '涉未成年负责部门组织'; |
| | | this.getData(); |
| | | } |
| | | getData = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.socialCompany(formdata) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res |
| | | }); |
| | | }); |
| | | } |
| | | onInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ formdata }) => ({ |
| | | formdata: { |
| | | ...formdata, |
| | | [name]: value |
| | | } |
| | | })) |
| | | } |
| | | saveInputChange = ({ target: { value, name } }) => { |
| | | this.setState(({ savedate }) => ({ |
| | | savedate: { |
| | | ...savedate, |
| | | [name]: value |
| | | } |
| | | })) |
| | | } |
| | | Seaech = () => { |
| | | const { formdata } = this.state; |
| | | Fetch.socialCompany(formdata) |
| | | .then(res => { |
| | | for (var i = 0; i < res.length; i++) { |
| | | res[i]['index'] = i + 1; |
| | | } |
| | | this.setState({ |
| | | data: res |
| | | }); |
| | | }); |
| | | } |
| | | Reset = () => { |
| | | this.setState({ |
| | | resetKey: Date.now(), |
| | | formdata: {} |
| | | }, this.getData); |
| | | } |
| | | |
| | | showModal = (id) => { |
| | | this.setState({ |
| | | visible: true, |
| | | }); |
| | | Fetch.socialCompanyDetail(id) |
| | | .then(res => { |
| | | this.setState({ savedate: res }) |
| | | }) |
| | | } |
| | | |
| | | handleOk = () => { |
| | | this.setState({ loading: true }); |
| | | const { savedate } = this.state; |
| | | if (savedate.companyTel) { |
| | | if (!validator.mobile(savedate.companyTel)) { |
| | | this.setState({ |
| | | loading: false |
| | | }); |
| | | return message.warning("电话号码格式不正确"); |
| | | } |
| | | } |
| | | if (!savedate.companyAccount) { |
| | | return message.warning("账号不能为空"); |
| | | } |
| | | if (!savedate.companyPassword) { |
| | | return message.warning("密码不能为控"); |
| | | } |
| | | Fetch.socialCompanySave(savedate) |
| | | .then(res => { |
| | | if (res.statuscode === 1) { |
| | | this.setState({ |
| | | loading: false, |
| | | visible: false, |
| | | closeKey: Date.now() |
| | | }, this.getData); |
| | | message.success("提交成功!") |
| | | } else { |
| | | message.error('保存失败,请联系管理员', 2) |
| | | } |
| | | }); |
| | | } |
| | | |
| | | handleCancel = () => { |
| | | this.setState({ |
| | | closeKey: Date.now(), |
| | | visible: false |
| | | }); |
| | | } |
| | | |
| | | deleteItems = (id) => { |
| | | confirm({ |
| | | title: '确认要删除这条数据吗?', |
| | | onOk: () => { |
| | | Fetch.socialCompanydelete(id) |
| | | .then(data => { |
| | | if (data.statuscode == 1) { |
| | | message.success("删除成功!") |
| | | this.setState({ |
| | | resetKey: Date.now(), |
| | | formdata: {} |
| | | }, this.getData); |
| | | } else { |
| | | message.error('删除失败,请联系管理员', 2) |
| | | } |
| | | }) |
| | | } |
| | | }); |
| | | } |
| | | render() { |
| | | const columns = [{ |
| | | title: '序号', |
| | | dataIndex: 'index', |
| | | key: 'index' |
| | | }, { |
| | | title: '公司名称', |
| | | dataIndex: 'companyName', |
| | | key: 'companyName' |
| | | }, { |
| | | title: '法人姓名', |
| | | dataIndex: 'companyLegal', |
| | | key: 'companyLegal', |
| | | }, { |
| | | title: '联系电话', |
| | | dataIndex: 'companyTel', |
| | | key: 'companyTel', |
| | | }, { |
| | | title: '公司地址', |
| | | dataIndex: 'companyAddress', |
| | | key: 'companyAddress', |
| | | }, { |
| | | title: '管理员账号', |
| | | dataIndex: 'companyAccount', |
| | | key: 'companyAccount', |
| | | }, { |
| | | title: '管理员密码', |
| | | dataIndex: 'companyPassword', |
| | | key: 'companyPassword', |
| | | render: text => <span>***********</span> |
| | | }, { |
| | | title: '创建时间', |
| | | dataIndex: 'createTime', |
| | | key: 'createTime', |
| | | render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span> |
| | | }, { |
| | | title: '操作', |
| | | key: 'action', |
| | | render: (text, record) => ( |
| | | <span> |
| | | <label onClick={() => this.showModal(record.id)} className='theme-color' style={{ cursor: 'pointer' }}>编辑</label> |
| | | <Divider type="vertical" /> |
| | | <label onClick={() => this.deleteItems(record.id)} className='theme-color' style={{ cursor: 'pointer' }}>删除</label> |
| | | </span> |
| | | ), |
| | | }]; |
| | | const { data, resetKey, visible, loading, savedate, closeKey } = this.state; |
| | | return ( |
| | | |
| | | <div className="app-page"> |
| | | <HeadView history={this.props.history} /> |
| | | <TableBtnView key={-resetKey} type="infoManage" name='涉未成年负责部门组织' btnName='新建公司' onClick={() => this.showModal('new')}> |
| | | <Input placeholder="根据公司名称模糊查询" style={{ width: "200px" }} name='companyName' onChange={this.onInputChange} /> |
| | | <Input placeholder="根据法人姓名模糊查询" style={{ width: "200px" }} name='companyLegal' onChange={this.onInputChange} /> |
| | | <Input placeholder="根据联系电话模糊查询" style={{ width: "200px" }} name='companyTel' onChange={this.onInputChange} /> |
| | | <Input placeholder="根据管理员账号模糊查询" style={{ width: "200px" }} name='companyAccount' onChange={this.onInputChange} /> |
| | | <DatePicker onChange={(_, value) => this.onInputChange({ target: { name: 'createTime', value } })} placeholder="根据创建时间查询" /> |
| | | <Button type="primary" onClick={this.Seaech}>查询</Button> |
| | | <Button onClick={this.Reset}>重置</Button> |
| | | </TableBtnView> |
| | | <TableView columns={columns} data={data} pageSize='10' size='default' /> |
| | | <Modal |
| | | key={closeKey} |
| | | confirmLoading={loading} |
| | | visible={visible} |
| | | title="公司信息" |
| | | onOk={this.handleOk} |
| | | onCancel={this.handleCancel} |
| | | bodyStyle={{ lineHeight: 4 }} |
| | | > |
| | | <Input addonBefore="公司名称" name='companyName' onChange={this.saveInputChange} value={savedate.companyName || ''} /> |
| | | <Input addonBefore="法人姓名" name='companyLegal' onChange={this.saveInputChange} value={savedate.companyLegal || ''} /> |
| | | <Input addonBefore="联系电话" name='companyTel' onChange={this.saveInputChange} value={savedate.companyTel || ''} /> |
| | | <Input addonBefore="公司地址" name='companyAddress' onChange={this.saveInputChange} value={savedate.companyAddress || ''} /> |
| | | <Input addonBefore="管理员账号" name='companyAccount' onChange={this.saveInputChange} value={savedate.companyAccount || ''} /> |
| | | <Input addonBefore="管理员密码" name='companyPassword' onChange={this.saveInputChange} value={savedate.companyPassword || ''} /> |
| | | </Modal> |
| | | </div> |
| | | ); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | import React from 'react'; |
| | | |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, TimePicker, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | import { Row, Col, Input, DatePicker, Button, Modal, Upload, Icon, message, Divider, Breadcrumb, Badge, Select, Popconfirm, Spin } from 'antd'; |
| | | const { TextArea } = Input; |
| | | import HeadView from '../view/HeadView'; |
| | | import BusDetailView from '../view/BusDetailView'; |
| | |
| | | <div className="app-page"> |
| | | <Spin spinning={loading}> |
| | | <HeadView history={this.props.history} /> |
| | | <Breadcrumb style={{ padding: '20px' }}> |
| | | <Breadcrumb.Item><a href="index.html#/entry/applyFor">检察院审核</a></Breadcrumb.Item> |
| | | <Breadcrumb.Item>检察院审核详情</Breadcrumb.Item> |
| | | </Breadcrumb> |
| | | <BusDetailView type='公安审核' > |
| | | <div style={divStyle}> |
| | | <Row type="flex" align='middle' justify="space-around"> |
New file |
| | |
| | | import React from 'react'; |
| | | import './style.scss'; |
| | | import { |
| | | Row, |
| | | Col, |
| | | Form, |
| | | Input, |
| | | Button, |
| | | Select, |
| | | DatePicker, |
| | | |
| | | } from 'antd'; |
| | | const { RangePicker } = DatePicker; |
| | | import { FormComponentProps } from 'antd/lib/form'; |
| | | import { RouteComponentProps } from 'react-router-dom'; |
| | | import moment from 'moment'; |
| | | |
| | | class CommonSearchForm extends React.Component { |
| | | constructor(props) { |
| | | super(props); |
| | | this.state = { |
| | | showModal: false, |
| | | }; |
| | | } |
| | | |
| | | componentDidMount() { |
| | | // 回车事件 |
| | | // document.addEventListener('keydown', this.onkeydown); |
| | | } |
| | | |
| | | componentWillUnmount() { |
| | | // window.removeEventListener("keydown", this.onkeydown.bind(this)); |
| | | } |
| | | |
| | | onkeydown = (e) => { |
| | | if (e.keyCode === 13) { |
| | | this.onClick('search'); |
| | | } |
| | | } |
| | | |
| | | onClick = type => { |
| | | const { pathName } = this.props; |
| | | let data; |
| | | switch (type) { |
| | | case 'search': |
| | | data = { ...this.props.formData, __key: Date.now() }; |
| | | this.props.searchonClick(data); |
| | | // if (pathName) { |
| | | // this.props.history.push(pathName + '?' + Object.entries(data) |
| | | // .map(([k, v]) => `${k}=${v}`) |
| | | // .join('&')); |
| | | // } |
| | | return; |
| | | case 'reset': |
| | | data = { __key: Date.now(), page: 1, size: 10 }; |
| | | this.props.searchonClick(data); |
| | | if (pathName) { |
| | | this.props.history.push(pathName + '?' + Object.entries(data) |
| | | .map(([k, v]) => `${k}=${v}`) |
| | | .join('&')); |
| | | } |
| | | return; |
| | | case 'build': |
| | | return; |
| | | } |
| | | }; |
| | | |
| | | handleInput = ({ target: { name, value } }) => { |
| | | this.props.setFormData({ ...this.props.formData, [name]: value }); |
| | | }; |
| | | |
| | | handleSelectChange = name => { |
| | | return value => { |
| | | this.handleInput({ target: { name, value } }); |
| | | }; |
| | | }; |
| | | |
| | | rangePickerChange = (name, key, m, d) => { |
| | | if (m.length > 0) { |
| | | this.props.setFormData({ |
| | | ...this.props.formData, |
| | | [name]: d.join(','), |
| | | [JSON.parse(key)[0]]: d[0], |
| | | [JSON.parse(key)[1]]: d[1], |
| | | }); |
| | | } else { |
| | | this.props.setFormData({ |
| | | ...this.props.formData, |
| | | [name]: undefined, |
| | | [JSON.parse(key)[0]]: '', |
| | | [JSON.parse(key)[1]]: '', |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | datePickerChange = (name, v) => { |
| | | this.props.setFormData({ |
| | | ...this.props.formData, |
| | | [name]: v, |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | render() { |
| | | const { formData, data, children } = this.props; |
| | | console.log(formData) |
| | | console.log(data) |
| | | return ( |
| | | <div className="common-search-form-main"> |
| | | <Row type="flex" align="middle" gutter={20}> |
| | | {/* <Row type="flex" align="bottom"> */} |
| | | {/* <Col span={20}> |
| | | <Row gutter={20}> */} |
| | | {data.length > 0 && |
| | | data.map(item => ( |
| | | <React.Fragment> |
| | | {(() => { |
| | | switch (item.type) { |
| | | case 'select': |
| | | return ( |
| | | <Col span={4}> |
| | | <Form.Item label={item.label}> |
| | | <Select |
| | | style={{ width: '100%' }} |
| | | placeholder={item.name} |
| | | value={formData[item.key]} |
| | | allowClear |
| | | onChange={this.handleSelectChange(item.key)}> |
| | | {item.list && |
| | | item.list.map(item => ( |
| | | <Select.Option |
| | | value={item.id} |
| | | key={item.id}> |
| | | {item.name} |
| | | </Select.Option> |
| | | ))} |
| | | </Select> |
| | | </Form.Item> |
| | | </Col> |
| | | ); |
| | | case 'input': |
| | | return ( |
| | | <Col span={4}> |
| | | <Form.Item label={item.label}> |
| | | <Input |
| | | placeholder={item.name} |
| | | name={item.key} |
| | | value={formData[item.key]} |
| | | onChange={this.handleInput} |
| | | /> |
| | | </Form.Item> |
| | | </Col> |
| | | ); |
| | | case 'datePicker': |
| | | return ( |
| | | <Col span={4}> |
| | | <Form.Item label={item.label}> |
| | | <DatePicker |
| | | style={{ width: '100%' }} |
| | | placeholder={item.name} |
| | | onChange={(date, dateString) => { |
| | | this.datePickerChange(item.key, dateString); |
| | | }} |
| | | value={formData[item.key] ? moment(formData[item.key], 'YYYY-MM-DD') : undefined} |
| | | /> |
| | | </Form.Item> |
| | | </Col> |
| | | ); |
| | | case 'rangePicker': |
| | | return ( |
| | | <Col span={6}> |
| | | <Form.Item label={item.label}> |
| | | <RangePicker |
| | | ranges={{ |
| | | Today: [moment(), moment()], |
| | | 'This Month': [ |
| | | moment().startOf('month'), |
| | | moment().endOf('month'), |
| | | ], |
| | | }} |
| | | // defaultValue={[moment(monthStartDate, 'YYYY/MM/DD'), moment(monthEndDate, 'YYYY/MM/DD')]} |
| | | value={ |
| | | item.keylistName && |
| | | formData[item.keylistName] && |
| | | typeof formData[item.keylistName] == 'string' |
| | | ? formData[item.keylistName] |
| | | .split(',') |
| | | .map(item => moment(item, 'YYYY-MM-DD')) |
| | | : [] |
| | | } |
| | | onChange={(date, dateString) => { |
| | | this.rangePickerChange( |
| | | item.keylistName, |
| | | item.key, |
| | | date, |
| | | dateString |
| | | ); |
| | | }} |
| | | placeholder={JSON.parse(item.name)} |
| | | /> |
| | | </Form.Item> |
| | | </Col> |
| | | ); |
| | | case 'br': |
| | | return ( |
| | | <Col span={24} style={{ marginBottom: '10px' }} /> |
| | | ); |
| | | default: |
| | | return null; |
| | | } |
| | | })()} |
| | | </React.Fragment> |
| | | ))} |
| | | {/* </Row> */} |
| | | {/* </Col> */} |
| | | |
| | | <Col> |
| | | <Row type="flex" gutter={20} align="middle" style={{ marginBottom: 5 }}> |
| | | <Col> |
| | | <Button |
| | | type="primary" |
| | | onClick={() => { |
| | | this.onClick('search'); |
| | | }}> |
| | | 查询 |
| | | </Button> |
| | | </Col> |
| | | <Col> |
| | | <Button |
| | | onClick={() => { |
| | | this.onClick('reset'); |
| | | }}> |
| | | 重置 |
| | | </Button> |
| | | </Col> |
| | | { |
| | | children && |
| | | <Col> |
| | | {children} |
| | | </Col> |
| | | } |
| | | </Row> |
| | | </Col> |
| | | </Row> |
| | | </div > |
| | | ); |
| | | } |
| | | } |
| | | |
| | | export default Form.create({ |
| | | onValuesChange: (props, changed, values) => { }, |
| | | })(CommonSearchForm); |
New file |
| | |
| | | .common-search-form-main { |
| | | padding: 15px; |
| | | .ant-form-item { |
| | | margin-bottom: 0 !important; |
| | | display: flex; |
| | | } |
| | | .ant-form-item-control-wrapper { |
| | | flex: 1; |
| | | } |
| | | // .ant-form-item-label{ |
| | | // width: 70px !important; |
| | | // } |
| | | } |
| | |
| | | "pages/publicSnapshot/publicSnapshot", |
| | | "pages/scanEvildoing/scanEvildoing", |
| | | "pages/messageNotification/messageNotification", |
| | | "pages/myTranslate/myTranslate", |
| | | "pages/scanEvildoingInfo/scanEvildoingInfo", |
| | | "pages/complaintAdvice/complaintAdvice", |
| | | "pages/videoPreview/videoPreview", |
| | |
| | | flag: true, |
| | | hiddenApply: true, |
| | | // canApply: true, |
| | | statusWord: '' |
| | | |
| | | statusWord: '', |
| | | signStatus: '', |
| | | id: "" |
| | | }, |
| | | |
| | | onLoad: function (options) { |
| | | var that = this; |
| | | that.setData({ |
| | | id: options.id, |
| | | signStatus: options.signStatus || '', |
| | | flag: options.flag |
| | | }) |
| | | |
| | |
| | | |
| | | console.log('传过来',options.flag) |
| | | // 处理报名状态 |
| | | if(options.flag == 'true') { |
| | | //可报名 |
| | | console.log('可报名') |
| | | if (res.data.data.activityPersonNum < res.data.data.activityPersonQuota) { |
| | | if (res.data.data.activityStatus == 1) { |
| | | that.setData({ |
| | | canApply: true |
| | | }) |
| | | if (options.signStatus) { |
| | | that.setData({ |
| | | signStatus: options.signStatus |
| | | }) |
| | | }else{ |
| | | if(options.flag == 'true') { |
| | | //可报名 |
| | | console.log('可报名') |
| | | if (res.data.data.activityPersonNum < res.data.data.activityPersonQuota) { |
| | | if (res.data.data.activityStatus == 1) { |
| | | that.setData({ |
| | | canApply: true |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 2) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动正在进行' |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 3) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动已结束' |
| | | }) |
| | | } |
| | | } |
| | | if (res.data.data.activityStatus == 2) { |
| | | else{ |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动正在进行' |
| | | statusWord: '报名人数已满' |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 3) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动已结束' |
| | | }) |
| | | } |
| | | } |
| | | else{ |
| | | |
| | | }else{ |
| | | //不可报名 |
| | | console.log('不可报名') |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '报名人数已满' |
| | | statusWord: '您已报名' |
| | | }) |
| | | } |
| | | |
| | | }else{ |
| | | //不可报名 |
| | | console.log('不可报名') |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '您已报名' |
| | | }) |
| | | } |
| | | |
| | | } |
| | |
| | | }) |
| | | }, |
| | | |
| | | // 签到 |
| | | sign: function () { |
| | | var id = this.data.id; |
| | | var userinfo = wx.getStorageSync("user"); |
| | | var userId = userinfo.id; |
| | | // 只允许从相机扫码 |
| | | wx.scanCode({ |
| | | onlyFromCamera: true, |
| | | success(res) { |
| | | console.log(res) |
| | | wx.showLoading({ |
| | | title: '识别中', |
| | | }) |
| | | wx.request({ |
| | | url: app.globalData.url + '/api/activity/sign?id'+id+'&code='+res.result+'&userId='+userId, |
| | | method: 'GET', |
| | | header: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | success: function (res) { |
| | | wx.hideLoading(); |
| | | if (res.data.code == 0) { |
| | | wx.showToast({ |
| | | title: '签到成功!', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }) |
| | | } else { |
| | | wx.showToast({ |
| | | title: '报名失败,请稍后重试!', |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 返回 |
| | | goBack: function () { |
| | | wx.navigateBack({ |
| | | delta: 1 |
| | | }); |
| | | }, |
| | | |
| | | apply: function () { |
| | | // wx.navigateTo({ |
| | | // url: '../apply/apply', |
| | |
| | | <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" width="100%" height="32vh" duration="{{duration}}"> |
| | | <block wx:for="{{activity.attList}}" wx:key="{{item.attId}}"> |
| | | <swiper-item> |
| | | <image src="{{item.imgPath}}" class="slide-image" mode="aspectFit"/> |
| | | </swiper-item> |
| | | </block> |
| | | <block wx:for="{{activity.attList}}" wx:key="{{item.attId}}"> |
| | | <swiper-item> |
| | | <image src="{{item.imgPath}}" class="slide-image" mode="aspectFit" /> |
| | | </swiper-item> |
| | | </block> |
| | | </swiper> |
| | | |
| | | <view class="activityDetail-main"> |
| | | <view class="headLineTitle"> |
| | | {{activity.activityTitle}} |
| | | </view> |
| | | <view class="headLineInfo"> |
| | | {{activity.startTime}} |
| | | <text decode="{{true}}" space="{{true}}"> </text> |
| | | <view class="info-viewer">{{activity.activityPersonNum}}/{{activity.activityPersonQuota}}人</view> |
| | | </view> |
| | | <view class="headLineInfo"> |
| | | {{activity.activityAddress}} |
| | | </view> |
| | | <view class="headLineTitle"> |
| | | {{activity.activityTitle}} |
| | | </view> |
| | | <view class="headLineInfo"> |
| | | {{activity.startTime}} |
| | | <text decode="{{true}}" space="{{true}}"> </text> |
| | | <view class="info-viewer">{{activity.activityPersonNum}}/{{activity.activityPersonQuota}}人</view> |
| | | </view> |
| | | <view class="headLineInfo"> |
| | | {{activity.activityAddress}} |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <div class="index-gray tel-area"> |
| | | <view>南沙区人民检察院新媒办</view> |
| | | <image src="{{tel}}" bindtap='call'></image> |
| | | <view>南沙区人民检察院新媒办</view> |
| | | <image src="{{tel}}" bindtap='call'></image> |
| | | </div> |
| | | |
| | | <view class="activityDetail-main"> |
| | | <view class="activityDetail-content"> |
| | | {{activity.activityDesc}} |
| | | </view> |
| | | <view class="activityDetail-content"> |
| | | {{activity.activityDesc}} |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 我要报名窗口 --> |
| | | <block wx:if="{{canApply == true}}"> |
| | | <view class="activityDetail-apply" hidden="{{!hiddenApply}}"> |
| | | <div class="activityDetail-main-buttton" bindtap="apply">我要报名</div> |
| | | </view> |
| | | </block> |
| | | |
| | | <!-- 不满足条件不可报名的各种情况 --> |
| | | <block wx:if="{{statusWord}}"> |
| | | <view class="activityDetail-apply"> |
| | | <div class="activityDetail-main-buttton">{{statusWord}}</div> |
| | | </view> |
| | | </block> |
| | | <view wx:if="{{signStatus}}"> |
| | | <div class="submit" bindtap='submit'>提交报名</div> |
| | | <view wx:if="{{signStatus == 2}}"> |
| | | <view class="submit" bindtap='sign'>签到</view> |
| | | </view> |
| | | |
| | | <view wx:else> |
| | | <view class="submit bg-grey" bindtap='goBack'>返回</view> |
| | | </view> |
| | | </view> |
| | | <view wx:else> |
| | | <!-- 我要报名窗口 --> |
| | | <block wx:if="{{canApply == true}}"> |
| | | <view class="activityDetail-apply" hidden="{{!hiddenApply}}"> |
| | | <div class="activityDetail-main-buttton" bindtap="apply">我要报名</div> |
| | | </view> |
| | | </block> |
| | | |
| | | <!-- 不满足条件不可报名的各种情况 --> |
| | | <block wx:if="{{statusWord}}"> |
| | | <view class="activityDetail-apply"> |
| | | <div class="activityDetail-main-buttton">{{statusWord}}</div> |
| | | </view> |
| | | </block> |
| | | </view> |
| | | |
| | | <view hidden="{{hiddenApply}}"> |
| | | <div class="apply"> |
| | | <div class="apply-message"> |
| | | <span></span> |
| | | <span>报名信息</span> |
| | | </div> |
| | | <div class="apply"> |
| | | <div class="apply-message"> |
| | | <span></span> |
| | | <span>报名信息</span> |
| | | </div> |
| | | |
| | | <div class="apply-list"> |
| | | <div class="apply-list-left">姓名</div> |
| | | <input data-name="proposerName" bindinput="inputChange" value='{{peopleInfo.proposerName}}' placeholder='请输入姓名'></input> |
| | | </div> |
| | | <div class="apply-list"> |
| | | <div class="apply-list-left">电话号码</div> |
| | | <input data-name="proposerPhone" bindinput="inputChange" value='{{peopleInfo.proposerPhone}}' placeholder='请输入电话号码'></input> |
| | | </div> |
| | | </div> |
| | | <div class="apply-list"> |
| | | <div class="apply-list-left">姓名</div> |
| | | <input data-name="proposerName" bindinput="inputChange" value='{{peopleInfo.proposerName}}' placeholder='请输入姓名'></input> |
| | | </div> |
| | | <div class="apply-list"> |
| | | <div class="apply-list-left">电话号码</div> |
| | | <input data-name="proposerPhone" bindinput="inputChange" value='{{peopleInfo.proposerPhone}}' placeholder='请输入电话号码'></input> |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="display:flex;justify-content:center;margin:4vh 0"> |
| | | <div class="submit" bindtap='submit'>提交报名</div> |
| | | </div> |
| | | <div style="display:flex;justify-content:center;margin:4vh 0"> |
| | | <div class="submit" bindtap='submit'>提交报名</div> |
| | | </div> |
| | | </view> |
| | |
| | | |
| | | .tel-area{ |
| | | height: 6vh; |
| | | margin-top: ; |
| | | padding: 0 2vh; |
| | | font-size: 14px; |
| | | display:flex; |
| | |
| | | */ |
| | | data: { |
| | | loading: false, |
| | | peopleInfo: {} |
| | | peopleInfo: {}, |
| | | signStatus: '', |
| | | id: "", |
| | | topattList:[], |
| | | bottomattList:[] |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad: function(options) { |
| | | onLoad: function (options) { |
| | | var that = this; |
| | | that.setData({ |
| | | id: options.id, |
| | | flag: options.flag, |
| | | signStatus: options.signStatus || '', |
| | | flag: options.flag || '', |
| | | loading: true |
| | | }); |
| | | wx.showLoading({ |
| | |
| | | }) |
| | | wx.request({ |
| | | url: app.globalData.url + '/api/activity/find?id=' + options.id, |
| | | success: function(res) { |
| | | success: function (res) { |
| | | console.log(res); |
| | | that.setData({ |
| | | loading: false |
| | |
| | | if (res.data.code == 0) { |
| | | res.data.data.startTime = app.formatDate(res.data.data.startTime) |
| | | that.setData({ |
| | | activity: res.data.data |
| | | activity: res.data.data, |
| | | bottomattList:res.data.data.attList.filter((item)=>(item.associateType==1020)), |
| | | topattList:res.data.data.attList.filter((item)=>(item.associateType==1000)) |
| | | }) |
| | | console.log('传过来', options.flag) |
| | | console.log('传过来', options.signStatus) |
| | | // 处理报名状态 |
| | | if (options.flag == 'true') { |
| | | //可报名 |
| | | console.log('可报名') |
| | | if (res.data.data.activityPersonNum < res.data.data.activityPersonQuota) { |
| | | if (res.data.data.activityStatus == 1) { |
| | | that.setData({ |
| | | canApply: true |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 2) { |
| | | if (options.signStatus) { |
| | | that.setData({ |
| | | signStatus: options.signStatus |
| | | }) |
| | | } else { |
| | | if (options.flag == 'true') { |
| | | //可报名 |
| | | console.log('可报名') |
| | | if (res.data.data.activityPersonNum < res.data.data.activityPersonQuota) { |
| | | if (res.data.data.activityStatus == 1) { |
| | | that.setData({ |
| | | canApply: true |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 2) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动正在进行' |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 3) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动已结束' |
| | | }) |
| | | } |
| | | } else { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动正在进行' |
| | | statusWord: '报名人数已满' |
| | | }) |
| | | } |
| | | if (res.data.data.activityStatus == 3) { |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '活动已结束' |
| | | }) |
| | | } |
| | | |
| | | } else { |
| | | //不可报名 |
| | | console.log('不可报名') |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '报名人数已满' |
| | | statusWord: '您已报名' |
| | | }) |
| | | } |
| | | |
| | | } else { |
| | | //不可报名 |
| | | console.log('不可报名') |
| | | that.setData({ |
| | | canApply: false, |
| | | statusWord: '您已报名' |
| | | }) |
| | | } |
| | | |
| | | } |
| | |
| | | }, |
| | | |
| | | // 跳转 |
| | | linkFunction: function() { |
| | | linkFunction: function () { |
| | | wx.showToast({ |
| | | title: '抱歉,报名人数已满', |
| | | icon: 'none', |
| | |
| | | }, |
| | | |
| | | // 呼叫组织方 |
| | | makePhoneCall: function(e) { |
| | | makePhoneCall: function (e) { |
| | | var phone = e.currentTarget.dataset['phone']; |
| | | wx.makePhoneCall({ |
| | | phoneNumber: phone |
| | | }) |
| | | }, |
| | | |
| | | inputChange: function(e) { |
| | | inputChange: function (e) { |
| | | var name = e.currentTarget.dataset.name; |
| | | this.setData({ |
| | | peopleInfo: { |
| | |
| | | }) |
| | | }, |
| | | |
| | | // 签到 |
| | | sign: function () { |
| | | var id = this.data.id; |
| | | var userinfo = wx.getStorageSync("user"); |
| | | var userId = userinfo.id; |
| | | // 只允许从相机扫码 |
| | | wx.scanCode({ |
| | | onlyFromCamera: true, |
| | | success(res) { |
| | | console.log(res) |
| | | wx.showLoading({ |
| | | title: '识别中', |
| | | }) |
| | | wx.request({ |
| | | url: app.globalData.url + '/api/activity/sign?id'+id+'&code='+res.result+'&userId='+userId, |
| | | method: 'GET', |
| | | header: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | success: function (res) { |
| | | wx.hideLoading(); |
| | | if (res.data.code == 0) { |
| | | wx.showToast({ |
| | | title: '签到成功!', |
| | | icon: 'success', |
| | | duration: 2000 |
| | | }) |
| | | } else { |
| | | wx.showToast({ |
| | | title: '报名失败,请稍后重试!', |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 返回 |
| | | goBack: function () { |
| | | wx.navigateBack({ |
| | | delta: 1 |
| | | }); |
| | | }, |
| | | |
| | | // 提交报名 |
| | | submit: function() { |
| | | submit: function () { |
| | | var peopleInfo = this.data.peopleInfo; |
| | | var userinfo = wx.getStorageSync("user"); |
| | | var personId = userinfo.id; |
| | |
| | | header: { |
| | | "Content-Type": "application/json" |
| | | }, |
| | | success: function(res) { |
| | | success: function (res) { |
| | | wx.hideLoading(); |
| | | if (res.data.code == 0) { |
| | | wx.reLaunch({ |
| | |
| | | <!--pages/fzpxInfo/fzpxInfo.wxml--> |
| | | <view class="fzpxInfo-bg" wx:if="{{!loading}}"> |
| | | <view class="flex1"> |
| | | <swiper class="screen-swiper square-dot" indicator-dots="true" circular="true" autoplay="true" interval="5000" duration="500"> |
| | | <swiper-item wx:for="{{activity.attList}}" wx:key> |
| | | <image src="{{item.imgPath}}" mode="aspectFill"></image> |
| | | <!-- <video src="{{item.url}}" autoplay loop muted show-play-btn="{{false}}" controls="{{false}}" objectFit="cover" wx:if="{{item.type=='video'}}"></video> --> |
| | | </swiper-item> |
| | | </swiper> |
| | | <view class="flex1"> |
| | | <swiper class="screen-swiper square-dot" indicator-dots="true" circular="true" autoplay="true" interval="5000" duration="500"> |
| | | <swiper-item wx:for="{{topattList}}" wx:key> |
| | | <image src="{{item.imgPath}}" mode="aspectFill"></image> |
| | | <!-- <video src="{{item.url}}" autoplay loop muted show-play-btn="{{false}}" controls="{{false}}" objectFit="cover" wx:if="{{item.type=='video'}}"></video> --> |
| | | </swiper-item> |
| | | </swiper> |
| | | |
| | | <view class="fzpxInfo-main"> |
| | | <view class="fzpxInfo-main-t">{{activity.activityTitle}}</view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训时间</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.startTime}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">报名人数</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityPersonNum}}/{{activity.activityPersonQuota}}人</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训地点</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityAddress}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">组织方</view> |
| | | <view style="display: flex; line-height:48rpx;"> |
| | | <view class="fzpxInfo-main-group-around">{{activity.host || '无'}}</view> |
| | | <text class="cuIcon-dianhua lg text-blue margin-left" data-phone="{{activity.activityPhone}}" bindtap="makePhoneCall"></text> |
| | | </view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训对象</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.requirement}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group" style="display:block;padding: 10rpx 30rpx;"> |
| | | <view class="fzpxInfo-main-group-title">培训内容</view> |
| | | <view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityDesc}}</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="fzpxInfo-main"> |
| | | <view class="fzpxInfo-main-t">{{activity.activityTitle}}</view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训时间</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.startTime}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">报名人数</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityPersonNum}}/{{activity.activityPersonQuota}}人</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训地点</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityAddress}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">组织方</view> |
| | | <view style="display: flex; line-height:48rpx;"> |
| | | <view class="fzpxInfo-main-group-around">{{activity.host || '无'}}</view> |
| | | <text class="cuIcon-dianhua lg text-blue margin-left" data-phone="{{activity.activityPhone}}" bindtap="makePhoneCall"></text> |
| | | </view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">报名要求</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.requirement}}</view> |
| | | </view> |
| | | <view class="fzpxInfo-main-group" style="display:block;padding: 10rpx 30rpx;"> |
| | | <view class="fzpxInfo-main-group-title">培训内容</view> |
| | | <view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.activityDesc}}</view> |
| | | </view> |
| | | </view> |
| | | |
| | | <block wx:if="{{activity.activityStatus == 1 && flag == 'true'}}"> |
| | | <view class="sub-title">报名信息</view> |
| | | <form> |
| | | <view class="cu-form-group"> |
| | | <view class="title">姓名 |
| | | <span style="color: red;">*</span> |
| | | </view> |
| | | <input placeholder="请输入姓名" data-name="proposerName" bindinput="inputChange" value='{{peopleInfo.proposerName}}'></input> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">电话号码 |
| | | <span style="color: red;">*</span> |
| | | </view> |
| | | <input placeholder="请输入电话号码" data-name="proposerPhone" bindinput="inputChange" value='{{peopleInfo.proposerPhone}}'></input> |
| | | </view> |
| | | </form> |
| | | </block> |
| | | <view wx:if="{{activity.result}}" class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训结果</view> |
| | | <view class="fzpxInfo-main-group-around">{{activity.result}}</view> |
| | | </view> |
| | | |
| | | </view> |
| | | <view wx:if="{{activity.result}}" class="fzpxInfo-main-group"> |
| | | <view class="fzpxInfo-main-group-title">培训材料</view> |
| | | <view class="fzpxInfo-main-group-around" style="display:flex;flex-wrap: wrap"> |
| | | <view class="educt_hasupload_pic" wx:for="{{bottomattList}}" wx:key="index"> |
| | | <image src="{{item.imgPath}}" class="upload"></image> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="fzpxInfo-foot margin-top"> |
| | | <!-- <view class="fzpxInfo-foot-title">报名须知</view> |
| | | <block wx:if="{{activity.activityStatus == 1 && flag == 'true'}}"> |
| | | <view class="sub-title">报名信息</view> |
| | | <form> |
| | | <view class="cu-form-group"> |
| | | <view class="title">姓名 |
| | | <span style="color: red;">*</span> |
| | | </view> |
| | | <input placeholder="请输入姓名" data-name="proposerName" bindinput="inputChange" value='{{peopleInfo.proposerName}}'></input> |
| | | </view> |
| | | <view class="cu-form-group"> |
| | | <view class="title">电话号码 |
| | | <span style="color: red;">*</span> |
| | | </view> |
| | | <input placeholder="请输入电话号码" data-name="proposerPhone" bindinput="inputChange" value='{{peopleInfo.proposerPhone}}'></input> |
| | | </view> |
| | | </form> |
| | | </block> |
| | | |
| | | </view> |
| | | |
| | | <view class="fzpxInfo-foot margin-top"> |
| | | <view wx:if="{{signStatus}}"> |
| | | <view wx:if="{{signStatus == 2}}"> |
| | | <view class="fzpxInfo-foot-button bg-grey" bindtap='sign'>签到</view> |
| | | </view> |
| | | |
| | | <view wx:else> |
| | | <view class="fzpxInfo-foot-button bg-grey" bindtap='goBack'>返回</view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view wx:else> |
| | | <!-- <view class="fzpxInfo-foot-title">报名须知</view> |
| | | <view class="fzpxInfo-foot-txt">请确认所有参赛人员的排列顺序。相关信息会在参赛证件、参赛证明、获取证书等重要比赛文件中提现。</view> |
| | | <view class="fzpxInfo-foot-txt">由于参赛队信息填报原因产生的任何错误,在相关文件完成制作后一律不予修改;</view> --> |
| | | <view wx:if="{{flag == 'false'}}"> |
| | | <view class="fzpxInfo-foot-button bg-grey">您已报名</view> |
| | | </view> |
| | | <view wx:if="{{flag == 'true'}}"> |
| | | <view wx:if="{{flag == 'false'}}"> |
| | | <view class="fzpxInfo-foot-button bg-grey">您已报名</view> |
| | | </view> |
| | | <view wx:if="{{flag == 'true'}}"> |
| | | |
| | | <view class="fzpxInfo-foot-button bg-blue" wx:if="{{activity.activityStatus == 1}}" bindtap='submit'>我要报名</view> |
| | | <view class="fzpxInfo-foot-button bg-blue" wx:elif="{{activity.activityStatus == 2}}">活动正在进行</view> |
| | | <view class="fzpxInfo-foot-button bg-grey" wx:elif="{{activity.activityStatus == 3}}">活动已结束</view> |
| | | <view class="fzpxInfo-foot-button bg-grey" wx:else>报名人数已满</view> |
| | | <view class="fzpxInfo-foot-button bg-blue" wx:if="{{activity.activityStatus == 1}}" bindtap='submit'>我要报名</view> |
| | | <view class="fzpxInfo-foot-button bg-blue" wx:elif="{{activity.activityStatus == 2}}">活动正在进行</view> |
| | | <view class="fzpxInfo-foot-button bg-grey" wx:elif="{{activity.activityStatus == 3}}">活动已结束</view> |
| | | <view class="fzpxInfo-foot-button bg-grey" wx:else>报名人数已满</view> |
| | | |
| | | </view> |
| | | <view> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </view> |
| | | |
| | | <view> |
| | | |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | font-weight: 600; |
| | | } |
| | | |
| | | .upload { |
| | | width: 48px; |
| | | height: 48px; |
| | | } |
| | | |
| | | .educt_hasupload_pic { |
| | | margin: 4px; |
| | | } |
| | | |
| | | .fzpxInfo-foot-txt { |
| | | margin: 6px 6px 24px; |
| | | line-height: 22PX; |
| | |
| | | }) |
| | | }, |
| | | |
| | | myTranslate: function() { |
| | | wx.navigateTo({ |
| | | url: '../myTranslate/myTranslate', |
| | | }) |
| | | }, |
| | | |
| | | onLoad: function() { |
| | | this.notification(); |
| | | }, |
| | |
| | | <image class="me-business-right-icon" src="{{user}}" /> |
| | | </div> |
| | | |
| | | <div class="me-business-nav" bindtap="myTranslate"> |
| | | <image class="me-business-icon" src="{{xxtx}}" /> |
| | | <div class="me-business-title">我的活动</div> |
| | | <block wx:if="{{notRead > 0}}"> |
| | | <div class="me-business-info">{{notRead}}</div> |
| | | </block> |
| | | |
| | | <image class="me-business-right-icon" src="{{user}}" /> |
| | | </div> |
| | | |
| | | <div class="me-business-nav" bindtap="msg"> |
| | | <image class="me-business-icon" src="{{xxtx}}" /> |
| | | <div class="me-business-title">消息提醒</div> |
New file |
| | |
| | | // pages/businessSchedule/businessSchedule.js |
| | | const app = getApp() |
| | | Page({ |
| | | |
| | | /** |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | loading: app.globalData.imgUrl + '/image/loading.svg', |
| | | navbar: ['全部', '未开始', '进行中', '已完成'], |
| | | currentTab: 0, |
| | | size: 10, |
| | | size1: 10, |
| | | size2: 10, |
| | | size3: 10, |
| | | content: '------加载中------', |
| | | hasMoreData: true, |
| | | createTime: '', |
| | | dataSet: [] |
| | | }, |
| | | |
| | | navbarTap: function (e) { |
| | | this.setData({ |
| | | currentTab: e.currentTarget.dataset.idx |
| | | }) |
| | | this.showList(this.data.currentTab) |
| | | |
| | | }, |
| | | |
| | | showList: function (tab) { |
| | | var userinfo = wx.getStorageSync("user"); |
| | | var that = this; |
| | | var id = userinfo.id |
| | | var str; |
| | | var sizeQty; |
| | | switch (tab) { |
| | | case 0: |
| | | str = "&status="; |
| | | sizeQty = 'size'; |
| | | break; |
| | | case 1: |
| | | str = "&status=1"; |
| | | sizeQty = 'size1'; |
| | | break; |
| | | case 2: |
| | | str = "&status=2"; |
| | | sizeQty = 'size2'; |
| | | break; |
| | | case 3: |
| | | str = "&status=3"; |
| | | sizeQty = 'size3'; |
| | | break; |
| | | } |
| | | wx.request({ |
| | | url: app.globalData.url + '/api/activity/myActivities?page=1&size=' + that.data[sizeQty] + '&userId=' + id + str, |
| | | success: function (res) { |
| | | if (res.data.code == 0) { |
| | | (res.data.data.content).forEach(e => { |
| | | (e.createTime) = app.formatDate(e.createTime) |
| | | switch (e.activityType) { |
| | | case 'act_1': |
| | | e.activityType = '南检活动'; |
| | | break; |
| | | case 'act_2': |
| | | e.activityType = '法治培训'; |
| | | break; |
| | | case 'act_3': |
| | | e.activityType = '基地参观'; |
| | | break; |
| | | } |
| | | |
| | | |
| | | }); |
| | | if (res.data.data.totalElements < that.data[sizeQty]) { |
| | | that.setData({ |
| | | dataSet: res.data.data.content, |
| | | hasMoreData: false, |
| | | content: '------我是有底线的------' |
| | | }) |
| | | } else { |
| | | that.setData({ |
| | | dataSet: res.data.data.content, |
| | | hasMoreData: true, |
| | | content: '------加载更多------', |
| | | [sizeQty]: that.data[sizeQty] + 10 |
| | | }) |
| | | } |
| | | } else { |
| | | wx.showModal({ |
| | | title: '提示', |
| | | content: "请求失败!" |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | businessSchedule: function (event) { |
| | | var id = event.currentTarget.id; |
| | | var activityType = this.data.dataSet[id].activityType; |
| | | var signStatus = this.data.dataSet[id].signStatus; |
| | | var id = this.data.dataSet[id].id; |
| | | |
| | | console.log(activityType) |
| | | console.log(signStatus); |
| | | if (activityType == "法治培训") { |
| | | wx.navigateTo({ |
| | | url: '../fzpxInfo/fzpxInfo?id=' + id + '&signStatus=' + signStatus, |
| | | }) |
| | | } else if (activityType == "南检活动") { |
| | | wx.navigateTo({ |
| | | url: '../activityDetail/activityDetail?id=' + id + '&signStatus=' + signStatus, |
| | | }) |
| | | } else if (activityType == "基地参观") { |
| | | wx.navigateTo({ |
| | | url: '../complaintAdvice/complaintAdvice?id=' + businessId, |
| | | }) |
| | | } else { |
| | | wx.showModal({ |
| | | title: '提示', |
| | | content: "文件错误!" |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | onLoad: function () { |
| | | this.showList(0) |
| | | }, |
| | | |
| | | /** |
| | | * 页面上拉触底事件的处理函数 |
| | | */ |
| | | onReachBottom: function () { |
| | | if (this.data.hasMoreData) { |
| | | this.showList(this.data.currentTab) |
| | | this.setData({ |
| | | content: '------加载更多------' |
| | | }) |
| | | } else { |
| | | this.setData({ |
| | | content: '------我是有底线的------' |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | }) |
New file |
| | |
| | | { |
| | | "navigationBarTitleText": "我的活动", |
| | | "backgroundTextStyle": "light", |
| | | "navigationBarBackgroundColor": "#fff", |
| | | "navigationBarTextStyle": "black" |
| | | } |
New file |
| | |
| | | <!--pages/myTranslate/myTranslate.wxml--> |
| | | <!--导航条--> |
| | | <view class="navbar"> |
| | | <text wx:for="{{navbar}}" data-idx="{{index}}" class="item {{currentTab==index ? 'active' : ''}}" wx:key="unique" bindtap="navbarTap">{{item}}</text> |
| | | </view> |
| | | |
| | | <!--列表数据--> |
| | | <view style='flex-direction:column;height:94vh;background-color:rgba(80, 119, 170, 0.06)'> |
| | | <div class="businessSchedule" bindtap='businessSchedule' id="{{key}}" wx:for="{{dataSet}}" wx:for-index='key' wx:key="*this"> |
| | | <div class="businessSchedule-top"> |
| | | <div class="businessSchedule-top-img"> |
| | | <image src="{{item.iconSrc}}" class="businessSchedule-top-img"></image> |
| | | </div> |
| | | <div class="businessSchedule-top-title">{{item.activityType}}</div> |
| | | <div class="businessSchedule-top-status backgroundorange-title" wx:if="{{item.signStatus==1}}">未审核</div> |
| | | <div class="businessSchedule-top-status backgroundorange-title" wx:if="{{item.signStatus==2}}">未签到</div> |
| | | <div class="businessSchedule-top-status backgroundorange-title" wx:if="{{item.signStatus==3}}">已签到</div> |
| | | <div class="businessSchedule-top-status backgroundorange-title" wx:if="{{item.signStatus==4}}">不通过</div> |
| | | <div class="businessSchedule-top-status backgroundgreen-title" wx:if="{{item.signStatus==99}}">取消</div> |
| | | </div> |
| | | <div class="businessSchedule-center">{{item.activityDese}}</div> |
| | | <div class="businessSchedule-bottom">于 {{item.createTime}} 提交申请</div> |
| | | </div> |
| | | <div class="businessSchedule-load">------{{content}}------</div> |
| | | </view> |
| | | |
New file |
| | |
| | | /* pages/myTranslate/myTranslate.wxss */ |
| | | view { |
| | | display: flex; |
| | | } |
| | | |
| | | .navbar { |
| | | flex: none; |
| | | display: flex; |
| | | background: #fff; |
| | | font-size: 18px; |
| | | color: #999; |
| | | height: 6vh; |
| | | } |
| | | |
| | | .navbar .item { |
| | | position: relative; |
| | | flex: auto; |
| | | text-align: center; |
| | | line-height: 80rpx; |
| | | } |
| | | |
| | | .navbar .item.active { |
| | | color: #2195ff; |
| | | } |
| | | |
| | | .navbar .item.active:after { |
| | | content: ""; |
| | | display: block; |
| | | position: absolute; |
| | | bottom: 0; |
| | | left: 0; |
| | | right: 0; |
| | | height: 4rpx; |
| | | background: #2195ff; |
| | | } |
| | | |
| | | .businessSchedule { |
| | | font-size: 16px; |
| | | padding: 2vh; |
| | | margin: 2vh; |
| | | background-color: #fff; |
| | | box-shadow: 0px 6px 6px 0 rgba(80, 119, 170, 0.06); |
| | | } |
| | | |
| | | .businessSchedule-top { |
| | | display: flex; |
| | | color: #333; |
| | | align-items: center; |
| | | padding-bottom: 1vh; |
| | | border-bottom: 1px solid #f2f2f2; |
| | | } |
| | | |
| | | .businessSchedule-top-img { |
| | | width: 3vh; |
| | | height: 3vh; |
| | | } |
| | | |
| | | .businessSchedule-top-title { |
| | | padding-left: 1vh; |
| | | } |
| | | |
| | | .businessSchedule-top-status { |
| | | margin-left: auto; |
| | | display: flex; |
| | | justify-content: center; |
| | | box-shadow: 0px 4px 8px 0px rgba(136, 136, 136, 0.11); |
| | | padding: 1vh; |
| | | border-radius: 18px; |
| | | color: #fff; |
| | | } |
| | | |
| | | .businessSchedule-center { |
| | | font-size: 14px; |
| | | display: flex; |
| | | padding: 1vh 0; |
| | | color: #333; |
| | | } |
| | | |
| | | .businessSchedule-bottom { |
| | | display: flex; |
| | | font-size: 14px; |
| | | color: #999; |
| | | } |
| | | |
| | | .loading { |
| | | padding: 10rpx; |
| | | text-align: center; |
| | | } |
| | | |
| | | .loading:before { |
| | | display: inline-block; |
| | | margin-right: 5rpx; |
| | | vertical-align: middle; |
| | | content: ''; |
| | | width: 40rpx; |
| | | height: 40rpx; |
| | | background-size: contain; |
| | | animation: rotate 1s linear infinite; |
| | | } |
| | | |
| | | .loading.complete:before { |
| | | display: none; |
| | | } |
| | | |
| | | .businessSchedule-load { |
| | | display: flex; |
| | | justify-content: center; |
| | | color: #999; |
| | | font-size: 14px; |
| | | margin-bottom: 4vh; |
| | | } |