wx-starlock/stores/basic.js
2025-02-08 18:31:14 +08:00

320 lines
7.1 KiB
JavaScript

import { defineStore } from 'pinia'
// 页面配置
const pages = [
{
name: 'home',
path: '/pages/home/home',
tabBar: true
},
{
name: 'mine',
path: '/pages/mine/mine',
tabBar: true
},
{
name: 'userInfo',
path: '/pages/userInfo/userInfo',
tabBar: false
},
{
name: 'updateName',
path: '/pages/updateName/updateName',
tabBar: false
},
{
name: 'updatePassword',
path: '/pages/updatePassword/updatePassword',
tabBar: false
},
{
name: 'updateEmail',
path: '/pages/updateEmail/updateEmail',
tabBar: false
},
{
name: 'verifyEmail',
path: '/pages/verifyEmail/verifyEmail',
tabBar: false
},
{
name: 'webview',
path: '/pages/webview/webview',
tabBar: false
},
{
name: 'lockDetail',
path: '/pages/lockDetail/lockDetail',
tabBar: false
},
{
name: 'searchDevice',
path: '/pages/searchDevice/searchDevice',
tabBar: false
},
{
name: 'selectAddress',
path: '/pages/selectAddress/selectAddress',
tabBar: false
},
{
name: 'bindLock',
path: '/pages/bindLock/bindLock',
tabBar: false
},
{
name: 'setting',
path: '/pages/setting/setting',
tabBar: false
},
{
name: 'keyList',
path: '/pages/keyList/keyList',
tabBar: false
},
{
name: 'createKey',
path: '/pages/createKey/createKey',
tabBar: false
},
{
name: 'passwordList',
path: '/pages/passwordList/passwordList',
tabBar: false
},
{
name: 'createPassword',
path: '/pages/createPassword/createPassword',
tabBar: false
},
{
name: 'passwordDetail',
path: '/pages/passwordDetail/passwordDetail',
tabBar: false
},
{
name: 'keyDetail',
path: '/pages/keyDetail/keyDetail',
tabBar: false
},
{
name: 'notificationList',
path: '/pages/notificationList/notificationList',
tabBar: true
},
{
name: 'notificationDetail',
path: '/pages/notificationDetail/notificationDetail',
tabBar: false
},
{
name: 'addLockGuid',
path: '/pages/addLockGuid/addLockGuid',
tabBar: false
},
{
name: 'cardList',
path: '/pages/cardList/cardList',
tabBar: false
},
{
name: 'createCard',
path: '/pages/createCard/createCard',
tabBar: false
},
{
name: 'cardDetail',
path: '/pages/cardDetail/cardDetail',
tabBar: false
},
{
name: 'bindCard',
path: '/pages/bindCard/bindCard',
tabBar: false
},
{
name: 'fingerprintList',
path: '/pages/fingerprintList/fingerprintList',
tabBar: false
},
{
name: 'createFingerprint',
path: '/pages/createFingerprint/createFingerprint',
tabBar: false
},
{
name: 'fingerprintDetail',
path: '/pages/fingerprintDetail/fingerprintDetail',
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
}
}
}
})