From ce21b378de4b5a075da8295404d2fdb3b2e3a22a Mon Sep 17 00:00:00 2001
From: Lou <luzhiping@qqyjz.com>
Date: Sat, 25 Nov 2023 19:20:13 +0800
Subject: [PATCH] 公益投票、选举调查功能编写,修复部分问题
---
subPackage/article/detail.vue | 331 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 251 insertions(+), 80 deletions(-)
diff --git a/subPackage/article/detail.vue b/subPackage/article/detail.vue
index a34eb5c..88afa72 100644
--- a/subPackage/article/detail.vue
+++ b/subPackage/article/detail.vue
@@ -1,7 +1,5 @@
<template>
<view class="">
-
-
<view class="container">
<view class="f-32 fw">{{detailInfo.title}}</view>
<view class="row flex j-c-s-b a-i-c c-99">
@@ -24,63 +22,75 @@
<u-parse :content="detailInfo.content"></u-parse>
</view>
</view>
- <view class="" v-if="false">
- <view class="explain-row c-main f-28">
- 报名和投票先指定好房屋
- </view>
- <view class="select-row flex j-c-s-b a-i-c">
- <text class="f-28">指定房屋</text>
- <view class="select-row-content flex a-i-c">
- <text class="f-26 c-99 mr-20"></text>
- <u-icon name="arrow-right" color="#999"></u-icon>
- </view>
- </view>
- <!-- <view class="apply">
- <view class="flex f-d-c a-i-c">
- <view class="flex mb-20">
- <image class="apply-user" src="/static/icon/nav-02.png" mode=""></image>
- <image class="apply-user" src="/static/icon/nav-02.png" mode=""></image>
- <image class="apply-user" src="/static/icon/nav-02.png" mode=""></image>
+
+ <view class="" v-if="isLoad">
+ <view class="" v-if="eventType == 0 && applyInfo.openFlag == 0">
+ <!-- <view class="explain-row c-main f-28">
+ 报名和投票先指定好房屋
+ </view> -->
+ <view class="select-row flex j-c-s-b a-i-c">
+ <text class="f-28">房屋</text>
+ <view class="select-row-content flex a-i-c">
+ <text class="f-26 c-99 mr-20">{{siteInfo.name}}</text>
+ <!-- <u-icon name="arrow-right" color="#999"></u-icon> -->
</view>
- <text class="f-28 c-99">共3人</text>
</view>
- <button class="apply-btn bgc-main c-ff f-30">报名</button>
- </view> -->
-
- <view class="mt-20" >
+ <view class="apply">
+ <view class="flex f-d-c a-i-c" v-if="applyList.length">
+ <view class="flex mb-20">
+ <image v-for="i in applyList" class="apply-user" src="/static/icon/user-01.png" mode="aspectFill">
+ </image>
+ </view>
+ <text class="f-28 c-99">共{{applyList.length}}人</text>
+ </view>
+ <button class="apply-btn bgc-main c-ff f-30" v-if="computeEndTime > 0"
+ @click="handleApply()" :disabled="applyInfo.userId">{{applyInfo.userId?"已报名":"报名"}}</button>
+ <button class="apply-btn bgc-main c-ff f-30" v-if="computeEndTime <= 0"
+ :disabled="true">已结束</button>
+ </view>
+ </view>
+
+ <view class="mt-20" v-if="eventType == 1 && voteTopicList.length">
<view class="explain-row c-main f-28">
投票进行中
</view>
<view class="vote bgc-ff">
- <view class="vote-title f-30 fw">
- 是否同意安装充电桩
- </view>
- <view class="">
- <u-radio-group
- iconPlacement="right"
- activeColor="#017BFC"
- placement="column"
- >
- <view class="mb-20">
- <u-radio label="同意" ></u-radio>
- <view class="flex j-c-s-b a-i-c mt-10">
- <uv-line-progress :percentage="30" height="10" ></uv-line-progress>
- <text class="c-99 f-28">10</text>
+ <view class="" v-for="(item,index) in voteTopicList" :key="index">
+ <view class="vote-title f-30 fw">
+ {{item.discussContent}}
+ </view>
+ <view class="" v-if="item.optionRange == 0">
+ <u-radio-group iconPlacement="right" activeColor="#017BFC" placement="column"
+ v-model="item.selected" @change="selectOption($event,index)" :disabled="isSubmit">
+ <view class="mb-20" v-for="(i,k) in item.children">
+ <u-radio :label="i.optionContent" :name="i.id"></u-radio>
+ <view class="flex j-c-s-b a-i-c mt-10">
+ <uv-line-progress height="10"></uv-line-progress>
+ <text class="c-99 f-28" v-if="i.number">{{i.number}}人</text>
+ </view>
</view>
-
- </view>
- <view class="">
- <u-radio label="不同意" ></u-radio>
- <view class="flex j-c-s-b a-i-c mt-10">
- <uv-line-progress height="10" ></uv-line-progress>
- <text class="c-99 f-28">10</text>
+ </u-radio-group>
+ </view>
+ <view class="" v-if="item.optionRange == 1">
+ <u-checkbox-group iconPlacement="right" activeColor="#017BFC" placement="column"
+ v-model="item.selected" :disabled="isSubmit" @change="selectOption($event,index)">
+ <view class="mb-20" v-for="(i,k) in item.children" :key="k">
+ <u-checkbox :label="i.optionContent" :name="i.id"></u-checkbox>
+ <view class="flex j-c-s-b a-i-c mt-10">
+ <!-- <uv-line-progress :percentage="10" height="10"></uv-line-progress> -->
+ <uv-line-progress height="10"></uv-line-progress>
+ <text class="c-99 f-28" v-if="i.number">{{i.number}}人</text>
+ </view>
</view>
- </view>
- </u-radio-group>
+ </u-checkbox-group>
+ </view>
</view>
+ <button class="apply-btn bgc-main c-ff f-30" v-if="computeEndTime > 0" @click="submitVote()"
+ :disabled="isSubmit">{{isSubmit?"已提交":"提交"}}</button>
+ <button class="apply-btn bgc-main c-ff f-30" v-if="computeEndTime <= 0"
+ :disabled="true">已结束</button>
</view>
</view>
-
</view>
<!-- <view class="action flex flex_base">
@@ -98,25 +108,175 @@
import {
getDetail
} from '@/api/article/article.js'
+ import * as communityModel from "@/api/community/community.js"
import tagCell from '@/components/noticeList/tagCell.vue'
+ import {
+ jsonString
+ } from '../../uni_modules/uv-ui-tools/libs/function/test'
export default {
components: {
tagCell
},
data() {
return {
+ params: {
+ id: ""
+ },
+ eventType: null,
detailInfo: {},
+ pdId: "",
+ siteInfo: {},
+ applyList: [],
+ applyInfo: {},
+ isLoad: false,
+ voteTopicList: [],
+ isSubmit: false // 是否已提交投票
}
},
onLoad(option) {
- this.getDetailInfo(option.id)
+ this.$set(this.params, "id", option.id);
+ if (option.type) {
+ this.$set(this.params, "eventType", option.type);
+ this.eventType = option.type;
+ this.pdId = option.pdId;
+ this.siteInfo = uni.getStorageSync("siteInfo")
+ }
+ this.getDetailInfo()
},
+
+ computed: {
+ computeEndTime() {
+ let curTimestamp = new Date().getTime();
+ let endTimestamp = new Date(this.applyInfo.endTime).getTime();
+ return endTimestamp - curTimestamp
+ }
+ },
+
methods: {
- getDetailInfo(id) {
- getDetail({
- id
- }).then(res => {
+
+ toNumber(val) {
+ return Number(val)
+ },
+
+ getDetailInfo() {
+ getDetail(this.params).then(res => {
+ this.isLoad = true;
this.detailInfo = res.data;
+ if (this.pdId) {
+ this.getApplyDetail()
+ }
+ if (this.eventType == 0) {
+ this.getApplyList();
+ }
+ if (this.eventType == 1) {
+ this.getVoteList();
+ }
+ })
+ },
+
+ //报名列表
+ getApplyList() {
+ communityModel.getApplyList({
+ publicDiscussId: this.pdId
+ }).then(res => {
+ console.log(res)
+ if (res.code == 200) {
+ this.applyList = res.data.records;
+ }
+ })
+ },
+
+ //报名、投票详情
+ getApplyDetail() {
+ communityModel.getApplyDetail({
+ id: this.pdId
+ }).then(res => {
+ console.log(res)
+ if (res.code == 200) {
+ this.applyInfo = res.data;
+ }
+ })
+ },
+
+ //获取投票议题
+ getVoteList() {
+ communityModel.getVoteTopics({
+ publicDiscussId: this.pdId
+ }).then(res => {
+ if (res.code == 200) {
+ let data = res.data;
+ if (data.length) {
+ for (let i of data) {
+ if(i.selected){
+ if (typeof i.selected == "string" && i.optionRange == 0) {
+ this.isSubmit = true;
+ i.selected = Number(i.selected)
+ }
+ if(typeof i.selected == "string" && i.optionRange == 1){
+ this.isSubmit = true;
+ i.selected = JSON.parse(i.selected)
+ }
+ }
+ }
+ }
+ this.voteTopicList = data;
+ }
+ })
+ },
+
+ //报名
+ handleApply() {
+ communityModel.addApply({
+ publicDiscussId: this.pdId
+ }).then(res => {
+ if (this.computeEndTime > 0) {
+ if (res.code == 200) {
+ uni.showToast({
+ title: "操作成功"
+ })
+ this.getApplyList();
+ }
+ } else {
+ uni.showToast({
+ title: "报名已结束",
+ icon: "none"
+ })
+ }
+ })
+ },
+
+ selectOption(id, index) {
+ let item = this.voteTopicList[index];
+ item.selected = id;
+ this.$set(this.voteTopicList, index, item);
+ },
+
+ getParams() {
+ let list = JSON.parse(JSON.stringify(this.voteTopicList));
+ let arr = [];
+ for (let i of list) {
+ if (i.selected) {
+ delete i.children;
+ i.selected = JSON.stringify(i.selected)
+ arr.push(i)
+ }
+ }
+ return arr;
+ },
+
+ //提交投票
+ submitVote() {
+ let data = this.getParams()
+ communityModel.addVoteOperate(data).then(res => {
+ if (res.code == 200) {
+ uni.showToast({
+ title: "操作成功"
+ })
+ this.$nextTick(() => {
+ this.getApplyDetail();
+ this.getVoteList();
+ })
+ }
})
}
}
@@ -124,9 +284,10 @@
</script>
<style lang="scss">
- page{
+ page {
background-color: #f5f5f5;
}
+
.container {
padding: 0 30rpx;
background-color: #fff;
@@ -137,7 +298,7 @@
}
.content {
- padding-bottom:30rpx;
+ padding-bottom: 30rpx;
}
.action-item {
@@ -155,38 +316,48 @@
background-color: rgb(236, 244, 255);
padding: 20rpx;
}
- .select-row{
- padding:30rpx;
- background-color:#fff;
+
+ .select-row {
+ padding: 30rpx;
+ background-color: #fff;
box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.2);
- .select-row-content{
- flex:1;
+ border-top: 1px solid #f5f5f5;
+
+ .select-row-content {
+ width: 80%;
justify-content: flex-end;
}
}
- .apply{
- padding:30rpx;
- .apply-user{
- width:80rpx;
- height:80rpx;
+
+ .apply {
+ padding: 30rpx;
+
+ .apply-user {
+ width: 80rpx;
+ height: 80rpx;
border-radius: 50%;
- margin-right:-15rpx;
- border:1px solid #fff;
+ margin-right: -15rpx;
+ border: 1px solid #fff;
}
- .apply-btn{
- width:100%;
- height:80rpx;
- line-height: 80rpx;
- margin: 30rpx auto 0;
- border:none;
- border-radius: 40rpx;
-
- }
+
+
}
- .vote{
- padding:0 40rpx 30rpx;
- .vote-title{
- padding:30rpx 0;
+
+ .apply-btn {
+ width: 100%;
+ height: 80rpx;
+ line-height: 80rpx;
+ margin: 30rpx auto 0;
+ border: none;
+ border-radius: 40rpx;
+
+ }
+
+ .vote {
+ padding: 0 40rpx 30rpx;
+
+ .vote-title {
+ padding: 30rpx 0;
}
}
</style>
\ No newline at end of file
--
Gitblit v1.9.3