jinhui.wang

version:1.1.0,菜单用户角色、权限,口岸切换,样式更新,bug修复

import request from '@/utils/request'
import { praseStrEmpty } from "@/utils/FedEx";
// // 修改用户
// export function updateUser(data) {
// return request({
// url: '/system/user',
// method: 'put',
// data: data
// })
// }
// // 导出用户
// export function exportUser(query) {
// return request({
// url: '/system/user/export',
// method: 'get',
// params: query
// })
// }
// // 用户密码重置
// export function resetUserPwd(userId, password) {
// const data = {
// userId,
// password
// }
// return request({
// url: '/system/user/resetPwd',
// method: 'put',
// data: data
// })
// }
// // 用户状态修改
// export function changeUserStatus(userId, status) {
// const data = {
// userId,
// status
// }
// return request({
// url: '/system/user/changeStatus',
// method: 'put',
// data: data
// })
// }
// // 查询用户个人信息
// export function getUserProfile() {
// return request({
// url: '/system/user/profile',
// method: 'get'
// })
// }
// // 修改用户个人信息
// export function updateUserProfile(data) {
// return request({
// url: '/system/user/profile',
// method: 'put',
// data: data
// })
// }
// // 用户密码重置
// export function updateUserPwd(oldPassword, newPassword) {
// const data = {
// oldPassword,
// newPassword
// }
// return request({
// url: '/system/user/profile/updatePwd',
// method: 'put',
// params: data
// })
// }
// // 用户头像上传
// export function uploadAvatar(data) {
// return request({
// url: '/system/user/profile/avatar',
// method: 'post',
// data: data
// })
// }
// // 下载用户导入模板
// export function importTemplate() {
// return request({
// url: '/system/user/importTemplate',
// method: 'get'
// })
// }
// 查询用户列表
export function listUser(query) {
export function listUser(data) {
return request({
url: '/system/user/list',
method: 'get',
params: query
url: '/sysUser/getUserList',
method: 'post',
data: data
})
}
// 查询用户详细
export function getUser(userId) {
export function detailUser(userId) {
return request({
url: '/system/user/' + praseStrEmpty(userId),
url: '/sysUser/detailUser?id=' + praseStrEmpty(userId),
method: 'get'
})
}
// 新增用户
export function addUser(data) {
export function addOrUpdateUser(data) {
return request({
url: '/system/user',
url: '/sysUser/addOrUpdateUser',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
// 修改用户状态
export function updateUserStatus(data) {
return request({
url: '/system/user',
method: 'put',
url: '/sysUser/updateUserStatus',
method: 'post',
data: data
})
}
// 删除用户
export function delUser(userId) {
//菜单信息
export function getAllAuth() {
return request({
url: '/system/user/' + userId,
method: 'delete'
url: '/sysMenu/getAllAuth',
method: 'get'
})
}
// 导出用户
export function exportUser(query) {
//菜单开启关闭
export function updateStatus(data) {
return request({
url: '/system/user/export',
method: 'get',
params: query
url: '/sysMenu/updateStatus',
method: 'post',
data: data
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
//角色列表
export function getRoleList(data) {
return request({
url: '/system/user/resetPwd',
method: 'put',
url: '/role/getRoleList',
method: 'post',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
//角色详情
export function detailRole(id) {
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
url: '/role/detailRole?id=' + id,
method: 'get',
})
}
// 查询用户个人信息
export function getUserProfile() {
//新增修改角色
export function addOrUpdateRole(data) {
return request({
url: '/system/user/profile',
method: 'get'
url: '/role/addOrUpdateRole',
method: 'post',
data: data
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
//角色状态修改
export function updateRoleStatus(data) {
return request({
url: '/system/user/profile',
method: 'put',
url: '/role/updateRoleStatus',
method: 'post',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
//口岸列表
export function portNameList() {
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
params: data
url: '/dictionary/port',
method: 'get',
})
}
// 用户头像上传
export function uploadAvatar(data) {
//口岸变更
export function changeCurrentPort(data) {
return request({
url: '/system/user/profile/avatar',
url: '/sysUser/changeCurrentPort',
method: 'post',
data: data
})
}
\ No newline at end of file
// 下载用户导入模板
export function importTemplate() {
return request({
url: '/system/user/importTemplate',
method: 'get'
})
}
......
let ductLabels = {
"cargoRulesStatus":{
"1":"手动",
"2":"自动"
"cargoRulesStatus": {
"1": "手动",
"2": "自动"
},
"menuType": {
"M": "菜单",
"C": "菜单",
"B": "按钮"
},
"status": {
"1": "启用",
"2": "停用",
},
"valid": {
"1": "开启",
"2": "关闭",
},
"isValid": {
"1": "开启",
"2": "关闭",
},
"ticketToPiece": {
"1": "是",
"0": "否",
},
"needRequired": {
"1": "是",
"0": "否",
},
"highLowPriceFlg": {
"1": "开启",
"0": "未开启",
}
}
export default ductLabels;
\ No newline at end of file
......
This diff is collapsed. Click to expand it.
<template>
<div class="tableInfo">
<el-dropdown trigger="click" :hide-on-click="false">
<el-button
type="primary"
icon="el-icon-edit"
size="medium"
circle
></el-button>
<el-dropdown-menu slot="dropdown">
<el-checkbox-group v-model="checkList">
<el-dropdown-item
v-for="(item, index) in infoData"
:key="index"
v-if="!item.type"
class="dropItem"
>
<el-checkbox
:label="item.name"
:checked="true"
@change="checkChange"
></el-checkbox>
<span class="itemRight">
<i class="el-icon-caret-top" @click.stop="top(index)"></i>
<i class="el-icon-caret-bottom" @click.stop="bottom(index)"></i>
</span>
</el-dropdown-item>
</el-checkbox-group>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
<script>
export default {
props: { infoData: { type: Array, default: null } },
inheritAttrs: false,
data() {
return {
checkList: [],
};
},
methods: {
checkChange(val) {
this.$emit("checkChange", { type: val });
},
top(val) {
this.$emit("top", val);
},
bottom(val) {
this.$emit("bottom", val);
},
},
created() {},
};
</script>
<style scope lang="scss">
.itemRight {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 34px;
width: 24px;
vertical-align: middle;
cursor: pointer;
overflow: initial;
position: relative;
.el-icon-caret-bottom,
.el-icon-caret-top {
width: 0;
height: 0;
border: solid 5px transparent;
position: absolute;
left: 10px;
}
.el-icon-caret-bottom {
bottom: 12px;
}
.el-icon-caret-top {
top: 5px;
}
}
.dropItem {
display: flex;
justify-content: space-between;
}
</style>
<style>
.tableInfo {
position: fixed;
right: 30px;
bottom: 40px;
z-index: 99999999;
}
</style>
\ No newline at end of file
<script>
export default {
name: "Item",
inheritAttrs: false,
props: {
dom: {
type: Object,
default: null,
},
},
render() {
let newDom = [];
newDom.push(this.dom);
return newDom;
},
methods: {
change(val){
this.$emit('change',val)
}
},
};
</script>
......@@ -3,9 +3,9 @@
* Copyright (c) 2019 FedEx
*/
import store from '@/store'
import store from '@/store'
export default {
export default {
inserted(el, binding, vnode) {
const { value } = binding
const all_permission = "*:*:*";
......@@ -24,5 +24,23 @@ export default {
} else {
throw new Error(`请设置操作权限标签值`)
}
},
//路由权限处理
routerPer(router){
const permissions = store.getters && store.getters.permissions
let newRouter = [];
router.forEach(item => {
permissions.forEach(per=>{
if(item.meta.permissions == per){
newRouter.push(item)
}
})
if(item.children && item.children.length){
item.children = this.routerPer(item.children)
}
}
});
return newRouter
}
}
\ No newline at end of file
......
<template>
<div class="navbar">
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
<hamburger
id="hamburger-container"
:is-active="sidebar.opened"
class="hamburger-container"
@toggleClick="toggleSideBar"
/>
<breadcrumb
id="breadcrumb-container"
class="breadcrumb-container"
v-if="!topNav"
/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
<div class="right-menu">
<template v-if="device!=='mobile'">
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img :src="avatar" class="user-avatar">
<template v-if="device !== 'mobile'"> </template>
<el-select
v-model="portName"
size="mini"
style="width: 120px; top: -17px; right: 7px"
placeholder="选择口岸"
>
<el-option
v-for="item in portNameList"
:label="item"
:value="item"
:key="item"
>
</el-option>
</el-select>
<el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
>
<div class="userName-wrapper">
<!-- <img :src="avatar" class="user-avatar" /> -->
<span><i class="el-icon-user-solid" style="color:#1890ff"></i>欢迎!{{userName}}</span>
</div>
<el-dropdown-menu slot="dropdown">
<router-link to="/user/profile">
</router-link>
<el-dropdown-item @click.native="logout">
<span>退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!-- <el-select
v-model="locale"
size="mini"
@change="local"
style="width: 75px; top: -17px; right: 7px"
>
<el-option label="中文" value="zh"> </el-option>
<el-option label="英文" value="en"> </el-option>
</el-select> -->
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import TopNav from "@/components/TopNav";
import Hamburger from "@/components/Hamburger";
export default {
components: {
Breadcrumb,
TopNav,
Hamburger
Hamburger,
},
data() {
return {
userName:"",
portNameList: [],
locale: "zh",
};
},
created() {
this.portNameList = this.$store.state.user.portNames;
this.userName = this.$store.state.user.name;
},
computed: {
...mapGetters([
'sidebar',
'avatar',
'device'
]),
...mapGetters(["sidebar", "avatar", "device"]),
setting: {
get() {
return this.$store.state.settings.showSettings
return this.$store.state.settings.showSettings;
},
set(val) {
this.$store.dispatch('settings/changeSetting', {
key: 'showSettings',
value: val
})
}
this.$store.dispatch("settings/changeSetting", {
key: "showSettings",
value: val,
});
},
},
topNav: {
get() {
return this.$store.state.settings.topNav
}
return this.$store.state.settings.topNav;
},
},
//切换口岸
portName: {
get() {
return this.$store.state.user.activePortName;
},
set(val) {
this.$store
.dispatch("changePort", val)
.then((res) => {
if (res.code === 200) {
this.$store.dispatch('tagsView/delAllCachedViews')
this.$store.dispatch('tagsView/delAllVisitedViews')
// location.reload();
if(this.$route.path != '/index'){
this.$router.push('/index')
}
} else {
this.$confirm(res.msg, "提示", {
type: "warning",
}).then(()=>{
// location.reload();
if(this.$route.path != '/index'){
this.$router.push('/index')
}
}).catch(()=>{
// location.reload();
if(this.$route.path != '/index'){
this.$router.push('/index')
}
});
}
})
.catch((err) => {
console.log(err);
});
},
},
},
methods: {
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
this.$store.dispatch("app/toggleSideBar");
},
async logout() {
this.$confirm('确定注销并退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
this.$confirm("确定注销并退出系统吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
location.href = '/index';
})
})
}
}
}
this.$store.dispatch("LogOut").then(() => {
location.href = "/index";
// window.location.href = "https://test.secure.fedex.com/logout";//wsso系统跳转
});
});
},
local(val) {
this.$i18n.locale = val; //此处val为 zh 或者 en
},
},
};
</script>
<style lang="scss" scoped>
......@@ -86,18 +164,18 @@ export default {
overflow: hidden;
position: relative;
background: #fff;
box-shadow: 0 1px 4px rgba(0,21,41,.08);
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
.hamburger-container {
line-height: 46px;
height: 100%;
float: left;
cursor: pointer;
transition: background .3s;
-webkit-tap-highlight-color:transparent;
transition: background 0.3s;
-webkit-tap-highlight-color: transparent;
&:hover {
background: rgba(0, 0, 0, .025)
background: rgba(0, 0, 0, 0.025);
}
}
......@@ -134,21 +212,28 @@ export default {
&.hover-effect {
cursor: pointer;
transition: background .3s;
transition: background 0.3s;
&:hover {
background: rgba(0, 0, 0, .025)
background: rgba(0, 0, 0, 0.025);
}
}
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
text-align: center;
margin-right: 15px;
font-weight: 700;
i{
display: inline-block;
height: 50px;
margin-right:5px;
font-size: 24px;
line-height: 50px;
}
.userName-wrapper {
position: relative;
font-size:14px;
.user-avatar {
cursor: pointer;
width: 40px;
......
......@@ -42,5 +42,5 @@ module.exports = {
/**
* 版本号
*/
version:'version:1.0.5'
version:'version:1.1.0'
}
......
......@@ -7,12 +7,15 @@ const getters = {
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
activePortName: state => state.user.activePortName,
portName: state => state.user.portName,
introduction: state => state.user.introduction,
roles: state => state.user.roles,
permissions: state => state.user.permissions,
permission_routes: state => state.permission.routes,
topbarRouters:state => state.permission.topbarRouters,
defaultRoutes:state => state.permission.defaultRoutes,
sidebarRouters:state => state.permission.sidebarRouters,
topbarRouters: state => state.permission.topbarRouters,
defaultRoutes: state => state.permission.defaultRoutes,
sidebarRouters: state => state.permission.sidebarRouters,
filghtAllData: state => state.permission.filghtAllData,
}
export default getters
......
......@@ -2,14 +2,15 @@ import { constantRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView';
import hasPermi from '../../directive/permission/hasPermi';
const permission = {
state: {
routes: [],
addRoutes: [],
defaultRoutes: [],
topbarRouters: [],
sidebarRouters: []
sidebarRouters: [],
filghtAllData: {}
},
mutations: {
SET_ROUTES: (state, routes) => {
......@@ -23,13 +24,20 @@ const permission = {
// 顶部导航菜单默认添加统计报表栏指向首页
const index = [{
path: 'index',
meta: { title: '统计报表', icon: 'dashboard'}
meta: { title: '首页', icon: 'home' }
}]
state.topbarRouters = routes.concat(index);
},
SET_SIDEBAR_ROUTERS: (state, routes) => {
state.sidebarRouters = routes
},
SET_FILGHTALL: (state, data) => {
let name = data.name;
state.filghtAllData[name] = data.data;
},
REMOVE_FILGHTALL: (state, name) => {
delete state.filghtAllData[name]
}
},
actions: {
// 生成路由
......@@ -37,6 +45,7 @@ const permission = {
return new Promise(resolve => {
// 向后端请求路由数据
getRouters().then(res => {
res.data = hasPermi.routerPer(res.data);
const sdata = JSON.parse(JSON.stringify(res.data))
const rdata = JSON.parse(JSON.stringify(res.data))
const sidebarRoutes = filterAsyncRouter(sdata)
......
import { login, logout, getInfo } from '@/api/login'
import { changeCurrentPort } from "@/api/system/user.js";
import { getToken, setToken, removeToken } from '@/utils/auth'
import { Message } from 'element-ui'
const user = {
state: {
token: getToken(),
name: '',
avatar: '',
activePortName: '',
portNames:[],
roles: [],
permissions: []
},
......@@ -20,6 +24,13 @@ const user = {
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_ACTIVEPORTNAME: (state, activePortName) => {
state.activePortName = activePortName
sessionStorage.setItem('portName', activePortName)
},
SET_PORTNAMES:(state,portNames)=>{
state.portNames = portNames
},
SET_ROLES: (state, roles) => {
state.roles = roles
},
......@@ -29,6 +40,7 @@ const user = {
},
actions: {
// 登录
Login({ commit }, userInfo) {
const username = userInfo.username.trim()
......@@ -36,10 +48,12 @@ const user = {
const rememberMe = userInfo.rememberMe
return new Promise((resolve, reject) => {
login(username, password,rememberMe).then(res => {
login(username, password, rememberMe).then(res => {
if(res.code === 200){
setToken(res.data)
commit('SET_TOKEN', res.data)
resolve()
}
resolve(res)
}).catch(error => {
reject(error)
})
......@@ -52,6 +66,20 @@ const user = {
getInfo().then(res => {
const user = res.data.user
const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar;
let ports = [];
if(user.portName){
ports = user.portName.split(',');
commit('SET_PORTNAMES',ports)
commit('SET_ACTIVEPORTNAME', sessionStorage.getItem('portName')?sessionStorage.getItem('portName'):state.portNames[0])
}else{
Message({
message: "未找到口岸信息!请确认后再登录",
type: 'error'
})
this.LogOut().then(()=>{
window.location.href = "https://testsso.ute.apac.fedex.com/logout";//wsso系统跳转
})
}
if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.data.roles)
commit('SET_PERMISSIONS', res.data.permissions)
......@@ -67,11 +95,25 @@ const user = {
})
},
//切换口岸
changePort({ commit }, portName) {
return new Promise((resolve, reject) => {
changeCurrentPort({ portName: portName }).then(res=>{
if(res.code === 200){
commit('SET_ACTIVEPORTNAME',portName)
}
resolve(res)
}).catch(err=>{
reject(err)
})
})
},
// 退出系统
LogOut({ commit, state }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
// window.location.href = "https://sso.secure.fedex.com/logout";//wsso系统跳转
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
......@@ -86,6 +128,7 @@ const user = {
// 前端 登出
FedLogOut({ commit }) {
return new Promise(resolve => {
// window.location.href = "https://sso.secure.fedex.com/logout";//wsso系统跳转
commit('SET_TOKEN', '')
removeToken()
resolve()
......
......@@ -3,11 +3,11 @@
* Copyright (c) 2019 FedEx
*/
const baseURL = process.env.VUE_APP_BASE_API
const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化
export function parseTime(time, pattern) {
debugger
// 日期格式化
export function parseTime(time, pattern) {
//debugger
if (arguments.length === 0 || !time) {
return null
}
......@@ -45,17 +45,17 @@ export function parseTime(time, pattern) {
return value || 0
})
return time_str
}
}
// 表单重置
export function resetForm(refName) {
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
var search = params;
search.params = {};
if (null != dateRange && '' != dateRange) {
......@@ -68,10 +68,10 @@ export function addDateRange(params, dateRange, propName) {
}
}
return search;
}
}
// 回显数据字典
export function selectDictLabel(datas, value) {
// 回显数据字典
export function selectDictLabel(datas, value) {
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + value)) {
......@@ -80,10 +80,10 @@ export function selectDictLabel(datas, value) {
}
})
return actions.join('');
}
}
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
......@@ -95,15 +95,15 @@ export function selectDictLabels(datas, value, separator) {
})
})
return actions.join('').substring(0, actions.join('').length - 1);
}
}
// 通用下载方法
export function download(fileName) {
// 通用下载方法
export function download(fileName) {
window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}
}
// 字符串格式化(%s )
export function sprintf(str) {
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
......@@ -114,24 +114,24 @@ export function sprintf(str) {
return arg;
});
return flag ? str : '';
}
}
// 转换字符串,undefined,null等转化为""
export function praseStrEmpty(str) {
// 转换字符串,undefined,null等转化为""
export function praseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
return "";
}
return str;
}
}
/**
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
......@@ -173,10 +173,10 @@ export function handleTree(data, id, parentId, children) {
}
}
return tree;
}
}
//字符串英文转大写,;转英文;
export function upCase(str){
let newStr = str.replace(/;/g,";").toUpperCase().trim();
//字符串英文转大写,;转英文;
export function upCase(str){
let newStr = str.replace(/;/g,";").toUpperCase();
return newStr;
}
\ No newline at end of file
}
\ No newline at end of file
......
......@@ -17,5 +17,6 @@ export function setToken(token) {
export function removeToken() {
//return Cookies.remove(TokenKey)
// return localStorage.removeItem(TokenKey)
sessionStorage.removeItem('portName')
return sessionStorage.removeItem(TokenKey)
}
......
......@@ -199,6 +199,7 @@
<el-col :span="6">
<el-form-item label="取件日期">
<el-date-picker
class="formItem"
v-model="formData.pickUpDate"
type="date"
placeholder="选择日期"
......@@ -208,16 +209,6 @@
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="口岸代码">
<el-input
v-model="portName"
placeholder="请输入口岸代码"
class="formItem"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="Handling Code">
<el-empty
......@@ -267,6 +258,7 @@
<el-button
:type="downLoadingTip.downloading ? 'warning' : 'primary'"
size="mini"
v-hasPermi="['allocation:cargo:export']"
@click="xlsx(0)"
:loading="downLoadingTip.downloading"
:disabled="tableData.length <= 0"
......@@ -277,6 +269,7 @@
<el-button
:type="downLoadingTip.downloading ? 'warning' : 'primary'"
size="mini"
v-hasPermi="['allocation:cargo:export']"
@click="xlsx(1)"
:loading="downLoadingTip.downloading"
:disabled="tableData.length <= 0"
......@@ -287,8 +280,9 @@
<el-button
type="primary"
size="mini"
v-hasPermi="['allocation:cargo:allocation']"
@click="addFit"
:disabled="tableSelection.length <= 0"
:disabled="tableSelection.length <= 0 || formData.accsPool!='OSPR'"
>添加到航班</el-button
>
<div class="tips">
......@@ -307,7 +301,8 @@
:limitStart="formData.limitStart"
:page="page"
:shiftKey="shiftKey"
height="350"
:infoShow="false"
:height="tableHeight"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
@currentChange="currentChange"
......@@ -817,6 +812,7 @@ export default {
size: 100,
allWeight: 0,
allQty: 0,
tableHeight:null,
dialogVisible: false,
shiftKey: false,
createDate: null,
......@@ -829,9 +825,13 @@ export default {
},
created() {
this.seleData();
if(this.$store.state.tagsView.cachedViews.length == 0){
this.select();
}
},
activated(){
this.select();
},
mounted() {
window.addEventListener("keydown", (code) => {
if (code.keyCode === 16 && code.shiftKey) {
......@@ -843,6 +843,7 @@ export default {
this.shiftKey = false;
}
});
this.tableHeight = window.innerHeight - this.$refs.form.$el.offsetHeight-60
},
methods: {
//查询条件
......@@ -889,9 +890,9 @@ export default {
this.tableData = res.data.list;
this.totalCount = res.data.total;
if (res.data.list.length > 0) {
this.tableData.forEach((item, index = 0) => {
item.index = index;
});
// this.tableData.forEach((item, index = 0) => {
// item.index = index;
// });
} else {
this.$message({
message: "未查询到数据",
......@@ -1026,14 +1027,20 @@ export default {
}
});
data = data.sort(this.$refs.newTables.compare(val.prop, val.order));
if (val.order != "ascending") {
if (val.order == "descending") {
this.tableData = nullData.concat(data);
} else {
} else{
this.tableData = data.concat(nullData);
}
this.tableData.forEach((item, index = 0) => {
item.index = index;
});
this.tableSelection = []
this.cargoTotal()
// this.tableData.forEach((item, index = 0) => {
// item.index = index;
// });
},
sizeChange(val){
this.size = val
this.select(0);
},
//添加到航班
addFit() {
......@@ -1084,6 +1091,9 @@ export default {
},
},
},
deactivated(){
this.tableData = []
},
};
</script>
......
......@@ -28,6 +28,7 @@
:label="item.name"
:key="index"
:show-overflow-tooltip="true"
:formatter="formatter"
>
</el-table-column>
</el-table>
......@@ -119,7 +120,7 @@ export default {
},
],
},
loading:false
loading:false,
};
},
methods: {
......@@ -133,7 +134,7 @@ export default {
},
//确定配舱
submit() {
this.loading = true;
this.loading= true;
let arr = [];
this.tableData.forEach((item) => {
arr.push(item.id);
......@@ -141,6 +142,7 @@ export default {
this.formData.ids = arr;
if (this.formData.fltNo && this.formData.fltDate) {
allocationFlight(this.formData).then((res) => {
this.loading = false;
//code 200 配舱成功 202 重量已满需要确认 其余code直接输出msg
if (res.code === 200) {
this.$message({
......@@ -148,7 +150,6 @@ export default {
type: "success",
});
this.cleaerForm();
this.loading = false;
this.$emit("dialogBeforeClose", { close: false, reload: true });
} else if (res.code === 202) {
MessageBox.confirm(res.msg, "提示", {
......@@ -210,6 +211,16 @@ export default {
this.cleaerForm();
this.$emit("dialogBeforeClose", { close: false, reload: true });
},
formatter(row, column, cellValue, index){
if(column.property == "cargoRulesStatus"){
if(cellValue == 1){
return "手动"
}else{
return "自动"
}
}
return cellValue
}
},
computed: {
fltNo: {
......
......@@ -37,6 +37,7 @@
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['allocation:alloc:add']"
@click="
$router.push({
name: 'FlightAllocConfigAdd',
......@@ -90,6 +91,7 @@
type="text"
size="mini"
icon="el-icon-edit"
v-hasPermi="['allocation:alloc:update']"
@click="handleClick(scope.row.id, 'update')"
>修改</el-button
>
......@@ -97,6 +99,7 @@
type="text"
size="mini"
icon="el-icon-delete"
v-hasPermi="['allocation:alloc:delete']"
@click="del(scope.row.id, scope.row.status)"
>删除</el-button
>
......@@ -104,6 +107,7 @@
type="text"
size="mini"
icon="el-icon-video-pause"
v-hasPermi="['allocation:alloc:openClose']"
@click="changeStatus(scope.row.id, 3)"
v-if="scope.row.status == '1'"
>停用</el-button
......@@ -112,6 +116,7 @@
type="text"
size="mini"
icon="el-icon-video-play"
v-hasPermi="['allocation:alloc:openClose']"
@click="changeStatus(scope.row.id, 1)"
v-else
>启用</el-button
......@@ -159,9 +164,17 @@ export default {
loading: false,
};
},
created() {
if(this.$store.state.tagsView.cachedViews.length == 0){
this.getList();
}
},
activated(){
this.getList()
},
deactivated(){
this.flyList = []
},
methods: {
getList() {
this.queryParams.limit = this.limit;
......@@ -240,9 +253,6 @@ export default {
});
},
},
created() {
this.getList();
},
computed: {
purposeOfFlightNo: {
get: function () {
......
<template>
<div>
<el-form :model="queryParams" ref="queryForm" :inline="true">
<el-form-item label="ACCS原航班">
<el-form
class="form-header"
:model="queryParams"
ref="queryForm"
size="medium"
:inline="true"
label-position="right"
label-width="auto"
>
<el-form-item label="原航班">
<el-input
type="text"
v-model="upCase"
placeholder="请输入ACCS原航班"
placeholder="请输入原航班"
clearable
class="formItem"
></el-input>
<!-- <el-input v-model="upCase" placeholder="请输入原航班" clearable size="small" /> -->
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择"
clearable
size="small"
>
<el-select v-model="queryParams.status" placeholder="请选择" clearable>
<el-option
v-for="dict in statusList"
:key="dict.id"
......@@ -33,7 +35,7 @@
icon="el-icon-search"
size="mini"
@click="handleQuery"
>查询ACCS原航班配置</el-button
>查询原航班配置</el-button
>
</el-form-item>
<br />
......@@ -43,7 +45,6 @@
v-model="queryParams.flightDate"
type="date"
placeholder="选择日期"
clearable
>
</el-date-picker>
</el-form-item>
......@@ -56,22 +57,18 @@
@click="findSourceFlightAndFlightDate"
>查询实际配载航班 </el-button
>&#12288;
<span style="color: #ff4949"
>注:ACCS原航班+日期查询该日期的航班实际情况</span
>
<span style="color:#ff4949">注:原航班+日期查询该日期的航班实际情况</span>
</el-form-item>
<br />
<el-form-item>
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['allocation:rand:add']"
@click="handleAdd"
>添加规则</el-button
>
</el-col>
&#12288;
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
......@@ -90,18 +87,13 @@
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column
label="ACCS原航班"
align="center"
prop="sourceFlightNo"
/>
<el-table-column label="原航班" align="center" prop="sourceFlightNo" />
<el-table-column
label="配载航班排序"
align="center"
prop="flightRank"
width="280"
/>
<!-- <el-table-column label="优先级" align="center" prop="priority" /> -->
<el-table-column
label="周期"
align="center"
......@@ -150,6 +142,7 @@
size="mini"
type="text"
icon="el-icon-edit"
v-hasPermi="['allocation:rand:update']"
@click="handleUpdate(scope.row)"
>修改</el-button
>
......@@ -157,6 +150,7 @@
size="mini"
type="text"
icon="el-icon-delete"
v-hasPermi="['allocation:rand:delete']"
@click="handleDeleteorPlayorpause(scope.row, 0, '删除')"
>
删除</el-button
......@@ -166,6 +160,7 @@
type="text"
icon="el-icon-video-play"
v-if="scope.row.status == '3'"
v-hasPermi="['allocation:rand:openClose']"
@click="handleDeleteorPlayorpause(scope.row, 1, '启用')"
>启用</el-button
>
......@@ -174,6 +169,7 @@
type="text"
icon="el-icon-video-pause"
v-if="scope.row.status != '3'"
v-hasPermi="['allocation:rand:openClose']"
@click="handleDeleteorPlayorpause(scope.row, 3, '停用')"
>停用</el-button
>
......@@ -202,11 +198,7 @@
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column
label="ACCS原航班"
align="center"
prop="sourceFlightNo"
/>
<el-table-column label="原航班" align="center" prop="sourceFlightNo" />
<el-table-column
label="实际配载航班"
align="center"
......@@ -244,17 +236,42 @@
:append-to-body="true"
:close-on-click-modal="false"
>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form
ref="form"
:model="form"
:rules="rules"
label-position="right"
label-width="auto"
>
<el-row>
<el-col :span="10">
<el-form-item label="ACCS原航班" prop="sourceFlightNo">
<el-col :span="8">
<el-form-item label="原航班" prop="sourceFlightNo">
<el-input
v-model="form.sourceFlightNo"
placeholder="请输入ACCS原航班号"
placeholder="请输入原航班号"
maxlength="10"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="口岸" prop="portName">
<el-select
:disabled="true"
v-model="form.portName"
size="mini"
placeholder="选择口岸"
>
<el-option
v-for="item in portNameList"
:label="item"
:value="item"
:key="item"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
......@@ -287,10 +304,10 @@
</el-col>
<el-col :span="24" style="margin-bottom: 5%">
<span style="color:#ff4949; margin-left: 10%"
<span style="color: #ff4949; margin-left: 10%"
>提示:配载航班之间请用分号分隔【符号不区分中英文】,例:CA1053;C7433</span
><br />
<span style="color:#ff4949; margin-left: 10%"
<span style="color: #ff4949; margin-left: 10%"
>提示:如果需要设置配载航班延迟或提前可以直接在目的航斑后加减【+-】天数。如:CA1053+1;CZ433-1</span
>
</el-col>
......@@ -335,6 +352,7 @@ export default {
name: "FlightRandConfig",
data() {
return {
portNameList: [],
// data 中设定
pickerOptionsStart: {
disabledDate: (time) => {
......@@ -359,7 +377,6 @@ export default {
}
},
},
//周期段
dayOfWeekList: ["D1", "D2", "D3", "D4", "D5", "D6", "D7"],
// 遮罩层
......@@ -390,6 +407,7 @@ export default {
openFlightDate: false,
// 查询参数
queryParams: {
portName: undefined,
start: 0, //当前条数【代表第几条数据 +1开始】
pageNum: 1,
limit: 20, //一页显示多少条数据
......@@ -422,8 +440,26 @@ export default {
};
},
created() {
this.queryParams.portName = this.$store.state.user.activePortName;
this.portNameList = this.$store.state.user.portNames;
if(this.$store.state.tagsView.cachedViews.length == 0){
this.findSourceFlightRules();
}
},
activated(){
this.findSourceFlightRules();
},
deactivated(){
this.sourceFlightRulesList = []
},
watch:{
open(val,oldVal){
if(val){
this.queryParams.portName = this.$store.state.user.activePortName;
this.form.portName = this.$store.state.user.activePortName;
}
}
},
methods: {
//跳转到查看,修改页面
handleClick(flightiId, handle) {
......@@ -459,16 +495,17 @@ export default {
handleAdd() {
this.form = {};
this.open = true;
this.title = "添加ACCS原航班顺位规则";
this.title = "添加原航班顺位规则";
this.form.id = -1;
this.dayOfWeek = [];
this.form.portName = this.$store.state.user.activePortName;
},
/** 修改按钮操作 */
handleUpdate(row) {
this.form = {};
this.dayOfWeek = [];
this.open = true;
this.title = "修改ACCS原航班顺位规则";
this.title = "修改原航班顺位规则";
this.form = JSON.parse(JSON.stringify(row));
this.dayOfWeek = this.form.dayOfWeek
? this.form.dayOfWeek.split(";")
......@@ -490,12 +527,15 @@ export default {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
})
.then(() => {
let disable = {
id: row.id,
status: status,
};
delOrEnableORDisableApi(disable)
return delOrEnableORDisableApi(disable);
})
.then((response) => {
if (response.code == 200) {
this.findSourceFlightRules();
......@@ -505,7 +545,6 @@ export default {
}
})
.catch(() => {});
});
},
/** 提交按钮 */
submitForm: function () {
......
......@@ -108,6 +108,7 @@
:loading="downLoadingTip.downloading"
icon="el-icon-download"
size="mini"
v-hasPermi="['base:caExport:export']"
>{{
downLoadingTip.downloading ? downLoadingTip.tip : "导出"
}}</el-button
......@@ -178,7 +179,7 @@
<script>
import { findCagroPreData } from "@/api/cargoSelect";
import { cargoXlsxPre } from "@/utils/zipdownload";
import { downLoadXlsx } from "@/utils/zipdownload";
export default {
name: "CAPreQualificationExport",
data() {
......@@ -232,7 +233,7 @@ export default {
);
cargoXlse.cargoExportPreQueryDto.limitStart = 0;
cargoXlse.cargoExportPreQueryDto.limitSize = -1;
cargoXlsxPre("/cargo/excelPre", cargoXlse)
downLoadXlsx("/cargo/excelPre", cargoXlse,'航班预审表')
.then(() => {
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = "";
......
......@@ -4,12 +4,12 @@
<el-form-item>
<el-upload action="/caPreReviewImport/importFlight" name="file" :http-request="uploadExcel"
:on-remove="handleRemove" :limit="1" :on-exceed="handleExceed" :file-list="fileList" accept=".xlsx"
class="upload-demo">
class="upload-demo" v-hasPermi="['base:caImport:import']">
<el-button type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="downloadTempleate">下载模板</el-button>
<el-button type="primary" @click="downloadTempleate" v-hasPermi="['base:caImport:download']">下载模板</el-button>
</el-form-item>
</el-form>
<div style="font-size: 12px; font-weight: 700">
......
......@@ -23,12 +23,13 @@
:file-list="fileList"
accept=".xlsx"
class="upload-demo"
v-hasPermi="['base:flightImport:importFlight']"
>
<el-button type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="downloadTempleate"
<el-button type="primary" @click="downloadTempleate" v-hasPermi="['base:flightImport:exportExcel']"
>下载模板</el-button
>
</el-form-item>
......
......@@ -19,14 +19,13 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:value-format="valueFormat"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="配载航班号">
<el-input type="textarea" v-model="cargoPlaneNo" class="formItem" placeholder="AC001;AC002" :autosize="true" clearable></el-input>
<el-input type="textarea" v-model="cargoPlaneNo" class="formItem" placeholder="AC001;AC002" :autosize="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
......@@ -56,7 +55,6 @@
class="formItem"
placeholder="请输入运单号(回车间隔)"
:autosize="true"
clearable
></el-input>
</el-form-item>
</el-col>
......@@ -105,7 +103,6 @@
class="formItem"
placeholder="S_;P_;E2"
:autosize="true"
clearable
></el-input>
</el-form-item>
</el-col>
......@@ -117,7 +114,6 @@
class="formItem"
placeholder="PVG;PEK"
:autosize="true"
clearable
></el-input>
</el-form-item>
</el-col>
......@@ -133,25 +129,22 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:value-format="valueFormat"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="ACCS原航班号">
<el-input type="text" v-model="fltNo" class="formItem" placeholder="请输入ACCS航班号" clearable></el-input>
<el-input type="text" v-model="fltNo" class="formItem" placeholder="请输入ACCS航班号"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="取件日期">
<el-date-picker
class="formItem"
v-model="formData.pickUpDate"
type="date"
placeholder="选择日期"
:value-format="valueFormat"
clearable
>
</el-date-picker>
</el-form-item>
......@@ -166,7 +159,6 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:value-format="valueFormat"
clearable
>
</el-date-picker>
</el-form-item>
......@@ -223,10 +215,10 @@
@click="select(0)"
>查询</el-button
>
<el-button :type="downLoadingTip.downloading?'warning':'primary'" size="small" @click="xlse(0)" :disabled="tableData.length==0" :loading="downLoadingTip.downloading"
<el-button :type="downLoadingTip.downloading?'warning':'primary'" size="small" @click="xlse(0)" :disabled="tableData.length==0" :loading="downLoadingTip.downloading" v-hasPermi="['base:cargo:export']"
>{{downLoadingTip.downloading?downLoadingTip.tip:"导出本页查询结果"}}</el-button
>
<el-button :type="downLoadingTip.downloading?'warning':'primary'" size="small" @click="xlse(1)" :disabled="tableData.length==0" :loading="downLoadingTip.downloading"
<el-button :type="downLoadingTip.downloading?'warning':'primary'" size="small" @click="xlse(1)" :disabled="tableData.length==0" :loading="downLoadingTip.downloading" v-hasPermi="['base:cargo:export']"
>{{downLoadingTip.downloading?downLoadingTip.tip:"导出全部查询结果"}}</el-button
>
<span style="marginLeft:20px;color:#ffba00">全部导出上限80000条数据</span>
......@@ -248,7 +240,7 @@
:limitStart="limitStart"
:page="page"
:shiftKey="shiftKey"
height="550"
:height="tableHeight"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
@currentChange="currentChange"
......@@ -319,7 +311,7 @@ export default {
type: "",
name: "口岸代码",
value: "portName",
width: "100",
width: "120",
align: "center",
sorTable: true,
fixed: false,
......@@ -359,7 +351,7 @@ export default {
type: "",
name: "运单号",
value: "waybillNo",
width: "120",
width: "150",
align: "center",
sorTable: true,
fixed: false,
......@@ -369,7 +361,7 @@ export default {
type: "",
name: "总单号",
value: "totalWaybillNo",
width: "120",
width: "150",
align: "center",
sorTable: true,
fixed: false,
......@@ -389,7 +381,7 @@ export default {
type: "",
name: "服务代码",
value: "serviceCode",
width: "100",
width: "90",
align: "center",
sorTable: false,
fixed: false,
......@@ -429,7 +421,7 @@ export default {
type: "",
name: "subcategory",
value: "subCategory",
width: "140",
width: "150",
align: "center",
sorTable: true,
fixed: false,
......@@ -499,7 +491,7 @@ export default {
type: "",
name: "航班预审意见",
value: "caPretrialOpinion",
width: "120",
width: "140",
align: "center",
sorTable: false,
fixed: false,
......@@ -519,7 +511,7 @@ export default {
type: "",
name: "终配航班号",
value: "finalFlightNo",
width: "120",
width: "130",
align: "center",
sorTable: true,
fixed: false,
......@@ -529,7 +521,7 @@ export default {
type: "",
name: "终配航班日期",
value: "finalFlightTime",
width: "140",
width: "150",
align: "center",
sorTable: true,
fixed: false,
......@@ -539,7 +531,7 @@ export default {
type: "",
name: "二配航班号",
value: "twoMatchFlightNo",
width: "120",
width: "130",
align: "center",
sorTable: true,
fixed: false,
......@@ -559,7 +551,7 @@ export default {
type: "",
name: "预配航班号",
value: "preplanFlightNo",
width: "120",
width: "130",
align: "center",
sorTable: true,
fixed: false,
......@@ -579,7 +571,7 @@ export default {
type: "",
name: "ACCS原航班号",
value: "fltNoAccs",
width: "150",
width: "140",
align: "center",
sorTable: true,
fixed: false,
......@@ -599,7 +591,7 @@ export default {
type: "",
name: "ACCS原航线",
value: "accsFlightRoute",
width: "140",
width: "150",
align: "center",
sorTable: true,
fixed: false,
......@@ -629,7 +621,7 @@ export default {
type: "",
name: "发件人账号",
value: "shipperAccount",
width: "120",
width: "150",
align: "center",
sorTable: false,
fixed: false,
......@@ -649,7 +641,7 @@ export default {
type: "",
name: "始发地城市名称",
value: "originCity",
width: "130",
width: "150",
align: "center",
sorTable: false,
fixed: false,
......@@ -689,7 +681,7 @@ export default {
type: "",
name: "大货预审时间",
value: "bigPretrialTime",
width: "120",
width: "150",
align: "center",
sorTable: false,
fixed: false,
......@@ -729,7 +721,7 @@ export default {
type: "",
name: "创建时间",
value: "createTime",
width: "100",
width: "120",
align: "center",
sorTable: true,
fixed: false,
......@@ -757,6 +749,7 @@ export default {
limitSize: 100, //无限制-1
page:1,
progress:0,
tableHeight:null,
formShow:true,
};
},
......@@ -774,6 +767,20 @@ export default {
});
},
activated() {
if(this.$store.state.tagsView.cachedViews.length > 0 ){
this.$store.state.tagsView.cachedViews.forEach(item=>{
if(item === 'QueryCargo'){
this.totalCount>0?this.select():''
}
})
}
},
deactivated(){
this.tableData = []
},
mounted() {
window.addEventListener("keydown", (code) => {
if (code.keyCode === 16 && code.shiftKey) {
......@@ -785,6 +792,7 @@ export default {
this.shiftKey = false;
}
});
this.tableHeight = window.innerHeight - this.$refs.cargoForm.$el.offsetHeight-80
},
methods: {
......
<template>
<div class="menuDrawer">
<el-dialog
:title="drawerTitle"
width="50%"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
:append-to-body="true"
>
<el-form
ref="userForm"
:model="menuForm"
:disabled="menuFormDisabled"
:rules="rules"
label-width="auto"
style="margin: 10px"
>
<el-row>
<el-col :span="12">
<el-form-item label="菜单名称" prop="">
<!-- <el-input
placeholder="请输入权限名"
:disabled="menuFormDisabled"
v-model="menuData.userName"
size="mini"
></el-input> -->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="菜单路由" prop="">
<!-- <el-input
placeholder="请输入权限名"
:disabled="menuFormDisabled"
v-model="menuData.userName"
size="mini"
></el-input> -->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="组件名称" prop="">
<!-- <el-input
placeholder="请输入权限名"
:disabled="menuFormDisabled"
v-model="menuData.userName"
size="mini"
></el-input> -->
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="菜单状态" prop="">
<el-switch
v-model="menuData.menuStatus"
active-color="#13ce66"
inactive-color="#ff4949"
:disabled="menuFormDisabled"
></el-switch>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图标选择" prop="">
<iconSelect @selected="selected"></iconSelect>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="权限设置" prop="">
<el-col :span="6">
<el-radio label="页面" size="medium"></el-radio>
</el-col>
<el-col :span="6">
<el-radio label="按钮" size="medium"></el-radio>
</el-col>
<el-col :span="24">
<el-card shadow="never">
<el-input placeholder=""></el-input>
</el-card>
</el-col>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import iconSelect from "@/components/IconSelect";
export default {
components: {
iconSelect,
},
props: {
drawerTitle: {
type: String,
default: "",
},
menuFormDisabled: {
type: Boolean,
default: false,
},
dialogVisible: {
type: Boolean,
default: false,
},
menuData: {
type: Object,
default: null,
},
},
data() {
return {
menuForm: {},
rules:{}
};
},
updated() {
this.menuForm = this.menuData;
},
watch:{
dialogVisible(val,oldVal){
if(val){
this.menuForm = this.menuData;
}
}
},
methods: {
handleClose() {
this.$emit("handleClose", false);
},
selected(val) {
console.log(val);
},
submit() {},
},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
<el-form ref="selectionUserForm" label-width="auto" style="margin: 20px">
<el-row :gutter="50"> </el-row>
</el-form>
<!-- <div style="margin:20px">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="addMenu"
>新增菜单</el-button
>
</div> -->
<el-table
:data="data"
row-key="id"
fit
border
stripe
highlightCurrentRow
v-loading="loading"
default-expand-all
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column
v-for="(item, index) in tableHeader"
:prop="item.value"
:label="item.name"
:key="index"
:align="item.align"
header-align="center"
showOverflowTooltip
:width="item.width"
:formatter="formatter"
>
<template slot-scope="scope">
<el-tag v-if="item.value === 'menuType'" :type="scope.row.menuType === 'B'?'':'success'"
disable-transitions>{{scope.row.menuType === 'B'?'按钮':'菜单'}}</el-tag>
<span v-else>{{scope.row.title}}</span>
</template>
</el-table-column>
<el-table-column
header-align="center"
align="center"
label="操作"
width="auto"
>
<template slot-scope="scope">
<!-- <el-button type="success" size="mini" @click="buttonClick(scope)">修改</el-button>
<el-button type="primary" size="mini" @click="buttonClick(scope)"
>查看</el-button
> -->
<el-button
:type="scope.row.status == 1 ? 'warning' : 'primary'"
v-hasPermi="['system:menu:openClose']"
size="mini"
@click="menuStatus(scope)"
v-if="scope.row.menuType == 'C'"
>{{ scope.row.status == 1 ? "停用菜单" : "启用菜单" }}</el-button
>
<el-button
type="danger"
size="mini"
v-hasPermi="['system:menu:delete']"
@click="removeMenu(scope)"
v-if="scope.row.menuType == 'C'"
>删除菜单</el-button
>
</template>
</el-table-column>
</el-table>
<!-- <Tables
ref="newTable"
:data="data"
:headerData="tableHeader"
size="medium"
rowKey="id"
:defaultExpandAll="true"
height="auto"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
@SelectChange="SelectChange"
>
<el-table-column
header-align="center"
align="center"
label="操作"
width="auto"
>
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="menuStatus(scope)">{{
scope.menuStatus == 0 ? "停用" : "启用"
}}</el-button>
<el-button type="danger" size="mini" @click="removeMenu(scope)"
>删除菜单</el-button
>
</template>
</el-table-column>
</Tables> -->
<!-- <Drawer
:dialogVisible="drawer"
:drawerTitle="drawerTitle"
:menuFormDisabled="menuFormDisabled"
:menuData="menuData"
@handleClose="handleClose"
></Drawer> -->
</div>
</template>
<script>
import { getAllAuth, updateStatus } from "@/api/system/user.js";
import dictLabels from "@/assets/languages/dictLabels.js";
import Drawer from "./drawer.vue";
import { MessageBox } from "element-ui";
export default {
name:"MenuConfig",
components: {
Drawer,
},
data() {
return {
drawer: false,
menuFormDisabled: false,
loading:false,
drawerTitle: "",
menuData: {},
data: [],
tableHeader: [
{
type: "",
name: "菜单名",
value: "title",
width: "200",
align: "left",
sorTable: false,
},
{
type: "",
name: "菜单类型",
value: "menuType",
width: "100",
align: "center",
sortable: false,
},
{
type: "",
name: "权限标识",
value: "permissionKey",
width: "auto",
align: "left",
sortable: false,
},
{
type: "",
name: "菜单状态",
value: "status",
width: "100",
align: "center",
sorTable: false,
},
{
type: "",
name: "菜单路由",
value: "path",
width: "auto",
align: "left",
sorTable: false,
},
],
};
},
created() {
if(this.$store.state.tagsView.cachedViews.length == 0){
this.menuAll();
}
},
activated(){
this.menuAll();
},
deactivated(){
this.data = []
},
methods: {
addMenu() {
this.menuData = {};
this.drawer = true;
this.drawerTitle = "新增菜单";
this.menuFormDisabled = false;
},
//关闭
handleClose(val) {
this.drawer = val;
},
buttonClick(row) {
this.menuData = row.row;
this.drawer = true;
this.drawerTitle = "查看/修改";
this.menuFormDisabled = true;
},
//表格数据
menuAll() {
this.loading = true;
getAllAuth().then((res) => {
this.loading = false;
if (res.code === 200) {
res.data.length > 0
? (this.data = res.data)
: this.$message({
message: "数据为空",
type: "warning",
});
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
}).catch(()=>{
this.loading = false;
});
},
//菜单状态改变
statusUpdate(data) {
updateStatus(data)
.then((res) => {
if (res.code === 200) {
this.menuAll();
this.$message({
message: "操作成功",
type: "success",
});
// location.reload()
this.$store.dispatch('tagsView/delAllCachedViews')
this.$store.dispatch('tagsView/delAllVisitedViews')
this.$router.push('/index')
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
},
//菜单开启关闭
menuStatus(row) {
MessageBox.confirm(
row.row.status == 1 ? "是否要关闭此菜单" : "是否要启用此菜单",
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
let data = {};
data.id = row.row.id;
data.status = row.row.status == 1 ? "2" : "1";
this.statusUpdate(data);
})
.catch(() => {});
},
//菜单删除
removeMenu(row) {
MessageBox.confirm("是否要删除此菜单", "提示", {
confirmButtonText: "确定删除",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let data = {};
data.id = row.row.id;
data.status = "0";
this.statusUpdate(data);
})
.catch(() => {});
},
formatter(row, column, cellValue, index) {
if (dictLabels[column.property]) {
if (dictLabels[column.property][cellValue]) {
return dictLabels[column.property][cellValue];
}
}
return cellValue;
},
},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="roleDrawer">
<el-drawer
:title="drawerTitle"
:visible.sync="drawer"
direction="rtl"
size="40%"
destroy-on-close
:close-on-click-modal="false"
:wrapperClosable="false"
:show-close="false"
>
<el-form
ref="roleForm"
:model="roleForm"
label-width="auto"
:rules="rules"
size="mini"
style="margin: 10px"
>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="角色名:" prop="name">
<el-input
placeholder="请输入角色名"
v-model.trim="roleForm.name"
:disabled="roleFormDisabled"
v-if="!roleFormDisabled"
clearable
></el-input>
<div v-else>{{ roleData.name }}</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="角色描述:" prop="remark">
<el-input
v-model="roleForm.remark"
type="textarea"
placeholder="请输入角色描述"
:disabled="roleFormDisabled"
v-if="!roleFormDisabled"
clearable
></el-input>
<div v-else>{{ roleData.remark }}</div>
</el-form-item>
</el-col>
<!-- <el-col :span="24">
<el-form-item label="角色状态:" prop="valid">
<el-switch
v-model="roleForm.valid"
:active-value="1"
:inactive-value="2"
active-color="#13ce66"
inactive-color="#ff4949"
:disabled="roleFormDisabled"
></el-switch>
</el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="角色权限:" prop="menuIdList">
<el-tree
ref="tree"
:data="treeData"
node-key="id"
:props="defaultProps"
:show-checkbox="true"
:default-checked-keys="roleData.menuIds"
check-strictly
accordion
>
</el-tree>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-button
type="primary"
v-if="!roleFormDisabled"
size="mini"
:loading="loading"
@click="submit"
>提交</el-button
>
<el-button type="primary" size="mini" @click="handleClose"
>取消</el-button
>
</el-form-item>
</el-form>
</el-drawer>
</div>
</template>
<script>
import { getAllAuth, addOrUpdateRole } from "@/api/system/user.js";
export default {
props: {
drawerTitle: {
type: String,
default: "",
},
roleFormDisabled: {
type: Boolean,
default: false,
},
drawer: {
type: Boolean,
default: false,
},
roleData: {
type: Object,
default: null,
},
},
data() {
return {
roleForm: {
name: null,
},
treeData: [],
loading: false,
defaultProps: {
children: "children",
label: "title",
},
rules: {
name: [
{
required: true,
message: "角色名不能为空",
trigger: "blur",
},
],
},
};
},
created() {
//权限列表
getAllAuth()
.then((res) => {
if (res.code === 200) {
this.treeData = res.data;
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
},
watch:{
roleFormDisabled(){
this.treeData = this.treeDisabled(this.treeData)
},
drawer(val,oldVal){
if(val){
this.roleForm = this.roleData;
}else{
this.loading = false;
}
}
},
methods: {
//关闭
handleClose() {
this.$refs['roleForm'].clearValidate();
this.$emit("handleClose", false);
},
//提交
submit() {
let formData = {};
this.loading = true;
formData.menuIdList = this.$refs.tree.getCheckedKeys();
this.roleData ? (formData.id = this.roleData.id) : "";
formData.remark = this.roleForm.remark;
formData.valid = this.roleForm.valid;
formData.name = this.roleForm.name;
addOrUpdateRole(formData)
.then((res) => {
this.loading = false;
if (res.code === 200) {
this.$message({
message: "操作成功",
type: "success",
});
this.$emit("handleClose", false);
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
},
//权限结构禁用
treeDisabled(val) {
let data = [];
val.forEach((item) => {
item.disabled = this.roleFormDisabled;
data.push(item)
if (item.children && item.children.length) {
item.children = this.treeDisabled(item.children)
}
});
return data;
},
},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="roleConfig">
<el-form ref="selectionRoleForm" label-width="auto" style="margin: 20px">
<el-row :gutter="50">
<el-col :span="6">
<el-form-item label="角色名称">
<el-input
v-model="formData.name"
placeholder="请输入角色名称"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="创建时间">
<el-date-picker
v-model="createTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="状态">
<el-select v-model="formData.valid" placeholder="角色状态" clearable>
<el-option label="开启" value="1"> </el-option>
<el-option label="关闭" value="2"> </el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="margin:20px">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
:loading="tableLoading"
@click="selectRoleList(0)"
>搜索</el-button
>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="addRole" v-hasPermi="['system:role:add']"
>新增角色</el-button
>
</div>
<Tables
:data="data"
:headerData="tableHeader"
:infoData="tableHeader"
:totalCount="total"
:limitSize="formData.size"
:page="formData.page"
:pageSizes="[20,30,40,50]"
:loading="tableLoading"
height="600"
@sizeChange="sizeChange"
@currentChange="currentChange"
>
<template>
<el-table-column header-align="center" align="center" label="操作">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="buttonClick(scope, 0)"
>查看</el-button
>
<el-button type="primary" size="mini" @click="buttonClick(scope, 1)" v-hasPermi="['system:role:update']"
>修改</el-button
>
<el-button
:type="scope.row.valid == 1 ? 'warning' : 'primary'"
size="mini"
v-hasPermi="['system:role:openClose']"
@click="roleStatus(scope)"
>{{ scope.row.valid == 1 ? "停用" : "启用" }}</el-button
>
<el-button type="danger" size="mini" @click="removeRole(scope)" v-hasPermi="['system:role:delete']"
>删除角色</el-button
>
</template>
</el-table-column>
</template>
</Tables>
<Drawer
:drawer="drawer"
:drawerTitle="drawerTitle"
:roleFormDisabled="roleFormDisabled"
:roleData="roleData"
@handleClose="handleClose"
></Drawer>
</div>
</template>
<script>
import Drawer from "./drawer.vue";
import { MessageBox } from "element-ui";
import {
getRoleList,
detailRole,
updateRoleStatus,
} from "@/api/system/user.js";
export default {
name:"RoleConfig",
components: {
Drawer,
},
data() {
return {
formData: {
page: 1,
size: 20,
valid: null,
createStart: null,
createEnd: null,
name: null,
}, //查询条件
data: [], //表格数据
tableHeader: [
{
type: "index",
name: "",
value: "",
width: "",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "角色名称",
value: "name",
width: "150px",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "角色状态",
value: "valid",
width: "150px",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "创建人",
value: "createUserName",
width: "150px",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "创建时间",
value: "createTime",
width: "150px",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "修改时间",
value: "updateTime",
width: "150px",
align: "center",
sorTable: false,
disabled:true
},
{
type: "",
name: "备注",
value: "remark",
width: "400px",
align: "center",
sorTable: false,
disabled:true
},
], //表头数据
roleData: {}, //角色详情
createTime: [],
drawer: false,
drawerTitle: "",
roleFormDisabled: false,
tableLoading: false,
total: 0,
};
},
created() {
if(this.$store.state.tagsView.cachedViews.length == 0){
this.selectRoleList();
}
},
activated(){
this.selectRoleList();
},
deactivated(){
this.data = []
},
methods: {
//角色列表
selectRoleList(val) {
if(val == 0){
this.formData.page = 1
}
this.tableLoading = true;
if (this.createTime.length > 0) {
this.formData.createStart = this.createTime[0];
this.formData.createEnd = this.createTime[1];
}
getRoleList(this.formData)
.then((res) => {
this.tableLoading = false;
if (res.code === 200) {
this.data = res.data.list;
this.total = res.data.total;
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
this.tableLoading = false;
console.log(err);
});
},
//角色详情
roleDetail(id) {
detailRole(id)
.then((res) => {
if (res.code === 200) {
this.roleData = res.data;
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
},
//新增角色
addRole() {
this.roleData = {};
this.drawer = true;
this.roleFormDisabled = false;
this.drawerTitle = "新增角色";
},
//修改查看角色
buttonClick(row, status) {
this.roleDetail(row.row.id);
this.roleData = row.row;
this.drawer = true;
status == 0
? (this.roleFormDisabled = true)
: (this.roleFormDisabled = false);
this.drawerTitle = "修改角色";
},
//修改角色状态
roleStatus(row) {
let msg = "";
let status = {};
status.id = row.row.id;
row.row.valid == 1
? ((msg = "是否关闭此角色"), (status.valid = 2))
: ((msg = "是否启用此角色"), (status.valid = 1));
MessageBox.confirm(msg, "注意", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
updateRoleStatus(status).then((res) => {
if (res.code === 200) {
this.$message({
message: "操作成功",
type: "success",
});
this.selectRoleList();
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
});
})
.catch(() => []);
},
//删除角色
removeRole(row) {
MessageBox.confirm(
"如删除此角色,角色下所有用户将从中被剔除,可能会对用户操作造成影响!",
"注意",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
updateRoleStatus({
id: row.row.id,
valid: 0,
confirmDel: false,
}).then((res) => {
if (res.code === 200) {
this.$message({
message: "删除成功",
type: "success",
});
this.selectRoleList();
} else if (res.code === 202) {
MessageBox.confirm(res.msg, "注意", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
updateRoleStatus({
id: row.row.id,
valid: 0,
confirmDel: true,
}).then((res) => {
if (res.code === 200) {
this.$message({
message: "操作成功",
type: "success",
});
this.selectRoleList();
}
});
})
.catch(() => {});
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
});
})
.catch(() => []);
},
handleClose(val) {
this.drawer = val;
this.selectRoleList();
},
currentChange(val) {
this.formData.page = val.page;
this.selectRoleList();
},
sizeChange(val){
this.formData.size = val;
this.selectRoleList()
}
},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="userDrawer">
<el-drawer
:title="drawerTitle"
:visible.sync="drawer"
direction="rtl"
size="40%"
:close-on-click-modal="false"
:wrapperClosable="false"
:show-close="false"
>
<el-form
ref="userForm"
:model="userForm"
label-width="auto"
:rules="rules"
style="margin: 10px"
>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="员工号:" prop="loginName">
<el-input
placeholder="请输入员工号"
v-model.trim="userForm.loginName"
v-if="!userFormDisabled"
:disabled="drawerTitle != '新增用户'"
size="small"
clearable
></el-input>
<div v-else>{{ userForm.loginName }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户姓名:" prop="username">
<el-input
placeholder="请输入用户姓名"
:disabled="userFormDisabled"
v-model.trim="userForm.username"
v-if="!userFormDisabled"
size="small"
clearable
></el-input>
<div v-else>{{ userForm.username }}</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-alert
title="注意:员工号一但设置就无法更改,请谨慎填写!"
type="warning"
show-icon
size="mini"
:closable="false"
style="width: 400px"
>
</el-alert>
</el-col>
<el-col :span="12">
<el-form-item label="手机号:" prop="phone">
<el-input
placeholder="请输入手机号"
type="phone"
v-model.trim="userForm.phone"
:disabled="userFormDisabled"
v-if="!userFormDisabled"
size="small"
clearable
></el-input>
<div v-else>{{ userForm.phone }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电子邮箱:" prop="email">
<el-input
placeholder="请输入电子邮箱"
type="email"
v-model.trim="userForm.email"
:disabled="userFormDisabled"
v-if="!userFormDisabled"
size="small"
clearable
></el-input>
<div v-else>{{ userForm.email }}</div>
</el-form-item>
</el-col>
<!-- <el-col :span="12" v-if="drawerTitle == '新增用户'">
<el-form-item label="密码:">
<el-input
placeholder="请输入密码"
:disabled="userFormDisabled"
type="password"
size="mini"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12" v-if="drawerTitle == '新增用户'">
<el-form-item label="确认密码:">
<el-input
placeholder="请确认密码"
:disabled="userFormDisabled"
type="password"
size="mini"
></el-input>
</el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="所属口岸:" prop="portName">
<el-select
placeholder="请选择口岸"
v-model="port"
:disabled="userFormDisabled"
size="small"
style="width: 100%"
multiple
clearable
>
<el-option
v-for="item in portNameList"
:label="item.englishName"
:value="item.englishName"
:key="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="所属角色:" prop="roleIds">
<el-checkbox-group
v-model="roleid"
:disabled="userFormDisabled"
@change="change"
>
<el-checkbox
v-for="item in roleList"
:label="item.id"
:key="item.id"
>{{ item.name }}</el-checkbox
>
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注:" prop="remark">
<el-input
type="textarea"
v-model="userForm.remark"
placeholder="备注"
:disabled="userFormDisabled"
v-if="!userFormDisabled"
size="small"
clearable
></el-input>
<div v-else>{{ userForm.remark }}</div>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-button
type="primary"
size="mini"
v-if="!userFormDisabled"
:loading="loading"
@click="submit"
>提交</el-button
>
<el-button type="primary" size="mini" @click="handleClose"
>取消</el-button
>
</el-form-item>
</el-form>
</el-drawer>
</div>
</template>
<script>
import {
getRoleList,
addOrUpdateUser,
portNameList,
} from "@/api/system/user.js";
export default {
props: {
drawerTitle: {
type: String,
default: "",
},
userFormDisabled: {
type: Boolean,
default: false,
},
drawer: {
type: Boolean,
default: false,
},
userData: {
type: Object,
default: null,
},
},
data() {
return {
userForm: {
roleIds: [],
},
roleList: [],
portNameList: [],
port: [],
roleid: [],
ImageUploadUrl: "",
dialogVisible: false,
loading: false,
rules: {
loginName: [
{
required: true,
message: "员工号不能为空",
trigger: "blur",
},
],
username: [
{
required: true,
message: "用户名不能为空",
trigger: "blur",
},
],
portName: [
{
required: true,
message: "所属口岸不能为空",
trigger: "blur",
},
],
phone:[
{
min:11,
max:11,
message:"请输入11位手机号码",
trigger:"blur"
},
{
pattern:/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
message:"请输入正确得手机号码"
}
],
email:[
{
pattern:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
message:"请输入正确得电子邮箱"
}
]
},
};
},
created() {
},
watch: {
drawer(val, oldVal) {
if (val) {
this.roleList = []
this.selectRoleList();
this.userForm = this.userData;
if (this.userForm.roleIds) {
this.roleid = this.userForm.roleIds;
}
if (this.userForm.portName) {
this.port = this.userForm.portName;
}
}else{
this.loading = false;
}
},
},
methods: {
clearValidate(formName){
this.$refs[formName].clearValidate();
},
change(val) {
this.roleid = val;
},
selectRoleList() {
//角色列表
getRoleList({ size: null, page: null })
.then((res) => {
if (res.code === 200) {
res.data.list.map((item) => {
if (item.valid == 1) {
this.roleList.push(item);
}
});
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
//获取口岸
// this.portNameList = this.$store.state.user.portNames;
portNameList()
.then((res) => {
if (res.code === 200) {
this.portNameList = res.data;
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
console.log(err);
});
},
//关闭
handleClose() {
this.roleid = [];
this.port = [];
this.userForm = {
roleIds: [],
};
this.clearValidate('userForm')
this.$emit("handleClose", false);
},
//提交
submit() {
if (this.port.join(",").length > 0) {
this.loading = true;
this.userData.isValid ? "" : (this.userForm.isValid = 1);
this.userForm.roleIds = this.roleid;
this.userForm.portName = this.port.join(",");
addOrUpdateUser(this.userForm)
.then((res) => {
this.loading = false;
if (res.code === 200) {
this.$message({
message: "操作成功",
type: "success",
});
this.$emit("handleClose", false);
} else {
this.$message({
message: res.msg,
type: "warning",
});
}
})
.catch((err) => {
this.loading = false;
console.log(err);
});
}else{
this.$message({
message: "口岸不能为空",
type: "warning",
});
}
},
},
};
</script>
<style>
</style>
\ No newline at end of file
This diff is collapsed. Click to expand it.