diff --git a/README.md b/README.md
index cf2bc13b..5b20ccba 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,9 @@ npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com
+# 更新启动配置
+set NODE_OPTIONS=--openssl-legacy-provider
+
# 启动服务
npm run dev
```
diff --git a/package.json b/package.json
index 1aa9f709..567e3a18 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"clipboard": "2.0.8",
"core-js": "3.25.3",
"echarts": "5.4.0",
- "element-ui": "2.15.14",
+ "element-ui": "2.15.13",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
@@ -51,6 +51,7 @@
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
+ "skywalking-client-js": "^0.11.0",
"sortablejs": "1.10.2",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
@@ -67,7 +68,7 @@
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
- "compression-webpack-plugin": "6.1.2",
+ "compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
diff --git a/src/api/firm/firmInfo.js b/src/api/firm/firmInfo.js
new file mode 100644
index 00000000..ec419d24
--- /dev/null
+++ b/src/api/firm/firmInfo.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询企业基础信息列表
+export function listFirmInfo(query) {
+ return request({
+ url: '/system/firmInfo/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询企业基础信息详细
+export function getFirmInfo(id) {
+ return request({
+ url: '/system/firmInfo/' + id,
+ method: 'get'
+ })
+}
+
+// 新增企业基础信息
+export function addFirmInfo(data) {
+ return request({
+ url: '/system/firmInfo',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改企业基础信息
+export function updateFirmInfo(data) {
+ return request({
+ url: '/system/firmInfo',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除企业基础信息
+export function delFirmInfo(id) {
+ return request({
+ url: '/system/firmInfo/' + id,
+ method: 'delete'
+ })
+}
diff --git a/src/api/login.js b/src/api/login.js
index 3691abe3..c06c6bdd 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -1,7 +1,7 @@
import request from '@/utils/request'
// 登录方法
-export function login(username, password, code, uuid) {
+export function login(firmCode, username, password, code, uuid) {
return request({
url: '/auth/login',
headers: {
@@ -9,10 +9,11 @@ export function login(username, password, code, uuid) {
repeatSubmit: false
},
method: 'post',
- data: {username, password, code, uuid}
+ data: {firmCode, username, password, code, uuid}
})
}
+
// 注册方法
export function register(data) {
return request({
diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js
new file mode 100644
index 00000000..d373cb1d
--- /dev/null
+++ b/src/api/monitor/job.js
@@ -0,0 +1,71 @@
+import request from '@/utils/request'
+
+// 查询定时任务调度列表
+export function listJob(query) {
+ return request({
+ url: '/schedule/job/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询定时任务调度详细
+export function getJob(jobId) {
+ return request({
+ url: '/schedule/job/' + jobId,
+ method: 'get'
+ })
+}
+
+// 新增定时任务调度
+export function addJob(data) {
+ return request({
+ url: '/schedule/job',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改定时任务调度
+export function updateJob(data) {
+ return request({
+ url: '/schedule/job',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除定时任务调度
+export function delJob(jobId) {
+ return request({
+ url: '/schedule/job/' + jobId,
+ method: 'delete'
+ })
+}
+
+// 任务状态修改
+export function changeJobStatus(jobId, status) {
+ const data = {
+ jobId,
+ status
+ }
+ return request({
+ url: '/schedule/job/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+
+// 定时任务立即执行一次
+export function runJob(jobId, jobGroup) {
+ const data = {
+ jobId,
+ jobGroup
+ }
+ return request({
+ url: '/schedule/job/run',
+ method: 'put',
+ data: data
+ })
+}
diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js
new file mode 100644
index 00000000..eea2666e
--- /dev/null
+++ b/src/api/monitor/jobLog.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询调度日志列表
+export function listJobLog(query) {
+ return request({
+ url: '/schedule/job/log/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除调度日志
+export function delJobLog(jobLogId) {
+ return request({
+ url: '/schedule/job/log/' + jobLogId,
+ method: 'delete'
+ })
+}
+
+// 清空调度日志
+export function cleanJobLog() {
+ return request({
+ url: '/schedule/job/log/clean',
+ method: 'delete'
+ })
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 89d3972d..8bd36992 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -21,7 +21,7 @@ export function getUser(userId) {
// 新增用户
export function addUser(data) {
return request({
- url: '/system/user',
+ url: '/saas/user',
method: 'post',
data: data
})
diff --git a/src/main.js b/src/main.js
index 546f1251..0f2d185c 100644
--- a/src/main.js
+++ b/src/main.js
@@ -63,6 +63,41 @@ Vue.use(plugins)
Vue.use(VueMeta)
DictData.install()
+//skywalking监控系统
+import ClientMonitor from 'skywalking-client-js';
+
+//注册skywalking
+ClientMonitor.register({
+ service: 'muyu::cloud-ui',//应用名称
+ serviceVersion:'2.0.1',//应用版本号
+ traceSDKInternal:true,//追踪sdk
+ pagePath: location.href,//当前路由地址
+ useFmp: true,
+ vue:Vue,//vue实例
+});
+// Vue 报错上报到skywalking。
+Vue.config.errorHandler = (error) => {
+ console.error(error);
+ reportFrameErrors(error);
+}
+//监听ajax报错
+window.addEventListener('error', error=>{
+ console.log("error--->",error)
+ reportFrameErrors(error);
+}, true);
+
+//上报错误信息方法
+function reportFrameErrors(error){
+ ClientMonitor.reportFrameErrors({
+ service: 'muyu::cloud-ui',//应用名称
+ serviceVersion:'2.0.1',//应用版本号
+ pagePath: location.href,
+ vue:Vue,
+ }, error);
+}
+
+
+
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
diff --git a/src/permission.js b/src/permission.js
index 60342398..93ca18fe 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -5,12 +5,20 @@ import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {getToken} from '@/utils/auth'
import {isRelogin} from '@/utils/request'
+import Vue from 'vue'
NProgress.configure({showSpinner: false})
-const whiteList = ['/login', '/register']
+const whiteList = ['/login','/platform/login', '/register']
router.beforeEach((to, from, next) => {
+ //路由上报到skywalking
+ //因为有些参数已经在ClientMonitor.register中注册过了所以不用填加了。
+ ClientMonitor.setPerformance({
+ pagePath: location.href,//当前路由地址。
+ useFmp: true,
+ vue:Vue,
+ });
NProgress.start()
if (getToken()) {
to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
diff --git a/src/router/index.js b/src/router/index.js
index 186e20b7..873b448b 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -44,6 +44,10 @@ export const constantRoutes = [
path: '/login',
component: () => import('@/views/login'),
hidden: true
+ },{
+ path: '/platform/login',
+ component: () => import('@/views/login'),
+ hidden: true
},
{
path: '/register',
@@ -133,6 +137,20 @@ export const dynamicRoutes = [
}
]
},
+ {
+ path: '/monitor/job-log',
+ component: Layout,
+ hidden: true,
+ permissions: ['monitor:job:list'],
+ children: [
+ {
+ path: 'index/:jobId(\\d+)',
+ component: () => import('@/views/monitor/job/log'),
+ name: 'JobLog',
+ meta: {title: '调度日志', activeMenu: '/monitor/job'}
+ }
+ ]
+ },
{
path: '/tool/gen-edit',
component: Layout,
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 6c109a6e..52aedf5c 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,9 +1,10 @@
-import {getInfo, login, logout, refreshToken} from '@/api/login'
-import {getToken, removeToken, setExpiresIn, setToken} from '@/utils/auth'
+import {getInfo, login, logout, firmLogin, refreshToken} from '@/api/login'
+import {getEntCode, getToken, removeEntCode, removeToken, setEntCode, setExpiresIn, setToken} from '@/utils/auth'
const user = {
state: {
token: getToken(),
+ ent_code: getEntCode(),
id: '',
name: '',
avatar: '',
@@ -15,6 +16,9 @@ const user = {
SET_TOKEN: (state, token) => {
state.token = token
},
+ SET_ENT_CODE: (state, ent_code) => {
+ state.ent_code = ent_code
+ },
SET_EXPIRES_IN: (state, time) => {
state.expires_in = time
},
@@ -55,6 +59,29 @@ const user = {
})
})
},
+ // 企业登录
+ firmLogin({commit}, userInfo) {
+ const firmCode = userInfo.firmCode.trim()
+ const firmUser = userInfo.firmUser.trim()
+ const firmPassword = userInfo.firmPassword.trim()
+ const rememberMe = userInfo.rememberMe
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+ return new Promise((resolve, reject) => {
+ login(firmCode,firmUser,firmPassword, rememberMe, code, uuid).then(res => {
+ let data = res.data
+ setToken(data.access_token)
+ setEntCode(data.ent_code)
+ commit('SET_TOKEN', data.access_token)
+ commit('SET_ENT_CODE', data.ent_code)
+ commit('SET_EXPIRES_IN', data.expires_in)
+ setExpiresIn(data.expires_in)
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
// 获取用户信息
GetInfo({commit, state}) {
@@ -96,9 +123,11 @@ const user = {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
+ commit('SET_ENT_CODE', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
+ removeEntCode()
resolve()
}).catch(error => {
reject(error)
@@ -110,7 +139,9 @@ const user = {
FedLogOut({commit}) {
return new Promise(resolve => {
commit('SET_TOKEN', '')
+ commit('SET_ENT_CODE', '')
removeToken()
+ removeEntCode()
resolve()
})
}
diff --git a/src/utils/auth.js b/src/utils/auth.js
index a673d227..837458f9 100644
--- a/src/utils/auth.js
+++ b/src/utils/auth.js
@@ -2,6 +2,8 @@ import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
+const EntCode = 'ent-code'
+
const ExpiresInKey = 'Admin-Expires-In'
export function getToken() {
@@ -16,6 +18,18 @@ export function removeToken() {
return Cookies.remove(TokenKey)
}
+export function getEntCode() {
+ return Cookies.get(EntCode)
+}
+
+export function setEntCode(entCode) {
+ return Cookies.set(EntCode, entCode)
+}
+
+export function removeEntCode() {
+ return Cookies.remove(EntCode)
+}
+
export function getExpiresIn() {
return Cookies.get(ExpiresInKey) || -1
}
diff --git a/src/utils/request.js b/src/utils/request.js
index 47d1bcb4..3ea65ed8 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -1,7 +1,7 @@
import axios from 'axios'
import {Loading, Message, MessageBox, Notification} from 'element-ui'
import store from '@/store'
-import {getToken} from '@/utils/auth'
+import {getEntCode, getToken} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import {blobValidate, tansParams} from "@/utils/muyu";
import cache from '@/plugins/cache'
@@ -17,7 +17,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
- timeout: 10000
+ timeout: 20000
})
// request拦截器
@@ -29,6 +29,9 @@ service.interceptors.request.use(config => {
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
+ if (getEntCode() && !isToken) {
+ config.headers['ent-code'] = getEntCode() // 让每个请求携带自定义token 请根据实际情况自行修改
+ }
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);
@@ -73,7 +76,6 @@ service.interceptors.request.use(config => {
// 响应拦截器
service.interceptors.response.use(res => {
- debugger
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
diff --git a/src/views/firm/firmInfo/index.vue b/src/views/firm/firmInfo/index.vue
new file mode 100644
index 00000000..8e8f9794
--- /dev/null
+++ b/src/views/firm/firmInfo/index.vue
@@ -0,0 +1,310 @@
+
+
+ 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
+
+ 当前版本: v{{ version }}
+
+
+
+ 领取阿里云通用云产品1888优惠券
+
+
+
+ 领取腾讯云通用云产品2860优惠券
+
+
+ 阿里云服务器折扣区
+
+
+ 云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
+
+
+ 若依后台管理框架
+ 技术选型
+ 后端技术
+
+
+ 前端技术
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 你可以请作者喝杯咖啡表示鼓励
+