Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
aixianling
2021-12-28 17:59:39 +08:00
11 changed files with 352 additions and 229 deletions

View File

@@ -17,6 +17,7 @@
"dependencies": { "dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1", "@amap/amap-jsapi-loader": "^1.0.1",
"@jiaminghi/data-view": "^2.10.0", "@jiaminghi/data-view": "^2.10.0",
"bin-code-editor": "^0.9.0",
"dayjs": "^1.8.35", "dayjs": "^1.8.35",
"dvcp-dv": "^1.0.0", "dvcp-dv": "^1.0.0",
"dvcp-dv-ui": "^2.0.0", "dvcp-dv-ui": "^2.0.0",

View File

@@ -51,7 +51,7 @@
<el-button type="text" @click="onAdd(row.id)">编辑</el-button> <el-button type="text" @click="onAdd(row.id)">编辑</el-button>
<el-button type="text" @click="remove(row.id)">删除</el-button> <el-button type="text" @click="remove(row.id)">删除</el-button>
<el-button type="text" @click="toBuildMsg(row)">房屋信息</el-button> <el-button type="text" @click="toBuildMsg(row)">房屋信息</el-button>
<el-button type="text" @click="$router.push({ name: 'AppHouseMap', query: { communityId: row.communityId, buildingId: row.id, unitNum: 1, buildingNumber: row.buildingNumber } })"> <el-button type="text" @click="$router.push({ name: '63', query: { communityId: row.communityId, buildingId: row.id, unitNum: 1, buildingNumber: row.buildingNumber } })">
楼栋模型 楼栋模型
</el-button> </el-button>
</div> </div>

View File

@@ -257,6 +257,7 @@ export default {
overlays: [], overlays: [],
options: [], options: [],
path: [], path: [],
location: {},
polyEditor: "", polyEditor: "",
title: "添加网格区块", title: "添加网格区块",
parentGirdInfo: {}, parentGirdInfo: {},
@@ -301,6 +302,7 @@ export default {
}, },
}, },
created() { created() {
this.getCorpLocation()
if (this.isEdit) { if (this.isEdit) {
this.title = "编辑网格区块"; this.title = "编辑网格区块";
this.searchDetail(); this.searchDetail();
@@ -382,14 +384,20 @@ export default {
panel: "panel", // 结果列表将在此容器中进行展示。 panel: "panel", // 结果列表将在此容器中进行展示。
autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围 autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
}); });
this.map.setZoomAndCenter(14, [117.147097, 36.72081], false, 600); this.map.setZoomAndCenter(14, [this.location.lng, this.location.lat], false, 600);
this.eventOn(); this.eventOn();
} }
}) })
.catch((e) => { .catch((e) => {
console.log(e);
}); });
}, },
getCorpLocation(){
this.instance.post("/app/appdvcpconfig/getCorpLocation").then(res=>{
if(res.code==0){
this.location = res.data
}
})
},
//地图事件绑定 //地图事件绑定
eventOn() { eventOn() {
this.path = []; this.path = [];

View File

@@ -373,6 +373,7 @@ export default {
`/app/appgirdmemberinfo/addOrUpdate`, `/app/appgirdmemberinfo/addOrUpdate`,
{ {
...this.forms, ...this.forms,
girdInfoListStr: this.forms.girdInfoList.map(v => v.girdName).join(',')
}, },
null null
) )

View File

@@ -8,11 +8,18 @@
<el-button size="small" @click="save" v-if="isEdit">保存</el-button> <el-button size="small" @click="save" v-if="isEdit">保存</el-button>
</template> </template>
<div slot="content" class="item-wrapper"> <div slot="content" class="item-wrapper">
<div class="item" v-for="(item, i) in picked" :key="i"> <draggable
<img :src="item.pictureUrl"> v-model="picked"
<i class="el-icon-remove icon" @click="removeChoose(i)" v-if="isEdit"></i> :animation="340"
<h2>{{ item.name }}</h2> group="select"
</div> style="display: flex;"
handle=".mover">
<div class="item" :class="[isEdit ? 'mover' : '']" v-for="(item, i) in picked" :key="i">
<img :src="item.pictureUrl">
<i class="el-icon-remove icon" @click="removeChoose(i)" v-if="isEdit"></i>
<h2>{{ item.name }}</h2>
</div>
</draggable>
<ai-empty style="width: 100%" v-if="!picked.length"></ai-empty> <ai-empty style="width: 100%" v-if="!picked.length"></ai-empty>
</div> </div>
</ai-card> </ai-card>
@@ -91,6 +98,7 @@
</template> </template>
<script> <script>
import draggable from 'vuedraggable'
export default { export default {
name: 'List', name: 'List',
@@ -99,6 +107,10 @@
dict: Object dict: Object
}, },
components: {
draggable
},
data () { data () {
return { return {
picked: [], picked: [],

View File

@@ -71,7 +71,6 @@
total: 10, total: 10,
colConfigs: [ colConfigs: [
{prop: 'title', label: '标题', align: 'left'}, {prop: 'title', label: '标题', align: 'left'},
{prop: 'content', label: '正文', align: 'center'},
{prop: 'createUserName', label: '发布人', align: 'center' }, {prop: 'createUserName', label: '发布人', align: 'center' },
{prop: 'publishUnitName', label: '发布组织', align: 'center'}, {prop: 'publishUnitName', label: '发布组织', align: 'center'},
{prop: 'createTime', label: '发布时间', align: 'center' }, {prop: 'createTime', label: '发布时间', align: 'center' },

View File

@@ -46,7 +46,7 @@
<el-form-item label="活动介绍" style="width: 100%;" prop="content" :rules="[{required: true, message: '请输入内容', trigger: 'change'}]"> <el-form-item label="活动介绍" style="width: 100%;" prop="content" :rules="[{required: true, message: '请输入内容', trigger: 'change'}]">
<ai-editor v-model="form.content" :instance="instance"/> <ai-editor v-model="form.content" :instance="instance"/>
</el-form-item> </el-form-item>
<el-form-item label="缩略图" style="width: 100%;" prop="url" :rules="[{required: true, message: '请上传缩略图', trigger: 'blur'}]"> <el-form-item label="缩略图" style="width: 100%;" prop="url" :rules="[{required: true, message: '请上传缩略图', trigger: 'change'}]">
<ai-uploader <ai-uploader
:instance="instance" :instance="instance"
isShowTip isShowTip
@@ -124,6 +124,17 @@
confirm () { confirm () {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
const nowTime = new Date().getTime()
const beginTime = new Date(this.form.beginTime).getTime()
const endTime = new Date(this.form.endTime).getTime()
if (beginTime < nowTime) {
return this.$message.error('活动开始时间不能早于当前时间')
}
if (endTime < beginTime) {
return this.$message.error('活动结束时间不能早于活动开始时间')
}
this.instance.post(`/app/appvillageactivityinfo/addOrUpdate`, { this.instance.post(`/app/appvillageactivityinfo/addOrUpdate`, {
...this.form, ...this.form,
url: this.form.url.length ? JSON.stringify([{ url: this.form.url.length ? JSON.stringify([{

View File

@@ -359,7 +359,7 @@
img { img {
width: 100%; width: 100%;
height: 140px; height: 140px;
object-fit: contain; object-fit: none;
} }
} }

View File

@@ -7,6 +7,7 @@
<h2>{{ dashboard.title }}</h2> <h2>{{ dashboard.title }}</h2>
</div> </div>
<div class="layout-header__right"> <div class="layout-header__right">
<span type="text" @click="isShowImg = true">图片素材</span>
<span type="text" @click="back">退出</span> <span type="text" @click="back">退出</span>
<span type="text" @click="save">保存</span> <span type="text" @click="save">保存</span>
</div> </div>
@@ -266,9 +267,9 @@
</div> </div>
</div> </div>
<div <div
class="layout-menu" class="layout-menu"
v-if="activeIndex > -1 && isShowMenu" v-if="activeIndex > -1 && isShowMenu"
:style="{top: menuY + 'px', left: menuX + 'px'}"> :style="{top: menuY + 'px', left: menuX + 'px'}">
<div class="layout-menu__item" @click="removeLayer"> <div class="layout-menu__item" @click="removeLayer">
<span>删除图层</span> <span>删除图层</span>
</div> </div>
@@ -282,246 +283,320 @@
<span>置底图层</span> <span>置底图层</span>
</div> </div>
</div> </div>
<ai-dialog :visible.sync="isShowImg" append-to-body title="图片素材" @onConfirm="isShowImg = false">
<el-button type="primary" style="margin-bottom: 20px" @click="isShowAddImg = true">添加图片</el-button>
<ai-table
:tableData="images"
:total="images.length"
:colConfigs="colConfigs"
@getList="() => {}">
<el-table-column slot="img" label="图片" align="center">
<template slot-scope="{ row }">
<ai-uploader
:instance="instance"
:value="[{url: row.url}]"
disabled
:limit="1">
</ai-uploader>
</template>
</el-table-column>
<el-table-column slot="options" width="140px" fixed="right" label="操作" align="center">
<template slot-scope="{ row, $index }">
<div class="table-options">
<el-button type="text" @click="removeImg($index)">删除</el-button>
<el-button type="text" @click="copy(row.url)">复制链接</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</ai-dialog>
<ai-dialog :visible.sync="isShowAddImg" width="580px" append-to-body title="添加图片" @closed="form.images = []" @onConfirm="onImageConfirm">
<ai-uploader
:instance="instance"
v-model="form.images"
:limit="9">
<template slot="tips">
<p>最多上传9张图片,单个文件最大10MB支持jpgjpegpng格式</p>
</template>
</ai-uploader>
</ai-dialog>
</div> </div>
</template> </template>
<script> <script>
import { components } from '../config' import { components } from '../config'
import VueRulerTool from 'vue-ruler-tool' import VueRulerTool from 'vue-ruler-tool'
import VueDraggableResizable from 'vue-draggable-resizable' import VueDraggableResizable from 'vue-draggable-resizable'
import 'vue-draggable-resizable/dist/VueDraggableResizable.css' import 'vue-draggable-resizable/dist/VueDraggableResizable.css'
import DataConfig from './form/DataConfig.vue' import DataConfig from './form/DataConfig.vue'
import RenderElement from './RenderElement' import RenderElement from './RenderElement'
export default { export default {
props: { props: {
instance: Function, instance: Function,
dict: Object, dict: Object,
params: Object, params: Object,
urlPrefix: String urlPrefix: String
},
data() {
return {
parentIndex: 0,
subIndex: 0,
sonIndex: 0,
leftIndex: 0,
rightIndex: 1,
configIndex: 0,
components,
bigscreenWidth: 1920,
bigscreenHeight: 1080,
widthPaddingTools: 18,
componentList: [],
dashboard: {
title: '大屏',
width: 1920,
height: 1080,
backgroundColor: '',
backgroundImage: []
},
menuX: 0,
menuY: 0,
isShowMenu: false,
activeIndex: -1,
middleWidth: 0,
middleHeight: 0,
widthScale: 0,
heightScale: 0,
bigscreenScaleInWorkbench: 0,
tableStatus: [{
label: '是',
value: '1'
}, {
label: '否',
value: '0'
}],
summaryList: ['summary0', 'summary1', 'summary2', 'summary3', 'summary4', 'summary5', 'summary7', 'summary9', 'summary10'],
borderList: ['border0', 'border1', 'border2', 'border3', 'border4']
}
},
components: {
RenderElement,
DataConfig,
VueRulerTool,
VueDraggableResizable,
},
computed: {
workbenchTransform() {
return `scale(${this.heightScale})`
}, },
currLayout() { data() {
if (this.activeIndex === -1) return {} return {
colConfigs: [
return this.componentList[this.activeIndex] // { prop: 'url', label: '图片链接', showOverflowTooltip: false },
}, { slot: 'img', label: '图片' }
],
widget() { form: {
if (this.components.length && this.components[this.parentIndex].list.length) { images: []
return this.components[this.parentIndex].list[this.subIndex].list },
isShowAddImg: false,
isShowImg: false,
parentIndex: 0,
subIndex: 0,
sonIndex: 0,
leftIndex: 0,
rightIndex: 1,
configIndex: 0,
components,
bigscreenWidth: 1920,
bigscreenHeight: 1080,
widthPaddingTools: 18,
componentList: [],
dashboard: {
title: '大屏',
width: 1920,
height: 1080,
backgroundColor: '',
backgroundImage: []
},
menuX: 0,
menuY: 0,
isShowMenu: false,
activeIndex: -1,
middleWidth: 0,
middleHeight: 0,
widthScale: 0,
heightScale: 0,
bigscreenScaleInWorkbench: 0,
tableStatus: [{
label: '是',
value: '1'
}, {
label: '否',
value: '0'
}],
images: [],
summaryList: ['summary0', 'summary1', 'summary2', 'summary3', 'summary4', 'summary5', 'summary7', 'summary9', 'summary10'],
borderList: ['border0', 'border1', 'border2', 'border3', 'border4']
} }
},
return [] components: {
} RenderElement,
}, DataConfig,
VueRulerTool,
VueDraggableResizable,
},
created() { computed: {
}, workbenchTransform() {
return `scale(${this.heightScale})`
},
mounted() { currLayout() {
if (this.params && this.params.id) { if (this.activeIndex === -1) return {}
this.getInfo(this.params.id)
}
this.$nextTick(() => {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
this.initCanvas()
})
},
methods: { return this.componentList[this.activeIndex]
bindEvent() { },
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
widget() {
if (this.components.length && this.components[this.parentIndex].list.length) {
return this.components[this.parentIndex].list[this.subIndex].list
}
return []
}
},
mounted() {
if (this.params && this.params.id) {
this.getInfo(this.params.id)
}
this.$nextTick(() => { this.$nextTick(() => {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
this.initCanvas() this.initCanvas()
}) })
}, },
setTop() { methods: {
const maxZindex = Math.max.apply(Math, this.componentList.map(item => { bindEvent() {
return item.zIndex this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
})) this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
this.$set(this.componentList[this.activeIndex], 'zIndex', maxZindex + 1) this.$nextTick(() => {
}, this.initCanvas()
})
},
setBottom() { copy (link) {
const item = this.componentList[this.activeIndex] let oInput = document.createElement('input')
this.componentList.splice(this.activeIndex, 1) oInput.value = link
this.componentList.unshift(item) document.body.appendChild(oInput)
}, oInput.select()
document.execCommand('Copy')
this.$message({
message: '已复制',
type: 'success'
})
oInput.remove()
},
getInfo(id) { removeImg (index) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => { this.images.splice(index, 1)
if (res.code === 0) { },
this.componentList = JSON.parse(res.data.config).config
this.dashboard = JSON.parse(res.data.config).dashboard onImageConfirm () {
if (!this.form.images.length) {
return this.$message.error('请上传图片')
} }
})
},
back() { this.images.push(this.form.images)
this.$emit('close') this.form.images = []
}, this.isShowAddImg = false
},
save() { setTop() {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreen`, { const maxZindex = Math.max.apply(Math, this.componentList.map(item => {
config: JSON.stringify({ return item.zIndex
config: this.componentList, }))
dashboard: this.dashboard
}), this.$set(this.componentList[this.activeIndex], 'zIndex', maxZindex + 1)
status: 1, },
title: this.dashboard.title,
id: this.params.id || '' setBottom() {
}).then(res => { const item = this.componentList[this.activeIndex]
if (res.code == 0) { this.componentList.splice(this.activeIndex, 1)
this.$message.success('保存成功') this.componentList.unshift(item)
this.$emit('change', res.data) },
this.back()
getInfo(id) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => {
if (res.code === 0) {
const data = JSON.parse(res.data.config)
this.componentList = data.config
this.dashboard = data.dashboard
this.images = data.images || []
}
})
},
back() {
this.$emit('close')
},
save() {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreen`, {
config: JSON.stringify({
config: this.componentList,
dashboard: this.dashboard,
images: this.images
}),
status: 1,
title: this.dashboard.title,
id: this.params.id || ''
}).then(res => {
if (res.code == 0) {
this.$message.success('保存成功')
this.$emit('change', res.data)
this.back()
}
})
},
clone(e) {
this.componentList.push(this.deepClone(e))
},
onChange(e) {
if (e.indexOf('Chart') > -1) {
this.$refs[`chart${this.activeIndex}`][0].refresh()
} }
}) },
},
clone(e) { deepClone(data, hash = new WeakMap()) {
this.componentList.push(this.deepClone(e)) if (typeof data !== 'object' || data === null) {
}, throw new TypeError('传入参数不是对象')
onChange(e) {
if (e.indexOf('Chart') > -1) {
this.$refs[`chart${this.activeIndex}`][0].refresh()
}
},
deepClone(data, hash = new WeakMap()) {
if (typeof data !== 'object' || data === null) {
throw new TypeError('传入参数不是对象')
}
if (hash.has(data)) {
return hash.get(data)
}
let newData = {}
const dataKeys = Object.keys(data)
dataKeys.forEach(value => {
const currentDataValue = data[value]
if (typeof currentDataValue !== "object" || currentDataValue === null) {
newData[value] = currentDataValue
} else if (Array.isArray(currentDataValue)) {
newData[value] = [...currentDataValue]
} else if (currentDataValue instanceof Set) {
newData[value] = new Set([...currentDataValue])
} else if (currentDataValue instanceof Map) {
newData[value] = new Map([...currentDataValue])
} else {
hash.set(data, data)
newData[value] = this.deepClone(currentDataValue, hash)
} }
}) if (hash.has(data)) {
return newData return hash.get(data)
}, }
let newData = {}
const dataKeys = Object.keys(data)
dataKeys.forEach(value => {
const currentDataValue = data[value]
if (typeof currentDataValue !== "object" || currentDataValue === null) {
newData[value] = currentDataValue
} else if (Array.isArray(currentDataValue)) {
newData[value] = [...currentDataValue]
} else if (currentDataValue instanceof Set) {
newData[value] = new Set([...currentDataValue])
} else if (currentDataValue instanceof Map) {
newData[value] = new Map([...currentDataValue])
} else {
hash.set(data, data)
newData[value] = this.deepClone(currentDataValue, hash)
}
})
return newData
},
onContextmenu(e, index) { onContextmenu(e, index) {
this.menuX = e.clientX + 10 this.menuX = e.clientX + 10
this.menuY = e.clientY + 10 this.menuY = e.clientY + 10
this.activeIndex = index this.activeIndex = index
this.isShowMenu = true this.isShowMenu = true
e.preventDefault() e.preventDefault()
}, },
copyLayer() { copyLayer() {
const layer = this.deepClone(this.componentList[this.activeIndex]) const layer = this.deepClone(this.componentList[this.activeIndex])
this.componentList.push(layer) this.componentList.push(layer)
}, },
removeLayer() { removeLayer() {
this.componentList.splice(this.activeIndex, 1) this.componentList.splice(this.activeIndex, 1)
this.activeIndex = -1 this.activeIndex = -1
}, },
onActivated(index) { onActivated(index) {
this.activeIndex = index this.activeIndex = index
}, },
onDrag(x, y, index) { onDrag(x, y, index) {
this.$set(this.componentList[index], 'left', x) this.$set(this.componentList[index], 'left', x)
this.$set(this.componentList[index], 'top', y) this.$set(this.componentList[index], 'top', y)
}, },
onResizing(x, y, w, h, index, type) { onResizing(x, y, w, h, index, type) {
this.$set(this.componentList[index], 'left', x) this.$set(this.componentList[index], 'left', x)
this.$set(this.componentList[index], 'top', y) this.$set(this.componentList[index], 'top', y)
this.$set(this.componentList[index], 'width', w) this.$set(this.componentList[index], 'width', w)
this.$set(this.componentList[index], 'height', h) this.$set(this.componentList[index], 'height', h)
if (type.indexOf('Chart') > -1) { if (type.indexOf('Chart') > -1) {
this.$refs[`chart${index}`][0].watchResize() this.$refs[`chart${index}`][0].watchResize()
}
},
initCanvas() {
var widthScale = (this.middleWidth - this.widthPaddingTools) / this.bigscreenWidth
var heightScale = (this.middleHeight - this.widthPaddingTools) / this.bigscreenHeight
this.heightScale = Math.min(widthScale, heightScale)
} }
},
initCanvas() {
var widthScale = (this.middleWidth - this.widthPaddingTools) / this.bigscreenWidth
var heightScale = (this.middleHeight - this.widthPaddingTools) / this.bigscreenHeight
this.heightScale = Math.min(widthScale, heightScale)
} }
} }
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -7,13 +7,8 @@
class="layout-config__edit" class="layout-config__edit"
title="编辑器" title="编辑器"
@onConfirm="onConfirm"> @onConfirm="onConfirm">
<div style="height: 500px;"> <div>
<vue-json-editor <b-code-editor v-model="json" lint="dracula" auto-format height="440px"></b-code-editor>
v-model="json"
:show-btns="false"
mode="code"
lang="zh">
</vue-json-editor>
</div> </div>
</ai-dialog> </ai-dialog>
<div class="layout-config__group" v-if="options.monitorType !== 'hik' && options.monitorType !== 'dahua'"> <div class="layout-config__group" v-if="options.monitorType !== 'hik' && options.monitorType !== 'dahua'">
@@ -122,7 +117,13 @@
</template> </template>
<script> <script>
import Vue from 'vue'
import vueJsonEditor from 'vue-json-editor' import vueJsonEditor from 'vue-json-editor'
import CodeEditor from 'bin-code-editor'
import 'bin-code-editor/lib/styles/index.css'
Vue.use(CodeEditor)
export default { export default {
name: 'dataCofing', name: 'dataCofing',
@@ -156,7 +157,8 @@
sourceData: [], sourceData: [],
keys: [], keys: [],
monitorList: [], monitorList: [],
list: [] list: [],
jsonData: `{"title":"测试json数据","children":[{"name":"子项名称", "desc":"子项说明" },{"name":"子项名称1", "desc":"子项说明1" }]}`
} }
}, },
@@ -196,7 +198,7 @@
methods: { methods: {
showEditor () { showEditor () {
this.json = JSON.parse(JSON.stringify(this.options.staticData)) this.json = JSON.stringify(this.options.staticData)
this.isShowEditor = true this.isShowEditor = true
}, },
@@ -314,7 +316,7 @@
}, },
onConfirm () { onConfirm () {
this.$set(this.options, 'staticData', JSON.parse(JSON.stringify(this.json))) this.$set(this.options, 'staticData', JSON.parse(this.json))
this.isShowEditor = false this.isShowEditor = false
this.$emit('change') this.$emit('change')
} }

View File

@@ -3,10 +3,10 @@
<div v-if="!component"> <div v-if="!component">
<div <div
:style="{ :style="{
width: item.width + 'px', width: item.width * scale + 'px',
height: item.height + 'px', height: item.height * scale + 'px',
left: item.left + 'px', left: item.left * scale + 'px',
top: item.top + 'px', top: item.top * scale + 'px',
position: 'absolute', position: 'absolute',
zIndex: item.zIndex zIndex: item.zIndex
}" }"
@@ -57,12 +57,26 @@
backgroundImage: [] backgroundImage: []
}, },
componentList: [], componentList: [],
scale: 1,
meta: {} meta: {}
} }
}, },
created() { created() {
this.getInfo(this.id) this.getInfo(this.id)
// this.scale = document.body.clientWidth / 1920
},
mounted () {
this.$nextTick(() => {
const transform = document.querySelector('#dv-full-screen-container').style.transform
const scale = transform.replace('scale', '').replace('(', '').replace(')', '')
if (scale == 1) {
this.scale = document.body.clientWidth / 1920
}
})
}, },
methods: { methods: {