员工管理
This commit is contained in:
parent
1d85ca4918
commit
399fe7cf34
|
@ -1,5 +1,5 @@
|
||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 盈浩-开发
|
||||||
|
|
||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 盈浩生产管理系统
|
||||||
|
|
||||||
# 生产环境配置
|
# 生产环境配置
|
||||||
ENV = 'production'
|
ENV = 'production'
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 盈浩生产管理系统
|
||||||
|
|
||||||
NODE_ENV = production
|
NODE_ENV = production
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 17 KiB |
|
@ -118,7 +118,7 @@
|
||||||
top: 0;
|
top: 0;
|
||||||
width: 51%;
|
width: 51%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: #7171C6;
|
background: #6F2023;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
-webkit-transform: translateX(0);
|
-webkit-transform: translateX(0);
|
||||||
-ms-transform: translateX(0);
|
-ms-transform: translateX(0);
|
||||||
|
|
BIN
src/assets/images/login-background.webp
Normal file
BIN
src/assets/images/login-background.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 574 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 1.5 KiB |
31
src/components/FormCol/index.vue
Normal file
31
src/components/FormCol/index.vue
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<template>
|
||||||
|
<el-col :span="span">
|
||||||
|
<el-form-item :label="label" :prop="prop" :label-width="labelWidth">
|
||||||
|
<slot></slot>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'FormCol',
|
||||||
|
props: {
|
||||||
|
span: {
|
||||||
|
type: Number,
|
||||||
|
default: 24
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
prop: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
labelWidth: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -37,6 +37,9 @@ import DictTag from '@/components/DictTag'
|
||||||
import VueMeta from 'vue-meta'
|
import VueMeta from 'vue-meta'
|
||||||
// 字典数据组件
|
// 字典数据组件
|
||||||
import DictData from '@/components/DictData'
|
import DictData from '@/components/DictData'
|
||||||
|
// 过滤器
|
||||||
|
import filter from "@/utils/filter";
|
||||||
|
filter(Vue);
|
||||||
|
|
||||||
// 全局方法挂载
|
// 全局方法挂载
|
||||||
Vue.prototype.getDicts = getDicts
|
Vue.prototype.getDicts = getDicts
|
||||||
|
|
|
@ -2,7 +2,7 @@ module.exports = {
|
||||||
/**
|
/**
|
||||||
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
||||||
*/
|
*/
|
||||||
sideTheme: 'theme-dark',
|
sideTheme: 'theme-light',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否系统布局配置
|
* 是否系统布局配置
|
||||||
|
|
|
@ -5,7 +5,7 @@ const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dyn
|
||||||
const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
|
const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
|
||||||
const state = {
|
const state = {
|
||||||
title: '',
|
title: '',
|
||||||
theme: storageSetting.theme || '#409EFF',
|
theme: storageSetting.theme || '#6F2023',
|
||||||
sideTheme: storageSetting.sideTheme || sideTheme,
|
sideTheme: storageSetting.sideTheme || sideTheme,
|
||||||
showSettings: showSettings,
|
showSettings: showSettings,
|
||||||
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
|
||||||
|
|
3
src/utils/constants.js
Normal file
3
src/utils/constants.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// 视图
|
||||||
|
export const views = {
|
||||||
|
}
|
36
src/utils/date.js
Normal file
36
src/utils/date.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/**
|
||||||
|
* 计算周年
|
||||||
|
*/
|
||||||
|
export function calcFullYear(date) {
|
||||||
|
if (date == null ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
let start = toDate(date);
|
||||||
|
let end = new Date();
|
||||||
|
|
||||||
|
return Math.floor((end.getTime() - start.getTime()) / 31536000000)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算年龄
|
||||||
|
*/
|
||||||
|
export function calcBirthDay(birthday) {
|
||||||
|
if (birthday === null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
let now = new Date();
|
||||||
|
let start = toDate(birthday);
|
||||||
|
|
||||||
|
return now.getFullYear() - start.getFullYear() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转为日期
|
||||||
|
*/
|
||||||
|
export function toDate(data) {
|
||||||
|
let date = data;
|
||||||
|
if (typeof date === 'string') {
|
||||||
|
date = new Date(data);
|
||||||
|
}
|
||||||
|
return date;
|
||||||
|
}
|
24
src/utils/filter.js
Normal file
24
src/utils/filter.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
const filters = {
|
||||||
|
// 金钱显示,保留两位小数
|
||||||
|
money(num) {
|
||||||
|
if (num == null) {
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
return num.toFixed(2);
|
||||||
|
},
|
||||||
|
// 缺省值
|
||||||
|
defaultValue(data) {
|
||||||
|
return data == null ? '--' : data;
|
||||||
|
},
|
||||||
|
fix2(num) {
|
||||||
|
return filters.money(num);
|
||||||
|
},
|
||||||
|
dv(data) {
|
||||||
|
return filters.defaultValue(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default (vm) => {
|
||||||
|
Object.keys(filters).forEach(key => {
|
||||||
|
vm.filter(key, filters[key])
|
||||||
|
})
|
||||||
|
}
|
88
src/utils/mixins.js
Normal file
88
src/utils/mixins.js
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
|
||||||
|
// 视图
|
||||||
|
import {views} from "@/utils/constants";
|
||||||
|
|
||||||
|
export const $view = {
|
||||||
|
props: {
|
||||||
|
view: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
views
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
hasView() {
|
||||||
|
return (views) => {
|
||||||
|
if (views == null || views.length === 0 || this.view == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let list = views;
|
||||||
|
if (views instanceof String) {
|
||||||
|
list = views.split(',');
|
||||||
|
}
|
||||||
|
if (!(list instanceof Array)) {
|
||||||
|
list = [list]
|
||||||
|
}
|
||||||
|
return list.includes(this.view);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
notHasView() {
|
||||||
|
return (views) => {
|
||||||
|
return !this.hasView(views);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显隐列
|
||||||
|
**/
|
||||||
|
export const $showColumns = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
columns: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
showColumns() {
|
||||||
|
if (this.columns == null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return this.columns.filter(item => item.visible);
|
||||||
|
},
|
||||||
|
isShow() {
|
||||||
|
return (key) => {
|
||||||
|
if (this.columns == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let column = this.columns.find(item => item.key === key);
|
||||||
|
return column != null && column.visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
hideColumn(columns) {
|
||||||
|
if (this.columns != null) {
|
||||||
|
this.columns.filter(item => columns.includes(item.key))
|
||||||
|
.forEach(item => {
|
||||||
|
item.visible = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
removeColumn(columns) {
|
||||||
|
if (columns != null) {
|
||||||
|
columns.forEach(column => {
|
||||||
|
let index = this.columns.findIndex(item => column === item.key);
|
||||||
|
if (index != null && index > -1) {
|
||||||
|
this.columns.splice(index, 1);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
||||||
<h3 class="title">若依后台管理系统</h3>
|
<h3 class="title">盈浩生产管理系统</h3>
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="loginForm.username"
|
v-model="loginForm.username"
|
||||||
|
@ -161,7 +161,7 @@ export default {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-image: url("../assets/images/login-background.jpg");
|
background-image: url("../assets/images/login-background.webp");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="register">
|
<div class="register">
|
||||||
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
|
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
|
||||||
<h3 class="title">若依后台管理系统</h3>
|
<h3 class="title">盈浩生产管理系统</h3>
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
|
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
|
||||||
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
||||||
|
@ -152,7 +152,7 @@ export default {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-image: url("../assets/images/login-background.jpg");
|
background-image: url("../assets/images/login-background.webp");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
|
|
|
@ -30,10 +30,10 @@
|
||||||
<!--用户数据-->
|
<!--用户数据-->
|
||||||
<el-col :span="20" :xs="24">
|
<el-col :span="20" :xs="24">
|
||||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="用户名称" prop="userName">
|
<el-form-item label="姓名" prop="nickName">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.userName"
|
v-model="queryParams.nickName"
|
||||||
placeholder="请输入用户名称"
|
placeholder="请输入姓名"
|
||||||
clearable
|
clearable
|
||||||
style="width: 240px"
|
style="width: 240px"
|
||||||
@keyup.enter.native="handleQuery"
|
@keyup.enter.native="handleQuery"
|
||||||
|
@ -91,17 +91,6 @@
|
||||||
v-hasPermi="['system:user:add']"
|
v-hasPermi="['system:user:add']"
|
||||||
>新增</el-button>
|
>新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="el-icon-edit"
|
|
||||||
size="mini"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['system:user:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
|
@ -138,33 +127,50 @@
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="50" align="center" />
|
<el-table-column type="selection" width="50" align="center" />
|
||||||
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
|
<template v-for="column of showColumns">
|
||||||
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
|
<el-table-column
|
||||||
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
|
:key="column.key"
|
||||||
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
|
:label="column.label"
|
||||||
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
|
:prop="column.key"
|
||||||
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
|
:align="column.align"
|
||||||
<template slot-scope="scope">
|
:min-width="column.minWidth"
|
||||||
<el-switch
|
:sort-orders="orderSorts"
|
||||||
v-model="scope.row.status"
|
:sortable="column.sortable"
|
||||||
active-value="0"
|
:show-overflow-tooltip="column.overflow"
|
||||||
inactive-value="1"
|
:width="column.width"
|
||||||
@change="handleStatusChange(scope.row)"
|
>
|
||||||
></el-switch>
|
<template slot-scope="d">
|
||||||
</template>
|
<template v-if="column.key === 'userId'">
|
||||||
</el-table-column>
|
{{d.row[column.key]}}
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
|
</template>
|
||||||
<template slot-scope="scope">
|
<template v-else-if="column.key === 'deptId'">
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
{{d.row.dept == null ? '' : d.row.dept.deptName}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
<template v-else-if="column.key === 'status'">
|
||||||
|
<dict-tag :value="d.row.status" :options="dict.type.sys_normal_disable"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="column.key === 'employStatus'">
|
||||||
|
<dict-tag :value="d.row.employStatus" :options="dict.type.user_employ_status"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="['birthday'].includes(column.key)">
|
||||||
|
{{calcBirthDay(d.row[column.key], new Date()) | dv}} 岁
|
||||||
|
</template>
|
||||||
|
<template v-else-if="['employDate'].includes(column.key)">
|
||||||
|
{{calcFullYear(d.row[column.key], new Date()) | dv}} 年
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{d.row[column.key] | dv}}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</template>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="操作"
|
label="操作"
|
||||||
align="center"
|
align="center"
|
||||||
width="160"
|
width="160"
|
||||||
class-name="small-padding fixed-width"
|
class-name="small-padding fixed-width"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope" v-if="scope.row.userId !== 1">
|
<template slot-scope="scope" v-if="scope.row.userId !== '1'">
|
||||||
<el-button
|
<el-button
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
|
@ -203,103 +209,79 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 添加或修改用户配置对话框 -->
|
<!-- 添加或修改用户配置对话框 -->
|
||||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<form-col :span="12" label="工号" prop="userNo">
|
||||||
<el-form-item label="用户昵称" prop="nickName">
|
<el-input v-model="form.userNo" placeholder="请输入工号" maxlength="30" />
|
||||||
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
|
</form-col>
|
||||||
</el-form-item>
|
<form-col :span="12" label="姓名" prop="nickName">
|
||||||
</el-col>
|
<el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
|
||||||
<el-col :span="12">
|
</form-col>
|
||||||
<el-form-item label="归属部门" prop="deptId">
|
<form-col :span="12" label="归属部门" prop="deptId">
|
||||||
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
|
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
|
||||||
</el-form-item>
|
</form-col>
|
||||||
</el-col>
|
<form-col :span="12" label="角色">
|
||||||
|
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in roleOptions"
|
||||||
|
:key="item.roleId"
|
||||||
|
:label="item.roleName"
|
||||||
|
:value="item.roleId"
|
||||||
|
:disabled="item.status == 1"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</form-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<form-col :span="12" v-if="form.userId == undefined" label="用户账号" prop="userName">
|
||||||
<el-form-item label="手机号码" prop="phonenumber">
|
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
||||||
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
|
</form-col>
|
||||||
</el-form-item>
|
<form-col :span="12" v-if="form.userId == undefined" label="用户密码" prop="password">
|
||||||
</el-col>
|
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
|
||||||
<el-col :span="12">
|
</form-col>
|
||||||
<el-form-item label="邮箱" prop="email">
|
<form-col :span="12" label="账号状态" prop="status">
|
||||||
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
<el-radio-group v-model="form.status">
|
||||||
</el-form-item>
|
<el-radio
|
||||||
</el-col>
|
v-for="dict in dict.type.sys_normal_disable"
|
||||||
</el-row>
|
:key="dict.value"
|
||||||
<el-row>
|
:label="dict.value"
|
||||||
<el-col :span="12">
|
>{{dict.label}}</el-radio>
|
||||||
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
|
</el-radio-group>
|
||||||
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
</form-col>
|
||||||
</el-form-item>
|
<form-col :span="12" label="在职情况" prop="employStatus">
|
||||||
</el-col>
|
<el-radio-group v-model="form.employStatus">
|
||||||
<el-col :span="12">
|
<el-radio
|
||||||
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
|
v-for="dict in dict.type.user_employ_status"
|
||||||
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
|
:key="dict.value"
|
||||||
</el-form-item>
|
:label="dict.value"
|
||||||
</el-col>
|
>{{dict.label}}</el-radio>
|
||||||
</el-row>
|
</el-radio-group>
|
||||||
<el-row>
|
</form-col>
|
||||||
<el-col :span="12">
|
<form-col :span="12" label="手机号码" prop="phonenumber">
|
||||||
<el-form-item label="用户性别">
|
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
|
||||||
<el-select v-model="form.sex" placeholder="请选择性别">
|
</form-col>
|
||||||
<el-option
|
<form-col :span="12" label="邮箱" prop="email">
|
||||||
v-for="dict in dict.type.sys_user_sex"
|
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
||||||
:key="dict.value"
|
</form-col>
|
||||||
:label="dict.label"
|
<form-col :span="12" label="出生日期" prop="birthday">
|
||||||
:value="dict.value"
|
<el-date-picker style="width: 100%" clearable v-model="form.birthday" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"/>
|
||||||
></el-option>
|
</form-col>
|
||||||
</el-select>
|
<form-col :span="12" label="入职日期" prop="birthday">
|
||||||
</el-form-item>
|
<el-date-picker style="width: 100%" clearable v-model="form.employDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"/>
|
||||||
</el-col>
|
</form-col>
|
||||||
<el-col :span="12">
|
<form-col :span="12" label="用户性别">
|
||||||
<el-form-item label="状态">
|
<el-radio-group v-model="form.sex">
|
||||||
<el-radio-group v-model="form.status">
|
<el-radio
|
||||||
<el-radio
|
v-for="dict in dict.type.sys_user_sex"
|
||||||
v-for="dict in dict.type.sys_normal_disable"
|
:key="dict.value"
|
||||||
:key="dict.value"
|
:label="dict.value"
|
||||||
:label="dict.value"
|
>{{dict.label}}</el-radio>
|
||||||
>{{dict.label}}</el-radio>
|
</el-radio-group>
|
||||||
</el-radio-group>
|
</form-col>
|
||||||
</el-form-item>
|
<form-col :span="24" label="备注">
|
||||||
</el-col>
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
||||||
</el-row>
|
</form-col>
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="岗位">
|
|
||||||
<el-select v-model="form.postIds" multiple 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-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-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
|
@ -345,13 +327,19 @@ import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUs
|
||||||
import { getToken } from "@/utils/auth";
|
import { getToken } from "@/utils/auth";
|
||||||
import Treeselect from "@riophae/vue-treeselect";
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
import FormCol from "@/components/FormCol/index.vue";
|
||||||
|
import {$showColumns} from "@/utils/mixins";
|
||||||
|
import {calcBirthDay, calcFullYear} from "@/utils/date";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "User",
|
name: "User",
|
||||||
dicts: ['sys_normal_disable', 'sys_user_sex'],
|
mixins: [$showColumns],
|
||||||
components: { Treeselect },
|
dicts: ['sys_normal_disable', 'sys_user_sex', 'user_employ_status'],
|
||||||
|
components: {FormCol, Treeselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
// 排序方式
|
||||||
|
orderSorts: ['ascending', 'descending', null],
|
||||||
// 遮罩层
|
// 遮罩层
|
||||||
loading: true,
|
loading: true,
|
||||||
// 选中数组
|
// 选中数组
|
||||||
|
@ -414,13 +402,18 @@ export default {
|
||||||
},
|
},
|
||||||
// 列信息
|
// 列信息
|
||||||
columns: [
|
columns: [
|
||||||
{ key: 0, label: `用户编号`, visible: true },
|
{key: 'userId', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
{ key: 1, label: `用户名称`, visible: true },
|
{key: 'userNo', visible: true, label: '工号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
{ key: 2, label: `用户昵称`, visible: true },
|
{key: 'nickName', visible: true, label: '姓名', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
{ key: 3, label: `部门`, visible: true },
|
{key: 'deptId', visible: true, label: '部门', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
{ key: 4, label: `手机号码`, visible: true },
|
{key: 'phonenumber', visible: false, label: '手机号码', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
{ key: 5, label: `状态`, visible: true },
|
{key: 'birthday', visible: true, label: '年龄', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||||
{ key: 6, label: `创建时间`, visible: true }
|
{key: 'employDate', visible: true, label: '工龄', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||||
|
{key: 'status', visible: true, label: '账号状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
|
{key: 'employStatus', visible: true, label: '在职情况', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
|
{key: 'remark', visible: true, label: '备注', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
|
{key: 'loginIp', visible: false, label: '最后登录IP', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
|
||||||
|
{key: 'loginDate', visible: false, label: '最后登录时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
|
||||||
],
|
],
|
||||||
// 表单校验
|
// 表单校验
|
||||||
rules: {
|
rules: {
|
||||||
|
@ -428,6 +421,9 @@ export default {
|
||||||
{ required: true, message: "用户名称不能为空", trigger: "blur" },
|
{ required: true, message: "用户名称不能为空", trigger: "blur" },
|
||||||
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
|
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
|
deptId: [
|
||||||
|
{ required: true, message: "归属部门不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
nickName: [
|
nickName: [
|
||||||
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
|
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
|
@ -467,6 +463,8 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
calcBirthDay,
|
||||||
|
calcFullYear,
|
||||||
/** 查询用户列表 */
|
/** 查询用户列表 */
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
@ -519,9 +517,12 @@ export default {
|
||||||
password: undefined,
|
password: undefined,
|
||||||
phonenumber: undefined,
|
phonenumber: undefined,
|
||||||
email: undefined,
|
email: undefined,
|
||||||
sex: undefined,
|
sex: '2',
|
||||||
status: "0",
|
status: "0",
|
||||||
|
employStatus: '1',
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
birthday: null,
|
||||||
|
employDate: new Date(),
|
||||||
postIds: [],
|
postIds: [],
|
||||||
roleIds: []
|
roleIds: []
|
||||||
};
|
};
|
||||||
|
@ -673,4 +674,4 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -7,9 +7,9 @@ function resolve(dir) {
|
||||||
|
|
||||||
const CompressionPlugin = require('compression-webpack-plugin')
|
const CompressionPlugin = require('compression-webpack-plugin')
|
||||||
|
|
||||||
const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
|
const name = process.env.VUE_APP_TITLE || '盈浩生产管理系统' // 网页标题
|
||||||
|
|
||||||
const port = process.env.port || process.env.npm_config_port || 80 // 端口
|
const port = process.env.port || process.env.npm_config_port || 3500 // 端口
|
||||||
|
|
||||||
// vue.config.js 配置说明
|
// vue.config.js 配置说明
|
||||||
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
||||||
|
@ -36,7 +36,7 @@ module.exports = {
|
||||||
proxy: {
|
proxy: {
|
||||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||||
[process.env.VUE_APP_BASE_API]: {
|
[process.env.VUE_APP_BASE_API]: {
|
||||||
target: `http://localhost:8080`,
|
target: `http://localhost:3501`,
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
pathRewrite: {
|
pathRewrite: {
|
||||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||||
|
|
Loading…
Reference in New Issue
Block a user