Преглед изворни кода

feat:数据共享 用户组

snow пре 2 година
родитељ
комит
a64bff31a7

+ 10 - 0
src/api/interest/dataShare/index.ts

@@ -43,3 +43,13 @@ export const httpDetail = (data = {}): ResponseType => {
   return http.request("post", `${yewuApi}getDataShareDetail`, { data });
 };
 
+
+//数据共享编辑
+export const httpUpdate = (data = {}): ResponseType => {
+  return http.request("post", `${yewuApi}editDataShare`, { data });
+};
+
+//数据共享编辑
+export const httpStatus = (data = {}): ResponseType => {
+  return http.request("post", `${yewuApi}statusDataShare`, { data });
+};

+ 75 - 18
src/views/interest/dataShare/components/share-modal.vue

@@ -2,7 +2,10 @@
 import { ref, computed, reactive } from "vue";
 import { useAsync } from "/@/hooks";
 import { ElForm } from "element-plus";
-import { httpUserList, httpMenuList, httpUserGroup, httpAdd, httpDetail } from "/@/api/interest/dataShare";
+import { rules } from "./../config/configs";
+import { httpUserList, httpMenuList, httpUserGroup, httpAdd, httpDetail, httpUpdate } from "/@/api/interest/dataShare";
+
+const emit = defineEmits(['reload']);
 
 const id = ref("");
 const readonly = ref(false);
@@ -21,18 +24,26 @@ const initalData = {
 }
 
 const shareTypes = reactive({
-  origin: '1',
+  source: '1',
   target: '1'
 })
 
-const formData = ref({ ...initalData })
-
 const title = computed(() => {
   if (readonly.value) return '数据共享详情'
-
   return isCreate.value ? '创建数据共享' : '编辑数据共享'
 })
 
+const onBeforeAction = () => {
+  visible.value = false;
+  emit('reload')
+}
+
+
+const initalLoading = computed(() => groupLoading.value || menuLoading.value || userLoading.value || detailLoading.value)
+const actionLoading = computed(() => createLoading.value || updateLoading.value)
+
+const formData = ref({ ...initalData })
+
 const { run: userlistRun, data: userlist, loading: userLoading } = useAsync<Array<Record<string, string>>>({
   initalData: [],
 });
@@ -46,9 +57,36 @@ const { run: grouplistRun, data: grouplist, loading: groupLoading } = useAsync<A
   isList: true
 });
 
-const { run: createDataShareRun } = useAsync()
+const { run: createDataShareRun, loading: createLoading } = useAsync({
+  success: () => onBeforeAction()
+})
+const { run: updateDateShareRun, loading: updateLoading } = useAsync({
+  success: () => onBeforeAction()
+})
 
-const { run:dataShareDetailRun,data:dataShareDetail } = useAsync();
+const { run: dataShareDetailRun, data: dataShareDetail, loading: detailLoading } = useAsync<Record<string, any>>({
+  initalData: {},
+  success: () => {
+    let { menu_list, source_data_group_id, data_group_id, uid, source_uid, type } = dataShareDetail.value;
+
+    shareTypes.source = source_uid === '0' ? '2' : '1'
+    shareTypes.target = uid === '0' ? '2' : '1'
+
+    data_group_id = data_group_id === '0' ? '' : data_group_id
+    source_data_group_id = source_data_group_id === '0' ? '' : source_data_group_id
+    uid = uid === '0' ? '' : uid
+    source_uid = source_uid === '0' ? '' : source_uid
+
+    formData.value = {
+      menu_ids: menu_list.map(({ id }) => id),
+      source_data_group_id,
+      data_group_id,
+      source_uid,
+      uid,
+      type
+    }
+  }
+});
 
 function createDataShare() {
   createDataShareRun(
@@ -58,33 +96,49 @@ function createDataShare() {
   );
 }
 
+function updateDataShare() {
+  updateDateShareRun(
+    httpUpdate(
+      {
+        ...formData.value,
+        id: id.value
+      }
+    )
+  )
+}
+
 function handleConfirm() {
   formRef.value.validate(isValid => {
     console.log(isValid)
     if (!isValid) return;
 
     if (isCreate.value) return createDataShare();
+
+    updateDataShare();
   })
 }
 
 defineExpose({
   onDisplay(_id = "", _readonly = false) {
     visible.value = true;
-    formData.value = { ...initalData }
     userlistRun(httpUserList());
     menulistRun(httpMenuList());
     grouplistRun(httpUserGroup());
     readonly.value = _readonly;
     id.value = _id;
+
+    if (!_id) return formData.value = { ...initalData }
+
+    dataShareDetailRun(httpDetail({ id: id.value }))
   }
 })
 </script>
 
 
 <template>
-  <el-dialog v-model="visible" :title="title" center>
-    <el-form label-width="120px" ref="formRef" :model="formData" :disabled="readonly"
-      v-loading="groupLoading || menuLoading || userLoading">
+  <el-dialog v-model="visible" :title="title" center @close="() => formData = {...initalData}">
+    <el-form label-width="120px" ref="formRef" :model="formData" :disabled="readonly" v-loading="initalLoading"
+      :rules="rules">
 
       <el-form-item prop="menu_ids" label="共享的菜单数据">
         <el-select w-full v-model="formData.menu_ids" multiple>
@@ -92,12 +146,13 @@ defineExpose({
         </el-select>
       </el-form-item>
 
-      <el-form-item label="数据源共享对象">
-        <el-select w-100px v-model="shareTypes.origin">
+      <el-form-item label="数据源共享对象" :prop="shareTypes.source === '1' ? 'source_uid' : 'source_data_group_id'">
+        <el-select w-100px v-model="shareTypes.source"
+          @change="val =>  val === '1' ? formData.source_data_group_id = '' : formData.source_uid = ''">
           <el-option value="1" label="用户" />
           <el-option value="2" label="用户组" />
         </el-select>
-        <el-select flex-1 placeholder="请选择用户" v-if="shareTypes.origin === '1'" v-model="formData.source_uid">
+        <el-select flex-1 placeholder="请选择用户" v-if="shareTypes.source === '1'" v-model="formData.source_uid">
           <el-option v-for="user in userlist" :key="user.id" :value="user.id" :label="user.nickname"></el-option>
         </el-select>
         <el-select flex-1 placeholder="请选择用户组" v-else v-model="formData.source_data_group_id">
@@ -107,8 +162,9 @@ defineExpose({
 
       <el-divider />
 
-      <el-form-item label="数据共享对象">
-        <el-select w-100px v-model="shareTypes.target">
+      <el-form-item label="数据共享对象" :prop="shareTypes.target === '1' ? 'uid' : 'data_group_id'">
+        <el-select w-100px v-model="shareTypes.target"
+          @change="val =>  val === '1' ? formData.source_uid = '' : formData.uid = ''">
           <el-option value="1" label="用户" />
           <el-option value="2" label="用户组" />
         </el-select>
@@ -121,7 +177,7 @@ defineExpose({
       </el-form-item>
 
 
-      <el-form-item label="共享的数据权限">
+      <el-form-item label="共享的数据权限" prop="type">
         <el-radio-group v-model="formData.type">
           <el-radio label="2">只读</el-radio>
           <el-radio label="1">读写</el-radio>
@@ -130,7 +186,8 @@ defineExpose({
 
       <el-form-item>
         <div w-full flex justify-end>
-          <el-button type="primary" @click="() => handleConfirm()">提交</el-button>
+          <el-button type="primary" @click="() => handleConfirm()" :loading="actionLoading">提交
+          </el-button>
           <el-button @click="() => visible = false">取消</el-button>
         </div>
       </el-form-item>

+ 6 - 11
src/views/interest/dataShare/config/configs.ts

@@ -20,37 +20,32 @@ export const shareTypes = [
 ];
 
 export const rules = {
-  [userGroupProps.menu]: {
+  "menu_ids": {
     required: true,
     trigger: "blur",
     message: "请选择共享的菜单数据"
   },
-  [userGroupProps.source_user]: {
+  "source_uid": {
     required: true,
     trigger: "blur",
     message: "请选择数据源用户"
   },
-  [userGroupProps.source_group]: {
+  "source_data_group_id": {
     required: true,
     trigger: "blur",
     message: "请选择数据源用户组"
   },
-  [userGroupProps.menu]: {
-    required: true,
-    trigger: "blur",
-    message: "请选择共享的菜单数据"
-  },
-  [userGroupProps.data_user]: {
+  "uid": {
     required: true,
     trigger: "blur",
     message: "请选择数据共享用户"
   },
-  [userGroupProps.data_group]: {
+  "data_group_id": {
     required: true,
     trigger: "blur",
     message: "请选择数据共享用户组"
   },
-  [userGroupProps.share]: {
+  "type": {
     required: true,
     trigger: "blur",
     message: "请选择共享的数据权限"

+ 3 - 2
src/views/interest/dataShare/config/content.config.ts

@@ -1,5 +1,5 @@
 import { ContentConfig } from "/@/components/PageContent";
-import { httpList } from "/@/api/interest/dataShare";
+import { httpList, httpStatus } from "/@/api/interest/dataShare";
 
 import { h } from "vue";
 import dayjs from "dayjs";
@@ -93,9 +93,10 @@ const contentConfig: ContentConfig = {
   title: "数据共享",
   powers: ["001", "002", "003", "004", "005", "006", "007", "008"],
   columns,
+  isRequesetArray: true,
   apis: {
     httpList,
-    httpStatus: true,
+    httpStatus,
     httpUpdate: true,
     httpAdd: true
   }

+ 22 - 11
src/views/interest/dataShare/config/search.config.ts

@@ -5,27 +5,38 @@ import { shareTypes } from "./configs";
 const searchFormConfig: FormConfig = {
   formItems: [
     {
-      field: "company",
-      type: "select",
-      placeholder: "当前状态",
-      options: statusList
+      field: "source_nickname",
+      type: "input",
+      placeholder: "数据源用户"
+    },
+    {
+      field: "source_group_title",
+      type: "input",
+      placeholder: "数据源用户组"
     },
     {
-      field: "contactor",
+      field: "nickname",
       type: "input",
-      placeholder: "用户组名称"
+      placeholder: "数据共享用户"
     },
     {
-      field: "contactor",
+      field: "group_title",
       type: "input",
-      placeholder: "成员名称"
+      placeholder: "数据共享用户组",
+      options: shareTypes
     },
     {
-      field: "contactor",
+      field: "status",
       type: "select",
-      placeholder: "共享类型",
+      placeholder: "当前状态",
+      options: statusList
+    },
+    {
+      field: "type",
+      type: "select",
+      placeholder: "共享权限",
       options: shareTypes
-    }
+    },
   ]
 };
 

+ 3 - 1
src/views/interest/dataShare/index.vue

@@ -35,11 +35,13 @@ const { permission, contentConfigRef } = usePermission({
           ref="pageContentRef"
           :content-config="contentConfigRef"
           @create-btn-click="() => shareModalRef.onDisplay()"
+          @preview-btn-click="({id}) => shareModalRef.onDisplay(id,true)"
+          @update-btn-click="({id}) => shareModalRef.onDisplay(id)"
         />
       </div>
     </PagePower>
 
-    <ShareModal ref="shareModalRef" />
+    <ShareModal ref="shareModalRef" @reload="() => handleResetClick()" />
   </div>
 </template>
 

+ 3 - 1
src/views/interest/userGroup/config/content.config.ts

@@ -31,7 +31,9 @@ const columns = [
     label: "状态",
     prop: userGroupProps.status,
     cellRenderer({ row }) {
-      return h(ElTag, null, {
+      return h(ElTag, {
+        type: row.status === '0' ? 'warning' : ''
+      }, {
         default: () =>
           statusList.find(t => t.value === row[userGroupProps.status])?.label ||
           "--"