headHome.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. <script setup>
  2. import { ref, reactive, nextTick } from "vue";
  3. import { onLoad, onShow, onTabItemTap } from "@dcloudio/uni-app";
  4. import { getOverdueNum } from "@/api/work/overdue.js";
  5. import {
  6. getannouncementList,
  7. getUnwriteReportList,
  8. getHomeStatsABC,
  9. getHomeStatsLeader,
  10. getBanner,
  11. } from "@/api/home.js";
  12. import {
  13. getJSDDlist,
  14. getZJLYlist,
  15. getHYFLlist,
  16. } from "@/api/work/projectInfo.js";
  17. import { getMessageNum } from "@/api/work/message.js";
  18. import store from "@/store";
  19. import { checkRoleById } from "@/utils/permission.js";
  20. import iconEnterpriseInfo from "@/static/func/enterpriseInfos.svg";
  21. import tzfxIcon from "@/static/images/homeIcon/tzfx-icon.svg";
  22. import blxmIcon from "@/static/images/homeIcon/blxm-icon.svg";
  23. import xcyxIcon from "@/static/images/homeIcon/xcyx-icon.svg";
  24. import xmtzIcon from "@/static/images/homeIcon/xmtz-icon.svg";
  25. import { setAmt,getInt,getFloat } from "@/utils/common.js";
  26. import cuOverdue from "./components/cu-overdue.vue";
  27. import dayjs from "dayjs";
  28. // 项目信息
  29. let projectYear = ref(dayjs().year());
  30. // 选择年
  31. let yearShow = ref(false);
  32. let defaultIndex = ref([0]);
  33. let yearColumns = ref([
  34. [
  35. "2000",
  36. "2001",
  37. "2002",
  38. "2003",
  39. "2004",
  40. "2005",
  41. "2006",
  42. "2007",
  43. "2008",
  44. "2009",
  45. "2010",
  46. "2011",
  47. "2012",
  48. "2013",
  49. "2014",
  50. "2015",
  51. "2016",
  52. "2017",
  53. "2018",
  54. "2019",
  55. "2020",
  56. "2021",
  57. "2022",
  58. "2023",
  59. "2024",
  60. "2025",
  61. "2026",
  62. "2027",
  63. "2028",
  64. "2029",
  65. "2030",
  66. "2031",
  67. "2032",
  68. "2033",
  69. ],
  70. ]);
  71. const yearShowChoose = function () {
  72. yearShow.value = true;
  73. };
  74. const yearClose = function (e) {
  75. if (e) {
  76. projectYear.value = e.value[0];
  77. // 获取最新数据
  78. getProjectInfo();
  79. }
  80. yearShow.value = false;
  81. };
  82. // 选择分类
  83. let projectKind = ref(null);
  84. let projectKindId = null;
  85. let kindShow = ref(false);
  86. let kindColumns = ref([]);
  87. const kindShowChoose = function () {
  88. kindShow.value = true;
  89. };
  90. const kindClose = function (e) {
  91. if (e) {
  92. projectKind.value = e.value[0];
  93. projectKindId = hyflFull.find(
  94. (item) => item.value === projectKind.value
  95. ).key;
  96. // 获取最新数据
  97. getProjectInfo();
  98. }
  99. kindShow.value = false;
  100. };
  101. let hyflFull = [];
  102. const getHYFL = function () {
  103. getHYFLlist().then((res) => {
  104. hyflFull = res.data.list;
  105. hyflFull.push({
  106. key: null,
  107. value: "所有分类",
  108. });
  109. kindColumns.value = [res.data.list.map((item) => item.value)];
  110. kindColumns.value[0].unshift("所有分类");
  111. });
  112. };
  113. // 选择地点
  114. let projectArea = ref(null);
  115. let projectAreaId = null;
  116. let areaShow = ref(false);
  117. let areaColumns = ref([]);
  118. const areaShowChoose = function () {
  119. areaShow.value = true;
  120. };
  121. const areaClose = function (e) {
  122. if (e) {
  123. projectArea.value = e.value[0];
  124. projectAreaId = jsddFull.find(
  125. (item) => item.value === projectArea.value
  126. ).key;
  127. // 获取最新数据
  128. getProjectInfo();
  129. }
  130. areaShow.value = false;
  131. };
  132. let jsddFull = [];
  133. const getJSDD = function () {
  134. getJSDDlist().then((res) => {
  135. jsddFull = res.data.list;
  136. jsddFull.push({
  137. key: 0,
  138. value: "所有地区",
  139. });
  140. areaColumns.value = [res.data.list.map((item) => item.value)];
  141. areaColumns.value[0].unshift("所有地区");
  142. });
  143. };
  144. // 资金来源
  145. let projectAmt = ref(null);
  146. let projectAmtId = null;
  147. let zjlyShow = ref(false);
  148. let zjlyColumns = ref([]);
  149. const zjlyShowChoose = () => {
  150. zjlyShow.value = true;
  151. };
  152. const zjlyClose = (e) => {
  153. if (e) {
  154. projectAmt.value = e.value[0];
  155. projectAmtId = zjlyFull.find((item) => item.value === projectAmt.value).key;
  156. // 获取最新数据
  157. getProjectInfo();
  158. }
  159. zjlyShow.value = false;
  160. };
  161. let zjlyFull = [];
  162. const getZJLY = () => {
  163. getZJLYlist().then((res) => {
  164. zjlyFull = res.data.list;
  165. zjlyFull.unshift({
  166. key: null,
  167. value: "所有来源",
  168. });
  169. zjlyColumns.value = [res.data.list.map((item) => item.value)];
  170. });
  171. };
  172. function goToPage(url, permissionCode, type) {
  173. // if (permissionCode) {
  174. // let havePermission = checkRoleById([permissionCode])
  175. // if (!havePermission) return
  176. // }
  177. uni.$u.route({
  178. url: url,
  179. params: {
  180. type: type || null,
  181. },
  182. });
  183. }
  184. //轮播图
  185. let bannerList = ref([]);
  186. async function getBannerList() {
  187. getBanner().then((res) => {
  188. bannerList.value = res.data.pictureList;
  189. });
  190. }
  191. function bannerClick(e) {
  192. let result = {};
  193. for (let i = 0; i < bannerList.value.length; i++) {
  194. if (i == e) {
  195. result = bannerList.value[i];
  196. }
  197. }
  198. nextTick(() => {
  199. // uni.navigateTo({
  200. // url: `/pages/policy/detail/index?title=${result.title}&id=${result.id}`
  201. // })
  202. uni.$u.route({
  203. url: "/pages/policy/detail/index",
  204. params: {
  205. title: result.title,
  206. id: result.id,
  207. },
  208. });
  209. });
  210. }
  211. // 功能列表
  212. let functionList = ref([
  213. {
  214. name: "分管项目",
  215. url: "/pages/projectBL/index",
  216. icon: blxmIcon,
  217. type: "jbxx",
  218. permissionCode: "711",
  219. },
  220. {
  221. name: "统计分析",
  222. url: "/pages/countAnalysis/newHeadAnalysis/index",
  223. icon: tzfxIcon,
  224. type: "jbxx",
  225. permissionCode: "711",
  226. },
  227. {
  228. name: "三库管理",
  229. url: "/pages/projectInfo/index",
  230. icon: xmtzIcon,
  231. type: "all",
  232. permissionCode: "711",
  233. },
  234. {
  235. name: "智联工地",
  236. url: "/pages/videoManage/list/index",
  237. icon: xcyxIcon,
  238. type: "jbxx",
  239. permissionCode: "711",
  240. },
  241. ]);
  242. function newProjectClick(e, num) {
  243. if (num != 0) {
  244. let throughObj = {
  245. year: projectYear.value,
  246. indusKind: projectKindId,
  247. subjectId: projectAreaId,
  248. zjly: projectAmtId,
  249. queryTimeType: "4",
  250. queryType: 1,
  251. };
  252. let obj = {
  253. cbxm:{
  254. name: "储备项目",
  255. queryType: 5,
  256. isCb:true,
  257. isZj: "1",
  258. },
  259. axm:{
  260. name: "A类项目",
  261. queryType: 5,
  262. isZj: "1",
  263. isCb:true,
  264. abc:"A",
  265. },
  266. bxm:{
  267. name: "B类项目",
  268. queryType: 5,
  269. isZj: "1",
  270. isCb:true,
  271. abc:"B",
  272. },
  273. cxm:{
  274. name: "C类项目",
  275. queryType: 5,
  276. isZj: "1",
  277. isCb:true,
  278. abc:"C",
  279. },
  280. xmzs: {
  281. name: "项目总数",
  282. isZj: "1",
  283. },
  284. wkg: {
  285. name: "未开工",
  286. isZj: "1",
  287. otherStatus: "1,6",
  288. },
  289. ykg: {
  290. name: "已开工",
  291. isZj: "1",
  292. otherStatus: "7",
  293. },
  294. ywg: {
  295. name: "已竣工",
  296. isZj: "1",
  297. otherStatus: "A",
  298. },
  299. ztz: {
  300. name: "总投资",
  301. },
  302. ndjhtz: {
  303. name: "年度计划投资",
  304. },
  305. ndsjtz: {
  306. name: "年度实际投资",
  307. },
  308. mjhtz: {
  309. name: "投资",
  310. },
  311. mdttz: {
  312. name: "投资",
  313. },
  314. mtzp: {
  315. name: "投资",
  316. },
  317. };
  318. throughObj = {
  319. ...throughObj,
  320. ...obj[e],
  321. };
  322. let url = "/pages/projectInfo/index?type=home&";
  323. for (let i in throughObj) {
  324. let item = null;
  325. item = (throughObj[i] ?? "") === "" ? `${i}=&` : `${i}=${throughObj[i]}&`;
  326. url = url += item;
  327. }
  328. url = url.substr(0, url.length - 1);
  329. uni.navigateTo({
  330. url,
  331. });
  332. } else {
  333. uni.showToast({
  334. icon: "none",
  335. title: "无该项数据",
  336. });
  337. }
  338. }
  339. // function amtgoto(e) {
  340. // let params = {
  341. // indusKind: projectKindId,
  342. // subjectId: projectAreaId,
  343. // zjly: projectAmtId,
  344. // isCurrMonth: null,
  345. // year: null,
  346. // key: null
  347. // }
  348. // if (e.key == 'amtJh') {
  349. // params.year = projectYear.value
  350. // params.key = 'year'
  351. // params.name = '年度计划投资'
  352. // uni.$u.route({
  353. // url: '/pages/countAnalysis/through/index',
  354. // params: params
  355. // })
  356. // } else if (e.key == 'amtSj') {
  357. // params.year = projectYear.value
  358. // params.key = 'ndjh'
  359. // params.name = '年度实际投资'
  360. // uni.$u.route({
  361. // url: '/pages/countAnalysis/through/index',
  362. // params: params
  363. // })
  364. // }
  365. // }
  366. //获取项目数据
  367. let WKG = ref("");
  368. let YKG = ref("");
  369. let YWG = ref("");
  370. let amtRate = ref("0");
  371. let amtTotal = ref("0");
  372. let endRate = ref("");
  373. let openRate = ref("");
  374. let totalNum = ref("");
  375. let yearAmt = ref("");
  376. let yearAmtSj = ref("");
  377. let abc = ref({
  378. num_s_total: 0,
  379. num_s_1: 0,
  380. num_s_3: 0,
  381. num_s_4: 0,
  382. num_s_bl: 0,
  383. num_5:0,
  384. });
  385. const defaultMonthInfo = () => ({
  386. rate: 0,
  387. planAmt: 0,
  388. amt: 0,
  389. amtLast: 0,
  390. });
  391. let monthInfo = ref(defaultMonthInfo());
  392. function getProjectInfo() {
  393. console.log({
  394. year: projectYear.value,
  395. indusKind: projectKindId,
  396. buildAddre: projectAreaId,
  397. zjly: projectAmtId,
  398. });
  399. getHomeStatsLeader({
  400. year: projectYear.value,
  401. month:
  402. new Date().getFullYear() +
  403. "" +
  404. (new Date().getMonth() + 1).toString().padStart(2, "0"),
  405. //month:"201001",
  406. indusKind: projectKindId,
  407. buildAddre: projectAreaId,
  408. zjly: projectAmtId,
  409. }).then((res) => {
  410. // WKG.value = res.data.WKG
  411. WKG.value =
  412. res.data.num_total - res.data.num_4 - res.data.num_5 - res.data.num_7;
  413. YKG.value = res.data.num_4;
  414. YWG.value = res.data.num_5;
  415. amtRate.value = res.data.amtInfo.outyear_zb;
  416. amtTotal.value = res.data.amtInfo.outyearamt_2;
  417. endRate.value = res.data.num_year_wgl_last2;
  418. openRate.value = res.data.num_year_kgl;
  419. totalNum.value = res.data.num_total;
  420. yearAmt.value = res.data.amtInfo.outyearamt_total;
  421. yearAmtSj.value = res.data.amtInfo.outyearamt_1;
  422. monthInfo.value = res.data.monthInfo || defaultMonthInfo();
  423. console.log(res, "数据");
  424. });
  425. }
  426. function getProjectABC() {
  427. console.log({
  428. year: projectYear.value,
  429. indusKind: projectKindId,
  430. buildAddre: projectAreaId,
  431. zjly: projectAmtId,
  432. });
  433. getHomeStatsABC({
  434. year: projectYear.value,
  435. isZj: 1,
  436. }).then((res) => {
  437. abc.value = res.data;
  438. console.log(abc.value, "数据");
  439. });
  440. }
  441. const kindType = ref(1);
  442. onLoad(() => {
  443. let kind = uni.getStorageSync("userKind");
  444. kindType.value = kind;
  445. let list = [
  446. {
  447. index: 0,
  448. pagePath: "pages/home/headHome",
  449. iconPath: "../../static/images/tabbar/home.png",
  450. selectedIconPath: "../../static/images/tabbar/home_.png",
  451. visible: false,
  452. text: "首页",
  453. },
  454. {
  455. index: 1,
  456. pagePath: "pages/home/oversawHome",
  457. iconPath: "../../static/images/tabbar/home.png",
  458. selectedIconPath: "../../static/images/tabbar/home_.png",
  459. visible: false,
  460. text: "首页",
  461. },
  462. {
  463. index: 2,
  464. pagePath: "pages/home/companyHome",
  465. iconPath: "../../static/images/tabbar/home.png",
  466. selectedIconPath: "../../static/images/tabbar/home_.png",
  467. visible: false,
  468. text: "首页",
  469. },
  470. {
  471. index: 3,
  472. pagePath: "pages/message/index",
  473. iconPath: "../../static/images/tabbar/message.png",
  474. selectedIconPath: "../../static/images/tabbar/message_.png",
  475. text: "消息",
  476. },
  477. {
  478. index: 4,
  479. pagePath: "pages/mine/index",
  480. iconPath: "../../static/images/tabbar/mine.png",
  481. selectedIconPath: "../../static/images/tabbar/mine_.png",
  482. text: "我的",
  483. },
  484. ];
  485. //kind 1 监管单位, 2公司端 , 3 领导端
  486. if (kind == "2") {
  487. list[0].visible = false;
  488. list[1].visible = false;
  489. list[2].visible = true;
  490. console.log(list, "监管端");
  491. for (let i = 0; i < list.length; i++) {
  492. uni.setTabBarItem(list[i]);
  493. }
  494. uni.switchTab({
  495. url: "/pages/home/companyHome",
  496. });
  497. } else if (kind == "1") {
  498. list[0].visible = false;
  499. list[1].visible = true;
  500. list[2].visible = false;
  501. for (let i = 0; i < list.length; i++) {
  502. uni.setTabBarItem(list[i]);
  503. }
  504. uni.switchTab({
  505. url: "/pages/home/oversawHome",
  506. });
  507. } else if (kind == "3") {
  508. list[0].visible = true;
  509. list[1].visible = false;
  510. list[2].visible = false;
  511. for (let i = 0; i < list.length; i++) {
  512. uni.setTabBarItem(list[i]);
  513. }
  514. }
  515. if (kind == "3") {
  516. let now = new Date();
  517. projectYear.value = now.getFullYear();
  518. defaultIndex.value = [projectYear.value - 2000];
  519. // // judgeFuncList(); //判断权限
  520. // getAnnounceMent(); //获取公告
  521. getHYFL(); //获取行业分类
  522. getJSDD(); //获取建设地点
  523. getZJLY(); // 获取资金来源
  524. getProjectInfo(); //获取项目数据
  525. getProjectABC(); //获取项目ABC类
  526. // getOverdue(); //获取逾期数量
  527. // // getUnwirteList(); //获取未填写周报月报信息
  528. getBannerList(); //获取轮播图数据
  529. // getMessageCount(); //获取未读消息数量
  530. }
  531. });
  532. </script>
  533. <template>
  534. <view class="container">
  535. <view class="top-back-pie"> </view>
  536. <view class="content-layer">
  537. <view class="top-layer">
  538. <view class="project-title"> 哈密市项目管理智慧平台 </view>
  539. <view class="search-layer">
  540. <view class="search-input">
  541. <view class="search-icon"></view>
  542. <input
  543. @click="goToPage('/pages/search/index')"
  544. placeholder="项目、领导电话..."
  545. placeholder-style="color: #343434;font-size:28rpx;"
  546. />
  547. </view>
  548. <view class="search-line"> </view>
  549. <view class="search-focus" @click="goToPage('/pages/focus/index')">
  550. <view class="search-focus-icon"></view>
  551. <text class="text">关注</text>
  552. </view>
  553. </view>
  554. </view>
  555. <view class="banner-box">
  556. <u-swiper
  557. :list="bannerList"
  558. indicator
  559. indicatorMode="line"
  560. keyName="coverImg"
  561. circular
  562. radius="20rpx"
  563. height="254rpx"
  564. @click="bannerClick"
  565. ></u-swiper>
  566. </view>
  567. <view class="button-layer">
  568. <view
  569. class="btn-item"
  570. v-for="(item, index) in functionList"
  571. :key="index"
  572. @click="goToPage(item.url, item.permissionCode, item.type)"
  573. >
  574. <image :src="item.icon" class="item-icon" mode=""></image>
  575. <view class="item-text">
  576. {{ item.name }}
  577. </view>
  578. </view>
  579. </view>
  580. <view class="stats-layer" style="margin-top: 20rpx">
  581. <view class="stats-list">
  582. <view class="stats-item" @click="newProjectClick('cbxm', abc.num_s_total)">
  583. <view class="item-num">
  584. <text class="number">{{ abc.num_s_total }}</text>
  585. <text class="unit">个</text>
  586. </view>
  587. <view class="item-name"> 储备项目 </view>
  588. </view>
  589. <view class="line"></view>
  590. <view class="stats-item" @click="newProjectClick('axm', abc.num_s_1)">
  591. <view class="item-num">
  592. <text class="number">{{ abc.num_s_1 }}</text>
  593. <text class="unit">个</text>
  594. </view>
  595. <view class="item-name"> A类项目 </view>
  596. </view>
  597. <view class="line"></view>
  598. <view class="stats-item" @click="newProjectClick('bxm', abc.num_s_3)">
  599. <view class="item-num">
  600. <text class="number">{{ abc.num_s_3 }}</text>
  601. <text class="unit">个</text>
  602. </view>
  603. <view class="item-name"> B类项目 </view>
  604. </view>
  605. <view class="line"> </view>
  606. <view class="stats-item" @click="newProjectClick('cxm', abc.num_s_4)">
  607. <view class="item-num">
  608. <text class="number">{{ abc.num_s_4 }}</text>
  609. <text class="unit">个</text>
  610. </view>
  611. <view class="item-name"> C类项目 </view>
  612. </view>
  613. </view>
  614. <view class="stats-layer-bar">
  615. <view class="bar-layer">
  616. <view class="line-progress">
  617. <u-line-progress
  618. :percentage="abc.num_s_bl"
  619. inactiveColor="#E9F2FF"
  620. activeColor="#6EAAF7"
  621. :showText="false"
  622. height="16rpx"
  623. ></u-line-progress>
  624. </view>
  625. </view>
  626. <!-- <view class="v-info">
  627. <view class="item-text" @click="newProjectClick('ywg', abc.num_5)">
  628. <view class="text-name">已完成的项目</view>
  629. <view class="text-rote"> {{ abc.num_5 }}个 </view>
  630. </view>
  631. <view class="item-text">
  632. <view class="text-name">转化率</view>
  633. <view class="text-rote"> {{ abc.num_s_bl }}% </view>
  634. </view>
  635. </view> -->
  636. </view>
  637. </view>
  638. <view class="sub-title"> 项目建设总体情况 </view>
  639. <view class="project-info-select">
  640. <view class="choose-year" @click="yearShowChoose()">
  641. {{ projectYear ?? "年度" }}
  642. <image src="../../static/home-choose-iocn.svg" mode=""></image>
  643. </view>
  644. <view class="choose-year" @click="kindShowChoose()">
  645. {{ projectKind ?? "行业分类" }}
  646. <image src="../../static/home-choose-iocn.svg" mode=""></image>
  647. </view>
  648. <view class="choose-year" @click="areaShowChoose()">
  649. {{ projectArea ?? "建设地点" }}
  650. <image src="../../static/home-choose-iocn.svg" mode=""></image>
  651. </view>
  652. <view class="choose-year" @click="zjlyShowChoose()">
  653. <view class="choose-year-text">{{ projectAmt ?? "资金来源" }}</view>
  654. </view>
  655. </view>
  656. <view class="stats-layer">
  657. <!-- <view class="bar-layer">
  658. <view class="bar-item">
  659. <view class="item-text">
  660. <view class="text-name"> 总建设开工率 </view>
  661. <view class="text-rote"> {{ openRate }}% </view>
  662. </view>
  663. <view class="line-progress">
  664. <u-line-progress
  665. :percentage="openRate"
  666. inactiveColor="#E9F2FF"
  667. activeColor="#6EAAF7"
  668. :showText="false"
  669. height="16rpx"
  670. ></u-line-progress>
  671. </view>
  672. </view>
  673. <view class="bar-item">
  674. <view class="item-text">
  675. <view class="text-name"> 总建设竣工率 </view>
  676. <view class="text-rote"> {{ endRate }}% </view>
  677. </view>
  678. <view class="line-progress">
  679. <u-line-progress
  680. :percentage="endRate"
  681. inactiveColor="#E9F2FF"
  682. activeColor="#6EAAF7"
  683. :showText="false"
  684. height="16rpx"
  685. ></u-line-progress>
  686. </view>
  687. </view>
  688. </view> -->
  689. <view class="stats-list">
  690. <view class="stats-item" @click="newProjectClick('xmzs', totalNum)">
  691. <view class="item-num">
  692. <text class="number">{{ totalNum }}</text>
  693. <text class="unit">个</text>
  694. </view>
  695. <view class="item-name"> 项目总数 </view>
  696. </view>
  697. <view class="line"> </view>
  698. <view class="stats-item" @click="newProjectClick('wkg', WKG)">
  699. <view class="item-num">
  700. <text class="number">{{ WKG }}</text>
  701. <text class="unit">个</text>
  702. </view>
  703. <view class="item-name"> 未开工 </view>
  704. </view>
  705. <view class="line"> </view>
  706. <view class="stats-item" @click="newProjectClick('ykg', YKG)">
  707. <view class="item-num">
  708. <text class="number">{{ YKG }}</text>
  709. <text class="unit">个</text>
  710. </view>
  711. <view class="item-name"> 已开工 </view>
  712. </view>
  713. <view class="line"> </view>
  714. <view class="stats-item" @click="newProjectClick('ywg', YWG)">
  715. <view class="item-num">
  716. <text class="number">{{ YWG }}</text>
  717. <text class="unit">个</text>
  718. </view>
  719. <view class="item-name"> 已竣工 </view>
  720. </view>
  721. </view>
  722. <view class="space-bg-yellow">
  723. <view class="bar-layer">
  724. <view class="bar-item">
  725. <view class="item-text">
  726. <view class="text-name"> 上月投资完成率 </view>
  727. <view class="text-rote">{{ monthInfo.rate }}% </view>
  728. </view>
  729. <view class="line-progress">
  730. <u-line-progress
  731. :percentage="monthInfo.rate"
  732. inactiveColor="#E9F2FF"
  733. activeColor="#6EAAF7"
  734. :showText="false"
  735. height="16rpx"
  736. ></u-line-progress>
  737. </view>
  738. </view>
  739. </view>
  740. <view class="stats-list">
  741. <view
  742. class="stats-item"
  743. @click="newProjectClick('mjhtz', monthInfo.planAmt)"
  744. >
  745. <view class="item-num">
  746. <text class="number">{{
  747. getInt(monthInfo.planAmt)
  748. }}</text>
  749. <text class="unit"
  750. >{{
  751. getFloat(monthInfo.amtLast)
  752. }}亿元</text
  753. >
  754. </view>
  755. <view class="item-name"> 年初计划投资 </view>
  756. </view>
  757. <view class="line"> </view>
  758. <view
  759. class="stats-item"
  760. @click="newProjectClick('mdttz', monthInfo.amt)"
  761. >
  762. <view class="item-num">
  763. <text class="number">{{
  764. getInt(monthInfo.amt)
  765. }}</text>
  766. <text class="unit"
  767. >{{
  768. getFloat(monthInfo.amt)
  769. }}亿元</text
  770. >
  771. </view>
  772. <view class="item-name"> 本月动态计划投资 </view>
  773. </view>
  774. <view class="line"> </view>
  775. <view
  776. class="stats-item"
  777. @click="newProjectClick('mtzp', monthInfo.amtLast)"
  778. >
  779. <view class="item-num">
  780. <text class="number">{{
  781. getInt(monthInfo.amtLast)
  782. }}</text>
  783. <text class="unit"
  784. >{{
  785. getFloat(monthInfo.amtLast)
  786. }}亿元</text
  787. >
  788. </view>
  789. <view class="item-name"> 上月完成投资 </view>
  790. </view>
  791. </view>
  792. </view>
  793. <view class="bar-layer">
  794. <view class="bar-item">
  795. <view class="item-text">
  796. <view class="text-name"> 年度投资完成率 </view>
  797. <view class="text-rote"> {{ amtRate }}% </view>
  798. </view>
  799. <view class="line-progress">
  800. <u-line-progress
  801. :percentage="amtRate"
  802. inactiveColor="#E9F2FF"
  803. activeColor="#6EAAF7"
  804. :showText="false"
  805. height="16rpx"
  806. ></u-line-progress>
  807. </view>
  808. </view>
  809. </view>
  810. <view class="stats-list">
  811. <view class="stats-item" @click="newProjectClick('ztz', amtTotal)">
  812. <view class="item-num">
  813. <text class="number">{{ setAmt(amtTotal * 10000)[0] }} </text>
  814. <text class="unit"
  815. >{{ setAmt(amtTotal * 10000)[1]
  816. }}{{ setAmt(amtTotal * 10000)[2] }}</text
  817. >
  818. </view>
  819. <view class="item-name"> 总投资 </view>
  820. </view>
  821. <view class="line"> </view>
  822. <view class="stats-item" @click="newProjectClick('ndjhtz', yearAmt)">
  823. <view class="item-num">
  824. <text class="number">{{ setAmt(yearAmt * 10000)[0] }}</text>
  825. <text class="unit"
  826. >{{ setAmt(yearAmt * 10000)[1]
  827. }}{{ setAmt(yearAmt * 10000)[2] }}</text
  828. >
  829. </view>
  830. <view class="item-name"> 年度计划投资 </view>
  831. </view>
  832. <view class="line"> </view>
  833. <view
  834. class="stats-item"
  835. @click="newProjectClick('ndsjtz', yearAmtSj)"
  836. >
  837. <view class="item-num">
  838. <text class="number">{{ setAmt(yearAmtSj * 10000)[0] }}</text>
  839. <text class="unit"
  840. >{{ setAmt(yearAmtSj * 10000)[1]
  841. }}{{ setAmt(yearAmtSj * 10000)[2] }}</text
  842. >
  843. </view>
  844. <view class="item-name"> 年度实际投资 </view>
  845. </view>
  846. </view>
  847. </view>
  848. <cu-overdue v-if="kindType==3"></cu-overdue>
  849. </view>
  850. <!-- 年度选择 -->
  851. <u-picker
  852. :show="yearShow"
  853. :defaultIndex="defaultIndex"
  854. :columns="yearColumns"
  855. @confirm="yearClose"
  856. @cancel="yearClose"
  857. @close="yearClose"
  858. closeOnClickOverlay
  859. ></u-picker>
  860. <!-- 行业选择 -->
  861. <u-picker
  862. :show="kindShow"
  863. :columns="kindColumns"
  864. @confirm="kindClose"
  865. @cancel="kindClose"
  866. @close="kindClose"
  867. closeOnClickOverlay
  868. ></u-picker>
  869. <!-- 地点选择 -->
  870. <u-picker
  871. :show="areaShow"
  872. :columns="areaColumns"
  873. @confirm="areaClose"
  874. @cancel="areaClose"
  875. @close="areaClose"
  876. closeOnClickOverlay
  877. ></u-picker>
  878. <!-- 资金来源 -->
  879. <u-picker
  880. :show="zjlyShow"
  881. :columns="zjlyColumns"
  882. @confirm="zjlyClose"
  883. @cancel="zjlyClose"
  884. @close="zjlyClose"
  885. closeOnClickOverlay
  886. ></u-picker>
  887. </view>
  888. </template>
  889. <style lang="scss">
  890. .v-info {
  891. width: 100%;
  892. padding: 0 25px;
  893. display: flex;
  894. flex-flow: row nowrap;
  895. justify-content: space-between;
  896. }
  897. </style>