2024-11-05 10:14:41 +08:00

408 lines
12 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="party-summary-page">
<tn-navbar
fixed
bg-color="rgba(255, 255, 255, 0.01)"
:bottom-shadow="false"
:placeholder="false"
/>
<view class="party-summary"
:style="{'background':'url('+ menuData.pic +') no-repeat','backgroundPosition':'center center','backgroundSize':'100% 100%'}"
>
<view class="summary-content">
<view class="summary-info">
<view class="title">{{ menuData.title }}</view>
<view class="desc">{{ menuData.description }}</view>
</view>
</view>
</view>
<view class="party-container tn-pt-lg" v-if="flag">
<view class="tn-radius tn-m-lg">
<view class="title-container">
<view class="left">
<view class="title">{{partyData.title}}</view>
<view class="desc tn-text-lg">
<tn-icon name="clock" size="36rpx"/>
&nbsp;{{partyData.dateMonth}}
</view>
</view>
</view>
<view class="party-detail tn-pt-lg">
<view class="summary introduction-content tn-border tn-shadow-sm tn-p-sm tn-radius" :style="{'borderColor':color,'boxShadow':'0 0.3125rem 1.875rem -1.25rem '+ color}">
<view class="tn-p-lg tn-text-bold tn-text-2xl tn-text-center" :style="{'color':color}">
党组织概况
</view>
<view class="party-review tn-flex tn-flex-wrap tn-flex-center-between tn-p">
<view class="review-item tn-pt tn-pb tn-border tn-border-none-top tn-border-none-left tn-grey-disabled_border">
<view class="tn-text-lg tn-text-center">
党委
</view>
<view class="tn-text-center tn-pt tn-text-bold tn-text-2xl">
<tn-count-scroll :value="partyData.committee" :text-color="color"/>
</view>
</view>
<view class="review-item tn-pt tn-pb tn-border tn-border-none-top tn-border-none-right tn-border-none-left tn-grey-disabled_border">
<view class="tn-text-lg tn-text-center">
党支部
</view>
<view class="tn-text-center tn-pt tn-text-bold tn-text-2xl">
<tn-count-scroll :value="partyData.branch" :text-color="color"/>
</view>
</view>
<view class="review-item tn-pt tn-pb tn-border tn-border-none-bottom tn-border-none-top tn-border-none-left tn-grey-disabled_border">
<view class="tn-text-lg tn-text-center">
在册党员
</view>
<view class="tn-text-center tn-pt tn-text-bold tn-text-2xl">
<tn-count-scroll :value="partyData.registered" :text-color="color"/>
</view>
</view>
<view class="review-item tn-pt tn-pb tn-border tn-border-none-bottom tn-border-none-right tn-border-none-top tn-border-none-left tn-grey-disabled_border">
<view class="tn-text-lg tn-text-center">
流动党员
</view>
<view class="tn-text-center tn-pt tn-text-bold tn-text-2xl">
<tn-count-scroll :value="partyData.unregistered" :text-color="color"/>
</view>
</view>
</view>
<view class="text tn-text-lg" style="text-indent: 2em;">
{{partyData.parkName}}党工委下属<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.committee}}</span>个党委
共有党支部<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.branch}}</span>
在册党员<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.registered}}</span>
流动党员<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.unregistered}}</span>
</view>
<view class="tn-p-lg tn-text-bold tn-text-2xl tn-text-center" :style="{'color':color}">
党支部分布
</view>
<ucharts-ring :chartData="branchChartData" title="党支部" :val="partyData.branch" :radius="90" position="bottom"/>
<view class="text tn-text-lg" style="text-indent: 2em;">
{{partyData.parkName}}共有党支部<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.branch}}</span>
其中机关党支部<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{JSON.parse(partyData.branchData).organ}}</span>
非公党支部<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{JSON.parse(partyData.branchData).public}}</span>
</view>
<view class="tn-p-lg tn-text-bold tn-text-2xl tn-text-center" :style="{'color':color}">
在册党员分布
</view>
<ucharts-ring :chartData="memberChartData" title="在册党员" :val="partyData.registered" :radius="90" position="bottom"/>
<view class="text tn-text-lg" style="text-indent: 2em;">
{{partyData.parkName}}共有在册党员<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{partyData.registered}}</span>
其中机关党员共<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{JSON.parse(partyData.registerData).organ}}</span>
非公党员<span class="tn-text-bold tn-text-2xl" :style="{'color':color}">{{JSON.parse(partyData.registerData).organ}}</span>
</view>
<view v-if="partyData.review" class="tn-p-lg tn-text-bold tn-text-2xl tn-text-center" :style="{'color':color}">
党建概述
</view>
<view class="text tn-text-lg" style="text-indent: 2em;line-height: 1.8em;color: #444444;">
<mp-html :content="partyData.review"/>
</view>
</view>
</view>
</view>
</view>
<tn-date-time-picker v-model="dateTimeValue" v-model:open="openDateTimePicker" init-current-date-time format="YYYY-MM" mode="yearmonth" @confirm="getDate"/>
<view class="picker-btn" @click="showPicker">
<tn-button shape="circle" type="success" size="lg" shadow shadow-color="tn-type-primary_shadow">
<tn-icon name="history" :size="50"/>
</tn-button>
</view>
</view>
</template>
<script lang="ts" setup>
import { onMounted, reactive, ref } from 'vue';
import request from '@/utils/request';
import { onLoad } from "@dcloudio/uni-app";
import UchartsRing from '@/pages/components/ucharts-ring.vue';
import TnButton from '@/uni_modules/tuniaoui-vue3/components/button/src/button.vue'
import TnNavbar from '@/uni_modules/tuniaoui-vue3/components/navbar/src/navbar.vue'
import TnIcon from '@/uni_modules/tuniaoui-vue3/components/icon/src/icon.vue'
import TnCountScroll from '@/uni_modules/tuniaoui-vue3/components/count-scroll/src/count-scroll.vue'
import TnDateTimePicker from '@/uni_modules/tuniaoui-vue3/components/date-time-picker/src/date-time-picker.vue'
import onShare from '@/utils/share';
const { onShareAppMessage,onShareTimeline } = onShare()
const shareTitle = ref()
const shareParam = ref()
const color = ref();
const flag = ref(false);
const orgId = ref();
const openDateTimePicker = ref(false);
const partyData = reactive({
dateMonth:'',
title:'',
parkName:'',
committee:0,
branch:0,
branchData:{},
registered:0,
registerData:{},
unregistered:0,
review:''
})
const branchChartData = ref({})
const memberChartData = ref({})
const dateTimeValue = ref();
const menuData = reactive({
pic:'',
title:'',
color:'',
description:''
})
const showPicker = () => {
openDateTimePicker.value = true
}
const getDate = (value:string) => {
getPartyData(value)
}
const getMenuData = (id:number) => {
request({
url:'/front/report/menu',
method:'GET',
data:{menuId:id}
}).then((res:any)=>{
if(res.data.code === 0){
Object.assign(menuData,res.data.data)
shareParam.value = res.data.data.menuId
color.value = res.data.data.color
}else{
uni.showToast({
icon:'none',
title:res.data.message
})
}
})
}
const getPartyData = (date:string) => {
request({
url:'/front/report/party/summary',
method:'GET',
data:{id:orgId.value,month:date}
}).then((res:any) => {
if(res.data.code === 0){
Object.assign(partyData,res.data.data)
shareTitle.value = res.data.data.title
setTimeout(() => {
let branchData = JSON.parse(res.data.data.branchData)
let memberData = JSON.parse(res.data.data.registerData)
let branch_res = {
series: [
{
data: [{"name":"机关党支部","value":Number(branchData.organ)},{"name":"非公党支部","value":Number(branchData.public)}]
}
]
};
let member_res = {
series: [
{
data: [{"name":"机关党员","value":Number(memberData.organ)},{"name":"非公党员","value":Number(memberData.public)}]
}
]
};
branchChartData.value = JSON.parse(JSON.stringify(branch_res));
memberChartData.value = JSON.parse(JSON.stringify(member_res));
}, 500);
}else{
uni.showToast({
icon:'none',
title:res.data.message
})
}
flag.value = true;
})
}
onShareAppMessage(() => {
return {
title:shareTitle.value,
path:'/pages/report/party/child/index?mid=' + shareParam.value + '&id=' + orgId.value
}
})
onShareTimeline(() => {
return {
title:shareTitle.value,
path:'/pages/report/party/child/index?mid=' + shareParam.value + '&id=' + orgId.value
}
})
onLoad((option)=>{
getMenuData(option.mid)
orgId.value = option.id
})
onMounted(()=>{
getPartyData("")
})
</script>
<style lang="scss" scoped>
.party-summary {
position: relative;
width: 100%;
height: 450rpx;
z-index: 2;
&::before {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: linear-gradient(
0deg,
rgba(0, 0, 0, 0.2) 0%,
rgba(0, 0, 0, 0) 100%
);
z-index: 1;
}
.summary-content {
position: absolute;
left: 0;
bottom: 80rpx;
width: 100%;
padding: 0rpx 30rpx;
z-index: 2;
display: flex;
align-items: center;
.summary-info {
flex: 1;
color: #fff;
.title {
font-size: 52rpx;
font-weight: bold;
letter-spacing: 8rpx;
text-shadow: 4rpx 4rpx 10rpx #585858;
}
.desc {
font-size: 34rpx;
margin-top: 20rpx;
letter-spacing: 4rpx;
text-shadow: 4rpx 4rpx 10rpx #585858;
}
}
}
}
.party-container{
position: relative;
top: -40rpx;
z-index: 99;
background-color: #fff;
border-radius: 40rpx 40rpx 0 0;
.title-container {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
line-height: 1;
.left {
flex: 1;
.title {
font-size: 40rpx;
font-weight: bold;
}
.desc {
margin-top: 32rpx;
}
}
.right {
flex-grow: 0;
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
margin-left: 20rpx;
.icon {
font-size: 70rpx;
}
.text {
font-size: 26rpx;
margin-top: 10rpx;
}
}
}
.party-detail {
position: relative;
border-radius: 20rpx 20rpx 0 0;
z-index: 10;
.text {
letter-spacing: 4rpx;
text-align: justify;
}
.topic-item {
& + .topic-item {
margin-top: 36rpx;
}
}
.party-review{
.review-item{
width: 50%;
box-sizing: border-box;
}
}
}
}
.park-container {
width: fit-content;
height:100%;
.scroll-item {
flex-grow: 1;
.empty {
width: 100rpx;
height: 100rpx;
border-radius: 15rpx;
}
.title {
margin-top: 10rpx;
}
}
}
.picker-btn{
position: fixed;
z-index: 999;
right: 40rpx;
bottom: 60rpx;
}
</style>