Commit 05842014 authored by 萌萌哒SAKURA酱's avatar 萌萌哒SAKURA酱

Merge branch 'leng_dev' of https://gitee.ltd/pigx/pigx-ui into sakura_dev

parents e8933196 ebdf00cd
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
<template>
<div id="app">
<router-view />
<router-view/>
</div>
</template>
<script>
export default {
name: 'app',
data () {
return {}
},
watch: {},
created () { },
methods: {},
computed: {}
}
export default {
name: 'app',
data() {
return {}
},
watch: {},
created() {
},
methods: {},
computed: {}
}
</script>
<style lang="scss">
#app {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
\ No newline at end of file
#app {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
......@@ -33,10 +33,10 @@ export function delObj(id) {
}
export function deploy(id) {
return request({
url: '/act/model/deploy/' + id,
method: 'post'
})
return request({
url: '/act/model/deploy/' + id,
method: 'post'
})
}
......
......@@ -41,10 +41,10 @@ export function getObj(id) {
}
export function submit(id) {
return request({
url: '/act/leave-bill/submit/' + id,
method: 'get'
})
return request({
url: '/act/leave-bill/submit/' + id,
method: 'get'
})
}
export function delObj(id) {
......
......@@ -32,9 +32,9 @@ export function delObj(id) {
})
}
export function status(id,type) {
return request({
url: '/act/process/status/' + id + "/" + type,
method: 'put'
})
export function status(id, type) {
return request({
url: '/act/process/status/' + id + "/" + type,
method: 'put'
})
}
......@@ -26,23 +26,23 @@ export function fetchList(query) {
}
export function fetchDetail(id) {
return request({
url: '/act/task/'+id,
method: 'get'
})
return request({
url: '/act/task/' + id,
method: 'get'
})
}
export function fetchComment(id) {
return request({
url: '/act/task/comment/'+id,
method: 'get'
})
return request({
url: '/act/task/comment/' + id,
method: 'get'
})
}
export function doTask(obj) {
return request({
url: '/act/task',
method: 'post',
data: obj
})
return request({
url: '/act/task',
method: 'post',
data: obj
})
}
......@@ -18,11 +18,11 @@
import request from '@/router/axios'
export function fetchDeptTree(query) {
return request({
url: '/admin/dept/user-tree',
method: 'get',
params: query
})
return request({
url: '/admin/dept/user-tree',
method: 'get',
params: query
})
}
export function fetchTree(query) {
......
......@@ -16,12 +16,14 @@
*/
import request from '@/router/axios'
export function GetMenu() {
return request({
url: '/admin/menu',
method: 'get'
})
}
export function fetchTree(query) {
return request({
url: '/admin/menu/tree',
......
......@@ -24,10 +24,11 @@ export function fetchList(query) {
params: query
})
}
export function putObj(obj) {
return request({
url: '/admin/route',
method: 'put',
data: obj
})
return request({
url: '/admin/route',
method: 'put',
data: obj
})
}
......@@ -18,46 +18,46 @@
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/user/page',
method: 'get',
params: query
})
return request({
url: '/admin/user/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/user',
method: 'post',
data: obj
})
return request({
url: '/admin/user',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/user/' + id,
method: 'get'
})
return request({
url: '/admin/user/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/user/' + id,
method: 'delete'
})
return request({
url: '/admin/user/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/user',
method: 'put',
data: obj
})
return request({
url: '/admin/user',
method: 'put',
data: obj
})
}
export function getDetails(obj) {
return request({
url: '/admin/user/details/' + obj,
method: 'get'
})
return request({
url: '/admin/user/details/' + obj,
method: 'get'
})
}
......@@ -26,16 +26,22 @@ export function fetchList(query) {
}
export function handleDown(table) {
request({
return request({
url: '/gen/generator/code',
method: 'post',
data: table,
responseType: 'arraybuffer'
}).then((response) => { // 处理返回的文件流
let blob = new Blob([response.data], { type: 'application/zip' } )
let link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = table.tableName + '.zip'
link.click()
let blob = new Blob([response.data], {type: 'application/zip'})
let filename = table.tableName + '.zip'
let link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename;
document.body.appendChild(link);
link.click();
window.setTimeout(function () {
URL.revokeObjectURL(blob);
document.body.removeChild(link);
}, 0);
})
}
......@@ -15,56 +15,57 @@
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export const loginByUsername = (username, password, code, randomStr) => {
var grant_type = 'password'
var scope = 'server'
return request({
url: '/auth/oauth/token',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: { username, password, randomStr, code, grant_type, scope }
})
var grant_type = 'password'
var scope = 'server'
return request({
url: '/auth/oauth/token',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: {username, password, randomStr, code, grant_type, scope}
})
}
export const loginByMobile = (mobile, code) => {
var grant_type = 'mobile'
return request({
url: '/auth/mobile/token/sms',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: { mobile: 'SMS@' + mobile,code: code, grant_type }
})
var grant_type = 'mobile'
return request({
url: '/auth/mobile/token/sms',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: {mobile: 'SMS@' + mobile, code: code, grant_type}
})
}
export const loginBySocial = (state, code) => {
var grant_type = 'mobile'
return request({
url: '/auth/mobile/token/social',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: { mobile: state + '@' + code, grant_type }
})
var grant_type = 'mobile'
return request({
url: '/auth/mobile/token/social',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: {mobile: state + '@' + code, grant_type}
})
}
export const getUserInfo = () => {
return request({
url: '/admin/user/info',
method: 'get'
})
return request({
url: '/admin/user/info',
method: 'get'
})
}
export const logout = () => {
return request({
url: '/auth/token/logout',
method: 'delete'
})
return request({
url: '/auth/token/logout',
method: 'delete'
})
}
......@@ -15,10 +15,10 @@ if (env.NODE_ENV == 'development') {
}
export {
baseUrl,
actUrl,
iconfontUrl,
iconfontVersion,
codeUrl,
env
baseUrl,
actUrl,
iconfontUrl,
iconfontVersion,
codeUrl,
env
}
......@@ -15,59 +15,66 @@
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
menuWidth: 150,
menuBtn: true,
align: 'center',
editBtn: false,
delBtn: false,
menuType:'menu',
searchShow: false,
labelWidth: 120,
column: [{
fixed: true,
label: '模型ID',
prop: 'id',
editDisabled: true,
addVisdiplay: false
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
menuWidth: 150,
menuBtn: true,
align: 'center',
editBtn: false,
delBtn: false,
menuType: 'menu',
searchShow: false,
labelWidth: 120,
column: [{
fixed: true,
label: '模型ID',
prop: 'id',
editDisabled: true,
addVisdiplay: false
}, {
fixed: true,
label: '模型标识',
prop: 'key',
editDisabled: true
}, {
label: '流程分类',
prop: 'category',
search: true
}, {
label: '模型名称',
prop: 'name'
},
{
label: '描述',
prop: 'desc',
hide: true,
editDisabled: false,
addVisdiplay: true
}, {
fixed: true,
label: '模型标识',
prop: 'key',
editDisabled: true
label: '版本号',
prop: 'version',
editDisabled: true,
addVisdiplay: false
}, {
label: '流程分类',
prop: 'category',
search: true
width: 150,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
}, {
label: '模型名称',
prop: 'name'
}, {
label: '版本号',
prop: 'version',
editDisabled: true,
addVisdiplay: false
}, {
width: 150,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
}, {
width: 150,
label: '最后更新时间',
prop: 'lastUpdateTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
width: 150,
label: '最后更新时间',
prop: 'lastUpdateTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
}]
}
......@@ -25,60 +25,60 @@ export const tableOption = {
'editBtn': false,
'delBtn': false,
'addBtn': false,
menuType:'menu',
menuType: 'menu',
'dicUrl': '/admin/dict/type/leave_status',
'column': [
{
{
label: 'ID',
prop: 'leaveId',
editDisabled: true,
addVisdiplay: false
},
{
{
label: '申请人',
prop: 'username',
editDisabled: true,
addVisdiplay: false
},
{
{
label: '天数',
prop: 'days',
type: 'number'
},
{
{
label: '请假时间',
prop: 'leaveTime',
type: 'datetime',
overHidden:true,
overHidden: true,
format: 'yyyy-MM-dd HH:mm',
valueFormat: "yyyy-MM-dd hh:mm:ss"
},
{
label: '提交时间',
prop: 'createTime',
type: 'datetime',
overHidden:true,
format: 'yyyy-MM-dd HH:mm',
editDisabled: true,
addVisdiplay: false,
hide: true
},
{
label: '状态',
prop: 'state',
type: 'select',
dicData: 'leave_status',
search: true,
addVisdiplay: false
},
{
label: '备注',
prop: 'content',
type:'textarea',
overHidden:true,
minRows:2,
row:true,
span:24
}
},
{
label: '提交时间',
prop: 'createTime',
type: 'datetime',
overHidden: true,
format: 'yyyy-MM-dd HH:mm',
editDisabled: true,
addVisdiplay: false,
hide: true
},
{
label: '状态',
prop: 'state',
type: 'select',
dicData: 'leave_status',
search: true,
addVisdiplay: false
},
{
label: '备注',
prop: 'content',
type: 'textarea',
overHidden: true,
minRows: 2,
row: true,
span: 24
}
]
}
......@@ -15,47 +15,47 @@
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
menuWidth: 150,
menuBtn: true,
align: 'center',
addBtn: false,
editBtn: false,
delBtn: false,
menuType:'menu',
searchShow: false,
column: [{
fixed: true,
label: '流程ID',
prop: 'processonDefinitionId'
}, {
fixed: true,
label: '模型标识',
prop: 'key',
editDisabled: true
}, {
label: '流程分类',
prop: 'category',
search: true
}, {
label: '模型名称',
prop: 'name'
}, {
label: '版本号',
prop: 'revision',
editDisabled: true,
addVisdiplay: false
}, {
label: '部署时间',
prop: 'deploymentTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
}]
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
menuWidth: 150,
menuBtn: true,
align: 'center',
addBtn: false,
editBtn: false,
delBtn: false,
menuType: 'menu',
searchShow: false,
column: [{
fixed: true,
label: '流程ID',
prop: 'processonDefinitionId'
}, {
fixed: true,
label: '模型标识',
prop: 'key',
editDisabled: true
}, {
label: '流程分类',
prop: 'category',
search: true
}, {
label: '模型名称',
prop: 'name'
}, {
label: '版本号',
prop: 'revision',
editDisabled: true,
addVisdiplay: false
}, {
label: '部署时间',
prop: 'deploymentTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'timestamp',
editDisabled: true,
addVisdiplay: false
}]
}
......@@ -15,128 +15,128 @@
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'stripe': true,
'menuAlign': "center",
'align': "center",
'menuBtn': true,
'editBtn': false,
'delBtn': false,
'addBtn': false,
menuType: 'menu',
'dic': [],
'column': [
{
label: 'ID',
prop: 'taskId',
editDisabled: true,
addVisdiplay: false
},
{
label: '任务名称',
prop: 'taskName',
editDisabled: true,
addVisdiplay: false
},
{
label: '提交时间',
prop: 'time',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm'
}
]
'border': true,
'index': true,
'stripe': true,
'menuAlign': "center",
'align': "center",
'menuBtn': true,
'editBtn': false,
'delBtn': false,
'addBtn': false,
menuType: 'menu',
'dic': [],
'column': [
{
label: 'ID',
prop: 'taskId',
editDisabled: true,
addVisdiplay: false
},
{
label: '任务名称',
prop: 'taskName',
editDisabled: true,
addVisdiplay: false
},
{
label: '提交时间',
prop: 'time',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm'
}
]
}
export const formOption = {
submitBtn: false,
emptytBtn: false,
row:true,
span:12,
column: [
{
label: "任务编号",
prop: "taskId",
disabled: true
},
{
label: "任务名称",
prop: "taskName",
disabled: true
},
{
label: "申请人",
prop: "username",
disabled: true
},
{
label: "请假时长",
prop: "days",
disabled: true
},
{
label: "请假时间",
prop: "createTime",
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
disabled: true
},
{
label: '提交时间',
prop: 'time',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
disabled: true
},
{
label: '事由',
prop: 'content',
type:'textarea',
minRows:2,
row:true,
span:24,
disabled: true
},
{
label: '批注',
prop: 'comment',
type:'textarea',
minRows:2,
row:true,
span:24,
rules: [{
required: true,
message: "请输入备注",
trigger: "blur"
}]
}
]
submitBtn: false,
emptytBtn: false,
row: true,
span: 12,
column: [
{
label: "任务编号",
prop: "taskId",
disabled: true
},
{
label: "任务名称",
prop: "taskName",
disabled: true
},
{
label: "申请人",
prop: "username",
disabled: true
},
{
label: "请假时长",
prop: "days",
disabled: true
},
{
label: "请假时间",
prop: "createTime",
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
disabled: true
},
{
label: '提交时间',
prop: 'time',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
disabled: true
},
{
label: '事由',
prop: 'content',
type: 'textarea',
minRows: 2,
row: true,
span: 24,
disabled: true
},
{
label: '批注',
prop: 'comment',
type: 'textarea',
minRows: 2,
row: true,
span: 24,
rules: [{
required: true,
message: "请输入备注",
trigger: "blur"
}]
}
]
}
export const taskOption = {
menu:false,
page:false,
addBtn:false,
align:'center',
menuAlign:'center',
column:[
{
label:'id',
prop:'id',
hide: true
},
{
label:'用户',
prop:'userId'
},
{
label:'批注',
prop:'fullMessage'
},{
label: "操作时间",
prop: "time",
type: "datetime",
format: "yyyy-MM-dd hh:mm:ss",
valueFormat: "yyyy-MM-dd hh:mm:ss",
}
]
menu: false,
page: false,
addBtn: false,
align: 'center',
menuAlign: 'center',
column: [
{
label: 'id',
prop: 'id',
hide: true
},
{
label: '用户',
prop: 'userId'
},
{
label: '批注',
prop: 'fullMessage'
}, {
label: "操作时间",
prop: "time",
type: "datetime",
format: "yyyy-MM-dd hh:mm:ss",
valueFormat: "yyyy-MM-dd hh:mm:ss",
}
]
}
......@@ -25,16 +25,17 @@ const DIC = {
}]
}
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'align': 'center',
'editBtn': false,
'delBtn': false,
'dic': [],
'column': [{
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
align: 'center',
editBtn: false,
delBtn: false,
viewBtn: true,
dic: [],
column: [{
width: 150,
label: '编号',
prop: 'clientId',
......@@ -46,11 +47,12 @@ export const tableOption = {
trigger: 'blur'
}]
}, {
width: 300,
label: '密钥',
prop: 'clientSecret',
align: 'center',
sortable: true,
overHidden: true,
width: 120,
rules: [{
required: true,
message: '请输入clientSecret',
......@@ -71,7 +73,7 @@ export const tableOption = {
prop: 'authorizedGrantTypes',
align: 'center',
width: 150,
hide: true,
overHidden: true,
rules: [{
required: true,
message: '请输入授权模式',
......@@ -90,22 +92,20 @@ export const tableOption = {
width: 150,
hide: true
}, {
label: '请求令牌',
label: '令牌时效',
prop: 'accessTokenValidity',
align: 'center',
width: 150,
hide: true
width: 80
}, {
label: '刷新令牌',
label: '刷新时效',
prop: 'refreshTokenValidity',
align: 'center',
width: 150,
hide: true
width: 80
}, {
label: '扩展信息',
prop: 'additionalInformation',
align: 'center',
width: 150,
width: 80,
hide: true
}, {
label: '自动放行',
......@@ -113,7 +113,7 @@ export const tableOption = {
align: 'center',
type: 'radio',
dicData: DIC.vaild,
width: 150,
width: 80,
rules: [{
required: true,
message: '请选择是否放行',
......@@ -123,6 +123,7 @@ export const tableOption = {
label: '资源ID',
prop: 'resourceIds',
align: 'center',
hide: true,
width: 150
}]
}
......@@ -15,32 +15,33 @@
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'menuWidth': 150,
'align': 'center',
'refreshBtn': true,
'showClomnuBtn': false,
'searchSize': 'mini',
'addBtn': false,
'editBtn': false,
'delBtn': false,
'dicUrl': '/admin/dict/type/log_type',
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
menuWidth: 150,
align: 'center',
refreshBtn: true,
showClomnuBtn: false,
searchSize: 'mini',
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: true,
dicUrl: '/admin/dict/type/log_type',
props: {
label: 'label',
value: 'value'
},
'column': [{
column: [{
label: '类型',
prop: 'type',
type: 'select',
dicData: 'log_type',
search: true
}, {
label: '请求接口名称',
label: '标题',
prop: 'title'
}, {
label: 'IP地址',
......@@ -52,9 +53,11 @@ export const tableOption = {
label: '客户端',
prop: 'serviceId'
}, {
width: 80,
label: '请求时间',
prop: 'time'
}, {
width: 150,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
......
......@@ -15,74 +15,74 @@
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
editBtn: false,
delBtn: false,
align: 'center',
addBtn: false,
column: [{
fixed: true,
label: 'id',
prop: 'roleId',
span: 24,
editDisabled: true,
addVisdiplay: false,
}, {
fixed: true,
label: '角色名称',
prop: 'roleName',
span: 24,
rules: [{
required: true,
message: '角色名称不能为空',
trigger: 'blur'
},
{
min: 3,
max: 20,
message: '长度在 3 到 20 个字符',
trigger: 'blur'
}
]
}, {
width: 150,
label: '角色标识',
prop: 'roleCode',
span: 24,
editDisabled: true,
rules: [{
required: true,
message: '角色标识不能为空',
trigger: 'blur'
},
{
min: 3,
max: 20,
message: '长度在 3 到 20 个字符',
trigger: 'blur'
}
]
}, {
width: 180,
label: '角色描述',
prop: 'roleDesc',
overHidden: true,
type: 'textarea',
minRows: 6,
span: 24,
}, {
width: 180,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
editDisabled: true,
addVisdiplay: false,
span: 24,
}]
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
editBtn: false,
delBtn: false,
align: 'center',
addBtn: false,
column: [{
fixed: true,
label: 'id',
prop: 'roleId',
span: 24,
editDisabled: true,
addVisdiplay: false,
}, {
fixed: true,
label: '角色名称',
prop: 'roleName',
span: 24,
rules: [{
required: true,
message: '角色名称不能为空',
trigger: 'blur'
},
{
min: 3,
max: 20,
message: '长度在 3 到 20 个字符',
trigger: 'blur'
}
]
}, {
width: 150,
label: '角色标识',
prop: 'roleCode',
span: 24,
editDisabled: true,
rules: [{
required: true,
message: '角色标识不能为空',
trigger: 'blur'
},
{
min: 3,
max: 20,
message: '长度在 3 到 20 个字符',
trigger: 'blur'
}
]
}, {
width: 180,
label: '角色描述',
prop: 'roleDesc',
overHidden: true,
type: 'textarea',
minRows: 6,
span: 24,
}, {
width: 180,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
editDisabled: true,
addVisdiplay: false,
span: 24,
}]
}
......@@ -16,73 +16,77 @@
*/
export const tableOption = {
"border": true,
"index": true,
"stripe": true,
"menuAlign": "center",
"align": "center",
"editBtn": false,
"delBtn": false,
"addBtn": false,
'dicUrl': '/admin/dict/type/social_type',
"column": [{
label: 'ID',
prop: 'id',
hide: true,
addVisdiplay: false,
editDisabled: true
},
{
label: '类型',
prop: 'type',
type: 'select',
dicData: 'social_type',
search: true,
rules: [{
required: true,
message: '请选择类型',
trigger: 'blur'
}]
},
{
label: '描述',
prop: 'remark'
},
{
label: 'appId',
prop: 'appId',
rules: [{
required: true,
message: '请输入appId',
trigger: 'blur'
}]
},
{
label: 'appSecret',
prop: 'appSecret',
rules: [{
required: true,
message: '请输入appSecret',
trigger: 'blur'
}]
},
{
label: '回调地址',
prop: 'redirectUrl',
rules: [{
required: true,
message: '请输入回调地址',
trigger: 'blur'
}]
},
{
valueFormat: 'timestamp',
format: 'yyyy-MM-dd hh:mm:ss',
label: '创建时间',
prop: 'createTime',
align: 'center',
addVisdiplay: false,
editDisabled: true
}
]
}
\ No newline at end of file
border: true,
index: true,
stripe: true,
menuAlign: "center",
align: "center",
editBtn: false,
delBtn: false,
addBtn: false,
viewBtn: true,
dicUrl: '/admin/dict/type/social_type',
column: [{
label: 'ID',
prop: 'id',
hide: true,
addVisdiplay: false,
editDisabled: true
},
{
label: '类型',
prop: 'type',
type: 'select',
dicData: 'social_type',
search: true,
rules: [{
required: true,
message: '请选择类型',
trigger: 'blur'
}]
},
{
label: '描述',
prop: 'remark'
},
{
label: 'appId',
prop: 'appId',
overHidden: true,
rules: [{
required: true,
message: '请输入appId',
trigger: 'blur'
}]
},
{
label: 'appSecret',
prop: 'appSecret',
overHidden: true,
rules: [{
required: true,
message: '请输入appSecret',
trigger: 'blur'
}]
},
{
label: '回调地址',
prop: 'redirectUrl',
hide: true,
rules: [{
required: true,
message: '请输入回调地址',
trigger: 'blur'
}]
},
{
valueFormat: 'timestamp',
format: 'yyyy-MM-dd hh:mm:ss',
label: '创建时间',
prop: 'createTime',
align: 'center',
addVisdiplay: false,
editDisabled: true
}
]
}
......@@ -16,53 +16,54 @@
*/
const DIC = {
vaild: [{
label: '否',
value: 'false'
}, {
label: '是',
value: 'true'
}]
vaild: [{
label: '否',
value: 'false'
}, {
label: '是',
value: 'true'
}]
}
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'align': 'center',
'addBtn': false,
'editBtn': false,
'delBtn': false,
'dic': [],
'column': [{
label: '用户ID',
prop: 'user_id',
align: 'center'
}, {
label: '用户名',
prop: 'user_name',
align: 'center'
}, {
label: '令牌',
prop: 'token_value',
align: 'center',
'overHidden': true
}, {
label: '类型',
prop: 'token_type',
align: 'center'
}, {
label: '过期时间',
prop: 'expires_in',
align: 'center'
}, {
label: '客户端',
prop: 'client_id',
align: 'center'
}, {
label: '授权类型',
prop: 'grant_type',
align: 'center'
}]
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
align: 'center',
viewBtn: true,
addBtn: false,
editBtn: false,
delBtn: false,
dic: [],
column: [{
label: '用户ID',
prop: 'user_id',
align: 'center'
}, {
label: '用户名',
prop: 'user_name',
align: 'center'
}, {
label: '令牌',
prop: 'token_value',
align: 'center',
'overHidden': true
}, {
label: '类型',
prop: 'token_type',
align: 'center'
}, {
label: '过期时间',
prop: 'expires_in',
align: 'center'
}, {
label: '客户端',
prop: 'client_id',
align: 'center'
}, {
label: '授权类型',
prop: 'grant_type',
align: 'center'
}]
}
......@@ -14,132 +14,133 @@
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import { getDetails } from "@/api/admin/user";
import {getDetails} from "@/api/admin/user";
var validateUsername = (rule, value, callback) => {
getDetails(value).then(response => {
if (window.boxType === 'edit') callback()
let result = response.data.data
if (result !== null) {
callback(new Error('用户名已经存在'))
} else {
callback()
}
});
getDetails(value).then(response => {
if (window.boxType === 'edit') callback()
let result = response.data.data
if (result !== null) {
callback(new Error('用户名已经存在'))
} else {
callback()
}
});
};
export const tableOption = {
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
editBtn: false,
delBtn: false,
align: 'center',
addBtn: false,
column: [{
fixed: true,
label: 'id',
prop: 'userId',
span: 24,
hide: true,
editDisabled: true,
addVisdiplay: false,
}, {
fixed: true,
label: '用户名',
prop: 'username',
editDisabled: true,
solt: true,
search: true,
span: 24,
rules: [{
required: true,
message: "请输入用户名",
},
{
min: 3,
max: 20,
message: "长度在 3 到 20 个字符",
trigger: "blur"
},
{ validator: validateUsername, trigger: 'blur' }
]
}, {
label: '密码',
prop: 'password',
type: 'password',
value: '',
hide: true,
span: 24,
rules: [{
min: 6,
max: 20,
message: "长度在 6 到 20 个字符",
trigger: "blur"
}]
}, {
label: '所属部门',
prop: 'deptId',
formsolt: true,
solt: true,
span: 24,
hide: true,
rules: [{
required: true,
message: "请选择部门",
trigger: "blur"
}]
}, {
label: '手机号',
prop: 'phone',
type: 'phone',
value: '',
span: 24,
rules: [{
min: 6,
max: 20,
message: "长度在 11 个字符",
trigger: "blur"
}]
},{
label: '角色',
prop: 'role',
formsolt: true,
solt: true,
overHidden: true,
span: 24,
rules: [{
required: true,
message: "请选择角色",
trigger: "blur"
}],
}, {
label: '状态',
prop: "lockFlag",
type: "select",
solt: true,
span: 24,
rules: [{
required: true,
message: "请选择状态",
trigger: "blur"
}],
dicData: [{
label: '有效',
value: "0"
}, {
label: '锁定',
value: "9"
}]
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
editBtn: false,
delBtn: false,
align: 'center',
addBtn: false,
column: [{
fixed: true,
label: 'id',
prop: 'userId',
span: 24,
hide: true,
editDisabled: true,
addVisdiplay: false,
}, {
fixed: true,
label: '用户名',
prop: 'username',
editDisabled: true,
solt: true,
search: true,
span: 24,
rules: [{
required: true,
message: "请输入用户名",
},
{
min: 3,
max: 20,
message: "长度在 3 到 20 个字符",
trigger: "blur"
},
{validator: validateUsername, trigger: 'blur'}
]
}, {
label: '密码',
prop: 'password',
type: 'password',
value: '',
hide: true,
span: 24,
rules: [{
min: 6,
max: 20,
message: "长度在 6 到 20 个字符",
trigger: "blur"
}]
}, {
label: '所属部门',
prop: 'deptId',
formsolt: true,
solt: true,
span: 24,
hide: true,
rules: [{
required: true,
message: "请选择部门",
trigger: "blur"
}]
}, {
label: '手机号',
prop: 'phone',
type: 'phone',
value: '',
span: 24,
rules: [{
min: 6,
max: 20,
message: "长度在 11 个字符",
trigger: "blur"
}]
}, {
label: '角色',
prop: 'role',
formsolt: true,
solt: true,
overHidden: true,
span: 24,
rules: [{
required: true,
message: "请选择角色",
trigger: "blur"
}],
}, {
label: '状态',
prop: "lockFlag",
type: "select",
solt: true,
span: 24,
rules: [{
required: true,
message: "请选择状态",
trigger: "blur"
}],
dicData: [{
label: '有效',
value: "0"
}, {
width: 180,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
editDisabled: true,
addVisdiplay: false,
span: 24
label: '锁定',
value: "9"
}]
}, {
width: 180,
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
editDisabled: true,
addVisdiplay: false,
span: 24
}]
}
......@@ -15,84 +15,84 @@
* Author: lengleng (wangiegie@gmail.com)
*/
const DIC = {
isSuccess: [{
label: '成功',
value: 1
},
{
label: '失败',
value: 0
}
]
isSuccess: [{
label: '成功',
value: 1
},
{
label: '失败',
value: 0
}
]
}
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': "center",
'align': "center",
'editBtn': false,
'delBtn': false,
'addBtn': false,
'viewBtn':true,
'dic': [],
'column': [
{
label: 'ID',
prop: 'id',
hide: true
},
{
label: '任务名称',
prop: 'jobName'
},
{
label: '任务ID',
prop: 'taskId',
hide: true,
overHidden: true
},
{
label: '主机名',
prop: 'hostname',
hide: true
},
{
label: 'IP',
prop: 'ip'
},
{
width: 80,
label: '分片项',
prop: 'shardingItem'
},
{
label: '执行源',
prop: 'executionSource',
hide: true
},
{
label: '失败原因',
prop: 'failureCause',
hide: true
},
{
width: 100,
label: '执行结果',
prop: 'isSuccess',
type: 'select',
dicData: DIC.isSuccess,
},
{
label: '开始时间',
prop: 'startTime',
hide: true
},
{
label: '完成时间',
prop: 'completeTime'
},
]
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': "center",
'align': "center",
'editBtn': false,
'delBtn': false,
'addBtn': false,
'viewBtn': true,
'dic': [],
'column': [
{
label: 'ID',
prop: 'id',
hide: true
},
{
label: '任务名称',
prop: 'jobName'
},
{
label: '任务ID',
prop: 'taskId',
hide: true,
overHidden: true
},
{
label: '主机名',
prop: 'hostname',
hide: true
},
{
label: 'IP',
prop: 'ip'
},
{
width: 80,
label: '分片项',
prop: 'shardingItem'
},
{
label: '执行源',
prop: 'executionSource',
hide: true
},
{
label: '失败原因',
prop: 'failureCause',
hide: true
},
{
width: 100,
label: '执行结果',
prop: 'isSuccess',
type: 'select',
dicData: DIC.isSuccess,
},
{
label: '开始时间',
prop: 'startTime',
hide: true
},
{
label: '完成时间',
prop: 'completeTime'
},
]
}
......@@ -16,89 +16,89 @@
*/
const DIC = {
state: [{
label: '准备中',
value: 'TASK_STAGING'
},
{
label: '执行中',
value: 'TASK_RUNNING'
}, {
label: '已经完成',
value: 'TASK_FINISHED'
}
]
state: [{
label: '准备中',
value: 'TASK_STAGING'
},
{
label: '执行中',
value: 'TASK_RUNNING'
}, {
label: '已经完成',
value: 'TASK_FINISHED'
}
]
}
export const tableOption = {
"border": true,
"index": true,
"stripe": true,
"menuAlign": "center",
"align": "center",
"editBtn": false,
"delBtn": false,
"addBtn": false,
"viewBtn": true,
"dic": [],
"column": [{
label: 'ID',
prop: 'id',
hide: true
"border": true,
"index": true,
"stripe": true,
"menuAlign": "center",
"align": "center",
"editBtn": false,
"delBtn": false,
"addBtn": false,
"viewBtn": true,
"dic": [],
"column": [{
label: 'ID',
prop: 'id',
hide: true
},
{
label: '作业名称',
prop: 'jobName',
search: true
},
{
label: '原任务',
prop: 'originalTaskId',
hide: true,
width: 100
},
{
label: '任务ID',
prop: 'taskId',
hide: true
},
{
label: '服务器IP',
prop: 'slaveId'
},
{
label: '资源',
prop: 'source',
hide: true
},
{
label: '执行类型',
prop: 'executionType',
hide: true
},
{
width: 100,
label: '分片项',
prop: 'shardingItem'
},
{
width: 100,
label: '状态',
prop: 'state',
type: 'select',
dicData: DIC.state,
search: true
},
{
label: '消息',
prop: 'message',
width: 100,
overHidden: true,
hide: true
},
{
label: '作业名称',
prop: 'jobName',
search: true
},
{
label: '原任务',
prop: 'originalTaskId',
hide: true,
width: 100
},
{
label: '任务ID',
prop: 'taskId',
hide: true
},
{
label: '服务器IP',
prop: 'slaveId'
},
{
label: '资源',
prop: 'source',
hide: true
},
{
label: '执行类型',
prop: 'executionType',
hide: true
},
{
width: 100,
label: '分片项',
prop: 'shardingItem'
},
{
width: 100,
label: '状态',
prop: 'state',
type: 'select',
dicData: DIC.state,
search: true
},
{
label: '消息',
prop: 'message',
width: 100,
overHidden: true,
hide: true
},
{
label: '创建时间',
prop: 'creationTime'
}
]
{
label: '创建时间',
prop: 'creationTime'
}
]
}
......@@ -16,66 +16,66 @@
*/
export const tableOption = {
'border': true,
'index': true,
'expand': true,
'stripe': true,
'selection': true,
'page': false,
'menuAlign': 'center',
'defaultSort': {
prop: 'username',
order: 'descending'
},
'align': 'center',
'dic': [],
'column': [{
'label': '用户名',
'prop': 'username',
'span': 24,
'solt': true,
'sortable': true,
'width': 120,
'rules': [{
'required': true,
'message': '请输入用户名',
'trigger': 'blur'
}]
}, {
'label': '类型',
'prop': 'type',
'width': 80,
'type': 'select',
'sortable': true,
'dicData': [{
'label': '后端',
'value': '0'
}, {
'label': '前端',
'value': '1'
}]
}, {
'label': 'stars',
'width': '150',
'prop': 'stars',
'sortable': true,
'solt': true
}, {
'label': '码云',
'solt': true,
'span': 24,
'prop': 'address',
'type': 'textarea',
'overHidden': true
'border': true,
'index': true,
'expand': true,
'stripe': true,
'selection': true,
'page': false,
'menuAlign': 'center',
'defaultSort': {
prop: 'username',
order: 'descending'
},
'align': 'center',
'dic': [],
'column': [{
'label': '用户名',
'prop': 'username',
'span': 24,
'solt': true,
'sortable': true,
'width': 120,
'rules': [{
'required': true,
'message': '请输入用户名',
'trigger': 'blur'
}]
}, {
'label': '类型',
'prop': 'type',
'width': 80,
'type': 'select',
'sortable': true,
'dicData': [{
'label': '后端',
'value': '0'
}, {
'label': '项目介绍',
'width': '300',
'prop': 'info',
'editDisabled': true,
'type': 'textarea',
'span': 24,
'maxRow': 4,
'minRow': 4,
'overHidden': true
'label': '前端',
'value': '1'
}]
}
\ No newline at end of file
}, {
'label': 'stars',
'width': '150',
'prop': 'stars',
'sortable': true,
'solt': true
}, {
'label': '码云',
'solt': true,
'span': 24,
'prop': 'address',
'type': 'textarea',
'overHidden': true
}, {
'label': '项目介绍',
'width': '300',
'prop': 'info',
'editDisabled': true,
'type': 'textarea',
'span': 24,
'maxRow': 4,
'minRow': 4,
'overHidden': true
}]
}
export const DIC = {
VAILD: [{
label: '真',
value: 'true',
color: 'green'
}, {
label: '假',
value: 'false',
color: 'red'
}],
SEX: [{
label: '男',
value: 0,
color: 'green'
}, {
label: '女',
value: 1,
color: 'red'
}],
POSTIONDATA: [{
label: '左对齐',
value: 'left'
}, {
label: '居中',
value: 'center'
}, {
label: '右对齐',
value: 'right'
}],
TYPE: [{
label: '一级1',
value: 0,
children: [{
label: '一级1二级1',
value: 2,
}]
}, {
label: '一级2',
value: 1,
children: [{
label: '一级2二级1',
value: 2,
}]
}
VAILD: [{
label: '真',
value: 'true',
color: 'green'
}, {
label: '假',
value: 'false',
color: 'red'
}],
SEX: [{
label: '男',
value: 0,
color: 'green'
}, {
label: '女',
value: 1,
color: 'red'
}],
POSTIONDATA: [{
label: '左对齐',
value: 'left'
}, {
label: '居中',
value: 'center'
}, {
label: '右对齐',
value: 'right'
}],
TYPE: [{
label: '一级1',
value: 0,
children: [{
label: '一级1二级1',
value: 2,
}]
}, {
label: '一级2',
value: 1,
children: [{
label: '一级2二级1',
value: 2,
}]
}
],
STATE: [{
label: '有效',
value: 0
],
STATE: [{
label: '有效',
value: 0
}, {
label: '无效',
value: 1
}],
GRADE: [{
label: "管理员",
value: 0
},
{
label: "二级管理员",
value: 1
}
],
VAILDATA: [{
label: "激活",
value: true,
},
{
label: "禁用",
value: false,
}
],
CRUDTYPE: [{
label: "输入框",
value: ''
}, {
label: "选择框",
value: 'select'
},
{
label: "文本框",
value: 'text'
},
{
label: "密码框",
value: 'password'
},
{
label: "树型框",
value: 'tree'
},
{
label: "富文本编辑框",
value: 'ueditor'
},
{
label: "多行文本框",
value: 'textarea'
},
{
label: "单选框",
value: 'radio'
},
{
label: "多选框",
value: 'checkbox'
},
{
label: "数字框",
value: 'number'
},
{
label: "日期框",
value: 'date'
},
{
label: "日期范围框",
value: 'daterange'
},
{
label: "时间范围框",
value: 'datetimerange'
},
{
label: "时间框",
value: 'datetime'
},
{
label: "周",
value: 'week'
},
{
label: "月",
value: 'month'
},
{
label: "年",
value: 'year'
},
{
label: "滑动框",
value: 'silder'
},
{
label: "评价框",
value: 'rate'
},
{
label: "上传框",
value: 'upload'
}
],
UITYPE: [{
value: 'zhinan',
label: '指南',
children: [{
value: 'shejiyuanze',
label: '设计原则',
children: [{
value: 'yizhi',
label: '一致'
}, {
value: 'fankui',
label: '反馈'
}, {
value: 'xiaolv',
label: '效率'
}, {
value: 'kekong',
label: '可控'
}]
}, {
value: 'daohang',
label: '导航',
children: [{
value: 'cexiangdaohang',
label: '侧向导航'
}, {
value: 'dingbudaohang',
label: '顶部导航'
}]
}]
}, {
value: 'zujian',
label: '组件',
children: [{
value: 'basic',
label: 'Basic',
children: [{
value: 'layout',
label: 'Layout 布局'
}, {
value: 'color',
label: 'Color 色彩'
}, {
value: 'typography',
label: 'Typography 字体'
}, {
value: 'icon',
label: 'Icon 图标'
}, {
value: 'button',
label: 'Button 按钮'
}]
}, {
label: '无效',
value: 1
}],
GRADE: [{
label: "管理员",
value: 0
},
{
label: "二级管理员",
value: 1
}
],
VAILDATA: [{
label: "激活",
value: true,
},
{
label: "禁用",
value: false,
}
],
CRUDTYPE: [{
label: "输入框",
value: ''
}, {
label: "选择框",
value: 'select'
},
{
label: "文本框",
value: 'text'
},
{
label: "密码框",
value: 'password'
},
{
label: "树型框",
value: 'tree'
},
{
label: "富文本编辑框",
value: 'ueditor'
},
{
label: "多行文本框",
value: 'textarea'
},
{
label: "单选框",
value: 'radio'
},
{
label: "多选框",
value: 'checkbox'
},
{
label: "数字框",
value: 'number'
},
{
label: "日期框",
value: 'date'
},
{
label: "日期范围框",
value: 'daterange'
},
{
label: "时间范围框",
value: 'datetimerange'
},
{
label: "时间框",
value: 'datetime'
},
{
label: "周",
value: 'week'
},
{
label: "月",
value: 'month'
},
{
label: "年",
value: 'year'
},
{
label: "滑动框",
value: 'silder'
},
{
label: "评价框",
value: 'rate'
},
{
label: "上传框",
value: 'upload'
}
],
UITYPE: [{
value: 'zhinan',
label: '指南',
children: [{
value: 'shejiyuanze',
label: '设计原则',
children: [{
value: 'yizhi',
label: '一致'
}, {
value: 'fankui',
label: '反馈'
}, {
value: 'xiaolv',
label: '效率'
}, {
value: 'kekong',
label: '可控'
}]
}, {
value: 'daohang',
label: '导航',
children: [{
value: 'cexiangdaohang',
label: '侧向导航'
}, {
value: 'dingbudaohang',
label: '顶部导航'
}]
}]
value: 'form',
label: 'Form',
children: [{
value: 'radio',
label: 'Radio 单选框'
}, {
value: 'checkbox',
label: 'Checkbox 多选框'
}, {
value: 'input',
label: 'Input 输入框'
}, {
value: 'input-number',
label: 'InputNumber 计数器'
}, {
value: 'select',
label: 'Select 选择器'
}, {
value: 'cascader',
label: 'Cascader 级联选择器'
}, {
value: 'switch',
label: 'Switch 开关'
}, {
value: 'slider',
label: 'Slider 滑块'
}, {
value: 'time-picker',
label: 'TimePicker 时间选择器'
}, {
value: 'date-picker',
label: 'DatePicker 日期选择器'
}, {
value: 'datetime-picker',
label: 'DateTimePicker 日期时间选择器'
}, {
value: 'upload',
label: 'Upload 上传'
}, {
value: 'rate',
label: 'Rate 评分'
}, {
value: 'form',
label: 'Form 表单'
}]
}, {
value: 'zujian',
label: '组件',
children: [{
value: 'basic',
label: 'Basic',
children: [{
value: 'layout',
label: 'Layout 布局'
}, {
value: 'color',
label: 'Color 色彩'
}, {
value: 'typography',
label: 'Typography 字体'
}, {
value: 'icon',
label: 'Icon 图标'
}, {
value: 'button',
label: 'Button 按钮'
}]
}, {
value: 'form',
label: 'Form',
children: [{
value: 'radio',
label: 'Radio 单选框'
}, {
value: 'checkbox',
label: 'Checkbox 多选框'
}, {
value: 'input',
label: 'Input 输入框'
}, {
value: 'input-number',
label: 'InputNumber 计数器'
}, {
value: 'select',
label: 'Select 选择器'
}, {
value: 'cascader',
label: 'Cascader 级联选择器'
}, {
value: 'switch',
label: 'Switch 开关'
}, {
value: 'slider',
label: 'Slider 滑块'
}, {
value: 'time-picker',
label: 'TimePicker 时间选择器'
}, {
value: 'date-picker',
label: 'DatePicker 日期选择器'
}, {
value: 'datetime-picker',
label: 'DateTimePicker 日期时间选择器'
}, {
value: 'upload',
label: 'Upload 上传'
}, {
value: 'rate',
label: 'Rate 评分'
}, {
value: 'form',
label: 'Form 表单'
}]
}, {
value: 'data',
label: 'Data',
children: [{
value: 'table',
label: 'Table 表格'
}, {
value: 'tag',
label: 'Tag 标签'
}, {
value: 'progress',
label: 'Progress 进度条'
}, {
value: 'tree',
label: 'Tree 树形控件'
}, {
value: 'pagination',
label: 'Pagination 分页'
}, {
value: 'badge',
label: 'Badge 标记'
}]
}, {
value: 'notice',
label: 'Notice',
children: [{
value: 'alert',
label: 'Alert 警告'
}, {
value: 'loading',
label: 'Loading 加载'
}, {
value: 'message',
label: 'Message 消息提示'
}, {
value: 'message-box',
label: 'MessageBox 弹框'
}, {
value: 'notification',
label: 'Notification 通知'
}]
}, {
value: 'navigation',
label: 'Navigation',
children: [{
value: 'menu',
label: 'NavMenu 导航菜单'
}, {
value: 'tabs',
label: 'Tabs 标签页'
}, {
value: 'breadcrumb',
label: 'Breadcrumb 面包屑'
}, {
value: 'dropdown',
label: 'Dropdown 下拉菜单'
}, {
value: 'steps',
label: 'Steps 步骤条'
}]
}, {
value: 'others',
label: 'Others',
children: [{
value: 'dialog',
label: 'Dialog 对话框'
}, {
value: 'tooltip',
label: 'Tooltip 文字提示'
}, {
value: 'popover',
label: 'Popover 弹出框'
}, {
value: 'card',
label: 'Card 卡片'
}, {
value: 'carousel',
label: 'Carousel 走马灯'
}, {
value: 'collapse',
label: 'Collapse 折叠面板'
}]
}]
value: 'data',
label: 'Data',
children: [{
value: 'table',
label: 'Table 表格'
}, {
value: 'tag',
label: 'Tag 标签'
}, {
value: 'progress',
label: 'Progress 进度条'
}, {
value: 'tree',
label: 'Tree 树形控件'
}, {
value: 'pagination',
label: 'Pagination 分页'
}, {
value: 'badge',
label: 'Badge 标记'
}]
}, {
value: 'ziyuan',
label: '资源',
children: [{
value: 'axure',
label: 'Axure Components'
}, {
value: 'sketch',
label: 'Sketch Templates'
}, {
value: 'jiaohu',
label: '组件交互文档'
}]
}],
PAYTYPE: [{
label: '微信',
value: '0',
value: 'notice',
label: 'Notice',
children: [{
value: 'alert',
label: 'Alert 警告'
}, {
value: 'loading',
label: 'Loading 加载'
}, {
value: 'message',
label: 'Message 消息提示'
}, {
value: 'message-box',
label: 'MessageBox 弹框'
}, {
value: 'notification',
label: 'Notification 通知'
}]
}, {
label: '支付宝',
value: '1',
value: 'navigation',
label: 'Navigation',
children: [{
value: 'menu',
label: 'NavMenu 导航菜单'
}, {
value: 'tabs',
label: 'Tabs 标签页'
}, {
value: 'breadcrumb',
label: 'Breadcrumb 面包屑'
}, {
value: 'dropdown',
label: 'Dropdown 下拉菜单'
}, {
value: 'steps',
label: 'Steps 步骤条'
}]
}, {
label: '银行卡',
value: '2',
}],
DATALIST: [{
label: 'SEX',
value: 'SEX',
value: 'others',
label: 'Others',
children: [{
value: 'dialog',
label: 'Dialog 对话框'
}, {
value: 'tooltip',
label: 'Tooltip 文字提示'
}, {
value: 'popover',
label: 'Popover 弹出框'
}, {
value: 'card',
label: 'Card 卡片'
}, {
value: 'carousel',
label: 'Carousel 走马灯'
}, {
value: 'collapse',
label: 'Collapse 折叠面板'
}]
}]
}, {
value: 'ziyuan',
label: '资源',
children: [{
value: 'axure',
label: 'Axure Components'
}, {
label: 'STATE',
value: 'STATE',
value: 'sketch',
label: 'Sketch Templates'
}, {
label: 'GRADE',
value: 'GRADE',
value: 'jiaohu',
label: '组件交互文档'
}]
}
\ No newline at end of file
}],
PAYTYPE: [{
label: '微信',
value: '0',
}, {
label: '支付宝',
value: '1',
}, {
label: '银行卡',
value: '2',
}],
DATALIST: [{
label: 'SEX',
value: 'SEX',
}, {
label: 'STATE',
value: 'STATE',
}, {
label: 'GRADE',
value: 'GRADE',
}]
}
export default {
'000': '操作太频繁,请勿重复请求',
'401': '当前操作没有权限',
'403': '当前操作没有权限',
'404': '资源不存在',
'417': '未绑定登录账号,请使用密码登录后绑定',
'423': '演示环境不能操作,如需了解联系冷冷',
'426': '用户名不存在或密码错误',
'428': '验证码错误,请重新输入',
'429': '请求过频繁',
'479': '演示环境,没有权限操作',
'default': '系统未知错误,请反馈给管理员'
}
\ No newline at end of file
'000': '操作太频繁,请勿重复请求',
'401': '当前操作没有权限',
'403': '当前操作没有权限',
'404': '资源不存在',
'417': '未绑定登录账号,请使用密码登录后绑定',
'423': '演示环境不能操作,如需了解联系冷冷',
'426': '用户名不存在或密码错误',
'428': '验证码错误,请重新输入',
'429': '请求过频繁',
'479': '演示环境,没有权限操作',
'default': '系统未知错误,请反馈给管理员'
}
export default {
menu: false,
addBtn: false,
page: false,
border: true,
expand: true,
refreshBtn: false,
headerAlign: 'center',
column: [{
label: '类型',
prop: 'type',
width: 80,
align: 'center',
solt: true,
dicData: [{
label: 'bug',
value: 'error'
}]
}, {
label: '地址',
width: 200,
prop: 'url',
overHidden: true,
}, {
label: '内容',
prop: 'message',
overHidden: true,
}, {
label: '错误堆栈',
prop: 'stack',
hide: true
}, {
label: '时间',
align: 'center',
prop: 'time',
width: 200,
menu: false,
addBtn: false,
page: false,
border: true,
expand: true,
refreshBtn: false,
headerAlign: 'center',
column: [{
label: '类型',
prop: 'type',
width: 80,
align: 'center',
solt: true,
dicData: [{
label: 'bug',
value: 'error'
}]
}
\ No newline at end of file
}, {
label: '地址',
width: 200,
prop: 'url',
overHidden: true,
}, {
label: '内容',
prop: 'message',
overHidden: true,
}, {
label: '错误堆栈',
prop: 'stack',
hide: true
}, {
label: '时间',
align: 'center',
prop: 'time',
width: 200,
}]
}
const dicData = [{
label: '开启',
value: 'true'
label: '开启',
value: 'true'
}, {
label: '关闭',
value: 'false'
label: '关闭',
value: 'false'
}]
export const list = [{
key: 'showTag',
commit: 'SET_SHOWTAG'
key: 'showTag',
commit: 'SET_SHOWTAG'
}, {
key: 'showTheme',
commit: 'SET_SHOWTHEME'
key: 'showTheme',
commit: 'SET_SHOWTHEME'
}, {
key: 'showColor',
commit: 'SET_SHOWCOLOR'
key: 'showColor',
commit: 'SET_SHOWCOLOR'
}, {
key: 'showLock',
commit: 'SET_SHOWLOCK'
key: 'showLock',
commit: 'SET_SHOWLOCK'
}, {
key: 'showDebug',
commit: 'SET_SHOWDEBUG'
key: 'showDebug',
commit: 'SET_SHOWDEBUG'
}, {
key: 'showFullScren',
commit: 'SET_SHOWFULLSCREN'
key: 'showFullScren',
commit: 'SET_SHOWFULLSCREN'
}, {
key: 'showCollapse',
commit: 'SET_SHOWCOLLAPSE'
key: 'showCollapse',
commit: 'SET_SHOWCOLLAPSE'
}, {
key: 'showSearch',
commit: 'SET_SHOWSEARCH'
key: 'showSearch',
commit: 'SET_SHOWSEARCH'
}, {
key: 'showMenu',
commit: 'SET_SHOWMENU'
key: 'showMenu',
commit: 'SET_SHOWMENU'
}]
export const option = (safe) => {
const _safe = safe;
return {
submitBtn: false,
column: [{
label: '标签',
prop: 'showTag',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '日志',
prop: 'showDebug',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '主题',
prop: 'showTheme',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '主题色',
prop: 'showColor',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '全屏',
prop: 'showFullScren',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '锁屏',
prop: 'showLock',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '搜索',
prop: 'showSearch',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '缩放',
prop: 'showCollapse',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}, {
label: '顶部菜单',
prop: 'showMenu',
type: 'switch',
span: 24,
dicData: dicData,
click: ({ column }) => {
_safe.set(column.prop);
}
}]
}
}
\ No newline at end of file
const _safe = safe;
return {
submitBtn: false,
column: [{
label: '标签',
prop: 'showTag',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '日志',
prop: 'showDebug',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '主题',
prop: 'showTheme',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '主题色',
prop: 'showColor',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '全屏',
prop: 'showFullScren',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '锁屏',
prop: 'showLock',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '搜索',
prop: 'showSearch',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '缩放',
prop: 'showCollapse',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}, {
label: '顶部菜单',
prop: 'showMenu',
type: 'switch',
span: 24,
dicData: dicData,
click: ({column}) => {
_safe.set(column.prop);
}
}]
}
}
export default {
title: "PigX",
logo: "PigX",
indexTitle: 'PigX Pro 快速开发框架',
whiteList: ["/login", "/404", "/401", "/lock"], //配置无权限可以访问的页面
whiteTagList: ["/login", "/404", "/401", "/lock", ], //配置不添加tags页面 ('/advanced-router/mutative-detail/*'——*为通配符)
lockPage: '/lock',
tokenTime: 6000,
info: {
title: "PigX Pro 快速开发框架",
list: [
'一个基于Spring Cloud、OAuth2.0开发基于Vue前后分离的开发平台。',
'一个基于Avue2 开发无需前端知识,即可快速上手的开发平台。',
'最大程度上帮助企业节省时间成本和费用开支。',
'QQ群:23754102',
'当前版本:v2.0.0',
]
},
//http的status默认放行不才用统一处理的,
statusWhiteList: [400, 500, 401],
//配置首页不可关闭
isFirstPage: false,
fistPage: {
label: "首页",
value: "/wel/index",
params: {},
query: {},
group: [],
close: false
},
//配置菜单的属性
menu: {
props: {
label: 'label',
path: 'path',
icon: 'icon',
children: 'children'
}
title: "PigX",
logo: "PigX",
indexTitle: 'PigX Pro 快速开发框架',
whiteList: ["/login", "/404", "/401", "/lock"], //配置无权限可以访问的页面
whiteTagList: ["/login", "/404", "/401", "/lock",], //配置不添加tags页面 ('/advanced-router/mutative-detail/*'——*为通配符)
lockPage: '/lock',
tokenTime: 6000,
info: {
title: "PigX Pro 快速开发框架",
list: [
'一个基于Spring Cloud、OAuth2.0开发基于Vue前后分离的开发平台。',
'一个基于Avue2 开发无需前端知识,即可快速上手的开发平台。',
'最大程度上帮助企业节省时间成本和费用开支。',
'QQ群:23754102',
'当前版本:v2.0.0',
]
},
//http的status默认放行不才用统一处理的,
statusWhiteList: [400, 500, 401],
//配置首页不可关闭
isFirstPage: false,
fistPage: {
label: "首页",
value: "/wel/index",
params: {},
query: {},
group: [],
close: false
},
//配置菜单的属性
menu: {
props: {
label: 'label',
path: 'path',
icon: 'icon',
children: 'children'
}
}
\ No newline at end of file
}
}
import Vue from 'vue';
import store from './store'
Vue.config.errorHandler = function(err, vm, info) {
Vue.nextTick(() => {
store.commit('ADD_LOGS', {
type: 'error',
message: err.message,
stack: err.stack,
info
})
if (process.env.NODE_ENV === 'development') {
console.group('>>>>>> 错误信息 >>>>>>')
console.log(info)
console.groupEnd();
console.group('>>>>>> Vue 实例 >>>>>>')
console.log(vm)
console.groupEnd();
console.group('>>>>>> Error >>>>>>')
console.log(err)
console.groupEnd();
}
Vue.config.errorHandler = function (err, vm, info) {
Vue.nextTick(() => {
store.commit('ADD_LOGS', {
type: 'error',
message: err.message,
stack: err.stack,
info
})
}
\ No newline at end of file
if (process.env.NODE_ENV === 'development') {
console.group('>>>>>> 错误信息 >>>>>>')
console.log(info)
console.groupEnd();
console.group('>>>>>> Vue 实例 >>>>>>')
console.log(vm)
console.groupEnd();
console.group('>>>>>> Error >>>>>>')
console.log(err)
console.groupEnd();
}
})
}
function pluralize(time, label) {
if (time === 1) {
return time + label
}
return time + label + 's'
if (time === 1) {
return time + label
}
return time + label + 's'
}
/**
* 日期格式化
*/
export function dateFormat(date) {
let format = 'yyyy-MM-dd hh:mm:ss';
if (date != 'Invalid Date') {
var o = {
"M+": date.getMonth() + 1, //month
"d+": date.getDate(), //day
"h+": date.getHours(), //hour
"m+": date.getMinutes(), //minute
"s+": date.getSeconds(), //second
"q+": Math.floor((date.getMonth() + 3) / 3), //quarter
"S": date.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] :
("00" + o[k]).substr(("" + o[k]).length));
return format;
let format = 'yyyy-MM-dd hh:mm:ss';
if (date != 'Invalid Date') {
var o = {
"M+": date.getMonth() + 1, //month
"d+": date.getDate(), //day
"h+": date.getHours(), //hour
"m+": date.getMinutes(), //minute
"s+": date.getSeconds(), //second
"q+": Math.floor((date.getMonth() + 3) / 3), //quarter
"S": date.getMilliseconds() //millisecond
}
return '';
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] :
("00" + o[k]).substr(("" + o[k]).length));
return format;
}
return '';
}
export function timeAgo(time) {
const between = Date.now() / 1000 - Number(time)
if (between < 3600) {
return pluralize(~~(between / 60), ' minute')
} else if (between < 86400) {
return pluralize(~~(between / 3600), ' hour')
} else {
return pluralize(~~(between / 86400), ' day')
}
const between = Date.now() / 1000 - Number(time)
if (between < 3600) {
return pluralize(~~(between / 60), ' minute')
} else if (between < 86400) {
return pluralize(~~(between / 3600), ' hour')
} else {
return pluralize(~~(between / 86400), ' day')
}
}
export function parseTime(time, cFormat) {
if (arguments.length === 0) {
return null
}
if (arguments.length === 0) {
return null
}
if ((time + '').length === 10) {
time = +time * 1000
}
if ((time + '').length === 10) {
time = +time * 1000
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
date = new Date(parseInt(time))
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
date = new Date(parseInt(time))
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
if (result.length > 0 && value < 10) {
value = '0' + value
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
return value || 0
})
return time_str
}
export function formatTime(time, option) {
time = +time * 1000
const d = new Date(time)
const now = Date.now()
time = +time * 1000
const d = new Date(time)
const now = Date.now()
const diff = (now - d) / 1000
const diff = (now - d) / 1000
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) { // less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分'
}
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) { // less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分'
}
}
/* 数字 格式化*/
export function nFormatter(num, digits) {
const si = [
{ value: 1E18, symbol: 'E' },
{ value: 1E15, symbol: 'P' },
{ value: 1E12, symbol: 'T' },
{ value: 1E9, symbol: 'G' },
{ value: 1E6, symbol: 'M' },
{ value: 1E3, symbol: 'k' }
]
for (let i = 0; i < si.length; i++) {
if (num >= si[i].value) {
return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
}
const si = [
{value: 1E18, symbol: 'E'},
{value: 1E15, symbol: 'P'},
{value: 1E12, symbol: 'T'},
{value: 1E9, symbol: 'G'},
{value: 1E6, symbol: 'M'},
{value: 1E3, symbol: 'k'}
]
for (let i = 0; i < si.length; i++) {
if (num >= si[i].value) {
return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
}
return num.toString()
}
return num.toString()
}
export function html2Text(val) {
const div = document.createElement('div')
div.innerHTML = val
return div.textContent || div.innerText
const div = document.createElement('div')
div.innerHTML = val
return div.textContent || div.innerText
}
export function toThousandslsFilter(num) {
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}
\ No newline at end of file
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}
......@@ -10,32 +10,26 @@ import router from './router/router';
import 'avue-plugin-transfer/packages' //引入avue-plugin-transfer插件
// import 'avue-plugin-ueditor/packages' //引入avue-plugin-ueditor插件(如果要兼容ie自行换掉富文本编辑器,此款插件不兼容ie)
import store from './store';
import {
loadStyle
} from './util/util'
import {loadStyle} from './util/util'
import * as urls from '@/config/env';
import {
iconfontUrl,
iconfontVersion
} from '@/config/env';
import {iconfontUrl, iconfontVersion} from '@/config/env';
import * as filters from './filters' // 全局filter
import './styles/common.scss';
// // 引入avue的包
import Avue from '@smallwei/avue/lib/index.js';
// // 引入avue的样式文件
import '@smallwei/avue/lib/theme-chalk/index.css';
// //源文件包
// import '../packages/index.js';
// import '../packages/theme-chalk/src/index.scss';
import basicContainer from './components/basic-container/main'
import VueClipboard from 'vue-clipboard2'
// 插件 json 展示
import vueJsonTreeView from 'vue-json-tree-view'
// //源文件包
// import '../packages/index.js';
// import '../packages/theme-chalk/src/index.scss';
Vue.use(Avue, { menuType : 'text'});
Vue.use(Avue, {menuType: 'text'});
Vue.use(router)
......@@ -48,21 +42,21 @@ Vue.use(VueAxios, axios)
Vue.component('basicContainer', basicContainer)
Object.keys(urls).forEach(key => {
Vue.prototype[key] = urls[key];
Vue.prototype[key] = urls[key];
})
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
Vue.filter(key, filters[key])
})
iconfontVersion.forEach(ele => {
loadStyle(iconfontUrl.replace('$key', ele));
loadStyle(iconfontUrl.replace('$key', ele));
})
Vue.config.productionTip = false;
new Vue({
router,
store,
render: h => h(App)
router,
store,
render: h => h(App)
}).$mount('#app')
......@@ -22,84 +22,90 @@
</div>
</template>
<script>
import { mapGetters, mapState } from "vuex";
export default {
name: "lock",
data () {
return {
passwd: "",
passwdError: false,
pass: false
};
},
created () { },
mounted () { },
computed: {
...mapState({
userInfo: state => state.user.userInfo
}),
...mapGetters(["tag", "lockPasswd"])
},
props: [],
methods: {
handleLogout () {
this.$confirm("是否退出系统, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$store.dispatch("LogOut").then(() => {
this.$router.push({ path: "/login" });
});
});
import {mapGetters, mapState} from "vuex";
export default {
name: "lock",
data() {
return {
passwd: "",
passwdError: false,
pass: false
};
},
created() {
},
mounted() {
},
handleLogin () {
if (this.passwd != this.lockPasswd) {
this.passwd = "";
this.$message({
message: "解锁密码错误,请重新输入",
type: "error"
computed: {
...mapState({
userInfo: state => state.user.userInfo
}),
...mapGetters(["tag", "lockPasswd"])
},
props: [],
methods: {
handleLogout() {
this.$confirm("是否退出系统, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$store.dispatch("LogOut").then(() => {
this.$router.push({path: "/login"});
});
});
this.passwdError = true;
},
handleLogin() {
if (this.passwd != this.lockPasswd) {
this.passwd = "";
this.$message({
message: "解锁密码错误,请重新输入",
type: "error"
});
this.passwdError = true;
setTimeout(() => {
this.passwdError = false;
}, 1000);
return;
}
this.pass = true;
setTimeout(() => {
this.passwdError = false;
this.$store.commit("CLEAR_LOCK");
this.$router.push({path: this.$router.$avueRouter.getPath({src: this.tag.value})});
}, 1000);
return;
}
this.pass = true;
setTimeout(() => {
this.$store.commit("CLEAR_LOCK");
this.$router.push({ path: this.$router.$avueRouter.getPath({ src: this.tag.value }) });
}, 1000);
}
},
components: {}
};
},
components: {}
};
</script>
<style lang="scss">
.lock-container {
display: flex;
align-items: center;
justify-content: center;
position: relative;
.title {
margin-bottom: 8px;
color: #333;
.lock-container {
display: flex;
align-items: center;
justify-content: center;
position: relative;
.title {
margin-bottom: 8px;
color: #333;
}
}
.lock-container::before {
z-index: -999;
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-image: url('/img/login.png');
background-size: cover;
}
.lock-form {
width: 300px;
}
}
.lock-container::before {
z-index: -999;
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-image: url('/img/login.png');
background-size: cover;
}
.lock-form {
width: 300px;
}
</style>
\ No newline at end of file
</style>
......@@ -20,11 +20,10 @@
class="login-select animated fadeIn"
v-model="active"
@change="handleCommand"
placeholder="请选择租户,不选为默认"
size="mini"
>
<el-option label="租户1" value="1"></el-option>
<el-option label="租户2" value="2"></el-option>
placeholder="点击请选择租户"
size="mini">
<el-option label="租户1 用户登录" value="1"></el-option>
<el-option label="租户2 用户登录" value="2"></el-option>
</el-select>
</h4>
<userLogin v-if="activeName==='user'"></userLogin>
......
......@@ -57,7 +57,6 @@
</el-row>
</el-form-item>
<el-checkbox v-model="checked">记住账号</el-checkbox>
<el-form-item>
<el-button type="primary"
size="small"
......
......@@ -57,78 +57,80 @@
</template>
<script>
import { mapGetters } from 'vuex';
export default {
name: 'wel',
data() {
return {
activeNames: ['1', '2', '3', '4'],
DATA: [],
text: '',
actor: '',
count: 0,
isText: false
import {mapGetters} from 'vuex';
export default {
name: 'wel',
data() {
return {
activeNames: ['1', '2', '3', '4'],
DATA: [],
text: '',
actor: '',
count: 0,
isText: false
}
},
computed: {
...mapGetters(['website'])
},
methods: {
getData() {
if (this.count < this.DATA.length - 1) {
this.count++
} else {
this.count = 0
}
this.isText = true
this.actor = this.DATA[this.count]
},
setData() {
let num = 0
let count = 0
let active = false
let timeoutstart = 5000
let timeoutend = 1000
let timespeed = 10
setInterval(() => {
if (this.isText) {
if (count == this.actor.length) {
active = true
} else {
active = false
}
},
computed: {
...mapGetters(['website'])
},
methods: {
getData() {
if (this.count < this.DATA.length - 1) {
this.count++
} else {
this.count = 0
}
this.isText = true
this.actor = this.DATA[this.count]
},
setData() {
let num = 0
let count = 0
let active = false
let timeoutstart = 5000
let timeoutend = 1000
let timespeed = 10
setInterval(() => {
if (this.isText) {
if (count == this.actor.length) {
active = true
} else {
active = false
}
if (active) {
num--
this.text = this.actor.substr(0, num)
if (num == 0) {
this.isText = false
setTimeout(() => {
count = 0
this.getData()
}, timeoutend)
}
} else {
num++
this.text = this.actor.substr(0, num)
if (num == this.actor.length) {
this.isText = false
setTimeout(() => {
this.isText = true
count = this.actor.length
}, timeoutstart)
}
}
}
}, timespeed)
if (active) {
num--
this.text = this.actor.substr(0, num)
if (num == 0) {
this.isText = false
setTimeout(() => {
count = 0
this.getData()
}, timeoutend)
}
} else {
num++
this.text = this.actor.substr(0, num)
if (num == this.actor.length) {
this.isText = false
setTimeout(() => {
this.isText = true
count = this.actor.length
}, timeoutstart)
}
}
}
}
}, timespeed)
}
}
}
</script>
<style scoped="scoped" lang="scss">
.wel-contailer {
position: relative;
}
.banner-text {
position: relative;
padding: 0 20px;
......@@ -136,6 +138,7 @@
text-align: center;
color: #333;
}
.banner-img {
position: absolute;
top: 0;
......@@ -145,6 +148,7 @@
opacity: 0.8;
display: none;
}
.actor {
height: 250px;
overflow: hidden;
......
/**
* 全站权限配置
*
*
*/
import router from './router/router'
import store from './store'
import { validatenull } from '@/util/validate'
import { getToken } from '@/util/auth'
import {validatenull} from '@/util/validate'
import {getToken} from '@/util/auth'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
NProgress.configure({ showSpinner: false });
NProgress.configure({showSpinner: false});
const lockPage = store.getters.website.lockPage; //锁屏页
router.beforeEach((to, from, next) => {
//缓冲设置
if (to.meta.keepAlive === true && store.state.tags.tagList.some(ele => {
return ele.value === to.fullPath;
})) {
to.meta.$keepAlive = true;
//缓冲设置
if (to.meta.keepAlive === true && store.state.tags.tagList.some(ele => {
return ele.value === to.fullPath;
})) {
to.meta.$keepAlive = true;
} else {
NProgress.start()
if (to.meta.keepAlive === true && validatenull(to.meta.$keepAlive)) {
to.meta.$keepAlive = true;
} else {
NProgress.start()
if (to.meta.keepAlive === true && validatenull(to.meta.$keepAlive)) {
to.meta.$keepAlive = true;
} else {
to.meta.$keepAlive = false;
}
to.meta.$keepAlive = false;
}
const meta = to.meta || {};
if (getToken()) {
if (store.getters.isLock && to.path != lockPage) {
next({ path: lockPage })
} else if (to.path === '/login') {
next({ path: '/' })
} else {
if (store.getters.roles.length === 0) {
store.dispatch('GetUserInfo').then(() => {
next({...to, replace: true })
}).catch(() => {
store.dispatch('FedLogOut').then(() => {
next({ path: '/login' })
})
})
} else {
const value = to.query.src || to.fullPath;
const label = to.query.name || to.name;
if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
store.commit('ADD_TAG', {
label: label,
value: value,
params: to.params,
query: to.query,
group: router.$avueRouter.group || []
});
}
next()
}
}
}
const meta = to.meta || {};
if (getToken()) {
if (store.getters.isLock && to.path != lockPage) {
next({path: lockPage})
} else if (to.path === '/login') {
next({path: '/'})
} else {
if (meta.isAuth === false) {
next()
} else {
next('/login')
if (store.getters.roles.length === 0) {
store.dispatch('GetUserInfo').then(() => {
next({...to, replace: true})
}).catch(() => {
store.dispatch('FedLogOut').then(() => {
next({path: '/login'})
})
})
} else {
const value = to.query.src || to.fullPath;
const label = to.query.name || to.name;
if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
store.commit('ADD_TAG', {
label: label,
value: value,
params: to.params,
query: to.query,
group: router.$avueRouter.group || []
});
}
next()
}
}
} else {
if (meta.isAuth === false) {
next()
} else {
next('/login')
}
}
})
router.afterEach(() => {
NProgress.done();
const title = store.getters.tag.label;
router.$avueRouter.setTitle(title);
});
\ No newline at end of file
NProgress.done();
const title = store.getters.tag.label;
router.$avueRouter.setTitle(title);
});
const getters = {
tag: state => state.tags.tag,
website: state => state.common.website,
userInfo: state => state.user.userInfo,
theme: state => state.common.theme,
themeName: state => state.common.themeName,
isShade: state => state.common.isShade,
isCollapse: state => state.common.isCollapse,
keyCollapse: (state, getters) => getters.screen > 1 ? getters.isCollapse : false,
screen: state => state.common.screen,
isLock: state => state.common.isLock,
isFullScren: state => state.common.isFullScren,
lockPasswd: state => state.common.lockPasswd,
tagList: state => state.tags.tagList,
tagWel: state => state.tags.tagWel,
access_token: state => state.user.access_token,
refresh_token: state => state.user.refresh_token,
roles: state => state.user.roles,
permissions: state => state.user.permissions,
menu: state => state.user.menu,
menuAll: state => state.user.menuAll,
logsList: state => state.logs.logsList,
logsLen: state => state.logs.logsList.length || 0,
logsFlag: (state, getters) => getters.logsLen === 0
tag: state => state.tags.tag,
website: state => state.common.website,
userInfo: state => state.user.userInfo,
theme: state => state.common.theme,
themeName: state => state.common.themeName,
isShade: state => state.common.isShade,
isCollapse: state => state.common.isCollapse,
keyCollapse: (state, getters) => getters.screen > 1 ? getters.isCollapse : false,
screen: state => state.common.screen,
isLock: state => state.common.isLock,
isFullScren: state => state.common.isFullScren,
lockPasswd: state => state.common.lockPasswd,
tagList: state => state.tags.tagList,
tagWel: state => state.tags.tagWel,
access_token: state => state.user.access_token,
refresh_token: state => state.user.refresh_token,
roles: state => state.user.roles,
permissions: state => state.user.permissions,
menu: state => state.user.menu,
menuAll: state => state.user.menuAll,
logsList: state => state.logs.logsList,
logsLen: state => state.logs.logsList.length || 0,
logsFlag: (state, getters) => getters.logsLen === 0
}
export default getters
\ No newline at end of file
export default getters
......@@ -8,13 +8,13 @@ import getters from './getters'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user,
common,
logs,
tags
},
getters,
modules: {
user,
common,
logs,
tags
},
getters,
})
export default store
\ No newline at end of file
export default store
import {
setStore,
getStore,
removeStore
} from '@/util/store'
import {getStore, removeStore, setStore} from '@/util/store'
import website from '@/const/website'
const common = {
state: {
isCollapse: false,
isFullScren: false,
isShade: false,
screen: -1,
isLock: getStore({ name: 'isLock' }) || false,
showTag: getStore({ name: 'showTag' }),
showDebug: getStore({ name: 'showDebug' }),
showCollapse: getStore({ name: 'showCollapse' }),
showSearch: getStore({ name: 'showSearch' }),
showLock: getStore({ name: 'showLock' }),
showFullScren: getStore({ name: 'showFullScren' }),
showTheme: getStore({ name: 'showTheme' }),
showColor: getStore({ name: 'showColor' }),
showMenu: getStore({ name: 'showMenu' }),
theme: getStore({ name: 'theme' }) || '#409EFF',
themeName: getStore({ name: 'themeName' }) || '',
lockPasswd: getStore({ name: 'lockPasswd' }) || '',
website: website,
},
actions: {
const common = {
state: {
isCollapse: false,
isFullScren: false,
isShade: false,
screen: -1,
isLock: getStore({name: 'isLock'}) || false,
showTag: getStore({name: 'showTag'}),
showDebug: getStore({name: 'showDebug'}),
showCollapse: getStore({name: 'showCollapse'}),
showSearch: getStore({name: 'showSearch'}),
showLock: getStore({name: 'showLock'}),
showFullScren: getStore({name: 'showFullScren'}),
showTheme: getStore({name: 'showTheme'}),
showColor: getStore({name: 'showColor'}),
showMenu: getStore({name: 'showMenu'}),
theme: getStore({name: 'theme'}) || '#409EFF',
themeName: getStore({name: 'themeName'}) || '',
lockPasswd: getStore({name: 'lockPasswd'}) || '',
website: website,
},
actions: {},
mutations: {
SET_SHADE: (state, active) => {
state.isShade = active;
},
SET_COLLAPSE: (state) => {
state.isCollapse = !state.isCollapse;
},
SET_FULLSCREN: (state) => {
state.isFullScren = !state.isFullScren;
},
SET_SHOWCOLLAPSE: (state, active) => {
state.showCollapse = active;
setStore({
name: 'showCollapse',
content: state.showCollapse
})
},
SET_SHOWTAG: (state, active) => {
state.showTag = active;
setStore({
name: 'showTag',
content: state.showTag
})
},
SET_SHOWMENU: (state, active) => {
state.showMenu = active;
setStore({
name: 'showMenu',
content: state.showMenu
})
},
SET_SHOWLOCK: (state, active) => {
state.showLock = active;
setStore({
name: 'showLock',
content: state.showLock
})
},
SET_SHOWSEARCH: (state, active) => {
state.showSearch = active;
setStore({
name: 'showSearch',
content: state.showSearch
})
},
SET_SHOWFULLSCREN: (state, active) => {
state.showFullScren = active;
setStore({
name: 'showFullScren',
content: state.showFullScren
})
},
SET_SHOWDEBUG: (state, active) => {
state.showDebug = active;
setStore({
name: 'showDebug',
content: state.showDebug
})
},
SET_SHOWTHEME: (state, active) => {
state.showTheme = active;
setStore({
name: 'showTheme',
content: state.showTheme
})
},
SET_SHOWCOLOR: (state, active) => {
state.showColor = active;
setStore({
name: 'showColor',
content: state.showColor
})
},
SET_LOCK: (state) => {
state.isLock = true;
setStore({
name: 'isLock',
content: state.isLock,
type: 'session'
})
},
SET_SCREEN: (state, screen) => {
state.screen = screen;
},
SET_THEME: (state, color) => {
state.theme = color;
setStore({
name: 'theme',
content: state.theme,
})
},
SET_THEME_NAME: (state, themeName) => {
state.themeName = themeName;
setStore({
name: 'themeName',
content: state.themeName,
})
},
SET_LOCK_PASSWD: (state, lockPasswd) => {
state.lockPasswd = lockPasswd;
setStore({
name: 'lockPasswd',
content: state.lockPasswd,
type: 'session'
})
},
CLEAR_LOCK: (state) => {
state.isLock = false;
state.lockPasswd = '';
removeStore({
name: 'lockPasswd'
});
removeStore({
name: 'isLock'
});
},
mutations: {
SET_SHADE: (state, active) => {
state.isShade = active;
},
SET_COLLAPSE: (state) => {
state.isCollapse = !state.isCollapse;
},
SET_FULLSCREN: (state) => {
state.isFullScren = !state.isFullScren;
},
SET_SHOWCOLLAPSE: (state, active) => {
state.showCollapse = active;
setStore({
name: 'showCollapse',
content: state.showCollapse
})
},
SET_SHOWTAG: (state, active) => {
state.showTag = active;
setStore({
name: 'showTag',
content: state.showTag
})
},
SET_SHOWMENU: (state, active) => {
state.showMenu = active;
setStore({
name: 'showMenu',
content: state.showMenu
})
},
SET_SHOWLOCK: (state, active) => {
state.showLock = active;
setStore({
name: 'showLock',
content: state.showLock
})
},
SET_SHOWSEARCH: (state, active) => {
state.showSearch = active;
setStore({
name: 'showSearch',
content: state.showSearch
})
},
SET_SHOWFULLSCREN: (state, active) => {
state.showFullScren = active;
setStore({
name: 'showFullScren',
content: state.showFullScren
})
},
SET_SHOWDEBUG: (state, active) => {
state.showDebug = active;
setStore({
name: 'showDebug',
content: state.showDebug
})
},
SET_SHOWTHEME: (state, active) => {
state.showTheme = active;
setStore({
name: 'showTheme',
content: state.showTheme
})
},
SET_SHOWCOLOR: (state, active) => {
state.showColor = active;
setStore({
name: 'showColor',
content: state.showColor
})
},
SET_LOCK: (state) => {
state.isLock = true;
setStore({
name: 'isLock',
content: state.isLock,
type: 'session'
})
},
SET_SCREEN: (state, screen) => {
state.screen = screen;
},
SET_THEME: (state, color) => {
state.theme = color;
setStore({
name: 'theme',
content: state.theme,
})
},
SET_THEME_NAME: (state, themeName) => {
state.themeName = themeName;
setStore({
name: 'themeName',
content: state.themeName,
})
},
SET_LOCK_PASSWD: (state, lockPasswd) => {
state.lockPasswd = lockPasswd;
setStore({
name: 'lockPasswd',
content: state.lockPasswd,
type: 'session'
})
},
CLEAR_LOCK: (state) => {
state.isLock = false;
state.lockPasswd = '';
removeStore({
name: 'lockPasswd'
});
removeStore({
name: 'isLock'
});
},
}
}
}
export default common
\ No newline at end of file
export default common
import { setStore, getStore } from '@/util/store'
import { dateFormat } from '@/filters/'
import { sendLogs } from '@/api/admin/log'
import {getStore, setStore} from '@/util/store'
import {dateFormat} from '@/filters/'
import {sendLogs} from '@/api/admin/log'
const logs = {
state: {
logsList: getStore({ name: 'logsList' }) || [],
state: {
logsList: getStore({name: 'logsList'}) || [],
},
actions: {
//发送错误日志
SendLogs({state, commit}) {
return new Promise((resolve, reject) => {
sendLogs(state.logsList).then(() => {
commit('CLEAR_LOGS');
resolve();
}).catch(error => {
reject(error)
})
})
},
actions: {
//发送错误日志
SendLogs({ state, commit }) {
return new Promise((resolve, reject) => {
sendLogs(state.logsList).then(() => {
commit('CLEAR_LOGS');
resolve();
}).catch(error => {
reject(error)
})
})
},
},
mutations: {
ADD_LOGS: (state, {type, message, stack, info}) => {
state.logsList.push(Object.assign({
url: window.location.href,
time: dateFormat(new Date())
}, {
type,
message,
stack,
info: info.toString()
}))
setStore({name: 'logsList', content: state.logsList})
},
mutations: {
ADD_LOGS: (state, { type, message, stack, info }) => {
state.logsList.push(Object.assign({
url: window.location.href,
time: dateFormat(new Date())
}, {
type,
message,
stack,
info: info.toString()
}))
setStore({ name: 'logsList', content: state.logsList })
},
CLEAR_LOGS: (state) => {
state.logsList = [];
setStore({ name: 'logsList', content: state.logsList })
}
CLEAR_LOGS: (state) => {
state.logsList = [];
setStore({name: 'logsList', content: state.logsList})
}
}
};
......
import { setStore, getStore } from '@/util/store'
import { diff } from '@/util/util'
import {getStore, setStore} from '@/util/store'
import {diff} from '@/util/util'
import website from '@/const/website'
const isFirstPage = website.isFirstPage;
const tagWel = website.fistPage;
const tagObj = {
label: '', //标题名称
value: '', //标题的路径
params: '', //标题的路径参数
query: '', //标题的参数
group: [], //分组
}
//处理首个标签
label: '', //标题名称
value: '', //标题的路径
params: '', //标题的路径参数
query: '', //标题的参数
group: [], //分组
}
//处理首个标签
function setFistTag(list) {
if (list.length == 1) {
list[0].close = false;
} else {
list.forEach(ele => {
if (ele.value === tagWel.value && isFirstPage === false) {
ele.close = false
} else {
ele.close = true
}
})
}
if (list.length == 1) {
list[0].close = false;
} else {
list.forEach(ele => {
if (ele.value === tagWel.value && isFirstPage === false) {
ele.close = false
} else {
ele.close = true
}
})
}
}
const navs = {
state: {
tagList: getStore({ name: 'tagList' }) || [],
tag: getStore({ name: 'tag' }) || tagObj,
tagWel: tagWel
state: {
tagList: getStore({name: 'tagList'}) || [],
tag: getStore({name: 'tag'}) || tagObj,
tagWel: tagWel
},
actions: {},
mutations: {
ADD_TAG: (state, action) => {
state.tag = action;
setStore({name: 'tag', content: state.tag, type: 'session'})
if (state.tagList.some(ele => diff(ele, action))) return
state.tagList.push(action)
setFistTag(state.tagList);
setStore({name: 'tagList', content: state.tagList, type: 'session'})
},
actions: {
DEL_TAG: (state, action) => {
state.tagList = state.tagList.filter(item => {
return !diff(item, action);
})
setFistTag(state.tagList);
setStore({name: 'tagList', content: state.tagList, type: 'session'})
},
DEL_ALL_TAG: (state) => {
state.tagList = [state.tagWel];
setStore({name: 'tagList', content: state.tagList, type: 'session'})
},
DEL_TAG_OTHER: (state) => {
state.tagList = state.tagList.filter(item => item.value === state.tag.value)
setFistTag(state.tagList);
setStore({name: 'tagList', content: state.tagList, type: 'session'})
},
mutations: {
ADD_TAG: (state, action) => {
state.tag = action;
setStore({ name: 'tag', content: state.tag, type: 'session' })
if (state.tagList.some(ele => diff(ele, action))) return
state.tagList.push(action)
setFistTag(state.tagList);
setStore({ name: 'tagList', content: state.tagList, type: 'session' })
},
DEL_TAG: (state, action) => {
state.tagList = state.tagList.filter(item => {
return !diff(item, action);
})
setFistTag(state.tagList);
setStore({ name: 'tagList', content: state.tagList, type: 'session' })
},
DEL_ALL_TAG: (state) => {
state.tagList = [state.tagWel];
setStore({ name: 'tagList', content: state.tagList, type: 'session' })
},
DEL_TAG_OTHER: (state) => {
state.tagList = state.tagList.filter(item => item.value === state.tag.value)
setFistTag(state.tagList);
setStore({ name: 'tagList', content: state.tagList, type: 'session' })
},
}
}
}
export default navs
\ No newline at end of file
export default navs
import { setToken, removeToken } from '@/util/auth'
import { setStore, getStore } from '@/util/store'
import { isURL } from '@/util/validate'
import { logout, loginByUsername, loginByMobile, loginBySocial, getUserInfo } from '@/api/login'
import { encryption, deepClone } from '@/util/util'
import {removeToken, setToken} from '@/util/auth'
import {getStore, setStore} from '@/util/store'
import {isURL} from '@/util/validate'
import {getUserInfo, loginByMobile, loginBySocial, loginByUsername, logout} from '@/api/login'
import {deepClone, encryption} from '@/util/util'
import webiste from '@/const/website';
import { GetMenu } from '@/api/admin/menu'
import {GetMenu} from '@/api/admin/menu'
function addPath(ele, first) {
const propsConfig = webiste.menu.props;
const propsDefault = {
label: propsConfig.label || 'label',
path: propsConfig.path || 'path',
icon: propsConfig.icon || 'icon',
children: propsConfig.children || 'children'
const propsConfig = webiste.menu.props;
const propsDefault = {
label: propsConfig.label || 'label',
path: propsConfig.path || 'path',
icon: propsConfig.icon || 'icon',
children: propsConfig.children || 'children'
}
const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
if (!isChild && first) {
ele[propsDefault.path] = ele[propsDefault.path] + '/index'
return
}
ele[propsDefault.children].forEach(child => {
if (!isURL(child[propsDefault.path])) {
child[propsDefault.path] = `${ele[propsDefault.path]}/${child[propsDefault.path] ? child[propsDefault.path] : 'index'}`
}
const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
if (!isChild && first) {
ele[propsDefault.path] = ele[propsDefault.path] + '/index'
return
}
ele[propsDefault.children].forEach(child => {
if (!isURL(child[propsDefault.path])) {
child[propsDefault.path] = `${ele[propsDefault.path]}/${child[propsDefault.path]?child[propsDefault.path]:'index'}`
}
addPath(child);
})
addPath(child);
})
}
const user = {
state: {
userInfo: {},
permissions: {},
roles: [],
menu: getStore({
name: 'menu'
}) || [],
menuAll: [],
access_token: getStore({
name: 'access_token'
}) || '',
refresh_token: getStore({
name: 'refresh_token'
}) || ''
state: {
userInfo: {},
permissions: {},
roles: [],
menu: getStore({
name: 'menu'
}) || [],
menuAll: [],
access_token: getStore({
name: 'access_token'
}) || '',
refresh_token: getStore({
name: 'refresh_token'
}) || ''
},
actions: {
//根据用户名登录
LoginByUsername({commit}, userInfo) {
const user = encryption({
data: userInfo,
key: 'pigxpigxpigxpigx',
param: ['password']
})
return new Promise((resolve, reject) => {
loginByUsername(user.username, user.password, user.code, user.randomStr).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
//根据手机号登录
LoginByPhone({commit}, userInfo) {
return new Promise((resolve, reject) => {
loginByMobile(userInfo.mobile, userInfo.code).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
// 根据OpenId登录
LoginBySocial({commit}, param) {
return new Promise((resolve, reject) => {
loginBySocial(param.state, param.code).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
GetUserInfo({commit}) {
return new Promise((resolve, reject) => {
getUserInfo().then((res) => {
const data = res.data.data || {};
commit('SET_USERIFNO', data.sysUser);
commit('SET_ROLES', data.roles || []);
commit('SET_PERMISSIONS', data.permissions || [])
resolve(data);
}).catch((err) => {
reject();
})
})
},
//刷新token
RefeshToken({commit}) {
return new Promise((resolve, reject) => {
logout().then(() => {
commit('SET_TOKEN', new Date().getTime());
setToken();
resolve();
}).catch(error => {
reject(error)
})
})
},
// 登出
LogOut({commit}) {
return new Promise((resolve, reject) => {
logout().then(() => {
commit('SET_MENU', [])
commit('SET_PERMISSIONS', [])
commit('SET_USER_INFO', {})
commit('SET_ACCESS_TOKEN', '')
commit('SET_REFRESH_TOKEN', '')
commit('SET_ROLES', [])
commit('DEL_ALL_TAG')
commit('CLEAR_LOCK');
removeToken()
resolve()
}).catch(error => {
reject(error)
})
})
},
actions: {
//根据用户名登录
LoginByUsername({ commit }, userInfo) {
const user = encryption({
data: userInfo,
key: 'pigxpigxpigxpigx',
param: ['password']
})
return new Promise((resolve, reject) => {
loginByUsername(user.username, user.password, user.code, user.randomStr).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
//根据手机号登录
LoginByPhone({ commit }, userInfo) {
return new Promise((resolve, reject) => {
loginByMobile(userInfo.mobile, userInfo.code).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
// 根据OpenId登录
LoginBySocial({ commit }, param) {
return new Promise((resolve, reject) => {
loginBySocial(param.state, param.code).then(response => {
const data = response.data
setToken(data.access_token)
commit('SET_ACCESS_TOKEN', data.access_token)
commit('SET_REFRESH_TOKEN', data.refresh_token)
commit('CLEAR_LOCK')
resolve()
}).catch(error => {
reject(error)
})
})
},
GetUserInfo({ commit }) {
return new Promise((resolve, reject) => {
getUserInfo().then((res) => {
const data = res.data.data || {};
commit('SET_USERIFNO', data.sysUser);
commit('SET_ROLES', data.roles || []);
commit('SET_PERMISSIONS', data.permissions || [])
resolve(data);
}).catch((err) => {
reject();
})
})
},
//刷新token
RefeshToken({ commit }) {
return new Promise((resolve, reject) => {
logout().then(() => {
commit('SET_TOKEN', new Date().getTime());
setToken();
resolve();
}).catch(error => {
reject(error)
})
})
},
// 登出
LogOut({ commit }) {
return new Promise((resolve, reject) => {
logout().then(() => {
commit('SET_MENU', [])
commit('SET_PERMISSIONS', [])
commit('SET_USER_INFO', {})
commit('SET_ACCESS_TOKEN', '')
commit('SET_REFRESH_TOKEN', '')
commit('SET_ROLES', [])
commit('DEL_ALL_TAG')
commit('CLEAR_LOCK');
removeToken()
resolve()
}).catch(error => {
reject(error)
})
})
},
//注销session
FedLogOut({ commit }) {
return new Promise(resolve => {
commit('SET_MENU', [])
commit('SET_PERMISSIONS', [])
commit('SET_USER_INFO', {})
commit('SET_ACCESS_TOKEN', '')
commit('SET_REFRESH_TOKEN', '')
commit('SET_ROLES', [])
commit('DEL_ALL_TAG')
commit('CLEAR_LOCK');
removeToken()
resolve()
})
},
//获取系统菜单
GetMenu({
commit
}) {
return new Promise(resolve => {
GetMenu().then((res) => {
const data = res.data.data
let menu = deepClone(data);
menu.forEach(ele => {
addPath(ele);
})
commit('SET_MENU', menu)
resolve(menu)
})
})
}
//注销session
FedLogOut({commit}) {
return new Promise(resolve => {
commit('SET_MENU', [])
commit('SET_PERMISSIONS', [])
commit('SET_USER_INFO', {})
commit('SET_ACCESS_TOKEN', '')
commit('SET_REFRESH_TOKEN', '')
commit('SET_ROLES', [])
commit('DEL_ALL_TAG')
commit('CLEAR_LOCK');
removeToken()
resolve()
})
},
//获取系统菜单
GetMenu({
commit
}) {
return new Promise(resolve => {
GetMenu().then((res) => {
const data = res.data.data
let menu = deepClone(data);
menu.forEach(ele => {
addPath(ele);
})
commit('SET_MENU', menu)
resolve(menu)
})
})
}
},
mutations: {
SET_ACCESS_TOKEN: (state, access_token) => {
state.access_token = access_token
setStore({
name: 'access_token',
content: state.access_token,
type: 'session'
})
},
SET_REFRESH_TOKEN: (state, rfToken) => {
state.refresh_token = rfToken
setStore({
name: 'refresh_token',
content: state.refresh_token,
type: 'session'
})
},
SET_USERIFNO: (state, userInfo) => {
state.userInfo = userInfo;
},
mutations: {
SET_ACCESS_TOKEN: (state, access_token) => {
state.access_token = access_token
setStore({
name: 'access_token',
content: state.access_token,
type: 'session'
})
},
SET_REFRESH_TOKEN: (state, rfToken) => {
state.refresh_token = rfToken
setStore({
name: 'refresh_token',
content: state.refresh_token,
type: 'session'
})
},
SET_USERIFNO: (state, userInfo) => {
state.userInfo = userInfo;
},
SET_MENU: (state, menu) => {
state.menu = menu
setStore({
name: 'menu',
content: state.menu,
type: 'session'
})
SET_MENU: (state, menu) => {
state.menu = menu
setStore({
name: 'menu',
content: state.menu,
type: 'session'
})
},
SET_MENU_ALL: (state, menuAll) => {
state.menuAll = menuAll;
},
SET_ROLES: (state, roles) => {
state.roles = roles;
},
SET_PERMISSIONS: (state, permissions) => {
const list = {}
for (let i = 0; i < permissions.length; i++) {
list[permissions[i]] = true
}
state.permissions = list
}
},
SET_MENU_ALL: (state, menuAll) => {
state.menuAll = menuAll;
},
SET_ROLES: (state, roles) => {
state.roles = roles;
},
SET_PERMISSIONS: (state, permissions) => {
const list = {}
for (let i = 0; i < permissions.length; i++) {
list[permissions[i]] = true
}
state.permissions = list
}
}
}
export default user
export default {
getScreen: function() {
var width = document.body.clientWidth;
if (width >= 1200) {
return 3; //大屏幕
} else if (width >= 992) {
return 2; //中屏幕
} else if (width >= 768) {
return 1; //小屏幕
} else {
return 0; //超小屏幕
}
getScreen: function () {
var width = document.body.clientWidth;
if (width >= 1200) {
return 3; //大屏幕
} else if (width >= 992) {
return 2; //中屏幕
} else if (width >= 768) {
return 1; //小屏幕
} else {
return 0; //超小屏幕
}
}
\ No newline at end of file
}
}
import Cookies from 'js-cookie'
const TokenKey = 'x-access-token'
export function getToken() {
return Cookies.get(TokenKey)
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
\ No newline at end of file
return Cookies.remove(TokenKey)
}
export const calcDate = (date1, date2) => {
var date3 = date2 - date1;
var date3 = date2 - date1;
var days = Math.floor(date3 / (24 * 3600 * 1000))
var days = Math.floor(date3 / (24 * 3600 * 1000))
var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
var hours = Math.floor(leave1 / (3600 * 1000))
var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
var hours = Math.floor(leave1 / (3600 * 1000))
var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
var minutes = Math.floor(leave2 / (60 * 1000))
var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
var minutes = Math.floor(leave2 / (60 * 1000))
var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
var seconds = Math.round(date3 / 1000)
return {
leave1,
leave2,
leave3,
days: days,
hours: hours,
minutes: minutes,
seconds: seconds,
}
}
\ No newline at end of file
var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
var seconds = Math.round(date3 / 1000)
return {
leave1,
leave2,
leave3,
days: days,
hours: hours,
minutes: minutes,
seconds: seconds,
}
}
import {
validatenull
} from '@/util/validate';
import {validatenull} from '@/util/validate';
/**
* 存储localStorage
*/
export const setStore = (params) => {
let {
name,
content,
type,
} = params;
let obj = {
dataType: typeof(content),
content: content,
type: type,
datetime: new Date().getTime()
}
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj));
else window.localStorage.setItem(name, JSON.stringify(obj));
}
/**
* 获取localStorage
*/
let {
name,
content,
type,
} = params;
let obj = {
dataType: typeof (content),
content: content,
type: type,
datetime: new Date().getTime()
}
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj));
else window.localStorage.setItem(name, JSON.stringify(obj));
}
/**
* 获取localStorage
*/
export const getStore = (params) => {
let {
name,
debug
} = params;
let obj = {},
content;
obj = window.sessionStorage.getItem(name);
if (validatenull(obj)) obj = window.localStorage.getItem(name);
if (validatenull(obj)) return;
obj = JSON.parse(obj);
if (debug) {
return obj;
}
if (obj.dataType == 'string') {
content = obj.content;
} else if (obj.dataType == 'number') {
content = Number(obj.content);
} else if (obj.dataType == 'boolean') {
content = eval(obj.content);
} else if (obj.dataType == 'object') {
content = obj.content;
}
return content;
}
/**
* 删除localStorage
*/
let {
name,
debug
} = params;
let obj = {},
content;
obj = window.sessionStorage.getItem(name);
if (validatenull(obj)) obj = window.localStorage.getItem(name);
if (validatenull(obj)) return;
obj = JSON.parse(obj);
if (debug) {
return obj;
}
if (obj.dataType == 'string') {
content = obj.content;
} else if (obj.dataType == 'number') {
content = Number(obj.content);
} else if (obj.dataType == 'boolean') {
content = eval(obj.content);
} else if (obj.dataType == 'object') {
content = obj.content;
}
return content;
}
/**
* 删除localStorage
*/
export const removeStore = params => {
let {
name
} = params;
window.localStorage.removeItem(name);
window.sessionStorage.removeItem(name);
let {
name
} = params;
window.localStorage.removeItem(name);
window.sessionStorage.removeItem(name);
}
/**
* 获取全部localStorage
*/
export const getAllStore = (params) => {
let list = [];
let {
type
} = params;
for (let i = 1; i <= window.sessionStorage.length; i++) {
if (type) {
list.push({
name: window.sessionStorage.key(i),
content: getStore({
name: window.sessionStorage.key(i),
type: 'session'
})
})
} else {
list.push(getStore({
name: window.localStorage.key(i),
content: getStore({
name: window.localStorage.key(i),
})
}))
}
let list = [];
let {
type
} = params;
for (let i = 1; i <= window.sessionStorage.length; i++) {
if (type) {
list.push({
name: window.sessionStorage.key(i),
content: getStore({
name: window.sessionStorage.key(i),
type: 'session'
})
})
} else {
list.push(getStore({
name: window.localStorage.key(i),
content: getStore({
name: window.localStorage.key(i),
})
}))
}
}
return list;
return list;
}
......@@ -94,12 +93,12 @@ export const getAllStore = (params) => {
* 清空全部localStorage
*/
export const clearStore = (params) => {
let {
type
} = params;
if (type) {
window.sessionStorage.clear();
return
}
window.localStorage.clear()
}
\ No newline at end of file
let {
type
} = params;
if (type) {
window.sessionStorage.clear();
return
}
window.localStorage.clear()
}
import { validatenull } from './validate'
import {validatenull} from './validate'
//表单序列化
export const serialize = data => {
let list = [];
Object.keys(data).forEach(ele => {
list.push(`${ele}=${data[ele]}`)
})
return list.join('&');
let list = [];
Object.keys(data).forEach(ele => {
list.push(`${ele}=${data[ele]}`)
})
return list.join('&');
};
export const getObjType = obj => {
var toString = Object.prototype.toString;
var map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object'
};
if (obj instanceof Element) {
return 'element';
}
return map[toString.call(obj)];
var toString = Object.prototype.toString;
var map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object'
};
if (obj instanceof Element) {
return 'element';
}
return map[toString.call(obj)];
};
/**
* 对象深拷贝
*/
export const deepClone = data => {
var type = getObjType(data);
var obj;
if (type === 'array') {
obj = [];
} else if (type === 'object') {
obj = {};
} else {
//不再具有下一层次
return data;
var type = getObjType(data);
var obj;
if (type === 'array') {
obj = [];
} else if (type === 'object') {
obj = {};
} else {
//不再具有下一层次
return data;
}
if (type === 'array') {
for (var i = 0, len = data.length; i < len; i++) {
obj.push(deepClone(data[i]));
}
if (type === 'array') {
for (var i = 0, len = data.length; i < len; i++) {
obj.push(deepClone(data[i]));
}
} else if (type === 'object') {
for (var key in data) {
obj[key] = deepClone(data[key]);
}
} else if (type === 'object') {
for (var key in data) {
obj[key] = deepClone(data[key]);
}
return obj;
}
return obj;
};
/**
* 判断路由是否相等
*/
export const diff = (obj1, obj2) => {
delete obj1.close;
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if (!o1 || !o2) { /* 判断不是对象 */
return obj1 === obj2;
}
delete obj1.close;
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if (!o1 || !o2) { /* 判断不是对象 */
return obj1 === obj2;
}
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
//Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
}
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
//Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
}
for (var attr in obj1) {
var t1 = obj1[attr] instanceof Object;
var t2 = obj2[attr] instanceof Object;
if (t1 && t2) {
return diff(obj1[attr], obj2[attr]);
} else if (obj1[attr] !== obj2[attr]) {
return false;
}
}
return true;
for (var attr in obj1) {
var t1 = obj1[attr] instanceof Object;
var t2 = obj2[attr] instanceof Object;
if (t1 && t2) {
return diff(obj1[attr], obj2[attr]);
} else if (obj1[attr] !== obj2[attr]) {
return false;
}
/**
* 设置灰度模式
*/
}
return true;
}
/**
* 设置灰度模式
*/
export const toggleGrayMode = (status) => {
if (status) {
document.body.className = document.body.className + ' grayMode';
} else {
document.body.className = document.body.className.replace(' grayMode', '');
}
if (status) {
document.body.className = document.body.className + ' grayMode';
} else {
document.body.className = document.body.className.replace(' grayMode', '');
}
};
/**
* 设置主题
*/
export const setTheme = (name) => {
document.body.className = name;
document.body.className = name;
}
/**
*加密处理
*/
export const encryption = (params) => {
let {
let {
data,
type,
param,
key
} = params
const result = JSON.parse(JSON.stringify(data))
if (type === 'Base64') {
param.forEach(ele => {
result[ele] = btoa(result[ele])
})
} else {
param.forEach(ele => {
var data = result[ele]
key = CryptoJS.enc.Latin1.parse(key)
var iv = key
// 加密
var encrypted = CryptoJS.AES.encrypt(
data,
type,
param,
key
} = params
const result = JSON.parse(JSON.stringify(data))
if (type === 'Base64') {
param.forEach(ele => {
result[ele] = btoa(result[ele])
})
} else {
param.forEach(ele => {
var data = result[ele]
key = CryptoJS.enc.Latin1.parse(key)
var iv = key
// 加密
var encrypted = CryptoJS.AES.encrypt(
data,
key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
})
result[ele] = encrypted.toString()
key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
})
}
return result
result[ele] = encrypted.toString()
})
}
return result
}
......@@ -134,85 +134,86 @@ export const encryption = (params) => {
* 浏览器判断是否全屏
*/
export const fullscreenToggel = () => {
if (fullscreenEnable()) {
exitFullScreen();
} else {
reqFullScreen();
}
if (fullscreenEnable()) {
exitFullScreen();
} else {
reqFullScreen();
}
};
/**
* esc监听全屏
*/
export const listenfullscreen = (callback) => {
function listen() {
callback()
}
document.addEventListener("fullscreenchange", function() {
listen();
});
document.addEventListener("mozfullscreenchange", function() {
listen();
});
document.addEventListener("webkitfullscreenchange", function() {
listen();
});
document.addEventListener("msfullscreenchange", function() {
listen();
});
function listen() {
callback()
}
document.addEventListener("fullscreenchange", function () {
listen();
});
document.addEventListener("mozfullscreenchange", function () {
listen();
});
document.addEventListener("webkitfullscreenchange", function () {
listen();
});
document.addEventListener("msfullscreenchange", function () {
listen();
});
};
/**
* 浏览器判断是否全屏
*/
export const fullscreenEnable = () => {
var isFullscreen = document.fullscreenEnabled ||
window.fullScreen ||
document.mozFullscreenEnabled ||
document.webkitIsFullScreen;
return isFullscreen;
var isFullscreen = document.fullscreenEnabled ||
window.fullScreen ||
document.mozFullscreenEnabled ||
document.webkitIsFullScreen;
return isFullscreen;
}
/**
* 浏览器全屏
*/
export const reqFullScreen = () => {
if (document.documentElement.requestFullScreen) {
document.documentElement.requestFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
document.documentElement.webkitRequestFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
document.documentElement.mozRequestFullScreen();
}
if (document.documentElement.requestFullScreen) {
document.documentElement.requestFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
document.documentElement.webkitRequestFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
document.documentElement.mozRequestFullScreen();
}
};
/**
* 浏览器退出全屏
*/
export const exitFullScreen = () => {
if (document.documentElement.requestFullScreen) {
document.exitFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
if (document.documentElement.requestFullScreen) {
document.exitFullScreen();
} else if (document.documentElement.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (document.documentElement.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
};
/**
* 递归寻找子类的父类
*/
export const findParent = (menu, id) => {
for (let i = 0; i < menu.length; i++) {
if (menu[i].children.length != 0) {
for (let j = 0; j < menu[i].children.length; j++) {
if (menu[i].children[j].id == id) {
return menu[i];
} else {
if (menu[i].children[j].children.length != 0) {
return findParent(menu[i].children[j].children, id);
}
}
}
for (let i = 0; i < menu.length; i++) {
if (menu[i].children.length != 0) {
for (let j = 0; j < menu[i].children.length; j++) {
if (menu[i].children[j].id == id) {
return menu[i];
} else {
if (menu[i].children[j].children.length != 0) {
return findParent(menu[i].children[j].children, id);
}
}
}
}
}
};
/**
* 判断2个对象属性和值是否相等
......@@ -223,91 +224,91 @@ export const findParent = (menu, id) => {
*/
export const loadStyle = url => {
const link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = url;
const head = document.getElementsByTagName('head')[0];
head.appendChild(link);
const link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = url;
const head = document.getElementsByTagName('head')[0];
head.appendChild(link);
};
/**
* 判断路由是否相等
*/
export const isObjectValueEqual = (a, b) => {
let result = true;
Object.keys(a).forEach(ele => {
const type = typeof(a[ele]);
if (type === 'string' && a[ele] !== b[ele]) result = false;
else if (type === 'object' && JSON.stringify(a[ele]) !== JSON.stringify(b[ele])) result = false;
})
return result;
}
/**
* 根据字典的value显示label
*/
let result = true;
Object.keys(a).forEach(ele => {
const type = typeof (a[ele]);
if (type === 'string' && a[ele] !== b[ele]) result = false;
else if (type === 'object' && JSON.stringify(a[ele]) !== JSON.stringify(b[ele])) result = false;
})
return result;
}
/**
* 根据字典的value显示label
*/
export const findByvalue = (dic, value) => {
let result = '';
if (validatenull(dic)) return value;
if (typeof(value) == 'string' || typeof(value) == 'number' || typeof(value) == 'boolean') {
let index = 0;
index = findArray(dic, value);
if (index != -1) {
result = dic[index].label;
} else {
result = value;
}
} else if (value instanceof Array) {
result = [];
let index = 0;
value.forEach(ele => {
index = findArray(dic, ele);
if (index != -1) {
result.push(dic[index].label);
} else {
result.push(value);
}
});
result = result.toString();
let result = '';
if (validatenull(dic)) return value;
if (typeof (value) == 'string' || typeof (value) == 'number' || typeof (value) == 'boolean') {
let index = 0;
index = findArray(dic, value);
if (index != -1) {
result = dic[index].label;
} else {
result = value;
}
return result;
} else if (value instanceof Array) {
result = [];
let index = 0;
value.forEach(ele => {
index = findArray(dic, ele);
if (index != -1) {
result.push(dic[index].label);
} else {
result.push(value);
}
});
result = result.toString();
}
return result;
};
/**
* 根据字典的value查找对应的index
*/
export const findArray = (dic, value) => {
for (let i = 0; i < dic.length; i++) {
if (dic[i].value == value) {
return i;
}
for (let i = 0; i < dic.length; i++) {
if (dic[i].value == value) {
return i;
}
return -1;
}
return -1;
};
/**
* 生成随机len位数字
*/
export const randomLenNum = (len, date) => {
let random = '';
random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len ? len : 4);
if (date) random = random + Date.now();
return random;
let random = '';
random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len ? len : 4);
if (date) random = random + Date.now();
return random;
};
/**
* 打开小窗口
*/
export const openWindow = (url, title, w, h) => {
// Fixes dual-screen position Most browsers Firefox
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top
// Fixes dual-screen position Most browsers Firefox
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top
const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width
const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height
const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width
const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height
const left = ((width / 2) - (w / 2)) + dualScreenLeft
const top = ((height / 2) - (h / 2)) + dualScreenTop
const newWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left)
const left = ((width / 2) - (w / 2)) + dualScreenLeft
const top = ((height / 2) - (h / 2)) + dualScreenTop
const newWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left)
// Puts focus on the newWindow
if (window.focus) {
newWindow.focus()
}
}
\ No newline at end of file
// Puts focus on the newWindow
if (window.focus) {
newWindow.focus()
}
}
......@@ -3,7 +3,7 @@
* @param {*} s
*/
export function isEmail(s) {
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}
/**
......@@ -11,7 +11,7 @@ export function isEmail(s) {
* @param {*} s
*/
export function isMobile(s) {
return /^1[0-9]{10}$/.test(s)
return /^1[0-9]{10}$/.test(s)
}
/**
......@@ -19,7 +19,7 @@ export function isMobile(s) {
* @param {*} s
*/
export function isPhone(s) {
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}
/**
......@@ -27,223 +27,231 @@ export function isPhone(s) {
* @param {*} s
*/
export function isURL(s) {
return /^http[s]?:\/\/.*/.test(s)
return /^http[s]?:\/\/.*/.test(s)
}
export function isvalidUsername(str) {
const valid_map = ['admin', 'editor']
return valid_map.indexOf(str.trim()) >= 0
const valid_map = ['admin', 'editor']
return valid_map.indexOf(str.trim()) >= 0
}
/* 合法uri*/
export function validateURL(textval) {
const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
return urlregex.test(textval)
const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
return urlregex.test(textval)
}
/* 小写字母*/
export function validateLowerCase(str) {
const reg = /^[a-z]+$/
return reg.test(str)
const reg = /^[a-z]+$/
return reg.test(str)
}
/* 大写字母*/
export function validateUpperCase(str) {
const reg = /^[A-Z]+$/
return reg.test(str)
const reg = /^[A-Z]+$/
return reg.test(str)
}
/* 大小写字母*/
export function validatAlphabets(str) {
const reg = /^[A-Za-z]+$/
return reg.test(str)
const reg = /^[A-Za-z]+$/
return reg.test(str)
}
/*验证pad还是pc*/
export const vaildatePc = function() {
const userAgentInfo = navigator.userAgent;
const Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"
];
let flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
export const vaildatePc = function () {
const userAgentInfo = navigator.userAgent;
const Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"
];
let flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
/**
* validate email
* @param email
* @returns {boolean}
*/
}
return flag;
}
/**
* validate email
* @param email
* @returns {boolean}
*/
export function validateEmail(email) {
const re = /^(([^<>()\\[\]\\.,;:\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,}))$/
return re.test(email)
const re = /^(([^<>()\\[\]\\.,;:\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,}))$/
return re.test(email)
}
/**
* 判断身份证号码
*/
export function cardid(code) {
let list = [];
let result = true;
let msg = '';
var city = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江 ",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北 ",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏 ",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外 "
};
if (!validatenull(code)) {
if (code.length == 18) {
if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
msg = "证件号码格式错误";
} else if (!city[code.substr(0, 2)]) {
msg = "地址编码错误";
} else {
//18位身份证需要验证最后一位校验位
code = code.split('');
//∑(ai×Wi)(mod 11)
//加权因子
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//校验位
var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];
var sum = 0;
var ai = 0;
var wi = 0;
for (var i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
if (parity[sum % 11] != code[17]) {
msg = "证件号码校验位错误";
} else {
result = false;
}
}
let list = [];
let result = true;
let msg = '';
var city = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江 ",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北 ",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏 ",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外 "
};
if (!validatenull(code)) {
if (code.length == 18) {
if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
msg = "证件号码格式错误";
} else if (!city[code.substr(0, 2)]) {
msg = "地址编码错误";
} else {
//18位身份证需要验证最后一位校验位
code = code.split('');
//∑(ai×Wi)(mod 11)
//加权因子
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//校验位
var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];
var sum = 0;
var ai = 0;
var wi = 0;
for (var i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
if (parity[sum % 11] != code[17]) {
msg = "证件号码校验位错误";
} else {
msg = "证件号码长度不为18位";
result = false;
}
}
} else {
msg = "证件号码不能为空";
msg = "证件号码长度不为18位";
}
list.push(result);
list.push(msg);
return list;
} else {
msg = "证件号码不能为空";
}
list.push(result);
list.push(msg);
return list;
}
/**
* 判断手机号码是否正确
*/
export function isvalidatemobile(phone) {
let list = [];
let result = true;
let msg = '';
var isPhone = /^0\d{2,3}-?\d{7,8}$/;
//增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678]
if (!validatenull(phone)) {
if (phone.length == 11) {
if (isPhone.test(phone)) {
msg = '手机号码格式不正确';
} else {
result = false;
}
} else {
msg = '手机号码长度不为11位';
}
let list = [];
let result = true;
let msg = '';
var isPhone = /^0\d{2,3}-?\d{7,8}$/;
//增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678]
if (!validatenull(phone)) {
if (phone.length == 11) {
if (isPhone.test(phone)) {
msg = '手机号码格式不正确';
} else {
result = false;
}
} else {
msg = '手机号码不能为空';
msg = '手机号码长度不为11位';
}
list.push(result);
list.push(msg);
return list;
} else {
msg = '手机号码不能为空';
}
list.push(result);
list.push(msg);
return list;
}
/**
* 判断姓名是否正确
*/
export function validatename(name) {
var regName = /^[\u4e00-\u9fa5]{2,4}$/;
if (!regName.test(name)) return false;
return true;
var regName = /^[\u4e00-\u9fa5]{2,4}$/;
if (!regName.test(name)) return false;
return true;
}
/**
* 判断是否为整数
*/
export function validatenum(num, type) {
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d]/g;
if (!regName.test(num)) return false;
}
return true;
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d]/g;
if (!regName.test(num)) return false;
}
return true;
}
/**
* 判断是否为小数
*/
export function validatenumord(num, type) {
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d.]/g;
if (!regName.test(num)) return false;
}
return true;
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d.]/g;
if (!regName.test(num)) return false;
}
return true;
}
/**
* 判断是否为空
*/
export function validatenull(val) {
if (typeof val == 'boolean') {
return false;
}
if (typeof val == 'number') {
return false;
}
if (val instanceof Array) {
if (val.length == 0) return true;
} else if (val instanceof Object) {
if (JSON.stringify(val) === '{}') return true;
} else {
if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;
return false;
}
if (typeof val == 'boolean') {
return false;
}
\ No newline at end of file
}
if (typeof val == 'number') {
return false;
}
if (val instanceof Array) {
if (val.length == 0) return true;
} else if (val instanceof Object) {
if (JSON.stringify(val) === '{}') return true;
} else {
if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;
return false;
}
return false;
}
......@@ -5,7 +5,8 @@
<p class="header__title">{{name}}</p>
<el-button class="header__btn"
type="primary"
@click="breaks">关闭返回列表</el-button>
@click="breaks">关闭返回列表
</el-button>
</div>
</basic-container>
......@@ -17,51 +18,59 @@
</template>
<script>
export default {
data () {
return {
id: '',
name: ''
}
},
created () {
this.id = this.$route.params.id
this.name = this.$route.query.name
},
computed: {
src () {
return `${this.actUrl}${this.id}`;
}
},
methods: {
breaks () {
this.$router.$avueRouter.closeTag();
this.$router.push({ path: '/activti/activiti' })
export default {
data() {
return {
id: '',
name: ''
}
},
created() {
this.id = this.$route.params.id
this.name = this.$route.query.name
},
computed: {
src() {
return `${this.actUrl}${this.id}`;
}
},
methods: {
breaks() {
this.$router.$avueRouter.closeTag();
this.$router.push({path: '/activti/activiti'})
}
}
}
}
</script>
<style lang="scss" scoped>
.header {
position: relative;
display: flex;
align-items: center;
&__title {
font-size: 22px;
}
&__btn {
position: absolute;
right: 10px;
.execution {
height: 99%;
.header {
position: relative;
display: flex;
align-items: center;
&__title {
font-size: 22px;
}
&__btn {
position: absolute;
right: 10px;
}
}
.main {
margin: 0 auto;
width: 99%;
height: calc(100% - 100px);
background-color: #fff;
padding: 20px;
border-radius: 3px;
box-sizing: border-box;
}
}
}
.main {
margin: 0 auto;
width: 99%;
height: calc(100% - 100px);
background-color: #fff;
padding: 20px;
border-radius: 3px;
box-sizing: border-box;
}
</style>
......@@ -32,13 +32,16 @@
slot="menuBtn">
<el-dropdown-item divided
v-if="permissions.act_model_manage"
@click.native="handleView(scope.row,scope.index)">模型图</el-dropdown-item>
@click.native="handleView(scope.row,scope.index)">模型图
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_model_manage"
@click.native="handleDeploy(scope.row,scope.index)">部署</el-dropdown-item>
@click.native="handleDeploy(scope.row,scope.index)">部署
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_model_manage"
@click.native="handleDel(scope.row,scope.index)">删除</el-dropdown-item>
@click.native="handleDel(scope.row,scope.index)">删除
</el-dropdown-item>
</template>
</avue-crud>
......@@ -47,126 +50,125 @@
</template>
<script>
import { fetchList, delObj, addObj, deploy } from '@/api/activiti/activiti'
import { tableOption } from '@/const/crud/activiti/activiti'
import { mapGetters } from 'vuex'
export default {
name: 'activiti',
data () {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page,params) {
this.tableLoading = true
fetchList(Object.assign({
descs: 'create_time',
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {addObj, delObj, deploy, fetchList} from '@/api/activiti/activiti'
import {tableOption} from '@/const/crud/activiti/activiti'
import {mapGetters} from 'vuex'
export default {
name: 'activiti',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created() {
},
handleView (row, index) {
const name = `模型id为${row.id}${row.name}流程图`,
src = `/activti/detail/${row.id}`;
this.$router.push({
path: src,
query: {
name: name
}
})
mounted: function () {
},
handleDel (row, index) {
this.$refs.crud.rowDel(row, index)
computed: {
...mapGetters(['permissions'])
},
handleDeploy: function (row, index) {
var _this = this
this.$confirm('是否确认部署ID为"' + row.id + '"的模型?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return deploy(row.id)
})
.then(data => {
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
descs: 'create_time',
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
handleView(row, index) {
const name = `模型id为${row.id}${row.name}流程图`,
src = `/activti/detail/${row.id}`;
this.$router.push({
path: src,
query: {
name: name
}
})
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
handleDeploy: function (row, index) {
var _this = this
this.$confirm('是否确认部署ID为"' + row.id + '"的模型?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return deploy(row.id)
}).then(data => {
this.getList(this.page)
_this.$message({
showClose: true,
message: '部署成功',
type: 'success'
})
}).catch(function (err) {
})
.catch(function (err) { })
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为"' + row.id + '"的模型?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为"' + row.id + '"的模型?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.id)
})
.then(data => {
}).then(data => {
this.getList(this.page)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
}).catch(function (err) {
})
.catch(function (err) { })
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
this.getList(this.page)
})
done()
},
/**
* 搜索回调
*/
searchChange(form) {
this.getList(this.page, form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
})
},
/**
* 搜索回调
*/
searchChange (form) {
this.getList(this.page,form)
},
/**
* 刷新回调
*/
refreshChange () {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -33,20 +33,24 @@
<el-button type="primary"
@click="handleAdd"
size="small"
v-if="permissions.act_leavebill_add">新 增</el-button>
v-if="permissions.act_leavebill_add">新 增
</el-button>
</template>
<template slot-scope="scope"
slot="menuBtn">
<el-dropdown-item divided
v-if="permissions.act_leavebill_edit && scope.row.state == 0"
@click.native="handleSubmit(scope.row,scope.index)">提交</el-dropdown-item>
@click.native="handleSubmit(scope.row,scope.index)">提交
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_leavebill_edit"
@click.native="handleEdit(scope.row,scope.index)">编辑</el-dropdown-item>
@click.native="handleEdit(scope.row,scope.index)">编辑
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_leavebill_del"
@click.native="handleDel(scope.row,'suspend')">删除</el-dropdown-item>
@click.native="handleDel(scope.row,'suspend')">删除
</el-dropdown-item>
</template>
</avue-crud>
</basic-container>
......@@ -54,9 +58,10 @@
</template>
<script>
import { fetchList, getObj, addObj, putObj, delObj,submit } from '@/api/activiti/leave-bill'
import { tableOption } from '@/const/crud/activiti/leave-bill'
import { mapGetters } from 'vuex'
import {addObj, delObj, fetchList, getObj, putObj, submit} from '@/api/activiti/leave-bill'
import {tableOption} from '@/const/crud/activiti/leave-bill'
import {mapGetters} from 'vuex'
export default {
name: 'leave-bill',
data() {
......@@ -73,127 +78,125 @@
},
created() {
},
mounted: function() { },
mounted: function () {
},
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page,params) {
this.tableLoading = true
fetchList(Object.assign({
},
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
descs: 'create_time',
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function() {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function(row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.leaveId)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
})
.then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
})
.catch(function(err) { })
},
handleSubmit: function(row, index) {
var _this = this
this.$confirm('是否确认提交ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return submit(row.leaveId)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
this.getList(this.page)
}).catch(function(err) { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function(row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function(row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* 搜索回调
*/
searchChange(form) {
handleSubmit: function (row, index) {
var _this = this
this.$confirm('是否确认提交ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return submit(row.leaveId)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
this.getList(this.page)
})
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* 搜索回调
*/
searchChange(form) {
this.page.state = form.state
this.getList(this.page,form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
this.getList(this.page, form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -34,100 +34,105 @@
divided
v-if="permissions.act_process_manage"
@click.native="handlePic(scope.row,scope.index)"
>流程图</el-dropdown-item>
>流程图
</el-dropdown-item>
<el-dropdown-item
divided
v-if="permissions.act_process_manage && scope.row.suspend"
@click.native="handleStatus(scope.row,'active')"
>激活</el-dropdown-item>
>激活
</el-dropdown-item>
<el-dropdown-item
divided
v-if="permissions.act_process_manage && !scope.row.suspend"
@click.native="handleStatus(scope.row,'suspend')"
>失效</el-dropdown-item>
>失效
</el-dropdown-item>
<el-dropdown-item
divided
v-if="permissions.act_process_manage"
@click.native="handleDel(scope.row,'suspend')"
>删除</el-dropdown-item>
>删除
</el-dropdown-item>
</template>
</avue-crud>
</basic-container>
<el-dialog title="流程图" :visible.sync="showPicDialog">
<img :src="actPicUrl" width="100%" style="margin-left:-60px">
<img :src="actPicUrl" width="100%">
</el-dialog>
</div>
</template>
<script>
import { fetchList, delObj, addObj, status } from "@/api/activiti/process";
import { tableOption } from "@/const/crud/activiti/process";
import { mapGetters } from "vuex";
export default {
name: "process",
data() {
return {
showPicDialog: false,
actPicUrl: "",
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
};
},
created() {},
mounted: function() {},
computed: {
...mapGetters(["permissions"])
},
methods: {
getList(page, params) {
this.tableLoading = true;
fetchList(
Object.assign(
{
descs: "create_time",
current: page.currentPage,
size: page.pageSize
},
params
)
).then(response => {
this.tableData = response.data.data.records;
this.page.total = response.data.data.total;
this.tableLoading = false;
});
import {addObj, delObj, fetchList, status} from "@/api/activiti/process";
import {tableOption} from "@/const/crud/activiti/process";
import {mapGetters} from "vuex";
export default {
name: "process",
data() {
return {
showPicDialog: false,
actPicUrl: "",
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
};
},
created() {
},
mounted: function () {
},
handlePic(row, index) {
this.actPicUrl =
`/act/process/resource/` +
row.deploymentId +
"/" +
row.processonDefinitionId +
"/image";
this.showPicDialog = true;
computed: {
...mapGetters(["permissions"])
},
handleStatus(row, type) {
var _this = this;
this.$confirm(
'是否确认操作ID为"' + row.processonDefinitionId + '"的流程?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
)
.then(function() {
methods: {
getList(page, params) {
this.tableLoading = true;
fetchList(
Object.assign(
{
descs: "create_time",
current: page.currentPage,
size: page.pageSize
},
params
)
).then(response => {
this.tableData = response.data.data.records;
this.page.total = response.data.data.total;
this.tableLoading = false;
});
},
handlePic(row, index) {
this.actPicUrl =
`/act/process/resource/` +
row.deploymentId +
"/" +
row.processonDefinitionId +
"/image";
this.showPicDialog = true;
},
handleStatus(row, type) {
var _this = this;
this.$confirm(
'是否确认操作ID为"' + row.processonDefinitionId + '"的流程?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
).then(function () {
return status(row.processonDefinitionId, type);
})
.then(data => {
}).then(data => {
this.getList(this.page);
_this.$message({
showClose: true,
......@@ -135,49 +140,46 @@ export default {
type: "success"
});
})
.catch(function(err) {});
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index);
},
rowDel: function(row, index) {
var _this = this;
this.$confirm(
'是否确认删除ID为"' + row.deploymentId + '"的模型?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
)
.then(function() {
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index);
},
rowDel: function (row, index) {
var _this = this;
this.$confirm(
'是否确认删除ID为"' + row.deploymentId + '"的模型?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
).then(function () {
return delObj(row.deploymentId);
})
.then(data => {
}).then(data => {
this.getList(this.page);
_this.$message({
showClose: true,
message: "删除成功",
type: "success"
});
})
.catch(function(err) {});
},
/**
* 搜索回调
*/
searchChange(form) {
this.getList(this.page, form);
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page);
}).catch(function (err) {
});
},
/**
* 搜索回调
*/
searchChange(form) {
this.getList(this.page, form);
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page);
}
}
}
};
};
</script>
<style lang="scss" scoped>
......
......@@ -29,13 +29,16 @@
slot="menuBtn">
<el-dropdown-item divided
v-if="permissions.act_task_manage"
@click.native="audit(scope.row,scope.index)">审批</el-dropdown-item>
@click.native="audit(scope.row,scope.index)">审批
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_task_manage"
@click.native="comment(scope.row,scope.index)">批注</el-dropdown-item>
@click.native="comment(scope.row,scope.index)">批注
</el-dropdown-item>
<el-dropdown-item divided
v-if="permissions.act_task_manage"
@click.native="viewPic(scope.row,scope.index)">流程图</el-dropdown-item>
@click.native="viewPic(scope.row,scope.index)">流程图
</el-dropdown-item>
</template>
</avue-crud>
</basic-container>
......@@ -43,10 +46,11 @@
:visible.sync="showTask">
<avue-form ref="form" v-model="obj" :option="formOption">
<template slot-scope="scope" slot="menuForm">
<el-button icon="el-icon-check"
v-for="flag in flagList" :key="flag"
@click="handleTask(scope.row,flag)"
plain>{{flag}}</el-button>
<el-button icon="el-icon-check"
v-for="flag in flagList" :key="flag"
@click="handleTask(scope.row,flag)"
plain>{{flag}}
</el-button>
</template>
</avue-form>
</el-dialog>
......@@ -62,16 +66,17 @@
</template>
<script>
import { fetchList,fetchDetail,doTask,fetchComment} from '@/api/activiti/task'
import { tableOption,formOption,taskOption } from '@/const/crud/activiti/task'
import { mapGetters } from 'vuex'
import {doTask, fetchComment, fetchDetail, fetchList} from '@/api/activiti/task'
import {formOption, tableOption, taskOption} from '@/const/crud/activiti/task'
import {mapGetters} from 'vuex'
export default {
name: 'task',
data() {
return {
actPicUrl:'',
actPicUrl: '',
obj: {},
flagList:{},
flagList: {},
showTask: false,
showComment: false,
showPicDialog: false,
......@@ -85,85 +90,86 @@
tableLoading: false,
tableOption: tableOption,
formOption: formOption,
taskOption:taskOption,
taskOption: taskOption,
}
},
created() {
},
mounted: function() { },
mounted: function () {
},
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page,params) {
this.tableLoading = true
fetchList(Object.assign({
},
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})},
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
audit:function(row, index) {
audit: function (row, index) {
fetchDetail(row.taskId).then(response => {
this.obj = response.data.data
// 根据连线判断下次的流程
// 根据连线判断下次的流程
this.flagList = this.obj.flagList
this.showTask = true
})
this.obj = row
},
comment:function(row, index) {
},
comment: function (row, index) {
fetchComment(row.taskId).then(response => {
this.taskTableData = response.data.data
this.taskTableData = response.data.data
})
this.showComment = true
},
handleSubmit: function(row, index) {
var _this = this
this.$confirm('是否确认提交ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return submit(row.leaveId)
})
.then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
},
handleSubmit: function (row, index) {
var _this = this
this.$confirm('是否确认提交ID为' + row.leaveId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return submit(row.leaveId)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
.catch(function(err) { })
}).catch(function (err) {
})
},
handleTask: function(row, result) {
handleTask: function (row, result) {
this.obj.taskFlag = result
doTask(this.obj).then(response =>{
this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
this.showTask = false
this.getList(this.page)
doTask(this.obj).then(response => {
this.$message({
showClose: true,
message: '提交成功',
type: 'success'
})
this.showTask = false
this.getList(this.page)
})
},
viewPic: function(row, index) {
this.actPicUrl = `/act/task/view/` + row.taskId
this.showPicDialog = true
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
},
viewPic: function (row, index) {
this.actPicUrl = `/act/task/view/` + row.taskId
this.showPicDialog = true
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -35,13 +35,15 @@
icon="el-icon-check"
size="mini"
plain
@click="handleEdit(scope.row,scope.index)">编辑</el-button>
@click="handleEdit(scope.row,scope.index)">编辑
</el-button>
<el-button type="text"
v-if="permissions.sys_client_del"
icon="el-icon-delete"
size="mini"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -49,66 +51,66 @@
</template>
<script>
import { fetchList, addObj, putObj, delObj } from '@/api/admin/client'
import { tableOption } from '@/const/crud/admin/client'
import { mapGetters } from 'vuex'
export default {
name: 'client',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created() {
},
mounted: function() { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {addObj, delObj, fetchList, putObj} from '@/api/admin/client'
import {tableOption} from '@/const/crud/admin/client'
import {mapGetters} from 'vuex'
export default {
name: 'client',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function() {
this.$refs.crud.rowAdd()
created() {
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
mounted: function () {
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
computed: {
...mapGetters(['permissions'])
},
rowDel: function(row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.clientId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return delObj(row.clientId)
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(data => {
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.clientId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.clientId)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
......@@ -116,54 +118,54 @@ export default {
type: 'success'
})
this.refreshChange()
}).catch(function (err) {
})
.catch(function(err) { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function(row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
this.refreshChange()
done()
})
this.refreshChange()
done()
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function(row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
this.refreshChange()
done()
})
this.refreshChange()
done()
})
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -23,15 +23,18 @@
<el-button type="primary"
v-if="deptManager_btn_add"
icon="plus"
@click="handlerAdd">添加</el-button>
@click="handlerAdd">添加
</el-button>
<el-button type="primary"
v-if="deptManager_btn_edit"
icon="edit"
@click="handlerEdit">编辑</el-button>
@click="handlerEdit">编辑
</el-button>
<el-button type="primary"
v-if="deptManager_btn_del"
icon="delete"
@click="handleDelete">删除</el-button>
@click="handleDelete">删除
</el-button>
</el-button-group>
</div>
......@@ -78,18 +81,20 @@
<el-form-item label="排序"
prop="orderNum">
<el-input type="number"
v-model="form.sort"
v-model="form.sort"
:disabled="formEdit"
placeholder="请输入排序"></el-input>
</el-form-item>
<el-form-item v-if="formStatus == 'update'">
<el-button type="primary"
@click="update">更新</el-button>
@click="update">更新
</el-button>
<el-button @click="onCancel">取消</el-button>
</el-form-item>
<el-form-item v-if="formStatus == 'create'">
<el-button type="primary"
@click="create">保存</el-button>
@click="create">保存
</el-button>
<el-button @click="onCancel">取消</el-button>
</el-form-item>
</el-form>
......@@ -101,153 +106,154 @@
</template>
<script>
import { fetchTree, getObj, addObj, delObj, putObj } from '@/api/admin/dept'
import { mapGetters } from 'vuex'
export default {
name: 'dept',
data () {
return {
list: null,
total: null,
formEdit: true,
formAdd: true,
formStatus: '',
showElement: false,
typeOptions: ['0', '1'],
methodOptions: ['GET', 'POST', 'PUT', 'DELETE'],
listQuery: {
name: undefined
import {addObj, delObj, fetchTree, getObj, putObj} from '@/api/admin/dept'
import {mapGetters} from 'vuex'
export default {
name: 'dept',
data() {
return {
list: null,
total: null,
formEdit: true,
formAdd: true,
formStatus: '',
showElement: false,
typeOptions: ['0', '1'],
methodOptions: ['GET', 'POST', 'PUT', 'DELETE'],
listQuery: {
name: undefined
},
treeData: [],
defaultProps: {
children: 'children',
label: 'name'
},
rules: {
parentId: [
{required: true, message: '请输入父级节点', trigger: 'blur'}
],
deptId: [
{required: true, message: '请输入节点编号', trigger: 'blur'}
],
name: [
{required: true, message: '请输入部门名称', trigger: 'blur'}
],
},
labelPosition: 'right',
form: {
name: undefined,
orderNum: undefined,
parentId: undefined,
deptId: undefined
},
currentId: 0,
deptManager_btn_add: false,
deptManager_btn_edit: false,
deptManager_btn_del: false
}
},
created() {
this.getList()
this.deptManager_btn_add = this.permissions['sys_dept_add']
this.deptManager_btn_edit = this.permissions['sys_dept_edit']
this.deptManager_btn_del = this.permissions['sys_dept_del']
},
computed: {
...mapGetters([
'elements',
'permissions'
])
},
methods: {
getList() {
fetchTree(this.listQuery).then(response => {
this.treeData = response.data.data
})
},
treeData: [],
defaultProps: {
children: 'children',
label: 'name'
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
rules: {
parentId: [
{ required: true, message: '请输入父级节点', trigger: 'blur' }
],
deptId: [
{ required: true, message: '请输入节点编号', trigger: 'blur' }
],
name: [
{ required: true, message: '请输入部门名称', trigger: 'blur' }
],
getNodeData(data) {
if (!this.formEdit) {
this.formStatus = 'update'
}
getObj(data.id).then(response => {
this.form = response.data.data
})
this.currentId = data.id
this.showElement = true
},
labelPosition: 'right',
form: {
name: undefined,
orderNum: undefined,
parentId: undefined,
deptId: undefined
handlerEdit() {
if (this.form.deptId) {
this.formEdit = false
this.formStatus = 'update'
}
},
currentId: 0,
deptManager_btn_add: false,
deptManager_btn_edit: false,
deptManager_btn_del: false
}
},
created () {
this.getList()
this.deptManager_btn_add = this.permissions['sys_dept_add']
this.deptManager_btn_edit = this.permissions['sys_dept_edit']
this.deptManager_btn_del = this.permissions['sys_dept_del']
},
computed: {
...mapGetters([
'elements',
'permissions'
])
},
methods: {
getList () {
fetchTree(this.listQuery).then(response => {
this.treeData = response.data.data
})
},
filterNode (value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
getNodeData (data) {
if (!this.formEdit) {
this.formStatus = 'update'
}
getObj(data.id).then(response => {
this.form = response.data.data
})
this.currentId = data.id
this.showElement = true
},
handlerEdit () {
if (this.form.deptId) {
handlerAdd() {
this.resetForm()
this.formEdit = false
this.formStatus = 'update'
}
},
handlerAdd () {
this.resetForm()
this.formEdit = false
this.formStatus = 'create'
},
handleDelete () {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delObj(this.currentId).then(() => {
this.getList()
this.resetForm()
this.onCancel()
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
this.formStatus = 'create'
},
handleDelete() {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delObj(this.currentId).then(() => {
this.getList()
this.resetForm()
this.onCancel()
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
})
})
})
},
update () {
this.$refs.form.validate((valid) => {
if (!valid) return
putObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '更新成功',
type: 'success',
duration: 2000
},
update() {
this.$refs.form.validate((valid) => {
if (!valid) return
putObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '更新成功',
type: 'success',
duration: 2000
})
})
})
})
},
create () {
this.$refs.form.validate((valid) => {
if (!valid) return
addObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
},
create() {
this.$refs.form.validate((valid) => {
if (!valid) return
addObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
})
})
})
})
},
onCancel () {
this.formEdit = true
this.formStatus = ''
},
resetForm () {
this.form = {
parentId: this.currentId,
},
onCancel() {
this.formEdit = true
this.formStatus = ''
},
resetForm() {
this.form = {
parentId: this.currentId,
}
}
}
}
}
</script>
......@@ -35,13 +35,15 @@
icon="el-icon-check"
size="mini"
plain
@click="handleEdit(scope.row,scope.index)">编辑</el-button>
@click="handleEdit(scope.row,scope.index)">编辑
</el-button>
<el-button type="text"
v-if="permissions.sys_dict_del"
icon="el-icon-delete"
size="mini"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -49,117 +51,117 @@
</template>
<script>
import { fetchList, addObj, putObj, delObj } from '@/api/admin/dict'
import { tableOption } from '@/const/crud/admin/dict'
import { mapGetters } from 'vuex'
export default {
name: 'dict',
data () {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {addObj, delObj, fetchList, putObj} from '@/api/admin/dict'
import {tableOption} from '@/const/crud/admin/dict'
import {mapGetters} from 'vuex'
export default {
name: 'dict',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
created() {
},
handleEdit (row, index) {
this.$refs.crud.rowEdit(row, index)
mounted: function () {
},
handleDel (row, index) {
this.$refs.crud.rowDel(row, index)
computed: {
...mapGetters(['permissions'])
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除标签名为"' + row.label + '",数据类型为"' + row.type + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
return delObj(row)
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(() => {
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除标签名为"' + row.label + '",数据类型为"' + row.type + '"的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row)
}).then(() => {
this.getList(this.page)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
}).catch(function () {
})
.catch(function () { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(() => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(() => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
this.getList(this.page)
done()
})
this.getList(this.page)
done()
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
this.getList(this.page)
done()
})
this.getList(this.page)
done()
})
},
searchChange (form) {
this.getList(this.page,form)
},
searchChange(form) {
this.getList(this.page, form)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -33,7 +33,8 @@
v-if="permissions.sys_log_del"
icon="el-icon-delete"
size="mini"
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -41,79 +42,79 @@
</template>
<script>
import { fetchList, delObj } from '@/api/admin/log'
import { tableOption } from '@/const/crud/admin/log'
import { mapGetters } from 'vuex'
export default {
name: 'log',
data () {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page, params) {
this.tableLoading = true
fetchList(Object.assign({
descs: 'create_time',
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {delObj, fetchList} from '@/api/admin/log'
import {tableOption} from '@/const/crud/admin/log'
import {mapGetters} from 'vuex'
export default {
name: 'log',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
handleDel (row, index) {
this.$refs.crud.rowDel(row, index)
created() {
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为"' + row.id + '"的日志?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
return delObj(row.id)
mounted: function () {
},
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
descs: 'create_time',
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(data => {
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为"' + row.id + '"的日志?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.id)
}).then(data => {
this.getList(this.page)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
}).catch(function (err) {
})
.catch(function (err) { })
},
/**
* 搜索回调
*/
searchChange (form) {
this.getList(this.page, form)
},
/**
* 刷新回调
*/
refreshChange () {
this.getList(this.page)
},
/**
* 搜索回调
*/
searchChange(form) {
this.getList(this.page, form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -23,15 +23,18 @@
<el-button type="primary"
v-if="menuManager_btn_add"
icon="plus"
@click="handlerAdd">添加</el-button>
@click="handlerAdd">添加
</el-button>
<el-button type="primary"
v-if="menuManager_btn_edit"
icon="edit"
@click="handlerEdit">编辑</el-button>
@click="handlerEdit">编辑
</el-button>
<el-button type="primary"
v-if="menuManager_btn_del"
icon="delete"
@click="handleDelete">删除</el-button>
@click="handleDelete">删除
</el-button>
</el-button-group>
</div>
......@@ -96,7 +99,7 @@
<el-option v-for="item in typeOptions"
:key="item"
:label="item | typeFilter"
:value="item"> </el-option>
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="排序"
......@@ -130,12 +133,14 @@
</el-form-item>
<el-form-item v-if="formStatus == 'update'">
<el-button type="primary"
@click="update">更新</el-button>
@click="update">更新
</el-button>
<el-button @click="onCancel">取消</el-button>
</el-form-item>
<el-form-item v-if="formStatus == 'create'">
<el-button type="primary"
@click="create">保存</el-button>
@click="create">保存
</el-button>
<el-button @click="onCancel">取消</el-button>
</el-form-item>
</el-form>
......@@ -147,202 +152,202 @@
</template>
<script>
import { addObj, delObj, fetchTree, getObj, putObj } from '@/api/admin/menu'
import { mapGetters } from 'vuex'
import {addObj, delObj, fetchTree, getObj, putObj} from '@/api/admin/menu'
import {mapGetters} from 'vuex'
export default {
name: 'menu',
data () {
return {
list: null,
total: null,
formEdit: true,
formAdd: true,
formStatus: '',
showElement: false,
typeOptions: ['0', '1'],
methodOptions: ['GET', 'POST', 'PUT', 'DELETE'],
listQuery: {
name: undefined
},
treeData: [],
oExpandedKey: {
// key (from tree id) : expandedOrNot boolean
},
oTreeNodeChildren: {
// id1 : [children] (from tree node id1)
// id2 : [children] (from tree node id2)
},
aExpandedKeys: [],
defaultProps: {
children: 'children',
label: 'name'
},
labelPosition: 'right',
form: {
permission: undefined,
name: undefined,
menuId: undefined,
parentId: undefined,
icon: undefined,
sort: undefined,
component: undefined,
type: undefined,
path: undefined
},
currentId: -1,
menuManager_btn_add: false,
menuManager_btn_edit: false,
menuManager_btn_del: false
}
},
filters: {
typeFilter (type) {
const typeMap = {
0: '菜单',
1: '按钮'
export default {
name: 'menu',
data() {
return {
list: null,
total: null,
formEdit: true,
formAdd: true,
formStatus: '',
showElement: false,
typeOptions: ['0', '1'],
methodOptions: ['GET', 'POST', 'PUT', 'DELETE'],
listQuery: {
name: undefined
},
treeData: [],
oExpandedKey: {
// key (from tree id) : expandedOrNot boolean
},
oTreeNodeChildren: {
// id1 : [children] (from tree node id1)
// id2 : [children] (from tree node id2)
},
aExpandedKeys: [],
defaultProps: {
children: 'children',
label: 'name'
},
labelPosition: 'right',
form: {
permission: undefined,
name: undefined,
menuId: undefined,
parentId: undefined,
icon: undefined,
sort: undefined,
component: undefined,
type: undefined,
path: undefined
},
currentId: -1,
menuManager_btn_add: false,
menuManager_btn_edit: false,
menuManager_btn_del: false
}
return typeMap[type]
}
},
created () {
this.getList()
this.menuManager_btn_add = this.permissions['sys_menu_add']
this.menuManager_btn_edit = this.permissions['sys_menu_edit']
this.menuManager_btn_del = this.permissions['sys_menu_del']
},
computed: {
...mapGetters([
'elements',
'permissions'
])
},
methods: {
getList () {
fetchTree(this.listQuery).then(response => {
this.treeData = response.data.data
})
},
filterNode (value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
nodeExpand (data) {
let aChildren = data.children
if (aChildren.length > 0) {
this.oExpandedKey[data.id] = true
this.oTreeNodeChildren[data.id] = aChildren
filters: {
typeFilter(type) {
const typeMap = {
0: '菜单',
1: '按钮'
}
return typeMap[type]
}
this.setExpandedKeys()
},
nodeCollapse (data) {
this.oExpandedKey[data.id] = false
// 如果有子节点
this.treeRecursion(this.oTreeNodeChildren[data.id], (oNode) => {
this.oExpandedKey[oNode.id] = false
});
this.setExpandedKeys()
created() {
this.getList()
this.menuManager_btn_add = this.permissions['sys_menu_add']
this.menuManager_btn_edit = this.permissions['sys_menu_edit']
this.menuManager_btn_del = this.permissions['sys_menu_del']
},
setExpandedKeys () {
let oTemp = this.oExpandedKey
this.aExpandedKeys = []
for (let sKey in oTemp) {
if (oTemp[sKey]) {
this.aExpandedKeys.push(parseInt(sKey));
}
}
computed: {
...mapGetters([
'elements',
'permissions'
])
},
treeRecursion (aChildren, fnCallback) {
if (aChildren) {
for (let i = 0; i < aChildren.length; ++i) {
let oNode = aChildren[i]
fnCallback && fnCallback(oNode)
this.treeRecursion(oNode.children, fnCallback)
methods: {
getList() {
fetchTree(this.listQuery).then(response => {
this.treeData = response.data.data
})
},
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
nodeExpand(data) {
let aChildren = data.children
if (aChildren.length > 0) {
this.oExpandedKey[data.id] = true
this.oTreeNodeChildren[data.id] = aChildren
}
}
},
this.setExpandedKeys()
},
nodeCollapse(data) {
this.oExpandedKey[data.id] = false
// 如果有子节点
this.treeRecursion(this.oTreeNodeChildren[data.id], (oNode) => {
this.oExpandedKey[oNode.id] = false
});
this.setExpandedKeys()
},
setExpandedKeys() {
let oTemp = this.oExpandedKey
this.aExpandedKeys = []
for (let sKey in oTemp) {
if (oTemp[sKey]) {
this.aExpandedKeys.push(parseInt(sKey));
}
}
},
treeRecursion(aChildren, fnCallback) {
if (aChildren) {
for (let i = 0; i < aChildren.length; ++i) {
let oNode = aChildren[i]
fnCallback && fnCallback(oNode)
this.treeRecursion(oNode.children, fnCallback)
}
}
},
getNodeData (data) {
if (!this.formEdit) {
this.formStatus = 'update'
}
getObj(data.id).then(response => {
this.form = response.data.data
})
this.currentId = data.id
this.showElement = true
},
handlerEdit () {
if (this.form.menuId) {
getNodeData(data) {
if (!this.formEdit) {
this.formStatus = 'update'
}
getObj(data.id).then(response => {
this.form = response.data.data
})
this.currentId = data.id
this.showElement = true
},
handlerEdit() {
if (this.form.menuId) {
this.formEdit = false
this.formStatus = 'update'
}
},
handlerAdd() {
this.resetForm()
this.formEdit = false
this.formStatus = 'update'
}
},
handlerAdd () {
this.resetForm()
this.formEdit = false
this.formStatus = 'create'
},
handleDelete () {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delObj(this.currentId).then(() => {
this.formStatus = 'create'
},
handleDelete() {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delObj(this.currentId).then(() => {
this.getList()
this.resetForm()
this.onCancel()
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
})
})
},
update() {
putObj(this.form).then(() => {
this.getList()
this.resetForm()
this.onCancel()
this.$notify({
title: '成功',
message: '删除成功',
message: '更新成功',
type: 'success',
duration: 2000
})
})
})
},
update () {
putObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '更新成功',
type: 'success',
duration: 2000
})
})
},
create () {
addObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
},
create() {
addObj(this.form).then(() => {
this.getList()
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
})
})
})
},
onCancel () {
this.formEdit = true
this.formStatus = ''
},
resetForm () {
this.form = {
permission: undefined,
name: undefined,
menuId: undefined,
parentId: this.currentId,
icon: undefined,
sort: undefined,
component: undefined,
type: undefined,
path: undefined
},
onCancel() {
this.formEdit = true
this.formStatus = ''
},
resetForm() {
this.form = {
permission: undefined,
name: undefined,
menuId: undefined,
parentId: this.currentId,
icon: undefined,
sort: undefined,
component: undefined,
type: undefined,
path: undefined
}
}
}
}
}
</script>
......@@ -37,7 +37,8 @@
@click="handleCreate"
size="small"
type="primary"
icon="el-icon-edit">添加</el-button>
icon="el-icon-edit">添加
</el-button>
</template>
<template slot="menu"
slot-scope="scope">
......@@ -80,194 +81,188 @@
<div slot="footer"
class="dialog-footer">
<el-button type="primary"
@click="updatePermession(roleId, roleCode)">更 新</el-button>
@click="updatePermession(roleId, roleCode)">更 新
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
fetchList,
getObj,
addObj,
putObj,
delObj,
permissionUpd,
fetchRoleTree
} from '@/api/admin/role'
import { fetchTree } from '@/api/admin/menu'
import { mapGetters } from 'vuex'
import { tableOption } from '@/const/crud/admin/role'
export default {
name: 'table_role',
data () {
return {
tableOption: tableOption,
treeData: [],
checkedKeys: [],
defaultProps: {
label: "name",
value: 'id'
},
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
menuIds: '',
list: [],
listLoading: true,
form: {},
roleId: undefined,
roleCode: undefined,
rolesOptions: undefined,
dialogPermissionVisible: false,
roleManager_btn_add: false,
roleManager_btn_edit: false,
roleManager_btn_del: false,
roleManager_btn_perm: false
}
},
created () {
this.roleManager_btn_add = this.permissions['sys_role_add']
this.roleManager_btn_edit = this.permissions['sys_role_edit']
this.roleManager_btn_del = this.permissions['sys_role_del']
this.roleManager_btn_perm = this.permissions['sys_role_perm']
},
computed: {
...mapGetters(['elements', 'permissions'])
},
methods: {
getList (page, params) {
this.listLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.list = response.data.data.records
this.page.total = response.data.data.total
this.listLoading = false
})
},
handleRefreshChange () {
this.getList(this.page)
},
handleFilter (param) {
this.page.page = 1;
this.getList(this.page, param);
},
handleCreate () {
this.$refs.crud.rowAdd();
},
handleOpenBefore (show, type) {
show();
},
handleUpdate (row, index) {
this.$refs.crud.rowEdit(row, index);
},
handlePermission (row) {
fetchRoleTree(row.roleId)
.then(response => {
this.checkedKeys = response.data
return fetchTree()
})
.then(response => {
this.treeData = response.data.data
// 解析出所有的太监节点
this.checkedKeys = this.resolveAllEunuchNodeId(this.treeData, this.checkedKeys, [])
this.dialogStatus = 'permission'
this.dialogPermissionVisible = true
this.roleId = row.roleId
this.roleCode = row.roleCode
})
},
/**
* 解析出所有的太监节点id
* @param json 待解析的json串
* @param idArr 原始节点数组
* @param temp 临时存放节点id的数组
* @return 太监节点id数组
*/
resolveAllEunuchNodeId (json, idArr, temp) {
for (let i = 0; i < json.length; i++) {
const item = json[i]
// 存在子节点,递归遍历;不存在子节点,将json的id添加到临时数组中
if (item.children && item.children.length !== 0) {
this.resolveAllEunuchNodeId(item.children, idArr, temp)
} else {
temp.push(idArr.filter(id => id === item.id))
}
import {addObj, delObj, fetchList, fetchRoleTree, getObj, permissionUpd, putObj} from '@/api/admin/role'
import {fetchTree} from '@/api/admin/menu'
import {mapGetters} from 'vuex'
import {tableOption} from '@/const/crud/admin/role'
export default {
name: 'table_role',
data() {
return {
tableOption: tableOption,
treeData: [],
checkedKeys: [],
defaultProps: {
label: "name",
value: 'id'
},
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
menuIds: '',
list: [],
listLoading: true,
form: {},
roleId: undefined,
roleCode: undefined,
rolesOptions: undefined,
dialogPermissionVisible: false,
roleManager_btn_add: false,
roleManager_btn_edit: false,
roleManager_btn_del: false,
roleManager_btn_perm: false
}
return temp
},
filterNode (value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
getNodeData (data, done) {
done();
created() {
this.roleManager_btn_add = this.permissions['sys_role_add']
this.roleManager_btn_edit = this.permissions['sys_role_edit']
this.roleManager_btn_del = this.permissions['sys_role_del']
this.roleManager_btn_perm = this.permissions['sys_role_perm']
},
handleDelete (row, index) {
delObj(row.roleId).then(response => {
this.list.splice(index, 1);
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
})
computed: {
...mapGetters(['elements', 'permissions'])
},
create (row, done, loading) {
addObj(this.form).then(() => {
this.getList(this.page)
done();
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
methods: {
getList(page, params) {
this.listLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.list = response.data.data.records
this.page.total = response.data.data.total
this.listLoading = false
})
}).catch(() => {
loading();
});
},
update (row, index, done, loading) {
putObj(this.form).then(() => {
},
handleRefreshChange() {
this.getList(this.page)
done();
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
}).catch(() => {
loading();
});
},
updatePermession (roleId, roleCode) {
this.menuIds = ''
this.menuIds = this.$refs.menuTree.getCheckedKeys().join(',').concat(',').concat(this.$refs.menuTree.getHalfCheckedKeys().join(','))
permissionUpd(roleId, this.menuIds).then(() => {
this.dialogPermissionVisible = false
fetchTree()
},
handleFilter(param) {
this.page.page = 1;
this.getList(this.page, param);
},
handleCreate() {
this.$refs.crud.rowAdd();
},
handleOpenBefore(show, type) {
show();
},
handleUpdate(row, index) {
this.$refs.crud.rowEdit(row, index);
},
handlePermission(row) {
fetchRoleTree(row.roleId)
.then(response => {
this.form = response.data.data
return fetchRoleTree(roleId)
this.checkedKeys = response.data
return fetchTree()
})
.then(response => {
this.checkedKeys = response.data
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
this.treeData = response.data.data
// 解析出所有的太监节点
this.checkedKeys = this.resolveAllEunuchNodeId(this.treeData, this.checkedKeys, [])
this.dialogStatus = 'permission'
this.dialogPermissionVisible = true
this.roleId = row.roleId
this.roleCode = row.roleCode
})
},
/**
* 解析出所有的太监节点id
* @param json 待解析的json串
* @param idArr 原始节点数组
* @param temp 临时存放节点id的数组
* @return 太监节点id数组
*/
resolveAllEunuchNodeId(json, idArr, temp) {
for (let i = 0; i < json.length; i++) {
const item = json[i]
// 存在子节点,递归遍历;不存在子节点,将json的id添加到临时数组中
if (item.children && item.children.length !== 0) {
this.resolveAllEunuchNodeId(item.children, idArr, temp)
} else {
temp.push(idArr.filter(id => id === item.id))
}
}
return temp
},
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
getNodeData(data, done) {
done();
},
handleDelete(row, index) {
delObj(row.roleId).then(response => {
this.list.splice(index, 1);
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
})
},
create(row, done, loading) {
addObj(this.form).then(() => {
this.getList(this.page)
done();
this.$notify({
title: '成功',
message: '创建成功',
type: 'success',
duration: 2000
})
}).catch(() => {
loading();
});
},
update(row, index, done, loading) {
putObj(this.form).then(() => {
this.getList(this.page)
done();
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
})
}).catch(() => {
loading();
});
},
updatePermession(roleId, roleCode) {
this.menuIds = ''
this.menuIds = this.$refs.menuTree.getCheckedKeys().join(',').concat(',').concat(this.$refs.menuTree.getHalfCheckedKeys().join(','))
permissionUpd(roleId, this.menuIds).then(() => {
this.dialogPermissionVisible = false
fetchTree()
.then(response => {
this.form = response.data.data
return fetchRoleTree(roleId)
})
.then(response => {
this.checkedKeys = response.data
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
})
})
}
}
}
}
</script>
......@@ -16,68 +16,68 @@
-->
<template>
<div class="execution">
<basic-container>
<el-alert
title="路由配置是非常专业的事情,不建议非工程师操作"
type="warning">
</el-alert>
<vue-json-editor v-model="json" :show-btns="false"></vue-json-editor>
<div align="center">
<el-button @click="edit()">更新</el-button>
</div>
</basic-container>
</div>
<div class="execution">
<basic-container>
<el-alert
title="路由配置是非常专业的事情,不建议非工程师操作"
type="warning">
</el-alert>
<vue-json-editor v-model="json" :show-btns="false"></vue-json-editor>
<div align="center">
<el-button @click="edit()">更新</el-button>
</div>
</basic-container>
</div>
</template>
<script>
import vueJsonEditor from 'vue-json-editor'
import {fetchList, putObj, fallback} from '@/api/admin/route'
import vueJsonEditor from 'vue-json-editor'
import {fallback, fetchList, putObj} from '@/api/admin/route'
export default {
data() {
return {
json: null
}
},
// 注入vueJsonEditor组件
components: {
vueJsonEditor
},
export default {
data() {
return {
json: null
}
},
created() {
this.getList()
},
// 注入vueJsonEditor组件
components: {
vueJsonEditor
},
methods: {
getList() {
fetchList().then(response => {
let result = response.data.data;
for (var i = 0; i < result.length; i++) {
let route = result[i]
if(route.predicates){
let predicates = route.predicates
route.predicates = JSON.parse(predicates)
}
if(route.filters){
let filters = route.filters
route.filters = JSON.parse(filters)
}
}
this.json = result
})
},
created() {
this.getList()
},
edit() {
putObj(this.json).then(response => {
this.$notify({
title: '成功',
message: '更新成功',
type: 'success',
duration: 2000
})
})
methods: {
getList() {
fetchList().then(response => {
let result = response.data.data;
for (var i = 0; i < result.length; i++) {
let route = result[i]
if (route.predicates) {
let predicates = route.predicates
route.predicates = JSON.parse(predicates)
}
}
if (route.filters) {
let filters = route.filters
route.filters = JSON.parse(filters)
}
}
this.json = result
})
},
edit() {
putObj(this.json).then(response => {
this.$notify({
title: '成功',
message: '更新成功',
type: 'success',
duration: 2000
})
})
}
}
}
</script>
......@@ -33,8 +33,9 @@
<el-button type="primary"
@click="handleAdd"
size="small"
v-if="permissions.generator_syssocialdetails_add">新 增</el-button>
<br /><br />
v-if="permissions.generator_syssocialdetails_add">新 增
</el-button>
<br/><br/>
</template>
<template slot-scope="scope"
slot="menu">
......@@ -43,13 +44,15 @@
icon="el-icon-check"
size="small"
plain
@click="handleEdit(scope.row,scope.index)">编辑</el-button>
@click="handleEdit(scope.row,scope.index)">编辑
</el-button>
<el-button type="text"
v-if="permissions.generator_syssocialdetails_del"
icon="el-icon-delete"
size="small"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -57,66 +60,66 @@
</template>
<script>
import { fetchList, getObj, addObj, putObj, delObj } from '@/api/admin/sys-social-details'
import { tableOption } from '@/const/crud/admin/sys-social-details'
import { mapGetters } from 'vuex'
export default {
name: 'sys-social-details',
data () {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {addObj, delObj, fetchList, getObj, putObj} from '@/api/admin/sys-social-details'
import {tableOption} from '@/const/crud/admin/sys-social-details'
import {mapGetters} from 'vuex'
export default {
name: 'sys-social-details',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
created() {
},
handleEdit (row, index) {
this.$refs.crud.rowEdit(row, index)
mounted: function () {
},
handleDel (row, index) {
this.$refs.crud.rowDel(row, index)
computed: {
...mapGetters(['permissions'])
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.id, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
return delObj(row.id)
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(data => {
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.id, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.id)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
......@@ -124,60 +127,60 @@ export default {
type: 'success'
})
this.refreshChange()
}).catch(function (err) {
})
.catch(function (err) { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
this.refreshChange()
done()
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(() => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
this.refreshChange()
done()
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(() => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
this.refreshChange()
done()
})
},
/**
* 刷新回调
*/
refreshChange () {
this.getList(this.page)
},
/**
* 搜索回调
*/
searchChange (form) {
this.getList(this.page,form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
},
/**
* 搜索回调
*/
searchChange(form) {
this.getList(this.page, form)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -33,7 +33,8 @@
icon="el-icon-delete"
size="mini"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -41,72 +42,72 @@
</template>
<script>
import { fetchList, delObj } from '@/api/admin/token'
import { tableOption } from '@/const/crud/admin/token'
import { mapGetters } from 'vuex'
export default {
name: 'token',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created() {
},
mounted: function() { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {delObj, fetchList} from '@/api/admin/token'
import {tableOption} from '@/const/crud/admin/token'
import {mapGetters} from 'vuex'
export default {
name: 'token',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
created() {
},
rowDel: function(row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.token_value, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return delObj(row.token_value)
mounted: function () {
},
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(data => {
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.token_value, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.token_value)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
}).catch(function (err) {
})
.catch(function(err) { })
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -50,7 +50,8 @@
@click="handleCreate"
size="small"
type="primary"
icon="el-icon-edit">添加</el-button>
icon="el-icon-edit">添加
</el-button>
</template>
<template slot="username"
slot-scope="scope">
......@@ -112,209 +113,202 @@
</template>
<script>
import { fetchList, getObj, addObj, putObj, delObj } from "@/api/admin/user";
import { deptRoleList } from "@/api/admin/role";
import { fetchDeptTree } from "@/api/admin/dept";
import { tableOption } from '@/const/crud/admin/user';
import { mapGetters } from "vuex";
import { constants } from 'fs';
import { connect } from 'tls';
export default {
name: "table_user",
data () {
return {
treeOption: {
nodeKey: 'id',
addBtn: false,
menu: false,
props: {
label: 'name',
value: 'id'
}
},
treeData: [],
option: tableOption,
treeDeptData: [],
checkedKeys: [],
roleProps: {
label: "roleName",
value: 'roleId'
},
defaultProps: {
label: "name",
value: 'id',
},
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20, // 每页显示多少条,
isAsc: false//是否倒序
},
list: [],
listLoading: true,
role: [],
form: {},
rolesOptions: [],
};
},
computed: {
...mapGetters(["permissions"])
},
watch: {
role () {
this.form.role = this.role
}
},
filters: {
statusFilter (status) {
const statusMap = {
0: "有效",
1: "无效",
9: "锁定"
import {addObj, delObj, fetchList, getObj, putObj} from "@/api/admin/user";
import {deptRoleList} from "@/api/admin/role";
import {fetchDeptTree} from "@/api/admin/dept";
import {tableOption} from '@/const/crud/admin/user';
import {mapGetters} from "vuex";
import {constants} from 'fs';
import {connect} from 'tls';
export default {
name: "table_user",
data() {
return {
treeOption: {
nodeKey: 'id',
addBtn: false,
menu: false,
props: {
label: 'name',
value: 'id'
}
},
treeData: [],
option: tableOption,
treeDeptData: [],
checkedKeys: [],
roleProps: {
label: "roleName",
value: 'roleId'
},
defaultProps: {
label: "name",
value: 'id',
},
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20, // 每页显示多少条,
isAsc: false//是否倒序
},
list: [],
listLoading: true,
role: [],
form: {},
rolesOptions: [],
};
return statusMap[status];
}
},
created () {
this.sys_user_add = this.permissions["sys_user_add"];
this.sys_user_edit = this.permissions["sys_user_edit"];
this.sys_user_del = this.permissions["sys_user_del"];
this.init();
},
methods: {
init () {
fetchDeptTree().then(response => {
this.treeData = response.data.data;
});
},
nodeClick (data) {
this.page.page = 1;
this.getList(this.page, { deptId: data.id });
},
getList (page, params) {
this.listLoading = true;
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.list = response.data.data.records;
this.page.total = response.data.data.total
this.listLoading = false;
});
},
getNodeData (data) {
deptRoleList().then(response => {
this.rolesOptions = response.data.data;
});
},
handleDept () {
fetchDeptTree().then(response => {
this.treeDeptData = response.data.data;
});
},
handleFilter (param) {
this.page.page = 1;
this.getList(this.page, param);
computed: {
...mapGetters(["permissions"])
},
handleRefreshChange () {
this.getList(this.page)
watch: {
role() {
this.form.role = this.role
}
},
handleCreate () {
this.$refs.crud.rowAdd();
created() {
this.sys_user_add = this.permissions["sys_user_add"];
this.sys_user_edit = this.permissions["sys_user_edit"];
this.sys_user_del = this.permissions["sys_user_del"];
this.init();
},
handleOpenBefore (show, type) {
window.boxType = type;
this.handleDept();
if (['edit', 'views'].includes(type)) {
this.role = [];
for (var i = 0; i < this.form.roleList.length; i++) {
this.role[i] = this.form.roleList[i].roleId;
}
methods: {
init() {
fetchDeptTree().then(response => {
this.treeData = response.data.data;
});
},
nodeClick(data) {
this.page.page = 1;
this.getList(this.page, {deptId: data.id});
},
getList(page, params) {
this.listLoading = true;
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.list = response.data.data.records;
this.page.total = response.data.data.total
this.listLoading = false;
});
},
getNodeData(data) {
deptRoleList().then(response => {
this.rolesOptions = response.data.data;
});
} else if (type === 'add') {
this.role = [];
}
show();
},
handleUpdate (row, index) {
this.$refs.crud.rowEdit(row, index);
this.form.password = undefined
},
create (row, done, loading) {
addObj(this.form).then(() => {
this.getList(this.page);
done();
this.$notify({
title: "成功",
message: "创建成功",
type: "success",
duration: 2000
});
}).catch(() => {
loading();
});
},
update (row, index, done, loading) {
putObj(this.form).then(() => {
this.getList(this.page);
done();
this.$notify({
title: "成功",
message: "修改成功",
type: "success",
duration: 2000
},
handleDept() {
fetchDeptTree().then(response => {
this.treeDeptData = response.data.data;
});
}).catch(() => {
loading();
});
},
deletes (row, index) {
this.$confirm(
"此操作将永久删除该用户(用户名:" + row.username + "), 是否继续?",
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
},
handleFilter(param) {
this.page.page = 1;
this.getList(this.page, param);
},
handleRefreshChange() {
this.getList(this.page)
},
handleCreate() {
this.$refs.crud.rowAdd();
},
handleOpenBefore(show, type) {
window.boxType = type;
this.handleDept();
if (['edit', 'views'].includes(type)) {
this.role = [];
for (var i = 0; i < this.form.roleList.length; i++) {
this.role[i] = this.form.roleList[i].roleId;
}
deptRoleList().then(response => {
this.rolesOptions = response.data.data;
});
} else if (type === 'add') {
this.role = [];
}
).then(() => {
delObj(row.userId)
.then(() => {
this.list.splice(index, 1);
this.$notify({
title: "成功",
message: "删除成功",
type: "success",
duration: 2000
});
})
.cache(() => {
this.$notify({
title: "失败",
message: "删除失败",
type: "error",
duration: 2000
});
show();
},
handleUpdate(row, index) {
this.$refs.crud.rowEdit(row, index);
this.form.password = undefined
},
create(row, done, loading) {
addObj(this.form).then(() => {
this.getList(this.page);
done();
this.$notify({
title: "成功",
message: "创建成功",
type: "success",
duration: 2000
});
});
}).catch(() => {
loading();
});
},
update(row, index, done, loading) {
putObj(this.form).then(() => {
this.getList(this.page);
done();
this.$notify({
title: "成功",
message: "修改成功",
type: "success",
duration: 2000
});
}).catch(() => {
loading();
});
},
deletes(row, index) {
this.$confirm(
"此操作将永久删除该用户(用户名:" + row.username + "), 是否继续?",
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
).then(() => {
delObj(row.userId)
.then(() => {
this.list.splice(index, 1);
this.$notify({
title: "成功",
message: "删除成功",
type: "success",
duration: 2000
});
})
.cache(() => {
this.$notify({
title: "失败",
message: "删除失败",
type: "error",
duration: 2000
});
});
});
}
}
}
};
};
</script>
<style lang="scss">
.user {
height: 100%;
&__tree {
padding-top: 3px;
padding-right: 20px;
}
&__main {
.el-card__body {
padding-top: 0;
.user {
height: 100%;
&__tree {
padding-top: 3px;
padding-right: 20px;
}
&__main {
.el-card__body {
padding-top: 0;
}
}
}
}
</style>
......@@ -58,7 +58,8 @@
</el-form-item>
<el-form-item>
<el-button type="primary"
@click="submitForm('ruleForm2')">提交</el-button>
@click="submitForm('ruleForm2')">提交
</el-button>
<el-button @click="resetForm('ruleForm2')">重置</el-button>
</el-form-item>
</el-form>
......@@ -71,91 +72,89 @@
<script>
import { openWindow } from '@/util/util'
import { mapState } from 'vuex'
import { getToken } from '@/util/auth'
import ElFormItem from 'element-ui/packages/form/src/form-item.vue'
import request from '@/router/axios'
import {openWindow} from '@/util/util'
import {mapState} from 'vuex'
import {getToken} from '@/util/auth'
import request from '@/router/axios'
export default {
components: {
ElFormItem
},
data () {
var validatePass = (rule, value, callback) => {
if (this.ruleForm2.password !== '') {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.ruleForm2.newpassword1) {
callback(new Error('两次输入密码不一致!'))
export default {
components: {
ElFormItem
},
data() {
var validatePass = (rule, value, callback) => {
if (this.ruleForm2.password !== '') {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.ruleForm2.newpassword1) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
} else {
callback()
}
} else {
callback()
}
}
return {
fileList: [],
show: false,
headers: {
Authorization: 'Bearer ' + getToken()
},
ruleForm2: {
username: '',
password: '',
newpassword1: '',
newpassword2: ''
},
rules2: {
password: [{ required: true, min: 6, message: '原密码不能为空且不少于6位', trigger: 'change' }],
newpassword1: [{ required: true, min: 6, message: '新密码不能为空且不少于6位', trigger: 'change' }],
newpassword2: [{ required: true, validator: validatePass, trigger: 'blur' }]
return {
fileList: [],
show: false,
headers: {
Authorization: 'Bearer ' + getToken()
},
ruleForm2: {
username: '',
password: '',
newpassword1: '',
newpassword2: ''
},
rules2: {
password: [{required: true, min: 6, message: '原密码不能为空且不少于6位', trigger: 'change'}],
newpassword1: [{required: true, min: 6, message: '新密码不能为空且不少于6位', trigger: 'change'}],
newpassword2: [{required: true, validator: validatePass, trigger: 'blur'}]
}
}
}
},
created () {
this.ruleForm2.username = this.userInfo.username
},
computed: {
...mapState({
userInfo: state => state.user.userInfo
}),
},
methods: {
submitForm (formName) {
this.$refs[formName].validate(valid => {
if (valid) {
request({
url: '/admin/user/edit',
method: 'put',
data: this.ruleForm2
}).then(response => {
if (response.data.data) {
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
// 修改密码之后强制重新登录
if (this.ruleForm2.newpassword1 !== '') {
this.$store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
},
created() {
this.ruleForm2.username = this.userInfo.username
},
computed: {
...mapState({
userInfo: state => state.user.userInfo
}),
},
methods: {
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
request({
url: '/admin/user/edit',
method: 'put',
data: this.ruleForm2
}).then(response => {
if (response.data.data) {
this.$notify({
title: '成功',
message: '修改成功',
type: 'success',
duration: 2000
})
// 修改密码之后强制重新登录
if (this.ruleForm2.newpassword1 !== '') {
this.$store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
})
} else {
this.$router.push({path: '/'})
}
} else {
this.$router.push({ path: '/' })
this.$notify({
title: '失败',
message: response.data.msg,
type: 'error',
duration: 2000
})
}
} else {
this.$notify({
title: '失败',
message: response.data.msg,
type: 'error',
duration: 2000
})
}
})
.catch(() => {
}).catch(() => {
this.$notify({
title: '失败',
message: '修改失败',
......@@ -163,38 +162,26 @@ export default {
duration: 2000
})
})
} else {
return false
} else {
return false
}
})
},
resetForm(formName) {
this.$refs[formName].resetFields()
},
handleClick(thirdpart) {
let appid, client_id, redirect_uri, url
redirect_uri = encodeURIComponent(window.location.origin + '/#/authredirect?type=BIND')
if (thirdpart === 'wechat') {
appid = 'wxd1678d3f83b1d83a'
url = 'https://open.weixin.qq.com/connect/qrconnect?appid=' + appid + '&redirect_uri=' + redirect_uri + '&state=' + appid + '&response_type=code&scope=snsapi_login#wechat_redirect'
} else if (thirdpart === 'tencent') {
client_id = '101322838'
url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&state=' + appid + '&client_id=' + client_id + '&redirect_uri=' + redirect_uri
}
})
},
resetForm (formName) {
this.$refs[formName].resetFields()
},
toggleShow () {
this.show = !this.show
},
/**
* upload success
*
* [param] jsonData 服务器返回数据,已进行json转码
* [param] field
*/
cropUploadSuccess (jsonData) {
this.$store.commit('SET_AVATAR', jsonData.filename)
},
handleClick (thirdpart) {
let appid, client_id, redirect_uri, url
redirect_uri = encodeURIComponent(window.location.origin + '/#/authredirect?type=BIND')
if (thirdpart === 'wechat') {
appid = 'wxd1678d3f83b1d83a'
url = 'https://open.weixin.qq.com/connect/qrconnect?appid=' + appid + '&redirect_uri=' + redirect_uri + '&state=' + appid + '&response_type=code&scope=snsapi_login#wechat_redirect'
} else if (thirdpart === 'tencent') {
client_id = '101322838'
url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&state=' + appid + '&client_id=' + client_id + '&redirect_uri=' + redirect_uri
openWindow(url, thirdpart, 540, 540)
}
openWindow(url, thirdpart, 540, 540)
}
}
}
</script>
......@@ -47,7 +47,7 @@
<a :href='props.row.address'
target="_blank">
<img :src="props.row.stars"
alt='star' />
alt='star'/>
</a>
</el-form-item>
</el-form>
......@@ -61,7 +61,7 @@
<a :href='scope.row.git'
target="_blank">
<img :src="scope.row.stars"
alt='star' />
alt='star'/>
</a>
</template>
<template slot-scope="scope"
......@@ -75,82 +75,87 @@
</template>
<script>
import { tableOption } from '@/const/crud/option'
import { tableData } from '@/const/crud/data'
export default {
name: 'crud',
data () {
return {
tableData: tableData,
tableOption: tableOption
}
},
mounted: function () { },
methods: {
handleDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除序号为' + row.username, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
})
.catch(function (err) { })
import {tableOption} from '@/const/crud/option'
import {tableData} from '@/const/crud/data'
export default {
name: 'crud',
data() {
return {
tableData: tableData,
tableOption: tableOption
}
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
mounted: function () {
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
methods: {
handleDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除序号为' + row.username, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
})
.catch(function (err) {
})
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
}
}
}
}
</script>
<style lang="scss" scoped>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 50%;
}
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 50%;
}
</style>
......@@ -35,7 +35,8 @@
icon="el-icon-delete"
size="small"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -43,9 +44,10 @@
</template>
<script>
import { fetchList, getObj, addObj, putObj, delObj } from '@/api/daemon/execution-log'
import { tableOption } from '@/const/crud/daemon/execution-log'
import { mapGetters } from 'vuex'
import {addObj, delObj, fetchList, getObj, putObj} from '@/api/daemon/execution-log'
import {tableOption} from '@/const/crud/daemon/execution-log'
import {mapGetters} from 'vuex'
export default {
name: 'execution-log',
data() {
......@@ -61,14 +63,15 @@
}
},
created() {
this.page.pageSize=20;
this.page.pageSize = 20;
},
mounted: function () {
},
mounted: function() { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page, params={}) {
getList(page, params = {}) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
......@@ -85,7 +88,7 @@
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function() {
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
......@@ -94,17 +97,15 @@
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function(row, index) {
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.id, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return delObj(row.id)
})
.then(data => {
}).then(function () {
return delObj(row.id)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
......@@ -112,8 +113,8 @@
type: 'success'
})
this.getList(this.page)
}).catch(function (err) {
})
.catch(function(err) { })
},
/**
* @title 数据更新
......@@ -122,7 +123,7 @@
* @param done 为表单关闭函数
*
**/
handleUpdate: function(row, index, done) {
handleUpdate: function (row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
......@@ -140,7 +141,7 @@
* @param done 为表单关闭函数
*
**/
handleSave: function(row, done) {
handleSave: function (row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
......
......@@ -36,7 +36,8 @@
icon="el-icon-delete"
size="small"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
@click="handleDel(scope.row,scope.index)">删除
</el-button>
</template>
</avue-crud>
</basic-container>
......@@ -44,121 +45,121 @@
</template>
<script>
import { fetchList, addObj, putObj, delObj } from '@/api/daemon/status-trace-log'
import { tableOption } from '@/const/crud/daemon/status-trace-log'
import { mapGetters } from 'vuex'
export default {
name: 'status-trace-log',
data () {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {addObj, delObj, fetchList, putObj} from '@/api/daemon/status-trace-log'
import {tableOption} from '@/const/crud/daemon/status-trace-log'
import {mapGetters} from 'vuex'
export default {
name: 'status-trace-log',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
created() {
},
handleEdit (row, index) {
this.$refs.crud.rowEdit(row, index)
mounted: function () {
},
handleDel (row, index) {
this.$refs.crud.rowDel(row, index)
computed: {
...mapGetters(['permissions'])
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.clientId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function () {
return delObj(row.clientId)
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
.then(() => {
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function () {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function (row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.clientId, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
return delObj(row.clientId)
}).then(() => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
}).catch(function () {
})
.catch(function () { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(() => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function (row, index, done) {
putObj(row).then(() => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
})
done()
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(() => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function (row, done) {
addObj(row).then(() => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
})
done()
})
},
searchChange (form) {
this.getList(this.page,form)
},
/**
* 刷新回调
*/
refreshChange () {
this.getList(this.page)
},
searchChange(form) {
this.getList(this.page, form)
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -29,24 +29,25 @@
</template>
<script>
import { mapGetters } from "vuex";
import {mapGetters} from "vuex";
export default {
name: "dashboard",
computed: {
...mapGetters(["name", "roles"])
}
};
export default {
name: "dashboard",
computed: {
...mapGetters(["name", "roles"])
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.dashboard {
&-container {
margin: 30px;
}
&-text {
font-size: 30px;
line-height: 46px;
.dashboard {
&-container {
margin: 30px;
}
&-text {
font-size: 30px;
line-height: 46px;
}
}
}
</style>
......@@ -29,10 +29,12 @@
<template slot-scope="scope"
slot="menu">
<el-button type="text"
v-if="permissions.sys_client_del"
icon="el-icon-check"
size="mini"
plain
@click="handleDown(scope.row,scope.index)">生成</el-button>
@click="handleDown(scope.row,scope.index)">生成
</el-button>
</template>
</avue-crud>
......@@ -53,64 +55,66 @@
</template>
<script>
import { fetchList, handleDown } from '@/api/gen/gen'
import { tableOption, formOption } from '@/const/crud/gen/gen'
import { mapGetters } from 'vuex'
export default {
name: 'code-generator',
data () {
return {
tableData: [],
formData: {},
box: false,
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption,
formOption: formOption
}
},
created () {
},
mounted: function () { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList (page,params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
import {fetchList, handleDown} from '@/api/gen/gen'
import {formOption, tableOption} from '@/const/crud/gen/gen'
import {mapGetters} from 'vuex'
export default {
name: 'client',
data() {
return {
tableData: [],
formData: {},
box: false,
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption,
formOption: formOption
}
},
handleDown: function (row, index) {
this.formData.tableName = row.tableName
this.box = true
created() {
},
/**
* 刷新回调
*/
refreshChange () {
this.getList(this.page)
mounted: function () {
},
searchChange (form) {
this.getList(this.page,form)
computed: {
...mapGetters(['permissions'])
},
gen (form) {
handleDown(this.formData).then(response => {
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
handleDown: function (row, index) {
this.formData.tableName = row.tableName
this.box = true
})
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
},
searchChange(form) {
this.getList(this.page, form)
},
gen(form) {
handleDown(this.formData).then(() => {
this.box = true
})
}
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -19,43 +19,44 @@
<div class="execution">
<basic-container>
<avue-crud :data="data"
:option="option" />
:option="option"/>
</basic-container>
</div>
</template>
<script>
import request from '@/router/axios'
export default {
data () {
return {
obj: {},
data: [],
option: {
menu: false,
page: false,
addBtn: false,
align: 'center',
menuAlign: 'center',
column: [
{
label: '属性名称',
prop: 'key'
},
{
label: '属性值',
prop: 'value'
}
]
import request from '@/router/axios'
export default {
data() {
return {
obj: {},
data: [],
option: {
menu: false,
page: false,
addBtn: false,
align: 'center',
menuAlign: 'center',
column: [
{
label: '属性名称',
prop: 'key'
},
{
label: '属性值',
prop: 'value'
}
]
}
}
},
created() {
request({
url: '/tx/admin/avueSetting',
method: 'get'
}).then((resp) => {
this.data = resp.data
})
}
},
created () {
request({
url: '/tx/admin/avueSetting',
method: 'get'
}).then((resp) => {
this.data = resp.data
})
}
}
</script>
......@@ -23,46 +23,47 @@
</div>
</template>
<script>
import request from '@/router/axios'
export default {
data() {
return {
obj: {},
data: [],
option: {
menu: false,
page: false,
addBtn: false,
align: 'center',
menuAlign: 'center',
column: [
{
label: '模块名称',
prop: 'model'
},
{
label: '唯一标示',
prop: 'uniqueKey'
},
{
label: '模块地址',
prop: 'ipAddress'
},
{
label: '管道名称',
prop: 'channelName'
}
]
import request from '@/router/axios'
export default {
data() {
return {
obj: {},
data: [],
option: {
menu: false,
page: false,
addBtn: false,
align: 'center',
menuAlign: 'center',
column: [
{
label: '模块名称',
prop: 'model'
},
{
label: '唯一标示',
prop: 'uniqueKey'
},
{
label: '模块地址',
prop: 'ipAddress'
},
{
label: '管道名称',
prop: 'channelName'
}
]
}
}
},
created() {
request({
url: '/tx/admin/onlines',
method: 'get'
}).then((resp) => {
this.data = resp.data
})
}
},
created() {
request({
url: '/tx/admin/onlines',
method: 'get'
}).then((resp) => {
this.data = resp.data
})
}
}
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment