xiexiang 9 місяців тому
батько
коміт
bfc1cdb53e

+ 24 - 18
src/api/position.js

@@ -2,25 +2,31 @@ import axios from '@/utils/axios'
 
 export default {
     /**
-     * 获取职位列表
-     * @param {*} data 
-     * @returns 
+     * 查询职位
      */
-    getPositionList(params){
+    getPositionList(params) {
         return axios.get('/permission/api/position/queryPageList', {params})
     },
-
-    // /**
-    //  * 查询角色
-    //  */
-    // getRoleList(params) {
-    //     return axios.get('/permission/api/role/queryPageList', { params })
-    // },
-
-    // /**
-    //  * 用户信息
-    //  */
-    // getUserInfo() {
-    //     return axios.get('/permission/api/admin/userinfo')
-    // },
+    /**
+     * 编辑职位
+     */
+    editPosition(data) {
+        return axios.post('/permission/api/position/update', data)
+    },
+    /**
+     * 新增职位
+     */
+    addPosition(data) {
+        return axios.post('/permission/api/position/add', data)
+    },
+    /**
+     * 删除职位
+     */
+    deletePosition(params) {
+        return axios({
+            url: '/permission/api/position/delete',
+            method: 'post',
+            params: params
+        })
+    },
 }

+ 14 - 0
src/router/index.js

@@ -105,6 +105,20 @@ export const backStageManageRouterItem = [
         component: () => import('@/views/backStageManage/organization/position/index.vue'),
         meta: {title: '职位管理',icon: '职位'},
       },
+      {
+        path: 'addPosition',
+        name: 'Administrator_addPosition',
+        component: () => import('@/views/backStageManage/organization/position/addPosition.vue'),
+        meta: {title: '添加职位',keepAlive:true},
+        hidden:true
+      },
+      {
+        path: 'editPosition',
+        name: 'Administrator_editPosition',
+        component: () => import('@/views/backStageManage/organization/position/editPosition.vue'),
+        meta: {title: '编辑职位', keepAlive:true},
+        hidden:true
+      },
     ]
   },
 

+ 1 - 1
src/views/backStageManage/organization/department/addDepartment.vue

@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import departmentFrom from './components/department.vue';
+import departmentFrom from './components/form/department.vue';
 export default {
     components: {
         departmentFrom

+ 12 - 2
src/views/backStageManage/organization/department/components/department.vue

@@ -10,9 +10,14 @@
               <el-form-item>
                 <el-button type="primary" icon="el-icon-search" size="mini" @click="getList">搜索</el-button>
                 <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-                <el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd(0)">新增</el-button>
+                <!-- <el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd(0)">新增</el-button> -->
               </el-form-item>
             </el-form>
+            <el-row :gutter="10" class="mb8">
+              <el-col :span="1.5">
+                <el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd(0)">新增</el-button>
+              </el-col>
+            </el-row>
           </div>
         </el-header>
         <el-main class="padding_10">
@@ -157,7 +162,12 @@ export default {
 
         /** 新增按钮操作 */
         handleAdd(updepartmentId,row) {
-            this.$router.push('/administrator/addDepartment');
+            this.$router.push({
+                path: '/administrator/addDepartment',
+                query: {
+                    id
+                }
+            });
         },
 
         handleEdit(row) {

+ 1 - 0
src/views/backStageManage/organization/department/components/form/department.vue

@@ -5,6 +5,7 @@
                 <el-button size="small"  @click="init">重 置</el-button>
         </div>
         <div class="form_center" >
+            
             <el-form ref="form" :model="form" :rules="rules" label-position="left" label-width="100px" :class="model == 'detail'?'pointer_events_none':''">
                 <el-form-item label="所属租户" prop="tenant">
                     <el-tooltip

+ 25 - 0
src/views/backStageManage/organization/position/addPosition.vue

@@ -0,0 +1,25 @@
+<template>
+    <div>
+        <positionForm model="add"></positionForm>
+    </div>
+</template>
+
+<script>
+import positionForm from './components/form/position.vue';
+export default {
+    components: {
+        positionForm
+    },
+    props: {},
+    data() {
+        return {};
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {},
+    methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 180 - 0
src/views/backStageManage/organization/position/components/form/position.vue

@@ -0,0 +1,180 @@
+<template>
+    <div>
+        <div class="button-container" v-if="model != 'detail'">
+                <el-button type="primary" size="small" :loading="btnLoading" @click="submitForm">提 交</el-button>
+                <el-button size="small"  @click="init">重 置</el-button>
+        </div>
+        <div class="form_center" >
+            
+            <el-form ref="form" :model="form" :rules="rules" label-width="100px" label-position="left">
+        
+                <el-form-item label="所属租户" prop="tenant">
+                    <el-tooltip
+                        class="item"
+                        effect="dark"
+                        :disabled="!userinfo.tenantName"
+                        :content="userinfo.tenantName"
+                        placement="top-start"
+                        >
+                        <el-input v-model="userinfo.tenantName" placeholder="请输入所属租户" :readonly="true"></el-input>
+                    </el-tooltip>
+                </el-form-item>
+
+                <el-form-item label="职位名称" prop="position">
+                    <el-input v-model="form.position" placeholder="请输入职位名称"></el-input>
+                </el-form-item>
+
+                <el-form-item label="是否唯一" prop="ismore">
+                    <el-radio-group v-model="form.ismore">
+                        <el-radio :label="1">是</el-radio>
+                        <el-radio :label="0">否</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+
+                <el-form-item label="描述" prop="describe">
+                    <el-input v-model="form.describe" placeholder="请输入描述" type="textarea" maxlength="100" show-word-limit></el-input>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+const currentForm = {
+    id:null,
+    position:null,
+    tenant:null,
+    tenantName:null,
+    ismore:null,
+    role:[],
+    describe:null
+}
+export default {
+    components: {},
+    mixins:[],
+    props: {
+        id:"",
+        model:{
+            type:String,
+            default:"add"
+        },
+    },
+    data() {
+        return {
+            btnLoading: false,
+            disabled:false,
+            // 表单参数
+            form: {
+                ismore:0,
+            },
+            lastName:'',
+            rules: {
+                department: [{ required: true, message: '请选择所属部门', trigger: 'change' },],
+                position: [{ required: true, message: '请输入职位名称', trigger: 'blur' },],
+                ismore: [{ required: true, message: '请选择', trigger: 'change' },],
+                tenant:[{ required: true, message: "请选择", trigger: "change" }],
+            },
+        };
+    },
+    watch: {
+        id(){
+            if(this.$route.path != '/administrator/editPosition'){
+                return
+            }
+            this.init()
+        },
+    },
+    computed: {
+        userinfo() {
+            return this.$store.state.admin.userinfo
+        }
+    },
+    created() {},
+    mounted() {
+       this.init()
+    },
+    methods: {
+        //初始化当前页面
+        async init(){
+            if(this.model == 'add'){
+                this.resetForm()
+            }else if(this.model == 'edit'){
+                await this.getById();
+            }
+        },
+        getById(){
+            if(!this.id){
+                this.$message.error('编辑缺少参数')
+                return
+            }
+            var params = {
+                id: this.id,
+            };
+            this.$api.queryPositionInfo(params).then(response=>{
+                if(response.code == 200){
+                    this.form = response.data;
+                }
+            }).catch(error=>{
+                this.resetForm()
+            })
+        },
+        //重置表单
+        resetForm(){
+            this.form = Object.assign({}, currentForm)
+            this.$refs['form'].resetFields();
+        },
+        /** 提交按钮 */
+        submitForm: function() {
+            this.$refs['form'].validate((valid) => {
+                if (valid) {
+                    this.btnLoading = true
+                    var a = '添加'
+                    var api = 'addPosition'
+                    if(this.model == "edit"){
+                        a = '编辑'
+                        api = 'updatePosition'
+                    }
+                    this.$api[api](this.form).then(response => {
+                        if (response.code === 200) {
+                            this.btnLoading = false
+                            this.$message.success( a + '成功');
+                        }
+                    })
+                    .catch(error => {
+                        this.$message.error(a + '失败')
+                        this.btnLoading = false
+                    });
+                }
+            });
+        },
+
+        getTenantList(){
+            this.$api.getAllTenantList().then(response => {
+                this.tenantList = response.data
+            })
+        },
+    },
+};
+</script>
+<style lang="scss">
+.form_center {
+    width: 800px;
+    margin: 30px auto;
+}
+
+.button-container {
+    max-width: 1200px;
+    display: flex;
+    justify-content:flex-end;
+    margin: 10px auto;
+    position:sticky;
+    top:10px,
+}
+.form_item_title{
+    color: black;
+    font-weight: bold;
+    font-size: 14px;
+    padding: 5px 0;
+    border-bottom: 1px solid white;
+}
+</style>

+ 44 - 39
src/views/backStageManage/organization/position/position.vue

@@ -30,12 +30,7 @@
               v-loading="loading"
           >
             <el-table-column prop="position" label="职位名称"></el-table-column>
-            <el-table-column label="角色" align="center" show-overflow-tooltip>
-                <template slot-scope="scope">
-                    <span v-for="item in scope.row.roleList">{{item.name}}
-                    </span>
-                </template>
-            </el-table-column>
+            
             <el-table-column  label="是否唯一" align="center" show-overflow-tooltip>
                 <template slot-scope="scope">
                     <span style="margin-left: 10px" v-if="scope.row.ismore==0">否</span>
@@ -72,18 +67,19 @@ export default {
     },
     data() {
         return {
-        // 遮罩层
-        loading: false,
-        // 总条数
-        total: 0,
-        tableData: [],
-        // 查询参数
-        queryParams: {
-            current: 1,
-            size: 10,
-            name:'',
-            tenant:''
-        },
+            // 遮罩层
+            loading: false,
+            // 总条数
+            total: 0,
+            tableData: [],
+            tenantList:[],
+            // 查询参数
+            queryParams: {
+                current: 1,
+                size: 10,
+                name:'',
+                tenant:''
+            },
         };
     },
     watch: {},
@@ -91,6 +87,7 @@ export default {
     created() {},
     mounted() {
         this.getList()
+        this.getTenantList()
     },
     methods: {
         //检索
@@ -99,7 +96,7 @@ export default {
             this.getList()
         },
 
-        /** 查询职位列表 */
+        //查询职位列表
         getList() {
             this.loading = true
             this.$api.getPositionList(this.queryParams).then(response => {
@@ -111,6 +108,12 @@ export default {
             })
         },
 
+        getTenantList(){
+            this.$api.getAllTenantList().then(response => {
+                this.tenantList = response.data
+            })
+        },
+
         //切换分页
         handleCurrentChange(val){
             this.queryParams.current = val
@@ -129,29 +132,31 @@ export default {
 
         },
 
-        /** 新增按钮操作 */
-        handleAdd() {},
+        handleAdd(parentId) {},
 
-        handleEdit(row) {},
-
-        //删除
-        handleDelete(row){},
+        handleEdit(row) {
+            this.$router.push({ 
+                path: '/administrator/editPosition', 
+                query: {
+                    id: row.id
+                }
+            });
+        },
 
-        //删除
-        removeVersions(ids){
-            this.$confirm('确认删除选择的数据吗?', '提示', {
+        handleDelete(row) {
+            this.$confirm('确认删除本条数据吗?', '提示', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
                 type: 'warning'
             }).then(() => {
                     this.loading = true
-                //     this.$api.removeVersions(ids).then(response => {
-                //     this.$message.success('删除成功')
-                //     this.loading = false
-                //     this.getList()
-                // }).catch(error => {
-                //     this.loading = false
-                // })
+                    this.$api.deletePosition({ id: row.id }).then(response => {
+                    this.$message.success('删除成功')
+                    this.loading = false
+                    this.getList()
+                }).catch(error => {
+                    this.loading = false
+                })
             })
         },
 
@@ -171,9 +176,9 @@ export default {
 </script>
 <style lang="scss" scoped>
 .header{
-width: 100%;
-display: flex;
-align-items: center;
-justify-content: space-between;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
 }
 </style>

+ 29 - 0
src/views/backStageManage/organization/position/editPosition.vue

@@ -0,0 +1,29 @@
+<template>
+    <div>
+        <positionForm :id="id" model="edit"></positionForm>
+    </div>
+</template>
+
+<script>
+import positionForm from './components/form/position.vue';
+export default {
+    components: {
+        positionForm
+    },
+    props: {},
+    data() {
+        return {};
+    },
+    watch: {},
+    computed: {
+        id() {
+            return this.$route.query.id;
+        },
+    },
+    created() {},
+    mounted() {},
+    methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 1 - 1
src/views/backStageManage/organization/position/index.vue

@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import position from './position.vue';
+import position from './components/position.vue';
 export default {
   components: {
     position