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 }, { name: 'bindFingerprint', path: '/pages/bindFingerprint/bindFingerprint', 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 } } } })