From 0db50921e776525ac6d35fe50e64c605b6be1374 Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期四, 04 九月 2025 14:59:11 +0800
Subject: [PATCH] Merge branch 'ID1766-添加推送登录功能' into test
---
src/views/mobile/bedsideAuxiliaryScreen/components/Login/index.vue | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 224 insertions(+), 0 deletions(-)
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/components/Login/index.vue b/src/views/mobile/bedsideAuxiliaryScreen/components/Login/index.vue
new file mode 100644
index 0000000..43c53fc
--- /dev/null
+++ b/src/views/mobile/bedsideAuxiliaryScreen/components/Login/index.vue
@@ -0,0 +1,224 @@
+<template>
+ <div class="login-dialog-container">
+ <el-dialog
+ v-model="show"
+ center
+ title="个人用户"
+ width="40%"
+ :show-close="false"
+ class="scheduled-task-dialog"
+ :destroy-on-close="true"
+ :close-on-click-modal="false"
+ >
+ <template #header>
+ <div class="setting-dialog-header">
+ <span class="header-title">个人用户</span>
+ <img
+ :src="closeImg"
+ class="header-close"
+ @click="handleCancel"
+ alt=""
+ />
+ </div>
+ </template>
+ <!-- 已登录 -->
+ <div v-if="isLoginng" class="login-dialog-content loging-content">
+ <UserInfo />
+ </div>
+ <!-- 未登录 -->
+ <div v-else class="login-dialog-content">
+ <div class="qr-code-box">
+ <QrCode :value="qrCodeData" :margin="1" />
+ </div>
+ <div class="qr-text">请扫描二维码进行登录操作</div>
+ </div>
+ <template v-if="isLoginng" #footer>
+ <div class="my-button cancel" @click="onLogout">退出登录</div>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, computed } from "vue";
+import closeImg from "@/img/close.png";
+import QrCode from "@/components/QrCode/index.vue";
+import UserInfo from "./userInfo.vue";
+import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
+import { ElMessage, ElMessageBox } from "element-plus";
+
+export default {
+ name: "LoginDialog",
+ components: { QrCode, UserInfo },
+ setup() {
+ const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
+
+ const state = reactive({
+ show: false,
+ loading: false,
+ });
+
+ const isLoginng = computed(() => {
+ return !!bedsideAuxiliaryScreenStore.token;
+ });
+
+ const qrCodeData = computed(() => {
+ return {
+ deviceCode: bedsideAuxiliaryScreenStore.deviceCode,
+ };
+ });
+
+ const openDialog = () => {
+ state.show = true;
+ };
+
+ const handleCancel = () => {
+ state.show = false;
+ };
+
+ const onLogout = () => {
+ ElMessageBox.confirm("是否确认退出当前登录用户?", "提示", {
+ confirmButtonText: "确认",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ bedsideAuxiliaryScreenStore.logout();
+ ElMessage({
+ type: "success",
+ message: "退出成功!",
+ });
+ })
+ .catch(() => {});
+ };
+
+ return {
+ ...toRefs(state),
+ closeImg,
+ qrCodeData,
+ isLoginng,
+ handleCancel,
+ openDialog,
+ onLogout,
+ };
+ },
+};
+</script>
+
+<style lang="less" scoped>
+.login-dialog-container {
+ ::v-deep(.el-dialog) {
+ padding: 0;
+ border-radius: 6px;
+ overflow: hidden;
+ }
+ ::v-deep(.el-dialog__footer) {
+ padding: 4px;
+ }
+ ::v-deep(.el-upload-dragger) {
+ height: 65px;
+ padding: 0 !important;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ ::v-deep(.el-upload-dragger .el-icon--upload) {
+ display: none;
+ }
+ ::v-deep(.el-dialog__header) {
+ padding-bottom: 6px;
+ }
+ .setting-dialog-header {
+ position: relative;
+ height: 16px;
+ background: #769aff;
+ .header-title {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
+ font-weight: 500;
+ font-size: 8px;
+ color: #ffffff;
+ line-height: 11px;
+ text-align: center;
+ }
+ .header-close {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ right: 6px;
+ width: 15px;
+ height: 15px;
+ transition: transform 0.2s;
+
+ &:active {
+ opacity: 0.6;
+ transform: translateY(-50%) scale(0.95);
+ }
+ }
+ }
+ .login-dialog-content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 0 12px 6px;
+ &.loging-content {
+ border-bottom: 1px solid #d8d8d8;
+ }
+ .qr-code-box {
+ width: 80px;
+ height: 80px;
+ margin-bottom: 2px;
+ }
+ .qr-text {
+ font-size: 4px;
+ color: #769aff;
+ }
+ }
+
+ .my-button {
+ display: inline-block;
+ border-radius: 2px;
+ padding: 0px 10px;
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 500;
+ font-size: 7px;
+ color: #ffffff;
+ line-height: 16px;
+ letter-spacing: 1px;
+ text-align: center;
+ font-style: normal;
+ transition: transform 0.1s ease, opacity 0.1s ease;
+ cursor: pointer;
+ &:active {
+ transform: scale(0.95);
+ opacity: 0.8;
+ }
+
+ &:not(:first-child) {
+ margin-left: 6px;
+ }
+ &.cancel {
+ background: #fff;
+ color: #000;
+ border: 1px solid #dedede;
+ }
+ &.confirm {
+ background: #769aff;
+ }
+ &.refresh {
+ background: #e6a23c;
+ }
+ }
+}
+</style>
+<style>
+.scheduled-task-dialog {
+ margin: 0 auto;
+ top: 50% !important;
+ transform: translateY(-50%) !important;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.8.0