Merge branch 'dev-v2' into heatmap

This commit is contained in:
ulleo 2024-06-03 14:14:25 +08:00
commit d70abb485b
33 changed files with 146 additions and 145 deletions

View File

@ -674,6 +674,7 @@ public class DatasetDataManage {
}
// 排序
boolean sortDistinct = true;
if (ObjectUtils.isNotEmpty(request.getSortId())) {
DatasetTableFieldDTO field = datasetTableFieldManage.selectById(request.getSortId());
if (field == null) {
@ -683,13 +684,14 @@ public class DatasetDataManage {
BeanUtils.copyBean(deSortField, field);
deSortField.setOrderDirection(request.getSort());
datasetGroupInfoDTO.setSortFields(Collections.singletonList(deSortField));
sortDistinct = false;
}
Field2SQLObj.field2sqlObj(sqlMeta, fields, datasetGroupInfoDTO.getAllFields(), crossDs, dsMap);
ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, datasetGroupInfoDTO.getAllFields(), crossDs, dsMap);
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap);
Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields(), crossDs, dsMap);
String querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, ids.size() == 1, 0, 1000);
String querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, sortDistinct && ids.size() == 1, 0, 1000);
querySQL = SqlUtils.rebuildSQL(querySQL, sqlMeta, crossDs, dsMap);
logger.info("calcite data enum sql: " + querySQL);

View File

@ -160,7 +160,7 @@ public class ExportCenterManage {
exportTaskMapper.updateById(exportTask);
FileUtils.deleteDirectoryRecursively(exportData_path + id);
if (exportTask.getExportFromType().equalsIgnoreCase("chart")) {
ChartExcelRequest request = JsonUtil.parse(exportTask.getParams(), ChartExcelRequest.class);
ChartExcelRequest request = JsonUtil.parseObject(exportTask.getParams(), ChartExcelRequest.class);
startViewTask(exportTask, request);
}
}

View File

@ -54,14 +54,18 @@ public class CoreVisualizationExportManage {
}
if (CollectionUtils.isEmpty(chartViewDTOS)) return null;
Map<String, ChartExtRequest> chartExtRequestMap = buildViewRequest(visualization, onlyDisplay);
List<ExcelSheetModel> sheets = chartViewDTOS.stream().map(view -> {
List<ExcelSheetModel> sheets = new ArrayList<>();
for (int i = 0; i < chartViewDTOS.size(); i++) {
ChartViewDTO view = chartViewDTOS.get(i);
ChartExtRequest extRequest = chartExtRequestMap.get(view.getId().toString());
if (ObjectUtils.isNotEmpty(extRequest)) {
view.setChartExtRequest(extRequest);
}
view.getChartExtRequest().setUser(AuthUtils.getUser().getUserId());
return exportViewData(view);
}).toList();
view.setTitle((i + 1) + "-" + view.getTitle());
sheets.add(exportViewData(view));
}
return VisualizationExcelUtils.exportExcel(sheets, visualization.getName(), visualization.getId().toString());
}

View File

@ -3,10 +3,6 @@ spring:
url: jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
# datasource:
# url: jdbc:mysql://39.98.78.97:13306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
# username: root
# password: Password123@mysql
messages:
basename: i18n/lic,i18n/core,i18n/permissions,i18n/xpack
flyway:

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg fill="#3370FF" t="1712630540622" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4351" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M885.333333 177.066667C838.4 104.533333 697.6 136.533333 652.8 149.333333c-8.533333 2.133333-19.2 4.266667-32 8.533334-40.533333-17.066667-87.466667-25.6-134.4-25.6-200.533333 0-362.666667 162.133333-362.666667 362.666666 0 51.2 10.666667 98.133333 27.733334 140.8-36.266667 117.333333-29.866667 194.133333 21.333333 234.666667 23.466667 19.2 51.2 25.6 81.066667 25.6 59.733333 0 123.733333-27.733333 157.866666-46.933333 23.466667 4.266667 49.066667 8.533333 74.666667 8.533333 130.133333 0 245.333333-68.266667 309.333333-172.8h-106.666666c-51.2 53.333333-121.6 87.466667-202.666667 87.466667-104.533333 0-194.133333-57.6-241.066667-142.933334 85.333333-241.066667 281.6-343.466667 373.333334-379.733333 68.266667 36.266667 119.466667 100.266667 136.533333 179.2H467.2v85.333333h381.866667v-19.2c0-40.533333-6.4-78.933333-19.2-115.2 49.066667-68.266667 93.866667-147.2 55.466666-202.666666z m-70.4 44.8s4.266667 17.066667-27.733333 66.133333c-17.066667-25.6-38.4-49.066667-61.866667-70.4 44.8-4.266667 81.066667-4.266667 89.6 4.266667zM298.666667 802.133333c-29.866667 8.533333-57.6 10.666667-70.4 0-4.266667-2.133333-17.066667-17.066667-10.666667-68.266666 23.466667 27.733333 51.2 49.066667 81.066667 68.266666zM209.066667 497.066667v-4.266667c0-153.6 123.733333-277.333333 277.333333-277.333333h2.133333c-93.866667 53.333333-202.666667 142.933333-279.466666 281.6z" p-id="4352"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1712630540622" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4351" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M885.333333 177.066667C838.4 104.533333 697.6 136.533333 652.8 149.333333c-8.533333 2.133333-19.2 4.266667-32 8.533334-40.533333-17.066667-87.466667-25.6-134.4-25.6-200.533333 0-362.666667 162.133333-362.666667 362.666666 0 51.2 10.666667 98.133333 27.733334 140.8-36.266667 117.333333-29.866667 194.133333 21.333333 234.666667 23.466667 19.2 51.2 25.6 81.066667 25.6 59.733333 0 123.733333-27.733333 157.866666-46.933333 23.466667 4.266667 49.066667 8.533333 74.666667 8.533333 130.133333 0 245.333333-68.266667 309.333333-172.8h-106.666666c-51.2 53.333333-121.6 87.466667-202.666667 87.466667-104.533333 0-194.133333-57.6-241.066667-142.933334 85.333333-241.066667 281.6-343.466667 373.333334-379.733333 68.266667 36.266667 119.466667 100.266667 136.533333 179.2H467.2v85.333333h381.866667v-19.2c0-40.533333-6.4-78.933333-19.2-115.2 49.066667-68.266667 93.866667-147.2 55.466666-202.666666z m-70.4 44.8s4.266667 17.066667-27.733333 66.133333c-17.066667-25.6-38.4-49.066667-61.866667-70.4 44.8-4.266667 81.066667-4.266667 89.6 4.266667zM298.666667 802.133333c-29.866667 8.533333-57.6 10.666667-70.4 0-4.266667-2.133333-17.066667-17.066667-10.666667-68.266666 23.466667 27.733333 51.2 49.066667 81.066667 68.266666zM209.066667 497.066667v-4.266667c0-153.6 123.733333-277.333333 277.333333-277.333333h2.133333c-93.866667 53.333333-202.666667 142.933333-279.466666 281.6z" p-id="4352"></path></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1715769658859" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4704" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1023.853735 948.673618v75.25325H596.248536V948.673618zM511.926868 0.073132a511.926868 511.926868 0 0 1 511.926867 511.926868h-75.253249a436.600486 436.600486 0 1 0-436.600486 436.600486h5.119269v75.253249h-5.119269a511.926868 511.926868 0 1 1 0-1023.853735z m511.926867 803.505785v75.25325H596.248536v-75.180117zM362.590487 290.116269l192.11884 110.941866 192.11884 110.941865-192.11884 110.941865-192.11884 110.941866V290.189402zM1023.853735 658.484217v75.399514H596.248536V658.630481zM437.843737 420.438223v182.831024l79.202399-45.780888 79.2024-45.707756-79.2024-45.707756z" p-id="4705" fill="#3370FF"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1715769658859" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4704" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1023.853735 948.673618v75.25325H596.248536V948.673618zM511.926868 0.073132a511.926868 511.926868 0 0 1 511.926867 511.926868h-75.253249a436.600486 436.600486 0 1 0-436.600486 436.600486h5.119269v75.253249h-5.119269a511.926868 511.926868 0 1 1 0-1023.853735z m511.926867 803.505785v75.25325H596.248536v-75.180117zM362.590487 290.116269l192.11884 110.941866 192.11884 110.941865-192.11884 110.941865-192.11884 110.941866V290.189402zM1023.853735 658.484217v75.399514H596.248536V658.630481zM437.843737 420.438223v182.831024l79.202399-45.780888 79.2024-45.707756-79.2024-45.707756z" p-id="4705"></path></svg>

Before

Width:  |  Height:  |  Size: 953 B

After

Width:  |  Height:  |  Size: 938 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -69,7 +69,7 @@ const switchValue = computed({
display: flex;
justify-content: space-between;
align-items: center;
padding-right: 8px;
padding-right: 10px;
flex-grow: 1;
:deep(.ed-switch.is-checked .ed-switch__core > .ed-switch__action) {
left: calc(100% - 12px);

View File

@ -207,7 +207,11 @@ const deepScale = computed(() => scale.value / 100)
@userViewEnlargeOpen="opt => emits('userViewEnlargeOpen', opt)"
></component-edit-bar>
<component-selector
v-if="props.isSelector && config.component === 'UserView'"
v-if="
props.isSelector &&
config.component === 'UserView' &&
config.propValue?.innerType !== 'rich-text'
"
:resource-id="config.id"
/>
<div class="wrapper-inner" ref="componentWrapperInnerRef" :style="componentBackgroundStyle">

View File

@ -10,6 +10,7 @@ import { computed, toRefs } from 'vue'
import { ElDivider } from 'element-plus-secondary'
import eventBus from '@/utils/eventBus'
import { getCurInfo } from '@/store/modules/data-visualization/common'
import { useEmitt } from '@/hooks/web/useEmitt'
const dvMainStore = dvMainStoreWithOut()
const copyStore = copyStoreWithOut()
const lockStore = lockStoreWithOut()
@ -20,6 +21,7 @@ const composeStore = composeStoreWithOut()
const { areaData } = storeToRefs(composeStore)
const { curComponent } = storeToRefs(dvMainStore)
const emit = defineEmits(['close', 'rename'])
const { emitter } = useEmitt()
const props = defineProps({
activePosition: {
type: String,
@ -157,6 +159,10 @@ const composeDivider = computed(() => {
const isGroupArea = computed(() => {
return curComponent.value?.component === 'GroupArea'
})
const editQueryCriteria = () => {
emitter.emit(`editQueryCriteria${curComponent.value.id}`)
}
</script>
<template>
@ -207,6 +213,8 @@ const isGroupArea = computed(() => {
<el-divider class="custom-divider" v-show="composeDivider" />
<template v-if="curComponent && !isGroupArea">
<template v-if="!curComponent['isLock']">
<li v-if="curComponent.component === 'VQuery'" @click="editQueryCriteria">编辑</li>
<li @click="upComponent">上移一层</li>
<li @click="upComponent">上移一层</li>
<li @click="downComponent">下移一层</li>
<li @click="topComponent">置于顶层</li>

View File

@ -61,7 +61,7 @@ const onBackgroundChange = val => {
emits('onAttrChange', { custom: 'commonBackground' })
}
const onStyleAttrChange = (value, key) => {
const onStyleAttrChange = ({ key, value }) => {
snapshotStore.recordSnapshotCache()
emits('onAttrChange', { custom: 'style', property: key, value: value })
}
@ -143,7 +143,11 @@ const stopEvent = e => {
name="style"
class="common-style-area"
>
<common-style-set :themes="themes" :element="element"></common-style-set>
<common-style-set
@onStyleAttrChange="onStyleAttrChange"
:themes="themes"
:element="element"
></common-style-set>
</el-collapse-item>
</el-collapse>
</div>

View File

@ -114,7 +114,7 @@
:effect="themes"
v-model="styleForm[styleOptionKey.value]"
size="small"
@change="changeStyle"
@change="changeStylePre(styleOptionKey.value)"
>
<template #prefix>
<el-icon :class="{ 'dark-icon': themes === 'dark' }">
@ -279,7 +279,7 @@ const { t } = useI18n()
const dvMainStore = dvMainStoreWithOut()
const snapshotStore = snapshotStoreWithOut()
const { curComponent, canvasStyleData } = storeToRefs(dvMainStore)
const { canvasStyleData } = storeToRefs(dvMainStore)
const props = withDefaults(
defineProps<{
@ -294,7 +294,7 @@ const expandIcon = (name: string) => {
return h(Icon, { className: '', name })
}
const { themes, element } = toRefs(props)
const emits = defineEmits(['onTextChange'])
const emits = defineEmits(['onStyleAttrChange'])
const styleMounted = ref({
opacity: 1,
fontSize: 22,
@ -491,24 +491,29 @@ const styleOptionKeyArray = [
]
const styleInit = () => {
if (curComponent.value) {
if (element.value) {
Object.keys(styleMounted.value).forEach(key => {
styleMounted.value[key] = Math.round(
(curComponent.value.style[key] * 100) / canvasStyleData.value.scale
(element.value.style[key] * 100) / canvasStyleData.value.scale
)
})
}
}
const sizeChange = key => {
curComponent.value.style[key] = Math.round(
(styleMounted.value[key] * canvasStyleData.value.scale) / 100
)
changeStyle()
const changeStylePre = key => {
changeStyle({ key: key, value: element.value.style[key] })
}
const changeStyle = () => {
const sizeChange = key => {
element.value.style[key] = Math.round(
(styleMounted.value[key] * canvasStyleData.value.scale) / 100
)
changeStyle({ key: key, value: element.value.style[key] })
}
const changeStyle = params => {
snapshotStore.recordSnapshotCache()
emits('onStyleAttrChange', params)
}
const checkBold = () => {
@ -517,7 +522,7 @@ const checkBold = () => {
} else {
styleForm.value.fontWeight = 'normal'
}
changeStyle()
changeStyle({ key: 'fontWeight', value: styleForm.value.fontWeight })
}
const checkItalic = () => {
@ -526,16 +531,16 @@ const checkItalic = () => {
} else {
styleForm.value.fontStyle = 'normal'
}
changeStyle()
changeStyle({ key: 'fontStyle', value: styleForm.value.fontStyle })
}
function setPosition(key, p: 'left' | 'center' | 'right') {
styleForm.value[key] = p
changeStyle()
changeStyle({ key: key, p })
}
watch(
() => curComponent.value,
() => element.value,
() => {
styleInit()
},

View File

@ -73,6 +73,7 @@ const { icon, name, label, dragInfo, themes } = toRefs(props)
.drag-icon {
height: 40px;
width: 40px;
color: #3370ff;
}
}
.label-content {

View File

@ -80,7 +80,7 @@ const onBlur = () => {
}
init()
watch(
frameLinks.value,
() => frameLinks.value,
() => {
init()
},

View File

@ -112,7 +112,7 @@ const onChange = () => {
init()
watch(
linkInfo.value,
() => linkInfo.value,
() => {
init()
},

View File

@ -105,7 +105,7 @@ const onBlur = () => {
init()
watch(
linkInfo.value,
() => linkInfo.value,
() => {
init()
},

View File

@ -187,10 +187,10 @@ const textStyle = computed(() => {
}
@keyframes marqueeAnimation {
0% {
transform: translate(0, 0);
transform: translate(100%, 0);
}
100% {
transform: translate(-100%, 0);
transform: translate(-50%, 0);
}
}
</style>

View File

@ -11,7 +11,7 @@ const composeStore = composeStoreWithOut()
const snapshotStore = snapshotStoreWithOut()
const copyStore = copyStoreWithOut()
const lockStore = lockStoreWithOut()
const { curComponent, isInEditor } = storeToRefs(dvMainStore)
const { curComponent, isInEditor, editMode } = storeToRefs(dvMainStore)
const { areaData } = storeToRefs(composeStore)
const ctrlKey = 17,
@ -101,7 +101,7 @@ let isShiftDown = false
// 全局监听按键操作并执行相应命令
export function listenGlobalKeyDown() {
window.onkeydown = e => {
if (!isInEditor || checkDialog()) return
if (!isInEditor.value || editMode.value === 'preview' || checkDialog()) return
const { keyCode } = e
if (positionMoveKey[keyCode] && curComponent.value) {
positionMoveKey[keyCode](keyCode)

View File

@ -37,11 +37,6 @@ const { element, chart, commonBackgroundPop } = toRefs(props)
<el-collapse v-model="state.styleActiveNames" class="style-collapse">
<el-collapse-item :effect="themes" name="component" :title="t('visualization.module')">
<el-form label-position="top">
<el-form-item class="form-item margin-bottom-8" :class="'form-item-' + themes">
<el-checkbox :effect="themes" v-model="element.isHang" size="small">
隐藏组件
</el-checkbox>
</el-form-item>
<el-form-item class="form-item margin-bottom-8" :class="'form-item-' + themes">
<el-checkbox
:effect="themes"

View File

@ -33,6 +33,12 @@ const state = reactive({
const emit = defineEmits(['onChangeYAxisForm'])
const splitLineStyle = [
{ label: t('chart.line_type_solid'), value: 'solid' },
{ label: t('chart.line_type_dashed'), value: 'dashed' },
{ label: t('chart.line_type_dotted'), value: 'dotted' }
]
watch(
() => props.form,
() => {
@ -284,10 +290,26 @@ onMounted(() => {
is-custom
/>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding: 0 4px">
<el-select
:disabled="!state.axisForm.splitLine.show"
style="width: 62px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.style"
@change="changeAxisStyle('splitLine.lineStyle.style')"
>
<el-option
v-for="option in splitLineStyle"
:key="option.value"
:value="option.value"
:label="option.label"
></el-option>
</el-select>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding-left: 4px">
<el-input-number
:disabled="!state.axisForm.splitLine.show"
style="width: 108px"
style="width: 74px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.width"
:min="1"

View File

@ -142,7 +142,6 @@ onMounted(() => {
:label="t('chart.split_line')"
class="form-item"
:class="'form-item-' + themes"
style="padding-right: 4px"
>
<el-color-picker
v-model="state.quadrantForm.lineStyle.stroke"
@ -189,12 +188,7 @@ onMounted(() => {
</el-form-item>
</div>
<div style="display: flex">
<el-form-item
class="form-item"
label="X 轴恒线"
:class="'form-item-' + themes"
style="padding-left: 4px"
>
<el-form-item class="form-item" label="X 轴恒线" :class="'form-item-' + themes">
<el-input-number
controls-position="right"
style="width: 100%"
@ -225,7 +219,7 @@ onMounted(() => {
</el-form-item>
</div>
</template>
<el-tabs v-model="tabActive" class="quadrant-tab-header" :class="{ dark: themes === 'dark' }">
<el-tabs v-model="tabActive" class="tab-header" :class="{ dark: themes === 'dark' }">
<el-tab-pane
:name="index + 1"
v-for="(l, index) in state.quadrantForm.labels"
@ -239,7 +233,6 @@ onMounted(() => {
<el-form-item
class="form-item"
:class="'form-item-' + themes"
style="padding-right: 4px"
:label="t('chart.backgroundColor')"
>
<el-color-picker
@ -290,7 +283,6 @@ onMounted(() => {
<el-form-item
class="form-item"
:class="'form-item-' + themes"
style="padding-right: 4px"
:label="t('chart.chart_style')"
>
<el-color-picker
@ -384,48 +376,6 @@ onMounted(() => {
border-color: rgba(235, 235, 235, 0.15);
}
}
.quadrant-tab-header {
--ed-tabs-header-height: 34px;
--custom-tab-color: #646a73;
:deep(.ed-tabs__nav-wrap::after) {
background-color: unset;
}
&.dark {
--custom-tab-color: #a6a6a6;
}
height: 100%;
:deep(.ed-tabs__header) {
border-top: solid 1px @side-outline-border-color;
}
:deep(.ed-tabs__item) {
font-weight: 400;
font-size: 12px;
padding: 0 12px !important;
margin-right: 0 !important;
color: var(--custom-tab-color);
}
:deep(.is-active) {
font-weight: 500;
color: var(--ed-color-primary, #3370ff);
}
:deep(.ed-tabs__nav-scroll) {
padding-left: 0 !important;
}
:deep(.ed-tabs__header) {
margin: 0 !important;
}
:deep(.ed-tabs__content) {
height: calc(100% - 33px);
overflow-y: auto;
overflow-x: hidden;
}
}
.padding-tab {
padding: 0;
height: 100%;

View File

@ -316,10 +316,26 @@ onMounted(() => {
is-custom
/>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding: 0 4px">
<el-select
:disabled="!state.axisForm.splitLine.show"
style="width: 62px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.style"
@change="changeAxisStyle('splitLine.lineStyle.style')"
>
<el-option
v-for="option in splitLineStyle"
:key="option.value"
:value="option.value"
:label="option.label"
></el-option>
</el-select>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding-left: 4px">
<el-input-number
:disabled="!state.axisForm.splitLine.show"
style="width: 108px"
style="width: 74px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.width"
:min="1"
@ -330,22 +346,6 @@ onMounted(() => {
/>
</el-form-item>
</div>
<el-form-item class="form-item" :class="'form-item-' + themes">
<el-select
:disabled="!state.axisForm.splitLine.show"
style="width: 108px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.style"
@change="changeAxisStyle('splitLine.lineStyle')"
>
<el-option
v-for="option in splitLineStyle"
:key="option.value"
:value="option.value"
:label="option.label"
></el-option>
</el-select>
</el-form-item>
</div>
<el-divider class="m-divider" :class="'m-divider--' + themes" />
<el-form-item

View File

@ -298,10 +298,26 @@ onMounted(() => {
is-custom
/>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding: 0 4px">
<el-select
:disabled="!state.axisForm.splitLine.show"
style="width: 62px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.style"
@change="changeAxisStyle('splitLine.lineStyle.style')"
>
<el-option
v-for="option in splitLineStyle"
:key="option.value"
:value="option.value"
:label="option.label"
></el-option>
</el-select>
</el-form-item>
<el-form-item class="form-item" :class="'form-item-' + themes" style="padding-left: 4px">
<el-input-number
:disabled="!state.axisForm.splitLine.show"
style="width: 108px"
style="width: 74px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.width"
:min="1"
@ -312,22 +328,6 @@ onMounted(() => {
/>
</el-form-item>
</div>
<el-form-item class="form-item" :class="'form-item-' + themes">
<el-select
:disabled="!state.axisForm.splitLine.show"
style="width: 108px"
:effect="props.themes"
v-model="state.axisForm.splitLine.lineStyle.style"
@change="changeAxisStyle('splitLine.lineStyle')"
>
<el-option
v-for="option in splitLineStyle"
:key="option.value"
:value="option.value"
:label="option.label"
></el-option>
</el-select>
</el-form-item>
</div>
<el-divider
v-if="showProperty('axisLabel')"

View File

@ -3166,7 +3166,7 @@ span {
display: flex;
transition: 0.5s;
.padding-lr {
padding: 0 8px;
padding: 0 10px;
&.no-top-border {
border-top: none !important;
@ -3217,7 +3217,7 @@ span {
}
:deep(.ed-collapse-item__content) {
padding: 16px 8px 0;
padding: 16px 10px 0;
border: none;
:deep(.ed-checkbox) {
height: 20px;

View File

@ -530,7 +530,8 @@ export function getYAxisExt(chart: Chart) {
line: {
style: {
stroke: yAxis.splitLine.lineStyle.color,
lineWidth: yAxis.splitLine.lineStyle.width
lineWidth: yAxis.splitLine.lineStyle.width,
lineDash: getLineDash(yAxis.splitLine.lineStyle.style)
}
}
}
@ -780,7 +781,7 @@ export function getAnalyseHorizontal(chart: Chart) {
return assistLine
}
function getLineDash(type) {
export function getLineDash(type) {
switch (type) {
case 'solid':
return [0, 0]

View File

@ -190,7 +190,7 @@ onMounted(async () => {
}
let deTemplateData
if (createType === 'template') {
const templateParamsApply = JSON.parse(decodeURIComponent(Base64.decode(templateParams + '')))
const templateParamsApply = JSON.parse(Base64.decode(decodeURIComponent(templateParams + '')))
await decompressionPre(templateParamsApply, result => {
deTemplateData = result
})

View File

@ -426,7 +426,7 @@ defineExpose({
</div>
</el-button>
<el-tooltip effect="dark" content="重新导出" placement="top">
<el-button text @click="retry(scope.row)">
<el-button v-if="scope.row.exportStatus === 'FAILED'" text @click="retry(scope.row)">
<template #icon>
<Icon name="icon_refresh_outlined"></Icon>
</template>

@ -1 +1 @@
Subproject commit dac92153509c5e1f4b7eb3b8418bd4ce320726c5
Subproject commit 448c319f8e519be5f4b47663258136bcb6fc3faa

View File

@ -5,6 +5,11 @@ services:
container_name: de-selenium
shm_size: 2gb
privileged: true
deploy:
resources:
limits:
cpus: ${DE_SELENIUM_CPU_LIMIT}
memory: ${DE_SELENIUM_MEM_LIMIT}
environment:
- SE_START_XVFB=false
- SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true

View File

@ -23,3 +23,9 @@ DE_MYSQL_USER=root
DE_MYSQL_PASSWORD=Password123@mysql
## 数据库参数
DE_MYSQL_PARAMS="autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true"
# 定时报告镜像配置
## selenium 镜像 CPU 限制
DE_SELENIUM_CPU_LIMIT='1'
## selenium 镜像 内存 限制
DE_SELENIUM_MEM_LIMIT=2g

View File

@ -2,8 +2,6 @@ package io.dataease.api.permissions.dataset.api;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.dataease.api.permissions.dataset.dto.DataSetColumnPermissionsDTO;
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
import io.dataease.api.permissions.dataset.dto.Item;
import io.dataease.auth.DeApiPath;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -19,7 +17,7 @@ import static io.dataease.constant.AuthResourceEnum.DATASET;
public interface ColumnPermissionsApi {
@GetMapping("/pager/{datasetId}/{goPage}/{pageSize}")
public IPage<DataSetColumnPermissionsDTO> columnPermissions(@PathVariable Long datasetId, @PathVariable int goPage, @PathVariable int pageSize);
public IPage<DataSetColumnPermissionsDTO> columnPermissions(@PathVariable("datasetId") Long datasetId, @PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize);
@PostMapping("save")
public void save(@RequestBody DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO);

View File

@ -18,7 +18,7 @@ import static io.dataease.constant.AuthResourceEnum.DATASET;
public interface RowPermissionsApi {
@GetMapping("/pager/{datasetId}/{goPage}/{pageSize}")
public IPage<DataSetRowPermissionsTreeDTO> rowPermissions(@PathVariable Long datasetId, @PathVariable int goPage, @PathVariable int pageSize);
public IPage<DataSetRowPermissionsTreeDTO> rowPermissions(@PathVariable("datasetId") Long datasetId, @PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize);
@PostMapping("save")
@ -30,7 +30,7 @@ public interface RowPermissionsApi {
@GetMapping("/authObjs/{datasetId}/{type}")
public List<Item> authObjs(@PathVariable Long datasetId, @PathVariable String type);
public List<Item> authObjs(@PathVariable("datasetId") Long datasetId, @PathVariable("type") String type);
@PostMapping("/dataSetRowPermissionInfo")
public DataSetRowPermissionsTreeDTO dataSetRowPermissionInfo(@RequestBody DataSetRowPermissionsTreeDTO request);

View File

@ -32,11 +32,11 @@ public interface SysVariablesApi {
@Operation(summary = "删除")
@GetMapping("/delete/{id}")
void delete(@PathVariable Long id);
void delete(@PathVariable("id") Long id);
@Operation(summary = "详细信息")
@GetMapping("/detail/{id}")
SysVariableDto detail(@PathVariable Long id);
SysVariableDto detail(@PathVariable("id") Long id);
@Operation(summary = "查询")
@PostMapping("/query")
@ -52,7 +52,7 @@ public interface SysVariablesApi {
@Operation(summary = "删除")
@GetMapping("/value/delete/{id}")
void deleteValue(@PathVariable String id);
void deleteValue(@PathVariable("id") String id);
@GetMapping("/value/selected/{id}")
List<SysVariableValueDto> selectVariableValue(@PathVariable("id") Long id);