123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- <!--
- - Copyright (c) 2018-2025, lengleng All rights reserved.
- -
- - Redistribution and use in source and binary forms, with or without
- - modification, are permitted provided that the following conditions are met:
- -
- - Redistributions of source code must retain the above copyright notice,
- - this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- - notice, this list of conditions and the following disclaimer in the
- - documentation and/or other materials provided with the distribution.
- - Neither the name of the pig4cloud.com developer nor the names of its
- - contributors may be used to endorse or promote products derived from
- - this software without specific prior written permission.
- - Author: lengleng (wangiegie@gmail.com)
- -->
- <template>
- <div class="app-container calendar-list-container">
- <basic-container>
- <avue-crud :option="option"
- ref="crud"
- v-model="form"
- :page="page"
- @on-load="getList"
- :table-loading="listLoading"
- @search-change="handleFilter"
- @refresh-change="handleRefreshChange"
- @row-update="update"
- @row-save="create"
- :before-open="handleOpenBefore"
- :data="list">
- <template slot="menuLeft">
- <el-button v-if="sys_user_add"
- class="filter-item"
- @click="handleCreate"
- size="small"
- type="primary"
- icon="el-icon-edit">添加</el-button>
- </template>
- <template slot="username"
- slot-scope="scope">
- <span>{{scope.row.username}}</span>
- </template>
- <template slot="role"
- slot-scope="scope">
- <span v-for="(role,index) in scope.row.roleList"
- :key="index">
- <el-tag>{{role.roleDesc}} </el-tag>
- </span>
- </template>
- <template slot="deptId"
- slot-scope="scope">
- {{scope.row.deptName}}
- </template>
- <template slot="lockFlag"
- slot-scope="scope">
- <el-tag>{{scope.label}}</el-tag>
- </template>
- <template slot="menu"
- slot-scope="scope">
- <el-button v-if="sys_user_edit"
- size="small"
- type="success"
- @click="handleUpdate(scope.row,scope.index)">编辑
- </el-button>
- <el-button v-if="sys_user_del"
- size="small"
- type="danger"
- @click="deletes(scope.row,scope.index)">删除
- </el-button>
- </template>
- <template slot="deptIdForm"
- slot-scope="scope">
- <avue-crud-input v-model="form.deptId"
- type="tree"
- placeholder="请选择所属部门"
- :node-click="getNodeData"
- :dic="treeDeptData"
- :props="defaultProps"></avue-crud-input>
- </template>
- <template slot="roleForm"
- slot-scope="scope">
- <avue-crud-select v-model="role"
- multiple
- placeholder="请选择角色,要先选择部门"
- :dic="rolesOptions"
- :props="roleProps"></avue-crud-select>
- </template>
- </avue-crud>
- </basic-container>
- </div>
- </template>
- <script>
- import { fetchList, getObj, addObj, putObj, delObj } from "@/api/user";
- import { deptRoleList, fetchDeptTree } from "@/api/role";
- import { tableOption } from '@/const/crud/user';
- import { mapGetters } from "vuex";
- import { constants } from 'fs';
- import { connect } from 'tls';
- export default {
- name: "table_user",
- data () {
- return {
- option: tableOption,
- treeDeptData: [],
- checkedKeys: [],
- roleProps: {
- label: "roleDesc",
- value: 'roleId'
- },
- defaultProps: {
- label: "name",
- value: 'id',
- },
- page: {
- total: 0, // 总页数
- currentPage: 1, // 当前页数
- pageSize: 20, // 每页显示多少条,
- isAsc: false//是否倒序
- },
- list: [],
- listLoading: true,
- role: [],
- form: {},
- rolesOptions: [],
- };
- },
- computed: {
- ...mapGetters(["permissions"])
- },
- watch: {
- role () {
- this.form.role = this.role
- }
- },
- filters: {
- statusFilter (status) {
- const statusMap = {
- 0: "有效",
- 1: "无效",
- 9: "锁定"
- };
- return statusMap[status];
- }
- },
- created () {
- this.sys_user_add = this.permissions["sys_user_add"];
- this.sys_user_edit = this.permissions["sys_user_edit"];
- this.sys_user_del = this.permissions["sys_user_del"];
- },
- methods: {
- getList (page, params) {
- this.listLoading = true;
- fetchList(Object.assign({
- page: page.currentPage,
- limit: page.pageSize
- }, params)).then(response => {
- this.list = response.data.data.records;
- this.page.total = response.data.data.total
- this.listLoading = false;
- });
- },
- getNodeData (data) {
- deptRoleList().then(response => {
- this.rolesOptions = response.data.data;
- });
- },
- handleDept () {
- fetchDeptTree().then(response => {
- this.treeDeptData = response.data.data;
- });
- },
- handleFilter (param) {
- this.page.page = 1;
- this.getList(this.page, param);
- },
- handleRefreshChange () {
- this.getList(this.page)
- },
- handleCreate () {
- this.$refs.crud.rowAdd();
- },
- handleOpenBefore (show, type) {
- window.boxType = type;
- this.handleDept();
- if (['edit', 'views'].includes(type)) {
- this.role = [];
- for (var i = 0; i < this.form.roleList.length; i++) {
- this.role[i] = this.form.roleList[i].roleId;
- }
- deptRoleList().then(response => {
- this.rolesOptions = response.data;
- });
- } else if (type === 'add') {
- this.role = [];
- }
- show();
- },
- handleUpdate (row, index) {
- this.$refs.crud.rowEdit(row, index);
- this.form.password = undefined
- },
- create (row, done, loading) {
- addObj(this.form).then(() => {
- this.getList();
- done();
- this.$notify({
- title: "成功",
- message: "创建成功",
- type: "success",
- duration: 2000
- });
- }).catch(() => {
- loading();
- });
- },
- update (row, index, done, loading) {
- putObj(this.form).then(() => {
- this.getList();
- done();
- this.$notify({
- title: "成功",
- message: "修改成功",
- type: "success",
- duration: 2000
- });
- }).catch(() => {
- loading();
- });
- },
- deletes (row, index) {
- this.$confirm(
- "此操作将永久删除该用户(用户名:" + row.username + "), 是否继续?",
- "提示",
- {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }
- ).then(() => {
- delObj(row.userId)
- .then(() => {
- this.list.splice(index, 1);
- this.$notify({
- title: "成功",
- message: "删除成功",
- type: "success",
- duration: 2000
- });
- })
- .cache(() => {
- this.$notify({
- title: "失败",
- message: "删除失败",
- type: "error",
- duration: 2000
- });
- });
- });
- }
- }
- };
- </script>
|