<script setup>
	import {
		ref
	} from "vue"

	import {
		onLoad,
		onShow,
	} from "@dcloudio/uni-app"

	import {
		getOverdueNum
	} from "@/api/work/overdue.js"

	import {
		getannouncementList,
		getUnwriteReportList,
		getHomeStats
	} from "@/api/home.js"

	import {
		getJSDDlist,
		getHYFLlist,
	} from "@/api/work/projectInfo.js";

	import {
		getMessageNum
	} from "@/api/work/message.js"

	import store from '@/store'

	import {
		checkRoleById
	} from "@/utils/permission.js"

	import iconEnterpriseInfo from "@/static/func/enterpriseInfos.svg";
	import iconProjectInfo from "@/static/func/projectInfo.svg";
	import iconReserveProject from "@/static/func/reserveProject.svg";
	import iconContact from "@/static/func/contact.svg";
	import iconQuestionList from "@/static/func/questionList.svg";
	import iconQuestionInput from "@/static/func/questionInput.svg";
	import iconQuestionTrace from "@/static/func/questionTrace.svg";
	import iconFundPlan from "@/static/func/fundPlan.svg";
	import iconFundUse from "@/static/func/fundUse.svg";
	import iconProjectPercents from "@/static/func/projectPercents.svg";
	import iconImportant from "@/static/func/important.svg";
	import iconPreFlow from "@/static/func/preFlow.svg";
	import iconWeekly from "@/static/func/weekly.svg";
	import iconMonthly from "@/static/func/monthly.svg";
	import iconYearly from "@/static/func/yearly.svg";
	import iconOverdued from "@/static/func/overdued.svg";
	import iconOverdueWill from "@/static/func/overdueWill.svg";

	// 项目信息
	let projectYear = ref(2023);

	// 选择年
	let yearShow = ref(false);
	let defaultIndex = ref([0]);
	let yearColumns = ref([
		["2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012",
			"2013",
			"2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026",
			"2027", "2028", "2029", "2030", "2031", "2032", "2033"
		]
	])
	const yearShowChoose = function() {
		yearShow.value = true;
	}
	const yearClose = function(e) {
		if (e) {
			projectYear.value = e.value[0];
			// 获取最新数据
			getProjectInfo();
		}

		yearShow.value = false;
	}

	// 选择分类
	let projectKind = ref(null);
	let projectKindId = null;
	let kindShow = ref(false);
	let kindColumns = ref([]);
	const kindShowChoose = function() {
		kindShow.value = true;
	}
	const kindClose = function(e) {
		if (e) {
			projectKind.value = e.value[0];
			projectKindId = hyflFull.find(item => item.value === projectKind.value).key;
			// 获取最新数据
			getProjectInfo();
		}

		kindShow.value = false;
	}
	let hyflFull = [];
	const getHYFL = function() {
		getHYFLlist().then(res => {
			hyflFull = res.data.list;
			kindColumns.value = [res.data.list.map(item => item.value)];
		})
	};

	// 选择地点
	let projectArea = ref(null);
	let projectAreaId = null;
	let areaShow = ref(false);
	let areaColumns = ref([]);
	const areaShowChoose = function() {
		areaShow.value = true;
	}
	const areaClose = function(e) {
		if (e) {
			projectArea.value = e.value[0];
			projectAreaId = jsddFull.find(item => item.value === projectArea.value).key;
			// 获取最新数据
			getProjectInfo();
		}

		areaShow.value = false;
	}
	let jsddFull = [];
	const getJSDD = function() {
		getJSDDlist().then(res => {
			jsddFull = res.data.list;
			areaColumns.value = [res.data.list.map(item => item.value)];
		})
	};

	let projectNum = ref([{
		name: "亿元以下",
		key: "numAmt1",
		value: 0,
	}, {
		name: "1-5亿",
		key: "numAmt2",
		value: 0,
	}, {
		name: "5-10亿",
		key: "numAmt3",
		value: 0,
	}, {
		name: "10亿以上",
		key: "numAmt4",
		value: 0,
	}]);

	let fundNum = ref([{
		name: "年度计划投资",
		key: "amtJh",
		value: 0,
	}, {
		name: "当月计划投资",
		key: "monthPlan",
		value: 0,
	}, {
		name: "年度完成投资",
		key: "amtSj",
		value: 0,
	}]);

	let fullPercents = ref(0);

	let pieOpts = ref({
		color: ["#03873F", "#00B250", "#1BBF65", "#31DF80", "#69E2A0"],
		enableScroll: false,
		legend: {
			show: false
		},
		extra: {
			pie: {
				customRadius: 80,
				border: false,
			}
		}
	})

	let ringOpts = ref({
		color: ["#3E76FC", "#7AA2FF", "#B8CDFF"],
		enableScroll: false,

		legend: {
			show: false
		},
		title: {
			name: "300",
			fontSize: 14,
			color: "#3D3D3D"
		},
		subtitle: {
			name: "项目总数",
			fontSize: 14,
			color: "#3D3D3D"
		},
		extra: {
			ring: {
				customRadius: 55,
				ringWidth: 20,
				border: false,
			}
		}
	})


	let ringTotal = ref(0);
	let ringChartData = ref({
		series: [{
			data: [{
				name: '新建项目',
				value: 100,
				labelShow: false
			}, {
				name: '续建项目',
				value: 100,
				labelShow: false
			}, {
				name: '储备项目',
				value: 100,
				labelShow: false
			}]
		}]
	})

	let showRing = ref(false)
	let showPie = ref(false)

	let pieChartData = ref({
		series: [{
			data: [{
				name: "无数据",
				value: 0,
				labelShow: false
			}]
		}]
	})

	function getProjectInfo() {
		getHomeStats({
			year: projectYear.value,
			indusKind: projectKindId,
			buildAddre: projectAreaId
		}).then(res => {
			const {
				data
			} = res;

			for (let i in projectNum.value) {
				projectNum.value[i].value = data[projectNum.value[i].key] ?? "--";
			}
			for (let i in fundNum.value) {
				fundNum.value[i].value = data[fundNum.value[i].key] ?? "--";
			}
			fullPercents.value = (data.numBl ?? "") === "" ? 0 : parseFloat(data.numBl);

			// 圆环图
			numNew.value = ringChartData.value.series[0].data[0].value = data.numNew;
			numOld.value = ringChartData.value.series[0].data[1].value = data.numOld;
			numNo.value = ringChartData.value.series[0].data[2].value = data.numNo;
			ringOpts.value.title.name = data.numTotal ?? "0";
			showRing.value = true;

			let tempArr = [];
			for (let i in data.buildAddress) {
				tempArr.push({
					name: data.buildAddress[i].title,
					value: data.buildAddress[i].num,
					labelShow: false
				})
			}
			if (data.buildAddress.length > 0) {
				pieChartData.value.series[0].data = tempArr
			} else {
				pieChartData.value.series[0].data = [{
					name: "无数据",
					value: 0,
					labelShow: false
				}]
			};

			showPie.value = true;
		})
	}

	let numNew = ref(0);
	let numOld = ref(0);
	let numNo = ref(0);

	// 公告列表
	let announcementList = ref([]);

	function getAnnounceMent() {
		getannouncementList({
			pageNo: 1,
			pageSize: 3
		}).then(res => {
			let titleList = res.data.list.map(item => {
				return item.title
			})
			announcementList.value = titleList.length > 0 ? titleList : ['当前暂无公告'];
		})
	}

	// 逾期数量
	let overdueWill = ref(0);
	let overdued = ref(0);

	function getOverdue() {
		getOverdueNum().then(res => {
			let bigItem = functionList.value.find(item => item.name === "问题督办");

			let willItem = bigItem.funcList.find(item => item.name === "预期提醒");
			willItem.badgeValue = res.data.willOver ?? 0;

			let overduedItem = bigItem.funcList.find(item => item.name === "已逾期");
			overduedItem.badgeValue = res.data.isOver ?? 0;

			// overdueWill.value = res.data.willOver ?? 0;
			// overdued.value = res.data.isOver ?? 0;
		})
	}

	// 功能列表
	let functionList = ref([{
			name: '基本信息',
			permissionCode: '712',
			funcList: [{
				name: '企业信息',
				url: '/pages/enterpriseInfo/index',
				icon: iconEnterpriseInfo,
				permissionCode: '7121'
			}, {
				name: '项目台账',
				url: '/pages/projectInfo/index',
				icon: iconProjectInfo,
				permissionCode: '7111'
			}, {
				name: '储备项目',
				url: '/pages/cbProject/index',
				icon: iconReserveProject,
				permissionCode: '7112'
			}, {
				name: '联系人',
				url: '/pages/contact/index',
				icon: iconContact,
				permissionCode: '7112'
			}]
		},
		{
			name: '由项目申报单位填写',
			permissionCode: '811',
			funcList: [{
				name: '周报',
				url: '/pages/weekly/index',
				icon: iconWeekly,
				permissionCode: '8112'
			}, {
				name: '月报',
				url: '/pages/monthly/index',
				icon: iconMonthly,
				permissionCode: '8113'
			}, {
				name: '年度计划',
				url: '/pages/yearly/index',
				icon: iconYearly,
				permissionCode: '8111'
			}]
		},
		{
			name: '问题督办',
			permissionCode: '713',
			funcList: [{
				name: '问题清单',
				url: '/pages/oversee/index',
				icon: iconQuestionList,
				permissionCode: '7131'
			}, {
				name: '问题录入',
				url: '/pages/questionInput/index',
				icon: iconQuestionInput,
				permissionCode: '7132'
			}, {
				name: '问题跟踪',
				url: '/pages/questionTrace/index',
				icon: iconQuestionTrace,
				permissionCode: '7133'
			}, {
				name: '预期提醒',
				url: '/pages/overdue/index',
				icon: iconOverdueWill,
				permissionCode: '7133',
				showBadge: true,
				badgeValue: 0
			}, {
				name: '已逾期',
				url: '/pages/overdue/overdued/index',
				icon: iconOverdued,
				permissionCode: '7133',
				showBadge: true,
				badgeValue: 0
			}]
		},
		{
			name: '统计分析',
			permissionCode: '714',
			lastLine: true,
			funcList: [{
				name: '资金计划',
				url: '/pages/countAnalysis/fundPlan/index',
				icon: iconFundPlan,
				permissionCode: '7141',
			}, {
				name: '资金使用',
				url: '/pages/countAnalysis/fundUse/index',
				icon: iconFundUse,
				permissionCode: '7142'
			}, {
				name: '项目进度',
				url: '/pages/countAnalysis/projectProcess/index',
				icon: iconProjectPercents,
				permissionCode: '7143'
			}, {
				name: '重大事项',
				url: '/pages/important/index',
				icon: iconImportant,
				permissionCode: '7143'
			}, {
				name: '前期手续',
				url: '/pages/preFlow/index',
				icon: iconPreFlow,
				permissionCode: '7143'
			}]
		},
	])

	// 判断功能菜单权限
	const roles = store.getters && store.getters.permissions;

	function judgeFuncList() {
		let tempList = JSON.parse(JSON.stringify(functionList.value))
		for (let i in tempList) {
			//如果父级都没权限 直接移除
			if (!roles.includes(tempList[i].permissionCode)) {
				tempList[i].ban = true
			} else {
				let funcListSon = tempList[i].funcList
				for (let j in funcListSon) {
					if (!roles.includes(funcListSon[j].permissionCode)) {
						funcListSon[j].ban = true
					}
				}
			}
		}

		let filterList = tempList.filter(item => {
			return !item.ban
		})

		for (let i in filterList) {
			let filterListSon = filterList[i].funcList.filter(item => {
				return !item.ban
			})
			filterList[i].funcList = filterListSon
		}

		functionList.value = filterList
	}

	function goToPage(url, permissionCode) {
		if (permissionCode) {
			let havePermission = checkRoleById([permissionCode])
			if (!havePermission) return
		}

		uni.navigateTo({
			url
		})
	}

	// =============================未填写周报月报
	let popupShow = ref(false)
	let unWriteList = ref([])
	let unWriteListTotal = ref(0)

	function getUnwirteList() {
		getUnwriteReportList().then(res => {
			if (res.data.list.length > 0) {
				popupShow.value = true;
				unWriteList.value = res.data.list;
				unWriteListTotal.value = res.data.list.length;
			}
		})
	}

	function goToWriteReport(item) {
		const {
			sub_id: subId,
			month1: kj_month,
		} = item;
		let year = item.month1.substr(0, 4)
		let startDate = item.month1.substr(0, 10)
		if (item.kind === "1") { // 周报		
			uni.navigateTo({
				url: `/pages/weekly/input/index?subId=${subId}&startDate=${startDate}&year=${year}&kj_month=${kj_month}`
			})
		} else { // 月报	
			let kjMonth = kj_month.substring(0, 4) + '年' + kj_month.substring(4, 6) + '月';
			uni.navigateTo({
				url: `/pages/monthly/input/index?subId=${subId}&startDate=${startDate}&year=${year}&kj_month=${kjMonth}`
			})
		}
	}

	function popupClose() {
		popupShow.value = false
	}

	function getMessageCount() {
		getMessageNum().then(res => {
			if (res.data.count) {
				uni.setTabBarBadge({ //显示数字
					index: 1, //tabbar下标
					text: res.data.count + '' //数字
				})
			} else {
				uni.removeTabBarBadge({ //显示数字
					index: 1, //tabbar下标
				})
			}
		})
	}

	onLoad(() => {
		let now = new Date();
		projectYear.value = now.getFullYear();
		defaultIndex.value = [projectYear.value - 2000];
		judgeFuncList(); //判断权限
		getAnnounceMent(); //获取公告
		getHYFL(); //获取行业分类
		getJSDD(); //获取建设地点
		getProjectInfo(); //获取项目数据
		getOverdue(); //获取逾期数量
		getUnwirteList(); //获取未填写周报月报信息
		getMessageCount(); //获取未读消息数量
	});

	onShow(() => {
		if (popupShow.value) {
			getUnwirteList();
		}
	})
</script>

<template>
	<view class="container">
		<!-- 头 固定-->
		<view class="title-content">
			<!-- <text class="title">工作台</text> -->

			<!-- 搜索 -->
			<!-- 			<view class="search">
				<view class="search-input">
					<view class="search-icon"></view>
					<input @focus="goToPage('/pages/search/index')" placeholder="项目、领导电话..."
						placeholder-style="color: #D8D8D8;font-size:24rpx" />
				</view>

				<view class="search-focus" @click="goToPage('/pages/focus/index')">
					<view class="search-focus-icon"></view>
					关注
				</view>
			</view> -->
			<view class="title">
				<view class="title-text">工作台</view>
				<view class="title-search" @click="goToPage('/pages/search/index')"></view>
			</view>
		</view>

		<!-- <view class="top-blue"> -->
		<!-- 新增功能 -->
		<!-- 		<view class="special-funcs">
				<view class="special-func-item gov" @click="goToPage('/pages/policy/search/index')">
					<view class="special-func-title">
						<view class="special-func-name">政策文件</view>
						<u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
					</view>
				</view>

				<view class="special-func-item todo" @click="goToPage('/pages/process/index')">
					<view class="special-func-title">
						<view class="special-func-name">办事流程</view>
						<u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
					</view>
				</view>

				<view class="special-func-item images" @click="goToPage('/pages/projectImage/index')">
					<view class="special-func-title">
						<view class="special-func-name">项目形象进度</view>
						<u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
					</view>
				</view>
			</view>
 -->
		<!-- 公告 -->
		<!-- <view class="announcementList"> -->
		<!-- <view class="announcementList-text">通知公告</view> -->
		<!-- 				<u-notice-bar :text="announcementList" url="/pages/announcement/list/index" direction="column"
					mode="link" bgColor="#FFF7DC " color="#FF8D02"></u-notice-bar>
			</view> -->

		<!-- </view> -->
		<!-- 功能区 -->
		<view class="function-list">
			<view class="func-kind" v-for="item in functionList">
				<view class="func-kind-title">
					<view class="func-kind-icon"></view>
					{{item.name}}
				</view>

				<u-grid :border="false" col="4">
					<u-grid-item v-for="(listItem,listIndex) in item.funcList" :key="listIndex"
						@click="goToPage(listItem.url,listItem.permissionCode)">
						<view class="grid-item">
							<u-badge v-if="listItem.showBadge" class="badge-num" type="error" max="99"
								:value="listItem.badgeValue"></u-badge>
							<view class="grid-item-icon">
								<image :src="listItem.icon"></image>
							</view>

							{{listItem.name}}
						</view>
					</u-grid-item>
				</u-grid>
			</view>
		</view>

		<!-- 项目信息 -->
		<view class="project-info">


			<view class="project-info-select">
				<view class="choose-year" @click="yearShowChoose()">
					年度:{{projectYear}}
					<u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
				</view>

				<view class="choose-year border" @click="kindShowChoose()">
					{{projectKind ??"行业分类"}}
					<u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
				</view>

				<view class="choose-year" @click="areaShowChoose()">
					{{projectArea ??"建设地点"}}
					<u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
				</view>
			</view>
			<view class="project-num-box">
				<view class="project-num">
					<view class="project-num-title blue">
						亿元项目数(单位:个)
					</view>

					<view class="project-num-minbox">
						<view class=" project-num-item" v-for="(item,index) in projectNum" :key="index">
							<view class="project-num-value">{{item.value}}</view>
							<text style="color:#82828C">{{item.name}}</text>
						</view>
					</view>
				</view>

				<view class="project-num">
					<view class="project-num-title">
						资金使用情况(单位:万元)
						<u-icon name="arrow-right" color="#7D7D9C" size="14"></u-icon>
					</view>
					<view class="project-num-minbox">
						<view class="project-num-item" v-for="(item,index) in fundNum" :key="index">
							<view class="project-num-value">{{item.value}}</view>
							<text style="color:#82828C">{{item.name}}</text>
						</view>
					</view>
				</view>

				<view class="project-process">
					实际整体进度

					<view class="line-progress">
						<u-line-progress :percentage="fullPercents" inactiveColor="#C1CEED" activeColor="#5D5AFF" :showText="false"
							height="13"></u-line-progress>
					</view>

					<view class="percent">
						{{fullPercents}}%
					</view>
				</view>
			</view>
		</view>

		<!-- 饼图 -->
		<view class="charts">
			<view class="charts-item">
				<view class="charts-item-title">单位:个</view>

				<view class="charts-item-ring">
					<qiun-data-charts v-if="showRing" type="ring" :opts="ringOpts" :chartData="ringChartData" />
				</view>

				<view class="charts-item-description">
					<view class="charts-item-key">
						<view class="charts-item-color"></view>
						<view class="charts-item-name">新建项目</view>
					</view>
					<view class="charts-item-value">{{numNew}}</view>
				</view>

				<view class="charts-item-description">
					<view class="charts-item-key">
						<view class="charts-item-color"></view>
						<view class="charts-item-name">续建项目</view>
					</view>
					<view class="charts-item-value">{{numOld}}</view>
				</view>

				<view class="charts-item-description">
					<view class="charts-item-key">
						<view class="charts-item-color"></view>
						<view class="charts-item-name">储备项目</view>
					</view>
					<view class="charts-item-value">{{numNo}}</view>
				</view>
			</view>

			<view class="charts-item">
				<view class="charts-item-pie">
					<qiun-data-charts v-if="showPie" type="pie" :opts="pieOpts" :chartData="pieChartData" />
				</view>

				<view class="charts-item-text">建设地点</view>
				<view class="charts-item-text">投资占比</view>
			</view>
		</view>

		<!-- 逾期提醒 -->
		<!-- 	<view class="overdue">
			<view class="overdue-item" @click="goToPage('/pages/overdue/index')">
				<view class="overdue-icon overdue-will">
					<view class="badge-box">
						<u-badge class="badge-num" type="error" max="99" :value="overdueWill"></u-badge>
					</view>
				</view>

				<view class="overdue-item-text">
					预期提醒
					<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:20rpx"></u-icon>
				</view>
			</view>

			<view class="overdue-item" @click="goToPage('/pages/overdue/overdued/index')">
				<view class="overdue-icon overdued">
					<view class="badge-box">
						<u-badge class="badge-num" type="error" max="99" :value="overdued"></u-badge>
					</view>
				</view>

				<view class="overdue-item-text">
					已逾期
					<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:20rpx"></u-icon>
				</view>
			</view>
		</view>
 -->
		<!-- 周报日报年度计划 -->
		<!-- 	<view v-if="roles.includes('811')" class="report">
			<view v-if="roles.includes('8112')" class="report-item" @click="goToPage('/pages/weekly/index','8112')">
				<view class="report-icon weekly"></view>
				<view class="report-item-text">周报</view>
			</view>

			<view v-if="roles.includes('8113')" class="report-item" @click="goToPage('/pages/monthly/index','8113')">
				<view class="report-icon monthly"></view>
				<view class="report-item-text">月报</view>
			</view>

			<view v-if="roles.includes('8111')" class="report-item" @click="goToPage('/pages/yearly/index','8111')">
				<view class="report-icon yearly"></view>
				<view class="report-item-text">年度计划</view>
			</view>
		</view>-->

		<!-- 中部间隔 -->
		<view class="gap-line"></view>



		<!-- 底部间隔 -->
		<view class="gap-bottom"></view>

		<!-- 周报月报弹窗 -->
		<u-popup :show="popupShow" :round="20" @close="popupClose()" mode="center" closeable>
			<view class="remind-box">
				<text class="remind-title">提示</text>

				<view class="remind-card" v-for="(item,index) in unWriteList" :key="index">
					<view class="remind-item">
						<view class="remind-item-name">类型</view>
						<view class="remind-item-content">{{item.kind==='1'?'缺失周报':'缺失月报'}}</view>
					</view>

					<view class="remind-item">
						<view class="remind-item-name">项目名称</view>
						<view class="remind-item-content">{{item.sub_name || '--'}}</view>
					</view>

					<view class="remind-item">
						<view class="remind-item-name">说明</view>
						<view class="remind-item-content">{{item.remark || '--'}}</view>
					</view>

					<view class="remind-item">
						<view class="remind-item-btn" @click="goToWriteReport(item)">
							{{item.kind==='1'?'填写周报':'填写月报'}}
						</view>
					</view>

					<view class="remind-count">
						{{index + 1}}/{{unWriteListTotal}}
					</view>
				</view>
			</view>
		</u-popup>

		<!-- 年度选择 -->
		<u-picker :show="yearShow" :defaultIndex="defaultIndex" :columns="yearColumns" @confirm="yearClose"
			@cancel="yearClose" @close="yearClose" closeOnClickOverlay></u-picker>

		<!-- 行业选择 -->
		<u-picker :show="kindShow" :columns="kindColumns" @confirm="kindClose" @cancel="kindClose" @close="kindClose"
			closeOnClickOverlay></u-picker>

		<!-- 地点选择 -->
		<u-picker :show="areaShow" :columns="areaColumns" @confirm="areaClose" @cancel="areaClose" @close="areaClose"
			closeOnClickOverlay></u-picker>
	</view>
</template>

<style lang="scss" scoped>
	@font-face {
		font-family: TITLETEXT;
		src: url('@/font/RuiZiAoYunJingShenPinBoJianMianFei-Shan(REEJI-PinboGB-Flash)-2.ttf');
	}

	page {
		height: 100%;
		background-color: #F9FBFF;
	}

	.container {
		background: #F9FBFF;
	}

	.title-content {
		position: fixed;
		top: 0;
		left: 0;
		width: 100%;
		height: 190rpx;
		padding-top: 100rpx;
		background-color: #1763E7;
		z-index: 1;

		.title {
			position: relative;
			display: flex;
			justify-content: center;
			align-items: center;
			font-size: 36rpx;
			font-weight: 700;
			color: #FFF;

			.title-search {
				position: absolute;
				right: 3%;
				width: 46rpx;
				height: 46rpx;
				background-image: url("@/static/search.png");
				background-size: 100% 100%;
			}
		}


	}

	.search {
		display: flex;
		justify-content: space-between;
		width: 92%;
		height: 68rpx;
		margin: 32rpx auto 44rpx;

		.search-input {
			display: flex;
			align-items: center;
			width: 592rpx;
			height: 100%;
			padding: 0 30rpx;
			box-sizing: border-box;
			text-align: left;
			background-color: #fff;
			border-radius: 16rpx;

			.search-icon {
				width: 28rpx;
				height: 32rpx;
				margin-right: 26rpx;
				background-image: url('@/static/search-black.png');
				background-size: 100% 100%;
			}
		}

		.search-focus {
			width: 50rpx;
			height: 100%;
			font-size: 24rpx;
			color: #fff;
			font-weight: 400;
			line-height: 30rpx;

			.search-focus-icon {
				width: 36rpx;
				height: 32rpx;
				margin: 0 auto 10rpx;
				background-image: url('@/static/focus.png');
				background-size: 100% 100%;
			}
		}
	}

	.top-blue {
		width: 100%;
		height: 722rpx;
		padding-top: 288rpx;
		margin-bottom: 82rpx;
		background: #1763E7;
		border-radius: 0 0 40rpx 40rpx;
	}

	.announcementList {
		width: 92%;
		height: 72rpx;
		margin: 0 auto 32rpx;
		padding: 10rpx 0;
		color: #FF8D02;
		background-color: #FFF7DC;
		border-radius: 26rpx;

		.announcementList-text {
			margin-bottom: 18rpx;
			font-size: 28rpx;
		}
	}

	::v-deep .u-notice-bar {
		width: 100%;
		// padding: 0;
		border-radius: 19rpx;
	}

	::v-deep .u-notice__swiper__item__text {
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	.special-funcs {
		display: flex;
		justify-content: space-between;
		width: 92%;
		height: 210rpx;
		margin: 50rpx auto 32rpx;
		background-size: 100% 100%;

		.special-func-item {
			width: 200rpx;
			height: 210rpx;
			padding: 34rpx 18rpx;
			box-sizing: border-box;
			background-size: 100% 100%;

			.special-func-title {
				display: flex;
				justify-content: space-between;
				align-items: flex-start;
			}

			.special-func-name {
				color: #FFFFFF;
				line-height: 34rpx;
				font-size: 32rpx;
				font-family: TITLETEXT;
			}
		}

		.gov {
			background-image: url('@/static/special-gov.png');
		}

		.todo {
			background-image: url('@/static/special-todo.png');
		}

		.images {
			background-image: url('@/static/special-image.png');
		}
	}

	.project-info-select {
		display: flex;
		justify-content: space-between;
		width: calc(100% - 48rpx);
		height: 80rpx;
		margin: 0 auto;
		background-color: #fff;
		border-radius: 16rpx;
		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 0, 0, 0.03);

		.choose-year {
			flex: 1;
			display: flex;
			align-items: center;
			justify-content: center;
			font-size: 24rpx;
			font-weight: 500;
			color: #343437;
		}

		.border {
			border-left: 3rpx solid #EAF0FD;
			border-right: 3rpx solid #EAF0FD;
			;
		}
	}

	.project-info {
		width: calc(100% - 48rpx);
		min-height: 326rpx;
		margin: 0 auto 25rpx;
		border-radius: 28rpx;
		background-color: #F9FBFF;
		border: 2rpx solid #C1CEED;
		overflow: hidden;

		.project-num-box {
			width: 100%;

			.project-num {
				width: 100%;
				height: 222rpx;
				padding: 40rpx 32rpx;
				box-sizing: border-box;
				border-bottom: 3rpx solid #EAF0FD;
			}
		}

		.project-num-title {
			display: flex;
			justify-content: space-between;
			margin-bottom: 40rpx;
			font-weight: 500;
			font-size: 28rpx;
			color: #E49F15;
		}

		.blue {
			color: #1763E7
		}

		.project-num-minbox {
			display: flex;
		}

		.project-num-item {
			flex: 1;
			margin: auto 0;
			font-size: 24rpx;
			color: #343437;
			text-align: center;

			.project-num-value {
				margin-bottom: 8rpx;
				font-size: 36rpx;
				color: #343437;
				font-weight: 700;
			}
		}

		.project-process {
			display: flex;
			align-items: center;
			justify-content: space-between;
			width: 100%;
			height: 108rpx;
			padding: 0 36rpx;
			font-size: 28rpx;
			font-weight: 500;
			color: #4B17E7;

			.line-progress {
				width: 50%;
			}

			.percent {
				color: #4B17E7;
			}
		}
	}

	.charts {
		display: flex;
		justify-content: space-between;
		width: calc(100% - 48rpx);
		height: 438rpx;
		margin: 0 auto 54rpx;
		gap: 30rpx;

		.charts-item {
			width: 336rpx;
			height: 100%;
			padding: 22rpx 32rpx;
			box-sizing: border-box;
			border-radius: 40rpx;
			border: 3rpx solid rgba(200, 216, 247, 0.302);

			.charts-item-title {
				font-size: 24rpx;
				color: #343437;
			}

			.charts-item-ring {
				height: 250rpx;
				margin: 0 auto;
			}

			.charts-item-pie {
				width: 100%;
				height: 300rpx;
				margin: 0 auto;
			}

			.charts-item-text {
				width: 100%;
				text-align: center;
				font-size: 28rpx;
				font-weight: 500;
				color: #3D3D3D;
			}
		}
	}

	.charts-item-description {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
		margin: 4rpx 0;
		font-size: 24rpx;

		.charts-item-key {
			display: flex;
			align-items: center;
		}

		.charts-item-color {
			width: 24rpx;
			height: 24rpx;
			margin-right: 16rpx;
			background: #3E76FC;
			border-radius: 6rpx;
		}

		.charts-item-name {
			color: #82828C;
		}

		.charts-item-value {
			font-weight: 500;
			color: #343437;
		}
	}

	.overdue {
		display: flex;
		justify-content: space-between;
		width: 92%;
		height: 136rpx;
		margin: 25rpx auto;
		border-radius: 28rpx;
		backdrop-filter: blur(40rpx);
	}

	.overdue-item {
		display: flex;
		justify-content: space-between;
		align-items: center;
		width: 328rpx;
		height: 136rpx;
		padding: 0 28rpx 0 44rpx;
		box-sizing: border-box;
		font-size: 32rpx;
		color: #001D4F;
		font-weight: 400;
		font-family: TITLETEXT;
		background-color: #fff;
		border-radius: 28rpx;

		.overdue-icon {
			background-size: 100% 100%;
			background-position: center center;
		}

		.overdue-will {
			width: 52rpx;
			height: 53rpx;
			background-image: url('@/static/overdue-warn.png');

			.badge-num {
				position: absolute;
				top: 40rpx;
				right: -36rpx;
			}
		}

		.overdued {
			width: 61rpx;
			height: 54rpx;
			background-image: url('@/static/overdue.png');

			.badge-num {
				position: absolute;
				top: 40rpx;
				right: -36rpx
			}
		}

		.badge-box {
			position: relative;
		}

		.overdue-item-text {
			display: flex;
			align-items: center;
		}
	}

	.report {
		display: flex;
		justify-content: space-between;
		width: 92%;
		margin: 25rpx auto 0;
		padding: 0 78rpx;
		height: 164rpx;
		border-radius: 28rpx;
		background: #fff;
	}

	.report-item {
		width: 128rpx;
		height: 142rpx;
		margin: auto 0;
		text-align: center;

		.report-icon {
			width: 96rpx;
			height: 96rpx;
			margin: 0 auto;
			background-size: 100% 100%;
		}

		.weekly {
			background-image: url('@/static/icon-weekly.svg');
		}

		.monthly {
			background-image: url('@/static/icon-monthly.svg');
		}

		.yearly {
			background-image: url('@/static/icon-yearly.svg');
		}

		.report-item-text {
			margin-top: 10rpx;
			color: #000;
			font-size: 28rpx;
		}
	}

	.gap-line {
		width: 100%;
		height: 20rpx;
		background: #E8ECF4;
	}

	.function-list {
		width: 100%;
		min-height: 100rpx;
		margin: 200rpx auto 0;
		padding: 32rpx;
		box-sizing: border-box;

		.func-kind-title {
			position: relative;
			display: flex;
			align-items: center;
			width: 158rpx;
			height: 48rpx;
			padding-left: 27rpx;
			margin-bottom: 32rpx;
			font-weight: 400;
			color: #001D4F;
			line-height: 30rpx;
			font-size: 32rpx;
			font-family: TITLETEXT;
			background: linear-gradient(90deg, rgba(23, 99, 231, 0.37) 0%, rgba(255, 255, 255, 0) 100%);
			white-space: nowrap;

			.func-kind-icon {
				position: absolute;
				top: 0;
				left: -9rpx;
				width: 18rpx;
				height: 48rpx;
				margin-right: 18rpx;
				background: #1869F6;
				border-radius: 9rpx;
			}
		}

		.grid-item {
			height: 92rpx;
			margin: 18rpx 0 46rpx;
			font-size: 24rpx;
			color: #343437;

			.badge-num {
				position: absolute;
				top: 0;
				right: 25rpx;
			}

			.grid-item-icon {
				width: 56rpx;
				height: 56rpx;
				margin: 0 auto 6rpx;

				image {
					width: 100%;
					height: 100%;
				}
			}
		}

		.bottom-item {
			margin-bottom: 0;
		}
	}

	.gap-bottom {
		width: 100%;
		height: 100rpx;
	}

	.remind-box {
		width: 672rpx;
		min-height: 464rpx;
		max-height: 858rpx;
		padding: 16rpx 40rpx;
		overflow: hidden;
		overflow-y: scroll;

		.remind-title {
			color: #FF4800;
			font-size: 36rpx;
		}

		.remind-card {
			position: relative;
			min-height: 376rpx;
			padding-bottom: 32rpx;
			border-bottom: 2rpx solid #D8D8D8;

			.remind-count {
				position: absolute;
				top: 0;
				right: -40rpx;
				display: flex;
				align-items: center;
				justify-content: center;
				width: 134rpx;
				height: 64rpx;
				font-size: 32rpx;
				color: #1869F6;
				background: #CEE0FF;
				border-radius: 32rpx 0rpx 0rpx 32rpx;
			}
		}

		.remind-item {
			display: flex;
			align-items: flex-start;
			margin-top: 40rpx;
			font-size: 32rpx;

			.remind-item-name {
				min-width: 192rpx;
				color: #9E9E9E;
			}

			.remind-item-content {
				color: #343437;
				float: left;
			}

			.remind-item-btn {
				width: 100%;
				height: 84rpx;
				line-height: 84rpx;
				font-size: 36rpx;
				color: #fff;
				text-align: center;
				background: #1869F6;
				border-radius: 16rpx;
			}
		}
	}

	::v-deep .u-popup__content {
		overflow: hidden;
	}
</style>