Jelajahi Sumber

feat: 权限管理-组织管理 新增上飞定制组件 && 添加/编辑时的上级部门固定为上飞

“fujiacheng” 1 tahun lalu
induk
melakukan
cce0db142d

+ 2 - 0
src/hooks/setting/index.ts

@@ -16,6 +16,7 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
     VITE_GLOB_LOGIN_APP,
     VITE_GLOB_APP_PC,
     VITE_GLOB_TENANT_CODE,
+    VITE_GLOB_DISABLE_DEPARTMENT_EDIT,
   } = getAppEnvConfig();
 
   // Take global configuration
@@ -31,6 +32,7 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
     loginApp: VITE_GLOB_LOGIN_APP,
     appPCUrl: VITE_GLOB_APP_PC,
     tenantCode: VITE_GLOB_TENANT_CODE,
+    disableDepartmentEdit: VITE_GLOB_DISABLE_DEPARTMENT_EDIT,
   };
   return glob as Readonly<GlobConfig>;
 };

+ 195 - 0
src/views/auth/dept/CreateDrawer-shangfei.vue

@@ -0,0 +1,195 @@
+<template>
+  <el-drawer v-model="isDrawer" :size="width" :title="title" @close="handleReset">
+    <el-form
+      :model="formParams"
+      :rules="rules"
+      ref="formRef"
+      label-placement="left"
+      :label-width="80"
+    >
+      <el-form-item label="部门名称" prop="deptName">
+        <!-- <el-input placeholder="请输入部门名称" v-model="formParams.deptName" /> -->
+        <el-input
+          placeholder="上海飞机制造有限公司"
+          disabled
+          v-if="formParams.deptId != null && formParams.deptId === props.deptList![0].deptId"
+        />
+        <el-select
+          v-model="formParams.deptName"
+          placeholder="请选择部门"
+          @click="updateDeptInfoList"
+          v-else
+        >
+          <el-option
+            v-for="item in deptNameList"
+            :label="item.deptName"
+            :value="item.deptName"
+            :disabled="!item.isEnable"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="上级部门" prop="parent">
+        <el-input placeholder="上海飞机制造有限公司" disabled />
+        <!-- <el-tree-select
+          :data="getTreeList"
+          clearable
+          check-strictly
+          v-model="formParams.parent"
+          placeholder="请选择上级部门"
+        /> -->
+      </el-form-item>
+
+      <el-form-item label="排序" prop="orderNum">
+        <el-input-number placeholder="请输入排序" v-model="formParams.orderNum" />
+      </el-form-item>
+      <el-form-item label="状态" prop="isEnable">
+        <el-switch v-model="formParams.isEnable">
+          <template #checked> 启用 </template>
+          <template #unchecked> 禁用 </template>
+        </el-switch>
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <el-space>
+        <el-button @click="handleReset">重置</el-button>
+        <el-button type="primary" :loading="subLoading" @click="formSubmit">提交</el-button>
+      </el-space>
+    </template>
+  </el-drawer>
+</template>
+
+<script lang="ts" setup>
+  import { ref, computed } from 'vue';
+  import { ElMessage } from 'element-plus';
+  import type { formParamsType } from './types';
+
+  import { addDept, editDept, deptInfo } from '@/api/auth/dept';
+
+  import { replaceParams } from '@/utils/helper/treeHelper';
+  import { getDeptInfoList } from '@/api/deptInfo';
+
+  type DeptNameListType = {
+    isEnable: boolean;
+    deptName: string;
+  };
+  const deptNameList = ref<DeptNameListType[]>([]);
+  const updateDeptInfoList = () => {
+    getDeptInfoList().then((res) => {
+      deptNameList.value = res;
+    });
+  };
+
+  const rules = {
+    deptName: {
+      required: true,
+      message: '部门不能为空',
+      trigger: 'blur',
+    },
+  };
+
+  const emit = defineEmits(['change']);
+
+  const props = defineProps({
+    title: {
+      type: String,
+      default: '添加部门',
+    },
+    width: {
+      type: Number,
+      default: 450,
+    },
+    deptList: {
+      type: Array<formParamsType>,
+    },
+  });
+
+  const defaultValueRef = () => ({
+    deptId: null,
+    parent: null,
+    isEnable: true,
+    deptName: '',
+    orderNum: undefined,
+  });
+
+  const message = ElMessage;
+  const formRef: any = ref(null);
+  const isDrawer = ref(false);
+  const subLoading = ref(false);
+
+  const getTreeList = computed(() => {
+    return [
+      {
+        label: '顶级部门',
+        value: 0,
+        children: replaceParams(props.deptList || [], 'deptName', 'deptId'),
+      },
+    ];
+  });
+
+  const formParams = ref<formParamsType>(defaultValueRef());
+
+  function openDrawer(deptId?) {
+    if (deptId) {
+      formParams.value.deptId = deptId;
+      getInfo();
+      return;
+    } else {
+      formParams.value.parent = props.deptList![0].deptId;
+    }
+    isDrawer.value = true;
+  }
+
+  function closeDrawer() {
+    isDrawer.value = false;
+  }
+
+  function formSubmit() {
+    formRef.value.validate((valid) => {
+      if (!valid) {
+        return message.error('请填写完整信息');
+      }
+      const msg = formParams.value.deptId ? '编辑成功' : '添加成功';
+      if (formParams.value.deptId) {
+        editDept(formParams.value).then((_) => {
+          message.success(msg);
+          emit('change');
+          handleReset();
+          closeDrawer();
+        });
+      } else {
+        addDept(formParams.value).then((_) => {
+          message.success(msg);
+          emit('change');
+          handleReset();
+          closeDrawer();
+        });
+      }
+    });
+  }
+
+  function handleReset() {
+    formRef.value.resetFields();
+    formParams.value = Object.assign(formParams.value, defaultValueRef());
+  }
+
+  function getInfo() {
+    deptInfo({ id: formParams.value.deptId }).then((res) => {
+      const params = {
+        deptId: res.deptId,
+        parent: res.parent,
+        isEnable: res.isEnable,
+        deptName: res.deptName,
+        orderNum: res.orderNum,
+      };
+      formParams.value = Object.assign(formParams.value, params);
+      isDrawer.value = true;
+    });
+  }
+
+  defineExpose({
+    openDrawer,
+    closeDrawer,
+  });
+</script>

+ 15 - 0
src/views/auth/dept/dept.vue

@@ -62,11 +62,19 @@
       </BasicTable>
     </el-card>
 
+    <CreateDrawer_shangfei
+      ref="createDrawerRef"
+      :title="drawerTitle"
+      :deptList="tableData"
+      @change="reloadTable"
+      v-if="disableDepartmentEdit"
+    />
     <CreateDrawer
       ref="createDrawerRef"
       :title="drawerTitle"
       :deptList="tableData"
       @change="reloadTable"
+      v-else
     />
   </PageWrapper>
 </template>
@@ -78,7 +86,12 @@
   import { deptTreeList, deleteDept } from '@/api/auth/dept';
   import { FileAddOutlined } from '@vicons/antd';
   import CreateDrawer from './CreateDrawer.vue';
+  import CreateDrawer_shangfei from './CreateDrawer-shangfei.vue';
   import { columns } from './columns';
+  import { useGlobSetting } from '@/hooks/setting';
+
+  const globSetting = useGlobSetting();
+  const disableDepartmentEdit = globSetting.disableDepartmentEdit;
 
   const message = ElMessage;
   const basicTableRef = ref();
@@ -99,6 +112,8 @@
     fixed: 'right',
     align: 'center',
     render(record) {
+      const { index, row } = record;
+      if (index === 0 && disableDepartmentEdit) return null;
       return h(TableAction as any, {
         actions: [
           {

+ 3 - 0
types/config.d.ts

@@ -57,6 +57,7 @@ export interface GlobConfig {
   appDownloadUrl?: string;
   loginApp?: string;
   appPCUrl?: string;
+  disableDepartmentEdit?: boolean;
 }
 
 export interface GlobEnvConfig {
@@ -84,6 +85,8 @@ export interface GlobEnvConfig {
   VITE_GLOB_APP_PC: string;
 
   VITE_GLOB_TENANT_CODE: string;
+
+  VITE_GLOB_DISABLE_DEPARTMENT_EDIT: boolean;
 }
 export interface GlobConfig {
   // 标题

+ 3 - 0
utils/devProxy/staff-shangfei/app.config.js

@@ -14,6 +14,9 @@ window.__PRODUCTION__SKYEYEADMIN__CONF__ = {
   "VITE_GLOB_APP_PC": "/skyeyev3pc/",
 
   "VITE_GLOB_QUESTION_LIST_VERSION": '',
+  
+  // 为上飞定制的是否允许修改组织结构编辑,上飞不允许编辑,其他项目允许编辑
+  "VITE_GLOB_DISABLE_DEPARTMENT_EDIT": true,
 
 };