修改BUG
This commit is contained in:
7
.env
7
.env
@@ -1,5 +1,12 @@
|
|||||||
# API
|
# API
|
||||||
VITE_SYSTEM_URL = "http://w6972efb.natappfree.cc"
|
VITE_SYSTEM_URL = "http://w6972efb.natappfree.cc"
|
||||||
|
# VITE_SYSTEM_URL = "https://dev.cqjcteach.cn/prod-api"
|
||||||
|
|
||||||
|
# 第三方客户 channelId
|
||||||
|
VITE_CHANNEL_ID = "7b81ec142eca42baa045820793b821bb"
|
||||||
|
|
||||||
|
# 第三方客户 groupId
|
||||||
|
VITE_GROUP_ID = "793db3a29c7846e198d71a1100d9d67b"
|
||||||
|
|
||||||
#文档地址
|
#文档地址
|
||||||
VITE_DOC_URL = "http://f69dbab6.natappfree.cc"
|
VITE_DOC_URL = "http://f69dbab6.natappfree.cc"
|
||||||
15
App.vue
15
App.vue
@@ -1,13 +1,13 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
import { setSdkLanguageFromSystem } from '@/uni_modules/tuikit-atomic-x/utils/setSdkLanguageFromSystem'
|
||||||
|
// #endif
|
||||||
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
|
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
|
||||||
import { reLaunch } from './utils/router'
|
import { reLaunch } from './utils/router'
|
||||||
import { useAuthUser } from './composables/useAuthUser'
|
import { useAuthUser } from './composables/useAuthUser'
|
||||||
import { useUserStore } from './stores/user'
|
import { useUserStore } from './stores/user'
|
||||||
import { TUIChatKit } from './TUIKit'
|
import { TUIChatKit } from './TUIKit'
|
||||||
|
import { getIpBlack } from './api'
|
||||||
// #ifdef APP-PLUS
|
|
||||||
import { setSdkLanguageFromSystem } from '@/uni_modules/tuikit-atomic-x/utils/setSdkLanguageFromSystem'
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
TUIChatKit.init()
|
TUIChatKit.init()
|
||||||
|
|
||||||
@@ -38,7 +38,12 @@
|
|||||||
console.log('App Show222')
|
console.log('App Show222')
|
||||||
})
|
})
|
||||||
|
|
||||||
onHide(() => {
|
onHide(async () => {
|
||||||
|
if (token.value) {
|
||||||
|
const show = await getIpBlack(false)
|
||||||
|
console.log(show.data.data, '======')
|
||||||
|
}
|
||||||
|
|
||||||
console.log('App Hide333')
|
console.log('App Hide333')
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -138,3 +138,12 @@ export const getTencentUserSig = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 根据ip判断是否黑名单 */
|
||||||
|
export const getIpBlack = (loading = true) => {
|
||||||
|
return http({
|
||||||
|
url: '/api/free/black/isBlack',
|
||||||
|
method: 'get',
|
||||||
|
loading
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -267,3 +267,11 @@ export const getUserNoticeDetail = id => {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 客服列表 */
|
||||||
|
export const getUserServiceList = () => {
|
||||||
|
return http({
|
||||||
|
url: '/api/service/customerStaff/list',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -139,3 +139,20 @@ export const getLiveActivityRecord = id => {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 直播记录列表 */
|
||||||
|
export const getLiveRecordList = data => {
|
||||||
|
return http({
|
||||||
|
url: `/api/service/imLiveRoom/list`,
|
||||||
|
method: 'get',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 直播记录详情 */
|
||||||
|
export const getLiveRecordDetail = id => {
|
||||||
|
return http({
|
||||||
|
url: `/api/service/imLiveRoom/${id}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
20
pages.json
20
pages.json
@@ -208,7 +208,7 @@
|
|||||||
{
|
{
|
||||||
"path": "pages/my-index/meeting-record/index",
|
"path": "pages/my-index/meeting-record/index",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "会议记录",
|
"navigationBarTitleText": "直播记录",
|
||||||
"navigationBarBackgroundColor": "#ffffff"
|
"navigationBarBackgroundColor": "#ffffff"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -225,6 +225,12 @@
|
|||||||
"navigationBarTitleText": "客服"
|
"navigationBarTitleText": "客服"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/my-index/customer-service/third-party",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "第三方客服"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/my-index/set-up/index",
|
"path": "pages/my-index/set-up/index",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -323,6 +329,12 @@
|
|||||||
"navigationBarTitleText": "拼团记录"
|
"navigationBarTitleText": "拼团记录"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/shop-together/share",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/discover/ranking-list",
|
"path": "pages/discover/ranking-list",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -400,6 +412,12 @@
|
|||||||
"titleNView": false
|
"titleNView": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/adduser/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "添加好友"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
|||||||
@@ -126,6 +126,9 @@
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/styles/global.scss';
|
@import '@/styles/global.scss';
|
||||||
|
|
||||||
|
page {
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
.top-right-name {
|
.top-right-name {
|
||||||
font-family: PingFang SC, PingFang SC;
|
font-family: PingFang SC, PingFang SC;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@@ -144,6 +147,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 22rpx;
|
padding: 22rpx;
|
||||||
border-bottom: 2rpx solid #f4f4f4;
|
border-bottom: 2rpx solid #f4f4f4;
|
||||||
|
background: #ffffff;
|
||||||
// margin-bottom: 22rpx;
|
// margin-bottom: 22rpx;
|
||||||
// padding-bottom: 22rpx;
|
// padding-bottom: 22rpx;
|
||||||
.left-box {
|
.left-box {
|
||||||
|
|||||||
218
pages/adduser/index.vue
Normal file
218
pages/adduser/index.vue
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
import TUIChatEngine, {
|
||||||
|
TUIFriendService,
|
||||||
|
TUIUserService
|
||||||
|
} from '@tencentcloud/chat-uikit-engine-lite'
|
||||||
|
import { useUI } from '../../utils/use-ui'
|
||||||
|
import { navigateBack } from '@/utils/router'
|
||||||
|
|
||||||
|
const { showLoading, hideLoading, showToast } = useUI()
|
||||||
|
|
||||||
|
const loading = ref(true)
|
||||||
|
/** 验证信息输入 */
|
||||||
|
const verificationInfo = ref('')
|
||||||
|
/** 备注名 */
|
||||||
|
const remark = ref('')
|
||||||
|
/** 用户 id */
|
||||||
|
const userId = ref('')
|
||||||
|
/** 好友信息 */
|
||||||
|
const friendInfo = ref({})
|
||||||
|
/** 点击查看头像 */
|
||||||
|
const onViewAvatar = url => {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: [url] // 图片路径数组(本地或网络)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取好友信息 */
|
||||||
|
const getFriendInfo = async () => {
|
||||||
|
loading.value = true
|
||||||
|
showLoading()
|
||||||
|
TUIUserService.getUserProfile({
|
||||||
|
userIDList: [userId.value]
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
friendInfo.value = res.data[0]
|
||||||
|
console.log('获取好友信息成功', friendInfo.value)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
loading.value = false
|
||||||
|
hideLoading()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const submit = async () => {
|
||||||
|
// 在这里可以添加提交验证信息的逻辑
|
||||||
|
let source = 'AddSource_Type_Web' // 来源渠道
|
||||||
|
// #ifdef H5
|
||||||
|
source = 'AddSource_Type_H5'
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
// 判断是否为 App(5+ App)
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
source = 'AddSource_Type_App'
|
||||||
|
// #endif
|
||||||
|
showLoading()
|
||||||
|
await TUIFriendService.addFriend({
|
||||||
|
to: userId.value,
|
||||||
|
source,
|
||||||
|
remark: remark.value || '',
|
||||||
|
wording: verificationInfo.value,
|
||||||
|
type: TUIChatEngine.TYPES.SNS_ADD_TYPE_BOTH
|
||||||
|
})
|
||||||
|
hideLoading()
|
||||||
|
await showToast('好友请求已发送', 'success')
|
||||||
|
navigateBack()
|
||||||
|
}
|
||||||
|
|
||||||
|
onLoad(e => {
|
||||||
|
userId.value = e?.id || '7616mobile'
|
||||||
|
getFriendInfo()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view v-if="!loading">
|
||||||
|
<!-- 顶部用户信息 -->
|
||||||
|
<view class="top-info">
|
||||||
|
<image
|
||||||
|
v-if="friendInfo?.avatar"
|
||||||
|
:src="friendInfo?.avatar"
|
||||||
|
mode="aspectFill"
|
||||||
|
class="avatar"
|
||||||
|
@tap="onViewAvatar(friendInfo?.avatar)"
|
||||||
|
></image>
|
||||||
|
<uni-icons v-else type="contact-filled" size="80"></uni-icons>
|
||||||
|
<view class="right-box">
|
||||||
|
<text>{{ friendInfo.nick }}</text>
|
||||||
|
<text>ID: {{ friendInfo.userID }}</text>
|
||||||
|
<text>
|
||||||
|
个性签名: {{ friendInfo.selfSignature || '暂无个性签名' }}
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 验证信息输入 -->
|
||||||
|
<view class="input-wrapper">
|
||||||
|
<text class="title">请填写验证信息</text>
|
||||||
|
<textarea
|
||||||
|
v-model="verificationInfo"
|
||||||
|
:maxlength="200"
|
||||||
|
placeholder="请输入验证信息"
|
||||||
|
class="input-text"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 备注 -->
|
||||||
|
<view class="remark">
|
||||||
|
<text>备注名</text>
|
||||||
|
<input
|
||||||
|
v-model="remark"
|
||||||
|
:maxlength="80"
|
||||||
|
placeholder="请输入备注名"
|
||||||
|
placeholder-class="input-placeholder"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 发送申请按钮 -->
|
||||||
|
<view class="send-btn" @tap="submit">
|
||||||
|
<text>发送申请</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
// 背景色
|
||||||
|
page {
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.send-btn {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 20rpx 32rpx;
|
||||||
|
text-align: center;
|
||||||
|
text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #2542c0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.remark {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 20rpx 32rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
width: 80%;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-wrapper {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 20rpx 32rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.title {
|
||||||
|
font-family: PingFang SC, PingFang SC;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
font-style: normal;
|
||||||
|
text-transform: none;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
.input-text {
|
||||||
|
width: calc(100% - 40rpx);
|
||||||
|
border: 2rpx solid #eeeeee;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-info {
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 20rpx 32rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.avatar {
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 120rpx;
|
||||||
|
height: 120rpx;
|
||||||
|
border-radius: 60rpx;
|
||||||
|
}
|
||||||
|
.right-box {
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
text {
|
||||||
|
// 第一个
|
||||||
|
&:first-child {
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #999999;
|
||||||
|
&:last-child {
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 1;
|
||||||
|
box-orient: vertical;
|
||||||
|
line-clamp: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { navigateTo } from '@/utils/router'
|
import { navigateTo } from '@/utils/router'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
|
import { useUI } from '@/utils/use-ui'
|
||||||
|
|
||||||
|
const { showDialog } = useUI()
|
||||||
|
|
||||||
const btnList = [
|
const btnList = [
|
||||||
{ name: '等级排行榜', icon: 'grade' },
|
{ name: '等级排行榜', icon: 'grade' },
|
||||||
@@ -16,6 +19,17 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
const onGo = item => {
|
const onGo = item => {
|
||||||
|
// ============测试添加好友===============
|
||||||
|
// if (item === 'project') {
|
||||||
|
// navigateTo('/pages/adduser/index')
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
if (item === 'project') {
|
||||||
|
showDialog('提示', '外部链接暂未提供', false)
|
||||||
|
return
|
||||||
|
}
|
||||||
if (item === 'grade') {
|
if (item === 'grade') {
|
||||||
navigateTo('/pages/discover/ranking-list')
|
navigateTo('/pages/discover/ranking-list')
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
getData()
|
getData()
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -93,13 +92,13 @@
|
|||||||
<uni-col :span="12">
|
<uni-col :span="12">
|
||||||
<view class="table-name">
|
<view class="table-name">
|
||||||
<image
|
<image
|
||||||
src="/static/images/public/random2.png"
|
:src="item.avatar || '/static/images/public/random2.png'"
|
||||||
mode="aspectFit"
|
mode="aspectFill"
|
||||||
class="left-icon"
|
class="left-icon"
|
||||||
></image>
|
></image>
|
||||||
<view class="name">
|
<view class="name">
|
||||||
<text>名字</text>
|
<text>{{ item.userName }}</text>
|
||||||
<text>158****98874</text>
|
<text>{{ item.mobile }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</uni-col>
|
</uni-col>
|
||||||
@@ -149,6 +148,7 @@
|
|||||||
.left-icon {
|
.left-icon {
|
||||||
width: 64rpx;
|
width: 64rpx;
|
||||||
height: 64rpx;
|
height: 64rpx;
|
||||||
|
border-radius: 64rpx;
|
||||||
margin-right: 8rpx;
|
margin-right: 8rpx;
|
||||||
}
|
}
|
||||||
.name {
|
.name {
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
import { useUI } from '@/utils/use-ui'
|
import { useUI } from '@/utils/use-ui'
|
||||||
import { reLaunch, navigateTo } from '@/utils/router'
|
import { reLaunch, navigateTo } from '@/utils/router'
|
||||||
import { userLogin } from '@/api'
|
import { userLogin, getIpBlack } from '@/api'
|
||||||
import { useTokenStore } from '@/stores/token'
|
import { useTokenStore } from '@/stores/token'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
const { showToast } = useUI()
|
const { showToast, showDialog } = useUI()
|
||||||
const { setToken } = useTokenStore()
|
const { setToken } = useTokenStore()
|
||||||
const { fetchUserInfo } = useUserStore()
|
const { fetchUserInfo } = useUserStore()
|
||||||
|
|
||||||
@@ -22,13 +22,18 @@
|
|||||||
showToast('请同意协议')
|
showToast('请同意协议')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const res = await userLogin({
|
const show = await getIpBlack()
|
||||||
account: formData.username,
|
if (show.data.data) {
|
||||||
password: formData.password
|
const res = await userLogin({
|
||||||
})
|
account: formData.username,
|
||||||
setToken(res.token)
|
password: formData.password
|
||||||
await fetchUserInfo()
|
})
|
||||||
reLaunch('/TUIKit/components/TUIConversation/index')
|
setToken(res.token)
|
||||||
|
await fetchUserInfo()
|
||||||
|
reLaunch('/TUIKit/components/TUIConversation/index')
|
||||||
|
} else {
|
||||||
|
showDialog('提示', '当前账号或者IP已被限制登录!', false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onRegister = () => {
|
const onRegister = () => {
|
||||||
|
|||||||
@@ -1,4 +1,18 @@
|
|||||||
<script setup></script>
|
<script setup>
|
||||||
|
import { navigateTo } from '@/utils/router'
|
||||||
|
// import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
// import { ref } from 'vue'
|
||||||
|
// import { getUserServiceList } from '@/api/my-index'
|
||||||
|
|
||||||
|
// const list = ref([])
|
||||||
|
// const getList = async () => {
|
||||||
|
// const res = await getUserServiceList()
|
||||||
|
// list.value = res.data
|
||||||
|
// }
|
||||||
|
// onLoad(() => {
|
||||||
|
// getList()
|
||||||
|
// })
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="customer-service-index">
|
<view class="customer-service-index">
|
||||||
@@ -9,8 +23,12 @@
|
|||||||
class="avatar"
|
class="avatar"
|
||||||
></image>
|
></image>
|
||||||
<text class="tisp">Hi~有什么可以帮到你?</text>
|
<text class="tisp">Hi~有什么可以帮到你?</text>
|
||||||
<button>第三方客服</button>
|
<button
|
||||||
<button>APP客服</button>
|
@tap="navigateTo('/pages/my-index/customer-service/third-party')"
|
||||||
|
>
|
||||||
|
第三方客服
|
||||||
|
</button>
|
||||||
|
<!-- <button>APP客服</button> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -52,7 +70,7 @@
|
|||||||
background: linear-gradient(0deg, #00d993 0%, #00d9c5 100%);
|
background: linear-gradient(0deg, #00d993 0%, #00d9c5 100%);
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
&:last-child {
|
&:nth-child(2) {
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
color: #00d993;
|
color: #00d993;
|
||||||
border: 2rpx solid #00d993;
|
border: 2rpx solid #00d993;
|
||||||
|
|||||||
35
pages/my-index/customer-service/third-party.vue
Normal file
35
pages/my-index/customer-service/third-party.vue
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<script setup>
|
||||||
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { useAuthUser } from '@/composables/useAuthUser'
|
||||||
|
|
||||||
|
const { userInfo } = useAuthUser()
|
||||||
|
|
||||||
|
const windowHeight = ref(0)
|
||||||
|
const url = ref('')
|
||||||
|
onLoad(() => {
|
||||||
|
const info = uni.getSystemInfoSync()
|
||||||
|
windowHeight.value = info.windowHeight - 4
|
||||||
|
url.value = `https://www.axd01wf.cfd/chat/index?channelId=${
|
||||||
|
import.meta.env.VITE_CHANNEL_ID
|
||||||
|
}&groupId=${import.meta.env.VITE_GROUP_ID}&userName=${
|
||||||
|
userInfo.value.userName
|
||||||
|
}&phone=${userInfo.value.mobile}&email=${userInfo.value.email}`
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view :style="{ height: windowHeight + 'px' }" class="webview-box">
|
||||||
|
<web-view
|
||||||
|
:fullscreen="false"
|
||||||
|
:src="url"
|
||||||
|
style="width: 100%; height: 100%"
|
||||||
|
></web-view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.webview-box {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,22 +1,40 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
import { getLiveRecordDetail } from '@/api/tui-kit'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const viewData = ref({})
|
||||||
|
const loading = ref(true)
|
||||||
|
const getData = async id => {
|
||||||
|
loading.value = true
|
||||||
|
const res = await getLiveRecordDetail(id)
|
||||||
|
viewData.value = res.data
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
onLoad(e => {
|
onLoad(e => {
|
||||||
console.log(e, '==')
|
getData(e.id)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="details-index">
|
<view v-if="!loading" class="details-index">
|
||||||
<view class="top-name">
|
<view class="top-name">
|
||||||
<text class="title">Admin的视频的会议</text>
|
<text class="title">{{ viewData.roomName }}</text>
|
||||||
<view class="date-box">
|
<view class="date-box">
|
||||||
<image
|
<image
|
||||||
src="/static/images/my-index/date-icon.png"
|
src="/static/images/my-index/date-icon.png"
|
||||||
mode="heightFix"
|
mode="heightFix"
|
||||||
class="icon-img"
|
class="icon-img"
|
||||||
></image>
|
></image>
|
||||||
<text class="des">12月14日(周五) 13:45-16:09</text>
|
<text class="des">开始时间:{{ viewData.startTime }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="date-box">
|
||||||
|
<image
|
||||||
|
src="/static/images/my-index/date-icon.png"
|
||||||
|
mode="heightFix"
|
||||||
|
class="icon-img"
|
||||||
|
></image>
|
||||||
|
<text class="des">结束时间:{{ viewData.endTime }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="id-box">
|
<view class="id-box">
|
||||||
<image
|
<image
|
||||||
@@ -24,9 +42,9 @@
|
|||||||
mode="heightFix"
|
mode="heightFix"
|
||||||
class="icon-img"
|
class="icon-img"
|
||||||
></image>
|
></image>
|
||||||
<text class="des">会议ID:8755 8445</text>
|
<text class="des">会议ID:{{ viewData.roomId }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="user-box">
|
<!-- <view class="user-box">
|
||||||
<view class="user-text">
|
<view class="user-text">
|
||||||
<image
|
<image
|
||||||
src="/static/images/my-index/user-icon.png"
|
src="/static/images/my-index/user-icon.png"
|
||||||
@@ -45,18 +63,18 @@
|
|||||||
<text>名字</text>
|
<text>名字</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-for="item in 3" class="public-meeting-card">
|
<view class="public-meeting-card">
|
||||||
<image
|
<image
|
||||||
src="https://q9.itc.cn/q_70/images01/20241011/856bff05ebe54098ad4af2cb59e02ae8.png"
|
:src="viewData.coverUrl"
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
class="left-img"
|
class="left-img"
|
||||||
></image>
|
></image>
|
||||||
<view class="right-box">
|
<view class="right-box">
|
||||||
<text>Admin的视频的会议</text>
|
<text>{{ viewData.roomName }}</text>
|
||||||
<text>12月27日13:27</text>
|
<text>{{ viewData.startTime }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -93,13 +111,11 @@
|
|||||||
}
|
}
|
||||||
.date-box,
|
.date-box,
|
||||||
.id-box {
|
.id-box {
|
||||||
|
margin-top: 12rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.date-box {
|
|
||||||
margin: 32rpx 0;
|
|
||||||
}
|
|
||||||
.user-box {
|
.user-box {
|
||||||
margin-top: 32rpx;
|
margin-top: 32rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -137,8 +153,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.public-meeting-card {
|
.public-meeting-card {
|
||||||
margin-top: 47rpx;
|
margin-top: 27rpx;
|
||||||
padding-top: 47rpx;
|
padding-top: 27rpx;
|
||||||
border-top: 2rpx solid #f9f9f9;
|
border-top: 2rpx solid #f9f9f9;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,27 +1,57 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { navigateTo } from '@/utils/router'
|
import { navigateTo } from '@/utils/router'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { getLiveRecordList } from '@/api/tui-kit'
|
||||||
|
|
||||||
|
const dataList = ref([])
|
||||||
|
const paging = ref(null)
|
||||||
|
const getList = async (pageNum, pageSize) => {
|
||||||
|
console.log(pageSize, '====')
|
||||||
|
try {
|
||||||
|
const res = await getLiveRecordList({
|
||||||
|
pageNum,
|
||||||
|
pageSize
|
||||||
|
})
|
||||||
|
paging.value.complete(res.rows)
|
||||||
|
} catch (error) {
|
||||||
|
paging.value.complete(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="meeting-record-index">
|
<z-paging
|
||||||
<view
|
ref="paging"
|
||||||
v-for="item in 3"
|
v-model="dataList"
|
||||||
class="public-meeting-card"
|
safe-area-inset-bottom
|
||||||
@click="
|
use-safe-area-placeholder
|
||||||
navigateTo('/pages/my-index/meeting-record/details', { id: item })
|
:default-page-size="15"
|
||||||
"
|
@query="getList"
|
||||||
>
|
>
|
||||||
<image
|
<view class="meeting-record-index">
|
||||||
src="https://q9.itc.cn/q_70/images01/20241011/856bff05ebe54098ad4af2cb59e02ae8.png"
|
<view
|
||||||
mode="aspectFill"
|
v-for="item in dataList"
|
||||||
class="left-img"
|
:key="item.id"
|
||||||
></image>
|
class="public-meeting-card"
|
||||||
<view class="right-box">
|
@click="
|
||||||
<text>Admin的视频的会议</text>
|
navigateTo('/pages/my-index/meeting-record/details', {
|
||||||
<text>12月27日13:27</text>
|
id: item.id
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<image
|
||||||
|
:src="item.coverUrl"
|
||||||
|
lazy-load
|
||||||
|
mode="aspectFill"
|
||||||
|
class="left-img"
|
||||||
|
></image>
|
||||||
|
<view class="right-box">
|
||||||
|
<text>{{ item.roomName }}</text>
|
||||||
|
<text>{{ item.createTime }}</text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</z-paging>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
{ name: '我的团队', icon: 'team', url: '/pages/my-index/my-team' },
|
{ name: '我的团队', icon: 'team', url: '/pages/my-index/my-team' },
|
||||||
// { name: '群创建直播', icon: 'videocam', url: '' },
|
// { name: '群创建直播', icon: 'videocam', url: '' },
|
||||||
{
|
{
|
||||||
name: '会议记录',
|
name: '直播记录',
|
||||||
icon: 'meeting',
|
icon: 'meeting',
|
||||||
url: '/pages/my-index/meeting-record/index'
|
url: '/pages/my-index/meeting-record/index'
|
||||||
},
|
},
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
// icon: 'circle',
|
// icon: 'circle',
|
||||||
// url: '/pages/discover/dynamic/dynamic'
|
// url: '/pages/discover/dynamic/dynamic'
|
||||||
// },
|
// },
|
||||||
{
|
// {
|
||||||
name: '我的收藏',
|
// name: '我的收藏',
|
||||||
icon: 'collection',
|
// icon: 'collection',
|
||||||
url: '/pages/my-index/collection/index'
|
// url: '/pages/my-index/collection/index'
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
name: '在线客服',
|
name: '在线客服',
|
||||||
icon: 'customer',
|
icon: 'customer',
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
<script setup></script>
|
<script setup>
|
||||||
|
import { useAuthUser } from '@/composables/useAuthUser'
|
||||||
|
|
||||||
|
const { userInfo } = useAuthUser()
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="team-index">
|
<view class="team-index">
|
||||||
@@ -6,7 +10,7 @@
|
|||||||
<view class="top-card">
|
<view class="top-card">
|
||||||
<view class="num-box">
|
<view class="num-box">
|
||||||
<text>我的团队(人)</text>
|
<text>我的团队(人)</text>
|
||||||
<text>2933</text>
|
<text>{{ userInfo.teamCount }}</text>
|
||||||
</view>
|
</view>
|
||||||
<image
|
<image
|
||||||
src="/static/images/my-index/team-bg.png"
|
src="/static/images/my-index/team-bg.png"
|
||||||
|
|||||||
@@ -154,13 +154,7 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view v-if="!stateData.loading">
|
<view v-if="!stateData.loading">
|
||||||
<nav-bar isTopBg isPlaceholder :title="stateData.title">
|
<nav-bar isTopBg isPlaceholder :title="stateData.title"></nav-bar>
|
||||||
<template #right>
|
|
||||||
<text class="public-navbar__right-btn" @click="onAdd">
|
|
||||||
{{ formData.id ? '修改' : '添加' }}
|
|
||||||
</text>
|
|
||||||
</template>
|
|
||||||
</nav-bar>
|
|
||||||
|
|
||||||
<view
|
<view
|
||||||
v-if="!['101', '102'].includes(stateData.state)"
|
v-if="!['101', '102'].includes(stateData.state)"
|
||||||
@@ -208,6 +202,13 @@
|
|||||||
></cb-file-picker>
|
></cb-file-picker>
|
||||||
</CardInput>
|
</CardInput>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 底部按钮 -->
|
||||||
|
<bottom-view>
|
||||||
|
<cb-button @click="onAdd">
|
||||||
|
{{ formData.id ? '修改' : '添加' }}
|
||||||
|
</cb-button>
|
||||||
|
</bottom-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -94,9 +94,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="edit-password">
|
<view class="edit-password">
|
||||||
<nav-bar isTopBg isPlaceholder title="交易密码">
|
<nav-bar isTopBg isPlaceholder title="交易密码">
|
||||||
<template #right>
|
|
||||||
<text class="top-right-name" @click="onEdit">确认</text>
|
|
||||||
</template>
|
|
||||||
</nav-bar>
|
</nav-bar>
|
||||||
|
|
||||||
<view v-if="formData.state === '1'" class="input-box">
|
<view v-if="formData.state === '1'" class="input-box">
|
||||||
@@ -123,6 +121,13 @@
|
|||||||
type="password"
|
type="password"
|
||||||
></CardInput>
|
></CardInput>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 底部按钮 -->
|
||||||
|
<bottom-view>
|
||||||
|
<cb-button @click="onEdit">
|
||||||
|
确认
|
||||||
|
</cb-button>
|
||||||
|
</bottom-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,7 @@
|
|||||||
|
|
||||||
const onTop = id => {
|
const onTop = id => {
|
||||||
formData.type = id
|
formData.type = id
|
||||||
|
dataList.value = []
|
||||||
getData(1, formData.pageSize)
|
getData(1, formData.pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
import { GROUP_STATUS } from '@/constants/mall-data'
|
import { GROUP_STATUS } from '@/constants/mall-data'
|
||||||
import { getGroupDetail } from '@/api/mall'
|
import { getGroupDetail } from '@/api/mall'
|
||||||
import { navigateBack, redirectTo } from '@/utils/router'
|
import { navigateBack, navigateTo, redirectTo } from '@/utils/router'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
|
|
||||||
const viewData = ref({})
|
const viewData = ref({})
|
||||||
@@ -21,7 +21,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onShare = () => {
|
const onShare = () => {
|
||||||
console.log('分享')
|
// productId
|
||||||
|
navigateTo('/pages/shop-together/share')
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(e => {
|
onLoad(e => {
|
||||||
|
|||||||
59
pages/shop-together/share.vue
Normal file
59
pages/shop-together/share.vue
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<script setup></script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="share-box">
|
||||||
|
<nav-bar title="拼单" targetColor="transparent"></nav-bar>
|
||||||
|
<view class="code-box">
|
||||||
|
<view class="code-content">
|
||||||
|
<view class="code">二维码</view>
|
||||||
|
<view class="btn-box">
|
||||||
|
<text>分享二维码</text>
|
||||||
|
<text>保存到本地</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.share-box {
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
// 导入背景图
|
||||||
|
background: url('/static/images/discover/share-bg.png');
|
||||||
|
background-size: 100%;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
|
||||||
|
.code-box {
|
||||||
|
padding-top: 20vh;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.code-content {
|
||||||
|
width: 560rpx;
|
||||||
|
height: 618rpx;
|
||||||
|
background: linear-gradient(0deg, #00d993 0%, #00d9c5 100%);
|
||||||
|
border-radius: 32rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
.code {
|
||||||
|
width: 332rpx;
|
||||||
|
height: 332rpx;
|
||||||
|
background: rgb(202, 118, 118);
|
||||||
|
}
|
||||||
|
.btn-box {
|
||||||
|
margin-top: 60rpx;
|
||||||
|
width: 332rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
BIN
static/images/discover/share-bg.png
Normal file
BIN
static/images/discover/share-bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 841 KiB |
@@ -11,6 +11,9 @@ import {
|
|||||||
setFontSize,
|
setFontSize,
|
||||||
removeFontSize
|
removeFontSize
|
||||||
} from '@/utils/storage'
|
} from '@/utils/storage'
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
import { useLoginState } from '@/uni_modules/tuikit-atomic-x/state/LoginState'
|
||||||
|
// #endif
|
||||||
import { useTokenStore } from './token'
|
import { useTokenStore } from './token'
|
||||||
import { getUserData, userLogout, updateUserData } from '@/api'
|
import { getUserData, userLogout, updateUserData } from '@/api'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
@@ -18,13 +21,11 @@ import { useUI } from '@/utils/use-ui'
|
|||||||
import { reLaunch } from '@/utils/router'
|
import { reLaunch } from '@/utils/router'
|
||||||
import { getTencentUserSig } from '@/api'
|
import { getTencentUserSig } from '@/api'
|
||||||
import { TUILogin } from '@tencentcloud/tui-core-lite'
|
import { TUILogin } from '@tencentcloud/tui-core-lite'
|
||||||
// #ifdef APP-PLUS
|
import { TUIChatEngine } from '@tencentcloud/chat-uikit-engine-lite'
|
||||||
import { useLoginState } from '@/uni_modules/tuikit-atomic-x/state/LoginState'
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
export const useUserStore = defineStore('user', () => {
|
export const useUserStore = defineStore('user', () => {
|
||||||
const { clearToken } = useTokenStore()
|
const { clearToken } = useTokenStore()
|
||||||
const { showDialog } = useUI()
|
const { showDialog, showToast } = useUI()
|
||||||
|
|
||||||
const userInfo = ref(
|
const userInfo = ref(
|
||||||
getUserInfoData() ? JSON?.parse(getUserInfoData()) : {}
|
getUserInfoData() ? JSON?.parse(getUserInfoData()) : {}
|
||||||
@@ -71,12 +72,20 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
* 登录腾讯 IM
|
* 登录腾讯 IM
|
||||||
*/
|
*/
|
||||||
const loginTencentIM = async () => {
|
const loginTencentIM = async () => {
|
||||||
|
await refreshUserInfo()
|
||||||
await TUILogin.login({
|
await TUILogin.login({
|
||||||
SDKAppID: tencentUserSig.value.sdkappID,
|
SDKAppID: tencentUserSig.value.sdkappID,
|
||||||
userID: tencentUserSig.value.userId,
|
userID: tencentUserSig.value.userId,
|
||||||
userSig: tencentUserSig.value.userSig,
|
userSig: tencentUserSig.value.userSig,
|
||||||
framework: `vue3`
|
framework: `vue3`
|
||||||
})
|
})
|
||||||
|
|
||||||
|
await TUIChatEngine.login({
|
||||||
|
SDKAppID: tencentUserSig.value.sdkappID,
|
||||||
|
userID: tencentUserSig.value.userId,
|
||||||
|
userSig: tencentUserSig.value.userSig,
|
||||||
|
useUploadPlugin: true // 使用文件上传插件
|
||||||
|
})
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
await useLoginState().login({
|
await useLoginState().login({
|
||||||
sdkAppID: tencentUserSig.value.sdkappID,
|
sdkAppID: tencentUserSig.value.sdkappID,
|
||||||
@@ -92,6 +101,7 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
const clearUserInfo = async () => {
|
const clearUserInfo = async () => {
|
||||||
const show = await showDialog('提示', '确定要退出登录吗?')
|
const show = await showDialog('提示', '确定要退出登录吗?')
|
||||||
if (show) {
|
if (show) {
|
||||||
|
showToast('退出登录成功', 'success')
|
||||||
await userLogout()
|
await userLogout()
|
||||||
await logout()
|
await logout()
|
||||||
}
|
}
|
||||||
@@ -109,6 +119,7 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
await TUILogin.logout().then(() => {
|
await TUILogin.logout().then(() => {
|
||||||
reLaunch('/pages/login/login')
|
reLaunch('/pages/login/login')
|
||||||
})
|
})
|
||||||
|
await TUIChatEngine.logout()
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
await useLoginState().logout()
|
await useLoginState().logout()
|
||||||
// #endif
|
// #endif
|
||||||
|
|||||||
Reference in New Issue
Block a user