Merge branch 'dev-v2' into pr@dev-v2_export_data

This commit is contained in:
taojinlong 2024-05-27 19:13:07 +08:00
commit 8a706bd560
27 changed files with 193 additions and 85 deletions

View File

@ -1,4 +1,4 @@
FROM registry.cn-qingdao.aliyuncs.com/dataease/alpine-openjdk17-jre
FROM registry.cn-qingdao.aliyuncs.com/dataease/alpine-openjdk21-jre
RUN mkdir -p /opt/apps/config /opt/dataease2.0/drivers/ /opt/dataease2.0/cache/ /opt/dataease2.0/data/map /opt/dataease2.0/data/static-resource/ /opt/dataease2.0/data/appearance/ /opt/dataease2.0/data/exportData/
@ -11,8 +11,9 @@ WORKDIR /opt/apps
ADD core/core-backend/target/CoreApplication.jar /opt/apps/app.jar
ENV JAVA_APP_JAR=/opt/apps/app.jar
ENV RUNNING_PORT=8100
ENV JAVA_OPTIONS="-Dfile.encoding=utf-8 -Dloader.path=/opt/apps -Dspring.config.additional-location=/opt/apps/config/"
HEALTHCHECK --interval=15s --timeout=5s --retries=20 --start-period=30s CMD nc -zv 127.0.0.1 8100
HEALTHCHECK --interval=15s --timeout=5s --retries=20 --start-period=30s CMD nc -zv 127.0.0.1 $RUNNING_PORT
CMD ["/deployments/run-java.sh"]

View File

@ -68,7 +68,8 @@ public class Utils {
String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), ele.getDataeaseName()));
} else {
originField = originField.replaceAll("\\[" + ele.getId() + "]",
tableObj.getTableAlias() + "." + datasourceType.getPrefix() + ele.getDataeaseName() + datasourceType.getSuffix());
datasourceType.getPrefix() + tableObj.getTableAlias() + datasourceType.getSuffix() +
"." + datasourceType.getPrefix() + ele.getDataeaseName() + datasourceType.getSuffix());
}
} else {
originField = originField.replaceAll("\\[" + ele.getId() + "]", "(" + ele.getOriginName() + ")");

View File

@ -36,7 +36,10 @@ export interface DatasetDetail {
fields: {
dimensionList: Array<Field>
quotaList: Array<Field>
parameterList?: Array<Field>
}
activelist?: string
hasParameter?: boolean
checkList: string[]
list: Array<Field>
}

View File

@ -0,0 +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="1716798774711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3450" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M474.3168 450.56H369.3568l66.4576-73.3184 13.7216-6.144h40.96L549.4784 79.1552c-57.6512 3.584-104.448 20.992-141.312 52.224-40.6528 34.5088-60.8256 79.1552-60.8256 134.2464l1.024 24.1664-143.9744 67.9936 2.8672-32.768c9.6256-111.7184 54.6816-194.9696 134.8608-247.808C420.7616 25.6 537.3952 0 692.224 0H1024l-60.0064 184.832h-73.4208l8.192-25.088c4.096-11.8784 6.0416-23.552 6.0416-34.816C904.8064 96.256 840.3968 76.1856 706.56 76.1856h-7.5776l-59.6992 294.8096H892.928l-84.5824 85.2992-15.6672 5.4272a1191.424 1191.424 0 0 0-158.72-11.264h-10.6496l-27.648 136.9088c-26.624 131.3792-78.1312 236.9536-154.8288 316.2112C363.52 983.6544 272.4864 1024 169.1648 1024 111.3088 1024 59.392 1002.5984 14.336 960.3072L0 946.7904l110.1824-110.08 11.4688 23.3472c24.7808 50.3808 63.1808 74.6496 117.9648 74.6496 50.176 0 88.7808-21.7088 117.76-66.4576 30.72-47.5136 59.0848-134.144 84.48-258.8672L474.3168 450.56z" p-id="3451"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -285,6 +285,14 @@ const batchOptStatusChange = value => {
}
const openOuterParamsSet = () => {
if (componentData.value.length === 0) {
ElMessage.warning('当前仪表板为空,请先添加组件')
return
}
if (!dvInfo.value.id) {
ElMessage.warning('请先保存当前页面')
return
}
outerParamsSetRef.value.optInit()
}

View File

@ -90,7 +90,7 @@ const paste = () => {
}
const deleteComponent = () => {
if (curComponent.value) {
if (curComponent.value && !isGroupArea.value) {
const curInfo = getCurInfo()
dvMainStore.deleteComponentById(curComponent.value?.id, curInfo.componentData)
} else if (areaData.value.components.length) {
@ -153,6 +153,10 @@ const handleComposeMouseDown = e => {
const composeDivider = computed(() => {
return !(!curComponent || curComponent['isLock'] || curComponent['component'] != 'Group')
})
const isGroupArea = computed(() => {
return curComponent.value?.component === 'GroupArea'
})
</script>
<template>
@ -201,7 +205,7 @@ const composeDivider = computed(() => {
取消组合
</li>
<el-divider class="custom-divider" v-show="composeDivider" />
<template v-if="curComponent">
<template v-if="curComponent && !isGroupArea">
<template v-if="!curComponent['isLock']">
<li @click="upComponent">上移一层</li>
<li @click="downComponent">下移一层</li>

View File

@ -322,11 +322,6 @@ defineExpose({
</template>
<style lang="less" scoped>
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
}
.canvas-container {
background-size: 100% 100% !important;
width: 100%;
@ -334,6 +329,10 @@ defineExpose({
overflow-x: hidden;
overflow-y: auto;
position: relative;
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
}
}
.fix-button {

View File

@ -2,6 +2,39 @@
<el-row class="custom-row">
<el-row class="custom-row-inner">
<el-space wrap>
<template v-for="styleOptionKey in styleOptionKeyArrayPre">
<el-tooltip
:key="styleOptionKey.value"
v-if="styleForm[styleOptionKey.value] !== undefined"
:effect="themes"
placement="bottom"
>
<template #content> {{ styleOptionKey.label }} </template>
<el-form-item class="form-item no-margin-bottom" :class="'form-item-' + themes">
<el-select
:style="{ width: styleOptionKey.width }"
:effect="themes"
v-model="styleForm[styleOptionKey.value]"
size="small"
@change="changeStyle"
>
<template #prefix>
<el-icon :class="{ 'dark-icon': themes === 'dark' }">
<Icon :name="styleOptionKey.icon" />
</el-icon>
</template>
<el-option
class="custom-style-option"
v-for="option in styleOptionKey.customOption"
:key="option.value"
:label="option.name"
:value="option.value"
/>
</el-select>
</el-form-item>
</el-tooltip>
</template>
<template v-for="styleColorKey in styleColorKeyArray">
<el-tooltip
:key="styleColorKey.value"
@ -274,18 +307,25 @@ const styleMounted = ref({
color: '#000000'
})
const fontFamilyList = [
{ name: '微软雅黑', value: 'Microsoft YaHei' },
{ name: '宋体', value: 'SimSun, "Songti SC", STSong' },
{ name: '黑体', value: 'SimHei, Helvetica' },
{ name: '楷体', value: 'KaiTi, "Kaiti SC", STKaiti' }
]
const scrollSpeedList = [
{ name: '停止', value: 0 },
{ name: '1', value: 20 },
{ name: '2', value: 18 },
{ name: '3', value: 16 },
{ name: '4', value: 14 },
{ name: '5', value: 12 },
{ name: '6', value: 10 },
{ name: '7', value: 8 },
{ name: '8', value: 6 },
{ name: '9', value: 4 },
{ name: '10', value: 2 }
{ name: '1', value: 80 },
{ name: '2', value: 60 },
{ name: '3', value: 40 },
{ name: '4', value: 20 },
{ name: '5', value: 10 },
{ name: '6', value: 8 },
{ name: '7', value: 6 },
{ name: '8', value: 4 },
{ name: '9', value: 2 },
{ name: '10', value: 1 }
]
const opacitySizeList = [
@ -376,6 +416,16 @@ const borderStyleList = [
{ name: '点线', value: 'dotted' }
]
const styleOptionKeyArrayPre = [
{
value: 'fontFamily',
label: '字体',
customOption: fontFamilyList,
width: '188px',
icon: 'dv-style-fontFamily'
}
]
//
const styleOptionMountedKeyArray = [
{

View File

@ -498,7 +498,8 @@ const list = [
color: '',
padding: 4,
verticalAlign: 'middle',
scrollSpeed: 0
scrollSpeed: 0,
fontFamily: 'Microsoft YaHei'
}
}
]

View File

@ -117,7 +117,6 @@ const destroyPlayer = () => {
justify-content: center;
background-color: rgba(245, 245, 220, 0.1);
font-size: 12px;
color: #000000;
}
.move-bg {

View File

@ -88,7 +88,6 @@ watch(
justify-content: center;
background-color: rgba(255, 255, 255, 0.1);
font-size: 12px;
color: #9ea6b2;
}
.player {

View File

@ -467,11 +467,10 @@ defineExpose({
height: 100%;
overflow-y: auto !important;
position: relative;
}
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
}
}
:deep(.ol) {

View File

@ -107,7 +107,6 @@ const activeCondition = ref('')
const isIndeterminate = ref(false)
const datasetTree = shallowRef([])
const fields = ref<DatasetDetail[]>()
const parameters = ref([])
const { queryElement } = toRefs(props)
@ -191,6 +190,9 @@ const setParameters = () => {
if (!!curComponent.value.parameters.length) {
curComponent.value.conditionType = 0
if (curComponent.value.optionValueSource === 0) {
curComponent.value.optionValueSource = 1
}
}
})
setType()
@ -1386,7 +1388,9 @@ defineExpose({
@change="handleValueSourceChange"
v-model="curComponent.optionValueSource"
>
<el-radio :label="0">{{ t('chart.margin_model_auto') }}</el-radio>
<el-radio :disabled="!!curComponent.parameters.length" :label="0">{{
t('chart.margin_model_auto')
}}</el-radio>
<el-radio :label="1">{{ t('chart.select_dataset') }}</el-radio>
<el-radio :label="2">手动输入</el-radio>
</el-radio-group>

View File

@ -710,11 +710,11 @@ export default {
chart_bar: '基础柱状图',
chart_bar_stack: '堆叠柱状图',
chart_percentage_bar_stack: '百分比柱状图',
chart_bar_horizontal: '横向柱状',
chart_bar_stack_horizontal: '横向堆叠柱状',
chart_percentage_bar_stack_horizontal: '横向百分比柱状',
chart_bar_horizontal: '基础条形',
chart_bar_stack_horizontal: '堆叠条形',
chart_percentage_bar_stack_horizontal: '百分比条形',
chart_bar_range: '区间条形图',
chart_bidirectional_bar: '对称柱状',
chart_bidirectional_bar: '对称条形',
chart_progress_bar: '进度条',
chart_line: '基础折线图',
chart_area_stack: '堆叠折线图',
@ -881,7 +881,7 @@ export default {
chart_type_table: '表格',
chart_type_quota: '指标',
chart_type_trend: '线/面图',
chart_type_compare: '',
chart_type_compare: '/',
chart_type_distribute: '分布图',
chart_type_relation: '关系图',
chart_type_dual_axes: '双轴图',
@ -1436,6 +1436,7 @@ export default {
pls_input_filename: '请输入文件名称',
calc_tips: {
tip1: '表达式语法请遵循calcite语法',
tip1_1: '表达式语法请遵循该数据源对应的数据库语法',
tip2: '聚合运算仅能在图表中生效',
tip3: '引用字段以 "[" 开始 "]" 结束',
tip4: '请勿修改引用内容否则将引用失败',
@ -1928,7 +1929,7 @@ export default {
yes: '是',
no: '否',
live_tips: '优先HTTPS链接',
stream_media_add_tips: '在右侧添加流媒体信息...',
stream_media_add_tips: '添加流媒体信息...',
stream_mobile_tips: 'IOS终端可能无法显示',
json_params_error: '第三方参数解析失败请检查参数格式是否正确',
inner_padding: '内边距',
@ -2166,8 +2167,8 @@ export default {
play_circle: '循环播放',
video_links: '视频链接',
web_url: '网页地址',
video_add_tips: '在右侧添加视频信息...',
link_add_tips_pre: '在右侧配置网页信息..',
video_add_tips: '配置视频信息...',
link_add_tips_pre: '配置网页信息..',
web_add_tips_suf: '添加网页信息...',
panel_view_result_show: '图表结果',
panel_view_result_tips: '选择{0}会覆盖图表的结果展示数量取值范围1~10000',

View File

@ -138,7 +138,7 @@ const canvasInit = (isFistLoad = true) => {
}
// afterInit
dvMainStore.setDataPrepareState(true)
if (isMainCanvas(canvasId.value.id) && isFistLoad) {
if (isMainCanvas(canvasId.value) && isFistLoad) {
snapshotStore.recordSnapshotCache('renderChart')
}
}, 500)
@ -289,10 +289,9 @@ defineExpose({
width: 100%;
height: 100%;
}
}
&::-webkit-scrollbar {
display: none;
::-webkit-scrollbar {
display: none;
}
}
.render-active {

View File

@ -184,7 +184,7 @@ const state = reactive({
})
const filedList = computed(() => {
return [...state.dimension, ...state.quota].filter(ele => ele.id !== 'count')
return [...state.dimension, ...state.quota].filter(ele => ele.id !== 'count' && !!ele.summary)
})
provide('filedList', () => filedList.value)

View File

@ -16,6 +16,7 @@ import {
import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util'
import { useI18n } from '@/hooks/web/useI18n'
import { valueFormatter } from '@/views/chart/components/js/formatter'
import { Options } from '@antv/g2plot/esm'
const { t } = useI18n()
/**
* 对称柱状图
@ -118,11 +119,27 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
},
interactions: [{ type: 'active-region' }],
yField: ['value', 'valueExt'],
appendPadding: getPadding(chart)
appendPadding: getPadding(chart),
meta: {
field: {
type: 'cat'
}
}
}
const customOptions = this.setupOptions(chart, initOptions)
const options = {
...customOptions
}
const xAxis = chart.xAxis
if (xAxis?.length === 1 && xAxis[0].deType === 1) {
const values = data2.map(item => item.field)
options.meta = {
field: {
type: 'cat',
values: values.reverse()
}
}
}
const options = this.setupOptions(chart, initOptions)
// 开始渲染
const newChart = new G2BidirectionalBar(container, options)
@ -418,6 +435,45 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
return { ...options, label }
}
protected configEmptyDataStrategy(
chart: Chart,
options: BidirectionalBarOptions
): BidirectionalBarOptions {
const { data } = options as unknown as Options
if (!data?.length) {
return options
}
const strategy = parseJson(chart.senior).functionCfg.emptyDataStrategy
if (strategy === 'ignoreData') {
const emptyFields = data
.filter(obj => obj['value'] === null || obj['valueExt'] === null)
.map(obj => obj['field'])
return {
...options,
data: data.filter(obj => {
if (emptyFields.includes(obj['field'])) {
return false
}
return true
})
}
}
const updateValues = (strategy: 'breakLine' | 'setZero', data: any[]) => {
data.forEach(obj => {
if (obj['value'] === null) {
obj['value'] = strategy === 'breakLine' ? null : 0
}
if (obj['valueExt'] === null) {
obj['valueExt'] = strategy === 'breakLine' ? null : 0
}
})
}
if (strategy === 'breakLine' || strategy === 'setZero') {
updateValues(strategy, data)
}
return options
}
protected setupOptions(chart: Chart, options: BidirectionalBarOptions) {
return flow(
this.configTheme,

View File

@ -187,7 +187,7 @@ export class Waterfall extends G2PlotChartView<WaterfallOptions, G2Waterfall> {
let tmpValue = totalMap[id]
let color = 'grey'
if (id === yAxis[0].id) {
tmpValue = parseFloat(head.value as unknown as string)
tmpValue = head.data.value
color = head.color
}
const value = valueFormatter(tmpValue, formatter.formatterCfg)

View File

@ -137,13 +137,6 @@ const initLocalCanvasData = () => {
dvInfo.value.pid = sourcePid
setTimeout(() => {
snapshotStore.recordSnapshotCache()
//
if (opt === 'copy') {
// 使
setTimeout(() => {
snapshotStore.recordSnapshotCache('renderChart')
}, 1000)
}
}, 1500)
}
})

View File

@ -140,11 +140,6 @@ defineExpose({
</template>
<style lang="less">
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
}
.content {
background-color: #ffffff;
width: 100%;
@ -152,5 +147,9 @@ defineExpose({
align-items: center;
overflow-x: hidden;
overflow-y: auto;
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
}
}
</style>

View File

@ -29,6 +29,13 @@ const searchFunction = ref('')
const mirror = ref()
const props = defineProps({
crossDs: {
type: Boolean,
default: () => false
}
})
const fields = [
{ label: t('dataset.text'), value: 0 },
{ label: t('dataset.time'), value: 1 },
@ -287,9 +294,9 @@ initFunction()
<span>*</span>
<el-tooltip class="item" effect="dark" placement="top">
<template #content>
{{ t('dataset.calc_tips.tip1') }}
<br />
{{ t('dataset.calc_tips.tip2') }}
<div v-if="props.crossDs">{{ t('dataset.calc_tips.tip1') }}</div>
<div v-else>{{ t('dataset.calc_tips.tip1_1') }}</div>
<div>{{ t('dataset.calc_tips.tip2') }}</div>
</template>
<el-icon size="16px">
<Icon name="icon_info_outlined"></Icon>

View File

@ -1894,7 +1894,7 @@ const getDsIconName = data => {
width="1000px"
:title="calcTitle"
>
<calc-field-edit ref="calcEdit" />
<calc-field-edit ref="calcEdit" :crossDs="crossDatasources" />
<template #footer>
<el-button secondary @click="closeEditCalc()">{{ t('dataset.cancel') }} </el-button>
<el-button type="primary" @click="confirmEditCalc()">{{ t('dataset.confirm') }} </el-button>

@ -1 +1 @@
Subproject commit 690faa2e32bf71f23fdda04a83c3b7a1ed0d368c
Subproject commit 7a8f793d47c5c2f63ef852f9f6595e9b876defce

View File

@ -20,13 +20,13 @@
<properties>
<dataease.version>2.6.1</dataease.version>
<java.version>17</java.version>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
<spring-boot.version>3.3.0</spring-boot.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<mybatis-plus.version>3.5.6</mybatis-plus.version>
<h2.version>2.2.220</h2.version>
<knife4j.version>4.4.0</knife4j.version>

View File

@ -11,9 +11,4 @@
<artifactId>api-base</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>

View File

@ -11,9 +11,4 @@
<artifactId>api-permissions</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>

View File

@ -11,10 +11,4 @@
<artifactId>api-sync</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>