vlog_progress_pause_ios_ad

This commit is contained in:
abu 2025-04-12 17:11:06 +08:00
parent c55d02570e
commit 885503a767
84 changed files with 7603 additions and 3949 deletions

View File

@ -43,11 +43,12 @@ export function vlogFollowList(page, pageSize,myId) {
/** /**
* 短视频列表-true * 短视频列表-true
*/ */
export function vlogList(page, pageSize,userId='',search='') { export function vlogList(page, pageSize,userId='',cityCode='',search='') {
let data = { let data = {
page, page,
pageSize, pageSize,
userId, userId,
cityCode,
search search
} }
return http.request({ return http.request({
@ -338,3 +339,15 @@ export function vlogQueryMyFollows({myId,page,pageSize}) {
params:{myId,page,pageSize} params:{myId,page,pageSize}
}); });
} }
/**
* 我的关注
*/
export function vlogQueryDoIFollowVloger({myId,vlogerId}) {
return http.request({
url: api.vlog + "/fans/queryDoIFollowVloger",
method: Method.GET,
needToken: true,
params:{myId,vlogerId}
});
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name" : "wzj4", "name" : "wzj4",
"appid" : "__UNI__1F0975C", "appid" : "__UNI__6DB512D",
"description" : "admin", "description" : "admin",
"versionName" : "4.0.0", "versionName" : "4.0.0",
"versionCode" : 4000049, "versionCode" : 4000049,
@ -9,8 +9,8 @@
"compatible" : { "compatible" : {
"ignoreVersion" : true //trueHBuilderX1.9.0 "ignoreVersion" : true //trueHBuilderX1.9.0
}, },
"nvueStyleCompiler" : "uni-app", "nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3, "compilerVersion" : 3,
/* 5+App */ /* 5+App */
"usingComponents" : true, "usingComponents" : true,
"splashscreen" : { "splashscreen" : {
@ -19,18 +19,17 @@
"autoclose" : true, "autoclose" : true,
"delay" : 0 "delay" : 0
}, },
"screenOrientation" : [ "portrait-primary" ], "screenOrientation" : [ "portrait-primary" ],
"modules" : { "modules" : {
"Payment" : {}, "Payment" : {},
"Share" : {}, "Share" : {},
"Fingerprint" : {},
"FaceID" : {},
"Geolocation" : {}, "Geolocation" : {},
"Maps" : {}, "Maps" : {},
"OAuth" : {}, "OAuth" : {},
"Camera" : {}, "Camera" : {},
"Barcode" : {}, "Barcode" : {},
"VideoPlayer" : {} "VideoPlayer" : {},
"Push" : {}
}, },
"error" : { "error" : {
/* 404*/ /* 404*/
@ -90,7 +89,7 @@
"payment" : { "payment" : {
"weixin" : { "weixin" : {
"__platform__" : [ "ios", "android" ], "__platform__" : [ "ios", "android" ],
"appid" : "wx32788b91bdb614c0", "appid" : "wxebcdaea31881caab",
"UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/" "UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/"
}, },
"alipay" : { "alipay" : {
@ -100,14 +99,14 @@
"ad" : {}, "ad" : {},
"share" : { "share" : {
"weixin" : { "weixin" : {
"appid" : "wx32788b91bdb614c0", "appid" : "wxebcdaea31881caab",
"UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/" "UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/"
} }
}, },
"oauth" : { "oauth" : {
"weixin" : { "weixin" : {
"appid" : "wx32788b91bdb614c0", "appid" : "wxebcdaea31881caab",
"appsecret" : "230233cef7520ee935bbecad372a370e", "appsecret" : "71826d76bad096ec5407897c6ed1391f",
"UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/" "UniversalLinks" : "https://m-b2b2c.pickmall.cn/app/"
}, },
"apple" : {}, "apple" : {},
@ -120,6 +119,9 @@
"__platform__" : [ "ios", "android" ], "__platform__" : [ "ios", "android" ],
"appkey_ios" : "f463d3350efe63f8be5d9a62f24d0aab", "appkey_ios" : "f463d3350efe63f8be5d9a62f24d0aab",
"appkey_android" : "fb3f1ccb34616c70f068aa950f3e27df" "appkey_android" : "fb3f1ccb34616c70f068aa950f3e27df"
},
"system" : {
"__platform__" : [ "ios", "android" ]
} }
}, },
"maps" : { "maps" : {
@ -174,7 +176,8 @@
"xxhdpi" : "CustomStartPage/start-page.9.png" "xxhdpi" : "CustomStartPage/start-page.9.png"
} }
} }
} },
"nativePlugins" : {}
}, },
"permission" : { "permission" : {
"scope.userLocation" : { "scope.userLocation" : {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,17 @@
//
// JPushModule.h
// UniPluginJPush
//
// Created by huangshuni on 2021/1/12.
//
#import <Foundation/Foundation.h>
#import "DCUniModule.h"
NS_ASSUME_NONNULL_BEGIN
@interface JPushModule : DCUniModule
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,169 @@
{
"name": "JG-JPush",
"id": "JG-JPush",
"version": "1.2.5",
"description": "极光推送Hbuilder插件",
"_dp_type":"nativeplugin",
"_dp_nativeplugin":{
"ios": {
"deploymentTarget": "11.0",
"validArchitectures": [
"arm64"
],
"plugins": [{
"type": "module",
"name": "JG-JPush",
"class": "JPushModule"
}],
"hooksClass": "JPushProxy",
"integrateType": "framework",
"frameworks": [
"CFNetwork.framework",
"CoreFoundation.framework",
"CoreTelephony.framework",
"SystemConfiguration.framework",
"CoreGraphics.framework",
"Foundation.framework",
"UIKit.framework",
"Security.framework",
"libz.tbd",
"AdSupport.framework",
"UserNotifications.framework",
"libresolv.tbd",
"WebKit.framework",
"AppTrackingTransparency.framework",
"StoreKit.framework"
],
"resources": [
],
"capabilities": {
"entitlements": {
"aps-environment":"development"
}
},
"privacies": [
"NSLocationAlwaysAndWhenInUseUsageDescription",
"NSLocationAlwaysUsageDescription",
"NSLocationWhenInUseUsageDescription"
],
"parameters": {
"JPUSH_ISPRODUCTION_IOS": {
"des": "[iOS]是否是生产环境是填true不是填false或者不填",
"key": "JPush:ISPRODUCTION"
},
"JPUSH_ADVERTISINGID_IOS": {
"des": "[iOS]广告标识符IDFA如果不需要使用IDFA可不填",
"key": "JPush:ADVERTISINGID"
},
"JPUSH_DEFAULTINITJPUSH_IOS": {
"des": "[iOS]是否默认初始化是填true不是填false或者不填",
"key": "JPush:DEFAULTINITJPUSH"
}
}
},
"android": {
"plugins": [
{
"type": "module",
"name": "JG-JPush",
"class": "cn.jiguang.uniplugin_jpush.JPushModule"
}
],
"integrateType": "aar",
"minSdkVersion": "19",
"permissions": [
"${applicationId}.permission.JPUSH_MESSAGE",
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.POST_NOTIFICATIONS",
"com.huawei.android.launcher.permission.CHANGE_BADGE",
"com.vivo.notification.permission.BADGE_ICON",
"com.hihonor.android.launcher.permission.CHANGE_BADGE",
"android.permission.VIBRATE",
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_BACKGROUND_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.QUERY_ALL_PACKAGES",
"android.permission.GET_TASKS",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"${applicationId}.permission.MIPUSH_RECEIVE",
"com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE",
"com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"
],
"parameters": {
"JPUSH_OPPO_APPKEY": {
"des": "厂商OPPO-appkey,示例OP-12345678",
"key": "OPPO_APPKEY"
},
"JPUSH_OPPO_APPID":{
"des": "厂商OPPO-appId,示例OP-12345678",
"key": "OPPO_APPID"
},
"JPUSH_OPPO_APPSECRET":{
"des": "厂商OPPO-appSecret,示例OP-12345678",
"key": "OPPO_APPSECRET"
},
"JPUSH_VIVO_APPKEY":{
"des": "厂商VIVO-appkey,示例12345678",
"key": "com.vivo.push.api_key"
},
"JPUSH_VIVO_APPID":{
"des": "厂商VIVO-appId,示例12345678",
"key": "com.vivo.push.app_id"
},
"JPUSH_MEIZU_APPKEY":{
"des": "厂商MEIZU-appKey,示例MZ-12345678",
"key": "MEIZU_APPKEY"
},
"JPUSH_MEIZU_APPID":{
"des": "厂商MEIZU-appId,示例MZ-12345678",
"key": "MEIZU_APPID"
},
"JPUSH_XIAOMI_APPKEY":{
"des": "厂商XIAOMI-appKey,示例MI-12345678",
"key": "XIAOMI_APPKEY"
},
"JPUSH_XIAOMI_APPID":{
"des": "厂商XIAOMI-appId,示例MI-12345678",
"key": "XIAOMI_APPID"
},
"JPUSH_HUAWEI_APPID":{
"des": "厂商HUAWEI-appId,示例appid=12346578",
"key": "com.huawei.hms.client.appid"
},
"JPUSH_HONOR_APPID" : {
"des" : "厂商HONOR-appId,示例12346578",
"key" : "com.hihonor.push.app_id"
},
"JPUSH_NIO_APPID" : {
"des" : "厂商nio-appId,示例12346578",
"key" : "nio_push_app_id"
},
"JPUSH_GOOGLE_API_KEY" : {
"des" : "厂商google api_key,示例:g-12346578",
"key" : "google_api_key"
},
"JPUSH_GOOGLE_APP_ID" : {
"des" : "厂商google mobilesdk_app_id,示例g-12346578",
"key" : "google_app_id"
},
"JPUSH_GOOGLE_PROJECT_NUMBER" : {
"des" : "厂商google project_number,示例g-12346578",
"key" : "gcm_defaultSenderId"
},
"JPUSH_GOOGLE_PROJECT_ID" : {
"des" : "厂商google project_id ,示例g-12346578",
"key" : "project_id"
},
"JPUSH_GOOGLE_STORAGE_BUCKET" : {
"des" : "厂商google storage_bucket,示例g-12346578",
"key" : "google_storage_bucket"
}
}
}
}
}

View File

@ -488,14 +488,14 @@
"navigationBarBackgroundColor": "#181b27" "navigationBarBackgroundColor": "#181b27"
} }
}, },
// { {
// "path" : "pages/me/settings", "path": "pages/me/settings",
// "style" : { "style": {
// "navigationBarTitleText" : "设置", "navigationBarTitleText": "设置",
// "navigationBarTextStyle" : "white", "navigationBarTextStyle": "white",
// "navigationBarBackgroundColor" : "#181b27" "navigationBarBackgroundColor": "#181b27"
// } }
// }, },
{ {
"path": "pages/me/myFans", "path": "pages/me/myFans",
"style": { "style": {
@ -542,7 +542,22 @@
"navigationBarTitleText": "消息详情", "navigationBarTitleText": "消息详情",
"navigationBarTextStyle": "white", "navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#181b27" "navigationBarBackgroundColor": "#181b27"
}
},
{
"path": "pages/search/search",
"style": {
"app-plus": {
"titleNView": false //
}
}
},
{
"path": "pages/search/searchList",
"style": {
"app-plus": {
"titleNView": false //
}
} }
} }
], ],
@ -1201,27 +1216,25 @@
{ {
"path": "components/TUIChat/index", "path": "components/TUIChat/index",
"style": { "style": {
"navigationBarTitleText": "腾讯云 IM", "navigationBarTitleText": "腾讯云 IM",
"app-plus": { "app-plus": {
"softinputMode": "adjustResize", "softinputMode": "adjustResize",
"titleNView": { "titleNView": {
"buttons": [ "buttons": [{
{ "type": "menu"
"type": "menu" // "click": "handleMenuClick" //
// "click": "handleMenuClick" // }]
}
},
"h5": {
"titleNView": {
"buttons": [{
"type": "menu"
}]
} }
]
} }
},
"h5": {
"titleNView": {
"buttons": [{
"type": "menu"
}]
}
}
} }
}, },
// chat : // chat :
{ {
"path": "components/TUIChat/video-play", "path": "components/TUIChat/video-play",

View File

@ -121,7 +121,7 @@
<view class="vlog-list"> <view class="vlog-list">
<block v-for="(vlog, index) in vlogList" :key="index"> <block v-for="(vlog, index) in vlogList" :key="index">
<image class="vlog-cover" :src="vlog.cover" @click="goToVlog(vlog)" mode="aspectFill"></image> <image class="vlog-cover" :src="vlog.cover||vlog.firstFrameImg" @click="goToVlog(vlog)" mode="aspectFill"></image>
</block> </block>
</view> </view>
@ -230,8 +230,9 @@
if (result.data.status == 200) { if (result.data.status == 200) {
this.pageUserInfo = result.data.data; this.pageUserInfo = result.data.data;
storage.setVlogUserInfo(this.pageUserInfo) storage.setVlogUserInfo(this.pageUserInfo)
// 查询用户信息 // 查询用户信息
this.myList(0, 'myPublicList', true); this.switchTab(0)
// this.myList(0, 'myPublicList', true);
this.setBasicUserInfo(this.pageUserInfo); this.setBasicUserInfo(this.pageUserInfo);
} }
}, },
@ -355,14 +356,14 @@
goMyFans(userId) { goMyFans(userId) {
uni.navigateTo({ uni.navigateTo({
animationType: "fade-in", animationType: "fade-in",
url: "myFans?userId=" + userId, url: "myFans",
}); });
}, },
// 关注列表 // 关注列表
goMyFollows(userId) { goMyFollows(userId) {
uni.navigateTo({ uni.navigateTo({
animationType: "fade-in", animationType: "fade-in",
url: "myFollows?userId=" + userId, url: "myFollows",
}); });
}, },
}, },

View File

@ -2,7 +2,7 @@
<view class="mpage"> <view class="mpage">
<view class="line"></view> <view class="line"></view>
<scroll-view scroll-y="true" @scrolltolower="pagingFansList()"> <scroll-view scroll-y="true" @scrolltolower="pagingFansList()">
<view class="user-wrapper" v-for="(f, index) in fansList" :key="index"> <view class="user-wrapper" v-for="(f, index) in fansList" :key="f.fanId">
<view class="user-info" @click="goTovlogerInfo(f.fanId)"> <view class="user-info" @click="goTovlogerInfo(f.fanId)">
<image class="face" :src="f.face" /> <image class="face" :src="f.face" />
<text class="user-name"> <text class="user-name">
@ -10,29 +10,19 @@
</text> </text>
</view> </view>
<view v-if="isLogin && f.me" class="operator-wrapper"> <view v-if="!from">
<text class="operator-words" style="color: #ffffff">你</text> <view v-if="f.bothFriend==0" class="operator-wrapper">
</view> <text class="operator-words" style="color: #ef274d" @click="followMe(f.fanId)">
<view v-else-if="!isLogin || isLogin && !f.follow && !f.fan" class="operator-wrapper"> 回粉
<text class="operator-words" style="color: #ffffff" @click="followMe(f.fanId)"> </text>
关注 </view>
</text> <view v-if="f.bothFriend==1" class="operator-wrapper">
</view> <text class="operator-words" style="color: #ffffff" @click="cancelFollow(f.fanId)">
<view v-else-if="isLogin && !f.follow && f.fan" class="operator-wrapper"> 互粉
<text class="operator-words" style="color: #ffffff" @click="followMe(f.fanId)"> </text>
回粉 </view>
</text>
</view>
<view v-else-if="isLogin && f.follow && !f.fan" class="operator-wrapper">
<text class="operator-words" style="color: #ef274d" @click="cancelFollow(f.fanId)">
已关注
</text>
</view>
<view v-else-if="isLogin && f.follow && f.fan" class="operator-wrapper">
<text class="operator-words" style="color: #ef274d" @click="cancelFollow(f.fanId)">
互关
</text>
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
@ -53,28 +43,28 @@
data() { data() {
return { return {
userId: "", userId: "",
currentUserId: "",
isLogin: false,
screenHeight: 0, screenHeight: 0,
page: 0, page: 0,
totalPage: 0, totalPage: 0,
fansList: [], fansList: [],
from:false
}; };
}, },
onLoad(param) { onLoad(param) {
var uinfo = storage.getVlogUserInfo() if(!isStrEmpty(param.userId)){
if (uinfo == null) { this.from = true
return this.userId = param.userId
}else{
var uinfo = storage.getVlogUserInfo()
this.userId = uinfo.id;
} }
this.isLogin = true;
this.currentUserId = uinfo.id
this.userId = param.userId;
this.queryMyFansList(0); this.queryMyFansList(0);
}, },
methods: { methods: {
goTovlogerInfo(vlogerId) { goTovlogerInfo(vlogerId) {
var id = storage.getVlogUserInfo().id
// 是否是当前登录的用户 // 是否是当前登录的用户
if (this.currentUserId == vlogerId) { if (id == vlogerId) {
uni.switchTab({ uni.switchTab({
url: "me", url: "me",
}); });
@ -91,15 +81,15 @@
for (let i = 0; i < fansList.length; i++) { for (let i = 0; i < fansList.length; i++) {
let fan = fansList[i]; let fan = fansList[i];
if (fan.fanId == vlogerId) { if (fan.fanId == vlogerId) {
fan.follow = status; fan.bothFriend = status;
fansList.splice(i, 1, fan); // fansList.splice(i, 1);
} }
} }
me.fansList = fansList; me.fansList = fansList;
}, },
async cancelFollow(vlogerId) { async cancelFollow(vlogerId) {
let me = this; let me = this;
let userId = storage.getVlogUserInfo().id let userId = me.userId
let data = { let data = {
myId: userId, myId: userId,
vlogerId vlogerId
@ -107,7 +97,7 @@
var result = await vlogFansCancel(data) var result = await vlogFansCancel(data)
console.log(result) console.log(result)
if (result.data.status == 200) { if (result.data.status == 200) {
me.reFreshList(vlogerId, false); me.reFreshList(vlogerId, 0);
} else { } else {
uni.showToast({ uni.showToast({
title: result.data.msg, title: result.data.msg,
@ -118,7 +108,7 @@
}, },
async followMe(vlogerId) { async followMe(vlogerId) {
let me = this; let me = this;
let userId = this.currentUserId; let userId = me.userId;
let data = { let data = {
myId: userId, myId: userId,
vlogerId vlogerId
@ -126,7 +116,7 @@
var result = await vlogFansFollow(data) var result = await vlogFansFollow(data)
console.log(result) console.log(result)
if (result.data.status == 200) { if (result.data.status == 200) {
me.reFreshList(vlogerId, true); me.reFreshList(vlogerId, 1);
} else { } else {
uni.showToast({ uni.showToast({
title: result.data.msg, title: result.data.msg,
@ -147,7 +137,8 @@
page: page, page: page,
pageSize: 10 pageSize: 10
} }
var result = await vlogQueryMyFans(data) var result = await vlogQueryMyFans(data)
console.log(result)
if (result.data.status == 200) { if (result.data.status == 200) {
let fansList = result.data.data.rows; let fansList = result.data.data.rows;
let totalPage = result.data.data.total; let totalPage = result.data.data.total;
@ -217,7 +208,8 @@
height: 120rpx; height: 120rpx;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
align-items: center;
margin-top: 20rpx; margin-top: 20rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
@ -231,8 +223,8 @@
flex-direction: row; flex-direction: row;
justify-content: center; justify-content: center;
background-color: #ef274d; background-color: #ef274d;
border-radius: 20rpx; border-radius: 20rpx;
align-self: center; align-items: center;
border-width: 2rpx; border-width: 2rpx;
border-color: #ef274d; border-color: #ef274d;
background-color: #181b27; background-color: #181b27;

View File

@ -2,7 +2,7 @@
<view class="mpage"> <view class="mpage">
<view class="line"></view> <view class="line"></view>
<scroll-view scroll-y="true" @scrolltolower="pagingFollowsList"> <scroll-view scroll-y="true" @scrolltolower="pagingFollowsList">
<view class="user-wrapper" v-for="(f, index) in followsList" :key="index"> <view class="user-wrapper" v-for="(f, index) in followsList" :key="f.vlogerId">
<view class="user-info" @click="goTovlogerInfo(f.vlogerId)"> <view class="user-info" @click="goTovlogerInfo(f.vlogerId)">
<image class="face" :src="f.face" /> <image class="face" :src="f.face" />
<text class="user-name"> <text class="user-name">
@ -10,64 +10,59 @@
</text> </text>
</view> </view>
<view v-if="f.me" class="operator-wrapper"> <view v-if="!from">
<text class="operator-words" style="color: #ffffff">你</text> <view v-if="f.bothFriend==0" class="operator-wrapper">
</view> <text class="operator-words" style="color: #ef274d" @click="cancelFollow(f.vlogerId)">
<view v-else-if="!f.follow" class="operator-wrapper"> 已关注
<text class="operator-words" style="color: #ffffff" @click="followMe(f.vlogerId)"> </text>
关注 </view>
</text> <view v-if="f.bothFriend==1" class="operator-wrapper">
</view> <text class="operator-words" style="color: #ffffff" @click="cancelFollow(f.vlogerId)">
<view v-else-if="f.follow && !f.fan" class="operator-wrapper"> 互关
<text class="operator-words" style="color: #ef274d" @click="cancelFollow(f.vlogerId)"> </text>
已关注 </view>
</text>
</view>
<view v-else-if="f.follow && f.fan" class="operator-wrapper">
<text class="operator-words" style="color: #ef274d" @click="cancelFollow(f.vlogerId)">
互关
</text>
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
</template> </template>
<script> <script>
import storage from "@/utils/storage.js"; //缓存 import storage from "@/utils/storage.js"; //缓存
import { import {
vlogFansCancel, vlogFansCancel,
vlogFansFollow, vlogFansFollow,
vlogQueryMyFollows vlogQueryMyFollows
} from "@/api/vlog" } from "@/api/vlog"
import { import {
isStrEmpty isStrEmpty
} from '@/utils/tools.js' } from '@/utils/tools.js'
let system = uni.getSystemInfoSync(); let system = uni.getSystemInfoSync();
export default { export default {
data() { data() {
return { return {
userId: "", userId: "",
currentUserId: "",
screenHeight: 0, screenHeight: 0,
page: 0, page: 0,
totalPage: 0, totalPage: 0,
followsList: [], followsList: [],
from: false
}; };
}, },
onLoad(param) { onLoad(param) {
var uinfo = storage.getVlogUserInfo() if (!isStrEmpty(param.userId)) {
if (uinfo==null) { this.from = true
return this.userId = param.userId
} } else {
this.currentUserId = uinfo.id var uinfo = storage.getVlogUserInfo()
this.userId = param.userId; this.userId = uinfo.id;
}
this.queryMyFollowList(0); this.queryMyFollowList(0);
}, },
methods: { methods: {
goTovlogerInfo(vlogerId) { goTovlogerInfo(vlogerId) {
// 是否是当前登录的用户 var id = storage.getVlogUserInfo().id
if (this.currentUserId == vlogerId) { if (id == vlogerId) {
uni.switchTab({ uni.switchTab({
url: "me", url: "me",
}); });
@ -84,69 +79,67 @@
for (let i = 0; i < followsList.length; i++) { for (let i = 0; i < followsList.length; i++) {
let vloger = followsList[i]; let vloger = followsList[i];
if (vloger.vlogerId == vlogerId) { if (vloger.vlogerId == vlogerId) {
vloger.follow = status; vloger.bothFriend = status;
followsList.splice(i, 1, vloger); followsList.splice(i, 1);
} }
} }
me.followsList = followsList; me.followsList = followsList;
}, },
async cancelFollow(vlogerId) { async cancelFollow(vlogerId) {
let me = this; let me = this;
let userId = this.currentUserId; let userId = this.userId;
var data ={ var data = {
myId: userId, myId: userId,
vlogerId vlogerId
} }
var result = await vlogFansCancel(data) var result = await vlogFansCancel(data)
console.log(result) console.log(result)
if (result.data.status == 200) { if (result.data.status == 200) {
me.reFreshList(vlogerId, false); me.reFreshList(vlogerId, 0);
} else { } else {
uni.showToast({ uni.showToast({
title: result.data.msg, title: result.data.msg,
icon: "none", icon: "none",
duration: 3000, duration: 3000,
}); });
} }
}, },
async followMe(vlogerId) { async followMe(vlogerId) {
let me = this; let me = this;
let userId = this.currentUserId; let userId = this.userId;
let data = { let data = {
myId: userId, myId: userId,
vlogerId vlogerId
} }
var result = await vlogFansFollow(data) var result = await vlogFansFollow(data)
console.log(result) console.log(result)
if (result.data.status == 200) { if (result.data.status == 200) {
me.reFreshList(vlogerId, true); me.reFreshList(vlogerId, true);
} else { } else {
uni.showToast({ uni.showToast({
title: result.data.msg, title: result.data.msg,
icon: "none", icon: "none",
duration: 3000, duration: 3000,
}); });
} }
}, },
async queryMyFollowList(page) { async queryMyFollowList(page) {
let me = this; let me = this;
page = page + 1; page = page + 1;
let userId = me.userId; let userId = me.userId;
let currentUserId = this.currentUserId; var data = {
var data = { myId: userId,
myId:userId, page: page,
// vlogerId: userId, pageSize: 10
// currentUserId: currentUserId, }
page: page, var result = await vlogQueryMyFollows(data)
pageSize: 10 if (result.data.status == 200) {
} let followsList = result.data.data.rows;
var result = await vlogQueryMyFollows(data) let totalPage = result.data.data.total;
if (result.data.status == 200) { me.followsList = me.followsList.concat(followsList);
let followsList = result.data.data.rows; console.log(me.followsList)
let totalPage = result.data.data.total; me.page = page;
me.followsList = me.followsList.concat(followsList); me.totalPage = totalPage;
me.page = page;
me.totalPage = totalPage;
} }
}, },
@ -157,8 +150,8 @@
} }
this.queryMyFollowList(this.page); this.queryMyFollowList(this.page);
}, },
}, }
}; }
</script> </script>
<style scoped> <style scoped>
@ -206,7 +199,7 @@
justify-content: space-between; justify-content: space-between;
margin-top: 20rpx; margin-top: 20rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
align-items: center;
} }

227
pages/me/settings.vue Executable file
View File

@ -0,0 +1,227 @@
<template>
<view class="page">
<!-- <view class="line"></view> -->
<scroll-view scroll-y="true">
<view
style="
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 20rpx;
">
<view
style="
display: flex;
flex-direction: column;
justify-content: center;
">
<image
src="/static/imooc/lee.jpeg"
mode="widthFix"
class="fengjianyingyue"
style="align-self: center"></image>
<image
src="/static/imooc/fengjianyingyue.png"
mode="widthFix"
class="fengjianyingyue-name"
style="align-self: center"></image>
</view>
<view>
<text class="introduce">
物流科技公司部门经理近10年开发和技术管理经验主要从事后端技术和架构领域有丰富的电商平台与物流平台核心系统的架构设计和开发经验
拥有丰富的大型项目开发经验授课风格诙谐幽默讲解到位细致
</text>
<text class="introduce">
近20万的学生学习人数学生入职公司有
百度云盘阿里腾讯云字节跳动金山网易OPPO新浪微博华为货拉拉58同城海信蘑菇街金蝶
</text>
</view>
</view>
<view
style="
display: flex;
flex-direction: row;
justify-content: center;
margin-top: 20rpx;
">
<image
src="/static/imooc/course-javaarchitect.png"
mode="widthFix"
class="course"
style="width: 380rpx"></image>
</view>
<view
style="
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: 20rpx;
padding-left: 30rpx;
padding-right: 30rpx;
">
<image
src="/static/imooc/course-pm.png"
mode="widthFix"
class="course"
style=""></image>
<image
src="/static/imooc/course-springcloud.png"
mode="widthFix"
class="course"
style=""></image>
</view>
<view
style="
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: 20rpx;
padding-left: 30rpx;
padding-right: 30rpx;
">
<image
src="/static/imooc/course-netty.png"
mode="widthFix"
class="course"
style=""></image>
<image
src="/static/imooc/course-zookeeper.png"
mode="widthFix"
class="course"
style=""></image>
</view>
<!-- <view style="display: flex;flex-direction: row;justify-content: center;margin-top: 20rpx;">
<image src="/static/imooc/lee-qrcode.png" mode="widthFix" class="course" style="width: 380rpx;"></image>
</view> -->
<view
:class="{ logout: !logoutTouched, 'logout-touched': logoutTouched }"
@touchstart="touchstartLogout"
@touchend="touchendLogout"
@click="logout"
style="
margin-top: 20rpx;
padding-left: 30rpx;
padding-right: 30rpx;
width: 750rpx;
height: 120rpx;
display: flex;
flex-direction: row;
justify-content: center;
">
<text style="color: #ffffff; align-self: center; font-size: 15px">
退出登录
</text>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
logoutTouched: false,
};
},
onLoad() {},
methods: {
touchstartLogout() {
this.logoutTouched = true;
},
touchendLogout() {
this.logoutTouched = false;
},
logout() {
// let userId = getApp().getUserInfoSession().id;
// uni.request({
// method: "GET",
// url: serverUrl + "/passport/logout?userId=" + userId,
// success(result) {
// let status = result.data.status;
// if (status == 211) {
// app.clearUserInfo();
// uni.showToast({
// title: result.data.msg,
// duration: 3000
// })
// // list
// // uni.setStorageSync("needRefreshIndexVlogList", "1");
// // uni.switchTab({
// // url: "../index/index"
// // })
// uni.reLaunch({
// url: "../index/index",
// });
// }
// },
// });
},
},
};
</script>
<style>
.page {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: #181b27;
}
.line {
height: 1rpx;
background-color: #393a41;
width: 750rpx;
}
.place-box {
background-color: #4a4c52;
}
.place-box-touched {
background-color: #6d6b6b;
}
.right-arrow {
width: 32rpx;
height: 32rpx;
margin-left: 20rpx;
}
.logout {
background-color: #4a4c52;
}
.logout-touched {
background-color: #6d6b6b;
}
.fengjianyingyue {
width: 250rpx;
border-width: 1rpx;
border-color: #ffffff;
border-radius: 10rpx;
}
.fengjianyingyue-name {
width: 200rpx;
margin-top: 26rpx;
opacity: 0.8;
}
.introduce {
color: #f1f1f1;
font-size: 26rpx;
font-weight: 300;
width: 440rpx;
}
.course {
width: 330rpx;
border-radius: 5px;
}
</style>

687
pages/me/vlogerInfo.nvue Executable file
View File

@ -0,0 +1,687 @@
<template>
<view class="page">
<scroll-view
class="isLogin-info-wrapper"
:style="{ height: screenHeight + 'px' }"
scroll-y="true"
@scrolltolower="loadMore">
<image class="mybg" :src="pageUserInfo.bgImg" mode="aspectFill" />
<view class="header" :style="{ marginTop: statusBarHeight + 'px' }">
<image
class="header-right-search"
src="../../static/images/icon-back.png"
@click="back()" />
</view>
<view class="my-info-wrapper">
<view class="my-info">
<image :src="pageUserInfo.face" mode="aspectFill" class="my-face" />
<view class="info-wrapper">
<text class="nickname">
{{ pageUserInfo.nickname }}
</text>
<view class="tiktok-num-wrapper">
<text class="tiktok-num">视频号:</text>
<text class="tiktok-num">
{{ pageUserInfo.imoocNum }}
</text>
</view>
<view class="location">
<text class="location-text">所在地:</text>
<text class="location-text">
{{ pageUserInfo.city == "" ? "中国" : "" + pageUserInfo.city
}}{{
pageUserInfo.district == "" ? "" : "·" + pageUserInfo.district
}}
</text>
</view>
<view class="sex-wrapper">
<view class="constellation">
<image
class="sex-img"
v-if="pageUserInfo.sex == 1"
src="/static/images/icon-sex-boy.png" />
<image
class="sex-img"
v-if="pageUserInfo.sex == 0"
src="/static/images/icon-sex-girl.png" />
<image
class="sex-img"
v-if="pageUserInfo.sex == 2"
src="/static/images/icon-sex-secret.png" />
<text class="astro">{{ astro }}座</text>
</view>
<view class="animal">
<text class="animal-text">
{{ animal }}
</text>
</view>
</view>
</view>
</view>
</view>
<text class="desc">
{{ pageUserInfo.description }}
</text>
<view class="bottom-wrapper">
<view class="bottom">
<view class="bottom-item" @click="goMyFollows(pageUserInfo.id)">
<text class="item-num">
{{ getGraceNumber(pageUserInfo.myFollowsCounts) }}
</text>
<text class="item-text">关注</text>
</view>
<view class="bottom-item" @click="goMyFans(pageUserInfo.id)">
<text class="item-num">
{{ getGraceNumber(pageUserInfo.myFansCounts) }}
</text>
<text class="item-text">粉丝</text>
</view>
<view class="bottom-item">
<text class="item-num">
{{ getGraceNumber(pageUserInfo.totalLikeMeCounts) }}
</text>
<text class="item-text">获赞</text>
</view>
</view>
<view class="edit">
<view
v-if="isFollow && !isFan"
@click="cancelFollow()"
class="follow-btn">
<text class="follow-text">已关注</text>
</view>
<view
v-if="isFollow && isFan"
@click="cancelFollow()"
class="follow-btn">
<text class="follow-text">相互关注</text>
</view>
<view
v-if="!isFollow"
@click="followMe()"
class="follow-btn"
style="background-color: #ef274d">
<text class="follow-text">关注我</text>
</view>
</view>
</view>
<view class="tab-wrapper">
<view class="tab-item" @click="switchTab(0)">
<text class="tab-normal" :class="{ 'tab-selected': currentTab == 0 }">
作品
</text>
<view v-if="currentTab == 0" class="selected-tab"></view>
</view>
<!-- <view class="tab-item" @click="switchTab(1)">
<text class="tab-normal" :class="{ 'tab-selected': currentTab == 1 }">
私密
</text>
<view v-if="currentTab == 1" class="selected-tab"></view>
</view> -->
<view class="tab-item" @click="switchTab(1)">
<text class="tab-normal" :class="{ 'tab-selected': currentTab == 1 }">
赞过
</text>
<view v-if="currentTab == 1" class="selected-tab"></view>
</view>
</view>
<view class="vlog-list">
<block v-for="(vlog, index) in vlogList" :key="index">
<image
class="vlog-cover"
:src="vlog.cover||vlog.firstFrameImg"
@click="goToVlog(vlog)"
mode="aspectFill"></image>
</block>
</view>
<view v-if="vlogList.length == 0" class="empty">
<text class="empty-text">~ 空空如也 ~</text>
</view>
<view v-if="vlogList.length > 0" class="not-empty">
<text class="not-empty-text">~ 没有更多了 ~</text>
</view>
</scroll-view>
</view>
</template>
<script>
let system = uni.getSystemInfoSync();
import * as filters from "@/utils/filters.js"
import api from "@/config/api.js";
import storage from "@/utils/storage.js"; //缓存
import {
vlogUserInfo,
vlogQueryDoIFollowVloger,
vlogMyPublicList,
vlogMyPrivateList,
vlogMyLikedList,
vlogMeTag,
vlogFansCancel,
vlogFansFollow
} from "@/api/vlog"
import {
getAstro,
getAnimal,
dateFormat,
graceNumber,
isStrEmpty
} from '@/utils/tools.js'
export default {
data() {
return {
pageUserInfo: {
id: "",
mobile: "",
nickname: "",
imoocNum: "",
face: "",
birthday: "1998-12-31T16:00:00.000+0000",
country: "",
province: "",
city: "",
district: "",
description: "",
myFollowsCounts: 0,
myFansCounts: 0,
totalLikeMeCounts: 0
},
userPageId: "",
astro: "",
animal: "",
loginWords: "请登录",
statusBarHeight: 0,
screenHeight: 0,
screenHeightUnLogin: 0,
currentTab: 0,
isFollow: false,
isFan: false,
isAndroid: uni.getSystemInfoSync().platform == "android",
page: 0,
totalpage: 0,
vlogList: [],
};
},
async onLoad(params) {
this.statusBarHeight = system.statusBarHeight;
let screenHeight = system.safeArea.bottom + 50;
this.screenHeight = screenHeight;
let screenHeightUnLogin = system.safeArea.bottom;
this.screenHeightUnLogin = screenHeightUnLogin;
let me = this;
// 从视频页面, 点击用户头像传递过来的id
let userPageId = params.userPageId;
if (isStrEmpty(userPageId)) {
uni.showToast({
title: "出错啦~",
icon: " none",
duration: 2000,
});
settimeout(() => {
uni.navigateBack({
delta: 1,
});
}, 1500);
}
me.userPageId = userPageId;
var result = await vlogUserInfo(userPageId)
console.log(result)
if (result.data.status == 200) {
me.pageUserInfo = result.data.data;
me.setBasicUserInfo(me.pageUserInfo);
} else {
uni.showToast({
title: result.data.msg,
icon: "none",
duration: 3000,
});
}
// this.switchTab(0);
this.myList(0, 'myPublicList', true);
let myUserId = "";
let info = storage.getVlogUserInfo()
if (info!=null) {
myUserId = info.id;
}
if (!isStrEmpty(myUserId)) {
// 查询我是否关注博主
var result = await vlogQueryDoIFollowVloger({myId:myUserId,vlogerId:userPageId})
console.log(result)
if (result.data.status == 200) {
me.isFollow = result.data.data;
// me.isFan = result.data.data;
} else {
uni.showToast({
title: result.data.msg,
icon: "none",
duration: 3000,
});
}
// 查询博主是否关注我
var result2 = await vlogQueryDoIFollowVloger({myId:userPageId,vlogerId:myUserId})
if (result2.data.status == 200) {
me.isFan = result2.data.data;
} else {
uni.showToast({
title: result2.data.msg,
icon: "none",
duration: 3000,
});
}
}
},
methods: {
setBasicUserInfo(myUserInfo) {
// 根据生日判断星座
let birthday = myUserInfo.birthday;
let birth = dateFormat("YYYY-mm-dd", new Date(birthday));
let birthArr = birth.split("-");
let year = birthArr[0];
let month = birthArr[1];
let day = birthArr[2];
let astro = getAstro(month, day);
this.astro = astro;
// 根据生日判断生肖
let animal = getAnimal(year);
this.animal = animal;
},
switchTab(index) {
this.currentTab = index;
if (index == 0) {
this.page = 0;
this.toalPage = 0;
this.myList(0, 'myPublicList', true);
} else if (index == 1) {
this.page = 0;
this.toalPage = 0;
this.myList(0, 'myLikedList', true);
}
},
loadMore() {
if (this.page >= this.toalPage) {
return;
} else {
this.myList(this.page);
}
},
async myList(page, requrl, init = false) {
let me = this;
page = page + 1;
me.page = page;
let userId = me.userPageId;;
var result = await vlogMeTag(requrl, page, 20, userId)
if (result.data.status == 200) {
let vlogList = result.data.data.rows;
console.log(vlogList)
let toalPage = result.data.data.total;
if (init) {
me.vlogList = vlogList
} else {
me.vlogList = me.vlogList.concat(vlogList);
}
me.page = page;
me.toalPage = toalPage;
}
},
back() {
uni.navigateBack({
delta: 1,
});
},
async cancelFollow() {
let me = this;
let vlogerId = me.userPageId;
let userId = storage.getVlogUserInfo().id;
var result = await vlogFansCancel({myId:userId,vlogerId:vlogerId})
if (result.data.status == 200) {
me.isFollow = false;
// uni.setStorageSync("justCancelVlogerId", vlogerId);
// 刷新当前页的粉丝数
let pendingInfo = me.pageUserInfo;
me.pageUserInfo.myFansCounts = pendingInfo.myFansCounts - 1;
} else {
uni.showToast({
title: result.data.msg,
icon: "none",
duration: 3000,
});
}
},
async followMe() {
let me = this;
let myUserInfo = storage.getVlogUserInfo();
let vlogerId = me.userPageId;
let userId = myUserInfo.id;
var result = await vlogFansFollow({myId:userId,vlogerId:vlogerId})
if (result.data.status == 200) {
me.isFollow = true;
// uni.setStorageSync("justFollowVlogerId", vlogerId);
// 刷新当前页的粉丝数
let pendingInfo = me.pageUserInfo;
me.pageUserInfo.myFansCounts = pendingInfo.myFansCounts + 1;
} else {
uni.showToast({
title: result.data.msg,
icon: "none",
duration: 3000,
});
}
},
// 把超过1000或10000的数字调整, 比如1.3k/6.8w
getGraceNumber(num) {
return graceNumber(num);
},
goToVlog(vlog) {
let vlogId = vlog.id ? vlog.id : vlog.vlogId;
// uni.navigateTo({
// url: "../vlog/vlog?type=mine&isNeedPage=1&vlogId=" + vlogId,
// });
uni.navigateTo({
url: "/pages/me/vlog?vlogId=" + vlogId,
});
},
goMyFans(userId) {
uni.navigateTo({
animationType: "fade-in",
url: "myFans?userId=" + userId,
});
},
goMyFollows(userId) {
uni.navigateTo({
animationType: "fade-in",
url: "myFollows?userId=" + userId,
});
},
},
};
</script>
<style lang="scss">
.page {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: #000000;
.isLogin-info-wrapper {
.header {
position: absolute;
left: 0;
right: 0;
flex-direction: row;
height: 100rpx;
line-height: 100rpx;
align-items: center;
padding-left: 40rpx;
padding-right: 40rpx;
.header-right-search {
width: 40rpx;
height: 40rpx;
opacity: 0.8;
}
}
.mybg {
width: 750rpx;
height: 750rpx;
box-shadow: inset 0 -150px 180px #313030;
}
.my-info-wrapper {
position: relative;
left: 30rpx;
top: -560rpx;
display: flex;
flex-direction: column;
width: 1000rpx;
.my-info {
display: flex;
flex-direction: row;
.my-face {
width: 200rpx;
height: 200rpx;
border-radius: 100rpx;
border-width: 1px;
border-color: #f1f1f1;
}
.info-wrapper {
margin-left: 30rpx;
padding-top: 20rpx;
width: 500rpx;
.nickname {
font-size: 20px;
color: #ffffff;
font-weight: 600;
}
.tiktok-num-wrapper {
display: flex;
flex-direction: row;
.tiktok-num {
font-size: 10px;
color: #ffffff;
font-weight: 300;
}
}
.location {
display: flex;
flex-direction: row;
height: 20px;
margin-top: 2px;
font-size: 1px;
.location-text {
line-height: 20px;
color: #ffffff;
font-size: 10px;
font-weight: 300;
}
}
.sex-wrapper {
display: flex;
flex-direction: row;
margin-top: 10rpx;
.constellation {
display: flex;
flex-direction: row;
justify-content: center;
background-color: #000000;
opacity: 0.5;
width: 130rpx;
height: 40rpx;
border-radius: 10px;
.sex-img {
width: 22rpx;
height: 22rpx;
align-self: center;
}
.astro {
font-size: 10px;
color: #ffffff;
line-height: 20px;
font-weight: bold;
margin-left: 6rpx;
align-self: center;
}
}
.animal {
margin-left: 10rpx;
display: flex;
flex-direction: row;
justify-content: center;
background-color: #000000;
opacity: 0.5;
width: 60rpx;
height: 40rpx;
border-radius: 10px;
.animal-text {
font-size: 10px;
color: #ffffff;
line-height: 20px;
font-weight: bold;
align-self: center;
}
}
}
}
}
}
.desc {
position: relative;
top: -520rpx;
color: #ffffff;
font-size: 14px;
margin: 0 30rpx;
}
.bottom-wrapper {
position: relative;
top: -510rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
.bottom {
display: flex;
flex-direction: row;
.bottom-item {
margin-left: 30rpx;
display: flex;
flex-direction: column;
justify-content: center;
.item-num {
color: #ffffff;
font-size: 14px;
font-weight: bold;
align-self: center;
}
.item-text {
color: #ffffff;
font-size: 12px;
font-weight: 300;
align-self: center;
}
}
}
.edit {
display: flex;
flex-direction: row;
justify-content: center;
margin-right: 30rpx;
.follow-btn {
margin-right: 20rpx;
border-width: 1px;
border-color: #ffffff;
width: 200rpx;
height: 66rpx;
background-color: #545456;
opacity: 0.8;
border-radius: 40rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-self: center;
.follow-text {
font-size: 13px;
color: #ffffff;
font-weight: 500;
align-self: center;
}
}
}
}
.tab-wrapper {
position: relative;
top: -480rpx;
height: 40px;
background-color: #171825;
display: flex;
flex-direction: row;
justify-content: space-between;
padding-top: 3px;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
.tab-item {
width: 250rpx;
align-self: center;
.tab-normal {
font-size: 18px;
font-weight: 500;
align-self: center;
color: #808080;
}
.tab-selected {
color: #ffffff;
}
.selected-tab {
margin-top: 5px;
height: 5rpx;
width: 250rpx;
border-radius: 6rpx;
background-color: #ef274d;
}
}
}
.vlog-list {
position: relative;
top: -480rpx;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
background-color: #000000;
.vlog-cover {
align-self: center;
width: 248rpx;
height: 360rpx;
border-width: 1rpx;
}
}
.empty {
background-color: #000000;
width: 750rpx;
height: 300rpx;
display: flex;
flex-direction: row;
justify-content: center;
position: relative;
top: -480rpx;
.empty-text {
color: #ffffff;
font-size: 14px;
margin-top: 200rpx;
}
}
.not-empty {
width: 750rpx;
display: flex;
flex-direction: row;
justify-content: center;
position: relative;
top: -260rpx;
.not-empty-text {
color: #ffffff;
font-size: 14px;
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

274
pages/search/search.nvue Executable file
View File

@ -0,0 +1,274 @@
<template>
<view class="page">
<!-- 这里是状态栏, 每个页面都需要有, 目的不让页面覆盖状态栏 -->
<view :style="{ height: statusBarHeight + 'px' }"></view>
<view class="big-search-wrapper">
<image
class="header-right-search icon-search"
src="/static/images/icon-back.png"
@click="back" />
<view class="search-box">
<view class="search-box-left">
<image
class="header-right-search search-image"
src="/static/images/icon-search.png" />
</view>
<input
type="text"
:model="searchContent"
:value="searchContent"
@input="typingContent"
placeholder="请输入内容~"
maxlength="10"
class="search-input" />
<view class="search-box-right">
<image
class="scan-image"
src="/static/images/icon-scan-qrcode.png"
@click="scan" />
</view>
</view>
<view class="btn" @click="doSearch">
<text class="search-btn">搜索</text>
</view>
</view>
<view class="history">
<view
v-for="(h, index) in historyList"
:key="index"
class="history-item-wrapper">
<view class="time-and-text" @click="searchByHistory(h)">
<image class="time-image" src="/static/images/icon-time.png" />
<text class="history-text">{{ h }}</text>
</view>
<image
class="delete-image"
src="/static/images/icon-delete.png"
@click="removeHistoryItem(index)" />
</view>
<view
v-if="historyList.length == 0"
class="clear-all-wrapper"
@click="removeAllHistory">
<text class="clear-all"></text>
</view>
<view v-else class="clear-all-wrapper" @click="removeAllHistory">
<text class="clear-all">清除所有搜索记录</text>
</view>
</view>
</view>
</template>
<script>
let system = uni.getSystemInfoSync();
export default {
data() {
return {
searchContent: "",
historyList: [],
};
},
onLoad() {
this.statusBarHeight = system.statusBarHeight;
// 从本地缓存获得搜索的历史记录
let historyListJSON = uni.getStorageSync("historyList");
if (historyListJSON != null && historyListJSON != undefined) {
this.historyList = JSON.parse(historyListJSON);
}
},
methods: {
back() {
uni.navigateBack({
delta: 1,
});
},
scan() {
uni.scanCode({
success: (e) => {
let result = e.result;
let vlogId = JSON.parse(result).content;
uni.navigateTo({
url: "../vlog/vlog?vlogId=" + vlogId,
});
},
});
},
typingContent(e) {
this.searchContent = e.detail.value;
},
searchByHistory(searchContent) {
this.searchContent = searchContent;
this.doSearch();
},
doSearch() {
let me = this;
let searchContent = this.searchContent;
if (getApp().isStrEmpty(searchContent)) {
uni.showToast({
title: "搜索关键字为空!",
icon: "none",
duration: 2000,
});
this.searchContent = "";
return;
}
let tempList = this.historyList;
// 判断搜索内容是否已经存在, 如果存在, 则移除
for (let i = 0; i < tempList.length; i++) {
let old = tempList[i];
if (searchContent === old) {
tempList.splice(i, 1);
break;
}
}
tempList.unshift(searchContent);
// 如果超过10个, 则删除最后一项
if (tempList.length > 10) {
tempList.splice(10, 1);
this.historyList = tempList;
}
// 保存到本地缓存
uni.setStorageSync("historyList", JSON.stringify(this.historyList));
// 跳转页面, 把搜索条件携带过去
uni.navigateTo({
url: "searchList?search=" + searchContent,
});
},
removeHistoryItem(index) {
this.historyList.splice(index, 1);
uni.setStorageSync("historyList", JSON.stringify(this.historyList));
},
removeAllHistory() {
this.historyList = [];
uni.setStorageSync("historyList", JSON.stringify(this.historyList));
},
},
};
</script>
<style lang="scss">
.page {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: #181b27;
.big-search-wrapper {
padding: 30rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
.header-right-search {
height: 100rpx;
}
.icon-search {
width: 40rpx;
height: 40rpx;
opacity: 0.8;
align-self: center;
}
.search-box {
display: flex;
flex-direction: row;
.search-box-left {
padding: 0 10rpx;
display: flex;
flex-direction: row;
background-color: #55565e;
border-top-left-radius: 6rpx;
border-bottom-left-radius: 6rpx;
.search-image {
width: 50rpx;
height: 50rpx;
opacity: 0.8;
align-self: center;
}
}
}
.search-input {
width: 360rpx;
background-color: #55565e;
height: 60rpx;
font-size: 28rpx;
color: #ffffff;
}
.search-box-right {
padding: 0 16rpx;
display: flex;
flex-direction: row;
background-color: #55565e;
border-top-right-radius: 6rpx;
border-bottom-right-radius: 6rpx;
.scan-image {
width: 50rpx;
height: 50rpx;
opacity: 0.8;
align-self: center;
}
}
.btn {
align-self: center;
.search-btn {
color: #ffffff;
font-size: 32rpx;
align-self: center;
}
}
}
.history {
.history-item-wrapper {
padding: 16rpx 26rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
.time-and-text {
display: flex;
flex-direction: row;
width: 500rpx;
.time-image {
width: 40rpx;
height: 40rpx;
align-self: center;
}
.history-text {
color: #ffffff;
font-size: 30rpx;
align-self: center;
margin-left: 20rpx;
}
}
.delete-image {
width: 30rpx;
height: 30rpx;
opacity: 0.9;
align-self: center;
}
}
.clear-all-wrapper {
display: flex;
flex-direction: row;
justify-content: center;
margin-top: 40rpx;
.clear-all {
color: #f1f1f1;
font-size: 28rpx;
align-self: center;
}
}
}
}
</style>

260
pages/search/searchList.nvue Executable file
View File

@ -0,0 +1,260 @@
<template>
<view class="page">
<view :style="{ height: statusBarHeight + 'px' }">
<!-- 这里是状态栏, 每个页面都需要有, 目的不让页面覆盖状态栏 -->
</view>
<view class="big-search-wrapper">
<image
class="header-right-search icon-search"
src="/static/images/icon-back.png"
@click="back" />
<view class="search-box">
<view class="search-box-left">
<image
class="header-right-search search-image"
src="/static/images/icon-search.png" />
</view>
<input
type="text"
:model="searchContent"
:value="searchContent"
@input="typingContent"
placeholder="请输入内容~"
maxlength="10"
class="search-input" />
</view>
<view class="btn" @click="doSearch">
<text class="search-btn">搜索</text>
</view>
</view>
<view class="waterfall-wrapper" :style="{ height: screenHeight + 'px' }">
<waterfall
:style="{ height: screenHeight + 'px' }"
column-count="2"
column-width="auto"
column-gap="2rpx"
left-gap="4rpx"
right-gap="4rpx">
<cell v-for="(vlog, index) in waterList" :key="index">
<view class="every-single-video" @appear="appearVlog(index)">
<image
:src="vlog.cover"
mode="aspectFill"
class="half-cover"
@click="goToVlog(vlog.vlogId)" />
</view>
</cell>
</waterfall>
</view>
</view>
</template>
<script>
let system = uni.getSystemInfoSync();
let app = getApp();
export default {
data() {
return {
screenHeight: 0,
statusBarHeight: 0,
waterList: [],
page: 0,
totalPage: 0,
search: "",
searchContent: "",
};
},
onLoad(params) {
uni.showLoading({
title: "正在获取!",
});
this.statusBarHeight = system.statusBarHeight;
let screenHeight = system.safeArea.bottom;
this.screenHeight = screenHeight;
this.searchContent = params.search
// 搜索的关键字
let search = params.search;
this.search = search;
this.fetchList(0);
},
onShow() {},
methods: {
doSearch() {
let me = this;
let searchContent = this.searchContent;
if (getApp().isStrEmpty(searchContent)) {
uni.showToast({
title: "搜索为空!",
icon: "none",
duration: 2000,
});
this.searchContent = "";
return;
}
uni.navigateTo({
url: "searchList?search=" + searchContent,
});
},
typingContent(e) {
this.searchContent = e.detail.value;
},
back() {
uni.navigateBack({
delta: 1,
});
},
loadMore() {
if (this.page >= this.totalPage) {
return;
} else {
this.fetchList(this.page);
}
},
fetchList(page) {
let me = this;
page = page + 1;
let search = me.search;
let userInfo = getApp().getUserInfoSession();
let userId = "";
if (!app.isStrEmpty(userInfo)) {
userId = userInfo.id;
}
let serverUrl = app.globalData.serverUrl;
uni.request({
method: "GET",
url:
serverUrl +
"/vlog/indexList?userId=" +
userId +
"&search=" +
search +
"&page=" +
page +
"&pageSize=10",
success(result) {
if (result.data.status == 206) {
uni.hideLoading();
let waterList = result.data.data.rows;
let totalPage = result.data.data.total;
me.waterList = waterList;
me.page = page;
me.totalPage = totalPage;
if (
waterList == null ||
waterList == undefined ||
waterList.length == 0
) {
uni.showToast({
title: "没有结果~",
icon: "none",
duration: 2000,
});
setTimeout(() => {
uni.navigateBack({
delta: 1,
});
}, 1000);
}
}
},
});
},
goToVlog(vlogId) {
uni.navigateTo({
url: "../vlog/vlog?vlogId=" + vlogId,
});
},
// 每个vlog出现都会触发
appearVlog(index, e) {
let me = this;
// 如果最后一个vlog出现, 则加载更多
if (index == me.waterList.length - 1) {
me.loadMore();
}
},
},
};
</script>
<style lang="scss">
.page {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: #181b27;
.big-search-wrapper {
padding: 30rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
.header-right-search {
height: 100rpx;
}
.icon-search {
width: 40rpx;
height: 40rpx;
opacity: 0.8;
align-self: center;
}
.search-box {
display: flex;
flex-direction: row;
.search-box-left {
padding: 0 10rpx;
display: flex;
flex-direction: row;
background-color: #55565e;
border-top-left-radius: 6rpx;
border-bottom-left-radius: 6rpx;
.search-image {
width: 50rpx;
height: 50rpx;
opacity: 0.8;
align-self: center;
}
}
}
.search-input {
width: 440rpx;
background-color: #55565e;
height: 60rpx;
font-size: 28rpx;
color: #ffffff;
border-top-right-radius: 6rpx;
border-bottom-right-radius: 6rpx;
}
.btn {
align-self: center;
.search-btn {
color: #ffffff;
font-size: 32rpx;
align-self: center;
}
}
}
.waterfall-wrapper {
background-color: #181b27;
.every-single-video {
display: flex;
flex-direction: column;
margin-top: 10rpx;
.half-cover {
background-color: #000000;
height: 600rpx;
width: 365rpx;
border-top-left-radius: 10rpx;
border-top-right-radius: 10rpx;
}
}
}
}
</style>

View File

@ -1,300 +1,308 @@
<template> <template>
<div style="height: 100%"> <div style="height: 100%">
<div class="jolkp"> <div class="jolkp">
<div class="fan" :style="{ marginRight: statue == 0 ? '50%' : '50%' }"> <div
<div class="fan"
@click="hui(0)" :style="{ marginRight: statue == 0 ? '50%' : '50%' }"
:style="{ marginTop: '35px', color: '#fff' }" >
v-if="statue == 1 || 6" <div
> @click="hui(0)"
< :style="{ marginTop: '35px', color: '#fff' }"
</div> v-if="statue == 1 || 6"
</div> >
<!-- <TUIContact v-else-if="statue==1" :stu="2" /> --> <
<div </div>
@click="hui(6)" </div>
class="jolkp_z" <!-- <TUIContact v-else-if="statue==1" :stu="2" /> -->
v-if="statue == 0 || 6" <div
:style="{ marginTop: '40px' }" @click="hui(6)"
> class="jolkp_z"
<div class="tiole">{{ tole }}</div> v-if="statue == 0 || 6"
</div> :style="{ marginTop: '40px' }"
>
<div class="tiole">{{ tole }}</div>
</div>
<div <div
@click="hui(1)" @click="hui(1)"
class="jolkp_h" class="jolkp_h"
v-if="statue == 0 || 6" v-if="statue == 0 || 6"
:style="{ marginTop: '35px' }" :style="{ marginTop: '35px' }"
></div> ></div>
<div <div
@click="fnkiopl" @click="fnkiopl"
class="jolkp_l" class="jolkp_l"
:style="{ marginTop: '35px' }" :style="{ marginTop: '35px' }"
></div> ></div>
<!-- 弹出框 --> <!-- 弹出框 -->
<div v-if="isPopupVisible" class="popup" ref="popup"> <div
<ul> v-if="isPopupVisible"
<li @click="handleAddFriend">添加好友/群聊</li> class="popup"
<li @click="handleMenu()">发起群聊</li> ref="popup"
<li @click="handleScan">扫一扫</li> >
</ul> <ul>
</div> <li @click="handleAddFriend">添加好友/群聊</li>
</div> <li @click="handleMenu()">发起群聊</li>
<!-- 搜索添加 --> <li @click="handleScan">扫一扫</li>
<TUIContactsea v-if="statue == 2" @switchConversation="hui" /> </ul>
<!-- 联系人 --> </div>
<TUIContact v-else-if="statue == 1" style="height: 100%" /> </div>
<SelectFriend v-else-if="statue == 3" @con="confn" /> <!-- 搜索添加 -->
<SelectFriendqlioa v-else-if="statue == 4" @concen="concen" /> <TUIContactsea
<!-- 站内信数据 --> v-if="statue == 2"
<!-- <div > --> @switchConversation="hui"
<scroll-view />
@scrolltolower="lowerBottom" <!-- 联系人 -->
scroll-y="true" <TUIContact
v-else-if="statue == 6" v-else-if="statue == 1"
class="znx" style="height: 100%"
> />
<div <SelectFriend
@touchstart="startLongPress(item, index)" v-else-if="statue == 3"
@touchend="endLongPress(item, index)" @con="confn"
@click="torut(item)" />
v-for="(item, index) in meList" <SelectFriendqlioa
:key="item.id" v-else-if="statue == 4"
class="tui-conversation-item" @concen="concen"
> />
<div :style="{ transform: 'translateX(' + swipeStates[index] + 'px)' }"> <!-- 站内信数据 -->
{{ item.title }} <!-- <div > -->
</div> <scroll-view
<div class="content">{{ item.createTime }}</div> @scrolltolower="lowerBottom"
<div scroll-y="true"
class="delete-button" v-else-if="statue == 6"
@click="deleteMessage(index)" class="znx"
v-if="swipeStates[index] <= -50" >
> <div
删除 @touchstart="startLongPress(item, index)"
</div> @touchend="endLongPress(item, index)"
</div> @click="torut(item)"
</scroll-view> v-for="(item, index) in meList"
:key="item.id"
class="tui-conversation-item"
>
<div :style="{ transform: 'translateX(' + swipeStates[index] + 'px)' }">
{{ item.title }}
</div>
<div class="content">{{ item.createTime }}</div>
<div
class="delete-button"
@click="deleteMessage(index)"
v-if="swipeStates[index] <= -50"
>
删除
</div>
</div>
</scroll-view>
<!-- </div> --> <!-- </div> -->
<!-- 会话 --> <!-- 会话 -->
<TUIConversation style="height: 100%" v-else /> <TUIConversation
</div> style="height: 100%"
v-else
/>
</div>
</template> </template>
<script> <script>
// //
import TUIConversation from "@/TUIKit/components/TUIConversation/index"; import TUIConversation from '@/TUIKit/components/TUIConversation/index';
import TUIContact from "@/TUIKit/components/TUIContact/index"; import TUIContact from '@/TUIKit/components/TUIContact/index';
import TUIContactsea from "@/TUIKit/components/TUIContact/indexsea"; import TUIContactsea from '@/TUIKit/components/TUIContact/indexsea';
import { TUILogin } from "@tencentcloud/tui-core"; import { TUILogin } from '@tencentcloud/tui-core';
import ContactSearch from "@/TUIKit/components/TUIContact/contact-search/index.vue"; import ContactSearch from '@/TUIKit/components/TUIContact/contact-search/index.vue';
import { TUIChatKit } from "@/TUIKit"; import { TUIChatKit } from '@/TUIKit';
import SelectFriend from "@/TUIKit/components/TUIContact/select-friend/index.vue"; import SelectFriend from '@/TUIKit/components/TUIContact/select-friend/index.vue';
import SelectFriendqlioa from "@/TUIKit/components/TUIGroup/index.vue"; import SelectFriendqlioa from '@/TUIKit/components/TUIGroup/index.vue';
import TUICore, { ExtensionInfo, TUIConstants } from "@tencentcloud/tui-core"; import TUICore, { ExtensionInfo, TUIConstants } from '@tencentcloud/tui-core';
import storage from "@/utils/storage.js"; import storage from '@/utils/storage.js';
import { import { getUserimInfo, getMember, getMemberstate, getMemberdelete } from '@/api/members';
getUserimInfo,
getMember,
getMemberstate,
getMemberdelete,
} from "@/api/members";
TUIChatKit.init(); TUIChatKit.init();
let vueVersion = 2; let vueVersion = 2;
// vueVersion = 3; // vueVersion = 3;
export default { export default {
// //
components: { components: {
TUIConversation, TUIConversation,
TUIContact, TUIContact,
TUIContactsea, TUIContactsea,
ContactSearch, ContactSearch,
SelectFriend, SelectFriend,
SelectFriendqlioa, SelectFriendqlioa,
TUIChatKit, TUIChatKit
}, },
data() { data() {
return { return {
statue: 0, // 0 1 2/ 3 4 6 statue: 0, // 0 1 2/ 3 4 6
isPopupVisible: false, // isPopupVisible: false, //
isq: false, isq: false,
popupRef: null, // popupRef: null, //
meList: [], meList: [],
swipeStates: [], swipeStates: [],
startX: 0, startX: 0,
tole: 0, // tole: 0, //
cleartime: null, cleartime: null,
pageSize: 20, pageSize: 20,
pageNumber: 1, pageNumber: 1,
total: 0, total: 0,
loadMoreStatus: "more", // loadMoreStatus: 'more' //
}; };
}, },
created() {}, created() {},
onShow() { onShow() {
// //
// //
getUserimInfo() getUserimInfo()
.then(({ data }) => { .then(({ data }) => {
if (data.code == 200) { if (data.code == 200) {
const par = data.result; const par = data.result;
TUILogin.login({ TUILogin.login({
SDKAppID: par.sdkAppId, SDKAppID: par.sdkAppId,
userID: par.userID, userID: par.userID,
userSig: par.userSig, userSig: par.userSig,
useUploadPlugin: true, // If you need to send rich media messages, please set to true. useUploadPlugin: true, // If you need to send rich media messages, please set to true.
framework: `vue${vueVersion}`, // framework used vue2 / vue3 framework: `vue${vueVersion}` // framework used vue2 / vue3
}); });
} else { } else {
// 200 // 200
uni.navigateTo({ uni.navigateTo({
url: "/pages/passport/login", url: '/pages/passport/login'
}); });
} }
}) })
.catch(() => { .catch(() => {
// //
uni.navigateTo({ uni.navigateTo({
url: "/pages/passport/login", url: '/pages/passport/login'
}); });
}); });
}, },
mounted() { mounted() {
this.getMembermethod(); this.getMembermethod();
this.setTime(); this.setTime();
// //
document.addEventListener("click", (event) => document.addEventListener('click', (event) => this.handleGlobalClick(event));
this.handleGlobalClick(event) //
); },
// beforeDestroy() {
}, //
beforeDestroy() { document.removeEventListener('click', this.handleGlobalClick);
// //
document.removeEventListener("click", this.handleGlobalClick); clearTimeout(this.cleartime);
// //
clearTimeout(this.cleartime); },
// methods: {
}, lowerBottom() {
methods: { if (this.total >= this.meList.length) {
lowerBottom() { this.pageSize += 10;
if(this.total>=this.meList.length){ this.getMembermethod();
this.pageSize+=10; }
this.getMembermethod(); },
} setTime() {
}, const th = this;
setTime() { this.cleartime = setTimeout(() => {
const th = this; this.getMembermethod();
this.cleartime = setTimeout(() => { th.setTime(); //setTime10getMembermethod
this.getMembermethod(); }, 10000);
th.setTime(); //setTime10getMembermethod },
}, 10000); torut(item) {
}, // item JSON 便 URL
torut(item) { const itemJson = encodeURIComponent(JSON.stringify(item));
// item JSON 便 URL // 使 uni.navigateTo
const itemJson = encodeURIComponent(JSON.stringify(item)); uni.navigateTo({
// 使 uni.navigateTo url: `/pages/tabbar/im/details/index?item=${itemJson}`
uni.navigateTo({ });
url: `/pages/tabbar/im/details/index?item=${itemJson}`, getMemberstate({ messageId: item.messageId }).then((res) => {
}); this.getMembermethod();
getMemberstate({ messageId: item.messageId }).then((res) => { });
this.getMembermethod(); },
}); //
}, confn() {
// // this.statue = 0;
confn() { this.isPopupVisible = false;
// this.statue = 0; },
this.isPopupVisible = false; concen() {
}, this.statue = 0;
concen() { },
this.statue = 0; hui(index) {
}, this.statue = index;
hui(index) { },
this.statue = index; fnkiopl() {
}, this.isPopupVisible = !this.isPopupVisible;
fnkiopl() { this.popupRef = this.$refs.popup;
this.isPopupVisible = !this.isPopupVisible; },
this.popupRef = this.$refs.popup; handleGlobalClick(event) {
}, if (this.isPopupVisible && event.target._prevClass != 'jolkp_l') {
handleGlobalClick(event) { this.isPopupVisible = false;
if (this.isPopupVisible && event.target._prevClass != "jolkp_l") { }
this.isPopupVisible = false; },
}
}, getMembermethod() {
const param = {
getMembermethod() { pageSize: this.pageSize,
const param = { pageNumber: this.pageNumber
pageSize: this.pageSize, };
pageNumber: this.pageNumber, getMember(param).then((res) => {
}; this.total = res.data.result.total;
getMember(param).then((res) => { if (this.pageNumber === 1) {
this.total = res.data.result.total; this.meList = res.data.result.records;
if (this.pageNumber === 1) { } else {
this.meList = res.data.result.records; this.meList = this.meList.concat(res.data.result.records);
} else { }
this.meList = this.meList.concat(res.data.result.records); this.swipeStates = new Array(this.meList.length).fill(0);
} this.tole = this.meList.filter((item) => item.status === 'UN_READY').length;
this.swipeStates = new Array(this.meList.length).fill(0); });
this.tole = this.meList.filter( },
(item) => item.status === "UN_READY" handleMenu() {
).length; const fn = [...TUICore.getExtensionList(TUIConstants.TUISearch.EXTENSION.SEARCH_MORE.EXT_ID)];
const item = fn[1];
}); const {
}, listener = {
handleMenu() { onClicked: () => {}
const fn = [ }
...TUICore.getExtensionList( } = item;
TUIConstants.TUISearch.EXTENSION.SEARCH_MORE.EXT_ID listener?.onClicked?.(item);
), this.statue = 3;
]; },
const item = fn[1]; // /
const { handleAddFriend() {
listener = { this.statue = 2;
onClicked: () => {}, this.isPopupVisible = false;
}, },
} = item; handleScan() {
listener?.onClicked?.(item); this.isPopupVisible = false;
this.statue = 3; uni.scanCode({
}, success: (res) => {
// / console.log('扫码结果:', res);
handleAddFriend() { this.statue = 0;
this.statue = 2; //
this.isPopupVisible = false; },
}, fail: (err) => {
handleScan() { console.error('扫码失败:', err);
this.isPopupVisible = false; this.statue = 0;
uni.scanCode({ }
success: (res) => { });
console.log("扫码结果:", res); },
this.statue=0 startLongPress(item, index) {
// this.longPressTimer = setTimeout(() => {
}, uni.showModal({
fail: (err) => { title: '确认删除',
console.error("扫码失败:", err); content: '确定要删除这条消息吗?',
this.statue=0 success: (res) => {
}, if (res.confirm) {
}); getMemberdelete({ messageId: item.messageId }).then((res) => {
}, this.getMembermethod();
startLongPress(item, index) { });
this.longPressTimer = setTimeout(() => { }
uni.showModal({ }
title: "确认删除", });
content: "确定要删除这条消息吗?", }, 2000);
success: (res) => { },
if (res.confirm) { endLongPress() {
getMemberdelete({ messageId: item.messageId }).then((res) => { clearTimeout(this.longPressTimer);
this.getMembermethod(); }
}); }
}
},
});
}, 2000);
},
endLongPress() {
clearTimeout(this.longPressTimer);
},
},
}; };
</script> </script>
@ -303,199 +311,199 @@ uni-page-body,
html, html,
body, body,
page { page {
width: 100% !important; width: 100% !important;
height: 100% !important; height: 100% !important;
overflow: hidden; overflow: hidden;
} }
.jolkp { .jolkp {
height: 66px; height: 66px;
display: flex; display: flex;
font-size: 15px; font-size: 15px;
justify-content: end; justify-content: end;
/* 设置背景图 */ /* 设置背景图 */
background-image: url("@/static/im/Rectangle.png"); background-image: url('@/static/im/Rectangle.png');
/* 让背景图覆盖整个元素 */ /* 让背景图覆盖整个元素 */
background-size: cover; background-size: cover;
/* 背景图不重复 */ /* 背景图不重复 */
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.jolkp_l { .jolkp_l {
width: 2rem; width: 2rem;
height: 2rem; height: 2rem;
background-image: url("@/static/im/Frame.png"); background-image: url('@/static/im/Frame.png');
/* 让背景图覆盖整个元素 */ /* 让背景图覆盖整个元素 */
background-size: cover; background-size: cover;
/* 背景图不重复 */ /* 背景图不重复 */
background-repeat: no-repeat; background-repeat: no-repeat;
margin-top: 35px; margin-top: 35px;
margin-right: 10px; margin-right: 10px;
} }
.jolkp_h { .jolkp_h {
width: 2rem; width: 2rem;
height: 2rem; height: 2rem;
background-image: url("@/static/im/user.png"); background-image: url('@/static/im/user.png');
/* 让背景图覆盖整个元素 */ /* 让背景图覆盖整个元素 */
background-size: cover; background-size: cover;
/* 背景图不重复 */ /* 背景图不重复 */
background-repeat: no-repeat; background-repeat: no-repeat;
margin-top: 35px; margin-top: 35px;
margin-right: 20px; margin-right: 20px;
} }
.jolkp_z { .jolkp_z {
width: 2rem; width: 2rem;
height: 1.5rem; height: 1.5rem;
background-image: url("@/static/im/znx.png"); background-image: url('@/static/im/znx.png');
/* 让背景图覆盖整个元素 */ /* 让背景图覆盖整个元素 */
background-size: cover; background-size: cover;
/* 背景图不重复 */ /* 背景图不重复 */
background-size: 100% 100%; background-size: 100% 100%;
margin-top: 35px; margin-top: 35px;
margin-right: 20px; margin-right: 20px;
} }
.tiole { .tiole {
margin-top: -10px; margin-top: -10px;
margin-left: 105%; margin-left: 105%;
color: #fff; color: #fff;
font-size: 14px; font-size: 14px;
} }
.popup { .popup {
position: absolute; position: absolute;
top: 65px; top: 65px;
/* 调整弹出框的位置 */ /* 调整弹出框的位置 */
right: 5px; right: 5px;
background-color: #fff; background-color: #fff;
border: 1px solid #ccc; border: 1px solid #ccc;
border-radius: 4px; border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
z-index: 3; z-index: 3;
} }
.popup ul { .popup ul {
list-style-type: none; list-style-type: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
.popup li { .popup li {
padding: 10px 20px; padding: 10px 20px;
cursor: pointer; cursor: pointer;
} }
.popup li:hover { .popup li:hover {
background-color: #f0f0f0; background-color: #f0f0f0;
} }
.fan { .fan {
width: 10%; width: 10%;
height: "100%"; height: '100%';
font-size: 18px; font-size: 18px;
display: flex; display: flex;
padding: 5px; padding: 5px;
} }
@media screen and (device-width: 393px) and (device-height: 851px) and (-webkit-device-pixel-ratio: 3) { @media screen and (device-width: 393px) and (device-height: 851px) and (-webkit-device-pixel-ratio: 3) {
.fan { .fan {
margin-right: 56% !important; margin-right: 56% !important;
width: 10%; width: 10%;
height: "100%"; height: '100%';
font-size: 18px; font-size: 18px;
display: flex; display: flex;
margin-top: 85%; margin-top: 85%;
padding: 5px; padding: 5px;
} }
} }
.three { .three {
width: 100%; width: 100%;
height: 10%; height: 10%;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
background: rgb(255, 255, 255); background: rgb(255, 255, 255);
} }
.con { .con {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.three_div1 { .three_div1 {
height: 3rem; height: 3rem;
width: 40%; width: 40%;
background-image: url("@/static/im/kf.png"); background-image: url('@/static/im/kf.png');
background-size: 100% 100%; background-size: 100% 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: end; justify-content: end;
} }
.three_div2 { .three_div2 {
width: 40%; width: 40%;
height: 3rem; height: 3rem;
background-image: url("@/static/im/hy.png"); background-image: url('@/static/im/hy.png');
background-size: 100% 100%; background-size: 100% 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
width: 40%; width: 40%;
} }
.three_div3 { .three_div3 {
height: 3rem; height: 3rem;
background-image: url("@/static/im/da.png"); background-image: url('@/static/im/da.png');
background-size: 100% 100%; background-size: 100% 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
width: 40%; width: 40%;
} }
.tui-conversation-item { .tui-conversation-item {
/* height: 10%; */ /* height: 10%; */
padding: 12px; padding: 12px;
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
box-sizing: border-box; box-sizing: border-box;
overflow: hidden; overflow: hidden;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
width: 98%; width: 98%;
margin-top: 10px; margin-top: 10px;
position: relative; position: relative;
} }
.content { .content {
display: flex; display: flex;
flex: 1; flex: 1;
padding-left: 8px; padding-left: 8px;
justify-content: end; justify-content: end;
box-sizing: border-box; box-sizing: border-box;
overflow: hidden; overflow: hidden;
} }
.left { .left {
position: relative; position: relative;
width: 36px; width: 36px;
height: 36px; height: 36px;
} }
.znx { .znx {
max-height: 100vh; max-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
overflow-y: auto; overflow-y: auto;
} }
.delete-button { .delete-button {
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
width: 100px; width: 100px;
background-color: red; background-color: red;
color: white; color: white;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
} }
</style> </style>

File diff suppressed because it is too large Load Diff

BIN
static/images/playvd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -10,7 +10,13 @@ const FACE_LOGIN = isDev ? "face_login_dev" : "face_login";
const FINGER_LOGIN = isDev ? "finger_login_dev" : "finger_login"; const FINGER_LOGIN = isDev ? "finger_login_dev" : "finger_login";
const CART_BACKBTN = isDev ? "cart_backbtn_dev" : "cart_backbtn"; const CART_BACKBTN = isDev ? "cart_backbtn_dev" : "cart_backbtn";
const AFTERSALE_DATA = isDev ? "aftersale_data_dev" : "aftersale_data"; const AFTERSALE_DATA = isDev ? "aftersale_data_dev" : "aftersale_data";
export default { export default {
setCityCode(val) {
return uni.setStorageSync('cityCode',val)
},
getCityCode(){
return uni.getStorageSync('cityCode')
},
/** /**
* 写入RefreshVlogIndex * 写入RefreshVlogIndex
*/ */

View File

@ -1,12 +1,12 @@
const ScriptSetup = require('unplugin-vue2-script-setup/webpack').default; // const ScriptSetup = require('unplugin-vue2-script-setup/webpack').default;
module.exports = { module.exports = {
parallel: false, parallel: false,
configureWebpack: { configureWebpack: {
plugins: [ plugins: [
ScriptSetup({ // ScriptSetup({
/* options */ // /* options */
}), // }),
], ],
}, },
chainWebpack(config) { chainWebpack(config) {