forked from nsjcy/frontEnd/nsjcy

LAPTOP-RI7D261L\Mr Ke
2020-02-26 a92f3c4d10bebbdc55270e72ccd97cd1ba7d4e28
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
2353 ■■■■ changed files
SunshineIns/src/asset/image/sign.png patch | view | raw | blame | history
SunshineIns/src/data/menu.js 9 ●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/_fetch.js 2 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/activeManage.js 2 ●●● patch | view | raw | blame | history
SunshineIns/src/fetch/addResult.js 6 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/entryQuery.js 2 ●●● patch | view | raw | blame | history
SunshineIns/src/fetch/index.js 14 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/signinfo.js 5 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/socialCompany.js 9 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/socialCompanyDetail.js 9 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/socialCompanySave.js 8 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/socialCompanydelete.js 9 ●●●●● patch | view | raw | blame | history
SunshineIns/src/fetch/socialQuery.js 2 ●●● patch | view | raw | blame | history
SunshineIns/src/index.jsx 3 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/ActiveManage.jsx 247 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/ActiveManageEdit.jsx 127 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/ApplyFor.jsx 107 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/ApplyForEdit.jsx 6 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/CareList.jsx 144 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/CareListEdit.jsx 6 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/Examine.jsx 113 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/ExamineEdit.jsx 6 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/PoliceSecurity.jsx 96 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/SignIn.jsx 82 ●●●● patch | view | raw | blame | history
SunshineIns/src/page/UnderAgeList.jsx 224 ●●●●● patch | view | raw | blame | history
SunshineIns/src/page/policeSecurityEdit.jsx 6 ●●●● patch | view | raw | blame | history
SunshineIns/src/view/CommonSearchForm/index.jsx 253 ●●●●● patch | view | raw | blame | history
SunshineIns/src/view/CommonSearchForm/style.scss 13 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/app.json 1 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/activityDetail/activityDetail.js 112 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/activityDetail/activityDetail.wxml 113 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/activityDetail/activityDetail.wxss 1 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.js 132 ●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.wxml 170 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.wxss 9 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/me/me.js 6 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/me/me.wxml 10 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/myTranslate/myTranslate.js 146 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/myTranslate/myTranslate.json 6 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/myTranslate/myTranslate.wxml 26 ●●●●● patch | view | raw | blame | history
SunshineLnsMinApp/pages/myTranslate/myTranslate.wxss 111 ●●●●● patch | view | raw | blame | history
SunshineIns/src/asset/image/sign.png
SunshineIns/src/data/menu.js
@@ -85,7 +85,7 @@
  path: '/sweeping'
}, {
  id: 'activeManage',
  name: '活动管理',
  name: '法制活动',
  icon: active,
  iconCheck: activeCheck,
  path: '/activeManage'
@@ -98,6 +98,13 @@
  path: '/careList'
},
{
  id: 'underAgeList',
  name: '涉未成年负责部门组织',
  icon: active,
  iconCheck: activeCheck,
  path: '/underAgeList'
},
{
  id: 'questionnaire',
  name: '问卷管理部分',
  icon: msgManage,
SunshineIns/src/fetch/_fetch.js
@@ -2,6 +2,8 @@
// 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/';
SunshineIns/src/fetch/activeManage.js
@@ -1,6 +1,6 @@
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
    )
SunshineIns/src/fetch/addResult.js
New file
@@ -0,0 +1,6 @@
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)
    );
SunshineIns/src/fetch/entryQuery.js
@@ -1,6 +1,6 @@
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
    )
SunshineIns/src/fetch/index.js
@@ -84,6 +84,12 @@
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,
@@ -171,5 +177,11 @@
  questionFindById,
  saveQuestionTemp,
  questionQuery,
  questionAudit
  questionAudit,
  signinfo,
  addResult,
  socialCompany,
  socialCompanySave,
  socialCompanyDetail,
  socialCompanydelete
};
SunshineIns/src/fetch/signinfo.js
New file
@@ -0,0 +1,5 @@
import fetch from './_fetch';
import { message } from 'antd';
export default (id) => fetch(`/api/activity/signInfo?id=${id}`)
.catch(error => message.error('信息加载失败,请联系管理员', 2));
SunshineIns/src/fetch/socialCompany.js
New file
@@ -0,0 +1,9 @@
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)
    );
SunshineIns/src/fetch/socialCompanyDetail.js
New file
@@ -0,0 +1,9 @@
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)
    );
SunshineIns/src/fetch/socialCompanySave.js
New file
@@ -0,0 +1,8 @@
import fetch from './_fetch';
export default (savedate) => {
    return fetch(`api/socialCompany/save`,
        savedate
    );
}
SunshineIns/src/fetch/socialCompanydelete.js
New file
@@ -0,0 +1,9 @@
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)
    );
SunshineIns/src/fetch/socialQuery.js
@@ -1,6 +1,6 @@
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
    )
SunshineIns/src/index.jsx
@@ -14,6 +14,8 @@
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';
@@ -73,6 +75,7 @@
          <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} />
SunshineIns/src/page/ActiveManage.jsx
@@ -1,20 +1,16 @@
/**
 * 徐祥健<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:
@@ -40,12 +36,55 @@
            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: '',
        };
    }
@@ -53,17 +92,83 @@
        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
                });
            });
    }
@@ -71,8 +176,18 @@
        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) => {
@@ -162,26 +277,118 @@
                            <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>
        );
    }
SunshineIns/src/page/ActiveManageEdit.jsx
@@ -5,13 +5,15 @@
 */
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';
@@ -53,6 +55,8 @@
            disabled: true,
            status: '',
            loading: false,
            code: '',
            editorState: BraftEditor.createEditorState(null)
        };
    }
@@ -73,6 +77,7 @@
                if (endTime == null) {
                    endTime = Date.now();
                }
                console.log
                this.setState({
                    savedate: {
                        ...res.activity,
@@ -82,6 +87,8 @@
                        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,
@@ -111,8 +118,8 @@
            return;
        }
        if (savedate.activityPhone) {
            if (!validator.phone(savedate.activityPhone)) {
                return message.warning("联系电话格式不正确");
            if (!savedate.activityPhone) {
                return message.warning("联系电话不能为空");
            }
        }
        Fetch.saveActive(savedate)
@@ -225,9 +232,70 @@
        )
    }
    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,
@@ -313,6 +381,10 @@
            <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">
@@ -324,15 +396,8 @@
                                        <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>
@@ -376,6 +441,12 @@
                                <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">
@@ -395,6 +466,40 @@
                        </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>
SunshineIns/src/page/ApplyFor.jsx
@@ -2,10 +2,11 @@
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) {
@@ -17,15 +18,27 @@
            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
@@ -38,10 +51,20 @@
        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++) {
@@ -49,7 +72,22 @@
                }
                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
                });
            });
    }
@@ -143,42 +181,37 @@
                </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>
        );
    }
SunshineIns/src/page/ApplyForEdit.jsx
@@ -1,7 +1,7 @@
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';
@@ -268,6 +268,10 @@
            <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">
SunshineIns/src/page/CareList.jsx
@@ -2,6 +2,7 @@
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';
@@ -19,12 +20,38 @@
            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,
            },
@@ -34,28 +61,44 @@
    }
    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
            }
        }))
@@ -65,8 +108,8 @@
    }
    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;
@@ -79,7 +122,7 @@
    Reset = () => {
        this.setState({
            resetKey: Date.now(),
            formdata: {}
            formData: {}
        }, this.getData);
    }
@@ -115,7 +158,7 @@
            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: '创建时间',
@@ -123,6 +166,16 @@
            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) => (
@@ -139,16 +192,16 @@
                        <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} />
@@ -159,31 +212,36 @@
                    <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>
        );
    }
SunshineIns/src/page/CareListEdit.jsx
@@ -1,7 +1,7 @@
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';
@@ -360,6 +360,10 @@
            <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">
SunshineIns/src/page/Examine.jsx
@@ -2,6 +2,7 @@
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';
@@ -22,10 +23,10 @@
        super(props);
        this.state = {
            data: [],
            formdata: {
            formData: {
                __key: Date.now(),
                page: 1,
                size: 10,
                type:2,
            },
            resetKey: Date.now(),
            loading: false
@@ -38,48 +39,57 @@
        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) => {
@@ -131,35 +141,30 @@
                </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>
        );
    }
SunshineIns/src/page/ExamineEdit.jsx
@@ -1,7 +1,7 @@
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';
@@ -261,6 +261,10 @@
            <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">
SunshineIns/src/page/PoliceSecurity.jsx
@@ -2,6 +2,7 @@
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';
@@ -22,10 +23,10 @@
        super(props);
        this.state = {
            data: [],
            formdata: {
            formData: {
                __key: Date.now(),
                page: 1,
                size: 10,
                type:3,
            },
            resetKey: Date.now(),
            loading: false
@@ -37,10 +38,20 @@
        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++) {
@@ -48,14 +59,29 @@
                }
                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
            }
        }))
@@ -65,8 +91,8 @@
    }
    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;
@@ -79,7 +105,7 @@
    Reset = () => {
        this.setState({
            resetKey: Date.now(),
            formdata: {}
            formData: {}
        }, this.getData);
    }
@@ -132,35 +158,29 @@
                </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>
        );
    }
SunshineIns/src/page/SignIn.jsx
@@ -1,31 +1,95 @@
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>
        );
    }
SunshineIns/src/page/UnderAgeList.jsx
New file
@@ -0,0 +1,224 @@
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>
    );
  }
}
SunshineIns/src/page/policeSecurityEdit.jsx
@@ -1,7 +1,7 @@
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';
@@ -261,6 +261,10 @@
            <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">
SunshineIns/src/view/CommonSearchForm/index.jsx
New file
@@ -0,0 +1,253 @@
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);
SunshineIns/src/view/CommonSearchForm/style.scss
New file
@@ -0,0 +1,13 @@
.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;
  // }
}
SunshineLnsMinApp/app.json
@@ -58,6 +58,7 @@
    "pages/publicSnapshot/publicSnapshot",
    "pages/scanEvildoing/scanEvildoing",
    "pages/messageNotification/messageNotification",
    "pages/myTranslate/myTranslate",
    "pages/scanEvildoingInfo/scanEvildoingInfo",
    "pages/complaintAdvice/complaintAdvice",
    "pages/videoPreview/videoPreview",
SunshineLnsMinApp/pages/activityDetail/activityDetail.js
@@ -14,14 +14,16 @@
    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
    })
    
@@ -37,42 +39,48 @@
          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: '您已报名'
            })
          }
        }
@@ -80,6 +88,52 @@
    })
  },
  // 签到
  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',
SunshineLnsMinApp/pages/activityDetail/activityDetail.wxml
@@ -1,69 +1,82 @@
<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}}">&nbsp;&nbsp;</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}}">&nbsp;&nbsp;</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>
SunshineLnsMinApp/pages/activityDetail/activityDetail.wxss
@@ -59,7 +59,6 @@
.tel-area{
  height: 6vh;
  margin-top: ;
  padding: 0 2vh;
  font-size: 14px;
  display:flex;
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.js
@@ -10,17 +10,22 @@
   */
  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({
@@ -28,7 +33,7 @@
    })
    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
@@ -37,45 +42,54 @@
        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: '您已报名'
            })
          }
        }
@@ -84,7 +98,7 @@
  },
  // 跳转
  linkFunction: function() {
  linkFunction: function () {
    wx.showToast({
      title: '抱歉,报名人数已满',
      icon: 'none',
@@ -93,14 +107,14 @@
  },
  // 呼叫组织方
  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: {
@@ -110,8 +124,54 @@
    })
  },
  // 签到
  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;
@@ -149,7 +209,7 @@
      header: {
        "Content-Type": "application/json"
      },
      success: function(res) {
      success: function (res) {
        wx.hideLoading();
        if (res.data.code == 0) {
          wx.reLaunch({
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.wxml
@@ -1,83 +1,111 @@
<!--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>
SunshineLnsMinApp/pages/fzpxInfo/fzpxInfo.wxss
@@ -76,6 +76,15 @@
  font-weight: 600;
}
.upload {
  width: 48px;
  height: 48px;
}
.educt_hasupload_pic {
  margin: 4px;
}
.fzpxInfo-foot-txt {
  margin: 6px 6px 24px;
  line-height: 22PX;
SunshineLnsMinApp/pages/me/me.js
@@ -35,6 +35,12 @@
    })
  },
  myTranslate: function() {
    wx.navigateTo({
      url: '../myTranslate/myTranslate',
    })
  },
  onLoad: function() {
    this.notification();
  },
SunshineLnsMinApp/pages/me/me.wxml
@@ -22,6 +22,16 @@
      <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>
SunshineLnsMinApp/pages/myTranslate/myTranslate.js
New file
@@ -0,0 +1,146 @@
// 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: '------我是有底线的------'
      })
    }
  },
})
SunshineLnsMinApp/pages/myTranslate/myTranslate.json
New file
@@ -0,0 +1,6 @@
{
  "navigationBarTitleText": "我的活动",
  "backgroundTextStyle": "light",
  "navigationBarBackgroundColor": "#fff",
  "navigationBarTextStyle": "black"
}
SunshineLnsMinApp/pages/myTranslate/myTranslate.wxml
New file
@@ -0,0 +1,26 @@
<!--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>
SunshineLnsMinApp/pages/myTranslate/myTranslate.wxss
New file
@@ -0,0 +1,111 @@
/* 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;
}