⬆️ Upgrading dependencies. up jimu 1.5.6

This commit is contained in:
lbw committed 2023-12-05 17:23:41 +08:00
1 parent 813c107a45
commit 40bb94302a
16 files changed
+451 -191

No files matched your search

@@ -18,7 +18,7 @@ import java.util.Map;
/**
* @author lengleng
* @date 2022/4/6
*
* <p>
* 积木安全控制
*/
@Component
@@ -40,7 +40,7 @@ public class JimuReportTokenService implements JmReportTokenServiceI {
// @formatter:off
}
@Override public String[] getRoles(String s) {
return new String[0];
return new String[]{"admin"};
}
@Override
@@ -1,4 +1,4 @@
<#assign CACHE_VERSION = "v=1694491301.10">
<#assign CACHE_VERSION = "v=1699715555.10">
<!DOCTYPE html>
<html>
<head>
@@ -5,7 +5,7 @@
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = "https://hm.baidu.com/hm.js?b756a4a8e1c58d613e27d1459c6d6076";
s.src = "https://hm.baidu.com/hm.js?5819d05c0869771ff6e6a81cdec5b2e8";
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}
@@ -828,7 +828,7 @@ function load() {
// console.log(cdata);
// console.log(xs.validate());
var str = JSON.stringify(cdata)
console.log(str);
//console.log(str);
});
}
</script>
@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>系统错误</title>
</head>
<body>
<div style="color: red">
${message}
<a href="http://jimureport.com/vip">Upgrade Now</a>
</div>
</body>
</html>
@@ -1,4 +1,4 @@
<#assign CACHE_VERSION = "v=1694491301.10">
<#assign CACHE_VERSION = "v=1699715555.10">
<#assign config_id = "${id!''}">
<!DOCTYPE html>
<html>
@@ -582,12 +582,12 @@
<i-option value="img" key="2" class="rightFontSize">图片</i-option>
<i-option value="barcode" key="3" class="rightFontSize">条形码</i-option>
<i-option value="qrcode" key="4" class="rightFontSize">二维码</i-option>
<i-option value="richText" key="5" class="rightFontSize">富文本?</i-option>
<i-option value="richText" key="5" class="rightFontSize">富文本</i-option>
<#--<i-option value="chart" key="5">图表</i-option>-->
</i-select>
</div>
<div class="basicSettingTop rightFontSize" v-if="excel.type == 'img'">
<span>尺寸?</span>
<span>尺寸</span>
<i-select class="twoInputWidth" v-model="excel.imgSize" @on-change="onChangeCellImgSize">
<i-option value="0" key="0" class="rightFontSize">完全覆盖(cover)</i-option>
<i-option value="1" key="1" class="rightFontSize">适应内容(contain)</i-option>
@@ -1139,7 +1139,7 @@
x.spreadsheet.locale('zh-cn');
xs = x.spreadsheet('#jm-sheet-wrapper', options)
.onSave(function (data) {
console.log("data: ", data)
//console.log("data: ", data)
//设置报表打印宽度
const dataRect = xs.data.getDataRect();
let dataRectWidth = 0;
@@ -1,4 +1,4 @@
<#assign CACHE_VERSION = "v=1694491301.10">
<#assign CACHE_VERSION = "v=1699715555.10">
<!DOCTYPE html>
<html>
<head>
@@ -131,6 +131,10 @@
<#include "./template/list.ftl">
<div id="app" style="padding-left: 30px">
<div class="layout" style="margin-left: -30px;margin-top: -10px;">
<#-- <div style="background-color: #1890FF;height: 47px">-->
<#-- <span class="aui-logo"></span>-->
<#-- <span class="jimu-header">欢迎进入积木报表工作台 </span>-->
<#-- </div>-->
<Layout>
<Sider breakpoint="md" collapsible :collapsed-width="78" v-model="isCollapsed">
<i-menu theme="primary" width="auto" :class="menuitemClasses" active-name="datainfo" :open-names="['sub']" @on-select="onMenuSelect">
@@ -143,14 +147,14 @@
<Icon type="md-list"/></Icon>
<span>数据报表</span>
</Menu-Item>
<Menu-Item name="chartinfo">
<Icon type="md-images"></Icon>
<span>图形报表</span>
</Menu-Item>
<Menu-Item name="printinfo">
<Icon type="md-print"></Icon>
<span>打印设计</span>
</Menu-Item>
<Menu-Item name="recycleBin">
<Icon type="md-trash"></Icon>
<span>回收站</span>
</Menu-Item>
</Submenu>
</i-menu>
<div slot="trigger"></div>
@@ -158,7 +162,9 @@
<Tabs value="name1" style="width: 100%" @on-click="tabsClick">
<tab-pane icon="md-desktop" label="报表设计" name="name1" class="jimu-tab">
<div style="display: flex;justify-content:space-between;margin-left:16px;margin-right: 38px;">
<div>
<div style="display: flex">
<input type="file" accept=".json" id="fileInput" ref="fileInput" style="display: none" @input="handleFileUpload">
<i-button size="small" icon="ios-cloud-upload-outline" style="margin-right: 5px;" type="primary" @click="uploadFile" v-if="menuitem!='recycleBin'">导入报表</i-button>
<i-input size="small" v-model="name" @keyup.enter.native="enterSearchClick" placeholder="搜索报表名称"></i-input>
</div>
<div class="page">
@@ -184,7 +190,7 @@
</div>
</div>
<div style="display: flex;flex-wrap: wrap;" v-if="previewModel =='view'">
<div class="excel-view-item excel-list-add">
<div class="excel-view-item excel-list-add" v-if="menuitem!='recycleBin'">
<a @click="createExcel">
<i class="ivu-icon ivu-icon-md-add" style="font-size:20px; padding-bottom: 5px;"></i>
<p style="letter-spacing: 2px;font-size: 14px;">新建报表</p>
@@ -202,7 +208,7 @@
<!-- 缩略图 &ndash;&gt;-->
<div class="thumb">
<img :src="getThumbSrc(item)"/>
<div class="excel-edit-container" v-show="item.editable">
<div class="excel-edit-container" v-show="item.editable && menuitem!='recycleBin'">
<a :href="getExcelEditUrl(item)" target="_blank">
设计
</a>
@@ -219,24 +225,24 @@
{{ item.name }}
</div>
</Tooltip>
<div>
<div v-if="menuitem!='recycleBin'">
<a class="opt-show" :href="getExcelViewUrl(item)" target="_blank">
<Tooltip content="预览模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="预览报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-eye-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-show" v-show="userMessage" @click="setTemplate(item,1)">
<Tooltip content="收藏模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="收藏报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-star-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-show" @click="handleDelete(item)">
<Tooltip content="删除模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="删除报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-trash" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-show" @click="handleCopy(item)">
<Tooltip content="复制模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="复制报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-browsers" style="font-size: 16px"></i>
</Tooltip>
</a>
@@ -247,51 +253,78 @@
</a>
</div>
<div style="margin-left: 14%;" v-else>
<a class="opt-show" @click="handleReduction(item)">
<Tooltip content="还原报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-refresh" style="font-size: 16px;transform: rotate(200deg)"></i>
</Tooltip>
</a>
<a class="opt-show" @click="handleRealDelete(item)">
<Tooltip content="彻底删除报表" placement="top" transfer class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-md-trash" style="font-size: 16px"></i>
</Tooltip>
</a>
</div>
</div>
</div>
<!-- 循环结束 &ndash;&gt;-->
</div>
<div v-else style="padding: 10px 10px">
<i-button type="primary" @click="createExcel" size="small" style="margin-left: 6px;width:78px;font-size: 10px">
<i-button v-if="menuitem!='recycleBin'" type="primary" @click="createExcel" size="small" style="margin-left: 6px;width:78px;font-size: 10px">
新建报表
</i-button>
<i-table size="small" style="margin-top: 10px" border :columns="listColumns" :data="dataSource">
<template slot-scope="{ row, index }" slot="action">
<a class="opt-list-show" :href="getExcelViewUrl(row)" target="_blank">
<Tooltip transfer="true" content="预览模板" placement="top">
<i class="ivu-icon ivu-icon-ios-eye-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" :href="getExcelEditUrl(row)" target="_blank">
<Tooltip transfer="true" content="编辑" placement="top">
<i class="ivu-icon ivu-icon-md-create" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" v-show="userMessage" @click="setTemplate(row,1)">
<Tooltip transfer="true" content="收藏模板" placement="top">
<i class="ivu-icon ivu-icon-ios-star-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleDelete(row)">
<Tooltip transfer="true" content="删除模板" placement="top">
<i class="ivu-icon ivu-icon-ios-trash" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleCopy(row)">
<Tooltip transfer="true" content="复制模板" placement="top">
<i class="ivu-icon ivu-icon-ios-browsers" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleShare(row.id)">
<Tooltip transfer="true" content="分享" placement="top">
<i class="ivu-icon ivu-icon-ios-share-alt" style="font-size: 16px"></i>
</Tooltip>
</a>
<template v-if="menuitem!='recycleBin'">
<a class="opt-list-show" :href="getExcelViewUrl(row)" target="_blank">
<Tooltip transfer="true" content="预览报表" placement="top">
<i class="ivu-icon ivu-icon-ios-eye-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" :href="getExcelEditUrl(row)" target="_blank">
<Tooltip transfer="true" content="编辑" placement="top">
<i class="ivu-icon ivu-icon-md-create" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" v-show="userMessage" @click="setTemplate(row,1)">
<Tooltip transfer="true" content="收藏报表" placement="top">
<i class="ivu-icon ivu-icon-ios-star-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleDelete(row)">
<Tooltip transfer="true" content="删除报表" placement="top">
<i class="ivu-icon ivu-icon-ios-trash" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleCopy(row)">
<Tooltip transfer="true" content="复制报表" placement="top">
<i class="ivu-icon ivu-icon-ios-browsers" style="font-size: 16px"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleShare(row.id)">
<Tooltip transfer="true" content="分享" placement="top">
<i class="ivu-icon ivu-icon-ios-share-alt" style="font-size: 16px"></i>
</Tooltip>
</a>
</template>
<template v-else>
<a class="opt-list-show" @click="handleReduction(row)">
<Tooltip content="还原报表" placement="top" transfer class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-refresh" style="font-size: 16px;transform: rotate(200deg)"></i>
</Tooltip>
</a>
<a class="opt-list-show" @click="handleRealDelete(row)">
<Tooltip content="彻底删除报表" placement="top" transfer class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-md-trash" style="font-size: 16px"></i>
</Tooltip>
</a>
</template>
</template>
</i-table>
</div>
</tab-pane>
<tab-pane icon="md-options" label="模板案例" name="name2" class="jimu-tab">
<tab-pane icon="md-options" label="模板案例" name="name2" class="jimu-tab" v-if="menuitem!='recycleBin'">
<div style="display: flex;justify-content:space-between;margin-left:16px;margin-right: 38px">
<div>
<i-input size="small" v-model="name" @keyup.enter.native="loadData" placeholder="搜索报表名称"></i-input>
@@ -350,7 +383,7 @@
</Tooltip>
<div style="margin-left: 14%;">
<a class="opt-show" :href="getExcelViewUrl(item)" target="_blank">
<Tooltip content="预览模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="预览报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-eye-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
@@ -360,7 +393,7 @@
</Tooltip>
</a>
<a class="opt-show" @click="handleCopy(item)">
<Tooltip content="复制模板" placement="top" class="tooltip-footer-font-size">
<Tooltip content="复制报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-browsers" style="font-size: 16px"></i>
</Tooltip>
</a>
@@ -396,7 +429,7 @@
</Tooltip>
</a>
<a class="opt-list-show" :href="getExcelViewUrl(row)" target="_blank">
<Tooltip transfer="true" content="预览模板" placement="top" class="tooltip-footer-font-size">
<Tooltip transfer="true" content="预览报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-eye-outline" style="font-size: 16px"></i>
</Tooltip>
</a>
@@ -406,7 +439,7 @@
</Tooltip>
</a>
<a class="opt-list-show" @click="handleCopy(row)">
<Tooltip transfer="true" content="复制模板" placement="top" class="tooltip-footer-font-size">
<Tooltip transfer="true" content="复制报表" placement="top" class="tooltip-footer-font-size">
<i class="ivu-icon ivu-icon-ios-browsers" style="font-size: 16px"></i>
</Tooltip>
</a>
@@ -765,6 +798,33 @@
this.$Spin.hide();
}, 3000);*/
},
//----------导入导出begin----------------------
handleFileUpload(event) {
const file = event.target.files[0];
const formData = new FormData();
formData.append('file', file);
// 处理文件上传操作,例如读取文件内容等
$http.post({
url:api.importReportJson,
contentType: "multipart/form-data",
data:formData,
success:(result)=>{
//console.log(result);
this.$Message.success(result);
this.loadData()
this.$refs.fileInput.value = null;
},
error:(err)=>{
console.error(err);
this.$Message.error(err);
}
});
},
uploadFile(event) {
const input = document.querySelector("#fileInput");
input?.click();
},
//----------导入导出end----------------------
//分享按钮点击事件
handleShare(id){
$http.get({
@@ -810,6 +870,46 @@
return "${base}"+"${customPrePath}"+JM_VIEW_IMG_URL+"/"+item.thumb
}
}
},
/**
* 真实删除
* @param item
*/
handleRealDelete(item){
var that = this;
this.$Modal.confirm({
title: "彻底删除",
content: "确定要彻底删除吗,删除之后无法恢复",
closable: true,
onOk: (res) => {
$http.del({
url: api.deleteReportById,
data: {
id: item.id
},
success:(res)=>{
that.loadData();
}
})
},
});
},
/**
* 撤回
* @param item
*/
handleReduction(item){
var that = this;
$http.post({
contentType:'json',
url: api.revertReportById,
data: {
id: item.id
},
success:(res)=>{
that.loadData();
}
})
}
}
})
@@ -316,11 +316,11 @@
getChartParamSelectOptions() {
let data = this.currentChart
if(!data){
console.log("未选择联动图表!")
//console.log("未选择联动图表!")
return []
}
if(!data.x || !data.y){
console.log("图表未正确配置数据源!")
//console.log("图表未正确配置数据源!")
return []
}
let arr = [{
@@ -7,7 +7,8 @@
:title="moduleTitle"
fullscreen=true
:closable="true"
:mask-closable="false">
:mask-closable="false"
:closable="false">
<div slot="footer">
<i-button @click="close">关闭</i-button>
</div>
@@ -37,6 +38,7 @@
<i-button type="primary" @click="dictClick">添加</i-button>
<i-button icon="ios-loading" type="primary" @click="dictReflesh">刷新缓存</i-button>
<i-button v-if="dictDeleteShow==true" type="error" @click="dictDeleteBatch">删除</i-button>
<i-button @click="recycleBinClick">回收站</i-button>
</div>
<div style="margin-top: 10px">
<i-table @on-selection-change="dictTableSelect" border stripe :columns="dictData.columns" :data="dictData.data"
@@ -101,9 +103,13 @@
<div slot="footer">
<i-button @click="recycleBinReset">关闭</i-button>
</div>
<div style="margin-top: 10px" v-if="recycleBinRows.length>0">
<i-button type="primary" size="small" style="cursor: pointer" @click="recycleBinBatch('recycle')">批量取回</i-button>
<i-button type="error" size="small" style="cursor: pointer" @click="recycleBinBatch('delete')">批量刪除</i-button>
</div>
<div style="margin-top: 10px">
<i-table border stripe :columns="recycleBin.columns" :data="recycleBin.data"
style="margin-top: 1%;">
style="margin-top: 1%;" @on-selection-change="recycleBinChange">
<template slot-scope="{ row, index }" slot="action">
<i-button type="primary" size="small" style="cursor: pointer" @click="recycleBinRetrieve(row.id)">取回</i-button>
<Poptip
@@ -342,7 +348,9 @@
createDictItemShow: false, //字典详细是否显示
createDictItemLoading: false,
recycleBinShow:false, //回收站显示
queryParam:{} //查询条件
queryParam:{}, //查询条件
//回收站选择数据
recycleBinRows:[],
}
},
created() {
@@ -597,6 +605,7 @@
},
close() {
this.dictShow = false
this.recycleBinRows = [];
this.resetParam()
},
getRowClassname(row) {
@@ -653,6 +662,75 @@
this.loadRecycleBin()
}
})
},
/**
* 回收站复选框选中事件
* @param selection
*/
recycleBinChange(selection){
if (selection.length > 0) {
this.recycleBinRows = selection
} else {
this.recycleBinRows = [];
}
},
/**
* 回收站批量操作
* @param type
*/
recycleBinBatch(type){
let recycleBinRows = this.recycleBinRows
let ids = ""
for (const recycle of recycleBinRows) {
let id = recycle.id;
ids = ids + id + ","
}
if (ids.length > 1) {
ids = ids.substr(0, ids.lastIndexOf(","))
}
if(type === 'recycle'){
//批量取回
this.recycleBinBatchRecycle(ids);
}else if(type === 'delete'){
//批量删除
this.recycleBinBatchDelete(ids);
}
},
/**
* 批量取回
* @param ids
*/
recycleBinBatchRecycle(ids){
$http.post({
url: api.batchRevert,
data: {"ids": ids},
success: (res) => {
this.recycleBinRows = [];
this.loadRecycleBin();
this.loadData();
}
})
},
/**
* 批量删除
* @param ids
*/
recycleBinBatchDelete(ids){
this.$Modal.confirm({
title: "批量删除",
content: "确定要删除吗",
closable: true,
onOk: (res) => {
$http.del({
url: api.batchRealDelete,
data: {"ids": ids},
success: (res) => {
this.recycleBinRows = [];
this.loadRecycleBin();
}
})
},
});
}
}
})
@@ -131,7 +131,7 @@
<form-item prop="dbDynSql" label="报表SQL:" v-if="sqlForm.dbType == 0">
<i-input v-model="sqlForm.dbDynSql" @on-blur="dbDynSqlBlur" type="textarea" :rows="4" placeholder="请输入查询SQL" style="min-height: 100px;max-height: 620px;width:950px">
</i-input>
<div style="font-size: 10px;">
<div style="font-size: 12px;">
<p style="margin-left: 14px">
<ul>
<li>如果id字段为字符串类型则需要加单引号:select * from table where id=${"'$"}${"{id}'"}。</li>
@@ -149,7 +149,7 @@
<form-item prop="apiUrl" label="Api地址:" v-else-if="sqlForm.dbType == 1">
<i-input v-model="sqlForm.apiUrl" @on-blur="dbApiBlur" type="textarea" :rows="4" placeholder="请输入Api地址" style="min-height: 100px;max-height: 620px;width:950px">
</i-input>
<div style="font-size: 10px;">
<div style="font-size: 12px;">
<p style="margin-left: 14px">
<ul>
<li>如果id字段为字符串类型则需要加单引号:http://127.0.0.1:8080/jeecg-boot/jimureport/test?id=${"$"}${"{id}"}。</li>
@@ -167,15 +167,15 @@
<i-input v-model="sqlForm.jsonData" type="textarea" :rows="4" placeholder="请输入JSON数据" style="min-height: 120px;max-height: 620px;width:950px">
</i-input>
</form-item>
<i-button @click="handleAnalyze('sql')" v-if="sqlForm.dbType == 0" type="primary">SQL解析</i-button>
<i-button @click="handleSQLAnalyze" v-if="sqlForm.dbType == 0" type="primary">SQL解析</i-button>
<Tooltip v-if="sqlForm.dbType == 0" :transfer="true" content="SQL解析文档" placement="top">
<a class="jimu-table-tip help-color" href="https://help.jeecg.com/jimureport/sql.html" target="_blank" style="font-size: 14px"><Icon size="14" type="ios-help-circle-outline" style="margin-top: 2px"/></a>
</Tooltip>
<i-button @click="handleAnalyze('api')" v-if="sqlForm.dbType == 1" type="primary">Api解析</i-button>
<i-button @click="handleApiAnalyze" v-if="sqlForm.dbType == 1" type="primary">Api解析</i-button>
<Tooltip v-if="sqlForm.dbType == 1" :transfer="true" content="Api解析文档" placement="top">
<a class="jimu-table-tip help-color" href="https://help.jeecg.com/jimureport/api.html" target="_blank" style="font-size: 14px"><Icon size="14" type="ios-help-circle-outline" style="margin-top: 2px"/></a>
</Tooltip>
<i-button @click="handleAnalyze('json')" v-if="sqlForm.dbType == 3" type="primary">JSON解析</i-button>
<i-button @click="handleJsonAnalyze" v-if="sqlForm.dbType == 3" type="primary">JSON解析</i-button>
<Tooltip v-if="sqlForm.dbType == 3" :transfer="true" content="JSON解析文档" placement="top">
<a class="jimu-table-tip help-color" href="https://help.jeecg.com/jimureport/dataSet/json.html" target="_blank" style="font-size: 14px;"><Icon size="14" type="ios-help-circle-outline" style="margin-top: 2px"/></a>
</Tooltip>
@@ -221,7 +221,7 @@
</tab-pane>
<tab-pane label="数据预览" name="3" v-if="sqlForm.dbType == 0">
<span style="color: red">提示:仅显示10条数据</span>
<span style="color: red">提示:仅显示10条数据 <span v-if="izTestData==true">因权限控制,列表为测试数据</span> </span>
<i-table ref="viewParamTable" stripe :columns="tab3.columns" :data="tab3.data" :loading="tab3Loading"></i-table>
<#-- <div style="float:right;margin-top:20px;">-->
<#-- <Page :total="tab3.page.total" @on-change="handleCurrentChange"></Page>-->
@@ -452,7 +452,8 @@
// 下拉选项
{title: '数值类型', value: 'number'},
{title: '字符类型', value: 'string'},
{title: '日期类型', value: 'date'}
{title: '日期类型', value: 'date'},
{ title: '富文本', value: 'richText' }
];
return h('i-select', {
@@ -918,7 +919,9 @@
extJsonShow:false, //参数配置弹窗是否显示
tableIndex:-1, //当前table的下标
tableType:-1, //判断当前是字段还是参数 0字段 1参数
daSourceDesc:"选择数据源" //数据源维护描述的内容
daSourceDesc:"选择数据源", //数据源维护描述的内容
//是否为测试数据
izTestData: false
}
},
mounted(){
@@ -1128,6 +1131,7 @@
this.loadTableData(val,this.sqlForm.dbDynSql);
},
loadTableData(page,sql){
this.izTestData = false;
if(page){
this.tab3.page.page = page;
}
@@ -1184,6 +1188,11 @@
fail:(res)=>{
this.tab3Loading=false;
this.spinShow=false;
//update-begin---author:wangshuai---date:2023-10-31---for:【QQYUN-6534】积木的数据预览,在无权限的时候,是不是生成一些测试数据---
if(res.code === 402 && this.tab1.data && this.tab1.data.length>0){
this.generateTestData();
}
//update-end---author:wangshuai---date:2023-10-31---for:【QQYUN-6534】积木的数据预览,在无权限的时候,是不是生成一些测试数据---
},
error:()=>{
this.tab3Loading=false;
@@ -1477,44 +1486,22 @@
}
}else{
let resultElement = result['fieldList'];
let that = this;
if(this.tab1.data && resultElement){
let data = this.tab1.data;
//update-begin--Author:wangshuai Date:20210430 for:sql动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
data = data.concat(resultElement)
//先去除没有的数据
let newJson = [];
//找到不重复的数据
for (const datum of data) {
//建立标记,判断数据是否重复,true为不重复
let flag = true;
for (const results of newJson) {
//循环数据删除this.tab1.data已经存在的数据
if(datum['fieldName'] == results['fieldName']){
flag = false;
if(this.tab1.data.length>0){
this.$Modal.confirm({
title:'是否要重置字段?',
content: '已存在的字段不会修改,但是数据为空会删除所有字段!',
onOk: () => {
that.setTabFieldData(resultElement);
},
onCancel: () => {
console.info("不重置字段");
}
}
//判断是否重复
if(flag == true){
//不重复的放入新数组。 新数组的内容会继续进行上边的循环。
newJson.push(datum);
}
}
//去除没有的数据
newJson = newJson.filter(item => resultElement.some(value => value.fieldName == item.fieldName))
//循环给当前剔除的数组加上index和排序及查询框
let newData=[];
let i =0;
for (const results of newJson) {
results.tableIndex = i
if(!results){
results.searchFlag = 0
}
results.orderNum = i
newData.push(results);
i++;
});
}else{
that.setTabFieldData(resultElement);
}
this.tab1.data = newData
//update-end--Author:wangshuai Date:20210430 for:sql动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
}else{
this.tab1.data = resultElement;
this.tab1.data.forEach((item,index)=>{
@@ -1600,43 +1587,21 @@
Vue.prototype.$Message.warning("执行成功,但是数据为空,无法解析报表字段!!");
}
//update-end--Author:wangshuai--Date:20211109--for:api解析为空提示
//update-begin--Author:wangshuai Date:20210430 for:api动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
let data = this.tab1.data;
data = data.concat(result)
//先去除没有的数据
let newJson = [];
//找到不重复的数据
for (const datum of data) {
//建立标记,判断数据是否重复,true为不重复
let flag = true;
for (const results of newJson) {
//循环数据删除this.tab1.data已经存在的数据
if(datum['fieldName'] == results['fieldName']){
flag = false;
}
}
//判断是否重复
if(flag == true){
//不重复的放入新数组。 新数组的内容会继续进行上边的循环。
newJson.push(datum);
}
let that = this;
if(this.tab1.data.length>0){
this.$Modal.confirm({
title:'是否要重置字段?',
content: '已存在的字段不会修改,但是数据为空会删除所有字段!',
onOk: () => {
that.setTabFieldData(result);
},
onCancel: () => {
console.info("不重置字段");
}
});
}else{
that.setTabFieldData(result);
}
//去除没有的数据
newJson = newJson.filter(item => result.some(value => value.fieldName == item.fieldName))
//循环给当前剔除的数组加上index和排序及查询框
let newData=[];
let i =0;
for (const results of newJson) {
results.tableIndex = i
if(!results){
results.searchFlag = 0
}
results.orderNum = i
newData.push(results);
i++;
}
this.tab1.data = newData;
//update-end--Author:wangshuai Date:20210430 for:api动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
}
})
},
@@ -1715,7 +1680,8 @@
if(!reg.test(dbDynSql)){
return;
}
//替换“$“{DaoFormat. 为空,使SQL能正常解析
dbDynSql = dbDynSql.replaceAll('\$\{DaoFormat.','');
let dbDynSqlArr = dbDynSql.match(reg);
let paramsArr = [];
if(dbDynSqlArr && dbDynSqlArr.length>0){
@@ -2288,7 +2254,7 @@
})
}
}
console.log("tabData:",tabData)
//console.log("tabData:",tabData)
this.tab2.data = tabData
//1需要报错提示
this.handleSQLAnalyze("1");
@@ -2346,7 +2312,7 @@
},
//放大确定事件
extJsonOk(){
console.log(this.paramConfigData)
//console.log(this.paramConfigData)
if(this.tableType == 0){
this.tab1.data[this.tableIndex].extJson = this.paramConfigData
}else if(this.tableType == 1){
@@ -2355,26 +2321,70 @@
this.extJsonCancel();
},
/**
* 是否需要更新字段
* 设置tabs 字段详细的数据
* @param result 请求接口返回的数据
*/
handleAnalyze(value) {
let that = this;
this.$Modal.confirm({
title:'是否要重置字段?',
content: '已存在的字段不会修改,但是数据为空会删除所有字段!',
onOk: () => {
if(value == 'sql'){
that.handleSQLAnalyze();
}else if(value == 'api'){
that.handleApiAnalyze();
}else if(value == 'json'){
that.handleJsonAnalyze();
setTabFieldData(result){
let data = this.tab1.data;
//update-begin--Author:wangshuai Date:20210430 for:sql动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
data = data.concat(result)
//先去除没有的数据
let newJson = [];
//找到不重复的数据
for (const datum of data) {
//建立标记,判断数据是否重复,true为不重复
let flag = true;
for (const results of newJson) {
//循环数据删除this.tab1.data已经存在的数据
if(datum['fieldName'] == results['fieldName']){
flag = false;
}
},
onCancel: () => {
console.info("不重置字段")
}
});
//判断是否重复
if(flag == true){
//不重复的放入新数组。 新数组的内容会继续进行上边的循环。
newJson.push(datum);
}
}
//去除没有的数据
newJson = newJson.filter(item => result.some(value => value.fieldName == item.fieldName))
//循环给当前剔除的数组加上index和排序及查询框
let newData=[];
let i =0;
for (const results of newJson) {
results.tableIndex = i
if(!results){
results.searchFlag = 0
}
results.orderNum = i
newData.push(results);
i++;
}
this.tab1.data = newData
//update-end--Author:wangshuai Date:20210430 for:sql动态报表配置明细如果字段存在就不替换,否则替换,要不然会引起数据清空--------------------
},
generateTestData() {
let fieldArray = [];
for (const item of this.tab1.data) {
fieldArray.push({
fieldName: item.fieldName,
widgetType: item.widgetType,
});
}
let fieldJson = "";
if (fieldArray.length > 0) {
fieldJson = JSON.stringify(fieldArray);
}
$http.post({
url: api.generateTestData,
contentType:"json",
data: fieldJson,
success: (result) => {
this.izTestData = true;
this.tab3.data = result;
this.tab3.page.total = 10;
}
})
}
}
})
@@ -75,6 +75,8 @@
stripe
@on-select="selectField"
@on-select-all="selectFieldAll"
@on-select-all-cancel="cancelFieldAll"
@on-select-cancel="cancelField"
:columns="tab1.columns"
:data="tab1.data"
:height="tableHeight">
@@ -218,7 +220,8 @@
// 下拉选项
{title: '数值类型', value: 'number'},
{title: '字符类型', value: 'string'},
{title: '日期类型', value: 'date'}
{title: '日期类型', value: 'date'},
{ title: '富文本', value: 'richText' },
];
return h('i-select', {
@@ -686,23 +689,7 @@
return true
}
},
/**
* 解析之前提示是否重置字段
*/
handelAnalyze(){
let that = this;
this.$Modal.confirm({
title:'是否要重置字段?',
content: '已存在的字段不会修改,但是数据为空会删除所有字段!',
onOk: () => {
that.analyze();
},
onCancel: () => {
console.info("不重置字段")
}
});
},
analyze(){
let { javaType, javaValue, isPage } = this.formData
let param = {}
this.tab2.data.map(item=>{
@@ -721,12 +708,20 @@
contentType: 'json',
data: dataStr,
success:(result)=>{
this.tab1.data = result
this.tab1.data.forEach((item,index)=>{
item.tableIndex = index+1;
item.searchFlag = 0
item.extJson = ""
})
if(this.tab1.data && this.tab1.data.length>0){
this.$Modal.confirm({
title:'是否要重置字段?',
content: '数据为空会删除所有字段!',
onOk: () => {
this.setTabFieldData(result);
},
onCancel: () => {
console.info("不重置字段")
}
});
}else{
this.setTabFieldData(result);
}
}
})
},
@@ -979,6 +974,18 @@
selectField(selection,row){
this.tab1.selectParamTables=[...this.tab1.selectParamTables,{"tableIndex":row.tableIndex,"id":row.id}];
},
/**
* 取消选中全部
*/
cancelFieldAll(){
this.tab1.selectParamTables = [];
},
/**
* 取消选中的其中一个复选框
*/
cancelField(selection,row){
this.tab1.selectParamTables = this.tab1.selectParamTables.filter(item=>item.tableIndex!=row.tableIndex);
},
removeFieldTable(){
this.deleteFieldModel = true;
},
@@ -986,6 +993,8 @@
let tableIndexArr = this.tab1.selectParamTables.map(item=>item.tableIndex);
let arr = this.tab1.data.filter(item=>!tableIndexArr.includes(item.tableIndex));
this.tab1.data = [...arr]
//删除之后清除复选框的key
this.tab1.selectParamTables = [];
},
selectParamAll(){
@@ -1138,6 +1147,47 @@
this.tab2.data[this.tableIndex].extJson = this.paramConfigData
}
this.extJsonCancel();
},
/**
* 设置tabs 字段详细的数据
* @param result 请求接口返回的数据
*/
setTabFieldData(result){
let data = this.tab1.data;
data = data.concat(result)
//先去除没有的数据
let newJson = [];
//找到不重复的数据
for (const datum of data) {
//建立标记,判断数据是否重复,true为不重复
let flag = true;
for (const results of newJson) {
//循环数据删除this.tab1.data已经存在的数据
if(datum['fieldName'] == results['fieldName']){
flag = false;
}
}
//判断是否重复
if(flag == true){
//不重复的放入新数组。 新数组的内容会继续进行上边的循环。
newJson.push(datum);
}
}
//去除没有的数据
newJson = newJson.filter(item => result.some(value => value.fieldName == item.fieldName))
//循环给当前剔除的数组加上index和排序及查询框
let newData=[];
let i =0;
for (const results of newJson) {
results.tableIndex = i
if(!results){
results.searchFlag = 0
}
results.orderNum = i
newData.push(results);
i++;
}
this.tab1.data = newData
}
}
})
@@ -81,7 +81,7 @@
<Row style="margin-top: 8px">
<i-col span="6">
<span>显示页码?:</span>
<span>显示页码:</span>
</i-col>
<i-col span="18">
<i-switch v-model="paginationShow"></i-switch>
@@ -90,7 +90,7 @@
<Row style="margin-top: 8px" v-if="paginationShow">
<i-col span="6">
<span>页码位置?:</span>
<span>页码位置:</span>
</i-col>
<i-col span="18">
<RadioGroup v-model="paginationLocation">
@@ -83,7 +83,14 @@
},
//初始化参数解析
initDataSource(dbDynSql,dbKey,paramData){
this.dbDynSql = dbDynSql
//update-begin---author:wangshuai---date:2023-10-10---for:【QQYUN-6755】参数替换 解析时,弹框参数不对---
//替换“$“{DaoFormat. 为空,使SQL能正常解析
//update-begin---author:wangshuai Date:20211221 for:[JMREP-2505]存储过程没有空格参数会连接到一起------------
if(dbDynSql){
dbDynSql = dbDynSql.replaceAll('\$\{DaoFormat.','');
}
this.dbDynSql = dbDynSql;
//update-end---author:wangshuai---date:2023-10-10---for:【QQYUN-6755】参数替换 解析时,弹框参数不对---
this.dbKey = dbKey
//update-begin---author:wangshuai Date:20211221 for:[JMREP-2505]存储过程没有空格参数会连接到一起------------
let reg=/\$\{[^}]*\}/g;
@@ -156,7 +156,7 @@
$http.metaGet(this.url, params).then((res) => {
this.combineTreeData(res.data, callback, item)
}).catch(function (error){
console.log('加载树错误', error)
console.error('加载树错误', error)
});
},
// 加载数据
@@ -1,4 +1,4 @@
<#assign CACHE_VERSION = "v=1694491301.10">
<#assign CACHE_VERSION = "v=1699715555.10">
<#assign config_id = "${id!''}">
<#assign shareView = "${shareView}">
<!DOCTYPE html>
+1 -1
View File
@@ -55,7 +55,7 @@
<ttl.version>2.12.6</ttl.version>
<jaxb.version>2.3.5</jaxb.version>
<ureport.version>2.2.9</ureport.version>
<jimu.version>1.6.2-GA5</jimu.version>
<jimu.version>1.6.5</jimu.version>
<aws.version>1.11.543</aws.version>
<xxl.job.version>2.4.0</xxl.job.version>
<flowable.version>6.8.0</flowable.version>