Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
procurementcloud_vue_dzjypt
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
朱幸伦
procurementcloud_vue_dzjypt
Commits
9d684267
Commit
9d684267
authored
Oct 10, 2023
by
zhuxl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交
parent
80db6e5d
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
3268 additions
and
2 deletions
+3268
-2
README.md
README.md
+23
-2
src/api/appManagement/appVersion.js
src/api/appManagement/appVersion.js
+26
-0
src/api/appManagement/feedback.js
src/api/appManagement/feedback.js
+11
-0
src/api/appManagement/helpCenter.js
src/api/appManagement/helpCenter.js
+28
-0
src/api/appManagement/menu.js
src/api/appManagement/menu.js
+28
-0
src/api/appManagement/msg.js
src/api/appManagement/msg.js
+26
-0
src/api/appManagement/platform.js
src/api/appManagement/platform.js
+27
-0
src/api/appManagement/role.js
src/api/appManagement/role.js
+42
-0
src/router/appManagement/index.js
src/router/appManagement/index.js
+62
-0
src/views/appManagement/appVersion/appVersion-list.vue
src/views/appManagement/appVersion/appVersion-list.vue
+240
-0
src/views/appManagement/appVersion/appVersionAdd-dialog.vue
src/views/appManagement/appVersion/appVersionAdd-dialog.vue
+227
-0
src/views/appManagement/feedback/feedback-list.vue
src/views/appManagement/feedback/feedback-list.vue
+198
-0
src/views/appManagement/feedback/feedbackDetail-dialog.vue
src/views/appManagement/feedback/feedbackDetail-dialog.vue
+123
-0
src/views/appManagement/helpcenter/helpcenter-list.vue
src/views/appManagement/helpcenter/helpcenter-list.vue
+183
-0
src/views/appManagement/helpcenter/helpcenterAdd-dialog.vue
src/views/appManagement/helpcenter/helpcenterAdd-dialog.vue
+141
-0
src/views/appManagement/menu/menu-list.vue
src/views/appManagement/menu/menu-list.vue
+282
-0
src/views/appManagement/menu/menuAdd-dialog.vue
src/views/appManagement/menu/menuAdd-dialog.vue
+293
-0
src/views/appManagement/msg/msg-list.vue
src/views/appManagement/msg/msg-list.vue
+275
-0
src/views/appManagement/msg/msgAdd-dialog.vue
src/views/appManagement/msg/msgAdd-dialog.vue
+213
-0
src/views/appManagement/platform/platformAdd-dialog.vue
src/views/appManagement/platform/platformAdd-dialog.vue
+151
-0
src/views/appManagement/platform/platformConfig-list.vue
src/views/appManagement/platform/platformConfig-list.vue
+190
-0
src/views/appManagement/role/role-list.vue
src/views/appManagement/role/role-list.vue
+177
-0
src/views/appManagement/role/roleAdd-dialog.vue
src/views/appManagement/role/roleAdd-dialog.vue
+157
-0
src/views/appManagement/role/setAccess-dialog.vue
src/views/appManagement/role/setAccess-dialog.vue
+145
-0
No files found.
README.md
View file @
9d684267
#
procurementcloud_vue_dzjypt
#
hello-world
电子交易平台app管理后台
\ No newline at end of file
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
### Lints and fixes files
```
yarn lint
```
### Customize configuration
See
[
Configuration Reference
](
https://cli.vuejs.org/config/
)
.
src/api/appManagement/appVersion.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 管理后台保存版本信息接口
export
function
saveAppVersion
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/version/saveAppVersion
'
,
method
:
'
post
'
,
data
})
}
// 删除app版本信息
export
function
delAppVersion
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/version/delAppVersion
'
,
method
:
'
post
'
,
data
})
}
// 管理后台查询版本信息列表接口
export
function
queryAppVersionPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/version/queryAppVersionPage
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/feedback.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 管理后台分页查询意见反馈信息接口
export
function
queryFeedbackListPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/feedback/queryFeedbackListPage
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/helpCenter.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 管理后台保存帮助中心接口格式
export
function
saveAppHelpCenter
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/helpcenter/saveAppHelpCenter
'
,
method
:
'
post
'
,
data
})
}
// 管理后台查询帮助中心列表接口
export
function
queryAppHelpCenterPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/helpcenter/queryAppHelpCenterPage
'
,
method
:
'
post
'
,
data
})
}
// 管理后台删除帮助中心接口
export
function
delAppHelpCenter
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/helpcenter/delAppHelpCenter
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/menu.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 查询app首页菜单列表
export
function
queryFunctionListPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/function/queryFunctionListPage
'
,
method
:
'
post
'
,
data
})
}
// 保存app首页菜单列表
export
function
saveAppFunction
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/function/saveAppFunction
'
,
method
:
'
post
'
,
data
})
}
// 保存app首页菜单列表
export
function
delAppFunction
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/function/delAppFunction
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/msg.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 管理后台发布消息接口格式
export
function
publishMsg
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/msg/publishMsg
'
,
method
:
'
post
'
,
data
})
}
// 管理后台查询所有消息列表接口
export
function
queryMsgListPageByManage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/msg/queryMsgListPageByManage
'
,
method
:
'
post
'
,
data
})
}
// 删除管理后台查询所有消息列表接口
export
function
delMsg
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/msg/delMsg
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/platform.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 管理后台分页查询平台配置信息接口
export
function
queryAppPlatformInfoPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/platform/queryAppPlatformInfoPage
'
,
method
:
'
post
'
,
data
})
}
// 管理后台保存平台配置信息接口
export
function
saveAppPlatformConfig
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/platform/saveAppPlatformConfig
'
,
method
:
'
post
'
,
data
})
}
// 删除平台配置信息
export
function
delAppPlatformConfig
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/platform/delAppPlatformConfig
'
,
method
:
'
post
'
,
data
})
}
src/api/appManagement/role.js
0 → 100644
View file @
9d684267
import
request
from
'
@/assets/js/utils/request
'
// 查询角色列表
export
function
queryRoleListPage
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/role/queryRoleListPage
'
,
method
:
'
post
'
,
data
})
}
// 保存角色
export
function
saveAppRole
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/role/saveAppRole
'
,
method
:
'
post
'
,
data
})
}
// 删除角色
export
function
delAppRole
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/role/delAppRole
'
,
method
:
'
post
'
,
data
})
}
// 管理后台查询指定角色菜单接口格式
export
function
queryRoleFunction
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/role/queryRoleFunction
'
,
method
:
'
post
'
,
data
})
}
// 管理后台查询指定角色菜单接口格式
export
function
setRoleFunction
(
data
)
{
return
request
({
url
:
'
/bidprocurement/common-app/app/role/setRoleFunction
'
,
method
:
'
post
'
,
data
})
}
src/router/appManagement/index.js
0 → 100644
View file @
9d684267
/*
* 项目管理
* */
import
layout
from
'
@/components/layout/layout
'
export
const
appManagement
=
[{
path
:
'
/appManagement
'
,
component
:
layout
,
children
:
[
{
path
:
'
menu-list
'
,
meta
:
{
path
:
'
menu-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/menu/menu-list
'
)
},
{
path
:
'
role-list
'
,
meta
:
{
path
:
'
role-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/role/role-list
'
)
},
{
path
:
'
platformConfig-list
'
,
meta
:
{
path
:
'
platformConfig-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/platform/platformConfig-list
'
)
},
{
path
:
'
feedback-list
'
,
meta
:
{
path
:
'
feedback-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/feedback/feedback-list
'
)
},
{
path
:
'
msg-list
'
,
meta
:
{
path
:
'
msg-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/msg/msg-list
'
)
},
{
path
:
'
appVersion-list
'
,
meta
:
{
path
:
'
appVersion-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/appVersion/appVersion-list
'
)
},
{
path
:
'
helpcenter-list
'
,
meta
:
{
path
:
'
helpcenter-list
'
},
component
:
()
=>
import
(
'
@/views/appManagement/helpcenter/helpcenter-list
'
)
}
]
}]
export
default
[...
appManagement
]
src/views/appManagement/appVersion/appVersion-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
版本信息列表
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"系统类型"
prop=
"systemType"
>
<el-input
v-model.trim=
"searchForm.systemType"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
<el-select
v-model=
"searchForm.systemType"
placeholder=
"请选择"
style=
"width:228px"
>
<el-option
v-for=
"(item,index) in app_system_typeList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"包名"
prop=
"packageName"
>
<el-input
v-model.trim=
"searchForm.packageName"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
@
click=
"addMenu"
>
新增
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"versionNum"
label=
"版本序号"
min-width=
"230"
/>
<el-table-column
header-align=
"center"
prop=
"versionCode"
label=
"版本编号"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"versionDesc"
label=
"版本说明"
min-width=
"230"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"packageName"
label=
"包名"
min-width=
"180"
align=
"center"
/>
<!--
<el-table-column
header-align=
"center"
prop=
"userName"
label=
"用户名称"
min-width=
"180"
align=
"center"
/>
-->
<el-table-column
header-align=
"center"
prop=
"systemType"
label=
"系统类型"
min-width=
"90"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"isMust"
label=
"是否强制"
min-width=
"90"
align=
"center"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
isMust
===
'
01
'
?
'
是
'
:
'
否
'
}}
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
label=
"安装包"
min-width=
"90"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<downloadFile
:data=
"scope.row.fileData"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<
template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click=
"toEdit(scope.row)"
>
[编辑]
</el-link>
<el-link
type=
"primary"
@
click=
"toDel(scope.row,scope.$index)"
>
[删除]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<!-- <platform-add-dialog v-if="dialogData.flag" :dialog-data="dialogData" @change="callBack" />-->
<appVersionAddDialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
@
change=
"callBack"
/>
</div>
</template>
<
script
>
import
downloadFile
from
'
@comp/common/updownload/downloadFile
'
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
{
delAppVersion
,
queryAppVersionPage
}
from
'
../../../api/appManagement/appVersion
'
import
appVersionAddDialog
from
'
./appVersionAdd-dialog.vue
'
export
default
{
components
:
{
downloadFile
,
appVersionAddDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
systemType
:
''
,
// 系统类型
packageName
:
''
// 包名
},
tableData
:
[],
dialogData
:
{
flag
:
false
,
row
:
null
},
app_system_typeList
:
[]
}
},
created
()
{
this
.
initGroup
()
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
app_system_type
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryAppVersionPage
(
params
).
then
(
response
=>
{
this
.
tableData
=
(
response
.
data
.
records
||
[]).
map
(
item
=>
{
item
.
fileData
=
{
fileId
:
item
.
id
,
fileType
:
'
app_package_file
'
}
return
item
})
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toEdit
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
delAppVersion
({
id
:
row
.
id
}).
then
(
res
=>
{
this
.
tableData
.
splice
(
index
,
1
)
}).
catch
(()
=>
{
})
}).
catch
(()
=>
{
})
},
// 详情
handleDetail
(
row
)
{
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/appVersion/appVersionAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2022-12-28 15:21
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"app版本"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:rules=
"rules"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"版本序号"
prop=
"versionNum"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.versionNum"
maxlength=
"11"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"版本编号"
prop=
"versionCode"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.versionCode"
maxlength=
"10"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"包名"
prop=
"packageName"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.packageName"
maxlength=
"50"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"是否强制"
prop=
"isMust"
/>
</td>
<td
colspan=
"3"
>
<el-radio-group
v-model=
"formData.isMust"
>
<el-radio
label=
"00"
>
否
</el-radio>
<el-radio
label=
"01"
>
是
</el-radio>
</el-radio-group>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"系统类型"
prop=
"systemType"
/>
</td>
<td
colspan=
"3"
>
<el-radio-group
v-model=
"formData.systemType"
>
<template
v-for=
"item in app_system_typeList"
>
<el-radio
:key=
"item.typecode"
:label=
"item.typecode"
>
{{
item
.
typename
}}
</el-radio>
</
template
>
</el-radio-group>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"app安装包"
prop=
"packageUrl"
/>
</td>
<td
colspan=
"3"
>
<upload
ref=
"upload"
:data=
"fileData"
:auto-delete=
"true"
:auto-upload=
"true"
title=
""
file-ref=
"fileRef"
class=
"fl"
accept=
".apk"
:on-success=
"changeFile"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"版本说明"
prop=
"versionDesc"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.versionDesc"
:autosize=
"{ minRows: 2, maxRows: 4 }"
type=
"textarea"
placeholder=
"请输入内容"
maxlength=
"200"
show-word-limit
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
:loading=
"confirmLoading"
type=
"primary"
@
click=
"sure()"
>
确认
</el-button>
<el-button
@
click=
"dialogData.flag=false"
>
取消
</el-button>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
{
saveAppVersion
}
from
'
../../../api/appManagement/appVersion
'
import
{
randomData
}
from
'
../../../assets/js/utils
'
import
upload
from
'
@comp/common/updownload/upload
'
import
{
downLoadFileUrl2
}
from
'
@/api/common/uploadCenter
'
export
default
{
components
:
{
upload
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
formData
:
{
id
:
''
,
versionNum
:
''
,
// 版本序号
versionCode
:
''
,
// 版本编号
versionDesc
:
''
,
// 版本说明
packageName
:
''
,
// 包名
isMust
:
'
00
'
,
systemType
:
'
00
'
,
// 系统类型
packageUrl
:
''
// app下载地址
},
rules
:
{
versionNum
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
versionCode
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
packageName
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}]
},
confirmLoading
:
false
,
app_system_typeList
:
[],
fileData
:
{
fileType
:
'
app_package_file
'
,
bizId
:
''
}
}
},
created
()
{
if
(
!
this
.
dialogData
.
row
)
{
this
.
formData
.
id
=
randomData
()
}
else
{
this
.
formData
=
this
.
dialogData
.
row
}
this
.
fileData
.
bizId
=
this
.
formData
.
id
},
methods
:
{
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
app_system_type
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 附件上传
changeFile
(
file
,
fileList
)
{
const
f
=
fileList
[
0
]
console
.
log
(
'
ffffff
'
,
f
)
this
.
formData
.
packageUrl
=
downLoadFileUrl2
+
'
?fileId=
'
+
file
.
data
.
fileId
+
'
&fileType=
'
+
this
.
fileData
.
fileType
if
(
f
?.
fileData
?.
fileId
)
{
/* this.formData.fileId = f?.fileData?.fileId*/
}
},
sure
()
{
// 校验输入内容
this
.
$refs
[
'
form
'
].
validate
((
valid
,
field
)
=>
{
if
(
valid
)
{
// 校验通过
this
.
confirmLoading
=
true
saveAppVersion
(
this
.
formData
).
then
(
res
=>
{
this
.
confirmLoading
=
false
this
.
$message
({
type
:
'
success
'
,
message
:
'
操作成功
'
})
this
.
$emit
(
'
change
'
,
true
)
this
.
dialogData
.
flag
=
false
}).
catch
(()
=>
{
this
.
confirmLoading
=
false
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/feedback/feedback-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
反馈信息
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"用户名称"
prop=
"userName"
>
<el-input
v-model.trim=
"searchForm.userName"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
<el-form-item
label=
"真实姓名"
prop=
"realName"
>
<el-input
v-model.trim=
"searchForm.realName"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
</
template
>
<!-- <template v-slot:menuLeft>
<el-button type="primary" @click="addMenu">
新增
</el-button>
</template>-->
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"feedback"
label=
"意见反馈"
min-width=
"230"
/>
<el-table-column
header-align=
"center"
prop=
"phone"
label=
"联系电话"
min-width=
"180"
align=
"center"
/>
<!--
<el-table-column
header-align=
"center"
prop=
"createUser"
label=
"创建人"
min-width=
"180"
align=
"center"
/>
-->
<el-table-column
header-align=
"center"
prop=
"userName"
label=
"用户名称"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"realName"
label=
"真实姓名"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"createTime"
label=
"创建时间"
min-width=
"180"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click=
"toDetail(scope.row)"
>
[查看详情]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<!-- <platform-add-dialog v-if="dialogData.flag" :dialog-data="dialogData" @change="callBack" />-->
<feedback-detail-dialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
/>
</div>
</template>
<
script
>
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
{
queryFeedbackListPage
}
from
'
../../../api/appManagement/feedback
'
import
feedbackDetailDialog
from
'
./feedbackDetail-dialog
'
export
default
{
components
:
{
feedbackDetailDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
userName
:
''
,
// 用户名称
realName
:
''
// 真实姓名
},
tableData
:
[],
dialogData
:
{
flag
:
false
,
row
:
null
}
}
},
created
()
{
this
.
initGroup
()
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryFeedbackListPage
(
params
).
then
(
response
=>
{
this
.
tableData
=
response
.
data
.
records
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toDetail
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
/* delAppPlatformConfig({ id: row.id }).then(res => {
this.tableData.splice(index, 1)
}).catch(() => {
})*/
}).
catch
(()
=>
{
})
},
// 详情
handleDetail
(
row
)
{
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/feedback/feedbackDetail-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2023-08-01 14:34
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"反馈信息"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"意见反馈"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
feedback
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"联系电话"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
phone
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"创建人"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
createUser
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"创建时间"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
createTime
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"用户名称"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
userName
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"真实姓名"
/>
</td>
<td
colspan=
"3"
>
{{
formData
.
realName
}}
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"附件"
/>
</td>
<td
colspan=
"3"
>
<downloadFile
:data=
"fileData"
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
@
click=
"dialogData.flag=false"
>
关闭
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
downloadFile
from
'
@comp/common/updownload/downloadFile
'
// 获取附件信息 下载组件
export
default
{
name
:
'
FeedbackDetailDialog
'
,
components
:
{
downloadFile
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
fileData
:
{
fileType
:
'
app_feedback_file
'
,
bizId
:
''
}
}
},
created
()
{
this
.
formData
=
this
.
dialogData
.
row
this
.
fileData
.
bizId
=
this
.
dialogData
.
row
.
id
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/helpcenter/helpcenter-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
帮助中心管理列表
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"标题"
prop=
"title"
>
<el-input
v-model.trim=
"searchForm.title"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
@
click=
"addMenu"
>
新增
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"title"
label=
"标题"
min-width=
"230"
/>
<el-table-column
header-align=
"center"
prop=
"content"
label=
"内容"
min-width=
"270"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"detailUrl"
label=
"详情地址"
min-width=
"230"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"createTime"
label=
"创建时间"
min-width=
"180"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click=
"toEdit(scope.row)"
>
[编辑]
</el-link>
<el-link
type=
"primary"
@
click=
"toDel(scope.row,scope.$index)"
>
[删除]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<!-- <platform-add-dialog v-if="dialogData.flag" :dialog-data="dialogData" @change="callBack" />-->
<helpcenter-add-dialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
@
change=
"callBack"
/>
</div>
</template>
<
script
>
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
{
delAppHelpCenter
,
queryAppHelpCenterPage
}
from
'
../../../api/appManagement/helpCenter
'
import
helpcenterAddDialog
from
'
./helpcenterAdd-dialog
'
export
default
{
components
:
{
helpcenterAddDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
title
:
''
// 标题
},
tableData
:
[],
dialogData
:
{
flag
:
false
,
row
:
null
}
}
},
created
()
{
this
.
initGroup
()
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryAppHelpCenterPage
(
params
).
then
(
response
=>
{
this
.
tableData
=
response
.
data
.
records
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toEdit
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
delAppHelpCenter
({
id
:
row
.
id
}).
then
(
res
=>
{
this
.
tableData
.
splice
(
index
,
1
)
}).
catch
(()
=>
{
})
}).
catch
(()
=>
{
})
},
// 详情
handleDetail
(
row
)
{
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/helpcenter/helpcenterAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2022-12-28 15:21
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"帮助中心"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:rules=
"rules"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"标题"
prop=
"title"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.title"
maxlength=
"200"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"详情地址"
prop=
"detailUrl"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.detailUrl"
maxlength=
"200"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"内容"
prop=
"content"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.content"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
maxlength="10000"
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
:loading=
"confirmLoading"
type=
"primary"
@
click=
"sure()"
>
确认
</el-button>
<el-button
@
click=
"dialogData.flag=false"
>
取消
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
saveAppHelpCenter
}
from
'
../../../api/appManagement/helpCenter
'
export
default
{
components
:
{
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
formData
:
{
id
:
''
,
title
:
''
,
// 标题
detailUrl
:
''
,
// 详情地址
content
:
''
// 内容
},
rules
:
{
title
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
content
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}]
},
confirmLoading
:
false
}
},
created
()
{
if
(
this
.
dialogData
.
row
)
{
this
.
formData
=
this
.
dialogData
.
row
}
},
methods
:
{
// 附件上传
changeFile
(
file
,
fileList
)
{
const
f
=
fileList
[
0
]
console
.
log
(
'
ffffff
'
,
f
)
if
(
f
?.
fileData
?.
fileId
)
{
/* this.formData.fileId = f?.fileData?.fileId*/
}
},
sure
()
{
// 校验输入内容
this
.
$refs
[
'
form
'
].
validate
((
valid
,
field
)
=>
{
if
(
valid
)
{
// 校验通过
this
.
confirmLoading
=
true
saveAppHelpCenter
(
this
.
formData
).
then
(
res
=>
{
this
.
confirmLoading
=
false
this
.
$message
({
type
:
'
success
'
,
message
:
'
操作成功
'
})
this
.
$emit
(
'
change
'
,
true
)
this
.
dialogData
.
flag
=
false
}).
catch
(()
=>
{
this
.
confirmLoading
=
false
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/menu/menu-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
app菜单列表
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"应用名称"
prop=
"appName"
>
<el-input
v-model.trim=
"searchForm.appName"
placeholder=
"应用名称"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
<el-form-item
label=
"应用状态"
prop=
"appStatus"
>
<el-select
v-model=
"searchForm.appStatus"
placeholder=
"请选择"
style=
"width:228px"
>
<el-option
v-for=
"(item,index) in appStatusList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"应用类型"
prop=
"appType"
>
<el-select
v-model=
"searchForm.appType"
placeholder=
"请选择"
style=
"width:228px"
>
<el-option
v-for=
"(item,index) in appTypeList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"应用类别"
prop=
"appType"
>
<el-select
v-model=
"searchForm.appCategory"
placeholder=
"请选择"
style=
"width:228px"
>
<el-option
v-for=
"(item,index) in appCategoryList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
@
click=
"addMenu"
>
新增
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"appName"
label=
"app名称"
min-width=
"230"
/>
<el-table-column
header-align=
"center"
prop=
"appStatus"
label=
"应用状态"
min-width=
"100"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
filterDictText
(
appStatusList
,
scope
.
row
.
appStatus
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"appType"
label=
"应用类型"
min-width=
"100"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
filterDictText
(
appTypeList
,
scope
.
row
.
appType
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"appCategory"
label=
"应用类别"
min-width=
"100"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
filterDictText
(
appCategoryList
,
scope
.
row
.
appCategory
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"appVersion"
label=
"应用版本号"
min-width=
"100"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"appUrl"
label=
"应用路径"
min-width=
"230"
/>
<el-table-column
prop=
"icoFavicon"
align=
"center"
width=
"80"
label=
"应用图标"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.appIcon"
alt
class=
"img_pic"
>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"isNew"
label=
"是否上新"
min-width=
"90"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
isNew
===
'
01
'
?
'
是
'
:
'
否
'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"sort"
label=
"排序"
min-width=
"90"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<
template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click=
"toEdit(scope.row)"
>
[编辑]
</el-link>
<el-link
type=
"primary"
@
click=
"toDel(scope.row,scope.$index)"
>
[删除]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<menu-add-dialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
@
change=
"callBack"
/>
</div>
</template>
<
script
>
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
{
delAppFunction
,
queryFunctionListPage
}
from
'
../../../api/appManagement/menu
'
import
menuAddDialog
from
'
./menuAdd-dialog.vue
'
export
default
{
components
:
{
menuAddDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
appName
:
''
,
// 应用名称
appStatus
:
''
,
// 应用状态
appType
:
''
,
// 应用类型
appCategory
:
''
// app类别 00:H5;01:小程序;02:原生;
},
tableData
:
[],
appTypeList
:
[],
appCategoryList
:
[],
appStatusList
:
[
{
typename
:
'
下架
'
,
typecode
:
'
00
'
},
{
typename
:
'
上架
'
,
typecode
:
'
01
'
}
],
dialogData
:
{
flag
:
false
,
row
:
null
}
}
},
created
()
{
this
.
initGroup
()
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryFunctionListPage
(
params
).
then
(
response
=>
{
this
.
tableData
=
response
.
data
.
records
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toEdit
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
delAppFunction
({
id
:
row
.
id
}).
then
(
res
=>
{
this
.
tableData
.
splice
(
index
,
1
)
}).
catch
(()
=>
{
})
}).
catch
(()
=>
{
})
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
},
// 详情
handleDetail
(
row
)
{
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/menu/menuAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2022-12-28 15:21
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"菜单"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:rules=
"rules"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"应用名称"
prop=
"appName"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.appName"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用状态"
prop=
"appStatus"
/>
</td>
<td
colspan=
"3"
>
<el-select
v-model=
"formData.appStatus"
placeholder=
"请选择"
style=
"width:100%"
>
<el-option
v-for=
"(item,index) in appStatusList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用类型"
prop=
"appType"
/>
</td>
<td
colspan=
"3"
>
<el-select
v-model=
"formData.appType"
placeholder=
"请选择"
style=
"width:100%"
>
<el-option
v-for=
"(item,index) in appTypeList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用类别"
prop=
"appCategory"
/>
</td>
<td
colspan=
"3"
>
<el-select
v-model=
"formData.appCategory"
placeholder=
"请选择"
style=
"width:100%"
>
<el-option
v-for=
"(item,index) in appCategoryList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用版本号"
prop=
"appVersion"
/>
</td>
<td
colspan=
"3"
>
<el-input-number
v-model=
"formData.appVersion"
:precision=
"2"
:step=
"0.1"
:controls=
"false"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用图标"
prop=
"appIcon"
/>
</td>
<td
colspan=
"3"
>
<upload
ref=
"upload"
:data=
"fileData"
:auto-delete=
"true"
:auto-upload=
"true"
title=
""
file-ref=
"fileRef"
class=
"fl"
accept=
"image/jpg,image/jpeg,image/png"
:success=
"changeFile"
:limit=
"1"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用路径"
prop=
"appUrl"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.appUrl"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"上新状态"
prop=
"isNew"
/>
</td>
<td
colspan=
"3"
>
<el-radio-group
v-model=
"formData.isNew"
>
<el-radio
label=
"01"
>
是
</el-radio>
<el-radio
label=
"00"
>
否
</el-radio>
</el-radio-group>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"应用说明"
prop=
"appDescripion"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.appDescripion"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"排序"
prop=
"sort"
/>
</td>
<td
colspan=
"3"
>
<el-input-number
v-model=
"formData.sort"
:min=
"0"
:max=
"99"
:controls=
"false"
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
:loading=
"confirmLoading"
type=
"primary"
@
click=
"sure()"
>
确认
</el-button>
<el-button
@
click=
"dialogData.flag=false"
>
取消
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
downloadFile
from
'
@comp/common/updownload/downloadFile
'
import
upload
from
'
@comp/common/updownload/upload
'
import
{
randomData
}
from
'
../../../assets/js/utils
'
import
{
saveAppFunction
}
from
'
../../../api/appManagement/menu
'
// 附件上传组件
import
{
getFileDetail
}
from
'
@/api/common/uploadCenter
'
import
{
readImageRoot2
}
from
'
../../../api/common/uploadCenter
'
export
default
{
components
:
{
downloadFile
,
upload
,
getFileDetail
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
formData
:
{
id
:
''
,
appName
:
''
,
// 应用名称
appStatus
:
''
,
// 应用状态
appType
:
''
,
// 应用类型
appCategory
:
''
,
// app类别 00:H5;01:小程序;02:原生;
appVersion
:
''
,
// 版本号
appIcon
:
''
,
// 应用图标
appUrl
:
''
,
// app路径
isNew
:
''
,
// 上新状态
appDescripion
:
''
,
// 应用说明
sort
:
0
,
// 排序
fileFlag
:
null
},
rules
:
{
appName
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
appStatus
:
[{
required
:
true
,
message
:
'
请选择
'
,
trigger
:
'
blur
'
}],
appType
:
[{
required
:
true
,
message
:
'
请选择
'
,
trigger
:
'
blur
'
}],
appCategory
:
[{
required
:
true
,
message
:
'
请选择
'
,
trigger
:
'
blur
'
}],
appVersion
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
appIcon
:
[{
required
:
true
,
message
:
'
请上传
'
,
trigger
:
'
blur
'
}],
appUrl
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
blur
'
}],
isNew
:
[{
required
:
true
,
message
:
'
请选择
'
,
trigger
:
'
blur
'
}],
appDescripion
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
blur
'
}]
},
appTypeList
:
[],
appCategoryList
:
[],
appStatusList
:
[
{
typename
:
'
下架
'
,
typecode
:
'
00
'
},
{
typename
:
'
上架
'
,
typecode
:
'
01
'
}
],
fileData
:
{
fileType
:
'
app_function_icon
'
,
bizId
:
''
},
readImageUrl
:
readImageRoot2
,
// 预览图片
confirmLoading
:
false
}
},
created
()
{
this
.
formData
.
fileFlag
=
null
if
(
!
this
.
dialogData
.
row
)
{
this
.
formData
.
id
=
randomData
()
}
else
{
this
.
formData
=
this
.
dialogData
.
row
}
this
.
fileData
.
bizId
=
this
.
formData
.
id
this
.
initGroup
()
},
methods
:
{
// 获取字典方法
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 附件上传
changeFile
(
file
,
fileList
)
{
const
f
=
fileList
[
0
]
console
.
log
(
'
ffffff
'
,
f
)
console
.
log
(
'
ffffff
'
,
file
)
if
(
f
?.
fileData
?.
fileId
)
{
/* this.formData.fileId = f?.fileData?.fileId*/
}
getFileDetail
(
this
.
fileData
).
then
(
response
=>
{
this
.
formData
.
appIcon
=
this
.
readImageUrl
+
response
.
data
[
0
].
path
})
},
sure
()
{
// 校验输入内容
this
.
$refs
[
'
form
'
].
validate
((
valid
,
field
)
=>
{
if
(
valid
)
{
// 校验通过
this
.
confirmLoading
=
true
saveAppFunction
(
this
.
formData
).
then
(
res
=>
{
this
.
confirmLoading
=
false
this
.
$message
({
type
:
'
success
'
,
message
:
'
操作成功
'
})
this
.
$emit
(
'
change
'
,
true
)
this
.
dialogData
.
flag
=
false
}).
catch
(()
=>
{
this
.
confirmLoading
=
false
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/msg/msg-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
推送消息列表
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"消息标题"
prop=
"msgTitle"
>
<el-input
v-model.trim=
"searchForm.msgTitle"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
<el-form-item
label=
"消息类型"
prop=
"msgType"
>
<el-select
v-model=
"searchForm.msgType"
placeholder=
"请选择"
style=
"width:228px"
>
<el-option
v-for=
"(item,index) in msgTypeList"
:key=
"index"
:label=
"item.typename"
:value=
"item.typecode"
/>
</el-select>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
@
click=
"addMenu"
>
新增
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"msgTitle"
label=
"消息标题"
min-width=
"200"
/>
<el-table-column
header-align=
"center"
prop=
"msgContent"
label=
"消息内容"
min-width=
"230"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"msgType"
label=
"消息类型"
min-width=
"80"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
filterDictText
(
msgTypeList
,
scope
.
row
.
msgType
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"msgUserName"
label=
"发消息的人"
min-width=
"180"
align=
"center"
/>
<!-- <el-table-column
header-align="center"
prop="msgUserId"
label="发消息人id"
min-width="180"
align="center"
/>
<el-table-column
header-align="center"
prop="msgDepartId"
label="消息发起单位id"
min-width="180"
align="center"
/>-->
<el-table-column
header-align=
"center"
prop=
"msgDepartName"
label=
"消息发起单位名称"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"msgUrl"
label=
"消息源地址"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"receiveUser"
label=
"接收人用户名"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"readStatus"
label=
"阅读状态"
min-width=
"180"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.msgType === '02'"
>
{{
scope
.
row
.
readStatus
===
'
01
'
?
'
已读
'
:
'
未读
'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
header-align=
"center"
prop=
"readTime"
label=
"阅读时间"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"createTime"
label=
"创建时间"
min-width=
"180"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<
template
slot-scope=
"scope"
>
<!--
<el-link
type=
"primary"
@
click=
"toEdit(scope.row)"
>
[编辑]
</el-link>
-->
<el-link
type=
"primary"
@
click=
"toDel(scope.row,scope.$index)"
>
[删除]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<!-- <platform-add-dialog v-if="dialogData.flag" :dialog-data="dialogData" @change="callBack" />-->
<msg-add-dialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
@
change=
"callBack"
/>
</div>
</template>
<
script
>
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
{
delMsg
,
queryMsgListPageByManage
}
from
'
../../../api/appManagement/msg
'
import
msgAddDialog
from
'
./msgAdd-dialog
'
export
default
{
components
:
{
msgAddDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
msgTitle
:
''
,
// 消息标题
msgType
:
''
// 消息类型01公开消息02指定消息
},
tableData
:
[],
msgTypeList
:
[{
typename
:
'
公开消息
'
,
typecode
:
'
01
'
},
{
typename
:
'
指定消息
'
,
typecode
:
'
02
'
}],
dialogData
:
{
flag
:
false
,
row
:
null
}
}
},
created
()
{
/* this.initGroup()*/
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryMsgListPageByManage
(
params
).
then
(
response
=>
{
this
.
tableData
=
response
.
data
.
records
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toEdit
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
/* delAppPlatformConfig({ id: row.id }).then(res => {
this.tableData.splice(index, 1)
}).catch(() => {
})*/
delMsg
({
id
:
row
.
id
}).
then
(
res
=>
{
this
.
tableData
.
splice
(
index
,
1
)
}).
catch
(()
=>
{
})
}).
catch
(()
=>
{
})
},
// 详情
handleDetail
(
row
)
{
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/msg/msgAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2022-12-28 15:21
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"平台信息"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:rules=
"rules"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"消息标题"
prop=
"msgTitle"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgTitle"
maxlength=
"200"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"消息类型"
prop=
"msgType"
/>
</td>
<td
colspan=
"3"
>
<el-radio-group
v-model=
"formData.msgType"
>
<el-radio
label=
"01"
>
公开消息
</el-radio>
<el-radio
label=
"02"
>
指定消息
</el-radio>
</el-radio-group>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"消息源地址"
prop=
"msgUrl"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgUrl"
maxlength=
"200"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"消息发起人"
prop=
"msgUserName"
/>
</td>
<td>
<el-input
v-model=
"formData.msgUserName"
maxlength=
"50"
show-word-limit
/>
</td>
<!--
<td
colspan=
"3"
>
<el-input
v-model=
"formData.platformDesc"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
/>
</td>
-->
</tr>
<!--
<tr>
<td>
<el-form-item
label=
"消息发送人id"
prop=
"msgUserId"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgUserId"
maxlength=
"32"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"消息发起单位id"
prop=
"msgDepartId"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgDepartId"
maxlength=
"32"
show-word-limit
/>
</td>
</tr>
-->
<tr>
<td>
<el-form-item
label=
"消息发起单位名称"
prop=
"msgDepartName"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgDepartName"
maxlength=
"100"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"接收人用户名"
:prop=
"formData.msgType==='01'?'':'receiveUser'"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.receiveUser"
maxlength=
"32"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"消息内容"
prop=
"msgContent"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.msgContent"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
maxlength="10000"
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
:loading=
"confirmLoading"
type=
"primary"
@
click=
"sure()"
>
确认
</el-button>
<el-button
@
click=
"dialogData.flag=false"
>
取消
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
publishMsg
}
from
'
../../../api/appManagement/msg
'
export
default
{
components
:
{
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
formData
:
{
id
:
''
,
msgTitle
:
''
,
// 消息标题
msgContent
:
''
,
// 消息内容
msgType
:
'
01
'
,
// 消息类型
msgUrl
:
''
,
// 消息源地址
msgUserName
:
''
,
// 消息发起人
msgUserId
:
''
,
// 消息发送人id
msgDepartId
:
''
,
// 消息发起单位id
msgDepartName
:
''
,
// 消息发起单位名称
receiveUser
:
''
// 接收人用户名
},
rules
:
{
msgTitle
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
msgContent
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
msgType
:
[{
required
:
true
,
message
:
'
请选择
'
,
trigger
:
'
blur
'
}],
receiveUser
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
blur
'
}]
},
confirmLoading
:
false
}
},
created
()
{
if
(
this
.
dialogData
.
row
)
{
this
.
formData
=
this
.
dialogData
.
row
}
},
methods
:
{
// 附件上传
changeFile
(
file
,
fileList
)
{
const
f
=
fileList
[
0
]
console
.
log
(
'
ffffff
'
,
f
)
if
(
f
?.
fileData
?.
fileId
)
{
/* this.formData.fileId = f?.fileData?.fileId*/
}
},
sure
()
{
// 校验输入内容
this
.
$refs
[
'
form
'
].
validate
((
valid
,
field
)
=>
{
if
(
valid
)
{
// 校验通过
this
.
confirmLoading
=
true
publishMsg
(
this
.
formData
).
then
(
res
=>
{
this
.
confirmLoading
=
false
this
.
$message
({
type
:
'
success
'
,
message
:
'
操作成功
'
})
this
.
$emit
(
'
change
'
,
true
)
this
.
dialogData
.
flag
=
false
}).
catch
(()
=>
{
this
.
confirmLoading
=
false
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/platform/platformAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description:
@author: zxl
@routerPath:
@date: 2022-12-28 15:21
-->
<
template
>
<div>
<el-dialog
v-dialogDrag
:visible.sync=
"dialogData.flag"
:close-on-click-modal=
"false"
title=
"平台信息"
width=
"40vw"
custom-class=
"el-dialog__body-p0"
top=
"10vh"
>
<div
class=
"p16"
>
<el-form
ref=
"form"
:model=
"formData"
:rules=
"rules"
:inline-message=
"true"
>
<table
class=
"from_table"
>
<tr>
<td>
<el-form-item
label=
"应用名称"
prop=
"platformName"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.platformName"
placeholder=
"最多允许输入20个字符"
maxlength=
"20"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"客服电话"
prop=
"serviceTel"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.serviceTel"
placeholder=
"最多允许输入20个字符"
maxlength=
"20"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"客服qq"
prop=
"serviceQq"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.serviceQq"
placeholder=
"最多允许输入20个字符"
maxlength=
"20"
show-word-limit
/>
</td>
</tr>
<tr>
<td>
<el-form-item
label=
"平台说明"
prop=
"platformDesc"
/>
</td>
<td
colspan=
"3"
>
<el-input
v-model=
"formData.platformDesc"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
/>
</td>
</tr>
</table>
</el-form>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
:loading=
"confirmLoading"
type=
"primary"
@
click=
"sure()"
>
确认
</el-button>
<el-button
@
click=
"dialogData.flag=false"
>
取消
</el-button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
saveAppPlatformConfig
}
from
'
../../../api/appManagement/platform
'
import
{
checkLinktel
}
from
'
../../../assets/js/validate
'
export
default
{
components
:
{
},
props
:
{
dialogData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
formData
:
{
id
:
''
,
platformName
:
''
,
// 平台名称
platformDesc
:
''
,
// 平台说明
serviceTel
:
''
,
// 客服电话
serviceQq
:
''
// 客服qq
},
rules
:
{
platformName
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
platformDesc
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
serviceQq
:
[{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}],
serviceTel
:
[{
required
:
true
,
validator
:
checkLinktel
,
trigger
:
'
blur
'
}]
// 电话
},
confirmLoading
:
false
}
},
created
()
{
if
(
this
.
dialogData
.
row
)
{
this
.
formData
=
this
.
dialogData
.
row
}
},
methods
:
{
// 附件上传
changeFile
(
file
,
fileList
)
{
const
f
=
fileList
[
0
]
console
.
log
(
'
ffffff
'
,
f
)
if
(
f
?.
fileData
?.
fileId
)
{
/* this.formData.fileId = f?.fileData?.fileId*/
}
},
sure
()
{
// 校验输入内容
this
.
$refs
[
'
form
'
].
validate
((
valid
,
field
)
=>
{
if
(
valid
)
{
// 校验通过
this
.
confirmLoading
=
true
saveAppPlatformConfig
(
this
.
formData
).
then
(
res
=>
{
this
.
confirmLoading
=
false
this
.
$message
({
type
:
'
success
'
,
message
:
'
操作成功
'
})
this
.
$emit
(
'
change
'
,
true
)
this
.
dialogData
.
flag
=
false
}).
catch
(()
=>
{
this
.
confirmLoading
=
false
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/platform/platformConfig-list.vue
0 → 100644
View file @
9d684267
<!--
@description: app菜单列表
@Modifier: zxl
@routerPath:
@date: 2020-2-20-14:56
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form.sync=
"searchForm"
search-label-width=
"100px"
:menu=
"true"
@
on-load=
"loadData"
>
<template
v-slot:header
>
配置管理
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"平台名称"
prop=
"platformName"
>
<el-input
v-model.trim=
"searchForm.platformName"
placeholder=
"请输入"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
@
click=
"addMenu"
>
新增
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"loading"
:data=
"tableData"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
width=
"60"
/>
<el-table-column
header-align=
"center"
prop=
"platformName"
label=
"平台名称"
min-width=
"230"
/>
<el-table-column
header-align=
"center"
prop=
"platformDesc"
label=
"平台说明"
min-width=
"230"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"serviceTel"
label=
"客服电话"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"serviceQq"
label=
"客服qq"
min-width=
"180"
align=
"center"
/>
<el-table-column
header-align=
"center"
prop=
"createTime"
label=
"创建时间"
min-width=
"180"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"125"
>
<template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click=
"toEdit(scope.row)"
>
[编辑]
</el-link>
<el-link
type=
"primary"
@
click=
"toDel(scope.row,scope.$index)"
>
[删除]
</el-link>
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<platform-add-dialog
v-if=
"dialogData.flag"
:dialog-data=
"dialogData"
@
change=
"callBack"
/>
</div>
</template>
<
script
>
/* 混合开发方法-参数字段*/
import
{
filterDictText
}
from
'
../../../assets/js/utils
'
import
platformAddDialog
from
'
./platformAdd-dialog.vue
'
import
{
delAppPlatformConfig
,
queryAppPlatformInfoPage
}
from
'
../../../api/appManagement/platform
'
export
default
{
components
:
{
platformAddDialog
},
data
()
{
return
{
loading
:
true
,
searchForm
:
{
platformName
:
''
// 平台名称
},
tableData
:
[],
dialogData
:
{
flag
:
false
,
row
:
null
}
}
},
created
()
{
this
.
initGroup
()
},
methods
:
{
filterDictText
,
// 字典值替换文本通用方法
// 字典请求
initGroup
()
{
this
.
$store
.
dispatch
(
'
getGroupType
'
,
[
'
appType
'
,
'
appCategory
'
]).
then
((
data
)
=>
{
// 遍历key存储相应的数据
for
(
const
key
in
data
.
bidTypeData
)
{
/* 是否有数据*/
if
(
data
.
bidTypeData
[
key
])
{
this
[
key
]
=
data
.
bidTypeData
[
key
]
}
}
})
},
// 获取数据
loadData
(
params
,
callback
)
{
queryAppPlatformInfoPage
(
params
).
then
(
response
=>
{
this
.
tableData
=
response
.
data
.
records
this
.
loading
=
false
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
addMenu
()
{
this
.
dialogData
.
row
=
null
this
.
dialogData
.
flag
=
true
},
toEdit
(
row
)
{
this
.
dialogData
.
row
=
row
this
.
dialogData
.
flag
=
true
},
toDel
(
row
,
index
)
{
this
.
$confirm
(
'
确认是否删除该条数据?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
delAppPlatformConfig
({
id
:
row
.
id
}).
then
(
res
=>
{
this
.
tableData
.
splice
(
index
,
1
)
}).
catch
(()
=>
{
})
}).
catch
(()
=>
{
})
},
// 详情
handleDetail
(
row
)
{
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.img_pic {
max-height: 50px;
}
</
style
>
src/views/appManagement/role/role-list.vue
0 → 100644
View file @
9d684267
<!--
@description: 系统设置->角色管理
@author: change by sunxinman
@routerPath: /systemManagement/roleManagement
@date: 2019/11/15-23:33
-->
<
template
>
<div>
<table-crud
ref=
"tableCrud"
:search-form=
"listQuery"
:menu=
"true"
search-label-width=
"80px"
@
on-load=
"getList"
>
<template
v-slot:header
>
角色管理
</
template
>
<
template
v-slot:search=
"search"
>
<el-form-item
label=
"角色名称"
>
<el-input
v-model=
"listQuery.roleName"
placeholder=
"请输入角色名称"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
<el-form-item
label=
"角色编码"
>
<el-input
v-model=
"listQuery.roleCode"
placeholder=
"请输入角色编码"
@
keyup.enter.native=
"search.onSearch"
/>
</el-form-item>
</
template
>
<
template
v-slot:menuLeft
>
<el-button
type=
"primary"
plain
@
click=
"handleCreate"
>
新增角色
</el-button>
</
template
>
<
template
v-slot:GXTable
>
<el-table
ref=
"smallTable"
v-loading=
"listLoading"
:data=
"list"
>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
/>
<el-table-column
label=
"角色名称"
prop=
"roleName"
/>
<el-table-column
label=
"角色编码"
prop=
"roleCode"
/>
<el-table-column
align=
"center"
label=
"平台角色编码"
prop=
"platformRoleCode"
/>
<el-table-column
label=
"操作"
align=
"center"
fixed=
"right"
width=
"400"
>
<template
slot-scope=
"scope"
>
<el-link
type=
"primary"
@
click.stop=
"handleUpdate(scope.row)"
>
[编辑]
</el-link>
<el-link
type=
"primary"
@
click.stop=
"toSetMenu(scope.row.id)"
>
[菜单权限]
</el-link>
<el-link
type=
"primary"
@
click.stop=
"handleDelete(scope.row)"
>
[删除]
</el-link>
<!--
<el-link
type=
"primary"
@
click.stop=
"toSetButton(scope.row.id)"
>
[按钮权限]
</el-link>
-->
<!--
<el-link
type=
"primary"
@
click.stop=
"handleUser(scope.row.id)"
>
[用户]
</el-link>
-->
</
template
>
</el-table-column>
</el-table>
</template>
</table-crud>
<!--新增/编辑角色弹框-->
<roleAddDialog
ref=
"roleAdd"
@
getList=
"callBack"
/>
<!--设置权限弹框-->
<setAccessDialog
ref=
"setAccess"
@
getList=
"callBack"
/>
<!--用户-->
<userListByRoleDialog
ref=
"userListByRole"
/>
<!--设置按钮权限弹框-->
<btnJurisdicSelectDialog
ref=
"setButtonAccess"
/>
</div>
</template>
<
script
>
import
roleAddDialog
from
'
./roleAdd-dialog
'
import
setAccessDialog
from
'
./setAccess-dialog
'
/* 组件*/
/* import setAccessDialog from './setAccess-dialog'
import roleAddDialog from './roleAdd-dialog'
import userListByRoleDialog from './userListByRole-dialog'
import btnJurisdicSelectDialog from '../buttonMgmt/buttonJurisdictionSelect-dialog'*/
import
{
delAppRole
,
queryRoleListPage
}
from
'
../../../api/appManagement/role
'
export
default
{
name
:
'
SysRoleList
'
,
components
:
{
/* setAccessDialog, // 设置权限
roleAddDialog, // 角色编辑/新增
userListByRoleDialog, // 用户列表
btnJurisdicSelectDialog // 设置按钮权限*/
roleAddDialog
,
setAccessDialog
},
data
()
{
return
{
list
:
[],
// 角色列表数据
listLoading
:
true
,
// 表格loading
// 搜索条件
listQuery
:
{
roleName
:
''
,
roleCode
:
''
}
}
},
methods
:
{
// 页面列表展示
getList
(
params
,
callback
)
{
queryRoleListPage
(
params
).
then
(
response
=>
{
this
.
listLoading
=
false
this
.
list
=
Object
.
freeze
(
response
.
data
.
records
)
callback
(
response
.
data
.
total
)
}).
catch
(()
=>
{
this
.
listLoading
=
false
})
},
// 操作回调
callBack
()
{
this
.
$refs
.
tableCrud
.
onSearchChange
()
},
// 点击添加 新增角色
handleCreate
()
{
this
.
$refs
.
roleAdd
.
handleUpdateOrCreate
(
'
create
'
)
},
// 编辑角色
handleUpdate
(
row
)
{
this
.
$refs
.
roleAdd
.
handleUpdateOrCreate
(
'
update
'
,
row
)
},
// 点击设置菜单权限按钮
toSetMenu
(
id
)
{
this
.
$refs
.
setAccess
.
getRoleMenus
(
id
)
// 触发设置权限弹框组件getRoleMenus 方法
},
// 点击设置按钮权限按钮
toSetButton
(
id
)
{
this
.
$refs
.
setButtonAccess
.
open
(
id
)
// 触发设置按钮权限弹框组件open 方法
},
// 查看用户
handleUser
(
id
)
{
this
.
$refs
.
userListByRole
.
openUserListDialog
(
id
)
},
// 删除事件
handleDelete
(
row
)
{
this
.
$confirm
(
'
确认要删除角色吗?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确 定
'
,
cancelButtonText
:
'
取 消
'
,
confirmButtonClass
:
'
confirmBtn
'
,
cancelButtonClass
:
'
cancelBtn
'
,
type
:
'
warning
'
}).
then
(()
=>
{
delAppRole
({
id
:
row
.
id
}).
then
((
res
)
=>
{
this
.
$message
.
success
(
res
.
header
.
msg
)
this
.
callBack
()
})
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/views/appManagement/role/roleAdd-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description: 角色管理--角色添加、编辑弹框
@Modifier: haofengxian
@routerPath:
@date: 2020-9-17-10:27
-->
<
template
>
<el-dialog
:title=
"textMap[dialogStatus]"
:visible.sync=
"dialogFormVisible"
:close-on-click-modal=
"false"
width=
"650px"
>
<el-form
ref=
"dataForm"
:rules=
"rules"
:model=
"temp"
label-position=
"left"
label-width=
"120px"
style=
"width: 400px; margin-left:50px;"
>
<el-form-item
label=
"角色名称"
prop=
"roleName"
>
<el-input
v-model.trim=
"temp.roleName"
/>
</el-form-item>
<el-form-item
label=
"角色编码"
prop=
"roleCode"
>
<el-input
v-model.trim=
"temp.roleCode"
/>
</el-form-item>
<el-form-item
label=
"平台角色编码"
prop=
"platformRoleCode"
>
<el-input
v-model.trim=
"temp.platformRoleCode"
/>
</el-form-item>
<!--
<el-form-item
label=
"是否可用"
prop=
"roleType"
>
<el-radio-group
v-model=
"temp.roleType"
>
<el-radio
label=
"1"
>
是
</el-radio>
<el-radio
label=
"0"
>
否
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"temp.remarks"
:autosize=
"
{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
-->
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
v-if=
"dialogStatus == 'create'"
type=
"primary"
@
click=
"createData"
>
确 定
</el-button>
<el-button
v-else
type=
"primary"
@
click=
"updateData"
>
确 定
</el-button>
<el-button
@
click=
"dialogFormVisible = false"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
/* 接口*/
import
{
saveAppRole
}
from
'
../../../api/appManagement/role
'
/* 公告方法*/
import
{
validatorCode
}
from
'
@/assets/js/validate
'
export
default
{
name
:
'
RoleAddDialog
'
,
data
()
{
return
{
dialogFormVisible
:
false
,
// 弹框是否打开
// 传的参数
temp
:
{
id
:
''
,
roleName
:
''
,
roleCode
:
''
,
platformRoleCode
:
''
// 角色平台id
/* roleType: '1',
remarks: ''*/
},
dialogStatus
:
''
,
textMap
:
{
update
:
'
编辑角色
'
,
create
:
'
添加角色
'
},
// 校验
rules
:
{
roleCode
:
[{
required
:
true
,
validator
:
validatorCode
,
trigger
:
'
blur
'
}],
roleName
:
[{
required
:
true
,
message
:
'
角色名称必填
'
,
trigger
:
'
blur
'
}],
roleType
:
[{
required
:
true
,
message
:
'
是否可用必选
'
,
trigger
:
'
blur
'
}],
platformRoleCode
:
[{
required
:
true
,
message
:
'
请输入
'
,
trigger
:
'
blur
'
}]
}
}
},
methods
:
{
// 处理编辑或者新增
handleUpdateOrCreate
(
dialogStatus
,
row
)
{
this
.
dialogFormVisible
=
true
// 打开弹框
this
.
dialogStatus
=
dialogStatus
// 编辑时执行
if
(
row
)
{
this
.
temp
=
Object
.
assign
({},
row
)
// copy obj
}
else
{
this
.
resetTemp
()
}
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'
dataForm
'
].
clearValidate
()
})
},
resetTemp
()
{
// 清空表单
this
.
temp
=
{
id
:
''
,
roleName
:
''
,
roleCode
:
''
/* roleType: '1',
remarks: ''*/
}
},
// 添加的确定(调用接口)
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
(
valid
=>
{
if
(
valid
)
{
saveAppRole
(
this
.
temp
).
then
((
res
)
=>
{
this
.
dialogFormVisible
=
false
this
.
$message
.
success
(
res
.
header
.
msg
)
this
.
$emit
(
'
getList
'
)
})
}
})
},
// 点击编辑确定(调接口)
updateData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
(
valid
=>
{
if
(
valid
)
{
const
tempData
=
Object
.
assign
({},
this
.
temp
)
saveAppRole
(
tempData
).
then
(()
=>
{
this
.
dialogFormVisible
=
false
this
.
$message
({
message
:
'
更新成功
'
,
type
:
'
success
'
})
this
.
$emit
(
'
getList
'
)
})
}
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/appManagement/role/setAccess-dialog.vue
0 → 100644
View file @
9d684267
<!--
@description: 角色管理--设置权限弹框
@Modifier: haofengxian
@routerPath:
@date: 2020-9-17-9:52
-->
<
template
>
<el-dialog
:visible.sync=
"dialogFormMenuVisible"
:close-on-click-modal=
"false"
title=
"设置权限"
width=
"800px"
>
<el-row
v-loading=
"loading"
:gutter=
"20"
>
<el-col
:span=
"6"
>
<div
class=
"page-title"
style=
"text-align: right"
>
操作权限
</div>
</el-col>
<el-col
:span=
"18"
>
<el-scrollbar
class=
"scrollbar"
style=
"height:500px;"
>
<el-tree
ref=
"menuTree"
:data=
"menuData"
:props=
"menuTreeProps"
:default-checked-keys=
"selectMenuIds"
:check-strictly=
"true"
:expand-on-click-node=
"false"
default-expand-all
show-checkbox
check-on-click-node
node-key=
"id"
@
node-click=
"nodeClick"
@
check=
"checkChange"
/>
</el-scrollbar>
</el-col>
</el-row>
<div
slot=
"footer"
style=
"text-align:center;"
>
<el-button
type=
"primary"
@
click=
"handleChangeMenus"
>
设置权限
</el-button>
<el-button
@
click=
"dialogFormMenuVisible = false"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
{
queryRoleFunction
,
setRoleFunction
}
from
'
../../../api/appManagement/role
'
export
default
{
name
:
'
SetAccessDialog
'
,
data
()
{
return
{
loading
:
true
,
dialogFormMenuVisible
:
false
,
menuData
:
null
,
// 设置角色数据
selectCurentRoleId
:
''
,
// 角色id
selectMenuIds
:
[],
// 选择打勾
// 设置权限参数
menuTreeProps
:
{
children
:
'
children
'
,
label
:
'
appName
'
}
}
},
methods
:
{
// 获取权限设置列表
getRoleMenus
(
id
)
{
this
.
dialogFormMenuVisible
=
true
// 打开弹框
this
.
selectCurentRoleId
=
id
// 角色id
queryRoleFunction
({
id
}).
then
(
response
=>
{
this
.
menuData
=
response
.
data
.
functionList
this
.
selectMenuIds
=
response
.
data
.
roleFunctionIds
this
.
loading
=
false
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
// 设置权限确定事件
handleChangeMenus
()
{
const
checkedKeys
=
this
.
$refs
.
menuTree
.
getCheckedKeys
()
const
functionIds
=
checkedKeys
?.
join
(
'
,
'
)?.
split
(
'
,
'
)
const
data
=
{
roleId
:
this
.
selectCurentRoleId
,
functionIds
}
setRoleFunction
(
data
).
then
(
response
=>
{
this
.
dialogFormMenuVisible
=
false
this
.
$message
.
success
(
response
.
header
.
msg
)
this
.
$emit
(
'
getList
'
)
// 设置成功重新获取列表数据
// 判断修改的角色权限是否是当前登陆的角色,如果是则重新获取当前用户菜单列表
if
(
data
.
roleId
===
this
.
$store
.
getters
.
info
.
currentRol
.
id
)
{
this
.
$store
.
dispatch
(
'
setMenu
'
)
}
})
},
// 点击复选框触发
checkChange
(
data
)
{
const
node
=
this
.
$refs
.
menuTree
.
getNode
(
data
)
this
.
nodeClick
(
data
,
node
)
},
// 点击文本触发-判断用户的权限情况及选中的效果和取消的效果
nodeClick
(
data
,
node
)
{
this
.
childNodesChange
(
node
)
this
.
parentNodesChange
(
node
)
},
// 子节点改变
childNodesChange
(
node
)
{
const
len
=
node
.
childNodes
.
length
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
if
(
node
.
checked
)
{
node
.
childNodes
[
i
].
checked
=
true
}
else
{
node
.
childNodes
[
i
].
checked
=
false
}
this
.
childNodesChange
(
node
.
childNodes
[
i
])
}
},
// 父节点改变
parentNodesChange
(
node
)
{
if
(
node
.
parent
)
{
let
isChecked
=
false
node
.
parent
.
childNodes
.
map
(
item
=>
{
if
(
item
.
checked
)
{
isChecked
=
true
}
})
if
(
!
isChecked
)
{
node
.
parent
.
checked
=
isChecked
}
else
{
node
.
parent
.
checked
=
true
}
this
.
parentNodesChange
(
node
.
parent
)
}
}
}
}
</
script
>
<
style
scoped
>
</
style
>
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