Merge branch 'dev' of github.com:dataease/dataease into dev

This commit is contained in:
taojinlong 2022-03-30 23:52:51 +08:00
commit fa8d459804
14 changed files with 73 additions and 18 deletions

View File

@ -187,11 +187,11 @@
`senior`,
`data_from`)
SELECT #{newChartId},
`name`,
GET_CHART_VIEW_COPY_NAME(#{oldChartId},#{panelId}) as `name`,
#{panelId},
`table_id`,
`type`,
`title`,
GET_CHART_VIEW_COPY_NAME(#{oldChartId},#{panelId}) as `title`,
`x_axis`,
`x_axis_ext`,
`y_axis`,

View File

@ -116,6 +116,13 @@ public class ChartViewService {
public ChartViewWithBLOBs newOne(ChartViewWithBLOBs chartView) {
long timestamp = System.currentTimeMillis();
// 校验名称
ChartViewExample queryExample = new ChartViewExample();
queryExample.createCriteria().andSceneIdEqualTo(chartView.getSceneId()).andNameEqualTo(chartView.getName());
List<ChartView> result = chartViewMapper.selectByExample(queryExample);
if(CollectionUtils.isNotEmpty(result)){
DEException.throwException(Translator.get("theme_name_repeat"));
}
chartView.setUpdateTime(timestamp);
chartView.setId(UUID.randomUUID().toString());
chartView.setCreateBy(AuthUtils.getUser().getUsername());

View File

@ -250,7 +250,7 @@ END
;;
delimiter ;
INSERT INTO `my_plugin`(`plugin_id`, `name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `install_type`, `creator`, `load_mybatis`, `release_time`, `install_time`, `module_name`, `icon`) VALUES (3, 'tabs插件', 'default', 0, 20000, 'panel', 'tabs插件', '1.0-SNAPSHOT', NULL, 'fit2cloud-chenyw', 0, NULL, NULL, 'dataease-extensions-tabs-backend', NULL);
INSERT INTO `my_plugin`(`plugin_id`, `name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `install_type`, `creator`, `load_mybatis`, `release_time`, `install_time`, `module_name`, `icon`) VALUES (3, '选项卡插件', 'default', 0, 20000, 'panel', '选项卡插件', '1.0-SNAPSHOT', NULL, 'fit2cloud-chenyw', 0, NULL, NULL, 'dataease-extensions-tabs-backend', NULL);
ALTER TABLE `panel_link_jump_info`
ADD COLUMN `attach_params` tinyint(1) NULL COMMENT '是否附加点击参数' AFTER `checked`;
@ -259,3 +259,36 @@ ADD COLUMN `attach_params` tinyint(1) NULL COMMENT '是否附加点击参数' AF
update `sys_menu` set menu_id = 100 where title = '首页';
INSERT INTO `sys_menu` VALUES (101, 1, 4, 1, '插件管理', 'system-plugin', 'system/plugin/index', 1002, 'peoples', 'plugin', b'0', b'0', b'0', 'plugin:read', NULL, NULL, NULL, 1620281952752);
DROP FUNCTION IF EXISTS `GET_CHART_VIEW_COPY_NAME`;
delimiter ;;
CREATE FUNCTION `GET_CHART_VIEW_COPY_NAME`(chartId varchar(255),pid varchar(255))
RETURNS varchar(255) CHARSET utf8mb4
READS SQL DATA
BEGIN
DECLARE chartName varchar(255);
DECLARE regexpInfo varchar(255);
DECLARE chartNameCount INTEGER;
select `name` into chartName from chart_view where id =chartId;
/**
因为名称存在等特殊字符所以不能直接用REGEXP进行查找qrtz_locks
1.用like 'chartName%' 过滤可能的数据项
2.REPLACE(name,chartName,'') REGEXP '-copy\\(([0-9])+\\)$' 过滤去掉chartName后的字符以 -copy(/d) 结尾的数据
3.(LENGTH(REPLACE(name,chartName,''))-LENGTH(replace(REPLACE(name,chartName,''),'-',''))=1) 确定只出现一次 - 防止多次copy
**/
select (count(1)+1) into chartNameCount from chart_view
where (LENGTH(REPLACE(name,chartName,''))-LENGTH(replace(REPLACE(name,chartName,''),'-',''))=1)
and REPLACE(name,chartName,'') REGEXP '-copy\\(([0-9])+\\)$' and name like CONCAT(chartName,'%') and chart_view.scene_id=pid ;
RETURN concat(chartName,'-copy(',chartNameCount,')');
END
;;
delimiter ;
update `my_plugin` set `name` = 'X-Pack默认插件' where `plugin_id` = 1;
update `my_plugin` set `module_name` = 'view-bubblemap-backend' where `plugin_id` = 2;

View File

@ -140,7 +140,7 @@ export default {
},
data() {
return {
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -120,7 +120,7 @@ export default {
},
data() {
return {
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -56,7 +56,7 @@ export default {
},
data() {
return {
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -57,7 +57,7 @@ export default {
},
data() {
return {
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -148,7 +148,7 @@ export default {
return {
compareItem: compareItem,
disableEditCompare: false,
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -148,7 +148,7 @@ export default {
return {
compareItem: compareItem,
disableEditCompare: false,
tagType: getItemType(this.dimensionData, this.quotaData, this.item)
tagType: 'success'
}
},
watch: {

View File

@ -142,7 +142,7 @@
</el-select>
</el-form-item>
<el-form-item v-show="chart.type" :label="$t('chart.space_split')" class="form-item">
<el-input-number v-model="sizeForm.spaceSplit" size="mini" @change="changeBarSizeCase" />
<el-input-number v-model="sizeForm.spaceSplit" min="0" size="mini" @change="changeBarSizeCase" />
</el-form-item>
</el-form>

View File

@ -168,7 +168,7 @@
</el-select>
</el-form-item>
<el-form-item v-show="chart.type" :label="$t('chart.space_split')" class="form-item">
<el-input-number v-model="sizeForm.spaceSplit" size="mini" @change="changeBarSizeCase" />
<el-input-number v-model="sizeForm.spaceSplit" min="0" size="mini" @change="changeBarSizeCase" />
</el-form-item>
</el-form>

View File

@ -204,7 +204,7 @@
<span style="float: right;">
<el-select v-model="view.render" class="render-select" style="width: 70px" size="mini">
<el-option
v-for="item in renderOptions"
v-for="item in pluginRenderOptions"
:key="item.value"
:value="item.value"
:label="item.name"
@ -429,6 +429,13 @@ export default {
},
panelInfo() {
return this.$store.state.panel.panelInfo
},
pluginRenderOptions() {
const plugins = localStorage.getItem('plugin-views') && JSON.parse(localStorage.getItem('plugin-views')) || []
const pluginOptions = plugins.filter(plugin => !this.renderOptions.some(option => option.value === plugin.render)).map(plugin => {
return { name: plugin.render, value: plugin.render }
})
return [...this.renderOptions, ...pluginOptions]
}
},
watch: {
@ -783,7 +790,7 @@ export default {
view.extBubble = JSON.stringify([])
this.setChartDefaultOptions(view)
const _this = this
post('/chart/view/newOne/' + this.panelInfo.id, view,true).then(response => {
post('/chart/view/newOne/' + this.panelInfo.id, view, true).then(response => {
this.closeCreateChart()
this.$store.dispatch('chart/setTableId', null)
this.$store.dispatch('chart/setTableId', this.table.id)

View File

@ -175,7 +175,7 @@
@change="changeChartType()"
>
<el-option
v-for="item in renderOptions"
v-for="item in pluginRenderOptions"
:key="item.value"
:value="item.value"
:label="item.name"
@ -877,7 +877,7 @@
@onLegendChange="onLegendChange"
/>
</el-collapse-item>
<el-collapse-item v-if="chart.customStyle.background" name="background" :title="$t('chart.background')">
<el-collapse-item v-if="chart.customStyle && chart.customStyle.background" name="background" :title="$t('chart.background')">
<background-color-selector
:param="param"
class="attr-selector"
@ -1378,7 +1378,14 @@ export default {
},
...mapState([
'panelViewEditInfo'
])
]),
pluginRenderOptions() {
const plugins = localStorage.getItem('plugin-views') && JSON.parse(localStorage.getItem('plugin-views')) || []
const pluginOptions = plugins.filter(plugin => !this.renderOptions.some(option => option.value === plugin.render)).map(plugin => {
return { name: plugin.render, value: plugin.render }
})
return [...this.renderOptions, ...pluginOptions]
}
},
watch: {
'param': function(val) {

View File

@ -3,7 +3,7 @@
<el-row v-if="editPanel.optType==='new' && editPanel.panelInfo.nodeType==='panel'">
<el-col :span="18" style="height: 40px">
<el-radio v-model="inputType" label="new"> {{ $t('panel.custom') }}</el-radio>
<!-- <el-radio v-model="inputType" label="new_outer_template">{{ $t('panel.import_template') }} </el-radio>-->
<el-radio v-model="inputType" label="new_outer_template">{{ $t('panel.import_template') }} </el-radio>
<el-radio v-model="inputType" label="new_inner_template" @click.native="getTree">{{ $t('panel.copy_template') }} </el-radio>
</el-col>
<el-col v-if="inputType==='new_outer_template'" :span="6">
@ -23,7 +23,7 @@
</el-col>
<el-col :span="16" :style="classBackground" class="preview-show" />
</el-row>
<!-- <el-row v-if="inputType==='import'" class="preview" :style="classBackground" />-->
<el-row v-if="inputType==='new_outer_template'" class="preview" :style="classBackground" />
<el-row class="root-class">
<el-button size="mini" @click="cancel()">{{ $t('commons.cancel') }}</el-button>
<el-button type="primary" size="mini" @click="save()">{{ $t('commons.confirm') }}</el-button>
@ -168,6 +168,7 @@ export default {
this.editPanel.panelInfo.name = this.importTemplateInfo.name
this.editPanel.panelInfo.panelStyle = this.importTemplateInfo.panelStyle
this.editPanel.panelInfo.panelData = this.importTemplateInfo.panelData
this.editPanel.panelInfo.dynamicData = this.importTemplateInfo.dynamicData
}
reader.readAsText(file)
},