公共服务平台-用户管理

This commit is contained in:
lSun 2025-09-16 18:12:03 +08:00
parent 2a4d6b82f1
commit b6f9fab911
5 changed files with 531 additions and 115 deletions

View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
// 查询产品宣传物料
export function getMaterialListAPI(data) {
return request({
url: '/screen/material/getMaterialList',
method: 'POST',
data,
})
}

View File

@ -1,25 +1,400 @@
<template>
<!-- 宣传物料 -->
<div class="pro-materials"> 宣传物料正在开发中敬请期待... </div>
<!-- 宣传物料 -->
<div class="pro-materials">
<div class="sidebar">
<div
:key="item.value"
class="category-item"
v-for="item in leftMenuList"
@click="activeTypeValue = item.value"
:class="{ active: activeTypeValue == item.value }"
>
{{ item.label }}
</div>
</div>
<div class="content-area" ref="servicesGrid">
<div
:key="item.id"
class="services-grid"
v-for="item in showProMaterialsDuctList"
>
<div class="card-image" @click="previewDocs(item)">
<ImagePreview
:height="150"
:borderRadius="10"
:width="itemWidth"
:src1="item.image"
/>
</div>
<div class="card-content" :style="{ width: itemWidth - 40 + 'px' }">
<!-- 第一行名称和版本 -->
<el-tooltip :content="item.name" placement="top" :effect="'light'" :enterable="false">
<div class="card-title-row">
<span class="title-name">{{ item.name }}</span>
<span class="title-version">{{ item.version }}</span>
</div>
</el-tooltip>
<!-- 第二行描述 + 按钮 -->
<div class="card-footer">
<el-tooltip :content="item.description" placement="top" :effect="'light'" :enterable="false">
<span class="title-desc">{{ item.description }}</span>
</el-tooltip>
<div
class="primary-btn"
@click="handleDownload(item)"
>
</div>
</div>
</div>
</div>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template #outerContent>
<div class="preview-docs">
<iframe :src="iframeUrl" width="100%" height="100%" />
</div>
</template>
</DialogModel>
</div>
</div>
</template>
<script>
import DialogModel from '@/components/DialogModel/index'
import {getMaterialListAPI} from '@/api/publicService/proMaterials'
import { encryptCBCTime } from '@/utils/aes'
import useBase64 from '@/utils/base64Utils.js'
export default {
name: 'ProMaterials',
name: 'ProMaterials',
components: {
DialogModel,
},
dicts: ['tb_product_type'],
data() {
return {
iframeUrl: '',
activeTypeValue: 'all', //
leftMenuList: [
{
label: '全部',
value: 'all',
},
], //
proMaterialsListAll: [], //
showProMaterialsDuctList: [], //
itemWidth: 0, //
dialogConfig: {
outerTitle: '查看',
outerVisible: false,
outerWidth: '90%',
minHeight: '90vh',
},
lookFile: 'http://192.168.0.14:8012/onlinePreview?url=',
filePreviewPath: 'http://218.21.27.6:18013/onlinePreview?url=',
}
},
created() {
this.getProductCenterListInScreenFun()
},
mounted() {
//
this.$on('dictReady', (dict) => {
this.initLeftMenuList()
})
//
if (this.dict && this.dict.type && this.dict.type.tb_product_type) {
this.initLeftMenuList()
}
this.getItemWidth()
},
methods: {
//
getItemWidth() {
this.itemWidth = (this.$refs.servicesGrid?.clientWidth - 120) / 4
},
//
initLeftMenuList() {
try {
if (
this.dict &&
this.dict.type &&
this.dict.type.tb_product_type
) {
//
this.dict.type.tb_product_type.forEach((item) => {
this.leftMenuList.push({
label: item.label,
value: item.value,
})
})
}
} catch (error) {
}
},
//
handleDownload(service) {
let url = service.filePath;
// URL
if (!url.startsWith('http://') && !url.startsWith('https://')) {
if (url.startsWith('www.')) {
url = 'https://' + url;
} else {
url = 'https://' + url;
}
}
// a
const link = document.createElement('a');
link.href = url;
link.download = ''; // 'filename.zip'使
link.target = '_blank'; //
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link); //
alert('下载成功')
/*// 确保 URL 是完整的绝对路径
let url = service.filePath
// URL http:// https:// https://
if (!url.startsWith('http://') && !url.startsWith('https://')) {
// URL www. https://
if (url.startsWith('www.')) {
url = 'https://' + url
} else {
// https://
url = 'https://' + url
}
}
window.open(url, '_blank')*/
},
//
handleCardHover(serviceId) {
this.hoveredCard = serviceId
},
//
handleCardLeave() {
this.hoveredCard = null
},
//
async getProductCenterListInScreenFun() {
const res = await getMaterialListAPI({})
this.proMaterialsListAll = res.rows
this.showProMaterialsDuctList = this.proMaterialsListAll
},
//
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
//
previewDocs(item) {
const { originalName, filePath } = item
let filePreviewPath = ''
let time = encryptCBCTime(Math.floor(Date.now()).toString())
const encodedPath = filePath.includes('http')
? encodeURIComponent(useBase64.encode64(`${filePath}`))
: encodeURIComponent(
useBase64.encode64(`${this.lookFile}/${filePath}`),
)
filePreviewPath = `${this.lookFile}${encodedPath}&token=${time}`
const isEdgeOrOther = /Edg|Chrome|Firefox|Safari/.test(
navigator.userAgent,
)
if (isEdgeOrOther) {
const url = new URL(filePreviewPath)
url.searchParams.append('preventDownload', 'true')
filePreviewPath = url.toString()
}
this.iframeUrl = filePreviewPath
this.dialogConfig.outerVisible = true
},
},
//
watch: {
activeTypeValue(newVal) {
if (newVal === 'all') {
this.showProMaterialsDuctList = this.proMaterialsListAll
} else {
this.showProMaterialsDuctList = this.proMaterialsListAll.filter(
(item) => item.typeId === Number(newVal),
)
}
},
},
}
</script>
<style scoped>
<style scoped lang="scss">
.pro-materials {
width: 100%;
width: 100%;
height: 100%; /* 设置视口高度 */
display: flex;
margin: 0 auto;
padding: 40px 20px 0;
gap: 24px;
box-sizing: border-box; /* 确保padding包含在高度内 */
/* 左侧分类菜单 */
.sidebar {
width: 160px;
flex-shrink: 0;
}
.content-area {
flex: 1;
height: 100%;
background-color: #f0f2f5;
font-size: 16px;
color: #333;
text-align: center;
line-height: 1.5;
letter-spacing: 1px;
font-weight: 600;
font-family: 'Arial', sans-serif;
padding-bottom: 20px;
padding-right: 12px;
padding-top: 2px;
max-height: calc(100vh - 80px); /* 减去顶部padding */
overflow-y: auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
.services-grid {
height: 260px; /* 给子元素设置固定高度以便测试滚动 */
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-sizing: border-box;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
border: 1px solid #d6d1d1;
border-radius: 10px;
align-content: flex-start;
justify-items: center;
// background-color: skyblue;
}
.card-image {
height: 165px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
border-bottom: 1px solid #d6d1d1;
}
.services-grid:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.card-content {
display: flex;
flex-direction: column;
font-size: 14px;
}
.card-title-row,
.card-footer {
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
min-height: 24px;
}
.title-name {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 8px;
}
.title-version {
flex-shrink: 0;
color: #999;
font-size: 12px;
}
.card-footer {
justify-content: space-between; /* 描述左对齐,按钮右对齐 */
margin-top: 4px;
}
.title-desc {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 8px;
}
.primary-btn {
flex-shrink: 0;
padding: 4px 12px;
background: linear-gradient(180deg, #00c7ef 0%, #005eef 100%);
color: white;
border-radius: 4px;
font-size: 12px;
cursor: pointer;
}
.primary-btn.isDisabled {
cursor: not-allowed;
opacity: 0.6;
}
}
}
.category-item {
padding: 12px 16px;
margin-bottom: 8px;
background: white;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
font-size: 14px;
color: #666;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
transition: all 0.2s ease;
}
.category-item:hover {
background-color: #f0f7ff;
color: #4a90e2;
transform: translateY(-2px);
}
.category-item.active {
background: url('../../../assets/images/publicService/btn-sel.png') no-repeat center center;
background-size: 100% 100%;
color: white;
}
.preview-docs {
width: 100%;
height: 79vh;
}
</style>

View File

@ -99,7 +99,8 @@
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="角色编号" prop="roleId" width="120" />
<!-- <el-table-column label="角色编号" prop="roleId" width="120" />-->
<el-table-column label="角色编号" align="center" type="index" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
<el-table-column label="显示顺序" prop="roleSort" width="100" />
@ -142,7 +143,7 @@
@click="handleDelete(scope.row)"
v-hasPermi="['system:role:remove']"
>删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"
@ -150,7 +151,7 @@
<el-dropdown-item command="handleAuthUser" icon="el-icon-user"
v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown>-->
</template>
</el-table-column>
</el-table>

View File

@ -1,7 +1,20 @@
<template>
<div>
<div class="head-container">
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search"
style="margin-bottom: 20px"/>
<!-- 新增展开/折叠按钮 -->
<div style="text-align: center">
<span style="color: #606266;"> 组织架构 </span>
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠
</el-button>
</div>
</div>
<div class="head-container">
@ -26,6 +39,7 @@
@click.stop="() => handleAddDept(data)"
v-hasPermi="['system:dept:add']"
title="新增子部门"
:disabled="node.level >= 3"
></el-button>
<el-button
type="text"
@ -55,38 +69,39 @@
<el-row>
<el-col :span="24" v-if="deptForm.parentId !== 0">
<el-form-item label="上级部门" prop="parentId">
<treeselect v-model="deptForm.parentId" :options="deptOptionsForDialog" :normalizer="normalizer" placeholder="选择上级部门" />
<treeselect v-model="deptForm.parentId" :options="deptOptionsForDialog" :normalizer="normalizer"
placeholder="选择上级部门"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="deptForm.deptName" placeholder="请输入部门名称" />
<el-input v-model="deptForm.deptName" placeholder="请输入部门名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="deptForm.orderNum" controls-position="right" :min="0" />
<el-input-number v-model="deptForm.orderNum" controls-position="right" :min="0"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="负责人" prop="leader">
<el-input v-model="deptForm.leader" placeholder="请输入负责人" maxlength="20" />
<el-input v-model="deptForm.leader" placeholder="请输入负责人" maxlength="20"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="deptForm.phone" placeholder="请输入联系电话" maxlength="11" />
<el-input v-model="deptForm.phone" placeholder="请输入联系电话" maxlength="11"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="deptForm.email" placeholder="请输入邮箱" maxlength="50" />
<el-input v-model="deptForm.email" placeholder="请输入邮箱" maxlength="50"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -96,7 +111,8 @@
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -111,14 +127,14 @@
</template>
<script>
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept"
import {listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild} from "@/api/system/dept"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
export default {
name: "DeptTreeWithOperations",
dicts: ['sys_normal_disable'],
components: { Treeselect },
components: {Treeselect},
props: {
deptOptions: {
type: Array,
@ -134,6 +150,7 @@ export default {
},
data() {
return {
isTreeExpanded: true, // false
deptName: undefined,
deptOpen: false, //
deptTitle: "", //
@ -142,13 +159,13 @@ export default {
//
deptRules: {
parentId: [
{ required: true, message: "上级部门不能为空", trigger: "blur" }
{required: true, message: "上级部门不能为空", trigger: "blur"}
],
deptName: [
{ required: true, message: "部门名称不能为空", trigger: "blur" }
{required: true, message: "部门名称不能为空", trigger: "blur"}
],
orderNum: [
{ required: true, message: "显示排序不能为空", trigger: "blur" }
{required: true, message: "显示排序不能为空", trigger: "blur"}
],
email: [
{
@ -215,7 +232,7 @@ export default {
listDeptExcludeChild(deptId).then(response => {
this.deptOptionsForDialog = this.handleTree(response.data, "deptId")
if (this.deptOptionsForDialog.length == 0) {
const noResultsOptions = { deptId: this.deptForm.parentId, deptName: this.deptForm.parentName, children: [] }
const noResultsOptions = {deptId: this.deptForm.parentId, deptName: this.deptForm.parentName, children: []}
this.deptOptionsForDialog.push(noResultsOptions)
}
})
@ -225,12 +242,13 @@ export default {
handleDeleteDept(data) {
const deptName = data.label
const deptId = data.id
this.$modal.confirm('是否确认删除名称为"' + deptName + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除名称为"' + deptName + '"的数据项?').then(function () {
return delDept(deptId)
}).then(() => {
this.$emit('dept-deleted')
this.$modal.msgSuccess("删除成功")
}).catch(() => {})
}).catch(() => {
})
},
/** 部门表单重置 */
resetDeptForm() {
@ -313,8 +331,36 @@ export default {
}
}
}
return tree
}
},
toggleExpandAll() {
if (this.isTreeExpanded) {
//
this.collapseAll();
this.isTreeExpanded = false;
} else {
//
this.expandAll();
this.isTreeExpanded = true;
}
},
//
expandAll() {
this.$refs.tree.store.root.childNodes.forEach(node => {
node.expanded = true;
});
},
//
collapseAll() {
this.$refs.tree.store.root.childNodes.forEach(node => {
node.expanded = false;
});
},
}
}
</script>

View File

@ -65,23 +65,28 @@
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:user:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:user:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" ></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />
<el-table-column label="编号" align="center" type="index" width="50" />
<!-- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />-->
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns.userName.visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />
<!-- <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />-->
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
<el-table-column label="职位" align="center" key="postName" prop="postName" :show-overflow-tooltip="true" />
<el-table-column label="角色" align="center" key="roleName" prop="roleName" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns.phonenumber.visible" width="120" />
<el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
<!-- <el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
@ -90,18 +95,19 @@
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
</el-table-column>-->
<el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button size="mini" type="text" icon="el-icon-key" @click="handleResetPwd(scope.row)" v-hasPermi="['system:user:resetPwd']">重置密码</el-button>
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item>
<el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" v-hasPermi="['system:user:edit']">分配角色</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown>-->
</template>
</el-table-column>
</el-table>
@ -117,76 +123,39 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-form-item label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
<el-form-item label="部门" prop="deptId">
<treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择部门" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择性别">
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择岗位">
<el-form-item label="职位" prop="postIds">
<el-select v-model="form.postIds" placeholder="请选择职位">
<el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色">
<el-form-item label="角色" prop="roleIds">
<el-select v-model="form.roleIds" placeholder="请选择角色">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
</el-row>
@ -322,27 +291,22 @@ export default {
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" },
{ min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
{ pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
],
email: [
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phonenumber: [
{ required: true, message: '手机号码不能为空', trigger: 'blur' },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
],
deptId: [
{ required: true, message: '部门不能为空', trigger: 'blur' }
],
postIds: [
{ required: true, message: '岗位不能为空', trigger: 'blur' }
],
roleIds: [
{ required: true, message: '角色不能为空', trigger: 'blur' }
]
},
}
@ -380,8 +344,9 @@ export default {
},
/** 获取角色列表 */
getRoleList() {
listRole().then(response => {
return listRole().then(response => {
this.roleOptions = response.rows
return response
})
},
@ -539,8 +504,8 @@ export default {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
this.$set(this.form, "postIds", response.postIds)
this.$set(this.form, "roleIds", response.roleIds)
this.$set(this.form, "postIds", Number(response.postIds))
this.$set(this.form, "roleIds", Number(response.roleIds))
this.open = true
this.title = "修改用户"
this.form.password = ""
@ -548,7 +513,12 @@ export default {
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
const value = 'Bonus@admin123';
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("重置成功,新密码是:" + value)
})
/*this.$prompt('"' + row.userName + '"', "", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
@ -563,7 +533,7 @@ export default {
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
}).catch(() => {})*/
},
/** 分配角色操作 */
handleAuthRole: function(row) {
@ -574,17 +544,31 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
// postIds roleIds
const originalPostIds = this.form.postIds;
const originalRoleIds = this.form.roleIds;
this.form.postIds = Array.isArray(this.form.postIds) ? this.form.postIds : [this.form.postIds];
this.form.roleIds = Array.isArray(this.form.roleIds) ? this.form.roleIds : [this.form.roleIds];
if (this.form.userId != undefined) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()
}).catch(() => {
//
this.form.postIds = originalPostIds;
this.form.roleIds = originalRoleIds;
})
} else {
addUser(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
}).catch(() => {
//
this.form.postIds = originalPostIds;
this.form.roleIds = originalRoleIds;
})
}
}
@ -593,7 +577,7 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除数据项?').then(function() {
return delUser(userIds)
}).then(() => {
this.getList()