Merge remote-tracking branch 'origin/master'

main
liu.shiyi 1 year ago
commit 4d62c0e8d8

@ -43,6 +43,9 @@ public class ScreenDateTimePickerChart extends Chart {
@ApiModelProperty(notes = "绑定值的格式")
private String valueFormat;
@ApiModelProperty(notes = "显示的格式")
private String format;
@ApiModelProperty(notes = "下拉框")
private Map<String, Object> dropDownBox;

@ -53,6 +53,9 @@ public class ScreenTimePickerChart extends Chart {
@ApiModelProperty(notes = "绑定值的格式")
private String valueFormat;
@ApiModelProperty(notes = "显示的格式")
private String format;
}

@ -8,6 +8,7 @@
:class="['basic-component-date-picker', `date-picker-${config.code}`]"
:popper-class="'basic-component-date-picker date-picker-popper-' + config.code"
:value-format="config.customize.valueFormat"
:format="config.customize.format"
:default-value="value"
size="large"
@focus="focusEvent"

@ -21,6 +21,20 @@
</div>
<SettingTitle>基础</SettingTitle>
<div class="lc-field-body">
<el-form-item label="组件类型">
<el-select
v-model="config.customize.type"
class="bs-el-select"
popper-class="bs-el-select"
>
<el-option
v-for="(type) in displayTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
</el-form-item>
<!-- 选择器背景颜色 -->
<el-form-item label="背景颜色">
<ColorPicker
@ -92,43 +106,80 @@
/>
</el-form-item>
</div>
<SettingTitle>时间格式</SettingTitle>
<SettingTitle>日期时间格式</SettingTitle>
<div class="lc-field-body">
<el-form-item label="显示类型">
<el-select
v-model="config.customize.type"
class="bs-el-select"
popper-class="bs-el-select"
>
<el-option
v-for="(type) in displayTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
<el-form-item label="时间显示格式化">
<div class="description">
<el-input
v-model="config.customize.format"
placeholder="例如yyyy-MM-dd HH:mm:ss"
clearable
/>
</el-select>
<el-tooltip
placement="top"
>
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
yyyy表示年份例如2017<br>
M表示月份不补0例如1<br>
MM表示月份补0例如01<br>
d表示日期不补0例如2<br>
dd表示日期补0例如02<br>
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
AM/PMA format 可用大写例如AM<br>
am/pma format 可用小写例如am<br>
JS时间戳timestamp value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分
</div>
</el-tooltip>
</div>
</el-form-item>
<el-form-item label="时间格式化类型">
<el-select
v-model="config.customize.formatType"
class="bs-el-select"
popper-class="bs-el-select"
clearable
>
<el-option
v-for="(type) in formatTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
<el-form-item label="时间数据类型">
<div class="description">
<el-select
v-model="config.customize.formatType"
class="bs-el-select"
popper-class="bs-el-select"
clearable
>
<el-option
v-for="(type) in formatTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
<el-tooltip
placement="top"
>
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
时间戳从1970年1月1日开始计算的秒数数据类型为数值型例如1483326245000<br>
自定义通过输入特定的格式字符串来指定时间的数据格式例如yyyy-MM-dd HH:mm:ss对应数据为 2023-10-08 09:30:00<br>
</div>
</el-tooltip>
</div>
</el-form-item>
<el-form-item
v-if="config.customize.formatType === 'custom'"
label="自定义时间格式"
label="时间数据格式"
>
<!-- year/month/date/week/ datetime/datetimerange/daterange -->
<div class="time-format-description">
<div class="description">
<el-input
v-model="config.customize.valueFormat"
placeholder="例如yyyy-MM-dd HH:mm:ss"
@ -143,14 +194,26 @@
style="color:#9e9e9e"
/>
<div slot="content">
时间格式示例<br>
yyyy表示年份<br>
MM表示月份<br>
dd表示日期<br>
HH表示小时24小时制<br>
mm表示分钟<br>
ss表示秒<br>
具体可参考Element-UI官网的日期选择器的时间格式化部分
<div slot="content">
yyyy表示年份例如2017<br>
M表示月份不补0例如1<br>
MM表示月份补0例如01<br>
d表示日期不补0例如2<br>
dd表示日期补0例如02<br>
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
AM/PMA format 可用大写例如AM<br>
am/pma format 可用小写例如am<br>
JS时间戳timestamp value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分
</div>
</div>
</el-tooltip>
</div>
@ -162,7 +225,6 @@
</div>
</template>
<script>
import moment from 'moment'
import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
@ -227,7 +289,7 @@ export default {
width: 97%;
padding: 16px;
}
.time-format-description{
.description{
display: flex;
align-items: center;
.el-tooltip{

@ -32,7 +32,8 @@ const customConfig = {
type: 'datetimerange',
// 时间格式化类型:时间戳timestamp自定义custom
formatType: 'custom',
// 绑定值的格式
format: 'yyyy-MM-dd HH:mm:ss',
// 时间数据格式
valueFormat: 'yyyy-MM-dd HH:mm:ss',
// 下拉框
dropDownBox: {

@ -25,7 +25,7 @@ const customConfig = {
titleStyle: {
// 标题大小
fontSize: 14,
fontSize: 18,
// 标题颜色
color: '#fff',
// 标题间距

@ -6,6 +6,7 @@
clearable
:class="['basic-component-time-picker', `time-picker-${config.code}`]"
:popper-class="'basic-component-time-picker time-picker-popper-' + config.code"
:format="config.customize.format"
:value-format="config.customize.valueFormat"
:default-value="value"
@focus="focusEvent"

@ -84,25 +84,69 @@
</div>
<SettingTitle>时间格式</SettingTitle>
<div class="lc-field-body">
<el-form-item label="时间格式化类型">
<el-select
v-model="config.customize.formatType"
class="bs-el-select"
popper-class="bs-el-select"
>
<el-option
v-for="(type) in formatTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
<el-form-item label="时间显示格式化">
<div class="description">
<el-input
v-model="config.customize.format"
placeholder="例如HH:mm:ss"
clearable
/>
</el-select>
<el-tooltip
placement="top"
>
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
JS时间戳timestamp value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分
</div>
</el-tooltip>
</div>
</el-form-item>
<el-form-item label="时间数据类型">
<div class="description">
<el-select
v-model="config.customize.formatType"
class="bs-el-select"
popper-class="bs-el-select"
>
<el-option
v-for="(type) in formatTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
<el-tooltip
placement="top"
>
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
时间戳从1970年1月1日开始计算的秒数数据类型为数值型例如1483326245000<br>
自定义通过输入特定的格式字符串来指定时间的数据格式例如HH:mm:ss对应数据为 09:30:00<br>
</div>
</el-tooltip>
</div>
</el-form-item>
<el-form-item
v-if="config.customize.formatType === 'custom'"
label="自定义时间格式"
label="时间数据格式"
>
<div class="time-format-description">
<div class="description">
<el-input
v-model="config.customize.valueFormat"
placeholder="例如HH:mm:ss"
@ -116,11 +160,17 @@
style="color:#9e9e9e"
/>
<div slot="content">
时间格式示例<br>
HH表示小时24小时制<br>
mm表示分钟<br>
ss表示秒
具体可参考Element-UI官网的日期选择器的时间格式化部分
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
JS时间戳timestamp value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分
</div>
</el-tooltip>
</div>
@ -184,7 +234,7 @@ export default {
width: 97%;
padding: 16px;
}
.time-format-description{
.description{
display: flex;
align-items: center;
.el-tooltip{

@ -41,6 +41,8 @@ const customConfig = {
dropDownSelectedFontColor: '#409EFF',
// 时间格式化类型:时间戳timestamp自定义custom
formatType: 'custom',
// 时间格式化
format: 'HH:mm:ss',
// 绑定值的格式
valueFormat: 'HH:mm:ss'
}

@ -438,26 +438,32 @@ export default {
pageInfo.isPreview = false
this.saveLoading = true
const node = document.querySelector('.render-theme-wrap')
const dataUrl = await toJpeg(node, { quality: 0.2 })
if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl)
// 500KB,500,
const imgRes = await imageConversion.compressAccurately(url, {
size: 200, // 100kb
width: 1280, // 1280
height: 720 // 720
})
const base64 = await translateBlobToBase64(imgRes)
pageInfo.coverPicture = base64.result
const res = await saveScreen(pageInfo)
this.$message.success('保存成功')
return res
let dataUrl = ''
try {
dataUrl = await toJpeg(node, { quality: 0.2 })
} catch (error) {
console.info(error)
}
if (dataUrl) {
if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl)
// 500KB,500,
const imgRes = await imageConversion.compressAccurately(url, {
size: 200, // 100kb
width: 1280, // 1280
height: 720 // 720
})
const base64 = await translateBlobToBase64(imgRes)
pageInfo.coverPicture = base64.result
} else {
pageInfo.coverPicture = dataUrl
}
} else {
pageInfo.coverPicture = dataUrl
const res = await saveScreen(pageInfo)
this.$message.success('保存成功')
return res
pageInfo.coverPicture = ''
}
const res = await saveScreen(pageInfo)
this.$message.success('保存成功')
return res
}
} catch (error) {
console.error(error)

@ -764,6 +764,19 @@ export default {
})
}
}
if (res.params) {
//
res.params.forEach(param => {
if (!this.params.find(item => item.name === param.name)) {
this.params.push({
name: param.name,
value: param.value,
type: param.type,
remark: param.remark
})
}
})
}
deleteKeys.forEach(key => {
delete this.config.dataSource.params[key]
})

@ -339,69 +339,57 @@ export default {
}
})
},
save (pageJump = false) {
async save (pageJump = false) {
this.loading = true
let dataUrl = ''
const node = document.querySelector('.remote-preview-inner-wrap')
// node
const childrenNode = node.children[0]
toJpeg(childrenNode, { quality: 0.2 })
.then((dataUrl) => {
const that = this
if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl)
// 500KB,500,
imageConversion
.compressAccurately(url, {
size: 200, // 100kb
width: 1280, // 1280
height: 720 // 720
})
.then((res) => {
translateBlobToBase64(res, function (e) {
this.form.coverPicture = e.result
updateBizComponent(this.form)
.then(() => {
this.$message({
message: '保存成功',
type: 'success',
duration: 800,
onClose: () => {
//
if (pageJump) {
this.pageJump()
}
}
})
})
.finally(() => {
that.loading = false
})
})
})
} else {
this.form.coverPicture = dataUrl
updateBizComponent(this.form)
.then(() => {
this.$message({
message: '保存成功',
type: 'success',
duration: 800,
onClose: () => {
//
if (pageJump) {
this.pageJump()
}
}
})
})
.finally(() => {
this.loading = false
})
try {
dataUrl = await toJpeg(childrenNode, { quality: 0.2 })
} catch (error) {
console.info(error)
}
console.log(dataUrl)
if (dataUrl) {
if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl)
// 500KB,500,
imageConversion.compressAccurately(
url,
{
size: 200, // 100kb
width: 1280, // 1280
height: 720 // 720
}
).then((res) => {
translateBlobToBase64(res, (e) => {
this.form.coverPicture = e.result
})
})
} else {
this.form.coverPicture = dataUrl
}
} else {
this.form.coverPicture = ''
}
updateBizComponent(this.form).then(() => {
this.$message({
message: '保存成功',
type: 'success',
duration: 800,
onClose: () => {
//
if (pageJump) {
this.pageJump()
}
}
})
.catch(() => {
this.loading = false
})
this.loading = false
}).catch((error) => {
console.info(error)
this.loading = false
})
},
createdImg () {
this.loading = true
@ -421,7 +409,8 @@ export default {
})
this.loading = false
})
.catch(() => {
.catch((error) => {
console.info(error)
this.$message.warning('出现未知错误,请重试')
this.loading = false
})
@ -446,7 +435,7 @@ export default {
background: var(--bs-background-2);
overflow: hidden;
> * {
>* {
box-sizing: border-box;
}
@ -523,11 +512,13 @@ export default {
flex-direction: row;
align-items: center;
justify-content: space-between;
.code-tab-btn{
.code-tab-btn {
// width: 90px;
cursor: pointer;
text-align: center;
}
.code-tab {
font-size: 14px;
align-items: center;
@ -569,12 +560,14 @@ export default {
height: 100%;
background: var(--bs-background-1);
position: relative;
.code-tab-header{
.code-tab-header {
height: 40px;
display: flex;
flex-direction: row;
align-items: center;
background-color: var(--bs-background-2);
.code-tab {
font-size: 14px;
align-items: center;
@ -593,16 +586,60 @@ export default {
}
</style>
<style>
.cm-s-material-darker.CodeMirror,
.cm-s-material-darker .CodeMirror-gutters
{
background: var(--bs-background-1) !important;
}
.CodeMirror-scroll {
background-color: var(--bs-background-1) !important;
}
.CodeMirror-gutters {
border-right: 1px solid var(--bs-background-1) !important;
background-color: var(--bs-background-1) !important;
}
.cm-s-material-darker.CodeMirror,
.cm-s-material-darker .CodeMirror-gutters {
background: var(--bs-background-1) !important;
}
.CodeMirror-scroll {
background-color: var(--bs-background-1) !important;
}
.CodeMirror-gutters {
border-right: 1px solid var(--bs-background-1) !important;
background-color: var(--bs-background-1) !important;
}
.CodeMirror-vscrollbar {
right: 0;
top: 0;
overflow-x: hidden;
overflow-y: scroll;
}
/* Webkit浏览器滚动条样式 */
.CodeMirror-vscrollbar::-webkit-scrollbar {
width: 6px;
/* 滚动条宽度 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb {
background-color: #444851;
/* 滚动条滑块颜色 */
border-radius: 4px;
/* 滚动条滑块圆角 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover {
background-color: #444851;
/* 滚动条滑块悬停时颜色 */
}
/* Firefox和新版Chrome浏览器滚动条样式 */
.CodeMirror-vscrollbar {
scrollbar-width: thin;
/* 滚动条宽度 */
scrollbar-color: #444851 #444851;
/* 滚动条颜色 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb {
background-color: #444851;
/* 滚动条滑块颜色 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover {
background-color: #444851;
/* 滚动条滑块悬停时颜色 */
}
</style>

@ -477,7 +477,7 @@ export default {
//
toDesign (form) {
const path = this.type === 'component' ? (window.BS_CONFIG?.routers?.designUrl || '/big-screen/design') : 'big-screen-biz-component-design'
const { href: bigScreenHref } = this.type == 'bizComponent' ? this.$router.resolve({
const { href: bigScreenHref } = this.type === 'bizComponent' ? this.$router.resolve({
path,
query: {
code: form.code,
@ -490,7 +490,7 @@ export default {
}
})
//
window.open(bigScreenHref, '_blank')
window.open(bigScreenHref, '_self')
}
}
}

@ -353,7 +353,7 @@ export default {
}
})
//
window.open(href, '_blank')
window.open(href, '_self')
},
add () {
const page = {

@ -1432,3 +1432,5 @@ export default {
width: 100% !important;
}
</style>
<style></style>

@ -885,7 +885,7 @@ export default {
this.newParamsList = cloneDeep(paramsList)
this.codemirrorOption.mode = this.dataForm.config.requestType === 'frontend' ? 'text/javascript' : 'text/x-groovy'
// this.replaceParams(paramsList)
this.scriptExecute(true)
// this.scriptExecute(true)
})
}
},

@ -358,7 +358,7 @@
<el-table
align="center"
:data="dataPreviewList"
max-height="400"
max-height="100%"
:border="true"
class="bs-el-table bs-scrollbar"
>

@ -1166,3 +1166,48 @@ return ElasticsearchDsService.query(host, port, username, password, path, dsl);
width: 100% !important;
}
</style>
<style>
.CodeMirror-vscrollbar {
right: 0;
top: 0;
overflow-x: hidden;
overflow-y: scroll;
}
/* Webkit浏览器滚动条样式 */
.CodeMirror-vscrollbar::-webkit-scrollbar {
width: 6px;
/* 滚动条宽度 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb {
background-color: #444851;
/* 滚动条滑块颜色 */
border-radius: 4px;
/* 滚动条滑块圆角 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover {
background-color: #444851;
/* 滚动条滑块悬停时颜色 */
}
/* Firefox和新版Chrome浏览器滚动条样式 */
.CodeMirror-vscrollbar {
scrollbar-width: thin;
/* 滚动条宽度 */
scrollbar-color: #444851 #444851;
/* 滚动条颜色 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb {
background-color: #444851;
/* 滚动条滑块颜色 */
}
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover {
background-color: #444851;
/* 滚动条滑块悬停时颜色 */
}
</style>

@ -339,7 +339,7 @@ export default {
case 'com.ibm.db2.jcc.DB2Driver':
return 'jdbc:db2://localhost:5000/db_name'
case 'com.microsoft.sqlserver.jdbc.SQLServerDriver':
return 'jdbc:sqlserver://localhost:1433;databaseName=db_name'
return 'jdbc:sqlserver://localhost:1433;databaseName=db_name;encrypt=false'
case 'org.postgresql.Driver':
return 'jdbc:postgresql://localhost:13308/db_name'
case 'org.apache.hive.jdbc.HiveDriver':

Loading…
Cancel
Save