wx-starlock/stores/basic.js
2025-04-06 15:19:55 +08:00

565 lines
11 KiB
JavaScript

import { defineStore } from 'pinia'
// 页面配置
const pages = [
{
name: 'home',
path: '/pages/main/home',
tabBar: true
},
{
name: 'mine',
path: '/pages/main/mine',
tabBar: true
},
{
name: 'userInfo',
path: '/pages/user/userInfo',
tabBar: false
},
{
name: 'updateName',
path: '/pages/user/updateName',
tabBar: false
},
{
name: 'updatePassword',
path: '/pages/user/updatePassword',
tabBar: false
},
{
name: 'updateEmail',
path: '/pages/user/updateEmail',
tabBar: false
},
{
name: 'verifyEmail',
path: '/pages/user/verifyEmail',
tabBar: false
},
{
name: 'webview',
path: '/pages/others/webview',
tabBar: false
},
{
name: 'lockDetail',
path: '/pages/main/lockDetail',
tabBar: false
},
{
name: 'searchDevice',
path: '/pages/addDevice/searchDevice',
tabBar: false
},
{
name: 'selectAddress',
path: '/pages/addDevice/selectAddress',
tabBar: false
},
{
name: 'bindLock',
path: '/pages/addDevice/bindLock',
tabBar: false
},
{
name: 'setting',
path: '/pages/setting/setting',
tabBar: false
},
{
name: 'keyList',
path: '/pages/feature/keyList',
tabBar: false
},
{
name: 'createKey',
path: '/pages/feature/createKey',
tabBar: false
},
{
name: 'passwordList',
path: '/pages/feature/passwordList',
tabBar: false
},
{
name: 'createPassword',
path: '/pages/feature/createPassword',
tabBar: false
},
{
name: 'passwordDetail',
path: '/pages/feature/passwordDetail',
tabBar: false
},
{
name: 'keyDetail',
path: '/pages/feature/keyDetail',
tabBar: false
},
{
name: 'notificationList',
path: '/pages/main/notificationList',
tabBar: true
},
{
name: 'notificationDetail',
path: '/pages/others/notificationDetail',
tabBar: false
},
{
name: 'addLockGuid',
path: '/pages/addDevice/addLockGuid',
tabBar: false
},
{
name: 'cardList',
path: '/pages/feature/cardList',
tabBar: false
},
{
name: 'createCard',
path: '/pages/feature/createCard',
tabBar: false
},
{
name: 'cardDetail',
path: '/pages/feature/cardDetail',
tabBar: false
},
{
name: 'bindCard',
path: '/pages/feature/bindCard',
tabBar: false
},
{
name: 'fingerprintList',
path: '/pages/feature/fingerprintList',
tabBar: false
},
{
name: 'createFingerprint',
path: '/pages/feature/createFingerprint',
tabBar: false
},
{
name: 'fingerprintDetail',
path: '/pages/feature/fingerprintDetail',
tabBar: false
},
{
name: 'bindFingerprint',
path: '/pages/feature/bindFingerprint',
tabBar: false
},
{
name: 'faceList',
path: '/pages/feature/faceList',
tabBar: false
},
{
name: 'createFace',
path: '/pages/feature/createFace',
tabBar: false
},
{
name: 'faceDetail',
path: '/pages/feature/faceDetail',
tabBar: false
},
{
name: 'bindFace',
path: '/pages/feature/bindFace',
tabBar: false
},
{
name: 'remoteList',
path: '/pages/feature/remoteList',
tabBar: false
},
{
name: 'createRemote',
path: '/pages/feature/createRemote',
tabBar: false
},
{
name: 'remoteDetail',
path: '/pages/feature/remoteDetail',
tabBar: false
},
{
name: 'bindRemote',
path: '/pages/feature/bindRemote',
tabBar: false
},
{
name: 'palmVeinList',
path: '/pages/feature/palmVeinList',
tabBar: false
},
{
name: 'createPalmVein',
path: '/pages/feature/createPalmVein',
tabBar: false
},
{
name: 'palmVeinDetail',
path: '/pages/feature/palmVeinDetail',
tabBar: false
},
{
name: 'bindPalmVein',
path: '/pages/feature/bindPalmVein',
tabBar: false
},
{
name: 'createAdmin',
path: '/pages/feature/createAdmin',
tabBar: false
},
{
name: 'adminDetail',
path: '/pages/feature/adminDetail',
tabBar: false
},
{
name: 'adminList',
path: '/pages/feature/adminList',
tabBar: false
},
{
name: 'recordList',
path: '/pages/feature/recordList',
tabBar: false
},
{
name: 'recordDetail',
path: '/pages/feature/recordDetail',
tabBar: false
},
{
name: 'typeRecordList',
path: '/pages/feature/typeRecordList',
tabBar: false
},
{
name: 'cycleDate',
path: '/pages/others/cycleDate',
tabBar: false
},
{
name: 'temporaryDate',
path: '/pages/others/temporaryDate',
tabBar: false
},
{
name: 'lockInfo',
path: '/pages/setting/lockInfo',
tabBar: false
},
{
name: 'syncElec',
path: '/pages/setting/syncElec',
tabBar: false
},
{
name: 'selectGroup',
path: '/pages/setting/selectGroup',
tabBar: false
},
{
name: 'updateSetting',
path: '/pages/setting/updateSetting',
tabBar: false
},
{
name: 'lockSound',
path: '/pages/setting/lockSound',
tabBar: false
},
{
name: 'autoLock',
path: '/pages/setting/autoLock',
tabBar: false
},
{
name: 'faceSetting',
path: '/pages/setting/faceSetting',
tabBar: false
},
{
name: 'lockDate',
path: '/pages/setting/lockDate',
tabBar: false
},
{
name: 'uploadLockData',
path: '/pages/setting/uploadLockData',
tabBar: false
},
{
name: 'openDirection',
path: '/pages/setting/openDirection',
tabBar: false
},
{
name: 'motorTorsion',
path: '/pages/setting/motorTorsion',
tabBar: false
},
{
name: 'catEye',
path: '/pages/setting/catEye',
tabBar: false
},
{
name: 'messageReminder',
path: '/pages/setting/messageReminder',
tabBar: false
},
{
name: 'openDoorNotice',
path: '/pages/setting/openDoorNotice',
tabBar: false
},
{
name: 'noticeDetail',
path: '/pages/setting/noticeDetail',
tabBar: false
},
{
name: 'lockUser',
path: '/pages/setting/lockUser',
tabBar: false
},
{
name: 'noticeWay',
path: '/pages/setting/noticeWay',
tabBar: false
},
{
name: 'notOpenDoor',
path: '/pages/setting/notOpenDoor',
tabBar: false
},
{
name: 'lowElecNotice',
path: '/pages/setting/lowElecNotice',
tabBar: false
},
{
name: 'coercionOpenDoor',
path: '/pages/setting/coercionOpenDoor',
tabBar: false
},
{
name: 'coercionFingerprint',
path: '/pages/setting/coercionFingerprint',
tabBar: false
},
{
name: 'catEyeMode',
path: '/pages/setting/catEyeMode',
tabBar: false
},
{
name: 'customCatEye',
path: '/pages/setting/customCatEye',
tabBar: false
},
{
name: 'realTimePicture',
path: '/pages/setting/realTimePicture',
tabBar: false
},
{
name: 'videoSlot',
path: '/pages/setting/videoSlot',
tabBar: false
},
{
name: 'passageMode',
path: '/pages/setting/passageMode',
tabBar: false
},
{
name: 'distributionNetwork',
path: '/pages/addDevice/distributionNetwork',
tabBar: false
},
{
name: 'p2pPlayer',
path: '/pages/p2p/p2pPlayer',
tabBar: false
}
]
export const useBasicStore = defineStore('basic', {
state() {
return {
// 设备信息
deviceInfo: null,
// 胶囊按钮的位置信息
buttonInfo: null,
// 分享配置
shareConfig: {}
}
},
actions: {
// 路由跳转
/* data 入参 name string页面名称 type string跳转方式 params object传递参数 delta number返回页面数
* 具体入参查看文档 https://www.uviewui.com/js/route.html */
routeJump(data) {
const page = pages.find(page => {
return page.name === data.name
})
if (page) {
if (!data.type || data.type === 'navigateTo' || data.type === 'to') {
let url = `${page.path}?`
if (data.params) {
Object.keys(data.params).forEach((key, index) => {
if (index === 0) {
url += `${key}=${data.params[key]}`
} else {
url += `&${key}=${data.params[key]}`
}
})
}
uni.navigateTo({
url,
...data
})
} else {
uni.$u.route({
url: page.path,
...data
})
}
}
},
// 获取当前网络状态
getNetworkType() {
return new Promise(resolve => {
uni.getNetworkType({
success(res) {
if (res.networkType === 'none') {
uni.showToast({
title: '网络访问失败,请检查网络是否正常',
icon: 'none'
})
resolve(false)
return
}
resolve(true)
},
fail() {
resolve(false)
}
})
})
},
// 获取设备信息
getDeviceInfo() {
const that = this
return new Promise(resolve => {
if (that.deviceInfo?.model) {
resolve(that.deviceInfo)
return
}
uni.getSystemInfo({
success(res) {
that.deviceInfo = res
resolve(that.deviceInfo)
},
fail() {
resolve({})
}
})
})
},
// 获取胶囊信息
getButtonInfo() {
return new Promise(resolve => {
if (this.buttonInfo?.top) {
resolve(this.buttonInfo)
return
}
this.buttonInfo = uni.getMenuButtonBoundingClientRect()
resolve(this.buttonInfo)
})
},
// 计算字符串长度
calculateStringTotalWidth(str) {
let totalWidth = 0
// 遍历字符串中的每一个字符
for (let i = 0; i < str.length; i++) {
const char = str[i]
// 判断当前字符是全角字符还是半角字符
if (/[\uFF01-\uFF60\uFFE0-\uFFE6\u4E00-\u9FFF\u3000-\u303F]/.test(char)) {
// 全角字符宽度为 2
totalWidth += 2
} else {
// 半角字符宽度为 1
totalWidth += 1
}
}
return totalWidth
},
// 回退页面并弹出toast提示
backAndToast(message, delta = 1) {
uni.navigateBack({
delta,
complete() {
setTimeout(() => {
uni.showToast({
title: message,
icon: 'none'
})
}, 300)
}
})
},
// 分享跳转
shareJump(data = this.shareConfig) {
if (data.path) {
const target = data.path.split('/')
if (target.length > 1) {
data.path = data.path.slice(target[0].length + 1, data.path.length)
} else {
delete data.path
}
const page = pages.find(page => {
return page.name === target[0]
})
if (page) {
if (page.tabBar) {
wx.switchTab({
url: page.path
})
} else {
const url = page.path + '?' + getParams(data)
wx.navigateTo({ url })
}
} else {
delete data.path
}
} else {
delete data.path
}
this.shareConfig = data
function getParams(params) {
let paramStr = ''
Object.keys(params).forEach(item => {
if (paramStr === '') {
paramStr = `${item}=${params[item]}`
} else {
paramStr = `${paramStr}&${item}=${params[item]}`
}
})
return paramStr
}
}
}
})