mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-11 05:19:00 +08:00
⬆️ up JimuReport v1.5.0-beta
This commit is contained in:
1 parent
cc5e314c2b
commit
08625b668a
13 files changed
+582
-33
No files matched your search
@@ -6,7 +6,7 @@ server:
|
||||
db:
|
||||
num: 1
|
||||
user: ${MYSQL_USER:root}
|
||||
password: ${MYSQL_PWD:root}
|
||||
password: ${MYSQL_PWD:127255}
|
||||
url:
|
||||
0: jdbc:mysql://${MYSQL_HOST:pigx-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pigxx_config}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
<#assign CACHE_VERSION = "v=1.0.33">
|
||||
<#assign CACHE_VERSION = "v=v=1.0.7">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
+5
-3
@@ -1,11 +1,11 @@
|
||||
<#assign CACHE_VERSION = "v=1.0.5">
|
||||
<#assign CACHE_VERSION = "v=1.0.7">
|
||||
<#assign config_id = "${id!''}">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>报表设计器 - 积木报表, 免费可视化报表工具!</title>
|
||||
<title>积木报表—免费可视化Web报表工具</title>
|
||||
|
||||
<script>
|
||||
let base = "${base}";
|
||||
@@ -1058,7 +1058,7 @@
|
||||
}
|
||||
const options = {
|
||||
"domain": 'http://localhost:8080/jeecg-boot',
|
||||
"viewLocalImage":"/jmreport/img",//预览本地图片方法
|
||||
"viewLocalImage":JM_VIEW_IMG_URL,//预览本地图片方法
|
||||
"uploadUrl":"/jmreport/upload", //统一上传地址
|
||||
"uploadExcelUrl":"/jmreport/importExcel?token="+token,//上传excel方法
|
||||
pageSize: viewPageSize, //分页条数
|
||||
@@ -1299,6 +1299,8 @@
|
||||
</script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/js/util.js?${CACHE_VERSION}"></script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/js/biz/design.js?${CACHE_VERSION}"></script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/cdn/vue/md5.min.js?${CACHE_VERSION}"></script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/js/biz/SignMd5Util.js?${CACHE_VERSION}"></script>
|
||||
<script>
|
||||
window.onbeforeunload = function(event){
|
||||
return '您可能有数据没有保存';
|
||||
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
<#assign CACHE_VERSION = "v=1.0.5">
|
||||
<#assign CACHE_VERSION = "v=v=1.0.7">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@@ -116,10 +116,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>-->
|
||||
<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">
|
||||
@@ -467,7 +467,7 @@
|
||||
slot: 'action',
|
||||
className: 'table-background',
|
||||
fixed:'right'
|
||||
}
|
||||
}
|
||||
],//列表的列
|
||||
},
|
||||
computed: {
|
||||
@@ -592,7 +592,7 @@
|
||||
/**
|
||||
* 为路径拼接token
|
||||
* @param url 需要拼接的路径
|
||||
* @return 拼接后的token
|
||||
* @return 拼接后的token
|
||||
*/
|
||||
splicingToken(url){
|
||||
if(this.token && "null" != this.token){
|
||||
@@ -669,7 +669,7 @@
|
||||
//报表设计和模板案例点击事件
|
||||
tabsClick(name){
|
||||
this.name=""
|
||||
this.loadData(name)
|
||||
this.loadData(name)
|
||||
},
|
||||
//回车搜索事件
|
||||
enterSearchClick(){
|
||||
@@ -742,7 +742,7 @@
|
||||
}else{
|
||||
//update-begin---author:wangshuai ---date:20220315 for:[issues/I4WWKE]分享链接的预览密码能否忽略------------
|
||||
//兼容老数据没有是否显示密码的情况下;
|
||||
// 0没有密码 1有密码;原来取消分享后的默认应该是1
|
||||
//previewLockStatus 密码锁状态(0不存在密码锁,1存在密码锁);原来取消分享后的默认应该是1
|
||||
if(!result.previewLockStatus){
|
||||
result.previewLockStatus = "1"
|
||||
}
|
||||
@@ -765,7 +765,7 @@
|
||||
if(item.thumb.indexOf('http')==0){
|
||||
return item.thumb
|
||||
}else{
|
||||
return "${base}"+"${customPrePath}"+"/jmreport/img/"+item.thumb
|
||||
return "${base}"+"${customPrePath}"+JM_VIEW_IMG_URL+"/"+item.thumb
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -1170,10 +1170,15 @@
|
||||
//update-end---author:wangshuai ---date:20220221 for:[issues/I4OXTC]SQL数据集里数据预览报错
|
||||
//update-end--Author:wangshuai--Date:20211014--for:参数为空不传递
|
||||
this.tab3Loading=true;
|
||||
//update-begin-author:taoyan date:20220324 for: JMREP-2518【安全】动态执行sql的接口,加上签名check,参考jeecgboot
|
||||
let header = SignMd5Util.getHeader(api.loadTableData, data)
|
||||
$http.post({
|
||||
url:api.loadTableData,
|
||||
data:data,
|
||||
timeout:10000,
|
||||
contentType: 'json',
|
||||
header: header,
|
||||
//update-end-author:taoyan date:20220324 for: JMREP-2518【安全】动态执行sql的接口,加上签名check,参考jeecgboot
|
||||
success:(result)=>{
|
||||
this.tab3Loading=false;
|
||||
this.spinShow=false;
|
||||
@@ -1453,11 +1458,15 @@
|
||||
reqData['paramArray'] = JSON.stringify(this.tab2.data);
|
||||
}
|
||||
//update-end--Author:liusq Date:20210812 for:mongodb数据源传递报表参数--------------------
|
||||
//update-begin-author:taoyan date:20220324 for: JMREP-2518【安全】动态执行sql的接口,加上签名check,参考jeecgboot
|
||||
let header = SignMd5Util.getHeader(api.queryFieldBySql, reqData)
|
||||
let dataStr = JSON.stringify(reqData);
|
||||
$http.post({
|
||||
url: api.queryFieldBySql,
|
||||
contentType: 'json',
|
||||
data: dataStr,
|
||||
header: header,
|
||||
//update-end-author:taoyan date:20220324 for: JMREP-2518【安全】动态执行sql的接口,加上签名check,参考jeecgboot
|
||||
success:(result)=>{
|
||||
let message = result['message'];
|
||||
if(message){
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@
|
||||
//update-begin---author:wangshuai ---date:20220315 for:[issues/I4WWKE]分享链接的预览密码能否忽略------------
|
||||
textarea.value = "预览地址: "+previewUrl+" \n"
|
||||
//兼容老数据,如果是否分享密码为空的话,也得需要加上预览密码
|
||||
//0没有密码 1有密码
|
||||
//previewLockStatus 密码锁状态(0不存在密码锁,1存在密码锁)
|
||||
if("0" != this.jurisdictionData.previewLockStatus){
|
||||
textarea.value = textarea.value + "预览密码: "+previewLock+"\n"
|
||||
}
|
||||
|
||||
+7
-3
@@ -33,7 +33,9 @@
|
||||
</div>
|
||||
</Row>
|
||||
<Row class="ivurow" v-if="mapOption.mapType=='1' || mapOption.mapType=='2' || mapOption.mapType=='3'">
|
||||
<p>地图级别 </p>
|
||||
<p v-if="mapOption.mapType=='1'">选择省份 </p>
|
||||
<p v-if="mapOption.mapType=='2'">选择城市 </p>
|
||||
<p v-if="mapOption.mapType=='3'">选择区域 </p>
|
||||
<div class="iSelect">
|
||||
<Cascader v-if="mapOption.mapType=='1' " clearable transfer="true" :data="provinceData" size="small" @on-change="(value, selectedData) => provinceChange(value, selectedData)" v-model="mapOption.mapCode"></Cascader>
|
||||
<Cascader v-if="mapOption.mapType=='2' " clearable transfer="true" :data="cityData" size="small" @on-change="(value, selectedData) => provinceChange(value, selectedData)" v-model="mapOption.mapCode"></Cascader>
|
||||
@@ -285,7 +287,7 @@
|
||||
"label": "市级",
|
||||
"value": "2"
|
||||
}, {
|
||||
"label": "县级",
|
||||
"label": "区级",
|
||||
"value": "3"
|
||||
}],//地图级别集合
|
||||
mapUrl:"/jmreport/desreport_/regionaljson/", //请求路径
|
||||
@@ -495,7 +497,9 @@
|
||||
//type 1 省的json 2省市的json 3省市区的json
|
||||
loadMapData(url,type) {
|
||||
$http.get({
|
||||
url:"${base}"+this.mapUrl+url,
|
||||
//update-begin---author:wangshuai ---date:20220412 for:[issues/890]微服务下customPrePath不起作用------------
|
||||
url:"${base}"+"${customPrePath}"+this.mapUrl+url,
|
||||
//update-end---author:wangshuai ---date:20220412 for:[issues/890]微服务下customPrePath不起作用--------------
|
||||
fail:(res)=>{
|
||||
if(type == 1){
|
||||
this.provinceData = res.data
|
||||
|
||||
+491
@@ -0,0 +1,491 @@
|
||||
<#--多选组件,用于远程搜索查询
|
||||
item:传递的参数,包含字典code,查询key
|
||||
value:view组件传递的值 v-model
|
||||
index:下标-->
|
||||
<script type="text/x-template" id="select-scroll-multiple-template">
|
||||
<div :id="'click'+index">
|
||||
<div class="ivu-select ivu-select-multiple ivu-select-small" style="width: 100%">
|
||||
<div class="ivu-select-selection" @click="handleClick">
|
||||
<span class="select-dict-text" v-if="dictText!=''">{{dictText}}</span>
|
||||
<span v-else class="ivu-select-input" style="color: rgb(197,201,203)">{{'请选择'+dataList.name}}</span>
|
||||
</div>
|
||||
<i class="ivu-icon ivu-icon-md-close icon-position" @click="handleIconClick"></i>
|
||||
</div>
|
||||
<div class="scroll-class" v-if="scrollShow">
|
||||
<Scroll :class="noData == true?'no-loading':''" :height="dictHeight" :on-reach-bottom="handleReachBottom"
|
||||
:distance-to-edge="1">
|
||||
<input v-model="searchText" type="text" placeholder="请输入查询条件" class="ivu-select-input bottom-border" />
|
||||
<ul v-for="(item,index) in dictList" :key="index" @mousedown="scrollListClick(item,index)"
|
||||
class="scroll-list-class">
|
||||
<li :class="item.active == true?'select-item-selected':''"><span>{{ item.text }}</span></li>
|
||||
</ul>
|
||||
<ul class="no-more-data" v-if="noData">
|
||||
<li style="font-size: 12px;text-align: center;margin-top:5px">暂无更多数据</li>
|
||||
</ul>
|
||||
</Scroll>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
Vue.component('j-select-scroll-multiple', {
|
||||
template: '#select-scroll-multiple-template',
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
default: () => []
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
default: () => ""
|
||||
},
|
||||
index: {
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 表格高度
|
||||
dictHeight: 200,
|
||||
// 数据总数
|
||||
tableCount: 0,
|
||||
//下拉框数据
|
||||
dataList: {},
|
||||
dictList: [],
|
||||
//字典文本
|
||||
dictText: "",
|
||||
// 是否加载中
|
||||
tableLoading: false,
|
||||
//滚动组件是否显示
|
||||
scrollShow: false,
|
||||
userpage: 1,
|
||||
noData: false,
|
||||
//初始字典text
|
||||
initText:"",
|
||||
//是否初始值
|
||||
initValue:true,
|
||||
//复制一份字典集合
|
||||
copyDictList:[],
|
||||
//搜索的文本
|
||||
searchText:"",
|
||||
//字典值
|
||||
dictValue:""
|
||||
}
|
||||
},
|
||||
create() {
|
||||
|
||||
},
|
||||
watch: {
|
||||
item: {
|
||||
deep: true,
|
||||
immediate: true,
|
||||
handler: function () {
|
||||
this.dictData();
|
||||
}
|
||||
},
|
||||
value: {
|
||||
immediate: true,
|
||||
handler: function () {
|
||||
this.setDictText();
|
||||
}
|
||||
},
|
||||
searchText(){
|
||||
this.handleOnChange();
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
//页面初始化监听click事件
|
||||
document.addEventListener("click", e => {
|
||||
this.closeScroll(e);
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
//页面销毁移除监听事件
|
||||
document.removeEventListener("click", this.closeScroll);
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 关闭滚动弹窗
|
||||
*/
|
||||
closeScroll(e) {
|
||||
let self = this;
|
||||
let click = document.getElementById("click"+this.index);
|
||||
if (click && !click.contains(e.target)) {
|
||||
if (self.scrollShow == true){
|
||||
self.scrollShow = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 获取字典数据
|
||||
*/
|
||||
dictData() {
|
||||
if (this.item) {
|
||||
this.dataList = JSON.parse(this.item)
|
||||
if (this.dataList) {
|
||||
this.dictList = this.dataList.dictList
|
||||
this.copyDictList = this.dataList.dictList
|
||||
//目前只有不勾选复选框并且不是select的时候才会分页,api和普通的字典不用去后台查数据
|
||||
if(this.dataList.dictCode && this.dataList.dictCode.indexOf("select") ==-1 || this.dataList.dictList.length<7) {
|
||||
this.noData = true
|
||||
}
|
||||
}
|
||||
this.dictHeight = this.dictList.length>6?200:this.dictList.length*32+82
|
||||
}
|
||||
},
|
||||
/**
|
||||
*为字典值赋值
|
||||
*/
|
||||
setDictText() {
|
||||
if (this.value.length == 0) {
|
||||
this.dictText = "";
|
||||
this.searchText = ""
|
||||
//重置选中事件
|
||||
this.restActive();
|
||||
}else{
|
||||
this.loopData(this.dictList);
|
||||
}
|
||||
},
|
||||
/**
|
||||
*赋值字典集合及是否选中
|
||||
* @param dictList 字典集合
|
||||
*/
|
||||
loopData(dictList){
|
||||
//初始化的时候才赋默认值
|
||||
let dictText = this.dictText
|
||||
let values = this.value
|
||||
for (let i = 0; i <dictList.length ; i++) {
|
||||
let value = dictList[i].value;
|
||||
if(values.indexOf(value)!=-1){
|
||||
//字典文本不为空,得判断时候包含此文本
|
||||
if(dictText && dictText.indexOf(dictText) != 0){
|
||||
dictText = dictText + dictList[i].text +","
|
||||
}
|
||||
//字典文本是空,直接相等即可
|
||||
if(!dictText){
|
||||
dictText = dictList[i].text;
|
||||
}
|
||||
dictList[i].active = true
|
||||
}
|
||||
}
|
||||
if(dictText && dictText.charAt(dictText.length-1) == ","){
|
||||
dictText = dictText.substring(0,dictText.length-1)
|
||||
}
|
||||
this.dictText = dictText
|
||||
this.dictList = dictList
|
||||
},
|
||||
/**
|
||||
* 重置选中状态
|
||||
*/
|
||||
restActive(){
|
||||
let dictList = this.dictList
|
||||
for (let i = 0; i <dictList.length ; i++) {
|
||||
if(dictList[i].active){
|
||||
dictList[i].active = false
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 列表点击事件
|
||||
* @param val 字典对象(value,text)
|
||||
* @param index 当前循环的到第几个
|
||||
*/
|
||||
scrollListClick(val,index) {
|
||||
if(this.dictText){
|
||||
let dictTextArray = this.dictText.split(",");
|
||||
let dictValueArray = this.value
|
||||
//是否是已删除的
|
||||
let remove = false
|
||||
for (let i = 0; i < dictTextArray.length; i++) {
|
||||
if(dictTextArray[i]==val.text){
|
||||
dictTextArray.splice(i,1)
|
||||
dictValueArray.splice(i,1)
|
||||
remove =true
|
||||
}
|
||||
}
|
||||
if(!remove){
|
||||
dictTextArray.push(val.text)
|
||||
dictValueArray.push(val.value)
|
||||
}
|
||||
if(dictTextArray.length>0){
|
||||
this.dictText = dictTextArray.toString()
|
||||
this.value = dictValueArray
|
||||
}else{
|
||||
this.dictText = ""
|
||||
this.value = []
|
||||
}
|
||||
}else{
|
||||
this.dictText = val.text
|
||||
let valueArray = [];
|
||||
valueArray.push(val.value)
|
||||
this.value =valueArray
|
||||
}
|
||||
this.scollShow = true;
|
||||
let active = this.dictList[index].active;
|
||||
this.dictList[index].active = !active;
|
||||
//返回值
|
||||
this.returnDictValue(val.value);
|
||||
},
|
||||
/**
|
||||
*输入框点击事件
|
||||
*/
|
||||
handleClick() {
|
||||
this.scrollShow = !this.scrollShow;
|
||||
},
|
||||
/**
|
||||
*滚动条无限加载
|
||||
*/
|
||||
handleReachBottom() {
|
||||
if (!this.noData) {
|
||||
return new Promise(resolve => {
|
||||
if (this.noData) {
|
||||
resolve();
|
||||
}
|
||||
this.userpage = this.userpage + 1;
|
||||
setTimeout(() => {
|
||||
if(!this.dataList.dictCode || this.dataList.dictCode.indexOf("select") !=-1) {
|
||||
this.getDictData(0);
|
||||
}else{
|
||||
//前台进行搜索
|
||||
if(this.dictText){
|
||||
this.searchDictByText();
|
||||
}else{
|
||||
this.dictList = this.copyDictList
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
}, 500);
|
||||
});
|
||||
}
|
||||
},
|
||||
/**
|
||||
*值发生改变请求后台
|
||||
*/
|
||||
handleOnChange() {
|
||||
this.userpage = 1;
|
||||
this.scrollShow = true
|
||||
//字典为空或者包含select语句才会后台搜索,否则直接在前台搜索
|
||||
if(!this.dataList.dictCode || this.dataList.dictCode.indexOf("select") !=-1) {
|
||||
//后台进行搜索
|
||||
this.getDictData(1);
|
||||
}else{
|
||||
//前台进行搜索
|
||||
if(this.dictText){
|
||||
this.searchDictByText();
|
||||
}else{
|
||||
this.dictList = this.copyDictList
|
||||
}
|
||||
this.dictHeight = this.dictList.length>6?200:this.dictList.length*32+82
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 查询字典数据
|
||||
* @param type 字典值需要拼接还是直接替换 0拼接 1 替换
|
||||
*/
|
||||
getDictData(type) {
|
||||
let paramSearch = this.dataList.paramSearch
|
||||
let dbKey = this.dataList.dbCode + "__" + this.dataList.name
|
||||
let params = getRequestUrlParam();
|
||||
let dataStr = {
|
||||
"reportId": configId,
|
||||
"text": this.searchText,
|
||||
"key": dbKey,
|
||||
"paramSearch": paramSearch,
|
||||
"params": params,
|
||||
"pageNo": this.userpage
|
||||
}
|
||||
$http.get({
|
||||
url: api.dictCodeSearch,
|
||||
data: dataStr,
|
||||
success: (res) => {
|
||||
if (res && res.length > 0) {
|
||||
let dictList = this.dictList;
|
||||
//滚动条无限加载中直接push
|
||||
if (type == 0) {
|
||||
for (let i = 0; i < res.length; i++) {
|
||||
dictList.push(res[i])
|
||||
}
|
||||
} else {
|
||||
//查询直接赋值给字典数组
|
||||
dictList = res
|
||||
}
|
||||
//循环数据赋是否已点击
|
||||
this.loopData(dictList);
|
||||
//判断长度,是否有数据
|
||||
if(res.length<7){
|
||||
this.noData = true
|
||||
}else{
|
||||
this.noData = false
|
||||
}
|
||||
} else {
|
||||
if (type == 1) {
|
||||
this.dictList = []
|
||||
}
|
||||
this.noData = true
|
||||
}
|
||||
//为下拉框设置高度
|
||||
this.dictHeight = this.dictList.length>6?200:this.dictList.length*32+82
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
*前台搜索
|
||||
*/
|
||||
searchDictByText(){
|
||||
let dictList = this.dictList
|
||||
let searchText = this.searchText
|
||||
let newDictList = [];
|
||||
if(!this.searchText){
|
||||
this.dictList = this.copyDictList;
|
||||
}else{
|
||||
for (let i = 0; i <dictList.length; i++) {
|
||||
let value = dictList[i].value;
|
||||
if(value.indexOf(searchText) >= 0 || value == searchText){
|
||||
newDictList.push(dictList[i])
|
||||
}
|
||||
}
|
||||
if(newDictList.length>0){
|
||||
this.dictList = newDictList;
|
||||
}
|
||||
}
|
||||
this.dictHeight = this.dictList.length>6?150:this.dictList.length*32+82
|
||||
},
|
||||
/**
|
||||
*返回父组件的值
|
||||
*/
|
||||
returnDictValue() {
|
||||
let val = {};
|
||||
val.value = this.value
|
||||
val.key = this.dataList.key;
|
||||
this.$emit('dictmultipleok', val)
|
||||
},
|
||||
/**
|
||||
* 图标点击事件
|
||||
*/
|
||||
handleIconClick(){
|
||||
this.dictText = ""
|
||||
this.value = []
|
||||
let val = {};
|
||||
val.value = []
|
||||
val.key = this.dataList.key;
|
||||
this.$emit('dictmultipleok', val)
|
||||
this.scollShow = false
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 16px;
|
||||
background-color: #F5F5F5;
|
||||
}
|
||||
/*定义滚动条轨道 内阴影+圆角*/
|
||||
::-webkit-scrollbar-track {
|
||||
border-radius: 3px;
|
||||
background-color: #f5f7f9;
|
||||
}
|
||||
/*定义滑块 内阴影+圆角*/
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 3px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
.scroll-class {
|
||||
position: absolute;
|
||||
background: white;
|
||||
z-index: 9999;
|
||||
overflow: hidden;
|
||||
border: 1px solid #dddee1;
|
||||
border-radius: 4px;
|
||||
top: 35px;
|
||||
-webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.scroll-list-class {
|
||||
cursor: pointer;
|
||||
z-index: 9999;
|
||||
list-style-type: none;
|
||||
}
|
||||
.scroll-list-class li span {
|
||||
margin-left: 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.scroll-list-class :hover {
|
||||
background: #f3f3f3;
|
||||
}
|
||||
.no-more-data {
|
||||
border-top: 1px solid #f0f0f0;
|
||||
}
|
||||
.no-loading .ivu-spin-text {
|
||||
display: none;
|
||||
}
|
||||
.no-loading .ivu-scroll-content-loading {
|
||||
opacity: 1;
|
||||
}
|
||||
.ivu-scroll-loader {
|
||||
margin-top: -5px;
|
||||
}
|
||||
.select-item-selected{
|
||||
color:rgba(45,140,240,.9);
|
||||
position:relative;
|
||||
}
|
||||
.select-item-selected :after{
|
||||
display: inline-block;
|
||||
font-family: Ionicons, serif;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
vertical-align: -0.125em;
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
content: "\F171";
|
||||
color: rgba(45,140,240,.9);
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 8px;
|
||||
}
|
||||
.select-dict-text{
|
||||
display:inline;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-o-text-overflow: ellipsis;
|
||||
white-space:nowrap;
|
||||
margin-left: 5px;
|
||||
max-width:80%;
|
||||
position:relative;
|
||||
}
|
||||
.bottom-border{
|
||||
border-bottom:1px solid #f0f0f0;
|
||||
}
|
||||
.ivu-select-input{
|
||||
display: inline;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 190px;
|
||||
font-size: 14px;
|
||||
outline: 0;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: #515a6e;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
padding-left: 16px;
|
||||
}
|
||||
.ivu-select-multiple .ivu-select-selection{
|
||||
padding: 0 0 0 4px;
|
||||
float: left;
|
||||
}
|
||||
.icon-position{
|
||||
position: relative;
|
||||
right: 25px;
|
||||
top: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
+22
-6
@@ -5,7 +5,7 @@ value:view组件传递的值 v-model-->
|
||||
<div>
|
||||
<input ref="clickInput" class="ivu-input ivu-input-default" v-model="dictText"
|
||||
:placeholder="'请选择'+dataList.name" @blur="clickBlur"
|
||||
@click="handleClick"/>
|
||||
@click="handleClick" style="cursor: pointer"/>
|
||||
<div class="scoll-class" v-if="scollShow">
|
||||
<Scroll :class="noData == true?'no-loading':''" :height="dictHeight" :on-reach-bottom="handleReachBottom"
|
||||
:distance-to-edge="1">
|
||||
@@ -75,8 +75,11 @@ value:view组件传递的值 v-model-->
|
||||
this.setDictText();
|
||||
}
|
||||
},
|
||||
dictText(val) {
|
||||
this.handleOnChange()
|
||||
dictText:{
|
||||
immediate: true,
|
||||
handler: function () {
|
||||
this.handleOnChange()
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -111,6 +114,9 @@ value:view组件传递的值 v-model-->
|
||||
this.dictText = dict[0].text
|
||||
this.initText = dict[0].text
|
||||
}
|
||||
//update-begin---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
this.dictHeight = this.dictList.length > 6 ? 200 : this.dictList.length * 32 + 50
|
||||
//update-end---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
}
|
||||
},
|
||||
//无限加载中的事件
|
||||
@@ -146,7 +152,13 @@ value:view组件传递的值 v-model-->
|
||||
handleOnChange() {
|
||||
let val = {}
|
||||
val.key = this.dataList.key
|
||||
val.value = this.dictText
|
||||
//update-begin---author:wangshuai ---date:20220315 for:[JMREP-2552]下拉单选重置就出不来了--------
|
||||
if(!this.dictText){
|
||||
val.value = ""
|
||||
}else{
|
||||
val.value = this.value
|
||||
}
|
||||
//update-end---author:wangshuai ---date:20220315 for:[JMREP-2552]下拉单选重置就出不来了--------
|
||||
this.$emit('dictok', val)
|
||||
this.searchLocalOrApi();
|
||||
},
|
||||
@@ -162,7 +174,9 @@ value:view组件传递的值 v-model-->
|
||||
this.searchDictByText();
|
||||
} else {
|
||||
this.dictList = this.copyDictList
|
||||
this.dictHeight = this.dictList.length > 6 ? 200 : this.dictList.length * 30 + 20
|
||||
//update-begin---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
this.dictHeight = this.dictList.length > 6 ? 200 : this.dictList.length * 32 + 50
|
||||
//update-end---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -221,7 +235,9 @@ value:view组件传递的值 v-model-->
|
||||
}
|
||||
}
|
||||
this.dictList = newDictList;
|
||||
this.dictHeight = this.dictList.length > 6 ? 200 : this.dictList.length * 30 + 20
|
||||
//update-begin---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
this.dictHeight = this.dictList.length > 6 ? 200 : this.dictList.length * 32 + 50
|
||||
//update-end---author:wangshuai ---date:20220315 for:下拉单选样式出现混乱--------
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
+28
-2
@@ -39,6 +39,11 @@
|
||||
</i-option>
|
||||
</i-select>
|
||||
</Row>
|
||||
<Row class="ivurow rightFontSize">
|
||||
<p style="margin-bottom: 10px;">是否显示数值 </p>
|
||||
<i-switch size="small" style="margin-left: 6px;" v-model="izShowNumber" @on-change="onSeriesFormatterChange"/>
|
||||
</i-select>
|
||||
</Row>
|
||||
</div>
|
||||
</Submenu>
|
||||
</script>
|
||||
@@ -59,9 +64,11 @@
|
||||
textStyle_color:'',
|
||||
textStyle_fontSize:'',
|
||||
textStyle_fontWeight:'',
|
||||
position:''
|
||||
position:'',
|
||||
formatter:''
|
||||
},
|
||||
labelPositions:[]
|
||||
labelPositions:[],
|
||||
izShowNumber:false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -77,11 +84,30 @@
|
||||
initData: function (){
|
||||
if (this.settings){
|
||||
this.seriesOption = Object.assign(this.seriesOption, this.settings)
|
||||
//update-begin---author:wangshuai ---date:20220407 for:[issues/I50IKB]饼图 如何直接在图上显示各分类对应的数值------------
|
||||
if(this.seriesOption.formatter && "{b}"!=this.seriesOption.formatter){
|
||||
this.izShowNumber = true;
|
||||
}else{
|
||||
this.izShowNumber = false;
|
||||
}
|
||||
//update-end---author:wangshuai ---date:20220407 for:[issues/I50IKB]饼图 如何直接在图上显示各分类对应的数值------------
|
||||
}
|
||||
},
|
||||
onSeriesLabelChange(){
|
||||
let {labelPositionArray,...otherOptions}=this.seriesOption;
|
||||
this.$emit('change', otherOptions,'label')
|
||||
},
|
||||
/**
|
||||
* 图表设置格式化
|
||||
*/
|
||||
onSeriesFormatterChange(){
|
||||
if(this.izShowNumber){
|
||||
this.seriesOption.formatter="{b}\n{c}"
|
||||
}else{
|
||||
this.seriesOption.formatter="{b}"
|
||||
}
|
||||
let {labelPositionArray,...otherOptions}=this.seriesOption;
|
||||
this.$emit('change', otherOptions,'label')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
+2
-1
@@ -1 +1,2 @@
|
||||
<#include "components/select_scroll_radio.ftl">
|
||||
<#include "components/select_scroll_radio.ftl">
|
||||
<#include "components/select_scroll_multiple.ftl">
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
<#assign CACHE_VERSION = "v=1.0.5">
|
||||
<#assign CACHE_VERSION = "v=v=1.0.7">
|
||||
<#assign config_id = "${id!''}">
|
||||
<#assign shareView = "${shareView}">
|
||||
<!DOCTYPE html>
|
||||
@@ -209,9 +209,7 @@ function getLocalRequestUrl() {
|
||||
<template v-else>
|
||||
<template v-if="item.dictList && item.dictList.length>0 && (item.mode==4 ||item.mode==3)">
|
||||
<!-- 多选 -->
|
||||
<i-select size="small" :ref="item.key" v-if="item.mode==3" :remote-method="(query)=>{dictCodeSearch(query,item)}" class="jm-select-box" filterable :transfer="true" v-model="queryInfo['onlyshow_'+item.key]" multiple :max-tag-count="1" @on-change="(arr)=>handleQueryMultiSelectChange(arr, item.key)" :placeholder="'请选择'+item.title">
|
||||
<i-option v-for="(dict, dIndex) in item.dictList" :key="dIndex" :index="index" :value="dict.value">{{ dict.text }}</i-option>
|
||||
</i-select>
|
||||
<j-select-scroll-multiple v-if="item.mode==3" v-model="queryInfo['onlyshow_'+item.key]" :item="JSON.stringify(item)" @dictmultipleok="handleDictMultipleOk" :index="index"></j-select-scroll-multiple>
|
||||
|
||||
<!-- 单选 -->
|
||||
<j-select-scroll-radio v-if="item.mode==4" v-model="queryInfo[item.key]" :item="JSON.stringify(item)" @dictok="handleDictOk"></j-select-scroll-radio>
|
||||
@@ -301,5 +299,7 @@ function getLocalRequestUrl() {
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/cdn/vue/xss-0.3.3.min.js?${CACHE_VERSION}"></script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/js/biz/view.js?${CACHE_VERSION}"></script>
|
||||
<#include "./common/tj.ftl">
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/cdn/vue/md5.min.js?${CACHE_VERSION}"></script>
|
||||
<script type="text/javascript" src="${base}${customPrePath}/jmreport/desreport_/js/biz/SignMd5Util.js?${CACHE_VERSION}"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -53,7 +53,7 @@
|
||||
<jasypt.version>3.0.3</jasypt.version>
|
||||
<ttl.version>2.11.4</ttl.version>
|
||||
<ureport.version>2.2.9</ureport.version>
|
||||
<jimu.version>1.4.4-beta</jimu.version>
|
||||
<jimu.version>1.5.0-beta</jimu.version>
|
||||
<aws.version>1.11.543</aws.version>
|
||||
<xxl.job.version>2.3.0</xxl.job.version>
|
||||
<activiti.version>5.22.0</activiti.version>
|
||||
|
||||
Reference in new issue
Block a user