Browse Source

前端utils中封装了前端获取字典并缓存到内存的方法getDict

QM303176530 4 years ago
parent
commit
9a0e8d2d2a

+ 1 - 1
server/api/v1/sys_dictionary.go

@@ -78,7 +78,7 @@ func UpdateSysDictionary(c *gin.Context) {
 func FindSysDictionary(c *gin.Context) {
 	var sysDictionary model.SysDictionary
 	_ = c.ShouldBindQuery(&sysDictionary)
-	err, resysDictionary := service.GetSysDictionary(sysDictionary.ID)
+	err, resysDictionary := service.GetSysDictionary(sysDictionary.Type, sysDictionary.ID)
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("查询失败,%v", err), c)
 	} else {

+ 16 - 3
server/service/sys_dictionary.go

@@ -1,6 +1,7 @@
 package service
 
 import (
+	"errors"
 	"gin-vue-admin/global"
 	"gin-vue-admin/model"
 	"gin-vue-admin/model/request"
@@ -13,6 +14,9 @@ import (
 // @return    err             error
 
 func CreateSysDictionary(sysDictionary model.SysDictionary) (err error) {
+	if (!global.GVA_DB.First(&model.SysDictionary{}, "type = ?", sysDictionary.Type).RecordNotFound()) {
+		return errors.New("存在相同的type,不允许创建")
+	}
 	err = global.GVA_DB.Create(&sysDictionary).Error
 	return err
 }
@@ -42,7 +46,16 @@ func UpdateSysDictionary(sysDictionary *model.SysDictionary) (err error) {
 		"Status": sysDictionary.Status,
 		"Desc":   sysDictionary.Desc,
 	}
-	err = global.GVA_DB.Where("id = ?", sysDictionary.ID).First(&dict).Updates(sysDictionaryMap).Error
+	db := global.GVA_DB.Where("id = ?", sysDictionary.ID).First(&dict)
+	if dict.Type == sysDictionary.Type {
+		err = db.Updates(sysDictionaryMap).Error
+	} else {
+		if (!global.GVA_DB.First(&model.SysDictionary{}, "type = ?", sysDictionary.Type).RecordNotFound()) {
+			return errors.New("存在相同的type,不允许创建")
+		} else {
+			err = db.Updates(sysDictionaryMap).Error
+		}
+	}
 	return err
 }
 
@@ -53,8 +66,8 @@ func UpdateSysDictionary(sysDictionary *model.SysDictionary) (err error) {
 // @return                    error
 // @return    SysDictionary        SysDictionary
 
-func GetSysDictionary(id uint) (err error, sysDictionary model.SysDictionary) {
-	err = global.GVA_DB.Where("id = ?", id).Preload("SysDictionaryDetails").First(&sysDictionary).Error
+func GetSysDictionary(Type string, Id uint) (err error, sysDictionary model.SysDictionary) {
+	err = global.GVA_DB.Where("type = ? OR id = ?", Type, Id).Preload("SysDictionaryDetails").First(&sysDictionary).Error
 	return
 }
 

+ 0 - 0
web/src/api/sys_dictionary.js → web/src/api/sysDictionary.js


+ 0 - 0
web/src/api/sys_dictionary_detail.js → web/src/api/sysDictionaryDetail.js


+ 3 - 2
web/src/store/index.js

@@ -4,7 +4,7 @@ import VuexPersistence from 'vuex-persist'
 
 import { user } from "@/store/module/user"
 import { router } from "@/store/module/router"
-
+import { dictionary } from "@/store/module/dictionary"
 Vue.use(Vuex)
 
 
@@ -16,7 +16,8 @@ const vuexLocal = new VuexPersistence({
 export const store = new Vuex.Store({
     modules: {
         user,
-        router
+        router,
+        dictionary
     },
     plugins: [vuexLocal.plugin]
 })

+ 42 - 0
web/src/store/module/dictionary.js

@@ -0,0 +1,42 @@
+import { findSysDictionary } from '@/api/sysDictionary'
+
+export const dictionary = {
+    namespaced: true,
+    state: {
+        dictionaryMap: {},
+    },
+    mutations: {
+        setDictionaryMap(state, dictionaryMap) {
+            state.dictionaryMap = { ...state.dictionaryMap, ...dictionaryMap }
+        },
+
+    },
+    actions: {
+        // 从后台获取动态路由
+        async getDictionary({ commit, state }, type) {
+            if (state.dictionaryMap[type]) {
+                return state.dictionaryMap[type]
+            } else {
+                const res = await findSysDictionary({ type })
+                if (res.code == 0) {
+                    const dictionaryMap = {}
+                    const dict = []
+                    res.data.resysDictionary.sysDictionaryDetails && res.data.resysDictionary.sysDictionaryDetails.map(item => {
+                        dict.push({
+                            label: item.label,
+                            value: item.value
+                        })
+                    })
+                    dictionaryMap[res.data.resysDictionary.type] = dict
+                    commit("setDictionaryMap", dictionaryMap)
+                    return state.dictionaryMap[type]
+                }
+            }
+        }
+    },
+    getters:{
+        getDictionary(state){
+            return state.dictionaryMap
+        }
+    }
+}

+ 6 - 0
web/src/utils/dictionary.js

@@ -0,0 +1,6 @@
+import { store } from '@/store/index'
+
+export const getDict = async (type) => {
+    await store.dispatch("dictionary/getDictionary", type)
+    return store.getters["dictionary/getDictionary"][type]
+}

+ 2 - 3
web/src/view/superAdmin/dictionary/sys_dictionary.vue → web/src/view/superAdmin/dictionary/sysDictionary.vue

@@ -114,10 +114,9 @@ import {
     updateSysDictionary,
     findSysDictionary,
     getSysDictionaryList
-} from "@/api/sys_dictionary";  //  此处请自行替换地址
+} from "@/api/sysDictionary";  //  此处请自行替换地址
 import { formatTimeToStr } from "@/utils/data";
 import infoList from "@/components/mixins/infoList";
-
 export default {
   name: "SysDictionary",
   mixins: [infoList],
@@ -239,7 +238,7 @@ export default {
       this.dialogFormVisible = true;
     }
   },
-  created() {
+  async created() {
     this.getTableData();
   }
 };

+ 1 - 1
web/src/view/superAdmin/dictionary/sys_dictionary_detail.vue → web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue

@@ -113,7 +113,7 @@ import {
   updateSysDictionaryDetail,
   findSysDictionaryDetail,
   getSysDictionaryDetailList
-} from "@/api/sys_dictionary_detail"; //  此处请自行替换地址
+} from "@/api/sysDictionaryDetail"; //  此处请自行替换地址
 import { formatTimeToStr } from "@/utils/data";
 import infoList from "@/components/mixins/infoList";