This commit is contained in:
houjunxiang
2025-10-09 18:19:55 +08:00
parent f2ffc65094
commit 386f1e7466
1553 changed files with 284685 additions and 32820 deletions

17
nx/store/biz.js Normal file
View 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
View 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
View 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
View 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