From da05dcffeabcb3c460e45666a4804f4ea5a4145a Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 25 二月 2026 17:02:17 +0800
Subject: [PATCH] #
---
pages/login/login.vue | 934 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 585 insertions(+), 349 deletions(-)
diff --git a/pages/login/login.vue b/pages/login/login.vue
index a0d860e..f015b1e 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -1,437 +1,673 @@
<template>
<view class="bodyView">
+ <view>
+ <u-navbar
+ :fixed="true"
+ :title="$t('page.login')"
+ rightIcon="setting"
+ left-icon=""
+ :placeholder="true"
+ @rightClick="openSettings"
+ ></u-navbar>
+ </view>
<view class="topView">
- <image src="/static/img/login_top.png" mode="aspectFill">
- </image>
+ <u--image
+ width="100%"
+ src="/static/img/login_top.png"
+ mode="aspectFill"
+ ></u--image>
</view>
<view class="logoView">
- <image src="/static/img/newLogo.png" mode="aspectFit">
- </image>
+ <image
+ src="/static/img/newLogo.png"
+ mode="aspectFit"
+ ></image>
</view>
<view class="bottomView">
- <view class="itemView" style="margin-bottom: 40px;">
- <view class="helloText">{{$t('index.hello')}}</view>
- <view class="introText">{{$t('index.intro')}}</view>
+ <view
+ class="itemView"
+ style="margin-bottom: 20px"
+ >
+ <view class="helloText">{{ $t('index.hello') }}</view>
+ <view class="introText">{{ $t('index.intro') }}</view>
</view>
<view class="itemView">
- <view class="textType3">{{$t('login.user')}}:</view>
- <u-input clearable class="" v-model="user.userName" focus :placeholder="$t('login.inputUser')" />
+ <text class="textType3">{{ $t('login.user') }}:</text>
+ <u-input
+ clearable
+ class=""
+ v-model="user.userName"
+ focus
+ :placeholder="$t('login.inputUser')"
+ />
</view>
<view class="itemView">
- <view class="textType3">{{$t('login.pwd')}}:</view>
+ <text class="textType3">{{ $t('login.pwd') }}:</text>
- <u-input :password="showPassword" v-model="user.password" :placeholder="$t('login.inputPwd')"
- suffixIcon="map-fill" suffixIconStyle="color: #909399">
+ <u-input
+ :password="showPassword"
+ v-model="user.password"
+ :placeholder="$t('login.inputPwd')"
+ suffixIcon="map-fill"
+ suffixIconStyle="color: #909399"
+ >
<template slot="suffix">
- <u-icon :name="pwdIcon" @click="changePassword"></u-icon>
+ <u-icon
+ :name="pwdIcon"
+ @click="changePassword"
+ ></u-icon>
</template>
</u-input>
-
-
</view>
<view class="langAndRemView">
<view class="check">
<view>
- <view>{{$t('login.remPwd')}}</view>
+ <text>{{ $t('login.remPwd') }}</text>
</view>
<view>
- <u-switch space="2" size="20" v-model="remberPassword" activeColor="#f9ae3d"
- inactiveColor="rgb(230, 230, 230)">
- </u-switch>
- <!-- <switch :checked='remberPassword' color="#FFCC33" style="transform:scale(0.7)"
- @change="remberChange" /> -->
+ <u-switch
+ space="2"
+ size="20"
+ v-model="remberPassword"
+ activeColor="#f9ae3d"
+ inactiveColor="rgb(230, 230, 230)"
+ ></u-switch>
</view>
</view>
<view class="langView">
<!-- 璇█閫夋嫨涓嬫媺鑿滃崟 -->
<view class="language-dropdown">
- <view class="selected-language" @click="toggleLanguageDropdown">
- <text>{{getCurrentLanguageText()}}</text>
- <u-icon name="list" size="14" color="#707070"></u-icon>
+ <view
+ class="selected-language"
+ @click="toggleLanguageDropdown"
+ >
+ <text>{{ getCurrentLanguageText() }}</text>
+ <u-icon
+ name="list"
+ size="14"
+ color="#707070"
+ ></u-icon>
</view>
- <view class="language-options" v-if="showLanguageDropdown">
- <view class="language-option" v-for="(item, index) in locales" :key="index"
- @click="onLocaleChange(item)">
- <text>{{item.text}}</text>
- <u-icon name="checkbox-mark" color="#007AFF"
- v-if="item.code == applicationLocale"></u-icon>
+ <view
+ class="language-options"
+ v-if="showLanguageDropdown"
+ >
+ <view
+ class="language-option"
+ v-for="(item, index) in locales"
+ :key="index"
+ @click="onLocaleChange(item)"
+ >
+ <text>{{ item.text }}</text>
+ <u-icon
+ name="checkbox-mark"
+ color="#007AFF"
+ v-if="item.code == applicationLocale"
+ ></u-icon>
</view>
</view>
</view>
</view>
</view>
<view class="itemView">
- <u-button class="loadingButton" @click="onLogin()" :loading="loading">{{btnText}}</u-button>
+ <u-button
+ class="loadingButton"
+ @click="onLogin()"
+ :loading="loading"
+ >
+ {{ btnText }}
+ </u-button>
</view>
</view>
+ <u-popup
+ :show="showAuth"
+ @close="showAuth = false"
+ mode="center"
+ :round="14"
+ :customStyle="{ width: '500rpx' }"
+ >
+ <view class="settings-popup">
+ <view class="settings-title">
+ <text class="settings-title-text">
+ {{ $t('settings.authTitle') || '韬唤楠岃瘉' }}
+ </text>
+ </view>
+ <view class="settings-item">
+ <u-input
+ v-model="authPassword"
+ type="password"
+ border="surround"
+ :placeholder="
+ $t('settings.inputAuthPwd') || '璇疯緭鍏ョ鐞嗗憳瀵嗙爜'
+ "
+ />
+ </view>
+ <view class="settings-buttons">
+ <u-button
+ size="medium"
+ @click="showAuth = false"
+ >
+ {{ $t('common.cancel') || '鍙栨秷' }}
+ </u-button>
+ <view style="width: 20px"></view>
+ <u-button
+ size="medium"
+ type="primary"
+ @click="checkAuth"
+ >
+ {{ $t('common.confirm') || '纭' }}
+ </u-button>
+ </view>
+ </view>
+ </u-popup>
+ <u-popup
+ :show="showSettings"
+ @close="showSettings = false"
+ mode="center"
+ :round="14"
+ :closeOnClickOverlay="false"
+ :customStyle="{ width: '600rpx' }"
+ >
+ <view class="settings-popup">
+ <view class="settings-title">
+ <text class="settings-title-text">
+ {{ $t('settings.title') || '璁剧疆' }}
+ </text>
+ </view>
+ <view class="settings-item">
+ <text class="settings-label">
+ {{ $t('settings.ip') || 'IP鍦板潃' }}:
+ </text>
+ <u-input
+ v-model="settings.ip"
+ border="surround"
+ />
+ </view>
+ <view class="settings-item">
+ <text class="settings-label">
+ {{ $t('settings.port') || '绔彛' }}:
+ </text>
+ <u-input
+ v-model="settings.port"
+ border="surround"
+ />
+ </view>
+ <view class="settings-item">
+ <text class="settings-label">
+ {{ $t('settings.project') || '椤圭洰鍚�' }}:
+ </text>
+ <u-input
+ v-model="settings.project"
+ border="surround"
+ />
+ </view>
+ <view class="settings-buttons">
+ <u-button
+ size="medium"
+ @click="showSettings = false"
+ >
+ {{ $t('common.cancel') || '鍙栨秷' }}
+ </u-button>
+ <view style="width: 20px"></view>
+ <u-button
+ size="medium"
+ type="primary"
+ @click="saveSettings"
+ >
+ {{ $t('common.confirm') || '纭' }}
+ </u-button>
+ </view>
+ </view>
+ </u-popup>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
- import md5 from '../../static/js/md5.js'
- import {
- request
- } from '../../common/request.js'
- export default {
- data() {
- return {
- showPassword: true,
- loading: false,
- showLanguageDropdown: false,
- loginButton: 'login.login',
- systemLocale: '',
- applicationLocale: '',
- remberPassword: true,
- user: {
- userName: '',
- password: '',
+import md5 from '../../static/js/md5.js'
+import { login } from './api.js'
+export default {
+ data() {
+ return {
+ showPassword: true,
+ loading: false,
+ showLanguageDropdown: false,
+ loginButton: 'login.login',
+ systemLocale: '',
+ applicationLocale: '',
+ remberPassword: true,
+ user: {
+ userName: '',
+ password: ''
+ },
+ passwordIcon: 'eye-off',
+ showSettings: false,
+ settings: {
+ ip: '',
+ port: '',
+ project: ''
+ },
+ showAuth: false,
+ authPassword: ''
+ }
+ },
+ computed: {
+ locales() {
+ return [
+ {
+ text: this.$t('locale.auto'),
+ code: 'auto'
},
- passwordIcon: 'eye-off'
+ {
+ text: this.$t('locale.en'),
+ code: 'en'
+ },
+ {
+ text: this.$t('locale.zh-hans'),
+ code: 'zh-Hans'
+ },
+ {
+ text: this.$t('locale.zh-hant'),
+ code: 'zh-Hant'
+ },
+ {
+ text: this.$t('locale.ja'),
+ code: 'ja'
+ }
+ ]
+ },
+ btnText() {
+ return this.$t(this.loginButton)
+ },
+ pwdIcon() {
+ return this.passwordIcon
+ }
+ },
+ onLoad() {
+ let systemInfo = uni.getSystemInfoSync()
+ this.systemLocale = systemInfo.language
+ this.applicationLocale = uni.getLocale()
+ this.isAndroid = systemInfo.platform.toLowerCase() === 'android'
+ uni.onLocaleChange((e) => {
+ this.applicationLocale = e.locale
+ })
+
+ this.user = uni.getStorageSync('user')
+ if (!this.user) {
+ this.user = {
+ userName: '',
+ password: ''
+ }
+ }
+ },
+ methods: {
+ openSettings() {
+ this.showAuth = true
+ this.authPassword = ''
+ },
+ checkAuth() {
+ // Default password: admin or 123456. Ideally from config.
+ if (
+ this.authPassword === 'admin' ||
+ this.authPassword === '123456'
+ ) {
+ this.showAuth = false
+ this.loadSettings()
+ } else {
+ this.$refs.uToast.show({
+ type: 'error',
+ message: this.$t('settings.authError') || '瀵嗙爜閿欒'
+ })
}
},
- computed: {
- locales() {
- return [{
- text: this.$t('locale.auto'),
- code: 'auto'
- }, {
- text: this.$t('locale.en'),
- code: 'en'
- },
- {
- text: this.$t('locale.zh-hans'),
- code: 'zh-Hans'
- },
- {
- text: this.$t('locale.zh-hant'),
- code: 'zh-Hant'
- },
- {
- text: this.$t('locale.ja'),
- code: 'ja'
- }
- ]
- },
- btnText() {
- return this.$t(this.loginButton);
- },
- pwdIcon() {
- return this.passwordIcon;
+ loadSettings() {
+ this.showSettings = true
+ let settings = uni.getStorageSync('app_settings')
+ if (!settings) {
+ settings = {
+ ip: '127.0.0.1',
+ port: '8080',
+ project: 'jshdasrs'
+ }
}
+ this.settings = settings
},
- onLoad() {
- let systemInfo = uni.getSystemInfoSync();
- this.systemLocale = systemInfo.language;
- this.applicationLocale = uni.getLocale();
- this.isAndroid = systemInfo.platform.toLowerCase() === 'android';
- uni.onLocaleChange((e) => {
- this.applicationLocale = e.locale;
+ saveSettings() {
+ uni.setStorageSync('app_settings', this.settings)
+ console.log(this.settings)
+ this.showSettings = false
+ this.$refs.uToast.show({
+ type: 'success',
+ message: this.$t('settings.saved') || '璁剧疆宸蹭繚瀛�'
})
+ },
+ async onLogin() {
+ try {
+ const res = await login(
+ {
+ username: this.user.userName,
+ password: md5.hex_md5(this.user.password)
+ },
+ { custom: { catch: true } }
+ )
- this.user = uni.getStorageSync('user')
- if (!this.user) {
- this.user = {
- userName: '',
- password: ''
+ this.loading = true
+ this.loginButton = 'login.loging'
+ uni.setStorageSync('token', res.data.accessToken)
+ uni.setStorageSync('userData', res.data.username)
+ if (this.remberPassword) {
+ uni.setStorageSync('user', this.user)
+ } else {
+ uni.removeStorageSync('user')
}
+ this.goHome()
+ } catch (e) {
+ // 鎷︽埅鍣ㄥ凡澶勭悊 toast
}
},
- methods: {
- async onLogin() {
- const {
- code,
- data,
- msg
- } = await request('/login.action', {
- username: this.user.userName,
- password: md5.hex_md5(this.user.password),
-
- }, 'GET')
- if (code === 200) {
- this.loading = true;
- this.loginButton = 'login.loging';
- uni.setStorageSync('token', data.accessToken);
- uni.setStorageSync('userData', data.username);
- if (this.remberPassword) {
- uni.setStorageSync('user', this.user);
- } else {
- uni.removeStorageSync('user');
- }
- this.goHome()
- } else {
- this.$refs.uToast.show({
- type: 'error',
- message: "璇锋鏌ユ帴鍙h繛鎺�",
- position: 'top'
-
- });
- }
-
- },
- goHome() {
+ goHome() {
+ setTimeout(() => {
+ this.$refs.uToast.show({
+ type: 'success',
+ message: '鐧诲綍鎴愬姛',
+ position: 'top'
+ })
setTimeout(() => {
- this.$refs.uToast.show({
- type: 'success',
- message: "鐧诲綍鎴愬姛",
- position: 'top'
-
- });
- setTimeout(() => {
- uni.$u.route({
- url: 'pages/index/index',
- params: {
- name: 'lisa'
- }
- })
-
- }, 300)
- }, 700)
- },
- remberChange(e) {
- this.remberPassword = !this.remberPassword
- },
- // 鏄剧ず/闅愯棌瀵嗙爜
- changePassword() {
- this.passwordIcon = !this.showPassword ? 'eye-off' : 'eye'
- this.showPassword = !this.showPassword;
- },
- localChange() {
- console.log(this.local)
- if (this.isAndroid) {
- uni.showModal({
- content: this.$t('index.language-change-confirm'),
- success: (res) => {
- if (res.confirm) {
- uni.setLocale(this.local.value);
- }
+ uni.$u.route({
+ type: 'reLaunch',
+ url: 'pages/home/home',
+ params: {
+ name: 'lisa'
}
})
- } else {
- uni.setLocale(this.local.value);
- this.$i18n.locale = this.local.value;
- }
- },
- // 鍒囨崲璇█涓嬫媺鑿滃崟鏄剧ず鐘舵��
- toggleLanguageDropdown() {
- this.showLanguageDropdown = !this.showLanguageDropdown;
- },
-
- // 鑾峰彇褰撳墠閫夋嫨鐨勮瑷�鏂囨湰
- getCurrentLanguageText() {
- const currentLocale = this.locales.find(item => item.code === this.applicationLocale);
- return currentLocale ? currentLocale.text : this.$t('locale.auto');
- },
-
- // 璇█閫夋嫨鏀瑰彉
- onLocaleChange(e) {
- if (this.isAndroid) {
- uni.showModal({
- content: this.$t('index.language-change-confirm'),
- success: (res) => {
- if (res.confirm) {
- uni.setLocale(e.code);
- this.showLanguageDropdown = false;
- }
+ }, 300)
+ }, 700)
+ },
+ remberChange(e) {
+ this.remberPassword = !this.remberPassword
+ },
+ // 鏄剧ず/闅愯棌瀵嗙爜
+ changePassword() {
+ this.passwordIcon = !this.showPassword ? 'eye-off' : 'eye'
+ this.showPassword = !this.showPassword
+ },
+ localChange() {
+ console.log(this.local)
+ if (this.isAndroid) {
+ uni.showModal({
+ content: this.$t('index.language-change-confirm'),
+ success: (res) => {
+ if (res.confirm) {
+ uni.setLocale(this.local.value)
}
- })
- } else {
- uni.setLocale(e.code);
- this.$i18n.locale = e.code;
- this.showLanguageDropdown = false;
- }
- },
+ }
+ })
+ } else {
+ uni.setLocale(this.local.value)
+ this.$i18n.locale = this.local.value
+ }
+ },
+ // 鍒囨崲璇█涓嬫媺鑿滃崟鏄剧ず鐘舵��
+ toggleLanguageDropdown() {
+ this.showLanguageDropdown = !this.showLanguageDropdown
+ },
+
+ // 鑾峰彇褰撳墠閫夋嫨鐨勮瑷�鏂囨湰
+ getCurrentLanguageText() {
+ const currentLocale = this.locales.find(
+ (item) => item.code === this.applicationLocale
+ )
+ return currentLocale ? currentLocale.text : this.$t('locale.auto')
+ },
+
+ // 璇█閫夋嫨鏀瑰彉
+ onLocaleChange(e) {
+ if (this.isAndroid) {
+ uni.showModal({
+ content: this.$t('index.language-change-confirm'),
+ success: (res) => {
+ if (res.confirm) {
+ uni.setLocale(e.code)
+ this.showLanguageDropdown = false
+ }
+ }
+ })
+ } else {
+ uni.setLocale(e.code)
+ this.$i18n.locale = e.code
+ this.showLanguageDropdown = false
+ }
}
}
+}
</script>
<style lang="scss" scoped>
- .helloText {
- font-family: a2;
- font-size: 20px;
- margin-top: 10px;
- margin-bottom: 5px;
- }
+.helloText {
+ font-family: a2;
+ font-size: 20px;
+ margin-top: 10px;
+ margin-bottom: 5px;
+}
- .introText {
- font-family: a3;
- font-size: 15px;
- color: #ababab;
- }
+.introText {
+ font-family: a3;
+ font-size: 15px;
+ color: #ababab;
+}
- .textType3 {
- font-family: a4;
- }
+.textType3 {
+ font-family: a4;
+}
- .bodyView {
- display: flex;
- flex-direction: column;
- background-image: url("/static/img/login_backg.png");
- background-repeat: no-repeat;
- background-size: cover;
- background-position: center;
- height: 100vh;
- width: 100%;
- }
+.bodyView {
+ flex: 1;
+ flex-direction: column;
+ width: 750rpx;
+}
- .topView {
- flex: 7;
- }
+.bgImage {
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+}
- .topView image {
- width: 100%;
- }
+.topView {
+ flex: 7;
+}
- .logoView {
- flex: 1;
- display: flex;
- justify-content: flex-end;
- align-items: center;
+.topView image {
+ width: 100%;
+}
- }
+.logoView {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+ align-items: flex-end;
+}
- .logoView image {
- width: 33%;
- height: 50px;
- margin-right: 20px;
- }
+.logoView image {
+ width: 33%;
+ height: 50px;
+ margin-right: 20px;
+}
- .bottomView {
- flex: 15;
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- align-items: center;
- }
+.bottomView {
+ flex: 15;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+}
- .itemView {
- width: 90%;
- height: 50px;
- margin-bottom: 30px;
- }
+.itemView {
+ width: 90%;
+ margin-bottom: 5px;
+}
- .langAndRemView {
- width: 90%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
+.langAndRemView {
+ width: 90%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 5px;
+}
- .langView {
- width: 30%;
- }
+.langView {
+ width: 30%;
+}
- .textImage {
- width: 60%;
- height: 42px;
- object-fit: cover;
- margin-top: 20px;
- margin-bottom: 30px;
- }
+.textImage {
+ width: 60%;
+ height: 42px;
+ object-fit: cover;
+ margin-top: 20px;
+ margin-bottom: 30px;
+}
- .input-wrapper {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- padding: 8px 13px;
- flex-direction: row;
- flex-wrap: nowrap;
- background-color: #FFFFFF;
- border-radius: 10px;
- height: 45px;
- align-items: center;
- margin-top: 5px;
- }
+.input-wrapper {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ padding: 8px 13px;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ background-color: #ffffff;
+ border-radius: 10px;
+ height: 45px;
+ align-items: center;
+ margin-top: 5px;
+}
- .uni-input {
- height: 28px;
- line-height: 28px;
- font-size: 15px;
- padding: 0px;
- flex: 1;
- background-color: #FFFFFF;
+.uni-input {
+ height: 28px;
+ line-height: 28px;
+ font-size: 15px;
+ padding: 0px;
+ flex: 1;
+ background-color: #ffffff;
+}
- }
+.uni-icon {
+ font-family: uniicons;
+ font-size: 24px;
+ font-weight: normal;
+ font-style: normal;
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+ color: #999999;
+}
- .uni-icon {
- font-family: uniicons;
- font-size: 24px;
- font-weight: normal;
- font-style: normal;
- width: 24px;
- height: 24px;
- line-height: 24px;
- color: #999999;
- }
+.uni-eye-active {
+ color: #007aff;
+}
- .uni-eye-active {
- color: #007AFF;
- }
+.eye-icon {
+ width: 20px;
+ height: 13px;
+ margin-left: 5px;
+}
- .eye-icon {
- width: 20px;
- height: 13px;
- margin-left: 5px;
- }
+.loadingButton {
+ background-color: #ffda1e;
+ font-family: a1;
+}
- .loadingButton {
- background-color: #ffda1e;
- font-family: a1;
- }
+.check {
+ height: 100%;
+ display: flex;
+ flex-direction: row;
+ font-size: 18px;
+ color: #606266;
+ justify-content: flex-start;
+ align-items: center;
+}
- .check {
+/* 璇█閫夋嫨涓嬫媺鑿滃崟 */
+.language-dropdown {
+ position: relative;
+ margin-bottom: 20rpx;
+ z-index: 10;
+}
- height: 100%;
- display: flex;
- font-size: 18px;
- color: #606266;
- justify-content: flex-start;
- align-items: center;
+.selected-language {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 15rpx 20rpx;
+ background-color: #f8f8f8;
+ border-radius: 8rpx;
+ border: 1px solid #e0e0e0;
+}
- }
+.language-options {
+ position: absolute;
+ bottom: 100%;
+ left: 0;
+ right: 0;
+ background-color: #ffffff;
+ border-radius: 8rpx;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ border: 1px solid #e0e0e0;
+ margin-bottom: 5rpx;
+}
- /* 璇█閫夋嫨涓嬫媺鑿滃崟 */
- .language-dropdown {
- position: relative;
- margin-bottom: 20rpx;
- z-index: 10;
- }
+.language-option {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 15rpx 20rpx;
+ border-bottom: 1px solid #f0f0f0;
+}
- .selected-language {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 15rpx 20rpx;
- background-color: #f8f8f8;
- border-radius: 8rpx;
- border: 1px solid #e0e0e0;
- }
+.language-option:last-child {
+ border-bottom: none;
+}
- .language-options {
- position: absolute;
- bottom: 100%;
- left: 0;
- right: 0;
- background-color: #ffffff;
- border-radius: 8rpx;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
- border: 1px solid #e0e0e0;
- margin-bottom: 5rpx;
- }
+.language-option:active {
+ background-color: #f5f5f5;
+}
- .language-option {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 15rpx 20rpx;
- border-bottom: 1px solid #f0f0f0;
- }
+.settings-popup {
+ padding: 20px;
+ background-color: #ffffff;
+ border-radius: 10px;
+ display: flex;
+ flex-direction: column;
+}
- .language-option:last-child {
- border-bottom: none;
- }
+.settings-title {
+ margin-bottom: 20px;
+ align-items: center;
+ justify-content: center;
+}
- .language-option:active {
- background-color: #f5f5f5;
- }
-</style>
\ No newline at end of file
+.settings-title-text {
+ font-size: 18px;
+ font-weight: bold;
+}
+
+.settings-item {
+ margin-bottom: 15px;
+}
+
+.settings-label {
+ margin-bottom: 5px;
+ font-size: 14px;
+ color: #606266;
+}
+
+.settings-buttons {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ margin-top: 10px;
+}
+</style>
--
Gitblit v1.9.1