parent
50787383b2
commit
d8ea4f0cf4
10 changed files with 1886 additions and 1367 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,550 @@ |
||||
<template> |
||||
<div class="page"> |
||||
<div class="tool"> |
||||
<div class="search-wrap"> |
||||
<el-input placeholder="请输入页脚名称" v-model.trim="keyword" clearable></el-input> |
||||
</div> |
||||
<div class="actions"> |
||||
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:新增'" type="primary" @click="add">新增</el-button> |
||||
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'" @click="batchDel">删除</el-button> |
||||
</div> |
||||
</div> |
||||
|
||||
<el-table v-loading="listLoading" ref="table" :data="list" default-expand-all class="table" header-align="center" |
||||
@selection-change="handleSelectionChange" row-key="id"> |
||||
<el-table-column type="selection" width="50" align="center" :reserve-selection="true"></el-table-column> |
||||
<el-table-column prop="schemeName" show-overflow-tooltip label="页脚名称" min-width="140"></el-table-column> |
||||
<el-table-column prop="scopeOfApplication" label="应用范围" min-width="100"></el-table-column> |
||||
<el-table-column prop="numberOfContentModules" label="模块名称" min-width="100"></el-table-column> |
||||
<el-table-column prop="createTime" label="创建时间" min-width="100"></el-table-column> |
||||
<el-table-column prop="updateTime" label="最近编辑" min-width="100"></el-table-column> |
||||
<el-table-column prop="editorSName" label="编辑人" min-width="100"></el-table-column> |
||||
<el-table-column label="状态" min-width="100"> |
||||
<template slot-scope="scope">{{ scope.row.isDisable ? '禁用' : '启用' }}</template> |
||||
</el-table-column> |
||||
<el-table-column label="操作" width="180"> |
||||
<template slot-scope="scope"> |
||||
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:编辑'" type="text" |
||||
@click="edit(scope.row)">编辑</el-button> |
||||
<el-button v-auth="'/site/list:' + siteName + ':内容管理:栏目管理:删除'" type="text" |
||||
@click="del(scope.row)">删除</el-button> |
||||
<el-switch class="m-l-10" v-model="scope.row.isDisable" :active-value="0" :inactive-value="1" |
||||
@change="switchOff(scope.row)"> |
||||
</el-switch> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<div class="pagination"> |
||||
<el-pagination background @current-change="handleCurrentChange" :current-page="page" |
||||
layout="total, prev, pager, next" :total="total"></el-pagination> |
||||
</div> |
||||
|
||||
<el-dialog title="模块管理" :visible.sync="moduleVisible" width="1000px" :close-on-click-modal="false"> |
||||
<el-form ref="form" :model="form" :rules="rules" label-suffix=":"> |
||||
<div class="flex"> |
||||
<el-form-item prop="schemeName" label="页脚名称" label-width="100px"> |
||||
<el-input style="width: 200px" placeholder="请输入页脚名称" v-model="form.schemeName" clearable |
||||
maxlength="10"></el-input> |
||||
</el-form-item> |
||||
<el-form-item prop="style" label="页脚样式" label-width="110px"> |
||||
<el-select v-model="form.floatingBarStyle" clearable> |
||||
<el-option v-for="item in styles" :key="item.id" :label="item.name" :value="item.id"> |
||||
</el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
</div> |
||||
<!-- <div class="contact"> |
||||
<div class="inner"> |
||||
<div class="title c-wrap"> |
||||
<h6>{{ modules[10].form.title }}</h6> |
||||
<p class="text">{{ modules[10].form.des }}</p> |
||||
<div class="cover" @click="toSet(10)">点击更改标题与描述</div> |
||||
</div> |
||||
<div class="region"> |
||||
<img class="dot" src="https://huorantech.com/images/about/dot.png" alt=""> |
||||
<p class="name">深圳</p> |
||||
</div> |
||||
<div class="info"> |
||||
<img class="logo" :src="modules[11].form.pic" alt=""> |
||||
<div class="texts c-wrap"> |
||||
<div class="item"> |
||||
<div class="line"> |
||||
<img class="icon" src="https://huorantech.com/images/about/site.png" alt=""> |
||||
{{ modules[11].form.siteName }} |
||||
</div> |
||||
<div class="line"> |
||||
<img class="icon" src="https://huorantech.com/images/about/address.png" alt=""> |
||||
{{ modules[11].form.address }} |
||||
</div> |
||||
</div> |
||||
<div class="item"> |
||||
<div class="line"> |
||||
<img class="icon" src="https://huorantech.com/images/about/phone.png" alt=""> |
||||
{{ modules[11].form.phone }} |
||||
</div> |
||||
<div class="line"> |
||||
<img class="icon" src="https://huorantech.com/images/about/mail.png" alt=""> |
||||
{{ modules[11].form.mail }} |
||||
</div> |
||||
</div> |
||||
<div class="cover" style="width: 800px" @click="toSet(11)">点击更改信息</div> |
||||
<div class="qrcode c-wrap"> |
||||
<img width="103" :src="modules[12].form.pic" alt=""> |
||||
<p class="text">{{ modules[12].form.title }}</p> |
||||
<div class="cover" @click="toSet(12)">点击更改信息</div> |
||||
</div> |
||||
<div class="qrcode c-wrap m-l-30"> |
||||
<img width="103" :src="modules[13].form.pic" alt=""> |
||||
<p class="text">{{ modules[13].form.title }}</p> |
||||
<div class="cover" @click="toSet(13)">点击更改信息</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> --> |
||||
<el-form-item label="应用范围"> |
||||
<div class="flex"> |
||||
<el-radio-group class="m-t-10" v-model="range"> |
||||
<el-radio :label="0">网站全局</el-radio> |
||||
<el-radio :label="1">选择栏目</el-radio> |
||||
</el-radio-group> |
||||
|
||||
<el-cascader v-if="range" class="m-l-30" v-model="selectColumn" :options="columns" :props="columnProps" |
||||
clearable></el-cascader> |
||||
</div> |
||||
</el-form-item> |
||||
</el-form> |
||||
<span slot="footer" class="dialog-footer"> |
||||
<el-button @click="moduleVisible = false">取消</el-button> |
||||
<el-button type="primary" @click="moduleSubmit">确定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
|
||||
<Module ref="module" :data.sync="curData" :visible.sync="diaVisible" @moduleSubmit="moduleSubmit" /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import Setting from '@/setting' |
||||
import Util from '@/libs/util' |
||||
import Axios from 'axios' |
||||
import Editor from '@tinymce/tinymce-vue' |
||||
import editorConfig from '@/components/editor' |
||||
import _ from 'lodash' |
||||
export default { |
||||
data () { |
||||
return { |
||||
editorConfig, |
||||
siteId: this.$store.state.content.site.id, |
||||
siteName: this.$store.state.content.site.siteName, |
||||
keyword: '', |
||||
searchTimer: null, |
||||
list: [], |
||||
page: 1, |
||||
pageSize: 10, |
||||
total: 0, |
||||
multipleSelection: [], |
||||
listLoading: false, |
||||
range: 0, |
||||
selectColumn: [], |
||||
styles: [], |
||||
columns: [], |
||||
columnProps: { |
||||
multiple: true, |
||||
value: 'id', |
||||
label: 'columnName' |
||||
}, |
||||
originForm: {}, |
||||
form: { |
||||
editorId: this.$store.state.user.userId, |
||||
schemeName: '', |
||||
floatingBarStyle: '1', |
||||
siteId: this.$store.state.content.site.id, |
||||
floatingColumnSchemeModules: [ |
||||
{ |
||||
pictureAddress: 'https://huorantech.com/images/index/wechat.png', |
||||
schemeTitle: '微信扫码添加职站售前咨询', |
||||
isDisable: 0, |
||||
schemeContentJson: ` |
||||
<div style="width: 168px;text-align: center;line-height: normal;"> |
||||
<p style="margin: 5px 0 15px;font-size: 12px;color: #333;">提供付费咨询及解决方案</p> |
||||
<img width="150" src="https://huorantech.com/images/index/customer.png" alt=""> |
||||
</div> |
||||
` |
||||
}, |
||||
{ |
||||
pictureAddress: 'https://huorantech.com/images/index/tel.png', |
||||
schemeTitle: '', |
||||
isDisable: 0, |
||||
schemeContentJson: ` |
||||
<div style="width: 190px;line-height: normal;"> |
||||
<div style="display: flex;margin-bottom: 20px;"> |
||||
<div> |
||||
<img src="https://huorantech.com/images/index/tel-2.png" alt=""> |
||||
</div> |
||||
<div style="margin-left: 15px;"> |
||||
<p style="font-size: 14px;cursor: pointer;">售前咨询</p> |
||||
<p style="margin: 5px 0;font-size: 12px;color: #006eff;">金老师</p> |
||||
<p style="font-size: 12px;color: #006eff;">15218726836</p> |
||||
</div> |
||||
</div> |
||||
<div style="display: flex;"> |
||||
<div> |
||||
<img src="https://huorantech.com/images/index/sug.png" alt=""> |
||||
</div> |
||||
<div style="margin-left: 15px;"> |
||||
<a style="font-size: 14px;color: #333;text-decoration: none;cursor: pointer;" target="_blank" href="https://www.wjx.cn/vm/wB0RcMm.aspx">咨询,建议与反馈</a> |
||||
<p style="margin-top: 5px;font-size: 12px;color: #686868;">您的每一条建议声音,我们都认真对待</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
` |
||||
} |
||||
], |
||||
floatingColumnSchemeScopeOfApplications: [], |
||||
}, |
||||
originModules: { |
||||
pictureAddress: '', |
||||
schemeContentJson: '', |
||||
schemeTitle: '', |
||||
isDisable: 0, |
||||
}, |
||||
rules: { |
||||
schemeName: [ |
||||
{ required: true, message: '请输入悬浮栏目名称', trigger: 'blur' } |
||||
], |
||||
}, |
||||
moduleVisible: false, |
||||
modules: [], |
||||
|
||||
curRow: {}, |
||||
curModule: 0, |
||||
contentVisible: false, |
||||
contentRules: { |
||||
pictureAddress: [ |
||||
{ required: true, message: '请上传图片', trigger: 'change' } |
||||
], |
||||
// schemeTitle: [ |
||||
// { required: true, message: '请输入标题', trigger: 'blur' } |
||||
// ], |
||||
schemeContentJson: [ |
||||
{ required: true, message: '请输入内容', trigger: 'blur' } |
||||
], |
||||
}, |
||||
|
||||
cropperModel: false, |
||||
isUpload: false, |
||||
fixedNumber: [1, 1], |
||||
file: {}, // 当前被选择的图片文件 |
||||
}; |
||||
}, |
||||
components: { |
||||
Editor, |
||||
}, |
||||
watch: { |
||||
keyword: function (val) { |
||||
clearTimeout(this.searchTimer) |
||||
this.searchTimer = setTimeout(() => { |
||||
this.initData() |
||||
}, 500) |
||||
} |
||||
}, |
||||
mounted () { |
||||
this.$store.commit('user/setCrumbs', [ |
||||
{ |
||||
name: '站点管理', |
||||
route: '/site' |
||||
}, |
||||
{ |
||||
name: '内容管理' |
||||
}, |
||||
{ |
||||
name: '页脚设置' |
||||
} |
||||
]) |
||||
// this.originForm = _.cloneDeep(this.form) |
||||
// this.getData() |
||||
// this.getColumn() |
||||
}, |
||||
methods: { |
||||
getData () { |
||||
this.$post(this.api.listFloating, { |
||||
siteId: this.siteId, |
||||
search: this.keyword, |
||||
pageNum: this.page, |
||||
pageSize: this.pageSize, |
||||
}).then(({ data }) => { |
||||
this.list = data.records |
||||
this.total = +data.total |
||||
this.listLoading = false |
||||
}).catch(err => { |
||||
this.listLoading = false |
||||
}) |
||||
}, |
||||
// 重置列表 |
||||
initData () { |
||||
this.$refs.table.clearSelection() |
||||
this.page = 1 |
||||
this.getData() |
||||
}, |
||||
// 栏目树形 |
||||
async getColumn () { |
||||
const { data } = await this.$post(this.api.listWithTree, { |
||||
siteId: this.siteId, |
||||
columnName: '', |
||||
templateId: '', |
||||
typeId: '', |
||||
isSort: 1 |
||||
}) |
||||
this.columns = data |
||||
}, |
||||
add () { |
||||
this.range = 0 |
||||
this.selectColumn = [] |
||||
this.form = _.cloneDeep(this.originForm) |
||||
this.moduleVisible = true |
||||
}, |
||||
// 添加行 |
||||
addRow () { |
||||
this.curRow = _.cloneDeep(this.originModules) |
||||
this.curModule = -1 |
||||
this.contentVisible = true |
||||
}, |
||||
// 编辑内容 |
||||
editRow (row, i = 0) { |
||||
this.curRow = _.cloneDeep(row) |
||||
this.curModule = i |
||||
this.contentVisible = true |
||||
}, |
||||
// 删除行(通用) |
||||
delRow (i) { |
||||
this.$confirm('确定要删除吗?', '提示', { |
||||
type: 'warning' |
||||
}).then(() => { |
||||
this.form.floatingColumnSchemeModules.splice(i, 1) |
||||
}).catch(() => { }) |
||||
}, |
||||
async edit (row) { |
||||
this.moduleVisible = true |
||||
const { data } = await this.$post(`${this.api.findFloating}?id=${row.floatingBarSchemeId}`) |
||||
const range = data.floatingColumnSchemeScopeOfApplications |
||||
// 应用范围数组里有一个对象的applicationScopeId为0,则是网站全局 |
||||
this.range = row.isGlobal ? 0 : 1 |
||||
if (!row.isGlobal) { |
||||
const column = [] |
||||
// 选择栏目 |
||||
range.map(e => { |
||||
column.push(e.applicationScopeId.split(',').map(n => +n)) |
||||
}) |
||||
this.selectColumn = column |
||||
console.log("🚀 ~ edit ~ this.selectColumn:", this.selectColumn) |
||||
} |
||||
|
||||
this.form = data |
||||
}, |
||||
// 模块设置提交 |
||||
moduleSubmit () { |
||||
this.$refs.form.validate(async (valid) => { |
||||
if (valid) { |
||||
if (this.submiting) return false |
||||
const form = JSON.parse(JSON.stringify(this.form)) |
||||
if (!form.floatingColumnSchemeModules.length) return Util.warningMsg('请添加内容模块') |
||||
const column = this.selectColumn |
||||
if (this.range && !column.length) return Util.warningMsg('请选择栏目') |
||||
|
||||
this.submiting = true |
||||
if (this.range) { |
||||
const scope = [] |
||||
// debugger |
||||
column.map(e => { |
||||
scope.push({ |
||||
applicationScopeId: typeof e === 'number' ? e : e.join(',') |
||||
}) |
||||
}) |
||||
form.floatingColumnSchemeScopeOfApplications = scope |
||||
} else { |
||||
form.floatingColumnSchemeScopeOfApplications = [{ |
||||
applicationScopeId: 0 |
||||
}] |
||||
} |
||||
if (!form.floatingBarSchemeId) form.founderId = form.editorId |
||||
// debugger |
||||
try { |
||||
await this.$post(this.api.saveFloating, form) |
||||
Util.successMsg('新增成功!') |
||||
this.moduleVisible = false |
||||
this.getData() |
||||
setTimeout(() => { |
||||
this.submiting = false |
||||
}, 2000) |
||||
} catch (e) { |
||||
this.submiting = false |
||||
} |
||||
} |
||||
}) |
||||
}, |
||||
// 内容设置提交 |
||||
contentSubmit () { |
||||
this.$refs.contentForm.validate(async (valid) => { |
||||
if (valid) { |
||||
this.contentVisible = false |
||||
const row = this.curRow |
||||
if (this.curModule === -1) { |
||||
this.form.floatingColumnSchemeModules.push(_.cloneDeep(row)) |
||||
} else { |
||||
const list = this.form.floatingColumnSchemeModules[this.curModule] |
||||
for (const i in row) { |
||||
this.$set(list, i, row[i]) |
||||
} |
||||
} |
||||
} |
||||
}) |
||||
}, |
||||
|
||||
del (row) { |
||||
this.$confirm('确定要删除吗?', "提示", { |
||||
type: "warning" |
||||
}).then(() => { |
||||
this.$post(`${this.api.batchDeletionFloating}?id=${row.floatingBarSchemeId}`).then(res => { |
||||
Util.successMsg("删除成功") |
||||
this.getData() |
||||
}).catch(res => { }) |
||||
}).catch(() => { }) |
||||
}, |
||||
// 禁用启用 |
||||
async switchOff (row) { |
||||
try { |
||||
const { code, msg } = await this.$post(`${this.api.checkEnableOrDisable}?id=${row.floatingBarSchemeId}&isDisable=${row.isDisable}`) |
||||
// debugger |
||||
if (code === 300) { |
||||
// 悬浮栏管理里的禁用启用返回300要弹询问框选择是否继续 |
||||
this.$confirm(msg, '提示', { |
||||
type: "warning" |
||||
}).then(async () => { |
||||
await this.$post(`${this.api.enableOrDisableScheme}?id=${row.floatingBarSchemeId}&isDisable=${row.isDisable}`) |
||||
}).catch(() => { |
||||
row.isDisable = row.isDisable ? 0 : 1 |
||||
}) |
||||
} else { |
||||
await this.$post(`${this.api.enableOrDisableScheme}?id=${row.floatingBarSchemeId}&isDisable=${row.isDisable}`) |
||||
} |
||||
} catch (e) { } |
||||
}, |
||||
// 批量删除 |
||||
batchDel () { |
||||
const list = this.multipleSelection |
||||
if (list.length) { |
||||
this.$confirm('确定要删除吗?', '提示', { |
||||
type: 'warning' |
||||
}).then(() => { |
||||
const ids = list.map(e => { |
||||
return 'id=' + e.floatingBarSchemeId |
||||
}) |
||||
this.$post(`${this.api.batchDeletionFloating}?${ids.join('&')}`).then(res => { |
||||
this.$refs.table.clearSelection() |
||||
Util.successMsg("删除成功") |
||||
this.getData() |
||||
}).catch(res => { }) |
||||
}).catch(() => { }) |
||||
} else { |
||||
Util.errorMsg('请先选择数据 !') |
||||
} |
||||
}, |
||||
handleSelectionChange (val) { |
||||
this.multipleSelection = val |
||||
}, |
||||
handleCurrentChange (val) { |
||||
this.page = val |
||||
this.getData() |
||||
}, |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.plus { |
||||
margin-top: 10px; |
||||
font-size: 20px; |
||||
text-align: center; |
||||
color: $main-color; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.del { |
||||
margin-left: 8px; |
||||
font-size: 18px; |
||||
color: #333; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
$upload-width: 220px; |
||||
$upload-height: 102px; |
||||
$upload-lg-height: 102px; |
||||
|
||||
/deep/ .avatar-uploader { |
||||
.el-upload { |
||||
position: relative; |
||||
width: $upload-width; |
||||
height: $upload-height; |
||||
border: 1px solid #dcdee0; |
||||
border-radius: 2px; |
||||
cursor: pointer; |
||||
overflow: hidden; |
||||
|
||||
.uploader-default { |
||||
display: flex; |
||||
height: $upload-height; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: center; |
||||
text-align: center; |
||||
background: #fafafa; |
||||
|
||||
p { |
||||
margin-top: 10px; |
||||
font-size: 14px; |
||||
color: #333; |
||||
line-height: 20px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
&.avatar-uploader-lg { |
||||
.el-upload { |
||||
width: 100%; |
||||
max-width: 820px; |
||||
height: $upload-lg-height; |
||||
|
||||
.uploader-default { |
||||
height: $upload-lg-height; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.avatar { |
||||
display: block; |
||||
width: $upload-width; |
||||
height: $upload-height; |
||||
} |
||||
|
||||
.avatar-lg { |
||||
display: block; |
||||
width: 100%; |
||||
height: $upload-lg-height; |
||||
} |
||||
|
||||
.el-upload__tip { |
||||
margin-top: 0; |
||||
|
||||
p { |
||||
font-size: 12px; |
||||
color: #333; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.pic { |
||||
max-width: 100px; |
||||
margin: 10px 0; |
||||
} |
||||
</style> |
@ -0,0 +1,16 @@ |
||||
import BasicLayout from '@/layouts/home' |
||||
|
||||
const meta = {} |
||||
|
||||
export default { |
||||
path: '/footer', |
||||
meta, |
||||
component: BasicLayout, |
||||
children: [ |
||||
{ |
||||
path: `/footer`, |
||||
component: () => import('@/pages/footer'), |
||||
meta: { title: '页脚设置' } |
||||
}, |
||||
] |
||||
} |
Loading…
Reference in new issue