| | |
| | | <template> |
| | | <div> |
| | | {{ modules.id }}--{{ modules.name }} |
| | | <!--头部按钮--> |
| | | <div class="avue-crud__menu"> |
| | | <!-- 头部左侧按钮模块 --> |
| | |
| | | <!-- 头部右侧按钮模块 --> |
| | | <div class="avue-crud__right"> |
| | | <div v-if="content.property== 2" class="model-type"> |
| | | <el-radio-group v-model="modelType"> |
| | | <el-radio-group size="small" v-model="modelType"> |
| | | <el-radio-button label="管理"></el-radio-button> |
| | | <el-radio-button label="预览"></el-radio-button> |
| | | </el-radio-group> |
| | |
| | | </div> |
| | | <el-row> |
| | | <!--左侧列表--> |
| | | <el-col :span="6"> |
| | | <el-col :span="5"> |
| | | <div class="func"> |
| | | <!--列表展示--> |
| | | <div class="list"> |
| | | <el-tree v-if="funList.length >0" :data="funList" :props="defaultProps" node-key="id" @node-click="handleNodeClick"> |
| | | <el-tree v-if="funList.length >0" :data="funList" :props="defaultProps" node-key="id" |
| | | @node-click="handleNodeClick"> |
| | | <span class="custom-tree-node" slot-scope="{ node, data }"> |
| | | <span>{{ data.name }}</span> |
| | | <span> |
| | |
| | | <!--占位--> |
| | | <el-col :span="1"></el-col> |
| | | <!--右侧预览--> |
| | | <el-col :span="17"> |
| | | <el-col :span="18"> |
| | | <div class="func-content"> |
| | | <!--开始页--> |
| | | <div class="start" v-if="content.property == 1"> |
| | | <img class="start-img" :src="content.fileUrl[0].value"> |
| | | <div class="start-button-group"> |
| | | <el-button disabled size="small" v-for="data in contentFunList" :index="data.id" :key="data.id"> |
| | | {{ data.name }} |
| | | </el-button> |
| | | <div class="start" v-if="content.fileUrl.length>0"> |
| | | <img class="start-img" :src="content.fileUrl[0].value"> |
| | | <div class="start-button-group"> |
| | | <el-button disabled type="primary" size="small" v-for="data in contentFunList" :index="data.id" :key="data.id"> |
| | | {{ data.name }} |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | <div v-else> |
| | | <el-empty></el-empty> |
| | | </div> |
| | | |
| | | </div> |
| | | <!--内容页--> |
| | | <div style="height: 100%;width: 100%" v-if="content.property == 2"> |
| | | <div class="ddiv" v-if="content.property == 2"> |
| | | |
| | | <div style="height: 100%;width: 100%" class="manage" v-if="modelType=='管理'"> |
| | | <div class="manage ddiv" v-if="modelType=='管理'"> |
| | | <!--flash--> |
| | | <div v-if="content.type == 1"> |
| | | <avue-form :option="flashOption" v-model="flashForm" @submit="handleSubmitFile"></avue-form> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="height: 100%;width: 100%" class="view" v-else> |
| | | <div class="view ddiv" v-if="modelType == '预览'"> |
| | | <!--flash--> |
| | | <div v-if="content.type == 1"> |
| | | <div v-if="content.type == 1"> |
| | | |
| | | </div> |
| | | |
| | | <!--图册--> |
| | | <div style="height: 100%;width: 100%" v-if="content.type == 2"> |
| | | <Flipbook class="flipbook" :pages="flipConfig.pages" :startPage="flipConfig.pageNum" v-slot="flipbook" ref="flipbook"> |
| | | <div class="ddiv" v-if="content.type == 2"> |
| | | <FlipBook class="flipbook" :pages="flipConfig.pages" :startPage="flipConfig.pageNum" v-slot="flipbook" |
| | | ref="flipbook"> |
| | | <div class="action-bar"> |
| | | <left-icon class="btn left" :class="{ disabled: !flipbook.canFlipLeft }" @click="flipbook.flipLeft"/> |
| | | <left-icon class="btn left" :class="{ disabled: !flipbook.canFlipLeft }" |
| | | @click="flipbook.flipLeft"/> |
| | | <plus-icon class="btn plus" :class="{ disabled: !flipbook.canZoomIn }" @click="flipbook.zoomIn"/> |
| | | <span class="page-num">Page {{ flipbook.page }} of {{ flipbook.numPages }}</span> |
| | | <minus-icon class="btn minus" :class="{ disabled: !flipbook.canZoomOut }" @click="flipbook.zoomOut"/> |
| | | <right-icon class="btn right" :class="{ disabled: !flipbook.canFlipRight }" @click="flipbook.flipRight"/> |
| | | <minus-icon class="btn minus" :class="{ disabled: !flipbook.canZoomOut }" |
| | | @click="flipbook.zoomOut"/> |
| | | <right-icon class="btn right" :class="{ disabled: !flipbook.canFlipRight }" |
| | | @click="flipbook.flipRight"/> |
| | | </div> |
| | | </Flipbook> |
| | | </FlipBook> |
| | | </div> |
| | | |
| | | <!--视频--> |
| | | <div style="height: 100%;width: 100%" v-if="content.type == 3"> |
| | | <div class="ddiv" v-if="content.type == 3"> |
| | | <iframe class="view-iframe" :src="iframePath"/> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <!--结束页--> |
| | | <div class="end" v-if="content.property == 3"> |
| | | <img class="end-img" :src="content.fileUrl[0].value"> |
| | | <div class="end" v-if="content.fileUrl.length>0"> |
| | | <img class="end-img" :src="content.fileUrl[0].value"> |
| | | </div> |
| | | <div v-else> |
| | | <el-empty></el-empty> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | |
| | | |
| | | <script> |
| | | import {getAll, add, update, remove} from "@/api/modules/function"; |
| | | import FlipBook from "flipbook-vue/dist/vue2/flipbook"; |
| | | import LeftIcon from 'vue-material-design-icons/ChevronLeftCircle' |
| | | import RightIcon from 'vue-material-design-icons/ChevronRightCircle' |
| | | import PlusIcon from 'vue-material-design-icons/PlusCircle' |
| | |
| | | export default { |
| | | name: "function", |
| | | props: ['modules'], |
| | | components: {LeftIcon, RightIcon, PlusIcon, MinusIcon}, |
| | | components: {FlipBook,LeftIcon, RightIcon, PlusIcon, MinusIcon}, |
| | | data() { |
| | | return { |
| | | //所有功能集合 |
| | |
| | | type: 'upload', |
| | | limit: 1, |
| | | drag: true, |
| | | loadText: '模板上传中,请稍等', |
| | | loadText: '文件上传中,请稍等', |
| | | accept: 'image/png, image/jpeg', |
| | | propsHttp: { |
| | | res: 'data', |
| | |
| | | type: 'upload', |
| | | span: 24, |
| | | dragFile: true, |
| | | multiple:true, |
| | | accept: 'image/png, image/jpeg', |
| | | listType: "picture-card", |
| | | propsHttp: { |
| | |
| | | label: 'name' |
| | | }, |
| | | content: {}, |
| | | modelType:'管理', |
| | | modelType: '管理', |
| | | |
| | | flipConfig: { |
| | | pages: [], |
| | |
| | | hasMouse: true, |
| | | pageNum: null, |
| | | }, |
| | | iframePath:"", |
| | | iframePath: "", |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | }, |
| | | handleSubmit(form, done) { |
| | | form.modulesId = this.modules.id |
| | | //限制只能有一个开始页和结束页 |
| | | if (form.property == 1 || form.property == 3) { |
| | | let data = this.funList |
| | | let filterArray = data.filter(e => { |
| | | return e.property == form.property |
| | | }) |
| | | if (filterArray.length > 0) { |
| | | |
| | | if (form.property == 1) { |
| | | if (form.id != filterArray[0].id){ |
| | | this.$message.warning("开始页已存在") |
| | | done() |
| | | return |
| | | } |
| | | } else if (form.property == 3) { |
| | | if (form.id != filterArray[0].id){ |
| | | this.$message.warning("结束页已存在") |
| | | done() |
| | | return |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (!form.id) { |
| | | add(form).then(() => { |
| | | this.getAllFunc() |
| | |
| | | } else if (data.type == 2) { |
| | | this.imgForm.url = data.fileUrl |
| | | let fileArray = data.fileUrl |
| | | fileArray.forEach(e => { |
| | | this.flipConfig.pages.push(e.value) |
| | | }) |
| | | this.flipConfig.pages = [] |
| | | if (fileArray.length>0){ |
| | | fileArray.forEach(e => { |
| | | this.flipConfig.pages.push(e.value) |
| | | }) |
| | | } |
| | | } else if (data.type == 3) { |
| | | this.videoForm.url = data.fileUrl |
| | | let url = data.fileUrl[0].value |
| | | this.iframePath = 'http://192.168.0.200:8012/onlinePreview?url=' + encodeURIComponent(Base64.encode(url)) |
| | | if (data.fileUrl.length>0){ |
| | | let url = data.fileUrl[0].value |
| | | this.iframePath = 'http://192.168.0.200:8012/onlinePreview?url=' + encodeURIComponent(Base64.encode(url)) |
| | | } |
| | | } |
| | | } |
| | | }, |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .ddiv{ |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .view{ |
| | | background-color: #404040; |
| | | } |
| | | |
| | | .func { |
| | | height: 77vh; |
| | | border: 1px solid; |
| | |
| | | .start-button-group { |
| | | position: relative; |
| | | top: -25%; |
| | | left: 42%; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .model-type{ |
| | | .model-type { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | } |
| | |
| | | |
| | | .flipbook { |
| | | width: 100%; |
| | | height: 100vh; |
| | | height: 100%; |
| | | } |
| | | |
| | | .page-num{ |
| | | .page-num { |
| | | color: white; |
| | | } |
| | | |
| | |
| | | margin-left: 10px; |
| | | } |
| | | |
| | | .flipbook .viewport { |
| | | width: 90vw !important; |
| | | height: calc(100vh - 800px - 40px) !important; |
| | | } |
| | | |
| | | .flipbook .bounding-box { |
| | | box-shadow: 0 0 20px #000; |
| | | } |
| | | |
| | | .credit { |
| | | font-size: 12px; |
| | | line-height: 20px; |