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.
500 lines
16 KiB
500 lines
16 KiB
<script setup>
|
|
import { ref, onMounted, reactive, computed } from 'vue'
|
|
import ElementPlus from 'element-plus'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import axios from 'axios'
|
|
import moment from 'moment'
|
|
import { ta } from 'element-plus/es/locales.mjs'
|
|
import { UserFilled } from '@element-plus/icons-vue'
|
|
import _ from 'lodash'
|
|
import request from '@/util/http'
|
|
|
|
const tableData = ref([])
|
|
//分页总条目
|
|
const total = ref(100)
|
|
const admin = ref({})
|
|
// 搜索对象
|
|
const getObj = ref({
|
|
pageNum: 1,
|
|
pageSize: 10
|
|
})
|
|
// 控制新增权限弹窗的
|
|
const addVisible = ref(false)
|
|
// 控制编辑权限弹窗的
|
|
const editVisible = ref(false)
|
|
const area = ref([])
|
|
const store = ref([])// 好像是部门
|
|
// 新增权限的对象,做初始化的
|
|
const addInit = ref({})
|
|
// 新增权限对象,传给后端的
|
|
const addObj = ref({})
|
|
// 编辑权限的对象
|
|
const editObj = ref({})
|
|
// 删除权限的对象
|
|
const delObj = ref({})
|
|
|
|
const get = async function (val) {
|
|
try {
|
|
if (admin.value.jwcode) {
|
|
admin.value.jwcode = admin.value.jwcode.replace(/\s/g, '');
|
|
}
|
|
if (typeof val === 'number') {
|
|
getObj.value.pageNum = val
|
|
} else {
|
|
getObj.value.pageNum = 1
|
|
}
|
|
const result = await request({
|
|
url: '',// 待补充
|
|
data: {
|
|
...getObj.value,
|
|
admin: { ...admin.value }
|
|
}
|
|
})
|
|
tableData.value = result.data.list
|
|
total.value = result.data.total
|
|
} catch (error) {
|
|
console.log('请求失败', error)
|
|
}
|
|
}
|
|
|
|
const reset = function () {
|
|
admin.value = {}
|
|
}
|
|
const getArea = async function () {
|
|
try {
|
|
const result = await request({
|
|
url: '',
|
|
data: {}
|
|
})
|
|
area.value = result.data
|
|
} catch (error) {
|
|
console.log('请求失败', error)
|
|
}
|
|
}
|
|
const getStore = async function () {
|
|
try {
|
|
const result = await request({
|
|
url: '',
|
|
data: {}
|
|
})
|
|
store.value = result.data
|
|
} catch (error) {
|
|
console.log('请求失败', error)
|
|
}
|
|
}
|
|
|
|
// 打开新增用户权限弹窗
|
|
const openaddVisible = function () {
|
|
addVisible.value = true
|
|
}
|
|
// 关闭新增用户权限弹窗
|
|
const closeaddVisible = function () {
|
|
addVisible.value = false
|
|
}
|
|
// 新增用户权限初始化
|
|
const permissionAddInit = function () {
|
|
addInit.value = {}
|
|
openaddVisible()
|
|
}
|
|
|
|
const permissionAdd = async function () {
|
|
Ref.value.validate(async (valid) => {
|
|
if (valid) {
|
|
try {
|
|
addObj.value.adminFlag = 1
|
|
addObj.value.status1 = 1
|
|
const result = await request({
|
|
url: '',
|
|
data: addObj.value
|
|
})
|
|
|
|
if (result.code == 200) {
|
|
ElMessage.success('添加成功')
|
|
} else {
|
|
ElMessage.error(result.msg)
|
|
}
|
|
addObj.value = {}
|
|
closeaddVisible()
|
|
get()
|
|
} catch (error) {
|
|
console.log('新增用户权限失败', error)
|
|
ElMessage.error('新增用户权限失败')
|
|
closeaddVisible()
|
|
}
|
|
} else {
|
|
ElMessage({
|
|
type: 'error',
|
|
message: '请检查输入内容'
|
|
})
|
|
}
|
|
})
|
|
} // 这个要简化,哪来那么多if-else
|
|
|
|
const rules = reactive({// 只有一个必填属性的话,能否直接设置在表单中
|
|
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
|
|
name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
|
store: [{ required: true, message: '请输入职称', trigger: 'blur' }],
|
|
machineId: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
|
|
area: [{ required: true, message: '请选择所属地区', trigger: 'blur' }],
|
|
permission: [{ required: true, message: '请选择权限', trigger: 'blur' }]
|
|
})
|
|
// 表单验证ref
|
|
const Ref = ref(null)
|
|
// 使用 _.throttle 并设置 trailing 为 false 实现严格节流,只执行一次 节吗呢?什么鬼
|
|
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
|
|
trailing: false
|
|
})
|
|
// 权限类别
|
|
const list = [
|
|
{
|
|
label: '总部',
|
|
value: '1'
|
|
},
|
|
{
|
|
label: '',
|
|
value: ''
|
|
}
|
|
]
|
|
// 地区列表
|
|
const areaList = ref([])
|
|
const getAreas = async function () {
|
|
try {
|
|
const result = await request({
|
|
url: '',
|
|
data: {}
|
|
})
|
|
console.log('result', result)
|
|
areaList.value = result.data
|
|
console.log('地区', area.value)
|
|
} catch (error) {
|
|
console.log('请求失败', error)
|
|
}
|
|
}
|
|
|
|
// 打开编辑用户权限弹窗
|
|
const openVisable = function () {
|
|
editVisible.value = true
|
|
}
|
|
// 关闭编辑用户权限弹窗
|
|
const closeEdit = function () {
|
|
editVisible.value = false
|
|
}
|
|
// 编辑用户权限初始化
|
|
const editInit = function (row) {
|
|
editObj.value = {}
|
|
editObj.value.jwcode = row.jwcode
|
|
editObj.value.name = row.name
|
|
editObj.value.area = row.area
|
|
editObj.value.store = row.store
|
|
editObj.value.permission = row.permission
|
|
console.log('编辑用户权限', editObj.value)
|
|
openVisable()
|
|
}
|
|
// 编辑用户权限提交
|
|
const permissionEdit = async function () {
|
|
try {
|
|
const result = await request({
|
|
url: '',
|
|
data: editObj.value
|
|
})
|
|
console.log('请求成功', result)
|
|
ElMessage.success('编辑用户权限成功')
|
|
closeEdit()
|
|
get()
|
|
} catch (error) {
|
|
ElMessage.error('编辑用户权限失败')
|
|
closeEdit()
|
|
}
|
|
}
|
|
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
|
|
trailing: false
|
|
})
|
|
// 删除初始化
|
|
const del = function (row) {
|
|
delObj.value = {}
|
|
console.log(row, '删除初始化')
|
|
delObj.value.jwcode = row.jwcode
|
|
}
|
|
// 删除权限
|
|
const delConfirm = async function () {
|
|
try {
|
|
delObj.value.permission = '4'
|
|
console.log(delObj.value)
|
|
|
|
const result = await request({
|
|
url: '',
|
|
data: delObj.value
|
|
})
|
|
|
|
console.log('请求成功', result)
|
|
ElMessage.success('删除权限成功')
|
|
delObj.value = {}
|
|
get()
|
|
} catch (error) {
|
|
console.log('删除权限失败', error)
|
|
ElMessage.error('删除权限失败')
|
|
get()
|
|
}
|
|
}
|
|
// 禁用启用用户权限
|
|
const editStatus = async function (row) {
|
|
try {
|
|
console.log(row)
|
|
|
|
editObj.value = {}
|
|
editObj.value.jwcode = row.jwcode
|
|
editObj.value.status1 = row.status1
|
|
|
|
console.log('修改用户权限状态', editObj.value)
|
|
|
|
const result = await request({
|
|
url: '',
|
|
data: editObj.value
|
|
})
|
|
console.log('请求成功', result)
|
|
|
|
ElMessage.success(
|
|
editObj.value.status1 == 1 ? '启用成功' : '禁用成功'
|
|
)
|
|
editObj.value = {}
|
|
get()
|
|
} catch (error) {
|
|
console.log('修改用户权限失败', error)
|
|
}
|
|
}
|
|
|
|
// 挂载
|
|
onMounted(async function () {
|
|
await get()
|
|
await getArea()
|
|
await getStore()
|
|
})
|
|
const handlePageSizeChange = function (val) {
|
|
getObj.value.pageSize = val
|
|
get()
|
|
}
|
|
const handleCurrentChange = function (val) {
|
|
getObj.value.pageNum = val
|
|
get()
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<el-row>
|
|
<el-col>
|
|
<el-card style="margin-bottom: 20px">
|
|
<div style="display:flex">
|
|
<div>
|
|
<el-text size="large">OA号:</el-text>
|
|
<el-input v-model="admin.jwcode" style="width: 240px" placeholder="请输入OA号" clearable />
|
|
</div>
|
|
<div style="margin-left: 50px">
|
|
<el-text size="large">所属地区:</el-text>
|
|
<el-select v-model="admin.area" placeholder="请选择所属地区" style="width: 240px" clearable>
|
|
<el-option v-for="item in area" :key="item" :label="item" :value="item" />
|
|
</el-select>
|
|
</div>
|
|
<div style="margin-left: 50px">
|
|
<el-text size="large">职位名称:</el-text>
|
|
<el-select v-model="admin.store" placeholder="请选择职位名称" style="width: 240px" clearable>
|
|
<el-option v-for="item in store" :key="item" :label="item" :value="item" />
|
|
</el-select>
|
|
</div>
|
|
<div style="margin-left:20px">
|
|
<el-button type="success" @click="reset()">重置</el-button>
|
|
<el-button type="primary" @click="get()">查询</el-button>
|
|
</div>
|
|
</div>
|
|
</el-card>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col>
|
|
<el-card>
|
|
<div class="add-item">
|
|
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()">新增用户</el-button>
|
|
</div>
|
|
|
|
<div>
|
|
<el-table :data="tableData" style="width: 100%">
|
|
<el-table-column type="index" label="序号" width="100px" fixed="left"><!-- 序号始终固定在左边 -->
|
|
<template #default="scope">
|
|
<!-- index下标从0开始,计算时要+1;后面算页数,(num页码数-1) * 每页记录数,加起来是总条数 -->
|
|
<span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="jwcode" label="精网号" width="120px" />
|
|
<el-table-column prop="name" label="姓名" width="120px" />
|
|
<el-table-column prop="area" label="所属地区" width="120px" />
|
|
<el-table-column prop="store" label="职位" width="120px" />
|
|
<el-table-column prop="permission" label="部门权限" width="120px">
|
|
<template #default="scope">
|
|
<span v-if="scope.row.permission === '1'">总部管理员</span>
|
|
待补充..................................................................................................
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
|
|
<el-table-column prop="operation" label="操作" width="200px">
|
|
<template #default="scope">
|
|
<el-button type="warning" @click="editInit(scope.row)"
|
|
:disabled="scope.row.status1 === 0">修改权限</el-button>
|
|
<el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm">
|
|
<template #reference>
|
|
<el-button type="danger" @click="del(scope.row)" :disabled="scope.row.status1 === 0">删除</el-button>
|
|
</template>
|
|
<template #actions="{ confirm, cancel }">
|
|
<el-button size="small" @click="cancel">取消</el-button>
|
|
<el-button type="primary" size="small" @click="confirm">确定</el-button>
|
|
</template>
|
|
</el-popconfirm>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="status1" label="状态" width="200px">
|
|
<template #default="scope">
|
|
<el-switch v-model="scope.row.status1" :active-value="1" :inactive-value="0" size="large"
|
|
@change="editStatus(scope.row)" style="
|
|
--el-switch-on-color: #13ce66;
|
|
--el-switch-off-color: #ff4949;" active-text="启用" inactive-text="禁用" />
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
|
|
<div class="pagination" style="margin-top: 20px">
|
|
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
|
|
@current-change="handleCurrentChange">
|
|
</el-pagination>
|
|
</div>
|
|
</el-card>
|
|
</el-col>
|
|
</el-row>
|
|
<!-- 新增用户权限 -->
|
|
<el-dialog v-model="addVisible" title="新增用户权限" :close-on-click-modal="false">
|
|
<template #footer>
|
|
<el-form ref="Ref" :rules="rules" :model="addObj" label-width="auto" style="align-items: center" >
|
|
<el-form-item prop="jwcode" label="精网号:">
|
|
<el-input v-model="addObj.jwcode" placeholder="请输入精网号" style="width: 220px" />
|
|
</el-form-item>
|
|
<el-form-item prop="name" label="用户名:">
|
|
<el-input v-model="addObj.name" placeholder="请输入用户名" style="width: 220px" />
|
|
</el-form-item>
|
|
<el-form-item prop="area" label="所属地区:">
|
|
<el-select v-model="addObj.area" placeholder="请选择所属地区" style="width: 220px"
|
|
@change="() => Ref.value.validateField('area')">
|
|
<el-option v-for="item in areaList" :key="item" :label="item" :value="item"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item prop="permission" label="权限类别:">
|
|
<el-select v-model="addObj.permission" placeholder="请选择权限" style="width: 220px"
|
|
@change="() => Ref.value.validateField('permission')">
|
|
<el-option v-for="item in list" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item prop="store" label="职位:">
|
|
<el-input v-model="addObj.store" placeholder="请输入职称" style="width: 220px" />
|
|
</el-form-item>
|
|
<el-form-item prop="machineId" label="机器码:">
|
|
<el-input v-model="addObj.machineId" placeholder="请输入机器码" style="width: 220px" />
|
|
</el-form-item>
|
|
<el-form-item prop="remark" label="备注">
|
|
<el-input v-model="addObj.remark" style="width: 300px" :rows="2" maxlength="100" show-word-limit
|
|
type="textarea" />
|
|
</el-form-item>
|
|
</el-form>
|
|
<div>
|
|
<el-button @click="closeaddVisible()">取消</el-button>
|
|
<el-button type="primary" @click="throttledPermissionAdd()">
|
|
提交
|
|
</el-button>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
|
|
<!-- 这是编辑用户权限弹窗 -->
|
|
<el-dialog v-model="editVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false">
|
|
<el-descriptions :column="2" :size="size" border label-width="200px">
|
|
<el-descriptions-item>
|
|
<template #label>
|
|
<div class="permissionVisible">
|
|
<el-icon><UserFilled /></el-icon>
|
|
员工精网号
|
|
</div>
|
|
</template>
|
|
{{ editObj.jwcode }}
|
|
</el-descriptions-item>
|
|
<el-descriptions-item>
|
|
<template #label>
|
|
<div class="permissionVisible">
|
|
<el-icon><User /></el-icon>
|
|
员工姓名
|
|
</div>
|
|
</template>
|
|
{{ editObj.name }}
|
|
</el-descriptions-item>
|
|
<el-descriptions-item>
|
|
<template #label>
|
|
<div class="permissionVisible">
|
|
<el-icon><location /></el-icon>
|
|
所属地区
|
|
</div>
|
|
</template>
|
|
{{ editObj.area }}
|
|
</el-descriptions-item>
|
|
<el-descriptions-item>
|
|
<template #label>
|
|
<div class="permissionVisible">
|
|
<el-icon><OfficeBuilding /></el-icon>
|
|
部门
|
|
</div>
|
|
</template>
|
|
{{ editObj.store }}
|
|
</el-descriptions-item>
|
|
</el-descriptions>
|
|
<el-divider>
|
|
<el-icon><star-filled /></el-icon>
|
|
</el-divider>
|
|
<div>
|
|
<span class="permissionVisible" style="margin-right: 20px">权限设置:</span>
|
|
<el-radio-group v-model="editObj.permission">
|
|
<el-radio value="1" border>总部管理员</el-radio>
|
|
..............................................................................待补充
|
|
</el-radio-group>
|
|
</div>
|
|
<template #footer>
|
|
<div>
|
|
<el-button @click="closeEdit()">取消</el-button>
|
|
<el-button type="primary" @click="throttledPermissionEdit()">提交</el-button>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.permissionVisible {
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.pagination {
|
|
display: flex;
|
|
}
|
|
|
|
.head-card {
|
|
display: flex;
|
|
}
|
|
|
|
/* 新增样式让弹窗内容居中 */
|
|
.el-dialog__body {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
|
|
.el-dialog__footer {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
</style>
|