<style scoped> .WebSite_slider .text-warning { color: #8a6d3b; } .WebSite_slider .webSliderDiv { width: 150px; line-height: 0; height: 100px; overflow: hidden; /* height: 234px; */ border: 1px solid #ccc; cursor: pointer; position: relative; } .WebSite_slider .webSliderDiv .web_imgUrl { width: 100%; height: 100%; } .WebSite_slider .webSliderDiv .addIconDiv { position: absolute; width: 100%; height: 100%; top: 0; background-color: transparent; display: flex; align-items: center; justify-content: center; } .WebSite_slider .webSliderDiv i { font-size: 50px; color: #d1d1d1; cursor: pointer; } .webSliderDiv .addIconDiv:hover { background: rgba(0, 0, 0, 0.5); color: #fff; } /deep/.WebSite_slider .el-form-item__content { line-height: 20px; } .caidantext { font-size: 16px; font-weight: bold; color: #f45c43; } .caidantext.caidantext2 { color: dodgerblue; } .rowSbAc { display: flex; flex-direction: row; justify-content: space-between; align-items: center; } .rowEnd { display: flex; flex-direction: row; justify-content: end; } .flex { flex: 1; } </style> <template> <div class="WebSite_slider"> <el-form label-width="100px"> <el-row :gutter="24"> <el-col :span="8"> <el-form-item :label="$t('objFill.v101.zhubiaoti')"> <el-input type="text" v-model="plugData.Title"></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item :label="$t('objFill.fubiaoti')"> <el-input type="text" v-model="plugData.SubTitle"></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item :label="$t('objFill.v101.beijinse')"> <el-color-picker style='vertical-align: middle;' v-model="plugData.BgColor"></el-color-picker> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="8"> <el-form-item label="Web LOGO" style="margin-bottom: 0;"> <div class="webSliderDiv" style="width:100px;height:100px;"> <el-upload :http-request="UploadAttachmentLogo" :multiple="true" accept="image/jpeg,image/gif,image/png,image/bmp" :show-file-list="false" action=""> <img v-if="plugData.Logo" :src="plugData.Logo" class="web_imgUrl" alt="" /> <div class="addIconDiv"> <i class="web_addImg iconfont icon-img_haha"></i> <i class="web_delImg iconfont icon-img_delete_small" style="margin-left:10px;" @click.stop="plugData.Logo=''"></i> </div> </el-upload> </div> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Mobile LOGO" style="margin-bottom: 0;"> <div class="webSliderDiv" style="width: 100px;height:100px;"> <el-upload :http-request="UploadAttachmentMLogo" :multiple="true" accept="image/jpeg,image/gif,image/png,image/bmp" :show-file-list="false" action=""> <img v-if="plugData.MLogo" :src="plugData.MLogo" class="web_imgUrl" alt="" /> <div class="addIconDiv"> <i class="web_addImg iconfont icon-img_haha"></i> <i class="web_delImg iconfont icon-img_delete_small" style="margin-left:10px;" @click.stop="plugData.MLogo=''"></i> </div> </el-upload> </div> </el-form-item> </el-col> <el-col :span="8"></el-col> </el-row> <!--导航菜单--> <el-tabs v-model="activeName" type="border-card" :before-leave="beforeLeave" style="margin-top:10px;" @tab-remove="removeTab"> <el-tab-pane :key="index" v-for="(item,index) in plugData.MenuList" :label="$t('objFill.caidan')+(index+1)" :name="index.toString()" :closable="true"> <table> <tr> <td> <el-form-item :label="$t('objFill.v101.fengmian')+$t('system.query_type')+(index+1)" style="margin-bottom: 0;"> <el-select v-model="item.FileType" style="width:150px;"> <el-option v-for="item in typeList" :key="item.Id" :label="item.Name" :value="item.Id"> </el-option> </el-select> </el-form-item> </td> <td> <el-form-item :label="$t('objFill.v101.zhubiaoti')+(index+1)"> <el-input type="text" v-model="item.MenuName" style="width:227px;"></el-input> <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="delMenu(1,index)"> </el-button> </el-form-item> </td> </tr> <tr> <td rowspan="2"> <el-form-item :label="$t('objFill.v101.fengmian')+(index+1)" style="margin-bottom: 0;"> <div class="webSliderDiv" @click="menuIndex=index"> <el-upload :http-request="(file)=>UploadAttachment(file,item.FileType)" :before-upload="(file)=>beforeUploadVideo(file,item.FileType)" :multiple="false" :accept="getAccept(item.FileType)" :show-file-list="false" action=""> <img v-if="item.FileType==1&&item.FileUrl" :src="item.FileUrl" class="web_imgUrl" alt="" /> <video v-if="item.FileType==2&&item.FileUrl" :src="item.FileUrl" class="web_imgUrl"></video> <div class="addIconDiv"> <i class="web_addImg iconfont icon-img_haha"></i> <i class="web_delImg iconfont icon-img_delete_small" style="margin-left:10px;" @click.stop="item.FileUrl=''"></i> </div> </el-upload> </div> <!-- <div v-if="plugData.Type==1">{{$t('objFill.v101.tupiqscsqin')}}</div> <div v-else>{{$t('objFill.v101.tupiqscersw')}}</div> --> </el-form-item> </td> <td> <el-form-item :label="$t('objFill.fubiaoti')+(index+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="item.MenuSubName"></el-input> </el-form-item> </td> </tr> <tr> <td> <el-form-item :label="$t('objFill.v101.lianjie')+(index+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="item.LinkUrl"> <el-button slot="append" icon="el-icon-search" @click="ShowMenuDialog(item)"></el-button> </el-input> </el-form-item> </td> </tr> <tr> <td>{{$t('objFill.v101.zicaidan')}} <el-tooltip class="item" effect="dark" :content="'+ '+$t('objFill.v101.zicaidan')" placement="top"> <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addMenu(2,index)"> </el-button> </el-tooltip> </td> <td> </td> </tr> <tbody v-for="(sub,subIndex) in item.SubMenuList" :key="`m1_i_`+index+`s_`+subIndex" style="border-radius:5px; border:1px solid #ccc;margin-bottom:5px;margin-top:5px;"> <tr> <td> <el-form-item :label="$t('objFill.v101.fengmian')+$t('system.query_type')+(index+1)+`-`+(subIndex+1)" style="margin-bottom: 0;"> <el-select v-model="sub.FileType" style="width: 150px;"> <el-option v-for="item in typeList" :key="item.Id" :label="item.Name" :value="item.Id"> </el-option> </el-select> </el-form-item> </td> <td> <el-form-item :label="$t('objFill.v101.zhubiaoti')+(index+1)+`-`+(subIndex+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="sub.MenuName" style="width:227px;"></el-input> <el-button v-show="subIndex!=0" type="danger" icon="el-icon-minus" size="mini" circle @click="delMenu(2,index,i)"> </el-button> </el-form-item> </td> </tr> <tr> <td rowspan="2"> <el-form-item :label="$t('objFill.v101.fengmian')+(index+1)+`-`+(subIndex+1)" style="margin-bottom: 0;"> <div class="webSliderDiv" @click="menuIndex=index,subMenuIndex=subIndex"> <el-upload :before-upload="(file)=>beforeUploadVideo(file,sub.FileType,1)" :http-request="(file)=>UploadAttachment2(file,sub.FileType)" :multiple="true" :accept="getAccept(sub.FileType)" :show-file-list="false" action=""> <img v-if="sub.FileType==1&&sub.FileUrl" :src="sub.FileUrl" class="web_imgUrl" alt="" /> <video v-if="sub.FileType==2&&sub.FileUrl" :src="sub.FileUrl" class="web_imgUrl" alt=""></video> <div class="addIconDiv"> <i class="web_addImg iconfont icon-img_haha"></i> <i class="web_delImg iconfont icon-img_delete_small" style="margin-left:10px;" @click.stop="sub.FileUrl=''"></i> </div> </el-upload> </div> <!-- <div v-if="plugData.Type==1">{{$t('objFill.v101.tupiqscsqin')}}</div> <div v-else>{{$t('objFill.v101.tupiqscersw')}}</div> --> </el-form-item> </td> <td> <el-form-item :label="$t('objFill.fubiaoti')+(index+1)+`-`+(subIndex+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="sub.MenuSubName"></el-input> </el-form-item> </td> </tr> <tr> <td> <el-form-item :label="$t('objFill.v101.lianjie')+(index+1)+`-`+(subIndex+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="sub.LinkUrl"> <el-button slot="append" icon="el-icon-search" @click="ShowMenuDialog(sub)"></el-button> </el-input> </el-form-item> </td> </tr> </tbody> </table> </el-tab-pane> <el-tab-pane key="add" name="add" @click="addMenu(1)"> <span slot="label" style="padding:3px;font-size:20px;font-weight:bold;"> + </span> </el-tab-pane> </el-tabs> <table style="margin-top:10px;"> <tbody> <tr> <td class="caidantext"> {{$t('objFill.dibudaohang')}} </td> <td></td> <td class="rowEnd"> <div> <el-tooltip class="item" effect="dark" :content="'+ '+$t('objFill.v101.activity.lianjie')" placement="top"> <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addMenu(3)"></el-button> </el-tooltip> </div> </td> </tr> <tr v-for="(item,index) in plugData.BottomList" :key="index"> <td> <el-form-item :label="$t('objFill.v101.activity.lianjie')+$t('objFill.biaoti')+(index+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="item.LinkTitle"></el-input> </el-form-item> </td> <td> <el-form-item :label="$t('objFill.caidan')+$t('objFill.v101.activity.lianjie')+(index+1)" style="margin-bottom: 0;"> <el-input type="text" v-model="item.LinkUrl"> <el-button slot="append" icon="el-icon-search" @click="ShowMenuDialog(item)"></el-button> </el-input> </el-form-item> </td> <td> <el-tooltip v-show="plugData.BottomList.length>1" class="item" effect="dark" :content="'- '+$t('objFill.v101.activity.lianjie')" placement="top"> <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="delMenu(3,index)"></el-button> </el-tooltip> </td> </tr> </tbody> </table> </el-form> <el-dialog :title="$t('objFill.qingxzcd')" :visible.sync="isShowMenuDialog" width="1000px" append-to-body> <!-- 行程选中 --> <chooseMenu ref="chooseMenu"></chooseMenu> <span slot="footer" class="dialog-footer"> <el-button @click="isShowMenuDialog = false" size="small">{{$t('pub.cancelBtn')}}</el-button> <el-button type="danger" size="small" @click="getMenuChoose()">{{$t('pub.sureBtn')}}</el-button> </span> </el-dialog> </div> </template> <script> import chooseMenu from "../plug-in/choose_menu.vue" export default { components: { chooseMenu }, props: ["plugData"], data() { return { menuIndex: 0, //点击图片索引 subMenuIndex: 0, typeList: [{ Name: this.$t('system.label_img'), Id: 1 }, { Name: this.$t('objFill.shipin'), Id: 2 }, ], clickType: 0, //1-一级菜单 2-二级菜单,3-底部导航 //一级菜单JSON MenuList: { FileType: 1, FileUrl: '', LinkUrl: '', MenuName: '', MenuSubName: '', SubMenuList: [], }, //耳机菜单JSON SubMenuList: { FileType: 1, FileUrl: '', LinkUrl: '', MenuName: '', MenuSubName: '', SubMenuList: null, }, //底部导航JSON BottomList: { LinkTitle: '', LinkUrl: '', }, clickItem: {}, isShowMenuDialog: false, //是否显示菜单弹窗 activeName: "0", }; }, created() { }, methods: { getAccept(uploadType) { if (uploadType === 1) { return 'image/jpeg,image/gif,image/png,image/bmp'; } if (uploadType === 2) { return 'video/mp4,video/webm'; } return '*/*'; }, //删除选项卡 removeTab(targetName) { var newIndex = targetName - 1; this.delMenu(1, newIndex); }, /* 点击添加选项卡时 */ beforeLeave(currentName, oldName) { var self = this; //重点,如果name是add,则什么都不触发 if (currentName == "add") { self.addMenu(1); return false } }, addMenu(type, index) { this.clickType = type if (type == 1) { //一级菜单 this.plugData.MenuList.push(JSON.parse(JSON.stringify(this.MenuList))) } else if (type == 2) { //二级菜单 this.plugData.MenuList[index].SubMenuList.push(JSON.parse(JSON.stringify(this.SubMenuList))) } else if (type == 3) { //底部导航 this.plugData.BottomList.push(JSON.parse(JSON.stringify(this.BottomList))) } }, //删除菜单 delMenu(type, index, i) { this.clickType = type; var that = this; that.Confirm(this.$t('tips.shifoushanchu'), function () { //一级菜单 if (type == 1) { that.plugData.MenuList.splice(index, 1) } //二级菜单 else if (type == 2) { that.plugData.MenuList[index].SubMenuList.splice(i, 1) } //底部导航 else if (type == 3) { that.plugData.BottomList.splice(i, 1) } }); }, beforeUploadVideo (file,FileType,index) { // 视频验证 if(file.type.indexOf('video')!=-1&&FileType==1) { FileType=2 } else if(file.type.indexOf('video')==-1&&FileType==2) { FileType=1 } if(index){ this.plugData.MenuList[this.menuIndex].SubMenuList[this.subMenuIndex].FileType = FileType }else{ this.plugData.MenuList[this.menuIndex].FileType = FileType } if(FileType==1) return true const isLt10M = file.size / 1024 / 1024 < 10; if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb'].indexOf(file.type) === - 1) { this.$message.error(this.$t('objFill.qingsczqdspgs')); return false; } if (!isLt10M) { this.$message.error(this.$t('objFill.shngcspbncgs')); return false; } }, //上传图片 UploadAttachment(file,FileType) { let newArr = []; newArr.push(file.file); var path = "/Upload/WebSite/"; this.$message.info(this.$t('tips.shangchuanzhong')) // this.UploadSelfFileT(path, newArr, x => { // var str = x.data.FilePath; // var imgUrl = this.domainManager().ViittoFileUrl + str; // this.plugData.MenuList[this.menuIndex].FileUrl = imgUrl; // this.$message.success(this.$t('tips.scchenggong')); // },2); if(file.file.type.indexOf('video')!=-1&&FileType==1) { FileType=2 } else if(file.file.type.indexOf('video')==-1&&FileType==2) { FileType=1 } this.plugData.MenuList[this.menuIndex].FileType = FileType if(FileType==1){ this.UploadSelfFileT(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().ViittoFileUrl + str; this.plugData.MenuList[this.menuIndex].FileUrl = imgUrl; this.$message.success(this.$t('tips.scchenggong')); },2); }else{ this.UploadFileToAli2024(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().OSSUrl + str; this.plugData.MenuList[this.menuIndex].FileUrl = imgUrl; this.$message.success(this.$t('tips.scchenggong')); },2); } }, UploadAttachment2(file,FileType) { let newArr = []; newArr.push(file.file); var path = "/Upload/WebSite/"; this.$message.info(this.$t('tips.shangchuanzhong')) if(file.file.type.indexOf('video')!=-1&&FileType==1) { FileType=2 } else if(file.file.type.indexOf('video')==-1&&FileType==2) { FileType=1 } this.plugData.MenuList[this.menuIndex].SubMenuList[this.subMenuIndex].FileType = FileType if(FileType==1){ this.UploadSelfFileT(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().ViittoFileUrl + str; this.plugData.MenuList[this.menuIndex].SubMenuList[this.subMenuIndex].FileUrl = imgUrl; this.$message.success(this.$t('tips.scchenggong')); },2); }else{ this.UploadFileToAli2024(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().OSSUrl + str; this.plugData.MenuList[this.menuIndex].SubMenuList[this.subMenuIndex].FileUrl = imgUrl this.$message.success(this.$t('tips.scchenggong')); },2); } }, UploadAttachmentLogo(file) { let newArr = []; newArr.push(file.file); var path = "/Upload/WebSite/"; this.$message.info(this.$t('tips.shangchuanzhong')) this.UploadSelfFileT(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().ViittoFileUrl + str; this.plugData.Logo = imgUrl; this.$message.success(this.$t('tips.scchenggong')); },2); }, UploadAttachmentMLogo(file) { let newArr = []; newArr.push(file.file); var path = "/Upload/WebSite/"; this.$message.info(this.$t('tips.shangchuanzhong')) this.UploadSelfFileT(path, newArr, x => { var str = x.data.FilePath; var imgUrl = this.domainManager().ViittoFileUrl + str; this.plugData.MLogo = imgUrl; this.$message.success(this.$t('tips.scchenggong')); },2); }, //显示菜单弹窗 ShowMenuDialog(item) { this.clickItem = item; this.isShowMenuDialog = true; }, //获取选中的菜单数据 getMenuChoose() { var chooseMenuObj = this.$refs.chooseMenu.getChooseMenu(); this.isShowMenuDialog = false; if (chooseMenuObj) { this.clickItem.LinkUrl = chooseMenuObj.MenuUrl; this.clickItem.MenuName = chooseMenuObj.MenuName; this.clickItem.LinkTitle = chooseMenuObj.MenuName; } this.$refs.chooseMenu.initMenuCheck(); }, }, mounted() {} }; </script>