| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029 | <script setup>	import {		ref,		reactive	} from "vue";	import {		onLoad,	} from "@dcloudio/uni-app";	import {		getJSDDlist,		getXMLXlist,		getHYFLlist,		getZJLYlist,	} from "@/api/work/projectInfo.js";	import {		getXMXZlist,	} from "@/api/home.js";	import {		getIndustyRateValueData,		getIndustyRateAmtData,		getAreaRateData,		getYearRateData	} from "@/api/work/analysis.js";	// 年度	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) searchInfo.year = e.value[0];		yearShow.value = false;	}	// 建设地点	let jsddFull = [];	let jsddColumns = ref([]);	const getJSDD = function() {		getJSDDlist().then(res => {			jsddFull = res.data.list;			jsddColumns.value = [res.data.list.map(item => item.value)];		})	};	let jsddShow = ref(false);	const jsddShowChoose = function() {		jsddShow.value = true;	}	const jsddClose = function(e) {		if (e) searchInfo.subjectId = e.value[0];		jsddShow.value = false;	}	// 项目类型	let xmlxFull = [];	let xmlxColumns = ref([]);	const getXMLX = function() {		getXMLXlist().then(res => {			xmlxFull = res.data.list;			xmlxColumns.value = [res.data.list.map(item => item.value)];		})	};	let xmlxShow = ref(false);	const xmlxShowChoose = function() {		xmlxShow.value = true;	}	const xmlxClose = function(e) {		if (e) searchInfo.kind = e.value[0];		xmlxShow.value = false;	}	// 项目性质	let xmxzFull = [];	let xmxzColumns = ref([]);	const getXMXZ = () => {		getXMXZlist().then(res => {			xmxzFull = res.data.list;			xmxzFull.unshift({				key: null,				value: "所有性质"			});			xmxzFull = xmxzFull.filter(item => item.value !== "储备项目");			xmxzColumns.value = [xmxzFull.map(item => item.value)];		})	};	let xmxzShow = ref(false);	const xmxzShowChoose = () => {		xmxzShow.value = true;	}	const xmxzClose = e => {		if (e) searchInfo.propKind = e.value[0];		xmxzShow.value = false;	}	// 是否隐藏	let hideFull = [{		key: null,		value: "所有"	}, {		key: 1,		value: "隐藏"	}, {		key: 0,		value: "正常"	}, ];	let hideColumns = ref([		["所有", "隐藏", "正常"]	])	let hideShow = ref(false);	const hideShowChoose = function() {		hideShow.value = true;	}	const hideClose = function(e) {		if (e) searchInfo.isHide = e.value[0];		hideShow.value = false;	}	// 行业分类	let hyflFull = []	let hyflColumns = ref([])	const getHYFL = () => {		getHYFLlist().then(res => {			hyflFull = res.data.list;			hyflFull.unshift({				key: null,				value: "所有分类"			});			hyflColumns.value = [res.data.list.map(item => item.value)];		})	}	let hyflShow = ref(false)	const hyflShowChoose = () => {		hyflShow.value = true	}	const hyflClose = e => {		if (e) searchInfo.hyfl = e.value[0];		hyflShow.value = false	}	// 亿元项目	let yTypeFull = [{			key: null,			value: "全部"		},		{			key: 1,			value: "亿元以下"		},		{			key: 2,			value: "1-5亿"		},		{			key: 3,			value: "5-10亿"		},		{			key: 4,			value: "10亿以上"		},	]	let yTypeColumns = ref([		["全部", "亿元以下", "1-5亿", "5-10亿", "10亿以上"]	])	let yTypeShow = ref(false)	const yTypeShowChoose = () => {		yTypeShow.value = true	}	const yTypeClose = e => {		if (e) searchInfo.yType = e.value[0];		yTypeShow.value = false	}	// 取值模式	let modeFull = [{			key: 1,			value: "实际值"		},		{			key: 2,			value: "预测值"		}	]	let modeColumns = ref([		["实际值", "预测值"]	])	let modeShow = ref(false)	const modeShowChoose = () => {		modeShow.value = true	}	const modeClose = e => {		if (e) searchInfo.mode = e.value[0];		modeShow.value = false	}	// 资金来源	let zjlyFull = []	let zjlyColumns = ref([])	const getZJLY = () => {		getZJLYlist().then(res => {			zjlyFull = res.data.list;			zjlyFull.unshift({				key: null,				value: "所有来源"			});			zjlyColumns.value = [res.data.list.map(item => item.value)];		})	}	let zjlyShow = ref(false)	const zjlyShowChoose = () => {		zjlyShow.value = true	}	const zjlyClose = e => {		if (e) searchInfo.zjly = e.value[0];		zjlyShow.value = false	}	// 同比/环比	let yearOnYearFull = [{		key: 1,		value: "同比"	}, {		key: 2,		value: "环比"	}];	let yearOnYearColumns = ref([		["同比", "环比"]	])	let yearOnYearShow = ref(false);	const yearOnYearShowChoose = function() {		yearOnYearShow.value = true;	}	const yearOnYearClose = function(e) {		if (e) searchInfo.kindType = e.value[0];		yearOnYearShow.value = false;	}	// 页面主题	let titleMark = null;	let titleText = ref("");	let titleEnum = {		"industyRateValue": {			text: "行业占比分析-数量",			showArray: [{				text: "行业分类",				key: "title",				width: "200rpx"			}, {				text: "项目数量",				key: "num",				width: "100rpx",				through: true,			}, {				text: "占比(%)",				key: "rage",				width: "100rpx"			}],			emitFunction: function(data) {				getIndustryRateValue(data);			}		},		"industyRateAmt": {			text: "行业占比分析-金额",			showArray: [{				text: "行业分类",				key: "title",				width: "200rpx"			}, {				text: "投资金额(万元)",				key: "num",				width: "100rpx",				through: true,			}, {				text: "占比(%)",				key: "rage",				width: "100rpx"			}],			emitFunction: function(data) {				getIndustryAmtValue(data);			}		},		"areaRate": {			text: "区县占比分析",			showArray: [{					text: "建设地点",					key: "jsddName",					width: "150rpx",					through: true,				},				// {				// 	text: "项目数",				// 	key: "totalNum",				// 	width: "150rpx",				// },				{					text: "投资完成率(%)",					key: "amtRate",					width: "180rpx",					through: true,				}, {					text: "开工率(%)",					key: "beginRate",					width: "150rpx",					through: true,				}			],			emitFunction: function(data) {				getAreaRateValue(data);			}		},		"yearRate": {			text: "年度投资分析",			showArray: [{				text: "月份",				key: "strmonth",			}, {				text: "上年度投资(万元)",				key: "amt_last1",			}, {				text: "本年度投资(万元)",				key: "amt_cur",			}, {				text: "增速(%)",				key: "num_bl",			}],			emitFunction: function(data) {				getYearRateValue(data)			}		},	};	// 展示列表	let showList = ref([]);	const combineshowList = () => {		let chooseList = titleEnum[titleMark].showArray;		if (titleMark === "yearRate") {			if (searchInfo.kindType === "同比") {				chooseList = [{					text: "月份",					key: "strmonth",					width: "100rpx"				}, {					text: "上年度投资(万元)",					key: "amt_last1",					width: "200rpx"				}, {					text: "本年度投资(万元)",					key: "amt_cur",					width: "200rpx"				}, {					text: "增速(%)",					key: "num_bl",					width: "100rpx"				}]			} else { //环比				chooseList = [{					text: "月份",					key: "strmonth",					width: "100rpx"				}, {					text: "上月度投资(万元)",					key: "amt_last1",					width: "200rpx"				}, {					text: "本月度投资(万元)",					key: "amt_cur",					width: "200rpx"				}, {					text: "增速(%)",					key: "num_bl",					width: "100rpx"				}]			}		}		let tempArr = [];		for (let i in chooseList) {			tempArr.push(Object.assign({				value: null			}, chooseList[i]));		}		showList.value = tempArr;	}	// 搜索内容		let listTotal = ref(0);	let itemList = ref([]);	let searchInfo = reactive({		year: null, //年度		subjectId: null, //建设地点		kind: null, //项目类型		propKind: null, //项目性质		isHide: "所有", //是否隐藏,		hyfl: null, //行业分类,		yType: null, //亿元项目		mode: "实际值", //取值模式,		kindType: "同比", //同比/环比	});	const getList = () => {		let params = {			year: searchInfo.year, //年度			subjectId: jsddFull.find(item => item.value === searchInfo.subjectId)?.key, //建设地点			kind: xmlxFull.find(item => item.value === searchInfo.kind)?.key, //项目类型			propKind: xmxzFull.find(item => item.value === searchInfo.propKind)?.key, //项目性质			isHide: hideFull.find(item => item.value === searchInfo.isHide)?.key, //是否隐藏			hyfl: hyflFull.find(item => item.value === searchInfo.hyfl)?.key, //行业分类			yType: yTypeFull.find(item => item.value === searchInfo.yType)?.key, //亿元项目			mode: modeFull.find(item => item.value === searchInfo.mode)?.key, //取值模式			zjly: zjlyFull.find(item => item.value === searchInfo.zjly)?.key, //资金来源			kindType: yearOnYearFull.find(item => item.value === searchInfo.kindType)?.key, //同比/环比		};		if (titleMark === "yearRate") combineshowList()		titleEnum[titleMark].emitFunction(params);	}	// 行业占比分析-数量	const getIndustryRateValue = params => {		getIndustyRateValueData(params).then(res => {			itemList.value = res.data.list;			listTotal.value = res.data.list.length;			createPieData(res.data.list);		})	}	// 行业占比分析-金额	const getIndustryAmtValue = params => {		getIndustyRateAmtData(params).then(res => {			itemList.value = res.data.list;			listTotal.value = res.data.list.length;			createPieData(res.data.list);		})	}	// 区县占比分析	const getAreaRateValue = params => {		getAreaRateData(params).then(res => {			itemList.value = res.data.list;			listTotal.value = res.data.list.length;			createPieData(res.data.list, "jsddName", "totalNum", true);		})	}	// 年度投资分析	const getYearRateValue = params => {		getYearRateData(params).then(res => {			itemList.value = res.data.list;			listTotal.value = res.data.list.length;			createLineData(res.data.list);		})	}	// 穿透	const goToProjectList = (item, keyword) => {		// 判断是否有操作		let chooseList = titleEnum[titleMark].showArray;		let haveThroughOption = chooseList.find(item => item.key === keyword)?.through;		if (!haveThroughOption) return;		let params = {			year: searchInfo.year, //年度			subjectId: jsddFull.find(item => item.value === searchInfo.subjectId)?.key, //建设地点			kind: xmlxFull.find(item => item.value === searchInfo.kind)?.key, //项目类型			propKind: xmxzFull.find(item => item.value === searchInfo.propKind)?.key, //项目性质			isHide: hideFull.find(item => item.value === searchInfo.isHide)?.key, //是否隐藏			zbCheck: 1		};		Object.keys(params).forEach((key) => {			let value = params[key];			if ((value ?? "") === "") delete params[key]		})		if (titleMark === "industyRateValue" || titleMark === "industyRateAmt") {			params.indusKind = item.indusKind;			params.queryType = 0;		}		if (titleMark === "areaRate") {			params.subjectId = item.subjectId;			params.queryType = 0;		}		let url = "/pages/analysis/projectList/index?";		for (let i in params) {			let item = null			if (!((params[i] ?? "") === "")) {				item = `${i}=${params[i]}&`;			} else {				item = `${i}=&`;			}			url = url += item;		};		uni.navigateTo({			url		})	}	// 饼图	let showPie = ref(false);	const pieOpts = {		color: ["#90B5F4", "#6497EE", "#1869F6", "#FF8229", "#FFAC71"],		padding: [0, 5, 0, 5],		enableScroll: false,		legend: {			show: false		},		extra: {			pie: {				activeOpacity: 0.5,				activeRadius: 10,				offsetAngle: 0,				border: false,				offsetAngle: -90			}		}	}	let pieChartData = ref({		series: [{			data: []		}]	})	const createPieData = (list, name = "title", unit = "num", isDoublePie = false) => {		// 饼状图数据		let pieList = []		for (let i in list) {			pieList.push({				"name": list[i][name],				"value": list[i][unit] ?? 0,				"labelShow": false			})		}		pieChartData.value.series[0].data = pieList;		if (isDoublePie) {			createDoublePieData(list);		} else {			showPie.value = true;		}	}	// 双饼	let itemListOrderByAmt = ref([])	let showDoublePie = ref(false);	const pieDoubleOpts = {		color: ["#90B5F4", "#6497EE", "#1869F6", "#FF8229", "#FFAC71"],		padding: [0, 5, 0, 5],		enableScroll: false,		legend: {			show: false		},		extra: {			pie: {				activeOpacity: 0.5,				activeRadius: 10,				offsetAngle: 0,				border: false,				offsetAngle: -90,				customRadius: 50,			}		}	}	let doublePieChartData = ref({		series: [{			data: []		}]	})	const createDoublePieData = list => {		itemListOrderByAmt.value = JSON.parse(JSON.stringify(itemList.value));		itemListOrderByAmt.value.sort(sortByValue('amt', -1));		let pieList = [];		for (let i in itemListOrderByAmt.value) {			pieList.push({				"name": itemListOrderByAmt.value[i].jsddName,				"value": itemListOrderByAmt.value[i].amt ?? 0,				"labelShow": false			})		}		doublePieChartData.value.series[0].data = pieList;		showDoublePie.value = true;	}	const sortByValue = (attr, rev) => {		if (rev == undefined) {			rev = 1		} else {			(rev) ? 1: -1;		}		return function(a, b) {			a = a[attr];			b = b[attr];			if (a < b) {				return rev * -1			}			if (a > b) {				return rev * 1			}			return 0;		}	}	// 折线图	let showLine = ref(false);	const LineOpts = {		color: ["#1869F6", "#000"],		touchMoveLimit: 24,		enableScroll: true,		dataLabel: false,		legend: {			show: false		},		xAxis: {			disableGrid: true,			scrollShow: true,			itemCount: 6,		},		yAxis: {			showTitle: true,			gridType: "dash",			data: [{				title: "增速(%)",			}]		},		extra: {			column: {				type: "group",				width: 14,				barBorderRadius: [12, 12, 12, 12],				activeBgColor: "#000000",				activeBgOpacity: 0.08,			},			line: {				activeType: "none"			},			markLine: {				// type: "dash",				data: [{					value: 0,					// labelText: "0",					lineColor: "#000"				}]			}		}	}	let LineChartData = ref({		categories: [],		series: [{			name: "增速(%)",			data: []		}]	})	const createLineData = list => {		let categoriesList = []		let seriesList = []		for (let i in list) {			categoriesList.push(list[i].strmonth + "月")			seriesList.push(list[i].num_bl)		}		LineChartData.value.categories = categoriesList.length > 0 ? categoriesList : ["无数据"]		LineChartData.value.series[0].data = seriesList;		showLine.value = true;	}	// 取整	const filterInt = value => {		let expectNull = Number(value ?? 0);		return parseInt(expectNull);	}	onLoad(options => {		// 标题		titleMark = options.type;		titleText.value = titleEnum[titleMark].text;		// 列表		combineshowList();		// 年度		let now = new Date();		searchInfo.year = now.getFullYear();		defaultIndex.value = [searchInfo.year - 2000];		// 建设地点		getJSDD();		// 项目类型		getXMLX();		// 项目性质		getXMXZ();		// 页面列表		getList();		if (titleMark === "yearRate") {			// 行业分类			getHYFL();			// 资金来源			getZJLY();		}	})</script><template>	<view class="container">		<page-title>{{titleText}}</page-title>		<view class="cards-list">			<view class="card only-card">				<!-- 年度 -->				<view class="card-item first-card-item" @click="yearShowChoose()">					<view class="card-item-name">年度</view>					<view class="card-item-description">						<view v-if="searchInfo.year">{{searchInfo.year}}</view>						<view v-else class="remind-text">请选择年度</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 建设地点 -->				<view class="card-item" @click="jsddShowChoose()">					<view class="card-item-name">建设地点</view>					<view class="card-item-description">						<view v-if="searchInfo.subjectId">{{searchInfo.subjectId}}</view>						<view v-else class="remind-text">请选择地点</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 项目类型 -->				<view class="card-item" @click="xmlxShowChoose()">					<view class="card-item-name">项目类型</view>					<view class="card-item-description">						<view v-if="searchInfo.kind">{{searchInfo.kind}}</view>						<view v-else class="remind-text">请选择类型</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 项目性质 -->				<view class="card-item" @click="xmxzShowChoose()">					<view class="card-item-name">项目性质</view>					<view class="card-item-description">						<view v-if="searchInfo.propKind">{{searchInfo.propKind}}</view>						<view v-else class="remind-text">请选择性质</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 行业分类 -->				<view class="card-item" v-if="titleMark === 'yearRate'" @click="hyflShowChoose()">					<view class="card-item-name">行业分类</view>					<view class="card-item-description">						<view v-if="searchInfo.hyfl">{{searchInfo.hyfl}}</view>						<view v-else class="remind-text">请选择类型</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 资金来源 -->				<view class="card-item" v-if="titleMark === 'yearRate'" @click="zjlyShowChoose()">					<view class="card-item-name">资金来源</view>					<view class="card-item-description">						<view v-if="searchInfo.zjly">{{searchInfo.zjly}}</view>						<view v-else class="remind-text">请选择来源</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 亿元项目 -->				<view class="card-item" v-if="titleMark === 'yearRate'" @click="yTypeShowChoose()">					<view class="card-item-name">亿元项目</view>					<view class="card-item-description">						<view v-if="searchInfo.yType">{{searchInfo.yType}}</view>						<view v-else class="remind-text">请选择</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 是否隐藏 -->				<view class="card-item" @click="hideShowChoose()">					<view class="card-item-name">是否隐藏</view>					<view class="card-item-description">						<view v-if="searchInfo.isHide">{{searchInfo.isHide}}</view>						<view v-else class="remind-text">请选择</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 取值模式 -->				<view class="card-item" v-if="titleMark === 'yearRate'" @click="modeShowChoose()">					<view class="card-item-name">取值模式</view>					<view class="card-item-description">						<view v-if="searchInfo.mode">{{searchInfo.mode}}</view>						<view v-else class="remind-text">请选择模式</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>				<!-- 同比/环比 -->				<view class="card-item" v-if="titleMark === 'yearRate'" @click="yearOnYearShowChoose()">					<view class="card-item-name">同比/环比</view>					<view class="card-item-description">						<view v-if="searchInfo.kindType">{{searchInfo.kindType}}</view>						<view v-else class="remind-text">请选择模式</view>						<u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:10rpx"></u-icon>					</view>				</view>			</view>			<view class="search-btn" @click="getList()">确定</view>			<view class="double-pie" v-if="showDoublePie">				<view class="double-pie-area">					<view class="double-pie-item">						<qiun-data-charts type="pie" :opts="pieDoubleOpts" :chartData="pieChartData" tooltipFormat="tooltipDemo2" />					</view>					<view class="double-pie-item">						<qiun-data-charts type="pie" :opts="pieDoubleOpts" :chartData="doublePieChartData"							tooltipFormat="tooltipDemo3" />					</view>				</view>				<view class="double-pie-description">					<view class="double-pie-descriptionItem">项目数</view>					<view class="double-pie-descriptionItem">实际投资金额</view>				</view>				<view class="double-pie-data">					<view class="double-pie-textArea">						<view class="double-pie-textItem" v-for="(item,index) in itemList" :key="index">							<view class="double-pie-name">{{item.jsddName ?? "--"}}</view>							<view class="double-pie-project">{{item.totalNum ?? "--"}}个</view>						</view>					</view>					<view class="double-pie-textArea">						<view class="double-pie-textItem" v-for="(item,index) in itemListOrderByAmt" :key="index">							<view class="double-pie-name">{{item.jsddName ?? "--"}}</view>							<view class="double-pie-amt">{{filterInt(item.amt)}}万元</view>						</view>					</view>				</view>			</view>			<view class="pie" v-if="showPie">				<qiun-data-charts v-if="titleMark==='industyRateValue' || titleMark==='areaRate'" type="pie" :opts="pieOpts"					:chartData="pieChartData" tooltipFormat="tooltipDemo2" />				<qiun-data-charts v-if="titleMark==='industyRateAmt'" type="pie" :opts="pieOpts" :chartData="pieChartData"					tooltipFormat="tooltipDemo3" />			</view>			<view class="line" v-if="showLine">				<qiun-data-charts type="line" :opts="LineOpts" :ontouch="true" :chartData="LineChartData" />			</view>			<uni-table stripe border emptyText="暂无更多数据">				<uni-tr>					<uni-th align="center" v-for="(showItem,showIndex) in showList" :index="showIndex"						:width="showItem.width">{{showItem.text}}</uni-th>				</uni-tr>				<uni-tr v-for="(item,index) in itemList" :key="index">					<uni-td align="center" v-for="(showItem,showIndex) in showList" :index="showIndex"						@click="goToProjectList(item,showItem.key)">						{{item[showItem.key] ?? "--"}}					</uni-td>				</uni-tr>			</uni-table>			<view class="gap-bottom"></view>		</view>		<!-- 年度选择 -->		<u-picker :show="yearShow" :defaultIndex="defaultIndex" :columns="yearColumns" @confirm="yearClose"			@cancel="yearClose" @close="yearClose" closeOnClickOverlay></u-picker>		<!-- 建设地点 -->		<u-picker :show="jsddShow" :columns="jsddColumns" @confirm="jsddClose" @cancel="jsddClose" @close="jsddClose"			closeOnClickOverlay></u-picker>		<!-- 项目类型 -->		<u-picker :show="xmlxShow" :columns="xmlxColumns" @confirm="xmlxClose" @cancel="xmlxClose" @close="xmlxClose"			closeOnClickOverlay></u-picker>		<!-- 项目性质 -->		<u-picker :show="xmxzShow" :columns="xmxzColumns" @confirm="xmxzClose" @cancel="xmxzClose" @close="xmxzClose"			closeOnClickOverlay></u-picker>		<!-- 是否隐藏 -->		<u-picker :show="hideShow" :columns="hideColumns" @confirm="hideClose" @cancel="hideClose" @close="hideClose"			closeOnClickOverlay></u-picker>		<!-- 行业分类 -->		<u-picker :show="hyflShow" :columns="hyflColumns" @confirm="hyflClose" @cancel="hyflClose" @close="hyflClose"			closeOnClickOverlay></u-picker>		<!-- 亿元项目 -->		<u-picker :show="yTypeShow" :columns="yTypeColumns" @confirm="yTypeClose" @cancel="yTypeClose" @close="yTypeClose"			closeOnClickOverlay></u-picker>		<!-- 取值模式 -->		<u-picker :show="modeShow" :columns="modeColumns" @confirm="modeClose" @cancel="modeClose" @close="modeClose"			closeOnClickOverlay></u-picker>		<!-- 资金来源 -->		<u-picker :show="zjlyShow" :columns="zjlyColumns" @confirm="zjlyClose" @cancel="zjlyClose" @close="zjlyClose"			closeOnClickOverlay></u-picker>		<!-- 同比/环比 -->		<u-picker :show="yearOnYearShow" :columns="yearOnYearColumns" @confirm="yearOnYearClose" @cancel="yearOnYearClose"			@close="yearOnYearClose" closeOnClickOverlay></u-picker>	</view></template><style lang="scss" scoped>	.search-btn {		width: 98%;		height: 84rpx;		margin: 40rpx auto 26rpx;		line-height: 84rpx;		text-align: center;		color: #FFFFFF;		font-size: 36rpx;		background: #1763E7;		border-radius: 16rpx;	}	.card {		padding-bottom: 60rpx;	}	.pie {		height: 300rpx;		margin: 0 auto 36rpx;		background: #EAF0FA;		border-radius: 40rpx;	}	.double-pie {		min-height: 300rpx;		margin: 0 auto 36rpx;		background: #EAF0FA;		border-radius: 40rpx;		.double-pie-area {			display: flex;			width: 100%;			height: 300rpx;			.double-pie-item {				width: 50%;				height: 300rpx;			}		}		.double-pie-description {			display: flex;			width: 100%;			margin-bottom: 30rpx;			.double-pie-descriptionItem {				width: 50%;				text-align: center;			}		}		.double-pie-data {			display: flex;			width: 100%;			min-height: 100rpx;			padding-bottom: 20rpx;		}		.double-pie-textArea {			width: 50%;		}		.double-pie-textItem {			display: flex;			justify-content: space-between;			width: 100%;			padding: 0 20rpx;			box-sizing: border-box;			font-size: 24rpx;			color: #001643;			.double-pie-project {				flex: 1;				font-weight: 500;				text-align: right;				margin-right: 20rpx;			}			.double-pie-name {				flex: 1;			}			.double-pie-amt {				flex: 1;				font-weight: 500;				text-align: right;			}		}	}	.line {		width: 100%;		height: 400rpx;		margin: 0 auto 36rpx;		background: #FFF;		border-radius: 40rpx;		overflow: hidden;	}	.swiper-item-content {		height: 1200rpx;	}	::v-deep .uni-table-scroll {		height: auto;	}	::v-deep .uni-table-th,	.uni-table-td {		padding: 0;	}</style>
 |