Commit 9d684267 authored by zhuxl's avatar zhuxl

提交

parent 80db6e5d
# 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/).
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
})
}
import request from '@/assets/js/utils/request'
// 管理后台分页查询意见反馈信息接口
export function queryFeedbackListPage(data) {
return request({
url: '/bidprocurement/common-app/app/feedback/queryFeedbackListPage',
method: 'post',
data
})
}
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
})
}
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
})
}
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
})
}
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
})
}
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
})
}
/*
* 项目管理
* */
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]
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
<!--
@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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment