Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
9582bed9
Unverified
提交
9582bed9
authored
7月 22, 2021
作者:
fit2cloud-chenyw
提交者:
GitHub
7月 22, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #284 from dataease/pr@dev@feat_仪表板数值区间组件
feat: 仪表板过滤组件数值区间
上级
0d580d6e
f9bfbd93
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
262 行增加
和
7 行删除
+262
-7
index.vue
frontend/src/components/DeDrag/index.vue
+1
-1
Shape.vue
frontend/src/components/canvas/components/Editor/Shape.vue
+1
-1
DeNumberRange.vue
frontend/src/components/widget/DeWidget/DeNumberRange.vue
+159
-0
Condition.js
frontend/src/components/widget/bean/Condition.js
+1
-1
NumberRangeServiceImpl.js
...c/components/widget/serviceImpl/NumberRangeServiceImpl.js
+66
-0
en.js
frontend/src/lang/en.js
+9
-0
tw.js
frontend/src/lang/tw.js
+9
-0
zh.js
frontend/src/lang/zh.js
+9
-0
index.scss
frontend/src/styles/index.scss
+5
-3
index.vue
frontend/src/views/panel/filter/index.vue
+2
-1
没有找到文件。
frontend/src/components/DeDrag/index.vue
浏览文件 @
9582bed9
...
@@ -623,7 +623,7 @@ export default {
...
@@ -623,7 +623,7 @@ export default {
elementMouseDown
(
e
)
{
elementMouseDown
(
e
)
{
// private 设置当前组件数据及状态
// private 设置当前组件数据及状态
this
.
$store
.
commit
(
'setClickComponentStatus'
,
true
)
this
.
$store
.
commit
(
'setClickComponentStatus'
,
true
)
if
(
this
.
element
.
component
!==
'v-text'
&&
this
.
element
.
component
!==
'rect-shape'
&&
this
.
element
.
component
!==
'de-input-search'
)
{
if
(
this
.
element
.
component
!==
'v-text'
&&
this
.
element
.
component
!==
'rect-shape'
&&
this
.
element
.
component
!==
'de-input-search'
&&
this
.
element
.
component
!==
'de-number-range'
)
{
e
.
preventDefault
()
e
.
preventDefault
()
}
}
// 阻止冒泡事件
// 阻止冒泡事件
...
...
frontend/src/components/canvas/components/Editor/Shape.vue
浏览文件 @
9582bed9
...
@@ -226,7 +226,7 @@ export default {
...
@@ -226,7 +226,7 @@ export default {
handleMouseDownOnShape
(
e
)
{
handleMouseDownOnShape
(
e
)
{
this
.
$store
.
commit
(
'setClickComponentStatus'
,
true
)
this
.
$store
.
commit
(
'setClickComponentStatus'
,
true
)
if
(
this
.
element
.
component
!==
'v-text'
&&
this
.
element
.
component
!==
'rect-shape'
&&
this
.
element
.
component
!==
'de-input-search'
)
{
if
(
this
.
element
.
component
!==
'v-text'
&&
this
.
element
.
component
!==
'rect-shape'
&&
this
.
element
.
component
!==
'de-input-search'
&&
this
.
element
.
component
!==
'de-number-range'
)
{
e
.
preventDefault
()
e
.
preventDefault
()
}
}
...
...
frontend/src/components/widget/DeWidget/DeNumberRange.vue
0 → 100644
浏览文件 @
9582bed9
<
template
>
<el-form
v-if=
"options!== null && options.attrs!==null"
ref=
"form"
:model=
"form"
:rules=
"rules"
>
<div
class=
"de-number-range-container"
>
<el-form-item
prop=
"min"
>
<el-input
v-model=
"form.min"
:placeholder=
"options.attrs.placeholder"
@
change=
"handleMinChange"
/>
</el-form-item>
<span>
~
</span>
<el-form-item
prop=
"max"
>
<el-input
v-model=
"form.max"
:placeholder=
"options.attrs.placeholder"
@
change=
"handleMaxChange"
/>
</el-form-item>
</div>
</el-form>
</
template
>
<
script
>
const
MIN_NUMBER
=
-
2147483648
const
MAX_NUMBER
=
2147483647
export
default
{
props
:
{
element
:
{
type
:
Object
,
default
:
null
},
inDraw
:
{
type
:
Boolean
,
default
:
true
}
},
data
()
{
return
{
options
:
null
,
operator
:
'between'
,
values
:
null
,
canEdit
:
false
,
form
:
{
min
:
''
,
max
:
''
},
rules
:
{
min
:
[
{
required
:
true
,
message
:
this
.
$t
(
'denumberrange.please_key_min'
),
trigger
:
'blur'
},
{
validator
:
this
.
validateCom
,
trigger
:
'blur'
},
{
validator
:
this
.
validateMin
,
trigger
:
'blur'
}
],
max
:
[
{
required
:
true
,
message
:
this
.
$t
(
'denumberrange.please_key_max'
),
trigger
:
'blur'
},
{
validator
:
this
.
validateCom
,
trigger
:
'blur'
},
{
validator
:
this
.
validateMax
,
trigger
:
'blur'
}
]
},
changeIndex
:
0
,
timeMachine
:
null
}
},
watch
:
{
form
:
{
handler
(
value
)
{
this
.
destryTimeMachine
()
this
.
changeIndex
++
this
.
searchWithKey
(
this
.
changeIndex
)
},
deep
:
true
}
},
created
()
{
this
.
options
=
this
.
element
.
options
},
methods
:
{
searchWithKey
(
index
)
{
this
.
timeMachine
=
setTimeout
(()
=>
{
if
(
index
===
this
.
changeIndex
)
{
this
.
search
()
}
this
.
destryTimeMachine
()
},
1000
)
},
destryTimeMachine
()
{
this
.
timeMachine
&&
clearTimeout
(
this
.
timeMachine
)
this
.
timeMachine
=
null
},
getFormData
()
{
const
ret
=
{}
this
.
$refs
.
form
.
validate
((
valid
)
=>
{
ret
.
valid
=
valid
ret
.
form
=
this
.
form
})
return
ret
},
resetForm
()
{
this
.
$refs
.
form
.
resetFields
()
},
handleMinChange
()
{
this
.
$refs
.
form
.
validateField
(
'max'
)
},
handleMaxChange
()
{
this
.
$refs
.
form
.
validateField
(
'min'
)
},
validateCom
(
rule
,
value
,
callback
)
{
const
one
=
Number
(
value
)
if
(
Number
.
isInteger
(
one
))
{
if
(
one
<
MIN_NUMBER
)
{
return
callback
(
new
Error
(
this
.
$t
(
'denumberrange.out_of_min'
)))
}
else
if
(
one
>
MAX_NUMBER
)
{
return
callback
(
new
Error
(
this
.
$t
(
'denumberrange.out_of_max'
)))
}
return
callback
()
}
return
callback
(
new
Error
(
this
.
$t
(
'denumberrange.must_int'
)))
},
validateMin
(
rule
,
value
,
callback
)
{
const
one
=
Number
(
value
)
const
max
=
Number
(
this
.
form
.
max
)
if
(
!
max
||
one
<
max
)
{
return
callback
()
}
return
callback
(
new
Error
(
this
.
$t
(
'denumberrange.min_out_max'
)))
},
validateMax
(
rule
,
value
,
callback
)
{
const
one
=
Number
(
value
)
const
min
=
Number
(
this
.
form
.
min
)
if
(
!
min
||
one
>
min
)
{
return
callback
()
}
return
callback
(
new
Error
(
this
.
$t
(
'denumberrange.max_out_min'
)))
},
search
()
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
!
valid
)
{
return
false
}
this
.
setCondition
()
})
},
setCondition
()
{
const
param
=
{
component
:
this
.
element
,
// value: !this.values ? [] : Array.isArray(this.values) ? this.values : [this.values],
value
:
[
this
.
form
.
min
,
this
.
form
.
max
],
operator
:
this
.
operator
}
this
.
inDraw
&&
this
.
$store
.
commit
(
'addViewFilter'
,
param
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.de-number-range-container
{
display
:
inline
;
>>>
div
.el-form-item
{
width
:
calc
(
50%
-
5px
)
!
important
;
display
:
inline-block
;
padding
:
0
5px
;
}
}
</
style
>
frontend/src/components/widget/bean/Condition.js
浏览文件 @
9582bed9
/**
/**
* fieldId 字段ID
* fieldId 字段ID
* value 字段值
* value 字段值
* operator 操作[eq, ne, gt, ge, lt, le, in, not in, like, not like]
* operator 操作[eq, ne, gt, ge, lt, le, in, not in, like, not like
, between
]
* viewIds 过滤视图范围
* viewIds 过滤视图范围
*/
*/
export
class
Condition
{
export
class
Condition
{
...
...
frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js
0 → 100644
浏览文件 @
9582bed9
import
{
WidgetService
}
from
'../service/WidgetService'
const
leftPanel
=
{
icon
:
'iconfont icon-zuoce-qujian'
,
label
:
'数值区间'
,
defaultClass
:
'text-filter'
}
const
dialogPanel
=
{
options
:
{
attrs
:
{
placeholder
:
'请输入整数'
,
viewIds
:
[]
},
value
:
''
},
defaultClass
:
'text-filter'
,
component
:
'de-number-range'
}
const
drawPanel
=
{
type
:
'custom'
,
style
:
{
width
:
500
,
// height: 45.5,
height
:
90
,
fontSize
:
14
,
fontWeight
:
500
,
lineHeight
:
''
,
letterSpacing
:
0
,
textAlign
:
''
,
color
:
''
},
component
:
'de-number-range'
}
class
NumberRangeServiceImpl
extends
WidgetService
{
constructor
(
options
=
{})
{
Object
.
assign
(
options
,
{
name
:
'numberRangeWidget'
})
super
(
options
)
this
.
filterDialog
=
true
this
.
showSwitch
=
false
}
initLeftPanel
()
{
const
value
=
JSON
.
parse
(
JSON
.
stringify
(
leftPanel
))
return
value
}
initFilterDialog
()
{
const
value
=
JSON
.
parse
(
JSON
.
stringify
(
dialogPanel
))
return
value
}
initDrawPanel
()
{
const
value
=
JSON
.
parse
(
JSON
.
stringify
(
drawPanel
))
return
value
}
filterFieldMethod
(
fields
)
{
return
fields
.
filter
(
field
=>
{
return
field
[
'deType'
]
===
2
})
}
}
const
numberRangeServiceImpl
=
new
NumberRangeServiceImpl
()
export
default
numberRangeServiceImpl
frontend/src/lang/en.js
浏览文件 @
9582bed9
...
@@ -1287,5 +1287,14 @@ export default {
...
@@ -1287,5 +1287,14 @@ export default {
i18n_msg_type_dataset_sync_faild
:
'Dataset synchronization failed'
,
i18n_msg_type_dataset_sync_faild
:
'Dataset synchronization failed'
,
i18n_msg_type_all
:
'All type'
,
i18n_msg_type_all
:
'All type'
,
channel_inner_msg
:
'On site news'
channel_inner_msg
:
'On site news'
},
denumberrange
:
{
please_key_min
:
'Please key min value'
,
please_key_max
:
'Please key max value'
,
out_of_min
:
'The min value cannot be less than the min integer -2³²'
,
out_of_max
:
'The max value cannot be more than the max integer 2³²-1'
,
must_int
:
'Please key interger'
,
min_out_max
:
'The min value must be less than the max value'
,
max_out_min
:
'The max value must be more than the min value'
}
}
}
}
frontend/src/lang/tw.js
浏览文件 @
9582bed9
...
@@ -1287,5 +1287,14 @@ export default {
...
@@ -1287,5 +1287,14 @@ export default {
i18n_msg_type_dataset_sync_faild
:
'數據集同步失敗'
,
i18n_msg_type_dataset_sync_faild
:
'數據集同步失敗'
,
i18n_msg_type_all
:
'全部類型'
,
i18n_msg_type_all
:
'全部類型'
,
channel_inner_msg
:
'站內消息'
channel_inner_msg
:
'站內消息'
},
denumberrange
:
{
please_key_min
:
'請輸入最小值'
,
please_key_max
:
'請輸入最大值'
,
out_of_min
:
'最小值不能小于最小整數-2³²'
,
out_of_max
:
'最大值不能大于最大整數2³²-1'
,
must_int
:
'請輸入整數'
,
min_out_max
:
'最小值必須小于最大值'
,
max_out_min
:
'最大值必須大于最小值'
}
}
}
}
frontend/src/lang/zh.js
浏览文件 @
9582bed9
...
@@ -1289,5 +1289,14 @@ export default {
...
@@ -1289,5 +1289,14 @@ export default {
i18n_msg_type_dataset_sync_faild
:
'数据集同步失败'
,
i18n_msg_type_dataset_sync_faild
:
'数据集同步失败'
,
i18n_msg_type_all
:
'全部类型'
,
i18n_msg_type_all
:
'全部类型'
,
channel_inner_msg
:
'站内消息'
channel_inner_msg
:
'站内消息'
},
denumberrange
:
{
please_key_min
:
'请输入最小值'
,
please_key_max
:
'请输入最大值'
,
out_of_min
:
'最小值不能小于最小整数-2³²'
,
out_of_max
:
'最大值不能大于最大整数2³²-1'
,
must_int
:
'请输入整数'
,
min_out_max
:
'最小值必须小于最大值'
,
max_out_min
:
'最大值必须大于最小值'
}
}
}
}
frontend/src/styles/index.scss
浏览文件 @
9582bed9
...
@@ -211,12 +211,14 @@ div:focus {
...
@@ -211,12 +211,14 @@ div:focus {
}
}
.custom-component-class
{
.custom-component-class
{
width
:
100%
;
width
:
100%
;
div
:not
(
.de-number-range-container
)
{
width
:
100%
!
important
;
}
div
.el-input-group__append
{
div
.el-input-group__append
{
width
:
10%
!
important
;
width
:
10%
!
important
;
}
}
div
{
width
:
100%
!
important
;
}
}
}
%field-icon
{
%field-icon
{
...
...
frontend/src/views/panel/filter/index.vue
浏览文件 @
9582bed9
...
@@ -54,7 +54,8 @@ export default {
...
@@ -54,7 +54,8 @@ export default {
'textInputWidget'
'textInputWidget'
],
],
'数字过滤组件'
:
[
'数字过滤组件'
:
[
'numberSelectWidget'
'numberSelectWidget'
,
'numberRangeWidget'
]
]
// '按钮': [
// '按钮': [
// 'buttonSureWidget'
// 'buttonSureWidget'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论