From d6803b83a827a62fa29737c31104c3ee9bc194d8 Mon Sep 17 00:00:00 2001 From: zhuzhuanzhuan Date: 星期一, 08 四月 2024 10:18:41 +0800 Subject: [PATCH] 1、全局菜单栏新增点击父级菜单标题后在导航栏展开父级所有下一级菜单功能 2、登录页面按照新需求调整整体布局及样式 3、优化首页看板页面图表视图 --- src/views/dashboard/EquipmentSignage.vue | 11 src/views/dashboard/BranchFactorySignage.vue | 27 - src/views/dashboard/IndexSignage.vue | 33 - src/components/layouts/UserLayout.vue | 47 +- src/views/user/Login.vue | 556 +++++++++++++++++++--------------- src/views/dashboard/Analysis.vue | 11 src/assets/login.jpg | 0 src/components/layouts/TabLayout.vue | 64 +++ src/assets/login.jpeg | 0 src/components/menu/index.js | 22 + src/views/dashboard/WorkshopSectionSignage.vue | 171 ++++------ src/api/signage.js | 6 12 files changed, 491 insertions(+), 457 deletions(-) diff --git a/src/api/signage.js b/src/api/signage.js index a62b28a..4a4e433 100644 --- a/src/api/signage.js +++ b/src/api/signage.js @@ -24,5 +24,9 @@ // 璁惧OEE缁熻 getEquipmentOEEStatistics: productionCode => getAction('/mdc/home/equipmentOEEStatistics', { productionCode }), // 璁惧OEE鍜屽埄鐢ㄧ巼瀵规瘮 - getEquipmentMonthStatisticsApi: productionCode => getAction('/mdc/home/equipmentMonthStatistics', { productionCode }) + getEquipmentMonthStatisticsApi: productionCode => getAction('/mdc/home/equipmentMonthStatistics', { productionCode }), + // 宸ユ绾у墠7澶╁埄鐢ㄧ巼鎶樼嚎鍥� + getEquipmentDayUtilizationStatisticsApi: productionCode => getAction('/mdc/home/equipmentDayUtilizationStatistics', { productionCode }), + // 涓婁釜鏈堝悇璁惧OEE缁熻 + getEquipmentOEEMonthStatisticsApi: productionCode => getAction('/mdc/home/equipmentOEEMonthStatistics', { productionCode }) } \ No newline at end of file diff --git a/src/assets/login.jpeg b/src/assets/login.jpeg new file mode 100644 index 0000000..df3018f --- /dev/null +++ b/src/assets/login.jpeg Binary files differ diff --git a/src/assets/login.jpg b/src/assets/login.jpg new file mode 100644 index 0000000..799d767 --- /dev/null +++ b/src/assets/login.jpg Binary files differ diff --git a/src/components/layouts/TabLayout.vue b/src/components/layouts/TabLayout.vue index 0340721..2e79947 100644 --- a/src/components/layouts/TabLayout.vue +++ b/src/components/layouts/TabLayout.vue @@ -4,8 +4,8 @@ <contextmenu :itemList="menuItemList" :visible.sync="menuVisible" style="z-index: 9999;" @select="onMenuSelect"/> <!-- update-end- author:sunjianlei --- date:20191009 --- for: 鎻愬崌鍙抽敭鑿滃崟鐨勫眰绾� --> <a-tabs - v-if="$route.meta.title!=='棣栭〉'&&multipage" @contextmenu.native="e => onContextmenu(e)" + v-if="$route.meta.title!=='棣栭〉'&&multipage" :active-key="activePage" class="tab-layout-tabs" style="height:52px" @@ -14,12 +14,12 @@ @change="changePage" @tabClick="tabCallBack" @edit="editPage"> - <a-tab-pane :id="page.fullPath" :key="page.fullPath" v-for="page in pageList" + <a-tab-pane :id="page.path" :key="page.path" v-for="page in pageList" :closable="!(page.meta.title=='棣栭〉')"> - <span slot="tab" :pagekey="page.fullPath">{{ page.meta.title }}</span> + <span slot="tab" :pagekey="page.path">{{ page.meta.title }}</span> </a-tab-pane> </a-tabs> - <div> + <div :style="{padding: $route.meta.title=='棣栭〉'?'0':'12px 12px 0'}"> <!-- update-begin-author:taoyan date:20201221 for:姝ゅ鍒犳帀transition鏍囩 涓嶇煡閬撲负浠�涔堝姞涓婂悗 椤甸潰璺敱鍒囨崲鐨勬椂鍊欏嵆1鍙婅彍鍗曞垏鍒�2鍙婅彍鍗曠殑鏃跺�� 涓や釜鑿滃崟椤甸潰浼氬悓鏃跺嚭鐜�300-500绉掑乏鍙� --> <keep-alive v-if="multipage"> <router-view v-if="reloadFlag"/> @@ -91,6 +91,7 @@ this.pageList.push(currentRoute) this.linkList.push(currentRoute.fullPath) this.activePage = currentRoute.fullPath + this.$bus.$on('clickMenuTitleSelected', this.clickMenuTitleSelected) }, mounted() { }, @@ -123,10 +124,12 @@ } }, 'activePage': function(key) { + console.log('key', key) let index = this.linkList.lastIndexOf(key) let waitRouter = this.pageList[index] // 銆怲ESTA-523銆戜慨澶嶏細涓嶅厑璁搁噸澶嶈烦杞矾鐢卞紓甯� - if (waitRouter.fullPath !== this.$route.fullPath) { + console.log('waitRouter', waitRouter, 'fullPath', this.$route.fullPath, waitRouter.fullPath !== this.$route.fullPath) + if (waitRouter.path !== this.$route.fullPath) { this.$router.push(Object.assign({}, waitRouter)) } this.changeTitle(waitRouter.meta.title) @@ -166,6 +169,7 @@ // update-begin-author:sunjianlei date:20200120 for: 鍔ㄦ�佹洿鏀归〉闈㈡爣棰� changeTitle(title) { + console.log('title', title) let projectTitle = 'MDC鏅烘収杞﹂棿' // 棣栭〉鐗规畩澶勭悊 if (this.$route.path === indexKey) { @@ -177,6 +181,7 @@ // update-end-author:sunjianlei date:20200120 for: 鍔ㄦ�佹洿鏀归〉闈㈡爣棰� changePage(key) { + console.log('changePage', key) this.activePage = key }, tabCallBack() { @@ -202,8 +207,8 @@ return } console.log('this.pageList ', this.pageList) - let removeRoute = this.pageList.filter(item => item.fullPath == key) - this.pageList = this.pageList.filter(item => item.fullPath !== key) + let removeRoute = this.pageList.filter(item => item.path == key) + this.pageList = this.pageList.filter(item => item.path !== key) let index = this.linkList.indexOf(key) this.linkList = this.linkList.filter(item => item !== key) index = index >= this.linkList.length ? this.linkList.length - 1 : index @@ -223,7 +228,7 @@ this.emitPageClosed(removeRoute[0]) } //update-end--Author:scott Date:20201015 for锛氳矾鐢辩紦瀛橀棶棰橈紝鍏抽棴浜唗ab椤垫椂鍐嶆墦寮�灏变笉鍒锋柊 #842 - + this.tabCallBack() }, // 瑙﹀彂 page-closed 锛堥〉闈㈠叧闂級鍏ㄥ眬浜嬩欢 emitPageClosed(closedRoute) { @@ -284,7 +289,7 @@ let indexContent = this.pageList.slice(0, 1)[0] this.linkList = this.linkList.slice(index, index + 1) this.pageList = this.pageList.slice(index, index + 1) - this.linkList.unshift(indexContent.fullPath) + this.linkList.unshift(indexContent.path) this.pageList.unshift(indexContent) this.activePage = this.linkList[1] } @@ -298,17 +303,19 @@ let index = this.linkList.indexOf(pageKey) this.linkList = this.linkList.slice(index) this.pageList = this.pageList.slice(index) - this.linkList.unshift(indexContent.fullPath) + this.linkList.unshift(indexContent.path) this.pageList.unshift(indexContent) + // 鑻ュ皢婵�娲婚〉涓�骞跺叧闂垯鏄剧ず瀵艰埅鏍忛櫎棣栭〉绗竴涓〉闈� if (this.linkList.indexOf(this.activePage) < 0) { - this.activePage = this.linkList[0] + this.activePage = this.linkList[1] } }, closeRight(pageKey) { let index = this.linkList.indexOf(pageKey) this.linkList = this.linkList.slice(0, index + 1) this.pageList = this.pageList.slice(0, index + 1) - if (this.linkList.indexOf(this.activePage < 0)) { + // 鑻ュ皢婵�娲婚〉涓�骞跺叧闂垯鏄剧ず瀵艰埅鏍忔渶鍚庝竴涓〉闈� + if (this.linkList.indexOf(this.activePage) < 0) { this.activePage = this.linkList[this.linkList.length - 1] } }, @@ -340,6 +347,39 @@ //鏂板涓�涓繑鍥炴柟娉� excuteCallback(callback) { callback() + }, + + clickMenuTitleSelected(selectedMenus) { + //console.log("鏂扮殑璺敱",newRoute) + console.log('clickTitle', this.activePage) + this.activePage = selectedMenus[0].path + if (!this.multipage) { + this.linkList = [this.linkList[0], selectedMenus[0].path] + this.pageList = [this.pageList[0], Object.assign({}, selectedMenus[0])] + // update-begin-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛� + } else if (indexKey == selectedMenus[0].path) { + //棣栭〉鏃� 鍒ゆ柇鏄惁缂撳瓨 娌℃湁缂撳瓨 鍒锋柊涔� + if (selectedMenus[0].meta.keepAlive === false) { + this.routeReload() + } + // update-end-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛� + } else { + // selectedMenus.forEach(menuItem => { + // if (!this.linkList.includes(menuItem.path)) { + // console.log('瑙﹀彂澧炲姞') + // this.linkList.push(menuItem.path) + // this.pageList.push(menuItem) + // } else { + // console.log('瑙﹀彂娌℃湁澧炲姞') + // let oldIndex = this.linkList.indexOf(menuItem.path) + // let oldPositionRoute = this.pageList[oldIndex] + // this.pageList.splice(oldIndex, 1, Object.assign({}, menuItem, { meta: oldPositionRoute.meta })) + // } + // }) + // 鐐瑰嚮鏍囬鍚庡湪瀵艰埅鏍忚鐩栧墠涓�涓爣棰樻墍灞曞紑鐨勪笅绾ц彍鍗� + this.linkList = [this.linkList[0], ...selectedMenus.map(item => item.path)] + this.pageList = [this.pageList[0], ...selectedMenus] + } } } } diff --git a/src/components/layouts/UserLayout.vue b/src/components/layouts/UserLayout.vue index 42d7cce..6896523 100644 --- a/src/components/layouts/UserLayout.vue +++ b/src/components/layouts/UserLayout.vue @@ -1,17 +1,17 @@ <template> <div id="userLayout" :class="['user-layout-wrapper', device]"> <div class="container"> - <div class="top"> - <div class="header"> - <a href="/"> - <img src="~@/assets/lxzn.png" class="logo" alt="logo"> - <span class="title">MDC鏅烘収杞﹂棿</span> - </a> - </div> - <!--<div class="desc">--> - <!--Jeecg Boot 鏄腑鍥芥渶鍏峰奖鍝嶅姏鐨� 浼佷笟绾� 浣庝唬鐮佸钩鍙�--> + <!--<div class="top">--> + <!--<div class="header">--> + <!--<a href="/">--> + <!--<img src="~@/assets/lxzn_white.png" class="logo" alt="logo">--> + <!--<span class="title">MDC鏅烘収杞﹂棿</span>--> + <!--</a>--> <!--</div>--> - </div> + <!--<!–<div class="desc">–>--> + <!--<!–Jeecg Boot 鏄腑鍥芥渶鍏峰奖鍝嶅姏鐨� 浼佷笟绾� 浣庝唬鐮佸钩鍙�–>--> + <!--<!–</div>–>--> + <!--</div>--> <route-view></route-view> @@ -66,10 +66,13 @@ .container { width: 100%; min-height: 100%; - background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%; + background: #f0f2f5 url(~@/assets/login.jpg) no-repeat 50%; background-size: 100%; - padding: 110px 0 144px; + /*padding: 110px 0 144px;*/ position: relative; + display: flex; + align-items: center; + justify-content: center; a { text-decoration: none; @@ -77,6 +80,10 @@ .top { text-align: center; + position: absolute; + top: 50px; + left: 50px; + .header { height: 44px; @@ -95,13 +102,13 @@ .logo { height: 44px; vertical-align: top; - margin-right: 16px; + margin-right: 10px; border-style: none; } .title { - font-size: 33px; - color: rgba(0, 0, 0, .85); + font-size: 30px; + color: #fff; font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-weight: 600; position: relative; @@ -117,17 +124,15 @@ } .main { - min-width: 260px; - width: 368px; - margin: 0 auto; + background-color: #fff; + width: 1100px; + border-radius: 10px; } .footer { position: absolute; width: 100%; bottom: 0; - padding: 0 16px; - margin: 48px 0 24px; text-align: center; .links { @@ -142,7 +147,7 @@ } } .copyright { - color: rgba(0, 0, 0, 0.45); + color: #fff; font-size: 14px; } } diff --git a/src/components/menu/index.js b/src/components/menu/index.js index fc2124d..d47076c 100644 --- a/src/components/menu/index.js +++ b/src/components/menu/index.js @@ -59,7 +59,6 @@ methods: { // select menu item onOpenChange (openKeys) { - // 鍦ㄦ按骞虫ā寮忎笅鏃舵墽琛岋紝骞朵笖涓嶅啀鎵ц鍚庣画 if (this.mode === 'horizontal') { this.openKeys = openKeys @@ -161,13 +160,32 @@ </Item> ) }, + handleTitleClick(record,event){ + this.selectedKeys=[] + const routes = this.$route.matched.concat() + const { hidden } = this.$route.meta + + if (routes.length >= 3 && hidden) { + routes.pop() + this.selectedKeys = [routes[routes.length - 1].path] + } else { + if (record.path === '/dashboard/analysis') { + //濡傛灉鏄椤靛垯鐩存帴璺宠浆棣栭〉 + this.selectedKeys = [record] + } else if (record.children && record.children.length > 0) { + //濡傛灉涓嶆槸棣栭〉涓旀湁瀛愯彍鍗曞垯灞曞紑鐐瑰嚮鏍囬涓嬬殑鎵�鏈変笉鍚笅绾ц彍鍗曠殑瀛愯彍鍗曡嚦瀵艰埅鏍忓苟鎵撳紑绗竴涓瓙鑿滃崟椤甸潰锛岃嫢瀛愯彍鍗曟爣棰樹笅浠嶆湁涓嬩竴绾ц彍鍗曞垯鍙渶瑕佺偣鍑诲惈涓嬬骇鑿滃崟鐨勫瓙鑿滃崟鏍囬鍗冲彲 + this.selectedKeys = record.children.filter(item => !item.hidden&&!item.children) + } + } + this.$bus.$emit('clickMenuTitleSelected', this.selectedKeys) + }, renderSubMenu (menu) { const itemArr = [] if (!menu.alwaysShow) { menu.children.forEach(item => itemArr.push(this.renderItem(item))) } return ( - <SubMenu {...{ key: menu.path }}> + <SubMenu {...{ key: menu.path }} onTitleClick={this.handleTitleClick.bind(this.$event,menu)}> <span slot="title"> {this.renderIcon(menu.meta.icon)} <span>{menu.meta.title}</span> diff --git a/src/views/dashboard/Analysis.vue b/src/views/dashboard/Analysis.vue index 17ea563..3570efe 100644 --- a/src/views/dashboard/Analysis.vue +++ b/src/views/dashboard/Analysis.vue @@ -81,5 +81,14 @@ </script> <style lang="less" scoped> - + /deep/ .back-nav { + width: 100px; + height: 30px; + color: #fff; + position: absolute; + top: 15px; + left: 10px; + cursor: pointer; + z-index: 9999 + } </style> \ No newline at end of file diff --git a/src/views/dashboard/BranchFactorySignage.vue b/src/views/dashboard/BranchFactorySignage.vue index 066d3f9..4b15280 100644 --- a/src/views/dashboard/BranchFactorySignage.vue +++ b/src/views/dashboard/BranchFactorySignage.vue @@ -1,25 +1,18 @@ <template> <div class="page-container"> - <!--<div class="page-title">--> - <!--<slot name="index_signage_nav"></slot>--> - <!--<!–<dv-decoration-11 class="workshop-nav" v-for="item in workshopList">–>--> - <!--<!–{{item.workshopName}}–>--> - <!--<!–</dv-decoration-11>–>--> - <!--</div>--> <div class="content-container"> <div style="width: 25%" class="left-col"> <div class="back-nav" @click="$emit('backToLastSignage','Index')" v-if="userType===4"> <dv-decoration-7>涓婁竴绾�</dv-decoration-7> </div> <dv-border-box-9 style="padding: 30px 20px 0"> - <!--<div class="first-title">M D C 鍏� 缃� 鎬� 鏁� : 6 0 3 鍙�</div>--> <div id="running_state_chart" style="width:100%;height: 400px;"></div> <div id="efficiency_chart" style="width: 100%;height: 350px"></div> </dv-border-box-9> </div> + <div style="width: 42%" class="middle-col"> <dv-border-box-9 style="padding: 30px 20px 0"> - <!--<div class="first-title">璁� 澶� 鍙� 璐� 鎬� 鏁� : 1 0 2 2 鍙�</div>--> <div style="display: flex"> <div id="tech_condition_chart" style="width:50%;height: 420px;"></div> <div id="warranty_malfunction_chart" style="width:50%;height: 420px;"></div> @@ -59,6 +52,7 @@ </div> </dv-border-box-9> </div> + <div style="width: 32%"> <dv-border-box-9 style="padding: 30px 0 20px"> <div id="bar_chart" style="width:100%;height: 280px;"></div> @@ -1033,12 +1027,6 @@ color: #fff; margin-bottom: 10px; - .workshop-nav { - width: 120px; - height: 40px; - font-size: 12px; - cursor: pointer; - } } .content-container { @@ -1047,17 +1035,6 @@ justify-content: space-between; .left-col { - .back-nav { - width: 100px; - height: 30px; - color: #fff; - position: absolute; - top: 25px; - left: 25px; - cursor: pointer; - z-index: 9999 - } - .first-title { color: #00A8AC; font-size: 20px; diff --git a/src/views/dashboard/EquipmentSignage.vue b/src/views/dashboard/EquipmentSignage.vue index 0938c54..04ac89e 100644 --- a/src/views/dashboard/EquipmentSignage.vue +++ b/src/views/dashboard/EquipmentSignage.vue @@ -621,17 +621,6 @@ .left-col { padding: 0 10px 0; - .back-nav { - width: 100px; - height: 30px; - color: #fff; - position: absolute; - top: 15px; - left: 15px; - cursor: pointer; - z-index: 9999 - } - .equipmentId-container { height: 100%; color: #eee; diff --git a/src/views/dashboard/IndexSignage.vue b/src/views/dashboard/IndexSignage.vue index 2832ed4..a3ddd65 100644 --- a/src/views/dashboard/IndexSignage.vue +++ b/src/views/dashboard/IndexSignage.vue @@ -1,22 +1,15 @@ <template> <div class="page-container"> - <!--<div class="page-title">--> - <!--<slot name="index_signage_nav"></slot>--> - <!--<!–<dv-decoration-11 class="workshop-nav" v-for="item in workshopList">–>--> - <!--<!–{{item.workshopName}}–>--> - <!--<!–</dv-decoration-11>–>--> - <!--</div>--> <div class="content-container"> <div style="width: 25%" class="left-col"> <dv-border-box-9 style="padding: 30px 20px 0"> - <!--<div class="first-title">M D C 鍏� 缃� 鎬� 鏁� : 6 0 3 鍙�</div>--> <div id="running_state_chart" style="width:100%;height: 300px"></div> <div id="efficiency_chart" style="width: 100%;height: 465px"></div> </dv-border-box-9> </div> + <div style="width: 42%" class="middle-col"> <dv-border-box-9 style="padding: 30px 20px 0"> - <!--<div class="first-title">璁� 澶� 鍙� 璐� 鎬� 鏁� : 1 0 2 2 鍙�</div>--> <div style="display: flex"> <div id="tech_condition_chart" style="width:50%;height: 340px;"></div> <div id="warranty_malfunction_chart" style="width:50%;height: 340px;"></div> @@ -64,6 +57,7 @@ </div> </dv-border-box-9> </div> + <div style="width: 32%"> <dv-border-box-9 style="padding: 30px 0 20px"> <div id="bar_chart" style="width:100%;height: 280px"></div> @@ -1033,13 +1027,6 @@ flex-wrap: wrap; color: #fff; margin-bottom: 10px; - - .workshop-nav { - width: 120px; - height: 40px; - font-size: 12px; - cursor: pointer; - } } .content-container { @@ -1047,23 +1034,7 @@ display: flex; justify-content: space-between; - .left-col { - .first-title { - color: #00A8AC; - font-size: 20px; - text-align: center; - font-weight: bold; - } - } - .middle-col { - .first-title { - color: #00A8AC; - font-size: 20px; - text-align: center; - font-weight: bold; - } - .support-plan-container { display: flex; justify-content: space-around; diff --git a/src/views/dashboard/WorkshopSectionSignage.vue b/src/views/dashboard/WorkshopSectionSignage.vue index e010ce2..e5bf1e1 100644 --- a/src/views/dashboard/WorkshopSectionSignage.vue +++ b/src/views/dashboard/WorkshopSectionSignage.vue @@ -5,13 +5,14 @@ <div class="back-nav" @click="$emit('backToLastSignage','BranchFactory')" v-if="userType>=3"> <dv-decoration-7>涓婁竴绾�</dv-decoration-7> </div> - <dv-border-box-9 style="padding: 15px"> + + <dv-border-box-9 style="padding: 15px 15px 0"> <div id="tech_condition_chart" style="width:100%;height: 240px;"></div> <div id="warranty_malfunction_chart" style="width:100%;height: 240px;"></div> - <div style="display: flex;"> - - <div style="flex:0.5;display: flex;flex-direction:column;align-items: center"> - <dv-decoration-11 style="width:90%;height:60px;color: #ccc;font-size: 20px">涓変繚璁″垝</dv-decoration-11> + <div> + <div style="display: flex;flex-direction:column;align-items: center"> + <dv-decoration-11 style="width:45%;height:60px;color: #fff;font-size: 20px;align-self: flex-start">涓変繚璁″垝 + </dv-decoration-11> <div class="support-plan-container"> <div class="support-plan-item" style="background:#5FE0AF"> <div>涓変繚鏈湀璁″垝</div> @@ -30,21 +31,21 @@ <div class="support-plan-item" style="background:#FCAA29"> <div>寤舵湡</div> <div class="plan-value-container"> - <div class="plan-value">{{nextMonthMaintenancePlanNum}}</div> + <div class="plan-value">{{maintenanceExtensionNum}}</div> <div>鍙�</div> </div> </div> <div class="support-plan-item" style="background:#F56C6C"> <div>瓒呮湡</div> <div class="plan-value-container"> - <div class="plan-value">{{nextNextMonthMaintenancePlanNum}}</div> + <div class="plan-value">{{maintenanceOverdueNum}}</div> <div>鍙�</div> </div> </div> <div class="support-plan-item" style="background:#D6BC52"> <div>涓嬫湀璁″垝</div> <div class="plan-value-container"> - <div class="plan-value">{{nextNextMonthMaintenancePlanNum}}</div> + <div class="plan-value">{{nextMonthMaintenancePlanNum}}</div> <div>鍙�</div> </div> </div> @@ -58,8 +59,12 @@ </div> </div> - <div style="flex:0.5;display: flex;justify-content: center"> - <dv-decoration-11 style="width:90%;height:60px;color: #ccc;font-size: 20px">浜屼繚璁″垝</dv-decoration-11> + <div style="display: flex;margin-top: 10px;justify-content: space-between;align-items: center;"> + <dv-decoration-11 style="width:45%;height:60px;font-size: 20px;color: #fff">浜屼繚璁″垝</dv-decoration-11> + <div + style="flex:1;text-align:center;font-size: 25px;color: #9BD890;overflow: hidden;text-overflow: ellipsis;white-space: nowrap"> + 2024骞�4鏈�1鏃ュぇ淇� + </div> </div> </div> </dv-border-box-9> @@ -136,10 +141,12 @@ ], thisMonthMaintenancePlanNum: 0, thisMonthMaintenanceRealNum: 0, + maintenanceExtensionNum: 0, + maintenanceOverdueNum: 0, nextMonthMaintenancePlanNum: 0, nextNextMonthMaintenancePlanNum: 0, lineChart: '', - lineChartData: [], + lineChartData: {}, gaugeChart1: '', gaugeChart2: '', gaugeChart3: '', @@ -149,48 +156,7 @@ gaugeChartData3: [], gaugeChartData4: [], barChart: '', - barChartData: [ - { - name: '2640221', - value: 20 - }, - { - name: '2640222', - value: 40 - }, - { - name: '2640223', - value: 70 - }, - { - name: '2640224', - value: 30 - }, - { - name: '2640225', - value: 35 - }, - { - name: '2640226', - value: 80 - }, - { - name: '2640227', - value: 40 - }, - { - name: '12640220', - value: 60 - }, - { - name: '12640221', - value: 40 - }, - { - name: '12640222', - value: 35 - } - ], + barChartData: [], equipmentId: '' } }, @@ -209,6 +175,8 @@ this.getWarrantyMalfunctionDataByApi() this.getRunningStateDataByApi() this.getMonthMaintenanceNumByApi() + this.getLineChartDataByApi() + this.getBarChartDataByApi() }, /* 璋冪敤鎺ュ彛鑾峰彇鎶�鏈姸鎬� */ @@ -241,15 +209,6 @@ }) }, - /* 璋冪敤鎺ュ彛鑾峰彇璁惧杩愯鐘舵�� */ - getRunningStateDataByApi() { - signageApi.getEquipmentStatusStatisticsApi(this.productionCode) - .then(res => { - if (res.success) this.runningStateData = res.result.list - this.drawRunningStateChart(res.result.producitonId) - }) - }, - /* 璋冪敤鎺ュ彛鑾峰彇涓変繚璁″垝 */ getMonthMaintenanceNumByApi() { signageApi.getThisMonthMaintenanceListApi(this.productionCode) @@ -270,12 +229,45 @@ }) }, + /* 璋冪敤鎺ュ彛鑾峰彇璁惧杩愯鐘舵�� */ + getRunningStateDataByApi() { + signageApi.getEquipmentStatusStatisticsApi(this.productionCode) + .then(res => { + if (res.success) this.runningStateData = res.result.list + this.drawRunningStateChart(res.result.producitonId) + }) + }, + + /* 璋冪敤鎺ュ彛鑾峰彇鍓�7澶╁埄鐢ㄧ巼 */ + getLineChartDataByApi() { + signageApi.getEquipmentDayUtilizationStatisticsApi(this.productionCode) + .then(res => { + if (res.success) this.lineChartData = res.result + this.drawLineChart() + }) + }, + + getBarChartDataByApi() { + signageApi.getEquipmentOEEMonthStatisticsApi(this.productionCode) + .then(res => { + console.log('res=', res) + if (res.success) { + this.barChartData = res.result.map(item => { + return { + name: item.equipmentId, + value: item.overallEquipmentEfficiency + } + }) + } + this.drawBarChart() + }) + }, + /* 缁樺埗鍥捐〃姹囨�绘柟娉� */ drawCharts() { this.drawRunningStateChart() this.drawTechConditionChart() this.drawWarrantyMalfunctionChart() - this.drawLineChart() this.drawGaugeChart() this.drawBarChart() }, @@ -288,7 +280,7 @@ show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true text: '鎶�鏈姸鎬�', // 涓绘爣棰樻枃鏈� x: 'left', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊� - y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊� + y: this.userType >= 3 ? '25' : 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊� textStyle: { // 涓绘爣棰樻枃鏈牱寮� fontSize: 18, @@ -481,7 +473,7 @@ series: [ { type: 'pie', - // roseType: 'angle', // 鐜懓鍥� + roseType: 'angle', // 鐜懓鍥� // selectedMode: "single", radius: ['35%', '55%'], center: ['50%', '50%'], @@ -527,19 +519,19 @@ drawLineChart() { this.lineChart = this.$echarts.init(document.getElementById('line_chart')) const newData = { - xAxis: ['3鏈�19鏃�', '3鏈�20鏃�', '3鏈�21鏃�', '3鏈�22鏃�', '3鏈�23鏃�', '3鏈�24鏃�', '3鏈�25鏃�'], + xAxis: this.lineChartData.dateList, yAxis: [ { name: '鍒╃敤鐜�', - value: [200, 600, 550, 360, 520, 520, 630] + value: this.lineChartData.dataList.map(item => item.utilizationRate) }, { name: '寮�鍔ㄧ巼', - value: [230, 630, 440, 400, 740, 800, 600] + value: this.lineChartData.dataList.map(item => item.startRate) }, { name: '寮�鏈虹巼', - value: [900, 700, 400, 700, 800, 605, 730] + value: this.lineChartData.dataList.map(item => item.openRate) } ], yAxisName: '鍓�7澶╁埄鐢ㄧ巼(%)' @@ -680,15 +672,6 @@ // } } this.lineChart.setOption(option, true) - // if (newData.xAxis.length <= 6) return - // this.lineChartCarouselTime = setInterval(() => { - // this.barChartData.push(this.barChartData.shift()) - // newData.xAxis.push(newData.xAxis.shift()) - // newData.yAxis.forEach(item => item.value.push(item.value.shift())) - // this.$nextTick(() => { - // this.lineChart.setOption(option, true) - // }) - // }, 3000) }, /* 缁樺埗浠〃鐩樺浘琛� */ @@ -831,7 +814,7 @@ height: 260, title: { show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true - text: '涓婁釜鏈圤EE', // 涓绘爣棰樻枃鏈� + text: '', // 涓绘爣棰樻枃鏈� x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊� y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊� textStyle: { @@ -987,12 +970,6 @@ color: #fff; margin-bottom: 10px; - .workshop-nav { - width: 120px; - height: 40px; - font-size: 12px; - cursor: pointer; - } } .content-container { @@ -1001,28 +978,17 @@ justify-content: space-between; .left-col { - .back-nav { - width: 100px; - height: 30px; - color: #fff; - position: absolute; - top: 50px; - left: 10px; - cursor: pointer; - z-index: 9999 - } - .support-plan-container { width: 100%; display: flex; justify-content: space-around; flex-wrap: wrap; color: #fff; - padding-top: 5px; + padding-top: 20px; .support-plan-item { border-radius: 3px; - width: 45%; + width: 30%; padding: 5px 10px; margin-bottom: 10px; @@ -1038,15 +1004,6 @@ } } } - } - } - - .middle-col { - .first-title { - color: #00A8AC; - font-size: 20px; - text-align: center; - font-weight: bold; } } diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue index 22d89e3..ff89d12 100644 --- a/src/views/user/Login.vue +++ b/src/views/user/Login.vue @@ -1,60 +1,75 @@ <template> <div class="main"> - <a-form-model - class="user-layout-login" - @keyup.enter.native="handleSubmit" - > - <a-tabs - :activeKey="customActiveKey" - :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }" - @change="handleTabClick" - > - <a-tab-pane - key="tab1" - tab="璐﹀彿瀵嗙爜鐧诲綍" + <div style="display: flex;padding: 50px;"> + + <div style="flex: 1;display: flex;align-items: center;justify-content: center;position: relative"> + <div class="top"> + <div class="header"> + <a href="/"> + <img src="~@/assets/lxzn.png" class="logo" alt="logo"> + <span class="title">MDC鏅烘収杞﹂棿</span> + </a> + </div> + </div> + <img src="@/assets/login.jpeg" width="60%"> + </div> + <div style="width: 368px;margin: 30px 50px"> + <a-form-model + class="user-layout-login" + @keyup.enter.native="handleSubmit" > - <login-account - ref="alogin" - @validateFail="validateFail" - @success="requestSuccess" - @fail="requestFailed" - ></login-account> - </a-tab-pane> + <a-tabs + :activeKey="customActiveKey" + :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }" + @change="handleTabClick" + > + <a-tab-pane + key="tab1" + tab="璐﹀彿瀵嗙爜鐧诲綍" + > + <login-account + ref="alogin" + @validateFail="validateFail" + @success="requestSuccess" + @fail="requestFailed" + ></login-account> + </a-tab-pane> - <!--<a-tab-pane key="tab2" tab="鎵嬫満鍙风櫥褰�">--> - <!--<login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>--> - <!--</a-tab-pane>--> - </a-tabs> + <!--<a-tab-pane key="tab2" tab="鎵嬫満鍙风櫥褰�">--> + <!--<login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>--> + <!--</a-tab-pane>--> + </a-tabs> - <a-form-model-item> - <!--<a-checkbox @change="handleRememberMeChange" default-checked>鑷姩鐧诲綍</a-checkbox>--> - <!--<router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">--> - <!--蹇樿瀵嗙爜--> - <!--</router-link>--> - <!--<router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >--> - <!--娉ㄥ唽璐︽埛--> - <!--</router-link>--> - </a-form-model-item> + <a-form-model-item> + <!--<a-checkbox @change="handleRememberMeChange" default-checked>鑷姩鐧诲綍</a-checkbox>--> + <!--<router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">--> + <!--蹇樿瀵嗙爜--> + <!--</router-link>--> + <!--<router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >--> + <!--娉ㄥ唽璐︽埛--> + <!--</router-link>--> + </a-form-model-item> - <a-form-item style="margin-top:24px"> - <a-button - size="large" - type="primary" - htmlType="submit" - class="login-button" - :loading="loginBtn" - @click.stop.prevent="handleSubmit" - :disabled="loginBtn" - >纭畾 - </a-button> - </a-form-item> + <a-form-item style="margin-top:24px"> + <a-button + size="large" + type="primary" + htmlType="submit" + class="login-button" + :loading="loginBtn" + @click.stop.prevent="handleSubmit" + :disabled="loginBtn" + >纭畾 + </a-button> + </a-form-item> - <a-form-model-item style="color: red"> - 瀵嗙骇锛氬唴閮� 璀﹀憡锛氭湰绯荤粺绂佹瀛樺偍銆佸鐞嗐�佷紶杈撴秹瀵嗕俊鎭� - </a-form-model-item> + <a-form-model-item style="color: red"> + 瀵嗙骇锛氬唴閮� 璀﹀憡锛氭湰绯荤粺绂佹瀛樺偍銆佸鐞嗐�佷紶杈撴秹瀵嗕俊鎭� + </a-form-model-item> - </a-form-model> - + </a-form-model> + </div> + </div> <!--<two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>--> <login-select-tenant ref="loginSelect" @@ -66,225 +81,274 @@ </template> <script> -import Vue from 'vue' -import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types' -// import ThirdLogin from './third/ThirdLogin' -import LoginSelectTenant from './LoginSelectTenant' -import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha' -import { getEncryptedString } from '@/utils/encryption/aesEncrypt' -import { timeFix } from '@/utils/util' + import Vue from 'vue' + import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types' + // import ThirdLogin from './third/ThirdLogin' + import LoginSelectTenant from './LoginSelectTenant' + import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha' + import { getEncryptedString } from '@/utils/encryption/aesEncrypt' + import { timeFix } from '@/utils/util' -import LoginAccount from './LoginAccount' -import LoginPhone from './LoginPhone' -import store from '@/store' -import { getAction } from '../../api/manage' -import UserPassword from '../../components/tools/UserPassword' + import LoginAccount from './LoginAccount' + import LoginPhone from './LoginPhone' + import store from '@/store' + import { getAction } from '../../api/manage' + import UserPassword from '../../components/tools/UserPassword' -export default { - components: { - UserPassword, - LoginSelectTenant, - TwoStepCaptcha, - // ThirdLogin, - LoginAccount, - LoginPhone, - store - }, - data() { - return { - customActiveKey: 'tab1', - rememberMe: true, - loginBtn: false, - requiredTwoStepCaptcha: false, - stepCaptchaVisible: false, - encryptedString: { - key: "", - iv: "", + export default { + components: { + UserPassword, + LoginSelectTenant, + TwoStepCaptcha, + // ThirdLogin, + LoginAccount, + LoginPhone, + store + }, + data() { + return { + customActiveKey: 'tab1', + rememberMe: true, + loginBtn: false, + requiredTwoStepCaptcha: false, + stepCaptchaVisible: false, + encryptedString: { + key: '', + iv: '' + }, + url: { + getPrimaryInfo: '/sys/sysAnnouncementSend/getPrimaryInfo' + } + } + }, + created() { + Vue.ls.remove(ACCESS_TOKEN) + this.getRouterData() + this.rememberMe = true + }, + methods: { + handleTabClick(key) { + this.customActiveKey = key }, - url: { - getPrimaryInfo: "/sys/sysAnnouncementSend/getPrimaryInfo" - } - } - }, - created() { - Vue.ls.remove(ACCESS_TOKEN) - this.getRouterData(); - this.rememberMe = true - }, - methods: { - handleTabClick(key) { - this.customActiveKey = key - }, - handleRememberMeChange(e) { - this.rememberMe = e.target.checked - }, - /**璺宠浆鍒扮櫥褰曢〉闈㈢殑鍙傛暟-璐﹀彿鑾峰彇*/ - getRouterData() { - this.$nextTick(() => { - let temp = this.$route.params.username || this.$route.query.username || '' - if (temp) { - this.$refs.alogin.acceptUsername(temp) - } - }) - }, - - //鐧诲綍 - handleSubmit() { - this.loginBtn = true; - if (this.customActiveKey === 'tab1') { - // 浣跨敤璐︽埛瀵嗙爜鐧诲綍 - this.$refs.alogin.handleLogin(this.rememberMe) - } else { - //鎵嬫満鍙风爜鐧诲綍 - this.$refs.plogin.handleLogin(this.rememberMe) - } - }, - // 鏍¢獙澶辫触 - validateFail() { - this.loginBtn = false; - }, - // 鐧诲綍鍚庡彴鎴愬姛 - requestSuccess(loginResult) { - // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => { - // console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') - // }) - this.$router.push({ path: "/dashboard/analysis" }).catch(() => { - console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') - }) - this.$notification.success({ - message: '娆㈣繋', - description: `${timeFix()}锛屾杩庡洖鏉, - }); - var userId = store.getters.userInfo.id; - let that = this; - getAction(this.url.getPrimaryInfo, { userId: userId }).then(res => { - if (res.success) { - for (var i = 0; i < res.result.length; i++) { - that.$notification.success({ - message: '鏈�鏂版湭璇绘秷鎭��' + res.result[i].msgCategory + '銆�', - description: res.result[i].msgContent, - duration: 60, - icon: <a-icon type="exclamation-circle" style="color:red" />, - }); + handleRememberMeChange(e) { + this.rememberMe = e.target.checked + }, + /**璺宠浆鍒扮櫥褰曢〉闈㈢殑鍙傛暟-璐﹀彿鑾峰彇*/ + getRouterData() { + this.$nextTick(() => { + let temp = this.$route.params.username || this.$route.query.username || '' + if (temp) { + this.$refs.alogin.acceptUsername(temp) } + }) + }, + + //鐧诲綍 + handleSubmit() { + this.loginBtn = true + if (this.customActiveKey === 'tab1') { + // 浣跨敤璐︽埛瀵嗙爜鐧诲綍 + this.$refs.alogin.handleLogin(this.rememberMe) + } else { + //鎵嬫満鍙风爜鐧诲綍 + this.$refs.plogin.handleLogin(this.rememberMe) } - }) - // this.$refs.loginSelect.show(loginResult) - }, - //鐧诲綍鍚庡彴澶辫触 - requestFailed(err,username) { - let description = ((err.response || {}).data || {}).message || err.message || "璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯" - if(err.code!==5001&&err.code!==5002){ - this.$notification['error']({ - message: '鐧诲綍澶辫触', - description: description, - duration: 4, - }); - }else{ - this.$notification['warning']({ - message: '鎻愮ず', - description: description, - duration:1, - onClose:()=>{ - console.log('err',err) - this.$refs.userPassword.show(username) - } - }); - } - //璐︽埛瀵嗙爜鐧诲綍閿欒鍚庢洿鏂伴獙璇佺爜 - // if (this.customActiveKey === 'tab1' && description.indexOf('瀵嗙爜閿欒') > 0) { - // this.$refs.alogin.handleChangeCheckCode() - // } - this.loginBtn = false; - }, - loginSelectOk() { - this.loginSuccess() - }, - //鐧诲綍鎴愬姛 - loginSuccess() { - this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => { - console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') - }) - this.$notification.success({ - message: '娆㈣繋', - description: `${timeFix()}锛屾杩庡洖鏉, - }); - - }, - - stepCaptchaSuccess() { - this.loginSuccess() - }, - stepCaptchaCancel() { - this.Logout().then(() => { + }, + // 鏍¢獙澶辫触 + validateFail() { this.loginBtn = false - this.stepCaptchaVisible = false - }) - }, - //鑾峰彇瀵嗙爜鍔犲瘑瑙勫垯 - getEncrypte() { - var encryptedString = Vue.ls.get(ENCRYPTED_STRING); - if (encryptedString == null) { - getEncryptedString().then((data) => { - this.encryptedString = data - }); - } else { - this.encryptedString = encryptedString; + }, + // 鐧诲綍鍚庡彴鎴愬姛 + requestSuccess(loginResult) { + // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => { + // console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') + // }) + this.$router.push({ path: '/dashboard/analysis' }).catch(() => { + console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') + }) + this.$notification.success({ + message: '娆㈣繋', + description: `${timeFix()}锛屾杩庡洖鏉 + }) + var userId = store.getters.userInfo.id + let that = this + getAction(this.url.getPrimaryInfo, { userId: userId }).then(res => { + if (res.success) { + for (var i = 0; i < res.result.length; i++) { + that.$notification.success({ + message: '鏈�鏂版湭璇绘秷鎭��' + res.result[i].msgCategory + '銆�', + description: res.result[i].msgContent, + duration: 60, + icon: <a-icon type = 'exclamation-circle'style = 'color:red' / >, + }) + + } + } + }) + // this.$refs.loginSelect.show(loginResult) + }, + //鐧诲綍鍚庡彴澶辫触 + requestFailed(err, username) { + let description = ((err.response || {}).data || {}).message || err.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯' + if (err.code !== 5001 && err.code !== 5002) { + this.$notification['error']({ + message: '鐧诲綍澶辫触', + description: description, + duration: 4 + }) + } else { + this.$notification['warning']({ + message: '鎻愮ず', + description: description, + duration: 1, + onClose: () => { + console.log('err', err) + this.$refs.userPassword.show(username) + } + }) + } + //璐︽埛瀵嗙爜鐧诲綍閿欒鍚庢洿鏂伴獙璇佺爜 + // if (this.customActiveKey === 'tab1' && description.indexOf('瀵嗙爜閿欒') > 0) { + // this.$refs.alogin.handleChangeCheckCode() + // } + this.loginBtn = false + }, + loginSelectOk() { + this.loginSuccess() + }, + //鐧诲綍鎴愬姛 + loginSuccess() { + this.$router.push({ path: '/isps/userAnnouncement' }).catch(() => { + console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') + }) + this.$notification.success({ + message: '娆㈣繋', + description: `${timeFix()}锛屾杩庡洖鏉 + }) + + }, + + stepCaptchaSuccess() { + this.loginSuccess() + }, + stepCaptchaCancel() { + this.Logout().then(() => { + this.loginBtn = false + this.stepCaptchaVisible = false + }) + }, + //鑾峰彇瀵嗙爜鍔犲瘑瑙勫垯 + getEncrypte() { + var encryptedString = Vue.ls.get(ENCRYPTED_STRING) + if (encryptedString == null) { + getEncryptedString().then((data) => { + this.encryptedString = data + }) + } else { + this.encryptedString = encryptedString + } } + } } - -} </script> <style lang="less" scoped> -.user-layout-login { - label { - font-size: 14px; - } - .getCaptcha { - display: block; - width: 100%; - height: 40px; - } + .user-layout-login { + label { + font-size: 14px; + } + .getCaptcha { + display: block; + width: 100%; + height: 40px; + } - .forge-password { - font-size: 14px; - } + .forge-password { + font-size: 14px; + } - button.login-button { - padding: 0 15px; - font-size: 16px; - height: 40px; - width: 100%; - } + button.login-button { + padding: 0 15px; + font-size: 16px; + height: 40px; + width: 100%; + } - .user-login-other { - text-align: left; - margin-top: 24px; - line-height: 22px; + .user-login-other { + text-align: left; + margin-top: 24px; + line-height: 22px; - .item-icon { - font-size: 24px; - color: rgba(0, 0, 0, 0.2); - margin-left: 16px; - vertical-align: middle; - cursor: pointer; - transition: color 0.3s; + .item-icon { + font-size: 24px; + color: rgba(0, 0, 0, 0.2); + margin-left: 16px; + vertical-align: middle; + cursor: pointer; + transition: color 0.3s; - &:hover { - color: #1890ff; + &:hover { + color: #1890ff; + } + } + + .register { + float: right; } } + } - .register { - float: right; + /deep/ .ant-tabs-tab-active.ant-tabs-tab { + font-size: 25px; + } + + .top { + text-align: center; + position: absolute; + top: 45px; + + .header { + height: 44px; + line-height: 44px; + + .badge { + position: absolute; + display: inline-block; + line-height: 1; + vertical-align: middle; + margin-left: -12px; + margin-top: -10px; + opacity: 0.8; + } + + .logo { + height: 44px; + vertical-align: top; + margin-right: 10px; + border-style: none; + } + + .title { + font-size: 30px; + color: #000; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-weight: 600; + position: relative; + top: 2px; + } + } + .desc { + font-size: 14px; + color: rgba(0, 0, 0, 0.45); + margin-top: 12px; + margin-bottom: 40px; } } -} + </style> <style> -.valid-error .ant-select-selection__placeholder { - color: #f5222d; -} + .valid-error .ant-select-selection__placeholder { + color: #f5222d; + } </style> \ No newline at end of file -- Gitblit v1.9.3