<template> 
 | 
  <TableLayout :permissions="['system:user:query']"> 
 | 
    <!-- 搜索表单 --> 
 | 
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline> 
 | 
      <!-- <el-form-item label="用户名" prop="username"> 
 | 
        <el-input v-model="searchForm.username" v-trim placeholder="请输入用户名" @keypress.enter.native="search"/> 
 | 
      </el-form-item> --> 
 | 
      <el-form-item label="姓名" prop="realname"> 
 | 
        <el-input v-model="searchForm.realname" v-trim placeholder="请输入姓名" @keypress.enter.native="search"/> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="手机号码" prop="mobile"> 
 | 
        <el-input v-model="searchForm.mobile" v-trim placeholder="请输入手机号码" @keypress.enter.native="search"/> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="状态" prop="status"> 
 | 
        <el-select v-model="searchForm.status" placeholder="请选择状态" clearable filterable @keypress.enter.native="search"> 
 | 
          <el-option 
 | 
            v-for="item in statusList" 
 | 
            :key="item.value" 
 | 
            :label="item.name" 
 | 
            :value="item.value"> 
 | 
          </el-option> 
 | 
        </el-select> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="角色" prop="roleId"> 
 | 
        <el-select v-model="searchForm.roleId" placeholder="请选择角色" clearable filterable @keypress.enter.native="search"> 
 | 
          <el-option 
 | 
            v-for="item in roleList" 
 | 
            :key="item.id" 
 | 
            :label="item.name" 
 | 
            :value="item.id"> 
 | 
          </el-option> 
 | 
        </el-select> 
 | 
      </el-form-item> 
 | 
<!--            <el-form-item label="所属部门" prop="rootDeptId"> 
 | 
        <DepartmentSelect v-model="searchForm.rootDeptId" placeholder="请选择所属部门" clearable/> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="岗位" prop="positionId"> 
 | 
        <PositionSelect v-model="searchForm.positionId" placeholder="请选择岗位" clearable/> 
 | 
      </el-form-item>--> 
 | 
      <section> 
 | 
        <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button> 
 | 
        <el-button @click="reset">重置</el-button> 
 | 
      </section> 
 | 
    </el-form> 
 | 
    <!-- 表格和分页 --> 
 | 
    <template v-slot:table-wrap> 
 | 
  
 | 
  
 | 
        <div> 
 | 
          <div class="zdy_box"> 
 | 
            <div style="display: flex; align-items: center;"> 
 | 
              <span>{{name ? name : '全部'}} ({{tableData.pagination.total}})</span> 
 | 
            </div> 
 | 
            <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']"> 
 | 
<!--              <li v-permissions="['system:user:create']">--> 
 | 
<!--                <ImportButton--> 
 | 
<!--                  text="导入"--> 
 | 
<!--                  template-name="用户模板.xlsx"--> 
 | 
<!--                  template-path="/template/user_import_template.xlsx"--> 
 | 
<!--                  action="/system/user/importSystemUserBatch"--> 
 | 
<!--                  @success="search"--> 
 | 
<!--                />--> 
 | 
<!--              </li>--> 
 | 
              <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新建用户')">添加用户</el-button></li> 
 | 
              <!-- <li v-permissions="['system:user:create']"><el-button type="primary" @click="changeZZ">更换组织</el-button></li> --> 
 | 
              <li v-permissions="['system:user:delete']"><el-button @click="deleteByIdInBatch">删除</el-button></li> 
 | 
            </ul> 
 | 
          </div> 
 | 
          <el-table 
 | 
            v-loading="isWorking.search" 
 | 
            :data="tableData.list" 
 | 
  
 | 
            stripe 
 | 
            border 
 | 
            @selection-change="handleSelectionChange" 
 | 
            @sort-change="handleSortChange" 
 | 
          > 
 | 
            <el-table-column type="selection" align="center" width="55"></el-table-column> 
 | 
            <el-table-column prop="realname" label="姓名" align="center" min-width="100px" fixed="left"></el-table-column> 
 | 
  
 | 
            <el-table-column prop="mobile" label="手机号码" align="center" min-width="120px"></el-table-column> 
 | 
            <el-table-column prop="empNo" label="工号" align="center" min-width="120px"></el-table-column> 
 | 
<!--            <el-table-column prop="department.name" label="部门" align="center" min-width="120px"></el-table-column>--> 
 | 
            <!-- <el-table-column prop="email" label="邮箱" align="center" min-width="180px"></el-table-column> --> 
 | 
    <!--        <el-table-column prop="birthday" label="生日" sortable="custom" sort-by="BIRTHDAY" align="center" min-width="100px"></el-table-column> 
 | 
          --> <el-table-column prop="roles" label="角色" align="center" min-width="160px" class-name="table-column-strings"> 
 | 
              <template slot-scope="{row}"> 
 | 
                <ul> 
 | 
                  <li v-for="role in row.roles" :key="role.id">{{role.name}}</li> 
 | 
                </ul> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
<!--            <el-table-column prop="wechatName" label="微信昵称" align="center" min-width="120px"></el-table-column>--> 
 | 
            <el-table-column prop="createUser" label="创建人" align="center" min-width="100px"> 
 | 
              <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.realname}}</template> 
 | 
            </el-table-column> 
 | 
            <el-table-column prop="createTime" label="创建时间" align="center" min-width="140px"></el-table-column> 
 | 
            <el-table-column prop="updateUser" label="更新人" align="center" min-width="100px"> 
 | 
              <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.realname}}</template> 
 | 
            </el-table-column> 
 | 
            <el-table-column prop="updateTime" label="更新时间" align="center" min-width="140px"></el-table-column> 
 | 
            <el-table-column label="状态" min-width="100px"> 
 | 
              <template slot-scope="{row}"> 
 | 
                <el-switch 
 | 
                  :disabled="!containPermissions(['system:user:update'])" 
 | 
                  @change="changeStatus(row)" 
 | 
                  v-model="row.status" 
 | 
                  :active-value="0" 
 | 
                  :inactive-value="1"> 
 | 
                </el-switch> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
              v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])" 
 | 
              label="操作" 
 | 
              align="center" 
 | 
              width="270" 
 | 
              fixed="right" 
 | 
            > 
 | 
              <template v-if="isAdmin || (row.id !== userInfo.id && row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}"> 
 | 
                <el-button type="text"  @click="$refs.operaUserWindow.open('编辑用户', row)" v-permissions="['system:user:update']">编辑</el-button> 
 | 
                <el-button type="text" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">配置角色</el-button> 
 | 
                <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">重置密码</el-button> 
 | 
                <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" v-permissions="['system:user:delete']">删除</el-button> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
          <pagination 
 | 
            @size-change="handleSizeChange" 
 | 
            @current-change="handlePageChange" 
 | 
            :pagination="tableData.pagination" 
 | 
          ></pagination> 
 | 
        </div> 
 | 
    </template> 
 | 
    <!-- 新建/修改 --> 
 | 
    <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/> 
 | 
    <!-- 配置角色 --> 
 | 
    <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/> 
 | 
    <OperaUserChangeWindow ref="operaUserChangeWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/> 
 | 
    <!-- 重置密码 --> 
 | 
    <ResetPwdWindow ref="resetPwdWindow"/> 
 | 
  </TableLayout> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import Pagination from '@/components/common/Pagination' 
 | 
import TableLayout from '@/layouts/TableLayout' 
 | 
import BaseTable from '@/components/base/BaseTable' 
 | 
import OperaUserWindow from '@/components/system/user/OperaUserWindow' 
 | 
import OperaUserChangeWindow from '@/components/system/user/OperaUserChangeWindow' 
 | 
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow' 
 | 
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow' 
 | 
import DepartmentSelect from '@/components/common/DepartmentSelect' 
 | 
import PositionSelect from '@/components/common/PositionSelect' 
 | 
import Tree from '@/components/common/Tree' 
 | 
import ImportButton from '@/components/common/ImportButton' 
 | 
import { resetPwd, updateStatusById } from '@/api/system/user' 
 | 
import { fetchAll } from '@/api/system/role' 
 | 
import { fetchTree } from '@/api/system/department' 
 | 
export default { 
 | 
  name: 'SystemUser', 
 | 
  extends: BaseTable, 
 | 
  components: { 
 | 
    PositionSelect, 
 | 
    DepartmentSelect, 
 | 
    ResetPwdWindow, 
 | 
    RoleConfigWindow, 
 | 
    OperaUserWindow, 
 | 
    OperaUserChangeWindow, 
 | 
    TableLayout, 
 | 
    Pagination, 
 | 
    Tree, 
 | 
    ImportButton 
 | 
  }, 
 | 
  data () { 
 | 
    return { 
 | 
      name: '', 
 | 
      data: [], 
 | 
      roleList: [], 
 | 
      defaultProps: { 
 | 
        children: 'children', 
 | 
        name: 'name', 
 | 
        status: 'hasChildren', 
 | 
        id: 'id' 
 | 
      }, 
 | 
      statusList: [ 
 | 
        { name: '启用', value: 0 }, 
 | 
        { name: '禁用', value: 1 } 
 | 
      ], 
 | 
      // 搜索 
 | 
      searchForm: { 
 | 
        username: '', // 名字 
 | 
        realname: '', // 姓名 
 | 
        rootDeptId: null, // 部门ID 
 | 
        positionId: null, // 岗位ID 
 | 
        mobile: '', // 手机号码 
 | 
        roleId: '', 
 | 
        status: '', 
 | 
        type: '0' 
 | 
      } 
 | 
    } 
 | 
  }, 
 | 
  provide() { 
 | 
    return { 
 | 
      departments: () => this.data 
 | 
    } 
 | 
  }, 
 | 
  created () { 
 | 
    this.config({ 
 | 
      module: '用户', 
 | 
      api: '/system/user', 
 | 
      'field.main': 'realname', 
 | 
      sorts: [{ 
 | 
        property: 'CREATE_TIME', 
 | 
        direction: 'DESC' 
 | 
      }] 
 | 
    }) 
 | 
    this.search() 
 | 
    this.treeComList() 
 | 
    this.getRoleAll() 
 | 
  }, 
 | 
  methods: { 
 | 
    treeComList () { 
 | 
      fetchTree({}) 
 | 
        .then(res => { 
 | 
          this.data = this.newTree(res) 
 | 
        }) 
 | 
    }, 
 | 
    newTree(tree) { 
 | 
      return tree.map(item => { 
 | 
        let newItem = {...item} 
 | 
        if (item.children.length == 0) { 
 | 
          this.$delete( newItem, 'children' ) 
 | 
        } else { 
 | 
          newItem.children = this.newTree(newItem.children) 
 | 
        } 
 | 
        return newItem 
 | 
      }); 
 | 
  
 | 
    }, 
 | 
    getRoleAll () { 
 | 
      fetchAll({}) 
 | 
        .then(res => { 
 | 
          this.roleList = res 
 | 
        }) 
 | 
    }, 
 | 
    callback (data) { 
 | 
      this.name = data.name 
 | 
      this.searchForm.rootDeptId = data.id 
 | 
      this.search() 
 | 
    }, 
 | 
    changeZZ () { 
 | 
      if (this.tableData.selectedRows.length === 0) { 
 | 
        return this.$tip.warning('至少选择一条数据') 
 | 
      } 
 | 
      if (this.tableData.selectedRows.length >= 2) { 
 | 
        return this.$tip.warning('一次只能选择一项进行修改') 
 | 
      } 
 | 
      // this.id = this.tableData.selectedRows[0].umodel.id.toString() 
 | 
      // console.log(this.tableData.selectedRows[0]) 
 | 
      this.$refs.operaUserChangeWindow.open('更换部门', { 
 | 
        id: this.tableData.selectedRows[0].id, 
 | 
        departmentId: this.tableData.selectedRows[0].department.id }) 
 | 
    }, 
 | 
    // 修改状态 
 | 
    changeStatus (item) { 
 | 
      updateStatusById({ 
 | 
        id: item.id, 
 | 
        status: item.status 
 | 
      }).then(res => { 
 | 
  
 | 
      }).catch(e => { 
 | 
        this.$tip.apiFailed(e) 
 | 
      }).finally(() => { 
 | 
        this.handlePageChange() 
 | 
      }) 
 | 
    }, 
 | 
    resPwd() { 
 | 
      this.isWorking.search = true 
 | 
      resetPwd({ 
 | 
        ids: this.user.id 
 | 
      }) 
 | 
        .then(() => { 
 | 
          this.$tip.apiSuccess('密码重置成功') 
 | 
        }) 
 | 
        .catch(e => { 
 | 
          this.$tip.apiFailed(e) 
 | 
        }) 
 | 
        .finally(() => { 
 | 
          this.isWorking.search = false 
 | 
        }) 
 | 
    } 
 | 
  }, 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style scoped lang="scss"> 
 | 
@import "@/assets/style/variables.scss"; 
 | 
// 列表头像处理 
 | 
.table-column-avatar { 
 | 
  img { 
 | 
    width: 48px; 
 | 
  } 
 | 
} 
 | 
.zdy_box { 
 | 
  display: flex; 
 | 
  justify-content: space-between; 
 | 
} 
 | 
</style> 
 |