|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
<template> |
|
|
|
|
<div class="app-container"> |
|
|
|
|
<div class="app-container" style="z-index:9"> |
|
|
|
|
<!--工具栏--> |
|
|
|
|
<div class="head-container"> |
|
|
|
|
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'--> |
|
|
|
@ -10,7 +10,8 @@
|
|
|
|
|
</div> |
|
|
|
|
<crudOperation :permission="permission" /> |
|
|
|
|
<!--表单组件--> |
|
|
|
|
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="1000px"> |
|
|
|
|
<el-dialog :close-on-click-modal="false" |
|
|
|
|
:before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="1000px"> |
|
|
|
|
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="250px"> |
|
|
|
|
<el-form-item label="关联商品:" prop="product"> |
|
|
|
|
<el-cascader |
|
|
|
@ -21,54 +22,42 @@
|
|
|
|
|
:options="cateList" |
|
|
|
|
filterable></el-cascader> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="评测介绍"> |
|
|
|
|
<el-input v-model="form.synopsis" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="评测介绍"> |
|
|
|
|
<el-input v-model="form.synopsis" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
|
<el-form-item label="评测视频" prop="videoInput"> |
|
|
|
|
<video-upload v-model="video" @videoInput="videoInput"></video-upload> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="评测总结"> |
|
|
|
|
<el-input v-model="form.summary" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="首页图" prop="homeImage"> |
|
|
|
|
<!-- <el-input v-model="form.homeImage" style="width: 370px;" />--> |
|
|
|
|
<MaterialList v-model="picArr" type="image" :num="1" :width="250" :height="150" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<!-- <el-form-item label="图文配置" >--> |
|
|
|
|
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" style="padding-left:250px"> |
|
|
|
|
<el-tab-pane label="产品展示栏" name="first"></el-tab-pane> |
|
|
|
|
<el-tab-pane label="实用感受栏" name="second"></el-tab-pane> |
|
|
|
|
<el-tab-pane label="易用感受栏" name="third"></el-tab-pane> |
|
|
|
|
</el-tabs> |
|
|
|
|
<el-form-item label="评测视频" prop="videoInput"> |
|
|
|
|
<video-upload v-model="video" @input="videoInput"></video-upload> |
|
|
|
|
</el-form-item> |
|
|
|
|
<!-- <el-form-item label="评测总结">--> |
|
|
|
|
<!-- <el-input v-model="form.summary" type="textarea" style="width: 370px;" />--> |
|
|
|
|
<!-- </el-form-item>--> |
|
|
|
|
<el-form-item label="产品展示文字" v-if="activeName=='first'"> |
|
|
|
|
<el-input v-model="form.displaySynopsis" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="产品展示图集" v-if="activeName=='first'"> |
|
|
|
|
<!-- <el-input v-model="form.displayImage" style="width: 370px;" />--> |
|
|
|
|
<MaterialList v-model="picArr1" type="image" :num="4" :width="150" :height="150" /> |
|
|
|
|
<el-form-item label="首页图" prop="homeImage"> |
|
|
|
|
<!-- <el-input v-model="form.homeImage" style="width: 370px;" />--> |
|
|
|
|
<MaterialList v-model="picArr" type="image" :num="1" :width="250" :height="150" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="实用感受文字" v-if="activeName=='second'"> |
|
|
|
|
<el-input v-model="form.feelSynopsis" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="实用感受图集" v-if="activeName=='second'"> |
|
|
|
|
<MaterialList v-model="picArr2" type="image" :num="4" :width="150" :height="150" /> |
|
|
|
|
<el-form-item label="图文配置" > |
|
|
|
|
|
|
|
|
|
<el-tabs v-model="editableTabsValue" type="card" editable @edit="handleTabsEdit"> |
|
|
|
|
<el-tab-pane |
|
|
|
|
:key="item.name" |
|
|
|
|
v-for="(item, index) in editableTabs" |
|
|
|
|
:label="item.title" |
|
|
|
|
:name="item.name" |
|
|
|
|
> |
|
|
|
|
<span style="display: flex;margin-bottom:10px">当前栏目标题:<el-input style="width:300px" v-model="item.content"></el-input></span> |
|
|
|
|
<ueditor-wrap v-model="item.configuration" :config="myConfig" |
|
|
|
|
@beforeInit="addCustomDialog" style="width: 90%;"></ueditor-wrap> |
|
|
|
|
</el-tab-pane> |
|
|
|
|
</el-tabs> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="易用感受文字" v-if="activeName=='third'"> |
|
|
|
|
<el-input v-model="form.accessibilitySynopsis" type="textarea" style="width: 370px;" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="易用感受图集" v-if="activeName=='third'"> |
|
|
|
|
<!-- <el-input v-model="form.accessibilityImage" style="width: 370px;" />--> |
|
|
|
|
<MaterialList v-model="picArr3" type="image" :num="4" :width="150" :height="150" /> |
|
|
|
|
<el-form-item label="是否展示"> |
|
|
|
|
<el-radio-group v-model="form.isShow" style="width: 178px"> |
|
|
|
|
<el-radio :label="1">显示</el-radio> |
|
|
|
|
<el-radio :label="0">隐藏</el-radio> |
|
|
|
|
</el-radio-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="是否展示"> |
|
|
|
|
<el-radio-group v-model="form.isShow" style="width: 178px"> |
|
|
|
|
<el-radio :label="1">显示</el-radio> |
|
|
|
|
<el-radio :label="0">隐藏</el-radio> |
|
|
|
|
</el-radio-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="排序" prop="sort"> |
|
|
|
|
<el-form-item label="排序" prop="sort"> |
|
|
|
|
<el-input v-model="form.sort" style="width: 370px;" type="number" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
|
@ -82,22 +71,14 @@
|
|
|
|
|
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler"> |
|
|
|
|
<el-table-column type="selection" width="55" /> |
|
|
|
|
<el-table-column v-if="columns.visible('id')" prop="id" label="评测ID" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('goodsId')" prop="goodsId" label="关联商品" />--> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('goodsId')" prop="goodsId" label="关联商品" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('product')" prop="product" label="关联商品" > |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<span>{{ JSON.parse(scope.row.product).storeName}}</span> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('homeImage')" prop="homeImage" label="首页图" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('synopsis')" prop="synopsis" label="评测介绍" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('videoInput')" prop="videoInput" label="评测视频" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('summary')" prop="summary" label="评测总结" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('displayImage')" prop="displayImage" label="产品展示图集" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('displaySynopsis')" prop="displaySynopsis" label="产品简介" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('feelImage')" prop="feelImage" label="实用体验感受图" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('feelSynopsis')" prop="feelSynopsis" label="实用感受" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('accessibilityImage')" prop="accessibilityImage" label="易用性体验图" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('accessibilitySynopsis')" prop="accessibilitySynopsis" label="易用感受" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('synopsis')" prop="synopsis" label="评测介绍" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('createTime')" prop="createTime" label="添加时间"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<span>{{ parseTime(scope.row.createTime) }}</span> |
|
|
|
@ -108,7 +89,7 @@
|
|
|
|
|
<span>{{ parseTime(scope.row.updateTime) }}</span> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('isDel')" prop="isDel" label="是否删除" />--> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('isDel')" prop="isDel" label="是否删除" />--> |
|
|
|
|
<el-table-column v-if="columns.visible('isShow')" label="状态" align="center" prop="isShow"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<div> |
|
|
|
@ -118,7 +99,7 @@
|
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column v-if="columns.visible('sort')" prop="sort" label="排序" /> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('tenantId')" prop="tenantId" label="tenantId" />--> |
|
|
|
|
<!-- <el-table-column v-if="columns.visible('tenantId')" prop="tenantId" label="tenantId" />--> |
|
|
|
|
<el-table-column v-permission="['admin','yxEvaluation:edit','yxEvaluation:del']" label="操作" width="150px" align="center"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<udOperation |
|
|
|
@ -147,20 +128,59 @@ import {getInfo} from "@/api/bxg/yxStoreProduct";
|
|
|
|
|
import {initData} from "@/api/bxg/data"; |
|
|
|
|
import FileUpload from "@comp/FileUpload"; |
|
|
|
|
import VideoUpload from "@comp/VideoUpload"; |
|
|
|
|
import UeditorWrap from "vue-ueditor-wrap"; |
|
|
|
|
// crud交由presenter持有 |
|
|
|
|
const defaultCrud = CRUD({ title: '评测', url: 'bxg/api/yxEvaluation', sort: 'id,desc', crudMethod: { ...crudYxEvaluation }}) |
|
|
|
|
const defaultForm = { id: null, homeImage: null, synopsis: null,videoInput:null, |
|
|
|
|
product: null, summary: null, displayImage: null,displaySynopsis:null,feelImage: null, |
|
|
|
|
feelSynopsis: null, accessibilityImage: null, accessibilitySynopsis: null,createTime:null, |
|
|
|
|
updateTime:null,isDel:null,isShow:1,sort:null,tenantId:Cookies.get('tenantId'), |
|
|
|
|
feelSynopsis: null, accessibilityImage: null, accessibilitySynopsis: null,createTime:null, |
|
|
|
|
updateTime:null,isDel:null,isShow:1,sort:0,tenantId:null, |
|
|
|
|
editableTabs:[], |
|
|
|
|
} |
|
|
|
|
export default { |
|
|
|
|
name: 'YxEvaluation', |
|
|
|
|
components: {FileUpload,VideoUpload,pagination, crudOperation, rrOperation, udOperation ,MaterialList}, |
|
|
|
|
components: {UeditorWrap,FileUpload,VideoUpload,pagination, crudOperation, rrOperation, udOperation ,MaterialList}, |
|
|
|
|
mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
activeName:'first', |
|
|
|
|
myConfig: { |
|
|
|
|
autoHeightEnabled: false, // 编辑器不自动被内容撑高 |
|
|
|
|
initialFrameHeight: 500, // 初始容器高度 |
|
|
|
|
initialFrameWidth: '100%', // 初始容器宽度 |
|
|
|
|
UEDITOR_HOME_URL: '/UEditor/', |
|
|
|
|
serverUrl: '' |
|
|
|
|
}, |
|
|
|
|
editableTabsValue: '1', |
|
|
|
|
editableTabs:[], |
|
|
|
|
editableTabs1: [{ |
|
|
|
|
title: '第一栏', |
|
|
|
|
name: '1', |
|
|
|
|
content: '眼界甄选评测员总结', |
|
|
|
|
configuration:'' |
|
|
|
|
}, { |
|
|
|
|
title: '第二栏', |
|
|
|
|
name: '2', |
|
|
|
|
content: '品牌背景', |
|
|
|
|
configuration:'' |
|
|
|
|
},{ |
|
|
|
|
title: '第三栏', |
|
|
|
|
name: '3', |
|
|
|
|
content: '甄选测评官点评', |
|
|
|
|
configuration:'' |
|
|
|
|
},{ |
|
|
|
|
title: '第四栏', |
|
|
|
|
name: '4', |
|
|
|
|
content: '产品成分', |
|
|
|
|
configuration:'' |
|
|
|
|
},{ |
|
|
|
|
title: '第五栏', |
|
|
|
|
name: '5', |
|
|
|
|
content: '产品细节', |
|
|
|
|
configuration:'' |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
tabIndex: 5, |
|
|
|
|
activeName:'1', |
|
|
|
|
product:[], |
|
|
|
|
//分类列表 |
|
|
|
|
cateList:[], |
|
|
|
@ -199,9 +219,6 @@ export default {
|
|
|
|
|
// }, |
|
|
|
|
video:[], |
|
|
|
|
picArr:[], |
|
|
|
|
picArr1:[], |
|
|
|
|
picArr2:[], |
|
|
|
|
picArr3:[], |
|
|
|
|
permission: { |
|
|
|
|
add: ['admin', 'yxEvaluation:add'], |
|
|
|
|
edit: ['admin', 'yxEvaluation:edit'], |
|
|
|
@ -238,31 +255,77 @@ export default {
|
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
watch: { |
|
|
|
|
// video:function(val) { |
|
|
|
|
// console.log(val,val); |
|
|
|
|
// // this.form.homeImage = val.join(',') |
|
|
|
|
// }, |
|
|
|
|
picArr: function(val) { |
|
|
|
|
console.log(val,'val'); |
|
|
|
|
this.form.homeImage = val.join(',') |
|
|
|
|
video:function(val) { |
|
|
|
|
console.log('val',val); |
|
|
|
|
this.form.videoInput = val |
|
|
|
|
}, |
|
|
|
|
picArr1: function(val) { |
|
|
|
|
console.log(); |
|
|
|
|
this.form.displayImage = val.join(',') |
|
|
|
|
}, |
|
|
|
|
picArr2: function(val) { |
|
|
|
|
console.log(); |
|
|
|
|
this.form.feelImage = val.join(',') |
|
|
|
|
editableTabs: { |
|
|
|
|
handler(newVal, oldVal) { |
|
|
|
|
console.log(newVal, oldVal); |
|
|
|
|
this.form.editableTabs=this.editableTabs |
|
|
|
|
}, |
|
|
|
|
// 开启深度监听 |
|
|
|
|
deep: true |
|
|
|
|
}, |
|
|
|
|
picArr3: function(val) { |
|
|
|
|
console.log(); |
|
|
|
|
this.form.accessibilityImage = val.join(',') |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
mounted () { |
|
|
|
|
this.getInfo(); |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
addCustomDialog () { |
|
|
|
|
window.UE.registerUI( |
|
|
|
|
"yshop", |
|
|
|
|
function (editor, uiName) { |
|
|
|
|
let dialog = new window.UE.ui.Dialog({ |
|
|
|
|
iframeUrl: '#/yshop/materia/index', |
|
|
|
|
editor: editor, |
|
|
|
|
name: uiName, |
|
|
|
|
title: '上传图片', |
|
|
|
|
cssRules: 'width:1200px;height:500px;padding:20px' |
|
|
|
|
}); |
|
|
|
|
this.dialog = dialog; |
|
|
|
|
|
|
|
|
|
var btn = new window.UE.ui.Button({ |
|
|
|
|
name: 'dialog-button', |
|
|
|
|
title: '上传图片', |
|
|
|
|
cssRules: `background-image: url(../../../assets/images/icons.png);background-position: -726px -77px;`, |
|
|
|
|
onclick: function () { |
|
|
|
|
dialog.render(); |
|
|
|
|
dialog.open(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
return btn; |
|
|
|
|
}, 37); |
|
|
|
|
}, |
|
|
|
|
handleTabsEdit(targetName, action) { |
|
|
|
|
if (action === 'add') { |
|
|
|
|
let newTabName = ++this.tabIndex + ''; |
|
|
|
|
this.editableTabs.push({ |
|
|
|
|
title: 'New Tab', |
|
|
|
|
name: newTabName, |
|
|
|
|
content: 'New Tab content', |
|
|
|
|
configuration:'' |
|
|
|
|
}); |
|
|
|
|
this.editableTabsValue = newTabName; |
|
|
|
|
} |
|
|
|
|
if (action === 'remove') { |
|
|
|
|
let tabs = this.editableTabs; |
|
|
|
|
let activeName = this.editableTabsValue; |
|
|
|
|
if (activeName === targetName) { |
|
|
|
|
tabs.forEach((tab, index) => { |
|
|
|
|
if (tab.name === targetName) { |
|
|
|
|
let nextTab = tabs[index + 1] || tabs[index - 1]; |
|
|
|
|
if (nextTab) { |
|
|
|
|
activeName = nextTab.name; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.editableTabsValue = activeName; |
|
|
|
|
this.editableTabs = tabs.filter(tab => tab.name !== targetName); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
handleClick(tab, event) { |
|
|
|
|
console.log(tab, event); |
|
|
|
|
}, |
|
|
|
@ -279,36 +342,35 @@ export default {
|
|
|
|
|
// return product |
|
|
|
|
// }, |
|
|
|
|
videoInput(uploadList){ |
|
|
|
|
console.log(uploadList,'uploadList'); |
|
|
|
|
this.form.videoInput =uploadList[0].url |
|
|
|
|
// console.log(uploadList,'uploadList'); |
|
|
|
|
// this.video =[] |
|
|
|
|
this.form.videoInput='' |
|
|
|
|
}, |
|
|
|
|
change(val){ |
|
|
|
|
// this.form.product=JSON.stringify(val) |
|
|
|
|
// initData('/bxg/api/yxStoreProduct/info/'+val[1]).then((data)=>{ |
|
|
|
|
this.form.product=val[1] |
|
|
|
|
console.log('选的子级',this.form.product) |
|
|
|
|
// }) |
|
|
|
|
this.form.product=val[1] |
|
|
|
|
console.log('选的子级',this.form.product) |
|
|
|
|
// }) |
|
|
|
|
}, |
|
|
|
|
async getInfo(){ |
|
|
|
|
//查询商品分类 |
|
|
|
|
let that = this; |
|
|
|
|
await getInfo(0).then( res => { |
|
|
|
|
//商品分类 |
|
|
|
|
//商品分类 |
|
|
|
|
that.cateList = res.cateList |
|
|
|
|
}) |
|
|
|
|
for (const item of that.cateList) { |
|
|
|
|
await initData('/bxg/api/yxStoreProduct', { |
|
|
|
|
page: 0, |
|
|
|
|
size: 999, |
|
|
|
|
sort: 'id,desc', |
|
|
|
|
cateId:item.value, |
|
|
|
|
}).then(data=>{ |
|
|
|
|
data.content.forEach(ele=>{ |
|
|
|
|
page: 0, |
|
|
|
|
size: 999, |
|
|
|
|
sort: 'id,desc', |
|
|
|
|
cateId:item.value, |
|
|
|
|
}).then(data=>{ |
|
|
|
|
data.content.forEach(ele=>{ |
|
|
|
|
//不能直接使用ele,会有浅拷贝问题 |
|
|
|
|
// let ele1=JSON.parse(JSON.stringify(ele)) |
|
|
|
|
// that.$set(ele,'value',ele1) |
|
|
|
|
that.$set(ele,'value',ele.id) |
|
|
|
|
that.$set(ele,'label',ele.storeName) |
|
|
|
|
that.$set(ele,'label',ele.storeName) |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
that.$set(item,'children',data.content) |
|
|
|
@ -322,30 +384,29 @@ export default {
|
|
|
|
|
}, // 新增与编辑前做的操作 |
|
|
|
|
[CRUD.HOOK.afterToCU](crud, form) { |
|
|
|
|
this.picArr = [] |
|
|
|
|
this.picArr1 = [] |
|
|
|
|
this.picArr2 = [] |
|
|
|
|
this.picArr3 = [] |
|
|
|
|
if (form.homeImage && form.id) { |
|
|
|
|
this.picArr = form.homeImage.split(',') |
|
|
|
|
} |
|
|
|
|
if (form.displayImage && form.id) { |
|
|
|
|
this.picArr1 = form.displayImage.split(',') |
|
|
|
|
} |
|
|
|
|
if (form.feelImage && form.id) { |
|
|
|
|
this.picArr2= form.feelImage.split(',') |
|
|
|
|
} |
|
|
|
|
if (form.accessibilityImage && form.id) { |
|
|
|
|
this.picArr3 = form.accessibilityImage.split(',') |
|
|
|
|
} |
|
|
|
|
console.log('form',form,form.product!=null&& form.id!=null) |
|
|
|
|
if (form.product && form.id) { |
|
|
|
|
let data=JSON.parse(this.form.product) |
|
|
|
|
// console.log('data',data) |
|
|
|
|
this.product=[Number(data.cateId),Number(data.id)] |
|
|
|
|
// this.product=[50,105] |
|
|
|
|
this.form.product=this.product[1] |
|
|
|
|
console.log( '111',this.product,typeof(this.product)); |
|
|
|
|
}else { |
|
|
|
|
this.product=[] |
|
|
|
|
} |
|
|
|
|
if (form.editableTabs && form.id) { |
|
|
|
|
this.editableTabs=this.form.editableTabs |
|
|
|
|
}else{ |
|
|
|
|
this.editableTabs=this.editableTabs1 |
|
|
|
|
} |
|
|
|
|
if (form.videoInput && form.id) { |
|
|
|
|
this.video.push(this.form.videoInput) |
|
|
|
|
}else{ |
|
|
|
|
this.video=[] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|