You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.0 KiB

2 months ago
<template>
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="1024px">
<template #header>
<div>
<el-icon class="el-custom-dialog-icon">
<Edit />
</el-icon>
<span>用户信息</span>
</div>
</template>
<div class="app-container" v-loading="state.loading" style="height: 50vh">
<el-card class="search-container">
<el-form :inline="true">
<el-form-item label="账号">
<el-input v-model="state.queryParams.name" placeholder="账号/姓名" clearable />
</el-form-item>
<el-form-item label="机构部门">
<OrgCascader v-model="state.orgIds" clearable :check-strictly="true" />
</el-form-item>
<el-form-item>
<!-- v-auth="'menuView'" -->
<el-button @click="handleQuery" icon="Search">查询</el-button>
</el-form-item>
<el-form-item>
<!-- v-auth="'menuView'" -->
<el-button type="primary" @click="handleSelected" icon="Plus">确定</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="paged-table-container">
<el-table
ref="tableRef"
row-key="id"
:data="state.tableData"
border
@selection-change="(val)=>state.multipleSelection=val"
>
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column type="index" width="50">
<template #default="scope">
{{ scope.$index + 1 + (state.pageParams.Page - 1) * state.pageParams.PageSize }}
</template>
</el-table-column>
<el-table-column prop="userName" label="账号"></el-table-column>
<el-table-column prop="realName" label="姓名"></el-table-column>
<el-table-column prop="orgName" label="机构部门" />
<el-table-column prop="status" label="状态">
<template #default="scope">
<el-tag v-if="scope.row.status === 1" type="success" disable-transitions>正常</el-tag>
<el-tag v-else type="danger" disable-transitions>禁用</el-tag>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" />
</el-table>
<el-pagination
style="margin-top: 10px"
v-model:currentPage="state.pageParams.Page"
v-model:page-size="state.pageParams.PageSize"
:total="state.pageParams.Total"
background
layout="total, sizes,prev, pager, next"
@size-change="handleQuery"
@current-change="handleQuery"
:page-sizes="[10, 20, 50, 100]"
/>
</el-card>
</div>
</el-dialog>
</template>
<script setup>
import { reactive,defineExpose } from 'vue'
2 months ago
import { getPaged } from '@/api/system/userApi'
import { ElMessageBox, ElMessage } from 'element-plus'
import OrgCascader from '@/views/system/components/orgCascader.vue'
const emits = defineEmits(['selected'])
const state = reactive({
isShowDialog: false,
loading: false,
queryParams: {
name: '',
orgId: null
},
pageParams: {
Page: 1,
PageSize: 10,
Total: 0
},
multipleSelection:[],
tableData: [],
orgIds: null
})
function handleQuery() {
state.loading = true
if (state.orgIds && state.orgIds.length > 0) {
state.queryParams.orgId = state.orgIds[state.orgIds.length - 1]
} else {
state.queryParams.orgId = null
}
getPaged(Object.assign({}, state.queryParams, state.pageParams))
.then((resp) => {
state.tableData = resp.data.data
state.pageParams.Total = resp.data.total
})
.finally(() => (state.loading = false))
}
function openDialog() {
state.orgIds = null
state.queryParams = {
name: '',
orgId: null
}
handleQuery()
state.isShowDialog = true
}
function handleSelected() {
emits('selected', state.multipleSelection)
state.isShowDialog = false
}
defineExpose({
openDialog
})
</script>