Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yindong-tongbai-automation
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lichunliang
yindong-tongbai-automation
Commits
b5c0095f
Commit
b5c0095f
authored
Aug 02, 2025
by
sxl
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:二维码下载地址,用户账号姓名更换
parent
82da31e5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
301 additions
and
321 deletions
+301
-321
index.vue
src/views/inspection/patrol/patrolLocation/index.vue
+87
-150
index.vue
src/views/system/user/index.vue
+214
-171
No files found.
src/views/inspection/patrol/patrolLocation/index.vue
View file @
b5c0095f
<
template
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
<el-form-item
label=
""
prop=
"placeName"
>
<el-input
v-model=
"queryParams.placeName"
placeholder=
"请输入地点名称"
clearable
@
keyup.enter=
"handleQuery"
/>
<el-input
v-model=
"queryParams.placeName"
placeholder=
"请输入地点名称"
clearable
@
keyup.enter=
"handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button
>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
<el-button
type=
"primary"
plain
icon=
"Plus"
@
click=
"handleAdd"
v-hasPermi=
"['device:device:add']"
>
新增
</el-button
>
<el-button
type=
"warning"
plain
icon=
"Download"
@
click=
"handleExport"
>
批量下载二维码
</el-button
>
<el-button
type=
"primary"
plain
icon=
"Plus"
@
click=
"handleAdd"
v-hasPermi=
"['device:device:add']"
>
新增
</el-button>
<el-button
type=
"warning"
plain
icon=
"Download"
@
click=
"handleExport"
>
批量下载二维码
</el-button>
</el-form-item>
</el-form>
<el-table
v-loading=
"loading"
:data=
"placeList"
@
selection-change=
"handleSelectionChange"
>
<el-table
v-loading=
"loading"
:data=
"placeList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
label=
"地点名称"
align=
"center"
prop=
"placeName"
/>
<el-table-column
label=
"地点位置"
align=
"center"
prop=
"location"
/>
<el-table-column
label=
"信息"
align=
"center"
prop=
"information"
/>
<el-table-column
label=
"巡检点二维码"
align=
"center"
class-name=
"small-padding"
>
<el-table-column
label=
"巡检点二维码"
align=
"center"
class-name=
"small-padding"
>
<template
#default
="
scope
"
>
<el-button
type=
"text"
icon=
"el-icon-download"
@
click=
"handleDownloadQrCode(scope.row)"
>
下载二维码
</el-button
>
<el-button
type=
"text"
icon=
"el-icon-download"
@
click=
"handleDownloadQrCode(scope.row)"
>
下载二维码
</el-button>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#default
="
scope
"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
>
修改
</el-button
>
<el-button
link
type=
"primary"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
>
修改
</el-button>
<el-button
link
type=
"primary"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<!-- 添加或修改设备管理对话框 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"500px"
append-to-body
>
...
...
@@ -116,17 +59,11 @@
</template>
<
script
>
import
{
listLog
,
getLog
,
delLog
,
addLog
,
updateLog
,
}
from
"
@/api/patrol/patrolLocation
"
;
import
request
from
"
@/utils/request
"
;
import
{
listLog
,
getLog
,
delLog
,
addLog
,
updateLog
}
from
'
@/api/patrol/patrolLocation
'
import
request
from
'
@/utils/request
'
export
default
{
name
:
"
Device
"
,
name
:
'
Device
'
,
data
()
{
return
{
// 表格树数据
...
...
@@ -150,7 +87,7 @@ export default {
placeList
:
[],
deviceTypeList
:
[],
// 弹出层标题
title
:
""
,
title
:
''
,
// 是否显示弹出层
open
:
false
,
// 查询参数
...
...
@@ -166,22 +103,22 @@ export default {
rules
:
{
placeName
:
[
// 地点名称必填校验
{
required
:
true
,
message
:
"
地点名称不能为空
"
,
trigger
:
"
blur
"
},
{
required
:
true
,
message
:
'
地点名称不能为空
'
,
trigger
:
'
blur
'
},
],
location
:
[
// 巡检位置描述必填校验
{
required
:
true
,
message
:
"
巡检位置描述不能为空
"
,
trigger
:
"
blur
"
},
{
required
:
true
,
message
:
'
巡检位置描述不能为空
'
,
trigger
:
'
blur
'
},
],
information
:
[
// 信息必填校验
{
required
:
true
,
message
:
"
信息不能为空
"
,
trigger
:
"
blur
"
},
{
required
:
true
,
message
:
'
信息不能为空
'
,
trigger
:
'
blur
'
},
],
},
}
;
}
},
created
()
{
this
.
getPlaceList
()
;
this
.
getList
()
;
this
.
getPlaceList
()
this
.
getList
()
},
methods
:
{
// 下载在线图片的函数
...
...
@@ -189,43 +126,43 @@ export default {
fetch
(
imageUrl
)
.
then
((
response
)
=>
response
.
blob
())
.
then
((
blob
)
=>
{
const
tempUrl
=
URL
.
createObjectURL
(
blob
)
;
const
link
=
document
.
createElement
(
"
a
"
);
link
.
href
=
tempUrl
;
link
.
download
=
fileName
||
"
downloaded_image.png
"
;
document
.
body
.
appendChild
(
link
)
;
link
.
click
()
;
const
tempUrl
=
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'
a
'
)
link
.
href
=
tempUrl
link
.
download
=
fileName
||
'
downloaded_image.png
'
document
.
body
.
appendChild
(
link
)
link
.
click
()
// 清理资源
setTimeout
(()
=>
{
URL
.
revokeObjectURL
(
tempUrl
)
;
document
.
body
.
removeChild
(
link
)
;
},
100
)
;
URL
.
revokeObjectURL
(
tempUrl
)
document
.
body
.
removeChild
(
link
)
},
100
)
})
.
catch
((
error
)
=>
console
.
error
(
"
下载失败:
"
,
error
));
.
catch
((
error
)
=>
console
.
error
(
'
下载失败:
'
,
error
))
},
// 新增下载二维码方法
async
handleDownloadQrCode
(
row
)
{
// 使用示例
const
fileurl
=
"
http://192.168.2.13:8080
"
+
row
.
qrCode
;
this
.
downloadOnlineImage
(
fileurl
,
"
qr_code.png
"
);
const
fileurl
=
this
.
baseUrl
+
row
.
qrCode
this
.
downloadOnlineImage
(
fileurl
,
'
qr_code.png
'
)
},
getPlaceList
()
{
listLog
(
this
.
queryParams
).
then
((
response
)
=>
{
this
.
placeList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
})
;
this
.
placeList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
/** 查询设备类型列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -233,97 +170,97 @@ export default {
placeName
:
null
,
location
:
null
,
information
:
null
,
}
;
this
.
resetForm
(
"
form
"
);
}
this
.
resetForm
(
'
form
'
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getPlaceList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getPlaceList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
()
;
this
.
resetForm
(
'
queryForm
'
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
id
)
;
this
.
single
=
selection
.
length
!==
1
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
id
)
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加巡检点
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
'
添加巡检点
'
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
修改巡检点
"
;
this
.
form
=
JSON
.
parse
(
JSON
.
stringify
(
row
))
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
'
修改巡检点
'
this
.
form
=
JSON
.
parse
(
JSON
.
stringify
(
row
))
},
/** 提交按钮 */
submitForm
()
{
this
.
$refs
[
"
form
"
].
validate
((
valid
)
=>
{
this
.
$refs
[
'
form
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
this
.
form
.
id
!=
null
)
{
updateLog
(
this
.
form
).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
);
this
.
open
=
false
;
this
.
getPlaceList
()
;
})
;
this
.
$modal
.
msgSuccess
(
'
修改成功
'
)
this
.
open
=
false
this
.
getPlaceList
()
})
}
else
{
addLog
(
this
.
form
).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
);
this
.
open
=
false
;
this
.
getPlaceList
()
;
})
;
this
.
$modal
.
msgSuccess
(
'
新增成功
'
)
this
.
open
=
false
this
.
getPlaceList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
ids
=
row
.
id
||
this
.
ids
;
const
ids
=
row
.
id
||
this
.
ids
this
.
$modal
.
confirm
(
"
是否确认删除?
"
)
.
confirm
(
'
是否确认删除?
'
)
.
then
(
function
()
{
return
delLog
(
ids
)
;
return
delLog
(
ids
)
})
.
then
(()
=>
{
this
.
getPlaceList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
this
.
getPlaceList
()
this
.
$modal
.
msgSuccess
(
'
删除成功
'
)
})
.
catch
(()
=>
{})
;
.
catch
(()
=>
{})
},
handleExport
()
{
request
({
url
:
`/gemho/place/downloadQrZip`
,
params
:
this
.
queryParams
,
method
:
"
get
"
,
responseType
:
"
blob
"
,
// 关键:指定接收二进制流
method
:
'
get
'
,
responseType
:
'
blob
'
,
// 关键:指定接收二进制流
}).
then
((
response
)
=>
{
// 创建Blob对象并生成临时URL
const
blob
=
new
Blob
([
response
],
{
type
:
"
application/zip
"
});
// 根据实际图片类型调整
const
url
=
window
.
URL
.
createObjectURL
(
blob
)
;
const
blob
=
new
Blob
([
response
],
{
type
:
'
application/zip
'
})
// 根据实际图片类型调整
const
url
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建并触发下载链接
const
a
=
document
.
createElement
(
"
a
"
);
a
.
href
=
url
;
a
.
download
=
`二维码.zip`
;
// 文件名使用设备编号+二维码
document
.
body
.
appendChild
(
a
)
;
a
.
click
()
;
const
a
=
document
.
createElement
(
'
a
'
)
a
.
href
=
url
a
.
download
=
`二维码.zip`
// 文件名使用设备编号+二维码
document
.
body
.
appendChild
(
a
)
a
.
click
()
// 清理资源
document
.
body
.
removeChild
(
a
)
;
window
.
URL
.
revokeObjectURL
(
url
)
;
this
.
$message
.
success
(
"
二维码下载成功
"
);
})
;
document
.
body
.
removeChild
(
a
)
window
.
URL
.
revokeObjectURL
(
url
)
this
.
$message
.
success
(
'
二维码下载成功
'
)
})
},
},
}
;
}
</
script
>
\ No newline at end of file
src/views/system/user/index.vue
View file @
b5c0095f
...
...
@@ -9,7 +9,17 @@
<el-input
v-model=
"deptName"
placeholder=
"请输入部门名称"
clearable
size=
"small"
prefix-icon=
"el-icon-search"
style=
"margin-bottom: 20px"
/>
</div>
<div
class=
"head-container"
>
<el-tree
:data=
"deptOptions"
:props=
"defaultProps"
:expand-on-click-node=
"false"
:filter-node-method=
"filterNode"
ref=
"tree"
node-key=
"id"
default-expand-all
highlight-current
@
node-click=
"handleNodeClick"
/>
<el-tree
:data=
"deptOptions"
:props=
"defaultProps"
:expand-on-click-node=
"false"
:filter-node-method=
"filterNode"
ref=
"tree"
node-key=
"id"
default-expand-all
highlight-current
@
node-click=
"handleNodeClick"
/>
</div>
</el-col>
</pane>
...
...
@@ -29,7 +39,15 @@
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
>
<el-date-picker
v-model=
"dateRange"
style=
"width: 240px"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
<el-date-picker
v-model=
"dateRange"
style=
"width: 240px"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
...
...
@@ -42,10 +60,14 @@
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['system:user:add']"
>
新增
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
plain
icon=
"el-icon-edit"
size=
"mini"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['system:user:edit']"
>
修改
</el-button>
<el-button
type=
"success"
plain
icon=
"el-icon-edit"
size=
"mini"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['system:user:edit']"
>
修改
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['system:user:remove']"
>
删除
</el-button>
<el-button
type=
"danger"
plain
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['system:user:remove']"
>
删除
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"info"
plain
icon=
"el-icon-upload2"
size=
"mini"
@
click=
"handleImport"
v-hasPermi=
"['system:user:import']"
>
导入
</el-button>
...
...
@@ -59,8 +81,8 @@
<el-table
v-loading=
"loading"
:data=
"userList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
/>
<el-table-column
label=
"用户编号"
align=
"center"
key=
"userId"
prop=
"userId"
v-if=
"columns[0].visible"
/>
<el-table-column
label=
"
用户名称
"
align=
"center"
key=
"userName"
prop=
"userName"
v-if=
"columns[1].visible"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"
用户昵称
"
align=
"center"
key=
"nickName"
prop=
"nickName"
v-if=
"columns[2].visible"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"
账号
"
align=
"center"
key=
"userName"
prop=
"userName"
v-if=
"columns[1].visible"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"
姓名
"
align=
"center"
key=
"nickName"
prop=
"nickName"
v-if=
"columns[2].visible"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"部门"
align=
"center"
key=
"deptName"
prop=
"dept.deptName"
v-if=
"columns[3].visible"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"手机号码"
align=
"center"
key=
"phonenumber"
prop=
"phonenumber"
v-if=
"columns[4].visible"
width=
"120"
/>
<el-table-column
label=
"状态"
align=
"center"
key=
"status"
v-if=
"columns[5].visible"
>
...
...
@@ -153,7 +175,7 @@
<el-col
:span=
"12"
>
<el-form-item
label=
"岗位"
>
<el-select
v-model=
"form.postIds"
multiple
placeholder=
"请选择岗位"
>
<el-option
v-for=
"item in postOptions"
:key=
"item.postId"
:label=
"item.postName"
:value=
"item.postId"
:disabled=
"item.status == 1"
></el-option>
<el-option
v-for=
"item in postOptions"
:key=
"item.postId"
:label=
"item.postName"
:value=
"item.postId"
:disabled=
"item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
...
...
@@ -181,13 +203,22 @@
<!-- 用户导入对话框 -->
<el-dialog
:title=
"upload.title"
:visible.sync=
"upload.open"
width=
"400px"
append-to-body
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?updateSupport=' + upload.updateSupport"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?updateSupport=' + upload.updateSupport"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip text-center"
slot=
"tip"
>
<div
class=
"el-upload__tip"
slot=
"tip"
>
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的用户数据
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
><el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的用户数据
</div>
<span>
仅允许导入xls、xlsx格式文件。
</span>
<el-link
type=
"primary"
:underline=
"false"
style=
"font-size: 12px; vertical-align: baseline"
@
click=
"importTemplate"
>
下载模板
</el-link>
</div>
...
...
@@ -201,15 +232,15 @@
</template>
<
script
>
import
{
listUser
,
getUser
,
delUser
,
addUser
,
updateUser
,
resetUserPwd
,
changeUserStatus
,
deptTreeSelect
}
from
"
@/api/system/user
"
;
import
{
getToken
}
from
"
@/utils/auth
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
{
Splitpanes
,
Pane
}
from
"
splitpanes
"
;
import
"
splitpanes/dist/splitpanes.css
"
;
import
{
listUser
,
getUser
,
delUser
,
addUser
,
updateUser
,
resetUserPwd
,
changeUserStatus
,
deptTreeSelect
}
from
'
@/api/system/user
'
import
{
getToken
}
from
'
@/utils/auth
'
import
Treeselect
from
'
@riophae/vue-treeselect
'
import
'
@riophae/vue-treeselect/dist/vue-treeselect.css
'
import
{
Splitpanes
,
Pane
}
from
'
splitpanes
'
import
'
splitpanes/dist/splitpanes.css
'
export
default
{
name
:
"
User
"
,
name
:
'
User
'
,
dicts
:
[
'
sys_normal_disable
'
,
'
sys_user_sex
'
],
components
:
{
Treeselect
,
Splitpanes
,
Pane
},
data
()
{
...
...
@@ -229,7 +260,7 @@ export default {
// 用户表格数据
userList
:
null
,
// 弹出层标题
title
:
""
,
title
:
''
,
// 所有部门树选项
deptOptions
:
undefined
,
// 过滤掉已禁用部门树选项
...
...
@@ -249,23 +280,23 @@ export default {
// 表单参数
form
:
{},
defaultProps
:
{
children
:
"
children
"
,
label
:
"
label
"
children
:
'
children
'
,
label
:
'
label
'
,
},
// 用户导入参数
upload
:
{
// 是否显示弹出层(用户导入)
open
:
false
,
// 弹出层标题(用户导入)
title
:
""
,
title
:
''
,
// 是否禁用上传
isUploading
:
false
,
// 是否更新已经存在的用户数据
updateSupport
:
0
,
// 设置上传的请求头部
headers
:
{
Authorization
:
"
Bearer
"
+
getToken
()
},
headers
:
{
Authorization
:
'
Bearer
'
+
getToken
()
},
// 上传的地址
url
:
process
.
env
.
VUE_APP_BASE_API
+
"
/system/user/importData
"
url
:
process
.
env
.
VUE_APP_BASE_API
+
'
/system/user/importData
'
,
},
// 查询参数
queryParams
:
{
...
...
@@ -274,7 +305,7 @@ export default {
userName
:
undefined
,
phonenumber
:
undefined
,
status
:
undefined
,
deptId
:
undefined
deptId
:
undefined
,
},
// 列信息
columns
:
[
...
...
@@ -284,107 +315,108 @@ export default {
{
key
:
3
,
label
:
`部门`
,
visible
:
true
},
{
key
:
4
,
label
:
`手机号码`
,
visible
:
true
},
{
key
:
5
,
label
:
`状态`
,
visible
:
true
},
{
key
:
6
,
label
:
`创建时间`
,
visible
:
true
}
{
key
:
6
,
label
:
`创建时间`
,
visible
:
true
}
,
],
// 表单校验
rules
:
{
userName
:
[
{
required
:
true
,
message
:
"
用户名称不能为空
"
,
trigger
:
"
blur
"
},
{
min
:
2
,
max
:
20
,
message
:
'
用户名称长度必须介于 2 和 20 之间
'
,
trigger
:
'
blur
'
}
],
nickName
:
[
{
required
:
true
,
message
:
"
用户昵称不能为空
"
,
trigger
:
"
blur
"
}
{
required
:
true
,
message
:
'
用户名称不能为空
'
,
trigger
:
'
blur
'
},
{
min
:
2
,
max
:
20
,
message
:
'
用户名称长度必须介于 2 和 20 之间
'
,
trigger
:
'
blur
'
},
],
nickName
:
[{
required
:
true
,
message
:
'
用户昵称不能为空
'
,
trigger
:
'
blur
'
}],
password
:
[
{
required
:
true
,
message
:
"
用户密码不能为空
"
,
trigger
:
"
blur
"
},
{
required
:
true
,
message
:
'
用户密码不能为空
'
,
trigger
:
'
blur
'
},
{
min
:
5
,
max
:
20
,
message
:
'
用户密码长度必须介于 5 和 20 之间
'
,
trigger
:
'
blur
'
},
{
pattern
:
/^
[^
<>"'|
\\]
+$/
,
message
:
"
不能包含非法字符:< >
\"
'
\\\
|
"
,
trigger
:
"
blur
"
}
{
pattern
:
/^
[^
<>"'|
\\]
+$/
,
message
:
'
不能包含非法字符:< > "
\'
\\
|
'
,
trigger
:
'
blur
'
},
],
email
:
[
{
type
:
"
email
"
,
message
:
"
请输入正确的邮箱地址
"
,
trigger
:
[
"
blur
"
,
"
change
"
]
}
type
:
'
email
'
,
message
:
'
请输入正确的邮箱地址
'
,
trigger
:
[
'
blur
'
,
'
change
'
],
}
,
],
phonenumber
:
[
{
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
"
请输入正确的手机号码
"
,
trigger
:
"
blur
"
}
]
}
}
;
message
:
'
请输入正确的手机号码
'
,
trigger
:
'
blur
'
,
}
,
]
,
}
,
}
},
watch
:
{
// 根据名称筛选部门树
deptName
(
val
)
{
this
.
$refs
.
tree
.
filter
(
val
)
;
}
this
.
$refs
.
tree
.
filter
(
val
)
}
,
},
created
()
{
this
.
getList
()
;
this
.
getDeptTree
()
;
this
.
getConfigKey
(
"
sys.user.initPassword
"
).
then
(
response
=>
{
this
.
initPassword
=
response
.
msg
;
})
;
this
.
getList
()
this
.
getDeptTree
()
this
.
getConfigKey
(
'
sys.user.initPassword
'
).
then
((
response
)
=>
{
this
.
initPassword
=
response
.
msg
})
},
methods
:
{
/** 查询用户列表 */
getList
()
{
this
.
loading
=
true
;
listUser
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
userList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
}
);
this
.
loading
=
true
listUser
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
((
response
)
=>
{
this
.
userList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
/** 查询部门下拉树结构 */
getDeptTree
()
{
deptTreeSelect
().
then
(
response
=>
{
this
.
deptOptions
=
response
.
data
;
this
.
enabledDeptOptions
=
this
.
filterDisabledDept
(
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
)))
;
})
;
deptTreeSelect
().
then
(
(
response
)
=>
{
this
.
deptOptions
=
response
.
data
this
.
enabledDeptOptions
=
this
.
filterDisabledDept
(
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
)))
})
},
// 过滤禁用的部门
filterDisabledDept
(
deptList
)
{
return
deptList
.
filter
(
dept
=>
{
return
deptList
.
filter
(
(
dept
)
=>
{
if
(
dept
.
disabled
)
{
return
false
;
return
false
}
if
(
dept
.
children
&&
dept
.
children
.
length
)
{
dept
.
children
=
this
.
filterDisabledDept
(
dept
.
children
)
;
dept
.
children
=
this
.
filterDisabledDept
(
dept
.
children
)
}
return
true
;
})
;
return
true
})
},
// 筛选节点
filterNode
(
value
,
data
)
{
if
(
!
value
)
return
true
;
return
data
.
label
.
indexOf
(
value
)
!==
-
1
;
if
(
!
value
)
return
true
return
data
.
label
.
indexOf
(
value
)
!==
-
1
},
// 节点单击事件
handleNodeClick
(
data
)
{
this
.
queryParams
.
deptId
=
data
.
id
;
this
.
handleQuery
()
;
this
.
queryParams
.
deptId
=
data
.
id
this
.
handleQuery
()
},
// 用户状态修改
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
;
this
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
userName
+
'
"用户吗?
'
).
then
(
function
()
{
return
changeUserStatus
(
row
.
userId
,
row
.
status
);
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
);
}).
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
});
let
text
=
row
.
status
===
'
0
'
?
'
启用
'
:
'
停用
'
this
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
userName
+
'
"用户吗?
'
)
.
then
(
function
()
{
return
changeUserStatus
(
row
.
userId
,
row
.
status
)
})
.
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
text
+
'
成功
'
)
})
.
catch
(
function
()
{
row
.
status
=
row
.
status
===
'
0
'
?
'
1
'
:
'
0
'
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -397,157 +429,168 @@ export default {
phonenumber
:
undefined
,
email
:
undefined
,
sex
:
undefined
,
status
:
"
0
"
,
status
:
'
0
'
,
remark
:
undefined
,
postIds
:
[],
roleIds
:
[]
}
;
this
.
resetForm
(
"
form
"
);
roleIds
:
[]
,
}
this
.
resetForm
(
'
form
'
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
);
this
.
queryParams
.
deptId
=
undefined
;
this
.
$refs
.
tree
.
setCurrentKey
(
null
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
'
queryForm
'
)
this
.
queryParams
.
deptId
=
undefined
this
.
$refs
.
tree
.
setCurrentKey
(
null
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
userId
);
this
.
single
=
selection
.
length
!=
1
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
(
(
item
)
=>
item
.
userId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
// 更多操作触发
handleCommand
(
command
,
row
)
{
switch
(
command
)
{
case
"
handleResetPwd
"
:
this
.
handleResetPwd
(
row
)
;
break
;
case
"
handleAuthRole
"
:
this
.
handleAuthRole
(
row
)
;
break
;
case
'
handleResetPwd
'
:
this
.
handleResetPwd
(
row
)
break
case
'
handleAuthRole
'
:
this
.
handleAuthRole
(
row
)
break
default
:
break
;
break
}
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
getUser
().
then
(
response
=>
{
this
.
postOptions
=
response
.
posts
;
this
.
roleOptions
=
response
.
roles
;
this
.
open
=
true
;
this
.
title
=
"
添加用户
"
;
this
.
form
.
password
=
this
.
initPassword
;
})
;
this
.
reset
()
getUser
().
then
(
(
response
)
=>
{
this
.
postOptions
=
response
.
posts
this
.
roleOptions
=
response
.
roles
this
.
open
=
true
this
.
title
=
'
添加用户
'
this
.
form
.
password
=
this
.
initPassword
})
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
const
userId
=
row
.
userId
||
this
.
ids
;
getUser
(
userId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
postOptions
=
response
.
posts
;
this
.
roleOptions
=
response
.
roles
;
this
.
$set
(
this
.
form
,
"
postIds
"
,
response
.
postIds
);
this
.
$set
(
this
.
form
,
"
roleIds
"
,
response
.
roleIds
);
this
.
open
=
true
;
this
.
title
=
"
修改用户
"
;
this
.
form
.
password
=
""
;
})
;
this
.
reset
()
const
userId
=
row
.
userId
||
this
.
ids
getUser
(
userId
).
then
(
(
response
)
=>
{
this
.
form
=
response
.
data
this
.
postOptions
=
response
.
posts
this
.
roleOptions
=
response
.
roles
this
.
$set
(
this
.
form
,
'
postIds
'
,
response
.
postIds
)
this
.
$set
(
this
.
form
,
'
roleIds
'
,
response
.
roleIds
)
this
.
open
=
true
this
.
title
=
'
修改用户
'
this
.
form
.
password
=
''
})
},
/** 重置密码按钮操作 */
handleResetPwd
(
row
)
{
this
.
$prompt
(
'
请输入"
'
+
row
.
userName
+
'
"的新密码
'
,
"
提示
"
,
{
confirmButtonText
:
"
确定
"
,
cancelButtonText
:
"
取消
"
,
this
.
$prompt
(
'
请输入"
'
+
row
.
userName
+
'
"的新密码
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
closeOnClickModal
:
false
,
inputPattern
:
/^.
{5,20}
$/
,
inputErrorMessage
:
"
用户密码长度必须介于 5 和 20 之间
"
,
inputErrorMessage
:
'
用户密码长度必须介于 5 和 20 之间
'
,
inputValidator
:
(
value
)
=>
{
if
(
/<|>|"|'|
\|
|
\\
/
.
test
(
value
))
{
return
"
不能包含非法字符:< >
\"
'
\\\
|
"
return
'
不能包含非法字符:< > "
\'
\\
|
'
}
},
}).
then
(({
value
})
=>
{
resetUserPwd
(
row
.
userId
,
value
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功,新密码是:
"
+
value
);
});
}).
catch
(()
=>
{});
})
.
then
(({
value
})
=>
{
resetUserPwd
(
row
.
userId
,
value
).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
'
修改成功,新密码是:
'
+
value
)
})
})
.
catch
(()
=>
{})
},
/** 分配角色操作 */
handleAuthRole
:
function
(
row
)
{
const
userId
=
row
.
userId
;
this
.
$router
.
push
(
"
/system/user-auth/role/
"
+
userId
);
handleAuthRole
:
function
(
row
)
{
const
userId
=
row
.
userId
this
.
$router
.
push
(
'
/system/user-auth/role/
'
+
userId
)
},
/** 提交按钮 */
submitForm
:
function
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
submitForm
:
function
()
{
this
.
$refs
[
'
form
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
this
.
form
.
userId
!=
undefined
)
{
updateUser
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
);
this
.
open
=
false
;
this
.
getList
()
;
})
;
updateUser
(
this
.
form
).
then
(
(
response
)
=>
{
this
.
$modal
.
msgSuccess
(
'
修改成功
'
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addUser
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
);
this
.
open
=
false
;
this
.
getList
()
;
})
;
addUser
(
this
.
form
).
then
(
(
response
)
=>
{
this
.
$modal
.
msgSuccess
(
'
新增成功
'
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
userIds
=
row
.
userId
||
this
.
ids
;
this
.
$modal
.
confirm
(
'
是否确认删除用户编号为"
'
+
userIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delUser
(
userIds
);
}).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
}).
catch
(()
=>
{});
const
userIds
=
row
.
userId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除用户编号为"
'
+
userIds
+
'
"的数据项?
'
)
.
then
(
function
()
{
return
delUser
(
userIds
)
})
.
then
(()
=>
{
this
.
getList
()
this
.
$modal
.
msgSuccess
(
'
删除成功
'
)
})
.
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
this
.
download
(
'
system/user/export
'
,
{
...
this
.
queryParams
},
`user_
${
new
Date
().
getTime
()}
.xlsx`
)
this
.
download
(
'
system/user/export
'
,
{
...
this
.
queryParams
,
},
`user_
${
new
Date
().
getTime
()}
.xlsx`
)
},
/** 导入按钮操作 */
handleImport
()
{
this
.
upload
.
title
=
"
用户导入
"
;
this
.
upload
.
open
=
true
;
this
.
upload
.
title
=
'
用户导入
'
this
.
upload
.
open
=
true
},
/** 下载模板操作 */
importTemplate
()
{
this
.
download
(
'
system/user/importTemplate
'
,
{
},
`user_template_
${
new
Date
().
getTime
()}
.xlsx`
)
this
.
download
(
'
system/user/importTemplate
'
,
{},
`user_template_
${
new
Date
().
getTime
()}
.xlsx`
)
},
// 文件上传中处理
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
this
.
upload
.
isUploading
=
true
;
this
.
upload
.
isUploading
=
true
},
// 文件上传成功处理
handleFileSuccess
(
response
,
file
,
fileList
)
{
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
();
this
.
$alert
(
"
<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>
"
+
response
.
msg
+
"
</div>
"
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
});
this
.
getList
();
this
.
upload
.
open
=
false
this
.
upload
.
isUploading
=
false
this
.
$refs
.
upload
.
clearFiles
()
this
.
$alert
(
"
<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>
"
+
response
.
msg
+
'
</div>
'
,
'
导入结果
'
,
{
dangerouslyUseHTMLString
:
true
,
})
this
.
getList
()
},
// 提交上传文件
submitFileForm
()
{
this
.
$refs
.
upload
.
submit
()
;
}
}
}
;
this
.
$refs
.
upload
.
submit
()
}
,
}
,
}
</
script
>
\ No newline at end of file
Write
Preview
Markdown
is supported
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