| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- <script setup>
- import { getMainList } from "@/api/system/depart.js"
- import { getRoleList } from "@/api/system/role"
- import {
- getUserList,
- addUser,
- modUser,
- byUserIdfnRole,
- byUserIduPRole,
- delUser,
- restPwdUser
- } from "@/api/system/user.js"
- const { proxy } = getCurrentInstance()
- //部门树
- const deptName = ref("")
- const deptOptions = ref([])
- const deptOptionsEdit = ref([])
- const filterNode = (value, data) => {
- if (!value) return true
- return data.name.indexOf(value) !== -1
- }
- watch(deptName, val => {
- proxy.$refs["deptTreeRef"].filter(val)
- })
- //查询
- const params = ref({
- deptId: null,
- page: 1,
- size: 20
- })
- const total = ref(0)
- const tableData = ref([])
- //用户列表
- function getUserListData() {
- getUserList(params.value).then(res => {
- tableData.value = res.data.records
- total.value = res.data.total
- })
- }
- //查询按钮
- function searchUserListBtn() {
- console.log(params.value)
- getUserListData()
- }
- //重置
- function resetParamsBtn() {
- params.value = {
- deptId: null,
- page: 1,
- size: 20
- }
- getUserListData()
- }
- function sizeChange(e) {
- params.value.size = e
- getUserListData()
- }
- function currentChange(e) {
- params.value.page = e
- getUserListData()
- }
- //部门点击
- function treeNodeClick(value) {
- params.value.deptId = value.id
- getUserListData()
- }
- //部门数据
- function getDeptTreeData() {
- getMainList().then(res => {
- deptOptions.value = res.data
- deptOptionsEdit.value = res.data
- })
- }
- //角色数据
- const roleData = ref([])
- function getRoleListData() {
- getRoleList({
- page: 1,
- size: 100000
- }).then(res => {
- roleData.value = res.data.records
- })
- }
- getDeptTreeData()
- getUserListData()
- getRoleListData()
- //编辑
- function filterMethod(value) {
- deptOptionsEdit.value = [...deptOptions].filter(item =>
- item.name.includes(value)
- )
- }
- const form = ref({
- userName: null,
- depId: null,
- roleIds: null,
- realName: null,
- phone: null,
- email: null
- })
- const rules = ref({
- depId: [{ required: true, message: "部门不能为空", trigger: "blur" }],
- roleIds: [{ required: true, message: "角色不能为空", trigger: "blur" }],
- userName: [{ required: true, message: "用户名不能为空", trigger: "blur" }]
- })
- function reset() {
- form.value = {
- userName: null,
- depId: null,
- roleIds: null,
- realName: null,
- phone: null,
- email: null
- }
- if (proxy.$refs["userRef"]) {
- proxy.$refs["userRef"].resetFields()
- }
- }
- const title = ref("")
- const open = ref(false)
- function submitForm() {
- proxy.$refs["userRef"].validate(valid => {
- if (valid) {
- if (form.value.id != undefined) {
- modUser(form.value).then(res => {
- if (res.code == 200) {
- byUserIduPRole(form.value.id, {
- roleIds: form.value.roleIds.join(",")
- }).then(result => {
- if (result.code == 200) {
- getUserListData()
- open.value = false
- ElMessage({
- message: res.msg,
- type: "success"
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- } else {
- addUser(form.value).then(res => {
- if (res.code == 200) {
- byUserIduPRole(res.data.id, {
- roleIds: form.value.roleIds.join(",")
- }).then(result => {
- if (result.code == 200) {
- getUserListData()
- open.value = false
- ElMessage({
- message: res.msg,
- type: "success"
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- }
- } else {
- console.log("检验不通过")
- }
- })
- }
- function cancel() {
- open.value = false
- reset()
- }
- function addUserBtn() {
- open.value = true
- title.value = "新增"
- }
- function modUserBtn(row) {
- console.log(row)
- reset()
- let { userName, deptId, name, mobile, email, id } = row
- form.value = {
- userName,
- depId: deptId,
- realName: name,
- phone: mobile,
- email,
- id
- }
- byUserIdfnRole(id).then(res => {
- form.value.roleIds = res.data.map(item => item.id)
- open.value = true
- title.value = "修改"
- })
- }
- function delUserBtn(row) {
- ElMessageBox.confirm(`是否确认删除"${row.userName}"?`, "删除警告", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- delUser({ ids: row.id }).then(res => {
- console.log(res)
- if (res.code == 200) {
- getUserListData()
- ElMessage({
- message: res.msg,
- type: "success"
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- })
- }
- const selectionChangeData = ref([])
- function selectionChange(value) {
- selectionChangeData.value = value
- }
- function delUserMoreBtn() {
- if (selectionChangeData.value.length <= 0) {
- ElMessage({
- message: "请先选择要删除的数据",
- type: "warning"
- })
- return
- }
- ElMessageBox.confirm("是否确认删除?", "删除警告", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- let arr = []
- selectionChangeData.value.forEach(element => {
- arr.push(element.id)
- })
- delUser({ ids: arr.join(",") }).then(res => {
- console.log(res)
- if (res.code == 200) {
- getUserListData()
- ElMessage({
- message: res.msg,
- type: "success"
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- })
- }
- function resetUserPwdBtn(row) {
- ElMessageBox.confirm(`是否确认重置"${row.userName}"密码?`, "删除警告", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- restPwdUser({ id: row.id }).then(res => {
- if (res.code == 200) {
- getUserListData()
- ElMessage({
- message: res.msg,
- type: "success"
- })
- } else {
- ElMessage({
- message: res.msg,
- type: warning
- })
- }
- })
- })
- }
- </script>
- <template>
- <div>
- <el-card class="tjm_card_style_custom">
- <div class="tjm_card_title">条件检索</div>
- <div class="tjm_card_select">
- <div class="tjm_card_select_left">
- <el-form
- :inline="true"
- :model="params"
- label-width="80px"
- :label-position="'left'"
- >
- <!-- <el-form-item label="用户编号">
- <el-input v-model="params.code" clearable />
- </el-form-item> -->
- <el-form-item label="用户名称">
- <el-input v-model="params.userName" clearable />
- </el-form-item>
- <el-form-item label="姓名">
- <el-input v-model="params.realName" clearable />
- </el-form-item>
- <!-- <el-form-item label="创建时间">
- <el-date-picker
- v-model="params.date"
- type="daterange"
- placeholder="Pick a date"
- clearable
- />
- </el-form-item>
- <el-form-item label="用户状态">
- <el-select
- v-model="params.status"
- clearable
- placeholder="请选择"
- >
- <el-option label="启用" value="1" />
- <el-option label="禁用" value="2" />
- </el-select>
- </el-form-item> -->
- <el-form-item>
- <el-button type="primary" @click="searchUserListBtn">
- <el-icon class="tjm_btn_icon_right"><tjm-icon-ep-Plus /></el-icon>
- 搜索
- </el-button>
- <el-button @click="resetParamsBtn">
- <el-icon class="tjm_btn_icon_right"><tjm-icon-ep-RefreshRight /></el-icon>
- 重置
- </el-button>
- </el-form-item>
- </el-form>
- </div>
- </div>
- <el-divider />
- <div class="tjm_card_tools">
- <div class="tjm_card_tools_left">
- <el-button type="primary" @click="addUserBtn">
- <el-icon class="tjm_btn_icon_right"><tjm-icon-ep-Plus /></el-icon>
- 新增
- </el-button>
- <el-button type="danger" @click="delUserMoreBtn">
- <el-icon class="tjm_btn_icon_right"><tjm-icon-ep-delete /></el-icon>
- 批量删除
- </el-button>
- </div>
- <!-- <div class="tjm_card_tools_right">
- <el-button>
- <el-icon class="tjm_btn_icon_right"><tjm-icon-ep-download /></el-icon>
- excel导出数据
- </el-button>
- </div> -->
- </div>
- <div class="tjm_card_table">
- <div class="tjm_card_table_left" style="height: 450px; overflow: auto">
- <el-input
- v-model="deptName"
- placeholder="请输入部门名称"
- clearable
- prefix-icon="Search"
- />
- <!-- default-expand-all -->
- <el-tree
- :data="deptOptions"
- :props="{ label: 'name', children: 'children' }"
- :expand-on-click-node="false"
- ref="deptTreeRef"
- node-key="id"
- highlight-current
- @node-click="treeNodeClick"
- :filter-node-method="filterNode"
- style="margin-top: 6px"
- />
- </div>
- <div class="tjm_card_table_right">
- <el-table
- header-cell-class-name="tjm_cart_table_header"
- :data="tableData"
- border
- width="100%"
- @selection-change="selectionChange"
- >
- <el-table-column type="selection" width="55" />
- <el-table-column type="index" label="序号" width="55" />
- <el-table-column prop="userName" label="用户名" />
- <el-table-column prop="deptName" label="所属部门" width="240" />
- <el-table-column prop="name" label="姓名" />
- <el-table-column prop="mobile" label="手机号" />
- <el-table-column prop="email" label="电子邮箱" width="240" />
- <el-table-column prop="state" label="用户状态">
- <template #default="scope">
- {{ ["启用", "禁用"][scope.row.state] }}
- </template>
- </el-table-column>
- <el-table-column prop="ope" label="操作">
- <template #default="scope">
- <el-tooltip content="修改" placement="top">
- <el-button
- link
- type="primary"
- icon="Edit"
- @click="modUserBtn(scope.row)"
- ></el-button>
- </el-tooltip>
- <el-tooltip content="删除" placement="top">
- <el-button
- link
- type="primary"
- icon="Delete"
- @click="delUserBtn(scope.row)"
- ></el-button>
- </el-tooltip>
- <el-tooltip content="重置密码" placement="top">
- <el-button
- link
- type="primary"
- icon="Key"
- @click="resetUserPwdBtn(scope.row)"
- ></el-button>
- </el-tooltip>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </div>
- <div class="tjm_card_pagination">
- <el-pagination
- background
- layout="total,sizes,prev, pager, next,"
- :total="total"
- :page-sizes="[20, 30, 100]"
- @size-change="sizeChange"
- @current-change="currentChange"
- />
- </div>
- </el-card>
- <!-- 编辑 -->
- <el-dialog :title="title" v-model="open" width="680px" append-to-body>
- <el-form ref="userRef" :model="form" :rules="rules" label-width="100px">
- <el-row>
- <el-col :span="24">
- <el-form-item label="用户名" prop="userName">
- <el-input
- v-model="form.userName"
- placeholder="请输入用户名"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="所属部门" prop="depId">
- <el-tree-select
- style="width: 100%"
- v-model="form.depId"
- :data="deptOptions"
- filterable
- :props="{ value: 'id', label: 'name', children: 'children' }"
- value-key="id"
- placeholder="选择所属部门"
- check-strictly
- />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="角色" prop="roleIds">
- <el-select
- v-model="form.roleIds"
- multiple
- placeholder="请选择角色"
- style="width: 100%"
- >
- <el-option
- v-for="item in roleData"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="姓名" prop="realName">
- <el-input
- v-model="form.realName"
- placeholder="请输入姓名"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="手机号" prop="phone">
- <el-input
- v-model="form.phone"
- placeholder="请输入手机号"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="邮箱" prop="email">
- <el-input v-model="form.email" placeholder="邮箱" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitForm">确 定</el-button>
- <el-button @click="cancel">取 消</el-button>
- </div>
- </template>
- </el-dialog>
- </div>
- </template>
- <style lang="scss" scoped></style>
|