Browse Source

选举列表

dev
沈明 1 year ago
parent
commit
0ad4dfee85
  1. 17
      src/api/common.ts
  2. 41
      src/pages/electionList/index.vue
  3. 46
      src/pages/electionList/info.vue
  4. 3
      src/utils/http.ts

17
src/api/common.ts

@ -0,0 +1,17 @@
import { request } from '@/utils/http'
export function getVoteList(data: pageType) {
return request.http({
url: '/api/vote_list',
method: 'GET',
data
})
}
export function getVoteDetail(data: { id: number }) {
return request.http({
url: '/api/vote_result_detail',
method: 'GET',
data
})
}

41
src/pages/electionList/index.vue

@ -1,11 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { getVoteList } from '@/api/common'
const navto = (url: string, params = {}) => uni.$util.goToPage({ url, params }) const navto = (url: string, params = {}) => uni.$util.goToPage({ url, params })
const doSearch = (_formData: { page: number; limit: number }, onSuccess: Function) => { const doSearch = (formData: { page: number; limit: number }, onSuccess: Function) => {
onSuccess({ getVoteList(formData).then((res) => {
data: { const { data } = res as { data: { data: any; total: number } }
data: [{ name: '测试一' }, { name: '测试二' }], onSuccess({ data })
total: 4
}
}) })
} }
</script> </script>
@ -18,36 +17,38 @@ const doSearch = (_formData: { page: number; limit: number }, onSuccess: Functio
<view class="flex"> <view class="flex">
<view class="flex1"> <view class="flex1">
<view class="flex-center-start"> <view class="flex-center-start">
<text class="text-ellipsis title">{{ '2024年度学生会主席选举' }}</text> <text class="text-ellipsis title">{{ row.title }}</text>
<text class="status b">进行中</text> <text class="status b" v-if="row.status === 2">进行中</text>
<!-- <text class="status f">未开始</text> --> <text class="status f" v-else-if="row.status === 1">未开始</text>
<!-- <text class="status e">已结束</text> --> <text class="status e" v-else>已结束</text>
</view> </view>
<view class="time">{{ '投票时间:2024-03-01 至 2024-03-07' }}</view> <view class="time">{{ `投票时间:${row.start_time}${row.end_time}` }}</view>
</view> </view>
<view :class="{ arrow: true, active: row.showInfo }" @click="row.showInfo = !row.showInfo"> <view :class="{ arrow: true, active: row.showInfo }" @click="row.showInfo = !row.showInfo">
<u-icon name="arrow-down" color="#9CA3AF" /> <u-icon name="arrow-down" color="#9CA3AF" />
</view> </view>
</view> </view>
<view class="info" v-if="row.showInfo"> <view class="info" v-if="row.showInfo">
<view class="flex info-items" v-for="(v, k) of 2" :key="k"> <view class="flex info-items" v-for="(v, k) of row.candidate" :key="k">
<view class="head"></view> <view class="head">
<image :src="v.photo" mode="aspectFill" />
</view>
<view class="content flex1"> <view class="content flex1">
<view class="name flex-center-start"> <view class="name flex-center-start">
<text>陈佳怡</text> <text>{{ v.name }}</text>
<!-- <text class="status">当选</text> --> <text class="status" v-if="v.vote_result == 1">当选</text>
<text class="status un">未当选</text> <text class="status un" v-else>未当选</text>
</view> </view>
<view class="votes">得票数286</view> <view class="votes">得票数{{ v.agree_num }}</view>
</view> </view>
<view class="progress"> <view class="progress">
<u-line-progress :percentage="60" height="8rpx" active-color="#2563EB" :show-text="false" /> <u-line-progress :percentage="v.ageree_percent" height="8rpx" active-color="#2563EB" :show-text="false" />
<view class="progress-text">60%</view> <view class="progress-text">{{ v.ageree_percent }}%</view>
</view> </view>
</view> </view>
<view class="info-bts" @click.stop="navto('pages/electionList/info')">查看投票详情</view> <view class="info-bts" @click.stop="navto('pages/electionList/info', { id: row.id })">查看投票详情</view>
</view> </view>
</view> </view>
</template> </template>

46
src/pages/electionList/info.vue

@ -1,56 +1,68 @@
<script setup lang="ts"></script> <script setup lang="ts">
import { getVoteDetail } from '@/api/common'
const info = ref<any>({})
onLoad((opt) => {
getVoteDetail({ id: opt?.id }).then((res: any) => {
info.value = res.data
})
})
</script>
<template> <template>
<view class="electionList-info"> <view class="electionList-info">
<view class="head"> <view class="head">
<view class="title">2024年度业主委员会主任选举</view> <view class="title">{{ info.title }}</view>
<view class="status"> <view class="status">
<text style="color: #4b5563; margin-right: 16rpx">已结束</text> <text style="color: #4b5563; margin-right: 16rpx">已结束</text>
<text style="color: #6b7280">2024-01-15 10:00 ~ 2024-01-16 10:00</text> <text style="color: #6b7280">{{ info.start_time }} ~ {{ info.end_time }}</text>
</view> </view>
</view> </view>
<view class="countview flex-center-between"> <view class="countview flex-center-between">
<view class="flex column items"> <view class="flex column items">
<u-count-to :start-val="0" :end-val="20" bold font-size="48rpx" color="#2563EB" /> <u-count-to :start-val="0" :end-val="info.member_num" bold font-size="48rpx" color="#2563EB" />
<view class="tip">参选人数</view> <view class="tip">参选人数</view>
</view> </view>
<view class="flex column items"> <view class="flex column items">
<u-count-to :start-val="0" :end-val="20" bold font-size="48rpx" color="#2563EB" /> <u-count-to :start-val="0" :end-val="info.candidate_num" bold font-size="48rpx" color="#2563EB" />
<view class="tip">候选人数</view> <view class="tip">候选人数</view>
</view> </view>
<view class="flex column items"> <view class="flex column items">
<u-count-to :start-val="0" :end-val="20" bold font-size="48rpx" color="#2563EB" /> <u-count-to :start-val="0" :end-val="info.elected_num" bold font-size="48rpx" color="#2563EB" />
<view class="tip">当选人数</view> <view class="tip">当选人数</view>
</view> </view>
</view> </view>
<view class="content" v-for="(v, k) of 4" :key="k"> <view class="content" v-for="(v, k) of info.candidate" :key="k">
<view class="flex"> <view class="flex">
<view class="headimg"></view> <view class="headimg">
<view class="name">陈志明</view> <image :src="v.photo" mode="aspectFill" />
<view class="status">当选</view> </view>
<!-- <view class="status un">未当选</view> --> <view class="name">{{ v.name }}</view>
<view class="status" v-if="v.vote_result == 1">当选</view>
<view class="status un" v-else>未当选</view>
</view> </view>
<view class="progress"> <view class="progress">
<view class="flex-center-between progress-text"> <view class="flex-center-between progress-text">
<text>同意</text> <text>同意</text>
<text class="b">98 (62.8%)</text> <text class="b">{{ v.agree_num }} ({{ v.ageree_percent.toFixed(2) }}%)</text>
</view> </view>
<u-line-progress :percentage="62.8" height="8rpx" active-color="#2563EB" :show-text="false" /> <u-line-progress :percentage="v.ageree_percent" height="8rpx" active-color="#2563EB" :show-text="false" />
</view> </view>
<view class="progress"> <view class="progress">
<view class="flex-center-between progress-text"> <view class="flex-center-between progress-text">
<text>反对</text> <text>反对</text>
<text class="e">35 (22.4%)</text> <text class="e">{{ v.disagree_num }} ({{ v.giveup_percent.toFixed(2) }}%)</text>
</view> </view>
<u-line-progress :percentage="22.4" height="8rpx" active-color="#ef4444" :show-text="false" /> <u-line-progress :percentage="v.giveup_percent" height="8rpx" active-color="#ef4444" :show-text="false" />
</view> </view>
<view class="progress"> <view class="progress">
<view class="flex-center-between progress-text"> <view class="flex-center-between progress-text">
<text>弃权</text> <text>弃权</text>
<text class="f">23 (14.8%)</text> <text class="f">{{ v.giveup_num }} ({{ v.giveup_percent.toFixed(2) }}%)</text>
</view> </view>
<u-line-progress :percentage="14.8" height="8rpx" active-color="#9CA3AF" :show-text="false" /> <u-line-progress :percentage="v.giveup_percent" height="8rpx" active-color="#9CA3AF" :show-text="false" />
</view> </view>
</view> </view>
</view> </view>

3
src/utils/http.ts

@ -30,8 +30,6 @@ export const request = {
const header = Object.assign({ 'content-type': 'application/json', Authorization: '' }, headers) const header = Object.assign({ 'content-type': 'application/json', Authorization: '' }, headers)
console.log('request Url:', url)
uni.request({ uni.request({
url, url,
header, header,
@ -39,6 +37,7 @@ export const request = {
data, data,
success(res) { success(res) {
const data = res.data as { code: number; data: object; msg: string } const data = res.data as { code: number; data: object; msg: string }
switch (data.code) { switch (data.code) {
case 1: case 1:
resolve(res.data) resolve(res.data)

Loading…
Cancel
Save