temDetail.vue 5.86 KB
<template>
    <van-popup v-if='innerShow' v-model:show='innerShow' position='right' :style="{ height: '100%', width: '100%' }">
        <div class='flex flex-col' style='height: 100vh'>
            <div class='p-3 text-black text-center shrink-0 doc-nav-bar'>
            <span @click='onBack' class='text-12 back-bt'>
                <doc-icon type='doc-left2' />
            </span>
                <span>查看内容</span>
            </div>

            <div class='grow overflow-y-auto pl-4 pr-4 pt-3 pb-3'>
<!--                {{fileType}}-->
                <div>
                    <div class='flex flex-col '>
                        <!-- 文本 -->
                        <div class='card' v-if='contentList?.length' @click.stop='selectFiletype(1)'>
                            <div class='flex justify-between items-center'>
                            <div class='font-semibold mb-1'>文本</div>
                            <van-checkbox-group v-model="fileType" shape="square"  icon-size="16px" >
                                <van-checkbox :name="1" @click.stop='()=> {}'></van-checkbox>
                            </van-checkbox-group>
                            </div>
                            <div class='conten-bg'>
                                <div v-for='item in contentList' :key='item.templateMode' class='mb-1 flex'
                                     :style='`order: ${item.templateMode}`'>
                                    <span class='shrink-0 mr-1'
                                          v-if="item.templateModeTrans != '无'">{{ item.templateModeTrans }} :</span>
                                    <span> {{ item.templateContent }}</span>
                                </div>
                            </div>
                        </div>
                    </div>



                    <div class='card mt-4' v-if='mp4List?.length' @click='selectFiletype(3)'>
                        <div class='flex justify-between items-center'>
                            <div class='font-semibold mb-1'>视频</div>
                            <van-checkbox-group v-model="fileType" shape="square"  icon-size="16px">
                                <van-checkbox :name="3" @click.stop='()=> {}'></van-checkbox>
                            </van-checkbox-group>
                        </div>
                        <div class='conten-bg'>
                            <Mp4 :files='mp4List' :activeMediaUrl='activeMediaUrl'
                                 @play='e => activeMediaUrl = e.annexUrl' />
                        </div>
                    </div>


                    <div class='card flex flex-col mt-4' style='row-gap: .06rem;' v-if='mp3List?.length' @click='selectFiletype(2)'>
                        <div class='flex justify-between items-center'>
                            <div class='font-semibold mb-1'>音频</div>
                            <van-checkbox-group v-model="fileType" shape="square"  icon-size="16px">
                                <van-checkbox :name="2" @click.stop='()=> {}'></van-checkbox>
                            </van-checkbox-group>
                        </div>
                        <div class='conten-bg'>
                            <Mp3 :file='item' v-for='item in mp3List' :key='item.annexId'
                                 :activeMediaUrl='activeMediaUrl'
                                 @play='e => activeMediaUrl = e.annexUrl' />
                        </div>
                    </div>
                </div>
            </div>

            <div class='bbtn'>
                <van-button type='primary' @click='toUse'>引用</van-button>
            </div>
        </div>
    </van-popup>
</template>

<script>
import { showToast } from 'vant'
import { getTemplateDetail } from '@/api/doctor/workbench'
import Mp3 from '@/doctor/components/mediaPlay/Mp3.vue'
import Mp4 from '@/doctor/components/mediaPlay/Mp4.vue'

export default {
    name: 'temDetail',
    components: { Mp4, Mp3 },
    props: {
        show: { default: false },
        id: String
    },
    data() {
        return {
            info: {},
            activeMediaUrl: '',
            fileType: [1, 2, 3],
        }
    },
    computed: {
        innerShow() {
            return this.show
        },
        contentList() {
            return this.info.contentList
        },
        // 文件内容
        annexList() {
            return this.info?.annexList || []
        },
        mp3List() {
            return this.annexList.filter(e => e.type == 2)
        },
        mp4List() {
            return this.annexList.filter(e => e.type == 3)
        }
    },
    created() {
        this.load()
    },
    methods: {
        async load() {
            if (!this.id) {
                showToast('未获取到信息')
                return
            }
            let par = {
                id: this.id
            }
            getTemplateDetail(par).then(res => {
                let result = res.data || {}
                this.info = result
            }).finally(() => {
            })
        },
        selectFiletype(val) {
            let index = this.fileType.findIndex(item => item == val)
            if (index >= 0) {
                this.fileType = this.fileType.filter(item => item != val)
            } else {
                this.fileType.push(val)
            }
        },
        toUse() {
            this.$emit('selectedInfo', this.id, this.fileType)
            this.onBack()
        },
        onBack() {
            this.$emit('closeDetail', false)
        }
    }
}
</script>

<style scoped lang='less'>
@import url('../../utils/common.less');
.bbtn {
    padding: 8px 12px;
    border-top: 1px solid #D7D8DA;

    button {
        width: 100%;
        border-radius: 100px
    }
}

.card {
    border: 1px solid #CFD5DE;
    padding: 8px;
    border-radius: 8px;
    color: #262626;
}

.conten-bg {
    background: #F8FAFC;
    padding: 6px 10px;
    border-radius: 4px;
}
</style>