320 lines
7.1 KiB
JavaScript
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
|
|
}
|
|
}
|
|
}
|
|
})
|