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
34c9ce81
"vscode:/vscode.git/clone" did not exist on "e705e844178ac1030869e97bc61e93dd729dff02"
Commit
34c9ce81
authored
Feb 07, 2020
by
trumansdo
Browse files
暂存,重新处理结果集映射
parent
404d2016
Changes
54
Hide whitespace changes
Inline
Side-by-side
ve-admin/admin-web/src/api/dict.js
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime : 2020-0
1-11 20:47:10
* @LastEditTime : 2020-0
2-04 14:50:26
* @LastEditors : 一日看尽长安花
* @Description:
*/
...
...
@@ -9,7 +9,7 @@ import request from '@/utils/request';
export
function
getDictsByParent
(
params
)
{
return
request
({
url
:
'
/core/dicts
'
,
url
:
'
/core/dicts
/tree
'
,
method
:
'
get
'
,
params
:
params
});
...
...
ve-admin/admin-web/src/api/org.js
0 → 100644
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime : 2020-01-11 20:47:10
* @LastEditors : 一日看尽长安花
* @Description:
*/
import
request
from
'
@/utils/request
'
;
export
function
getOrgsByParent
(
params
)
{
return
request
({
url
:
'
/core/orgs/tree
'
,
method
:
'
get
'
,
params
:
params
});
}
ve-admin/admin-web/src/api/user.js
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2019-09-04 20:55:14
* @LastEditTime: 20
19-10-27 23:13:10
* @LastEditors: 一日看尽长安花
* @LastEditTime
: 20
20-02-04 13:20:29
* @LastEditors
: 一日看尽长安花
* @Description:
*/
import
request
from
'
@/utils/request
'
;
...
...
@@ -34,7 +34,7 @@ export function users(params) {
return
request
({
url
:
'
/users
'
,
method
:
'
get
'
,
params
:
params
params
});
}
...
...
ve-admin/admin-web/src/components/
TableViews
/DataTable.vue
→
ve-admin/admin-web/src/components/
GeneralPage
/DataTable.vue
View file @
34c9ce81
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 16:14:37
* @LastEditTime: 20
19-12-17 14:07:33
* @LastEditors: 一日看尽长安花
* @LastEditTime
: 20
20-02-06 11:32:07
* @LastEditors
: 一日看尽长安花
* @Description:
-->
<
template
>
...
...
@@ -23,13 +23,16 @@
<el-table-column
:key=
"Math.random()"
type=
"index"
></el-table-column>
<el-table-column
v-for=
"(val, key) in
m
etadata"
v-for=
"(val, key) in
visibleM
etadata"
:key=
"key"
:prop=
"val.
type === 'dict' ? key + '.name' : key
"
:prop=
"val.
json_path
"
:label=
"val.name"
:sortable=
"val.sortable"
:show-overflow-tooltip=
"true"
>
<template
v-slot=
"scope"
>
{{
handleTableSlot
(
scope
)
}}
</
template
>
</el-table-column>
<el-table-column
:key=
"Math.random()"
width=
"170"
align=
"right"
>
...
...
@@ -70,6 +73,7 @@
<
script
>
import
Pagination
from
'
./Pagination
'
;
import
{
parseTime
,
formatTime
}
from
'
@/utils
'
;
export
default
{
name
:
'
DataTable
'
,
...
...
@@ -114,12 +118,35 @@ export default {
cloneTableData
:
null
};
},
computed
:
{
// 计算属性的 getter
visibleMetadata
:
function
()
{
// `this` 指向 vm 实例
let
_metadata
=
{};
for
(
let
dict
in
this
.
metadata
)
{
const
t
=
this
.
metadata
[
dict
];
if
(
t
.
is_show_table_panel
)
{
_metadata
[
dict
]
=
t
;
}
}
return
_metadata
;
}
},
updated
()
{
console
.
log
(
'
以下是元数据和结果数据
'
);
console
.
log
(
this
.
metadata
);
console
.
log
(
this
.
tabledata
);
//
console.log('以下是元数据和结果数据');
//
console.log(this.metadata);
//
console.log(this.tabledata);
},
methods
:
{
handleTableSlot
(
scope
)
{
let
val
=
this
.
$lodash
.
get
(
scope
.
row
,
scope
.
column
.
property
);
const
isTimestamp
=
scope
.
column
.
property
.
endsWith
(
'
_time
'
)
&&
typeof
val
===
'
number
'
;
if
(
isTimestamp
)
{
val
=
parseTime
(
val
/
1000
,
'
{y}-{m}-{d} {h}:{i}:{s}
'
);
}
return
val
;
},
searchTable
()
{
/*
要用一个临时数据将当前页面的数据保存下来。
...
...
ve-admin/admin-web/src/components/
TableViews
/Pagination.vue
→
ve-admin/admin-web/src/components/
GeneralPage
/Pagination.vue
View file @
34c9ce81
File moved
ve-admin/admin-web/src/components/
TableViews
/SearchPane.vue
→
ve-admin/admin-web/src/components/
GeneralPage
/SearchPane.vue
View file @
34c9ce81
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 16:14:37
* @LastEditTime : 2020-0
1
-0
9 23:16:28
* @LastEditTime : 2020-0
2
-0
3 16:21:23
* @LastEditors : 一日看尽长安花
* @Description:
-->
...
...
@@ -16,7 +16,7 @@
>
<!-- 循环元数据构建搜索面板:除了下拉框 -->
<div
v-for=
"(val, key) in
m
etadata"
v-for=
"(val, key) in
visibleM
etadata"
:key=
"key"
class=
"filter-item-container"
>
...
...
@@ -34,15 +34,17 @@
style=
"display: inline-block;position: relative;top: -0.3rem;"
>
<el-date-picker
v-model=
"filterData[key + '
S
tart']"
v-model=
"filterData[key + '
_s
tart']"
type=
"datetime"
value-format=
"timestamp"
:placeholder=
"val.name + '开始时间'"
>
</el-date-picker>
<el-date-picker
v-model=
"filterData[key + '
E
nd']"
v-model=
"filterData[key + '
_e
nd']"
type=
"datetime"
value-format=
"timestamp"
:placeholder=
"val.name + '结束时间'"
>
</el-date-picker>
...
...
@@ -100,6 +102,21 @@ export default {
filterData
:
{}
};
},
computed
:
{
// 计算属性的 getter
visibleMetadata
:
function
()
{
// `this` 指向 vm 实例
let
_metadata
=
{};
let
allowTypes
=
[
'
string
'
,
'
date
'
];
for
(
let
dict
in
this
.
metadata
)
{
const
t
=
this
.
metadata
[
dict
];
if
(
t
.
is_show_search_panel
&&
allowTypes
.
includes
(
t
.
type
))
{
_metadata
[
dict
]
=
t
;
}
}
return
_metadata
;
}
},
methods
:
{
judgeType
(
str1
,
type
)
{
return
equalsIgnoreCase
(
str1
,
type
);
...
...
ve-admin/admin-web/src/components/
TableViews/EditDialog
.vue
→
ve-admin/admin-web/src/components/
GeneralPage/components/DetailPage
.vue
View file @
34c9ce81
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 16:14:37
* @LastEditTime: 20
19-12-17 14:41
:21
* @LastEditors: 一日看尽长安花
* @LastEditTime
: 20
20-02-05 17:00
:21
* @LastEditors
: 一日看尽长安花
* @Description:
-->
<
template
>
<div
class=
"dialog-container"
>
<!--
<!--
对话框:通过$emit 继续提交open和close事件改变对话框的显示和隐藏
-->
<el-dialog
:title=
"dialogTitle"
:visible=
"dialogVisible"
:close-on-click-modal=
"false"
@
open=
"openDialog"
@
close=
"closeDialog"
>
<el-dialog
:fullscreen=
"true"
:center=
"true"
:destroy-on-close=
"true"
:title=
"dialogTitle"
:visible=
"dialogVisible"
:close-on-click-modal=
"false"
@
open=
"openDialog"
@
close=
"closeDialog"
>
<div
class=
"dialog-container"
>
<el-form
ref=
"editForm"
:rules=
"rules"
:model=
"dialogData"
label-position=
"
lef
t"
label-width=
"
70px
"
style=
"width: 400px; margin-left:50px;
"
label-position=
"
righ
t"
label-width=
"
10vw
"
class=
"sp-form
"
>
<el-form-item
v-for=
"(val, key) in
m
etadata"
v-for=
"(val, key) in
visibleM
etadata"
:key=
"key"
:label=
"val.name"
:prop=
"key"
...
...
@@ -36,36 +39,37 @@
v-model=
"dialogData[key]"
:placeholder=
"val.name"
:clearable=
"true"
style=
"width: 200px;"
class=
"filter-item"
class=
"sp-form-item"
/>
<el-date-picker
v-else-if=
"judgeType(val.type, 'date')"
v-model=
"dialogData[key]"
type=
"datetime"
value-format=
"timestamp"
:placeholder=
"val.name + '时间'"
class=
"sp-form-item"
>
</el-date-picker>
</el-form-item>
<!-- 用于面板中的自定义表单元素,例如级联选择器,并通过作用域插槽的方式将数据传递给自定义表单 -->
<slot
:dialog-data=
"dialogData"
name=
"dialog-form-item"
></slot>
</el-form>
<template
v-slot:footer
>
<
div
class=
"dialog-
footer
"
>
<el-button
@
click=
"closeDialog
"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"operationType === 'create' ? createData() : updateData()
"
>
确定
</el-button>
</
div
>
</
template
>
</
el-dialog
>
</
div
>
</div
>
<
template
v-slot:
footer
>
<div
class=
"dialog-footer
"
>
<el-button
@
click=
"closeDialog"
>
取消
<
/
el-button
>
<el-button
type=
"primary
"
@
click=
"operationType === 'create' ? createData() : updateData()"
>
确定
</
el-button
>
</
div
>
</
template
>
</
el-dialog
>
</template>
<
script
>
...
...
@@ -108,6 +112,20 @@ export default {
data
()
{
return
{};
},
computed
:
{
// 计算属性的 getter
visibleMetadata
:
function
()
{
// `this` 指向 vm 实例
let
_metadata
=
{};
for
(
let
dict
in
this
.
metadata
)
{
const
t
=
this
.
metadata
[
dict
];
if
(
t
.
is_show_editor_panel
)
{
_metadata
[
dict
]
=
t
;
}
}
return
_metadata
;
}
},
methods
:
{
judgeType
(
str1
,
type
)
{
return
equalsIgnoreCase
(
str1
,
type
);
...
...
@@ -170,4 +188,15 @@ export default {
}
};
</
script
>
<
style
></
style
>
<
style
scope
>
.sp-form
{
width
:
50vw
;
margin
:
0
auto
;
}
.sp-form-item
{
width
:
100%
;
}
.el-date-editor.sp-form-item
{
width
:
100%
;
}
</
style
>
ve-admin/admin-web/src/components/
TableViews
/index.vue
→
ve-admin/admin-web/src/components/
GeneralPage
/index.vue
View file @
34c9ce81
...
...
@@ -31,7 +31,7 @@
@
handle-edit=
"handleEdit"
@
delete-data=
"$emit('delete-data')"
></data-table>
<
edit-dialog
<
detail-page
:metadata=
"metadata"
:dialog-visible.sync=
"dialogVisible"
:dialog-title=
"dialogTitle"
...
...
@@ -45,18 +45,18 @@
<
template
#dialog-form-item=
"{dialogData:dialogData}"
>
<slot
:dialog-data=
"dialogData"
name=
"dialog-form-item"
></slot>
</
template
>
</
edit-dialog
>
</
detail-page
>
</div>
</template>
<
script
>
import
SearchPane
from
'
./SearchPane
'
;
import
DataTable
from
'
./DataTable
'
;
import
EditDialog
from
'
./EditDialog
'
;
import
DetailPage
from
'
./components/DetailPage
'
;
export
default
{
name
:
'
TableViews
'
,
components
:
{
SearchPane
,
DataTable
,
EditDialog
},
name
:
'
GeneralPage
'
,
components
:
{
SearchPane
,
DataTable
,
DetailPage
},
props
:
{
// 表格元数据
metadata
:
{
...
...
ve-admin/admin-web/src/filters/index.js
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2019-12-01 11:03:53
* @LastEditTime : 2020-01-28 14:20:30
* @LastEditors : 一日看尽长安花
* @Description:
*/
// import parseTime, formatTime and set to filter
export
{
parseTime
,
formatTime
}
from
'
@/utils
'
export
{
parseTime
,
formatTime
}
from
'
@/utils
'
;
import
{
parseTime
,
formatTime
}
from
'
@/utils
'
;
/**
* Show plural label if time is plural number
* @param {number} timestamp 时间戳
* @return {string}
*/
export
function
symbolFormat
(
timestamp
)
{
timestamp
=
Number
(
timestamp
);
return
parseTime
(
timestamp
,
'
{y}-{m}-{d} {h}:{i}:{s}
'
);
}
/**
* Show plural label if time is plural number
...
...
@@ -7,24 +25,24 @@ export { parseTime, formatTime } from '@/utils'
* @param {string} label
* @return {string}
*/
function
pluralize
(
time
,
label
)
{
export
function
pluralize
(
time
,
label
)
{
if
(
time
===
1
)
{
return
time
+
label
return
time
+
label
;
}
return
time
+
label
+
'
s
'
return
time
+
label
+
'
s
'
;
}
/**
* @param {number} time
*/
export
function
timeAgo
(
time
)
{
const
between
=
Date
.
now
()
/
1000
-
Number
(
time
)
const
between
=
Date
.
now
()
/
1000
-
Number
(
time
)
;
if
(
between
<
3600
)
{
return
pluralize
(
~~
(
between
/
60
),
'
minute
'
)
return
pluralize
(
~~
(
between
/
60
),
'
minute
'
)
;
}
else
if
(
between
<
86400
)
{
return
pluralize
(
~~
(
between
/
3600
),
'
hour
'
)
return
pluralize
(
~~
(
between
/
3600
),
'
hour
'
)
;
}
else
{
return
pluralize
(
~~
(
between
/
86400
),
'
day
'
)
return
pluralize
(
~~
(
between
/
86400
),
'
day
'
)
;
}
}
...
...
@@ -36,19 +54,23 @@ export function timeAgo(time) {
*/
export
function
numberFormatter
(
num
,
digits
)
{
const
si
=
[
{
value
:
1
E
18
,
symbol
:
'
E
'
},
{
value
:
1
E
15
,
symbol
:
'
P
'
},
{
value
:
1
E
12
,
symbol
:
'
T
'
},
{
value
:
1
E
9
,
symbol
:
'
G
'
},
{
value
:
1
E
6
,
symbol
:
'
M
'
},
{
value
:
1
E
3
,
symbol
:
'
k
'
}
]
{
value
:
1
e
18
,
symbol
:
'
E
'
},
{
value
:
1
e
15
,
symbol
:
'
P
'
},
{
value
:
1
e
12
,
symbol
:
'
T
'
},
{
value
:
1
e
9
,
symbol
:
'
G
'
},
{
value
:
1
e
6
,
symbol
:
'
M
'
},
{
value
:
1
e
3
,
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
/
si
[
i
].
value
+
0.1
)
.
toFixed
(
digits
)
.
replace
(
/
\.
0+$|
(\.[
0-9
]
*
[
1-9
])
0+$/
,
'
$1
'
)
+
si
[
i
].
symbol
);
}
}
return
num
.
toString
()
return
num
.
toString
()
;
}
/**
...
...
@@ -56,7 +78,9 @@ export function numberFormatter(num, digits) {
* @param {number} num
*/
export
function
toThousandFilter
(
num
)
{
return
(
+
num
||
0
).
toString
().
replace
(
/^-
?\d
+/g
,
m
=>
m
.
replace
(
/
(?=(?!\b)(\d{3})
+$
)
/g
,
'
,
'
))
return
(
+
num
||
0
)
.
toString
()
.
replace
(
/^-
?\d
+/g
,
m
=>
m
.
replace
(
/
(?=(?!\b)(\d{3})
+$
)
/g
,
'
,
'
));
}
/**
...
...
@@ -64,5 +88,5 @@ export function toThousandFilter(num) {
* @param {String} string
*/
export
function
uppercaseFirst
(
string
)
{
return
string
.
charAt
(
0
).
toUpperCase
()
+
string
.
slice
(
1
)
return
string
.
charAt
(
0
).
toUpperCase
()
+
string
.
slice
(
1
)
;
}
ve-admin/admin-web/src/services/dict.js
0 → 100644
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2020-01-13 23:12:07
* @LastEditTime : 2020-02-05 17:03:34
* @LastEditors : 一日看尽长安花
* @Description: 与业务有关的非纯api的js
*/
import
{
getDictsByParent
}
from
'
@/api/dict
'
;
/**
* @description: 异步载入级联器的数据
* @param {node} 参照cascader的lazyLoad同名参数
* @param {resolve} 同上
* @param {type} 第一级字典类型
*/
export
function
loadDictCascaderData
(
node
,
resolve
,
type
)
{
const
{
root
,
data
}
=
node
;
const
{
id
}
=
data
||
{};
let
datas
=
[];
if
(
!
root
)
{
type
=
null
;
}
let
reqParam
=
{
parentId
:
id
,
type
:
type
};
getDictsByParent
(
reqParam
)
.
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
datas
=
data
;
})
.
finally
(()
=>
{
resolve
(
datas
);
});
}
/**
* @description: 处理级联器的选中值,级联器选中值是个数组,需要处理为指定key-value
* @param {obj} 包含选中值的对象
* @param {modelKey} 级联器 cascader 的 v-model 选中值的key名称
* @param {keyNames} 转换后的 key 名称级,必须按照级联器选中值的顺序
* @returns {Object} 包含转换后的 key-value 值
*/
export
function
handleDictCascaderValue
(
obj
,
modelKey
,
keyNames
)
{
let
selValArray
=
obj
[
modelKey
]
||
[];
let
resObj
=
{};
for
(
var
i
in
selValArray
)
{
resObj
[
keyNames
[
i
]]
=
selValArray
[
i
];
}
delete
obj
[
modelKey
];
return
Object
.
assign
({},
obj
,
resObj
);
}
ve-admin/admin-web/src/services/org.js
0 → 100644
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2020-01-13 23:12:07
* @LastEditTime : 2020-02-05 17:04:59
* @LastEditors : 一日看尽长安花
* @Description: 与业务有关的非纯api的js
*/
import
{
getOrgsByParent
}
from
'
@/api/org
'
;
/**
* @description: 异步载入级联器的数据
* @param {node} 参照cascader的lazyLoad同名参数
* @param {resolve} 同上
* @param {type} 第一级字典类型
*/
export
function
loadOrgCascaderData
(
node
,
resolve
)
{
const
{
root
,
data
}
=
node
;
const
{
id
}
=
data
||
{};
let
datas
=
[];
getOrgsByParent
({
parentId
:
id
})
.
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
datas
=
data
;
})
.
finally
(()
=>
{
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/object-util.js
View file @
34c9ce81
/*
* @Author: 一日看尽长安花
* @since: 2019-10-11 17:40:57
* @LastEditTime: 20
19-10-16 10:46:40
* @LastEditors: 一日看尽长安花
* @LastEditTime
: 20
20-02-04 13:10:03
* @LastEditors
: 一日看尽长安花
* @Description:
*/
import
lodash
from
'
lodash
'
;
/**
* @description: obj存在为true。由于js存在undefined 和 null两种特殊的数据类型,认为从空间和引用指向上,只要有一个不存在则判断为不存在。
...
...
@@ -23,3 +24,53 @@ export function isExists(obj) {
export
function
isNotExists
(
obj
)
{
return
obj
===
void
0
||
obj
===
null
;
}
/**
* 深度遍历object,改变key为驼峰式命名
* @param {object} obj
*/
export
function
toCamelCaseObjectDeep
(
obj
)
{
for
(
let
_key
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
_key
))
{
let
_val
=
obj
[
_key
];
let
_valType
=
Object
.
prototype
.
toString
.
call
(
_val
);
if
(
_valType
===
'
[object Array]
'
)
{
_val
=
toCamelCaseArrayDeep
(
_val
);
}
else
if
(
_valType
===
'
[object Object]
'
)
{
_val
=
toCamelCaseObjectDeep
(
_val
);
}
delete
obj
[
_key
];
obj
[
lodash
.
camelCase
(
_key
)]
=
_val
;
}
}
return
obj
;
}
/**
* 深度遍历数组,改变其中object元素的key为驼峰式命名
* @param {object} obj
*/
export
function
toCamelCaseArrayDeep
(
list
)
{
for
(
let
i
in
list
)
{
const
_valType
=
Object
.
prototype
.
toString
.
call
(
list
[
i
]);
if
(
_valType
===
'
[object Object]
'
)
{
list
[
i
]
=
toCamelCaseObjectDeep
(
list
[
i
]);
}
else
if
(
_valType
===
'
[object Array]
'
)
{
list
[
i
]
=
toCamelCaseArrayDeep
(
list
[
i
]);
}
}
return
list
;
}
/**
* 深度遍历改变data中object 的key的命名为驼峰式命名
* @param {Object/Array} data
*/
export
function
toCamelCaseDeep
(
data
)
{
const
_dataType
=
Object
.
prototype
.
toString
.
call
(
data
);
let
changedKeyParams
;
if
(
_dataType
===
'
[object Object]
'
)
{
changedKeyParams
=
toCamelCaseObjectDeep
(
data
);
}
else
if
(
_dataType
===
'
[object Array]
'
)
{
changedKeyParams
=
toCamelCaseArrayDeep
(
data
);
}
return
changedKeyParams
;
}
ve-admin/admin-web/src/utils/request.js
View file @
34c9ce81
...
...
@@ -2,24 +2,35 @@
* @Description: In User Settings Edit
* @Author: your name
* @Date: 2019-09-09 12:16:28
* @LastEditTime : 2020-0
1-11 23:24:40
* @LastEditTime : 2020-0
2-04 13:19:39
* @LastEditors : 一日看尽长安花
*/
import
axios
from
'
axios
'
;
import
{
MessageBox
,
Message
}
from
'
element-ui
'
;
import
store
from
'
@/store
'
;
import
{
getToken
,
setToken
}
from
'
@/utils/auth
'
;
import
{
toCamelCaseDeep
}
from
'
@/utils/object-util
'
;
// create an axios instance
const
service
=
axios
.
create
({
baseURL
:
process
.
env
.
VUE_APP_BASE_API
,
// url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout
:
5000
// request timeout
timeout
:
5000
0
// request timeout
});
// request interceptor
service
.
interceptors
.
request
.
use
(
config
=>
{
const
method
=
config
.
method
;
const
params
=
config
.
params
||
config
.
data
||
null
;
if
(
params
)
{
const
changedKeyParams
=
toCamelCaseDeep
(
params
);
if
(
method
===
'
get
'
)
{
config
.
params
=
changedKeyParams
;
}
else
{
config
.
data
=
changedKeyParams
;
}
}
// do something before request is sent
if
(
store
.
getters
.
token
)
{
// let each request carry token
...
...
ve-admin/admin-web/src/views/users/index.vue
View file @
34c9ce81
<!--
* @Author: 一日看尽长安花
* @since: 2019-10-12 15:43:18
* @LastEditTime : 2020-0
1-11 21
:15:
32
* @LastEditTime : 2020-0
2-04 16
:15:
14
* @LastEditors : 一日看尽长安花
* @Description:
-->
<
template
>
<div>
<
table-views
<
general-page
:metadata=
"metadata"
:tabledata.sync=
"tabledata"
:loading=
"loading"
...
...
@@ -20,10 +20,29 @@
>
<!-- 往搜索栏中添加搜索条件 -->
<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>
</div>
<div
class=
"filter-item-container"
>
<el-cascader
v-model=
"filterData['jobType']"
:props=
"jobTypeCascaderProps"
clearable
placeholder=
"岗位/职务"
></el-cascader>
</div>
<div
class=
"filter-item-container"
>
<el-cascader
v-model=
"filterData['state']"
:props=
"stateCascaderProps"
clearable
placeholder=
"状态"
></el-cascader>
</div>
</
template
>
...
...
@@ -50,18 +69,19 @@
/>
</el-form-item>
</
template
>
</
table-views
>
</
general-page
>
</div>
</template>
<
script
>
import
TableViews
from
'
@/components/
TableViews
'
;
import
GeneralPage
from
'
@/components/
GeneralPage
'
;
import
{
users
,
usersMetadata
}
from
'
@/api/user
'
;
import
{
getDictsByParent
}
from
'
@/api/dict
'
;
import
{
loadDictCascaderData
,
handleDictCascaderValue
}
from
'
@/services/dict
'
;
import
{
loadOrgCascaderData
,
handleOrgCascaderValue
}
from
'
@/services/org
'
;
export
default
{
name
:
'
CoreUsersView
'
,
components
:
{
TableViews
},
components
:
{
GeneralPage
},
props
:
{},
data
()
{
return
{
...
...
@@ -72,26 +92,25 @@ export default {
total
:
0
},
loading
:
true
,
orgIdCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
loadOrgCascaderData
(
node
,
resolve
);
}
},
jobTypeCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
const
{
root
,
data
}
=
node
;
const
{
id
}
=
data
||
{};
let
datas
=
[],
type
;
if
(
root
)
{
type
=
'
job_type
'
;
}
let
reqParam
=
{
parentId
:
id
,
type
:
type
};
getDictsByParent
(
reqParam
).
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
resolve
(
data
);
});
loadDictCascaderData
(
node
,
resolve
,
'
job_type
'
);
}
},
stateCascaderProps
:
{
checkStrictly
:
true
,
lazy
:
true
,
lazyLoad
(
node
,
resolve
)
{
loadDictCascaderData
(
node
,
resolve
,
'
user_state
'
);
}
}
};
...
...
@@ -116,6 +135,12 @@ export default {
},
obtainData
(
queryParams
)
{
this
.
loading
=
true
;
queryParams
=
handleOrgCascaderValue
(
queryParams
,
'
orgId
'
,
'
org_id
'
);
queryParams
=
handleDictCascaderValue
(
queryParams
,
'
jobType
'
,
[
'
jobType0
'
,
'
jobType1
'
]);
queryParams
=
handleDictCascaderValue
(
queryParams
,
'
state
'
,
[
'
state
'
]);
users
(
queryParams
)
.
then
(
result
=>
{
const
{
code
,
data
}
=
{
...
result
};
...
...
Prev
1
2
3
Next
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