| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 |
- <?php
- use common\helpers\ComponentHelper;
- ComponentHelper::loadComponentView("select-user", __DIR__);
- ?>
- <div id="app" v-cloak>
- <el-card shadow="never" style="border:0" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
- <div slot="header">
- <span>部门列表</span>
- <div style="float: right;margin-top: -5px">
- <el-button type="primary" @click="handle('editDepartment')" size="small">添加部门</el-button>
- </div>
- </div>
- <div class="table-body">
- <el-table :data="list" border v-loading="loading" size="small" style="margin-bottom: 15px;">
- <el-table-column prop="id" min-width="80" label="部门ID" align="center"></el-table-column>
- <el-table-column label="名称" align="center" min-width="200">
- <template slot-scope="scope">
- <el-popover
- placement="bottom"
- width="300"
- @show="handle('popPosition', scope.row)"
- >
- <div>
- <el-table
- :data="scope.row.departmentPosition"
- size="small"
- v-loading="positionLoading"
- >
- <el-table-column prop="scope.row.departmentPosition.name" label="职位" align="center">
- <template slot-scope="position">
- {{position.row.name}}
- </template>
- </el-table-column>
- <el-table-column prop="scope.row.departmentPosition.is_default_position" label="默认职位" align="center">
- <template slot-scope="position">
- <el-switch @change="(val) => changeIsDefaultPosition(position.row.id, val)" v-model="position.row.is_default_position" :active-value="1" :inactive-value="0" class="input-with-select">
- </el-switch>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- align="center"
- label="操作">
- <template slot-scope="position">
- <el-button type="text" size="mini" circle style="margin-left: 10px;margin-top: 10px"
- @click.native="handle('editPosition', position.row, scope.row, scope.$index, position.$index)">
- 编辑
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div style="text-align: right; margin: 0">
- <!-- <el-button size="mini" type="text" @click="visible = false">取消</el-button>
- <el-button type="primary" size="mini" @click="visible = false">确定</el-button> -->
- </div>
- <!-- <el-button slot="reference">删除</el-button> -->
- <el-button slot="reference">
- <span>{{scope.row.name}}</span>
- <i class="el-icon-arrow-down"></i>
- </el-button>
- </el-popover>
- <!-- <span>{{scope.row.name}}</span>
- <i class="el-icon-arrow-right"></i> -->
- </template>
- </el-table-column>
- <el-table-column label="排序" min-width="150" prop="sort" align="center"></el-table-column>
- <el-table-column label="时间" min-width="200" align="center">
- <template slot-scope="scope">
- <div>{{scope.row.created_at|dateTimeFormat('Y-m-d H:i:s')}}</div>
- </template>
- </el-table-column>
- <el-table-column label="操作" min-width="300" align="center">
- <template slot-scope="scope">
- <el-button type="text" size="mini" circle style="margin-top: 10px" @click="$navigate({r: 'business-card/department/member', department_id: scope.row.id})">查看部门人员</el-button>
- <el-button type="text" size="mini" circle style="margin-left: 10px;margin-top: 10px" @click.native="handle('editDepartment', scope.row)">编辑</el-button>
- <el-button type="text" size="mini" circle style="margin-left: 10px;margin-top: 10px">
- <template>
- <select-user :department_id="scope.row.id"
- :position_list="scope.row.departmentPosition"
- :department_name="scope.row.name"
- :multiple="false"
- @selected="send('userSelect', $event,scope.row.id)"
- title="新增部门成员">新增部门成员
- </select-user>
- </template>
- </el-button>
- <el-button type="text" size="mini" circle style="margin-left: 10px;margin-top: 10px" @click.native="handle('addPosition', scope.row, scope.$index)">增加职位</el-button>
- <el-button type="text" size="mini" circle style="margin-left: 10px;margin-top: 10px" @click.native="del(scope.row.id)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div flex="box:last cross:center">
- <div></div>
- <div>
- <el-pagination v-if="pagination" :page-size="pagination.defaultPageSize"
- style="display: inline-block;float: right;" background @current-change="handle('pageChange', $event)"
- layout="prev, pager, next" :total="pagination.totalCount">
- </el-pagination>
- </div>
- </div>
- </div>
- </el-card>
- <el-dialog
- title="编辑职位"
- :visible.sync="editPositionLoading"
- width="30%"
- >
- <el-form>
- <el-form-item label="职位" label-width="150px">
- <el-input style="width:70%;" v-model="positionInfo.name"></el-input>
- </el-form-item>
- <el-form-item label="默认职位" label-width="150px">
- <el-switch v-model="positionInfo.is_default_position" :active-value="1" :inactive-value="0" class="input-with-select">
- </el-switch>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button @click="editPositionLoading = false">取 消</el-button>
- <el-button type="primary" @click="send('editPosition')" v-loading="postPosition">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog
- title="编辑部门"
- :visible.sync="addDepartmentLoading"
- width="30%"
- >
- <el-form>
- <el-form-item label="部门" label-width="150px">
- <el-input style="width:70%;" v-model="departmentInfo.name"></el-input>
- </el-form-item>
- <el-form-item label="职位" label-width="150px">
- <div class="position_content">
- <div class="position_item" v-for="(item,index) in departmentInfo.position" :key="index">
- <el-input style="width:70%;" v-model.trim="item.name"></el-input>
- <el-button type="danger" circlesize="small" @click="delDepartmentPosition(item, index)" v-if="item.id==null">-</el-button>
- </div>
- <el-button type="primary" size="small" @click="addDepartmentPosition">+</el-button>
- </div>
- </el-form-item>
- <el-form-item label="排序" label-width="150px">
- <el-input style="width:70%;" onkeyup="value=value.replace(/[^\d]/g,'')" v-model="departmentInfo.sort"></el-input>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button @click="addDepartmentLoading = false">取 消</el-button>
- <el-button type="primary" @click="send('editDepartment')" v-loading="postPosition">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="新增职位" :visible.sync="addPositionLoading" width="40%">
- <el-form label-width="80px" ref="positionForm">
- <el-form-item label="部门" prop="department_name">
- <div>{{positionForm.department_name}}</div>
- </el-form-item>
- <el-form-item label="职位" prop="name">
- <el-input style="width: 30%;" placeholder="输入职位名" v-model="positionForm.name" class="input-with-select">
- </el-input>
- </el-form-item>
- <el-form-item label="默认职位" prop="is_default_position">
- <el-switch v-model="positionForm.is_default_position" :active-value="1" :inactive-value="0" class="input-with-select">
- </el-switch>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button :loading="postPosition" type="primary" @click="send('addPosition')">保存</el-button>
- </div>
- </el-dialog>
- </div>
- <script>
- const app = new Vue({
- el: '#app',
- data: {
- list: [],
- positionInfo: {name: "", id: 0, parent_id: 0, is_default_position: 0},
- positionForm: {department_name: "", name: "", parent_id: 0, is_default_position: 0},
- departmentInfo: {name: "", sort: 99, id: 0, position: []},
- page: 1,
- pagination: null,
- loading: false,
- positionLoading: false,//查看部门对应职位
- editPositionLoading: false,//修改职位弹窗
- addPositionLoading: false,//新增职位弹窗
- postPosition: false,//提交职位,提交部门
- addDepartmentLoading: false,//添加,编辑部门弹窗
- listIndex: 0,//部门列表索引
- positionIndex: 0//职位列表索引
- },
- mounted() {
- this.send('getData');
- },
- methods: {
- send(type, param1 = null, param2 = null, param3 = null) {
- switch(type) {
- //获取数据
- case 'getData':
- this.loading = true;
- request({
- params: {r: 'business-card/department/index', page: this.page},
- }).then(e=>{
- if (e.data.code == 0) {
- this.list = e.data.data.list;
- this.pagination = e.data.data.pagination;
- } else {
- this.$message.error(e.data.msg);
- }
- this.loading = false;
- }).catch(e=>{
- this.loading = false;
- this.$message.error(e.data.msg);
- })
- break;
- //编辑职位
- case 'editPosition':
- this.postPosition = true;
- this.loading = true;
- request({
- params: {r: 'business-card/department/edit-position'},
- data: this.positionInfo,
- method: 'post',
- }).then(e=>{
- if (e.data.code == 0) {
- this.$message.success(e.data.msg);
- this.send('getData');
- } else {
- this.$message.error(e.data.msg);
- }
- this.list[this.listIndex]['departmentPosition'][this.positionIndex]['name'] = this.positionInfo.name;
- this.loading = false;
- this.postPosition = false;
- this.editPositionLoading = false;
- }).catch(e=>{
- this.$message.error(e.data.msg);
- this.loading = false;
- this.postPosition = false;
- this.editPositionLoading = false;
- })
- break;
- //编辑部门
- case 'editDepartment':
- let first_name = this.departmentInfo.position[0].name;
- if(first_name === '' || first_name === undefined || first_name === null) {
- return this.$message.error("部门职位必须填写一个!");
- }
- request({
- params: {r: 'business-card/department/edit-department'},
- data: this.departmentInfo,
- method: 'post',
- }).then(e=>{
- if (e.data.code == 0) {
- this.$message({
- type: 'success',
- message: e.data.msg,
- duration: 2000,
- onClose: function () {
- window.location.reload();
- }
- })
- } else {
- this.$message.error(e.data.msg);
- }
- //location. reload();
- }).catch(e=>{
- this.$message.error("操作失败");
- })
- break;
- //新增职位
- case 'addPosition':
- this.loading = true;
- this.postPosition = true;
- request({
- params: {r: 'business-card/department/edit-position'},
- data: this.positionForm,
- method: 'post',
- }).then(e=>{
- if (e.data.code == 0) {
- let obj = {id: e.data.data.id, name: this.positionForm.name};
- this.list[this.listIndex]['departmentPosition'].push(JSON.parse(JSON.stringify(obj)));
- this.send('getData');
- this.$message.success(e.data.msg);
- } else {
- this.$message.error(e.data.msg);
- }
- this.loading = false;
- this.postPosition = false;
- this.addPositionLoading = false;
- }).catch(e=>{
- this.$message.error(e.data.msg);
- this.loading = false;
- this.postPosition = false;
- this.addPositionLoading = false;
- });
- break;
- //部门新增成员
- case 'userSelect':
- if (!param1.position_id) {
- this.$message.error('请选择职位');
- return false;
- }
- if (!param1.role_type) {
- this.$message.error('请选择角色');
- return false;
- }
- if (param1.user_ids.length == 0) {
- this.$message.error('请选择用户');
- return false;
- }
- param1.department_id = param2;
- this.loading = true;
- request({
- params: {r: 'business-card/department/edit-department-member'},
- data: param1,
- method: 'post'
- }).then(e=>{
- if (e.data.code == 0) {
- this.$message.success(e.data.msg);
- } else {
- this.$message.error("操作失败");
- }
- this.loading = false;
- }).catch(e=>{
- this.$message.error(e.data.msg);
- this.loading = false;
- })
- break;
- }
- },
- handle(type, param1 = null, param2 = null, param3 = null, param4 = null) {
- switch (type) {
- //点击编辑职位
- case 'editPosition':
- this.editPositionLoading = true;
- let positionInfo = {name: param1.name, id: param1.id, parent_id: param2.id, is_default_position: param1.is_default_position};
- this.positionInfo = positionInfo;
- this.listIndex = param3;
- this.positionIndex = param4;
- break;
- //新增,编辑部门弹窗
- case 'editDepartment':
- this.addDepartmentLoading = true;
- if (param1 != null) {
- this.addDepartmentLoading = true;
- this.departmentInfo.name = param1.name;
- this.departmentInfo.id = param1.id;
- this.departmentInfo.sort = param1.sort;
- let position_list = [];
- param1.departmentPosition.forEach(function (item, index) {
- position_list.push({name: item.name, id: item.id})
- })
- this.departmentInfo.position = position_list;
- }else{
- this.departmentInfo.name = '';
- this.departmentInfo.id = '';
- this.departmentInfo.sort = '99';
- this.departmentInfo.position = [{name: null, id: null}];
- }
- break;
- //新增职位弹窗
- case 'addPosition':
- this.addPositionLoading = true;
- this.positionForm.department_name = param1.name;
- this.positionForm.parent_id = param1.id;
- this.positionForm.name = '';
- this.listIndex = param2;
- break;
- case 'pageChange':
- this.page = param1;
- this.send('getData');
- break;
- }
- },
- del(id) {
- request({
- params: {r: 'business-card/department/del'},
- data: {
- "id":id
- },
- method: 'post',
- }).then(e=>{
- if (e.data.code == 0) {
- this.$message.success(e.data.msg);
- this.send('getData');
- } else {
- this.$message.error(e.data.msg);
- }
- // location. reload();
- }).catch(e=>{
- this.$message.error("操作失败");
- })
- },
- userSelect(param) {
-
- },
- addDepartmentPosition() {// 添加部门职位
- this.departmentInfo.position.push({name: null, id: null});
- },
- delDepartmentPosition(item, index) {// 删除部门职位
- if(this.departmentInfo.position.length <=1 ) return false;
- this.departmentInfo.position.splice(index, 1);
- },
- changeIsDefaultPosition(id, is_default_position) {
- request({
- params: {r: 'business-card/department/change-is-default-position'},
- data: {
- id,
- is_default_position
- },
- method: 'post',
- }).then(e=>{
- if (e.data.code == 0) {
- this.$message.success(e.data.msg);
- this.send('getData');
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e=>{
- this.$message.error("操作失败");
- })
- }
- }
- })
- </script>
- <style>
- .el-tabs__header {
- font-size: 16px;
- }
- .table-body {
- padding: 20px;
- background-color: #fff;
- }
- .table-body .el-button {
- padding: 0 !important;
- border: 0;
- margin: 0 5px;
- }
- .input-item {
- width: 250px;
- margin: 0 0 20px;
- display: inline-block;
- }
- .input-item .el-input__inner {
- border-right: 0;
- }
- .input-item .el-input__inner:hover {
- border: 1px solid #dcdfe6;
- border-right: 0;
- outline: 0;
- }
- .input-item .el-input__inner:focus {
- border: 1px solid #dcdfe6;
- border-right: 0;
- outline: 0;
- }
- .input-item .el-input-group__append {
- background-color: #fff;
- border-left: 0;
- width: 10%;
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- margin: 0;
- }
- .batch {
- margin: 0 0 20px;
- display: inline-block;
- }
- .batch .el-button {
- padding: 9px 15px !important;
- }
-
- .el-table th>.cell{
- color: #333;
- font-weight: bold;
- font-size: 14px;
- }
- .el-table__footer-wrapper, .el-table__header-wrapper{
- /*border-bottom: 1.4px solid #D6D6D6;*/
- }
- .el-table .warning-row {
- background: #F5F7FC;
- }
-
- .el-table .success-row {
- background: #ffffff;
- }
- .position_content .position_item{
- margin: 5px 0;
- }
- .position_content .position_item .el-button{
- margin-left: 5px;
- }
- </style>
|