save progress
This commit is contained in:
parent
dbf485e0d5
commit
25ea5f2781
@ -1,3 +0,0 @@
|
||||
|
||||
# 请求域名
|
||||
VITE_APP_BASE_URL=''
|
||||
@ -1,3 +0,0 @@
|
||||
|
||||
# 请求域名
|
||||
VITE_APP_BASE_URL=''
|
||||
11
.env.test
Normal file
11
.env.test
Normal file
@ -0,0 +1,11 @@
|
||||
#mode 环境
|
||||
VITE_MODE = test
|
||||
|
||||
#服务器域名
|
||||
VITE_HOST = https://test.szxgl.cn/
|
||||
|
||||
# 请求域名
|
||||
VITE_APP_BASE_URL='https://test.szxgl.cn/ai-agent-admin-server'
|
||||
|
||||
#静态资源目录
|
||||
VITE_CDN_DIR = 'https://agent-admin-test.szxgl.cn/'
|
||||
@ -56,9 +56,10 @@
|
||||
"github-markdown-css": "5.2.0",
|
||||
"highlight.js": "11.0.0",
|
||||
"howler": "2.2.4",
|
||||
"js-base64": "^3.7.5",
|
||||
"js-cookie": "^3.0.5",
|
||||
"js-mp3": "0.1.0",
|
||||
"jsonc-parser": "3.2.1",
|
||||
"js-base64": "^3.7.5",
|
||||
"lodash-es": "4.17.21",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-math": "4.1.1",
|
||||
|
||||
41
src/App.vue
41
src/App.vue
@ -8,6 +8,7 @@ import { useSharedId } from './hooks/useShareMessage'
|
||||
import { SHARE_ID, USER_SN } from './enums/constantEnums'
|
||||
import { strToParams } from './utils/util'
|
||||
import cache from './utils/cache'
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const appStore = useAppStore()
|
||||
const { getUser } = useUserStore()
|
||||
@ -44,6 +45,9 @@ const setH5WebIcon = () => {
|
||||
//#endif
|
||||
|
||||
const getConfig = async () => {
|
||||
|
||||
await setLocalStorage()
|
||||
// 获取配置信息
|
||||
await appStore.getConfig()
|
||||
//处理关闭h5渠道
|
||||
// #ifdef H5
|
||||
@ -55,6 +59,40 @@ const getConfig = async () => {
|
||||
// #endif
|
||||
}
|
||||
|
||||
|
||||
// 企微登录
|
||||
const setLocalStorage = async () => {
|
||||
const isWeCom = isWechatWork()
|
||||
|
||||
// 获取localStorage中的配置信息
|
||||
const token = localStorage.getItem('app_token')
|
||||
const cookiesToken = Cookies.get('token')
|
||||
|
||||
if (!cookiesToken) {
|
||||
if (isWeCom) {
|
||||
// 写入cookie
|
||||
const redirect = location.href
|
||||
Cookies.set('redirect', redirect)
|
||||
location.href = `${import.meta.env.VITE_APP_BASE_URL}/qywx/getWxUserByInside?terminal=3`
|
||||
return
|
||||
}
|
||||
} else {
|
||||
const obj = { expire: "", value: cookiesToken }
|
||||
console.log('obj', obj);
|
||||
console.log('写入前 token', token);
|
||||
localStorage.setItem("app_token", JSON.stringify(obj));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 判断是否为企微环境
|
||||
const isWechatWork = () => {
|
||||
const ua = navigator.userAgent.toLowerCase();
|
||||
// 同时匹配 "micromessenger"(微信内核)和 "wxwork"(企业微信标识)
|
||||
return ua.includes('micromessenger') && ua.includes('wxwork');
|
||||
}
|
||||
|
||||
onLaunch(async (opinion) => {
|
||||
getConfig()
|
||||
getTheme()
|
||||
@ -72,5 +110,4 @@ onShow(() => {
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
//
|
||||
</style>
|
||||
//</style>
|
||||
|
||||
@ -1 +1,79 @@
|
||||
<template>
<view class="agreement" v-if="isOpenAgreement" :class="{ shake: isShake }">
<view>
<u-checkbox v-model="isActive" shape="circle">
<view class="text-xs flex">
已阅读并同意
<view @click.stop>
<router-navigate
class="text-primary"
to="/packages/pages/agreement/agreement?type=service"
>
《服务协议》
</router-navigate>
</view>
和
<view @click.stop>
<router-navigate
class="text-primary"
to="/packages/pages/agreement/agreement?type=privacy"
>
《隐私协议》
</router-navigate>
</view>
</view>
</u-checkbox>
</view>
</view>
</template>
<script lang="ts" setup>
import { useAppStore } from '@/stores/app'
import { computed, ref } from 'vue'
const appStore = useAppStore()
const isActive = ref(false)
const isShake = ref(false)
const isOpenAgreement = computed(
() => appStore.getLoginConfig.openAgreement == 1
)
const checkAgreement = () => {
if (!isActive.value && isOpenAgreement.value) {
uni.$u.toast('请勾选已阅读并同意《服务协议》和《隐私协议》')
isShake.value = true
setTimeout(() => {
isShake.value = false
}, 1000)
} else if (!isOpenAgreement.value) {
return true
}
return isActive.value
}
defineExpose({
checkAgreement
})
</script>
<style lang="scss">
.shake {
animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
transform: translate3d(0, 0, 0);
}
@keyframes shake {
10%,
90% {
transform: translate3d(-1px, 0, 0);
}
20%,
80% {
transform: translate3d(2px, 0, 0);
}
30%,
50%,
70% {
transform: translate3d(-4px, 0, 0);
}
40%,
60% {
transform: translate3d(4px, 0, 0);
}
}
</style>
|
||||
<template>
|
||||
<view class="agreement" v-if="isOpenAgreement" :class="{ shake: isShake }">
|
||||
<view>
|
||||
<u-checkbox v-model="isActive" shape="circle">
|
||||
<view class="text-xs flex">
|
||||
已阅读并同意
|
||||
<view @click.stop>
|
||||
<router-navigate class="text-primary" to="/packages/pages/agreement/agreement?type=service">
|
||||
《服务协议》
|
||||
</router-navigate>
|
||||
</view>
|
||||
|
||||
和
|
||||
<view @click.stop>
|
||||
<router-navigate class="text-primary" to="/packages/pages/agreement/agreement?type=privacy">
|
||||
《隐私协议》
|
||||
</router-navigate>
|
||||
</view>
|
||||
</view>
|
||||
</u-checkbox>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { useAppStore } from '@/stores/app'
|
||||
import { computed, ref } from 'vue'
|
||||
const appStore = useAppStore()
|
||||
const isActive = ref(false)
|
||||
const isShake = ref(false)
|
||||
const isOpenAgreement = computed(
|
||||
() => appStore.getLoginConfig.openAgreement == 1
|
||||
)
|
||||
const checkAgreement = () => {
|
||||
if (!isActive.value && isOpenAgreement.value) {
|
||||
uni.$u.toast('请勾选已阅读并同意《服务协议》和《隐私协议》')
|
||||
isShake.value = true
|
||||
setTimeout(() => {
|
||||
isShake.value = false
|
||||
}, 1000)
|
||||
} else if (!isOpenAgreement.value) {
|
||||
return true
|
||||
}
|
||||
return isActive.value
|
||||
}
|
||||
defineExpose({
|
||||
checkAgreement
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.shake {
|
||||
animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
|
||||
10%,
|
||||
90% {
|
||||
transform: translate3d(-1px, 0, 0);
|
||||
}
|
||||
|
||||
20%,
|
||||
80% {
|
||||
transform: translate3d(2px, 0, 0);
|
||||
}
|
||||
|
||||
30%,
|
||||
50%,
|
||||
70% {
|
||||
transform: translate3d(-4px, 0, 0);
|
||||
}
|
||||
|
||||
40%,
|
||||
60% {
|
||||
transform: translate3d(4px, 0, 0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<template>
|
||||
<view
|
||||
class="px-[20rpx] h-[90rpx] text-sm flex items-center justify-between bg-white"
|
||||
>
|
||||
<view class="flex">
|
||||
<view class="px-[20rpx] h-[90rpx] text-sm flex items-center justify-between bg-white">
|
||||
<!-- <view class="flex">
|
||||
<u-button
|
||||
type="primary"
|
||||
plain
|
||||
@ -23,7 +21,7 @@
|
||||
}}
|
||||
</router-navigate>
|
||||
</u-button>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<view>
|
||||
<view v-if="plugin.key" class="text-muted mr-2 text-xs">
|
||||
|
||||
@ -1,21 +1,11 @@
|
||||
<template>
|
||||
<view class="chat-scroll-view h-full flex flex-col">
|
||||
<view class="flex-1 min-h-0">
|
||||
<z-paging
|
||||
ref="pagingRef"
|
||||
v-model="chatList"
|
||||
use-chat-record-mode
|
||||
:auto="false"
|
||||
:refresher-enabled="false"
|
||||
:safe-area-inset-bottom="true"
|
||||
:auto-clean-list-when-reload="false"
|
||||
:show-chat-loading-when-reload="true"
|
||||
:paging-style="{ bottom: keyboardIsShow ? 0 : bottom }"
|
||||
:default-page-size="20"
|
||||
@query="queryList"
|
||||
@keyboardHeightChange="keyboardHeightChange"
|
||||
@hidedKeyboard="hidedKeyboard"
|
||||
>
|
||||
<z-paging ref="pagingRef" v-model="chatList" use-chat-record-mode :auto="false" :refresher-enabled="false"
|
||||
:safe-area-inset-bottom="true" :auto-clean-list-when-reload="false"
|
||||
:show-chat-loading-when-reload="true" :paging-style="{ bottom: keyboardIsShow ? 0 : bottom }"
|
||||
:default-page-size="20" @query="queryList" @keyboardHeightChange="keyboardHeightChange"
|
||||
@hidedKeyboard="hidedKeyboard">
|
||||
<!-- 顶部提示文字 -->
|
||||
|
||||
<!-- style="transform: scaleY(-1)"必须写,否则会导致列表倒置(必须写在for循环标签上,不得写在容器上)!!! -->
|
||||
@ -23,46 +13,26 @@
|
||||
|
||||
<template #top>
|
||||
<slot name="top" />
|
||||
<model-picker
|
||||
v-if="!pluginOptions.pluginId"
|
||||
v-model:chatKey="chatKey"
|
||||
v-model:modelKey="modelKey"
|
||||
/>
|
||||
<VipUse
|
||||
v-if="pluginOptions.pluginId"
|
||||
:plugin="pluginOptions.current"
|
||||
/>
|
||||
<model-picker v-if="!pluginOptions.pluginId" v-model:chatKey="chatKey"
|
||||
v-model:modelKey="modelKey" />
|
||||
<VipUse v-if="pluginOptions.pluginId" :plugin="pluginOptions.current" />
|
||||
</template>
|
||||
<view class="scroll-view-content pb-[20rpx]" ref="contentRef">
|
||||
<view
|
||||
v-for="(item, index) in chatList"
|
||||
:key="`${item.id} + ${index} + ''`"
|
||||
style="transform: scaleY(-1)"
|
||||
>
|
||||
<view v-for="(item, index) in chatList" :key="`${item.id} + ${index} + ''`"
|
||||
style="transform: scaleY(-1)">
|
||||
<view class="chat-record mt-[20rpx] pb-[40rpx]">
|
||||
<chat-record-item
|
||||
:record-id="item.id"
|
||||
:type="item.type == 1 ? 'right' : 'left'"
|
||||
:content="item.content"
|
||||
:loading="item.loading"
|
||||
:audio="item.voiceFile"
|
||||
:index="index"
|
||||
<chat-record-item :record-id="item.id" :type="item.type == 1 ? 'right' : 'left'"
|
||||
:content="item.content" :loading="item.loading" :audio="item.voiceFile" :index="index"
|
||||
:time="item.type == 2 ? item.createTime : ''"
|
||||
:model-name="appStore.getChatConfig.show_model ? item.model : ''"
|
||||
:is-collect="item.is_collect"
|
||||
:avatar="avatar"
|
||||
:showRewriteBtn="index === 0"
|
||||
:showPosterBtn="true"
|
||||
:showCopyBtn="true"
|
||||
:file="{
|
||||
:is-collect="item.is_collect" :avatar="avatar" :showRewriteBtn="index === 0"
|
||||
:showPosterBtn="true" :showCopyBtn="true" :file="{
|
||||
url: item.fileUrl,
|
||||
name: item.fileName,
|
||||
type: item.fileType
|
||||
}"
|
||||
@rewrite="rewrite(index)"
|
||||
}" @rewrite="rewrite(index)"
|
||||
@update="(e: any) => chatList[e.index].is_collect = e.value"
|
||||
@click-poster="handleDrawPoster"
|
||||
>
|
||||
@click-poster="handleDrawPoster">
|
||||
</chat-record-item>
|
||||
</view>
|
||||
</view>
|
||||
@ -73,52 +43,33 @@
|
||||
<template #bottom>
|
||||
<view class="send-area">
|
||||
<view class="float-btn">
|
||||
<view
|
||||
v-if="chatList.length && !isReceiving"
|
||||
class="px-[20rpx] py-[10rpx] text-xs flex items-center"
|
||||
@click="sendLock('继续')"
|
||||
>
|
||||
<view v-if="chatList.length && !isReceiving"
|
||||
class="px-[20rpx] py-[10rpx] text-xs flex items-center" @click="sendLock('继续')">
|
||||
<u-icon name="play-circle" class="mr-[8rpx]" size="36" />
|
||||
继续
|
||||
</view>
|
||||
<view
|
||||
v-if="isReceiving"
|
||||
class="px-[20rpx] py-[10rpx] text-xs flex items-center"
|
||||
@click="chatClose()"
|
||||
>
|
||||
<view v-if="isReceiving" class="px-[20rpx] py-[10rpx] text-xs flex items-center"
|
||||
@click="chatClose()">
|
||||
<u-icon name="pause-circle" class="mr-[8rpx]" size="36" />
|
||||
停止
|
||||
</view>
|
||||
</view>
|
||||
<view class="mb-[20rpx]" v-if="isShowFileUpload">
|
||||
<file-upload
|
||||
v-model="pluginOptions.file"
|
||||
return-type="object"
|
||||
:file-type="pluginOptions.type"
|
||||
:file-extname="getFileExtname"
|
||||
:data="{
|
||||
<file-upload v-model="pluginOptions.file" return-type="object"
|
||||
:file-type="pluginOptions.type" :file-extname="getFileExtname" :data="{
|
||||
type:
|
||||
pluginOptions.type == 'file'
|
||||
? 'docs'
|
||||
: '',
|
||||
key: pluginOptions.type != 'image' ? pluginOptions.pluginId : ''
|
||||
}"
|
||||
|
||||
/>
|
||||
}" />
|
||||
</view>
|
||||
<view class="mb-[20rpx] flex items-center">
|
||||
<view class="flex items-center mr-auto">
|
||||
<chat-plugins
|
||||
v-if="type === 1"
|
||||
v-model="pluginOptions.pluginId"
|
||||
v-model:current="pluginOptions.current"
|
||||
@change="pluginChange"
|
||||
>
|
||||
<chat-plugins v-if="type === 1" v-model="pluginOptions.pluginId"
|
||||
v-model:current="pluginOptions.current" @change="pluginChange">
|
||||
</chat-plugins>
|
||||
<network-switch
|
||||
v-if="!pluginOptions.pluginId"
|
||||
v-model="network"
|
||||
></network-switch>
|
||||
<network-switch v-if="!pluginOptions.pluginId" v-model="network"></network-switch>
|
||||
</view>
|
||||
<view class="flex text-content items-center flex-none">
|
||||
<view class="text-xs flex items-center" @click="cleanChatLock">
|
||||
@ -127,56 +78,30 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
class="send-area__content bg-page-base"
|
||||
:class="[safeAreaInsetBottom ? 'safe-area-inset-bottom' : '']"
|
||||
>
|
||||
<view class="send-area__content bg-page-base"
|
||||
:class="[safeAreaInsetBottom ? 'safe-area-inset-bottom' : '']">
|
||||
<view class="flex-1 min-w-0 relative">
|
||||
<view
|
||||
v-if="showPressBtn"
|
||||
<view v-if="showPressBtn"
|
||||
class="absolute left-[-10rpx] top-[-15rpx] bottom-[-15rpx] bg-primary text-btn-text right-[0] z-[9999] flex items-center justify-center rounded-[12rpx]"
|
||||
@longpress="handleLongpress"
|
||||
@touchend="touchEnd"
|
||||
@touchcancel="touchEnd"
|
||||
>
|
||||
@longpress="handleLongpress" @touchend="touchEnd" @touchcancel="touchEnd">
|
||||
按住说话
|
||||
</view>
|
||||
<u-input
|
||||
type="textarea"
|
||||
v-model="userInput"
|
||||
:placeholder="placeholder"
|
||||
maxlength="-1"
|
||||
:auto-height="true"
|
||||
confirm-type="send"
|
||||
:adjust-position="false"
|
||||
:fixed="false"
|
||||
adjust-keyboard-to="bottom"
|
||||
@click="handleClick"
|
||||
@focus="scrollToBottom"
|
||||
/>
|
||||
<u-input type="textarea" v-model="userInput" :placeholder="placeholder" maxlength="-1"
|
||||
:auto-height="true" confirm-type="send" :adjust-position="false" :fixed="false"
|
||||
adjust-keyboard-to="bottom" @click="handleClick" @focus="scrollToBottom" />
|
||||
</view>
|
||||
<view class="ml-[20rpx] my-[-12rpx]">
|
||||
<view v-if="userInput">
|
||||
<u-button
|
||||
type="primary"
|
||||
:custom-style="{
|
||||
width: '100rpx',
|
||||
height: '52rpx',
|
||||
margin: '0'
|
||||
}"
|
||||
size="mini"
|
||||
:disabled="isReceiving"
|
||||
@click.stop="sendLock()"
|
||||
>
|
||||
<u-button type="primary" :custom-style="{
|
||||
width: '100rpx',
|
||||
height: '52rpx',
|
||||
margin: '0'
|
||||
}" size="mini" :disabled="isReceiving" @click.stop="sendLock()">
|
||||
发送
|
||||
</u-button>
|
||||
</view>
|
||||
<view v-else-if="appStore.getIsVoiceTransfer">
|
||||
<view
|
||||
v-if="showPressBtn"
|
||||
class="text-content"
|
||||
@click="triggerRecordShow"
|
||||
>
|
||||
<view v-if="showPressBtn" class="text-content" @click="triggerRecordShow">
|
||||
<u-icon name="more-circle" :size="52" />
|
||||
</view>
|
||||
<view v-else class="text-content" @click="triggerRecordShow">
|
||||
@ -190,24 +115,16 @@
|
||||
<dragon-button :size="184" :yEdge="160">
|
||||
<view class="p-[20rpx]" @click="triggerVoiceShow">
|
||||
<view class="flex justify-center mb-[-20rpx] relative z-[99]">
|
||||
<image
|
||||
class="w-[70rpx] h-[70rpx] mb-[10rpx]"
|
||||
:src="loadingPath"
|
||||
/>
|
||||
<image class="w-[70rpx] h-[70rpx] mb-[10rpx]" :src="loadingPath" />
|
||||
</view>
|
||||
<view>
|
||||
<u-button
|
||||
hover-class="none"
|
||||
:custom-style="{
|
||||
width: '100%',
|
||||
height: '58rpx',
|
||||
fontSize: '24rpx',
|
||||
background: '#28C840',
|
||||
'box-shadow': '0 3px 10px #00000033'
|
||||
}"
|
||||
type="primary"
|
||||
shape="circle"
|
||||
>
|
||||
<u-button hover-class="none" :custom-style="{
|
||||
width: '100%',
|
||||
height: '58rpx',
|
||||
fontSize: '24rpx',
|
||||
background: '#28C840',
|
||||
'box-shadow': '0 3px 10px #00000033'
|
||||
}" type="primary" shape="circle">
|
||||
在线语音
|
||||
</u-button>
|
||||
</view>
|
||||
@ -220,26 +137,17 @@
|
||||
|
||||
<guided-popup ref="guidedPopupRef" />
|
||||
<!--#ifdef APP-PLUS-->
|
||||
<appChat
|
||||
@onmessage="appOnmessage"
|
||||
@onclose="appOnclose"
|
||||
@onstart="appOnstart"
|
||||
ref="appChatRef"
|
||||
></appChat>
|
||||
<appChat @onmessage="appOnmessage" @onclose="appOnclose" @onstart="appOnstart" ref="appChatRef"></appChat>
|
||||
<!--#endif-->
|
||||
<recorder ref="recorderRef" v-model:show="showRecorder" @success="sendLock" />
|
||||
</view>
|
||||
<online-voice
|
||||
v-model:show="showOnlineVoice"
|
||||
:data="{
|
||||
chatKey: chatKey,
|
||||
modelKey: modelKey,
|
||||
type: type,
|
||||
categoryId: otherId,
|
||||
network: network
|
||||
}"
|
||||
@update="pagingRef?.reload()"
|
||||
/>
|
||||
<online-voice v-model:show="showOnlineVoice" :data="{
|
||||
chatKey: chatKey,
|
||||
modelKey: modelKey,
|
||||
type: type,
|
||||
categoryId: otherId,
|
||||
network: network
|
||||
}" @update="pagingRef?.reload()" />
|
||||
|
||||
<!-- 生产对话海报 -->
|
||||
<dialog-poster ref="posterRef"></dialog-poster>
|
||||
@ -426,7 +334,7 @@ const pluginChange = (value: string) => {
|
||||
pluginOptions.type = 'image'
|
||||
} else if (value === 'kimi-chatdoc') {
|
||||
pluginOptions.type = 'file'
|
||||
} else {
|
||||
} else {
|
||||
pluginOptions.type = ''
|
||||
}
|
||||
resetPluginData()
|
||||
@ -753,7 +661,7 @@ const appOnmessage = (value: any) => {
|
||||
chatContent.value.loading = false
|
||||
return
|
||||
}
|
||||
} catch (error) {}
|
||||
} catch (error) { }
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -813,6 +721,7 @@ defineExpose({
|
||||
position: relative;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
|
||||
.float-btn {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
@ -823,6 +732,7 @@ defineExpose({
|
||||
border-radius: 20rpx;
|
||||
@apply bg-white border-light;
|
||||
}
|
||||
|
||||
&__content {
|
||||
border-radius: 16rpx;
|
||||
padding: 25rpx 20rpx;
|
||||
@ -841,12 +751,14 @@ defineExpose({
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
line-height: var(--line-height);
|
||||
|
||||
.uni-textarea-textarea {
|
||||
max-height: calc(var(--line-height) * var(--line-num));
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.send-btn {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
@ -858,6 +770,7 @@ defineExpose({
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chat-bubble {
|
||||
width: 70rpx;
|
||||
height: 70rpx;
|
||||
|
||||
@ -4,25 +4,15 @@
|
||||
<view class="p-[28rpx] text-center font-medium text-xl"> 对话余额不足 </view>
|
||||
<view class="border-t border-solid border-light border-0 px-[40rpx] py-[30rpx]">
|
||||
<view>你可以通过以下渠道获取对话条数:</view>
|
||||
<view
|
||||
class="mt-[40rpx] flex items-center"
|
||||
v-for="(item, index) in channelList"
|
||||
:key="index"
|
||||
>
|
||||
<view class="mt-[40rpx] flex items-center" v-for="(item, index) in channelList" :key="index">
|
||||
<view class="mr-[20rpx] font-medium">
|
||||
{{ item.title }}
|
||||
</view>
|
||||
<view class="ml-auto">
|
||||
<u-button
|
||||
type="primary"
|
||||
shape="circle"
|
||||
size="medium"
|
||||
:customStyle="{
|
||||
padding: '0 24rpx',
|
||||
height: '56rpx'
|
||||
}"
|
||||
@click="jump(item.path)"
|
||||
>
|
||||
<u-button type="primary" shape="circle" size="medium" :customStyle="{
|
||||
padding: '0 24rpx',
|
||||
height: '56rpx'
|
||||
}" @click="jump(item.path)">
|
||||
{{ item.btnText }}
|
||||
</u-button>
|
||||
</view>
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
<template>
|
||||
<view
|
||||
v-if="userStore.isLogin && !chatModel.loading"
|
||||
class="px-[20rpx] py-[15rpx] text-sm flex items-center justify-between bg-white"
|
||||
>
|
||||
<view v-if="userStore.isLogin && !chatModel.loading"
|
||||
class="px-[20rpx] py-[15rpx] text-sm flex items-center justify-between bg-white">
|
||||
<view class="flex-none mr-[20rpx]">
|
||||
<view class="flex items-center">
|
||||
<u-button
|
||||
<!-- <u-button
|
||||
type="primary"
|
||||
plain
|
||||
size="medium"
|
||||
@ -21,12 +19,9 @@
|
||||
: '开通会员'
|
||||
}}
|
||||
</router-navigate>
|
||||
</u-button>
|
||||
</u-button> -->
|
||||
<view class="ml-[20rpx]" v-if="!chatModel.modelList.length">
|
||||
<text
|
||||
v-if="userInfo.isMember && userInfo.memberExpired !== 1"
|
||||
class="flex-1 min-w-0"
|
||||
>
|
||||
<text v-if="userInfo.isMember && userInfo.memberExpired !== 1" class="flex-1 min-w-0">
|
||||
已开通会员,不消耗次数
|
||||
</text>
|
||||
<text v-else>
|
||||
@ -37,22 +32,16 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="chatModel.billing_is_open * 1"
|
||||
@click="chatModel.show = true"
|
||||
class="flex ml-auto justify-center items-center rounded-[30px] h-[60rpx]"
|
||||
>
|
||||
<view v-if="chatModel.billing_is_open * 1" @click="chatModel.show = true"
|
||||
class="flex ml-auto justify-center items-center rounded-[30px] h-[60rpx]">
|
||||
<text class="text-[#415058] mr-[6px] flex">
|
||||
<text class="line-clamp-1">
|
||||
{{ chatModel.current.alias }} /
|
||||
|
||||
<text
|
||||
v-if="
|
||||
chatModel?.current?.member_free &&
|
||||
chatModel?.current?.is_member
|
||||
"
|
||||
class="text-muted"
|
||||
>
|
||||
<text v-if="
|
||||
chatModel?.current?.member_free &&
|
||||
chatModel?.current?.is_member
|
||||
" class="text-muted">
|
||||
会员免费
|
||||
</text>
|
||||
<text v-else class="flex-1 min-w-0 text-muted">
|
||||
@ -80,26 +69,14 @@
|
||||
<template v-else> 免费 </template>
|
||||
</view>
|
||||
</view>
|
||||
<u-popup
|
||||
v-model="chatModel.show"
|
||||
mode="bottom"
|
||||
border-radius="14"
|
||||
:safe-area-inset-bottom="true"
|
||||
height="980rpx"
|
||||
closeable
|
||||
>
|
||||
<u-popup v-model="chatModel.show" mode="bottom" border-radius="14" :safe-area-inset-bottom="true" height="980rpx"
|
||||
closeable>
|
||||
<view class="p-[20rpx] text-xl font-bold"> 切换模型通道 </view>
|
||||
<scroll-view class="h-[890rpx] box-border" scroll-y>
|
||||
<view class="pb-[200rpx] px-[30rpx]">
|
||||
<view
|
||||
class="model-card"
|
||||
v-for="(item, index) in chatModel.modelList"
|
||||
:key="item.key"
|
||||
:class="{
|
||||
'model-card__active': chatModel.currentIndex === index
|
||||
}"
|
||||
@click="chatModel.currentIndex = index"
|
||||
>
|
||||
<view class="model-card" v-for="(item, index) in chatModel.modelList" :key="item.key" :class="{
|
||||
'model-card__active': chatModel.currentIndex === index
|
||||
}" @click="chatModel.currentIndex = index">
|
||||
<view>
|
||||
<view class="flex items-center">
|
||||
<view class="mr-2" v-if="item.image">
|
||||
@ -112,28 +89,19 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="mt-4">
|
||||
<view
|
||||
class="mt-[20rpx] min-h-[50rpx] flex items-center justify-between"
|
||||
v-for="citem in item.model_list"
|
||||
:key="citem.key"
|
||||
@click="handleChoiceModel(citem)"
|
||||
>
|
||||
<view class="mt-[20rpx] min-h-[50rpx] flex items-center justify-between"
|
||||
v-for="citem in item.model_list" :key="citem.key" @click="handleChoiceModel(citem)">
|
||||
<view class="mr-[6px] flex-1 min-w-0">
|
||||
{{ citem.alias }}
|
||||
</view>
|
||||
<view class="ml-[10rpx] flex items-center">
|
||||
<view
|
||||
class="text-muted mr-2"
|
||||
:class="{
|
||||
'!text-primary': modelKey === citem.key && chatModel.currentIndex === index
|
||||
}"
|
||||
>
|
||||
<text
|
||||
v-if="
|
||||
citem.member_free &&
|
||||
citem.is_member
|
||||
"
|
||||
>
|
||||
<view class="text-muted mr-2" :class="{
|
||||
'!text-primary': modelKey === citem.key && chatModel.currentIndex === index
|
||||
}">
|
||||
<text v-if="
|
||||
citem.member_free &&
|
||||
citem.is_member
|
||||
">
|
||||
会员免费
|
||||
</text>
|
||||
<text v-else>
|
||||
@ -147,20 +115,12 @@
|
||||
<template v-else> 免费 </template>
|
||||
</text>
|
||||
</view>
|
||||
<view
|
||||
class="text-muted ml-1 mr-[2px]"
|
||||
v-if="modelKey !== citem.key || chatModel.currentIndex !== index"
|
||||
>
|
||||
<u-image
|
||||
:src="IconUnSelect"
|
||||
width="32rpx"
|
||||
height="32rpx"
|
||||
></u-image>
|
||||
<view class="text-muted ml-1 mr-[2px]"
|
||||
v-if="modelKey !== citem.key || chatModel.currentIndex !== index">
|
||||
<u-image :src="IconUnSelect" width="32rpx" height="32rpx"></u-image>
|
||||
</view>
|
||||
<view
|
||||
class="text-primary mt-[3px]"
|
||||
v-if="modelKey === citem.key && chatModel.currentIndex === index"
|
||||
>
|
||||
<view class="text-primary mt-[3px]"
|
||||
v-if="modelKey === citem.key && chatModel.currentIndex === index">
|
||||
<u-icon name="checkmark-circle-fill" size="40rpx"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -1,12 +1,6 @@
|
||||
<template>
|
||||
<u-tabbar
|
||||
v-if="showTabbar"
|
||||
v-model="current"
|
||||
v-bind="tabbarStyle"
|
||||
:list="tabbarList"
|
||||
@change="handleChange"
|
||||
:hide-tab-bar="true"
|
||||
></u-tabbar>
|
||||
<u-tabbar v-if="showTabbar" v-model="current" v-bind="tabbarStyle" :list="tabbarList" @change="handleChange"
|
||||
:hide-tab-bar="true"></u-tabbar>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
||||
@ -18,19 +18,13 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex flex-col justify-center" v-if="isLogin">
|
||||
<u-button
|
||||
v-if="appStore.getIsShowVip && !user.memberPerpetual"
|
||||
shape="circle"
|
||||
size="medium"
|
||||
<u-button v-if="appStore.getIsShowVip && !user.memberPerpetual" shape="circle" size="medium"
|
||||
:customStyle="{
|
||||
padding: '0 24rpx',
|
||||
height: '56rpx',
|
||||
background: '#333333',
|
||||
color: '#F8C596'
|
||||
}"
|
||||
hover-class="none"
|
||||
@click="navigateTo('/packages/pages/open_vip/open_vip')"
|
||||
>
|
||||
}" hover-class="none" @click="navigateTo('/packages/pages/open_vip/open_vip')">
|
||||
{{ user.isMember ? '立即续费' : content.btn }}
|
||||
</u-button>
|
||||
</view>
|
||||
|
||||
@ -1,35 +1,35 @@
|
||||
{
|
||||
"name" : "码多多AI",
|
||||
"appid" : "__UNI__2A068A4",
|
||||
"description" : "",
|
||||
"versionName" : "3.2.1",
|
||||
"versionCode" : 201,
|
||||
"transformPx" : false,
|
||||
"name": "信广龙AI",
|
||||
"appid": "__UNI__2A068A4",
|
||||
"description": "",
|
||||
"versionName": "3.2.1",
|
||||
"versionCode": 201,
|
||||
"transformPx": false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
"compatible" : {
|
||||
"ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
|
||||
"app-plus": {
|
||||
"compatible": {
|
||||
"ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
|
||||
},
|
||||
"usingComponents" : true,
|
||||
"nvueStyleCompiler" : "uni-app",
|
||||
"compilerVersion" : 3,
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"autoclose" : true,
|
||||
"delay" : 0
|
||||
"usingComponents": true,
|
||||
"nvueStyleCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"autoclose": true,
|
||||
"delay": 0
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules" : {
|
||||
"Payment" : {},
|
||||
"OAuth" : {},
|
||||
"Share" : {}
|
||||
"modules": {
|
||||
"Payment": {},
|
||||
"OAuth": {},
|
||||
"Share": {}
|
||||
},
|
||||
/* 应用发布信息 */
|
||||
"distribute" : {
|
||||
"distribute": {
|
||||
/* android打包配置 */
|
||||
"android" : {
|
||||
"permissions" : [
|
||||
"android": {
|
||||
"permissions": [
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||
@ -50,123 +50,133 @@
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
|
||||
"abiFilters": [
|
||||
"armeabi-v7a",
|
||||
"arm64-v8a",
|
||||
"x86"
|
||||
]
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios" : {
|
||||
"dSYMs" : false,
|
||||
"privacyDescription" : {
|
||||
"NSCameraUsageDescription" : "您可以拍照设置头像、拍照上传图片",
|
||||
"NSPhotoLibraryAddUsageDescription" : "您可以设置头像、保存图片到相册,还可以上传图片",
|
||||
"NSPhotoLibraryUsageDescription" : "您可以设置头像、保存图片到相册,还可以上传图片",
|
||||
"NSUserTrackingUsageDescription" : "根据您的习惯为您推荐"
|
||||
"ios": {
|
||||
"dSYMs": false,
|
||||
"privacyDescription": {
|
||||
"NSCameraUsageDescription": "您可以拍照设置头像、拍照上传图片",
|
||||
"NSPhotoLibraryAddUsageDescription": "您可以设置头像、保存图片到相册,还可以上传图片",
|
||||
"NSPhotoLibraryUsageDescription": "您可以设置头像、保存图片到相册,还可以上传图片",
|
||||
"NSUserTrackingUsageDescription": "根据您的习惯为您推荐"
|
||||
},
|
||||
"capabilities" : {
|
||||
"entitlements" : {
|
||||
"com.apple.developer.associated-domains" : [
|
||||
"capabilities": {
|
||||
"entitlements": {
|
||||
"com.apple.developer.associated-domains": [
|
||||
"applinks:static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs" : {
|
||||
"payment" : {
|
||||
"weixin" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appid" : "wxee7d4a85331633e4",
|
||||
"UniversalLinks" : "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
"sdkConfigs": {
|
||||
"payment": {
|
||||
"weixin": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
],
|
||||
"appid": "wxee7d4a85331633e4",
|
||||
"UniversalLinks": "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
},
|
||||
"alipay" : {
|
||||
"__platform__" : [ "ios", "android" ]
|
||||
"alipay": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
]
|
||||
}
|
||||
},
|
||||
"ad" : {},
|
||||
"oauth" : {
|
||||
"weixin" : {
|
||||
"appid" : "wxee7d4a85331633e4",
|
||||
"UniversalLinks" : "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
"ad": {},
|
||||
"oauth": {
|
||||
"weixin": {
|
||||
"appid": "wxee7d4a85331633e4",
|
||||
"UniversalLinks": "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
}
|
||||
},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wxee7d4a85331633e4",
|
||||
"UniversalLinks" : "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
"share": {
|
||||
"weixin": {
|
||||
"appid": "wxee7d4a85331633e4",
|
||||
"UniversalLinks": "https://static-mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd.next.bspapp.com/uni-universallinks/__UNI__1FC79BE/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"icons" : {
|
||||
"android" : {
|
||||
"hdpi" : "unpackage/res/icons/72x72.png",
|
||||
"xhdpi" : "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi" : "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi" : "unpackage/res/icons/192x192.png"
|
||||
"icons": {
|
||||
"android": {
|
||||
"hdpi": "unpackage/res/icons/72x72.png",
|
||||
"xhdpi": "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi": "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi": "unpackage/res/icons/192x192.png"
|
||||
},
|
||||
"ios" : {
|
||||
"appstore" : "unpackage/res/icons/1024x1024.png",
|
||||
"ipad" : {
|
||||
"app" : "unpackage/res/icons/76x76.png",
|
||||
"app@2x" : "unpackage/res/icons/152x152.png",
|
||||
"notification" : "unpackage/res/icons/20x20.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x" : "unpackage/res/icons/167x167.png",
|
||||
"settings" : "unpackage/res/icons/29x29.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"spotlight" : "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png"
|
||||
"ios": {
|
||||
"appstore": "unpackage/res/icons/1024x1024.png",
|
||||
"ipad": {
|
||||
"app": "unpackage/res/icons/76x76.png",
|
||||
"app@2x": "unpackage/res/icons/152x152.png",
|
||||
"notification": "unpackage/res/icons/20x20.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x": "unpackage/res/icons/167x167.png",
|
||||
"settings": "unpackage/res/icons/29x29.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"spotlight": "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png"
|
||||
},
|
||||
"iphone" : {
|
||||
"app@2x" : "unpackage/res/icons/120x120.png",
|
||||
"app@3x" : "unpackage/res/icons/180x180.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"notification@3x" : "unpackage/res/icons/60x60.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"settings@3x" : "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x" : "unpackage/res/icons/120x120.png"
|
||||
"iphone": {
|
||||
"app@2x": "unpackage/res/icons/120x120.png",
|
||||
"app@3x": "unpackage/res/icons/180x180.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"notification@3x": "unpackage/res/icons/60x60.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"settings@3x": "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x": "unpackage/res/icons/120x120.png"
|
||||
}
|
||||
}
|
||||
},
|
||||
"splashscreen" : {
|
||||
"useOriginalMsgbox" : true
|
||||
"splashscreen": {
|
||||
"useOriginalMsgbox": true
|
||||
}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp" : {},
|
||||
"quickapp": {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin" : {
|
||||
"appid" : "wx386a75e518b38935",
|
||||
"optimization" : {
|
||||
"subPackages" : true
|
||||
"mp-weixin": {
|
||||
"appid": "wx386a75e518b38935",
|
||||
"optimization": {
|
||||
"subPackages": true
|
||||
},
|
||||
"setting" : {
|
||||
"urlCheck" : false,
|
||||
"es6" : true,
|
||||
"minified" : true
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
"minified": true
|
||||
},
|
||||
"__usePrivacyCheck__" : true,
|
||||
"usingComponents" : true
|
||||
"__usePrivacyCheck__": true,
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-alipay" : {
|
||||
"usingComponents" : true
|
||||
"mp-alipay": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-baidu" : {
|
||||
"usingComponents" : true
|
||||
"mp-baidu": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-toutiao" : {
|
||||
"usingComponents" : true
|
||||
"mp-toutiao": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"uniStatistics" : {
|
||||
"enable" : false
|
||||
"uniStatistics": {
|
||||
"enable": false
|
||||
},
|
||||
"vueVersion" : "3",
|
||||
"h5" : {
|
||||
"router" : {
|
||||
"mode" : "history",
|
||||
"base" : "/mobile/"
|
||||
"vueVersion": "3",
|
||||
"h5": {
|
||||
"router": {
|
||||
"mode": "history",
|
||||
"base": "/"
|
||||
},
|
||||
"title" : "加载中"
|
||||
"title": "加载中"
|
||||
},
|
||||
"_spaceID" : "mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd"
|
||||
"_spaceID": "mp-62a38312-a6b8-4502-9a4c-9bb095d26ddd"
|
||||
}
|
||||
@ -1,83 +1,41 @@
|
||||
<template>
|
||||
<view
|
||||
class="register bg-white min-h-full flex flex-col items-center px-[40rpx] pt-[100rpx] box-border"
|
||||
>
|
||||
<view class="register bg-white min-h-full flex flex-col items-center px-[40rpx] pt-[100rpx] box-border">
|
||||
<view class="w-full">
|
||||
<view class="text-2xl font-medium mb-[60rpx]">忘记登录密码</view>
|
||||
<u-tabs
|
||||
:list="forgetWayListsFilter"
|
||||
:is-scroll="false"
|
||||
v-model="currentTabs"
|
||||
:active-color="$theme.primaryColor"
|
||||
@change="
|
||||
<u-tabs :list="forgetWayListsFilter" :is-scroll="false" v-model="currentTabs"
|
||||
:active-color="$theme.primaryColor" @change="
|
||||
(index) => {
|
||||
currentTabs = index
|
||||
formData.scene = forgetWayLists[index].type
|
||||
}
|
||||
"
|
||||
></u-tabs>
|
||||
"></u-tabs>
|
||||
<u-form borderBottom :label-width="150">
|
||||
<u-form-item label="手机号" borderBottom v-show="isMobile">
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.mobile"
|
||||
:border="false"
|
||||
placeholder="请输入手机号码"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="formData.mobile" :border="false" placeholder="请输入手机号码" />
|
||||
</u-form-item>
|
||||
<u-form-item label="邮箱" borderBottom v-show="isMailbox">
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.email"
|
||||
:border="false"
|
||||
placeholder="请输入邮箱账号"
|
||||
/>
|
||||
<u-form-item label="邮箱" borderBottom>
|
||||
<u-input class="flex-1" v-model="formData.email" :border="false" placeholder="请输入邮箱账号" />
|
||||
</u-form-item>
|
||||
<u-form-item label="验证码" borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.code"
|
||||
placeholder="请输入验证码"
|
||||
:border="false"
|
||||
/>
|
||||
<view
|
||||
class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendCode"
|
||||
>
|
||||
<u-verification-code
|
||||
ref="uCodeRef"
|
||||
:seconds="60"
|
||||
@change="codeChange"
|
||||
change-text="x秒"
|
||||
/>
|
||||
<text
|
||||
class="text-muted"
|
||||
:class="{
|
||||
'text-primary':
|
||||
(isValidMobile && isMobile) || (isValidMailBox && isMailbox)
|
||||
}"
|
||||
>
|
||||
<u-input class="flex-1" v-model="formData.code" placeholder="请输入验证码" :border="false" />
|
||||
<view class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendCode">
|
||||
<u-verification-code ref="uCodeRef" :seconds="60" @change="codeChange" change-text="x秒" />
|
||||
<text class="text-muted" :class="{
|
||||
'text-primary':
|
||||
(isValidMobile && isMobile) || (isValidMailBox && isMailbox)
|
||||
}">
|
||||
{{ codeTips }}
|
||||
</text>
|
||||
</view>
|
||||
</u-form-item>
|
||||
<u-form-item label="新密码" borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
type="password"
|
||||
v-model="formData.password"
|
||||
placeholder="6-20位数字+字母或符号组合"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" type="password" v-model="formData.password" placeholder="6-20位数字+字母或符号组合"
|
||||
:border="false" />
|
||||
</u-form-item>
|
||||
<u-form-item label="确认密码" borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
type="password"
|
||||
v-model="formData.password2"
|
||||
placeholder="再次输入新密码"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" type="password" v-model="formData.password2" placeholder="再次输入新密码"
|
||||
:border="false" />
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-[100rpx]">
|
||||
@ -133,7 +91,7 @@ const formData = reactive({
|
||||
mobile: '',
|
||||
email: '',
|
||||
code: '',
|
||||
scene: 2,
|
||||
scene: 3,
|
||||
password: '',
|
||||
password2: ''
|
||||
})
|
||||
@ -142,6 +100,7 @@ const isValidMobile = computed(() => uni.$u.test.mobile(formData.mobile))
|
||||
const isValidMailBox = computed(() => uni.$u.test.email(formData.email))
|
||||
const isMobile = computed(() => formData.scene == ForgotPwdSceneEnum.MOBILE)
|
||||
const isMailbox = computed(() => formData.scene == ForgotPwdSceneEnum.MAILBOX)
|
||||
console.log('isMailbox', isMailbox.value);
|
||||
|
||||
const codeChange = (text: string) => {
|
||||
codeTips.value = text
|
||||
|
||||
@ -4,48 +4,21 @@
|
||||
<view class="container">
|
||||
<view class="header flex flex-col">
|
||||
<!-- #ifndef H5 -->
|
||||
<u-sticky
|
||||
h5-nav-height="0"
|
||||
bg-color="transparent"
|
||||
@fixed="isFixed = true"
|
||||
@unfixed="isFixed = false"
|
||||
>
|
||||
<u-navbar
|
||||
:is-fixed="false"
|
||||
title="开通会员"
|
||||
:back-icon-color="getNavColor"
|
||||
:title-color="getNavColor"
|
||||
:background="{ backgroundColor: getNavBg }"
|
||||
:border-bottom="false"
|
||||
:title-bold="true"
|
||||
:customBack="goBack"
|
||||
>
|
||||
<!-- <u-sticky h5-nav-height="0" bg-color="transparent" @fixed="isFixed = true" @unfixed="isFixed = false">
|
||||
<u-navbar :is-fixed="false" title="开通会员" :back-icon-color="getNavColor" :title-color="getNavColor"
|
||||
:background="{ backgroundColor: getNavBg }" :border-bottom="false" :title-bold="true"
|
||||
:customBack="goBack">
|
||||
</u-navbar>
|
||||
</u-sticky>
|
||||
</u-sticky> -->
|
||||
<!-- #endif -->
|
||||
|
||||
<view
|
||||
v-if="vipTop && vipTop?.content?.enabled && memberBuyLog.length"
|
||||
class="px-[30rpx] text-white"
|
||||
style="background-color: rgba(255, 239, 230, 0.1)"
|
||||
>
|
||||
<swiper
|
||||
class="h-[70rpx]"
|
||||
circular
|
||||
:autoplay="true"
|
||||
:interval="3000"
|
||||
:vertical="true"
|
||||
>
|
||||
<view v-if="vipTop && vipTop?.content?.enabled && memberBuyLog.length" class="px-[30rpx] text-white"
|
||||
style="background-color: rgba(255, 239, 230, 0.1)">
|
||||
<swiper class="h-[70rpx]" circular :autoplay="true" :interval="3000" :vertical="true">
|
||||
<swiper-item v-for="(item, index) in memberBuyLog" :key="index">
|
||||
<view class="flex items-center h-full">
|
||||
<view class="flex-none">
|
||||
<u-image
|
||||
width="48"
|
||||
height="48"
|
||||
:src="item.avatar"
|
||||
alt=""
|
||||
border-radius="50%"
|
||||
/>
|
||||
<u-image width="48" height="48" :src="item.avatar" alt="" border-radius="50%" />
|
||||
</view>
|
||||
|
||||
<view class="ml-[20rpx] line-clamp-1 text-sm">
|
||||
@ -64,11 +37,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-none">
|
||||
<image
|
||||
class="w-[120rpx] h-[120rpx]"
|
||||
src="@/static/images/user/user_vip.png"
|
||||
alt=""
|
||||
/>
|
||||
<image class="w-[120rpx] h-[120rpx]" src="@/static/images/user/user_vip.png" alt="" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -79,89 +48,56 @@
|
||||
<view class="min-h-[300rpx]">
|
||||
<scroll-view class="h-full" scroll-x="true" enable-flex>
|
||||
<view class="p-[15rpx] inline-flex">
|
||||
<view
|
||||
class="w-[230rpx] bg-[white] m-[15rpx] rounded-lg package-item relative"
|
||||
:class="{ active: currentPackage.id == item.id }"
|
||||
v-for="item in packageList"
|
||||
:key="item.id"
|
||||
@click="selectPackage(item)"
|
||||
>
|
||||
<view class="w-[230rpx] bg-[white] m-[15rpx] rounded-lg package-item relative"
|
||||
:class="{ active: currentPackage.id == item.id }" v-for="item in packageList"
|
||||
:key="item.id" @click="selectPackage(item)">
|
||||
<view
|
||||
class="absolute container-charge text-[24rpx] text-white bg-[#FF4747] py-[4rpx] px-[8rpx] line-clamp-1"
|
||||
v-if="item.tag"
|
||||
>
|
||||
v-if="item.tag">
|
||||
{{ item.tag }}
|
||||
</view>
|
||||
<view
|
||||
class="flex flex-col justify-around items-center py-[20rpx] text-center px-[20rpx]"
|
||||
>
|
||||
class="flex flex-col justify-around items-center py-[20rpx] text-center px-[20rpx]">
|
||||
<view class="text-[28rpx]">{{ item.name }}</view>
|
||||
<view>
|
||||
<price
|
||||
:content="item.sellPrice"
|
||||
mainSize="60rpx"
|
||||
minorSize="26rpx"
|
||||
fontWeight="500"
|
||||
color="#101010"
|
||||
></price>
|
||||
<price :content="item.sellPrice" mainSize="60rpx" minorSize="26rpx"
|
||||
fontWeight="500" color="#101010"></price>
|
||||
</view>
|
||||
<view v-if="item.linePrice > 0">
|
||||
<price
|
||||
:content="item.linePrice"
|
||||
mainSize="24rpx"
|
||||
minorSize="24rpx"
|
||||
color="#999"
|
||||
lineThrough
|
||||
></price>
|
||||
<price :content="item.linePrice" mainSize="24rpx" minorSize="24rpx" color="#999"
|
||||
lineThrough></price>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<view
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg flex items-center mb-[20rpx]"
|
||||
v-if="currentPackage.giveNumber > 0 || currentPackage.giveDrawNumber > 0"
|
||||
>
|
||||
<view class="mx-[20rpx] p-[30rpx] bg-white rounded-lg flex items-center mb-[20rpx]"
|
||||
v-if="currentPackage.giveNumber > 0 || currentPackage.giveDrawNumber > 0">
|
||||
<view>额外赠送</view>
|
||||
<view class="flex ml-[20rpx]">
|
||||
<view
|
||||
v-if="currentPackage.giveNumber > 0"
|
||||
class="text-sm flex bg-[#FDF7E9] text-[#E4A71C] px-[10rpx] py-[2rpx] rounded-sm mr-[20rpx]"
|
||||
>
|
||||
<view v-if="currentPackage.giveNumber > 0"
|
||||
class="text-sm flex bg-[#FDF7E9] text-[#E4A71C] px-[10rpx] py-[2rpx] rounded-sm mr-[20rpx]">
|
||||
对话条数{{ currentPackage.giveNumber }}条
|
||||
</view>
|
||||
<view
|
||||
v-if="currentPackage.giveDrawNumber > 0"
|
||||
class="text-sm flex bg-[#FDF7E9] text-[#E4A71C] px-[10rpx] py-[2px] rounded-sm mr-[20rpx]"
|
||||
>
|
||||
<view v-if="currentPackage.giveDrawNumber > 0"
|
||||
class="text-sm flex bg-[#FDF7E9] text-[#E4A71C] px-[10rpx] py-[2px] rounded-sm mr-[20rpx]">
|
||||
绘画条数{{ currentPackage.giveDrawNumber }}条
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="priceState.discount > 0"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg flex justify-between mb-[20rpx]"
|
||||
>
|
||||
<view v-if="priceState.discount > 0"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg flex justify-between mb-[20rpx]">
|
||||
<view>优惠金额</view>
|
||||
<price
|
||||
prefix="-¥"
|
||||
:content="priceState.discount"
|
||||
mainSize="28rpx"
|
||||
minorSize="28rpx"
|
||||
color="#FF2C3C"
|
||||
></price>
|
||||
<price prefix="-¥" :content="priceState.discount" mainSize="28rpx" minorSize="28rpx"
|
||||
color="#FF2C3C"></price>
|
||||
</view>
|
||||
<view class="mx-[20rpx] p-[30rpx] bg-white rounded-lg">
|
||||
<view class="text-[30rpx] font-medium">支付方式</view>
|
||||
<view class="payway-lists pt-[10rpx]">
|
||||
<u-radio-group v-model="payWay" class="w-full" active-color="#FF4747">
|
||||
<view
|
||||
class="py-[20rpx] flex items-center w-full payway-item"
|
||||
v-for="(item, index) in payWayData"
|
||||
:key="index"
|
||||
@click="payWay = item.id"
|
||||
>
|
||||
<view class="py-[20rpx] flex items-center w-full payway-item"
|
||||
v-for="(item, index) in payWayData" :key="index" @click="payWay = item.id">
|
||||
<u-icon class="flex-none" :size="48" :name="item.icon"></u-icon>
|
||||
<view class="mx-[16rpx] flex-1">
|
||||
<view class="payway-item--name flex-1">
|
||||
@ -175,38 +111,25 @@
|
||||
</u-radio-group>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="
|
||||
vipAdvantage &&
|
||||
vipAdvantage?.content?.enabled == 1 &&
|
||||
currentBenefits.length
|
||||
"
|
||||
class="mx-[20rpx] bg-white rounded-lg mt-[20rpx]"
|
||||
>
|
||||
<view v-if="
|
||||
vipAdvantage &&
|
||||
vipAdvantage?.content?.enabled == 1 &&
|
||||
currentBenefits.length
|
||||
" class="mx-[20rpx] bg-white rounded-lg mt-[20rpx]">
|
||||
<view class="text-[30rpx] font-medium p-[30rpx]">
|
||||
{{ vipAdvantage?.content?.name }}
|
||||
</view>
|
||||
<view class="flex flex-wrap mt-[10rpx]">
|
||||
<view
|
||||
class="w-1/3 flex flex-col items-center mb-[40rpx]"
|
||||
v-for="(item, index) in currentBenefits"
|
||||
:key="index"
|
||||
>
|
||||
<u-image
|
||||
width="96"
|
||||
height="96"
|
||||
:src="appStore.getImageUrl(item.image)"
|
||||
alt=""
|
||||
/>
|
||||
<view class="w-1/3 flex flex-col items-center mb-[40rpx]"
|
||||
v-for="(item, index) in currentBenefits" :key="index">
|
||||
<u-image width="96" height="96" :src="appStore.getImageUrl(item.image)" alt="" />
|
||||
<view class="pt-[10rpx]">{{ item.name }}</view>
|
||||
<view class="text-sm text-muted">{{ item.describe }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="vipNotice && vipNotice.content.enabled == 1"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg mt-[20rpx]"
|
||||
>
|
||||
<view v-if="vipNotice && vipNotice.content.enabled == 1"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg mt-[20rpx]">
|
||||
<text class="text-[30rpx] font-medium">{{ vipNotice.content.name }}</text>
|
||||
<view class="py-[20rpx]">
|
||||
请您仔细阅读以下说明内容,用户购买会员权益即视为您已阅读并同意说明内容
|
||||
@ -215,21 +138,13 @@
|
||||
{{ vipNotice.content.data }}
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="vipEvaluate && vipEvaluate.content.enabled == 1"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg mt-[20rpx]"
|
||||
>
|
||||
<view v-if="vipEvaluate && vipEvaluate.content.enabled == 1"
|
||||
class="mx-[20rpx] p-[30rpx] bg-white rounded-lg mt-[20rpx]">
|
||||
<text class="text-[30rpx] font-medium">用户评价</text>
|
||||
<template v-for="item in commentLists" :key="item.id">
|
||||
<view class="flex mt-[40rpx]">
|
||||
<view class="flex flex-1">
|
||||
<u-image
|
||||
width="64"
|
||||
height="64"
|
||||
:src="item.image"
|
||||
alt=""
|
||||
border-radius="50%"
|
||||
/>
|
||||
<u-image width="64" height="64" :src="item.image" alt="" border-radius="50%" />
|
||||
<view class="ml-[20rpx]">
|
||||
<view class="font-medium line-clamp-1">{{ item.name }}</view>
|
||||
<view class="text-[24rpx] text-[#999999]">
|
||||
@ -238,12 +153,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex-none">
|
||||
<u-rate
|
||||
v-model="item.commentLevel"
|
||||
disabled
|
||||
size="28"
|
||||
active-color="#FABB19"
|
||||
></u-rate>
|
||||
<u-rate v-model="item.commentLevel" disabled size="28" active-color="#FABB19"></u-rate>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mt-[20rpx]">
|
||||
@ -253,29 +163,15 @@
|
||||
</view>
|
||||
<view class="container-bottom bg-white">
|
||||
<view class="mx-[30rpx] mt-[30rpx]">
|
||||
<u-button
|
||||
type="error"
|
||||
hover-class="none"
|
||||
shape="circle"
|
||||
:custom-style="{
|
||||
height: '82rpx',
|
||||
fontSize: '32rpx',
|
||||
background: '#FFC94D',
|
||||
color: '#000'
|
||||
}"
|
||||
class="pay-btn"
|
||||
:disabled="!paySetup.ios_is_open"
|
||||
:loading="isLock"
|
||||
@click="buyNowLock"
|
||||
>
|
||||
<u-button type="error" hover-class="none" shape="circle" :custom-style="{
|
||||
height: '82rpx',
|
||||
fontSize: '32rpx',
|
||||
background: '#FFC94D',
|
||||
color: '#000'
|
||||
}" class="pay-btn" :disabled="!paySetup.ios_is_open" :loading="isLock" @click="buyNowLock">
|
||||
{{ paySetup.ios_prompt }}
|
||||
<price
|
||||
v-if="priceState.pay !== '' && paySetup.ios_is_open"
|
||||
:content="priceState.pay"
|
||||
mainSize="32rpx"
|
||||
minorSize="32rpx"
|
||||
color="#000"
|
||||
></price>
|
||||
<price v-if="priceState.pay !== '' && paySetup.ios_is_open" :content="priceState.pay"
|
||||
mainSize="32rpx" minorSize="32rpx" color="#000"></price>
|
||||
</u-button>
|
||||
</view>
|
||||
<view class="flex text-[24rpx] text-[#999999] justify-center p-[20rpx]">
|
||||
@ -296,150 +192,81 @@
|
||||
|
||||
<page-status :status="status"> </page-status>
|
||||
|
||||
<u-popup
|
||||
v-model="showGiveUpPopup"
|
||||
mode="center"
|
||||
closeable
|
||||
:mask-close-able="false"
|
||||
border-radius="20"
|
||||
>
|
||||
<u-popup v-model="showGiveUpPopup" mode="center" closeable :mask-close-able="false" border-radius="20">
|
||||
<view class="give-up-popup px-[20rpx] py-[40rpx]">
|
||||
<view class="text-center text-[#55300F] mb-[40rpx]">
|
||||
<view class="text-[34rpx] font-medium"> 确定要放弃购买会员吗? </view>
|
||||
<view
|
||||
v-if="
|
||||
vipAdvantage && vipAdvantage.content.enabled == 1 && currentBenefits.length
|
||||
"
|
||||
class="text-sm mt-[20rpx]"
|
||||
>
|
||||
<view v-if="
|
||||
vipAdvantage && vipAdvantage.content.enabled == 1 && currentBenefits.length
|
||||
" class="text-sm mt-[20rpx]">
|
||||
- 你可能会错过以下权益 -
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="vipAdvantage && vipAdvantage.content.enabled == 1 && currentBenefits.length"
|
||||
class="py-[20rpx] rounded-lg"
|
||||
>
|
||||
<view v-if="vipAdvantage && vipAdvantage.content.enabled == 1 && currentBenefits.length"
|
||||
class="py-[20rpx] rounded-lg">
|
||||
<view class="flex flex-wrap">
|
||||
<view
|
||||
class="w-1/3 flex flex-col items-center pb-[30rpx]"
|
||||
v-for="(item, index) in currentBenefits"
|
||||
:key="index"
|
||||
>
|
||||
<u-image
|
||||
width="80"
|
||||
height="80"
|
||||
:src="appStore.getImageUrl(item.image)"
|
||||
alt=""
|
||||
/>
|
||||
<view class="w-1/3 flex flex-col items-center pb-[30rpx]" v-for="(item, index) in currentBenefits"
|
||||
:key="index">
|
||||
<u-image width="80" height="80" :src="appStore.getImageUrl(item.image)" alt="" />
|
||||
<view class="pt-[10rpx]">{{ item.name }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex pt-[20rpx]">
|
||||
<view class="flex-1">
|
||||
<u-button
|
||||
type="primary"
|
||||
shape="circle"
|
||||
hover-class="none"
|
||||
:custom-style="{
|
||||
width: '100%',
|
||||
background: '#fff',
|
||||
color: '#000'
|
||||
}"
|
||||
@click="openCoupon"
|
||||
>
|
||||
<u-button type="primary" shape="circle" hover-class="none" :custom-style="{
|
||||
width: '100%',
|
||||
background: '#fff',
|
||||
color: '#000'
|
||||
}" @click="openCoupon">
|
||||
残忍放弃
|
||||
</u-button>
|
||||
</view>
|
||||
<view class="flex-1 ml-[20rpx]">
|
||||
<u-button
|
||||
type="primary"
|
||||
shape="circle"
|
||||
hover-class="none"
|
||||
:custom-style="{
|
||||
width: '100%',
|
||||
background: 'linear-gradient(180.00deg, #ffc94d 0%, #ffb814 100%)',
|
||||
color: '#000'
|
||||
}"
|
||||
@click="showGiveUpPopup = false"
|
||||
>
|
||||
<u-button type="primary" shape="circle" hover-class="none" :custom-style="{
|
||||
width: '100%',
|
||||
background: 'linear-gradient(180.00deg, #ffc94d 0%, #ffb814 100%)',
|
||||
color: '#000'
|
||||
}" @click="showGiveUpPopup = false">
|
||||
继续支付
|
||||
</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
<u-popup
|
||||
v-model="showCouponPopup"
|
||||
mode="center"
|
||||
closeable
|
||||
:mask-close-able="false"
|
||||
border-radius="20"
|
||||
close-icon="close-circle"
|
||||
close-icon-size="50"
|
||||
close-icon-color="#fff"
|
||||
:customStyle="{ background: 'transparent' }"
|
||||
>
|
||||
<u-popup v-model="showCouponPopup" mode="center" closeable :mask-close-able="false" border-radius="20"
|
||||
close-icon="close-circle" close-icon-size="50" close-icon-color="#fff"
|
||||
:customStyle="{ background: 'transparent' }">
|
||||
<view class="coupon-popup flex flex-col items-center">
|
||||
<view class="text-center text-[#7B3E0E]">
|
||||
<view class="text-[40rpx]"
|
||||
>您有<price
|
||||
prefix=""
|
||||
:content="currentPackage.retrieveAmount"
|
||||
mainSize="44rpx"
|
||||
minorSize="44rpx"
|
||||
color="#FF4B4B"
|
||||
></price
|
||||
>元优惠券未使用</view
|
||||
>
|
||||
<view class="text-[40rpx]">您有<price prefix="" :content="currentPackage.retrieveAmount" mainSize="44rpx"
|
||||
minorSize="44rpx" color="#FF4B4B"></price>元优惠券未使用</view>
|
||||
<view class="text-[34rpx] mt-[20rpx]">确定要放弃吗?</view>
|
||||
</view>
|
||||
<view class="coupon-money flex flex-col items-center justify-center">
|
||||
<view>
|
||||
<price
|
||||
:content="currentPackage.retrieveAmount"
|
||||
mainSize="80rpx"
|
||||
minorSize="40rpx"
|
||||
color="#8D5836"
|
||||
></price>
|
||||
<price :content="currentPackage.retrieveAmount" mainSize="80rpx" minorSize="40rpx" color="#8D5836">
|
||||
</price>
|
||||
</view>
|
||||
<view class="text-[32rpx] text-[#8D5836]">无门槛</view>
|
||||
</view>
|
||||
<u-button
|
||||
type="primary"
|
||||
shape="circle"
|
||||
hover-class="none"
|
||||
:custom-style="{
|
||||
width: '400rpx',
|
||||
background: 'linear-gradient(180.00deg, #ffe8cf 0%, #e1ab7a 100%)',
|
||||
color: '#6A3D15',
|
||||
height: '100rpx',
|
||||
fontWeight: 600,
|
||||
fontSize: '40rpx',
|
||||
boxShadow: '0 3px 10px #0000001a'
|
||||
}"
|
||||
@click="useCoupon"
|
||||
>
|
||||
<u-button type="primary" shape="circle" hover-class="none" :custom-style="{
|
||||
width: '400rpx',
|
||||
background: 'linear-gradient(180.00deg, #ffe8cf 0%, #e1ab7a 100%)',
|
||||
color: '#6A3D15',
|
||||
height: '100rpx',
|
||||
fontWeight: 600,
|
||||
fontSize: '40rpx',
|
||||
boxShadow: '0 3px 10px #0000001a'
|
||||
}" @click="useCoupon">
|
||||
立即使用
|
||||
</u-button>
|
||||
</view>
|
||||
</u-popup>
|
||||
<payment-check
|
||||
v-model:show="payState.showCheck"
|
||||
:from="payState.from"
|
||||
:order-id="payState.orderId"
|
||||
@success="paySuccess"
|
||||
/>
|
||||
<u-popup
|
||||
v-model="payState.showPaySuccess"
|
||||
:safe-area-inset-bottom="true"
|
||||
:mask-close-able="false"
|
||||
border-radius="14"
|
||||
:z-index="899"
|
||||
round
|
||||
mode="center"
|
||||
width="600"
|
||||
>
|
||||
<payment-check v-model:show="payState.showCheck" :from="payState.from" :order-id="payState.orderId"
|
||||
@success="paySuccess" />
|
||||
<u-popup v-model="payState.showPaySuccess" :safe-area-inset-bottom="true" :mask-close-able="false"
|
||||
border-radius="14" :z-index="899" round mode="center" width="600">
|
||||
<view class="pt-[20rpx]">
|
||||
<view class="px-[30rpx] py-[40rpx]">
|
||||
<view class="text-success text-center">
|
||||
@ -450,9 +277,7 @@
|
||||
<view class="flex-1 ml-[20rpx]">
|
||||
<router-navigate
|
||||
class="h-[72rpx] leading-[72rpx] rounded-full bg-primary text-center text-btn-text"
|
||||
to="/pages/index/index"
|
||||
nav-type="reLaunch"
|
||||
>
|
||||
to="/pages/index/index" nav-type="reLaunch">
|
||||
<text>返回首页</text>
|
||||
</router-navigate>
|
||||
</view>
|
||||
@ -461,12 +286,7 @@
|
||||
</view>
|
||||
</u-popup>
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<page-container
|
||||
v-if="showPageContainer"
|
||||
:show="true"
|
||||
:overlay="false"
|
||||
@beforeleave="beforeLeavePage"
|
||||
/>
|
||||
<page-container v-if="showPageContainer" :show="true" :overlay="false" @beforeleave="beforeLeavePage" />
|
||||
<!-- #endif -->
|
||||
|
||||
<!-- #ifdef H5 -->
|
||||
@ -799,6 +619,7 @@ onUnmounted(() => {
|
||||
page {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
padding-bottom: calc(220rpx + env(safe-area-inset-bottom));
|
||||
|
||||
@ -806,25 +627,23 @@ page {
|
||||
background: url('../../static/images/vip_bg.png') no-repeat;
|
||||
background-size: cover;
|
||||
background-position: center center;
|
||||
|
||||
.header-title {
|
||||
background-image: linear-gradient(
|
||||
0.26deg,
|
||||
#e1ab7a 0%,
|
||||
#e1ab7a 21.17%,
|
||||
#ffe8cf 92.32%,
|
||||
#ffefe6 100%
|
||||
);
|
||||
background-image: linear-gradient(0.26deg,
|
||||
#e1ab7a 0%,
|
||||
#e1ab7a 21.17%,
|
||||
#ffe8cf 92.32%,
|
||||
#ffefe6 100%);
|
||||
-webkit-background-clip: text;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.header-desc {
|
||||
background-image: linear-gradient(
|
||||
0.26deg,
|
||||
#e1ab7a 0%,
|
||||
#e1ab7a 21.17%,
|
||||
#ffe8cf 92.32%,
|
||||
#ffefe6 100%
|
||||
);
|
||||
background-image: linear-gradient(0.26deg,
|
||||
#e1ab7a 0%,
|
||||
#e1ab7a 21.17%,
|
||||
#ffe8cf 92.32%,
|
||||
#ffefe6 100%);
|
||||
-webkit-background-clip: text;
|
||||
color: transparent;
|
||||
}
|
||||
@ -834,6 +653,7 @@ page {
|
||||
border-radius: 16rpx 0 16rpx 0;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
&-bottom {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
@ -846,19 +666,23 @@ page {
|
||||
background-color: #f2f2f2 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.package-item {
|
||||
border: 1px solid transparent;
|
||||
|
||||
&.active {
|
||||
background: #fffaf0;
|
||||
border-color: #ffc94d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.give-up-popup {
|
||||
border-radius: 20rpx;
|
||||
background: linear-gradient(180deg, #fff 0%, #fff2e3 100%);
|
||||
width: 640rpx;
|
||||
}
|
||||
|
||||
.coupon-popup {
|
||||
background: url('../../static/images/coupon_bg.png') no-repeat;
|
||||
width: 670rpx;
|
||||
@ -866,6 +690,7 @@ page {
|
||||
background-position: center 100rpx;
|
||||
padding: 140rpx 100rpx 0;
|
||||
background-size: 580rpx 660rpx;
|
||||
|
||||
.coupon-money {
|
||||
background: url('../../static/images/money_bg.png') no-repeat;
|
||||
width: 340rpx;
|
||||
|
||||
@ -4,87 +4,45 @@
|
||||
<navigation-bar :front-color="$theme.navColor" :background-color="$theme.navBgColor" />
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<view
|
||||
class="register bg-white min-h-full flex flex-col items-center px-[40rpx] pt-[40rpx] box-border"
|
||||
>
|
||||
<view class="register bg-white min-h-full flex flex-col items-center px-[40rpx] pt-[40rpx] box-border">
|
||||
<view class="w-full">
|
||||
<view class="pb-[40rpx]">
|
||||
<u-tabs
|
||||
:list="registerWayListsFilter"
|
||||
:is-scroll="false"
|
||||
v-model="currentTabs"
|
||||
:active-color="$theme.primaryColor"
|
||||
@change="
|
||||
<u-tabs :list="registerWayListsFilter" :is-scroll="false" v-model="currentTabs"
|
||||
:active-color="$theme.primaryColor" @change="
|
||||
(index) => {
|
||||
currentTabs = index
|
||||
formData.scene = registerWayLists[index].type
|
||||
}
|
||||
"
|
||||
></u-tabs>
|
||||
"></u-tabs>
|
||||
</view>
|
||||
<u-form borderBottom :label-width="150">
|
||||
<u-form-item label="手机号" borderBottom v-if="isMobile">
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.mobile"
|
||||
:border="false"
|
||||
placeholder="请输入手机号码"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="formData.mobile" :border="false" placeholder="请输入手机号码" />
|
||||
</u-form-item>
|
||||
<u-form-item label="邮箱" borderBottom v-if="isMailbox">
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.email"
|
||||
:border="false"
|
||||
placeholder="请输入邮箱账号"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="formData.email" :border="false" placeholder="请输入邮箱账号" />
|
||||
</u-form-item>
|
||||
|
||||
<u-form-item label="验证码" v-if="isOpenSendSms">
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.code"
|
||||
placeholder="请输入验证码"
|
||||
:border="false"
|
||||
/>
|
||||
<view
|
||||
class="border-l border-solid border-0 border-light pl-3 leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendCode"
|
||||
>
|
||||
<u-verification-code
|
||||
ref="uCodeRef"
|
||||
:seconds="60"
|
||||
@change="codeChange"
|
||||
change-text="x秒"
|
||||
/>
|
||||
<text
|
||||
class="text-muted"
|
||||
:class="{
|
||||
'text-primary':
|
||||
(isValidMobile && isMobile) || (isValidMailBox && isMailbox)
|
||||
}"
|
||||
>
|
||||
<u-input class="flex-1" v-model="formData.code" placeholder="请输入验证码" :border="false" />
|
||||
<view class="border-l border-solid border-0 border-light pl-3 leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendCode">
|
||||
<u-verification-code ref="uCodeRef" :seconds="60" @change="codeChange" change-text="x秒" />
|
||||
<text class="text-muted" :class="{
|
||||
'text-primary':
|
||||
(isValidMobile && isMobile) || (isValidMailBox && isMailbox)
|
||||
}">
|
||||
{{ codeTips }}
|
||||
</text>
|
||||
</view>
|
||||
</u-form-item>
|
||||
<u-form-item label="设置密码" borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
type="password"
|
||||
v-model="formData.password"
|
||||
placeholder="6-20位数字+字母或符号组合"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" type="password" v-model="formData.password" placeholder="6-20位数字+字母或符号组合"
|
||||
:border="false" />
|
||||
</u-form-item>
|
||||
<u-form-item label="确认密码" borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
type="password"
|
||||
v-model="formData.password2"
|
||||
placeholder="请确认密码"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" type="password" v-model="formData.password2" placeholder="请确认密码"
|
||||
:border="false" />
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<view class="mt-[40rpx]">
|
||||
@ -215,7 +173,7 @@ const bindUsers = async (userSn: number) => {
|
||||
})
|
||||
cache.remove(USER_SN)
|
||||
}
|
||||
} catch (error) {}
|
||||
} catch (error) { }
|
||||
}
|
||||
|
||||
const accountRegister = async () => {
|
||||
|
||||
@ -3,12 +3,7 @@
|
||||
<!-- 头部修改头像 -->
|
||||
<view class="header bg-white py-[30rpx]">
|
||||
<view class="flex justify-center">
|
||||
<avatar-upload
|
||||
v-model="userInfo.avatar"
|
||||
file-key="url"
|
||||
:round="true"
|
||||
@upload="uploadImg"
|
||||
>
|
||||
<avatar-upload v-model="userInfo.avatar" file-key="url" :round="true" @upload="uploadImg">
|
||||
<template #footer>
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<view class="text-muted text-xs">同步微信头像</view>
|
||||
@ -19,20 +14,14 @@
|
||||
</view>
|
||||
|
||||
<!-- 用户ID -->
|
||||
<view
|
||||
class="item text-nr flex justify-between"
|
||||
@click=";(showUserName = true), (newUsername = userInfo?.username)"
|
||||
>
|
||||
<view class="item text-nr flex justify-between" @click="; (showUserName = true), (newUsername = userInfo?.username)">
|
||||
<view class="label">账号</view>
|
||||
<view class="content">{{ userInfo?.username }}</view>
|
||||
<u-icon name="arrow-right" size="22" color="#666"></u-icon>
|
||||
</view>
|
||||
|
||||
<!-- 昵称 -->
|
||||
<view
|
||||
class="item text-nr flex justify-between"
|
||||
@click=";(showNickName = true), (newNickname = userInfo?.nickname)"
|
||||
>
|
||||
<view class="item text-nr flex justify-between" @click="; (showNickName = true), (newNickname = userInfo?.nickname)">
|
||||
<view class="label">昵称</view>
|
||||
<view class="content">{{ userInfo?.nickname }}</view>
|
||||
<u-icon name="arrow-right" size="22" color="#666"></u-icon>
|
||||
@ -46,13 +35,13 @@
|
||||
</view>
|
||||
|
||||
<!-- 手机号 -->
|
||||
<view class="item text-nr flex justify-between">
|
||||
<!-- <view class="item text-nr flex justify-between">
|
||||
<view class="label">手机号</view>
|
||||
<view class="content">{{
|
||||
userInfo?.mobile == '' ? '未绑定手机号' : userInfo?.mobile
|
||||
}}</view>
|
||||
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
|
||||
<u-button
|
||||
open-type="getPhoneNumber"
|
||||
@getphonenumber="getPhoneNumber"
|
||||
@ -63,8 +52,7 @@
|
||||
>
|
||||
{{ userInfo?.mobile == '' ? '绑定手机号' : '更换手机号' }}
|
||||
</u-button>
|
||||
<!-- #endif -->
|
||||
<!-- #ifndef MP-WEIXIN -->
|
||||
|
||||
<u-button
|
||||
@click="showMobilePop = true"
|
||||
size="mini"
|
||||
@ -74,14 +62,15 @@
|
||||
>
|
||||
{{ userInfo?.mobile == '' ? '绑定手机号' : '更换手机号' }}
|
||||
</u-button>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
|
||||
</view> -->
|
||||
|
||||
<!-- 邮箱 -->
|
||||
<view class="item text-nr flex justify-between">
|
||||
<view class="label">邮箱</view>
|
||||
<view class="content">{{
|
||||
userInfo?.email == null ? '-' : userInfo?.email
|
||||
}}</view>
|
||||
userInfo?.email == null ? '-' : userInfo?.email
|
||||
}}</view>
|
||||
</view>
|
||||
|
||||
<!-- 注册时间 -->
|
||||
@ -91,32 +80,17 @@
|
||||
</view>
|
||||
|
||||
<!-- 昵称修改组件 -->
|
||||
<u-popup
|
||||
v-model="showNickName"
|
||||
:closeable="true"
|
||||
mode="center"
|
||||
:maskCloseAble="false"
|
||||
border-radius="20"
|
||||
>
|
||||
<u-popup v-model="showNickName" :closeable="true" mode="center" :maskCloseAble="false" border-radius="20">
|
||||
<view class="px-[50rpx] py-[40rpx] bg-white" style="width: 85vw">
|
||||
<form @submit="changeNameConfirm">
|
||||
<view class="mb-[70rpx] text-xl text-center">修改昵称</view>
|
||||
<u-form-item borderBottom>
|
||||
<input
|
||||
class="nr h-[60rpx] w-full"
|
||||
:value="userInfo.nickname"
|
||||
name="nickname"
|
||||
type="nickname"
|
||||
placeholder="请输入昵称"
|
||||
/>
|
||||
<input class="nr h-[60rpx] w-full" :value="userInfo.nickname" name="nickname" type="nickname"
|
||||
placeholder="请输入昵称" />
|
||||
</u-form-item>
|
||||
<view class="mt-[80rpx]">
|
||||
<button
|
||||
class="bg-primary text-white w-full h-[80rpx] !text-lg !leading-[80rpx] rounded-full"
|
||||
form-type="submit"
|
||||
hover-class="none"
|
||||
size="mini"
|
||||
>
|
||||
<button class="bg-primary text-white w-full h-[80rpx] !text-lg !leading-[80rpx] rounded-full"
|
||||
form-type="submit" hover-class="none" size="mini">
|
||||
确定
|
||||
</button>
|
||||
</view>
|
||||
@ -129,12 +103,7 @@
|
||||
<view class="px-[50rpx] py-[40rpx] bg-white" style="width: 85vw">
|
||||
<view class="mb-[70rpx] text-xl text-center">修改账号</view>
|
||||
<u-form-item borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="newUsername"
|
||||
placeholder="请输入账号"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="newUsername" placeholder="请输入账号" :border="false" />
|
||||
</u-form-item>
|
||||
<view class="mt-[80rpx]">
|
||||
<u-button @click="changeUserNameConfirm" type="primary" shape="circle">
|
||||
@ -145,44 +114,21 @@
|
||||
</u-popup>
|
||||
|
||||
<!-- 性别修改组件 -->
|
||||
<u-picker
|
||||
mode="selector"
|
||||
v-model="showPicker"
|
||||
confirm-color="#4173FF"
|
||||
:default-selector="[0]"
|
||||
:range="sexList"
|
||||
@confirm="changeSexConfirm"
|
||||
/>
|
||||
<u-picker mode="selector" v-model="showPicker" confirm-color="#4173FF" :default-selector="[0]" :range="sexList"
|
||||
@confirm="changeSexConfirm" />
|
||||
|
||||
<!-- 账号修改组件 -->
|
||||
<u-popup v-model="showMobilePop" :closeable="true" mode="center" border-radius="20">
|
||||
<view class="px-[50rpx] py-[40rpx] bg-white" style="width: 85vw">
|
||||
<view class="mb-[70rpx] text-xl text-center">修改手机号码</view>
|
||||
<u-form-item borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="newMobile"
|
||||
placeholder="请输入新的手机号码"
|
||||
:border="false"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="newMobile" placeholder="请输入新的手机号码" :border="false" />
|
||||
</u-form-item>
|
||||
<u-form-item borderBottom>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="mobileCode"
|
||||
placeholder="请输入验证码"
|
||||
:border="false"
|
||||
/>
|
||||
<view
|
||||
class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendSms"
|
||||
>
|
||||
<u-verification-code
|
||||
ref="uCodeRef"
|
||||
:seconds="60"
|
||||
@change="codeChange"
|
||||
change-text="x秒"
|
||||
/>
|
||||
<u-input class="flex-1" v-model="mobileCode" placeholder="请输入验证码" :border="false" />
|
||||
<view class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3 w-[180rpx]"
|
||||
@click="sendSms">
|
||||
<u-verification-code ref="uCodeRef" :seconds="60" @change="codeChange" change-text="x秒" />
|
||||
{{ codeTips }}
|
||||
</view>
|
||||
</u-form-item>
|
||||
|
||||
@ -1,10 +1,7 @@
|
||||
<template>
|
||||
<page-meta :page-style="$theme.pageStyle">
|
||||
<!-- #ifndef H5 -->
|
||||
<navigation-bar
|
||||
:front-color="$theme.navColor"
|
||||
:background-color="$theme.navBgColor"
|
||||
/>
|
||||
<navigation-bar :front-color="$theme.navColor" :background-color="$theme.navBgColor" />
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<view class="user-set">
|
||||
@ -20,19 +17,12 @@
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
<view
|
||||
class="item bg-white mt-[20rpx] btn-border flex flex-1 justify-between"
|
||||
@click="handlePwd"
|
||||
>
|
||||
<view class="item bg-white mt-[20rpx] btn-border flex flex-1 justify-between" @click="handlePwd">
|
||||
<view class="">登录密码</view>
|
||||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||||
</view>
|
||||
<!-- #ifdef MP-WEIXIN || H5 -->
|
||||
<view
|
||||
v-if="isWeixin"
|
||||
class="item bg-white flex flex-1 justify-between"
|
||||
@click="bindWechatLock"
|
||||
>
|
||||
<view v-if="isWeixin" class="item bg-white flex flex-1 justify-between" @click="bindWechatLock">
|
||||
<view class="">绑定微信</view>
|
||||
<view class="flex justify-between">
|
||||
<view class="text-muted mr-[20rpx]">
|
||||
@ -42,7 +32,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<navigator :url="`/packages/pages/agreement/agreement?type=${AgreementEnum.PRIVACY}`">
|
||||
<!-- <navigator :url="`/packages/pages/agreement/agreement?type=${AgreementEnum.PRIVACY}`">
|
||||
<view class="item bg-white mt-[20rpx] btn-border flex flex-1 justify-between">
|
||||
<view class="">隐私政策</view>
|
||||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||||
@ -64,14 +54,12 @@
|
||||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</navigator> -->
|
||||
|
||||
<!-- 注销账号 -->
|
||||
<view
|
||||
v-if="userInfo?.isCancelled == 1"
|
||||
<view v-if="userInfo?.isCancelled == 1"
|
||||
class="text-nr flex justify-between mt-[10rpx] px-[30rpx] bg-white h-[100rpx] items-center"
|
||||
@click="handlecancel"
|
||||
>
|
||||
@click="handlecancel">
|
||||
<view class="label">注销账号</view>
|
||||
<u-icon name="arrow-right" size="22" color="#666"></u-icon>
|
||||
</view>
|
||||
@ -80,12 +68,8 @@
|
||||
|
||||
</view>
|
||||
|
||||
<u-action-sheet
|
||||
:list="list"
|
||||
v-model="show"
|
||||
@click="handleClick"
|
||||
:safe-area-inset-bottom="true"
|
||||
></u-action-sheet>
|
||||
<u-action-sheet :list="list" v-model="show" @click="handleClick"
|
||||
:safe-area-inset-bottom="true"></u-action-sheet>
|
||||
<!-- #ifdef H5 -->
|
||||
<!-- 悬浮菜单 -->
|
||||
<floating-menu></floating-menu>
|
||||
|
||||
@ -1,19 +1,10 @@
|
||||
{
|
||||
"pages": [
|
||||
{
|
||||
"path": "pages/index/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "首页",
|
||||
"enablePullDownRefresh": false
|
||||
},
|
||||
"meta": {
|
||||
"share": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/ai_creation/ai_creation",
|
||||
"style": {
|
||||
"navigationBarTitleText": "AI创作"
|
||||
"navigationBarTitleText": "AI创作",
|
||||
"enablePullDownRefresh": false
|
||||
},
|
||||
"meta": {
|
||||
"share": true
|
||||
@ -85,7 +76,6 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"subPackages": [
|
||||
{
|
||||
"root": "packages",
|
||||
|
||||
@ -3,61 +3,22 @@
|
||||
<view class="mb-[60rpx]">
|
||||
<u-form>
|
||||
<u-form-item>
|
||||
<u-icon
|
||||
class="mr-2"
|
||||
:size="36"
|
||||
name="/static/images/icon/icon_mobile.png"
|
||||
/>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.email"
|
||||
:border="false"
|
||||
placeholder="请输入邮箱账号"
|
||||
/>
|
||||
<u-icon class="mr-2" :size="36" name="/static/images/icon/icon_mobile.png" />
|
||||
<u-input class="flex-1" v-model="formData.email" :border="false" placeholder="请输入邮箱账号" />
|
||||
</u-form-item>
|
||||
<u-form-item v-if="appStore.getLoginConfig.is_captcha">
|
||||
<u-icon
|
||||
class="mr-2"
|
||||
:size="36"
|
||||
name="/static/images/icon/icon_code.png"
|
||||
/>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.code"
|
||||
placeholder="图形验证码"
|
||||
:border="false"
|
||||
/>
|
||||
<view
|
||||
class="pl-3 leading-4 ml-3 w-[180rpx]"
|
||||
@click="getCaptchaFn"
|
||||
>
|
||||
<image
|
||||
:src="captchaImage"
|
||||
title="点击刷新"
|
||||
alt="验证码"
|
||||
class='w-full h-[50rpx]'
|
||||
/>
|
||||
<u-icon class="mr-2" :size="36" name="/static/images/icon/icon_code.png" />
|
||||
<u-input class="flex-1" v-model="formData.code" placeholder="图形验证码" :border="false" />
|
||||
<view class="pl-3 leading-4 ml-3 w-[180rpx]" @click="getCaptchaFn">
|
||||
<image :src="captchaImage" title="点击刷新" alt="验证码" class='w-full h-[50rpx]' />
|
||||
</view>
|
||||
</u-form-item>
|
||||
<u-form-item>
|
||||
<u-icon
|
||||
class="mr-2"
|
||||
:size="36"
|
||||
name="/static/images/icon/icon_password.png"
|
||||
/>
|
||||
<u-input
|
||||
class="flex-1"
|
||||
v-model="formData.password"
|
||||
type="password"
|
||||
placeholder="请输入密码"
|
||||
:border="false"
|
||||
/>
|
||||
<router-navigate
|
||||
to="/packages/pages/forget_pwd/forget_pwd?type=3"
|
||||
>
|
||||
<view
|
||||
class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3"
|
||||
>
|
||||
<u-icon class="mr-2" :size="36" name="/static/images/icon/icon_password.png" />
|
||||
<u-input class="flex-1" v-model="formData.password" type="password" placeholder="请输入密码"
|
||||
:border="false" />
|
||||
<router-navigate to="/packages/pages/forget_pwd/forget_pwd?type=3">
|
||||
<view class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3">
|
||||
忘记密码?
|
||||
</view>
|
||||
</router-navigate>
|
||||
@ -68,19 +29,14 @@
|
||||
<view class="mb-[40rpx]">
|
||||
<agreement ref="agreementRef" />
|
||||
</view>
|
||||
<u-button
|
||||
type="primary"
|
||||
shape="circle"
|
||||
hover-class="none"
|
||||
@click="handleLogin"
|
||||
>
|
||||
<u-button type="primary" shape="circle" hover-class="none" @click="handleLogin">
|
||||
登 录
|
||||
</u-button>
|
||||
|
||||
<view class="text-content flex justify-end mt-[40rpx]">
|
||||
<router-navigate to="/packages/pages/register/register?type=3">
|
||||
<!-- <router-navigate to="/packages/pages/register/register?type=3">
|
||||
注册账号
|
||||
</router-navigate>
|
||||
</router-navigate> -->
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -7,14 +7,9 @@
|
||||
<view class="user">
|
||||
<view v-for="(item, index) in state.pages" :key="index">
|
||||
<template v-if="item.name == 'user-info'">
|
||||
<w-user-info
|
||||
:content="item.content"
|
||||
:styles="item.styles"
|
||||
:user="userInfo"
|
||||
:is-login="isLogin"
|
||||
/>
|
||||
<w-user-info :content="item.content" :styles="item.styles" :user="userInfo" :is-login="isLogin" />
|
||||
</template>
|
||||
<template v-if="item.name == 'open-vip'">
|
||||
<!-- <template v-if="item.name == 'open-vip'">
|
||||
<w-user-vip
|
||||
:content="item.content"
|
||||
:styles="item.styles"
|
||||
@ -30,9 +25,9 @@
|
||||
</template>
|
||||
<template v-if="item.name == 'user-bottom'">
|
||||
<w-user-bottom :content="item.content" :styles="item.styles" />
|
||||
</template>
|
||||
</template> -->
|
||||
</view>
|
||||
<tabbar />
|
||||
<tabbar />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
// #ifdef H5
|
||||
// 提交前需要注释 本地调试使用
|
||||
import Vconsole from 'vconsole'
|
||||
import { isDevMode } from '@/utils/env'
|
||||
import Vconsole from "vconsole";
|
||||
import { isDevMode } from "@/utils/env";
|
||||
// #endif
|
||||
|
||||
export default () => {
|
||||
// #ifdef H5
|
||||
if (isDevMode()) {
|
||||
const vConsole = new Vconsole()
|
||||
return vConsole
|
||||
}
|
||||
// #endif
|
||||
}
|
||||
// #ifdef H5
|
||||
// if (isDevMode()) {
|
||||
// const vConsole = new Vconsole()
|
||||
// return vConsole
|
||||
// }
|
||||
// #endif
|
||||
const vConsole = new Vconsole();
|
||||
return vConsole;
|
||||
};
|
||||
|
||||
@ -1,43 +1,44 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { getConfig } from '@/api/app'
|
||||
import { defineStore } from "pinia";
|
||||
import { getConfig } from "@/api/app";
|
||||
|
||||
interface AppSate {
|
||||
config: Record<string, any>
|
||||
config: Record<string, any>;
|
||||
}
|
||||
export const useAppStore = defineStore({
|
||||
id: 'appStore',
|
||||
state: (): AppSate => ({
|
||||
config: {}
|
||||
}),
|
||||
getters: {
|
||||
getWebsiteConfig: (state) => state.config.website || {},
|
||||
getLoginConfig: (state) => state.config.login || {},
|
||||
getBulletinConfig: (state) => state.config.systemAnnouncement || {},
|
||||
getTabbarConfig: (state) => state.config.tabbar || [],
|
||||
getStyleConfig: (state) => state.config.style || {},
|
||||
getH5Config: (state) => state.config.h5 || {},
|
||||
getIsShowVip: (state) => state.config?.memberPackageStatus,
|
||||
getChatConfig: (state) => state.config.chat || {},
|
||||
getShareConfig: (state) => state.config.share || {},
|
||||
getIsShowRecharge: (state) => state.config.rechargePackageStatus || false,
|
||||
getDrawConfig: (state) => state.config.draw || {},
|
||||
getCardCodeConfig: (state) => state.config.cardCode || {},
|
||||
getDrawSquareConfig: (state) => state.config.square || {},
|
||||
getMindMapConfig: (state) => state.config.mindmap || {},
|
||||
getIsVoiceOpen: (state) =>
|
||||
!!state.config.voice?.voice_broadcast?.is_open || false,
|
||||
getIsVoiceTransfer: (state) =>
|
||||
!!state.config.voice?.voice_input?.is_open || false,
|
||||
getIsVoiceChat: (state) =>
|
||||
!!state.config.voice?.voice_chat?.is_open || false
|
||||
id: "appStore",
|
||||
state: (): AppSate => ({
|
||||
config: {},
|
||||
}),
|
||||
getters: {
|
||||
getWebsiteConfig: (state) => state.config.website || {},
|
||||
getLoginConfig: (state) => state.config.login || {},
|
||||
getBulletinConfig: (state) => state.config.systemAnnouncement || {},
|
||||
getTabbarConfig: (state) => state.config.tabbar || [],
|
||||
getStyleConfig: (state) => state.config.style || {},
|
||||
getH5Config: (state) => state.config.h5 || {},
|
||||
getIsShowVip: (state) => state.config?.memberPackageStatus,
|
||||
getChatConfig: (state) => state.config.chat || {},
|
||||
getShareConfig: (state) => state.config.share || {},
|
||||
getIsShowRecharge: (state) => state.config.rechargePackageStatus || false,
|
||||
getDrawConfig: (state) => state.config.draw || {},
|
||||
getCardCodeConfig: (state) => state.config.cardCode || {},
|
||||
getDrawSquareConfig: (state) => state.config.square || {},
|
||||
getMindMapConfig: (state) => state.config.mindmap || {},
|
||||
getIsVoiceOpen: (state) =>
|
||||
!!state.config.voice?.voice_broadcast?.is_open || false,
|
||||
getIsVoiceTransfer: (state) =>
|
||||
!!state.config.voice?.voice_input?.is_open || false,
|
||||
getIsVoiceChat: (state) =>
|
||||
!!state.config.voice?.voice_chat?.is_open || false,
|
||||
},
|
||||
actions: {
|
||||
getImageUrl(url: string) {
|
||||
const imgUrl = url.indexOf("http") ? `${this.config.domain}${url}` : url;
|
||||
return imgUrl;
|
||||
},
|
||||
actions: {
|
||||
getImageUrl(url: string) {
|
||||
return url.indexOf('http') ? `${this.config.domain}${url}` : url
|
||||
},
|
||||
async getConfig() {
|
||||
const data = await getConfig({ type: 1 })
|
||||
this.config = data
|
||||
}
|
||||
}
|
||||
})
|
||||
async getConfig() {
|
||||
const data = await getConfig({ type: 1 });
|
||||
this.config = data;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user