保存修改后的权限,并且引入piniade的数据可持续化

pull/353/head
royal never give up 123 2022-10-11 21:22:03 +08:00
parent 8312ba1d6c
commit 46d13c0726
6 changed files with 1995 additions and 43 deletions

14
components.d.ts vendored
View File

@ -10,39 +10,25 @@ declare module '@vue/runtime-core' {
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon'] ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElProgress: typeof import('element-plus/es')['ElProgress'] ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable'] ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElUpload: typeof import('element-plus/es')['ElUpload']
Header: typeof import('./src/components/header.vue')['default'] Header: typeof import('./src/components/header.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']

1945
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@
"element-plus": "^2.2.14", "element-plus": "^2.2.14",
"md-editor-v3": "^2.2.1", "md-editor-v3": "^2.2.1",
"pinia": "^2.0.20", "pinia": "^2.0.20",
"pinia-plugin-persist": "^1.0.0",
"vue": "^3.2.37", "vue": "^3.2.37",
"vue-cropperjs": "^5.0.0", "vue-cropperjs": "^5.0.0",
"vue-router": "^4.1.3", "vue-router": "^4.1.3",

View File

@ -1,5 +1,6 @@
import {createApp} from 'vue' import {createApp} from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import * as ElementPlusIconsVue from '@element-plus/icons-vue' import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import zhCn from 'element-plus/es/locale/lang/zh-cn' import zhCn from 'element-plus/es/locale/lang/zh-cn'
@ -12,7 +13,9 @@ import './assets/css/icon.css'
const app = createApp(App) const app = createApp(App)
app.use(createPinia()) const store = createPinia()
store.use(piniaPluginPersist)
app.use(store)
app.use(router) app.use(router)
app.use(ElementPlus, { app.use(ElementPlus, {
locale: zhCn, locale: zhCn,

View File

@ -1,23 +1,48 @@
import { defineStore } from 'pinia'; import { defineStore } from "pinia";
interface ObjectList { interface ObjectList {
[key: string]: string[]; [key: string]: string[];
} }
export const usePermissStore = defineStore('permiss', { export const usePermissStore = defineStore("permiss", {
state: () => { state: () => {
const keys = localStorage.getItem('ms_keys'); const keys = localStorage.getItem("ms_keys");
return { return {
key: keys ? JSON.parse(keys) : <string[]>[], key: keys ? JSON.parse(keys) : <string[]>[],
defaultList: <ObjectList>{ defaultList: <ObjectList>{
admin: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16'], admin: [
user: ['1', '2', '3', '11', '13', '14', '15'] "1",
} "2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
],
user: ["1", "2", "3", "11", "13", "14", "15"],
},
}; };
}, },
persist: {
enabled: true,
},
actions: { actions: {
handleSet(val: string[]) { handleSet(val: string[]) {
this.key = val; this.key = val;
} // this.defaultList = val
} },
saveKeys(role: string, val: string[]) {
this.defaultList[role] = val;
},
},
}); });

View File

@ -24,6 +24,7 @@
<script setup lang="ts" name="permission"> <script setup lang="ts" name="permission">
import { ref } from 'vue'; import { ref } from 'vue';
import { ElMessage } from 'element-plus';
import { ElTree } from 'element-plus'; import { ElTree } from 'element-plus';
import { usePermissStore } from '../store/permiss'; import { usePermissStore } from '../store/permiss';
@ -118,12 +119,15 @@ getPremission();
// //
const tree = ref<InstanceType<typeof ElTree>>(); const tree = ref<InstanceType<typeof ElTree>>();
const onSubmit = () => { const onSubmit = () => {
// // !. nullundefine
console.log(tree.value!.getCheckedKeys(false)); // console.log(tree.value!.getCheckedKeys(true));
// console.log(tree.value!.getCheckedKeys(false));
permiss.saveKeys(role.value, tree.value!.getCheckedKeys(false) as string[])
ElMessage.success('保存成功');
}; };
const handleChange = (val: string[]) => { const handleChange = (val: string) => {
tree.value!.setCheckedKeys(permiss.defaultList[role.value]); tree.value!.setCheckedKeys(permiss.defaultList[val]);
}; };
</script> </script>