zengh
2022-02-11 615e16a778ece15ea737f867bf5ad62caee25f87
1、投票功能完善
8 files modified
3 files added
1220 ■■■■■ changed files
pages.json 100 ●●●●● patch | view | raw | blame | history
pages/alarm_list/integral/integral.vue 5 ●●●● patch | view | raw | blame | history
pages/business/business.vue 17 ●●●● patch | view | raw | blame | history
pages/issue/issue.vue 29 ●●●● patch | view | raw | blame | history
pages/loging/loging.vue 8 ●●●● patch | view | raw | blame | history
pages/myself/myself.vue 2 ●●● patch | view | raw | blame | history
pages/registerUser/registerUser.vue 2 ●●● patch | view | raw | blame | history
pages/reported/reported.vue 42 ●●●●● patch | view | raw | blame | history
pages/voting/vote.vue 586 ●●●●● patch | view | raw | blame | history
pages/voting/voteDetail.vue 407 ●●●●● patch | view | raw | blame | history
pages/voting/voteManage.vue 22 ●●●●● patch | view | raw | blame | history
pages.json
@@ -257,7 +257,7 @@
                            "bottom": "0",
                            "background": "transparent",
                            "zindex": 1
                        }
                    }, {
                        "id": "input-box",
@@ -450,48 +450,64 @@
            "style": {
                "navigationBarTitleText": "500"
            }
        }, {
            "path": "pages/alarm_list/integral/integral",
            "style": {
                "navigationBarTitleText": "查积分",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/alarm_list/organ/organ",
            "style": {
                "navigationBarTitleText": "组织申请",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/alarm_list/industry/industry",
            "style": {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/alarm_list/industry/industry_detail",
            "style": {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/voting/vote",
            "style": {
                "navigationBarTitleText": "投票发起",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/voting/voteManage",
            "style": {
                "navigationBarTitleText": "我的投票",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }, {
            "path": "pages/voting/voteDetail",
            "style": {
                "navigationBarTitleText": "投票详情",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/integral/integral",
            "style" :
            {
                "navigationBarTitleText": "查积分",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/organ/organ",
            "style" :
            {
               "navigationBarTitleText": "组织申请",
               "navigationBarBackgroundColor": "#103289",
               "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/industry/industry",
            "style" :
            {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
        ,{
            "path" : "pages/alarm_list/industry/industry_detail",
            "style" :
            {
                "navigationBarTitleText": "行业政策",
                "navigationBarBackgroundColor": "#103289",
                "navigationBarTextStyle": "white"
            }
        }
    ],
    ],
    "globalStyle": { //将组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。可以不用引用、注册,直接在页面中使用。
        "autoscan": true
    },
pages/alarm_list/integral/integral.vue
@@ -21,7 +21,7 @@
        <view class="bomList">
            <view class="">
                <u-dropdown border-bottom="true">
                    <u-dropdown-item v-model="value1" title="收支类型" :options="options1"></u-dropdown-item>
                    <u-dropdown-item v-model="value1" @change="change" title="收支类型" :options="options1"></u-dropdown-item>
                </u-dropdown>
            </view>
@@ -95,6 +95,9 @@
            goDetail() {
                
            },
            change(e){
                alert(e)
            },
            onReady() {
                let that = this;
                uni.getSystemInfo({
pages/business/business.vue
@@ -34,14 +34,23 @@
                                <view class="nav-item-name">通讯录</view>
                            </navigator>
                        </u-grid-item>
                    </u-grid>
                </view>
            </view>
            <!-- 我的订阅 end -->
            <view class="card wrap">
                <view class="title">管理</view>
                <view class="list">
                    <u-grid :col="4" :border="false">
                        <u-grid-item bg-color="transparent">
                            <navigator url="" hover-class="none" class="nav-item">
                            <navigator url="/pages/voting/voteManage" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task5.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">我的投票</view>
                            </navigator>
                        </u-grid-item>
                        <u-grid-item bg-color="transparent">
                            <navigator url="" hover-class="none" class="nav-item">
                            <navigator url="/pages/voting/vote" hover-class="none" class="nav-item">
                                <image src="../../static/workbench/task6.png" mode="widthFix" class="nav-item-img"></image>
                                <view class="nav-item-name">投票发起</view>
                            </navigator>
@@ -49,7 +58,7 @@
                    </u-grid>
                </view>
            </view>
            <!-- 我的订阅 end -->
        </view>
        <!-- 底部导航条 -->
        <u-tabbar :list="tabbar" :mid-button="true"></u-tabbar>
@@ -182,7 +191,7 @@
                width: 5rpx;
                height: 36rpx;
                margin-right: 10rpx;
                background: #3ac4d1;
                background: #103289;
            }
        }
    }
pages/issue/issue.vue
@@ -238,16 +238,29 @@
        box-sizing: border-box;
    }
    .but {
        width: 30%;
        margin: 0 auto;
    // .but {
    //     width: 30%;
    //     margin: 0 auto;
        .custom-style {
            background-image: linear-gradient(to right, #08EFF6, #0693FD);
            border-radius: 20px;
            margin-top: 2rem;
        }
    //     .custom-style {
    //         background-image: linear-gradient(to right, #08EFF6, #0693FD);
    //         border-radius: 20px;
    //         margin-top: 2rem;
    //     }
    // }
    .custom-style{
        margin: 30rpx 70rpx 50rpx;
        border: none;
        width: 572rpx;
        height: 86rpx;
        line-height: 86rpx;
        box-sizing: border-box;
        border-radius: 15rpx;
        background-color: #103289;
        color: #ffffff;
    }
    .shipMp4img {
        position: absolute;
pages/loging/loging.vue
@@ -176,7 +176,7 @@
        span {
            font-weight: 600;
            font-size: 6vw;
            color: #14b9c8;
            color: #103289;
        }
    }
    .container {
@@ -240,7 +240,7 @@
                    line-height: 30rpx;
    
                    text {
                        color: #14b9c8;
                        color: #103289;
                    }
                }
    
@@ -282,7 +282,7 @@
            line-height: 86rpx;
            box-sizing: border-box;
            border-radius: 15rpx;
            background-color: #14b9c8;
            background-color: #103289;
            color: #ffffff;
    
            &::after {
@@ -327,7 +327,7 @@
            font-size: 22rpx;
            font-family: Adobe Heiti Std;
            font-weight: normal;
            color: #14b9c8;
            color: #103289;
            line-height: 34rpx;
        }
    
pages/myself/myself.vue
@@ -340,7 +340,7 @@
        .m-top {
            width: 100%;
            height: 12rem;
            border-radius: 0px 0px 12px 12px;
            border-radius: 0rpx 0rpx 60rpx 60rpx;
            background-image: linear-gradient(to bottom, #103289, #174cd1);
            color: #fff;
            flex-direction: column;
pages/registerUser/registerUser.vue
@@ -460,7 +460,7 @@
        line-height: 86rpx;
        box-sizing: border-box;
        border-radius: 15rpx;
        background-color: #14b9c8;
        background-color: #103289;
        color: #ffffff;
        &::after {
pages/reported/reported.vue
@@ -35,9 +35,10 @@
            <input v-model="place" placeholder="请输入地址" />
        </view>
        <seeImgs :imgs="[]" :videos="videos" @del="delVideo" :type="'videos'"></seeImgs>
        <view class="form-btn">
        <!-- <view class="form-btn">
            <view class="butb" @click="upData">提交</view>
        </view>
        </view> -->
        <u-button class="butb" @click="upData">提交</u-button>
    </view>
</template>
@@ -162,7 +163,7 @@
                        for (var i = 0; i < tempFilePath.length; i++) {
                            uni.uploadFile({
                                // url: 'https://web.byisf.com/api/blade-jfpts/depl/put-depl', //仅为示例,非真实的接口地址
                                url: that.$store.state.piAPI+'/depl/put-depl',
                                url: that.$store.state.piAPI + '/depl/put-depl',
                                filePath: tempFilePath[i],
                                name: 'file',
                                formData: {
@@ -204,7 +205,7 @@
                        })
                        uni.uploadFile({
                            // url: 'https://web.byisf.com/api/blade-jfpts/depl/put-depl', 
                            url: that.$store.state.piAPI+'/depl/put-depl',
                            url: that.$store.state.piAPI + '/depl/put-depl',
                            filePath: tempFilePath,
                            name: 'file',
                            formData: {
@@ -333,7 +334,7 @@
            height: 15rem;
            display: flex;
            flex-direction: column;
            border-bottom: 1px solid rgba($color: #f3f3f3, $alpha: 0.7);
            // border-bottom: 1px solid rgba($color: #f3f3f3, $alpha: 0.7);
            .title {
                height: 100rpx;
@@ -344,7 +345,7 @@
            textarea {
                // background-color: #00BFFF;
                width: 100%;
                border: 1px solid #808080;
                // border: 1px solid #808080;
                line-height: 1.5;
                font-size: 14px;
                flex: 1;
@@ -389,26 +390,17 @@
            }
        }
        .form-btn {
            margin-top: 2rem;
            display: flex;
            justify-content: center;
            .butb {
                margin-bottom: 4.5rem;
                width: 100%;
                height: 3rem;
                // border: 1px solid rgb(46, 118, 228);
                border-radius: 8px;
                display: flex;
                align-items: center;
                justify-content: center;
                color: #fff;
                font-weight: 600;
                font-size: 1.4rem;
                letter-spacing: 10px;
                background-image: linear-gradient(to bottom, #3CA7F4, #169BD5);
            }
        .butb {
            margin: 30rpx 50rpx 50rpx;
            border: none;
            width: 572rpx;
            height: 86rpx;
            line-height: 86rpx;
            box-sizing: border-box;
            border-radius: 15rpx;
            background-color: #103289;
            color: #ffffff;
        }
    }
</style>
pages/voting/vote.vue
New file
@@ -0,0 +1,586 @@
<template>
    <view>
        <view class="content_1">
            <view class="titleOption">基本信息</view>
            <u-form label-position="top">
                <u-form-item left-icon="pushpin-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="活动标题" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <u-input v-model="obj.activityTitle" maxlength="5000" placeholder="请输入活动标题" />
                </u-form-item>
                <u-form-item :border-bottom="false" left-icon="edit-pen-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="投票介绍" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <u-input v-model="obj.voteIntroduce" maxlength="5000" placeholder="请输入投票介绍" />
                </u-form-item>
            </u-form>
        </view>
        <view class="content_1 voteOptionContent">
            <view class="titleOption">选项管理</view>
            <u-form label-position="top">
                <u-form-item v-for="(item, index) in obj.voteItemlist" :key="index">
                    <view style="display: flex;width: 100%;">
                        <u-icon name="minus-circle" color="#103289" size="32" @click="deleteItem(index)"></u-icon>
                        <u-input class="u-input" v-model="item.content" maxlength="5000" placeholder="请输入投票选项" />
                    </view>
                </u-form-item>
                <u-form-item :border-bottom="false">
                    <view @click="addItem()" style="width:100%;">
                        <u-icon name="plus-circle" color="#103289" size="32"></u-icon>
                        <text class="addItem">添加选项</text>
                    </view>
                </u-form-item>
            </u-form>
        </view>
        <view class="content_1">
            <view class="titleOption">投票规则</view>
            <u-form class="voteRule">
                <u-form-item left-icon="clock-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="投票开始时间" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <view style="width:100%;text-align: end;" @click="ShowStart()">
                        <text>{{ obj.startTime }}</text>
                    </view>
                </u-form-item>
                <u-form-item left-icon="clock-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="投票结束时间" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <view style="width:100%;text-align: end;" @click="ShowEnd()">
                        <text>{{ obj.endTime }}</text>
                    </view>
                </u-form-item>
                <u-form-item left-icon="grid-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="投票次数" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <view style="width:100%;text-align: end;" @click="ShowNun()">
                        <text>{{ obj.voteMoreTxt }}</text>
                        <u-icon name="arrow-right" color="#103289" size="32"></u-icon>
                    </view>
                </u-form-item>
                <u-form-item :border-bottom="false" left-icon="home-fill" :left-icon-style="{ fontSize: '16px', color: '#103289' }"
                    label="是否置顶展示" :label-style="{ fontSize: '16px', fontWeight: 'bold' }">
                    <u-switch slot="right" v-model="obj.switchVal"></u-switch>
                </u-form-item>
            </u-form>
        </view>
        <!-- <view class="content_1" style="padding: 20rpx 0;">
            <u-button shape="circle" class="custom-style" @click="submitData" :ripple="true">发布投票</u-button>
        </view> -->
        <view class="but">
            <u-button class="custom-style" type="primary"  @click="submitData" :ripple="true">发布投票</u-button>
        </view>
        <!-- 弹窗 -->
        <u-toast ref="uToast" class="uToast" />
        <!-- 时间选择弹窗 -->
        <u-picker v-model="startTimeShow" mode="time" :params="params" @confirm="confirmStartTime"></u-picker>
        <!-- 时间选择弹窗 -->
        <u-picker v-model="endTimeShow" mode="time" :params="params" @confirm="confirmEndTime"></u-picker>
        <!-- 投票次数选择 -->
        <u-select v-model="nunShow" mode="mutil-column-auto" :list="numlist" @confirm="confirmNum"></u-select>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                params: {
                    year: true,
                    month: true,
                    day: true,
                    hour: true,
                    minute: true
                },
                startTimeShow: false,
                endTimeShow: false,
                nunShow: false, //投票次数配置
                numlist: [{
                        value: 1,
                        label: '每天',
                        children: [{
                                value: 1,
                                label: '1次'
                            },
                            {
                                value: 2,
                                label: '2次'
                            },
                            {
                                value: 3,
                                label: '3次'
                            },
                            {
                                value: 4,
                                label: '4次'
                            },
                            {
                                value: 5,
                                label: '5次'
                            },
                            {
                                value: 6,
                                label: '6次'
                            },
                            {
                                value: 7,
                                label: '7次'
                            },
                            {
                                value: 8,
                                label: '8次'
                            },
                            {
                                value: 9,
                                label: '9次'
                            },
                            {
                                value: 10,
                                label: '10次'
                            },
                            {
                                value: 11,
                                label: '11次'
                            },
                            {
                                value: 12,
                                label: '12次'
                            },
                            {
                                value: 13,
                                label: '13次'
                            },
                            {
                                value: 14,
                                label: '14次'
                            },
                            {
                                value: 15,
                                label: '15次'
                            },
                            {
                                value: 16,
                                label: '16次'
                            },
                            {
                                value: 17,
                                label: '17次'
                            },
                            {
                                value: 18,
                                label: '18次'
                            },
                            {
                                value: 19,
                                label: '19次'
                            },
                            {
                                value: 20,
                                label: '20次'
                            }
                        ]
                    },
                    {
                        value: 2,
                        label: '总共',
                        children: [{
                                value: 1,
                                label: '1次'
                            },
                            {
                                value: 2,
                                label: '2次'
                            },
                            {
                                value: 3,
                                label: '3次'
                            },
                            {
                                value: 4,
                                label: '4次'
                            },
                            {
                                value: 5,
                                label: '5次'
                            },
                            {
                                value: 6,
                                label: '6次'
                            },
                            {
                                value: 7,
                                label: '7次'
                            },
                            {
                                value: 8,
                                label: '8次'
                            },
                            {
                                value: 9,
                                label: '9次'
                            },
                            {
                                value: 10,
                                label: '10次'
                            },
                            {
                                value: 11,
                                label: '11次'
                            },
                            {
                                value: 12,
                                label: '12次'
                            },
                            {
                                value: 13,
                                label: '13次'
                            },
                            {
                                value: 14,
                                label: '14次'
                            },
                            {
                                value: 15,
                                label: '15次'
                            },
                            {
                                value: 16,
                                label: '16次'
                            },
                            {
                                value: 17,
                                label: '17次'
                            },
                            {
                                value: 18,
                                label: '18次'
                            },
                            {
                                value: 19,
                                label: '19次'
                            },
                            {
                                value: 20,
                                label: '20次'
                            }
                        ]
                    }
                ],
                obj: {
                    pageview: 0,
                    activityTitle: '',
                    voteIntroduce: '',
                    voteItemlist: [{
                            index: 1,
                            vote: 0, //票数
                            content: ''
                        },
                        {
                            index: 2,
                            vote: 0, //票数
                            content: ''
                        }
                    ],
                    startTime: this.getTime(),
                    endTime: this.getTomorrow(),
                    voteMoreTxt: '总共1次',
                    voteMore: '1',
                    updateInfo: [], //更新用户信息
                    switchVal: true,
                    status: 1,
                    openid: '',
                    creatUserInfo: '',
                    voteType: 'textVote'
                }
            };
        },
        methods: {
            addItem() {
                this.obj.voteItemlist.push({
                    index: this.obj.voteItemlist.length + 1,
                    vote: 0,
                    content: ''
                });
            },
            deleteItem(index) {
                if (this.obj.voteItemlist.length == 2) {
                    this.$refs.uToast.show({
                        title: '至少要有两个投票选项',
                        type: 'error',
                        position: 'top'
                    });
                    return false;
                }
                this.obj.voteItemlist.splice(index, 1);
            },
            ShowStart() {
                this.startTimeShow = true;
            },
            ShowEnd() {
                this.endTimeShow = true;
            },
            ShowNun() {
                this.nunShow = true;
            },
            confirmStartTime(obj) {
                this.obj.startTime = `${obj.year}-${obj.month}-${obj.day} ${obj.hour}:${obj.minute}`;
            },
            confirmEndTime(obj) {
                this.obj.endTime = `${obj.year}-${obj.month}-${obj.day} ${obj.hour}:${obj.minute}`;
            },
            confirmNum(obj) {
                this.obj.voteMoreTxt = `${obj[0].label}${obj[1].label}`;
                this.obj.voteMore = obj[1].value;
            },
            submitData() {
                uni.showLoading({
                    title: '发布中'
                });
                if (this.formVerify()) {
                    this.obj.creatUserInfo = uni.getStorageSync('userInfo');
                    this.obj.openid = uni.getStorageSync('userInfo').openid;
                    //判断开始时间是否小于结束时间 小于只改为进行中状态2
                    if (this.compare(this.obj.startTime, this.getTime()) == true) {
                        this.obj.status = 2;
                    }
                    let app = this;
                    uniCloud.callFunction({
                        name: 'add_vote',
                        data: this.obj,
                        success(res) {
                            uni.hideLoading();
                            if (res.result.code == 200) {
                                uni.showToast({
                                    title: res.result.msg,
                                    duration: 2000
                                });
                                setTimeout(() => {
                                    app.clearData();
                                    uni.switchTab({
                                        url: '/pages/index/index'
                                    });
                                }, 500);
                            } else {
                                app.$refs.uToast.show({
                                    title: res.result.msg,
                                    type: 'error',
                                    position: 'top'
                                });
                            }
                        },
                        fail(error) {
                            uni.hideLoading();
                            app.$refs.uToast.show({
                                title: '发布失败,请稍后重试!',
                                type: 'error',
                                position: 'top'
                            });
                        }
                    });
                } else {
                    uni.hideLoading();
                }
            },
            formVerify() {
                for (let i = 0; i < this.obj.voteItemlist.length; i++) {
                    if (this.obj.voteItemlist[i].content == '') {
                        this.$refs.uToast.show({
                            title: `请填写第${i + 1}个投票选项`,
                            type: 'error',
                            position: 'top'
                        });
                        return false;
                    }
                }
                if (this.obj.activityTitle == '') {
                    this.$refs.uToast.show({
                        title: `请填写活动标题`,
                        type: 'error',
                        position: 'top'
                    });
                    return false;
                } else if (this.obj.voteIntroduce == '') {
                    this.$refs.uToast.show({
                        title: `请填写投票介绍`,
                        type: 'error',
                        position: 'top'
                    });
                    return false;
                } else if (this.compare(this.obj.startTime, this.obj.endTime) == false) {
                    this.$refs.uToast.show({
                        title: `投票开始时间不能大于结束时间`,
                        type: 'error',
                        position: 'top'
                    });
                    return false;
                }
                return true;
            },
            compare(date1, date2) {
                var oDate1 = new Date(date1);
                var oDate2 = new Date(date2);
                if (oDate1.getTime() > oDate2.getTime()) {
                    return false; //1d
                } else {
                    return true; //2d
                }
            },
            clearData() {
                this.obj = {
                    pageview: 0,
                    activityTitle: '',
                    voteIntroduce: '',
                    voteItemlist: [{
                            index: 1,
                            vote: 0, //票数
                            content: ''
                        },
                        {
                            index: 2,
                            vote: 0, //票数
                            content: ''
                        }
                    ],
                    startTime: this.getTime(),
                    endTime: this.getTomorrow(),
                    voteMoreTxt: '总共1次',
                    voteMore: '1',
                    updateInfo: [], //更新用户信息
                    switchVal: true,
                    status: 1,
                    openid: '',
                    creatUserInfo: '',
                    voteType: 'textVote'
                };
            },
            // 获取当前时间
            getTime() {
                let date = new Date();
                let y = date.getFullYear();
                let m = date.getMonth() + 1;
                let d = date.getDate();
                let h = date.getHours();
                let min = date.getMinutes();
                // let s = date.getSeconds()
                if (m >= 1 && m <= 9) {
                    m = `0${m}`;
                }
                if (d >= 1 && d <= 9) {
                    d = `0${d}`;
                }
                if (h >= 0 && h <= 9) {
                    h = `0${h}`;
                }
                if (min >= 0 && min <= 9) {
                    min = `0${min}`;
                }
                // if (s >= 0 && s <= 9) { min = `0${s}` }
                return `${y}-${m}-${d} ${h}:${min}`;
            },
            // 获取当前时间的明天
            getTomorrow() {
                let date = new Date();
                let y = date.getFullYear();
                let m = date.getMonth() + 1;
                let d = date.getDate() + 1;
                let h = date.getHours();
                let min = date.getMinutes();
                // let s = date.getSeconds()
                if (m >= 1 && m <= 9) {
                    m = `0${m}`;
                }
                if (d >= 1 && d <= 9) {
                    d = `0${d}`;
                }
                if (h >= 0 && h <= 9) {
                    h = `0${h}`;
                }
                if (min >= 0 && min <= 9) {
                    min = `0${min}`;
                }
                // if (s >= 0 && s <= 9) { min = `0${s}` }
                return `${y}-${m}-${d} ${h}:${min}`;
            }
        }
    };
</script>
<style lang="scss">
    page {
        background: #f7f7f7;
    }
    .content_1 {
        margin: 40rpx 30rpx 40rpx 30rpx;
        background: #ffffff;
        padding: 10rpx 20rpx 10rpx 20rpx;
        border-radius: 20rpx;
    }
    .titleOption {
        padding: 36rpx 16rpx;
        display: flex;
        align-items: center;
        font-size: 32rpx;
        font-family: Source Han Sans CN;
        font-weight: 500;
        color: #000000;
        &::before {
            content
            : "";
            display: block;
            width: 5rpx;
            height: 36rpx;
            margin-right: 10rpx;
            background: #103289;
        }
    }
    .voteOptionContent {
        .voteOptionContentTit {
            padding: 0;
        }
        .u-input {
            width: 98%;
            margin-left: 10rpx;
        }
        .addItem {
            margin-left: 20rpx;
        }
    }
    .uToast {
        /deep/.u-text {
            min-width: 300rpx;
        }
    }
    .voteRule {
        /deep/.u-form-item--left {
            width: auto !important;
            flex: none !important;
        }
    }
    .custom-style {
        background: #103289 !important;
        color: #ffffff !important;
        /deep/ .u-btn--default {
            background: #103289 !important;
            color: #ffffff !important;
        }
    }
    .custom-style {
        margin: 30rpx 85rpx 50rpx;
        border: none;
        width: 572rpx;
        height: 86rpx;
        line-height: 86rpx;
        box-sizing: border-box;
        border-radius: 15rpx;
        background-color: #103289;
        color: #ffffff;
    }
</style>
pages/voting/voteDetail.vue
New file
@@ -0,0 +1,407 @@
<template>
    <view>
        <view class="initiatorInfo">
            <view class="Info1">
                <u-avatar :src="src" class="uavatar"></u-avatar>
                <view class="infotxt">
                    <view class="name">{{ creatName }}</view>
                    <view class="fqr_txt">投票发起人</view>
                </view>
            </view>
            <view class="Info2">
                <view class="tp_status">
                    <u-tag text="待开始" v-if="data.status == 1" type="warning" mode="light" size="mini" />
                    <u-tag text="投票中" v-if="data.status == 2" type="success" mode="light" size="mini" />
                    <u-tag text="已结束" v-if="data.status == 3" type="info" mode="light" size="mini" />
                </view>
                <view class="enddate" v-if="data.status != 1">{{ data.endTime }} 结束</view>
                <view class="enddate" v-else>{{ data.startTime }} 开始</view>
            </view>
        </view>
        <view class="titInfo1">
            <view class="tit">{{ data.activityTitle }}</view>
            <view class="sharer_">
                <u-button size="mini" @click="rankingBtn">
                    票数排名<u-icon name="arrow-right"></u-icon>
                </u-button>
            </view>
        </view>
        <view class="hd_rule">
            <view class="">
                <u-tag text="投票规则" type="warning" mode="dark" bg-color="#103289" />
            </view>
            <view class="item_rule">
                <view class="startTit">开始时间</view>
                <view class="">{{ data.startTime }}</view>
            </view>
            <view class="item_rule">
                <view class="startTit">结束时间</view>
                <view class="">{{ data.endTime }}</view>
            </view>
            <view class="item_rule">
                <view class="startTit">投票规则</view>
                <view class="">每人{{ data.voteMoreTxt }}</view>
            </view>
        </view>
        <view class="hd_rule">
            <view class="">
                <u-tag text="投票详情" type="warning" mode="dark" bg-color="#103289" />
            </view>
            <view class="item_rule">
                <view>{{ data.voteIntroduce }}</view>
            </view>
        </view>
        <view class="hdOption" :style="data.voteType=='videoTextVote'?'flex-wrap:wrap;':'flex-wrap:nowrap;'"
            v-for="(item, index) in data.voteItemlist" :key="index">
            <view class="imgOption" v-if="data.voteType=='ImageTextVote'">
                <image @click="selectImage(item.imgList)" :src="item.imgList[0]"
                    style="width:110rpx;height:110rpx;overflow:hidden;border-radius: 10rpx;"></image>
            </view>
            <view class="videoOption" v-if="data.voteType=='videoTextVote'">
                <video :src="item.video" style="width:100%;height:100%;"></video>
            </view>
            <view :class="activeItem == index ? 'hdOptionBtn active-bgc' : 'hdOptionBtn'"
                @click="selectItme(index, item)">
                <text>{{ item.content }}</text>
                <u-count-to :start-val="0" font-size="40" :end-val="item.vote+''" class="voteNum"></u-count-to>
                <!-- <u-icon name="checkbox-mark" color="#2979ff" size="28"></u-icon> -->
            </view>
        </view>
        <view class="zwf_"></view>
        <!-- <view class="content_1">
            <u-button shape="circle" class="custom-style" @click="submitData" :ripple="true">投票</u-button>
        </view> -->
        <view class="but">
            <u-button class="custom-style" type="primary" @click="submitData" :ripple="true">投票</u-button>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                banner: '',
                src: '',
                creatName: '',
                data: '',
                activeItem: '*',
                activeobj: {},
            }
        },
        onLoad(event) {
            // TODO 后面把参数名替换成 payload
            const payload = event.detailDate || event.payload;
            // 目前在某些平台参数会被主动 decode,暂时这样处理。
            try {
                this.banner = JSON.parse(decodeURIComponent(payload));
            } catch (error) {
                this.banner = JSON.parse(payload);
            }
            console.log(this.banner);
            uni.setNavigationBarTitle({
                title: this.banner.title
            });
            this.getDetail();
            console.log(this.getUrl());
        },
        //分享给朋友
        onShareAppMessage(res) {
            return {
                title: this.banner.title,
                path: this.getUrl(),
                success: res => {
                    console.info(res)
                }
            }
        },
        //分享到朋友圈
        onShareTimeline(res) {
            return {
                title: "迅投,快来投票吧!",
                query: this.getUrl(),
            }
        },
        filters: {
            total(data) {
                let num = 0;
                for (let i = 0; i < data.length; i++) {
                    num = num + data[i].vote;
                }
                return num;
            }
        },
        methods: {
            getUrl() {
                let pages = getCurrentPages() //获取加载的页面
                let currentPage = pages[pages.length - 1] //获取当前页面的对象
                let url = currentPage.route //当前页面url
                let options = currentPage.options //如果要获取url中所带的参数可以查看options    参数多时通过&拼接url的参数
                let urlWithArgs = url + '?'
                for (let key in options) {
                    let value = options[key]
                    urlWithArgs += key + '=' + value + '&'
                }
                urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
                return urlWithArgs;
            },
            // 进入排名
            rankingBtn() {
                let detail = this.banner;
                uni.navigateTo({
                    url: "../rankinglist/rankinglist?detailDate=" +
                        encodeURIComponent(JSON.stringify(detail)),
                });
            },
            getDetail() {
                uni.showLoading({
                    title: '加载中...',
                    mask: true
                });
                let that = this;
                console.log(that.banner.type);
                uniCloud.callFunction({
                    name: 'getDetail',
                    data: {
                        _id: that.banner._id,
                        type: that.banner.type
                    },
                    success(res) {
                        uni.hideLoading();
                        console.log(res);
                        if (res.result.data) {
                            that.data = res.result.data[0];
                            that.src = that.data.creatUserInfo.avatarUrl;
                            that.creatName = that.data.creatUserInfo.nickName;
                            that.updateView();
                        }
                    },
                    fail(error) {
                        uni.hideLoading();
                        that.$operate.toast({
                            title: '网络请求错误!'
                        });
                    }
                });
            },
            updateView() {
                let that = this;
                uniCloud.callFunction({
                    name: 'updatePageView',
                    data: {
                        name: that.banner.type,
                        _id: that.banner._id,
                        hot_id: that.data.hot_id,
                        voteType: that.data.voteType,
                        switchVal: that.data.switchVal
                    },
                    success(res) {
                        console.log(res);
                        if (res.result.data) {
                            that.data = res.result.data[0];
                            that.src = that.data.creatUserInfo.avatarUrl;
                            that.creatName = that.data.creatUserInfo.nickName;
                        }
                    },
                    fail(error) {
                        that.$operate.toast({
                            title: '网络请求错误!'
                        });
                    }
                });
            },
            selectItme(index, item) {
                this.activeItem = index;
                this.activeobj = item;
                console.log(index, item);
            },
            selectImage(url) {
                uni.previewImage({
                    urls: url,
                    current: 0
                });
            },
            submitData() {
                if (JSON.stringify(this.activeobj) != '{}') {
                    let that = this;
                    uni.showLoading({
                        title: '提交中...',
                        mask: true
                    });
                    // uniCloud.callFunction({
                    //     name: 'update_vote',
                    //     data: {
                    //         name: that.banner.type,
                    //         voteType:that.data.voteType,
                    //         hot_id:that.data.hot_id,
                    //         _id: that.banner._id,
                    //         voteData: that.activeobj,
                    //         userInfo: uni.getStorageSync('userInfo'),
                    //         switchVal: that.data.switchVal,
                    //         vcs:{
                    //             voteMoreTxt: that.data.voteMoreTxt,
                    //             voteMore: that.data.voteMore,
                    //         }
                    //     },
                    //     success(res) {
                    //         uni.hideLoading();
                    //         console.log(res);
                    //         if (res.result.updated) {
                    //             that.data.voteItemlist[that.activeItem].vote++;
                    //             that.activeItem = '*';
                    //             that.activeobj = {};
                    //             uni.showToast({
                    //                 title: "投票成功",
                    //                 duration: 2000
                    //             });
                    //         } else {
                    //             that.$operate.toast({
                    //                 title: res.result.msg
                    //             })
                    //         }
                    //     },
                    //     fail(error) {
                    //         console.log(error);
                    //         uni.hideLoading();
                    //         that.$operate.toast({
                    //             title: '网络请求错误!'
                    //         });
                    //     }
                    // });
                } else {
                    this.$operate.toast({
                        title: '请选择投票项!'
                    });
                }
            }
        }
    };
</script>
<style lang="scss">
    page {
        background: #ffffff;
    }
    .initiatorInfo {
        background: #ffffff;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 30rpx;
        .Info1 {
            display: flex;
            align-items: center;
            .uavatar {
                margin-right: 20rpx;
            }
        }
        .name,
        .tp_status {
            line-height: 60rpx;
        }
        .tp_status {
            text-align: right;
        }
        .fqr_txt,
        .enddate {
            color: #bababa;
            // line-height: 40rpx;
        }
    }
    .titInfo1 {
        padding: 0 30rpx;
        margin-top: 40rpx;
        display: flex;
        .tit {
            // text-align: center;
            font-size: 36rpx;
            width: 85%;
            margin-right: 20rpx;
        }
        .sharer_ {}
    }
    .hd_rule {
        padding: 30rpx;
        font-size: 32rpx;
        .item_rule {
            margin: 36rpx 0;
            display: flex;
            .startTit {
                width: 200rpx;
                font-weight: 600;
            }
        }
    }
    .hdOption {
        margin-bottom: 40rpx;
        display: flex;
        padding: 0 15px;
        .imgOption {
            width: 110rpx;
            height: 110rpx;
            margin-right: 40rpx;
            flex-grow: 0;
            felx-shrink: 0;
        }
        .videoOption {
            width: 100%;
            height: 400rpx;
        }
        .hdOptionBtn {
            border: 1px solid #dcdcdc;
            padding: 36rpx;
            width: 100%;
            border-radius: 10rpx;
            font-size: 40rpx;
        }
        .voteNum {
            margin-left: 20rpx;
            float: right;
        }
    }
    .custom-style {
        margin: 30rpx 85rpx 50rpx;
        border: none;
        width: 572rpx;
        height: 86rpx;
        line-height: 86rpx;
        box-sizing: border-box;
        border-radius: 15rpx;
        background-color: #103289;
        color: #ffffff;
    }
    .zwf_ {
        height: 140rpx;
    }
    .active-bgc {
        border-color: #103289 !important;
        background-color: #fbeadc;
    }
</style>
pages/voting/voteManage.vue
New file
@@ -0,0 +1,22 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        methods: {
        }
    }
</script>
<style>
</style>