Karsa 6 月之前
父節點
當前提交
264e524e05

+ 3 - 2
src/views/report/List.vue

@@ -247,9 +247,9 @@ function downloadPdfImg(item,type){
     let name = `${item.Title}${moment().format('YYYYMMDD')}`
     if(type == 1){
         // window.open(item.DetailPdfUrl,"_blank")
-        startDownload(item.DetailPdfUrl,name)
+        startDownload(item.DetailPdfUrl,`${name}.pdf`)
     }else{
-        startDownload(item.DetailImgUrl,name)
+        startDownload(item.DetailImgUrl,`${name}.jpeg`)
     }
 }
 
@@ -720,6 +720,7 @@ onMounted(async ()=>{
                 @click="handleDownloadAudio(activeItem)">音频下载</div>
 
         </div>
+        
     </van-action-sheet>
 
     <!-- 分类弹窗 -->

+ 1 - 0
src/views/report/Search.vue

@@ -85,6 +85,7 @@ function goDetail(item){
                     v-model:active="listState.listType" 
                     title-active-color="#0052D9" 
                     title-inactive-color="#333"
+                    @change="handleSearch"
                 >
                     <van-tab 
                         :title="tab.label" 

+ 2 - 2
src/views/report/chapter/List.vue

@@ -752,7 +752,7 @@ async function handleConfirmSetLayout() {
 
     <!-- 海报dom模块 -->
         <div v-if="chapterItemPosterInfo" class="select-text-disabled chapter-poster-box" id="chapter-poster-box">
-            <img class="bg" :src="chapterItemPosterInfo.TypeEditImg" alt="">
+            <!-- <img class="bg" :src="chapterItemPosterInfo.TypeEditImg" alt=""> -->
             <h2 class="title">【第{{reportInfo.Stage}}期|{{reportInfo.ClassifyNameFirst}}|{{chapterItemPosterInfo.TypeName}}】{{chapterItemPosterInfo.Title}}</h2>
             <img class="code-img" :src="chapterItemPosterInfo.QRCodeImg" alt="">
             <p class="tips">长按保存图片,发送给好友</p>
@@ -883,7 +883,7 @@ async function handleConfirmSetLayout() {
     z-index: -100;
     width: 300PX;
     border-radius: 6PX;
-    padding: 10PX;
+    padding: 20PX;
     background-color: #fff;
     .bg{
         width: 280PX;

+ 12 - 4
src/views/report/components/AddReportBaseInfoV2.vue

@@ -221,7 +221,9 @@ const isChooseCooperaUserPop = ref(false)
 function handleShowCooperUser() {
   isChooseCooperaUserPop.value = true
 }
-function handleConfirmCooperaUser() {
+function handleConfirmCooperaUser(e) {
+  reportBaseInfo.cooperationUsers = e;
+  
   isChooseCooperaUserPop.value = false
 }
 
@@ -492,10 +494,16 @@ async function handleSave() {
   <!-- 协作人弹窗 -->
   <van-popup 
       v-model:show="isChooseCooperaUserPop"
-      :position="width>650?'center':'bottom'"
-      :style="width>650?{ width: '400px'}:''"
+      position="bottom"
+      :style="{height: '100%'}"
   >
-      <CooperUserSelect @close="isChooseCooperaUserPop=false" @confirm="handleConfirmCooperaUser"/>
+      <!-- :position="width>650?'center':'bottom'" -->
+      <CooperUserSelect
+        v-if="isChooseCooperaUserPop"
+        :defaultVal="reportBaseInfo.cooperationUsers"
+        @close="isChooseCooperaUserPop=false" 
+        @confirm="handleConfirmCooperaUser"
+      />
   </van-popup>
 </template>
 <style scoped lang="scss">

+ 81 - 40
src/views/report/components/CooperUserSelect.vue

@@ -1,27 +1,54 @@
 <script setup>
 import { ref } from 'vue'
 import apiReport from '@/api/report'
+import _ from 'lodash'
 
 const props = defineProps({
   defaultVal: null
 })
 const emit = defineEmits(['close',' confirm'])
 
-const activeId = ref(0)
+
+const activeUser = ref(props.defaultVal?props.defaultVal.map(_ => _.NodeId):[])
 const list = ref([])
+const userOpts = ref([])
+const keyWord = ref([])
 async function getUser() {
   const res = await apiReport.getSystemUser({
     KeyWord: ''
   })
   
   if(res.Ret !== 200) return 
-  list.value = res.Data || [];
+//   list.value = res.Data || [];
+    
+  list.value = filterTreeEmpty({Children:res.Data||[]})
+	userOpts.value =  _.cloneDeep(list.value);
 
 }
 getUser()
 
-function onFinish() {
+// 递归处理数组
+function filterTreeEmpty(arr) {
+    let users = []
+    function dfs(node) {
+        if (Array.isArray(node.Children)) {
+            for (let child of node.Children) {
+                dfs(child);
+            }
+            if(node.Children.length===0) delete node.Children
+        }
+        //若为叶子节点,且不为用户,禁止选中
+        if(!node.Children||!Array.isArray(node.Children)){
+            if(node.NodeType===3) users.push(node)
+        }
+    }
+    dfs(arr);
 
+    return users
+}
+
+function handleSearch() {
+	userOpts.value = list.value.filter(_ => _.NodeName.startsWith(keyWord.value))
 }
 
 function handleCancle() {
@@ -29,58 +56,72 @@ function handleCancle() {
 }
 function handleConfirm() {
 
+	let selectUsers = list.value.filter(_ => activeUser.value.includes(_.NodeId));
+	emit('confirm',selectUsers)
 }
 </script>
 <template>
   <div class="choose-user-wrap">
-      <div class="top-box">
-          <span style="color:#666666" @click="handleCancle">取消</span>
-          <span style="font-size:18px;font-weight:bold">选择协作人</span>
-          <span style="color:#0052D9" @click="handleConfirm">确定</span>
-      </div>
+		<div class="top-box">
+			<van-search 
+					shape="round"
+					placeholder="请输入用户"
+					v-model="keyWord"
+					@search="handleSearch"
+			/>
+		</div>	
 
-      <van-search 
-          shape="round"
-          placeholder="请输入用户"
-          v-model="keyword"
-          @search="handleSearch"
-      />
+		<van-checkbox-group v-model="activeUser">
+				<van-checkbox
+						v-for="item in userOpts"
+						:key="item.NodeId"
+						:name="item.NodeId"
+				>{{item.NodeName}}</van-checkbox>
+		</van-checkbox-group>
 
-      <van-cascader
-          v-model="activeId"
-          :show-header="false"
-          :closeable="false"
-          :options="list"
-          :field-names="{
-              text: 'NodeName',
-              value: 'NodeId',
-              children: 'Children'
-          }"
-          @finish="onFinish"
-      />
+    <div class="bot-btns">
+        <van-button class="bot-btn" type="default" @click="handleCancle">取消</van-button>
+        <van-button class="bot-btn" type="primary" @click="handleConfirm">确定</van-button>
+    </div>
       
   </div>
 </template>
 <style scoped lang="scss">
 .choose-user-wrap{
-    .top-box{
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        height: 116px;
-        border-bottom: 1px solid $border-color;
-        padding: 0 34px;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+		.top-box{
+				position: sticky;
+        top: 0;
+        z-index: 99;
+        background-color: #fff;
+    }
+		.van-checkbox-group{
+				padding: $page-padding;
+				flex: 1;
+				overflow-y: auto;
+				.van-checkbox{
+						:deep(.van-checkbox__label){
+								padding: 32px 0;
+								flex: 1;
+								border-bottom: 1px solid $border-color;
+						}
+				}
+		}
+    
+    .bot-btns{
+			flex-shrink: 0;
+			padding: 20px 0;
+			text-align: center;
+			.bot-btn {
+				width: 315px;
+    		margin: 0 10px;
+			}
     }
-}
-.van-cascader {
-    width: 100%;
 }
 @media screen and (min-width:$media-width){
     .choose-user-wrap{
-        .top-box{
-            height: 50px;
-            padding: 0 16px;
-        }
     }
 }
 </style>

+ 2 - 1
src/views/report/components/ListClassify.vue

@@ -1,6 +1,7 @@
 <script setup>
 import {ref} from 'vue'
 import apiReport from '@/api/report'
+import { showToast } from 'vant'
 
 const props=defineProps({
     defaultVal:null,
@@ -55,7 +56,7 @@ function onFinish(e) {
 }
 
 function handleConfirm(){
-
+    if(selectClassify.value.length===0) return showToast('请选择最小级分类')
     emits('confirm',selectClassify.value)
 }
 </script>

+ 3 - 3
src/views/report/hooks/useReport.js

@@ -214,7 +214,7 @@ export function useReportHandles() {
 								ReportId:reportInfo.Id,
 								PrePublishTime:time,
 								PreMsgSend:0,
-								ReportUrl:generatePdfLinks()
+								ReportUrl:generatePdfLinks(reportInfo)
 						}).then(res=>{
 								if(res.Ret===200){
 										showToast('定时发布成功!')
@@ -230,7 +230,7 @@ export function useReportHandles() {
 						ReportId:reportInfo.Id,
 						PrePublishTime:time,
 						PreMsgSend:1,
-						ReportUrl:generatePdfLinks()
+						ReportUrl:generatePdfLinks(reportInfo)
 				}).then(res=>{
 						if(res.Ret===200){
 								showToast('定时发布成功!')
@@ -246,7 +246,7 @@ export function useReportHandles() {
 						ReportId:reportInfo.Id,
 						PrePublishTime:time,
 						PreMsgSend:0,
-						ReportUrl:generatePdfLinks()
+						ReportUrl:generatePdfLinks(reportInfo)
 				}).then(res=>{
 						if(res.Ret===200){
 								showToast('定时发布成功!')

+ 14 - 13
src/views/report/smartReport/EditReport.vue

@@ -834,6 +834,20 @@ const {
 
       <div class="report-content-box" id="report-content-box" >
 
+          <!-- 版头 -->
+          <div class="html-head-img-box">
+              <div class="opt-btn-box"  style="display: none;">
+									<van-icon name="delete-o" @click.stop="deleteLayoutPic(1)" color="#f00" size="22"/>
+              </div>
+              <img :src="headImg" alt="" style="display:block;width:100%">
+              <div class="head-layout-item" v-for="item in headImgStyle" :key="item.value"
+              :style="{fontFamily:item.family,fontSize:(item.size*2)+'px',fontWeight:item.weight,textAlign:item.align,color:item.color,
+                  width:item.width,height:item.height,left:item.left,top:item.top
+              }">
+                  {{ layoutBaseInfo[item.value] }}
+              </div>
+          </div>
+
 					<div class="add-comp-wrapper">
 						<van-popover v-model:show="showPopover">
 							<van-grid
@@ -857,19 +871,6 @@ const {
 						</van-popover>
 					</div>
 
-          <!-- 版头 -->
-          <div class="html-head-img-box">
-              <div class="opt-btn-box"  style="display: none;">
-									<van-icon name="delete-o" @click.stop="deleteLayoutPic(1)" color="#f00" size="22"/>
-              </div>
-              <img :src="headImg" alt="" style="display:block;width:100%">
-              <div class="head-layout-item" v-for="item in headImgStyle" :key="item.value"
-              :style="{fontFamily:item.family,fontSize:(item.size*2)+'px',fontWeight:item.weight,textAlign:item.align,color:item.color,
-                  width:item.width,height:item.height,left:item.left,top:item.top
-              }">
-                  {{ layoutBaseInfo[item.value] }}
-              </div>
-          </div>
           <draggable
               :list="conList"
 							item-key="id"