wx-starlock/pages/setting/notOpenDoor.vue

215 lines
6.0 KiB
Vue
Raw Normal View History

2025-02-25 15:07:52 +08:00
<template>
<view>
<view class="text-sm h-80rpx py-3 mx-4">
经过以上设定的时间锁没有被开启系统会给指定对象发送提醒消息该功能需要锁联网
</view>
<view class="bg-white mx-4 rounded-md mt-4 text-base">
<view class="flex items-center p-3">
<view>N天未开门提醒</view>
<switch
@click="changeCheck()"
:checked="check"
class="transform-scale-90 ml-a"
:disabled="true"
color="#002ce5"
/>
</view>
<view
v-if="check"
@click="show = true"
class="flex items-center p-3 border-t-1 border-t-solid border-t-gray-200"
>
<view>未开门时间</view>
<view class="ml-a"> {{ value }} </view>
<view class="ml-2"><up-icon name="arrow-right"></up-icon></view>
</view>
</view>
<view v-if="check" class="bg-white mx-4 rounded-md mt-4 text-base" @click="toNoticeWay">
<view class="flex items-center p-3">
<view>提醒方式</view>
<view class="ml-a"><up-icon name="arrow-right"></up-icon></view>
</view>
<view class="pb-4">
<view class="flex items-center bg-#f4f4f4 mx-4 py-1 px-2 rounded-md">
<view>APP推送</view>
<view class="text-gray-500 ml-a">管理员</view>
</view>
<view v-for="(list, index) in dayNotOpenDoorNoticeWayList" :key="index">
<view
v-if="list.accounts.length > 0"
class="flex items-center bg-#f4f4f4 mx-4 py-1 px-2 rounded-md mt-4"
>
<view>{{ list.type === 'mail' ? '邮件提醒' : '短信提醒' }}</view>
<view class="text-sm ml-a text-right">
<view
class="text-gray-500"
v-for="(item, ListIndex) in list.accounts"
:key="ListIndex"
>
{{ item.account }}
</view>
</view>
</view>
</view>
</view>
</view>
<view
@click="update"
2025-07-29 11:07:43 +08:00
class="pos-fixed bg-#4777ee bottom-[calc(env(safe-area-inset-bottom)+48rpx)] w-686 mx-4 h-88 line-height-88rpx text-center text-white rounded-3xl"
2025-02-25 15:07:52 +08:00
>保存
</view>
<up-picker
:show="show"
:columns="columns"
:visibleItemCount="5"
:defaultIndex="[value - 1]"
@close="show = false"
@cancel="show = false"
@confirm="changeValue"
></up-picker>
</view>
</template>
<script setup>
import { onShow } from '@dcloudio/uni-app'
import { onMounted, ref } from 'vue'
import { useBluetoothStore } from '@/stores/bluetooth'
import { useBasicStore } from '@/stores/basic'
import { updateLockNoticeSettingRequest } from '@/api/setting'
import { useUserStore } from '@/stores/user'
const $bluetooth = useBluetoothStore()
const $basic = useBasicStore()
const $user = useUserStore()
const check = ref(false)
const value = ref(0)
const dayNotOpenDoorNoticeWayList = ref([])
const show = ref(false)
const pending = ref(false)
const columns = ref([[]])
const flag = ref(false)
onShow(() => {
if (flag.value) {
$user.getUserInfo()
flag.value = false
}
})
onMounted(() => {
columns.value = [
Array.from({ length: 15 }, (_, i) => ({
text: `${i + 1}`,
value: i + 1
}))
]
check.value = $bluetooth.currentLockNoticeSetting.dayNotOpenDoorState === 1
value.value =
$bluetooth.currentLockNoticeSetting.dayNotOpenDoorValue === 0
? 3
: $bluetooth.currentLockNoticeSetting.dayNotOpenDoorValue
dayNotOpenDoorNoticeWayList.value =
$bluetooth.currentLockNoticeSetting.dayNotOpenDoorNoticeWayList
})
const changeValue = e => {
value.value = columns.value[0][e.indexs[0]].value
show.value = false
}
const update = async () => {
if (pending.value) return
if ($user.userInfo.isVip === 0) {
uni.showModal({
title: '提示',
content: '该功能是高级功能,请开通后在使用',
confirmText: '去开通',
success: async res => {
if (res.confirm) {
const { code, data, message } = await $user.getWebUrl()
if (code === 0) {
$basic.routeJump({
name: 'webview',
params: {
url: encodeURIComponent(data.vip_buy_url)
}
})
flag.value = true
} else {
uni.showToast({
title: message,
icon: 'none'
})
}
}
}
})
return
}
pending.value = true
uni.showLoading({
title: '更新中'
})
const data = {
lockId: $bluetooth.currentLockInfo.lockId,
dayNotOpenDoorState: check.value ? 1 : 0,
dayNotOpenDoorValue: value.value,
dayNotOpenDoorNoticeWayList: dayNotOpenDoorNoticeWayList.value
}
const { code, message } = await updateLockNoticeSettingRequest(data)
pending.value = false
uni.hideLoading()
if (code === 0) {
$bluetooth.updateCurrentLockNoticeSetting({
...$bluetooth.currentLockNoticeSetting,
...data
})
$basic.backAndToast('更新成功')
} else if (code === 434) {
uni.showModal({
title: '提示',
content: message,
showCancel: false
})
} else {
uni.showToast({
title: message,
icon: 'none'
})
}
}
const changeCheck = () => {
check.value = !check.value
}
const toNoticeWay = () => {
$basic.routeJump({
name: 'noticeWay',
params: {
info:
dayNotOpenDoorNoticeWayList.value.length === 0
? null
: JSON.stringify({ noticeWay: dayNotOpenDoorNoticeWayList.value })
},
events: {
confirm(data) {
dayNotOpenDoorNoticeWayList.value = data.noticeWay
uni.navigateBack()
}
}
})
}
</script>
<style lang="scss">
page {
background-color: $uni-bg-color-grey;
}
</style>