| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721 | 
							- <script setup>
 
- 	import {
 
- 		ref,
 
- 		reactive,
 
- 		nextTick
 
- 	} from "vue"
 
- 	import {
 
- 		onLoad,
 
- 		onShow,
 
- 	} from "@dcloudio/uni-app"
 
- 	import {
 
- 		getOverdueNum
 
- 	} from "@/api/work/overdue.js"
 
- 	import {
 
- 		getannouncementList,
 
- 		getUnwriteReportList,
 
- 		getHomeStats,
 
- 		getBanner
 
- 	} from "@/api/home.js"
 
- 	import {
 
- 		getJSDDlist,
 
- 		getZJLYlist,
 
- 		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 jdglicon from "@/static/func/jdgl-icon.svg";
 
- 	import wtdbicon from "@/static/func/wtdb-icon.svg";
 
- 	import tjfxicon from "@/static/func/tjfx-icon.svg";
 
- 	import zcwjicon from "@/static/func/zcwj-icon.svg";
 
- 	import bslcicon from "@/static/func/bslc-icon.svg";
 
- 	import xxjdicon from "@/static/func/xxjd-icon.svg";
 
- 	import tzggicon from "@/static/func/tzgg-icon.svg";
 
- 	import hhdicon from "@/static/func/hhd-icon.svg";
 
- 	import zdxmicon from "@/static/func/zdxm-icon.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;
 
- 			hyflFull.push({
 
- 				key: null,
 
- 				value: "所有分类"
 
- 			});
 
- 			kindColumns.value = [res.data.list.map(item => item.value)];
 
- 			kindColumns.value[0].unshift("所有分类");
 
- 		})
 
- 	};
 
- 	// 选择地点
 
- 	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;
 
- 			jsddFull.push({
 
- 				key: null,
 
- 				value: "所有地区"
 
- 			});
 
- 			areaColumns.value = [res.data.list.map(item => item.value)];
 
- 			areaColumns.value[0].unshift("所有地区");
 
- 		})
 
- 	};
 
- 	// 资金来源
 
- 	let projectAmt = ref(null);
 
- 	let projectAmtId = null;
 
- 	let zjlyShow = ref(false);
 
- 	let zjlyColumns = ref([]);
 
- 	const zjlyShowChoose = () => {
 
- 		zjlyShow.value = true
 
- 	}
 
- 	const zjlyClose = e => {
 
- 		if (e) {
 
- 			projectAmt.value = e.value[0];
 
- 			projectAmtId = zjlyFull.find(item => item.value === projectAmt.value).key;
 
- 			// 获取最新数据
 
- 			getProjectInfo();
 
- 		}
 
- 		zjlyShow.value = false
 
- 	}
 
- 	let zjlyFull = []
 
- 	const getZJLY = () => {
 
- 		getZJLYlist().then(res => {
 
- 			zjlyFull = res.data.list;
 
- 			zjlyFull.unshift({
 
- 				key: null,
 
- 				value: "所有来源"
 
- 			});
 
- 			zjlyColumns.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 newProjectNum = ref([{
 
- 		name: "已开工",
 
- 		key: "doing",
 
- 		value: 0,
 
- 	}, {
 
- 		name: "已停工",
 
- 		key: "stop",
 
- 		value: 0,
 
- 	}, {
 
- 		name: "已完工",
 
- 		key: "end",
 
- 		value: 0,
 
- 	}, {
 
- 		name: "完工率",
 
- 		key: "rate",
 
- 		value: 0,
 
- 	}]);
 
- 	let fullPercents = ref(0);
 
- 	let pieOpts = ref({
 
- 		update: true,
 
- 		color: ["#69E4E0", "#21DCD5", "#1ACEC8", "#12B9B4", "#07A19C"],
 
- 		enableScroll: false,
 
- 		// dataLabel: true,
 
- 		legend: {
 
- 			show: false,
 
- 		},
 
- 		extra: {
 
- 			pie: {
 
- 				activeOpacity: 0.5,
 
- 				activeRadius: 10,
 
- 				offsetAngle: 0,
 
- 				customRadius: 50,
 
- 				labelWidth: 10,
 
- 				borderWidth: 1,
 
- 				offsetAngle: -90
 
- 			}
 
- 		}
 
- 	})
 
- 	let ringOpts = ref({
 
- 		update: true,
 
- 		color: ["#0A0EE4", "#F05C17", "#FFAE89"],
 
- 		enableScroll: false,
 
- 		legend: {
 
- 			show: false
 
- 		},
 
- 		title: {
 
- 			name: "300",
 
- 			fontSize: 12,
 
- 			color: "#3D3D3D"
 
- 		},
 
- 		subtitle: {
 
- 			name: "项目总数",
 
- 			fontSize: 12,
 
- 			color: "#3D3D3D"
 
- 		},
 
- 		extra: {
 
- 			ring: {
 
- 				customRadius: 50,
 
- 				ringWidth: 18,
 
- 				border: false,
 
- 				offsetAngle: -90
 
- 			}
 
- 		}
 
- 	})
 
- 	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 addreListOrginal = [];
 
- 	let pieChartData = ref({
 
- 		series: [{
 
- 			data: [{
 
- 				name: "无数据",
 
- 				value: 0,
 
- 				labelShow: false,
 
- 			}, ],
 
- 		}]
 
- 	})
 
- 	const pieClick = (e) => {
 
- 		let subjectId = addreListOrginal[e.currentIndex]?.subjectId;
 
- 		let throughObj = {
 
- 			subjectId,
 
- 			year: projectYear.value,
 
- 			indusKind: projectKindId,
 
- 			buildAddre: projectAreaId,
 
- 			zjly: projectAmtId,
 
- 			name: addreListOrginal[e.currentIndex]?.title
 
- 			// name:projectAreaId
 
- 		}
 
- 		let url = "/pages/countAnalysis/through/index?key=home&";
 
- 		for (let i in throughObj) {
 
- 			let item = null;
 
- 			item = ((throughObj[i] ?? "") === "") ? `${i}=&` : `${i}=${throughObj[i]}&`;
 
- 			url = url += item;
 
- 		}
 
- 		url = url.substr(0, url.length - 1);
 
- 		uni.navigateTo({
 
- 			url
 
- 		})
 
- 	}
 
- 	const ringClick = (e) => {
 
- 		// let subjectId = ringChartData.value.series[0].data.[e.currentIndex]?.subjectId;
 
- 		let name = ringChartData.value.series[0].data[e.currentIndex]?.name
 
- 		let throughObj = {
 
- 			year: projectYear.value,
 
- 			indusKind: projectKindId,
 
- 			buildAddre: projectAreaId,
 
- 			zjly: projectAmtId,
 
- 			queryType: '',
 
- 			name: name
 
- 		}
 
- 		if (name == '新建项目') {
 
- 			throughObj.queryType = 0
 
- 			throughObj.propKind = 1
 
- 			throughObj.otherStatus = '7,8,A'
 
- 		} else if (name == '续建项目') {
 
- 			throughObj.queryType = 0
 
- 			throughObj.propKind = 2
 
- 			throughObj.otherStatus = '7,8,A'
 
- 		} else if (name == '储备项目') {
 
- 			throughObj.queryType = 3
 
- 		}
 
- 		let url = "/pages/projectInfo/index?type=home&";
 
- 		for (let i in throughObj) {
 
- 			let item = null;
 
- 			item = ((throughObj[i] ?? "") === "") ? `${i}=&` : `${i}=${throughObj[i]}&`;
 
- 			url = url += item;
 
- 		}
 
- 		url = url.substr(0, url.length - 1);
 
- 		uni.navigateTo({
 
- 			url
 
- 		})
 
- 	}
 
- 	function newProjectClick(e) {
 
- 		let throughObj = {
 
- 			year: projectYear.value,
 
- 			indusKind: projectKindId,
 
- 			buildAddre: projectAreaId,
 
- 			zjly: projectAmtId,
 
- 			queryType: ''
 
- 		}
 
- 		if (e == 'doing') {
 
- 			throughObj.queryType = 0
 
- 			throughObj.propKind = '1'
 
- 			throughObj.status = '7'
 
- 			throughObj.name = '已开工'
 
- 		} else if (e == 'stop') {
 
- 			throughObj.queryType = 0
 
- 			throughObj.propKind = '1'
 
- 			throughObj.status = '8'
 
- 			throughObj.name = '已停工'
 
- 		} else if (e == 'end') {
 
- 			throughObj.queryType = 0
 
- 			throughObj.propKind = '1'
 
- 			throughObj.status = "A"
 
- 			throughObj.name = '已完工'
 
- 		} else if (e == 'rate') {
 
- 			return
 
- 		}
 
- 		let url = "/pages/projectInfo/index?type=home&";
 
- 		for (let i in throughObj) {
 
- 			let item = null;
 
- 			item = ((throughObj[i] ?? "") === "") ? `${i}=&` : `${i}=${throughObj[i]}&`;
 
- 			url = url += item;
 
- 		}
 
- 		url = url.substr(0, url.length - 1);
 
- 		uni.navigateTo({
 
- 			url
 
- 		})
 
- 	}
 
- 	function getProjectInfo() {
 
- 		getHomeStats({
 
- 			year: projectYear.value,
 
- 			indusKind: projectKindId,
 
- 			buildAddre: projectAreaId,
 
- 			zjly: projectAmtId
 
- 			
 
- 		}).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] ?? "--";
 
- 			}
 
- 			// 新建项目数
 
- 			for (let i in newProjectNum.value) {
 
- 				newProjectNum.value[i].value = data.buildingCount[newProjectNum.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;
 
- 			// 饼图
 
- 			addreListOrginal = data.buildAddress;
 
- 			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 bigItem = functionList.value.find(item => item.name === "通知公告");
 
- 			bigItem.badgeValue = res.data.totalCount ?? 0;
 
- 		})
 
- 	}
 
- 	// 逾期数量
 
- 	let overdueTotal = ref(0);
 
- 	let overdueWill = ref(0);
 
- 	let overdued = ref(0);
 
- 	function getOverdue() {
 
- 		getOverdueNum().then(res => {
 
- 			let bigItem = functionList.value.find(item => item.name === "问题督办");
 
- 			bigItem.badgeValue = Number((res.data.willOver ?? 0) + (res.data.isOver ?? 0));
 
- 		})
 
- 	}
 
- 	// 功能列表
 
- 	let functionList = ref([{
 
- 		name: '基本信息',
 
- 		url: '/pages/functionList/index',
 
- 		icon: iconEnterpriseInfo,
 
- 		type: 'jbxx',
 
- 		permissionCode: '711'
 
- 	}, {
 
- 		name: '进度管理',
 
- 		url: '/pages/functionList/index',
 
- 		icon: jdglicon,
 
- 		type: 'jdgl',
 
- 		permissionCode: '811'
 
- 	}, {
 
- 		name: '统计分析',
 
- 		url: '/pages/functionList/index',
 
- 		icon: tjfxicon,
 
- 		type: 'tjfx',
 
- 		permissionCode: '714'
 
- 	}, {
 
- 		name: '重点项目',
 
- 		url: '/pages/projectImportant/index',
 
- 		icon: zdxmicon,
 
- 		type: 'zdxm',
 
- 		permissionCode: '711',
 
- 	}, {
 
- 		name: '形象进度',
 
- 		url: '/pages/projectImage/index',
 
- 		icon: xxjdicon,
 
- 		// permissionCode: '7112'
 
- 	}, {
 
- 		name: '政策文件',
 
- 		url: '/pages/policy/search/index',
 
- 		icon: zcwjicon,
 
- 		// permissionCode: '7112'
 
- 	}, {
 
- 		name: '红黄灯',
 
- 		url: '/pages/light/index',
 
- 		icon: hhdicon,
 
- 		type: 'hhd',
 
- 		permissionCode: '711',
 
- 	}, {
 
- 		name: '办事流程',
 
- 		url: '/pages/process/index',
 
- 		icon: bslcicon,
 
- 		// permissionCode: '7112'
 
- 	}, {
 
- 		name: '问题督办',
 
- 		url: '/pages/functionList/index',
 
- 		icon: wtdbicon,
 
- 		type: 'wtdb',
 
- 		permissionCode: '713',
 
- 		showBadge: true,
 
- 		badgeValue: 0,
 
- 	}, {
 
- 		name: '通知公告',
 
- 		url: '/pages/announcement/list/index',
 
- 		icon: tzggicon,
 
- 		// permissionCode: '7112',
 
- 		showBadge: true,
 
- 		badgeValue: 0,
 
- 	}])
 
- 	// 判断功能菜单权限
 
- 	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, type) {
 
- 		if (permissionCode) {
 
- 			let havePermission = checkRoleById([permissionCode])
 
- 			if (!havePermission) return
 
- 		}
 
- 		uni.$u.route({
 
- 			url: url,
 
- 			params: {
 
- 				type: type || null
 
- 			}
 
- 		})
 
- 	}
 
- 	// =============================未填写周报月报
 
- 	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下标
 
- 				})
 
- 			}
 
- 		})
 
- 	}
 
- 	function projectgoto(e) {
 
- 		let params = {
 
- 			indusKind: projectKindId,
 
- 			subjectId: projectAreaId,
 
- 			zjly: projectAmtId,
 
- 			year: projectYear.value,
 
- 			startAmt: '',
 
- 			endAmt: '',
 
- 			type: 'home',
 
- 			queryType: 0
 
- 		}
 
- 		
 
- 		if (e.key == 'numAmt1') {
 
- 			params.startAmt = 0
 
- 			params.endAmt = 10000
 
- 			params.name = '亿元以下'
 
- 		} else if (e.key == 'numAmt2') {
 
- 			params.startAmt = 10000
 
- 			params.endAmt = 50000
 
- 			params.name = '1-5亿'
 
- 		} else if (e.key == 'numAmt3') {
 
- 			params.startAmt = 50000
 
- 			params.endAmt = 100000
 
- 			params.name = '5-10亿'
 
- 		} else if (e.key == 'numAmt4') {
 
- 			params.startAmt = 100000
 
- 			params.endAmt = null
 
- 			params.name = '10亿以上'
 
- 		}
 
- 		uni.$u.route({
 
- 			url: '/pages/projectInfo/index',
 
- 			params: params
 
- 		})
 
- 	}
 
- 	function amtgoto(e) {
 
- 		let params = {
 
- 			indusKind: projectKindId,
 
- 			subjectId: projectAreaId,
 
- 			zjly: projectAmtId,
 
- 			isCurrMonth: null,
 
- 			year: null,
 
- 			key: null
 
- 		}
 
- 		if (e.key == 'amtJh') {
 
- 			params.year = projectYear.value
 
- 			params.key = 'year'
 
- 			params.name = '年度计划'
 
- 			uni.$u.route({
 
- 				url: '/pages/countAnalysis/through/index',
 
- 				params: params
 
- 			})
 
- 		} else if (e.key == "monthPlan") {
 
- 			params.isCurrMonth = true
 
- 			params.key = 'mothAmt'
 
- 			params.name = '当月计划'
 
- 			uni.$u.route({
 
- 				url: '/pages/countAnalysis/through/index',
 
- 				params: params
 
- 			})
 
- 		} else if (e.key == 'amtSj') {
 
- 			params.year = projectYear.value
 
- 			params.key = 'ndjh'
 
- 			params.name = '年度完成'
 
- 			uni.$u.route({
 
- 				url: '/pages/countAnalysis/through/index',
 
- 				params: params
 
- 			})
 
- 		}
 
- 	}
 
- 	//轮播图
 
- 	let bannerList = reactive([])
 
- 	async function getBannerList() {
 
- 		getBanner().then(res => {
 
- 			bannerList = res.data.pictureList
 
- 		})
 
- 	}
 
- 	function bannerClick(e) {
 
- 		let result = {}
 
- 		for (let i = 0; i < bannerList.length; i++) {
 
- 			if (i == e) {
 
- 				result = bannerList[i]
 
- 			}
 
- 		}
 
- 		nextTick(() => {
 
- 			// uni.navigateTo({
 
- 			// 	url: `/pages/policy/detail/index?title=${result.title}&id=${result.id}`
 
- 			// })
 
- 			uni.$u.route({
 
- 				url: '/pages/policy/detail/index',
 
- 				params: {
 
- 					title: result.title,
 
- 					id: result.id
 
- 				}
 
- 			})
 
- 		})
 
- 	}
 
- 	onLoad(() => {
 
- 		let now = new Date();
 
- 		projectYear.value = now.getFullYear();
 
- 		defaultIndex.value = [projectYear.value - 2000];
 
- 		// judgeFuncList(); //判断权限
 
- 		getAnnounceMent(); //获取公告
 
- 		getHYFL(); //获取行业分类
 
- 		getJSDD(); //获取建设地点
 
- 		getZJLY(); // 获取资金来源
 
- 		getProjectInfo(); //获取项目数据
 
- 		getOverdue(); //获取逾期数量
 
- 		// getUnwirteList(); //获取未填写周报月报信息
 
- 		getBannerList(); //获取轮播图数据
 
- 		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 @click="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>
 
- 					<text class="text">关注</text>
 
- 				</view>
 
- 			</view>
 
- 		</view>
 
- 		<view class="top-blue">
 
- 			<view class="banner-box">
 
- 				<u-swiper :list="bannerList" indicator indicatorMode="line" keyName='coverImg' circular radius='20rpx'
 
- 					height="254rpx" @click="bannerClick"></u-swiper>
 
- 			</view>
 
- 			<view class="function-list">
 
- 				<u-grid :border="false" col="5">
 
- 					<u-grid-item v-for="(item,index) in functionList" :key="index"
 
- 						@click="goToPage(item.url,item.permissionCode,item.type)">
 
- 						<view class="grid-item">
 
- 							<u-badge v-if="item.showBadge" class="badge-num" type="error" max="99" :value="item.badgeValue"></u-badge>
 
- 							<view class="grid-item-icon">
 
- 								<image :src="item.icon"></image>
 
- 							</view>
 
- 							{{item.name}}
 
- 						</view>
 
- 					</u-grid-item>
 
- 				</u-grid>
 
- 			</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 border" @click="areaShowChoose()">
 
- 						{{projectArea ??"建设地点"}}
 
- 						<u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
 
- 					</view>
 
- 					<view class="choose-year border" @click="zjlyShowChoose()">
 
- 						<view class="choose-year-text">{{projectAmt ??"资金来源"}}</view>
 
- 						<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-box-item text-color1">
 
- 						<view class="item-title">
 
- 							亿元项目数(个)
 
- 						</view>
 
- 						<view class="item-box" v-for="(item,index) in projectNum" :key="index" @click="projectgoto(item)">
 
- 							<view class="name">
 
- 								{{item.name}}
 
- 							</view>
 
- 							<view class="num">
 
- 								{{item.value}}
 
- 							</view>
 
- 						</view>
 
- 					</view>
 
- 					<view class="project-num-box-item text-color2">
 
- 						<view class="item-title">
 
- 							资金投资情况(万元)
 
- 						</view>
 
- 						<view class="item-box high-gap" v-for="(item,index) in fundNum" :key="index" @click="amtgoto(item)">
 
- 							<view class="name">
 
- 								{{item.name}}
 
- 							</view>
 
- 							<view class="num">
 
- 								{{item.value}}
 
- 							</view>
 
- 						</view>
 
- 						<!-- <view class="item-box-horizon">
 
-             	<view class="item-box" v-for="(item,index) in fundNum" :key="index"
 
-             		@click="amtgoto(item)">
 
-             		<view class="name">{{item.name}}</view>
 
-             		<view class="num">{{item.value}}</view>
 
-             	</view>
 
-             </view> -->
 
- 					</view>
 
- 				</view>
 
- 				<view class="project-num-box">
 
- 					<view class="project-num-box-item text-color3">
 
- 						<view class="item-title">
 
- 							新建项目数(个)
 
- 						</view>
 
- 						<view class="item-box-horizon">
 
- 							<view class="item-box" v-for="(item,index) in newProjectNum" :key="index"
 
- 								@click="newProjectClick(item.key)">
 
- 								<view class="name">{{item.name}}</view>
 
- 								<view class="num">{{item.value}}{{item.key === "rate" ? "%" : ""}}</view>
 
- 							</view>
 
- 						</view>
 
- 					</view>
 
- 				</view>
 
- 				<view class="project-process">
 
- 					<view class="title">实际整体进度</view>
 
- 					<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 class="charts">
 
- 					<view class="charts-item" style="width: 40%;">
 
- 						<view class="charts-item-title">
 
- 							项目个数
 
- 						</view>
 
- 						<view class="charts-item-ring">
 
- 							<view class="pie-back">
 
- 								<image src="@/static/echarts-pie.png" mode=""></image>
 
- 							</view>
 
- 							<qiun-data-charts v-if="showRing" type="ring" :opts="ringOpts" :chartData="ringChartData" :ontouch="true"
 
- 								@getIndex="ringClick" />
 
- 						</view>
 
- 						<view class="charts-item-description">
 
- 							<view class="charts-item-key">
 
- 								<view class="charts-item-color" style="border-color: #0A0EE4;"></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" style="border-color: #F05C17;"></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" style="border-color: #FFAE89;"></view>
 
- 								<view class="charts-item-name">储备项目</view>
 
- 							</view>
 
- 							<view class="charts-item-value">{{numNo}}</view>
 
- 						</view>
 
- 					</view>
 
- 					<view class="charts-item" style="width: 60%; padding: 0 20rpx; box-sizing: border-box;">
 
- 						<view class="charts-item-title">
 
- 							建设地点实际投资占比
 
- 						</view>
 
- 						<view class="charts-item-pie">
 
- 							<qiun-data-charts v-if="showPie" type="pie" :opts="pieOpts" :chartData="pieChartData"
 
- 								tooltipFormat="tooltipDemo1" :ontouch="true" @getIndex="pieClick" />
 
- 						</view>
 
- 						<view class="charts-item-description" v-for="(item,index) in pieChartData.series[0].data" :key="index">
 
- 							<view class="charts-item-key">
 
- 								<view class="charts-item-color" :style="{borderColor:pieOpts.color[index]}"></view>
 
- 								<view class="charts-item-name">{{item.name ?? "--"}}</view>
 
- 							</view>
 
- 							<view class="charts-item-value">{{item.value ?? "--"}}%</view>
 
- 						</view>
 
- 					</view>
 
- 				</view>
 
- 			</view>
 
- 			<!-- 底部间隔 -->
 
- 			<view class="gap-bottom"></view>
 
- 		</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>
 
- 		<!-- 资金来源 -->
 
- 		<u-picker :show="zjlyShow" :columns="zjlyColumns" @confirm="zjlyClose" @cancel="zjlyClose" @close="zjlyClose"
 
- 			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: #EAF1FF;
 
- 	}
 
- 	.text-color1 {
 
- 		color: #003FA8;
 
- 		background: #F0F4FC;
 
- 		border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 	}
 
- 	.text-color2 {
 
- 		color: #8F5F00;
 
- 		background: #FFFAF0;
 
- 		border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 	}
 
- 	// .text-color2 {
 
- 	// 	width: 100% !important;
 
- 	// 	height: 140rpx !important;
 
- 	// 	margin-top: 12rpx;
 
- 	// 	padding: 14rpx 15rpx 20rpx 15rpx;
 
- 	// 	color: #8F5F00;
 
- 	// 	background: #FFFAF0;
 
- 	// 	border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 	// }
 
- 	.text-color3 {
 
- 		width: 100% !important;
 
- 		height: 140rpx !important;
 
- 		margin-top: 12rpx;
 
- 		padding: 14rpx 15rpx 20rpx 15rpx;
 
- 		color: #4E00A8;
 
- 		background: #F8F3FF;
 
- 		border-radius: 16rpx;
 
- 	}
 
- 	.container {
 
- 		background: #EAF1FF;
 
- 	}
 
- 	.title-content {
 
- 		position: fixed;
 
- 		top: 0;
 
- 		left: 0;
 
- 		width: 100%;
 
- 		height: 258rpx;
 
- 		padding-top: 104rpx;
 
- 		text-align: center;
 
- 		background-color: #1763E7;
 
- 		z-index: 1;
 
- 		.title {
 
- 			font-size: 36rpx;
 
- 			font-weight: 700;
 
- 			color: #FFF;
 
- 		}
 
- 	}
 
- 	.search {
 
- 		display: flex;
 
- 		justify-content: space-between;
 
- 		width: 92%;
 
- 		height: 82rpx;
 
- 		margin: auto;
 
- 		padding: 25rpx 0 25rpx 0;
 
- 		.search-input {
 
- 			display: flex;
 
- 			align-items: center;
 
- 			width: 80%;
 
- 			height: 52rpx;
 
- 			padding: 0 30rpx;
 
- 			box-sizing: border-box;
 
- 			text-align: left;
 
- 			background-color: #fff;
 
- 			border-radius: 28rpx 28rpx 28rpx 28rpx;
 
- 			.search-icon {
 
- 				width: 28rpx;
 
- 				height: 32rpx;
 
- 				margin-right: 26rpx;
 
- 				background-image: url('@/static/search-black.svg');
 
- 				background-size: 100% 100%;
 
- 			}
 
- 		}
 
- 		.search-focus {
 
- 			display: flex;
 
- 			align-items: center;
 
- 			justify-content: flex-end;
 
- 			width: 19%;
 
- 			height: 52rpx;
 
- 			background: linear-gradient(270deg, #63B4FF 29%, rgba(23, 99, 230, 0.32) 88%);
 
- 			border-radius: 28rpx 28rpx 28rpx 28rpx;
 
- 			.search-focus-icon {
 
- 				width: 36rpx;
 
- 				height: 32rpx;
 
- 				margin-right: 10rpx;
 
- 				background-image: url('@/static/focus.png');
 
- 				background-size: 100% 100%;
 
- 			}
 
- 			.text {
 
- 				margin-right: 20rpx;
 
- 				font-size: 28rpx;
 
- 				white-space: nowrap;
 
- 				color: #FFFFFF;
 
- 			}
 
- 		}
 
- 	}
 
- 	.top-blue {
 
- 		width: 100%;
 
- 		height: 702rpx;
 
- 		padding-top: 260rpx;
 
- 		margin-bottom: 82rpx;
 
- 		background: linear-gradient(180deg, #1763E7 60%, rgba(234, 241, 255, 0) 93%);
 
- 		border-radius: 0 0 40rpx 40rpx;
 
- 		.banner-box {
 
- 			width: 92%;
 
- 			height: 254rpx;
 
- 			margin: auto;
 
- 		}
 
- 	}
 
- 	.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;
 
- 		align-items: center;
 
- 		width: 92%;
 
- 		height: 80rpx;
 
- 		background-color: #fff;
 
- 		margin: auto;
 
- 		border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 		.lines {
 
- 			height: 46rpx;
 
- 			border-right: #D7DDEA;
 
- 		}
 
- 		.choose-year {
 
- 			flex: 1;
 
- 			display: flex;
 
- 			align-items: center;
 
- 			justify-content: center;
 
- 			font-size: 24rpx;
 
- 			font-weight: 500;
 
- 			color: #343437;
 
- 			.choose-year-text {
 
- 				width: 3rem;
 
- 				overflow: hidden;
 
- 				text-overflow: ellipsis;
 
- 				white-space: nowrap;
 
- 			}
 
- 		}
 
- 		.border {
 
- 			border-left: 3rpx solid #EAF0FD;
 
- 		}
 
- 	}
 
- 	.project-info {
 
- 		width: 92%;
 
- 		min-height: 326rpx;
 
- 		margin: auto;
 
- 		margin-top: 20rpx;
 
- 		border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 		background-color: #FFFFFF;
 
- 		padding-bottom: 20rpx;
 
- 		.project-num-box {
 
- 			display: flex;
 
- 			justify-content: space-between;
 
- 			align-items: center;
 
- 			width: 92%;
 
- 			margin: auto;
 
- 			.project-num-box-item {
 
- 				width: 48%;
 
- 				height: 262rpx;
 
- 				padding: 20rpx 15rpx 20rpx 15rpx;
 
- 				.item-title {
 
- 					font-size: 28rpx;
 
- 					font-weight: 500;
 
- 					font-family: OPPOSans-M;
 
- 				}
 
- 				.item-box {
 
- 					display: flex;
 
- 					justify-content: space-between;
 
- 					align-items: center;
 
- 					padding: 5rpx 0 5rpx 0;
 
- 					.name {
 
- 						font-size: 24rpx;
 
- 						font-weight: 400;
 
- 					}
 
- 					.num {
 
- 						font-size: 28rpx;
 
- 						font-weight: 500;
 
- 						font-family: OPPOSans-M;
 
- 					}
 
- 				}
 
- 				.high-gap {
 
- 					padding: 5rpx 0 16rpx 0;
 
- 				}
 
- 			}
 
- 		}
 
- 		.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: 92%;
 
- 			margin: auto;
 
- 			height: 88rpx;
 
- 			font-size: 28rpx;
 
- 			font-weight: 500;
 
- 			color: #4B17E7;
 
- 			.line-progress {
 
- 				width: 58%;
 
- 			}
 
- 			.title {
 
- 				font-size: 28rpx;
 
- 				font-weight: 500;
 
- 				font-family: OPPOSans-M;
 
- 				color: #001643;
 
- 			}
 
- 			.percent {
 
- 				font-weight: 500;
 
- 				font-size: 28rpx;
 
- 				font-family: OPPOSans-M;
 
- 				color: #001643;
 
- 			}
 
- 		}
 
- 	}
 
- 	.item-box-horizon {
 
- 		display: flex;
 
- 		align-items: center;
 
- 		justify-content: space-evenly;
 
- 		width: 100%;
 
- 		margin-top: 4rpx;
 
- 		.item-box {
 
- 			display: block !important;
 
- 			text-align: center;
 
- 		}
 
- 	}
 
- 	.charts {
 
- 		display: flex;
 
- 		justify-content: space-between;
 
- 		width: 92%;
 
- 		margin: auto;
 
- 		.charts-item {
 
- 			height: 100%;
 
- 			box-sizing: border-box;
 
- 			border-radius: 40rpx;
 
- 			// border: 3rpx solid rgba(200, 216, 247, 0.302);
 
- 			.charts-item-title {
 
- 				margin: auto;
 
- 				text-align: center;
 
- 				font-size: 28rpx;
 
- 				font-weight: 500;
 
- 				color: #001643;
 
- 				font-family: OPPOSans-M;
 
- 			}
 
- 			.charts-item-ring {
 
- 				position: relative;
 
- 				height: 250rpx;
 
- 				margin: 0 auto;
 
- 				.pie-back {
 
- 					position: absolute;
 
- 					left: 50%;
 
- 					top: 10rpx;
 
- 					transform: translate(-49%);
 
- 					image {
 
- 						width: 268rpx;
 
- 						height: 268rpx;
 
- 						z-index: 0;
 
- 					}
 
- 				}
 
- 			}
 
- 			.charts-item-pie {
 
- 				width: 100%;
 
- 				// height: 400rpx;
 
- 				height: 250rpx;
 
- 				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: 20rpx 0;
 
- 		font-size: 24rpx;
 
- 		.charts-item-key {
 
- 			display: flex;
 
- 			align-items: center;
 
- 		}
 
- 		.charts-item-color {
 
- 			width: 26rpx;
 
- 			height: 26rpx;
 
- 			margin-right: 16rpx;
 
- 			border-radius: 50%;
 
- 			border: 6rpx solid #fff;
 
- 		}
 
- 		.charts-item-name {
 
- 			font-size: 24rpx;
 
- 			color: #001643;
 
- 		}
 
- 		.charts-item-value {
 
- 			font-weight: 500;
 
- 			font-size: 24rpx;
 
- 			color: #001643;
 
- 		}
 
- 	}
 
- 	.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 {
 
- 		margin: 20rpx auto;
 
- 		border-radius: 16rpx 16rpx 16rpx 16rpx;
 
- 		background: #FFFFFF;
 
- 		height: 278rpx;
 
- 		width: 92%;
 
- 		.grid-item {
 
- 			height: 62rpx;
 
- 			margin: 18rpx 0 46rpx;
 
- 			font-size: 28rpx;
 
- 			color: #343437;
 
- 			font-weight: 400;
 
- 			.badge-num {
 
- 				position: absolute;
 
- 				top: 5rpx;
 
- 				right: 25rpx;
 
- 			}
 
- 			.grid-item-icon {
 
- 				width: 60rpx;
 
- 				height: 60rpx;
 
- 				margin: 0 auto 6rpx;
 
- 				image {
 
- 					width: 100%;
 
- 					height: 100%;
 
- 				}
 
- 			}
 
- 		}
 
- 		.bottom-item {
 
- 			margin-bottom: 0;
 
- 		}
 
- 	}
 
- 	.gap-bottom {
 
- 		width: 100%;
 
- 		height: 150rpx;
 
- 	}
 
- 	.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>
 
 
  |