123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440 |
- <script setup>
- import {
- ref
- } from "vue"
- import {
- onLoad,
- onShow,
- } from "@dcloudio/uni-app"
- import {
- getOverdueNum
- } from "@/api/work/overdue.js"
- import {
- getannouncementList,
- getUnwriteReportList,
- getHomeStats
- } from "@/api/home.js"
- import {
- getJSDDlist,
- getHYFLlist,
- } from "@/api/work/projectInfo.js";
- import {
- getMessageNum
- } from "@/api/work/message.js"
- import store from '@/store'
- import {
- checkRoleById
- } from "@/utils/permission.js"
- import iconEnterpriseInfo from "@/static/func/enterpriseInfos.svg";
- import iconProjectInfo from "@/static/func/projectInfo.svg";
- import iconReserveProject from "@/static/func/reserveProject.svg";
- import iconContact from "@/static/func/contact.svg";
- import iconQuestionList from "@/static/func/questionList.svg";
- import iconQuestionInput from "@/static/func/questionInput.svg";
- import iconQuestionTrace from "@/static/func/questionTrace.svg";
- import iconFundPlan from "@/static/func/fundPlan.svg";
- import iconFundUse from "@/static/func/fundUse.svg";
- import iconProjectPercents from "@/static/func/projectPercents.svg";
- import iconImportant from "@/static/func/important.svg";
- import iconPreFlow from "@/static/func/preFlow.svg";
- import iconWeekly from "@/static/func/weekly.svg";
- import iconMonthly from "@/static/func/monthly.svg";
- import iconYearly from "@/static/func/yearly.svg";
- import iconOverdued from "@/static/func/overdued.svg";
- import iconOverdueWill from "@/static/func/overdueWill.svg";
- // 项目信息
- let projectYear = ref(2023);
- // 选择年
- let yearShow = ref(false);
- let defaultIndex = ref([0]);
- let yearColumns = ref([
- ["2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012",
- "2013",
- "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026",
- "2027", "2028", "2029", "2030", "2031", "2032", "2033"
- ]
- ])
- const yearShowChoose = function() {
- yearShow.value = true;
- }
- const yearClose = function(e) {
- if (e) {
- projectYear.value = e.value[0];
- // 获取最新数据
- getProjectInfo();
- }
- yearShow.value = false;
- }
- // 选择分类
- let projectKind = ref(null);
- let projectKindId = null;
- let kindShow = ref(false);
- let kindColumns = ref([]);
- const kindShowChoose = function() {
- kindShow.value = true;
- }
- const kindClose = function(e) {
- if (e) {
- projectKind.value = e.value[0];
- projectKindId = hyflFull.find(item => item.value === projectKind.value).key;
- // 获取最新数据
- getProjectInfo();
- }
- kindShow.value = false;
- }
- let hyflFull = [];
- const getHYFL = function() {
- getHYFLlist().then(res => {
- hyflFull = res.data.list;
- kindColumns.value = [res.data.list.map(item => item.value)];
- })
- };
- // 选择地点
- let projectArea = ref(null);
- let projectAreaId = null;
- let areaShow = ref(false);
- let areaColumns = ref([]);
- const areaShowChoose = function() {
- areaShow.value = true;
- }
- const areaClose = function(e) {
- if (e) {
- projectArea.value = e.value[0];
- projectAreaId = jsddFull.find(item => item.value === projectArea.value).key;
- // 获取最新数据
- getProjectInfo();
- }
- areaShow.value = false;
- }
- let jsddFull = [];
- const getJSDD = function() {
- getJSDDlist().then(res => {
- jsddFull = res.data.list;
- areaColumns.value = [res.data.list.map(item => item.value)];
- })
- };
- let projectNum = ref([{
- name: "亿元以下",
- key: "numAmt1",
- value: 0,
- }, {
- name: "1-5亿",
- key: "numAmt2",
- value: 0,
- }, {
- name: "5-10亿",
- key: "numAmt3",
- value: 0,
- }, {
- name: "10亿以上",
- key: "numAmt4",
- value: 0,
- }]);
- let fundNum = ref([{
- name: "年度计划投资",
- key: "amtJh",
- value: 0,
- }, {
- name: "当月计划投资",
- key: "monthPlan",
- value: 0,
- }, {
- name: "年度完成投资",
- key: "amtSj",
- value: 0,
- }]);
- let fullPercents = ref(0);
- let pieOpts = ref({
- color: ["#03873F", "#00B250", "#1BBF65", "#31DF80", "#69E2A0"],
- enableScroll: false,
- legend: {
- show: false
- },
- extra: {
- pie: {
- customRadius: 80,
- border: false,
- }
- }
- })
- let ringOpts = ref({
- color: ["#3E76FC", "#7AA2FF", "#B8CDFF"],
- enableScroll: false,
- legend: {
- show: false
- },
- title: {
- name: "300",
- fontSize: 14,
- color: "#3D3D3D"
- },
- subtitle: {
- name: "项目总数",
- fontSize: 14,
- color: "#3D3D3D"
- },
- extra: {
- ring: {
- customRadius: 55,
- ringWidth: 20,
- border: false,
- }
- }
- })
- let ringTotal = ref(0);
- let ringChartData = ref({
- series: [{
- data: [{
- name: '新建项目',
- value: 100,
- labelShow: false
- }, {
- name: '续建项目',
- value: 100,
- labelShow: false
- }, {
- name: '储备项目',
- value: 100,
- labelShow: false
- }]
- }]
- })
- let showRing = ref(false)
- let showPie = ref(false)
- let pieChartData = ref({
- series: [{
- data: [{
- name: "无数据",
- value: 0,
- labelShow: false
- }]
- }]
- })
- function getProjectInfo() {
- getHomeStats({
- year: projectYear.value,
- indusKind: projectKindId,
- buildAddre: projectAreaId
- }).then(res => {
- const {
- data
- } = res;
- for (let i in projectNum.value) {
- projectNum.value[i].value = data[projectNum.value[i].key] ?? "--";
- }
- for (let i in fundNum.value) {
- fundNum.value[i].value = data[fundNum.value[i].key] ?? "--";
- }
- fullPercents.value = (data.numBl ?? "") === "" ? 0 : parseFloat(data.numBl);
- // 圆环图
- numNew.value = ringChartData.value.series[0].data[0].value = data.numNew;
- numOld.value = ringChartData.value.series[0].data[1].value = data.numOld;
- numNo.value = ringChartData.value.series[0].data[2].value = data.numNo;
- ringOpts.value.title.name = data.numTotal ?? "0";
- showRing.value = true;
- let tempArr = [];
- for (let i in data.buildAddress) {
- tempArr.push({
- name: data.buildAddress[i].title,
- value: data.buildAddress[i].num,
- labelShow: false
- })
- }
- if (data.buildAddress.length > 0) {
- pieChartData.value.series[0].data = tempArr
- } else {
- pieChartData.value.series[0].data = [{
- name: "无数据",
- value: 0,
- labelShow: false
- }]
- };
- showPie.value = true;
- })
- }
- let numNew = ref(0);
- let numOld = ref(0);
- let numNo = ref(0);
- // 公告列表
- let announcementList = ref([]);
- function getAnnounceMent() {
- getannouncementList({
- pageNo: 1,
- pageSize: 3
- }).then(res => {
- let titleList = res.data.list.map(item => {
- return item.title
- })
- announcementList.value = titleList.length > 0 ? titleList : ['当前暂无公告'];
- })
- }
- // 逾期数量
- let overdueWill = ref(0);
- let overdued = ref(0);
- function getOverdue() {
- getOverdueNum().then(res => {
- let bigItem = functionList.value.find(item => item.name === "问题督办");
- let willItem = bigItem.funcList.find(item => item.name === "预期提醒");
- willItem.badgeValue = res.data.willOver ?? 0;
- let overduedItem = bigItem.funcList.find(item => item.name === "已逾期");
- overduedItem.badgeValue = res.data.isOver ?? 0;
- // overdueWill.value = res.data.willOver ?? 0;
- // overdued.value = res.data.isOver ?? 0;
- })
- }
- // 功能列表
- let functionList = ref([{
- name: '基本信息',
- permissionCode: '712',
- funcList: [{
- name: '企业信息',
- url: '/pages/enterpriseInfo/index',
- icon: iconEnterpriseInfo,
- permissionCode: '7121'
- }, {
- name: '项目台账',
- url: '/pages/projectInfo/index',
- icon: iconProjectInfo,
- permissionCode: '7111'
- }, {
- name: '储备项目',
- url: '/pages/cbProject/index',
- icon: iconReserveProject,
- permissionCode: '7112'
- }, {
- name: '联系人',
- url: '/pages/contact/index',
- icon: iconContact,
- permissionCode: '7112'
- }]
- },
- {
- name: '由项目申报单位填写',
- permissionCode: '811',
- funcList: [{
- name: '周报',
- url: '/pages/weekly/index',
- icon: iconWeekly,
- permissionCode: '8112'
- }, {
- name: '月报',
- url: '/pages/monthly/index',
- icon: iconMonthly,
- permissionCode: '8113'
- }, {
- name: '年度计划',
- url: '/pages/yearly/index',
- icon: iconYearly,
- permissionCode: '8111'
- }]
- },
- {
- name: '问题督办',
- permissionCode: '713',
- funcList: [{
- name: '问题清单',
- url: '/pages/oversee/index',
- icon: iconQuestionList,
- permissionCode: '7131'
- }, {
- name: '问题录入',
- url: '/pages/questionInput/index',
- icon: iconQuestionInput,
- permissionCode: '7132'
- }, {
- name: '问题跟踪',
- url: '/pages/questionTrace/index',
- icon: iconQuestionTrace,
- permissionCode: '7133'
- }, {
- name: '预期提醒',
- url: '/pages/overdue/index',
- icon: iconOverdueWill,
- permissionCode: '7133',
- showBadge: true,
- badgeValue: 0
- }, {
- name: '已逾期',
- url: '/pages/overdue/overdued/index',
- icon: iconOverdued,
- permissionCode: '7133',
- showBadge: true,
- badgeValue: 0
- }]
- },
- {
- name: '统计分析',
- permissionCode: '714',
- lastLine: true,
- funcList: [{
- name: '资金计划',
- url: '/pages/countAnalysis/fundPlan/index',
- icon: iconFundPlan,
- permissionCode: '7141',
- }, {
- name: '资金使用',
- url: '/pages/countAnalysis/fundUse/index',
- icon: iconFundUse,
- permissionCode: '7142'
- }, {
- name: '项目进度',
- url: '/pages/countAnalysis/projectProcess/index',
- icon: iconProjectPercents,
- permissionCode: '7143'
- }, {
- name: '重大事项',
- url: '/pages/important/index',
- icon: iconImportant,
- permissionCode: '7143'
- }, {
- name: '前期手续',
- url: '/pages/preFlow/index',
- icon: iconPreFlow,
- permissionCode: '7143'
- }]
- },
- ])
- // 判断功能菜单权限
- const roles = store.getters && store.getters.permissions;
- function judgeFuncList() {
- let tempList = JSON.parse(JSON.stringify(functionList.value))
- for (let i in tempList) {
- //如果父级都没权限 直接移除
- if (!roles.includes(tempList[i].permissionCode)) {
- tempList[i].ban = true
- } else {
- let funcListSon = tempList[i].funcList
- for (let j in funcListSon) {
- if (!roles.includes(funcListSon[j].permissionCode)) {
- funcListSon[j].ban = true
- }
- }
- }
- }
- let filterList = tempList.filter(item => {
- return !item.ban
- })
- for (let i in filterList) {
- let filterListSon = filterList[i].funcList.filter(item => {
- return !item.ban
- })
- filterList[i].funcList = filterListSon
- }
- functionList.value = filterList
- }
- function goToPage(url, permissionCode) {
- if (permissionCode) {
- let havePermission = checkRoleById([permissionCode])
- if (!havePermission) return
- }
- uni.navigateTo({
- url
- })
- }
- // =============================未填写周报月报
- let popupShow = ref(false)
- let unWriteList = ref([])
- let unWriteListTotal = ref(0)
- function getUnwirteList() {
- getUnwriteReportList().then(res => {
- if (res.data.list.length > 0) {
- popupShow.value = true;
- unWriteList.value = res.data.list;
- unWriteListTotal.value = res.data.list.length;
- }
- })
- }
- function goToWriteReport(item) {
- const {
- sub_id: subId,
- month1: kj_month,
- } = item;
- let year = item.month1.substr(0, 4)
- let startDate = item.month1.substr(0, 10)
- if (item.kind === "1") { // 周报
- uni.navigateTo({
- url: `/pages/weekly/input/index?subId=${subId}&startDate=${startDate}&year=${year}&kj_month=${kj_month}`
- })
- } else { // 月报
- let kjMonth = kj_month.substring(0, 4) + '年' + kj_month.substring(4, 6) + '月';
- uni.navigateTo({
- url: `/pages/monthly/input/index?subId=${subId}&startDate=${startDate}&year=${year}&kj_month=${kjMonth}`
- })
- }
- }
- function popupClose() {
- popupShow.value = false
- }
- function getMessageCount() {
- getMessageNum().then(res => {
- if (res.data.count) {
- uni.setTabBarBadge({ //显示数字
- index: 1, //tabbar下标
- text: res.data.count + '' //数字
- })
- } else {
- uni.removeTabBarBadge({ //显示数字
- index: 1, //tabbar下标
- })
- }
- })
- }
- onLoad(() => {
- let now = new Date();
- projectYear.value = now.getFullYear();
- defaultIndex.value = [projectYear.value - 2000];
- judgeFuncList(); //判断权限
- getAnnounceMent(); //获取公告
- getHYFL(); //获取行业分类
- getJSDD(); //获取建设地点
- getProjectInfo(); //获取项目数据
- getOverdue(); //获取逾期数量
- getUnwirteList(); //获取未填写周报月报信息
- getMessageCount(); //获取未读消息数量
- });
- onShow(() => {
- if (popupShow.value) {
- getUnwirteList();
- }
- })
- </script>
- <template>
- <view class="container">
- <!-- 头 固定-->
- <view class="title-content">
- <!-- <text class="title">工作台</text> -->
- <!-- 搜索 -->
- <!-- <view class="search">
- <view class="search-input">
- <view class="search-icon"></view>
- <input @focus="goToPage('/pages/search/index')" placeholder="项目、领导电话..."
- placeholder-style="color: #D8D8D8;font-size:24rpx" />
- </view>
- <view class="search-focus" @click="goToPage('/pages/focus/index')">
- <view class="search-focus-icon"></view>
- 关注
- </view>
- </view> -->
- <view class="title">
- <view class="title-text">工作台</view>
- <view class="title-search" @click="goToPage('/pages/search/index')"></view>
- </view>
- </view>
- <!-- <view class="top-blue"> -->
- <!-- 新增功能 -->
- <!-- <view class="special-funcs">
- <view class="special-func-item gov" @click="goToPage('/pages/policy/search/index')">
- <view class="special-func-title">
- <view class="special-func-name">政策文件</view>
- <u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
- </view>
- </view>
- <view class="special-func-item todo" @click="goToPage('/pages/process/index')">
- <view class="special-func-title">
- <view class="special-func-name">办事流程</view>
- <u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
- </view>
- </view>
- <view class="special-func-item images" @click="goToPage('/pages/projectImage/index')">
- <view class="special-func-title">
- <view class="special-func-name">项目形象进度</view>
- <u-icon name="arrow-right" color="#fff" size="16" customStyle="margin-top:2rpx"></u-icon>
- </view>
- </view>
- </view>
- -->
- <!-- 公告 -->
- <!-- <view class="announcementList"> -->
- <!-- <view class="announcementList-text">通知公告</view> -->
- <!-- <u-notice-bar :text="announcementList" url="/pages/announcement/list/index" direction="column"
- mode="link" bgColor="#FFF7DC " color="#FF8D02"></u-notice-bar>
- </view> -->
- <!-- </view> -->
- <!-- 功能区 -->
- <view class="function-list">
- <view class="func-kind" v-for="item in functionList">
- <view class="func-kind-title">
- <view class="func-kind-icon"></view>
- {{item.name}}
- </view>
- <u-grid :border="false" col="4">
- <u-grid-item v-for="(listItem,listIndex) in item.funcList" :key="listIndex"
- @click="goToPage(listItem.url,listItem.permissionCode)">
- <view class="grid-item">
- <u-badge v-if="listItem.showBadge" class="badge-num" type="error" max="99"
- :value="listItem.badgeValue"></u-badge>
- <view class="grid-item-icon">
- <image :src="listItem.icon"></image>
- </view>
- {{listItem.name}}
- </view>
- </u-grid-item>
- </u-grid>
- </view>
- </view>
- <!-- 项目信息 -->
- <view class="project-info">
- <view class="project-info-select">
- <view class="choose-year" @click="yearShowChoose()">
- 年度:{{projectYear}}
- <u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
- </view>
- <view class="choose-year border" @click="kindShowChoose()">
- {{projectKind ??"行业分类"}}
- <u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
- </view>
- <view class="choose-year" @click="areaShowChoose()">
- {{projectArea ??"建设地点"}}
- <u-icon name="arrow-right" color="#343437" size="14" customStyle="margin-left:10rpx"></u-icon>
- </view>
- </view>
- <view class="project-num-box">
- <view class="project-num">
- <view class="project-num-title blue">
- 亿元项目数(单位:个)
- </view>
- <view class="project-num-minbox">
- <view class=" project-num-item" v-for="(item,index) in projectNum" :key="index">
- <view class="project-num-value">{{item.value}}</view>
- <text style="color:#82828C">{{item.name}}</text>
- </view>
- </view>
- </view>
- <view class="project-num">
- <view class="project-num-title">
- 资金使用情况(单位:万元)
- <u-icon name="arrow-right" color="#7D7D9C" size="14"></u-icon>
- </view>
- <view class="project-num-minbox">
- <view class="project-num-item" v-for="(item,index) in fundNum" :key="index">
- <view class="project-num-value">{{item.value}}</view>
- <text style="color:#82828C">{{item.name}}</text>
- </view>
- </view>
- </view>
- <view class="project-process">
- 实际整体进度
- <view class="line-progress">
- <u-line-progress :percentage="fullPercents" inactiveColor="#C1CEED" activeColor="#5D5AFF" :showText="false"
- height="13"></u-line-progress>
- </view>
- <view class="percent">
- {{fullPercents}}%
- </view>
- </view>
- </view>
- </view>
- <!-- 饼图 -->
- <view class="charts">
- <view class="charts-item">
- <view class="charts-item-title">单位:个</view>
- <view class="charts-item-ring">
- <qiun-data-charts v-if="showRing" type="ring" :opts="ringOpts" :chartData="ringChartData" />
- </view>
- <view class="charts-item-description">
- <view class="charts-item-key">
- <view class="charts-item-color"></view>
- <view class="charts-item-name">新建项目</view>
- </view>
- <view class="charts-item-value">{{numNew}}</view>
- </view>
- <view class="charts-item-description">
- <view class="charts-item-key">
- <view class="charts-item-color"></view>
- <view class="charts-item-name">续建项目</view>
- </view>
- <view class="charts-item-value">{{numOld}}</view>
- </view>
- <view class="charts-item-description">
- <view class="charts-item-key">
- <view class="charts-item-color"></view>
- <view class="charts-item-name">储备项目</view>
- </view>
- <view class="charts-item-value">{{numNo}}</view>
- </view>
- </view>
- <view class="charts-item">
- <view class="charts-item-pie">
- <qiun-data-charts v-if="showPie" type="pie" :opts="pieOpts" :chartData="pieChartData" />
- </view>
- <view class="charts-item-text">建设地点</view>
- <view class="charts-item-text">投资占比</view>
- </view>
- </view>
- <!-- 逾期提醒 -->
- <!-- <view class="overdue">
- <view class="overdue-item" @click="goToPage('/pages/overdue/index')">
- <view class="overdue-icon overdue-will">
- <view class="badge-box">
- <u-badge class="badge-num" type="error" max="99" :value="overdueWill"></u-badge>
- </view>
- </view>
- <view class="overdue-item-text">
- 预期提醒
- <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:20rpx"></u-icon>
- </view>
- </view>
- <view class="overdue-item" @click="goToPage('/pages/overdue/overdued/index')">
- <view class="overdue-icon overdued">
- <view class="badge-box">
- <u-badge class="badge-num" type="error" max="99" :value="overdued"></u-badge>
- </view>
- </view>
- <view class="overdue-item-text">
- 已逾期
- <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin-left:20rpx"></u-icon>
- </view>
- </view>
- </view>
- -->
- <!-- 周报日报年度计划 -->
- <!-- <view v-if="roles.includes('811')" class="report">
- <view v-if="roles.includes('8112')" class="report-item" @click="goToPage('/pages/weekly/index','8112')">
- <view class="report-icon weekly"></view>
- <view class="report-item-text">周报</view>
- </view>
- <view v-if="roles.includes('8113')" class="report-item" @click="goToPage('/pages/monthly/index','8113')">
- <view class="report-icon monthly"></view>
- <view class="report-item-text">月报</view>
- </view>
- <view v-if="roles.includes('8111')" class="report-item" @click="goToPage('/pages/yearly/index','8111')">
- <view class="report-icon yearly"></view>
- <view class="report-item-text">年度计划</view>
- </view>
- </view>-->
- <!-- 中部间隔 -->
- <view class="gap-line"></view>
- <!-- 底部间隔 -->
- <view class="gap-bottom"></view>
- <!-- 周报月报弹窗 -->
- <u-popup :show="popupShow" :round="20" @close="popupClose()" mode="center" closeable>
- <view class="remind-box">
- <text class="remind-title">提示</text>
- <view class="remind-card" v-for="(item,index) in unWriteList" :key="index">
- <view class="remind-item">
- <view class="remind-item-name">类型</view>
- <view class="remind-item-content">{{item.kind==='1'?'缺失周报':'缺失月报'}}</view>
- </view>
- <view class="remind-item">
- <view class="remind-item-name">项目名称</view>
- <view class="remind-item-content">{{item.sub_name || '--'}}</view>
- </view>
- <view class="remind-item">
- <view class="remind-item-name">说明</view>
- <view class="remind-item-content">{{item.remark || '--'}}</view>
- </view>
- <view class="remind-item">
- <view class="remind-item-btn" @click="goToWriteReport(item)">
- {{item.kind==='1'?'填写周报':'填写月报'}}
- </view>
- </view>
- <view class="remind-count">
- {{index + 1}}/{{unWriteListTotal}}
- </view>
- </view>
- </view>
- </u-popup>
- <!-- 年度选择 -->
- <u-picker :show="yearShow" :defaultIndex="defaultIndex" :columns="yearColumns" @confirm="yearClose"
- @cancel="yearClose" @close="yearClose" closeOnClickOverlay></u-picker>
- <!-- 行业选择 -->
- <u-picker :show="kindShow" :columns="kindColumns" @confirm="kindClose" @cancel="kindClose" @close="kindClose"
- closeOnClickOverlay></u-picker>
- <!-- 地点选择 -->
- <u-picker :show="areaShow" :columns="areaColumns" @confirm="areaClose" @cancel="areaClose" @close="areaClose"
- closeOnClickOverlay></u-picker>
- </view>
- </template>
- <style lang="scss" scoped>
- @font-face {
- font-family: TITLETEXT;
- src: url('@/font/RuiZiAoYunJingShenPinBoJianMianFei-Shan(REEJI-PinboGB-Flash)-2.ttf');
- }
- page {
- height: 100%;
- background-color: #F9FBFF;
- }
- .container {
- background: #F9FBFF;
- }
- .title-content {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 190rpx;
- padding-top: 100rpx;
- background-color: #1763E7;
- z-index: 1;
- .title {
- position: relative;
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 36rpx;
- font-weight: 700;
- color: #FFF;
- .title-search {
- position: absolute;
- right: 3%;
- width: 46rpx;
- height: 46rpx;
- background-image: url("@/static/search.png");
- background-size: 100% 100%;
- }
- }
- }
- .search {
- display: flex;
- justify-content: space-between;
- width: 92%;
- height: 68rpx;
- margin: 32rpx auto 44rpx;
- .search-input {
- display: flex;
- align-items: center;
- width: 592rpx;
- height: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- text-align: left;
- background-color: #fff;
- border-radius: 16rpx;
- .search-icon {
- width: 28rpx;
- height: 32rpx;
- margin-right: 26rpx;
- background-image: url('@/static/search-black.png');
- background-size: 100% 100%;
- }
- }
- .search-focus {
- width: 50rpx;
- height: 100%;
- font-size: 24rpx;
- color: #fff;
- font-weight: 400;
- line-height: 30rpx;
- .search-focus-icon {
- width: 36rpx;
- height: 32rpx;
- margin: 0 auto 10rpx;
- background-image: url('@/static/focus.png');
- background-size: 100% 100%;
- }
- }
- }
- .top-blue {
- width: 100%;
- height: 722rpx;
- padding-top: 288rpx;
- margin-bottom: 82rpx;
- background: #1763E7;
- border-radius: 0 0 40rpx 40rpx;
- }
- .announcementList {
- width: 92%;
- height: 72rpx;
- margin: 0 auto 32rpx;
- padding: 10rpx 0;
- color: #FF8D02;
- background-color: #FFF7DC;
- border-radius: 26rpx;
- .announcementList-text {
- margin-bottom: 18rpx;
- font-size: 28rpx;
- }
- }
- ::v-deep .u-notice-bar {
- width: 100%;
- // padding: 0;
- border-radius: 19rpx;
- }
- ::v-deep .u-notice__swiper__item__text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .special-funcs {
- display: flex;
- justify-content: space-between;
- width: 92%;
- height: 210rpx;
- margin: 50rpx auto 32rpx;
- background-size: 100% 100%;
- .special-func-item {
- width: 200rpx;
- height: 210rpx;
- padding: 34rpx 18rpx;
- box-sizing: border-box;
- background-size: 100% 100%;
- .special-func-title {
- display: flex;
- justify-content: space-between;
- align-items: flex-start;
- }
- .special-func-name {
- color: #FFFFFF;
- line-height: 34rpx;
- font-size: 32rpx;
- font-family: TITLETEXT;
- }
- }
- .gov {
- background-image: url('@/static/special-gov.png');
- }
- .todo {
- background-image: url('@/static/special-todo.png');
- }
- .images {
- background-image: url('@/static/special-image.png');
- }
- }
- .project-info-select {
- display: flex;
- justify-content: space-between;
- width: calc(100% - 48rpx);
- height: 80rpx;
- margin: 0 auto;
- background-color: #fff;
- border-radius: 16rpx;
- box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 0, 0, 0.03);
- .choose-year {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 24rpx;
- font-weight: 500;
- color: #343437;
- }
- .border {
- border-left: 3rpx solid #EAF0FD;
- border-right: 3rpx solid #EAF0FD;
- ;
- }
- }
- .project-info {
- width: calc(100% - 48rpx);
- min-height: 326rpx;
- margin: 0 auto 25rpx;
- border-radius: 28rpx;
- background-color: #F9FBFF;
- border: 2rpx solid #C1CEED;
- overflow: hidden;
- .project-num-box {
- width: 100%;
- .project-num {
- width: 100%;
- height: 222rpx;
- padding: 40rpx 32rpx;
- box-sizing: border-box;
- border-bottom: 3rpx solid #EAF0FD;
- }
- }
- .project-num-title {
- display: flex;
- justify-content: space-between;
- margin-bottom: 40rpx;
- font-weight: 500;
- font-size: 28rpx;
- color: #E49F15;
- }
- .blue {
- color: #1763E7
- }
- .project-num-minbox {
- display: flex;
- }
- .project-num-item {
- flex: 1;
- margin: auto 0;
- font-size: 24rpx;
- color: #343437;
- text-align: center;
- .project-num-value {
- margin-bottom: 8rpx;
- font-size: 36rpx;
- color: #343437;
- font-weight: 700;
- }
- }
- .project-process {
- display: flex;
- align-items: center;
- justify-content: space-between;
- width: 100%;
- height: 108rpx;
- padding: 0 36rpx;
- font-size: 28rpx;
- font-weight: 500;
- color: #4B17E7;
- .line-progress {
- width: 50%;
- }
- .percent {
- color: #4B17E7;
- }
- }
- }
- .charts {
- display: flex;
- justify-content: space-between;
- width: calc(100% - 48rpx);
- height: 438rpx;
- margin: 0 auto 54rpx;
- gap: 30rpx;
- .charts-item {
- width: 336rpx;
- height: 100%;
- padding: 22rpx 32rpx;
- box-sizing: border-box;
- border-radius: 40rpx;
- border: 3rpx solid rgba(200, 216, 247, 0.302);
- .charts-item-title {
- font-size: 24rpx;
- color: #343437;
- }
- .charts-item-ring {
- height: 250rpx;
- margin: 0 auto;
- }
- .charts-item-pie {
- width: 100%;
- height: 300rpx;
- margin: 0 auto;
- }
- .charts-item-text {
- width: 100%;
- text-align: center;
- font-size: 28rpx;
- font-weight: 500;
- color: #3D3D3D;
- }
- }
- }
- .charts-item-description {
- display: flex;
- align-items: center;
- justify-content: space-between;
- width: 100%;
- margin: 4rpx 0;
- font-size: 24rpx;
- .charts-item-key {
- display: flex;
- align-items: center;
- }
- .charts-item-color {
- width: 24rpx;
- height: 24rpx;
- margin-right: 16rpx;
- background: #3E76FC;
- border-radius: 6rpx;
- }
- .charts-item-name {
- color: #82828C;
- }
- .charts-item-value {
- font-weight: 500;
- color: #343437;
- }
- }
- .overdue {
- display: flex;
- justify-content: space-between;
- width: 92%;
- height: 136rpx;
- margin: 25rpx auto;
- border-radius: 28rpx;
- backdrop-filter: blur(40rpx);
- }
- .overdue-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- width: 328rpx;
- height: 136rpx;
- padding: 0 28rpx 0 44rpx;
- box-sizing: border-box;
- font-size: 32rpx;
- color: #001D4F;
- font-weight: 400;
- font-family: TITLETEXT;
- background-color: #fff;
- border-radius: 28rpx;
- .overdue-icon {
- background-size: 100% 100%;
- background-position: center center;
- }
- .overdue-will {
- width: 52rpx;
- height: 53rpx;
- background-image: url('@/static/overdue-warn.png');
- .badge-num {
- position: absolute;
- top: 40rpx;
- right: -36rpx;
- }
- }
- .overdued {
- width: 61rpx;
- height: 54rpx;
- background-image: url('@/static/overdue.png');
- .badge-num {
- position: absolute;
- top: 40rpx;
- right: -36rpx
- }
- }
- .badge-box {
- position: relative;
- }
- .overdue-item-text {
- display: flex;
- align-items: center;
- }
- }
- .report {
- display: flex;
- justify-content: space-between;
- width: 92%;
- margin: 25rpx auto 0;
- padding: 0 78rpx;
- height: 164rpx;
- border-radius: 28rpx;
- background: #fff;
- }
- .report-item {
- width: 128rpx;
- height: 142rpx;
- margin: auto 0;
- text-align: center;
- .report-icon {
- width: 96rpx;
- height: 96rpx;
- margin: 0 auto;
- background-size: 100% 100%;
- }
- .weekly {
- background-image: url('@/static/icon-weekly.svg');
- }
- .monthly {
- background-image: url('@/static/icon-monthly.svg');
- }
- .yearly {
- background-image: url('@/static/icon-yearly.svg');
- }
- .report-item-text {
- margin-top: 10rpx;
- color: #000;
- font-size: 28rpx;
- }
- }
- .gap-line {
- width: 100%;
- height: 20rpx;
- background: #E8ECF4;
- }
- .function-list {
- width: 100%;
- min-height: 100rpx;
- margin: 200rpx auto 0;
- padding: 32rpx;
- box-sizing: border-box;
- .func-kind-title {
- position: relative;
- display: flex;
- align-items: center;
- width: 158rpx;
- height: 48rpx;
- padding-left: 27rpx;
- margin-bottom: 32rpx;
- font-weight: 400;
- color: #001D4F;
- line-height: 30rpx;
- font-size: 32rpx;
- font-family: TITLETEXT;
- background: linear-gradient(90deg, rgba(23, 99, 231, 0.37) 0%, rgba(255, 255, 255, 0) 100%);
- white-space: nowrap;
- .func-kind-icon {
- position: absolute;
- top: 0;
- left: -9rpx;
- width: 18rpx;
- height: 48rpx;
- margin-right: 18rpx;
- background: #1869F6;
- border-radius: 9rpx;
- }
- }
- .grid-item {
- height: 92rpx;
- margin: 18rpx 0 46rpx;
- font-size: 24rpx;
- color: #343437;
- .badge-num {
- position: absolute;
- top: 0;
- right: 25rpx;
- }
- .grid-item-icon {
- width: 56rpx;
- height: 56rpx;
- margin: 0 auto 6rpx;
- image {
- width: 100%;
- height: 100%;
- }
- }
- }
- .bottom-item {
- margin-bottom: 0;
- }
- }
- .gap-bottom {
- width: 100%;
- height: 100rpx;
- }
- .remind-box {
- width: 672rpx;
- min-height: 464rpx;
- max-height: 858rpx;
- padding: 16rpx 40rpx;
- overflow: hidden;
- overflow-y: scroll;
- .remind-title {
- color: #FF4800;
- font-size: 36rpx;
- }
- .remind-card {
- position: relative;
- min-height: 376rpx;
- padding-bottom: 32rpx;
- border-bottom: 2rpx solid #D8D8D8;
- .remind-count {
- position: absolute;
- top: 0;
- right: -40rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 134rpx;
- height: 64rpx;
- font-size: 32rpx;
- color: #1869F6;
- background: #CEE0FF;
- border-radius: 32rpx 0rpx 0rpx 32rpx;
- }
- }
- .remind-item {
- display: flex;
- align-items: flex-start;
- margin-top: 40rpx;
- font-size: 32rpx;
- .remind-item-name {
- min-width: 192rpx;
- color: #9E9E9E;
- }
- .remind-item-content {
- color: #343437;
- float: left;
- }
- .remind-item-btn {
- width: 100%;
- height: 84rpx;
- line-height: 84rpx;
- font-size: 36rpx;
- color: #fff;
- text-align: center;
- background: #1869F6;
- border-radius: 16rpx;
- }
- }
- }
- ::v-deep .u-popup__content {
- overflow: hidden;
- }
- </style>
|