jwyu 1 år sedan
förälder
incheckning
8898bd29ac

+ 8 - 3
src/api/modules/smartReport.js

@@ -5,7 +5,7 @@ import http from "@/api/http.js"
 const apiSmartReport={
     //报告列表
     reportList:params=>{
-        return http.get('/report/list',params)
+        return http.get('/smart_report/list',params)
     },
 
     //分类数据
@@ -35,12 +35,17 @@ const apiSmartReport={
 
     //新增报告
     reportAdd:params=>{
-        return http.post('/report/add',params)
+        return http.post('/smart_report/add',params)
     },
 
     //编辑报告
     reportEdit:params=>{
-        return http.post('/report/edit',params)
+        return http.post('/smart_report/edit',params)
+    },
+
+    //报告详情
+    reportDetail:params=>{
+        return http.get('/smart_report/detail',params)
     }
 
 

+ 47 - 5
src/views/smartReport/components/BaseInfo.vue

@@ -17,7 +17,7 @@
             class="baseinfo-form-wrap"
         >  
             <el-form-item prop="type">
-                <el-radio-group v-model="formData.type">
+                <el-radio-group v-model="formData.type" :disabled="id">
                     <el-radio :label="1">新增报告</el-radio>
                     <el-radio :label="2">继承报告</el-radio>
                 </el-radio-group>
@@ -118,6 +118,22 @@ export default {
                 this.formData.author=[]
                 this.formData.frequency=''
                 this.formData.time=this.$moment().format('YYYY-MM-DD')
+            }else{
+                if(this.id){
+                    apiSmartReport.reportDetail({
+                        SmartReportId:Number(this.id)
+                    }).then(res=>{
+                        if(res.Ret===200){
+                            this.formData.type=res.Data.AddType
+                            this.formData.classify=[res.Data.ClassifyIdFirst,res.Data.ClassifyIdSecond]
+                            this.formData.title=res.Data.Title
+                            this.formData.abstract=res.Data.Abstract
+                            this.formData.author=res.Data.Author ? res.Data.Author.split(',') : []
+                            this.formData.frequency=res.Data.Frequency
+                            this.formData.time=res.Data.CreateTime
+                        }
+                    })
+                }
             }
         }  
     },
@@ -150,11 +166,12 @@ export default {
         handleConfirm(){
             this.$refs.baseinfoForm.validate((valid)=>{
                 if(valid){
+
                     const params={
                         AddType: this.formData.type,
-                        ClassifyIdFirst: '',
+                        ClassifyIdFirst: this.formData.classify[0]?this.formData.classify[0]:0,
                         ClassifyNameFirst: '',
-                        ClassifyIdSecond:'',
+                        ClassifyIdSecond:this.formData.classify[1]?this.formData.classify[1]:0,
                         ClassifyNameSecond:'',
                         Title: this.formData.title,
                         Abstract: this.formData.abstract,
@@ -163,10 +180,35 @@ export default {
                                 ? this.formData.author.join(',')
                                 : '',
                         Frequency: this.formData.frequency,
-                        Content: '',
                         CreateTime: this.formData.time,
-                        ReportVersion: 2
                     }
+                    this.classifyArr.forEach(item=>{
+                        if(item.value===params.ClassifyIdFirst){
+                            params.ClassifyNameFirst=item.label
+                            const arr=item.children||[]
+                            arr.forEach(_item=>{
+                                if(_item.value===params.ClassifyIdSecond){
+                                    params.ClassifyNameSecond=_item.label
+                                }
+                            })
+                        }
+                    })
+                    // 编辑
+                    if(this.id){
+                        this.$emit('save',params)
+                        return
+                    }
+                    apiSmartReport.reportAdd(params).then(res=>{
+                        if(res.Ret===200){
+                            this.handleClose()
+                            let { href } = this.$router.resolve({
+                                path: "/smartReportEdit",
+                                query: { id: res.Data.SmartReportId },
+                            });
+                            window.open(href, "_blank");
+                        }
+                    })
+
                 }
             })
         },

+ 30 - 115
src/views/smartReport/components/ETAChart.vue

@@ -5,105 +5,49 @@
                 <span :class="['item',activeType==='ETA图库'?'active':'']" @click="activeTypeChange('ETA图库')">ETA图库</span>
                 <span :class="['item',activeType==='MyETA'?'active':'']" @click="activeTypeChange('MyETA')">MyETA</span>
             </div>
+            <div class="right">
+                <el-input
+                    class="search-box"
+					placeholder="图表名称"
+					v-model="keyword"
+					size="medium"
+					prefix-icon="el-icon-search"
+                    v-if="activeType==='ETA图库'"
+                    @input="handleETAChartSearch"
+				/>
+            </div>
         </div>
-        <div class="main-box" v-infinite-scroll="handleLoadMore" :infinite-scroll-immediate="false">
-            <el-checkbox
-                class="onlyshowme-box"
-                v-model="isShowMe" 
-                @change="handleIsShowMeChange"
-                v-if="activeType==='ETA图库'"
-            >只看我的</el-checkbox>
-            <draggable
-                v-if="activeType==='ETA图库'"
-                :list="list"
-                :group="{ name: 'component', pull: activeType==='ETA图库'?'clone':false, put: false }"
-                class="chart-list-box"
-                animation="300"
-                :sort="false"
-                dragClass="drag-box"
-                tag="div"
-            >
-                <div class="chart-item" :comp-data="getCompData(item)" v-for="item in list" :key="item.UniqueCode">
-                    <div class="title">{{item.ChartName}}</div>
-                    <img class="img" :src="item.ChartImage">
-                </div>
-            </draggable>
+        <div class="main-box">
+            <ImportETAChart ref="ETAChartWrap" v-if="activeType==='ETA图库'"/>
+            <ImportMyETAChart @handleImportMyChart="handleImportMyChart" v-if="activeType==='MyETA'"/>
         </div>
     </div>
 </template>
 
 <script>
-import { dataBaseInterface } from "@/api/api.js";
+import ImportETAChart from './ImportETAChart.vue';
+import ImportMyETAChart from './ImportMyETAChart.vue';
 export default {
     name:"ETAChartWrap",
+    components:{ImportETAChart,ImportMyETAChart},
     data() {
         return {
             keyword:'',
             activeType:'ETA图库',
-            isShowMe:false,
-            page:1,
-            pageSize:20,
-            list:[],
-            finished:false
         }
     },
-    created() {
-        this.getETAChartList()
-    },
     methods: {
-        // 生产随机id
-        getCompId(type){
-            return type+new Date().getTime()
-        },
-
-        getCompData(item){
-            const LINK_CHART_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/chartshow';
-            const obj={
-                compId:3,
-                compType:'chart',
-                content:`${LINK_CHART_URL}?code=${item.UniqueCode}`
-            }
-            return JSON.stringify(obj)
-        },
-
-        async getETAChartList(){
-            const res=await dataBaseInterface.chartSearchByEs({
-                Keyword: this.keyword || "",
-                CurrentIndex: this.page,
-                PageSize: this.pageSize,
-                IsShowMe: this.isShowMe,
-            })
-            if(res.Ret===200){
-                const arr=res.Data.List || []
-                this.list=[...this.list,...arr]
-                this.finished=res.Data.Paging.IsEnd
-            }
-        },
-
-        handleIsShowMeChange(){
-            this.page=1
-            this.finished=false
-            this.list=[]
-            this.getETAChartList()
+        activeTypeChange(e){
+            if(this.activeType===e) return
+            this.activeType=e
         },
 
-        handleLoadMore(){
-            if(this.finished) return
-            this.page++
-            this.getETAChartList()
+        handleETAChartSearch(){
+            this.$refs.ETAChartWrap.handleSearch(this.keyword)
         },
 
-        activeTypeChange(e){
-            if(this.activeType===e) return
-            this.activeType=e
-            if(this.activeType==='ETA图库'){
-                this.page=1
-                this.finished=false
-                this.list=[]
-                this.getETAChartList()
-            }else{
-                
-            }
+        handleImportMyChart(list){
+            this.$emit('handleImportMyChart',list)
         }
     },
 }
@@ -141,6 +85,11 @@ div{
                 }
             }
         }
+        .right{
+            .search-box{
+                width: 330px;
+            }
+        }
     }
     .main-box{
         margin-top: 30px;
@@ -148,41 +97,7 @@ div{
         border-radius: 4px;
         border: 1px solid var(--gary-gy-5-line, #C8CDD9);
         background: #FFF;
-        padding: 20px;
-        position: relative;
-        overflow-y: auto;
-        overflow-x: hidden;
-        .onlyshowme-box{
-            display: block;
-            position: sticky;
-            top: -20px;
-            padding: 20px 0;
-            background-color: #FFF;
-        }
-        .chart-list-box{
-            display: flex;
-            flex-wrap: wrap;
-            gap: 20px;
-            .chart-item{
-                cursor: move;
-                padding: 0 10px;
-                width: 250px;
-                border-radius: 4px;
-                border: 1px solid var(--gary-gy-5-line, #C8CDD9);
-                background: var(--gary-gy-white, #FFF);
-                .title{
-                    padding: 10px 0;
-                    text-align: center;
-                    border-bottom: 1px solid #C8CDD9;
-                    overflow: hidden;
-                    white-space: nowrap;
-                    text-overflow: ellipsis;
-                }
-                .img{
-                    width: 100%;
-                }
-            }
-        }
+        padding: 0 20px 20px 20px;
     }
 }
 </style>

+ 127 - 0
src/views/smartReport/components/ETASheet.vue

@@ -0,0 +1,127 @@
+<template>
+    <div class="eta-sheet-wrap">
+        <div class="top-box">
+            <span>ETA表格</span>
+            <el-input
+                class="search-box"
+				placeholder="表格名称"
+				v-model="keyword"
+				size="medium"
+				prefix-icon="el-icon-search"
+                @input="handleSearch"
+			/>
+        </div>
+        <div class="main-box">
+            <draggable
+                :list="list"
+                :group="{ name: 'component', pull: 'clone', put: false }"
+                class="sheet-list-box"
+                animation="300"
+                :sort="false"
+                tag="div"
+            >
+                <div class="sheet-item" v-for="item in list" :key="item.ExcelInfoId">
+                    <div class="title">{{item.ExcelName}}</div>
+                    <div class="img" :style="'backgroundImage:url('+item.ExcelImage+')'"></div>
+                </div>
+            </draggable>
+            <tableNoData text="暂无数据" size="mini" v-if="list.length===0"/>
+        </div>
+    </div>
+</template>
+
+<script>
+import * as sheetInterface from "@/api/modules/sheetApi.js";
+export default {
+    data() {
+        return {
+            keyword:'',
+            list:[]
+        }
+    },
+    created(){
+        this.getSheetList()
+    },
+    methods: {
+        // 生产随机id
+        getCompId(type){
+            return type+new Date().getTime()
+        },
+
+        getCompData(item){
+            const LINK_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/sheetshow';
+            const obj={
+                compId:3,
+                compType:'sheet',
+                content:`${LINK_CHART_URL}?code=${item.UniqueCode}`
+            }
+            return JSON.stringify(obj)
+        },
+
+        handleSearch(){
+            this.getSheetList()
+        },
+        getSheetList() {
+            this.list=[]
+            sheetInterface.sheetList({
+                Keyword: this.keyword,
+                CurrentIndex: 1,
+                PageSize: 10000,
+            }).then((res) => {
+                if (res.Ret !== 200) return;
+                this.list = res.Data.List || [];
+            });
+        },
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+div{
+    box-sizing: border-box;
+}
+.eta-sheet-wrap{
+    .top-box{
+        display: flex;
+        justify-content: space-between;
+        .search-box{
+            width: 330px;
+        }
+    }
+    .main-box{
+        margin-top: 30px;
+        height: calc(100vh - 180px);
+        border-radius: 4px;
+        border: 1px solid var(--gary-gy-5-line, #C8CDD9);
+        background: #FFF;
+        padding: 20px;
+        .sheet-list-box{
+            display: flex;
+            flex-wrap: wrap;
+            gap: 20px;
+            .sheet-item{
+                cursor: move;
+                padding: 0 10px 10px 10px;
+                width: 250px;
+                border-radius: 4px;
+                border: 1px solid var(--gary-gy-5-line, #C8CDD9);
+                background: var(--gary-gy-white, #FFF);
+                .title{
+                    padding: 10px 0;
+                    text-align: center;
+                    border-bottom: 1px solid #C8CDD9;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    text-overflow: ellipsis;
+                }
+                .img{
+                    width: 100%;
+                    height: 197px;
+                    background-size: contain;
+                    background-position: center;
+                }
+            }
+        }
+    }
+}
+</style>

+ 2 - 2
src/views/smartReport/components/ImgComp.vue

@@ -1,9 +1,9 @@
 <template>
     <div 
         class="report-comp-item img-comp" 
-        style=""
+        style="width:100%"
     >
-        <img :src="compData.content" alt="">
+        <img style="width:100%" :src="compData.content" alt="">
     </div>
 </template>
 

+ 138 - 0
src/views/smartReport/components/ImportETAChart.vue

@@ -0,0 +1,138 @@
+<template>
+    <div class="import-eta-chart-wrap" v-infinite-scroll="handleLoadMore" :infinite-scroll-immediate="false">
+            <el-checkbox
+                class="onlyshowme-box"
+                v-model="isShowMe" 
+                @change="handleIsShowMeChange"
+            >只看我的</el-checkbox>
+            <draggable
+                :list="list"
+                :group="{ name: 'component', pull: 'clone', put: false }"
+                class="chart-list-box"
+                animation="300"
+                :sort="false"
+                tag="div"
+            >
+                <div class="chart-item" :comp-data="getCompData(item)" v-for="item in list" :key="item.UniqueCode">
+                    <div class="title">{{item.ChartName}}</div>
+                    <div class="img" :style="'backgroundImage:url('+item.ChartImage+')'"></div>
+                </div>
+            </draggable>
+            <tableNoData text="暂无图表" size="mini" v-if="list.length===0"/>
+    </div>
+</template>
+
+<script>
+import { dataBaseInterface } from "@/api/api.js";
+export default {
+    data() {
+        return {
+            isShowMe:false,
+            page:1,
+            pageSize:20,
+            list:[],
+            finished:false,
+            keyword:''
+        }
+    },
+    created() {
+        this.getETAChartList()
+    },
+    methods: {
+        // 生产随机id
+        getCompId(type){
+            return type+new Date().getTime()
+        },
+
+        getCompData(item){
+            const LINK_CHART_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/chartshow';
+            const obj={
+                compId:3,
+                compType:'chart',
+                content:`${LINK_CHART_URL}?code=${item.UniqueCode}`
+            }
+            return JSON.stringify(obj)
+        },
+
+        async getETAChartList(){
+            const res=await dataBaseInterface.chartSearchByEs({
+                Keyword: this.keyword || "",
+                CurrentIndex: this.page,
+                PageSize: this.pageSize,
+                IsShowMe: this.isShowMe,
+            })
+            if(res.Ret===200){
+                const arr=res.Data.List || []
+                this.list=[...this.list,...arr]
+                this.finished=res.Data.Paging.IsEnd
+            }
+        },
+
+        handleIsShowMeChange(){
+            this.page=1
+            this.finished=false
+            this.list=[]
+            this.getETAChartList()
+        },
+
+        handleLoadMore(){
+            if(this.finished) return
+            this.page++
+            this.getETAChartList()
+        },
+
+        handleSearch(key){
+            this.page=1
+            this.finished=false
+            this.list=[]
+            this.keyword=key
+            this.getETAChartList()
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+.import-eta-chart-wrap{
+    height: 100%;
+    width: 100%;
+    position: relative;
+    overflow-y: auto;
+    overflow-x: hidden;
+    padding-top: 20px;
+    .onlyshowme-box{
+            display: block;
+            position: sticky;
+            top: -20px;
+            padding: 20px 0;
+            background-color: #FFF;
+        }
+        .chart-list-box{
+            display: flex;
+            flex-wrap: wrap;
+            gap: 20px;
+            .chart-item{
+                cursor: move;
+                padding: 0 10px;
+                width: 250px;
+                border-radius: 4px;
+                border: 1px solid var(--gary-gy-5-line, #C8CDD9);
+                background: var(--gary-gy-white, #FFF);
+                .title{
+                    padding: 10px 0;
+                    text-align: center;
+                    border-bottom: 1px solid #C8CDD9;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    text-overflow: ellipsis;
+                }
+                .img{
+                    width: 100%;
+                    height: 197px;
+                    background-size: cover;
+                    background-position: center;
+                }
+            }
+        }
+}
+</style>

+ 166 - 0
src/views/smartReport/components/ImportMyETAChart.vue

@@ -0,0 +1,166 @@
+<template>
+    <div class="import-mychart-wrap">
+        <div class="select-box">
+			<el-select 
+				style="width:300px" 
+				v-model="selectMyChartClassify" 
+				filterable 
+				placeholder="图分类名称"
+				@change="handleChange"
+			>
+				<el-option
+					v-for="item in myChartClassifyList"
+					:key="item.MyChartClassifyId"
+					:label="item.MyChartClassifyName"
+					:value="item.MyChartClassifyId"
+				>
+				</el-option>
+			</el-select>
+			<el-button type="primary" @click="handleImport">一键导入</el-button>
+			<el-tooltip class="item" effect="dark" content="该操作将批量导入所选图分类下所有图表" placement="top-start">
+				<i style="font-size:24px;color: #666;" class="el-icon-question"></i>
+			</el-tooltip>
+		</div>
+		<div class="list" v-infinite-scroll="load" v-if="list.length>0">
+            <div class="chart-item" v-for="item in list" :key="item.UniqueCode" @click="handleClickItem">
+                <div class="title">{{item.ChartName}}</div>
+                <div class="img" :style="'backgroundImage:url('+item.ChartImage+')'"></div>
+            </div>
+		</div>
+        <tableNoData text="无数据" size="mini" v-if="list.length===0"/>
+    </div>
+</template>
+
+<script>
+import { mychartInterface } from '@/api/api.js';
+export default {
+    data() {
+        return {
+            myChartClassifyList:[],
+            selectMyChartClassify:'',
+            pageSize:10000,
+			CurrentIndex: 1,
+			list:[],
+            loading:false,
+            finished:false,
+
+        }
+    },
+    props:{
+        showEnMark:{
+            type:Boolean,
+            default:false
+        }
+    },
+    mounted(){
+        this.getMyChartClassify()
+    },  
+    methods: {
+        //获取我的图库中分类
+		getMyChartClassify(){
+			mychartInterface.classifyList().then(res=>{
+				if (res.Ret !== 200) return;
+				this.myChartClassifyList=res.Data?res.Data.List:[]
+			})
+		},
+        handleChange(){
+            this.CurrentIndex=1
+            this.list=[]
+            this.finished=false
+            this.loading=false
+            this.handleGetMyChartList()
+        },
+		async handleGetMyChartList(){
+            if(!this.selectMyChartClassify) return
+            this.loading=true
+            const res=await  mychartInterface.myList({
+				PageSize: this.pageSize,
+				CurrentIndex: this.CurrentIndex,
+				MyChartClassifyId: this.selectMyChartClassify || 0
+			})
+            this.loading=false
+            const arr=res.Data?res.Data.List.filter(_=>!_.Disabled):[]
+            this.list=[...this.list,...arr]
+            if(!res.Data){
+                this.finished=true
+            }
+            if(res.Data&&res.Data.Paging.IsEnd){
+                this.finished=true
+            }
+		},
+
+        load(){
+            if(this.finished) return
+            this.CurrentIndex++
+            this.handleGetMyChartList()
+        },
+
+        handleImport:_.throttle(function(){
+            if(!this.selectMyChartClassify){
+                this.$message.warning('请选择分类')
+                return
+            }
+            if(this.list.length==0){
+                this.$message.warning('该分类无图表')
+                return
+            }
+            this.$emit('handleImportMyChart',this.list)
+            setTimeout(() => {
+                this.CurrentIndex=1
+                this.list=[]
+                this.finished=false
+                this.loading=false
+                this.selectMyChartClassify=''
+            }, 300);
+        },1000),
+
+        handleClickItem(){
+            this.$message.warning('此处不支持单个插入图表')
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+.import-mychart-wrap{
+    position: relative;
+    height: 100%;
+    padding-top: 20px;
+    .select-box{
+        position: absolute;
+        top: -75px;
+        right: 0;
+    }
+    .list{
+        max-height: calc(100vh - 220px);;
+        overflow-x: hidden;
+		overflow-y: auto;
+        display: flex;
+            flex-wrap: wrap;
+            gap: 20px;
+            .chart-item{
+                cursor: move;
+                padding: 0 10px;
+                width: 250px;
+                max-height: 260px;
+                border-radius: 4px;
+                border: 1px solid var(--gary-gy-5-line, #C8CDD9);
+                background: var(--gary-gy-white, #FFF);
+                .title{
+                    padding: 10px 0;
+                    text-align: center;
+                    border-bottom: 1px solid #C8CDD9;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    text-overflow: ellipsis;
+                }
+                .img{
+                    width: 100%;
+                    height: 197px;
+                    background-size: cover;
+                    background-position: center;
+                }
+            }
+    }
+}
+</style>

+ 20 - 0
src/views/smartReport/components/SheetComp.vue

@@ -0,0 +1,20 @@
+<template>
+    <div 
+        class="report-comp-item sheet-comp"
+        style="min-height:300px;width:100%;overflow: hidden;"
+    >
+        <iframe :src="compData.content" style="width:100%;height:100%;border-width:0px;"></iframe>
+    </div>
+</template>
+
+<script>
+export default {
+    props:{
+        compData:{}
+    }
+}
+</script>
+
+<style>
+
+</style>

+ 88 - 15
src/views/smartReport/editReport.vue

@@ -2,9 +2,9 @@
     <div class="edit-smart-report-page">
         <!-- 顶部操作栏 -->
         <div class="top-action-wrap">
-            <div class="title">标题</div>
+            <div class="title">{{reportInfo&&reportInfo.Title}}</div>
             <ul class="action-list">
-                <li class="action-item">
+                <li class="action-item" @click="showReportBaseInfo=true">
                     <img src="~@/assets/img/smartReport/icon01.png" alt="">
                     <span>基础信息</span>
                 </li>
@@ -127,11 +127,18 @@
                     :content="activeContent" 
                     @imgChange="handleTextChange" 
                 />
+                <!-- 图库插入 -->
                 <ETAChart 
                     v-if="rightType==='etaChart'"
+                    @handleImportMyChart="handleImportMyChart"
                 />
+                <!-- ETA表格 -->
+                <ETASheet v-if="rightType==='etaSheet'"/>
             </div>
         </div>
+
+        <!-- 报告基础信息 -->
+        <BaseInfo  v-model="showReportBaseInfo" :id="$route.query.id" @save="handleReportEdit" />
     </div>
 </template>
 
@@ -144,20 +151,29 @@ import _ from 'lodash'
 import TextEdit from './components/TextEdit.vue'
 import ImgEdit from './components/ImgEdit.vue'
 import ETAChart from './components/ETAChart.vue'
+import ETASheet from './components/ETASheet.vue'
 import { getPublicSettingsApi } from '@/api/modules/oldApi';
+import {apiSmartReport}  from '@/api/modules/smartReport'
+import BaseInfo from './components/BaseInfo.vue'
+
 export default {
     name:"smartReportEdit",
     components: {
         draggable,
+        BaseInfo,
         TextComp,
         ChartComp,
         ImgComp,
         TextEdit,
         ImgEdit,
-        ETAChart
+        ETAChart,
+        ETASheet
     },
     data() {
         return {
+            reportInfo:null,
+            showReportBaseInfo:false,
+
             topTypeList:[
                 {
                     name:'图库',
@@ -222,6 +238,41 @@ export default {
         }
     },
     methods: {
+        // 批量插入myETA数据
+        handleImportMyChart(list){
+            const LINK_CHART_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/chartshow';
+            // console.log(list);
+            let arr=[]
+            // 分成三个一组
+            for (let index = 0; index < list.length; index+=3) {
+                const temarr=list.slice(index,index+3)
+                let resArr={child:[]}
+                if(temarr.length===1){//落单了
+                    resArr={
+                        compId:3,
+                        compType:'chart',
+                        content:`${LINK_CHART_URL}?code=${temarr[0].UniqueCode}`,
+                        id:this.getCompId(`chart${temarr[0].UniqueCode}_`),
+                        child:[]
+                    }
+                }else{
+                    temarr.forEach(e => {
+                        resArr.child.push({
+                            compId:3,
+                            compType:'chart',
+                            content:`${LINK_CHART_URL}?code=${e.UniqueCode}`,
+                            id:this.getCompId(`chart${e.UniqueCode}_`),
+                            child:[]
+                        })
+                    });
+                }
+                arr.push(resArr)
+            }
+            // console.log(arr);
+            this.conList=[...this.conList,...arr]
+            
+        },
+
         handleParentAdd(e){
             console.log('container-onAdd操作------------------->');
 
@@ -280,7 +331,7 @@ export default {
                                 {
                                     compId:compData.compId,
                                     compType:compData.compType,
-                                    content:'',
+                                    content:compData.content||'',
                                     id:this.getCompId(compData.compType),
                                     child:[]
                                 }
@@ -410,31 +461,53 @@ export default {
             return type+new Date().getTime()
         },
 
+        // 编辑报告
+        handleReportEdit(e){
+            const params={
+                SmartReportId:Number(this.$route.query.id)||0,
+                ...e,
+                Content:$('.report-html-wrap').html(),
+                ContentStruct:JSON.stringify(this.conList)
+            }
+            console.log(params);
+            apiSmartReport.reportEdit({...params}).then(res=>{
+                if(res.Ret===200){
+                    this.$message.success('保存成功')
+                    this.reportInfo.Title=params.Title
+                    this.showReportBaseInfo=false
+                }
+            })
+        },
+
         /* 获取动态配置 外部动态链接 */
         async getPublicSettings() {
             const res =  await getPublicSettingsApi();
             if(res.Ret !== 200) return
             
             this.$store.commit('SET_DYNAMIC_LINK',res.Data)
+        },
+
+        // 获取报告详情
+        getReportDetail(){
+            const id=this.$route.query.id||0
+            if(!id) return
+            apiSmartReport.reportDetail({
+                SmartReportId:Number(id)
+            }).then(res=>{
+                if(res.Ret===200){
+                    this.reportInfo=res.Data
+                    this.conList=res.Data.ContentStruct?JSON.parse(res.Data.ContentStruct):[]
+                }
+            })
         }
         
     },
     created() {
         this.getPublicSettings()
+        this.getReportDetail()
     },
 }
 </script>
-<style lang="scss">
-    .sortable-ghost{
-            width: 200px !important;
-            height: 180px !important;
-            background-color: #fff !important;
-            img{
-                width: 100% !important;
-                height: 100% !important;
-            }
-        }
-</style>
 <style lang='scss' scoped>
 div{
     box-sizing: border-box;

+ 5 - 13
src/views/smartReport/reportList.vue

@@ -466,19 +466,11 @@ export default {
                 CurrentIndex: this.PageIndex,
                 PageSize: this.pageSize,
                 Frequency: this.searchform.frequency,
-                ClassifyNameFirst: this.searchform.classifynameArr
-                ? this.searchform.classifynameArr[0]
-                : "",
-                ClassifyNameSecond:
-                this.searchform.classifynameArr &&
-                this.searchform.classifynameArr.length > 1
-                    ? this.searchform.classifynameArr[1]
-                    : "",
-                State: this.searchform.state ? this.searchform.state : null,
+                ClassifyIdFirst: this.searchform.classifynameArr[0]?this.searchform.classifynameArr[0]:'',
+                ClassifyIdSecond:this.searchform.classifynameArr[1]?this.searchform.classifynameArr[1]:'',
                 KeyWord: this.searchform.key_word,
-                MsgIsSend: this.searchform.msgIsSend,
                 State:this.searchform.publishState,
-                TimeType:this.searchform.timeType
+                TimeType:this.searchform.timeType,
             };
             if (this.searchform.dateValue) {
                 params.StartDate = this.searchform.dateValue[0];
@@ -559,14 +551,14 @@ export default {
                     res.Data.List.forEach((item, index) => {
                         let newitem = {
                             label: item.ClassifyName,
-                            value: item.ClassifyName,
+                            value: item.Id,
                         };
                         if (item.Child) {
                             let childnode = [];
                             item.Child.forEach((itemchild, i) => {
                                 childnode.push({
                                     label: itemchild.ClassifyName,
-                                    value: itemchild.ClassifyName,
+                                    value: itemchild.Id,
                                 });
                             });
                             newitem.children = childnode;