合并代码

This commit is contained in:
sx 2025-02-03 20:36:02 +08:00
parent 407f3b0a0f
commit 933dc40ea2
18 changed files with 220 additions and 134 deletions

View File

@ -47,7 +47,6 @@ const login = {
return util.request({ return util.request({
url: '/user/login/resetPassword', url: '/user/login/resetPassword',
data: param.data, data: param.data,
path: param.path,
method: 'POST', method: 'POST',
}) })
}, },

View File

@ -52,7 +52,23 @@ const mine = {
}) })
}, },
// 实名认证 /**
* 验证盖章后是否实名
* @param {Object} param
*/
isCertification(param) {
return util.request({
url: `/user/isCertification`,
query: param.query,
method: 'POST',
load: true,
})
},
/**
* 实名认证
* @param {Object} param
*/
certification(param) { certification(param) {
return util.request({ return util.request({
url: `/user/info/certification`, url: `/user/info/certification`,

View File

@ -13,6 +13,7 @@ const shop = {
method: 'GET', method: 'GET',
}) })
}, },
/** /**
* 商家缴纳押金 * 商家缴纳押金
* @param {Object} param * @param {Object} param
@ -20,6 +21,7 @@ const shop = {
depositsPay(param) { depositsPay(param) {
return util.request({ return util.request({
url: `/shopify/appDeposits/depositsPay`, url: `/shopify/appDeposits/depositsPay`,
load: true,
method: 'POST', method: 'POST',
}) })
}, },
@ -65,6 +67,7 @@ const shop = {
outDepositsPay(param) { outDepositsPay(param) {
return util.request({ return util.request({
url: `/shopify/appDeposits/outDepositsPay`, url: `/shopify/appDeposits/outDepositsPay`,
load: true,
method: 'POST', method: 'POST',
}) })
}, },

View File

@ -5,18 +5,19 @@ const config = {
host: 'http://localhost:5173', host: 'http://localhost:5173',
// #endif // #endif
// #ifndef H5 // #ifndef H5
host: 'http://91f.xyz:8080', // host: 'http://91f.xyz:8080',
// host: 'http://6jv6aq.natappfree.cc ', // host: 'http://192.168.31.61:8080',
host: 'http://192.168.31.41:8080',
// #endif // #endif
// 支付方式配置 // 支付方式配置
payType: { payType: {
score: { score: {
name: '积分', name: '积分',
img: '/static/score.png', icon: '/static/score.png',
}, },
balance: { balance: {
name: '余额', name: '余额',
img: '/static/balance.png', icon: '/static/balance.png',
}, },
}, },
// 腾讯im聊天 // 腾讯im聊天

View File

@ -1477,9 +1477,7 @@ const util = {
reslove(rs.data) reslove(rs.data)
const userinfo = rs.data const userinfo = rs.data
// 如果开启了青少年模式 // 如果开启了青少年模式
if (userinfo.teenTime) { if (userinfo.teenTime) getTeenMode(userinfo.teenTime)
// 青少年模式验证 如果到了限制去锁定页
}
// 提交 // 提交
store.commit('setState', { store.commit('setState', {
key: 'userinfo', key: 'userinfo',
@ -1496,6 +1494,31 @@ const util = {
}) })
}, },
// 青少年模式
getTeenMode(teenTime) {
// 当前时间
const currentDate = new Date()
// 当前小时
const currentHour = currentDate.getHours()
// 大于八点 小于22点 当前时间小于设定时间
const result = currentHour >= 8 && currentHour < 22 && currentDate.valueOf() < new Date(teenTime).valueOf()
// 锁定
function lock() {
uni.reLaunch({
url: '/pages/login/lock'
})
}
// 结果
if (result) {
// 设置定时器
setTimeout(() => {
lock()
}, parseInt(new Date(teenTime).valueOf() - currentDate.valueOf()))
} else lock()
},
/** /**
* 验证登录 * 验证登录
* @param {Object} cb 回调函数 * @param {Object} cb 回调函数
@ -1556,7 +1579,7 @@ const util = {
// 验证登录 // 验证登录
util.isLogin(() => { util.isLogin(() => {
const userinfo = uni.$store.state.userinfo const userinfo = uni.$store.state.userinfo
if (userinfo.userIdCard) { if (userinfo.isRealName) {
param.success ? param.success(userinfo) : '' param.success ? param.success(userinfo) : ''
return return
} }

View File

@ -120,9 +120,10 @@
}, },
}).then(rs => { }).then(rs => {
if (rs.code == 200) { if (rs.code == 200) {
detail.value.isCollect = false uni.$emit('updateVideo', {
detail.value.collect-- ...detail.value,
uni.$emit('updateVideo', detail.value) ...rs.data,
})
// //
collectResult.value = false collectResult.value = false
proxy.$refs.result.open() proxy.$refs.result.open()

View File

@ -140,15 +140,16 @@
// id // id
videoId: detail.value.id, videoId: detail.value.id,
// id // id
collectId: item.id, folderId: item.id,
} }
}).then(rs => { }).then(rs => {
if (rs.code == 200) { if (rs.code == 200) {
proxy.$refs.fastCollect.close() proxy.$refs.fastCollect.close()
detail.value.isCollect = true uni.$emit('updateVideo', {
detail.value.collect++ ...detail.value,
uni.$emit('updateVideo', detail.value) ...rs.data,
})
return return
} }
// //

View File

@ -170,9 +170,6 @@
// //
tapTimer.value = setTimeout(() => { tapTimer.value = setTimeout(() => {
//
const isLike = props.item.isLike
let a = tapList.length let a = tapList.length
tapList.length = 0 tapList.length = 0
@ -185,7 +182,7 @@
emit('like', { emit('like', {
likeType: 0, likeType: 0,
index: props.index, index: props.index,
isLike: isLike == 0 ? 0 : 1 isLike: props.item.isLike
}) })
break; break;
case 3: case 3:
@ -193,7 +190,7 @@
emit('like', { emit('like', {
likeType: 1, likeType: 1,
index: props.index, index: props.index,
isLike: isLike == 0 ? 3 : 1 isLike: props.item.isLike
}) })
break; break;
} }
@ -558,9 +555,14 @@
@click="handleLike(index, 0, 0)" @longpress="handlePrivateLike(index)" /> @click="handleLike(index, 0, 0)" @longpress="handlePrivateLike(index)" />
</template> </template>
</view> </view>
<view class="txt mt10">
<!-- 只有公开赞显示点赞数 -->
<view class="txt mt10" v-if="item.isLike && item.likeType == 0">
<text class="text">{{ item.likeCount }}</text> <text class="text">{{ item.likeCount }}</text>
</view> </view>
<view class="txt mt10" v-else>
<text class="text">点赞</text>
</view>
</view> </view>
</view> </view>
@ -581,7 +583,8 @@
v-if="item.isCollect" /> v-if="item.isCollect" />
<image class="wh50" src="@/static/indexCollect.png" mode="aspectFit" v-else /> <image class="wh50" src="@/static/indexCollect.png" mode="aspectFit" v-else />
<view class="txt mt10"> <view class="txt mt10">
<text class="text">{{ item.collectCount }}</text> <text class="text">收藏</text>
<!-- <text class="text">{{ item.collectCount }}</text> -->
</view> </view>
</view> </view>
</view> </view>

View File

@ -24,7 +24,7 @@
<template> <template>
<view class="pwd rows mt50 ptb10 plr30"> <view class="pwd rows mt50 ptb10 plr30">
<view class="item fmid" v-for="(item,index) in 6" :key="index"> <view class="item fmid" v-for="(item,index) in 6" :key="index">
<text v-if="modelValue[index] != null">{{modelValue[index]}}</text> <text v-if="modelValue[index] != null"></text>
</view> </view>
</view> </view>
</template> </template>

View File

@ -689,33 +689,29 @@
} }
}, },
{ {
"path" : "pages/shop/commodity/history", "path": "pages/shop/commodity/history",
"style" : "style": {
{ "navigationBarTitleText": "商品修改历史"
"navigationBarTitleText" : "商品修改历史"
} }
}, },
{ {
"path" : "pages/shop/store/order", "path": "pages/shop/store/order",
"style" : "style": {
{ "navigationBarTitleText": "商家订单",
"navigationBarTitleText" : "商家订单",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{ {
"path" : "pages/mine/setting/sequence", "path": "pages/mine/setting/sequence",
"style" : "style": {
{ "navigationBarTitleText": "支付顺序",
"navigationBarTitleText" : "支付顺序",
"navigationBarBackgroundColor": "#fff" "navigationBarBackgroundColor": "#fff"
} }
}, },
{ {
"path" : "pages/shop/commodity/payment", "path": "pages/shop/commodity/payment",
"style" : "style": {
{ "navigationBarTitleText": "继续付款",
"navigationBarTitleText" : "继续付款",
"navigationBarBackgroundColor": "#fff" "navigationBarBackgroundColor": "#fff"
} }
}, },

View File

@ -211,6 +211,7 @@
}) })
onHide(() => { onHide(() => {
console.log('onHide', current[tabIndex.value], currentVideoRef)
// 暂停视频 // 暂停视频
if (proxy.$refs[`videoRef${tabIndex.value}`]) { if (proxy.$refs[`videoRef${tabIndex.value}`]) {
proxy.$refs[`videoRef${tabIndex.value}`][current[tabIndex.value]].pause() proxy.$refs[`videoRef${tabIndex.value}`][current[tabIndex.value]].pause()
@ -721,19 +722,20 @@
@touchend="onTouchend($event,index)" @loadmore="item.getMoreList"> @touchend="onTouchend($event,index)" @loadmore="item.getMoreList">
<cell class="cell" :style="[{height: viewSize.height + 'px'}]" :ref="`cellRef` + index" <cell class="cell" :style="[{height: viewSize.height + 'px'}]" :ref="`cellRef` + index"
v-for="(secItem,secIndex) in item.listData()" :key="secItem.id" @click.stop> v-for="(secItem,secIndex) in item.listData()" :key="secItem.id" @click.stop>
<template v-if="current[tabIndex] < secIndex + 2 && current[tabIndex] > secIndex - 2"> <!-- <template v-if="current[tabIndex] < secIndex + 2 && current[tabIndex] > secIndex - 2"> -->
<view class="pa t0 l0 r0 b0 fmid" :style="{zIndex: 99,}"> <view class="pa t0 l0 r0 b0 fmid" :style="{zIndex: 99,}">
<text class="f32 cfff">{{current[tabIndex]}}</text> <text class="f32 cfff">{{current[tabIndex]}}</text>
<text class="f32 cfff">{{index}}</text> <text class="f32 cfff">{{index}}</text>
</view> </view>
<!-- 视频 -->
<indexVideo :ref="'videoRef' + index" :tabIndex="index" :current="current[tabIndex]" <!-- 视频 -->
:width="viewSize.width" :height="viewSize.height" :item="secItem" :index="secIndex" <indexVideo :ref="'videoRef' + index" :tabIndex="index" :current="current[tabIndex]"
@showTime="handleShowTime" @showComment="handleShowCommentAlt" :width="viewSize.width" :height="viewSize.height" :item="secItem" :index="secIndex"
@showCollect="handleShowCollectAlt" @showShareFirend="handleShowShareFirend" @showTime="handleShowTime" @showComment="handleShowCommentAlt"
@onPlay="handleVideoOnPlay" @onPause="handleVideoOnPause" @like="videoLike" @showCollect="handleShowCollectAlt" @showShareFirend="handleShowShareFirend"
@longtap="$refs.moreMenuRef.open(secItem)" @showFastCollect="handleShowFastCollect" /> @onPlay="handleVideoOnPlay" @onPause="handleVideoOnPause" @like="videoLike"
</template> @longtap="$refs.moreMenuRef.open(secItem)" @showFastCollect="handleShowFastCollect" />
<!-- </template> -->
</cell> </cell>
</list> </list>
</view> </view>

View File

@ -14,54 +14,59 @@
import notice from '@/components/login/notice' import notice from '@/components/login/notice'
// api // api
import api from '@/api/index' import api from '@/api/index'
//
import CryptoJS from 'crypto-js';
// //
const form = reactive({ const form = reactive({
// imei // imei
userImei: '', userImei: '',
// //
userPhone: '', phoneNumber: '',
// //
userPassword: '', password: '',
//
verifyCode: '',
}) })
// //
const rePwd = ref('') const rePwd = ref('')
//
const cache = ref('')
// //
const read = ref(false) const read = ref(false)
// //
function handleLogin() { function handleLogin() {
const data = {
...form
}
// //
if (!form.userPhone) { if (!data.phoneNumber) {
util.alert('请输入手机号') util.alert('请输入手机号')
return return
} }
if (!cache.value) { if (!data.verifyCode) {
util.alert('请输入验证码') util.alert('请输入验证码')
return return
} }
if (!form.userPassword) { if (!data.password) {
util.alert('请输入密码') util.alert('请输入密码')
return return
} }
if (form.userPassword !== rePwd.value) { if (data.password !== rePwd.value) {
util.alert('两次输入密码不一致') util.alert('两次输入密码不一致')
return return
} }
data.password = CryptoJS.MD5(data.password).toString()
// imei // imei
if (!form.userImei) { if (!data.userImei) {
const info = uni.getSystemInfoSync() const info = uni.getSystemInfoSync()
// //
form.userImei = info.deviceId data.userImei = info.deviceId
} }
// //
api.login.resetPassword({ api.login.resetPassword({
data: form, data,
path: [cache.value],
}).then(rs => { }).then(rs => {
if (rs.code == 200) { if (rs.code == 200) {
util.alert({ util.alert({
@ -94,19 +99,19 @@
<view class="title mtb30">忘记密码</view> <view class="title mtb30">忘记密码</view>
<view class="inputBox mtb30 ptb10 plr30"> <view class="inputBox mtb30 ptb10 plr30">
<input type="text" v-model="form.userPhone" placeholder="请输入手机号" /> <input type="text" v-model="form.phoneNumber" placeholder="请输入手机号" />
</view> </view>
<view class="inputBox rows mtb30 ptb10 plr30"> <view class="inputBox rows mtb30 ptb10 plr30">
<input type="text" v-model="cache" placeholder="请输入验证码" class="f1" /> <input type="text" v-model="form.verifyCode" placeholder="请输入验证码" class="f1" />
<view class="getCode btn sm plr20"> <view class="getCode btn sm plr20">
<getCode event="reset_password" :phone="form.userPhone" /> <getCode event="reset_password" :phone="form.phoneNumber" />
</view> </view>
</view> </view>
<view class="inputBox mtb30 ptb10 plr30"> <view class="inputBox mtb30 ptb10 plr30">
<input type="text" v-model="form.userPassword" placeholder="请输入密码" /> <input type="text" v-model="form.password" placeholder="请输入密码" />
</view> </view>
<view class="inputBox mtb30 ptb10 plr30"> <view class="inputBox mtb30 ptb10 plr30">

View File

@ -43,32 +43,51 @@
}) })
// //
const format_idCard = computed(() => { const format_idCard = computed(() => {
let result = userinfo.value.idCard || '' let result = userinfo.value.userIdCard || ''
if (result) result = result.slice(0, 1) + '*'.repeat(userinfo.value.idCard.length - 2) + result.slice(- if (result) result = result.slice(0, 1) + '*'.repeat(userinfo.value.userIdCard.length - 2) + result.slice(-
1) 1)
return result return result
}) })
// //
function startLive() { function startLive() {
// //
liveModule.startLive({ if (!form.idCard) {
openSound: true, util.alert('身份证号不能为空')
signKey: 'HISP1YFG44LQ29W0', return
}, }
result => {
console.log('startLive', result) api.mine.isCertification({
if (result.errorCode == 0) { query: {
faceImage.value = result.liveImage userIdCard: form.idCard
} else if (result.errorCode == 1 && result.errorMessage == '活体检测未通过') { }
util.alert({ }).then(rs => {
title: '系统提示', if (rs.code === 200) {
content: '检测失败请重试', //
showCancel: false liveModule.startLive({
openSound: true,
signKey: 'HISP1YFG44LQ29W0',
},
result => {
console.log('startLive', result)
if (result.errorCode == 0) {
faceImage.value = result.liveImage
} else if (result.errorCode == 1 && result.errorMessage == '活体检测未通过') {
util.alert({
title: '系统提示',
content: '检测失败请重试',
showCancel: false
})
}
// this.resultText = result.errorMessage;
}) })
} return
// this.resultText = result.errorMessage; }
util.alert({
content: rs.msg,
showCancel: false,
}) })
})
} }
// //
@ -125,7 +144,7 @@
<image class="authImg" src="/static/mineAuth.png" mode="aspectFill" /> <image class="authImg" src="/static/mineAuth.png" mode="aspectFill" />
<view class="mt30 tac c666 f30"> <view class="mt30 tac c666 f30">
<view class="">{{userinfo.name}}</view> <view class="">{{userinfo.userRealName}}</view>
<view class="mt50">{{format_idCard}}</view> <view class="mt50">{{format_idCard}}</view>
</view> </view>
</view> </view>
@ -186,7 +205,7 @@
.key { .key {
width: 200rpx; width: 200rpx;
} }
.value { .value {
flex: 1; flex: 1;
font-size: 28rpx; font-size: 28rpx;

View File

@ -33,7 +33,7 @@
rePwd: '', rePwd: '',
}) })
// //
const formKey = reactive('pwd') const formKey = ref('pwd')
// //
const userinfo = computed(() => { const userinfo = computed(() => {
let result = store.state.userinfo let result = store.state.userinfo
@ -56,6 +56,7 @@
util.alert('二级密码不能为空') util.alert('二级密码不能为空')
} }
mode.value = 'rePwd' mode.value = 'rePwd'
formKey.value = 'rePwd'
} }
// //
@ -76,6 +77,10 @@
content: '两次输入密码不一致', content: '两次输入密码不一致',
showCancel: false showCancel: false
}) })
//
form.pwd = ''
form.rePwd = ''
mode.value = 'set' mode.value = 'set'
return return
} }
@ -139,14 +144,14 @@
* @param {Object} val * @param {Object} val
*/ */
function KeyInfo(val) { function KeyInfo(val) {
//
if (form[formKey.value].length >= 6) return
// //
if (val.keyCode === 8) { if (val.keyCode === 8) {
// //
form[formKey.value] = form[formKey.value].slice(0, -1) form[formKey.value] = form[formKey.value].slice(0, -1)
// passwordArr.splice(val.index + 1, 1) return
} }
//
if (form[formKey.value].length >= 6) return
// . // .
else if (val.keyCode == 190) { else if (val.keyCode == 190) {
// . // .
@ -167,7 +172,7 @@
<codeInput v-model:modelValue="form.pwd" /> <codeInput v-model:modelValue="form.pwd" />
</view> </view>
<view class="btn lg black mtb50 plr50" @click="handleSubmit">下一步</view> <view class="btn lg black mtb50 plr50" @click="handleNext">下一步</view>
</view> </view>
<view class="container ver mt10p" v-if="mode === 'rePwd'"> <view class="container ver mt10p" v-if="mode === 'rePwd'">
@ -175,7 +180,7 @@
<view class="content mt50 c666 f32">请再次输入刚才设置的二级密码</view> <view class="content mt50 c666 f32">请再次输入刚才设置的二级密码</view>
<view class="pwd"> <view class="pwd">
<codeInput v-model:modelValue="form.repwd" /> <codeInput v-model:modelValue="form.rePwd" />
</view> </view>
<view class="btn lg black mtb50 plr50" @click="handleSubmit">确认</view> <view class="btn lg black mtb50 plr50" @click="handleSubmit">确认</view>
@ -192,6 +197,7 @@
</view> </view>
</view> </view>
<!-- 安全键盘 -->
<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo" /> <cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo" />
</template> </template>

View File

@ -1,17 +1,5 @@
<template>
<view class="app">
<!-- 提示 -->
<view class="title mtb30 mlr30 c333 f32 b">按住图标拖动</view>
<!-- 拖拽 -->
<HM-dragSorts ref="dragSorts" :list="list" :listHeight="90" />
<view class="footer plr30 bfff shadow">
<view class="btn lg black" @click="handleSubmit">保存</view>
</view>
</view>
</template>
<script setup> <script setup>
//
import { import {
onMounted, onMounted,
ref ref
@ -35,10 +23,8 @@
if (res.code == 200) { if (res.code == 200) {
// //
list.value = res.data.map(node => { list.value = res.data.map(node => {
node.name = { node.icon = util.config.payType[node.paymentMethod].icon
'balance': '余额', node.name = util.config.payType[node.paymentMethod].name
'score': '积分',
} [node.paymentMethod]
return node return node
}) })
return return
@ -72,6 +58,19 @@
} }
</script> </script>
<template>
<view class="app">
<!-- 提示 -->
<view class="title mtb30 mlr30 c333 f32 b">按住图标拖动</view>
<!-- 拖拽 -->
<HM-dragSorts ref="dragSorts" :list="list" :listHeight="90" />
<view class="footer plr30 bfff shadow">
<view class="btn lg black" @click="handleSubmit">保存</view>
</view>
</view>
</template>
<style lang="scss" scoped> <style lang="scss" scoped>
// //
</style> </style>

View File

@ -65,7 +65,7 @@
onReady(() => { onReady(() => {
// //
callPwd('depositsPay') // callPwd('depositsPay')
}) })
// //
@ -354,14 +354,19 @@
* @param {Object} key 后续方法key * @param {Object} key 后续方法key
*/ */
function callPwd(key) { function callPwd(key) {
pwdCb.value = { util.isAuth({
// success: () => {
'depositsPay': depositsPay, pwdCb.value = {
// 退 //
'outDepositsPay': outDepositsPay, 'depositsPay': depositsPay,
} [key] // 退
// 'outDepositsPay': outDepositsPay,
proxy.$refs.payPwdRef.open() } [key]
console.log('pwdCb', pwdCb.value)
//
proxy.$refs.payPwdRef.open()
}
})
} }
// //
@ -389,7 +394,7 @@
<view class="footer plr30 bfff shadow"> <view class="footer plr30 bfff shadow">
<!-- 未缴纳押金 --> <!-- 未缴纳押金 -->
<template v-if="mode.code == 0"> <template v-if="mode.code == 0">
<view class="btn black" @click="$refs.payPwdRef.open()">缴纳押金</view> <view class="btn black" @click="callPwd('depositsPay')">缴纳押金</view>
</template> </template>
<template v-else> <template v-else>
<view class="rows"> <view class="rows">

View File

@ -100,7 +100,7 @@ npm install crypto-js --save-dev
短信宝 短信宝
https://console.smsbao.com/#/general/log/mt https://console.smsbao.com/#/general/log/mt
bcmeta bcmeta
3216547@A 3216547@A91a
证书网址 证书网址
@ -124,14 +124,6 @@ https://mastergo.com/goto/DPd3TfDa?page_id=M&file=140247496805863
HelloWorld123! HelloWorld123!
设计文档
https://docs.qq.com/sheet/DWVJQeUdnTVR2a0xp?tab=BB08J2
测试推荐码
exercita
UAZTMZ
bilibili扒视频网站 bilibili扒视频网站
https://snapany.com/zh/bilibili https://snapany.com/zh/bilibili
@ -424,4 +416,18 @@ likeType
商品评论 商品评论
点赞
收藏
青少年模式
闹钟
有效读秒
任务读秒
商品上传
购买流程
商家和会员之间进行沟通
购买卷轴榴莲果树释放
榴莲果兑换展播量
评论集合 查看他人评论消耗榴莲果

View File

@ -4,8 +4,9 @@ import {
import uni from '@dcloudio/vite-plugin-uni'; import uni from '@dcloudio/vite-plugin-uni';
// //
let target = 'http://91f.xyz:8080' // let target = 'http://91f.xyz:8080'
// let target = 'http://6jv6aq.natappfree.cc ' // let target = 'http://192.168.31.41:8080'
let target = 'http://192.168.31.61:8080'
export default defineConfig({ export default defineConfig({
plugins: [uni()], plugins: [uni()],