Browse Source

Merge branch 'master' of http://git.dayaedu.com/molingzhide/dy-admin-manager

mo 5 năm trước cách đây
mục cha
commit
da3909a7f0

+ 48 - 0
src/api/specialSetting.js

@@ -0,0 +1,48 @@
+// 系统专项设置api文件
+import request from '@/utils/request'
+import qs from 'qs'
+
+// 分页查询分部列表
+export function branchQueryPage(data) {
+    return request({
+        url: '/web-server/organization/queryPage',
+        method: 'get',
+        params: data
+    })
+}
+
+// 分页查询分部列表
+export function branchAdd(data) {
+    return request({
+        url: '/web-server/organization/add',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 分页查询分部列表
+export function branchUpdate(data) {
+    return request({
+        url: '/web-server/organization/update',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 根据父节点查询下一级子节点列表(不递归)
+export function areaQueryChild(data) {
+    return request({
+        url: '/web-server/area/queryChild',
+        method: 'get',
+        params: data
+    })
+}
+
+
+// 根据子级区域获取父级节点
+export function getParentArea(data) {
+    return request({
+        url: `/web-server/area/getParentArea/${data.id}`,
+        method: 'get'
+    })
+}

+ 18 - 10
src/api/systemManage.js

@@ -79,28 +79,36 @@ export function queryEmployByOrganId(data) {
     })
 }
 
-// 获取用户角色列表
-export function getUserRole(data) {
+// 新增员工
+export function employeeAdd(data) {
     return request({
-        url: `/api-auth/user/getRole`,
-        method: 'get',
-        params: data
+        url: `/web-server/employee/add`,
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+// 修改员工
+export function employeeUpdate(data) {
+    return request({
+        url: `/web-server/employee/update`,
+        method: 'post',
+        data: qs.stringify(data)
     })
 }
 
 // 获取用户角色列表
-export function organizationQueryPage(data) {
+export function getUserRole(data) {
     return request({
-        url: `/web-server/organization/queryPage`,
+        url: `/api-auth/user/getRole`,
         method: 'get',
         params: data
     })
 }
 
-// 获取用户角色列表
-export function organizationAdd(data) {
+// 员工操作
+export function employeeOperate(data) {
     return request({
-        url: `/web-server/organization/queryPage`,
+        url: '/web-server/employee/employeeOperate',
         method: 'post',
         data: qs.stringify(data)
     })

+ 1 - 0
src/router/index.js

@@ -513,6 +513,7 @@ export const asyncRoutes = {
   tempalteManager: () => import('@/views/categroyManager/specialSetup/tempalteManager'),
   bannerManager: () => import('@/views/categroyManager/specialSetup/bannerManager'),
   holidayManager: () => import('@/views/categroyManager/specialSetup/holidayManager'),
+  branchSetting: () => import('@/views/categroyManager/specialSetup/branchSetting'),
   generalSettings: () => import('@/views/categroyManager/generalSettings/index'),
   siginManager: () => import('@/views/categroyManager/generalSettings/siginManager'),
   leaveManager: () => import('@/views/categroyManager/generalSettings/leaveManager'),

+ 86 - 34
src/views/categroyManager/insideSetting/staffManager.vue

@@ -22,8 +22,8 @@
           <el-table-column align='center' prop="organName"
                            label="所属部门">
           </el-table-column>
-          <el-table-column align='center' prop="lockFlag"
-                           label="状态">
+          <el-table-column align='center'
+                           label="状态" :formatter="formatLockFlag">
           </el-table-column>
           <el-table-column align='center' prop="entryDate"
                            label="入职时间">
@@ -31,13 +31,13 @@
           <el-table-column align='center' prop="demissionDate"
                            label="离职时间">
           </el-table-column>
-          <el-table-column align='center'
+          <el-table-column align='center' width="250px"
                            label="操作">
             <template slot-scope="scope">
-              <el-button type="text">重置密码</el-button>
-              <!-- /解冻 -->
-              <el-button  type="text">冻结</el-button> 
-              <el-button type="text">离职</el-button>
+              <el-button @click="roleOperation('update', scope.row)" type="text">修改</el-button>
+              <el-button @click="onStaffOperation('RESET_PASSWORD', scope.row)" type="text">重置密码</el-button>
+              <el-button @click="onStaffOperation('LOCK_UNLOCK', scope.row)" type="text">{{ scope.row.lockFlag == 1 ? '解冻' : '冻结' }}</el-button> 
+              <el-button @click="onStaffOperation('DEMISSION', scope.row)" type="text">离职</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -56,22 +56,22 @@
         </el-form-item>
         <el-form-item label="性别" prop="gender" :label-width="formLabelWidth">
           <el-select v-model="form.gender">
-            <el-option label="男" value="MAN"></el-option>
-            <el-option label="女" value="WOMAN"></el-option>
+            <el-option label="男" value="1"></el-option>
+            <el-option label="女" value="0"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="手机号" prop="phone" :label-width="formLabelWidth">
-          <el-input v-model="form.phone" autocomplete="off"></el-input>
+          <el-input v-model.number="form.phone" autocomplete="off"></el-input>
         </el-form-item>
         <el-form-item label="角色分类" prop="roleName" :label-width="formLabelWidth">
           <el-select v-model="form.roleName">
             <el-option v-for="item in roleList" :key="item.value" :label="item.label" :value="item.value"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="所属部门" prop="organName" :label-width="formLabelWidth">
-          <el-select v-model="form.organName">
-            <el-option label="男" value="MAN"></el-option>
-            <el-option label="女" value="WOMAN"></el-option>
+        <el-form-item label="所属部门" prop="organIDList" :label-width="formLabelWidth">
+          <el-select v-model="form.organIDList" multiple collapse-tags>
+            <el-option v-for="item in branchList" :key="item.value" 
+              :label="item.label" :value="item.value"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="工作类型" prop="jobNature" :label-width="formLabelWidth">
@@ -84,7 +84,7 @@
         <el-form-item label="入职时间" prop="entryDate" :label-width="formLabelWidth">
           <el-date-picker
             v-model="form.entryDate"
-            type="date"
+            type="date" value-format="yyyy-MM-dd"
             placeholder="选择日期">
           </el-date-picker>
         </el-form-item>
@@ -98,7 +98,8 @@
 </template>
 <script>
 import pagination from '@/components/Pagination/index'
-import { queryEmployByOrganId, getUserRole, organizationQueryPage, organizationAdd } from '@/api/systemManage'
+import { queryEmployByOrganId, employeeOperate, getUserRole, employeeAdd, employeeUpdate } from '@/api/systemManage'
+import { branchQueryPage } from '@/api/specialSetting'
 import store from '@/store'
 export default {
   components: { pagination },
@@ -117,6 +118,7 @@ export default {
       roleStatus: false,
       formActionTitle: 'create',
       roleList: [], // 角色列表
+      branchList: [], // 分部列表
       formTitle: {
         create: '添加员工',
         update: '修改员工'
@@ -127,7 +129,7 @@ export default {
         gender: null,
         phone: null,
         roleName: null,
-        organName: null,
+        organIDList: [],
         jobNature: null,
         entryDate: null
       },
@@ -136,9 +138,9 @@ export default {
         gender: [{required: true, message: '请选择性别', trigger: 'change'}],
         phone: [{ type: 'number', required: true, message: '手机号输入有误', trigger: 'blur'}],
         roleName: [{required: true, message: '请选择分类', trigger: 'change'}],
-        organName: [{required: true, message: '请选择所属部门', trigger: 'change'}],
+        organIDList: [{type: 'array', required: true, message: '请选择所属部门', trigger: 'change'}],
         jobNature: [{required: true, message: '请选择工作类型', trigger: 'change'}],
-        entryDate: [{ type: 'date', required: true, message: '请选择入职时间', trigger: 'blur'}],
+        entryDate: [{ required: true, message: '请选择入职时间', trigger: 'blur'}],
       }
     }
   },
@@ -150,18 +152,14 @@ export default {
     onRoleSubmit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
+          this.form.organIDList = this.form.organIDList.join(',')
           if(this.formActionTitle == 'create') {
-            organizationAdd(this.form).then(res => {
-              if(res.code == 200) {
-                this.$message({
-                  message: '添加成功',
-                  type: 'success'
-                })
-                this.roleStatus = false
-                this.getList()
-              } else {
-                this.$message.error(res.msg)
-              }
+            employeeAdd(this.form).then(res => {
+              this.messageTips('添加', res)
+            })
+          } else if(this.formActionTitle == 'update') {
+            employeeUpdate(this.form).then(res => {
+              this.messageTips('修改', res)
             })
           }
         } else {
@@ -169,6 +167,18 @@ export default {
         }
       })
     },
+    messageTips(title, res) {
+      if(res.code == 200) {
+        this.$message({
+          message: title + '成功',
+          type: 'success'
+        })
+        this.branchStatus = false
+        this.getList()
+      } else {
+        this.$message.error(res.msg)
+      }
+    },
     getList () {
       queryEmployByOrganId({ organId: this.organId }).then(res => {
         if(res.code == 200 && res.data) {
@@ -187,24 +197,66 @@ export default {
           })
         }
       })
-      organizationQueryPage({ // 获取分部
+      branchQueryPage({ // 获取分部
         delFlag: 0,
         rows: 9999
       }).then(res => {
-        // console.log(res)
+        if(res.code == 200 && res.data && res.data.rows) {
+          res.data.rows.forEach(item => {
+            this.branchList.push({
+              label: item.name,
+              value: item.id
+            })
+          })
+        }
       })
     },
-    roleOperation(type) {
+    roleOperation(type, data) {
       this.formActionTitle = type
       this.roleStatus = true
       // 修改的时候
       if(type == 'update') {
-
+        this.form = {
+          id: data.id,
+          username: data.username,
+          gender: data.gender,
+          phone: Number(data.phone),
+          roleName: data.roleName,
+          organIDList: data.organIDList ? data.organIDList : [],
+          jobNature: data.jobNature,
+          entryDate: data.entryDate
+        }
       }
     },
     onFormClose(formName) { // 关闭弹窗重置验证
       this.$refs[formName].clearValidate()
     },
+    formatLockFlag(row) {
+      let reuslt = ['正常', '冻结']
+      if(row.demissionDate) {
+        return '离职'
+      } else {
+        return reuslt[row.lockFlag]
+      }
+    },
+    onStaffOperation(type, data) {
+      employeeOperate({ 
+        employeeId: data.id,
+        operate: type
+      }).then(res => {
+        console.log(res)
+        if(res.code == 200) {
+          this.$message({
+            message: '更改成功',
+            type: 'success'
+          })
+          this.roleStatus = false
+          this.getList()
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    }
   }
 }
 </script>

+ 234 - 0
src/views/categroyManager/specialSetup/branchSetting.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class='m-container'>
+    <h2>分部设置</h2>
+    <div class="m-core">
+      <div @click="onBranchOperation('create')" class='newBand'>添加</div>
+      <!-- 列表 -->
+      <div class="tableWrap">
+        <el-table :data='tableList'>
+          <el-table-column align='center' prop="name"
+                           label="分部名称">
+          </el-table-column>
+          <el-table-column align='center' prop="areaName"
+                           label="城市">
+          </el-table-column>
+          <el-table-column align='center' prop="address"
+                           label="分部地址">
+          </el-table-column>
+          <el-table-column align='center' prop="registerDate"
+                           label="成立时间">
+          </el-table-column>
+          <el-table-column align='center'
+                           label="操作">
+            <template slot-scope="scope">
+              <el-button @click="onBranchOperation('update', scope.row)" type="text">修改</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :total="pageInfo.total"
+                    :page.sync="pageInfo.page"
+                    :limit.sync="pageInfo.limit"
+                    :page-sizes="pageInfo.page_size"
+                    @pagination="getList" />
+      </div>
+    </div>
+
+    <el-dialog :title="formTitle[formActionTitle]" :visible.sync="branchStatus" @close="onFormClose('ruleForm')" width="500px">
+      <el-form :model="form" :rules="rules" ref="ruleForm">
+        <el-form-item label="分部名称" prop="name" :label-width="formLabelWidth">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="城市" required :label-width="formLabelWidth">
+          <el-col :span="12">
+            <el-form-item prop="province">
+              <el-select v-model="form.province" @change="onChangeProvince">
+                <el-option v-for="item in provinceList" :key="item.value" 
+                  :label="item.label" :value="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item prop="city">
+              <el-select v-model="form.city">
+            <el-option v-for="item in cityList" :key="item.value" 
+              :label="item.label" :value="item.value"></el-option>
+          </el-select>
+            </el-form-item>
+          </el-col>
+        </el-form-item>
+        <el-form-item label="分部地址" prop="address" :label-width="formLabelWidth">
+          <el-input v-model="form.address" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="成立时间" prop="registerDate" :label-width="formLabelWidth">
+          <el-date-picker v-model="form.registerDate"
+            type="date" value-format="yyyy-MM-dd" 
+            placeholder="选择日期"></el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="branchStatus = false">取 消</el-button>
+        <el-button @click="onBranchSubmit('ruleForm')" type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
+
+
+  </div>
+</template>
+<script>
+import pagination from '@/components/Pagination/index'
+import { branchQueryPage, areaQueryChild, branchAdd, branchUpdate, getParentArea } from '@/api/specialSetting'
+import store from '@/store'
+export default {
+  components: { pagination },
+  name: 'adminManager',
+  data () {
+    return {
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      organId: store.getters.organ,
+      formActionTitle: 'create',
+      formTitle: {
+        create: '添加分部',
+        update: '修改分部'
+      },
+      formLabelWidth: '100px',
+      branchStatus: false,
+      provinceList: [], // 省列表
+      cityList: [], // 市列表
+      form: {
+        name: null,
+        province: null,
+        city: null,
+        address: null,
+        registerDate: null
+      },
+      rules: {
+        name: [{required: true, message: '请输入分部名称', trigger: 'blur'}],
+        province: [{required: true, message: '请选择省', trigger: 'change'}],
+        city: [{required: true, message: '请选择市', trigger: 'change'}],
+        address: [{required: true, message: '请输入分部地址', trigger: 'blur'}],
+        registerDate:[{ required: true, message: '请选择成立时间', trigger: 'change'}]
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+    this.getAreaList()
+  },
+  methods: {
+    onBranchSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if(!valid) return
+        this.form.areaId = this.form.city
+        if(this.formActionTitle == 'create') {
+          branchAdd(this.form).then(res => {
+            this.messageTips('添加', res)
+          })
+        } else if(this.formActionTitle == 'update') {
+          branchUpdate(this.form).then(res => {
+            this.messageTips('修改', res)
+          })
+        }
+      })
+    },
+    messageTips(title, res) {
+      if(res.code == 200) {
+        this.$message({
+          message: title + '成功',
+          type: 'success'
+        })
+        this.branchStatus = false
+        this.getList()
+      } else {
+        this.$message.error(res.msg)
+      }
+    },
+    getList () { 
+      branchQueryPage({
+        rows: this.pageInfo.limit
+      }).then(res => {
+        if(res.code == 200 && res.data) {
+          this.tableList = res.data.rows
+          this.pageInfo.total = res.data.total
+        }
+      })
+    },
+    onFormClose(formName) { // 关闭弹窗重置验证
+      this.$refs[formName].resetFields()
+    },
+    getAreaList(parentId, callback) {
+      parentId = parentId ? parentId : 0
+      areaQueryChild({ parentId: parentId }).then(res => {
+        if(res.code == 200 && res.data) {
+          let tempData = []
+          res.data.forEach(item => {
+            tempData.push({
+                label: item.name,
+                value: item.id
+            })
+          })
+          if(parentId) {
+            this.cityList = tempData
+          } else {
+            this.provinceList = tempData
+          }
+
+          if(callback && typeof callback == 'function') {
+            callback()
+          }
+        }
+      })
+    },
+    onChangeProvince(val) {
+      this.form.city = null
+      this.getAreaList(val)
+    },
+    onBranchOperation(type, row) { // 修改分部信息
+      this.formActionTitle = type
+      this.branchStatus = true
+      if(type == 'update') {
+        getParentArea({ id: row.areaId }).then(res => {
+          if(res.code == 200 && res.data) {
+            this.getAreaList(res.data.id, () => {
+              this.form = {
+                id: row.id,
+                name: row.name,
+                province: res.data.id,
+                city: row.areaId,
+                address: row.address,
+                registerDate: row.registerDate
+              } 
+            })
+            
+          }
+        })
+      }
+    }
+    
+  }
+}
+</script>
+<style lang="scss">
+.el-input-group__append, .el-button--primary {
+  background: #14928a;
+  border-color: #14928a;
+  color: #fff;
+  &:hover, &:active, &:focus {
+    background: #14928a;
+    border-color: #14928a;
+    color: #FFF;
+  }
+}
+.el-date-editor.el-input{
+  width: 100% !important;
+}
+.el-select {
+  width: 98% !important;
+}
+</style>

+ 92 - 12
src/views/setSilder/addSilder.vue

@@ -1,10 +1,40 @@
 <template>
-  <div>
+  <div class="slider-container">
     <el-button @click='addSilder'>添加按钮</el-button>
     <el-button @click='removeSilder'>删除按钮</el-button>
     <el-button @click='resetSilder'>修改按钮</el-button>
     <el-button @click="lookSilder"
                type='error'>查询</el-button>
+
+    <el-table
+      :data="tableList"
+      style="width: 100%;margin-bottom: 20px;"
+      row-key="id" border
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+      <el-table-column
+        prop="name"
+        label="菜单名称">
+      </el-table-column>
+      <el-table-column
+        prop="path"
+        label="接口路径">
+      </el-table-column>
+      <el-table-column
+        prop="permission"
+        label="权限标识">
+      </el-table-column>
+      <el-table-column
+        prop="type"
+        label="菜单类型">
+      </el-table-column>
+      <el-table-column
+        label="操作">
+        <template slot-scope="scope">
+          <el-button @click="onUpdate(scope.row)" type="text">修改</el-button>
+          <el-button @click="onDelete(scope.row)" type="text">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
   </div>
 </template>
 <script>
@@ -12,10 +42,11 @@ import { addSilder, getSilder, deleteSilder, resetSilder } from '@/api/silder'
 export default {
   data () {
     return {
+      tableList: [], // 数据列表
     }
   },
   mounted () {
-
+    this.lookSilder() // 查询
   },
   methods: {
     /**
@@ -33,16 +64,16 @@ export default {
      */
     //  Layout
     addSilder () {
-      addSilder({
-        // path: 'branchActive',
-        // component: 'branchActive',
-        // name: '分部活动设置',
-        // permission: '/branchActive',
-        // sort: '1',
-        // parentId: '24'
-      }).then(res => {
+      // addSilder({
+      //   path: 'branchSetting',
+      //   component: 'branchSetting',
+      //   name: '分部设置',
+      //   permission: '/branchSetting',
+      //   sort: '1',
+      //   parentId: '22'
+      // }).then(res => {
 
-      })
+      // })
     },
     removeSilder () {
       deleteSilder().then(res => {
@@ -51,8 +82,50 @@ export default {
     },
     lookSilder () {
       getSilder().then(res => {
-        console.log(res);
+        if(res.code != 200) return
+        this.tableList = this.setTableData(res.data)
+      })
+    },
+    setTableData(result) {
+      let list = []
+      list = result.map( res => {
+        let tempList = {}
+        tempList = {
+          id: res.id,
+          name: res.name,
+          type: res.type,
+          path: res.path,
+          permission: res.permission,
+          icon: res.icon
+        }
+        if(res.sysMenus && res.sysMenus.length > 0) {
+            tempList.children = this.setTableData(res.sysMenus)
+        }
+        return tempList
       })
+      return list
+    },
+    childrenList(res) {
+      res.forEach(item => {
+        let tempList = {}
+        tempList = {
+          id: res.id,
+          name: res.name,
+          type: res.type,
+          path: res.path,
+          permission: res.permission,
+          icon: res.icon
+        }
+        if(res.sysMenus && res.sysMenus.length > 0) {
+          tempList.children = this.setTableData(res.sysMenus)
+        }
+      })
+    },
+    onDelete(row) { // 删除左则菜单
+
+    },
+    onUpdate(row) {// 修改左则菜单
+
     },
     // 修改菜单栏
     resetSilder () {
@@ -73,4 +146,11 @@ export default {
 }
 </script>
 <style lang="scss">
+.slider-container {
+  background: #fff;
+  padding: 20px;
+  .el-table {
+    margin-top: 20px;
+  }
+}
 </style>

+ 2 - 2
vue.config.js

@@ -16,8 +16,8 @@ const name = defaultSettings.title || 'vue Admin Template' // page title
 // const port = process.env.port || process.env.npm_config_port || 9528 // dev port
 // http://47.99.212.176:8000
 // http://192.168.3.28:8000
-let target = 'http://47.99.212.176:8000'
-// let target = 'http://192.168.3.28:8000'
+// let target = 'http://47.99.212.176:8000'
+let target = 'http://192.168.3.48:8000'
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
   /**