forked from github/dataease
Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
2580dab0a8
@ -4,9 +4,9 @@ ARG IMAGE_TAG
|
||||
|
||||
RUN mkdir -p /opt/apps
|
||||
|
||||
ADD backend/target/backend-1.0.jar /opt/apps
|
||||
ADD backend/target/backend-1.0.0.jar /opt/apps
|
||||
|
||||
ENV JAVA_APP_JAR=/opt/apps/backend-1.0.jar
|
||||
ENV JAVA_APP_JAR=/opt/apps/backend-1.0.0.jar
|
||||
|
||||
ENV AB_OFF=true
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>dataease-server</artifactId>
|
||||
<groupId>io.dataease</groupId>
|
||||
<version>1.0</version>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -6,6 +6,7 @@ import io.dataease.dto.chart.ChartCustomFilterDTO;
|
||||
import io.dataease.dto.chart.ChartViewFieldDTO;
|
||||
import io.dataease.provider.QueryProvider;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -374,6 +375,9 @@ public class MysqlQueryProvider extends QueryProvider {
|
||||
for (ChartCustomFilterDTO request : requestList) {
|
||||
String value = request.getValue();
|
||||
DatasetTableField field = request.getField();
|
||||
if (ObjectUtils.isEmpty(field)) {
|
||||
continue;
|
||||
}
|
||||
if (field.getDeType() == 1 && field.getDeExtractType() != 1) {
|
||||
filter.append(" AND FROM_UNIXTIME(cast(")
|
||||
.append(field.getOriginName())
|
||||
|
File diff suppressed because one or more lines are too long
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>dataease-server</artifactId>
|
||||
<groupId>io.dataease</groupId>
|
||||
<version>1.0</version>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="top-nav" :style="{'background-color': '#f1f3f8'}">
|
||||
<div class="log">
|
||||
<div v-loading="!axiosFinished" class="log">
|
||||
<!-- <img v-if="!logoUrl" src="@/assets/DataEase-color.png" width="140" alt="" style="padding-top: 10px;">-->
|
||||
<svg-icon v-if="!logoUrl" icon-class="DataEase" custom-class="top-nav-logo-icon" />
|
||||
<img v-else :src="logoUrl" width="140" alt="" style="padding-top: 10px;">
|
||||
<svg-icon v-if="!logoUrl && axiosFinished" icon-class="DataEase" custom-class="top-nav-logo-icon" />
|
||||
<img v-else :src="logoUrl && axiosFinished" width="140" alt="" style="padding-top: 10px;">
|
||||
</div>
|
||||
<el-menu
|
||||
:active-text-color="variables.topMenuActiveText"
|
||||
@ -92,7 +92,8 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
uiInfo: null,
|
||||
logoUrl: null
|
||||
logoUrl: null,
|
||||
axiosFinished: false
|
||||
}
|
||||
},
|
||||
|
||||
@ -137,6 +138,7 @@ export default {
|
||||
if (this.uiInfo['ui.logo'] && this.uiInfo['ui.logo'].paramValue) {
|
||||
this.logoUrl = '/system/ui/image/' + this.uiInfo['ui.logo'].paramValue
|
||||
}
|
||||
this.axiosFinished = true
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
|
@ -53,6 +53,7 @@ export const filterAsyncRouter = (routers) => { // 遍历后台传来的路由
|
||||
router.component = loadView(component)
|
||||
}
|
||||
}
|
||||
router.name && fillMeta(router)
|
||||
if (router.children && router.children.length) {
|
||||
router.children = filterAsyncRouter(router.children)
|
||||
}
|
||||
@ -66,6 +67,14 @@ export const filterAsyncRouter = (routers) => { // 遍历后台传来的路由
|
||||
})
|
||||
}
|
||||
|
||||
// 后台设计时未考虑activeMenu字段 这里先前端处理一下
|
||||
export const fillMeta = (router) => {
|
||||
router.name.includes('system-user-form') && (router.meta.activeMenu = '/system/user')
|
||||
router.name.includes('system-role-form') && (router.meta.activeMenu = '/system/role')
|
||||
router.name.includes('system-dept-form') && (router.meta.activeMenu = '/system/dept')
|
||||
// return router
|
||||
}
|
||||
|
||||
// 包装一层父级目录
|
||||
export const decorate = (router) => {
|
||||
const parent = {
|
||||
|
@ -275,3 +275,7 @@ div:focus {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.m-colorPicker .box {
|
||||
bottom:20px;
|
||||
}
|
||||
|
||||
|
@ -21,21 +21,21 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-show="(chart.type && chart.type.includes('text')) || sourceType==='panelTable'" :label="$t('chart.dimension_color')" class="form-item">
|
||||
<colorPicker v-model="colorForm.dimensionColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />
|
||||
<colorPicker v-model="colorForm.dimensionColor" style="margin-top: 6px;cursor: pointer;z-index: 1003;border: solid 1px black" @change="changeColorCase" />
|
||||
</el-form-item>
|
||||
<el-form-item v-show="(chart.type && chart.type.includes('text')) || sourceType==='panelTable'" :label="$t('chart.quota_color')" class="form-item">
|
||||
<colorPicker v-model="colorForm.quotaColor" style="margin-top: 6px;cursor: pointer;z-index: 1003;border: solid 1px black" @change="changeColorCase" />
|
||||
<colorPicker v-model="colorForm.quotaColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div v-if="sourceType==='view' || sourceType==='panelTable'">
|
||||
<el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_header_bg')" class="form-item">
|
||||
<colorPicker v-model="colorForm.tableHeaderBgColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />
|
||||
<colorPicker v-model="colorForm.tableHeaderBgColor" style="margin-top: 6px;cursor: pointer;z-index: 1002;border: solid 1px black" @change="changeColorCase" />
|
||||
</el-form-item>
|
||||
<el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_item_bg')" class="form-item">
|
||||
<colorPicker v-model="colorForm.tableItemBgColor" style="margin-top: 6px;cursor: pointer;z-index: 1003;border: solid 1px black" @change="changeColorCase" />
|
||||
</el-form-item>
|
||||
<el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.table_item_font_color')" class="form-item">
|
||||
<colorPicker v-model="colorForm.tableFontColor" style="margin-top: 6px;cursor: pointer;z-index: 1002;border: solid 1px black" @change="changeColorCase" />
|
||||
<colorPicker v-model="colorForm.tableFontColor" style="margin-top: 6px;cursor: pointer;z-index: 1004;border: solid 1px black" @change="changeColorCase" />
|
||||
</el-form-item>
|
||||
<!-- 暂时不支持该功能-->
|
||||
<!-- <el-form-item v-show="(chart.type && chart.type.includes('table')) || sourceType==='panelTable'" :label="$t('chart.stripe')" class="form-item">-->
|
||||
|
@ -40,9 +40,9 @@
|
||||
</div>
|
||||
</el-form>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div v-if="!loginImageUrl" class="login-image" />
|
||||
<div v-else class="login-image-de" :style="{background:'url(' + loginImageUrl + ') no-repeat', 'backgroundSize':'cover'}" />
|
||||
<el-col v-loading="!axiosFinished" :span="12">
|
||||
<div v-if="!loginImageUrl && axiosFinished" class="login-image" />
|
||||
<div v-if="loginImageUrl && axiosFinished" class="login-image-de" :style="{background:'url(' + loginImageUrl + ') no-repeat', 'backgroundSize':'contain'}" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
@ -95,7 +95,8 @@ export default {
|
||||
redirect: undefined,
|
||||
uiInfo: null,
|
||||
loginImageUrl: null,
|
||||
loginLogoUrl: null
|
||||
loginLogoUrl: null,
|
||||
axiosFinished: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -115,6 +116,14 @@ export default {
|
||||
this.$store.dispatch('user/getUI').then(() => {
|
||||
// const uiLists = this.$store.state.user.uiInfo
|
||||
// this.uiInfo = format(uiLists)
|
||||
this.axiosFinished = true
|
||||
this.showLoginImage()
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
showLoginImage() {
|
||||
this.uiInfo = getSysUI()
|
||||
if (this.uiInfo['ui.loginImage'] && this.uiInfo['ui.loginImage'].paramValue) {
|
||||
this.loginImageUrl = '/system/ui/image/' + this.uiInfo['ui.loginImage'].paramValue
|
||||
@ -122,11 +131,7 @@ export default {
|
||||
if (this.uiInfo['ui.loginLogo'] && this.uiInfo['ui.loginLogo'].paramValue) {
|
||||
this.loginLogoUrl = '/system/ui/image/' + this.uiInfo['ui.loginLogo'].paramValue
|
||||
}
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
handleLogin() {
|
||||
this.$refs.loginForm.validate(valid => {
|
||||
if (valid) {
|
||||
|
@ -47,7 +47,7 @@
|
||||
</span>
|
||||
<span class="child">
|
||||
<span v-if="data.type ==='folder'" @click.stop>
|
||||
<!-- <span class="el-dropdown-link">
|
||||
<span class="el-dropdown-link">
|
||||
<el-button
|
||||
v-permission="['datasource:add']"
|
||||
icon="el-icon-plus"
|
||||
@ -55,7 +55,7 @@
|
||||
size="small"
|
||||
@click="addFolderWithType(data)"
|
||||
/>
|
||||
</span> -->
|
||||
</span>
|
||||
|
||||
</span>
|
||||
<span v-if="data.type !=='folder'" style="margin-left: 12px;" @click.stop>
|
||||
@ -141,7 +141,7 @@ export default {
|
||||
if (!(element.type in types)) {
|
||||
types[element.type] = []
|
||||
// newArr.push(...element, ...{ children: types[element.type] })
|
||||
newArr.push({ id: element.type, name: element.type, type: 'folder', children: types[element.type] })
|
||||
newArr.push({ id: element.type, name: this.transTypeToName(element.type), type: 'folder', children: types[element.type] })
|
||||
}
|
||||
types[element.type].push(element)
|
||||
// newArr.children.push({ id: element.id, label: element.name })
|
||||
@ -149,6 +149,14 @@ export default {
|
||||
return newArr
|
||||
},
|
||||
|
||||
transTypeToName(type) {
|
||||
if (type === 'mysql') {
|
||||
return 'MySQL'
|
||||
} else if (type === 'sqlServer') {
|
||||
return 'SQL Server'
|
||||
}
|
||||
},
|
||||
|
||||
addFolder() {
|
||||
this.switchMain('DsForm')
|
||||
},
|
||||
|
@ -15,7 +15,7 @@
|
||||
<el-input v-model="form.desc" autocomplete="off" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('datasource.type')" prop="type">
|
||||
<el-select v-model="form.type" :placeholder="$t('datasource.please_choose_type')" class="select-width" :disabled="formType=='modify'" @change="changeType()">
|
||||
<el-select v-model="form.type" :placeholder="$t('datasource.please_choose_type')" class="select-width" :disabled="formType=='modify' || (formType==='add' && params && !!params.type)" @change="changeType()">
|
||||
<el-option
|
||||
v-for="item in allTypes"
|
||||
:key="item.name"
|
||||
@ -108,6 +108,9 @@ export default {
|
||||
this.edit(row)
|
||||
} else {
|
||||
this.create()
|
||||
if (this.params && this.params.type) {
|
||||
this.setType()
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -119,6 +122,12 @@ export default {
|
||||
// }
|
||||
},
|
||||
methods: {
|
||||
setType() {
|
||||
this.form.type = this.params.type
|
||||
this.form.configuration = {}
|
||||
this.changeType()
|
||||
console.log(this.form)
|
||||
},
|
||||
changeEdit() {
|
||||
this.canEdit = true
|
||||
this.formType = 'modify'
|
||||
|
@ -46,7 +46,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" sortable="custom" :label="$t('commons.status')">
|
||||
<template v-slot:default="scope">
|
||||
<el-switch v-model="scope.row.enabled" :active-value="1" :inactive-value="0" :disabled="!checkPermission(['user:edit'])" inactive-color="#DCDFE6" @change="changeSwitch(scope.row)" />
|
||||
<el-switch v-model="scope.row.enabled" :active-value="1" :inactive-value="0" :disabled="!checkPermission(['user:edit']) || scope.row.isAdmin" inactive-color="#DCDFE6" @change="changeSwitch(scope.row)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" sortable="custom" :label="$t('commons.create_time')">
|
||||
|
Loading…
Reference in New Issue
Block a user