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

This commit is contained in:
ulleo 2024-04-02 19:57:06 +08:00
commit bde48836c8
13 changed files with 293 additions and 179 deletions

View File

@ -40,6 +40,7 @@ import javax.annotation.Resource;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -108,13 +109,14 @@ public class DorisQueryProvider extends QueryProvider {
.build(); .build();
List<SQLObj> xFields = new ArrayList<>(); List<SQLObj> xFields = new ArrayList<>();
List<String> fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); List<String> fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList());
AtomicInteger sortIndex = new AtomicInteger(-1);
if (CollectionUtils.isNotEmpty(sortFields)) { if (CollectionUtils.isNotEmpty(sortFields)) {
sortFields.forEach(item -> { sortFields.forEach(item -> {
int indexOf = fieldList.indexOf(item.getId()); sortIndex.set(fieldList.indexOf(item.getId()));
if (indexOf == -1) { if (sortIndex.get() == -1) {
fields.add(item); fields.add(item);
} else { } else {
fields.set(indexOf, item); fields.set(sortIndex.get(), item);
} }
}); });
} }
@ -218,6 +220,19 @@ public class DorisQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(xOrders)) { if (CollectionUtils.isNotEmpty(xOrders)) {
st.add("orders", xOrders); st.add("orders", xOrders);
} }
if (CollectionUtils.isNotEmpty(xFields)) {
List<SQLObj> finallyFields = new ArrayList<>();
for (int i = 0; i < xFields.size(); i++) {
if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) {
continue;
}
SQLObj f = xFields.get(i);
String prefix = finallyFields.isEmpty() ? " DISTINCT " : "";
f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias()));
finallyFields.add(f);
}
st.add("groups", finallyFields);
}
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
return st.render() + " LIMIT 0," + limit; return st.render() + " LIMIT 0," + limit;
} }

View File

@ -163,7 +163,6 @@ public class Db2QueryProvider extends QueryProvider {
.build()); .build());
} }
} }
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); st_sql.add("isGroup", isGroup);
@ -193,6 +192,17 @@ public class Db2QueryProvider extends QueryProvider {
} }
if (ObjectUtils.isNotEmpty(xOrders)) { if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders); st_sql.add("orders", xOrders);
if (needDistinct(sortFields, limit)) {
st_sql.remove("groups");
xOrders.forEach(f -> {
if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) {
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size());
SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build();
xFields.add(tField);
}
});
st_sql.add("groups", xFields);
}
} }
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
ChartViewWithBLOBs view = new ChartViewWithBLOBs(); ChartViewWithBLOBs view = new ChartViewWithBLOBs();

View File

@ -39,6 +39,7 @@ import javax.annotation.Resource;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -168,13 +169,14 @@ public class MysqlQueryProvider extends QueryProvider {
.build(); .build();
List<SQLObj> xFields = new ArrayList<>(); List<SQLObj> xFields = new ArrayList<>();
List<String> fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); List<String> fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList());
AtomicInteger sortIndex = new AtomicInteger(-1);
if (CollectionUtils.isNotEmpty(sortFields)) { if (CollectionUtils.isNotEmpty(sortFields)) {
sortFields.forEach(item -> { sortFields.forEach(item -> {
int indexOf = fieldList.indexOf(item.getId()); sortIndex.set(fieldList.indexOf(item.getId()));
if (indexOf == -1) { if (sortIndex.get() == -1) {
fields.add(item); fields.add(item);
} else { } else {
fields.set(indexOf, item); fields.set(sortIndex.get(), item);
} }
}); });
} }
@ -273,6 +275,19 @@ public class MysqlQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(xOrders)) { if (CollectionUtils.isNotEmpty(xOrders)) {
st.add("orders", xOrders); st.add("orders", xOrders);
} }
if (CollectionUtils.isNotEmpty(xFields)) {
List<SQLObj> finallyFields = new ArrayList<>();
for (int i = 0; i < xFields.size(); i++) {
if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) {
continue;
}
SQLObj f = xFields.get(i);
String prefix = finallyFields.isEmpty() ? " DISTINCT " : "";
f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias()));
finallyFields.add(f);
}
st.add("groups", finallyFields);
}
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
ChartViewWithBLOBs view = new ChartViewWithBLOBs(); ChartViewWithBLOBs view = new ChartViewWithBLOBs();
view.setResultMode("custom"); view.setResultMode("custom");

View File

@ -121,8 +121,6 @@ public class OracleQueryProvider extends QueryProvider {
setSchema(tableObj, ds); setSchema(tableObj, ds);
List<SQLObj> xFields = xFields(table, fields); List<SQLObj> xFields = xFields(table, fields);
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); st_sql.add("isGroup", isGroup);
@ -151,6 +149,17 @@ public class OracleQueryProvider extends QueryProvider {
} }
if (ObjectUtils.isNotEmpty(xOrders)) { if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders); st_sql.add("orders", xOrders);
if (needDistinct(sortFields, limit)) {
st_sql.remove("groups");
xOrders.forEach(f -> {
if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) {
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size());
SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build();
xFields.add(tField);
}
});
st_sql.add("groups", xFields);
}
} }
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
ChartViewWithBLOBs view = new ChartViewWithBLOBs(); ChartViewWithBLOBs view = new ChartViewWithBLOBs();

View File

@ -170,10 +170,10 @@ public class PgQueryProvider extends QueryProvider {
.fieldOriginName(originField) .fieldOriginName(originField)
.fieldName(fieldName) .fieldName(fieldName)
.fieldAlias(fieldAlias) .fieldAlias(fieldAlias)
.build()); .build());
} }
} }
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); st_sql.add("isGroup", isGroup);
@ -207,6 +207,17 @@ public class PgQueryProvider extends QueryProvider {
} }
if (ObjectUtils.isNotEmpty(xOrders)) { if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders); st_sql.add("orders", xOrders);
if (needDistinct(sortFields, limit)) {
st_sql.remove("groups");
xOrders.forEach(f -> {
if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) {
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size());
SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build();
xFields.add(tField);
}
});
st_sql.add("groups", xFields);
}
} }
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {

View File

@ -250,7 +250,20 @@ public class SqlserverQueryProvider extends QueryProvider {
} }
} }
if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) {
SQLObj limitFiled = SQLObj.builder().limitFiled(" top " + limit + " ").build(); String topKeyWord = " top ";
if (needDistinct(sortFields, limit)) {
topKeyWord = " distinct top ";
st_sql.remove("groups");
xOrders.forEach(f -> {
if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) {
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size());
SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build();
xFields.add(tField);
}
});
st_sql.add("groups", xFields);
}
SQLObj limitFiled = SQLObj.builder().limitFiled(topKeyWord + limit + " ").build();
st_sql.add("limitFiled", limitFiled); st_sql.add("limitFiled", limitFiled);
} }

View File

@ -8,6 +8,7 @@
<el-radio <el-radio
:key="item.id + 'radio'" :key="item.id + 'radio'"
:label="item.text" :label="item.text"
class="is-custom-select"
:value="item.id" :value="item.id"
v-if="radioStyle.showStyle === 'single'" v-if="radioStyle.showStyle === 'single'"
:disabled="itemDisabled" :disabled="itemDisabled"
@ -16,6 +17,7 @@
v-else v-else
:disabled="itemDisabled" :disabled="itemDisabled"
:key="item.id + 'tab'" :key="item.id + 'tab'"
class="is-custom-select"
:label="item.text" :label="item.text"
:value="item.id" :value="item.id"
/> />

View File

@ -2890,7 +2890,7 @@ export default {
chart_data: 'View data', chart_data: 'View data',
panel_preview: 'Preview report', panel_preview: 'Preview report',
preview: 'Preview', preview: 'Preview',
emial_preview: 'Report preview', email_preview: 'Report preview',
chart_data_range: 'View data range', chart_data_range: 'View data range',
panel_format: 'Panel format', panel_format: 'Panel format',
simple_repeat: 'Simple repeat', simple_repeat: 'Simple repeat',

View File

@ -2883,7 +2883,7 @@ export default {
chart_data: '視圖數據', chart_data: '視圖數據',
panel_preview: '預覽報告', panel_preview: '預覽報告',
preview: '預覽', preview: '預覽',
emial_preview: '報告預覽', email_preview: '報告預覽',
chart_data_range: '視圖數據範圍', chart_data_range: '視圖數據範圍',
panel_format: '儀表板格式', panel_format: '儀表板格式',
simple_repeat: '簡單重複', simple_repeat: '簡單重複',

View File

@ -2885,7 +2885,7 @@ export default {
chart_data: '视图数据', chart_data: '视图数据',
panel_preview: '预览报告', panel_preview: '预览报告',
preview: '预览', preview: '预览',
emial_preview: '报告预览', email_preview: '报告预览',
chart_data_range: '视图数据范围', chart_data_range: '视图数据范围',
panel_format: '仪表板格式', panel_format: '仪表板格式',
simple_repeat: '简单重复', simple_repeat: '简单重复',

View File

@ -833,7 +833,7 @@ div:focus {
color: #1F2329 !important; color: #1F2329 !important;
} }
.el-radio__input.is-checked:not(.is-disabled)+.el-radio__label { .el-radio:not(.is-custom-select) .el-radio__input.is-checked:not(.is-disabled)+.el-radio__label {
color: var(--deTextPrimary, #1F2329) !important; color: var(--deTextPrimary, #1F2329) !important;
} }

View File

@ -10,13 +10,15 @@
v-for="ele in intervalTypeList" v-for="ele in intervalTypeList"
:key="ele.value" :key="ele.value"
:label="ele.value" :label="ele.value"
>{{ $t(`time.${ele.label}`) }}</el-radio >{{ $t(`time.${ele.label}`) }}</el-radio>
>
</el-radio-group> </el-radio-group>
</div> </div>
</div> </div>
</div> </div>
<div class="list-item" v-if="timeRange.intervalType !== 'none'"> <div
v-if="timeRange.intervalType !== 'none'"
class="list-item"
>
<div class="label">{{ $t(`time.${regularOrTrendsTitle}`) }}</div> <div class="label">{{ $t(`time.${regularOrTrendsTitle}`) }}</div>
<div class="setting-content"> <div class="setting-content">
<div class="setting"> <div class="setting">
@ -33,7 +35,10 @@
{{ $t("time.relative_to_current") }} {{ $t("time.relative_to_current") }}
</div> </div>
<div class="setting-value select"> <div class="setting-value select">
<el-select size="small" v-model="timeRange.relativeToCurrent"> <el-select
v-model="timeRange.relativeToCurrent"
size="small"
>
<el-option <el-option
v-for="item in relativeToCurrentList" v-for="item in relativeToCurrentList"
:key="item.value" :key="item.value"
@ -43,7 +48,10 @@
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="setting" v-if="timeRange.relativeToCurrent === 'custom'"> <div
v-if="timeRange.relativeToCurrent === 'custom'"
class="setting"
>
<div class="setting-input"> <div class="setting-input">
<el-input-number <el-input-number
v-model="timeRange.timeNum" v-model="timeRange.timeNum"
@ -51,7 +59,10 @@
:min="0" :min="0"
controls-position="right" controls-position="right"
/> />
<el-select size="small" v-model="timeRange.relativeToCurrentType"> <el-select
v-model="timeRange.relativeToCurrentType"
size="small"
>
<el-option <el-option
v-for="item in relativeToCurrentTypeList" v-for="item in relativeToCurrentTypeList"
:key="item.value" :key="item.value"
@ -59,7 +70,10 @@
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<el-select size="small" v-model="timeRange.around"> <el-select
v-model="timeRange.around"
size="small"
>
<el-option <el-option
v-for="item in aroundList" v-for="item in aroundList"
:key="item.value" :key="item.value"
@ -82,7 +96,10 @@
:min="0" :min="0"
controls-position="right" controls-position="right"
/> />
<el-select size="small" v-model="timeRange.relativeToCurrentType"> <el-select
v-model="timeRange.relativeToCurrentType"
size="small"
>
<el-option <el-option
v-for="item in relativeToCurrentTypeList" v-for="item in relativeToCurrentTypeList"
:key="item.value" :key="item.value"
@ -90,7 +107,10 @@
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<el-select size="small" v-model="timeRange.around"> <el-select
v-model="timeRange.around"
size="small"
>
<el-option <el-option
v-for="item in aroundList" v-for="item in aroundList"
:key="item.value" :key="item.value"
@ -109,7 +129,10 @@
:min="0" :min="0"
controls-position="right" controls-position="right"
/> />
<el-select size="small" v-model="timeRange.relativeToCurrentTypeRange"> <el-select
v-model="timeRange.relativeToCurrentTypeRange"
size="small"
>
<el-option <el-option
v-for="item in relativeToCurrentTypeList" v-for="item in relativeToCurrentTypeList"
:key="item.value" :key="item.value"
@ -117,7 +140,10 @@
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
<el-select size="small" v-model="timeRange.aroundRange"> <el-select
v-model="timeRange.aroundRange"
size="small"
>
<el-option <el-option
v-for="item in aroundList" v-for="item in aroundList"
:key="item.value" :key="item.value"
@ -129,15 +155,21 @@
</div> </div>
</template> </template>
</div> </div>
<div class="parameters" :class="dynamicTime && 'setting'"> <div
<div class="setting-label" v-if="dynamicTime"> class="parameters"
:class="dynamicTime && 'setting'"
>
<div
v-if="dynamicTime"
class="setting-label"
>
{{ $t("time.preview") }} {{ $t("time.preview") }}
</div> </div>
<div :class="dynamicTime ? 'setting-value' : 'w100'"> <div :class="dynamicTime ? 'setting-value' : 'w100'">
<el-date-picker <el-date-picker
:disabled="timeRange.regularOrTrends !== 'fixed'"
v-model="timeRange.regularOrTrendsValue"
:key="timeInterval" :key="timeInterval"
v-model="timeRange.regularOrTrendsValue"
:disabled="timeRange.regularOrTrends !== 'fixed'"
:type="timeInterval" :type="timeInterval"
size="small" size="small"
:start-placeholder="$t('dataset.start_time')" :start-placeholder="$t('dataset.start_time')"
@ -169,103 +201,108 @@
</div> </div>
</div> </div>
<div class="popover-foot"> <div class="popover-foot">
<de-btn secondary @click="closeFilter">{{ $t("chart.cancel") }} </de-btn> <de-btn
<de-btn type="primary" @click="changeFilter" secondary
>{{ $t("chart.confirm") }} @click="closeFilter"
>{{ $t("chart.cancel") }} </de-btn>
<de-btn
type="primary"
@click="changeFilter"
>{{ $t("chart.confirm") }}
</de-btn> </de-btn>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { getThisStart, getLastStart, getAround } from "./time-format-dayjs"; import { getThisStart, getLastStart, getAround } from './time-format-dayjs'
import { cloneDeep } from "lodash-es"; import { cloneDeep } from 'lodash-es'
const intervalTypeList = [ const intervalTypeList = [
{ {
label: "nothing", label: 'nothing',
value: "none", value: 'none'
}, },
{ {
label: "starting_from", label: 'starting_from',
value: "start", value: 'start'
}, },
{ {
label: "end_at", label: 'end_at',
value: "end", value: 'end'
}, },
{ {
label: "time_interval", label: 'time_interval',
value: "timeInterval", value: 'timeInterval'
}, }
]; ]
const aroundList = [ const aroundList = [
{ {
label: "ago", label: 'ago',
value: "f", value: 'f'
}, },
{ {
label: "after", label: 'after',
value: "b", value: 'b'
}, }
]; ]
const relativeToCurrentTypeList = [ const relativeToCurrentTypeList = [
{ {
label: "year", label: 'year',
value: "year", value: 'year'
}, },
{ {
label: "month", label: 'month',
value: "month", value: 'month'
}, },
{ {
label: "day", label: 'day',
value: "day", value: 'day'
}, }
]; ]
const relativeToCurrentList = [ const relativeToCurrentList = [
{ {
label: "today", label: 'today',
value: "today", value: 'today'
}, },
{ {
label: "yesterday", label: 'yesterday',
value: "yesterday", value: 'yesterday'
}, },
{ {
label: "at_the_beginning_of_the_month", label: 'at_the_beginning_of_the_month',
value: "monthBeginning", value: 'monthBeginning'
}, },
{ {
label: "at_the_beginning_of_the_year", label: 'at_the_beginning_of_the_year',
value: "yearBeginning", value: 'yearBeginning'
}, },
{ {
label: "custom", label: 'custom',
value: "custom", value: 'custom'
}, }
]; ]
const defaultObj = { const defaultObj = {
intervalType: "none", intervalType: 'none',
dynamicWindow: false, dynamicWindow: false,
maximumSingleQuery: 0, maximumSingleQuery: 0,
regularOrTrends: "fixed", regularOrTrends: 'fixed',
regularOrTrendsValue: "", regularOrTrendsValue: '',
relativeToCurrent: "custom", relativeToCurrent: 'custom',
timeNum: 0, timeNum: 0,
relativeToCurrentType: "year", relativeToCurrentType: 'year',
around: "f", around: 'f',
timeNumRange: 0, timeNumRange: 0,
relativeToCurrentTypeRange: "year", relativeToCurrentTypeRange: 'year',
aroundRange: "f", aroundRange: 'f'
}; }
export default { export default {
props: { props: {
timeRangeData: { timeRangeData: {
type: Object, type: Object,
defalut: () => defaultObj, default: () => defaultObj
}, }
}, },
data() { data() {
return { return {
@ -274,24 +311,20 @@ export default {
aroundList, aroundList,
relativeToCurrentList, relativeToCurrentList,
timeRange: { timeRange: {
intervalType: "none", intervalType: 'none',
dynamicWindow: false, dynamicWindow: false,
maximumSingleQuery: 0, maximumSingleQuery: 0,
regularOrTrends: "fixed", regularOrTrends: 'fixed',
regularOrTrendsValue: "", regularOrTrendsValue: '',
relativeToCurrent: "custom", relativeToCurrent: 'custom',
timeNum: 0, timeNum: 0,
relativeToCurrentType: "year", relativeToCurrentType: 'year',
around: "f", around: 'f',
timeNumRange: 0, timeNumRange: 0,
relativeToCurrentTypeRange: "year", relativeToCurrentTypeRange: 'year',
aroundRange: "f", aroundRange: 'f'
}, }
}; }
},
created() {
this.timeRange = cloneDeep(this.timeRangeData);
this.init();
}, },
computed: { computed: {
timeConfig() { timeConfig() {
@ -303,8 +336,8 @@ export default {
relativeToCurrent, relativeToCurrent,
timeNumRange, timeNumRange,
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange, aroundRange
} = this.timeRange; } = this.timeRange
return { return {
timeNum, timeNum,
relativeToCurrentType, relativeToCurrentType,
@ -313,30 +346,34 @@ export default {
intervalType, intervalType,
timeNumRange, timeNumRange,
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange, aroundRange
}; }
}, },
regularOrTrendsTitle() { regularOrTrendsTitle() {
return intervalTypeList.find( return intervalTypeList.find(
(ele) => ele.value === this.timeRange.intervalType, (ele) => ele.value === this.timeRange.intervalType
).label; ).label
}, },
dynamicTime() { dynamicTime() {
return this.timeRange.regularOrTrends !== "fixed"; return this.timeRange.regularOrTrends !== 'fixed'
}, },
timeInterval() { timeInterval() {
return this.timeRange.intervalType === "timeInterval" return this.timeRange.intervalType === 'timeInterval'
? "daterange" ? 'daterange'
: "date"; : 'date'
}, }
}, },
watch: { watch: {
timeConfig: { timeConfig: {
handler() { handler() {
this.init(); this.init()
}, },
deep: true, deep: true
}, }
},
created() {
this.timeRange = cloneDeep(this.timeRangeData)
this.init()
}, },
methods: { methods: {
init() { init() {
@ -350,81 +387,79 @@ export default {
timeNumRange, timeNumRange,
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange, aroundRange,
regularOrTrends, regularOrTrends
} = this.timeRange; } = this.timeRange
if (regularOrTrends === "fixed") { if (regularOrTrends === 'fixed') {
if (intervalType === "timeInterval") { if (intervalType === 'timeInterval') {
if ( if (
Array.isArray(regularOrTrendsValue) && Array.isArray(regularOrTrendsValue) &&
!!regularOrTrendsValue.length !!regularOrTrendsValue.length
) ) { return }
return;
this.timeRange.regularOrTrendsValue = [ this.timeRange.regularOrTrendsValue = [
getAround(relativeToCurrentType, "add", 0), getAround(relativeToCurrentType, 'add', 0),
getAround(relativeToCurrentType, "add", 1), getAround(relativeToCurrentType, 'add', 1)
]; ]
return; return
} }
if (!Array.isArray(regularOrTrendsValue) && !!regularOrTrendsValue) if (!Array.isArray(regularOrTrendsValue) && !!regularOrTrendsValue) { return }
return; this.timeRange.regularOrTrendsValue = new Date()
this.timeRange.regularOrTrendsValue = new Date(); return
return;
} }
if (intervalType === "timeInterval") { if (intervalType === 'timeInterval') {
const startTime = getAround( const startTime = getAround(
relativeToCurrentType, relativeToCurrentType,
around === "f" ? "subtract" : "add", around === 'f' ? 'subtract' : 'add',
timeNum, timeNum
); )
const endTime = getAround( const endTime = getAround(
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange === "f" ? "subtract" : "add", aroundRange === 'f' ? 'subtract' : 'add',
timeNumRange, timeNumRange
); )
this.timeRange.regularOrTrendsValue = [startTime, endTime]; this.timeRange.regularOrTrendsValue = [startTime, endTime]
return; return
} }
if (relativeToCurrent === "custom") { if (relativeToCurrent === 'custom') {
this.timeRange.regularOrTrendsValue = getAround( this.timeRange.regularOrTrendsValue = getAround(
relativeToCurrentType, relativeToCurrentType,
around === "f" ? "subtract" : "add", around === 'f' ? 'subtract' : 'add',
timeNum, timeNum
); )
} else { } else {
switch (relativeToCurrent) { switch (relativeToCurrent) {
case "thisYear": case 'thisYear':
this.timeRange.regularOrTrendsValue = getThisStart("year"); this.timeRange.regularOrTrendsValue = getThisStart('year')
break; break
case "lastYear": case 'lastYear':
this.timeRange.regularOrTrendsValue = getLastStart("year"); this.timeRange.regularOrTrendsValue = getLastStart('year')
break; break
case "thisMonth": case 'thisMonth':
this.timeRange.regularOrTrendsValue = getThisStart("month"); this.timeRange.regularOrTrendsValue = getThisStart('month')
break; break
case "lastMonth": case 'lastMonth':
this.timeRange.regularOrTrendsValue = getLastStart("month"); this.timeRange.regularOrTrendsValue = getLastStart('month')
break; break
case "today": case 'today':
this.timeRange.regularOrTrendsValue = getThisStart("day"); this.timeRange.regularOrTrendsValue = getThisStart('day')
break; break
case "yesterday": case 'yesterday':
this.timeRange.regularOrTrendsValue = getLastStart("day"); this.timeRange.regularOrTrendsValue = getLastStart('day')
break; break
case "monthBeginning": case 'monthBeginning':
this.timeRange.regularOrTrendsValue = getThisStart("month"); this.timeRange.regularOrTrendsValue = getThisStart('month')
break; break
case "yearBeginning": case 'yearBeginning':
this.timeRange.regularOrTrendsValue = getThisStart("year"); this.timeRange.regularOrTrendsValue = getThisStart('year')
break; break
default: default:
break; break
} }
} }
}, },
closeFilter() { closeFilter() {
this.timeRange = cloneDeep(this.timeRangeData); this.timeRange = cloneDeep(this.timeRangeData)
this.$emit("changeData", null); this.$emit('changeData', null)
}, },
changeFilter() { changeFilter() {
const { const {
@ -435,28 +470,28 @@ export default {
timeNumRange, timeNumRange,
regularOrTrends, regularOrTrends,
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange, aroundRange
} = this.timeRange; } = this.timeRange
if (intervalType === "timeInterval" && regularOrTrends === 'dynamic') { if (intervalType === 'timeInterval' && regularOrTrends === 'dynamic') {
const startTime = getAround( const startTime = getAround(
relativeToCurrentType, relativeToCurrentType,
around === "f" ? "subtract" : "add", around === 'f' ? 'subtract' : 'add',
timeNum, timeNum
); )
const endTime = getAround( const endTime = getAround(
relativeToCurrentTypeRange, relativeToCurrentTypeRange,
aroundRange === "f" ? "subtract" : "add", aroundRange === 'f' ? 'subtract' : 'add',
timeNumRange, timeNumRange
); )
if (+endTime < +startTime) { if (+endTime < +startTime) {
this.$message.error(this.$t('time.end_time_start_time')); this.$message.error(this.$t('time.end_time_start_time'))
return; return
} }
} }
this.$emit("changeData", cloneDeep(this.timeRange)); this.$emit('changeData', cloneDeep(this.timeRange))
}, }
}, }
}; }
</script> </script>
<style lang="less"> <style lang="less">
.set-time-filtering-range { .set-time-filtering-range {

View File

@ -263,4 +263,8 @@ public abstract class QueryProvider {
} }
return "'%" + value + "%'"; return "'%" + value + "%'";
} }
public boolean needDistinct(List<DeSortField> sortFields, Long limit) {
return CollectionUtils.isNotEmpty(sortFields) && ObjectUtils.isNotEmpty(limit);
}
} }