156 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="AppSign">
 | |
|     <div class="left signLeftBg">
 | |
|       <el-row type="flex" align="middle">
 | |
|         <img class="AiIcon" v-if="/[\\\/]/.test(logo.icon)" :src="logo.icon" alt="" />
 | |
|         <ai-icon v-else type="logo" :icon="logo.icon" />
 | |
|         <div v-if="logo.text" class="logoText mar-l8" v-text="logo.text" />
 | |
|       </el-row>
 | |
|       <div class="signLeftContent">
 | |
|         <div class="titlePane">
 | |
|           <b v-text="system.name" />
 | |
|           <div v-text="system.title" />
 | |
|         </div>
 | |
|         <div class="subTitle" v-for="(t, i) in subTitles" :key="i" v-html="t" />
 | |
|       </div>
 | |
|     </div>
 | |
|     <div class="right">
 | |
|       <div class="projectName mar-b48" :title="system.fullTitle">{{ system.fullTitle }}</div>
 | |
|       <ai-sign isSignIn @login="login" :instance="instance" visible
 | |
|         :showScanLogin="system.edition == 'standard' || !system.edition" />
 | |
|       <el-row type="flex" align="middle" class="bottomRecord">
 | |
|         <div v-if="system.recordDesc" v-text="system.recordDesc" />
 | |
|         <el-link v-if="system.recordNo" v-text="system.recordNo" :href="system.recordURL" />
 | |
|         <div v-if="system.ssl" v-html="system.ssl" />
 | |
|       </el-row>
 | |
|     </div>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import { mapMutations, mapState } from 'vuex'
 | |
| 
 | |
| export default {
 | |
|   name: "AppSign",
 | |
|   computed: {
 | |
|     ...mapState(['user', 'sys']),
 | |
|     instance: v => v.$request,
 | |
|     system: v => v.sys?.info || {
 | |
|       fullTitle: '武汉中卫慧通科技有限公司'
 | |
|     },
 | |
|     subTitles() {
 | |
|       let list = [
 | |
|         "构建全域数字大脑,助力政府科学决策",
 | |
|         "全域统一应用入口,移动办公高效协同",
 | |
|         "直接触达居民微信,政民互动“零距离”"
 | |
|       ]
 | |
|       return (typeof this.system.desc == "object" ? this.system.desc : JSON.parse(this.system.desc || null)) || list
 | |
|     },
 | |
|     logo: v => !!v.system.loginLogo ? { icon: v.system.loginLogo, text: v.system.loginLogoText } : { icon: v.system.logo, text: v.system.logoText },
 | |
|     isDev: () => process.env.NODE_ENV == "development",
 | |
|     isAdmin: v => v.$route.hash == "#sinoecare" //用来判断是否是管理员登录
 | |
|   },
 | |
|   created() {
 | |
|     if (this.user.token) {
 | |
|       this.handleGotoHome()
 | |
|     } else {
 | |
|       const { code } = this.$route.query
 | |
|       if (code) {
 | |
|         this.toLogin(code)
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     ...mapMutations(['setToken']),
 | |
|     login(data) {
 | |
|       if (data?.access_token) {
 | |
|         this.setToken([data.token_type, data.access_token].join(" "))
 | |
|         this.handleGotoHome()
 | |
|       }
 | |
|     },
 | |
|     handleGotoHome() {
 | |
|       this.$message.success("登录成功!")
 | |
|       if (this.$route.hash == "#dv") {
 | |
|         this.$router.push({ name: "数据大屏入口", hash: "#dv" })
 | |
|       } else {
 | |
|         this.$router.push({ name: "Home" })
 | |
|       }
 | |
|     },
 | |
|     toLogin(code) {
 | |
|       this.instance.post(`/auth/wechatcp-qr/token`, {
 | |
|         code: code,
 | |
|         type: 'cpuser'
 | |
|       }, {
 | |
|         auth: {
 | |
|           username: 'villcloud',
 | |
|           password: "villcloud"
 | |
|         },
 | |
|         params: {
 | |
|           grant_type: 'password',
 | |
|           scope: 'server'
 | |
|         }
 | |
|       }).then(this.login)
 | |
|     },
 | |
|   },
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .AppSign {
 | |
|   display: flex;
 | |
|   box-sizing: border-box;
 | |
|   height: 100%;
 | |
| 
 | |
|   .AiIcon {
 | |
|     font-size: 40px;
 | |
|     height: 40px;
 | |
|   }
 | |
| 
 | |
|   .logoText {
 | |
|     font-size: 20px;
 | |
|   }
 | |
| 
 | |
|   :deep(.left) {
 | |
|     width: 480px;
 | |
|     flex-shrink: 0;
 | |
|     background-size: 100% 100%;
 | |
|     background-repeat: no-repeat;
 | |
|     padding-left: 64px;
 | |
|     padding-top: 40px;
 | |
|     box-sizing: border-box;
 | |
|     color: #fff;
 | |
|     font-size: 16px;
 | |
| 
 | |
|     .iconcunwei1 {
 | |
|       font-size: 36px;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   :deep(.right) {
 | |
|     flex: 1;
 | |
|     min-width: 0;
 | |
|     background-color: #F6F8FB;
 | |
|     background-image: url("../assets/loginRightTop.png"), url("../assets/loginRightBottom.png");
 | |
|     background-repeat: no-repeat;
 | |
|     background-position: calc(100% - 80px) 0, calc(100% - 40px) 100%;
 | |
|     display: flex;
 | |
|     flex-direction: column;
 | |
|     align-items: center;
 | |
|     justify-content: center;
 | |
| 
 | |
|     .bottomRecord {
 | |
|       font-size: 12px;
 | |
|       color: #999;
 | |
|       gap: 16px;
 | |
|       position: fixed;
 | |
|       bottom: 20px;
 | |
| 
 | |
|       .el-link {
 | |
|         font-size: inherit;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
| }
 | |
| </style>
 |