已增加整轮播图和地图连线
This commit is contained in:
		| @@ -109,13 +109,7 @@ | ||||
|             <component-config v-show="configIndex === 0" :config="currLayout" v-bind="$props"/> | ||||
|             <div class="layout-right__content--wrapper" v-show="configIndex === 1" | ||||
|                  v-if="currLayout.type !== 'title' && currLayout.type !== 'video'"> | ||||
|               <data-config | ||||
|                   ref="dataConfig" | ||||
|                   :instance="instance" | ||||
|                   :dict="dict" | ||||
|                   :options="currLayout" | ||||
|                   @change="onChange('barChart')"> | ||||
|               </data-config> | ||||
|               <data-config v-model="currLayout" :instance="instance" :dict="dict" @change="onChange('barChart')"/> | ||||
|             </div> | ||||
|           </div> | ||||
|         </template> | ||||
| @@ -214,7 +208,8 @@ | ||||
|         </el-table-column> | ||||
|       </ai-table> | ||||
|     </ai-dialog> | ||||
|     <ai-dialog :visible.sync="isShowAddImg" width="580px" append-to-body title="添加素材" @closed="form.images = []" @onConfirm="onImageConfirm"> | ||||
|     <ai-dialog :visible.sync="isShowAddImg" width="580px" append-to-body title="添加素材" @closed="form.images = []" | ||||
|                @onConfirm="onImageConfirm"> | ||||
|       <ai-uploader | ||||
|           :instance="instance" | ||||
|           v-model="form.images" | ||||
| @@ -297,12 +292,14 @@ export default { | ||||
|     workbenchTransform() { | ||||
|       return `scale(${this.heightScale})` | ||||
|     }, | ||||
|  | ||||
|     currLayout() { | ||||
|       if (this.activeIndex === -1) return {} | ||||
|       return this.componentList[this.activeIndex] | ||||
|     currLayout: { | ||||
|       set(v) { | ||||
|         this.componentList.splice(this.activeIndex, 1, v) | ||||
|       }, | ||||
|       get() { | ||||
|         return this.activeIndex > -1 ? this.componentList[this.activeIndex] : {} | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     widget() { | ||||
|       if (this.components.length && this.components[this.parentIndex].list.length) { | ||||
|         return this.components[this.parentIndex].list[this.subIndex].list | ||||
| @@ -410,13 +407,9 @@ export default { | ||||
|     clone(e) { | ||||
|       this.componentList.push(this.deepClone(e)) | ||||
|     }, | ||||
|  | ||||
|     onChange(e) { | ||||
|       if (e.indexOf('Chart') > -1) { | ||||
|         this.$refs[`chart${this.activeIndex}`]?.[0]?.refresh() | ||||
|       } | ||||
|     onChange() { | ||||
|       this.$refs[`chart${this.activeIndex}`]?.[0]?.refresh() | ||||
|     }, | ||||
|  | ||||
|     deepClone(obj) { | ||||
|       if (obj instanceof Object) { | ||||
|         let newObj = {} | ||||
| @@ -993,8 +986,8 @@ export default { | ||||
|     } | ||||
|  | ||||
|     :deep(.layout-right__content ) { | ||||
|       height: calc(100% - 40px); | ||||
|       overflow-y: overlay; | ||||
|       height: calc(100% - 50px); | ||||
|       overflow-y: auto; | ||||
|       overflow-x: hidden; | ||||
|  | ||||
|       .layout-config__group { | ||||
|   | ||||
| @@ -1,19 +1,32 @@ | ||||
| <template> | ||||
|   <div class="layout-config__group--wrapper"> | ||||
|     <div class="layout-config__group" v-if="options.type=='map'"> | ||||
|       <div flex> | ||||
|         <span class="layoutTitle fill">标记点设置</span> | ||||
|         <el-button type="text" icon="iconfont iconAdd" @click="handleMapMarker()">添加</el-button> | ||||
|       </div> | ||||
|       <div class="layout-config__item" v-for="(item,i) in options.staticData" :key="i"> | ||||
|         <label v-text="item.label"/> | ||||
|         <div class="layout-config__item--right"> | ||||
|           <el-input :value="[item.lat,item.lng].join(',')" readonly size="small"/> | ||||
|           <el-button type="text" icon="el-icon-edit" @click="handleMapMarker(item,i)"/> | ||||
|     <template v-if="options.type=='map'"> | ||||
|       <ai-fold> | ||||
|         <div slot="title" class="flex w100"> | ||||
|           <span class="layoutTitle fill">标记点设置</span> | ||||
|           <el-button type="text" icon="iconfont iconAdd" @click="handleMapMarker()">添加</el-button> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="layout-config__group" v-else-if="options.monitorType !== 'hik' && options.monitorType !== 'dahua'"> | ||||
|         <div class="layout-config__item" v-for="(item,i) in markers" :key="i"> | ||||
|           <label v-text="item.label"/> | ||||
|           <div class="layout-config__item--right"> | ||||
|             <el-input :value="[item.lat,item.lng].join(',')" readonly size="small"/> | ||||
|             <el-button type="text" icon="el-icon-edit" @click="handleMapMarker(item,i)"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </ai-fold> | ||||
|       <ai-fold title="标记点连线"> | ||||
|         <ai-dialog-btn :modal="false" dialog-title="设置标记点连线" :customFooter="false" @onConfirm="savePolylines" | ||||
|                        @open="handleMapPolylines"> | ||||
|           <code-editor slot="btn" readonly :value="JSON.stringify(options.staticData.polylines, null, 2)" lang="json" | ||||
|                        theme="github" width="100%" height="250" placeholder="测试默认值"/> | ||||
|           <el-button class="m-center" type="text" @click="handleMapPolylineDoc" :closable="false"> | ||||
|             点击查看连线设置参考文档 | ||||
|           </el-button> | ||||
|           <code-editor v-model="json" lang="json" theme="github" width="100%" height="440"/> | ||||
|         </ai-dialog-btn> | ||||
|       </ai-fold> | ||||
|     </template> | ||||
|     <div class="layout-config__group" v-else-if="!['hik','dahua'].includes(options.monitorType)"> | ||||
|       <h2>基础设置</h2> | ||||
|       <div class="layout-config__item"> | ||||
|         <label>数据类型</label> | ||||
| @@ -29,8 +42,10 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="layout-config__code" v-if="options.dataType === 'staticData'"> | ||||
|         <el-button @click="showEditor" class="layout-config__code--btn" title="编辑" type="text" icon="iconfont iconjdq_led_edit"></el-button> | ||||
|         <code-editor readonly :value="JSON.stringify(options.staticData, null, 2)" lang="json" theme="github" width="100%" height="250"></code-editor> | ||||
|         <el-button @click="showEditor" class="layout-config__code--btn" title="编辑" type="text" | ||||
|                    icon="iconfont iconjdq_led_edit"></el-button> | ||||
|         <code-editor readonly :value="JSON.stringify(options.staticData, null, 2)" lang="json" theme="github" | ||||
|                      width="100%" height="250"></code-editor> | ||||
|       </div> | ||||
|       <template v-else-if="options.dataType === 'dynamicData'"> | ||||
|         <div class="layout-config__item"> | ||||
| @@ -38,10 +53,10 @@ | ||||
|           <div class="layout-config__item--right"> | ||||
|             <el-select size="mini" v-model="options.sourceDataId" placeholder="请选择数据源" @change="onDataChange"> | ||||
|               <el-option | ||||
|                 v-for="item in sourceData" | ||||
|                 :key="item.id" | ||||
|                 :label="item.description" | ||||
|                 :value="item.id"> | ||||
|                   v-for="item in sourceData" | ||||
|                   :key="item.id" | ||||
|                   :label="item.description" | ||||
|                   :value="item.id"> | ||||
|               </el-option> | ||||
|             </el-select> | ||||
|           </div> | ||||
| @@ -65,7 +80,8 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="layout-config__group" v-if="options.dataType !== 'staticData' && options.type === 'monitor' &&['cmcc','slw'].includes(options.monitorType)"> | ||||
|     <div class="layout-config__group" | ||||
|          v-if="options.dataType !== 'staticData' && options.type === 'monitor' &&['cmcc','slw'].includes(options.monitorType)"> | ||||
|       <h2>字段设置</h2> | ||||
|       <div class="layout-config__item"> | ||||
|         <label>监控视频</label> | ||||
| @@ -81,7 +97,8 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="layout-config__group" v-if="options.dataType !== 'staticData' && options.type !== 'monitor' && keys.length && options.type !== 'table'"> | ||||
|     <div class="layout-config__group" | ||||
|          v-if="options.dataType !== 'staticData' && options.type !== 'monitor' && keys.length && options.type !== 'table'"> | ||||
|       <h2>字段设置</h2> | ||||
|       <div class="layout-config__item"> | ||||
|         <label>X轴设置</label> | ||||
| @@ -99,7 +116,8 @@ | ||||
|       <div class="layout-config__item"> | ||||
|         <label>Y轴设置</label> | ||||
|         <div class="layout-config__item--right"> | ||||
|           <el-select size="mini" multiple :multiple-limit="options.type.indexOf('pie') > -1 ? 1 : 100" v-model="options.dataY" collapse-tags placeholder="请选择Y轴" | ||||
|           <el-select size="mini" multiple :multiple-limit="options.type.indexOf('pie') > -1 ? 1 : 100" | ||||
|                      v-model="options.dataY" collapse-tags placeholder="请选择Y轴" | ||||
|                      @change="onChooseChange"> | ||||
|             <el-option | ||||
|                 v-for="(item, index) in keys" | ||||
| @@ -122,7 +140,8 @@ | ||||
|         <code-editor v-model="json" lang="json" theme="github" width="100%" height="440"></code-editor> | ||||
|       </div> | ||||
|     </ai-dialog> | ||||
|     <ai-dialog class="layout-config__edit" v-model="showMapEditor" title="设置地图标记点" append-to-body @close="form={}" @confirm="saveMarker"> | ||||
|     <ai-dialog class="layout-config__edit" v-model="showMapEditor" title="设置地图标记点" append-to-body | ||||
|                @close="form={}" @confirm="saveMarker"> | ||||
|       <el-form :model="form" size="small" ref="mapMarker" label-width="120px"> | ||||
|         <el-form-item label="标记点名称" :rules="{required:true,message:'请填写标记点名称'}"> | ||||
|           <el-input placeholder="用于地图上展示对标记点的文字标签" v-model="form.label" clearable/> | ||||
| @@ -149,17 +168,19 @@ import 'brace/mode/json' | ||||
| import 'brace/snippets/json'; | ||||
| import 'brace/theme/github'; | ||||
| import 'brace/theme/monokai'; | ||||
| import AiDialogBtn from "dui/packages/layout/AiDialogBtn.vue"; | ||||
|  | ||||
| export default { | ||||
|   name: 'dataConfig', | ||||
|  | ||||
|   model: { | ||||
|     prop: "options", | ||||
|     event: "change" | ||||
|   }, | ||||
|   props: { | ||||
|     options: Object, | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|     params: Object, | ||||
|   }, | ||||
|  | ||||
|   data() { | ||||
|     return { | ||||
|       dataTypes: [ | ||||
| @@ -177,25 +198,32 @@ export default { | ||||
|         } | ||||
|       ], | ||||
|       isShowEditor: false, | ||||
|       json: {}, | ||||
|       json: "", | ||||
|       sourceDataId: '', | ||||
|       sourceData: [], | ||||
|       keys: [], | ||||
|       monitorList: [], | ||||
|       list: [], | ||||
|       jsonData: `{"title":"测试json数据","children":[{"name":"子项名称", "desc":"子项说明" },{"name":"子项名称1", "desc":"子项说明1" }]}`, | ||||
|       showMapEditor: false, | ||||
|       form: {} | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   components: { | ||||
|     CodeEditor | ||||
|   computed: { | ||||
|     markers: v => v.options.staticData?.markers || [] | ||||
|   }, | ||||
|   components: { | ||||
|     AiDialogBtn, | ||||
|     CodeEditor, | ||||
|   }, | ||||
|   created() { | ||||
|     if (this.options.type == "map" && Array.isArray(this.options.staticData)) {//处理历史数据,并更新最新数据结构 | ||||
|       const values = this.$copy(this.options) | ||||
|       values.staticData = {markers: this.$copy(this.options.staticData)} | ||||
|       this.$emit("change", values) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted() { | ||||
|     this.getDataList() | ||||
|  | ||||
|     if ((this.options.dataY && this.options.dataY.length && this.options.dataX) || this.options.type === 'monitor') { | ||||
|       const api = this.options.dataType === 'apiData' ? this.options.api : `/app/appdiylargescreen/statisticsByLsid?id=${this.options.sourceDataId}` | ||||
|       this.instance.post(api).then(res => { | ||||
| @@ -364,10 +392,19 @@ export default { | ||||
|         const i = this.$copy(this.form.index) | ||||
|         delete this.form.index | ||||
|         if (i > -1) { | ||||
|           this.options.staticData.splice(i, 1, this.form) | ||||
|         } else this.options.staticData.push(this.form) | ||||
|           this.options.staticData.markers.splice(i, 1, this.form) | ||||
|         } else this.options.staticData.markers.push(this.form) | ||||
|         this.showMapEditor = false | ||||
|       }) | ||||
|     }, | ||||
|     savePolylines() { | ||||
|       this.$set(this.options.staticData, 'polylines', JSON.parse(this.json)) | ||||
|     }, | ||||
|     handleMapPolylines() { | ||||
|       this.json = JSON.stringify(this.options.staticData.polylines || [{path: [[31.547706, 107.224325], [31.552456, 107.201185]]}]) | ||||
|     }, | ||||
|     handleMapPolylineDoc() { | ||||
|       window.open('https://lbs.amap.com/api/javascript-api-v2/documentation#polyline') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -384,11 +421,15 @@ export default { | ||||
|   } | ||||
| } | ||||
|  | ||||
| .ai-dialog__wrapper { | ||||
|   color: #333; | ||||
| } | ||||
|  | ||||
| .layout-config__group--wrapper { | ||||
|   .layout-config__code .bin-ace-editor { | ||||
|   } | ||||
|  | ||||
|   .layout-config__group { | ||||
|   :deep(.layout-config__group) { | ||||
|     padding: 10px 10px 20px; | ||||
|     border-bottom: 1px solid #000000; | ||||
|  | ||||
| @@ -491,6 +532,10 @@ export default { | ||||
|         color: #fff; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     :deep(.el-collapse) { | ||||
|       height: 18px; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -552,9 +552,9 @@ const components = [ | ||||
|             dataType: 'staticData', | ||||
|             dynamicData: [], | ||||
|             staticData: [ | ||||
|               { name: '列1', value: 23 }, | ||||
|               { name: '列2', value: 12 }, | ||||
|               { name: '列2', value: 12 } | ||||
|               {name: '列1', value: 23}, | ||||
|               {name: '列2', value: 12}, | ||||
|               {name: '列2', value: 12} | ||||
|             ] | ||||
|           } | ||||
|         ] | ||||
| @@ -610,7 +610,7 @@ const components = [ | ||||
|             thumb: 'https://cdn.cunwuyun.cn/dvcp/dv/tpl/map.png', | ||||
|             is3dAround: '0', | ||||
|             limitArea: '0', | ||||
|             layers:'vector' | ||||
|             layers: 'vector' | ||||
|           }, | ||||
|           { | ||||
|             type: 'AiDvMap', | ||||
| @@ -743,6 +743,29 @@ const components = [ | ||||
|               } | ||||
|             ], | ||||
|             thumb: 'https://cdn.cunwuyun.cn/dvcp/dv/tpl/swiper.png' | ||||
|           }, | ||||
|           { | ||||
|             type: 'swiper', | ||||
|             label: '轮播图(点指示器)', | ||||
|             width: 800, | ||||
|             height: 358, | ||||
|             zIndex: 1, | ||||
|             border: 'border14', | ||||
|             dataType: 'staticData', | ||||
|             staticData: [ | ||||
|               { | ||||
|                 content: `歙县众城湖羊养殖专业合作社 | ||||
| 							徐晓红 - 18273645627 | ||||
| 							歙县郑村镇唐跃村碉墅` | ||||
|               }, | ||||
|               { | ||||
|                 content: `歙县众城湖羊养殖专业合作社 | ||||
| 							徐晓红 - 18273645627 | ||||
| 							歙县郑村镇唐跃村碉墅` | ||||
|               }, | ||||
|             ], | ||||
|             thumb: 'https://cdn.cunwuyun.cn/dvcp/dv/tpl/swiper.png', | ||||
|             dotIndicator: true | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user