ith5 5 miesięcy temu
rodzic
commit
893ee541b5

+ 10 - 22
src/api/center/game.js

@@ -1,30 +1,18 @@
-import { request } from "@/utils/request.js";
+import { request } from '@/utils/request.js'
 
 /**
  * Center游戏接口
  */
 export default {
-  /**
-   * 根据部门ID获取游戏IDS
-   * @returns
-   */
-  getGameListByDeptId(params = {}) {
-    return request({
-      url: "/v1/center/Game/getGameListByDeptId",
-      method: "get",
-      params,
-    });
-  },
-
   /**
    * 获取所有的游戏数据
    * @returns
    */
   getAllGameData() {
     return request({
-      url: "/v1/center/Game/getAllGameData",
-      method: "get",
-    });
+      url: '/v1/center/Game/getAllGameData',
+      method: 'get'
+    })
   },
 
   /**
@@ -33,9 +21,9 @@ export default {
    */
   setGameListByDeptId(data = {}) {
     return request({
-      url: "/v1/center/Game/setGameListByDeptId",
-      method: "post",
-      data,
-    });
-  },
-};
+      url: '/v1/center/Game/setGameListByDeptId',
+      method: 'post',
+      data
+    })
+  }
+}

+ 68 - 74
src/components/game-permission/index.vue

@@ -1,16 +1,17 @@
 <template>
   <div>
     <a-radio-group type="button" v-model="selectType">
+      <a-radio value="-1" v-if="comType === 'natural'">不看自然量</a-radio>
       <a-radio value="*">全部游戏</a-radio>
       <a-radio value="0">指定游戏</a-radio>
     </a-radio-group>
     <div>
       <a-input-search
+        v-if="selectType === '0'"
         style="margin-bottom: 8px; max-width: 240px"
         v-model="searchKey"
         placeholder="搜索游戏"
-        class="m-2 ml-0"
-      />
+        class="m-2 ml-0" />
       <a-tree
         v-if="selectType === '0'"
         v-model:checkedKeys="checkedKeys"
@@ -19,13 +20,9 @@
         multiple
         :data="treeData"
         :field-names="{ children: 'children', title: 'title', key: 'key' }"
-        @check="handleCheck"
-      >
+        @check="handleCheck">
         <template #title="nodeData">
-          <template
-            v-if="((index = getMatchIndex(nodeData?.title)), index < 0)"
-            >{{ nodeData?.title }}</template
-          >
+          <template v-if="((index = getMatchIndex(nodeData?.title)), index < 0)">{{ nodeData?.title }}</template>
           <span v-else>
             {{ nodeData?.title?.substr(0, index) }}
             <span style="color: var(--color-primary-light-4)">
@@ -39,14 +36,19 @@
 </template>
 
 <script setup>
-import { ref, computed } from "vue";
-const searchKey = ref("");
-
-const selectType = ref("*");
-const checkedKeys = ref([]);
-const gameList = ref("");
-const data = ref([]);
-const allGameIds = ref([]);
+import { ref, computed } from 'vue'
+const searchKey = ref('')
+defineProps({
+  comType: {
+    type: String,
+    default: 'game',
+  },
+})
+const selectType = ref('*')
+const checkedKeys = ref([])
+const gameList = ref('')
+const data = ref([])
+const allGameIds = ref([])
 
 // 将原始数据转换为树形数据结构
 const treeData = computed(() => {
@@ -59,83 +61,76 @@ const treeData = computed(() => {
           title: child.name, // Tree组件显示的文本
         }))
       : [],
-  }));
+  }))
   if (!searchKey.value) {
-    return result;
+    return result
   } else {
-    return searchData(result, searchKey.value);
+    return searchData(result, searchKey.value)
   }
-});
+})
 
 // 搜索数据
 function searchData(result, keyword) {
   const loop = (data) => {
-    const result = [];
+    const result = []
     data.forEach((item) => {
       if (item.title.toLowerCase().indexOf(keyword.toLowerCase()) > -1) {
-        result.push({ ...item });
+        result.push({ ...item })
       } else if (item.children) {
-        const filterData = loop(item.children);
+        const filterData = loop(item.children)
         if (filterData.length) {
           result.push({
             ...item,
             children: filterData,
-          });
+          })
         }
       }
-    });
-    return result;
-  };
+    })
+    return result
+  }
 
-  return loop(result);
+  return loop(result)
 }
 
 function getMatchIndex(title) {
-  if (!searchKey.value) return -1;
-  return title.toLowerCase().indexOf(searchKey.value.toLowerCase());
+  if (!searchKey.value) return -1
+  return title.toLowerCase().indexOf(searchKey.value.toLowerCase())
 }
 
 const init = (allGameData, checkedGameList) => {
-  data.value = [];
-  gameList.value = checkedGameList;
-  checkedKeys.value =
-    checkedGameList === "*"
-      ? ["*"]
-      : checkedGameList?.split(",").map(Number) || [];
-  selectType.value = checkedGameList === "*" ? "*" : "0";
+  data.value = []
+  gameList.value = checkedGameList
+  checkedKeys.value = checkedGameList === '*' ? ['*'] : checkedGameList?.split(',').map(Number) || []
+  selectType.value = checkedGameList === '*' ? '*' : checkedGameList === '-1' ? '-1' : '0'
 
-  transformAllGamedata(allGameData);
-};
+  transformAllGamedata(allGameData)
+}
 
 const transformAllGamedata = (allGameData) => {
-  let resGameIds = [];
+  let resGameIds = []
 
   allGameData.forEach((item) => {
-    item.checked =
-      checkedKeys.value.includes(item.id) || checkedKeys.value[0] === "*";
+    item.checked = checkedKeys.value.includes(item.id) || checkedKeys.value[0] === '*'
     if (item.children && Array.isArray(item.children)) {
       item.children.forEach((child) => {
-        if (
-          checkedKeys.value.includes(child.id) ||
-          checkedKeys.value[0] === "*"
-        ) {
-          child.checked = true;
-          resGameIds.push(child.id);
+        if (checkedKeys.value.includes(child.id) || checkedKeys.value[0] === '*') {
+          child.checked = true
+          resGameIds.push(child.id)
         } else {
-          child.checked = false;
+          child.checked = false
         }
-      });
+      })
     }
-  });
-  data.value = allGameData;
-  allGameIds.value = resGameIds;
+  })
+  data.value = allGameData
+  allGameIds.value = resGameIds
   // 初始化选中的keys
-  initCheckedKeys();
-};
+  initCheckedKeys()
+}
 
 // 初始化选中状态
 const initCheckedKeys = () => {
-  const keys = [];
+  const keys = []
   data.value.forEach((parent) => {
     // if (parent.checked) {
     //   keys.push(parent.id || parent.name);
@@ -143,40 +138,39 @@ const initCheckedKeys = () => {
     if (parent.children && Array.isArray(parent.children)) {
       parent.children.forEach((child) => {
         if (child.checked) {
-          keys.push(child.id || `${parent.id || parent.name}_${child.name}`);
+          keys.push(child.id || `${parent.id || parent.name}_${child.name}`)
         }
-      });
+      })
     }
-  });
-  checkedKeys.value = keys;
-};
+  })
+  checkedKeys.value = keys
+}
 
 // 处理树节点选中状态变化
 const handleCheck = (checkedKeysValue, e) => {
-  console.log("选中状态变化:", checkedKeysValue);
-  checkedKeys.value = checkedKeysValue;
+  console.log('选中状态变化:', checkedKeysValue)
+  checkedKeys.value = checkedKeysValue
   // 同步更新原始数据的选中状态
   data.value.forEach((parent) => {
-    const parentKey = parent.id || parent.name;
-    parent.checked = checkedKeys.value.includes(parentKey);
+    const parentKey = parent.id || parent.name
+    parent.checked = checkedKeys.value.includes(parentKey)
 
     if (parent.children && Array.isArray(parent.children)) {
       parent.children.forEach((child) => {
-        const childKey =
-          child.id || `${parent.id || parent.name}_${child.name}`;
-        child.checked = checkedKeys.value.includes(childKey);
-      });
+        const childKey = child.id || `${parent.id || parent.name}_${child.name}`
+        child.checked = checkedKeys.value.includes(childKey)
+      })
     }
-  });
-};
+  })
+}
 
 const getGamePermissionData = async () => {
   return {
     selectType: selectType.value,
     checkedKeys: checkedKeys.value,
     gameList: gameList.value,
-  };
-};
+  }
+}
 
-defineExpose({ init, getGamePermissionData });
+defineExpose({ init, getGamePermissionData })
 </script>

+ 1 - 1
src/views/system/dept/game.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal :unmount-on-close="true" v-model:visible="visible" width="600px" @close="handleClose" @ok="handleOk">
     <template #title>部门游戏权限设置</template>
-    <game-permission ref="gamePermissionRef" />
+    <game-permission ref="gamePermissionRef" :comType="'game'" />
   </a-modal>
 </template>
 

+ 46 - 56
src/views/system/user/game-permission.vue

@@ -1,88 +1,78 @@
 <template>
-  <a-modal
-    :unmount-on-close="true"
-    v-model:visible="visible"
-    width="600px"
-    @close="handleClose"
-    @ok="handleOk"
-  >
-    <template #title
-      >{{ comType === "natural" ? "自然量" : "游戏" }}数据权限设置</template
-    >
+  <a-modal :unmount-on-close="true" v-model:visible="visible" width="600px" @close="handleClose" @ok="handleOk">
+    <template #title>{{ comType === 'natural' ? '自然量' : '游戏' }}数据权限设置</template>
     <div>
-      <game-permission ref="gamePermissionRef" />
+      <game-permission ref="gamePermissionRef" :comType="comType" />
     </div>
   </a-modal>
 </template>
 <script setup>
-import { ref, computed } from "vue";
-import api from "@/api/center/game";
-import userApi from "@/api/system/user";
-import GamePermission from "@/components/game-permission/index.vue";
-import { Message } from "@arco-design/web-vue";
-const emit = defineEmits(["success"]);
+import { ref, computed } from 'vue'
+import api from '@/api/center/game'
+import userApi from '@/api/system/user'
+import commonApi from '@/views/v1/api/common'
+import GamePermission from '@/components/game-permission/index.vue'
+import { Message } from '@arco-design/web-vue'
+const emit = defineEmits(['success'])
 
-const visible = ref(false);
-const adPermission = ref(0);
-const gamePermissionRef = ref();
-const deptId = ref(0);
-const id = ref(0);
-const comType = ref("natural");
-const checkedGameList = ref("");
-const formData = ref({});
+const visible = ref(false)
+const adPermission = ref(0)
+const gamePermissionRef = ref()
+const deptId = ref(0)
+const id = ref(0)
+const comType = ref('natural')
+const checkedGameList = ref('')
+const formData = ref({})
 
 const handleClose = () => {
-  visible.value = false;
-};
+  visible.value = false
+}
 
 const handleOk = async () => {
-  console.log("handleOk");
-  let { selectType, checkedKeys } =
-    await gamePermissionRef.value.getGamePermissionData();
-  console.log(selectType, checkedKeys);
-  let type = comType.value === "natural" ? "normal_game_list" : "game_list";
+  let { selectType, checkedKeys } = await gamePermissionRef.value.getGamePermissionData()
+  console.log(selectType, checkedKeys)
+  let type = comType.value === 'natural' ? 'normal_game_list' : 'game_list'
   let data = {
-    [type]: selectType === "*" ? "*" : checkedKeys.join(","),
-  };
+    [type]: selectType !== '0' ? selectType : checkedKeys.join(','),
+  }
   // 更新用户数据
   const result = await userApi.setUserPermission({
     id: formData.value.id,
     ...data,
-  });
+  })
 
   if (result.code === 200) {
-    Message.success("操作成功");
-    emit("success");
+    Message.success('操作成功')
+    emit('success')
   }
-};
+}
 
 // 打开弹框
-const open = async (row, type = "game") => {
-  let rowData = JSON.parse(JSON.stringify(row));
+const open = async (row, type = 'game') => {
+  let rowData = JSON.parse(JSON.stringify(row))
 
-  formData.value = rowData;
-  deptId.value = rowData.dept_id;
-  checkedGameList.value =
-    type === "natural" ? rowData.normal_game_list : rowData.game_list;
-  comType.value = type;
+  formData.value = rowData
+  deptId.value = rowData.dept_id
+  checkedGameList.value = type === 'natural' ? rowData.normal_game_list : rowData.game_list
+  comType.value = type
 
-  visible.value = true;
+  visible.value = true
 
-  await initPage();
-};
+  await initPage()
+}
 
 // 根据部门ID获取游戏列表数据
 const getGameListByDeptId = async () => {
-  const resp = await api.getGameListByDeptId({
+  const resp = await commonApi.getGameListByDeptIdApi({
     dept_id: deptId.value,
-  });
-  let gameList = JSON.parse(JSON.stringify(resp.data));
-  gamePermissionRef.value.init(gameList, checkedGameList.value);
-};
+  })
+  let gameList = JSON.parse(JSON.stringify(resp.data))
+  gamePermissionRef.value.init(gameList, checkedGameList.value)
+}
 
 const initPage = async () => {
-  await getGameListByDeptId();
-};
+  await getGameListByDeptId()
+}
 
-defineExpose({ open });
+defineExpose({ open })
 </script>

+ 10 - 0
src/views/v1/api/common.js

@@ -98,6 +98,16 @@ export default {
       params
     })
   },
+  /**
+   * 获取游戏列表根据部门ID
+   */
+  getGameListByDeptIdApi(params = {}) {
+    return request({
+      url: '/v1/common/getGameListOptionsByDeptId',
+      method: 'get',
+      params
+    })
+  },
 
   /**
    * 获取游戏列表