This commit is contained in:
ky_sunl
2021-04-22 13:37:25 +00:00
parent 575a22954f
commit d1c9e5a71e
699 changed files with 1062425 additions and 40640 deletions

156
Web/src/common/api/index.js Normal file
View File

@@ -0,0 +1,156 @@
/**
* api
* v1.2
*/
import axios from 'axios'
import { token } from '@/common/token'
import status from './status'
import app from '@/main'
axios.defaults.baseURL = '/api'
/**
* 最终直接根据url名称调用接口方法
* 例如
* import { api } from '@/api'
* api.getItemGroupType(parmas).then(...)
*/
import urls from './requests'
const initInstance = (options) => {
const instance = axios
.create({
headers: {
Authorization: 'Bearer ' + token.value
},
...options
})
instance.interceptors.response.use((res) => {
if (res.data.status === status.Unauthorized) {
handlerUnauthorized()
}
return res
}, (err) => {
return Promise.reject(err)
})
return instance
}
const errerCodes = [status.BadRequest, status.InternalServerError]
const errorNotification = ({ code, message }) => {
switch (message.constructor) {
case Array:
message.map(p => {
app.$notification.error({
duration: 0,
message: p.field,
description: p.messages.join('/'),
})
})
break
default:
app.$notification.error({
duration: 0,
message: code || '错误',
description: message,
})
break
}
}
const handlerUnauthorized = () => {
token.value = ''
app.$router.replace({
path: '/login'
}).catch(() => { })
}
const api = {}
for (let key in urls) {
const item = urls[key]
let url = '',
method = 'post',
options = {}
if (item.constructor === String) {
url = item
} else if (item.constructor === Array) {
url = item[0]
if (item[1]) {
method = item[1].toLowerCase()
}
if(item[2]) {
options = item[2]
}
} else if (item.constructor === Object) {
url = item.url
if (item.method) {
method = item.method.toLowerCase()
}
}
api[`${key}Wait`] = function (params = {}) {
if (method === 'post') {
return initInstance(options).post(url, params)
} else {
return initInstance(options).get(url, {
params
})
}
}
api[key] = function (params = {}) {
return new Promise((reslove, reject) => {
api[`${key}Wait`](params)
.then((res) => {
const { data } = res
if (errerCodes.indexOf(data.code) >= 0) {
errorNotification(data)
reject([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data)
} else if (data.code === status.Unauthorized) {
handlerUnauthorized()
} else {
reslove([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data)
}
})
.catch(({ response: { data } }) => {
if (process.env.VUE_APP_NODE_ENV === 'development') {
errorNotification(data)
reject(data)
if (data.code === status.Unauthorized) {
handlerUnauthorized()
}
} else {
errorNotification({
message: '发生错误,请联系管理员'
})
}
})
})
}
api[key].prototype.name = key
}
/**
* 并发请求,与axios.all方式相同
* 但是使用的接口函数为this.$api.[接口名]E
*/
api.$queue = function (queue) {
return new Promise((reslove) => {
axios.all(queue).then((results) => {
const res = results.map(p => p.data)
reslove(res)
})
})
}
export {
axios,
api,
status
}

View File

@@ -0,0 +1,54 @@
/**
* 接口的3种配置方式
* 1.string
* 如login: '/login'\
* 将会默认已POST方式请求接口/login
* 2.array
* 如login: ['/login', 'post']
* 数组[0]必填,为接口地址,[1]选填,为请求方式(不区分大小写),默认为POST
* 3.object
* 如login: { url: '/login', method: 'post' }
* [url]必填,为接口地址,[method]选填,为请求方式(不区分大小写),默认为POST
*/
import appManage from './sys/appManage'
import configManage from './sys/configManage'
import dictDataManage from './sys/dictDataManage'
import dictManage from './sys/dictManage'
import emailManage from './sys/emailManage'
import fileManage from './sys/fileManage'
import loginManage from './sys/loginManage'
import logManage from './sys/logManage'
import machineManage from './sys/machineManage'
import menuManage from './sys/menuManage'
import noticeManage from './sys/noticeManage'
import onlineUserManage from './sys/onlineUserManage'
import orgManage from './sys/orgManage'
import posManage from './sys/posManage'
import roleManage from './sys/roleManage'
import smsManage from './sys/smsManage'
import tenantManage from './sys/tenantManage'
import timersManage from './sys/timersManage'
import userManage from './sys/userManage'
export default {
...appManage,
...configManage,
...dictDataManage,
...dictManage,
...emailManage,
...fileManage,
...loginManage,
...logManage,
...machineManage,
...menuManage,
...noticeManage,
...onlineUserManage,
...orgManage,
...posManage,
...roleManage,
...smsManage,
...tenantManage,
...timersManage,
...userManage,
}

View File

@@ -0,0 +1,34 @@
export default {
/**
* 系统应用列表
*/
getAppPage: ['/sysApp/page', 'get'],
/**
* 系统应用列表
*/
getAppList: ['/sysApp/list', 'get'],
/**
* 新增系统应用
*/
sysAppAdd: ['/sysApp/add', 'post'],
/**
* 编辑系统应用
*
*/
sysAppEdit: ['/sysApp/edit', 'post'],
/**
* 删除系统应用
*/
sysAppDelete: ['/sysApp/delete', 'post'],
/**
* 设为默认应用
*/
sysAppSetAsDefault: ['/sysApp/setAsDefault', 'post'],
/**
* 修改应用状态
*/
sysAppChangeStatus: ['/sysApp/changeStatus', 'post'],
}

View File

@@ -0,0 +1,26 @@
export default {
/**
* 分页查询配置列表
*/
sysConfigPage: ['/sysConfig/page', 'get'],
/**
* 添加系统参数配置
*/
sysConfigAdd: ['/sysConfig/add', 'post'],
/**
* 编辑系统参数配置
*/
sysConfigEdit: ['/sysConfig/edit', 'post'],
/**
* 删除系统参数配置
*/
sysConfigDelete: ['/sysConfig/delete', 'post'],
/**
* 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
*/
sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'],
/**
* 获取系统的所有任务列表
*/
sysTimersGetActionClasses: ['/sysTimers/getActionClasses', 'get'],
}

View File

@@ -0,0 +1,18 @@
export default {
/**
* 查询系统字典值
*/
sysDictDataPage: ['/sysDictData/page', 'get'],
/**
* 添加系统字典值
*/
sysDictDataAdd: ['/sysDictData/add', 'post'],
/**
* 编辑系统字典值
*/
sysDictDataEdit: ['/sysDictData/edit', 'post'],
/**
* 删除系统字典值
*/
sysDictDataDelete: ['/sysDictData/delete', 'post'],
}

View File

@@ -0,0 +1,26 @@
export default {
/**
* 分页查询系统字典类型
*/
sysDictTypePage: ['/sysDictType/page', 'get'],
/**
* 添加系统字典类型
*/
sysDictTypeAdd: ['/sysDictType/add', 'post'],
/**
* 编辑系统字典类型
*/
sysDictTypeEdit: ['/sysDictType/edit', 'post'],
/**
* 删除系统字典类型
*/
sysDictTypeDelete: ['/sysDictType/delete', 'post'],
/**
* 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
*/
sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'],
/**
* 获取所有字典,启动时加入缓存使用
*/
sysDictTypeTree: ['/sysDictType/tree', 'get'],
}

View File

@@ -0,0 +1,10 @@
export default {
/**
* 发送邮件
*/
emailSendEmail: ['/email/sendEmail', 'post'],
/**
* 发送html邮件
*/
emailSendEmailHtml: ['/email/sendEmailHtml', 'post'],
}

View File

@@ -0,0 +1,36 @@
export default {
/**
* 分页查询文件信息表
*/
sysFileInfoPage: ['/sysFileInfo/page', 'get'],
/**
* 获取全部文件信息表
*/
sysFileInfoList: ['/sysFileInfo/list', 'get'],
/**
* 上传文件
*/
sysFileInfoUpload: ['/sysFileInfo/upload', 'post'],
/**
* 下载文件
*/
sysFileInfoDownload: ['/sysFileInfo/download', 'get', {
responseType: 'blob'
}],
/**
* 查看图片
*/
sysFileInfoPreview: ['/sysFileInfo/preview', 'get', {
responseType: 'arraybuffer'
}],
/**
* 查看详情文件信息表
*/
sysFileInfoDetail: ['/sysFileInfo/detail', 'get'],
/**
* 删除文件信息表
*/
sysFileInfoDelete: ['/sysFileInfo/delete', 'post'],
}

View File

@@ -0,0 +1,23 @@
export default {
/**
* 查询访问日志
*/
sysVisLogPage:['/sysVisLog/page','get'],
/**
* 查询操作日志
*/
sysOpLogPage:['/sysOpLog/page','get'],
/**
* 清空访问日志
*/
sysVisLogDelete:['/sysVisLog/delete','post'],
/**
* 清空登录日志
*/
sysOpLogDelete:['/sysOpLog/delete','post'],
}

View File

@@ -0,0 +1,34 @@
export default {
/**
* 登录
*/
login: ['/login', 'post'],
/**
* 登出
*/
logout: ['/logout', 'get'],
/**
* 获取登录用户信息
*/
getLoginUser: ['/getLoginUser', 'get'],
/**
* 获取租户开关
*/
getTenantOpen: ['/getTenantOpen', 'get'],
/**
* 获取短信验证码
*/
getSmsCaptcha: ['/getSmsCaptcha', 'get'],
/**
* 获取验证码开关
*/
getCaptchaOpen: ['/getCaptchaOpen', 'get'],
/**
* 获取验证图片 以及token
*/
reqGet: ['/captcha/get', 'post'],
/**
* 滑动或者点选验证
*/
reqCheck: ['/captcha/check', 'post'],
}

View File

@@ -0,0 +1,10 @@
export default {
/**
*
* 系统属性监控
*
*/
sysMachineUse:['/sysMachine/use','get'],
sysMachineBase:['/sysMachine/base','get'],
sysMachineNetwork:['/sysMachine/network','get']
}

View File

@@ -0,0 +1,66 @@
export default {
/**
* 获取菜单列表
*
* @author yubaoshan
* @param parameter
* @returns {*}
*/
getMenuList:['/sysMenu/list','get'],
/**
* 获取系统菜单树,用于新增,编辑时选择上级节点
*
* @author yubaoshan
* @date 2020/4/23 12:22
*/
getMenuTree:['/sysMenu/tree','get'],
/**
* 增加菜单
*
* @author yubaoshan
* @date 2020/4/24 23:23
*/
sysMenuAdd:['/sysMenu/add','post'],
/**
* 增加菜单
*
* @author yubaoshan
* @date 2020/4/24 23:23
*/
sysMenuDelete:['/sysMenu/delete','post'],
/**
* 查看菜单详情
*
* @author yubaoshan
* @date 2020/4/25 01:11
*/
sysMenuDetail:['/sysMenu/detail','post'],
/**
* 编辑系统菜单
*
* @author yubaoshan
* @date 2020/4/25 01:11
*/
sysMenuEdit:['/sysMenu/edit','post'],
/**
* 获取系统菜单树,用于给角色授权时选择
*
* @author yubaoshan
* @date 2020/6/2 17:30
*/
SysMenuTreeForGrant:['/sysMenu/treeForGrant','get'],
/**
* 根据系统切换菜单
*
* @author yubaoshan
* @date 2020/6/28 15:25
*/
sysMenuChange:['/sysMenu/change','post'],
}

View File

@@ -0,0 +1,38 @@
export default {
/**
* 查询系统通知公告
*/
sysNoticePage:['/sysNotice/page','get'],
/**
* 添加系统通知公告
*/
sysNoticeAdd:['/sysNotice/add','post'],
/**
* 编辑系统通知公告
*/
sysNoticeEdit:['/sysNotice/edit','post'],
/**
* 删除系统通知公告
*/
sysNoticeDelete:['/sysNotice/delete','post'],
/**
* 通知公告详情
*/
sysNoticeDetail:['/sysNotice/detail','get'],
/**
* 修改状态
*/
sysNoticeChangeStatus:['/sysNotice/changeStatus','post'],
}

View File

@@ -0,0 +1,6 @@
export default {
/**
* 查询我收到的系统通知公告
*/
sysNoticeReceived:['/sysNotice/received','get'],
}

View File

@@ -0,0 +1,12 @@
export default{
/**
* 在线用户列表
*/
sysOnlineUserList:['/sysOnlineUser/list','get'],
/**
* 强制下线
*/
sysOnlineUserForceExist:['/sysOnlineUser/forceExist','post'],
}

View File

@@ -0,0 +1,38 @@
export default {
/**
* 获取机构树
*
*/
getOrgTree:['/sysOrg/tree','get'],
/**
* 获取机构列表
*
*/
getOrgList:['/sysOrg/list','get'],
/**
* 获取机构列表
*
*/
getOrgPage:['/sysOrg/page','get'],
/**
* 新增机构
*
*/
sysOrgAdd:['/sysOrg/add','post'],
/**
* 编辑机构
*
*/
sysOrgEdit:['/sysOrg/edit','post'],
/**
* 删除机构
*
*/
sysOrgDelete:['/sysOrg/delete','post'],
}

View File

@@ -0,0 +1,32 @@
export default {
/**
* 查询系统职位
*
*/
sysPosPage:['/sysPos/page','get'],
/**
* 系统职位列表
*
*/
sysPosList:['/sysPos/list','get'],
/**
* 添加系统职位
*
*/
sysPosAdd:[ '/sysPos/add','post'],
/**
* 编辑系统职位
*
*/
sysPosEdit:['/sysPos/edit','post'],
/**
* 删除系统职位
*
*/
sysPosDelete:['/sysPos/delete','post'],
}

View File

@@ -0,0 +1,62 @@
export default {
/**
* 获取角色列表
*/
getRolePage:['/sysRole/page','get'],
/**
* 增加角色
*/
sysRoleAdd:['/sysRole/add','post'],
/**
* 编辑角色
*/
sysRoleEdit:['/sysRole/edit','post'],
/**
* 删除角色
*/
sysRoleDelete:['/sysRole/delete','post'],
/**
* 删除角色
*/
sysRoleDeteil:['/sysRole/detail','get'],
/**
* 获取授权角色列表
*/
sysRoleDropDown:['/sysRole/dropDown','get'],
/**
* 拥有菜单
*/
sysRoleOwnMenu:['/sysRole/ownMenu','get'],
/**
* 授权菜单
*/
sysRoleGrantMenu:['/sysRole/grantMenu','post'],
/**
* 拥有数据
*/
sysRoleOwnData:['/sysRole/ownData','get'],
/**
* 授权数据
*/
sysRoleGrantData:['/sysRole/grantData','post'],
}

View File

@@ -0,0 +1,26 @@
export default {
/**
* 发送记录查询
*
* @author yubaoshan
* @date 2020/7/3 22:11
*/
smsPage:['/sms/page','get'],
/**
* 验证短信验证码
*
* @author yubaoshan
* @date 2020/7/3 22:12
*/
sysSendLoginMessage:['/sms/sendLoginMessage','post'],
/**
* 验证短信验证码
*
* @author yubaoshan
* @date 2020/7/3 22:12
*/
sysValidateMessage:['/sms/validateMessage','post'],
}

View File

@@ -0,0 +1,26 @@
export default {
/**
* 租户列表
*
*/
sysTenantPage:['/sysTenant/page','get'],
/**
* 新增租户
*
*/
sysTenantAdd:['/sysTenant/add','post'],
/**
* 删除租户
*
*/
sysTenantDelete:['/sysTenant/delete','post'],
/**
* 编辑租户
*
*/
sysTenantEdit:['/sysTenant/edit','post'],
}

View File

@@ -0,0 +1,56 @@
export default {
/**
* 分页查询定时任务
*/
sysTimersPage:['/sysTimers/page','get'],
/**
* 获取全部定时任务
*/
sysTimersList:['/sysTimers/list','get'],
/**
* 查看详情定时任务
*/
sysTimersDetail:['/sysTimers/detail','get'],
/**
* 添加定时任务
*/
sysTimersAdd:['/sysTimers/add','post'],
/**
* 删除定时任务
*/
sysTimersDelete:['/sysTimers/delete','post'],
/**
* 编辑定时任务
*/
sysTimersEdit:['/sysTimers/edit','post'],
/**
* 获取系统的所有任务列表
*/
sysTimersGetActionClasses:['/sysTimers/getActionClasses','post'],
/**
* 启动定时任务
*/
sysTimersStart:['/sysTimers/start','post'],
/**
* 停止定时任务
*/
sysTimersStop:['/sysTimers/stop','post'],
}

View File

@@ -0,0 +1,76 @@
export default {
/**
* 获取用户列表
*/
getUserPage:['/sysUser/page','get'],
/**
* 增加用户
*/
sysUserAdd:['/sysUser/add','post'],
/**
* 编辑用户
*/
sysUserEdit:['/sysUser/edit','post'],
/**
* 获取用户详情
*/
sysUserDetail:['/sysUser/detail','get'],
/**
* 删除用户
*/
sysUserDelete:['/sysUser/delete','post'],
/**
* 拥有角色
*/
sysUserOwnRole:['/sysUser/ownRole','get'],
/**
* 授权角色
*/
sysUserGrantRole:['/sysUser/grantRole','post'],
/**
* 拥有数据
*/
sysUserOwnData:['/sysUser/ownData','get'],
/**
* 授权数据
*/
sysUserGrantData:['/sysUser/grantData','post'],
/**
* 修改状态
*/
sysUserChangeStatus:['/sysUser/changeStatus','post'],
/**
* 重置密码
*/
sysUserResetPwd:['/sysUser/resetPwd','post'],
/**
* 修改密码
*/
sysUserUpdatePwd:['/sysUser/updatePwd','post'],
/**
* 用户选择器
*/
sysUserSelector:['/sysUser/selector','get'],
/**
* 修改头像
*/
sysUserUpdateAvatar:['/sysUser/updateAvatar','post'],
/**
* 更新基本信息
*/
sysUserUpdateInfo:['/sysUser/updateInfo','post'],
}

View File

@@ -0,0 +1,206 @@
export default {
//
// 摘要:
// 等效于 HTTP 状态 100。 System.Net.HttpStatusCode.Continue 指示客户端可以继续其请求。
Continue: 100,
//
// 摘要:
// 等效于 HTTP 状态为 101。 System.Net.HttpStatusCode.SwitchingProtocols 指示正在更改的协议版本或协议。
SwitchingProtocols: 101,
//
// 摘要:
// 等效于 HTTP 状态 200。 System.Net.HttpStatusCode.OK 指示请求成功,且请求的信息包含在响应中。 这是要接收的最常见状态代码。
OK: 200,
//
// 摘要:
// 等效于 HTTP 状态 201。 System.Net.HttpStatusCode.Created 指示请求导致已发送响应之前创建一个新的资源。
Created: 201,
//
// 摘要:
// 等效于 HTTP 状态 202。 System.Net.HttpStatusCode.Accepted 指示请求已被接受进行进一步处理。
Accepted: 202,
//
// 摘要:
// 等效于 HTTP 状态 203。 System.Net.HttpStatusCode.NonAuthoritativeInformation 指示返回的元信息来自而不是原始服务器的缓存副本,因此可能不正确。
NonAuthoritativeInformation: 203,
//
// 摘要:
// 等效于 HTTP 状态 204。 System.Net.HttpStatusCode.NoContent 指示已成功处理请求和响应是有意留为空白。
NoContent: 204,
//
// 摘要:
// 等效于 HTTP 状态 205。 System.Net.HttpStatusCode.ResetContent 指示客户端应重置 (而不是重新加载) 的当前资源。
ResetContent: 205,
//
// 摘要:
// 等效于 HTTP 206 状态。 System.Net.HttpStatusCode.PartialContent 指示根据包括字节范围的 GET 请求的请求的响应是部分响应。
PartialContent: 206,
//
// 摘要:
// 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.MultipleChoices 指示所需的信息有多种表示形式。 默认操作是将此状态视为一个重定向,并按照与此响应关联的位置标头的内容。
MultipleChoices: 300,
//
// 摘要:
// 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.Ambiguous 指示所需的信息有多种表示形式。 默认操作是将此状态视为一个重定向,并按照与此响应关联的位置标头的内容。
Ambiguous: 300,
//
// 摘要:
// 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.MovedPermanently 指示已将所需的信息移动到的位置标头中指定的
// URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。
MovedPermanently: 301,
//
// 摘要:
// 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.Moved 指示已将所需的信息移动到的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。
// 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。
Moved: 301,
//
// 摘要:
// 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Found 指示所需的信息位于的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。
// 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。
Found: 302,
//
// 摘要:
// 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Redirect 指示所需的信息位于的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。
// 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。
Redirect: 302,
//
// 摘要:
// 等效于 HTTP 状态 303。 System.Net.HttpStatusCode.SeeOther 自动将客户端重定向到的位置标头中指定作为公告的结果的
// URI。 对指定的位置标头的资源的请求将会执行与 GET。
SeeOther: 303,
//
// 摘要:
// 等效于 HTTP 状态 303。 System.Net.HttpStatusCode.RedirectMethod 自动将客户端重定向到的位置标头中指定作为公告的结果的
// URI。 对指定的位置标头的资源的请求将会执行与 GET。
RedirectMethod: 303,
//
// 摘要:
// 等效于 HTTP 状态 304。 System.Net.HttpStatusCode.NotModified 指示客户端的缓存的副本是最新。 不会传输资源的内容。
NotModified: 304,
//
// 摘要:
// 等效于 HTTP 状态 305。 System.Net.HttpStatusCode.UseProxy 指示该请求应使用的位置标头中指定的 uri 的代理服务器。
UseProxy: 305,
//
// 摘要:
// 等效于 HTTP 状态 306。 System.Net.HttpStatusCode.Unused 是对未完全指定的 HTTP/1.1 规范建议的扩展。
Unused: 306,
//
// 摘要:
// 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.TemporaryRedirect 指示请求信息位于的位置标头中指定的
// URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 当原始请求方法是 POST 时,重定向的请求还将使用 POST 方法。
TemporaryRedirect: 307,
//
// 摘要:
// 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.RedirectKeepVerb 指示请求信息位于的位置标头中指定的
// URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 当原始请求方法是 POST 时,重定向的请求还将使用 POST 方法。
RedirectKeepVerb: 307,
//
// 摘要:
// 等效于 HTTP 状态 400。 System.Net.HttpStatusCode.BadRequest 指示无法由服务器理解此请求。 System.Net.HttpStatusCode.BadRequest
// 如果没有其他错误适用,或者如果具体的错误是未知的或不具有其自己的错误代码发送。
BadRequest: 400,
//
// 摘要:
// 等效于 HTTP 状态 401。 System.Net.HttpStatusCode.Unauthorized 指示所请求的资源需要身份验证。 Www-authenticate
// 标头包含如何执行身份验证的详细信息。
Unauthorized: 401,
//
// 摘要:
// 等效于 HTTP 状态 402。 System.Net.HttpStatusCode.PaymentRequired 已保留供将来使用。
PaymentRequired: 402,
//
// 摘要:
// 等效于 HTTP 状态 403。 System.Net.HttpStatusCode.Forbidden 指示服务器拒绝无法完成请求。
Forbidden: 403,
//
// 摘要:
// 等效于 HTTP 状态 404。 System.Net.HttpStatusCode.NotFound 指示所请求的资源不存在的服务器上。
NotFound: 404,
//
// 摘要:
// 等效于 HTTP 状态 405。 System.Net.HttpStatusCode.MethodNotAllowed 指示请求方法 POST 或 GET
// 不允许对所请求的资源。
MethodNotAllowed: 405,
//
// 摘要:
// 等效于 HTTP 状态 406。 System.Net.HttpStatusCode.NotAcceptable 表示客户端已指定使用 Accept 标头,它将不接受任何可用的资源表示。
NotAcceptable: 406,
//
// 摘要:
// 等效于 HTTP 状态 407。 System.Net.HttpStatusCode.ProxyAuthenticationRequired 指示请求的代理要求身份验证。
// 代理服务器进行身份验证标头包含如何执行身份验证的详细信息。
ProxyAuthenticationRequired: 407,
//
// 摘要:
// 等效于 HTTP 状态 408。 System.Net.HttpStatusCode.RequestTimeout 指示客户端的服务器预期请求的时间内没有未发送请求。
RequestTimeout: 408,
//
// 摘要:
// 等效于 HTTP 状态 409。 System.Net.HttpStatusCode.Conflict 指示该请求可能不会执行由于在服务器上发生冲突。
Conflict: 409,
//
// 摘要:
// 等效于 HTTP 状态 410。 System.Net.HttpStatusCode.Gone 指示所请求的资源不再可用。
Gone: 410,
//
// 摘要:
// 等效于 HTTP 状态 411。 System.Net.HttpStatusCode.LengthRequired 指示缺少必需的内容长度标头。
LengthRequired: 411,
//
// 摘要:
// 等效于 HTTP 状态 412。 System.Net.HttpStatusCode.PreconditionFailed 表示失败,此请求的设置的条件,无法执行请求。
// 使用条件请求标头,如果匹配项,如设置条件无-If-match或如果-修改-自从。
PreconditionFailed: 412,
//
// 摘要:
// 等效于 HTTP 状态 413。 System.Net.HttpStatusCode.RequestEntityTooLarge 指示请求来说太大的服务器能够处理。
RequestEntityTooLarge: 413,
//
// 摘要:
// 等效于 HTTP 状态 414。 System.Net.HttpStatusCode.RequestUriTooLong 指示 URI 太长。
RequestUriTooLong: 414,
//
// 摘要:
// 等效于 HTTP 状态 415。 System.Net.HttpStatusCode.UnsupportedMediaType 指示该请求是不受支持的类型。
UnsupportedMediaType: 415,
//
// 摘要:
// 等效于 HTTP 416 状态。 System.Net.HttpStatusCode.RequestedRangeNotSatisfiable 指示从资源请求的数据范围不能返回,或者因为范围的开始处,然后该资源的开头或范围的末尾后在资源的结尾。
RequestedRangeNotSatisfiable: 416,
//
// 摘要:
// 等效于 HTTP 状态 417。 System.Net.HttpStatusCode.ExpectationFailed 指示无法由服务器满足 Expect
// 标头中给定。
ExpectationFailed: 417,
//
// 摘要:
// 等效于 HTTP 状态 426。 System.Net.HttpStatusCode.UpgradeRequired 指示客户端应切换到不同的协议,例如
// TLS/1.0。
UpgradeRequired: 426,
//
// 摘要:
// 等效于 HTTP 状态 500。 System.Net.HttpStatusCode.InternalServerError 表示在服务器上发生一般性错误。
InternalServerError: 500,
//
// 摘要:
// 等效于 HTTP 状态 501。 System.Net.HttpStatusCode.NotImplemented 指示服务器不支持所请求的功能。
NotImplemented: 501,
//
// 摘要:
// 等效于 HTTP 状态 502。 System.Net.HttpStatusCode.BadGateway 指示中间代理服务器从另一个代理或原始服务器接收到错误响应。
BadGateway: 502,
//
// 摘要:
// 等效于 HTTP 状态 503。 System.Net.HttpStatusCode.ServiceUnavailable 指示将服务器暂时不可用,通常是由于高负载或维护。
ServiceUnavailable: 503,
//
// 摘要:
// 等效于 HTTP 状态 504。 System.Net.HttpStatusCode.GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。
GatewayTimeout: 504,
//
// 摘要:
// 等效于 HTTP 状态 505。 System.Net.HttpStatusCode.HttpVersionNotSupported 指示服务器不支持请求的
// HTTP 版本。
HttpVersionNotSupported: 505
}

View File

@@ -0,0 +1,89 @@
import { api } from '@/common/api'
import { token } from '@/common/token'
import { GLOBAL_INFO_KEY } from '@/common/storage'
import { encryptByDES, decryptByDES } from '@/util/des'
import app from '@/main'
const setGlobal = (info) => {
app.$set(app.global, 'info', info)
window.sessionStorage.setItem(GLOBAL_INFO_KEY, encryptByDES(JSON.stringify(info)))
}
const removeGlobal = () => {
app.$set(app.global, 'info', undefined)
window.sessionStorage.removeItem(GLOBAL_INFO_KEY)
}
const getGlobal = () => {
return JSON.parse(decryptByDES(window.sessionStorage.getItem(GLOBAL_INFO_KEY)))
}
const doLogin = (args) => {
return new Promise((resolve, reject) => {
api.login(args).then(({ success, data, message }) => {
if (success) {
token.value = data
app.$message.success('登录成功')
if (app.$route.query.return) {
const r = decryptByDES(app.$route.query.return)
app.$router.replace(r)
} else {
app.$router.replace('/')
}
resolve()
} else {
app.$message.error(message)
reject()
}
}).catch(({ message }) => {
if (typeof message === 'object' && message[0]) {
app.$message.error(message[0].messages[0])
}
})
})
}
const doLogout = () => {
return new Promise((resolve, reject) => {
api.logout().then(({ success, message }) => {
if (success) {
removeGlobal()
token.value = ''
if (app.$route.path === '/') {
app.$router.replace('/login')
} else {
app.$router.replace({
path: '/login',
query: {
return: decodeURIComponent(encryptByDES(app.$route.path))
}
})
}
resolve()
} else {
app.$message.error(message)
reject()
}
})
})
}
const doCheck = () => {
return new Promise((resolve, reject) => {
api.checkLogin().then(({ result }) => {
setGlobal(result)
resolve()
}).catch(() => {
reject()
})
})
}
export {
doLogin,
doLogout,
doCheck,
setGlobal,
getGlobal
}

View File

@@ -0,0 +1,11 @@
const SESSION_KEY = '__SESSION'
const SETTING_KEY = '__SETTINGS'
const GLOBAL_INFO_KEY = '__GLOBAL_INFO'
const APP_MENU_KEY = '__APP_MENU'
export {
SESSION_KEY,
SETTING_KEY,
GLOBAL_INFO_KEY,
APP_MENU_KEY
}

View File

@@ -0,0 +1,19 @@
import { SESSION_KEY } from '@/common/storage'
const token = {
get value() {
return window.localStorage.getItem(SESSION_KEY)
},
set value(token) {
if (!token) {
window.localStorage.removeItem(SESSION_KEY)
} else {
window.localStorage.setItem(SESSION_KEY, token)
}
}
}
export {
SESSION_KEY,
token
}