Compare commits

...

2 Commits

Author SHA1 Message Date
WeiRan a7bc7944d3 Resolved merge conflicts with origin/master 2024-10-09 14:03:57 +08:00
WeiRan 309513c595 feat()saas运营模块 2024-10-09 12:21:14 +08:00
11 changed files with 626 additions and 10 deletions

View File

@ -4,7 +4,7 @@ import request from "@/utils/request";
//故障码分类
export function getcarType(data){
return request({
url:"/faultmanage/cartype/list",
url:"/electronic/cartype/list",
method: "POST",
data: data
})

View File

@ -31,7 +31,7 @@ export function updfalutcode(data){
//删除故障码
export function delfaultcode(messageTypeId){
return request({
url:"/faultmanage/faultcode/faultcodedel/"+messageTypeId,
url:"/electronic/faultcode/faultcodedel/"+messageTypeId,
method: "POST",
})
}
@ -41,7 +41,7 @@ export function delfaultcode(messageTypeId){
//故障码分类
export function getfaultType(data){
return request({
url:"/faultmanage/faulttype/list",
url:"/electronic/faulttype/list",
method: "POST",
data: data
})
@ -50,7 +50,7 @@ export function getfaultType(data){
//故障名称
export function getfaultLabel(data){
return request({
url:"/faultmanage/faultlabel/list",
url:"/electronic/faultlabel/list",
method: "POST",
data: data
})
@ -58,7 +58,7 @@ export function getfaultLabel(data){
export function getunread(data){
return request({
url:"/faultmanage/message/unread",
url:"/electronic/message/unread",
method: "POST",
data: data
})

View File

@ -0,0 +1,56 @@
import request from "@/utils/request";
//企业列表展示
export function getFirmList(data){
return request({
url:"/electronic/firmmanage/firmmessageList",
method: "POST",
data: data
})
}
//企业新增
export function addfirm(data){
return request({
url:"/auth/register",
method: "POST",
data: data
})
}
//权限分配
export function givepermission(data){
return request({
url:"/electronic/permission/updpermission",
method: "POST",
data: data
})
}
//获取权限等级列表
export function getpermission(data){
return request({
url:"/electronic/permission/permissionlist",
method: "POST",
data: data
})
}
//完成企业权限新增
export function addpermission(data){
return request({
url:"/electronic/permission/addpermission",
method: "POST",
data: data
})
}
//完成企业权限修改
export function updpermission(data){
return request({
url:"/electronic/permission/updpermission",
method: "POST",
data: data
})
}

View File

@ -1,7 +1,7 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
export function login(username, password,firmName, code, uuid) {
return request({
url: '/auth/login',
headers: {
@ -9,7 +9,7 @@ export function login(username, password, code, uuid) {
repeatSubmit: false
},
method: 'post',
data: {username, password, code, uuid}
data: {username, password,firmName, code, uuid}
})
}

View File

@ -73,6 +73,7 @@ export const constantRoutes = [
}
]
},
{
path: '/user',
component: Layout,
@ -86,7 +87,10 @@ export const constantRoutes = [
meta: {title: '个人中心', icon: 'user'}
}
]
}
},
]
// 动态路由,基于用户权限动态去加载
@ -134,6 +138,37 @@ export const dynamicRoutes = [
}
]
},
{
path: '/firmoperations/addfirm',
component: Layout,
hidden: true,
children: [
{
path: 'index/:id(\\d+)',
component: () => import('@/views/firmoperations/addfirm/index'),
name: 'Rule',
meta: {title: '企业新增页面', activeMenu: '/firmoperations/addfirm'}
}
]
},
{
path: '/firmoperations/firmmanage',
component: Layout,
hidden: true,
children: [
{
path: 'index/:id(\\d+)',
component: () => import('@/views/firmoperations/firmmanage/index'),
name: 'Rule',
meta: {title: '企业基本信息', activeMenu: '/firmoperations/firmmanage'}
}
]
},
{
path: '/system/role-auth',
component: Layout,

View File

@ -1,9 +1,11 @@
import {getInfo, login, logout, refreshToken} from '@/api/login'
import {getToken, removeToken, setExpiresIn, setToken} from '@/utils/auth'
import {getSaasKey, setSaasKey} from "../../utils/auth";
const user = {
state: {
token: getToken(),
saas_key: getSaasKey(),
id: '',
name: '',
avatar: '',
@ -15,6 +17,9 @@ const user = {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_SAAS_KEY: (state, saasKey) => {
state.saas_key = saasKey
},
SET_EXPIRES_IN: (state, time) => {
state.expires_in = time
},
@ -40,15 +45,18 @@ const user = {
Login({commit}, userInfo) {
const username = userInfo.username.trim()
const password = userInfo.password
const firmName = userInfo.firmName
const code = userInfo.code
const uuid = userInfo.uuid
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
login(username, password,firmName, code, uuid).then(res => {
let data = res.data
setToken(data.access_token)
commit('SET_TOKEN', data.access_token)
setExpiresIn(data.expires_in)
commit('SET_EXPIRES_IN', data.expires_in)
setSaasKey(data.saas_key)
commit('SET_SAAS_KEY', data.saas_key)
resolve()
}).catch(error => {
reject(error)

View File

@ -2,6 +2,8 @@ import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
const SaasKey = 'saas_key'
const ExpiresInKey = 'Admin-Expires-In'
export function getToken() {
@ -12,6 +14,14 @@ export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function getSaasKey() {
return Cookies.get(SaasKey)
}
export function setSaasKey(token) {
return Cookies.set(SaasKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}

View File

@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode'
import {blobValidate, tansParams} from "@/utils/muyu";
import cache from '@/plugins/cache'
import {saveAs} from 'file-saver'
import {getSaasKey} from "./auth";
let downloadLoadingInstance;
// 是否显示重新登录
@ -17,7 +18,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000
timeout: 40000
})
// request拦截器
@ -29,6 +30,9 @@ service.interceptors.request.use(config => {
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
if (getToken() && !isToken) {
config.headers['saas_key'] = getSaasKey() // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);

View File

@ -0,0 +1,95 @@
<template>
<div>
<center>
<h2>新增企业信息</h2>
<el-divider></el-divider>
<el-form ref="AddForm" :model="AddForm" :rules="registerRules" class="register-form">
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.firmName" autocomplete="off" placeholder="企业名称"></el-input>
</el-form-item>
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.username" autocomplete="off" placeholder="企业登录账号"></el-input>
</el-form-item>
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.password" autocomplete="off" placeholder="企业登录密码"></el-input>
</el-form-item>
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.nickName" autocomplete="off" placeholder="公司注册人"></el-input>
</el-form-item>
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.email" autocomplete="off" placeholder="企业邮箱"></el-input>
</el-form-item>
<el-form-item prop="pass" style="width: 50%">
<el-input type="text" v-model="AddForm.phonenumber" autocomplete="off" placeholder="企业电话"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')"></el-button>
<el-button @click="resetForm('ruleForm')"></el-button>
</el-form-item>
</el-form>
</center>
</div>
</template>
<script>
//jsjsjson,
//import from ',
import {resetForm} from "../../../utils/muyu";
import {addfirm} from "../../../api/firmoperations/firmmanage";
export default {
name: "addfirm",
//import使"
components: {},
props: {},
data() {
//"
return {
AddForm:{}
};
},
// data",
computed: {},
//data",
watch: {},
//",
methods: {resetForm,
//
submitForm(){
addfirm(this.AddForm).then(response=>{
alert(response.msg)
if (response.code==200){
this.$router.push("/firmoperations/firmmanage")
}
})
}
},
// - 访this",
created() {
},
// - 访DOM",
mounted() {
},
beforeCreate() {
}, // - ",
beforeMount() {
}, // - ",
beforeUpdate() {
}, // - ",
updated() {
}, // - ",
beforeDestroy() {
}, // - ",
destroyed() {
}, // - ",
activated() {
} //keep-alive",
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,400 @@
<template>
<div>
<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="公司名称" prop="pass" style="width: 30%">
<el-input type="text" v-model="ruleForm.firmName" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')"></el-button>
<el-button @click="resetForm('ruleForm')"></el-button>
</el-form-item>
</el-form>
<el-divider></el-divider>
<el-button type="success" round @click="toadd()"></el-button>
<el-button @click="reconfiguration()" type="primary" style="margin-left: 16px;">
权限等级重构
</el-button>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column
label="公司名称"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.firmName }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="公司邮箱"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.email }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="公司号码"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.phonenumber }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="公司所用数据库"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.databaseName }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="权限等级"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.permissionLevel }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
@click="handleEdit(scope.row)">企业详情</el-button>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.row)">删除</el-button>
<el-button
size="mini"
type="danger"
@click="handlePermission(scope.row)">权限分配</el-button>
</template>
</el-table-column>
</el-table>
<!--分页-->
<center>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="ruleForm.pageNum"
:page-sizes="[3, 5, 10, 15]"
:page-size="ruleForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</center>
<!--权限分配页面-->
<el-dialog
title="权限分配"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
<el-form :model="PermissionForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="权限等级:" prop="pass">
{{PermissionForm.permissionLevel}}
</el-form-item>
<el-form-item label="车辆数目:" prop="pass">
{{PermissionForm.carNumber}}
</el-form-item>
<el-form-item label="车类型数目:" prop="pass">
{{PermissionForm.carTypeNumber}}
</el-form-item>
</el-form>
<el-divider></el-divider>
<el-form :model="givePermissionForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="公司Id:" prop="pass" hidden>
{{givePermissionForm.firmId}}
</el-form-item>
<el-form-item label="权限等级:" prop="pass">
<el-input type="text" v-model="givePermissionForm.permissionLevel" autocomplete="off"></el-input>
<el-radio-group v-model="givePermissionForm.permissionLevel">
<el-radio label="v1"></el-radio>
<el-radio label="v2"></el-radio>
<el-radio label="v3"></el-radio>
<el-radio label="v4"></el-radio>
<el-radio label="v5"></el-radio>
<el-radio label="v6"></el-radio>
<el-radio label="v7"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="Yes()"> </el-button>
</span>
</el-dialog>
<!---重构权限等级-->
<el-drawer
title="权限等级重构"
:visible.sync="drawer"
:direction="direction"
:before-close="handleClose1"
:size="800">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="权限等级展示" name="first">
<el-table
:data="PermissiontableData"
style="width: 100%">
<el-table-column
prop="permissionId"
label="Id"
width="180">
</el-table-column>
<el-table-column
prop="permissionLevel"
label="权限等级"
width="180">
</el-table-column>
<el-table-column
prop="carNumber"
label="车辆数目"
width="180">
</el-table-column>
<el-table-column
prop="carTypeNumber"
label="车辆类型数目"
width="180">
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="新增等级" name="second">
<el-form :model="addForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="权限等级" prop="pass" style="width: 50%">
<el-input type="text" v-model="addForm.permissionLevel" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="车辆数目" prop="pass" style="width: 50%">
<el-input type="text" v-model="addForm.carNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="车辆类型数目" prop="pass" style="width: 50%">
<el-input type="text" v-model="addForm.carTypeNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="doaddpermission('ruleForm')"></el-button>
<el-button @click="resetForm('ruleForm')"></el-button>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="修改等级" name="third">
<el-form :model="updForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="Id" prop="pass" style="width: 50%">
<el-input type="text" v-model="updForm.permissionId" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="权限等级" prop="pass" style="width: 50%">
<el-select v-model="updForm.permissionId" placeholder="请选择">
<el-option
v-for="item in PermissiontableData"
:key="item.permissionId"
:label="item.permissionLevel"
:value="item.permissionId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="车辆数目" prop="pass" style="width: 50%">
<el-input type="text" v-model="updForm.carNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="车辆类型数目" prop="pass" style="width: 50%">
<el-input type="text" v-model="updForm.carTypeNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="doupdpermission('ruleForm')"></el-button>
<el-button @click="resetForm('ruleForm')"></el-button>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</el-drawer>
</div>
</template>
<script>
//jsjsjson,
//import from ',
import {resetForm} from "../../../utils/muyu";
import {
addpermission,
getFirmList,
getpermission,
givepermission,
updpermission
} from "../../../api/firmoperations/firmmanage";
export default {
name: "firmmanage",
//import使"
components: {},
props: {},
data() {
//"
return {
ruleForm:{
pageNum:1,
pageSize:10
},
total:0,
tableData:[],
dialogVisible: false,
PermissionForm:{},
givePermissionForm:{},
drawer: false,
direction: 'rtl',
addForm:{},
updForm:{},
activeName: 'first',
PermissiontableData:[]
};
},
// data",
computed: {},
//data",
watch: {},
//",
methods: {
//
resetForm,
//
submitForm(){
this.getFirmList()
},
//
getFirmList(){
getFirmList(this.ruleForm).then(response=>{
this.tableData=response.data.firmListRespList
this.total=response.data.total
})
},
//
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.ruleForm.pageSize=val
this.getFirmList()
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.ruleForm.pageNum=val
this.getFirmList()
},
//
handlePermission(row){
this.dialogVisible=true;
this.PermissionForm={
permissionId: row.permissionId,
permissionLevel: row.permissionLevel,
carNumber: row.carNumber,
carTypeNumber: row.carTypeNumber
}
this.givePermissionForm={
firmId: row.firmId
}
},
//
Yes(){
givepermission(this.givePermissionForm).then(response=>{
alert(response.msg)
if (response.code==200){
this.dialogVisible=false
this.getFirmList()
}
})
},
//
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
//
reconfiguration(){
this.drawer=true
},
//
handleClose1(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
//
toadd(){
this.$router.push("/firmoperations/addfirm")
},
handleClick(tab, event) {
console.log(tab, event);
},
//
getpermissionList(){
getpermission().then(response=>{
this.PermissiontableData=response.data
})
},
//
doaddpermission(){
addpermission(this.addForm).then(response=>{
alert(response.msg)
if (response.code==200){
this.getpermissionList()
}
})
},
//
doupdpermission(){
updpermission(this.updForm).then(response=>{
alert(response.msg)
if (response.code==200){
this.getpermissionList()
}
})
}
},
// - 访this",
created() {
this.getFirmList()
this.getpermissionList()
},
// - 访DOM",
mounted() {
},
beforeCreate() {
}, // - ",
beforeMount() {
}, // - ",
beforeUpdate() {
}, // - ",
updated() {
}, // - ",
beforeDestroy() {
}, // - ",
destroyed() {
}, // - ",
activated() {
} //keep-alive",
};
</script>
<style scoped>
</style>

View File

@ -2,6 +2,9 @@
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">企业管理平台</h3>
<el-form-item label="公司名称" prop="pass">
<el-input type="text" v-model="loginForm.firmName" autocomplete="off"></el-input>
</el-form-item>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
@ -74,6 +77,7 @@ export default {
loginForm: {
username: "admin",
password: "admin123",
firmName: 'aaaaaaaa',
rememberMe: false,
code: "",
uuid: ""
@ -120,10 +124,12 @@ export default {
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const firmName = Cookies.get("firmName");
const rememberMe = Cookies.get('rememberMe')
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
firmName: firmName === undefined ? this.loginForm.firmName : firmName,
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
};
},
@ -134,10 +140,12 @@ export default {
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, {expires: 30});
Cookies.set("password", encrypt(this.loginForm.password), {expires: 30});
Cookies.set("firmName", encrypt(this.loginForm.firmName), {expires: 30});
Cookies.set('rememberMe', this.loginForm.rememberMe, {expires: 30});
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("firmName");
Cookies.remove('rememberMe');
}
this.$store.dispatch("Login", this.loginForm).then(() => {