Przeglądaj źródła

部门接口联调

tianyabing 2 lat temu
rodzic
commit
011931d8cc

+ 24 - 0
src/api/company/company.js

@@ -7,6 +7,20 @@ const getCompanyList = (name, page, page_size) => {
     );
 }
 
+/** 获取所有公司列表 */
+const getAllCompanyList = (name, page, page_size) => {
+    return get(
+        `/organization/all_company?name=${name}&page=${page}&page_size=${page_size}`
+    );
+}
+
+// 获取公司下部门
+const getDeptListByCompany = (company_id) => {
+  return get('/organization/department_list', {
+      company_id: company_id
+  })
+}
+
 /** 获取公司详情 */
 const getCompanyInfo = (id) => {
     return get(
@@ -14,6 +28,13 @@ const getCompanyInfo = (id) => {
     );
 }
 
+// 获取部门详情
+const getDeptInfo = (id) => {
+  return get('/organization/department', {
+      department_id: id
+  })
+}
+
 //修改公司详情
 const updateCompanyInfo = (param) => {
   return put('/organization/company', param);
@@ -49,7 +70,10 @@ const delDept = (param) => {
 
 export {
     getCompanyList,
+    getAllCompanyList,
+    getDeptListByCompany,
     getCompanyInfo,
+    getDeptInfo,
     updateCompanyInfo,
     delCompanyInfo,
     addCompany,

+ 4 - 1
src/views/userManagement/groupManagement/forms/corporationdetailEdit.vue

@@ -24,7 +24,7 @@
             </el-form-item>
             <el-form-item label="上级公司:">
                 <el-select v-model="form.parentCorporation" placeholder="请选择上级公司">
-                    <el-option v-for="item in superiorOptions" :key="item.value" :value="item.value" :label="item.label"></el-option>
+                    <el-option v-for="item in companyList" :key="item.value" :value="item.id" :label="item.company_name"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="统一社会信用代码:">
@@ -183,6 +183,9 @@ export default {
             }
         },
         getCompanyInfo() {
+            if (!this.item.id) {
+                return;
+            }
             getCompanyInfo(this.item.id).then(res => {
                 let data = res.data;
                 if (data.code == 0) {

+ 54 - 7
src/views/userManagement/groupManagement/forms/departmentdetailEdit.vue

@@ -12,7 +12,7 @@
             </el-form-item>
             <el-form-item label="上级公司:">
                 <el-select v-model="form.company_id" placeholder="请选择上级公司">
-                    <el-select-option label="中讯" value="1"></el-select-option>
+                    <el-option v-for="item in companyList" :key="item.value" :value="item.id" :label="item.company_name"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="部门负责人:">
@@ -50,12 +50,13 @@
 <script>
 import departmentNew from '../messageDialog/departmentNew';
 import province from '@/data/province.json'
-import {getCompanyInfo} from "@/api/company/company";
+import {delCompanyInfo, delDept, getCompanyInfo, getDeptInfo, updateDept} from "@/api/company/company";
 
 export default {
     components: {departmentNew},
     props: {
         item: Object,
+        companyList: Array,
     },
     data() {
         return {
@@ -84,19 +85,65 @@ export default {
             addressOptions: [],
         };
     },
+    watch: {
+        item: {
+            deep: true,
+            handler: function (val) {
+                this.getDeptInfo()
+            }
+        }
+    },
     mounted() {
-        this.getCompanyInfo()
+        this.getDeptInfo()
     },
+    emits: ['close'],
     methods: {
         edit() {
-            this.show = true;
-            this.disabled = false;
+            let param = JSON.parse(JSON.stringify(this.form))
+            param = param.department_name;
+            updateDept(param).then(res=>{
+                let data = res.data;
+                if (data.code==0) {
+                    this.$message.success('修改成功')
+                    this.$emit('close', {
+                        type: 'view'
+                    })
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
+        },
+        del() {
+            this.$confirm('确定要删除吗?', '提示', {
+                type: 'warning'
+            }).then(()=>{
+                let param = {
+                    department_id: this.item.id
+                }
+                delDept(param).then(res=>{
+                    let data = res.data;
+                    if (data.code == 0) {
+                        this.$emit('close', {
+                            type: 'view'
+                        })
+                        this.$message.success('删除成功');
+                    } else {
+                        this.$message.error(data.message);
+                    }
+                })
+            })
         },
-        getCompanyInfo() {
-            getCompanyInfo(1).then(res => {
+        getDeptInfo() {
+            if (!this.item.id) {
+                return;
+            }
+            getDeptInfo(this.item.id).then(res => {
                 let data = res.data;
                 if (data.code == 0) {
                     this.form = JSON.parse(JSON.stringify(data.data[0]));
+                    if (this.form.department_name && this.form.department_name!='') {} else {
+                        this.form.department_name = this.form.name
+                    }
                 } else {
                     this.$message.error(data.message)
                 }

+ 68 - 41
src/views/userManagement/groupManagement/index.vue

@@ -2,26 +2,37 @@
     <div class="container">
         <div class="left-pane">
             <el-input class="left-pane-input" placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
-            <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" :highlight-current="true"
-                :filter-node-method="filterNode" @node-click="handleNodeClick">
+            <el-tree v-if="type!='dept'" ref="tree" :data="data" :props="defaultProps" node-key="id" :highlight-current="true"
+                :filter-node-method="filterNode" @node-click="handleNodeClick" style="overflow-y: auto;overflow-x: hidden">
                 <span slot-scope="{node,data}">
-                    <el-image :src="data.url"></el-image>
-                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ node.label }}</span>
-                    <!--<span class="operate_btns">-->
-                    <!--    <dropdown :events="data.id == 1 ? menuEvents : subMenuEvents" :data="{ node, data }"-->
-                    <!--        @itemClick="dropDownClick"></dropdown>-->
-                    <!--</span>-->
+                    <el-image :src="require('@/assets/tree/group/company@3x.png')"></el-image>
+                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ data.company_name }}</span>
+                    <span class="operate_btns">
+                        <dropdown :events="menuEvents" :data="{ node, data }"
+                            @itemClick="dropDownClick"></dropdown>
+                    </span>
+                </span>
+            </el-tree>
+            <el-tree v-if="type=='dept'" ref="tree" :data="data" :props="deptProps" node-key="id" :highlight-current="true"
+                     :filter-node-method="filterNode" @node-click="handleNodeClick" style="overflow-y: auto;overflow-x: hidden">
+                <span slot-scope="{node,data}">
+                    <el-image :src="require('@/assets/tree/group/affiliate@3x.png')"></el-image>
+                    <span style="padding-left: 10px; vertical-align: text-bottom;">{{ data.department_name }}</span>
+                    <span class="operate_btns">
+                        <dropdown :events="subMenuEvents" :data="{ node, data }"
+                                  @itemClick="dropDownClick"></dropdown>
+                    </span>
                 </span>
             </el-tree>
             <el-button class="addDepartment" @click="addDepartment" style="color: #fff; background: #3da0d6">
                 <i class="el-icon-s-order" style="padding-right: 4px"></i>
-                新建企业
+                新建企业/部门
             </el-button>
         </div>
         <div class="right-pane">
             <overView v-if="viewShow" @nodeClick="handleNodeClick"></overView>
-            <corporation :item="currentNode" v-if="corporShow" @close="handleNodeClick"></corporation>
-            <department :item="currentNode" v-if="departShow" @close="handleNodeClick"></department>
+            <corporation :item="currentNode" :company-list="companyList" v-if="corporShow" @close="handleNodeClick"></corporation>
+            <department :item="currentNode" :company-list="companyList" v-if="departShow" @close="handleNodeClick"></department>
         </div>
 
         <CorporationAdd ref="corporationAdd" />
@@ -34,40 +45,31 @@ import corporation from './forms/corporationdetailEdit';
 import department from './forms/departmentdetailEdit';
 import CorporationAdd from "@/views/userManagement/groupManagement/messageDialog/corporationAdd.vue";
 import dropdown from '@/components/Dropdown/index';
-import {getCompanyList} from '@/api/company/company'
+import {getAllCompanyList, getCompanyList, getDeptListByCompany} from '@/api/company/company'
 export default {
     components: { overView, dropdown, corporation, department, CorporationAdd },
     data() {
         return {
+            type: 'company',
             filterText: '',
             viewShow: true,
             corporShow: false,
             departShow: false,
-            data: [{
-                id:2,
-                label: '北京电信规划设计院',
-                url: require('@/assets/tree/group/company@3x.png'),
-                type: 'company',
-                children: [{
-                    id:3,
-                    url: require('@/assets/tree/group/affiliate@3x.png'),
-                    label: '天津办事处',
-                    type: 'dept',
-                }]
-            }],
+            data: [],
+            companyList: [],
             menuEvents: [
-                { label: '新建', funcName: 'addNode' }
+                { label: '查看部门', funcName: 'viewDepts' }
             ],
             subMenuEvents: [
-                { label: '新建', funcName: 'addNode' },
-                { label: '上移', funcName: 'moveUp' },
-                { label: '下移', funcName: 'moveDown' },
-                { label: '编辑', funcName: 'editNode' },
-                { label: '删除', funcName: 'removeNode' }
+                { label: '返回公司', funcName: 'viewCompany' }
             ],
             defaultProps: {
+                children: 'parent_company',
+                label: 'company_name'
+            },
+            deptProps: {
                 children: 'children',
-                label: 'label'
+                label: 'department_name'
             },
             currentNode: {}
         }
@@ -79,6 +81,7 @@ export default {
     },
     mounted() {
         this.getCompanyData();
+        this.getAllCompanyData();
     },
     methods: {
         getCompanyData() {
@@ -86,23 +89,45 @@ export default {
                 let data = res.data;
                 if (data.code == 0) {
                     this.data = data.data;
-                    this.data.forEach(item => {
-                        item.url = require('@/assets/tree/group/company@3x.png');
-                        item.label = item.company_name;
-                        item.type = 'company'
-                    })
+                    this.type='company'
+                    //this.data.forEach(item => {
+                    //    item.type = 'company'
+                    //})
                 } else {
                     this.$message.error(data.message)
                 }
             })
         },
+        getAllCompanyData() {
+            getAllCompanyList('', 1, 999).then(res=>{
+                let data = res.data;
+                if (data.code==0) {
+                    this.companyList = data.data;
+                } else {
+                    this.$message.error(data.message)
+                }
+            })
+        },
+        getDeptData(companyId) {
+            this.corporShow = false;
+            this.departShow = false;
+            this.viewShow = true;
+            getDeptListByCompany(companyId).then(res=>{
+                let data = res.data;
+                if (data.code == 0) {
+                    this.type = 'dept'
+                    this.data = data.data
+                    this.$forceUpdate()
+                }
+            })
+        },
         handleNodeClick(data) {
             this.currentNode = data
-            if (data.type=='company') {
+            if (this.type=='company') {
                 this.viewShow = false;
                 this.corporShow = true;
                 this.departShow = false;
-            } else if (data.type=='dept') {
+            } else if (this.type=='dept') {
                 this.viewShow = false;
                 this.corporShow = false;
                 this.departShow = true;
@@ -126,9 +151,11 @@ export default {
 
         },
         dropDownClick(funcName, data) {
-            this.currentNode = data;
-            if (funcName === 'addNode') {
-                //
+            this.currentNode = data.node;
+            if (funcName === 'viewDepts') {
+                this.getDeptData(data.data.id)
+            } else if (funcName == 'viewCompany'){
+                this.getCompanyData()
             }
         },
     }

+ 11 - 8
src/views/userManagement/groupManagement/messageDialog/corporationAdd.vue

@@ -4,10 +4,10 @@
                    append-to-body>
             <el-divider></el-divider>
 
-            <!--<el-radio-group v-model="addType" style="margin: 20px 200px">-->
-            <!--    <el-radio label="1">企业</el-radio>-->
-            <!--    <el-radio label="2">部门</el-radio>-->
-            <!--</el-radio-group>-->
+            <el-radio-group v-model="addType" style="margin: 20px 200px">
+                <el-radio label="1">企业</el-radio>
+                <el-radio label="2">部门</el-radio>
+            </el-radio-group>
 
             <el-form v-if="show.company" :model="companyForm" :rules="formRules" label-position="right" label-width="200px">
                 <el-form-item label="公司全称:" prop="company_name">
@@ -54,13 +54,13 @@
                 </el-form-item>
             </el-form>
 
-            <el-form v-if="show.dept" :model="deptForm" label-position="right" label-width="200px">
-                <el-form-item label="部门名称:">
+            <el-form v-if="show.dept" :model="deptForm" :rules="formRules" label-position="right" label-width="200px">
+                <el-form-item label="部门名称:" prop="department_name">
                     <el-input v-model="deptForm.department_name" placeholder="请输入部门名称"/>
                 </el-form-item>
                 <el-form-item label="上级公司:">
                     <el-select v-model="deptForm.company_id" placeholder="请选择上级公司">
-                        <el-option v-for="item in companyList" :key="item.id" :value="item.id">{{ item.company_name }}</el-option>
+                        <el-option v-for="item in companyList" :key="item.id" :value="item.id" :label="item.company_name">{{ item.company_name }}</el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item label="部门负责人:">
@@ -142,7 +142,10 @@ export default {
             formRules: {
                 company_name: [
                     { required: true, message: '请输入公司名称', trigger: 'change' }
-                ]
+                ],
+                department_name: [
+                    { required: true, message: '请输入部门名称', trigger: 'change' }
+                ],
             },
             companyList: [],
             companyForm: {},

+ 2 - 2
src/views/userManagement/groupManagement/tables/corporationOverview.vue

@@ -32,7 +32,7 @@
 <script>
 import checkbox from '@/components/Checkbox/index';
 import page from '@/components/pagination/index';
-import {delCompanyInfo, getCompanyList} from "@/api/company/company";
+import {delCompanyInfo, getAllCompanyList, getCompanyList} from "@/api/company/company";
 export default {
     components: { checkbox, page },
     emits: ['nodeClick'],
@@ -95,7 +95,7 @@ export default {
             this.getTableData(1);
         },
         getTableData(page) {
-            getCompanyList('', this.paginationData.currentPage, this.paginationData.pageSize).then(res=>{
+            getAllCompanyList('', this.paginationData.currentPage, this.paginationData.pageSize).then(res=>{
                 let data = res.data;
                 if (data.code == '0') {
                     this.paginationData.total = data.total