From 93de43267e1663031fe5dc2f5ae40d128a182a76 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 18 六月 2026 17:24:51 +0800
Subject: [PATCH] 新增智能电表、空调管理
---
h5/pages/login.vue | 437 ++++++++++++++++--------------------------------------
1 files changed, 131 insertions(+), 306 deletions(-)
diff --git a/h5/pages/login.vue b/h5/pages/login.vue
index a7ce852..899344a 100644
--- a/h5/pages/login.vue
+++ b/h5/pages/login.vue
@@ -1,313 +1,138 @@
<template>
- <view class="login">
- <view class="login_title">娆㈣繋鐧诲綍</view>
- <view class="login_title login_title2">闃滃畞鏂囦綋涓績</view>
- <view v-if="devMockTip" class="dev-tip">{{ devMockTip }}</view>
- <view class="login_list">
- <view class="login_list_item">
- <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
- <input v-model="form.phone" maxlength="18" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
- </view>
- <!-- <view class="login_list_item">
- <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
- <input v-model="form.password" type="password" placeholder="瀵嗙爜" />
- </view> -->
- <view class="login_list_item">
- <image src="@/static/login_ic_password@2x.png" mode="widthFix"></image>
- <input v-model="form.code" placeholder="璇疯緭鍏ラ獙璇佺爜" type="text" />
- <view v-if="downTime == 0" class="btn" @click="sendSms">鑾峰彇楠岃瘉鐮�</view>
- <view v-else class="btn gray">{{ downTime }}</view>
- </view>
- </view>
- <view class="login_btn">
- <view class="login_btn_n" @click="onLogin">鐧诲綍</view>
- </view>
- </view>
+ <view class="cu-login">
+ <view class="cu-auth-topbar">
+ <view class="cu-auth-topbar__btn" @click="goRoleSelect">
+ <u-icon name="reload" color="#2080f7" size="22" />
+ </view>
+ </view>
+
+ <view class="cu-login__brand">
+ <view class="cu-login__title">娆㈣繋鐧诲綍</view>
+ <view class="cu-login__sub">闃滃畞鏂囦綋涓績 路 杩愮淮鏈嶅姟骞冲彴</view>
+ </view>
+
+ <view v-if="devMockTip" class="cu-login__tip">{{ devMockTip }}</view>
+
+ <view class="cu-input-wrap">
+ <input v-model="form.phone" maxlength="18" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
+ </view>
+ <view class="cu-input-wrap">
+ <input v-model="form.code" placeholder="璇疯緭鍏ラ獙璇佺爜" />
+ <view v-if="downTime == 0" class="cu-sms-btn" @click="sendSms">鑾峰彇楠岃瘉鐮�</view>
+ <view v-else class="cu-sms-btn cu-sms-btn--disabled">{{ downTime }}s</view>
+ </view>
+
+ <view class="cu-btn cu-btn--primary" @click="onLogin">鐧诲綍</view>
+ </view>
</template>
<script>
- import {
- loginPost,
- getUserInfo,
- sendSMsPost,
- ywWxAuthorize,
+import {
+ loginPost,
+ getUserInfo,
+ sendSMsPost,
+ ywWxAuthorize,
+ getRecordByUserPoint
+} from '@/api'
+import { devWechatMock } from '@/utils/config.js'
+import { runWechatOAuthFlow } from '@/utils/wechatAuth.js'
+import { requestLoginSmsCode } from '@/utils/loginSms.js'
+import { mapMutations } from 'vuex'
- getRecordByUserPoint
- } from '@/api'
- import { devWechatMock } from '@/utils/config.js'
- import { runWechatOAuthFlow } from '@/utils/wechatAuth.js'
- import { requestLoginSmsCode } from '@/utils/loginSms.js'
- import {
- mapState,
- mapMutations
- } from 'vuex'
- export default {
- name: 'login',
+export default {
+ name: 'login',
+ data () {
+ return {
+ form: { phone: '', code: '' },
+ ywinfo: {},
+ downTime: 0,
+ code: '',
+ devMockTip: devWechatMock.enabled ? `寮�鍙戞ā寮忥細妯℃嫙 openid ${devWechatMock.openId}` : ''
+ }
+ },
+ onLoad (option) {
+ uni.setStorageSync('userType', 0)
+ const ywinfo = uni.getStorageSync('ywinfo') || {}
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ this.ywinfo = ywinfo
+ uni.setStorageSync('ywinfo', {})
+ }
+ if (option.ywid || option.ywid == 0) {
+ uni.setStorageSync('ywinfo', {
+ type: option.type,
+ ywid: option.ywid
+ })
+ }
+ },
+ onShow () {
+ const that = this
+ runWechatOAuthFlow({
+ authorizeApi: ywWxAuthorize,
+ fallbackCode: this.code,
+ onSuccess: (res) => {
+ if (res.data.openid) {
+ that.$store.commit('setOpenId', res.data.openid)
+ }
+ if (res.data.token && res.data.token != '') {
+ that.$store.commit('setToken', res.data.token)
+ getUserInfo().then(ress => {
+ that.$store.commit('setUserInfo', ress.data)
+ })
+ const ywinfo = this.ywinfo
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ getRecordByUserPoint({ pointCode: ywinfo.ywid }).then(res => {
+ if (res.data && res.data.id) {
+ uni.redirectTo({ url: '/pages/polling/point?id=' + res.data.id })
+ } else {
+ uni.redirectTo({ url: '/pages/polling/empty?message=' + res.message })
+ }
+ })
+ } else {
+ setTimeout(() => {
+ uni.redirectTo({ url: '/pages/index' })
+ }, 300)
+ }
+ }
+ }
+ })
+ },
+ methods: {
+ ...mapMutations(['setToken', 'setUserInfo']),
+ goRoleSelect () {
+ uni.redirectTo({ url: '/pages/roleSelect?switch=1' })
+ },
+ onLogin () {
+ const { form } = this
+ if (!form.phone) return uni.showToast({ title: '鎵嬫満鍙蜂笉鑳戒负绌�', icon: 'none' })
+ if (!form.code) return uni.showToast({ title: '楠岃瘉鐮佷笉鑳戒负绌�', icon: 'none' })
- data() {
- return {
- form: {
- phone: '',
- code: ''
- },
- ywinfo: {},
- downTime: 0,
- code: '',
- devMockTip: devWechatMock.enabled ? `寮�鍙戞ā寮忥細妯℃嫙 openid ${devWechatMock.openId}` : ''
- }
- },
- onLoad(option) {
- console.log('onLoad');
- // https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid
- const ywinfo = uni.getStorageSync('ywinfo') || {}
- if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
- this.ywinfo = ywinfo
- uni.setStorageSync('ywinfo', {})
- }
- if (option.ywid || option.ywid == 0) {
- uni.setStorageSync('ywinfo', {
- type: option.type,
- ywid: option.ywid
- })
- }
- },
- onShow() {
- const that = this
- runWechatOAuthFlow({
- authorizeApi: ywWxAuthorize,
- fallbackCode: this.code,
- onSuccess: (res) => {
- if (res.data.openid) {
- that.$store.commit('setOpenId', res.data.openid)
- }
- if (res.data.token && res.data.token != '') {
- that.$store.commit('setToken', res.data.token)
- getUserInfo().then(ress => {
- that.$store.commit('setUserInfo', ress.data)
- })
- const ywinfo = this.ywinfo
- if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
- getRecordByUserPoint({
- pointCode: ywinfo.ywid
- }).then(res => {
- if (res.data && res.data.id) {
- uni.redirectTo({
- url: "/pages/polling/point?id=" + res.data.id
- })
- } else {
- uni.redirectTo({
- url: "/pages/polling/empty?message=" + res.message
- })
- }
- })
- } else {
- setTimeout(() => {
- uni.redirectTo({
- url: "/pages/index"
- })
- }, 300)
- }
- }
- }
- })
- },
- methods: {
- ...mapMutations(["setToken", "setUserInfo"]),
- onLogin() {
- const {
- form,
- ProtocolFlag
- } = this
- if (!form.phone) return uni.showToast({
- title: '鎵嬫満鍙蜂笉鑳戒负绌�',
- icon: 'none'
- })
- if (!form.code) return uni.showToast({
- title: '楠岃瘉鐮佷笉鑳戒负绌�',
- icon: 'none'
- })
-
- loginPost({
- ...form,
- openid: this.$store.state.openId
- }).then(res => {
- if (res.code === 200) {
- this.setToken(res.data)
- this.showToast('鐧诲綍鎴愬姛')
- getUserInfo().then(ress => {
- this.setUserInfo(ress.data)
- const ywinfo = this.ywinfo
- if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
- // getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
- getRecordByUserPoint({
- pointCode: ywinfo.ywid
- }).then(res => {
- if (res.data && res.data.id) {
- uni.redirectTo({
- url: "/pages/polling/point?id=" + res.data.id
- })
- } else {
- uni.redirectTo({
- url: "/pages/polling/empty?message=" + res.message
- })
- }
- })
- // })
- } else {
- uni.redirectTo({
- url: "/pages/index"
- })
- }
- })
- }
- })
-
-
-
- },
- sendSms() {
- requestLoginSmsCode(this, this.form.phone, sendSMsPost, { phone: this.form.phone, userType: 0 })
- },
- }
- }
+ loginPost({
+ ...form,
+ openid: this.$store.state.openId
+ }).then(res => {
+ if (res.code === 200) {
+ this.setToken(res.data)
+ getUserInfo().then(ress => {
+ this.setUserInfo(ress.data)
+ const ywinfo = this.ywinfo
+ if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+ getRecordByUserPoint({ pointCode: ywinfo.ywid }).then(res => {
+ if (res.data && res.data.id) {
+ uni.redirectTo({ url: '/pages/polling/point?id=' + res.data.id })
+ } else {
+ uni.redirectTo({ url: '/pages/polling/empty?message=' + res.message })
+ }
+ })
+ } else {
+ uni.redirectTo({ url: '/pages/index' })
+ }
+ })
+ }
+ })
+ },
+ sendSms () {
+ requestLoginSmsCode(this, this.form.phone, sendSMsPost, { phone: this.form.phone, userType: 0 })
+ }
+ }
+}
</script>
-
-<style lang="scss" scoped>
- .login {
- width: 100%;
- height: 100vh;
- display: flex;
- padding-top: 130rpx;
- box-sizing: border-box;
- align-items: center;
- flex-direction: column;
- background: linear-gradient(180deg, #C5DDFF 0%, #FFFFFF 100%);
-
- .login_title {
- font-weight: 500;
- font-size: 52rpx;
- color: #222222;
- margin-top: 180rpx;
- width: 100%;
- padding-left: 60rpx;
- }
-
- .login_title2 {
- margin-top: 10rpx;
- margin-bottom: 40rpx;
- }
-
- .dev-tip {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
- font-size: 24rpx;
- color: #e6a23c;
- margin-bottom: 40rpx;
- line-height: 1.5;
- }
-
- .login_list {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
-
- .login_list_item {
- width: 100%;
- border-radius: 50rpx;
- height: 98rpx;
- padding: 0 40rpx;
- box-sizing: border-box;
- background: #ffffff;
- margin-bottom: 40rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
-
- &:last-child {
- margin-bottom: 0 !important;
- }
-
- image {
- flex-shrink: 0;
- width: 40rpx;
- height: 40rpx;
- }
-
- .btn {
- width: 145rpx;
- color: $primaryColor;
- text-align: center;
- }
-
- .gray {
- color: #999999;
- }
-
- input {
- flex: 1;
- height: 100%;
- color: #666666;
- margin-left: 24rpx;
- border: none;
- }
- }
- }
-
- .login_btn {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
- margin-top: 60rpx;
-
- .for_psd {
- color: $uni-color-primary;
- width: 140rpx;
- text-align: center;
- margin: 40rpx auto;
- }
-
- .login_btn_n {
- width: 100%;
- height: 98rpx;
- background: $uni-color-primary;
- box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #ffffff;
- border-radius: 50rpx;
- font-weight: 500;
- font-size: 32rpx;
- }
- }
-
- .deal_wrap {
- position: absolute;
- width: 100%;
- left: 0;
- text-align: center;
- bottom: 88rpx;
- display: flex;
- justify-content: center;
- align-items: center;
-
- .deal {
- color: $uni-color-primary;
- }
-
- .checked {
- width: 48rpx;
- margin-right: 12rpx;
- }
- }
- }
-
- .modal {
- width: 690rpx;
- min-height: 920rpx;
- max-height: 720px;
- border-radius: 24rpx;
- padding: 32rpx;
- }
-</style>
\ No newline at end of file
--
Gitblit v1.9.3