This commit is contained in:
clay
2024-03-04 19:13:43 +08:00
commit e44edd71c0
350 changed files with 52288 additions and 0 deletions

47
src/stores/cache.js Normal file
View File

@@ -0,0 +1,47 @@
import {defineStore} from "pinia";
import {ref} from "vue";
import {getCacheOpt, getCacheType} from "../api/cache";
export const useCacheStore = defineStore('cache',()=>{
const cacheKeyOpt = ref(new Map())
const cacheKeyType = ref(new Map())
const setCacheKey = async (key) => {
try {
const { code, data } = await getCacheType(key)
if(code === 1000) {
cacheKeyType.value.set(key, data[key])
}
} catch(err) {
new Error(err)
}
}
const getDict = (key) => {
let dict
if (!cacheKeyType.value.has(key)) {
setCacheKey(key)
} else {
dict = cacheKeyType.value.get(key)
}
return dict
}
const checkKey = (keys) => {
let result = []
for (let key of keys) {
if (!cacheKeyType.value.has(key) ) {
result.push(key)
}
}
return result;
}
return {
cacheKeyOpt,
cacheKeyType,
setCacheKey,
getDict,
}
})

95
src/stores/permisstion.js Normal file
View File

@@ -0,0 +1,95 @@
import { defineStore } from "pinia";
import { defineAsyncComponent, ref } from "vue";
import { getRouters } from "@/api/system/menu";
import Layout from '@/layout/index.vue'
import ParentView from '@/components/ParentView.vue'
import router from "../router";
const VueComUrl = import.meta.glob('../views/**/*.vue')
export const usePermisstionStroe = defineStore('permisstion', () => {
const asyncRouters = ref([])
//定义是否加载路由变量
const isLoadRoutes = ref(false)
const menuList = ref([])
const setIsLoadRoutes = (status) => {
return isLoadRoutes.value = status
}
const setAsyncRouters = async () => {
await getRouters().then(res => {
if (res.code === 1000) {
const sRouter = JSON.parse(JSON.stringify(res.data))
const mData = JSON.parse(JSON.stringify(res.data))
asyncRouters.value = formatAsyncRouters(sRouter)
menuList.value = generateMenu(mData)
addAsyncRouters(asyncRouters.value)
isLoadRoutes.value = false
} else {
isLoadRoutes.value = true
setTimeout(() => setAsyncRouters(), 3000)
}
})
}
const formatAsyncRouters = (routers) => {
return routers.filter(route => {
if (route.component) {
if (route.component === 'Layout') {
route.component = Layout
} else if (route.component === 'ParentView') {
route.component = ParentView
}
else {
route.component = loadView(route.component)
}
}
if (route.pathParams != null) {
let pathParams = route.pathParams
route.pathParams = JSON.parse(route.pathParams)
route.query = {}
for (const key in route.pathParams) {
route.query = {[key]: route.pathParams[key]}
}
}
if (route.children !== null && route.children && route.children.length !== 0) {
route.children = formatAsyncRouters(route.children)
}
return true
})
}
const addAsyncRouters = (routers) => {
routers.forEach(route => {
router.addRoute(route)
})
}
const generateMenu = (routes) => {
return routes.filter(item => {
if (item.children && item.children.length !== 0) {
generateMenu(item.children)
}
item.title = item.meta.title
item.icon = item.meta.icon
return true
})
}
const loadView = (view) => {
if (import.meta.env.MODE === 'development') {
return () => import(/* @vite-ignore */`/src/views/${view}.vue`)
} else {
return VueComUrl['../views/' + view + '.vue']
}
}
return {
asyncRouters,
menuList,
isLoadRoutes,
setAsyncRouters,
setIsLoadRoutes
}
})

112
src/stores/processStore.js Normal file
View File

@@ -0,0 +1,112 @@
import {defineStore} from "pinia";
import {ref} from "vue";
export const useProcessStore = defineStore('process', () => {
const nodeMap = ref(new Map())
const parentMap = ref(new Map())
const selectUserMap = ref(new Map())
const isEdit = ref(null)
const selectFormItem = ref(null)
const selectedNode = ref([])
const runningList = ref([])
const endList = ref([])
const noTakeList = ref([])
const refuseList = ref([])
const passList = ref([])
const processData = ref({})
const userTaskOption = ref({})
const getSelectedNode = () => {
return selectedNode.value
}
const setSelectedNode = (val) => {
selectedNode.value = val
}
const getSelectedFormItem = () => {
return selectFormItem.value
}
const setSelectedFormItem = (val) => {
selectFormItem.value = val
}
const getProcess = () => {
return processData.value.process;
}
const addProcess = (val) => {
console.log("添加节点成功")
processData.value.process.push(val)
}
const delProcess = (delNode) => {
processData.value.process.splice(processData.value.process.indexOf(delNode), 1)
console.log("删除数据")
console.log(processData.value.process)
}
const getDesign = () => {
return processData.value
}
const getAssignedUser = () => {
return selectedNode.value.props.assignedUser || []
}
const addAssignedUser = (val) => {
selectedNode.value.props.assignedUser.push(val)
}
const getFormMap = () => {
//表单映射对象
const map = new Map();
processData.value.formItems.forEach(item => itemToMap(map, item))
return map
}
const itemToMap = (map, item) => {
//对象转map
map.set(item.id, item)
if (item.name === 'SpanLayout') {
item.props.items.forEach(sub => itemToMap(map, sub))
}
}
const setDesign = (val) => {
processData.value = val
}
const init = () => {
nodeMap.value.clear()
parentMap.value.clear()
}
return {
nodeMap,
parentMap,
selectUserMap,
isEdit,
selectFormItem,
runningList,
endList,
noTakeList,
refuseList,
passList,
design: processData,
selectedNode,
userTaskOption,
init,
getSelectedNode,
setSelectedNode,
getSelectedFormItem,
setSelectedFormItem,
getDesign,
setDesign,
getProcess,
addProcess,
delProcess,
getFormMap,
getAssignedUser,
addAssignedUser
}
})

20
src/stores/siderbar.js Normal file
View File

@@ -0,0 +1,20 @@
import { defineStore } from "pinia";
import { reactive, ref } from "vue";
export const useSiderBar = defineStore('siderbar',()=>{
//定义控制侧边栏是否展开变量默认展开
const isCollapse = ref(false)
//获取侧边栏状态
const getSiderBarStatus = () => {
return isCollapse.value
}
//设置侧边栏状态
const setSiderBarStatus = () => {
isCollapse.value = !isCollapse.value
}
return {
isCollapse,
getSiderBarStatus,
setSiderBarStatus,
}
})

54
src/stores/tagsview.js Normal file
View File

@@ -0,0 +1,54 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { useRouter } from "vue-router";
export const useTagsView = defineStore('tagsView',()=>{
const router = useRouter()
//已显示的标签页list
const visitedViews = ref([])
//添加标签页面
const addVisitedViews = ({path,meta}) => {
if(visitedViews.value.length == 0) {
visitedViews.value.push({path,meta})
}else {
const paths = visitedViews.value.map(item => item.path)
if(paths.includes(path) == false) {
visitedViews.value.push({path,meta})
}
}
}
//删除标签页
const delVisitedViews = (path) => {
if(visitedViews.value.length - 1 == 0) {
return
}
visitedViews.value.forEach((item,index)=>{
if(item.path == path) {
visitedViews.value.splice(index,1)
}
})
toLastTagView(visitedViews)
}
//删除其他标签页
const delOtherVisitedViews = ({path,meta}) => {
visitedViews.value = []
visitedViews.value.push({path,meta})
toLastTagView(visitedViews)
}
//路由到末尾标签页
const toLastTagView = (view) => {
const lastTagView = view.value.slice(-1)[0]
router.push(lastTagView.path)
}
return {
visitedViews,
addVisitedViews,
delVisitedViews,
delOtherVisitedViews,
}
})

42
src/stores/userstore.js Normal file
View File

@@ -0,0 +1,42 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { getUserInfo, login } from "../api/login";
import { ElMessage } from "element-plus";
import { removeToken, setToken} from "../utils/auth";
export const useAuthStore = defineStore('auth',()=>{
const userinfo = ref({})
const permisstions = ref([])
const roles = ref([])
const userLogin = async (data) => {
let flag
await login(data).then(res=>{
if(res?.code === 1000) {
setToken(res.data)
flag = true
}else {
ElMessage.error(res.msg)
flag = false
}
})
return flag
}
const userLogout = () => {
removeToken()
}
const setUserInfo = async () => {
await getUserInfo().then(res=>{
userinfo.value = res.data.user
permisstions.value = res.data.permissions
roles.value = res.data.roles
})
}
return {
userinfo,
permisstions,
userLogin,
userLogout,
setUserInfo
}
})