1
This commit is contained in:
17
nx/store/biz.js
Normal file
17
nx/store/biz.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import nx from '@/nx'
|
||||
|
||||
const biz = defineStore({
|
||||
id: 'biz',
|
||||
state: () => ({
|
||||
deviceInfo: {},
|
||||
scanQRInfo: null,
|
||||
|
||||
}),
|
||||
|
||||
actions: {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
export default biz
|
||||
66
nx/store/company-dept.js
Normal file
66
nx/store/company-dept.js
Normal file
@@ -0,0 +1,66 @@
|
||||
import { defineStore } from 'pinia';
|
||||
|
||||
const defaultState = () => ({
|
||||
show: false,
|
||||
title: '请选择当前业务办理归属的公司部门信息',
|
||||
companyList: [],
|
||||
selectedCompanyId: null,
|
||||
selectedDeptId: null,
|
||||
onConfirm: null,
|
||||
onCancel: null,
|
||||
});
|
||||
|
||||
const companyDeptStore = defineStore({
|
||||
id: 'company-dept',
|
||||
state: defaultState,
|
||||
actions: {
|
||||
open({ companyList = [], onConfirm = null, onCancel = null, defaultCompanyId = null, defaultDeptId = null, title = null }) {
|
||||
this.companyList = companyList;
|
||||
this.onConfirm = onConfirm;
|
||||
this.onCancel = onCancel;
|
||||
this.title = title || '请选择当前业务办理归属的公司部门信息';
|
||||
this.show = true;
|
||||
this.selectedCompanyId = defaultCompanyId;
|
||||
this.selectedDeptId = defaultDeptId;
|
||||
if (!this.selectedCompanyId && this.companyList.length > 0) {
|
||||
this.selectedCompanyId = this.companyList[0].companyId;
|
||||
}
|
||||
if (!this.selectedDeptId) {
|
||||
const depts = this.getDeptsByCompanyId(this.selectedCompanyId);
|
||||
this.selectedDeptId = depts.length > 0 ? depts[0].deptId : null;
|
||||
}
|
||||
},
|
||||
close() {
|
||||
Object.assign(this, defaultState());
|
||||
},
|
||||
getDeptsByCompanyId(companyId) {
|
||||
const company = this.companyList.find((item) => item.companyId === companyId);
|
||||
return company?.depts || [];
|
||||
},
|
||||
setSelectedCompany(companyId) {
|
||||
this.selectedCompanyId = companyId;
|
||||
const depts = this.getDeptsByCompanyId(companyId);
|
||||
const currentDeptIds = depts.map((dept) => dept.deptId);
|
||||
if (!currentDeptIds.includes(this.selectedDeptId)) {
|
||||
this.selectedDeptId = depts.length > 0 ? depts[0].deptId : null;
|
||||
}
|
||||
},
|
||||
setSelectedDept(deptId) {
|
||||
this.selectedDeptId = deptId;
|
||||
},
|
||||
confirm() {
|
||||
if (this.onConfirm) {
|
||||
this.onConfirm({ companyId: this.selectedCompanyId, deptId: this.selectedDeptId });
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
cancel() {
|
||||
if (this.onCancel) {
|
||||
this.onCancel();
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export default companyDeptStore;
|
||||
20
nx/store/index.js
Normal file
20
nx/store/index.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import { createPinia } from 'pinia';
|
||||
import piniaPersist from 'pinia-plugin-persist-uni';
|
||||
|
||||
// 自动注入所有pinia模块
|
||||
const files = import.meta.glob('./*.js', { eager: true });
|
||||
const modules = {};
|
||||
Object.keys(files).forEach((key) => {
|
||||
modules[key.replace(/(.*\/)*([^.]+).*/gi, '$2')] = files[key].default;
|
||||
});
|
||||
|
||||
export const setupPinia = (app) => {
|
||||
const pinia = createPinia();
|
||||
pinia.use(piniaPersist);
|
||||
|
||||
app.use(pinia);
|
||||
};
|
||||
|
||||
export default (name) => {
|
||||
return modules[name]();
|
||||
};
|
||||
127
nx/store/user.js
Normal file
127
nx/store/user.js
Normal file
@@ -0,0 +1,127 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import userApi from '@/nx/api/user'
|
||||
import { getSysParameterBizByName } from '@/nx/api/sys'
|
||||
import md5 from 'md5'
|
||||
import nx from '@/nx'
|
||||
// 默认用户信息
|
||||
const defaultUserInfo = {
|
||||
avatar: '', // 头像
|
||||
nickname: '', // 昵称
|
||||
gender: 0, // 性别
|
||||
mobile: '' // 手机号
|
||||
}
|
||||
|
||||
const user = defineStore({
|
||||
id: 'user',
|
||||
state: () => ({
|
||||
userInfo: uni.getStorageSync('userInfo') || { ...defaultUserInfo }, // 用户信息
|
||||
token: uni.getStorageSync('token') || '',
|
||||
isLogin: !!uni.getStorageSync('token'), // 登录状态
|
||||
roleMenus: uni.getStorageSync('roleMenus') || [],
|
||||
timeout: 10 * 60 * 1000,
|
||||
lastRequestTime: null,
|
||||
timeoutInterval: null
|
||||
}),
|
||||
|
||||
actions: {
|
||||
// 更新最后请求时间
|
||||
updateLastRequestTime() {
|
||||
this.lastRequestTime = Date.now()
|
||||
},
|
||||
// 检查是否超时
|
||||
checkTimeout() {
|
||||
if (!this.token || !this.lastRequestTime) return false
|
||||
const currentTime = Date.now()
|
||||
const elapsed = currentTime - this.lastRequestTime
|
||||
if (this.timeout > 0 && elapsed > this.timeout) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '登录超时,请重新登录'
|
||||
})
|
||||
this.logout()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
startTimeoutChecker(interval = 60 * 1000) {
|
||||
this.stopTimeoutChecker()
|
||||
this.timeoutInterval = setInterval(() => {
|
||||
this.checkTimeout()
|
||||
}, interval)
|
||||
},
|
||||
stopTimeoutChecker() {
|
||||
if (this.timeoutInterval) {
|
||||
clearInterval(this.timeoutInterval)
|
||||
this.timeoutInterval = null
|
||||
}
|
||||
},
|
||||
async getDeviceTimeout() {
|
||||
const result = await getSysParameterBizByName('lims_pda_timeout')
|
||||
this.timeout = Number(result.dictValue) * 60 * 1000
|
||||
},
|
||||
async login(loginInfo) {
|
||||
const info = await userApi.accountLogin(loginInfo)
|
||||
if (info) {
|
||||
this.setToken(info.accessToken)
|
||||
await this.getUserInfo()
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '登录成功'
|
||||
})
|
||||
// await this.getRoleMenus()
|
||||
// await this.getDeviceTimeout()
|
||||
// this.startTimeoutChecker()
|
||||
uni.reLaunch({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}
|
||||
},
|
||||
async getUserInfo() {
|
||||
const { user } = await userApi.getInfo()
|
||||
if (user) {
|
||||
this.userInfo = user
|
||||
uni.setStorageSync('userInfo', this.userInfo)
|
||||
}
|
||||
},
|
||||
async getRoleMenus() {
|
||||
let params = {
|
||||
parentNodeUrl: '/lims/mobile'
|
||||
}
|
||||
const result = await userApi.getRoleMenusByParentMenuKey(params)
|
||||
if (result.length > 0) {
|
||||
this.roleMenus = result.map(item => ({ url: item.url, name: item.name, icon: item.otherConf }))
|
||||
uni.setStorageSync('roleMenus', this.roleMenus)
|
||||
}
|
||||
},
|
||||
|
||||
// 设置token
|
||||
setToken(token = '') {
|
||||
this.token = token
|
||||
if (token === '') {
|
||||
this.isLogin = false
|
||||
uni.removeStorageSync('token')
|
||||
} else {
|
||||
this.isLogin = true
|
||||
uni.setStorageSync('token', token)
|
||||
}
|
||||
return this.isLogin
|
||||
},
|
||||
|
||||
// 登出
|
||||
async logout() {
|
||||
this.stopTimeoutChecker()
|
||||
this.clearUserInfo()
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/login'
|
||||
})
|
||||
},
|
||||
clearUserInfo() {
|
||||
this.userInfo = {}
|
||||
this.roleMenus = []
|
||||
uni.setStorageSync('roleMenus', [])
|
||||
this.setToken()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
export default user
|
||||
Reference in New Issue
Block a user