feat: add index page for mobile

This commit is contained in:
RockYang
2024-04-28 19:09:26 +08:00
parent b354b88876
commit 99df028237
28 changed files with 640 additions and 349 deletions

View File

@@ -11,7 +11,7 @@
style="width:90%;max-width: 360px;"
>
<slide-captcha
v-if="isIphone()"
v-if="isMobile()"
:bg-img="bgImg"
:bk-img="bkImg"
:result="result"
@@ -42,8 +42,9 @@ import {ElMessage} from "element-plus";
import {httpGet, httpPost} from "@/utils/http";
import CaptchaPlus from "@/components/CaptchaPlus.vue";
import SlideCaptcha from "@/components/SlideCaptcha.vue";
import {isIphone} from "@/utils/libs";
import {isMobile} from "@/utils/libs";
// eslint-disable-next-line no-undef
const props = defineProps({
receiver: String,
size: String,
@@ -98,8 +99,8 @@ const loadCaptcha = () => {
}
showCaptcha.value = true
// iphone 手机用滑动验证码
if (isIphone()) {
// 手机用滑动验证码
if (isMobile()) {
getSlideCaptcha()
} else {
handleRequestCaptCode()

View File

@@ -36,20 +36,9 @@
</span>
<template #dropdown>
<el-dropdown-menu>
<a href="https://github.com/yangjian102621/chatgpt-plus" target="_blank">
<el-dropdown-item>
<i class="iconfont icon-github"></i>
<span>{{ sysTitle }}</span>
</el-dropdown-item>
</a>
<el-dropdown-item>
<i class="iconfont icon-version"></i> 当前版本{{ version }}
</el-dropdown-item>
<el-dropdown-item @click="showDialog = true">
<i class="iconfont icon-reward"></i>
<span>打赏作者</span>
</el-dropdown-item>
<el-dropdown-item divided @click="logout">
<i class="iconfont icon-logout"></i>
<span>退出登录</span>
@@ -60,36 +49,19 @@
</div>
</div>
<el-dialog
v-model="showDialog"
:show-close="true"
class="donate-dialog"
width="400px"
title="请作者喝杯咖啡"
>
<el-alert type="info" :closable="false">
<p>如果你觉得这个项目对你有帮助并且情况允许的话可以请作者喝杯咖啡非常感谢你的支持</p>
</el-alert>
<p>
<el-image :src="donateImg"/>
</p>
</el-dialog>
</div>
</template>
<script setup>
import {computed, onMounted, ref} from 'vue';
import {getMenuItems, useSidebarStore} from '@/store/sidebar';
import {useRouter} from 'vue-router';
import {useRouter} from "vue-router";
import {ArrowDown, ArrowRight, Expand, Fold, Moon, Sunny} from "@element-plus/icons-vue";
import {httpGet} from "@/utils/http";
import {ElMessage} from "element-plus";
import {removeAdminToken} from "@/store/session";
const sysTitle = ref(process.env.VUE_APP_TITLE)
const version = ref(process.env.VUE_APP_VERSION)
const avatar = ref('/images/user-info.jpg')
const donateImg = ref('/images/wechat-pay.png')
const showDialog = ref(false)
const sidebar = useSidebarStore();
const router = useRouter();
const breadcrumb = ref([])
@@ -187,7 +159,6 @@ const logout = function () {
font-size: 22px;
color: #303133;
background-color #ffffff
border-bottom 1px solid #eaecef
.collapse-btn {
display: flex;

View File

@@ -1,9 +1,9 @@
<template>
<div :class="'sidebar '+theme">
<div class="logo">
<a class="logo" href="/" target="_blank">
<el-image :src="logo"/>
<span class="text" v-show="!sidebar.collapse">{{ title }}</span>
</div>
</a>
<el-menu
class="sidebar-el-menu"
@@ -54,9 +54,9 @@
<script setup>
import {computed, ref} from 'vue';
import {setMenuItems, useSidebarStore} from '@/store/sidebar';
import {useRoute} from 'vue-router';
import {httpGet} from "@/utils/http";
import {ElMessage} from "element-plus";
import {useRoute} from "vue-router";
const title = ref('Chat-Plus-Admin')
const logo = ref('/images/logo.png')
@@ -199,6 +199,7 @@ setMenuItems(items)
width 219px
background-color #324157
padding 6px 15px;
cursor pointer
.el-image {
width 36px;
@@ -248,6 +249,7 @@ setMenuItems(items)
.logo {
background var(--el-bg-color)
border-right 1px solid var(--el-border-color)
.text {
color var(--el-text-color-regular)
@@ -269,6 +271,10 @@ setMenuItems(items)
.sidebar-el-menu:not(.el-menu--collapse) {
width: 250px;
}
.el-menu {
border-color var(--el-border-color)
}
}
</style>

View File

@@ -118,71 +118,75 @@ const handleTags = (command) => {
// });
</script>
<style>
<style scoped lang="stylus">
.tags {
position: relative;
height: 30px;
overflow: hidden;
background: #fff;
padding-right: 120px;
padding 5px 120px 5px 10px
-webkit-box-shadow: 0 1px 4px rgba(0, 21, 41, .08);
box-shadow: 0 1px 4px rgba(0, 21, 41, .08);
ul {
box-sizing: border-box;
width: 100%;
height: 100%;
.tags-li {
display: flex;
align-items: center;
float: left;
margin: 3px 5px 2px 3px;
border-radius: 3px;
font-size: 12px;
overflow: hidden;
cursor: pointer;
height: 23px;
border: 1px solid var(--el-border-color);
background: var(--el-bg-color);
padding: 0 5px 0 12px;
color: var(--el-text-color);
-webkit-transition: all 0.3s ease-in;
-moz-transition: all 0.3s ease-in;
transition: all 0.3s ease-in;
&:hover {
background: var(--el-menu-bg-color-dark);
}
}
.tags-li-title {
float: left;
max-width: 80px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 5px;
color: #666;
}
.tags-li.active .tags-li-title {
color: var(--el-color-primary)
}
}
.tags-close-box {
position: absolute;
right: 0;
top: 7px;
box-sizing: border-box;
padding-top: 1px;
text-align: center;
width: 110px;
height: 30px;
background: var(--el-bg-color);
z-index: 10;
}
}
.tags ul {
box-sizing: border-box;
width: 100%;
height: 100%;
.tags.dark {
border-bottom 1px solid var(--el-border-color)
}
.tags-li {
display: flex;
align-items: center;
float: left;
margin: 3px 5px 2px 3px;
border-radius: 3px;
font-size: 12px;
overflow: hidden;
cursor: pointer;
height: 23px;
border: 1px solid var(--el-border-color);
background: var(--el-bg-color);
padding: 0 5px 0 12px;
color: var(--el-text-color);
-webkit-transition: all 0.3s ease-in;
-moz-transition: all 0.3s ease-in;
transition: all 0.3s ease-in;
}
.tags-li:hover {
background: var(--el-menu-bg-color-dark);
}
.tags-li-title {
float: left;
max-width: 80px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 5px;
color: #666;
}
.tags-li.active .tags-li-title {
color: var(--el-color-primary)
}
.tags-close-box {
position: absolute;
right: 0;
top: 2px;
box-sizing: border-box;
padding-top: 1px;
text-align: center;
width: 110px;
height: 30px;
background: var(--el-bg-color);
box-shadow: -3px 0 15px 3px rgba(0, 0, 0, 0.1);
z-index: 10;
}
</style>

View File

@@ -16,6 +16,7 @@ import {onMounted, ref} from "vue";
import Clipboard from "clipboard";
import {showNotify} from "vant";
// eslint-disable-next-line no-unused-vars,no-undef
const props = defineProps({
content: {
type: String,