forked from github/dataease
Merge branch 'dev-v2' into heatmap
This commit is contained in:
commit
d70abb485b
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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 |
@ -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 |
@ -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);
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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()
|
||||
},
|
||||
|
@ -73,6 +73,7 @@ const { icon, name, label, dragInfo, themes } = toRefs(props)
|
||||
.drag-icon {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
color: #3370ff;
|
||||
}
|
||||
}
|
||||
.label-content {
|
||||
|
@ -80,7 +80,7 @@ const onBlur = () => {
|
||||
}
|
||||
init()
|
||||
watch(
|
||||
frameLinks.value,
|
||||
() => frameLinks.value,
|
||||
() => {
|
||||
init()
|
||||
},
|
||||
|
@ -112,7 +112,7 @@ const onChange = () => {
|
||||
init()
|
||||
|
||||
watch(
|
||||
linkInfo.value,
|
||||
() => linkInfo.value,
|
||||
() => {
|
||||
init()
|
||||
},
|
||||
|
@ -105,7 +105,7 @@ const onBlur = () => {
|
||||
init()
|
||||
|
||||
watch(
|
||||
linkInfo.value,
|
||||
() => linkInfo.value,
|
||||
() => {
|
||||
init()
|
||||
},
|
||||
|
@ -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>
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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%;
|
||||
|
@ -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
|
||||
|
@ -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')"
|
||||
|
@ -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;
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
})
|
||||
|
@ -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>
|
||||
|
2
de-xpack
2
de-xpack
@ -1 +1 @@
|
||||
Subproject commit dac92153509c5e1f4b7eb3b8418bd4ce320726c5
|
||||
Subproject commit 448c319f8e519be5f4b47663258136bcb6fc3faa
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user