Merge pull request #6543 from dataease/pr@dev_one_dot_x

Pr@dev one dot x
This commit is contained in:
dataeaseShu 2023-11-06 15:33:15 +08:00 committed by GitHub
commit 2de6ee31fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
85 changed files with 904 additions and 822 deletions

View File

@ -13,7 +13,7 @@
:title="$t('user.change_password')"
:show-close="false"
>
<PasswordUpdateForm oldPwd="dataease" />
<PasswordUpdateForm old-pwd="dataease" />
</el-dialog>
</div>
</template>
@ -26,21 +26,15 @@ import PasswordUpdateForm from '@/views/system/user/PasswordUpdateForm.vue'
export default {
name: 'App',
components: { PluginCom, PasswordUpdateForm },
computed: {
...mapState('user', [
'passwordModified',
])
},
data() {
return {
showPasswordModifiedDialog: false
}
},
mounted() {
const passwordModified = JSON.parse(localStorage.getItem('passwordModified'))
if (typeof passwordModified === 'boolean') {
this.$store.commit('user/SET_PASSWORD_MODIFIED', passwordModified)
}
computed: {
...mapState('user', [
'passwordModified'
])
},
watch: {
passwordModified: {
@ -49,6 +43,12 @@ export default {
},
immediate: true
}
},
mounted() {
const passwordModified = JSON.parse(localStorage.getItem('passwordModified'))
if (typeof passwordModified === 'boolean') {
this.$store.commit('user/SET_PASSWORD_MODIFIED', passwordModified)
}
}
}
</script>

View File

@ -153,7 +153,6 @@ export const viewOptions = panelId => {
})
}
export function getDatasourceRelationship(id) {
return request({
url: `/api/relation/datasource/${id}`,
@ -162,7 +161,6 @@ export function getDatasourceRelationship(id) {
})
}
export function getDatasetRelationship(id) {
return request({
url: `/api/relation/dataset/${id}`,
@ -171,7 +169,6 @@ export function getDatasetRelationship(id) {
})
}
export function getPanelRelationship(id) {
return request({
url: `/api/relation/panel/${id}`,

View File

@ -138,7 +138,7 @@ export function fieldList(id, showLoading = true) {
}
export function fieldListWithPermission(id, showLoading = true) {
//初始模板中的过滤组件无需走后台
// 初始模板中的过滤组件无需走后台
if (id.indexOf('no_auth') > -1) {
return new Promise(function(resolve) {
resolve({

View File

@ -66,9 +66,9 @@ export function loadGenerate(resourceId) {
})
}
export function loadResource(resourceId,userId) {
export function loadResource(resourceId, userId) {
return request({
url: 'api/link/resourceDetail/' + resourceId+'/'+ userId,
url: 'api/link/resourceDetail/' + resourceId + '/' + userId,
method: 'get'
})
}

View File

@ -192,7 +192,7 @@ export function initPanelData(panelId, useCache = false, callback) {
watermarkOpen: response.data.watermarkOpen,
watermarkInfo: watermarkInfo
})
const targetPanelId = response.data.panelType==='system'?response.data.source:panelId
const targetPanelId = response.data.panelType === 'system' ? response.data.source : panelId
// 刷新联动信息
getPanelAllLinkageInfo(targetPanelId).then(rsp => {
store.commit('setNowPanelTrackInfo', rsp.data)

View File

@ -24,7 +24,7 @@
>
<el-tooltip :content="item.tooltip">
<span style="float: left;">
<i :class="item.icon"/>
<i :class="item.icon" />
</span>
</el-tooltip>
</el-radio-button>
@ -47,7 +47,7 @@
:value="item.value"
>
<span style="float: left;">
<i :class="item.icon"/>
<i :class="item.icon" />
</span>
<span style="float: right; color: #8492a6; font-size: 12px">{{ item.label }}</span>
</el-option>
@ -257,7 +257,7 @@
@click="goColor"
/>
</el-tooltip>
<div :style="letterDivColor"/>
<div :style="letterDivColor" />
<el-color-picker
ref="colorPicker"
v-model="styleInfo.color"
@ -279,7 +279,7 @@
@click="goBoardColor"
/>
</el-tooltip>
<div :style="boardDivColor"/>
<div :style="boardDivColor" />
<el-color-picker
ref="boardColorPicker"
v-model="styleInfo.borderColor"
@ -302,7 +302,7 @@
@click="goBackgroundColor"
/>
</el-tooltip>
<div :style="backgroundDivColor"/>
<div :style="backgroundDivColor" />
<el-color-picker
ref="backgroundColorPicker"
v-model="styleInfo.backgroundColor"
@ -318,7 +318,7 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 2px;"
>
<el-tooltip :content="$t('panel.video_info')">
<VideoLinks :link-info="curComponent.videoLinks"/>
<VideoLinks :link-info="curComponent.videoLinks" />
</el-tooltip>
</div>
@ -327,7 +327,7 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 2px;"
>
<el-tooltip :content="$t('panel.stream_media_info')">
<StreamMediaLinks :link-info="curComponent.streamMediaLinks"/>
<StreamMediaLinks :link-info="curComponent.streamMediaLinks" />
</el-tooltip>
</div>
@ -336,7 +336,7 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 2px;"
>
<el-tooltip :content="$t('panel.web_addr')">
<FrameLinks :link-info="curComponent.frameLinks"/>
<FrameLinks :link-info="curComponent.frameLinks" />
</el-tooltip>
</div>
<div
@ -356,7 +356,7 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 10px;"
>
<el-tooltip :content="$t('panel.tab_inner_style')">
<tab-style :style-info="styleInfo"/>
<tab-style :style-info="styleInfo" />
</el-tooltip>
</div>

View File

@ -77,19 +77,19 @@
</template>
<script>
import {getStyle} from '@/components/canvas/utils/style'
import { getStyle } from '@/components/canvas/utils/style'
import runAnimation from '@/components/canvas/utils/runAnimation'
import {mixins} from '@/components/canvas/utils/events'
import {mapState} from 'vuex'
import { mixins } from '@/components/canvas/utils/events'
import { mapState } from 'vuex'
import DeOutWidget from '@/components/dataease/DeOutWidget'
import EditBar from '@/components/canvas/components/editor/EditBar'
import MobileCheckBar from '@/components/canvas/components/editor/MobileCheckBar'
import CloseBar from '@/components/canvas/components/editor/CloseBar'
import {hexColorToRGBA} from '@/views/chart/chart/util'
import {imgUrlTrans} from '@/components/canvas/utils/utils'
import { hexColorToRGBA } from '@/views/chart/chart/util'
import { imgUrlTrans } from '@/components/canvas/utils/utils'
export default {
components: {CloseBar, MobileCheckBar, DeOutWidget, EditBar},
components: { CloseBar, MobileCheckBar, DeOutWidget, EditBar },
mixins: [mixins],
props: {
canvasId: {
@ -136,7 +136,7 @@ export default {
canvasStyleData: {
type: Object,
required: false,
default: function () {
default: function() {
return {}
}
},
@ -164,7 +164,7 @@ export default {
},
chart() {
if (this.config.propValue?.viewId) {
const viewInfo = this.panelViewDetailsInfo[this.config.propValue.viewId];
const viewInfo = this.panelViewDetailsInfo[this.config.propValue.viewId]
return viewInfo ? JSON.parse(viewInfo) : null
}
return null
@ -325,7 +325,7 @@ export default {
e.stopPropagation()
const _this = this
setTimeout(() => {
_this.$store.commit('setCurComponent', {component: _this.config, index: _this.index})
_this.$store.commit('setCurComponent', { component: _this.config, index: _this.index })
}, 200)
},
showViewDetails(params) {

View File

@ -126,7 +126,7 @@
:canvas-id="canvasId"
/>
<!-- 右击菜单 -->
<ContextMenu/>
<ContextMenu />
<!-- 对齐标线 -->
<span
@ -150,13 +150,13 @@
</template>
<script>
import {mapState} from 'vuex'
import { mapState } from 'vuex'
import Shape from './Shape'
import DeDrag from '@/components/deDrag'
// eslint-disable-next-line no-unused-vars
import {getComponentRotatedStyle, getStyle} from '@/components/canvas/utils/style'
import {_$, imgUrlTrans} from '@/components/canvas/utils/utils'
import { getComponentRotatedStyle, getStyle } from '@/components/canvas/utils/style'
import { _$, imgUrlTrans } from '@/components/canvas/utils/utils'
import ContextMenu from './ContextMenu'
import MarkLine from './MarkLine'
import Area from './Area'
@ -164,19 +164,19 @@ import eventBus from '@/components/canvas/utils/eventBus'
import Grid from './Grid'
import PageLineEditor from './PageLineEditor'
import PGrid from './PGrid'
import {changeStyleWithScale} from '@/components/canvas/utils/translate'
import { changeStyleWithScale } from '@/components/canvas/utils/translate'
import UserViewDialog from '@/components/canvas/customComponent/UserViewDialog'
import DeOutWidget from '@/components/dataease/DeOutWidget'
import DragShadow from '@/components/deDrag/Shadow'
import bus from '@/utils/bus'
import LinkJumpSet from '@/views/panel/linkJumpSet'
import {buildFilterMap, buildViewKeyMap, formatCondition, valueValid, viewIdMatch} from '@/utils/conditionUtil'
import { buildFilterMap, buildViewKeyMap, formatCondition, valueValid, viewIdMatch } from '@/utils/conditionUtil'
//
import _ from 'lodash'
import _jq from 'jquery'
import Background from '@/views/background/index'
import PointShadow from '@/components/deDrag/PointShadow'
import {hexColorToRGBA} from "@/views/chart/chart/util";
import { hexColorToRGBA } from '@/views/chart/chart/util'
// let positionBox = []
// let coordinates = [] //
@ -190,11 +190,11 @@ let itemMaxX = 0
function debounce(func, time) {
if (!isOverlay) {
(function (t) {
(function(t) {
isOverlay = true
setTimeout(function () {
setTimeout(function() {
t()
setTimeout(function () {
setTimeout(function() {
isOverlay = false
if (lastTask !== undefined) {
debounce(lastTask, time)
@ -319,10 +319,10 @@ function init() {
resetPositionBox.call(this)
initPosition(this)
let i = 0
const timeid = setInterval(function () {
const timeid = setInterval(function() {
if (i >= vm.yourList.length) {
clearInterval(timeid)
vm.$nextTick(function () {
vm.$nextTick(function() {
vm.moveAnimate = true
})
} else {
@ -339,7 +339,7 @@ function resizePlayer(item, newSize) {
removeItemFromPositionBox.call(vm, item)
const belowItems = findBelowItems.call(this, item)
_.forEach(belowItems, function (upItem) {
_.forEach(belowItems, function(upItem) {
const canGoUpRows = canItemGoUp.call(vm, upItem)
if (canGoUpRows > 0) {
moveItemUp.call(vm, upItem, canGoUpRows)
@ -426,7 +426,7 @@ function movePlayer(item, position) {
removeItemFromPositionBox.call(vm, item)
const belowItems = findBelowItems.call(this, item)
_.forEach(belowItems, function (upItem) {
_.forEach(belowItems, function(upItem) {
const canGoUpRows = canItemGoUp.call(vm, upItem)
if (canGoUpRows > 0) {
moveItemUp.call(vm, upItem, canGoUpRows)
@ -452,7 +452,7 @@ function removeItem(index) {
removeItemFromPositionBox.call(vm, item)
const belowItems = findBelowItems.call(this, item)
_.forEach(belowItems, function (upItem) {
_.forEach(belowItems, function(upItem) {
const canGoUpRows = canItemGoUp.call(vm, upItem)
if (canGoUpRows > 0) {
moveItemUp.call(vm, upItem, canGoUpRows)
@ -544,7 +544,7 @@ function findClosetCoords(item, tCoord) {
y: collisionsItem[0].coord.el.y
})
setTimeout(function () {
setTimeout(function() {
isOverlay = false
}, 200)
}
@ -592,7 +592,7 @@ function changeItemCoord(item) {
el: item
}
const index = _.findIndex(vm.coordinates, function (o) {
const index = _.findIndex(vm.coordinates, function(o) {
return o.el._dragId === item._dragId
})
if (index !== -1) {
@ -609,7 +609,7 @@ function emptyTargetCell(item) {
const vm = this
const belowItems = findBelowItems.call(vm, item)
_.forEach(belowItems, function (downItem, index) {
_.forEach(belowItems, function(downItem, index) {
if (downItem._dragId === item._dragId) return
const moveSize = item.y + item.sizey - downItem.y
if (moveSize > 0) {
@ -649,7 +649,7 @@ function moveItemDown(item, size) {
const vm = this
removeItemFromPositionBox.call(vm, item)
const belowItems = findBelowItems.call(vm, item)
_.forEach(belowItems, function (downItem, index) {
_.forEach(belowItems, function(downItem, index) {
if (downItem._dragId === item._dragId) return
const moveSize = calcDiff.call(vm, item, downItem, size)
if (moveSize > 0) {
@ -722,7 +722,7 @@ function moveItemUp(item, size) {
changeItemCoord.call(this, item)
_.forEach(belowItems, function (upItem, index) {
_.forEach(belowItems, function(upItem, index) {
const moveSize = canItemGoUp.call(vm, upItem)
if (moveSize > 0) {
moveItemUp.call(vm, upItem, moveSize)
@ -806,19 +806,19 @@ export default {
dragStart: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
dragging: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
dragEnd: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
resizable: {
@ -829,19 +829,19 @@ export default {
resizeStart: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
resizing: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
resizeEnd: {
required: false,
type: Function,
default: function () {
default: function() {
}
},
matrixCount: {
@ -1147,7 +1147,7 @@ export default {
return this.$refs['wrapperChild']
},
getAllWrapperChildRefs() {
let allChildRefs = []
const allChildRefs = []
const currentChildRefs = this.getWrapperChildRefs()
if (currentChildRefs && currentChildRefs.length > 0) {
allChildRefs.push.apply(allChildRefs, currentChildRefs)
@ -1290,7 +1290,7 @@ export default {
}
return -1
},
pluginEditHandler({e, id}) {
pluginEditHandler({ e, id }) {
let index = -1
for (let i = 0; i < this.componentData.length; i++) {
const item = this.componentData[i]
@ -1400,12 +1400,12 @@ export default {
getSelectArea() {
const result = []
//
const {x, y} = this.start
const { x, y } = this.start
//
this.componentData.forEach(component => {
if (component.isLock) return
const {left, top, width, height} = component.style
const { left, top, width, height } = component.style
if (x <= left && y <= top && (left + width <= x + this.width) && (top + height <= y + this.height)) {
result.push(component)
}
@ -1461,7 +1461,7 @@ export default {
getTextareaHeight(element, text) {
// eslint-disable-next-line prefer-const
let {lineHeight, fontSize, height} = element.style
let { lineHeight, fontSize, height } = element.style
if (lineHeight === '') {
lineHeight = 1.5
}
@ -1552,7 +1552,7 @@ export default {
}
},
getRefLineParams(params) {
const {vLine, hLine} = params
const { vLine, hLine } = params
this.vLine = vLine
this.hLine = hLine
},
@ -1689,10 +1689,6 @@ export default {
const resizeItem = _.get(infoBox, 'resizeItem')
const vm = this
vm.$set(resizeItem, 'isPlayer', true)
const startX = infoBox.startX
const startY = infoBox.startY
const moveXSize = e.pageX - startX // X
const moveYSize = e.pageY - startY // Y
let nowX = Math.round(item.style.width * this.matrixScaleWidth)
let nowY = Math.round(item.style.height * this.matrixScaleHeight)
nowX = nowX > 0 ? nowX : 1
@ -1705,8 +1701,8 @@ export default {
newX = newX > 0 ? newX : 1
newY = newY > 0 ? newY : 1
if (item.sizex !== nowX || item.sizey !== nowY) {
debounce((function (newX, oldX, newY, oldY) {
return function () {
debounce((function(newX, oldX, newY, oldY) {
return function() {
if (newX !== oldX || oldY !== newY) {
movePlayer.call(vm, resizeItem, {
x: newX,
@ -1742,8 +1738,8 @@ export default {
return
}
if (newX !== oldX || oldY !== newY) {
debounce((function (newX, oldX, newY, oldY) {
return function () {
debounce((function(newX, oldX, newY, oldY) {
return function() {
if (newX !== oldX || oldY !== newY) {
movePlayer.call(vm, moveItem, {
x: newX,
@ -1781,7 +1777,7 @@ export default {
// 使copy
const finalList = []
const _this = this
_.forEach(this.componentData, function (item, index) {
_.forEach(this.componentData, function(item, index) {
if (_.isEmpty(item)) return
if (_this.canvasId === item.canvasId) {
delete item['_dragId']
@ -1823,7 +1819,7 @@ export default {
addItemBox(item) {
this.yourList.push(item)
this.$nextTick(function () {
this.$nextTick(function() {
addItem.call(this, item, this.yourList.length - 1)
})
},
@ -1854,7 +1850,7 @@ export default {
//
resizeParentBoundsRef() {
const _this = this
_this.componentData.forEach(function (data, index) {
_this.componentData.forEach(function(data, index) {
_this.$refs.deDragRef && _this.$refs.deDragRef[index] && _this.$refs.deDragRef[index].checkParentSize()
})
},

View File

@ -1,5 +1,8 @@
<template>
<div @mousedown="fieldsAreaDown" class="field-main">
<div
class="field-main"
@mousedown="fieldsAreaDown"
>
<el-button
v-for="(field) in fields"
:key="field.id"

View File

@ -133,8 +133,8 @@
</template>
<script>
import {mapState} from 'vuex'
import {checkSameDataSet} from '@/api/chart/chart'
import { mapState } from 'vuex'
import { checkSameDataSet } from '@/api/chart/chart'
export default {
@ -179,7 +179,6 @@ export default {
])
},
mounted() {
const _this = this
//
checkSameDataSet(this.curLinkageView.propValue.viewId, this.element.propValue.viewId).then(res => {
const chartDetails = JSON.parse(this.panelViewDetailsInfo[this.curLinkageView.propValue.viewId])
@ -189,7 +188,7 @@ export default {
if (res.data === 'YES' && this.linkageInfo.linkageFields.length === 0) {
this.sourceLinkageInfo.targetViewFields.forEach(item => {
if (curCheckAllAxisStr.includes(item.id)&&targetCheckAllAxisStr.includes(item.id)) {
if (curCheckAllAxisStr.includes(item.id) && targetCheckAllAxisStr.includes(item.id)) {
this.addLinkageField(item.id, item.id)
}
})

View File

@ -66,8 +66,8 @@ export default {
}
},
onSubmit() {
this.curComponent.style.carouselEnable = this.carouselEnable
this.curComponent.style.switchTime = this.switchTime
this.curComponent.style.carouselEnable = this.carouselEnable
this.curComponent.style.switchTime = this.switchTime
this.$store.commit('canvasChange')
this.onClose()
},

View File

@ -1,7 +1,8 @@
<template>
<div>
<el-dropdown
trigger="click">
trigger="click"
>
<input
id="input"
ref="trackButton"

View File

@ -45,7 +45,7 @@
class="info-class"
>
<span>{{ $t('panel.link_add_tips_pre') }}</span>
<i class="icon iconfont icon-chaolianjie"/>
<i class="icon iconfont icon-chaolianjie" />
<span>{{ $t('panel.web_add_tips_suf') }}</span>
</div>
</el-row>

View File

@ -156,11 +156,11 @@ export default {
bus.$off('fieldSelect-' + this.element.propValue.viewId)
},
methods: {
changeRightDrawOpen(param){
if(param){
changeRightDrawOpen(param) {
if (param) {
this.drawLeft = 'auto!important'
this.drawRight = '380px'
}else{
} else {
this.drawLeft = 'none'
this.drawRight = 'auto'
}
@ -302,4 +302,3 @@ export default {
}
</style>

View File

@ -33,7 +33,7 @@
class="info-stream-class"
>
<span>{{ $t('panel.link_add_tips_pre') }}</span>
<i class="icon iconfont icon-chaolianjie"/>
<i class="icon iconfont icon-chaolianjie" />
<span>{{ $t('panel.stream_media_add_tips') }}</span>
</div>
</el-row>

View File

@ -27,7 +27,7 @@
class="info-class"
>
<span>{{ $t('panel.link_add_tips_pre') }}</span>
<i class="icon iconfont icon-chaolianjie"/>
<i class="icon iconfont icon-chaolianjie" />
<span>{{ $t('panel.video_add_tips') }}</span>
</div>
</el-row>

View File

@ -225,7 +225,7 @@ export default {
}
})
}
const result = { ...temp, ...{ DetailAreaCode: DetailAreaCode } }
const result = { ...temp, ...{ DetailAreaCode: DetailAreaCode }}
this.setLastMapChart(result)
return result
}

View File

@ -123,7 +123,7 @@ export default {
if (data.type === 'view') {
chartCopy(data.propValue.viewId, state.panel.panelInfo.id).then(res => {
const newView = deepCopy(data)
Vue.set(newView, 'needAdaptor', store.state.multiplexingStyleAdapt?needAdaptor:false)
Vue.set(newView, 'needAdaptor', store.state.multiplexingStyleAdapt ? needAdaptor : false)
newView.id = uuid.v1()
newView.propValue.viewId = res.data
newView['canvasId'] = data.canvasId
@ -131,7 +131,7 @@ export default {
if (newView.filters && newView.filters.length) {
newView.filters = []
}
if(needAdaptor && store.state.multiplexingStyleAdapt){
if (needAdaptor && store.state.multiplexingStyleAdapt) {
adaptCurThemeCommonStyle(newView)
}
store.commit('addComponent', { component: newView })
@ -145,23 +145,23 @@ export default {
const newViewId = uuid.v1()
sourceAndTargetIds[item.content.propValue.viewId] = newViewId
item.content.propValue.viewId = newViewId
Vue.set(item.content, 'needAdaptor', store.state.multiplexingStyleAdapt?needAdaptor:false)
Vue.set(item.content, 'needAdaptor', store.state.multiplexingStyleAdapt ? needAdaptor : false)
if (item.content.filters && item.content.filters.length) {
item.content.filters = []
}
}
})
chartBatchCopy({ 'sourceAndTargetIds': sourceAndTargetIds }, state.panel.panelInfo.id).then((rsp) => {
if(needAdaptor && store.state.multiplexingStyleAdapt){
adaptCurThemeCommonStyle(newCop,'copy')
if (needAdaptor && store.state.multiplexingStyleAdapt) {
adaptCurThemeCommonStyle(newCop, 'copy')
}
store.commit('addComponent', { component: newCop })
})
} else {
const newCop = deepCopy(data)
newCop.id = uuid.v1()
if(needAdaptor && store.state.multiplexingStyleAdapt) {
adaptCurThemeCommonStyle(newCop,'copy')
if (needAdaptor && store.state.multiplexingStyleAdapt) {
adaptCurThemeCommonStyle(newCop, 'copy')
}
store.commit('addComponent', { component: newCop })
}

View File

@ -9,9 +9,6 @@ const vKey = 86 // 粘贴
const cKey = 67 // 复制
const xKey = 88 // 剪切
const yKey = 89 // 重做
const zKey = 90 // 撤销
const gKey = 71 // 组合
const bKey = 66 // 拆分
@ -33,7 +30,7 @@ const ignoreComponent = ['de-button', 'de-reset-button']
const basemap = {
[vKey]: paste,
[gKey]: redo,
[bKey]: undo,
[bKey]: undo
}
// 组件未锁定状态下可以执行的操作
@ -50,7 +47,6 @@ const unlockMap = {
let isCtrlOrCommandDown = false
// 检查当前页面是否有弹框
const checkDialog = () => {
let haveDialog = false
@ -141,21 +137,6 @@ function undo() {
store.commit('undo')
}
function compose() {
if (store.state.areaData.components.length) {
store.commit('compose')
store.commit('recordSnapshot')
}
}
function decompose() {
const curComponent = store.state.curComponent
if (curComponent && !curComponent.isLock && curComponent.component === 'Group') {
store.commit('decompose')
store.commit('recordSnapshot')
}
}
function copyAndPast() {
if (store.state.curComponent) {
if (ignoreComponent.includes(store.state.curComponent.component)) {

View File

@ -47,7 +47,7 @@ export default {
data() {
return {
asideHidden: false,
currentWidth: '',
currentWidth: ''
}
},
computed: {

View File

@ -66,7 +66,7 @@
@mousedown.stop.prevent="handleDown(handlei, $event)"
@touchstart.stop.prevent="handleTouchDown(handlei, $event)"
>
<slot :name="handlei"/>
<slot :name="handlei" />
</div>
<div
:id="componentCanvasId"
@ -74,22 +74,22 @@
class="main-background"
>
<div
v-show="!this.element.editing"
v-show="!element.editing"
class="de-drag-area de-drag-top"
@mousedown="elementMouseDown"
/>
<div
v-show="!this.element.editing && this.element.type !=='de-tabs'"
v-show="!element.editing && element.type !=='de-tabs'"
class="de-drag-area de-drag-right"
@mousedown="elementMouseDown"
/>
<div
v-show="!this.element.editing && this.element.type !=='de-tabs'"
v-show="!element.editing && element.type !=='de-tabs'"
class="de-drag-area de-drag-bottom"
@mousedown="elementMouseDown"
/>
<div
v-show="!this.element.editing && this.element.type !=='de-tabs'"
v-show="!element.editing && element.type !=='de-tabs'"
class="de-drag-area de-drag-left"
@mousedown="elementMouseDown"
/>
@ -99,7 +99,7 @@
class="svg-background"
:icon-class="mainSlotSvgInner"
/>
<slot/>
<slot />
</div>
</div>
</div>

View File

@ -23,7 +23,7 @@
:indeterminate="isIndeterminate"
@change="selectAllChange"
>
<span :style="{ color: `${isConfig ? '#1F2329' : customStyle.wordColor} !important`}">{{ $t('dataset.check_all') }}</span>
<span :style="{ color: `${isConfig ? '#1F2329' : customStyle.wordColor} !important`}">{{ $t('dataset.check_all') }}</span>
</el-checkbox>
</p>
<el-option

View File

@ -42,8 +42,7 @@ export default {
})
},
withLink(options, confirmButtonTextInfo) {
const h = this.$createElement;
const that = this
const h = this.$createElement
const { title, content, type = 'danger', cb, confirmButtonText = confirmButtonTextInfo || this.$t('commons.delete'), showCancelButton = true, cancelButtonText = this.$t('commons.cancel'), cancelCb = () => {}, finallyCb = () => {}, link = '', templateDel, linkTo } = options
const customClass = `de-confirm de-confirm-fail de-use-html`
const confirmButtonClass = `de-confirm-${type}-btn de-confirm-btn`
@ -55,14 +54,14 @@ export default {
title,
content,
link
},
}
},
on: {
change: () => {
linkTo()
}
}
}),
})
]),
duration: 0,
confirmButtonText,
@ -71,18 +70,18 @@ export default {
cancelButtonClass: 'de-confirm-btn de-confirm-plain-cancel',
confirmButtonClass,
customClass,
iconClass: 'el-icon-warning',
iconClass: 'el-icon-warning'
}).then(action => {
if ('confirm' === action) {
if (action === 'confirm') {
cb()
}
})
.catch((action) => {
cancelCb(action)
})
.finally(() => {
finallyCb()
})
.catch((action) => {
cancelCb(action)
})
.finally(() => {
finallyCb()
})
}
}
}

View File

@ -15,7 +15,6 @@
<script>
import bus from '@/utils/bus'
import { mapState } from 'vuex'
export default {
props: {
@ -27,9 +26,9 @@ export default {
type: Boolean,
default: true
},
canvasStyleData:{
canvasStyleData: {
type: Object,
default: {}
default: () => {}
},
size: String
},

View File

@ -21,28 +21,44 @@
@focus="toFocus"
@blur="onBlur"
/>
<div v-if="isMobileStatus" class="vant-mobile" :class="isRange && 'wl50'" @click="showPopup"/>
<div v-if="isMobileStatus && isRange" class="vant-mobile" :class="['datetimerange', 'datetime', 'daterange'].includes(componentType) && 'wr50'" @click="showPopupRight"/>
<van-popup get-container="body" v-if="isMobileStatus" v-model="showDate" position="bottom" style="height: auto">
<div
v-if="isMobileStatus"
class="vant-mobile"
:class="isRange && 'wl50'"
@click="showPopup"
/>
<div
v-if="isMobileStatus && isRange"
class="vant-mobile"
:class="['datetimerange', 'datetime', 'daterange'].includes(componentType) && 'wr50'"
@click="showPopupRight"
/>
<van-popup
v-if="isMobileStatus"
v-model="showDate"
get-container="body"
position="bottom"
style="height: auto"
>
<van-datetime-picker
v-if="showdDatetimePicker"
@confirm="confirm"
@cancel="cancel"
v-model="currentDate"
:type="componentTypeVant"
title="选择时间"
:min-date="minDate"
:max-date="maxDate"
/>
<van-picker
v-else
title="选择时间"
:default-index="defaultIndex"
show-toolbar
:columns="columns"
@confirm="onConfirm"
@cancel="onCancel"
/>
@confirm="confirm"
@cancel="cancel"
/>
<van-picker
v-else
title="选择时间"
:default-index="defaultIndex"
show-toolbar
:columns="columns"
@confirm="onConfirm"
@cancel="onCancel"
/>
</van-popup>
</div>
</template>
@ -51,7 +67,7 @@
import { ApplicationContext } from '@/utils/ApplicationContext'
import { timeSection } from '@/utils'
import bus from '@/utils/bus'
import customInput from '@/components/widget/deWidget/customInput'
import customInput from '@/components/widget/deWidget/customInput'
import { dateMap, years, seconds } from '@/components/widget/deWidget/serviceNameFn'
import { mapState } from 'vuex'
import vanPopup from 'vant/lib/popup'
@ -262,6 +278,7 @@ export default {
},
methods: {
showPopupRight() {
// eslint-disable-next-line
const [_, end] = this.values || []
!!end && (this.currentDate = new Date(end))
this.selectSecondInput = true

View File

@ -15,7 +15,6 @@
<script>
import bus from '@/utils/bus'
import { mapState } from 'vuex'
export default {
props: {
@ -27,9 +26,9 @@ export default {
type: Boolean,
default: true
},
canvasStyleData:{
canvasStyleData: {
type: Object,
default: {}
default: () => {}
},
size: String
},

View File

@ -17,8 +17,8 @@
popper-class="coustom-de-select"
:list="data"
:is-config="isConfig"
@resetKeyWords="filterMethod"
:custom-style="customStyle"
@resetKeyWords="filterMethod"
@change="changeValue"
@focus="setOptionWidth"
@blur="onBlur"

View File

@ -76,8 +76,8 @@
style="width: 100%;height:100%"
>
<Preview
:component-data="tabCanvasComponentData(item.name)"
:ref="'canvasTabRef-'+item.name"
:component-data="tabCanvasComponentData(item.name)"
:canvas-style-data="canvasStyleData"
:canvas-id="element.id+'-'+item.name"
:panel-info="panelInfo"
@ -315,9 +315,9 @@ export default {
return Boolean(this.$store.state.dragComponentInfo)
},
headClass() {
if(this.tabsAreaScroll){
if (this.tabsAreaScroll) {
return 'tab-head-left'
}else{
} else {
return 'tab-head-' + this.element.style.headPosition
}
},
@ -474,7 +474,7 @@ export default {
bus.$on('add-new-tab', this.addNewTab)
this.$nextTick(() => {
this.activeTabName = this.element.options.tabList[0].name
});
})
this.$store.commit('setTabActiveTabNameMap', { tabId: this.element.id, activeTabName: this.activeTabName })
this.setContentThemeStyle()
},
@ -490,12 +490,12 @@ export default {
setTabLayout: _.debounce(function() {
this.headClassScroll = !!this.$refs.deTabsConstom.$refs.tabsConstom.$refs.nav.scrollable && 'head-class-scroll'
}, 100),
calcTabLength(){
this.$nextTick(()=>{
if(this.element.options.tabList.length>1){
const containerDom = document.getElementById("tab-"+this.element.options.tabList[this.element.options.tabList.length -1].name)
calcTabLength() {
this.$nextTick(() => {
if (this.element.options.tabList.length > 1) {
const containerDom = document.getElementById('tab-' + this.element.options.tabList[this.element.options.tabList.length - 1].name)
this.tabsAreaScroll = containerDom.parentNode.scrollWidth > containerDom.parentNode.parentNode.scrollWidth
}else{
} else {
this.tabsAreaScroll = false
}
})
@ -504,7 +504,7 @@ export default {
return this.element.type
},
getWrapperChildRefs() {
let refsSubAll = []
const refsSubAll = []
const _this = this
this.element.options.tabList.forEach(tabItem => {
const refsSub = _this.$refs['canvasTabRef-' + tabItem.name]
@ -544,7 +544,7 @@ export default {
if (targetRef) {
targetRef[0]?.restore()
}
});
})
}, switchTime)
}
},

View File

@ -143,8 +143,8 @@ export default {
},
methods: {
webMsgTopicCall(param) {
const ip = param
const msg = this.$t('multi_login_lang.forced_offline')
// eslint-disable-next-line
this.$error(eval(msg))
bus.$emit('sys-logout')
},

View File

@ -11,7 +11,6 @@ import store from '../store'
import router from '../router/mobile.js'
import message from '../utils/message'
import '@/icons' // icon
import '@/permission' // permission control
import api from '@/api/index.js'
import filter from '@/filter/filter'
import directives from '../directive'

View File

@ -57,7 +57,7 @@ const routeBefore = (callBack) => {
callBack()
}
}
router.beforeEach(async (to, from, next) => routeBefore(() => {
router.beforeEach(async(to, from, next) => routeBefore(() => {
// start progress bar
NProgress.start()
const mobileIgnores = ['/delink', '/de-auto-login']

View File

@ -5,7 +5,7 @@ Vue.use(Router)
export const constantRoutes = [
{
path: '/',
component: () => import('@/views/mobile/index.vue'),
component: () => import('@/views/mobile/index.vue')
}
]

View File

@ -22,14 +22,14 @@ import layer from '@/components/canvas/store/layer'
import snapshot from '@/components/canvas/store/snapshot'
import lock from '@/components/canvas/store/lock'
import task from './modules/task'
import {formatCondition, valueValid} from '@/utils/conditionUtil'
import {Condition} from '@/components/widget/bean/Condition'
import { formatCondition, valueValid } from '@/utils/conditionUtil'
import { Condition } from '@/components/widget/bean/Condition'
import {DEFAULT_COMMON_CANVAS_STYLE_STRING} from '@/views/panel/panel'
import { DEFAULT_COMMON_CANVAS_STYLE_STRING } from '@/views/panel/panel'
import bus from '@/utils/bus'
import {BASE_MOBILE_STYLE} from '@/components/canvas/customComponent/component-list'
import {TYPE_CONFIGS} from '@/views/chart/chart/util'
import {deepCopy} from '@/components/canvas/utils/utils'
import { BASE_MOBILE_STYLE } from '@/components/canvas/customComponent/component-list'
import { TYPE_CONFIGS } from '@/views/chart/chart/util'
import { deepCopy } from '@/components/canvas/utils/utils'
Vue.use(Vuex)
@ -156,7 +156,7 @@ const data = {
previewComponentData: [],
currentCanvasNewId: [],
lastViewRequestInfo: {},
multiplexingStyleAdapt: true //复用样式跟随主题
multiplexingStyleAdapt: true // 复用样式跟随主题
},
mutations: {
...animation.mutations,
@ -201,7 +201,7 @@ const data = {
})
},
setCurComponent(state, {component, index}) {
setCurComponent(state, { component, index }) {
if (!component && state.curComponent) {
Vue.set(state.curComponent, 'editing', false)
}
@ -239,7 +239,7 @@ const data = {
state.previewCanvasScale.scalePointHeight = scale.scaleHeight
}
},
setShapeStyle({curComponent, canvasStyleData, curCanvasScaleMap}, {top, left, width, height, rotate}) {
setShapeStyle({ curComponent, canvasStyleData, curCanvasScaleMap }, { top, left, width, height, rotate }) {
if (curComponent) {
const curCanvasScaleSelf = curCanvasScaleMap[curComponent.canvasId]
if (top || top === 0) curComponent.style.top = Math.round((top / curCanvasScaleSelf.scalePointHeight))
@ -250,7 +250,7 @@ const data = {
}
},
setShapeSingleStyle({curComponent}, {key, value}) {
setShapeSingleStyle({ curComponent }, { key, value }) {
curComponent.style[key] = value
},
@ -274,14 +274,14 @@ const data = {
setMobileComponentData(state, mobileComponentData = []) {
Vue.set(state, 'mobileComponentData', mobileComponentData)
},
addComponent(state, {component, index}) {
addComponent(state, { component, index }) {
if (index !== undefined) {
state.componentData.splice(index, 0, component)
} else {
state.componentData.push(component)
state.currentCanvasNewId.push(component.id)
}
this.commit('setCurComponent', {component: component, index: index || state.componentData.length - 1})
this.commit('setCurComponent', { component: component, index: index || state.componentData.length - 1 })
},
removeViewFilter(state, componentId) {
state.componentData = state.componentData.map(item => {
@ -372,7 +372,7 @@ const data = {
trackInfo = state.nowPanelTrackInfo
// 兼容情况,当源视图多个字段匹配目标视图一个字段的时候,默认只保留当前点击的维度,将改维度排序到组件结尾,去重时即可保留
const activeDimensionIndex = data.dimensionList.findIndex(dimension => dimension.id === data.name)
if (activeDimensionIndex > -1 && activeDimensionIndex != dimensionSort.length - 1) {
if (activeDimensionIndex > -1 && activeDimensionIndex !== dimensionSort.length - 1) {
const dimensionLast = dimensionSort[dimensionSort.length - 1]
dimensionSort[dimensionSort.length - 1] = dimensionSort[activeDimensionIndex]
dimensionSort[activeDimensionIndex] = dimensionLast
@ -466,7 +466,7 @@ const data = {
const currentFilters = element.outerParamsFilters || [] // 外部参数信息
// 外部参数 可能会包含多个参数
Object.keys(params).forEach(function (sourceInfo) {
Object.keys(params).forEach(function(sourceInfo) {
// 获取外部参数的值 sourceInfo 是外部参数名称 支持数组传入
let paramValue = params[sourceInfo]
let operator = 'in'
@ -668,13 +668,13 @@ const data = {
}
}
},
updateComponentViewsData(state, {viewId, propertyKey, propertyValue}) {
updateComponentViewsData(state, { viewId, propertyKey, propertyValue }) {
state.componentViewsData[viewId][propertyKey] = propertyValue
},
removeCurMultiplexingComponentWithId(state, id) {
delete state.curMultiplexingComponents[id]
},
addCurMultiplexingComponent(state, {component, componentId}) {
addCurMultiplexingComponent(state, { component, componentId }) {
if (componentId) {
if (component.type === 'custom-button' && component.serviceName === 'buttonSureWidget') {
const copyComponent = deepCopy(component)
@ -771,7 +771,7 @@ const data = {
state.changeProperties[propertyInfo.custom][propertyInfo.property] = propertyInfo.value
},
initCanvasBase(state) {
this.commit('setCurComponent', {component: null, index: null})
this.commit('setCurComponent', { component: null, index: null })
this.commit('clearLinkageSettingInfo', false)
this.commit('resetViewEditInfo')
this.commit('initCurMultiplexingComponents')
@ -861,7 +861,7 @@ const data = {
}
})
bus.$emit('clear_panel_linkage', {viewId: viewId})
bus.$emit('clear_panel_linkage', { viewId: viewId })
},
setMultiplexingStyleAdapt(state, value) {
state.multiplexingStyleAdapt = value

View File

@ -4,7 +4,6 @@ import { resetRouter } from '@/router'
import { format } from '@/utils/formatUi'
import { getLanguage } from '@/lang/index'
import Cookies from 'js-cookie'
import router from '@/router'
import i18n from '@/lang'
import { $alert, $confirm } from '@/utils/message'
const getDefaultState = () => {
@ -70,7 +69,7 @@ const mutations = {
},
SET_PASSWORD_MODIFIED: (state, passwordModified) => {
state.passwordModified = passwordModified
},
}
}
const actions = {
@ -84,7 +83,7 @@ const actions = {
commit('SET_LOGIN_MSG', null)
setToken(data.token)
let passwordModified = true
if (data.hasOwnProperty('passwordModified')) {
if (Object.prototype.hasOwnProperty.call(data, 'passwordModified')) {
passwordModified = data.passwordModified
}
commit('SET_PASSWORD_MODIFIED', passwordModified)
@ -110,8 +109,8 @@ const actions = {
reject('Verification failed, please Login again.')
}
const historyUserId = localStorage.getItem('userId')
if(historyUserId && historyUserId !== data.userId+''){
const clearLocalStorage = [ 'panel-main-tree', 'panel-default-tree','chart-tree','dataset-tree']
if (historyUserId && historyUserId !== data.userId + '') {
const clearLocalStorage = ['panel-main-tree', 'panel-default-tree', 'chart-tree', 'dataset-tree']
clearLocalStorage.forEach((item) => {
localStorage.removeItem(item)
})

View File

@ -192,6 +192,7 @@ import { COLOR_PANEL } from '@/views/chart/chart/chart'
import { uploadFileResult } from '@/api/staticResource/staticResource'
import bus from '@/utils/bus'
import BackgroundItemOverall from '@/views/background/BackgroundItemOverall'
import { hexColorToRGBA } from '@/views/chart/chart/util'
export default {
name: 'BackgroundOverall',

View File

@ -51,12 +51,12 @@
>
<el-color-picker
ref="colorPicker"
@change="colorChange"
v-model="curComponent.commonBackground.color"
:disabled="!curComponent.commonBackground.backgroundColorSelect"
size="mini"
class="color-picker-style"
:predefine="predefineColors"
@change="colorChange"
/>
</el-col>
<el-col :span="3">
@ -263,7 +263,7 @@ import { deepCopy, imgUrlTrans } from '@/components/canvas/utils/utils'
import { COLOR_PANEL } from '@/views/chart/chart/chart'
import { uploadFileResult } from '@/api/staticResource/staticResource'
import { COMMON_BACKGROUND_NONE } from '@/components/canvas/customComponent/component-list'
import {hexColorToRGBA} from "@/views/chart/chart/util";
import { hexColorToRGBA } from '@/views/chart/chart/util'
export default {
name: 'Background',

View File

@ -35,7 +35,7 @@ export const DEFAULT_COLOR_CASE = {
mapStyle: 'normal',
mapLineGradient: false,
mapLineSourceColor: '#146C94',
mapLineTargetColor: '#576CBC',
mapLineTargetColor: '#576CBC'
}
export const DEFAULT_COLOR_CASE_DARK = {
@ -57,7 +57,7 @@ export const DEFAULT_COLOR_CASE_DARK = {
mapStyle: 'darkblue',
mapLineGradient: false,
mapLineSourceColor: '#2F58CD',
mapLineTargetColor: '#3795BD',
mapLineTargetColor: '#3795BD'
}
export const DEFAULT_SIZE = {
barDefault: true,

View File

@ -1,4 +1,4 @@
import { TableSheet, S2Event, PivotSheet, DataCell, EXTRA_FIELD, TOTAL_VALUE, BaseEvent } from '@antv/s2'
import { TableSheet, S2Event, PivotSheet, DataCell, EXTRA_FIELD, TOTAL_VALUE } from '@antv/s2'
import { getCustomTheme, getSize } from '@/views/chart/chart/common/common_table'
import { DEFAULT_COLOR_CASE, DEFAULT_TOTAL } from '@/views/chart/chart/chart'
import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter'
@ -551,12 +551,12 @@ function getConditions(chart) {
}
}
let filedValueMap = getFieldValueMap(chart)
const filedValueMap = getFieldValueMap(chart)
for (let i = 0; i < conditions.length; i++) {
const field = conditions[i]
res.text.push({
field: field.field.dataeaseName,
mapping(value,rowData) {
mapping(value, rowData) {
return {
fill: mappingColor(value, valueColor, field, 'color', filedValueMap, rowData)
}
@ -564,7 +564,7 @@ function getConditions(chart) {
})
res.background.push({
field: field.field.dataeaseName,
mapping(value,rowData) {
mapping(value, rowData) {
return {
fill: mappingColor(value, valueBgColor, field, 'backgroundColor', filedValueMap, rowData)
}
@ -575,7 +575,7 @@ function getConditions(chart) {
return res
}
function getValue(field, filedValueMap, rowData){
function getValue(field, filedValueMap, rowData) {
if (field.summary === 'value') {
return rowData[field.curField.dataeaseName]
} else {
@ -589,7 +589,7 @@ function mappingColor(value, defaultColor, field, type, filedValueMap, rowData)
let flag = false
const t = field.conditions[i]
if (field.field.deType === 2 || field.field.deType === 3 || field.field.deType === 4) {
let tv,max,min;
let tv, max, min
if (t.field === '1') {
if (t.term === 'between') {
max = parseFloat(getValue(t.maxField, filedValueMap, rowData))
@ -648,7 +648,7 @@ function mappingColor(value, defaultColor, field, type, filedValueMap, rowData)
color = defaultColor
}
} else if (field.field.deType === 0 || field.field.deType === 5) {
let tv;
let tv
if (t.field === '1') {
tv = getValue(t.targetField, filedValueMap, rowData)
} else {
@ -692,9 +692,9 @@ function mappingColor(value, defaultColor, field, type, filedValueMap, rowData)
}
} else {
// time
let tv;
let tv
if (t.field === '1') {
let fieldValue = getValue(t.targetField, filedValueMap, rowData);
const fieldValue = getValue(t.targetField, filedValueMap, rowData)
if (fieldValue) {
tv = new Date(fieldValue.replace(/-/g, '/') + ' GMT+8').getTime()
}
@ -760,12 +760,12 @@ function showTooltip(s2Instance, event, fieldMap) {
})
}
function getFieldValueMap(view){
let fieldValueMap = {}
function getFieldValueMap(view) {
const fieldValueMap = {}
if (view.data && view.data.dynamicAssistData && view.data.dynamicAssistData.length > 0) {
view.data.dynamicAssistData.forEach(ele => {
fieldValueMap[ele.summary + '-' + ele.fieldId] = ele.value
});
})
}
return fieldValueMap;
return fieldValueMap
}

View File

@ -67,8 +67,8 @@
>
{{ $t('chart.total') }}
<span>{{
(chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0)
}}</span>
(chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0)
}}</span>
{{ $t('chart.items') }}
</span>
<de-pagination

View File

@ -56,7 +56,6 @@
<script>
import { compareDayList, compareMonthList, compareYearList } from '@/views/chart/chart/compare'
import { SUPPORT_Y_M } from '@/views/chart/chart/chart'
export default {
name: 'CompareEdit',

View File

@ -51,17 +51,17 @@
/>
</el-select>
<el-tooltip
class="item"
effect="dark"
placement="bottom"
class="item"
effect="dark"
placement="bottom"
>
<div
slot="content"
v-html="$t('chart.font_family_tip')"
slot="content"
v-html="$t('chart.font_family_tip')"
/>
<i
class="el-icon-info"
style="cursor: pointer;color: #606266;margin-left: 4px;"
class="el-icon-info"
style="cursor: pointer;color: #606266;margin-left: 4px;"
/>
</el-tooltip>
</el-form-item>

View File

@ -32,7 +32,7 @@ import 'tinymce/plugins/nonbreaking'
import 'tinymce/plugins/pagebreak'
import { imgUrlTrans } from '@/components/canvas/utils/utils'
import { mapState } from 'vuex'
import {hexColorToRGBA} from "@/views/chart/chart/util";
import { hexColorToRGBA } from '@/views/chart/chart/util'
//
export default {
name: 'RemarkEditor',

View File

@ -306,21 +306,30 @@
>{{ $t('chart.filter_not_empty') }}</span>
</el-col>
<el-col :span="4" v-if="!item.term.includes('null') && !item.term.includes('empty')">
<span
v-if="item.field === '0'"
:title="$t('chart.field_fixed')"
>{{ $t('chart.field_fixed') }}</span>
<span
v-if="item.field === '1'"
:title="$t('chart.field_dynamic')"
>{{ $t('chart.field_dynamic') }}</span>
<el-col
v-if="!item.term.includes('null') && !item.term.includes('empty')"
:span="4"
>
<span
v-if="item.field === '0'"
:title="$t('chart.field_fixed')"
>{{ $t('chart.field_fixed') }}</span>
<span
v-if="item.field === '1'"
:title="$t('chart.field_dynamic')"
>{{ $t('chart.field_dynamic') }}</span>
</el-col>
<el-col :span="4" v-if="item.term.includes('null') || item.term.includes('empty')">
<el-col
v-if="item.term.includes('null') || item.term.includes('empty')"
:span="4"
>
&nbsp;
</el-col>
<el-col :span="10" v-if="item.field === '0'">
<el-col
v-if="item.field === '0'"
:span="10"
>
<span
v-if="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'"
:title="item.value"
@ -331,14 +340,20 @@
<span v-else>&nbsp;</span>
</el-col>
<el-col :span="10" v-if="item.field === '1'">
<span v-if="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'"
:title="item.targetField.curField.name + '(' + $t('chart.' + item.targetField.summary) + ')'">{{ item.targetField.curField.name + '(' + $t('chart.' + item.targetField.summary) + ')' }}</span>
<el-col
v-if="item.field === '1'"
:span="10"
>
<span
v-if="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'"
:title="item.targetField.curField.name + '(' + $t('chart.' + item.targetField.summary) + ')'"
>{{ item.targetField.curField.name + '(' + $t('chart.' + item.targetField.summary) + ')' }}</span>
<span v-else-if="!item.term.includes('null') && !item.term.includes('empty') && item.term === 'between'"
:title="item.minField.curField.name + '(' + $t('chart.' + item.minField.summary) + ')' + ' ≤' + $t('chart.drag_block_label_value') + '≤ ' + item.maxField.curField.name + '(' + $t('chart.' + item.maxField.summary) + ')'">
{{ item.minField.curField.name + '(' + $t('chart.' + item.minField.summary) + ')' + ' ≤' + $t('chart.drag_block_label_value') + '≤ ' + item.maxField.curField.name + '(' + $t('chart.' + item.maxField.summary) + ')' }}
<span
v-else-if="!item.term.includes('null') && !item.term.includes('empty') && item.term === 'between'"
:title="item.minField.curField.name + '(' + $t('chart.' + item.minField.summary) + ')' + ' ≤' + $t('chart.drag_block_label_value') + '≤ ' + item.maxField.curField.name + '(' + $t('chart.' + item.maxField.summary) + ')'"
>
{{ item.minField.curField.name + '(' + $t('chart.' + item.minField.summary) + ')' + ' ≤' + $t('chart.drag_block_label_value') + '≤ ' + item.maxField.curField.name + '(' + $t('chart.' + item.maxField.summary) + ')' }}
</span>
<span v-else>&nbsp;</span>
@ -663,7 +678,7 @@ export default {
},
fieldValid(field) {
//
return field && field.fieldId && field.summary;
return field && field.fieldId && field.summary
},
changeTableThreshold() {
// check line config

View File

@ -95,35 +95,35 @@
<el-col :span="3">
<el-select
v-show="!item.term.includes('null') && !item.term.includes('empty')"
v-model="item.field"
size="mini"
style="margin-left: 10px;"
@change="changeThresholdField(item)"
v-show="!item.term.includes('null') && !item.term.includes('empty')"
v-model="item.field"
size="mini"
style="margin-left: 10px;"
@change="changeThresholdField(item)"
>
<el-option
v-for="opt in fieldTypeOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value"
v-for="opt in fieldTypeOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value"
/>
</el-select>
</el-col>
<el-col
v-if="item.field === '0'"
:span="12"
v-if="item.field === '0'"
:span="12"
>
<el-input
v-show="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'"
v-model="item.value"
class="value-item"
style="margin-left: 10px;"
:placeholder="$t('chart.drag_block_label_value')"
size="mini"
clearable
@change="changeThreshold"
/>
<span v-if="item.term === 'between'">
<el-input
v-show="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'"
v-model="item.value"
class="value-item"
style="margin-left: 10px;"
:placeholder="$t('chart.drag_block_label_value')"
size="mini"
clearable
@change="changeThreshold"
/>
<span v-if="item.term === 'between'">
<el-input
v-model="item.min"
class="item-long-between"
@ -144,8 +144,8 @@
</span>
</el-col>
<el-col
v-if="item.field === '1'"
:span="12"
v-if="item.field === '1'"
:span="12"
>
<span v-show="!item.term.includes('null') && !item.term.includes('empty') && item.term !== 'between'">
<el-select
@ -162,45 +162,45 @@
:label="fieldOption.name"
:value="fieldOption.id"
>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left; color: #8492a6; font-size: 12px">{{ fieldOption.name }}</span>
</el-option>
</el-select>
<el-select
v-model="item.targetField.summary"
size="mini"
class="item-long select-item"
style="margin-left: 10px;"
:placeholder="$t('chart.aggregation')"
@change="changeThreshold"
@visible-change="$forceUpdate()"
v-model="item.targetField.summary"
size="mini"
class="item-long select-item"
style="margin-left: 10px;"
:placeholder="$t('chart.aggregation')"
@change="changeThreshold"
@visible-change="$forceUpdate()"
>
<el-option
v-for="opt in getSummaryOptions(fieldItem.field.deType)"
:key="opt.id"
:value="opt.id"
:label="opt.name"
v-for="opt in getSummaryOptions(fieldItem.field.deType)"
:key="opt.id"
:value="opt.id"
:label="opt.name"
/>
</el-select>
</span>
@ -220,28 +220,28 @@
:label="fieldOption.name"
:value="fieldOption.id"
>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left; color: #8492a6; font-size: 12px">{{ fieldOption.name }}</span>
</el-option>
</el-select>
@ -255,10 +255,10 @@
@visible-change="$forceUpdate()"
>
<el-option
v-for="opt in getSummaryOptions(fieldItem.field.deType)"
:key="opt.id"
:value="opt.id"
:label="opt.name"
v-for="opt in getSummaryOptions(fieldItem.field.deType)"
:key="opt.id"
:value="opt.id"
:label="opt.name"
/>
</el-select>
<span style="margin: 0 4px;">{{ $t('chart.drag_block_label_value') }}</span>
@ -275,28 +275,28 @@
:label="fieldOption.name"
:value="fieldOption.id"
>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left">
<svg-icon
v-if="fieldOption.deType === 0"
icon-class="field_text"
class="field-icon-text"
/>
<svg-icon
v-if="fieldOption.deType === 1"
icon-class="field_time"
class="field-icon-time"
/>
<svg-icon
v-if="fieldOption.deType === 2 || fieldOption.deType === 3"
icon-class="field_value"
class="field-icon-value"
/>
<svg-icon
v-if="fieldOption.deType === 5"
icon-class="field_location"
class="field-icon-location"
/>
</span>
<span style="float: left; color: #8492a6; font-size: 12px">{{ fieldOption.name }}</span>
</el-option>
</el-select>
@ -320,7 +320,6 @@
</el-col>
<el-col
:span="3"
style="display: flex;align-items: center;justify-content: center;"
@ -400,22 +399,22 @@ export default {
backgroundColor: '#ffffff00',
min: '0',
max: '1',
targetField:{},
minField:{},
maxField:{}
targetField: {},
minField: {},
maxField: {}
},
summaryOptions: [{
id: 'value',
name: this.$t('chart.value')
id: 'value',
name: this.$t('chart.value')
}, {
id: 'avg',
name: this.$t('chart.avg')
id: 'avg',
name: this.$t('chart.avg')
}, {
id: 'max',
name: this.$t('chart.max')
id: 'max',
name: this.$t('chart.max')
}, {
id: 'min',
name: this.$t('chart.min')
id: 'min',
name: this.$t('chart.min')
}],
textOptions: [
{
@ -546,13 +545,13 @@ export default {
initConditionField(item) {
//
if (!item.targetField) {
item.targetField = {};
item.targetField = {}
}
if (!item.minField) {
item.minField = {};
item.minField = {}
}
if (!item.maxField) {
item.maxField = {};
item.maxField = {}
}
},
initOptions(item) {
@ -609,7 +608,7 @@ export default {
this.fields.forEach(ele => {
//
if (ele.chartId || ele.id === 'count') {
return;
return
}
if (ele.deType === 0 || ele.deType === 5) {
this.fieldsByType.text.push(ele)
@ -622,17 +621,17 @@ export default {
},
getSummaryOptions(deType) {
if (deType === 1) {
//
return this.summaryOptions.filter(ele => {
return ele.id !== 'avg'
})
//
return this.summaryOptions.filter(ele => {
return ele.id !== 'avg'
})
} else if (deType === 0 || deType === 5) {
//
return this.summaryOptions.filter(ele => {
return ele.id === 'value'
})
//
return this.summaryOptions.filter(ele => {
return ele.id === 'value'
})
} else {
return this.summaryOptions
return this.summaryOptions
}
},
addThreshold() {
@ -651,31 +650,31 @@ export default {
if (item.term === 'between') {
item.minField.curField = this.getQuotaField(item.minField.fieldId)
item.maxField.curField = this.getQuotaField(item.maxField.fieldId)
item.targetField = {};
item.targetField = {}
} else {
item.targetField.curField = this.getQuotaField(item.targetField.fieldId)
item.minField = {};
item.maxField = {};
item.minField = {}
item.maxField = {}
}
} else {
item.targetField = {};
item.minField = {};
item.maxField = {};
item.targetField = {}
item.minField = {}
item.maxField = {}
}
this.changeThreshold()
},
getQuotaField(id) {
if (!id) {
return {}
}
const fields = this.fields.filter(ele => {
return ele.id === id
})
if (fields.length === 0) {
return {}
} else {
return fields[0]
}
if (!id) {
return {}
}
const fields = this.fields.filter(ele => {
return ele.id === id
})
if (fields.length === 0) {
return {}
} else {
return fields[0]
}
},
addConditions(item) {
item.conditions.push(JSON.parse(JSON.stringify(this.thresholdCondition)))

View File

@ -1,6 +1,8 @@
<template>
<span style="transform: translate(0);display: inline-block;position: relative;
z-index: 10;">
<span
style="transform: translate(0);display: inline-block;position: relative;
z-index: 10;"
>
<el-popover
placement="bottom"
trigger="hover"

View File

@ -1,6 +1,9 @@
<template>
<div class="de-dataset-form">
<div v-loading="saveDisabled" class="top">
<div
v-loading="saveDisabled"
class="top"
>
<span class="name">
<i
class="el-icon-arrow-left"

View File

@ -9,7 +9,7 @@
class="arrow-right"
@click="showLeft = true"
>
<i class="el-icon-d-arrow-right"/>
<i class="el-icon-d-arrow-right" />
</p>
<div
v-show="showLeft"
@ -172,8 +172,8 @@
class="data"
>
<span class="result-num">{{
`${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')}`
}}</span>
`${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')}`
}}</span>
<div class="table-grid">
<ux-grid
ref="plxTable"

View File

@ -24,7 +24,7 @@
</el-button>
</el-row>
</el-row>
<el-divider/>
<el-divider />
<el-row>
<el-form :inline="true">
<el-form-item

View File

@ -9,7 +9,7 @@
class="arrow-right"
@click="showLeft = true"
>
<i class="el-icon-d-arrow-right"/>
<i class="el-icon-d-arrow-right" />
</p>
<div
v-show="showLeft"
@ -179,8 +179,8 @@
class="data"
>
<span class="result-num">{{
`${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')}`
}}</span>
`${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')}`
}}</span>
<div class="table-grid">
<ux-grid
ref="plxTable"

View File

@ -8,7 +8,7 @@
class="arrow-right"
@click="showLeft = true"
>
<i class="el-icon-d-arrow-right"/>
<i class="el-icon-d-arrow-right" />
</p>
<div
v-show="showLeft"
@ -21,16 +21,16 @@
effect="dark"
placement="right"
>
<div slot="content">
{{ $t('dataset.excel_info_1') }}<br>
{{ $t('dataset.excel_info_2') }}<br>
{{ $t('dataset.excel_info_3') }}
</div>
<svg-icon icon-class="icon_info_outlined" /></el-tooltip></span>
<i
class="el-icon-d-arrow-left"
@click="showLeft = false"
/>
<div slot="content">
{{ $t('dataset.excel_info_1') }}<br>
{{ $t('dataset.excel_info_2') }}<br>
{{ $t('dataset.excel_info_3') }}
</div>
<svg-icon icon-class="icon_info_outlined" /></el-tooltip></span>
<i
class="el-icon-d-arrow-left"
@click="showLeft = false"
/>
</p>
<el-upload
:action="baseUrl + 'dataset/table/excel/upload'"
@ -150,14 +150,14 @@
min-width="200px"
:field="field.fieldName"
:title="field.remarks"
:fieldType="field.fieldType"
:field-type="field.fieldType"
:resizable="true"
>
<template #header>
<el-dropdown
:key="field.fieldName + field.fieldType"
placement="bottom-start"
trigger="click"
:key="field.fieldName + field.fieldType"
@command="(type) => handleCommand(type, field)"
>
<span class="type-switch">
@ -179,7 +179,7 @@
icon-class="field_value"
class="field-icon-value"
/>
<i class="el-icon-arrow-down el-icon--right"/></span>
<i class="el-icon-arrow-down el-icon--right" /></span>
<el-dropdown-menu
slot="dropdown"
style="width: 178px"
@ -237,8 +237,9 @@ import { $alert } from '@/utils/message'
import store from '@/store'
import msgCfm from '@/components/msgCfm/index'
import cancelMix from './cancelMix'
import Config from "@/settings";
import Config from '@/settings'
import { updateCacheTree } from '@/components/canvas/utils/utils'
import { setToken } from '@/utils/auth'
const token = getToken()
const RefreshTokenKey = Config.RefreshTokenKey

View File

@ -23,8 +23,8 @@
/>
</el-select>
<el-select
:disabled="param.tableId"
v-model="mode"
:disabled="param.tableId"
style="width: 120px; margin: 0 12px"
filterable
:placeholder="$t('dataset.connect_mode')"
@ -35,16 +35,16 @@
value="0"
/>
<el-option
v-if="engineMode !== 'simple'"
:label="$t('dataset.sync_data')"
value="1"
v-if="engineMode !== 'simple'"
:disabled="disabledSync"
/>
</el-select>
<el-select
:disabled="param.tableId"
v-if="mode === '1'"
v-model="syncType"
:disabled="param.tableId"
style="width: 120px"
filterable
:placeholder="$t('dataset.connect_mode')"
@ -71,7 +71,7 @@
class="de-text-btn"
@click="dataReference = true"
>
<svg-icon icon-class="data-reference"/>
<svg-icon icon-class="data-reference" />
{{ $t('deDataset.data_reference') }}
</el-button>
<el-button
@ -81,17 +81,17 @@
class="de-text-btn"
@click="variableMgm"
>
<svg-icon icon-class="reference-setting"/>
<svg-icon icon-class="reference-setting" />
{{ $t('sql_variable.variable_mgm') }}
</el-button>
<el-divider direction="vertical"/>
<el-divider direction="vertical" />
<el-button
class="de-text-btn"
type="text"
size="small"
@click="getSQLPreview"
>
<svg-icon icon-class="reference-play"/>
<svg-icon icon-class="reference-play" />
{{ $t('deDataset.run_a_query') }}
</el-button>
</el-col>
@ -112,7 +112,7 @@
dataTable = ''
;keywords = ''
"
><i class="el-icon-arrow-left"/> {{ $t('chart.back') }}</span>
><i class="el-icon-arrow-left" /> {{ $t('chart.back') }}</span>
<span v-else>{{ $t('deDataset.data_reference') }}</span>
<i
style="cursor: pointer"
@ -132,7 +132,7 @@
:title="(showTable && dataTable) || selectedDatasource.name"
class="grey-name"
>
<svg-icon icon-class="db-de"/>
<svg-icon icon-class="db-de" />
{{ (showTable && dataTable) || selectedDatasource.name }}
</span>
<span class="grey">
@ -147,12 +147,15 @@
v-if="!dataSource"
class="no-select-datasource"
>{{
$t('deDataset.to_start_using')
}}</span>
$t('deDataset.to_start_using')
}}</span>
<template v-else>
<el-input :placeholder="$t('fu.search_bar.please_input')" style="padding: 5px" size="small"
v-model="keywords"
></el-input>
<el-input
v-model="keywords"
:placeholder="$t('fu.search_bar.please_input')"
style="padding: 5px"
size="small"
/>
<div
v-if="dataSource && !dataTable"
v-loading="tableLoading"
@ -164,10 +167,10 @@
class="table-or-field"
@click="typeSwitch(ele)"
>
<span
:title="`${ele.name}${ele.remark ? ':' + ele.remark : ''}`"
class="name"
>{{ ele.name }}</span>
<span
:title="`${ele.name}${ele.remark ? ':' + ele.remark : ''}`"
class="name"
>{{ ele.name }}</span>
<i
v-clipboard:copy="ele.name"
v-clipboard:success="onCopy"
@ -187,10 +190,10 @@
:key="ele.fieldName"
class="table-or-field field"
>
<span
:title="`${ele.fieldName}${ele.remark ? ':' + ele.remark : ''}`"
class="name"
>{{ ele.fieldName }}</span>
<span
:title="`${ele.fieldName}${ele.remark ? ':' + ele.remark : ''}`"
class="name"
>{{ ele.fieldName }}</span>
<i
v-clipboard:copy="ele.fieldName"
v-clipboard:success="onCopy"
@ -232,10 +235,10 @@
v-if="tabActive === 'result'"
class="result-num"
>{{
`(${$t('dataset.preview_show')} 1000 ${$t(
'dataset.preview_item'
)})`
}}</span>
`(${$t('dataset.preview_show')} 1000 ${$t(
'dataset.preview_item'
)})`
}}</span>
<span
class="drag"
@ -274,28 +277,32 @@
:description="$t('deDataset.run_failed')"
>{{ errMsgCont }}
</el-empty>
<div style="float: left; min-width: 100%;" v-else-if="fields.length">
<el-table
:data="plxTableData"
size="mini"
border
<div
v-else-if="fields.length"
style="float: left; min-width: 100%;"
>
<el-table-column
v-for="field in fields"
:key="field.fieldName"
min-width="200px"
:prop="field.fieldName"
:label="field.remarks"
resizable>
<template slot-scope="scope">
<span>{{ at(scope.row, field.fieldName)[0] }}</span>
</template>
</el-table-column>
</el-table>
<el-table
:data="plxTableData"
size="mini"
border
>
<el-table-column
v-for="field in fields"
:key="field.fieldName"
min-width="200px"
:prop="field.fieldName"
:label="field.remarks"
resizable
>
<template slot-scope="scope">
<span>{{ at(scope.row, field.fieldName)[0] }}</span>
</template>
</el-table-column>
</el-table>
</div>
<el-table
:data="plxTableData"
v-else
:data="plxTableData"
size="mini"
border
>
@ -391,7 +398,7 @@
direction="rtl"
>
<div class="content">
<i class="el-icon-info"/>
<i class="el-icon-info" />
{{ $t('dataset.sql_variable_limit_1') }}<br>
{{ $t('dataset.sql_variable_limit_2') }}<br>
</div>
@ -478,7 +485,8 @@
v-model="scope.row.defaultValue"
size="small"
type="text"
:placeholder="$t('fu.search_bar.please_input')">
:placeholder="$t('fu.search_bar.please_input')"
>
<el-select
slot="prepend"
v-model="scope.row.defaultValueScope"
@ -517,7 +525,10 @@
/>
</el-select>
</el-input>
<div v-if="['DATETIME-YEAR', 'DATETIME-YEAR-MONTH', 'DATETIME-YEAR-MONTH-DAY', 'DATETIME'].includes(scope.row.type[0])" class="el-input-group el-input-group--prepend de-group__prepend">
<div
v-if="['DATETIME-YEAR', 'DATETIME-YEAR-MONTH', 'DATETIME-YEAR-MONTH-DAY', 'DATETIME'].includes(scope.row.type[0])"
class="el-input-group el-input-group--prepend de-group__prepend"
>
<div class="el-input-group__prepend">
<el-select
v-model="scope.row.defaultValueScope"
@ -532,45 +543,45 @@
/>
</el-select>
</div>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR'"
v-model="scope.row.defaultValue"
type="year"
size="small"
value-format="yyyy"
:placeholder="$t('dataset.select_year')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR'"
v-model="scope.row.defaultValue"
type="year"
size="small"
value-format="yyyy"
:placeholder="$t('dataset.select_year')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR-MONTH'"
v-model="scope.row.defaultValue"
type="month"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_month')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR-MONTH'"
v-model="scope.row.defaultValue"
type="month"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_month')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR-MONTH-DAY'"
v-model="scope.row.defaultValue"
type="date"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_date')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME-YEAR-MONTH-DAY'"
v-model="scope.row.defaultValue"
type="date"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_date')"
/>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME'"
v-model="scope.row.defaultValue"
type="datetime"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_time')"
/>
</div>
<el-date-picker
v-if="scope.row.type[0] === 'DATETIME'"
v-model="scope.row.defaultValue"
type="datetime"
size="small"
:format="scope.row.type[1]"
:value-format="scope.row.type[1]"
:placeholder="$t('dataset.select_time')"
/>
</div>
</template>
</el-table-column>
</el-table>
@ -579,15 +590,15 @@
secondary
@click="closeVariableMgm"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
type="primary"
@click="saveVariable()"
>{{
$t('dataset.confirm')
}}
$t('dataset.confirm')
}}
</deBtn>
</div>
</el-drawer>
@ -1092,7 +1103,7 @@ export default {
for (let i = 0; i < this.variables.length; i++) {
if (this.variables[i].variableName === name) {
obj = this.variables[i]
if(!obj.hasOwnProperty("defaultValueScope")){
if (Object.prototype.hasOwnProperty.call(obj, 'defaultValueScope')) {
obj.defaultValueScope = 'EDIT'
}
}

View File

@ -53,8 +53,8 @@
<div class="sql-title">
{{ $t('deDataset.data_preview') }}
<span class="result-num">{{
`(${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')})`
}}</span>
`(${$t('dataset.preview_show')} 1000 ${$t('dataset.preview_item')})`
}}</span>
<span
class="drag"
@mousedown="mousedownDrag"
@ -96,8 +96,8 @@
secondary
@click="closeSelectDs()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
:disabled="!tempDs.id"
@ -122,21 +122,21 @@
size="840px"
direction="rtl"
>
<union-edit :union-param="unionParam"/>
<union-edit :union-param="unionParam" />
<div class="de-foot">
<deBtn
secondary
@click="closeEditUnion()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
type="primary"
@click="confirmEditUnion()"
>{{
$t('dataset.confirm')
}}
$t('dataset.confirm')
}}
</deBtn>
</div>
</el-drawer>

View File

@ -1,12 +1,12 @@
import pyjs from 'js-pinyin'
export function zh2py(str) {
return pyjs.getFullChars(str).toLowerCase().charCodeAt()
return pyjs.getFullChars(str).toLowerCase().charCodeAt()
}
export function pySort(arr = []) {
arr.sort((a, b) => {
return zh2py(a.name[0]) - zh2py(b.name[0])
})
return arr
}
arr.sort((a, b) => {
return zh2py(a.name[0]) - zh2py(b.name[0])
})
return arr
}

View File

@ -17,14 +17,14 @@
v-if="table.mode === 0"
class="de-tag primary"
>{{
$t('dataset.direct_connect')
}}</span>
$t('dataset.direct_connect')
}}</span>
<span
v-if="table.mode === 1"
class="de-tag warning"
>{{
$t('dataset.sync_data')
}}</span>
$t('dataset.sync_data')
}}</span>
</template>
<span
v-if="syncStatus === 'Underway'"
@ -33,7 +33,7 @@
>
{{ $t('dataset.dataset_sync') }}
</span>
<el-divider direction="vertical"/>
<el-divider direction="vertical" />
<span class="create-by">{{ $t('dataset.create_by') }}</span>
<span class="create-by">:{{ table.creatorName || 'N/A' }}</span>
<el-popover
@ -48,7 +48,11 @@
:data="table"
:tab-status="tabStatus"
/>
<svg-icon slot="reference" class="detail" icon-class="icon_info_outlined" />
<svg-icon
slot="reference"
class="detail"
icon-class="icon_info_outlined"
/>
</el-popover>
</el-col>
<el-col
@ -77,11 +81,11 @@
</deBtn>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="0">
<svg-icon icon-class="icon_add-entry_outlined"/>
<svg-icon icon-class="icon_add-entry_outlined" />
{{ $t('dataset.excel_replace') + $t('chart.chart_data') }}
</el-dropdown-item>
<el-dropdown-item command="1">
<svg-icon icon-class="icon_doc-replace_outlined"/>
<svg-icon icon-class="icon_doc-replace_outlined" />
{{ $t('dataset.excel_add') + $t('chart.chart_data') }}
</el-dropdown-item>
</el-dropdown-menu>
@ -218,7 +222,7 @@
>
<div class="tree-cont">
<div class="content">
<rowAuth ref="rowAuth"/>
<rowAuth ref="rowAuth" />
</div>
</div>
</el-form-item>
@ -234,8 +238,8 @@
>{{ $t('dataset.cancel') }}
</deBtn>
<deBtn
type="primary"
v-loading="exportDatasetLoading"
type="primary"
@click="exportDatasetRequest"
>{{ $t('dataset.confirm') }}
</deBtn>

View File

@ -18,7 +18,7 @@
:label="$t('dataset.name')"
prop="name"
>
<el-input v-model="datasetForm.name"/>
<el-input v-model="datasetForm.name" />
</el-form-item>
<el-form-item
:label="$t('deDataset.folder')"
@ -45,7 +45,7 @@
class="custom-tree-node-dataset"
>
<span v-if="data.modelInnerType === 'group'">
<svg-icon icon-class="scene"/>
<svg-icon icon-class="scene" />
</span>
<span
style="

View File

@ -111,8 +111,8 @@
class="no-tdata-new"
@click="() => clickAdd()"
>{{
$t('deDataset.create')
}}</span>
$t('deDataset.create')
}}</span>
</div>
<el-tree
v-else
@ -134,7 +134,7 @@
>
<span style="display: flex; flex: 1; width: 0">
<span>
<svg-icon icon-class="scene"/>
<svg-icon icon-class="scene" />
</span>
<span
style="
@ -242,15 +242,15 @@
class="de-card-dropdown"
>
<el-dropdown-item command="rename">
<svg-icon icon-class="de-ds-rename"/>
<svg-icon icon-class="de-ds-rename" />
{{ $t('dataset.rename') }}
</el-dropdown-item>
<el-dropdown-item command="move">
<svg-icon icon-class="de-ds-move"/>
<svg-icon icon-class="de-ds-move" />
{{ $t('dataset.move_to') }}
</el-dropdown-item>
<el-dropdown-item command="delete">
<svg-icon icon-class="de-ds-trash"/>
<svg-icon icon-class="de-ds-trash" />
{{ $t('dataset.delete') }}
</el-dropdown-item>
</el-dropdown-menu>
@ -353,15 +353,15 @@
class="de-card-dropdown"
>
<el-dropdown-item command="editTable">
<svg-icon icon-class="de-ds-rename"/>
<svg-icon icon-class="de-ds-rename" />
{{ $t('dataset.rename') }}
</el-dropdown-item>
<el-dropdown-item command="moveDs">
<svg-icon icon-class="de-ds-move"/>
<svg-icon icon-class="de-ds-move" />
{{ $t('dataset.move_to') }}
</el-dropdown-item>
<el-dropdown-item command="deleteTable">
<svg-icon icon-class="de-ds-trash"/>
<svg-icon icon-class="de-ds-trash" />
{{ $t('dataset.delete') }}
</el-dropdown-item>
</el-dropdown-menu>
@ -434,7 +434,7 @@
:label="$t('dataset.name')"
prop="name"
>
<el-input v-model="tableForm.name"/>
<el-input v-model="tableForm.name" />
</el-form-item>
</el-form>
<div
@ -445,8 +445,8 @@
secondary
@click="closeTable()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
type="primary"
@ -469,8 +469,8 @@
:title="moveDialogTitle"
class="text-overflow"
>{{
moveDialogTitle
}}</span>
moveDialogTitle
}}</span>
{{ $t('dataset.m2') }}
</template>
<group-move-selector
@ -483,8 +483,8 @@
secondary
@click="closeMoveGroup()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
:disabled="groupMoveConfirmDisabled"
@ -508,8 +508,8 @@
:title="moveDialogTitle"
class="text-overflow"
>{{
moveDialogTitle
}}</span>
moveDialogTitle
}}</span>
{{ $t('dataset.m2') }}
</template>
<group-move-selector
@ -521,8 +521,8 @@
secondary
@click="closeMoveDs()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</deBtn>
<deBtn
:disabled="dsMoveConfirmDisabled"
@ -534,7 +534,7 @@
</el-drawer>
<!-- 新增数据集文件夹 -->
<CreatDsGroup ref="CreatDsGroup"/>
<CreatDsGroup ref="CreatDsGroup" />
</el-col>
</template>
@ -692,7 +692,7 @@ export default {
},
methods: {
init(cache = true) {
const { id, name } = this.$route.params
const { id } = this.$route.params
const modelInfo = localStorage.getItem('dataset-tree')
const userCache = modelInfo && cache
if (userCache) {
@ -890,8 +890,7 @@ export default {
_this.expandedArray.push(table.sceneId)
_this.$refs.datasetTreeRef.setCurrentKey(table.id)
const renameNode = { id: table.id, name: table.name, label: table.name }
updateCacheTree('rename', 'dataset-tree', renameNode, this.tData)
('rename', 'dataset-tree', response.data, this.tData)
updateCacheTree('rename', 'dataset-tree', renameNode, this.tData)('rename', 'dataset-tree', response.data, this.tData)
this.$emit('switchComponent', { name: '' })
})
} else {

View File

@ -24,7 +24,7 @@
>
<span style="display: flex; flex: 1; width: 0">
<span v-if="data.modelInnerType === 'group'">
<svg-icon icon-class="scene"/>
<svg-icon icon-class="scene" />
</span>
<span
style="

View File

@ -4,7 +4,7 @@
class="this_mobile_canvas_main"
:style="mobileCanvasStyle"
>
<canvas-opt-bar/>
<canvas-opt-bar />
<de-canvas
ref="canvasMainRef"
:canvas-style-data="canvasStyleData"
@ -20,54 +20,54 @@ import DeCanvas from '@/components/canvas/DeCanvas'
import CanvasOptBar from '@/components/canvas/components/editor/CanvasOptBar'
import {
imgUrlTrans,
getNowCanvasComponentData,
} from "@/components/canvas/utils/utils";
import { mapState } from "vuex";
import { hexColorToRGBA } from "@/views/chart/chart/util";
getNowCanvasComponentData
} from '@/components/canvas/utils/utils'
import { mapState } from 'vuex'
import { hexColorToRGBA } from '@/views/chart/chart/util'
export default {
components: { DeCanvas, CanvasOptBar },
data() {
return {
canvasId: "canvas-main",
previewVisible: false,
};
canvasId: 'canvas-main',
previewVisible: false
}
},
computed: {
...mapState(["canvasStyleData", "mobileLayoutStatus", 'componentData']),
...mapState(['canvasStyleData', 'mobileLayoutStatus', 'componentData']),
mainCanvasComponentData() {
return getNowCanvasComponentData(this.canvasId);
return getNowCanvasComponentData(this.canvasId)
},
mobileCanvasStyle() {
let style;
let style
if (this.canvasStyleData.openCommonStyle) {
const styleInfo =
this.canvasStyleData.panel.mobileSetting &&
this.canvasStyleData.panel.mobileSetting.customSetting
? this.canvasStyleData.panel.mobileSetting
: this.canvasStyleData.panel;
: this.canvasStyleData.panel
if (
styleInfo.backgroundType === "image" &&
typeof styleInfo.imageUrl === "string"
styleInfo.backgroundType === 'image' &&
typeof styleInfo.imageUrl === 'string'
) {
style = {
background: `url(${imgUrlTrans(styleInfo.imageUrl)}) no-repeat`,
};
} else if (styleInfo.backgroundType === "color") {
background: `url(${imgUrlTrans(styleInfo.imageUrl)}) no-repeat`
}
} else if (styleInfo.backgroundType === 'color') {
const colorRGBA = hexColorToRGBA(
styleInfo.color,
styleInfo.alpha === undefined ? 100 : styleInfo.alpha,
);
styleInfo.alpha === undefined ? 100 : styleInfo.alpha
)
style = {
background: colorRGBA,
};
background: colorRGBA
}
} else {
style = {
background: "#f7f8fa",
};
background: '#f7f8fa'
}
}
}
return style;
},
return style
}
},
mounted() {
this.$store.commit('setMobileLayoutStatus', true)

View File

@ -77,7 +77,7 @@
:label="dialogTitleLabel"
prop="name"
>
<el-input v-model="templateEditForm.name"/>
<el-input v-model="templateEditForm.name" />
</el-form-item>
<el-form-item
:label="$t('app_template.app_group_icon')"
@ -95,7 +95,7 @@
:http-request="upload"
:file-list="fileList"
>
<i class="el-icon-plus"/>
<i class="el-icon-plus" />
</el-upload>
<el-dialog
top="25vh"
@ -161,8 +161,7 @@
:source-template-info="currentMoveItem"
@closeDialog="moveItemDialogShow=false"
@templateMoveClose="templateMoveClose"
>
</template-move-list>
/>
</el-dialog>
</div>
</template>

View File

@ -29,18 +29,18 @@
trigger="click"
@command="handleCommand"
>
<i class="el-icon-more"/>
<i class="el-icon-more" />
<el-dropdown-menu
slot="dropdown"
class="de-card-dropdown"
>
<slot>
<el-dropdown-item command="update">
<i class="el-icon-edit"/>
<i class="el-icon-edit" />
{{ $t('commons.update') }}
</el-dropdown-item>
<el-dropdown-item command="delete">
<i class="el-icon-delete"/>
<i class="el-icon-delete" />
{{ $t('commons.uninstall') }}
</el-dropdown-item>
<el-dropdown-item

View File

@ -47,7 +47,7 @@
@command="(type) => clickMore(type, ele)"
>
<span class="el-dropdown-link">
<i class="el-icon-more"/>
<i class="el-icon-more" />
</span>
<el-dropdown-menu
slot="dropdown"

View File

@ -43,16 +43,16 @@
secondary
@click="cancel()"
>{{
$t('commons.cancel')
}}
$t('commons.cancel')
}}
</deBtn>
<deBtn
type="primary"
@click="save()"
:disabled="!activeTemplate"
@click="save()"
>{{
$t('commons.confirm')
}}
$t('commons.confirm')
}}
</deBtn>
</el-row>
</div>

View File

@ -165,12 +165,12 @@
v-show=" show &&showIndex===1"
:canvas-id="canvasId"
/>
<subject-setting v-show=" show &&showIndex===2"/>
<assist-component v-show=" show &&showIndex===3"/>
<subject-setting v-show=" show &&showIndex===2" />
<assist-component v-show=" show &&showIndex===3" />
</div>
</el-drawer>
<!--PC端画布区域-->
<canvas-opt-bar v-if="!previewVisible&&!mobileLayoutStatus"/>
<canvas-opt-bar v-if="!previewVisible&&!mobileLayoutStatus" />
<de-canvas
v-if="!previewVisible&&!mobileLayoutStatus"
ref="canvasMainRef"
@ -196,12 +196,21 @@
:style="customCanvasMobileStyle"
class="this_mobile_canvas"
>
<el-row class="this_mobile_canvas_top"/>
<el-row class="this_mobile_canvas_top" />
<el-row class="this_mobile_canvas_inner_top">
{{ panelInfo.name }}
</el-row>
<el-row v-loading="mobileLoading" class="this_mobile_canvas_main_outer">
<iframe src="./mobile.html" @load="handleLoad" frameborder="0" width="360" height="570"></iframe>
<el-row
v-loading="mobileLoading"
class="this_mobile_canvas_main_outer"
>
<iframe
src="./mobile.html"
frameborder="0"
width="360"
height="570"
@load="handleLoad"
/>
</el-row>
<el-row class="this_mobile_canvas_inner_bottom">
<el-col :span="12">
@ -230,14 +239,14 @@
/>
</el-col>
</el-row>
<el-row class="this_mobile_canvas_bottom"/>
<el-row class="this_mobile_canvas_bottom" />
</div>
</el-col>
<el-col
:span="14"
class="this_mobile_canvas_cell this_mobile_canvas_wait_cell"
>
<component-wait/>
<component-wait />
</el-col>
</el-row>
</de-main-container>
@ -255,7 +264,7 @@
/>
</div>
<div v-if="showBatchViewToolsAside">
<chart-style-batch-set/>
<chart-style-batch-set />
</div>
<div v-if="!showViewToolsAside&&!showBatchViewToolsAside">
<el-row style="height: 40px">
@ -274,7 +283,7 @@
>{{ $t('panel.position_adjust') }}</span>
</el-row>
<el-row>
<position-adjust v-if="curComponent&&!curComponent.auxiliaryMatrix"/>
<position-adjust v-if="curComponent&&!curComponent.auxiliaryMatrix" />
<div
v-else
class="view-selected-message-class"
@ -416,8 +425,8 @@
<span style="float: right;">
<span class="adapt-text"> 样式适配 </span>
<el-select
style="width: 120px;margin-right: 16px"
v-model="multiplexingStyleAdaptSelf"
style="width: 120px;margin-right: 16px"
placeholder="Select"
placement="top-start"
size="mini"
@ -540,7 +549,7 @@ import TextAttr from '@/components/canvas/components/TextAttr'
import { userLoginInfo } from '@/api/systemInfo/userLogin'
import { activeWatermark } from '@/components/canvas/tools/watermark'
import PositionAdjust from '@/views/chart/view/PositionAdjust'
import {hexColorToRGBA} from "@/views/chart/chart/util";
import { hexColorToRGBA } from '@/views/chart/chart/util'
export default {
name: 'PanelEdit',
components: {
@ -840,12 +849,10 @@ export default {
bus.$on('mobile-status-change', this.mobileStatusChange)
window.addEventListener('message', (event) => {
if (event.data.type === 'deleteComponentWithId') {
console.log('event1', event.data)
this.$store.commit('deleteComponentWithId', event.data.value)
this.deleteComponentWithId(event.data.value)
}
if (event.data.type === 'setComponentData') {
console.log('setComponentData', event.data)
this.$store.commit('setComponentData', event.data.value)
setTimeout(() => {
bus.$emit('editSave')
@ -896,10 +903,8 @@ export default {
}
},
mobileStatusChange(type, value) {
console.log('mobileLayoutStatustype', type, this.mobileLayoutStatus)
if (!this.mobileLayoutStatus) return
const iframe = document.querySelector('iframe')
console.log('iframe', iframe)
if (iframe) {
iframe.contentWindow.postMessage(
{
@ -909,9 +914,6 @@ export default {
'*'
)
}
// if (['setCanvasStyle', 'addComponent'].includes(type)) {
// }
},
initWatermark() {
if (this.panelInfo.watermarkInfo) {
@ -1514,8 +1516,8 @@ export default {
this.$store.commit('recordSnapshot')
this.$store.commit('canvasChange')
},
multiplexingStyleAdaptChange(value){
this.$store.commit('setMultiplexingStyleAdapt',value)
multiplexingStyleAdaptChange(value) {
this.$store.commit('setMultiplexingStyleAdapt', value)
}
}
}

View File

@ -302,7 +302,7 @@
clearable
/>
<div class="field-height">
<el-divider/>
<el-divider />
<draggable
v-model="linkJumpInfoArray"
:options="{group:{name: 'drag',pull:'clone'},sort: true}"

View File

@ -174,7 +174,7 @@
/>
</span>
<span v-if="data.nodeType === 'folder'">
<svg-icon icon-class="scene"/>
<svg-icon icon-class="scene" />
</span>
<span
:class="data.status"
@ -211,7 +211,7 @@
<el-dropdown-item
:command="beforeClickEdit('folder', 'new', data, node)"
>
<svg-icon icon-class="scene"/>
<svg-icon icon-class="scene" />
<span style="margin-left: 5px">{{ $t('panel.groupAdd') }}</span>
</el-dropdown-item>
<el-dropdown-item
@ -334,7 +334,7 @@
:label="$t('commons.name')"
prop="name"
>
<el-input v-model="groupForm.name"/>
<el-input v-model="groupForm.name" />
</el-form-item>
</el-form>
<div
@ -345,8 +345,8 @@
size="mini"
@click="close()"
>{{
$t('panel.cancel')
}}
$t('panel.cancel')
}}
</el-button>
<el-button
type="primary"
@ -422,8 +422,8 @@
size="mini"
@click="closeMoveGroup()"
>{{
$t('dataset.cancel')
}}
$t('dataset.cancel')
}}
</el-button>
<el-button
:disabled="groupMoveConfirmDisabled"
@ -451,7 +451,6 @@ import {
groupTree,
initPanelData, panelMove,
panelToTop,
panelUpdate,
viewPanelLog
} from '@/api/panel/panel'
import { mapState } from 'vuex'

View File

@ -8,7 +8,7 @@
@tab-click="handleClick"
>
<el-tab-pane name="PanelList">
<span slot="label"><i class="el-icon-document tablepanel-i"/>{{ $t('panel.panel_list') }}</span>
<span slot="label"><i class="el-icon-document tablepanel-i" />{{ $t('panel.panel_list') }}</span>
<panel-list
v-show="activeName==='PanelList'"
ref="panelList"
@ -18,14 +18,14 @@
name="panels_star"
:lazy="true"
>
<span slot="label"><i class="el-icon-star-off tablepanel-i"/>{{ $t('panel.store') }}</span>
<enshrine v-if="activeName==='panels_star'"/>
<span slot="label"><i class="el-icon-star-off tablepanel-i" />{{ $t('panel.store') }}</span>
<enshrine v-if="activeName==='panels_star'" />
</el-tab-pane>
<el-tab-pane
name="panels_share"
:lazy="true"
>
<span slot="label"><i class="el-icon-share tablepanel-i"/>{{ $t('panel.share') }}</span>
<span slot="label"><i class="el-icon-share tablepanel-i" />{{ $t('panel.share') }}</span>
<share-tree
v-if="showShare"
ref="share_tree"

View File

@ -17,7 +17,7 @@
style="border-bottom: 1px solid;border-bottom-color:#E6E6E6;"
>
<div style="height: 100%;">
<share-head/>
<share-head />
</div>
</el-row>
<el-row
@ -31,10 +31,13 @@
:span="12"
style="font-size: 14px;display: flex"
>
<div :title="showName" style="text-overflow:ellipsis;overflow: hidden;white-space: nowrap;font-size: 14px;max-width: 300px"><span
class="panel-name"
>
{{ panelInfo.name || '测试仪表板' }}</span>
<div
:title="showName"
style="text-overflow:ellipsis;overflow: hidden;white-space: nowrap;font-size: 14px;max-width: 300px"
><span
class="panel-name"
>
{{ panelInfo.name || '测试仪表板' }}</span>
<span
v-if="panelInfo.isDefault"
style="color: green;font-size: 12px"
@ -49,41 +52,47 @@
v-if="!hasStar && panelInfo && showType !== 1&&panelInfo.status==='publish'"
style="margin-left: 9px"
>
<el-tooltip :content="$t('panel.store')">
<i
class="el-icon-star-off"
@click="star"
/>
</el-tooltip>
</span>
<el-tooltip :content="$t('panel.store')">
<i
class="el-icon-star-off"
@click="star"
/>
</el-tooltip>
</span>
<span
v-if="hasStar && panelInfo && showType !== 1&&panelInfo.status==='publish'"
style="margin-left: 9px"
>
<el-tooltip :content="$t('commons.cancel') + $t('panel.store')">
<i
class="el-icon-star-on"
@click="unstar"
/>
</el-tooltip>
</span>
<el-tooltip :content="$t('commons.cancel') + $t('panel.store')">
<i
class="el-icon-star-on"
@click="unstar"
/>
</el-tooltip>
</span>
<template v-if="panelInfo.creatorName">
<el-divider
style="margin: 0 16px;"
direction="vertical"
/>
<span :title="panelInfo.creatorName" class="panel-create">
{{ $t('panel.create_by') + ':' + panelInfo.creatorName }}
</span>
<span
:title="panelInfo.creatorName"
class="panel-create"
>
{{ $t('panel.create_by') + ':' + panelInfo.creatorName }}
</span>
</template>
<el-popover
placement="right-start"
width="400"
trigger="click"
>
<panel-detail-info/>
<svg-icon slot="reference" style="margin-left: 4px;cursor: pointer;font-size: 14px;" class="icon-class"
icon-class="icon_info_outlined"
<panel-detail-info />
<svg-icon
slot="reference"
style="margin-left: 4px;cursor: pointer;font-size: 14px;"
class="icon-class"
icon-class="icon_info_outlined"
/>
</el-popover>
</div>
@ -436,14 +445,14 @@ export default {
}
},
computed: {
showName(){
showName() {
let name = this.panelInfo.name || '测试仪表板'
if(this.panelInfo.isDefault){
name = name +'('+ this.$t('panel.default_panel_name') +':'+ this.panelInfo.defaultPanelName +')'
if (this.panelInfo.isDefault) {
name = name + '(' + this.$t('panel.default_panel_name') + ':' + this.panelInfo.defaultPanelName + ')'
}
if(this.panelInfo.sourcePanelName){
name = name +'('+ this.$t('panel.source_panel_name') +':'+ this.panelInfo.sourcePanelName +')'
if (this.panelInfo.sourcePanelName) {
name = name + '(' + this.$t('panel.source_panel_name') + ':' + this.panelInfo.sourcePanelName + ')'
}
return name
},

View File

@ -287,12 +287,12 @@ export default {
panelInfo() {
return this.$store.state.panel.panelInfo
},
viewSelectedField(){
viewSelectedField() {
const viewIds = []
this.outerParamsInfo.targetViewInfoList.forEach((targetViewInfo)=>{
this.outerParamsInfo.targetViewInfoList.forEach((targetViewInfo) => {
viewIds.push(targetViewInfo.targetViewId)
})
console.log('viewIds='+JSON.stringify(viewIds))
console.log('viewIds=' + JSON.stringify(viewIds))
return viewIds
},
...mapState([

View File

@ -277,7 +277,6 @@ span {
line-height: 22px;
}
::v-deep .el-slider__input {
width: 40px;
padding-left: 0px;

View File

@ -24,13 +24,13 @@
>
<el-col :span="4">
<el-color-picker
v-model="mobileSetting.color"
:predefine="predefineColors"
size="mini"
class="color-picker-custom"
:disabled="!mobileSetting.customSetting"
@change="onChangeType"
/>
v-model="mobileSetting.color"
:predefine="predefineColors"
size="mini"
class="color-picker-custom"
:disabled="!mobileSetting.customSetting"
@change="onChangeType"
/>
</el-col>
<el-col :span="5">
<span class="params-title-small">{{ $t('chart.not_alpha') }}</span>
@ -282,7 +282,6 @@ span {
line-height: 22px;
}
::v-deep .el-slider__input {
width: 40px;
padding-left: 0px;

View File

@ -47,7 +47,7 @@
@command="(type) => clickMore(type, ele)"
>
<span class="el-dropdown-link">
<i class="el-icon-more"/>
<i class="el-icon-more" />
</span>
<el-dropdown-menu
slot="dropdown"

View File

@ -37,23 +37,34 @@
</el-tab-pane>
<!--query 参数-->
<el-tab-pane :label="$t('datasource.query_param')" name="parameters">
<el-tooltip class="item-tabs" effect="dark" :content="$t('datasource.query_info')"
placement="top-start" slot="label">
<span>{{ $t('datasource.query_param') }}
<div class="el-step__icon is-text ms-api-col ms-header" v-if="request.arguments.length>1">
<div class="el-step__icon-inner">{{ request.arguments.length - 1 }}</div>
</div>
</span>
<el-tab-pane
:label="$t('datasource.query_param')"
name="parameters"
>
<el-tooltip
slot="label"
class="item-tabs"
effect="dark"
:content="$t('datasource.query_info')"
placement="top-start"
>
<span>{{ $t('datasource.query_param') }}
<div
v-if="request.arguments.length>1"
class="el-step__icon is-text ms-api-col ms-header"
>
<div class="el-step__icon-inner">{{ request.arguments.length - 1 }}</div>
</div>
</span>
</el-tooltip>
<api-variable
@editScenarioAdvance="editScenarioAdvance"
v-if="activeName === 'parameters'"
:scenario-definition="scenarioDefinition"
:with-more-setting="true"
:is-read-only="isReadOnly"
:isShowEnable="isShowEnable"
:is-show-enable="isShowEnable"
:parameters="request.arguments"
v-if="activeName === 'parameters'"
@editScenarioAdvance="editScenarioAdvance"
/>
</el-tab-pane>

View File

@ -800,7 +800,7 @@ export default {
data.request = JSON.stringify(data.request)
this.loading = true
this.disabledNext = true
checkApiDatasource({'data': Base64.encode(JSON.stringify(data))}).then(res => {
checkApiDatasource({ 'data': Base64.encode(JSON.stringify(data)) }).then(res => {
this.loading = false
this.disabledNext = false
this.apiItem.status = 'Success'
@ -858,7 +858,7 @@ export default {
const data = JSON.parse(JSON.stringify(this.apiItem))
data.request = JSON.stringify(data.request)
this.loading = true
checkApiDatasource({'data': Base64.encode(JSON.stringify(data))}).then(res => {
checkApiDatasource({ 'data': Base64.encode(JSON.stringify(data)) }).then(res => {
this.loading = false
this.$success(i18n.t('commons.success'))
this.apiItem.fields = res.data.fields

View File

@ -71,7 +71,10 @@
popper-class="api-table-delete"
trigger="click"
>
<svg-icon :disabled="disabled" icon-class="icon_info_filled" />
<svg-icon
:disabled="disabled"
icon-class="icon_info_filled"
/>
<div class="tips">
{{ $t('datasource.delete_this_item') }}
</div>
@ -541,8 +544,8 @@
:label="$t('datasource.isUseJsonPath')"
>
<el-input
:disabled="!apiItem.useJsonPath"
v-model="apiItem.jsonPath"
:disabled="!apiItem.useJsonPath"
:placeholder="$t('datasource.jsonpath_info')"
class="input-with-select"
size="small"
@ -562,18 +565,24 @@
</el-select>
<el-button
:disabled="!apiItem.useJsonPath"
slot="append"
:disabled="!apiItem.useJsonPath"
@click="showApiData"
>{{ $t('datasource.show_api_data') }}
</el-button>
</el-input>
</el-form-item>
<div class="row-rules" v-show="apiItem.useJsonPath">
<div
v-show="apiItem.useJsonPath"
class="row-rules"
>
<span>{{ $t('datasource.column_info') }}</span>
</div>
<div class="table-container de-svg-in-table" v-show="apiItem.useJsonPath">
<div
v-show="apiItem.useJsonPath"
class="table-container de-svg-in-table"
>
<el-table
ref="apiItemTable"
:data="originFieldItem.jsonFields"
@ -1085,7 +1094,7 @@ export default {
originFieldItem: {
jsonFields: [],
fields: []
},
}
}
},
methods: {
@ -1151,7 +1160,7 @@ export default {
const data = Base64.encode(JSON.stringify(this.apiItem))
this.loading = true
this.disabledNext = true
checkApiDatasource({'data': data})
checkApiDatasource({ 'data': data })
.then((res) => {
this.loading = false
this.disabledNext = false
@ -1174,16 +1183,16 @@ export default {
})
}
},
showApiData(){
showApiData() {
this.$refs.apiItemBasicInfo.validate((valid) => {
if (valid) {
const data = Base64.encode(JSON.stringify(this.apiItem))
this.loading = true
checkApiDatasource({'data': data, 'type': 'apiStructure'})
checkApiDatasource({ 'data': data, 'type': 'apiStructure' })
.then((res) => {
res.data.jsonFields.forEach(((item) => {
res.data.jsonFields.forEach((item) => {
item.checked = false
}))
})
this.originFieldItem.jsonFields = res.data.jsonFields
this.loading = false
this.$success(i18n.t('commons.success'))
@ -1227,10 +1236,10 @@ export default {
for (let i = 0; i < this.form.apiConfiguration.length; i++) {
if (this.form.apiConfiguration[i].serialNumber === this.apiItem.serialNumber) {
this.certinKey = !this.certinKey
if(this.form.apiConfiguration[i].name !== this.apiItem.name){
if (this.form.apiConfiguration[i].name !== this.apiItem.name) {
this.apiItem.reName = true
this.apiItem.orgName = this.form.apiConfiguration[i].name
}else {
} else {
this.apiItem.reName = false
}
this.form.apiConfiguration[i] = JSON.parse(JSON.stringify(this.apiItem))

View File

@ -46,13 +46,13 @@
<div style="height: calc(100% - 56px)">
<DsFormContent
ref="DsFormContent"
@editeTodisable="backToList"
:outer-params="outerParams"
:reference-position="referencePosition"
:form-type.sync="formType"
:type-map.sync="typeMap"
:can-edit.sync="canEdit"
:form-loading.sync="formLoading"
@editeTodisable="backToList"
@refreshType="refreshType"
@closeDraw="closeDraw"
@setParams="setParams"
@ -96,7 +96,7 @@ export default {
},
tips() {
const { id, showModel } = this.params
if(showModel === 'copy'){
if (showModel === 'copy') {
return this.$t('datasource.copy')
}
return id && showModel === 'show' && !this.canEdit

View File

@ -71,8 +71,8 @@
</el-form>
<div class="de-row-rules">
<span>{{
positionCheck('appMarket') ? $t('app_template.datasource_info') : $t('datasource.basic_info')
}}</span>
positionCheck('appMarket') ? $t('app_template.datasource_info') : $t('datasource.basic_info')
}}</span>
</div>
<el-form
ref="historyDsForm"
@ -122,25 +122,25 @@
<span
v-if="
item.status !== 'Error' &&
item.status !== 'Warning'
"
item.status !== 'Warning'
"
>
<svg-icon
icon-class="db-de"
/>
</span>
<svg-icon
icon-class="db-de"
/>
</span>
<span v-if="item.status === 'Error'">
<svg-icon
icon-class="de-ds-error"
class="ds-icon-scene"
/>
</span>
<svg-icon
icon-class="de-ds-error"
class="ds-icon-scene"
/>
</span>
<span v-if="item.status === 'Warning'">
<svg-icon
icon-class="de-ds-warning"
class="ds-icon-scene"
/>
</span>
<svg-icon
icon-class="de-ds-warning"
class="ds-icon-scene"
/>
</span>
<span>
{{ item.name }}
</span>
@ -273,7 +273,7 @@
formType === 'add'
? true
: (hasDataPermission('manage', outerParams.panelPrivileges)
||hasDataPermission('manage', outerParams.datasetPrivileges))
||hasDataPermission('manage', outerParams.datasetPrivileges))
"
@click="validaDatasource"
>{{ $t('commons.validate') }}
@ -840,16 +840,16 @@ export default {
},
saveAppMarketHistory() {
this.$refs.historyDsForm.validate(valid => {
if (!valid) {
return false
}
const appApplyForm = {
...this.attachForm,
...this.historyDsForm
}
const method = this.formType === 'add' ? appApply : appEdit
this.appApplyMethod(method, appApplyForm)
if (!valid) {
return false
}
const appApplyForm = {
...this.attachForm,
...this.historyDsForm
}
const method = this.formType === 'add' ? appApply : appEdit
this.appApplyMethod(method, appApplyForm)
}
)
},
save() {
@ -996,10 +996,10 @@ export default {
}
if (this.positionCheck('appMarket')) {
this.$refs.attachParamsForm.validate(valid => {
if (!valid) {
return false
}
if (!valid) {
return false
}
}
)
}
this.$refs.dsForm.validate((valid) => {
@ -1116,7 +1116,7 @@ export default {
},
reloadStatus(statusMap = {}) {
this.form.apiConfiguration.forEach(ele => {
ele.status = statusMap[ele.name] || ele.status
ele.status = statusMap[ele.name] || ele.status
})
},
validaDatasource() {
@ -1151,10 +1151,10 @@ export default {
}
if (this.positionCheck('appMarket')) {
this.$refs.attachParamsForm.validate(valid => {
if (!valid) {
return false
}
if (!valid) {
return false
}
}
)
}
this.$refs.dsForm.validate((valid) => {

View File

@ -22,8 +22,8 @@
<div class="ds-top">
<deBtn
v-if="privileges && canEdit"
secondary
key="cancel"
secondary
@click="editDatasource(false)"
>{{ $t('commons.cancel') }}
</deBtn>
@ -64,11 +64,11 @@
</div>
<div style="height: calc(100% - 36px)">
<ds-form-content
@editeTodisable="editDatasource"
:canEdit="canEdit"
ref="DsFormContent"
@refresh-type="refreshType"
:can-edit="canEdit"
:config-from-tabs="configFromTabs"
@editeTodisable="editDatasource"
@refresh-type="refreshType"
/>
</div>
</template>
@ -90,7 +90,7 @@ export default {
data() {
return {
activeName: 'detail',
canEdit: false,
canEdit: false
}
},
computed: {

View File

@ -173,7 +173,10 @@
<i class="el-icon-edit" />
{{ $t('chart.edit') }}
</el-dropdown-item>
<el-dropdown-item command="copy" v-show="showView === 'Datasource'">
<el-dropdown-item
v-show="showView === 'Datasource'"
command="copy"
>
<svg-icon
icon-class="de-copy"
class="de-copy-icon"
@ -432,7 +435,7 @@ export default {
},
methods: {
getDatasourceRelationship({ queryType, label, id }) {
return getDatasourceRelationship(id).then((res) => {
return getDatasourceRelationship(id).then((res) => {
const arr = res.data || []
this.treeData = []
this.dfsTree(arr, { queryType, label })
@ -713,7 +716,7 @@ export default {
this.dialogTitle = this.$t('datasource.edit_driver')
this.driverForm = { ...row }
},
_handleCopy(row){
_handleCopy(row) {
if (this.showView === 'Datasource') {
const param = { ...row, ...{ showModel: 'copy' }}
this.switchMain('DsForm', param, this.tData, this.dsTypes)

View File

@ -1,10 +1,13 @@
<template>
<div>
<span>{{ someProp.title }}</span>
<br />
<br>
<span class="use-html">{{ someProp.content }}</span>
<br />
<span @click="change" class="link-msg">{{ someProp.link }}</span>
<br>
<span
class="link-msg"
@click="change"
>{{ someProp.link }}</span>
</div>
</template>
<script>
@ -13,7 +16,7 @@ export default {
someProp: {
type: Object,
default: () => {}
},
}
},
methods: {
change() {
@ -27,4 +30,4 @@ export default {
color: #307eff;
cursor: pointer;
}
</style>
</style>

View File

@ -1,6 +1,9 @@
<template>
<div :style="chartSize">
<div id="main" :style="chartSizeMax"></div>
<div
id="main"
:style="chartSizeMax"
/>
</div>
</template>
@ -16,7 +19,7 @@ export default {
chartSize: {
type: Object,
default: () => {}
},
}
},
data() {
return {
@ -36,8 +39,8 @@ export default {
computed: {
chartSizeMax() {
const { height } = this.chartSize
return this.maxSize > parseInt(height)/25 ? {
height: this.maxSize * 25 + 'px',
return this.maxSize > parseInt(height) / 25 ? {
height: this.maxSize * 25 + 'px',
width: this.chartSize.width
} : this.chartSize
}
@ -141,7 +144,7 @@ export default {
})
},
deleteRepeat(arr = []) {
let list = JSON.parse(JSON.stringify(arr))
const list = JSON.parse(JSON.stringify(arr))
const repeatPanel = {}
list.forEach((ele) => {
if (ele[6] === this.datasourcePanel[this.current.queryType]) {
@ -192,9 +195,10 @@ export default {
})
arr.forEach((ele) => {
// eslint-disable-next-line
const [index, start, end, width, id, name, type, pid] = ele
if (type === this.datasourcePanel[this.current.queryType]) {
let dataset = dataItemListMap[pid]
const dataset = dataItemListMap[pid]
if (repeatPanel[id]) {
repeatPanel[id].push({ index, start })
} else {
@ -236,10 +240,9 @@ export default {
const ctx = c.getContext('2d')
ctx.font = '14px Arial'
const dataItemList = []
let list = []
const repeatPanel = {}
const list = []
let max = {
const max = {
dataset: 0,
datasource: 0,
panel: 0
@ -248,7 +251,7 @@ export default {
const { queryType, num, label } = this.current
max[queryType] = ctx.measureText(label).width + 30
if (!arr.length)
if (!arr.length) {
return [
[[0, 0, max[queryType], max[queryType], num, label, queryType, 0]],
{
@ -257,10 +260,11 @@ export default {
panel: 0
}
]
}
arr.forEach((ele, index) => {
const { id, name, type, pid } = ele
let width = ctx.measureText(name).width + 30
const width = ctx.measureText(name).width + 30
max[type] = Math.max(width, max[type])
dataItemList.push([width, id, name, type, pid])
})
@ -331,7 +335,7 @@ export default {
30
)
}
let gap = {
const gap = {
dataset: maxGap('dataset', 'datasource'),
datasource: maxGap('datasource', 'datasource'),
panel: maxGap('panel', 'dataset')
@ -347,6 +351,7 @@ export default {
this.myChart = echarts.init(document.getElementById('main'))
const that = this
// eslint-disable-next-line
let [data, gap] = this.calculatedWidth(this.treeData)
const gapDetail = {
dataset: gap.dataset,
@ -360,11 +365,11 @@ export default {
const lineEnd = [clickNode[0]]
lineData = lineData.map(ele => {
let arr = [...ele]
const arr = [...ele]
if (clickNode[0] === ele[0]) {
arr.push(1)
lineEnd.push(ele[3])
} else if(clickNode[0] === ele[3]) {
} else if (clickNode[0] === ele[3]) {
arr.push(1)
lineEnd.push(ele[0])
} else {
@ -374,20 +379,20 @@ export default {
})
data = data.map(ele => {
let arr = [...ele]
const arr = [...ele]
arr.push(Boolean(lineEnd.includes(ele[0])))
return arr
})
if (this.maxSize !== data.length) {
this.maxSize = data.length
return
}
let option = {
const option = {
xAxis: {
show: false, //线,
show: false, // 线,
splitLine: {
show: false //线
show: false // 线
}
},
grid: {
@ -406,7 +411,7 @@ export default {
show: false,
type: 'category',
splitLine: {
show: false //线
show: false // 线
}
},
series: [
@ -419,11 +424,11 @@ export default {
y: 0
},
roam: true,
renderItem: function (params, api) {
let categoryIndex = api.value(0)
let startPoint = api.coord([api.value(1), categoryIndex])
let width = api.value(3)
let height = 22
renderItem: function(params, api) {
const categoryIndex = api.value(0)
const startPoint = api.coord([api.value(1), categoryIndex])
const width = api.value(3)
const height = 22
const imageType = {
datasource: '/static/svg/de-datasource.svg',
@ -431,19 +436,18 @@ export default {
dataset: '/static/svg/de-dataset.svg'
}
return {
type: 'group', //group
type: 'group', // group
children: [
{
type: 'text',
position: [
startPoint[0] + gapDetail[api.value(6)],
startPoint[1] - height / 2
], //
], //
z2: 10,
style: {
text: isNaN(api.value(5)) ? data.find(ele => ele[4] === api.value(4))[5] : api.value(5), //data
text: isNaN(api.value(5)) ? data.find(ele => ele[4] === api.value(4))[5] : api.value(5), // data
color: '#1F2329',
x: 25,
y: 5
@ -503,13 +507,11 @@ export default {
y: [0, 3]
},
roam: true,
renderItem: function (params, api) {
let categoryIndex = api.value(0)
let categoryIndex2 = api.value(3)
let startPoint = api.coord([api.value(1), categoryIndex])
let endPoint = api.coord([api.value(2), categoryIndex2])
let height = 20
renderItem: function(params, api) {
const categoryIndex = api.value(0)
const categoryIndex2 = api.value(3)
const startPoint = api.coord([api.value(1), categoryIndex])
const endPoint = api.coord([api.value(2), categoryIndex2])
function startPointX1() {
if (api.value(5) === 'dataset') {
return startPoint[0] + api.value(4)
@ -526,10 +528,10 @@ export default {
}
}
let x1 = startPointX1()
const x1 = startPointX1()
return {
type: 'group', //group
type: 'group', // group
children: [
{
type: 'bezierCurve',
@ -539,10 +541,10 @@ export default {
y1: startPoint[1],
x2: endPoint[0] + gapDetail[api.value(5)],
y2: endPoint[1],
cpx1:endPoint[0] + gapDetail[api.value(5)] - 50,
cpx2:endPoint[0] + gapDetail[api.value(5)] - 10,
cpy1:endPoint[1],
cpy2:endPoint[1],
cpx1: endPoint[0] + gapDetail[api.value(5)] - 50,
cpx2: endPoint[0] + gapDetail[api.value(5)] - 10,
cpy1: endPoint[1],
cpy2: endPoint[1],
percent: 1
},
style: {
@ -559,9 +561,9 @@ export default {
]
}
this.myChart.setOption(option, true)
this.myChart.on('click', function (params) {
that.initEchart(params.value)
});
this.myChart.on('click', function(params) {
that.initEchart(params.value)
})
}
}
}

View File

@ -47,7 +47,10 @@
:content="$t('system_parameter_setting.front_time_out')"
placement="top"
>
<svg-icon class="tips" icon-class="icon_info_outlined" />
<svg-icon
class="tips"
icon-class="icon_info_outlined"
/>
</el-tooltip>
</template>
<el-input

View File

@ -90,7 +90,10 @@
:content="$t('system_parameter_setting.test_mail_recipient')"
placement="top"
>
<svg-icon icon-class="icon_info_outlined" class="tips-not-absolute" />
<svg-icon
icon-class="icon_info_outlined"
class="tips-not-absolute"
/>
</el-tooltip>
</template>
<dePwd
@ -106,7 +109,10 @@
:content="$t('system_parameter_setting.to_enable_ssl')"
placement="top"
>
<svg-icon icon-class="icon_info_outlined" class="tips-not-absolute" />
<svg-icon
icon-class="icon_info_outlined"
class="tips-not-absolute"
/>
</el-tooltip>
</el-checkbox>
@ -118,7 +124,10 @@
:content="$t('system_parameter_setting.to_enable_tsl')"
placement="top"
>
<svg-icon icon-class="icon_info_outlined" class="tips-not-absolute" />
<svg-icon
icon-class="icon_info_outlined"
class="tips-not-absolute"
/>
</el-tooltip>
</el-checkbox>
</el-form-item>

View File

@ -7,17 +7,30 @@
label-width="auto"
label-position="right"
>
<el-form-item v-if="!oldPwd" :label="$t('user.origin_passwd')" prop="oldPwd">
<el-form-item
v-if="!oldPwd"
:label="$t('user.origin_passwd')"
prop="oldPwd"
>
<dePwd v-model="form.oldPwd" />
</el-form-item>
<el-form-item :label="$t('user.new_passwd')" prop="newPwd">
<el-form-item
:label="$t('user.new_passwd')"
prop="newPwd"
>
<dePwd v-model="form.newPwd" />
</el-form-item>
<el-form-item :label="$t('user.confirm_passwd')" prop="repeatPwd">
<el-form-item
:label="$t('user.confirm_passwd')"
prop="repeatPwd"
>
<dePwd v-model="form.repeatPwd" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="save">{{
<el-button
type="primary"
@click="save"
>{{
$t('commons.confirm')
}}</el-button>
</el-form-item>
@ -34,7 +47,7 @@ export default {
props: {
oldPwd: {
type: String,
default: ""
default: ''
}
},
data() {

View File

@ -23,7 +23,7 @@ export default {
},
created() {
this.$store.dispatch('app/toggleSideBarHide', true)
},
}
}
</script>
<style lang="scss" scoped>

View File

@ -30,12 +30,12 @@
/>
</el-row>
<el-row class="top_banner_card">
<wizard-card :details="cardList[0]"/>
<wizard-card :details="cardList[0]" />
<wizard-card
:details="cardList[1]"
style="margin:0 24px 0 24px"
/>
<wizard-card-enterprise :details="cardList[2]"/>
<wizard-card-enterprise :details="cardList[2]" />
</el-row>
<el-row class="content_middle">
<div class="content_middle_left">
@ -44,15 +44,15 @@
<div class="content_middle_more"><a
target="_blank"
href="https://space.bilibili.com/510493147/channel/collectiondetail?sid=262774"
>{{ $t('wizard.more') }}<i class="el-icon-arrow-right"/></a></div>
>{{ $t('wizard.more') }}<i class="el-icon-arrow-right" /></a></div>
</el-row>
<el-row style="margin-top: 12px">
<video-card :details="videoList[0]"/>
<video-card :details="videoList[0]" />
<video-card
style="margin:0 12px 0 12px"
:details="videoList[1]"
/>
<video-card :details="videoList[2]"/>
<video-card :details="videoList[2]" />
</el-row>
</div>
<div class="content_middle_right">
@ -61,7 +61,7 @@
<div class="content_middle_more"><a
target="_blank"
href="https://blog.fit2cloud.com/categories/dataease"
>{{ $t('wizard.more') }}<i class="el-icon-arrow-right"/></a></div>
>{{ $t('wizard.more') }}<i class="el-icon-arrow-right" /></a></div>
</el-row>
<el-row>
<ul class="ul-custom">
@ -93,17 +93,17 @@
</el-row>
<el-row class="contact_content">
{{ $t('wizard.web') }}<a
style="text-decoration:underline;"
target="_blank"
href="https://www.dataease.io"
>www.dataease.io</a>
style="text-decoration:underline;"
target="_blank"
href="https://www.dataease.io"
>www.dataease.io</a>
</el-row>
<el-row class="contact_content">
{{ $t('wizard.bbs') }}<a
style="text-decoration:underline;"
target="_blank"
href="https://bbs.fit2cloud.com/c/de"
>https://bbs.fit2cloud.com/c/de</a>
style="text-decoration:underline;"
target="_blank"
href="https://bbs.fit2cloud.com/c/de"
>https://bbs.fit2cloud.com/c/de</a>
</el-row>
</div>