<template> <van-popup v-model:show='innerShow' position='right' :style="{ height: '100%', width: '100%' }" :overlay='false' > <div class='bg flex flex-col'> <div class='p-3 flex items-center shrink-0 justify-between title bg-white'> <div @click='onBack' class='text-12 back-bt'> <doc-icon type='doc-left2' /> </div> <div>选择内容</div> <div class='text-primary left-btn' @click='openSearch'>筛查</div> </div> <div class='grow p-10 overflow-y-auto' ref='list'> <van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh' :disabled='isRefreshDisable' style='min-height: 100%'> <van-list v-model:loading='loading' :finished='finished' :finished-text="list.length ? '没有更多了' : ''" :immediate-check='false' @load='onMore' > <div class='flex flex-col gap-y-2.5'> <div class='py-3 px-4 doc-list-card' v-for='item in list' :key='item.id'> <div class='flex flex-col gap-y-2.5'> <div> <span class='label'>模板分类</span> <span>{{ item.templateClassifyTrans }}</span> </div> <div> <span class='label'>模板名称</span> <span>{{ item.templateName }}</span> </div> </div> <div class='divider my-3'></div> <div class='bt-group'> <van-button round size='small' class='doc-btn-primary mr-3' @click='toDetail(item)'>查看 </van-button> <van-button round size='small' class='doc-btn-primary' @click='toUse(item)'> 引用 </van-button> </div> </div> </div> </van-list> <div class='text-center shrink-0 empty' v-if='!list.length'> <img src='@/assets/image/doctor/empty.png' alt='' style='width: 1.2rem;'> <p>暂无数据</p> </div> </van-pull-refresh> <van-popup v-model:show='searchVisible' position='top' :style="{ height: '60%' }" style='position: absolute;transition: none' :overlay-style="{ position: 'absolute' }" transition='viewer-fade' :teleport='listDom'> <div class='h-full flex flex-col workbench-search-box'> <div class='px-4 py-3 grow overflow-y-auto' style=''> <van-field v-model='form.templateName' placeholder='请输入要查询的模板名称' maxlength='100' class='doc-input' /> <div class='my-3'>模板分类</div> <CheckBtn :options="store.getDict('DC00082')" v-model:value='form.templateClassify' column-3 class='check-btn-workbench' /> <div class='my-3'>文件类型</div> <CheckBtn :options="store.getDict('DC00093')" v-model:value='form.fileType' column-3 class='check-btn-workbench' /> <div class='my-3'>共享类型</div> <CheckBtn :options="store.getDict('DC00053')" v-model:value='form.templateType' column-3 class='check-btn-workbench' /> </div> <div class='text-16 flex shrink-0 text-center bt-group'> <div class='grow py-3' @click='reset'>重置</div> <div class='grow py-3 submit-btn' @click='search'>确定</div> </div> </div> </van-popup> <!-- 查看详情组件--> <temDetail v-if='detailShow && innerShow' :show='detailShow' :id='selectRecord.id' @closeDetail='detailClosed' @selectedInfo='detailToUse' :overlay='false' ></temDetail> </div> </div> </van-popup> </template> <script> import { showToast } from 'vant' import CheckBtn from '@/doctor/components/checkBtn/CheckBtn' import { getTemplateByPage } from '@/api/doctor/workbench' import { useStore } from '@/doctor/store' import TemDetail from '@/doctor/components/template/temDetail' const DefaultForm = { templateName: undefined, templateClassify: undefined, //慢病 businessType: 1, //文件类型 fileType: undefined, //共享类型 templateType: 1 } export default { name: 'temList', components: { TemDetail, CheckBtn }, props: { show: { default: false } }, data() { return { store: useStore(), list: [], pagination: { total: 0, pageIndex: 1, pageSize: 8 }, loading: false, finished: false, loadingRefresh: false, isRefreshDisable: false, // 搜索弹出框 searchVisible: false, form: { ...DefaultForm }, //是否展示详情弹窗 detailShow: false, //选中项 selectRecord: {} } }, computed: { innerShow() { return this.show }, listDom() { return this.$refs.list } }, created() { this.load() }, mounted() { const list = this.$refs.list if (list) { list.addEventListener('scroll', () => { if (list.scrollTop > 0) { this.isRefreshDisable = true } else { this.isRefreshDisable = false } }) } }, methods: { load(loading = true) { const query = { pageIndex: this.pagination.pageIndex, pageSize: this.pagination.pageSize, ...this.form } getTemplateByPage(query, loading).then(res => { if (this.pagination.pageIndex === 1) { this.list = [] } this.list = this.list.concat(res.data.dataList || []) this.pagination.total = res.data.total || 0 this.finished = this.list.length >= this.pagination.total }).finally(() => { this.loading = false this.loadingRefresh = false }) }, search() { this.pagination.pageIndex = 1 this.load() this.searchVisible = false }, reset() { this.form = { ...DefaultForm } this.search() }, onMore() { this.pagination.pageIndex++ this.load(false) }, onRefresh() { this.pagination.pageIndex = 1 this.load() }, openSearch() { this.searchVisible = true }, toDetail(record) { this.selectRecord = record this.detailShow = true }, detailClosed(val) { this.detailShow = val }, //列表引用 toUse(record, typeList = [1, 2, 3]) { this.$emit('selectRecord', record.id, typeList) this.onBack() }, //详情选中引用 detailToUse(val, typeList = []) { this.$emit('selectRecord', val, typeList) this.onBack() }, onBack() { this.$emit('closed', false) } } } </script> <style scoped lang='less'> .title { font-size: 18px; font-weight: 600; } .bg-white { background: #FFFFFF; } .left-btn { font-size: 14px; font-weight: 400; } .bg { background: rgb(245, 245, 245); height: 100vh; } .p-10 { padding: 10px; } :deep(.workbench-search-box) { color: #595959; .bt-group { border-top: 1px solid #EBEBEC; color: #262626; .submit-btn { color: #fff; background-color: var(--van-primary-color); } } } </style>