Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Springboot Plus
Commits
b64a9584
"eladmin-common/src/main/vscode:/vscode.git/clone" did not exist on "cc1a4c56958a4512925cf6d9007e10f750ccddd9"
Commit
b64a9584
authored
Mar 13, 2020
by
trumansdo
Browse files
-
parent
98b55b93
Changes
15
Hide whitespace changes
Inline
Side-by-side
ve-admin/admin-web/build/index.js
deleted
100644 → 0
View file @
98b55b93
const
{
run
}
=
require
(
'
runjs
'
)
const
chalk
=
require
(
'
chalk
'
)
const
config
=
require
(
'
../vue.config.js
'
)
const
rawArgv
=
process
.
argv
.
slice
(
2
)
const
args
=
rawArgv
.
join
(
'
'
)
if
(
process
.
env
.
npm_config_preview
||
rawArgv
.
includes
(
'
--preview
'
))
{
const
report
=
rawArgv
.
includes
(
'
--report
'
)
run
(
`vue-cli-service build
${
args
}
`
)
const
port
=
9526
const
publicPath
=
config
.
publicPath
var
connect
=
require
(
'
connect
'
)
var
serveStatic
=
require
(
'
serve-static
'
)
const
app
=
connect
()
app
.
use
(
publicPath
,
serveStatic
(
'
./dist
'
,
{
index
:
[
'
index.html
'
,
'
/
'
]
})
)
app
.
listen
(
port
,
function
()
{
console
.
log
(
chalk
.
green
(
`> Preview at http://localhost:
${
port
}${
publicPath
}
`
))
if
(
report
)
{
console
.
log
(
chalk
.
green
(
`> Report at http://localhost:
${
port
}${
publicPath
}
report.html`
))
}
})
}
else
{
run
(
`vue-cli-service build
${
args
}
`
)
}
ve-admin/admin-web/package.json
View file @
b64a9584
...
...
@@ -45,8 +45,10 @@
},
"dependencies"
:
{
"axios"
:
"0.18.1"
,
"body-parser"
:
"^1.19.0"
,
"clipboard"
:
"2.0.4"
,
"codemirror"
:
"5.45.0"
,
"core-js"
:
"^3.6.4"
,
"driver.js"
:
"0.9.5"
,
"dropzone"
:
"5.5.1"
,
"echarts"
:
"4.2.1"
,
...
...
@@ -57,57 +59,57 @@
"jsonlint"
:
"1.6.3"
,
"jszip"
:
"3.2.1"
,
"lodash"
:
"^4.17.15"
,
"node-sass"
:
"^4.13.1"
,
"normalize.css"
:
"7.0.0"
,
"nprogress"
:
"0.2.0"
,
"path-to-regexp"
:
"2.4.0"
,
"screenfull"
:
"4.2.0"
,
"showdown"
:
"1.9.
0
"
,
"showdown"
:
"
^
1.9.
1
"
,
"sortablejs"
:
"1.8.4"
,
"tui-editor"
:
"1.3.3"
,
"vue"
:
"2.6.1
0
"
,
"vue"
:
"2.6.1
1
"
,
"vue-count-to"
:
"1.0.13"
,
"vue-router"
:
"3.
0.2
"
,
"vue-splitpane"
:
"1.0.
4
"
,
"vuedraggable"
:
"2.2
0.0
"
,
"vuex"
:
"3.1.
0
"
,
"vue-router"
:
"3.
1.6
"
,
"vue-splitpane"
:
"1.0.
6
"
,
"vuedraggable"
:
"2.2
3.2
"
,
"vuex"
:
"3.1.
3
"
,
"xlsx"
:
"0.14.1"
},
"devDependencies"
:
{
"@babel/core"
:
"7.0.0"
,
"@babel/register"
:
"7.0.0"
,
"@vue/cli-plugin-babel"
:
"
3.5
.3"
,
"@vue/cli-plugin-eslint"
:
"^
3.9.1
"
,
"@vue/
eslint-config-prettier"
:
"^5.0.0
"
,
"@vue/cli-
plugin-unit-jest
"
:
"
3.5
.3"
,
"@vue/
cli-service"
:
"3.5.3
"
,
"@vue/test-utils"
:
"1.0.0-beta.2
9
"
,
"@vue/cli-plugin-babel"
:
"
4.2
.3"
,
"@vue/cli-plugin-eslint"
:
"^
4.2.3
"
,
"@vue/
cli-plugin-unit-jest"
:
"4.2.3
"
,
"@vue/cli-
service
"
:
"
4.2
.3"
,
"@vue/
eslint-config-prettier"
:
"^6.0.0
"
,
"@vue/test-utils"
:
"1.0.0-beta.
3
2"
,
"autoprefixer"
:
"^9.5.1"
,
"babel-core"
:
"7.0.0-bridge.0"
,
"babel-eslint"
:
"10.0.1"
,
"babel-jest"
:
"
23.6
.0"
,
"babel-jest"
:
"
^25.1
.0"
,
"chalk"
:
"2.4.2"
,
"chokidar"
:
"2.1.5"
,
"chokidar"
:
"
^
2.1.5"
,
"connect"
:
"3.6.6"
,
"eslint"
:
"5.15.3"
,
"eslint-plugin-prettier"
:
"^3.1.0"
,
"eslint-plugin-vue"
:
"5.2.2"
,
"eslint-config-prettier"
:
"^6.1.0"
,
"
prettier-eslint-cli
"
:
"^
5.0
.0"
,
"
prettier"
:
"^1.18
.2"
,
"
eslint-plugin-prettier
"
:
"^
3.1
.0"
,
"
eslint-plugin-vue"
:
"6.2
.2"
,
"html-webpack-plugin"
:
"3.2.0"
,
"husky"
:
"1.3.1"
,
"lint-staged"
:
"8.1.5"
,
"mockjs"
:
"1.0.1-beta3"
,
"node-sass"
:
"^4.9.0"
,
"plop"
:
"2.3.0"
,
"prettier"
:
"^1.18.2"
,
"prettier-eslint-cli"
:
"^5.0.0"
,
"runjs"
:
"^4.3.2"
,
"sass-loader"
:
"^
7.1.0
"
,
"sass-loader"
:
"^
8.0.2
"
,
"script-ext-html-webpack-plugin"
:
"2.1.3"
,
"script-loader"
:
"0.7.2"
,
"serve-static"
:
"^1.13.2"
,
"svg-sprite-loader"
:
"4.1.3"
,
"svgo"
:
"1.2.0"
,
"vue-template-compiler"
:
"2.6.1
0
"
"vue-template-compiler"
:
"2.6.1
1
"
},
"engines"
:
{
"node"
:
">=8.9"
,
...
...
ve-admin/admin-web/src/api/dict.js
View file @
b64a9584
...
...
@@ -7,9 +7,17 @@
*/
import
request
from
'
@/utils/request
'
;
export
function
getDictsByParent
(
params
)
{
export
function
layzyLoadDicts
(
params
)
{
return
request
({
url
:
'
/core/dicts/tree
'
,
url
:
'
/core/dicts/layzyLoad
'
,
method
:
'
get
'
,
params
:
params
});
}
export
function
immaditeLoadDicts
(
params
)
{
return
request
({
url
:
'
/core/dicts/immediateLoad
'
,
method
:
'
get
'
,
params
:
params
});
...
...
ve-admin/admin-web/src/api/org.js
View file @
b64a9584
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime
: 2020-0
1-11 20:47
:10
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3-05 15:29
:10
* @LastEditors: 一日看尽长安花
* @Description:
*/
import
request
from
'
@/utils/request
'
;
export
function
getOrgsByParent
(
params
)
{
export
function
layzyLoadOrgs
(
params
)
{
return
request
({
url
:
'
/core/orgs/tree
'
,
url
:
'
/core/orgs/layzyLoad
'
,
method
:
'
get
'
,
params
:
params
});
}
export
function
immaditeLoadOrgs
(
params
)
{
return
request
({
url
:
'
/core/orgs/immediateLoad
'
,
method
:
'
get
'
,
params
:
params
});
...
...
ve-admin/admin-web/src/api/user.js
View file @
b64a9584
...
...
@@ -44,3 +44,19 @@ export function usersMetadata() {
method
:
'
get
'
});
}
export
function
saveUserData
(
data
)
{
return
request
({
url
:
'
/users
'
,
method
:
'
post
'
,
data
});
}
export
function
updateUserData
(
data
)
{
return
request
({
url
:
'
/users
'
,
method
:
'
put
'
,
data
});
}
ve-admin/admin-web/src/components/GeneralPage/SearchPane.vue
View file @
b64a9584
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 16:14:37
* @LastEditTime
: 2020-0
2
-0
3
1
6
:2
1:23
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3
-0
9
1
4
:2
8:00
* @LastEditors: 一日看尽长安花
* @Description:
-->
<
template
>
...
...
@@ -55,6 +55,7 @@
<slot
name=
"filter-condition"
:filter-data=
"filterData"
>
</slot>
<div
class=
"filter-item-container"
>
<el-button
ref=
"searchButton"
:size=
"size"
class=
"filter-item"
type=
"primary"
...
...
ve-admin/admin-web/src/components/GeneralPage/index.vue
View file @
b64a9584
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 15:43:18
* @LastEditTime
: 2020-0
1
-0
8 22:51:466
* @LastEditors
: 一日看尽长安花
安花
* @LastEditTime: 2020-0
3
-0
6 16:02:51
* @LastEditors: 一日看尽长安花
* @Description: 后台管理页面的自动生成,
* 主要暴露了分页方法、数据表格搜索方法、条件查询方法、增删改方法
* 以及 查询面板插槽,功能按钮组插槽,编辑对话框插槽
...
...
@@ -29,7 +29,7 @@
@
update:tabledata=
"$emit('update:tabledata', $event)"
@
pagination=
"pagination"
@
handle-edit=
"handleEdit"
@
delete-data=
"$emit('delete-data')"
@
delete-data=
"$emit('delete-data'
, $event
)"
></data-table>
<detail-page
:metadata=
"metadata"
...
...
@@ -37,8 +37,8 @@
:dialog-title=
"dialogTitle"
:operation-type=
"operationType"
:dialog-data=
"dialogData"
@
create-data=
"$emit('create-data')"
@
update-data=
"$emit('update-data')"
@
create-data=
"$emit('create-data'
, $event
)"
@
update-data=
"$emit('update-data'
, $event
)"
>
<!-- #dialog-form-item等价v-slot:dialog-form-item 语法
详情参照 解构插槽 Prop 章节 -->
...
...
ve-admin/admin-web/src/components/Upload/FileUpload.vue
0 → 100644
View file @
b64a9584
<!--
* @Author: 一日看尽长安花
* @since: 2020-03-08 11:03:14
* @LastEditTime: 2020-03-08 15:32:26
* @LastEditors: 一日看尽长安花
* @Description:
-->
<
template
>
<el-upload
:ref=
"refs"
:headers=
"headers"
:multiple=
"multiple"
:data=
"data"
:name=
"name"
:with-credentials=
"withCredentials"
:show-file-list=
"showFileList"
:drag=
"drag"
:accept=
"accept"
:on-preview=
"onPreview"
:on-remove=
"onRemove"
:on-success=
"onSuccess"
:on-error=
"onError"
:on-progress=
"onProgress"
:on-change=
"onChange"
:before-upload=
"beforeUpload"
:before-remove=
"beforeRemove"
:list-type=
"listType"
:auto-upload=
"autoUpload"
:file-list=
"fileList"
:http-request=
"httpRequest"
:disabled=
"disabled"
:limit=
"limit"
:on-exceed=
"onExceed"
action=
"https://jsonplaceholder.typicode.com/posts/"
>
<template
v-slot:default
>
<slot
name=
"default"
>
</slot>
</
template
>
<
template
v-slot:trigger
>
<slot
name=
"trigger"
></slot>
</
template
>
<
template
v-slot:tip
>
<slot
name=
"tip"
></slot>
</
template
>
</el-upload>
</template>
<
script
>
export
default
{
name
:
'
FileUpload
'
,
components
:
{},
props
:
{
refs
:
{
type
:
String
,
default
:
'
fileUpload
'
},
headers
:
{
type
:
Object
,
default
()
{
return
undefined
;
}
},
multiple
:
{
type
:
Boolean
,
default
:
true
},
data
:
{
type
:
Object
,
default
()
{
return
undefined
;
}
},
name
:
{
type
:
String
,
default
:
'
file
'
},
withCredentials
:
{
type
:
Boolean
,
default
:
false
},
showFileList
:
{
type
:
Boolean
,
default
:
true
},
drag
:
{
type
:
Boolean
,
default
:
false
},
accept
:
{
type
:
String
,
default
:
''
},
listType
:
{
type
:
String
,
default
:
'
text
'
},
autoUpload
:
{
type
:
Boolean
,
default
:
false
},
fileList
:
{
type
:
Array
,
default
()
{
return
[];
}
},
disabled
:
{
type
:
Boolean
,
default
:
false
},
limit
:
{
type
:
Number
,
default
:
undefined
},
onPreview
:
{
type
:
Function
,
default
:
undefined
},
onRemove
:
{
type
:
Function
,
default
:
undefined
},
onSuccess
:
{
type
:
Function
,
default
:
undefined
},
onError
:
{
type
:
Function
,
default
:
undefined
},
onProgress
:
{
type
:
Function
,
default
:
undefined
},
onChange
:
{
type
:
Function
,
default
:
undefined
},
beforeUpload
:
{
type
:
Function
,
default
:
undefined
},
beforeRemove
:
{
type
:
Function
,
default
:
undefined
},
httpRequest
:
{
type
:
Function
,
default
:
undefined
},
onExceed
:
{
type
:
Function
,
default
:
undefined
}
},
data
()
{
return
{};
}
};
</
script
>
ve-admin/admin-web/src/main.js
View file @
b64a9584
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime: 20
19-10-29 21:52
:5
1
* @LastEditTime: 20
20-03-11 16:00
:5
0
* @LastEditors: 一日看尽长安花
* @Description:
*/
...
...
ve-admin/admin-web/src/router/maps/index.js
View file @
b64a9584
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime: 20
19-10-30 19:54:0
0
* @LastEditTime: 20
20-03-11 13:38:4
0
* @LastEditors: 一日看尽长安花
* @Description:
*/
...
...
ve-admin/admin-web/src/services/dict.js
View file @
b64a9584
/*
* @Author: 一日看尽长安花
* @since: 2020-01-13 23:12:07
* @LastEditTime
: 2020-0
2
-0
5
1
7:03
:3
4
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3
-0
9
1
9:32
:3
6
* @LastEditors: 一日看尽长安花
* @Description: 与业务有关的非纯api的js
*/
import
{
getDictsByParent
}
from
'
@/api/dict
'
;
import
{
layzyLoadDicts
,
immaditeLoadDicts
}
from
'
@/api/dict
'
;
/**
* @description: 异步载入级联器的数据
...
...
@@ -13,7 +13,7 @@ import { getDictsByParent } from '@/api/dict';
* @param {resolve} 同上
* @param {type} 第一级字典类型
*/
export
function
loadDict
CascaderData
(
node
,
resolve
,
type
)
{
export
function
l
ayzyL
oadDict
Tree
(
node
,
resolve
,
type
)
{
const
{
root
,
data
}
=
node
;
const
{
id
}
=
data
||
{};
let
datas
=
[];
...
...
@@ -24,7 +24,7 @@ export function loadDictCascaderData(node, resolve, type) {
parentId
:
id
,
type
:
type
};
getDictsByParent
(
reqParam
)
layzyLoadDicts
(
reqParam
)
.
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
...
...
@@ -36,18 +36,22 @@ export function loadDictCascaderData(node, resolve, type) {
}
/**
* @description:
处理级联器的选中值,级联器选中值是个数组,需要处理为
指定key-value
* @description:
将json中一个key值为数组的每个值转成
指定
的
key-value
,主要用于el中的级联选择器
* @param {obj} 包含选中值的对象
* @param {
modelKey} 级联器 cascader 的 v-model 选中值
的key
名称
* @param {keyNames} 转换后的 key 名称级,必须按照
级联器选中
值的顺序
* @param {
arrayKey} 数组
的key
* @param {keyNames} 转换后的 key 名称级,必须按照
数组中每个
值的顺序
对应
* @returns {Object} 包含转换后的 key-value 值
*/
export
function
handle
Dict
CascaderValue
(
obj
,
model
Key
,
keyNames
)
{
let
selValArray
=
obj
[
model
Key
]
||
[];
export
function
handleCascaderValue
(
obj
,
array
Key
,
keyNames
)
{
let
selValArray
=
obj
[
array
Key
]
||
[];
let
resObj
=
{};
for
(
var
i
in
selValArray
)
{
resObj
[
keyNames
[
i
]]
=
selValArray
[
i
];
if
(
keyNames
.
length
===
1
)
{
resObj
[
keyNames
[
0
]]
=
selValArray
[
i
];
}
else
{
resObj
[
keyNames
[
i
]]
=
selValArray
[
i
];
}
}
delete
obj
[
model
Key
];
delete
obj
[
array
Key
];
return
Object
.
assign
({},
obj
,
resObj
);
}
ve-admin/admin-web/src/services/org.js
View file @
b64a9584
/*
* @Author: 一日看尽长安花
* @since: 2020-01-13 23:12:07
* @LastEditTime
: 2020-0
2
-0
5
1
7:04:59
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3
-0
4
1
6:22:10
* @LastEditors: 一日看尽长安花
* @Description: 与业务有关的非纯api的js
*/
import
{
getOrgsByParent
}
from
'
@/api/org
'
;
...
...
@@ -13,7 +13,7 @@ import { getOrgsByParent } from '@/api/org';
* @param {resolve} 同上
* @param {type} 第一级字典类型
*/
export
function
loadOrg
CascaderData
(
node
,
resolve
)
{
export
function
l
ayzyL
oadOrg
Tree
(
node
,
resolve
)
{
const
{
root
,
data
}
=
node
;
const
{
id
}
=
data
||
{};
let
datas
=
[];
...
...
@@ -29,17 +29,3 @@ export function loadOrgCascaderData(node, resolve) {
resolve
(
datas
);
});
}
/**
* @description: 组织机构是唯一级别的,只取最后一级的value。所以不像字典多个级别
* @param {obj} 包含选中值的对象
* @param {modelKey} 级联器 cascader 的 v-model 选中值的key名称
* @param {keyName} 转换后的 key 名称,必须按照级联器选中值的顺序
* @returns {Object} 包含转换后的 key-value 值
*/
export
function
handleOrgCascaderValue
(
obj
,
modelKey
,
keyName
)
{
let
selValArray
=
obj
[
modelKey
]
||
[];
obj
[
keyName
]
=
selValArray
[
selValArray
.
length
-
1
];
delete
obj
[
modelKey
];
return
obj
;
}
ve-admin/admin-web/src/utils/request.js
View file @
b64a9584
...
...
@@ -2,8 +2,8 @@
* @Description: In User Settings Edit
* @Author: your name
* @Date: 2019-09-09 12:16:28
* @LastEditTime
: 2020-0
2
-0
4
1
3:19:39
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3
-0
8
1
5:59:43
* @LastEditors: 一日看尽长安花
*/
import
axios
from
'
axios
'
;
import
{
MessageBox
,
Message
}
from
'
element-ui
'
;
...
...
@@ -22,9 +22,16 @@ const service = axios.create({
service
.
interceptors
.
request
.
use
(
config
=>
{
const
method
=
config
.
method
;
/**get方法为params,post、put、delete为data */
const
params
=
config
.
params
||
config
.
data
||
null
;
/**下划线转为驼峰 */
if
(
params
)
{
const
changedKeyParams
=
toCamelCaseDeep
(
params
);
const
sourceParams
=
Object
.
assign
({},
params
);
const
changedKeyParams
=
Object
.
assign
(
{},
toCamelCaseDeep
(
params
),
sourceParams
);
if
(
method
===
'
get
'
)
{
config
.
params
=
changedKeyParams
;
}
else
{
...
...
@@ -86,8 +93,10 @@ service.interceptors.response.use(
});
});
}
/**将code非200返回码的情况转成错误传出去 */
return
Promise
.
reject
(
new
Error
(
res
.
message
||
'
Error
'
));
}
else
{
/** 每次请求成功都要将授权码存放在cookie中,只要五分钟无动作登录授权便失效 */
const
authorization
=
response
.
headers
[
'
authorization
'
];
setToken
(
authorization
);
return
res
;
...
...
ve-admin/admin-web/src/views/users/index.vue
View file @
b64a9584
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 15:43:18
* @LastEditTime
: 2020-0
2-04 16:15:14
* @LastEditors
: 一日看尽长安花
* @LastEditTime: 2020-0
3-11 15:30:15
* @LastEditors: 一日看尽长安花
* @Description:
-->
<
template
>
...
...
@@ -21,29 +21,38 @@
<!-- 往搜索栏中添加搜索条件 -->
<template
#filter-condition
="
{filterData:filterData}">
<div
class=
"filter-item-container"
>
<el-cascader
v-model=
"filterData['orgId']"
:props=
"orgIdCascaderProps"
:show-all-levels=
"false"
clearable
placeholder=
"部门"
></el-cascader>
<el-form-item>
<el-cascader
v-model=
"filterData['orgId']"
:props=
"orgIdCascaderProps"
:options=
"orgIdCascaderProps.options"
:show-all-levels=
"false"
clearable
placeholder=
"部门"
></el-cascader>
</el-form-item>
</div>
<div
class=
"filter-item-container"
>
<el-cascader
v-model=
"filterData['jobType']"
:props=
"jobTypeCascaderProps"
clearable
placeholder=
"岗位/职务"
></el-cascader>
<el-form-item>
<el-cascader
v-model=
"filterData['jobType']"
:props=
"jobTypeCascaderProps"
:options=
"jobTypeCascaderProps.options"
clearable
placeholder=
"岗位/职务"
></el-cascader>
</el-form-item>
</div>
<div
class=
"filter-item-container"
>
<el-cascader
v-model=
"filterData['state']"
:props=
"stateCascaderProps"
clearable
placeholder=
"状态"
></el-cascader>
<el-form-item>
<el-cascader
v-model=
"filterData['state']"
:props=
"stateCascaderProps"
:options=
"stateCascaderProps.options"
clearable
placeholder=
"状态"
></el-cascader>
</el-form-item>
</div>
</
template
>
<!-- 往操作按钮组中添加自定义操作按钮 -->
...
...
@@ -58,15 +67,54 @@
测试
</el-button>
</
template
>
<!-- 编辑弹窗的插槽 -->
<
template
#dialog-form-item=
"{dialogData:dialogData}"
>
<el-form-item
key=
"slotkey"
label=
"测试插槽"
prop=
"test"
>
<el-input
v-model=
"dialogData['test']"
placeholder=
"test"
:clearable=
"true"
style=
"width: 200px;"
class=
"filter-item"
/>
<el-form-item
key=
"orgIdKey"
label=
"所在机构"
prop=
"org_id"
>
<el-cascader
v-model=
"dialogData['org_id_value']"
:props=
"orgIdCascaderProps"
:options=
"orgIdCascaderProps.options"
:show-all-levels=
"false"
clearable
placeholder=
"所在机构"
class=
"sp-form-item"
></el-cascader>
</el-form-item>
<el-form-item
key=
"jobTypeKey"
label=
"岗位职务"
prop=
"job_type"
>
<el-cascader
v-model=
"dialogData['job_type_value']"
:props=
"jobTypeCascaderProps"
:options=
"jobTypeCascaderProps.options"
:show-all-levels=
"false"
clearable
placeholder=
"岗位职务"
class=
"sp-form-item"
></el-cascader>
</el-form-item>
<el-form-item
key=
"stateKey"
label=
"用户状态"
prop=
"state"
>
<el-cascader
v-model=
"dialogData['state_value']"
:props=
"stateCascaderProps"
:options=
"stateCascaderProps.options"
:show-all-levels=
"false"
clearable
placeholder=
"用户状态"
class=
"sp-form-item"
></el-cascader>
</el-form-item>
<el-form-item
key=
"fileKey"
label=
"上传文档"
prop=
"file"
>
<file-upload>
<el-button
slot=
"trigger"
size=
"small"
type=
"primary"
>
选取文件
</el-button>
<el-button
style=
"margin-left: 10px;"
size=
"small"
type=
"success"
>
上传到服务器
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
</file-upload>
</el-form-item>
</
template
>
</general-page>
...
...
@@ -75,13 +123,17 @@
<
script
>
import
GeneralPage
from
'
@/components/GeneralPage
'
;
import
{
users
,
usersMetadata
}
from
'
@/api/user
'
;
import
{
loadDictCascaderData
,
handleDictCascaderValue
}
from
'
@/services/dict
'
;
import
{
loadOrgCascaderData
,
handleOrgCascaderValue
}
from
'
@/services/org
'
;
import
FileUpload
from
'
@/components/Upload/FileUpload
'
;
import
{
users
,
usersMetadata
,
saveUserData
,
updateUserData
}
from
'
@/api/user
'
;
import
{
immaditeLoadDicts
}
from
'
@/api/dict
'
;
import
{
immaditeLoadOrgs
}
from
'
@/api/org
'
;
import
{
layzyLoadDictTree
,
handleCascaderValue
}
from
'
@/services/dict
'
;
import
{
layzyLoadOrgTree
}
from
'
@/services/org
'
;
export
default
{
name
:
'
CoreUsersView
'
,
components
:
{
GeneralPage
},
components
:
{
GeneralPage
,
FileUpload
},
props
:
{},
data
()
{
return
{
...
...
@@ -94,29 +146,41 @@ export default {
loading
:
true
,
orgIdCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
loadOrgCascaderData
(
node
,
resolve
);
}
options
:
[]
},
jobTypeCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
loadDictCascaderData
(
node
,
resolve
,
'
job_type
'
);
}
options
:
[]
},
stateCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
loadDictCascaderData
(
node
,
resolve
,
'
user_state
'
);
}
options
:
[]
}
};
},
computed
:
{},
mounted
()
{
immaditeLoadDicts
({
parentId
:
0
,
type
:
'
job_type
'
}).
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
this
.
jobTypeCascaderProps
.
options
=
data
;
});
immaditeLoadDicts
({
parentId
:
0
,
type
:
'
user_state
'
}).
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
this
.
stateCascaderProps
.
options
=
data
;
});
immaditeLoadOrgs
({
parentId
:
0
}).
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
this
.
orgIdCascaderProps
.
options
=
data
;
});
this
.
obtainMetadata
();
this
.
obtainData
({
page
:
1
,
limit
:
10
});
},
...
...
@@ -135,15 +199,31 @@ export default {
},
obtainData
(
queryParams
)
{
this
.
loading
=
true
;
queryParams
=
handle
Org
CascaderValue
(
queryParams
,
'
orgId
'
,
'
org_id
'
);
queryParams
=
handle
Dict
CascaderValue
(
queryParams
,
'
jobType
'
,
[
'
job
T
ype0
'
,
'
job
T
ype1
'
queryParams
=
handleCascaderValue
(
queryParams
,
'
orgId
'
,
[
'
org_id
'
]
);
queryParams
=
handleCascaderValue
(
queryParams
,
'
jobType
'
,
[
'
job
_t
ype0
'
,
'
job
_t
ype1
'
]);
queryParams
=
handle
Dict
CascaderValue
(
queryParams
,
'
state
'
,
[
'
state
'
]);
queryParams
=
handleCascaderValue
(
queryParams
,
'
state
'
,
[
'
state
'
]);
users
(
queryParams
)
.
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
/**
* 这一步是因为编辑弹窗在创建时,v-model不能使用json多级获取,不然会报错;
* 所以将其处理为一级节点
*/
for
(
let
i
in
result
.
data
)
{
result
.
data
[
i
][
'
org_id_value
'
]
=
result
.
data
[
i
][
'
org
'
][
'
id
'
];
result
.
data
[
i
][
'
state_value
'
]
=
result
.
data
[
i
][
'
state
'
][
'
value
'
];
if
(
result
.
data
[
i
][
'
job_type0
'
])
{
result
.
data
[
i
][
'
job_type_value
'
]
=
result
.
data
[
i
][
'
job_type0
'
][
'
value
'
];
}
if
(
result
.
data
[
i
][
'
job_type1
'
])
{
result
.
data
[
i
][
'
job_type_value
'
]
=
result
.
data
[
i
][
'
job_type1
'
][
'
value
'
];
}
}
this
.
tabledata
=
Object
.
assign
({},
result
);
})
.
catch
(
err
=>
{})
...
...
@@ -163,24 +243,85 @@ export default {
this
.
obtainData
(
Object
.
assign
({
page
:
1
,
limit
:
10
},
queryParams
));
},
createData
(
dialogData
)
{
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
添加成功
'
,
type
:
'
success
'
,
duration
:
2000
});
this
.
handleEditorDataObject
(
dialogData
,
'
org_id_value
'
,
{
org_id
:
'
org.id
'
});
this
.
handleEditorDataObject
(
dialogData
,
'
state_value
'
,
{
state
:
'
state.value
'
});
this
.
handleEditorDataObject
(
dialogData
,
'
job_type_value
'
,
{
job_type0
:
'
job_type0.value
'
,
job_type1
:
'
job_type1.value
'
});
saveUserData
(
dialogData
)
.
then
(
result
=>
{
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
创建成功
'
,
type
:
'
success
'
,
duration
:
2000
});
});
})
.
catch
(
err
=>
{
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
失败
'
,
message
:
'
创建失败
'
,
type
:
'
error
'
,
duration
:
2000
});
});
});
},
updateData
(
dialogData
)
{
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
修改成功
'
,
type
:
'
success
'
,
duration
:
2000
});
this
.
handleEditorDataObject
(
dialogData
,
'
org_id_value
'
,
{
org_id
:
'
org.id
'
});
this
.
handleEditorDataObject
(
dialogData
,
'
state_value
'
,
{
state
:
'
state.value
'
});
this
.
handleEditorDataObject
(
dialogData
,
'
job_type_value
'
,
{
job_type0
:
'
job_type0.value
'
,
job_type1
:
'
job_type1.value
'
});
updateUserData
(
dialogData
)
.
then
(
result
=>
{
this
.
$refs
[
'
searchButton
'
].
click
();
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
修改成功
'
,
type
:
'
success
'
,
duration
:
2000
});
});
})
.
catch
(
err
=>
{
this
.
$nextTick
(()
=>
{
this
.
$notify
({
title
:
'
失败
'
,
message
:
'
修改失败
'
,
type
:
'
error
'
,
duration
:
2000
});
});
});
},
handleEditorDataObject
(
dialogData
,
arrayKey
,
keyPathMap
)
{
let
_valType
=
Object
.
prototype
.
toString
.
call
(
dialogData
[
arrayKey
]);
if
(
_valType
===
'
[object Array]
'
)
{
dialogData
=
handleCascaderValue
(
dialogData
,
arrayKey
,
this
.
$lodash
.
keys
(
keyPathMap
)
);
}
else
{
for
(
let
key
in
keyPathMap
)
{
dialogData
[
key
]
=
this
.
$lodash
.
get
(
dialogData
,
keyPathMap
[
key
]);
}
}
},
deleteData
(
index
,
row
)
{
this
.
$nextTick
(()
=>
{
...
...
ve-admin/admin-web/vue.config.js
View file @
b64a9584
'
use strict
'
const
path
=
require
(
'
path
'
)
const
defaultSettings
=
require
(
'
./src/settings.js
'
)
'
use strict
'
;
const
path
=
require
(
'
path
'
)
;
const
defaultSettings
=
require
(
'
./src/settings.js
'
)
;
function
resolve
(
dir
)
{
return
path
.
join
(
__dirname
,
dir
)
return
path
.
join
(
__dirname
,
dir
)
;
}
const
name
=
defaultSettings
.
title
||
'
Boot Plus Admin
'
// page title
const
name
=
defaultSettings
.
title
||
'
Boot Plus Admin
'
;
// page title
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
// You can change the port by the following method:
// port = 9527 npm run dev OR npm run dev --port = 9527
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
9527
// dev port
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
9527
;
// dev port
// All configuration item explanations can be find in https://cli.vuejs.org/config/
module
.
exports
=
{
...
...
@@ -60,14 +60,14 @@ module.exports = {
}
},
chainWebpack
(
config
)
{
config
.
plugins
.
delete
(
'
preload
'
)
// TODO: need test
config
.
plugins
.
delete
(
'
prefetch
'
)
// TODO: need test
config
.
plugins
.
delete
(
'
preload
'
)
;
// TODO: need test
config
.
plugins
.
delete
(
'
prefetch
'
)
;
// TODO: need test
// set svg-sprite-loader
config
.
module
.
rule
(
'
svg
'
)
.
exclude
.
add
(
resolve
(
'
src/icons
'
))
.
end
()
.
end
()
;
config
.
module
.
rule
(
'
icons
'
)
.
test
(
/
\.
svg$/
)
...
...
@@ -78,7 +78,7 @@ module.exports = {
.
options
({
symbolId
:
'
icon-[name]
'
})
.
end
()
.
end
()
;
// set preserveWhitespace
config
.
module
...
...
@@ -86,16 +86,16 @@ module.exports = {
.
use
(
'
vue-loader
'
)
.
loader
(
'
vue-loader
'
)
.
tap
(
options
=>
{
options
.
compilerOptions
.
preserveWhitespace
=
true
return
options
options
.
compilerOptions
.
preserveWhitespace
=
true
;
return
options
;
})
.
end
()
.
end
()
;
config
// https://webpack.js.org/configuration/devtool/#development
.
when
(
process
.
env
.
NODE_ENV
===
'
development
'
,
config
=>
config
.
devtool
(
'
cheap-source-map
'
)
)
)
;
config
.
when
(
process
.
env
.
NODE_ENV
!==
'
development
'
,
config
=>
{
config
...
...
@@ -107,7 +107,7 @@ module.exports = {
inline
:
/runtime
\.
.*
\.
js$/
}
])
.
end
()
.
end
()
;
config
.
optimization
.
splitChunks
({
chunks
:
'
all
'
,
cacheGroups
:
{
...
...
@@ -130,8 +130,8 @@ module.exports = {
reuseExistingChunk
:
true
}
}
})
config
.
optimization
.
runtimeChunk
(
'
single
'
)
})
})
;
config
.
optimization
.
runtimeChunk
(
'
single
'
)
;
})
;
}
}
}
;
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment