代码拉取完成,页面将自动刷新
<template>
<div class="block">
<!-- 功能栏 -->
<div class="views-tool">
<div class="tool-left">
<el-input
size="default"
v-model="state.tableData.param.userName"
placeholder="请输入账户名称"
style="max-width: 180px"
clearable
>
</el-input>
<el-button
class="ml10"
size="default"
type="primary"
@click="getTableData"
v-auth="'system:user:list'"
>
<SvgIcon name="iconfont icon-search1" />
{{ $t("message.form.search") }}
</el-button>
</div>
</div>
<div class="system-user-container layout-padding">
<el-card shadow="hover" class="layout-padding-auto">
<!-- 新增/导入/导出/打印 -->
<TableImport
ref="tableImportRef"
model-name="系统用户"
model="user"
:key="componentKey"
:param="state.tableData.param"
@close="componentKey = generateUUID()"
@insert="onOpenInsert"
/>
<!-- Table -->
<el-table
:data="state.tableData.data"
v-loading="state.tableData.loading"
style="width: 100%"
>
<el-table-column type="index" label="序号" width="80" />
<el-table-column
prop="userName"
label="账户名称"
width="150"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="nickName"
label="用户昵称"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="roleName"
label="关联角色"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="department"
label="部门"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="phoneNumber"
label="手机号"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="email"
label="邮箱"
show-overflow-tooltip
></el-table-column>
<el-table-column prop="status" label="用户状态" show-overflow-tooltip>
<template #default="scope">
<el-tag type="success" v-if="scope.row.status == 0">启用</el-tag>
<el-tag type="info" v-else>禁用</el-tag>
</template>
</el-table-column>
<el-table-column
prop="remark"
label="用户描述"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop="createdTime"
width="170"
label="创建时间"
show-overflow-tooltip
></el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="scope">
<el-button
size="small"
text
type="primary"
v-auths="['system:user:query', 'system:user:edit']"
@click="onOpenDialog('edit', scope.row)"
>
{{ $t("message.form.edit") }}</el-button
>
<el-button
v-if="scope.row.roleCode != 'super_admin'"
size="small"
text
type="primary"
v-auth="'system:user:delete'"
@click="onOpenDialog('delete', scope.row)"
>
{{ $t("message.form.delete") }}</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
@size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.pageNum"
background
v-model:page-size="state.tableData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total"
>
</el-pagination>
</el-card>
<UserDialog ref="userDialogRef" @refresh="formSubmit" />
</div>
</div>
</template>
<script setup lang="ts" name="systemUser">
import { defineAsyncComponent, reactive, onMounted, ref } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
import { userApi } from "/@/api/system/user/index";
import { isEmpty, tansParams } from "/@/utils/mms";
import { generateUUID } from "/@/utils/tool";
// 引入 api 请求接口
const baseApi = userApi();
// 引入组件
const UserDialog = defineAsyncComponent(() => import("/@/views/system/user/dialog.vue"));
const TableImport = defineAsyncComponent(() => import("/@/components/table-import/index.vue"));
// 定义变量内容
const userDialogRef = ref();
const tableImportRef = ref();
const componentKey = ref(generateUUID());
const state = reactive<SysUserState>({
tableData: {
data: [],
total: 0,
loading: false,
param: {
pageNum: 1,
pageSize: 10,
userName: "",
},
}
});
// 初始化表格数据
const getTableData = () => {
state.tableData.loading = true;
baseApi
.getList(state.tableData.param)
.then((res) => {
state.tableData.data = res.rows;
state.tableData.total = res.total;
})
.catch(async (err) => {
ElMessage.warning(err);
})
.finally(() => {
state.tableData.loading = false;
});
};
// 打开新增用户弹窗
const onOpenInsert = (type: string) => {
userDialogRef.value.openDialog(type);
};
// 打开修改用户弹窗
const onOpenDialog = (type: string, row: RowUserType) => {
// 编辑操作
if (type === "edit") {
baseApi
.query(row.userId)
.then((res) => {
userDialogRef.value.openDialog(type, res.data);
})
.catch(async (err) => {
ElMessage.warning(err);
})
.finally(() => {});
}
// 删除操作
if (type === "delete") {
ElMessageBox.confirm(
`此操作将永久删除账户名称:“${row.userName}”,是否继续?`,
"提示",
{
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
baseApi
.delete(row.userId)
.then((res) => {
getTableData();
ElMessage.success("删除成功");
})
.catch(async (err) => {
ElMessage.warning(err);
})
.finally(() => {});
})
.catch(() => {});
}
};
// 接受子组件传值
const formSubmit = (row: RowUserType) => {
if (isEmpty(row.userId)) {
//新增
baseApi
.insert(row)
.then((row) => {
userDialogRef.value.closeDialog();
ElMessage.success(row.msg);
setTimeout(() => {
getTableData();
}, 1000);
})
.catch(async (err) => {
ElMessage.warning(err);
})
.finally(() => {});
} else {
//更新
baseApi
.edit(row)
.then((row) => {
userDialogRef.value.closeDialog();
ElMessage.success(row.msg);
setTimeout(() => {
getTableData();
}, 1000);
})
.catch(async (err) => {
ElMessage.warning(err);
})
.finally(() => {});
}
};
// 分页改变大小
const onHandleSizeChange = (val: number) => {
state.tableData.param.pageSize = val;
getTableData();
};
// 分页改变页码
const onHandleCurrentChange = (val: number) => {
state.tableData.param.pageNum = val;
getTableData();
};
// 页面加载时
onMounted(() => {
getTableData();
});
</script>
<style scoped lang="scss"></style>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。