|
@@ -1,67 +1,101 @@
|
|
|
<script setup name="ReportList">
|
|
|
import {computed, nextTick, onMounted, reactive,ref} from 'vue'
|
|
|
import apiReport from '@/api/report'
|
|
|
-import {getSystemInfo} from '@/api/common'
|
|
|
+import {reportExternalInterface} from '@/api/reportExternal'
|
|
|
import moment from 'moment'
|
|
|
-// import ListClassify from '../recomponents/ListClassify.vue'
|
|
|
+import _ from 'lodash'
|
|
|
import { showToast,showDialog,Dialog } from 'vant';
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
-import {useCachedViewsStore} from '@/store/modules/cachedViews'
|
|
|
-import {reportManageBtn,useAuthBtn} from '@/hooks/useAuthBtn'
|
|
|
+import { useRouter,useRoute } from 'vue-router';
|
|
|
|
|
|
-const cachedViewsStore=useCachedViewsStore()
|
|
|
+const router = useRouter()
|
|
|
+const route = useRoute()
|
|
|
|
|
|
-const {checkAuthBtn} = useAuthBtn()
|
|
|
|
|
|
-
|
|
|
-const router=useRouter()
|
|
|
+const isReportWarResearch = computed(() => {
|
|
|
+ return route.path === '/war_research_report/list'
|
|
|
+})
|
|
|
+//睿思
|
|
|
+const isRise = computed(()=> {
|
|
|
+ return isReportWarResearch.value && listState.reportType===2
|
|
|
+})
|
|
|
//是否显示一键清空选项
|
|
|
const showCleanFilterBox=computed(()=>{
|
|
|
if(isClickClose.value) return false
|
|
|
if(
|
|
|
- listState.ClassifyNameFirst||
|
|
|
- listState.ClassifyNameFirst||
|
|
|
- listState.EndDate||
|
|
|
- listState.MsgIsSend||
|
|
|
- listState.publishStatus
|
|
|
+ listState.classifys.length||
|
|
|
+ listState.permissions.length
|
|
|
) return true
|
|
|
})
|
|
|
+
|
|
|
+
|
|
|
const isClickClose=ref(false)//是否点击过关闭一键清空模块
|
|
|
function handleCleanFilter(){
|
|
|
- listState.ClassifyNameFirst=''
|
|
|
- listState.ClassifyNameSecond=''
|
|
|
- listState.ClassifyNameThird=''
|
|
|
- listState.classifyIds=[]
|
|
|
-
|
|
|
- listState.MsgIsSend=''
|
|
|
- listState.StartDate=''
|
|
|
- listState.EndDate=''
|
|
|
- listState.timeType='publish_time'
|
|
|
- listState.publishStatus=''
|
|
|
+ listState.classifys=[]
|
|
|
+ listState.permissions=[]
|
|
|
+
|
|
|
+ listState.keyWord=''
|
|
|
refreshList()
|
|
|
}
|
|
|
|
|
|
-const statusMap = new Map([
|
|
|
- [1,{ bg:'#EEEEEE', color:'#333', msg:'未发布'}],
|
|
|
- [2,{ bg:'rgba(0, 82, 217, 0.1)', color:'#0052D9', msg:'已发布'}],
|
|
|
- [3,{ bg:'#FFF1E9', color:'#BE5A00', msg:'待提交'}],
|
|
|
- [4,{ bg:'#FFF1E9', color:'#BE5A00', msg:'待审批'}],
|
|
|
- [5,{ bg:'#FFF0ED', color:'#AD352F', msg:'已驳回'}],
|
|
|
- [6,{ bg:'#E3F9E9', color:'#006C45', msg:'已通过'}]
|
|
|
-])
|
|
|
+
|
|
|
+
|
|
|
+const classifyOptions = ref([])
|
|
|
+const permissionOptions = ref([])
|
|
|
+async function getClassify() {
|
|
|
+
|
|
|
+ const res = await reportExternalInterface.getClasssify()
|
|
|
+ if (res.Ret !== 200) return
|
|
|
+
|
|
|
+ classifyOptions.value = res.Data||[];
|
|
|
+ filterEmpty(classifyOptions.value)
|
|
|
+}
|
|
|
+getClassify()
|
|
|
+function filterEmpty(arr) {
|
|
|
+ arr.length && arr.forEach(item => {
|
|
|
+ item.Children.length && filterEmpty(item.Children)
|
|
|
+ if(!item.Children.length) {
|
|
|
+ item.Children = null
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+async function getPermissionList() {
|
|
|
+ const res = await reportExternalInterface.getPermission()
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ permissionOptions.value = res.Data || []
|
|
|
+ filterEmpty(permissionOptions.value)
|
|
|
+}
|
|
|
+getPermissionList()
|
|
|
+
|
|
|
+
|
|
|
+//收藏分类 只用在战研报告
|
|
|
+const collectClassifyOpts = computed(() => {
|
|
|
+ console.log(findCollectItem(classifyOptions.value))
|
|
|
+ return isReportWarResearch.value ? findCollectItem(classifyOptions.value) : []
|
|
|
+})
|
|
|
+function findCollectItem(arr) {
|
|
|
+ let collectArr = []
|
|
|
+ function traverse(node) {
|
|
|
+ if (node.IsCollect === 1) {
|
|
|
+ collectArr.push(node);
|
|
|
+ }
|
|
|
+ if (node.Children && node.Children.length) {
|
|
|
+ node.Children.forEach(child => traverse(child));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ arr.forEach(item => traverse(item));
|
|
|
+
|
|
|
+ return collectArr
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
const listState = reactive({
|
|
|
- listType: '3',
|
|
|
- publishStatus:'',
|
|
|
- MsgIsSend:'',
|
|
|
- timeType: 'publish_time',
|
|
|
- classifyIds: [],
|
|
|
- ClassifyNameFirst:'',
|
|
|
- ClassifyNameSecond:'',
|
|
|
- ClassifyNameThird:'',
|
|
|
- StartDate:'',
|
|
|
- EndDate:'',
|
|
|
+ reportType: 1,
|
|
|
+ classifys: collectClassifyOpts.value.map(_ => _.Id) || [],
|
|
|
+ permissions:[],
|
|
|
+ keyWord:'',
|
|
|
list:[],
|
|
|
page:0,
|
|
|
pageSize:20,
|
|
@@ -69,32 +103,27 @@ const listState = reactive({
|
|
|
loading:false
|
|
|
})
|
|
|
async function getList(){
|
|
|
- const res=await apiReport.getList({
|
|
|
- CurrentIndex:listState.page,
|
|
|
- PageSize:listState.pageSize,
|
|
|
- StartDate:listState.StartDate,
|
|
|
- EndDate:listState.EndDate,
|
|
|
- // ClassifyNameFirst:listState.ClassifyNameFirst,
|
|
|
- // ClassifyNameSecond:listState.ClassifyNameSecond,
|
|
|
- ClassifyIdFirst: listState.classifyIds
|
|
|
- ? listState.classifyIds[0]
|
|
|
- : "",
|
|
|
- ClassifyIdSecond:
|
|
|
- listState.classifyIds &&
|
|
|
- listState.classifyIds.length > 1
|
|
|
- ? listState.classifyIds[1]
|
|
|
- : "",
|
|
|
- ClassifyIdThird:
|
|
|
- listState.classifyIds &&
|
|
|
- listState.classifyIds.length > 2
|
|
|
- ? listState.classifyIds[2]
|
|
|
- : "",
|
|
|
- MsgIsSend:listState.MsgIsSend,
|
|
|
- TimeType:listState.timeType,
|
|
|
- State:listState.publishStatus,
|
|
|
- FilterReportType: listState.listType
|
|
|
- })
|
|
|
- if(res.Ret===200){
|
|
|
+ const res = isRise.value
|
|
|
+ ? await reportExternalInterface.getRiseReportList({
|
|
|
+ Keyword: listState.keyWord,
|
|
|
+ PageSize: listState.pageSize,
|
|
|
+ CurrentIndex: listState.page,
|
|
|
+ ClassifyIdList: listState.classifys.join(','),
|
|
|
+ OrderField: '',
|
|
|
+ OrderType: ''
|
|
|
+ })
|
|
|
+ : await reportExternalInterface.getDocList({
|
|
|
+ DocumentType: isReportWarResearch.value ? 2 : 1,
|
|
|
+ ChartPermissionIdList: listState.permissions.join(','),
|
|
|
+ ClassifyIdList: listState.classifys.join(','),
|
|
|
+ Keyword: listState.keyWord,
|
|
|
+ PageSize: listState.pageSize,
|
|
|
+ CurrentIndex: listState.page,
|
|
|
+ OrderField: '',
|
|
|
+ OrderType: ''
|
|
|
+ })
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
listState.loading=false
|
|
|
if(!res.Data){
|
|
|
listState.finished=true
|
|
@@ -104,7 +133,6 @@ async function getList(){
|
|
|
listState.finished=res.Data.Paging.IsEnd
|
|
|
const arr=res.Data.List||[]
|
|
|
listState.list= listState.page < 2 ? arr : [...listState.list,...arr]
|
|
|
- }
|
|
|
}
|
|
|
function onLoad(){
|
|
|
listState.page++
|
|
@@ -113,61 +141,94 @@ function onLoad(){
|
|
|
function refreshList(){
|
|
|
document.documentElement.scrollTop=0
|
|
|
listState.page=1
|
|
|
- // listState.list=[]
|
|
|
+ listState.list=[]
|
|
|
listState.finished=false
|
|
|
getList()
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-const selectClassifyName = computed(() => {
|
|
|
- return `${listState.ClassifyNameFirst}${listState.ClassifyNameSecond?('/'+listState.ClassifyNameSecond):''}${listState.ClassifyNameThird?('/'+listState.ClassifyNameThird):''}`
|
|
|
-})
|
|
|
-// 分类弹窗
|
|
|
-const showClassify=ref(false)
|
|
|
-// 分类筛选
|
|
|
-function handleConfirmClassify(arr){
|
|
|
- console.log(arr)
|
|
|
- listState.ClassifyNameFirst=arr[0]?.text;
|
|
|
- listState.ClassifyNameSecond=arr[1]?.text;
|
|
|
- listState.ClassifyNameThird=arr[2]?.text;
|
|
|
- listState.classifyIds = arr.map(_=>_.id);
|
|
|
+function handleReportChange() {
|
|
|
+ listState.keyWord = '';
|
|
|
+ listState.classifys = [];
|
|
|
+ listState.permissions = [];
|
|
|
+ showMoreFilter.value = false
|
|
|
refreshList()
|
|
|
- showClassify.value=false
|
|
|
}
|
|
|
|
|
|
|
|
|
-// 跳转详情
|
|
|
-function goDetail(item){
|
|
|
- console.log(item);
|
|
|
- //若没有预览权限,则不跳转
|
|
|
- if(!checkAuthBtn(reportManageBtn.reportManage_reportView)) return
|
|
|
- router.push({
|
|
|
- path:"/report/preview",
|
|
|
- query:{
|
|
|
- id:item.Id
|
|
|
- }
|
|
|
+
|
|
|
+const showMoreFilter=ref(false)
|
|
|
+const permissionDropMenuIns = ref(null)
|
|
|
+function handleShowFilter() {
|
|
|
+ selectPermissionVal.value=_.cloneDeep(listState.permissions)
|
|
|
+ selectClassifyVal.value=_.cloneDeep(listState.classifys)
|
|
|
+ showMoreFilter.value=true
|
|
|
+ nextTick(()=>{
|
|
|
+ setTimeout(() => {
|
|
|
+ permissionDropMenuIns.value?.toggle(true);
|
|
|
+ }, 100);
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+const selectPermissionVal = ref([])
|
|
|
+function handleChangeSelectPermission(item) {
|
|
|
+ selectPermissionVal.value.includes(item.chart_permission_id)
|
|
|
+ ? selectPermissionVal.value.splice(selectPermissionVal.value.findIndex(_ => _===item.chart_permission_id),1)
|
|
|
+ : selectPermissionVal.value.push(item.chart_permission_id)
|
|
|
|
|
|
+ console.log(selectPermissionVal.value)
|
|
|
+}
|
|
|
+function handleConfirmPermission() {
|
|
|
+ listState.permissions = selectPermissionVal.value;
|
|
|
+ refreshList()
|
|
|
+ showMoreFilter.value=false
|
|
|
+}
|
|
|
|
|
|
|
|
|
+const selectClassifyVal = ref([])
|
|
|
+function handleChangeClassify(item) {
|
|
|
+ if(item.Children?.length) {
|
|
|
+ item.isSlide = !item.isSlide
|
|
|
+ }else {
|
|
|
+ selectClassifyVal.value.includes(item.Id)
|
|
|
+ ? selectClassifyVal.value.splice(selectClassifyVal.value.findIndex(_ => _===item.Id),1)
|
|
|
+ : selectClassifyVal.value.push(item.Id)
|
|
|
+ }
|
|
|
+}
|
|
|
+function handleConfirmClassify() {
|
|
|
+ listState.classifys = selectClassifyVal.value;
|
|
|
+ refreshList()
|
|
|
+ showMoreFilter.value=false
|
|
|
+}
|
|
|
+async function handleChangeCollect(item) {
|
|
|
+ const res = await reportExternalInterface.collectClassify({
|
|
|
+ ClassifyId: item.Id
|
|
|
+ })
|
|
|
|
|
|
-async function goSearch(){
|
|
|
- // 删除报告搜索页的缓存
|
|
|
- await cachedViewsStore.removeCaches('ReportSearch')
|
|
|
- router.push('/report/search')
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ showToast('操作成功')
|
|
|
+ item.IsCollect = item.IsCollect?0:1
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
-onMounted(async ()=>{
|
|
|
- getEtaConfig()
|
|
|
- getSystemInfoFun()
|
|
|
-})
|
|
|
+// 跳转详情
|
|
|
+function goDetail(item){
|
|
|
+ console.log(item);
|
|
|
+ if(isRise.value) { //普通报告预览
|
|
|
+ router.push({
|
|
|
+ path:"/report/preview",
|
|
|
+ query:{
|
|
|
+ id:item.Id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }else {
|
|
|
+ router.push({
|
|
|
+ path:"/external_report/preview",
|
|
|
+ query:{
|
|
|
+ id:item.OutsideReportId
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
</script>
|
|
|
|
|
@@ -182,24 +243,29 @@ onMounted(async ()=>{
|
|
|
</span>
|
|
|
<van-icon name="cross" class="close-icon" @click="isClickClose=true"/>
|
|
|
</div>
|
|
|
+
|
|
|
+ <van-tabs
|
|
|
+ v-if="isReportWarResearch"
|
|
|
+ v-model:active="listState.reportType"
|
|
|
+ type="card"
|
|
|
+ sticky
|
|
|
+ border
|
|
|
+ @change="handleReportChange"
|
|
|
+ >
|
|
|
+ <van-tab title="PCI研报" :name="1"/>
|
|
|
+ <van-tab title="睿思研报" :name="2"/>
|
|
|
+ </van-tabs>
|
|
|
+
|
|
|
<div class="top-box">
|
|
|
<van-search
|
|
|
+ v-model="listState.keyWord"
|
|
|
style="flex:1"
|
|
|
shape="round"
|
|
|
- readonly
|
|
|
placeholder="请输入报告标题或创建人"
|
|
|
- @click-input="goSearch"
|
|
|
+ @search="refreshList"
|
|
|
/>
|
|
|
- <div :class="['menu-icon',showClassify||listState.ClassifyNameSecond?'active':'']" @click="showClassify=true">
|
|
|
- <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
- <path d="M33.75 5.25C38.7206 5.25 42.75 9.27944 42.75 14.25C42.75 19.2206 38.7206 23.25 33.75 23.25C28.7794 23.25 24.75 19.2206 24.75 14.25C24.75 9.27944 28.7794 5.25 33.75 5.25ZM27.75 14.25C27.75 17.5637 30.4363 20.25 33.75 20.25C37.0637 20.25 39.75 17.5637 39.75 14.25C39.75 10.9363 37.0637 8.25 33.75 8.25C30.4363 8.25 27.75 10.9363 27.75 14.25Z" fill="currentColor"/>
|
|
|
- <path d="M6 9C6 7.34315 7.34315 6 9 6H19.5C21.1569 6 22.5 7.34315 22.5 9V19.5C22.5 21.1569 21.1569 22.5 19.5 22.5H9C7.34315 22.5 6 21.1569 6 19.5V9ZM9 9V19.5H19.5V9H9Z" fill="currentColor"/>
|
|
|
- <path d="M6 28.5C6 26.8431 7.34315 25.5 9 25.5H19.5C21.1569 25.5 22.5 26.8431 22.5 28.5V39C22.5 40.6569 21.1569 42 19.5 42H9C7.34315 42 6 40.6569 6 39V28.5ZM9 28.5V39H19.5V28.5H9Z" fill="currentColor"/>
|
|
|
- <path d="M25.5 28.5C25.5 26.8431 26.8431 25.5 28.5 25.5H39C40.6569 25.5 42 26.8431 42 28.5V39C42 40.6569 40.6569 42 39 42H28.5C26.8431 42 25.5 40.6569 25.5 39V28.5ZM28.5 39H39V28.5H28.5V39Z" fill="currentColor"/>
|
|
|
- </svg>
|
|
|
- </div>
|
|
|
|
|
|
- <div
|
|
|
+ <div
|
|
|
:class="['menu-icon',{
|
|
|
'active': listState.MsgIsSend||listState.publishStatus
|
|
|
}]"
|
|
@@ -211,7 +277,168 @@ onMounted(async ()=>{
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <div class="classify-name" v-if="listState.classifyIds&&listState.classifyIds.length">{{ selectClassifyName }}</div>
|
|
|
+ <template v-if="showMoreFilter">
|
|
|
+ <van-dropdown-menu :close-on-click-overlay="false" :close-on-click-outside="false">
|
|
|
+ <van-dropdown-item title="品种标签" ref="permissionDropMenuIns">
|
|
|
+ <div class="drop-opt-box">
|
|
|
+ <ul class="list">
|
|
|
+ <li
|
|
|
+ :class="['item',selectPermissionVal.includes(item.chart_permission_id)?'active':'']"
|
|
|
+ v-for="item in permissionOptions"
|
|
|
+ :key="item.chart_permission_id"
|
|
|
+ @click="item.isSlide = !item.isSlide"
|
|
|
+ >
|
|
|
+ <div class="list-top">
|
|
|
+ <h4>{{item.chart_permission_name}}</h4>
|
|
|
+ <van-icon
|
|
|
+ v-if="item.Children"
|
|
|
+ :name="item.isSlide?'arrow-up':'arrow-down'"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <ul class="sub-list" v-if="item.Children&&item.isSlide">
|
|
|
+ <li
|
|
|
+ :class="['sub-item',{'active':selectPermissionVal.includes(subItem.chart_permission_id)}]"
|
|
|
+ v-for="subItem in item.Children"
|
|
|
+ :key="subItem.chart_permission_id"
|
|
|
+ @click.stop="handleChangeSelectPermission(subItem)"
|
|
|
+ >{{subItem.chart_permission_name}}</li>
|
|
|
+ </ul>
|
|
|
+ </li>
|
|
|
+ <li class="item" style="height:0"></li>
|
|
|
+ </ul>
|
|
|
+ <div class="bot-btn-box">
|
|
|
+ <div class="btn cancel-btn" @click="showMoreFilter=false">取消</div>
|
|
|
+ <div class="btn confirm-btn" @click="handleConfirmPermission">确定</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </van-dropdown-item>
|
|
|
+ <van-dropdown-item title="全部分类" ref="clasifyDropMenuIns">
|
|
|
+ <div class="drop-opt-box classify-box">
|
|
|
+ <ul class="list">
|
|
|
+ <li
|
|
|
+ :class="['item',
|
|
|
+ {'active':selectClassifyVal.includes(item.Id)},
|
|
|
+ ]"
|
|
|
+ v-for="item in classifyOptions"
|
|
|
+ :key="item.Id"
|
|
|
+ @click="handleChangeClassify(item)"
|
|
|
+ >
|
|
|
+ <div class="list-top">
|
|
|
+ <h4>{{item.ClassifyName}}</h4>
|
|
|
+ <van-icon
|
|
|
+ v-if="item.Children"
|
|
|
+ :name="item.isSlide?'arrow-up':'arrow-down'"
|
|
|
+ />
|
|
|
+
|
|
|
+ <svg-icon
|
|
|
+ v-else-if="!item.Children&&isReportWarResearch"
|
|
|
+ :name="item.IsCollect?'collect_ico':'cancel_collect_ico'"
|
|
|
+ size="20px"
|
|
|
+ @click.stop="handleChangeCollect(item)"
|
|
|
+ />
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <ul class="classify-sub-list" v-if="item.Children&&item.isSlide">
|
|
|
+ <li
|
|
|
+ :class="['sub-item',
|
|
|
+ {'active':selectClassifyVal.includes(subItem.Id)}
|
|
|
+ ]"
|
|
|
+ v-for="subItem in item.Children"
|
|
|
+ :key="subItem.Id"
|
|
|
+ @click.stop="handleChangeClassify(subItem)"
|
|
|
+ >
|
|
|
+
|
|
|
+ <div class="list-top">
|
|
|
+ <span>{{subItem.ClassifyName}}</span>
|
|
|
+ <van-icon
|
|
|
+ v-if="subItem.Children"
|
|
|
+ :name="subItem.isSlide?'arrow-up':'arrow-down'"
|
|
|
+ />
|
|
|
+
|
|
|
+ <svg-icon
|
|
|
+ v-else-if="!subItem.Children&&isReportWarResearch"
|
|
|
+ :name="subItem.IsCollect?'collect_ico':'cancel_collect_ico'"
|
|
|
+ size="20px"
|
|
|
+ @click.stop="handleChangeCollect(subItem)"
|
|
|
+ />
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <ul class="classify-sub-list" v-if="subItem.Children&&subItem.isSlide">
|
|
|
+ <li
|
|
|
+ :class="['sub-item',
|
|
|
+ {'active':selectClassifyVal.includes(thirdItem.Id)}
|
|
|
+ ]"
|
|
|
+ v-for="thirdItem in subItem.Children"
|
|
|
+ :key="thirdItem.Id"
|
|
|
+ @click.stop="handleChangeClassify(thirdItem)"
|
|
|
+ >
|
|
|
+
|
|
|
+ <div class="list-top">
|
|
|
+ <span>{{thirdItem.ClassifyName}}</span>
|
|
|
+ <van-icon
|
|
|
+ v-if="thirdItem.Children"
|
|
|
+ :name="thirdItem.isSlide?'arrow-up':'arrow-down'"
|
|
|
+ />
|
|
|
+
|
|
|
+ <svg-icon
|
|
|
+ v-else-if="!thirdItem.Children&&isReportWarResearch"
|
|
|
+ :name="thirdItem.IsCollect?'collect_ico':'cancel_collect_ico'"
|
|
|
+ size="20px"
|
|
|
+ @click.stop="handleChangeCollect(thirdItem)"
|
|
|
+ />
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+
|
|
|
+ <div class="bot-btn-box">
|
|
|
+ <div class="btn cancel-btn" @click="showMoreFilter=false">取消</div>
|
|
|
+ <div class="btn confirm-btn" @click="handleConfirmClassify">确定</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </van-dropdown-item>
|
|
|
+ <van-dropdown-item title="收藏分类" ref="collectDropMenuIns" v-if="isReportWarResearch">
|
|
|
+ <div class="drop-opt-box classify-box">
|
|
|
+ <ul class="list" v-if="collectClassifyOpts.length">
|
|
|
+ <li
|
|
|
+ :class="['item',
|
|
|
+ {'active':selectClassifyVal.includes(item.Id)},
|
|
|
+ ]"
|
|
|
+ v-for="item in collectClassifyOpts"
|
|
|
+ :key="item.Id"
|
|
|
+ @click="handleChangeClassify(item)"
|
|
|
+ >
|
|
|
+ <div class="list-top">
|
|
|
+ <h4>{{item.ClassifyName}}</h4>
|
|
|
+
|
|
|
+ <svg-icon
|
|
|
+ :name="item.IsCollect?'collect_ico':'cancel_collect_ico'"
|
|
|
+ size="20px"
|
|
|
+ @click.stop="handleChangeCollect(item)"
|
|
|
+ />
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+
|
|
|
+ <div class="no-list" v-else>
|
|
|
+ 暂无收藏
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="bot-btn-box">
|
|
|
+ <div class="btn cancel-btn" @click="showMoreFilter=false">取消</div>
|
|
|
+ <div class="btn confirm-btn" @click="handleConfirmPermission">确定</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </van-dropdown-item>
|
|
|
+ </van-dropdown-menu>
|
|
|
+ </template>
|
|
|
+
|
|
|
</div>
|
|
|
<van-list
|
|
|
v-model:loading="listState.loading"
|
|
@@ -229,56 +456,20 @@ onMounted(async ()=>{
|
|
|
@click="goDetail(item)"
|
|
|
>
|
|
|
<div class="list-top">
|
|
|
- <h2 class="van-ellipsis title">
|
|
|
- <span :class="['tag',item.ChapterType]">{{['周报','晨报'].includes(item.ClassifyNameFirst)?item.ClassifyNameFirst:'研报'}}</span>
|
|
|
- {{item.Title}}
|
|
|
- <span v-if="item.CreateTime">({{item.CreateTime.substring(5,7)}}{{item.CreateTime.substring(8,10)}})</span>
|
|
|
- </h2>
|
|
|
- <div class="status">
|
|
|
- <van-tag
|
|
|
- type="primary"
|
|
|
- size="large"
|
|
|
- :color="statusMap.get(item.State).bg"
|
|
|
- :text-color="statusMap.get(item.State).color"
|
|
|
- >{{statusMap.get(item.State).msg}}</van-tag>
|
|
|
- </div>
|
|
|
+ <h2 class="van-ellipsis title">{{item.Title}}</h2>
|
|
|
</div>
|
|
|
<p class="van-multi-ellipsis--l2 des">{{item.Abstract}}</p>
|
|
|
<div class="bot-info">
|
|
|
<div class="time">
|
|
|
<span style="margin-right:2px">{{moment(item.ModifyTime).format('YYYY-MM-DD')}}</span>
|
|
|
- <svg v-if="item.PrePublishTime&&item.State==1" style="width:14px;height:14px;position: relative;top:2px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" fill="none">
|
|
|
- <path d="M13.0357 6.28571V14.7501L17.8576 19.7857L19.2213 18.422L14.9643 13.9512V6.28571H13.0357Z" fill="#0052D9"/>
|
|
|
- <path d="M27.5 14C27.5 21.4558 21.4558 27.5 14 27.5C6.54416 27.5 0.5 21.4558 0.5 14C0.5 6.54416 6.54416 0.5 14 0.5C21.4558 0.5 27.5 6.54416 27.5 14ZM25.5714 14C25.5714 7.60928 20.3907 2.42857 14 2.42857C7.60928 2.42857 2.42857 7.60928 2.42857 14C2.42857 20.3907 7.60928 25.5714 14 25.5714C20.3907 25.5714 25.5714 20.3907 25.5714 14Z" fill="#0052D9"/>
|
|
|
- </svg>
|
|
|
- <span style="margin-left:10px">{{item.AdminRealName}}</span>
|
|
|
- </div>
|
|
|
- <div class="read-count">
|
|
|
- <span>PV:{{item.Pv}}</span>
|
|
|
- <span v-permission="reportManageBtn.reportManage_reportList_uv">UV:{{item.Uv}}</span>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="handle-icon" @click.stop="handleOptReportItem(item)">
|
|
|
- <svg width="24" height="24" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
- <path d="M16 8C17.1045 8 18 7.10455 18 6C18 4.89545 17.1045 4 16 4C14.8955 4 14 4.89545 14 6C14 7.10455 14.8955 8 16 8Z" fill="black" fill-opacity="0.9"/>
|
|
|
- <path d="M16 18C17.1045 18 18 17.1046 18 16C18 14.8954 17.1045 14 16 14C14.8955 14 14 14.8954 14 16C14 17.1046 14.8955 18 16 18Z" fill="black" fill-opacity="0.9"/>
|
|
|
- <path d="M18 26C18 24.8954 17.1045 24 16 24C14.8955 24 14 24.8954 14 26C14 27.1046 14.8955 28 16 28C17.1045 28 18 27.1046 18 26Z" fill="black" fill-opacity="0.9"/>
|
|
|
- </svg>
|
|
|
-
|
|
|
</div>
|
|
|
+ <span style="margin-left:10px">{{item.SysUserName}}</span>
|
|
|
</div>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</van-list>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 添加报告按钮 -->
|
|
|
- <div class="add-report-btn" @click="handeAddReport" v-if="isAddReportBtnShow">
|
|
|
- <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
- <path d="M12.0499 15.9499V27.5H15.9499V15.9499H27.5V12.0499H15.9499V0.5H12.0499V12.0499H0.5V15.9499H12.0499Z" fill="white"/>
|
|
|
- </svg>
|
|
|
- </div>
|
|
|
-
|
|
|
</template>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
@@ -292,6 +483,12 @@ onMounted(async ()=>{
|
|
|
box-shadow: none;
|
|
|
border-bottom: 1px solid $border-color;
|
|
|
}
|
|
|
+ :deep(.van-tabs) {
|
|
|
+ padding-top: 20px;
|
|
|
+ }
|
|
|
+ :deep(.van-tabs__nav--card) {
|
|
|
+ height: 70px;
|
|
|
+ }
|
|
|
.bot-btn-box{
|
|
|
border-top: 1px solid $border-color;
|
|
|
padding: 32px;
|
|
@@ -316,47 +513,7 @@ onMounted(async ()=>{
|
|
|
color: #fff;
|
|
|
}
|
|
|
}
|
|
|
- .frequency-opt-box{
|
|
|
- ul{
|
|
|
- display: flex;
|
|
|
- flex-wrap: wrap;
|
|
|
- padding: 32px;
|
|
|
- }
|
|
|
- .item{
|
|
|
- width: 200px;
|
|
|
- height: 80px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- color: rgba(0, 0, 0, 0.9);
|
|
|
- margin-left: 12px;
|
|
|
- margin-right: 12px;
|
|
|
- margin-bottom: 24px;
|
|
|
- background-color: #F3F3F3;
|
|
|
- border-radius: 12px;
|
|
|
- }
|
|
|
- .item-active{
|
|
|
- background-color: #F2F3FF;
|
|
|
- color: $theme-color;
|
|
|
- }
|
|
|
- }
|
|
|
- .report-status-box{
|
|
|
- ul{
|
|
|
- padding: 32px;
|
|
|
- }
|
|
|
-
|
|
|
- .status-item{
|
|
|
- line-height: 80px;
|
|
|
- border-radius: 12px;
|
|
|
- background-color: #F3F3F3;
|
|
|
- text-align: center;
|
|
|
- margin-bottom: 24px;
|
|
|
- &.active{
|
|
|
- background-color: #F2F3FF;
|
|
|
- color: $theme-color;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
.clear-filter-box{
|
|
|
padding: 0 34px;
|
|
|
height: 84px;
|
|
@@ -479,87 +636,58 @@ onMounted(async ()=>{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.classify-name {
|
|
|
- padding: 30px 34px;
|
|
|
- color: #666;
|
|
|
-}
|
|
|
-
|
|
|
-.report-item-action-box{
|
|
|
- .title{
|
|
|
- padding: 30px 32px;
|
|
|
- font-weight: 700;
|
|
|
- text-align: center;
|
|
|
- background: #eee;
|
|
|
- }
|
|
|
- .item{
|
|
|
- text-align: center;
|
|
|
- line-height: 48PX;
|
|
|
- font-size: 32px;
|
|
|
- border-top: 1px solid $border-color;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.calendar-box{
|
|
|
- :deep(.van-calendar__header-title){
|
|
|
- height: auto;
|
|
|
- min-height: var(--van-calendar-header-title-height);
|
|
|
+.drop-opt-box {
|
|
|
+ /* padding: 0 30px; */
|
|
|
+ .list {
|
|
|
+ padding: 0 40px;
|
|
|
+ max-height: 40vh;
|
|
|
+ overflow: auto;
|
|
|
}
|
|
|
- :deep(.van-calendar__header){
|
|
|
- box-shadow: none;
|
|
|
+ .list-top {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin: 40px 0;
|
|
|
+ h4 {
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
}
|
|
|
- .time-type-box{
|
|
|
- font-weight: normal;
|
|
|
- text-align: left;
|
|
|
- padding-left: 32px;
|
|
|
- box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.08);
|
|
|
- .item{
|
|
|
- display: inline-block;
|
|
|
- margin-right: 40px;
|
|
|
- color: $font-grey;
|
|
|
- position: relative;
|
|
|
- &.active{
|
|
|
- color: #333;
|
|
|
- &::after{
|
|
|
- content: '';
|
|
|
- width: 30PX;
|
|
|
- height: 4PX;
|
|
|
- background-color: $theme-color;
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- left: 50%;
|
|
|
- border-radius: 2px;
|
|
|
- transform: translateX(-50%);
|
|
|
- }
|
|
|
+ .sub-list {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 20px;
|
|
|
+ .sub-item {
|
|
|
+ padding: 6px 20px;
|
|
|
+ background-color: #F8F8FA;
|
|
|
+ &.active {
|
|
|
+ color: $theme-color;
|
|
|
+ background-color: #F2F3FF;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-.upload-audio-wrap{
|
|
|
- height: 100%;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
- padding: $page-padding;
|
|
|
- p{
|
|
|
- color: rgba(0, 0, 0, 0.6);
|
|
|
- padding-bottom: 32px;
|
|
|
- border-bottom: 1px solid $border-color;
|
|
|
- margin-bottom: 32px;
|
|
|
- word-wrap: break-word;
|
|
|
+.classify-box {
|
|
|
+ .classify-sub-list {
|
|
|
+ .sub-item {
|
|
|
+ margin-left: 20px;
|
|
|
+ }
|
|
|
}
|
|
|
- .bot-btns{
|
|
|
- // width: 100%;
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- padding: 20px 0;
|
|
|
- text-align: center;
|
|
|
- .bot-btn{
|
|
|
- width: 315px;
|
|
|
- margin: 0 10px;
|
|
|
+ .active {
|
|
|
+ color: $theme-color;
|
|
|
+ position: relative;
|
|
|
+ &::after {
|
|
|
+ content: '√';
|
|
|
+ position: absolute;
|
|
|
+ left: -22px;
|
|
|
+ top: 0;
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
+ .no-list {
|
|
|
+ text-align: center;
|
|
|
+ padding: 50px 0;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
@media screen and (min-width:$media-width){
|
|
|
.sticky-box{
|
|
@@ -575,29 +703,6 @@ onMounted(async ()=>{
|
|
|
margin-left: 20px;
|
|
|
}
|
|
|
}
|
|
|
- .frequency-opt-box{
|
|
|
- ul{
|
|
|
- padding: 32px;
|
|
|
- }
|
|
|
- .item{
|
|
|
- width: 100px;
|
|
|
- height: 40px;
|
|
|
- margin-left: 6px;
|
|
|
- margin-right: 6px;
|
|
|
- margin-bottom: 12px;
|
|
|
- border-radius: 6px;
|
|
|
- }
|
|
|
- }
|
|
|
- .report-status-box{
|
|
|
- ul{
|
|
|
- padding: 32px;
|
|
|
- }
|
|
|
- .status-item{
|
|
|
- line-height: 40px;
|
|
|
- border-radius: 6px;
|
|
|
- margin-bottom: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
.clear-filter-box{
|
|
|
padding: 0 17px;
|
|
|
height: 42px;
|
|
@@ -610,6 +715,11 @@ onMounted(async ()=>{
|
|
|
right: 17px;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ :deep(.van-tabs__nav--card) {
|
|
|
+ height: 40px;
|
|
|
+ }
|
|
|
}
|
|
|
.top-box{
|
|
|
padding: 15px;
|
|
@@ -655,6 +765,37 @@ onMounted(async ()=>{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ .drop-opt-box {
|
|
|
+ /* padding: 0 30px; */
|
|
|
+ .list {
|
|
|
+ padding: 0 40px;
|
|
|
+ max-height: 40vh;
|
|
|
+ overflow: auto;
|
|
|
+ }
|
|
|
+ .list-top {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin: 40px 0;
|
|
|
+ h4 {
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .sub-list {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 20px;
|
|
|
+ .sub-item {
|
|
|
+ padding: 6px 20px;
|
|
|
+ background-color: #F8F8FA;
|
|
|
+ &.active {
|
|
|
+ color: $theme-color;
|
|
|
+ background-color: #F2F3FF;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
.bot-btns{
|
|
|
bottom: 24px;
|
|
|
}
|