update
大屏设计器,先这样。。。。
parent
be936e481f
commit
d03af19e96
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,237 @@
|
|||||||
|
.layout {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #242a30;
|
||||||
|
color: #fff;
|
||||||
|
.layout-bar {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 0 10px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
overflow: hidden;
|
||||||
|
.bar-item {
|
||||||
|
margin-right: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
.iconfont {
|
||||||
|
font-size: 12px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
.el-dropdown-link {
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.layout-container {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh - 40px);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
overflow: hidden;
|
||||||
|
.layout-left {
|
||||||
|
width: 200px;
|
||||||
|
background: #242a30;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
.chart-type {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
overflow: hidden;
|
||||||
|
.type-left {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh - 80px);
|
||||||
|
text-align: center;
|
||||||
|
/deep/.el-tabs__header {
|
||||||
|
width: 30%;
|
||||||
|
margin-right: 0;
|
||||||
|
.el-tabs__nav-wrap {
|
||||||
|
&::after {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.el-tabs__item {
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
color: #fff;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/deep/.el-tabs__content {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//工具栏一个元素
|
||||||
|
.tools-item {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 48px;
|
||||||
|
align-items: center;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
padding: 0 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
|
||||||
|
.tools-item-icon {
|
||||||
|
color: #409eff;
|
||||||
|
margin-right: 10px;
|
||||||
|
width: 53px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
border: 1px solid #3a4659;
|
||||||
|
background: #282a30;
|
||||||
|
}
|
||||||
|
.tools-item-text {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/deep/.el-tabs__content {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.layout-middle {
|
||||||
|
// display: flex;
|
||||||
|
position: relative;
|
||||||
|
//width: calc(100% - 445px);
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgb(36, 42, 48);
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
border: 1px solid rgb(36, 42, 48);
|
||||||
|
align-items: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
.workbench-container {
|
||||||
|
position: relative;
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
transform-origin: 0 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
.vueRuler {
|
||||||
|
width: 100%;
|
||||||
|
padding: 18px 0px 0px 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workbench {
|
||||||
|
background-color: #1e1e1e;
|
||||||
|
position: relative;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
transform-origin: 0 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-grid {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-size: 30px 30px, 30px 30px;
|
||||||
|
background-image: linear-gradient(
|
||||||
|
hsla(0, 0%, 100%, 0.1) 1px,
|
||||||
|
transparent 0
|
||||||
|
),
|
||||||
|
linear-gradient(90deg, hsla(0, 0%, 100%, 0.1) 1px, transparent 0);
|
||||||
|
// z-index: 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-right {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-tabs--border-card {
|
||||||
|
border: 0;
|
||||||
|
.el-tabs__header {
|
||||||
|
background: transparent;
|
||||||
|
.el-tabs__nav {
|
||||||
|
width: 100%;
|
||||||
|
.el-tabs__item {
|
||||||
|
background-color: #242f3b;
|
||||||
|
border: 0px;
|
||||||
|
font-size: 12px;
|
||||||
|
width: 50%;
|
||||||
|
.icon {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tabs__item.is-active {
|
||||||
|
background-color: #31455d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tabs__content {
|
||||||
|
background-color: #242a30;
|
||||||
|
height: calc(100vh - 80px);
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
.el-tab-pane {
|
||||||
|
color: #bfcbd9;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 5px;
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-track,
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 1px;
|
||||||
|
border: 0 solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-track-piece {
|
||||||
|
/*修改滚动条的背景和圆角*/
|
||||||
|
background: #29405c;
|
||||||
|
-webkit-border-radius: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
box-shadow: 1px 1px 5px rgba(116, 148, 170, 0.5) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
min-height: 20px;
|
||||||
|
background-clip: content-box;
|
||||||
|
box-shadow: 0 0 0 5px rgba(116, 148, 170, 0.5) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-corner {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*修改垂直滚动条的样式*/
|
||||||
|
&::-webkit-scrollbar-thumb:vertical {
|
||||||
|
background-color: #00113a;
|
||||||
|
-webkit-border-radius: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*修改水平滚动条的样式*/
|
||||||
|
&::-webkit-scrollbar-thumb:horizontal {
|
||||||
|
background-color: #00113a;
|
||||||
|
-webkit-border-radius: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/deep/.el-dropdown-menu__item {
|
||||||
|
max-width: none;
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
<template>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model="colorValue"
|
||||||
|
placeholder="请输入颜色"
|
||||||
|
size="mini"
|
||||||
|
@change="changeColor"
|
||||||
|
>
|
||||||
|
<template slot="append">
|
||||||
|
<el-color-picker
|
||||||
|
v-model="colorValue"
|
||||||
|
:predefine="predefineColors"
|
||||||
|
show-alpha
|
||||||
|
size="mini"
|
||||||
|
@change="changeColor"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "ColorPicker",
|
||||||
|
model: {
|
||||||
|
prop: "value",
|
||||||
|
event: "input"
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: [String],
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
predefineColors: [
|
||||||
|
"#ff4500",
|
||||||
|
"#ff8c00",
|
||||||
|
"#ffd700",
|
||||||
|
"#90ee90",
|
||||||
|
"#00ced1",
|
||||||
|
"#1e90ff",
|
||||||
|
"#c71585"
|
||||||
|
],
|
||||||
|
colorValue: ""
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value(val) {
|
||||||
|
this.colorValue = val || "";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.colorValue = this.value;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeColor(val) {
|
||||||
|
this.colorValue = val || "";
|
||||||
|
this.$emit("input", this.colorValue);
|
||||||
|
this.$emit("change", this.colorValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
/deep/.el-color-picker--mini,
|
||||||
|
/deep/.el-color-picker--mini .el-color-picker__trigger {
|
||||||
|
width: 23px;
|
||||||
|
height: 23px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,106 @@
|
|||||||
|
<template>
|
||||||
|
<div v-show="visible" class="contentmenu" :style="styleObj">
|
||||||
|
<div class="contentmenu__item" @click="deleteLayer">
|
||||||
|
<i class="iconfont iconguanbi"></i> 删除图层
|
||||||
|
</div>
|
||||||
|
<div class="contentmenu__item" @click="copyLayer">
|
||||||
|
<i class="iconfont iconfuzhi1"></i> 复制图层
|
||||||
|
</div>
|
||||||
|
<div class="contentmenu__item" @click="istopLayer">
|
||||||
|
<i class="iconfont iconjinlingyingcaiwangtubiao01"></i> 置顶图层
|
||||||
|
</div>
|
||||||
|
<div class="contentmenu__item" @click="setlowLayer">
|
||||||
|
<i class="iconfont iconleft-copy"></i> 置底图层
|
||||||
|
</div>
|
||||||
|
<div class="contentmenu__item" @click="moveupLayer">
|
||||||
|
<i class="iconfont iconjinlingyingcaiwangtubiao01"></i> 上移一层
|
||||||
|
</div>
|
||||||
|
<div class="contentmenu__item" @click="movedownLayer">
|
||||||
|
<i class="iconfont iconleft-copy"></i> 下移一层
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
styleObj: Object,
|
||||||
|
visible: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
visible(value) {
|
||||||
|
if (value) {
|
||||||
|
document.body.addEventListener("click", this.closeMenu);
|
||||||
|
} else {
|
||||||
|
document.body.removeEventListener("click", this.closeMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
closeMenu() {
|
||||||
|
this.$emit("update:visible", false);
|
||||||
|
},
|
||||||
|
deleteLayer() {
|
||||||
|
this.$confirm("是否删除所选图层?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.$emit("deletelayer");
|
||||||
|
this.$message({
|
||||||
|
type: "success",
|
||||||
|
message: "删除成功!"
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.$message({
|
||||||
|
type: "info",
|
||||||
|
message: "已取消删除"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
copyLayer() {
|
||||||
|
this.$emit("copylayer");
|
||||||
|
},
|
||||||
|
istopLayer() {
|
||||||
|
this.$emit("istopLayer");
|
||||||
|
},
|
||||||
|
setlowLayer() {
|
||||||
|
this.$emit("setlowLayer");
|
||||||
|
},
|
||||||
|
moveupLayer() {
|
||||||
|
this.$emit("moveupLayer");
|
||||||
|
},
|
||||||
|
movedownLayer() {
|
||||||
|
this.$emit("movedownLayer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.contentmenu {
|
||||||
|
width: 160px;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 99999;
|
||||||
|
list-style: none;
|
||||||
|
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
padding: 0;
|
||||||
|
background: #27343e;
|
||||||
|
color: #bcc9d4;
|
||||||
|
.contentmenu__item {
|
||||||
|
z-index: 10000;
|
||||||
|
list-style: none;
|
||||||
|
padding: 8px 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.iconfont {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,101 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model.trim="uploadImgUrl"
|
||||||
|
size="mini"
|
||||||
|
@change="changeInput"
|
||||||
|
>
|
||||||
|
<template slot="append">
|
||||||
|
<i class="iconfont iconfolder-o"></i>
|
||||||
|
<input type="file" class="file" ref="files" @change="getImages" />
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import axios from "axios";
|
||||||
|
import { getToken } from "@/utils/auth";
|
||||||
|
export default {
|
||||||
|
model: {
|
||||||
|
prop: "value",
|
||||||
|
event: "input"
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: "",
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
requestUrl: process.env.BASE_API + "/file/upload",
|
||||||
|
headers: {
|
||||||
|
Authorization: getToken()
|
||||||
|
},
|
||||||
|
fileList: [],
|
||||||
|
uploadImgUrl: ""
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.uploadImgUrl = this.value;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getImages(el) {
|
||||||
|
let file = el.target.files[0];
|
||||||
|
let type = file.type.split("/")[0];
|
||||||
|
if (type === "image") {
|
||||||
|
this.upload(file);
|
||||||
|
} else {
|
||||||
|
this.$message.warn("只能上传图片格式");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
upload(imgUrl) {
|
||||||
|
let that = this;
|
||||||
|
console.log(that.headers);
|
||||||
|
let formdata = new FormData();
|
||||||
|
formdata.append("file", imgUrl);
|
||||||
|
axios
|
||||||
|
.post(this.requestUrl, formdata, {
|
||||||
|
headers: that.headers
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
let res = response.data;
|
||||||
|
if (res.code == "200") {
|
||||||
|
that.uploadImgUrl = res.data.urlPath;
|
||||||
|
that.$emit("input", that.uploadImgUrl);
|
||||||
|
that.$emit("change", that.uploadImgUrl);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
changeInput(e) {
|
||||||
|
if (e) {
|
||||||
|
this.uploadImgUrl = e;
|
||||||
|
} else {
|
||||||
|
this.$refs.files.value = "";
|
||||||
|
this.uploadImgUrl = "";
|
||||||
|
}
|
||||||
|
this.$emit("input", this.uploadImgUrl);
|
||||||
|
this.$emit("change", this.uploadImgUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.file {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
padding: 100%;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
/deep/.el-input-group__append,
|
||||||
|
/deep/.el-input-group__prepend {
|
||||||
|
padding: 0 10px !important;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.iconfont {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form label-width="100px" label-position="left">
|
||||||
|
<el-form-item label="数据集">
|
||||||
|
<el-select
|
||||||
|
size="mini"
|
||||||
|
v-model="dataSetValue"
|
||||||
|
filterable
|
||||||
|
placeholder="请选择"
|
||||||
|
@change="selectDataSet"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in dataSet"
|
||||||
|
:key="item.code"
|
||||||
|
:label="item.setName"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-for="(item, index) in userNameList"
|
||||||
|
:key="index"
|
||||||
|
:label="item.paramName"
|
||||||
|
>
|
||||||
|
<el-input v-model.trim="item.sampleItem" size="mini" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-for="item in setParamList" :key="item" :label="item">
|
||||||
|
<Dictionary
|
||||||
|
v-model="params[item]"
|
||||||
|
:dict-key="getDictKey()"
|
||||||
|
@input="selectParams($event, item)"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-button
|
||||||
|
style="width: 100%"
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
size="mini"
|
||||||
|
@click="saveDataBtn"
|
||||||
|
>刷新</el-button
|
||||||
|
>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { queryAllDataSet, detailBysetId } from "@/api/bigscreen";
|
||||||
|
import Dictionary from "@/components/Dictionary/index";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "DynamicComponents",
|
||||||
|
components: {
|
||||||
|
Dictionary
|
||||||
|
},
|
||||||
|
model: {
|
||||||
|
prop: "formData",
|
||||||
|
event: "input"
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
chartType: String,
|
||||||
|
dictKey: String,
|
||||||
|
formData: Object
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dataSetValue: "",
|
||||||
|
dataSet: [], // 数据集
|
||||||
|
userNameList: [], // 用户
|
||||||
|
setParamList: [], // 对应的不同的图形数据参数
|
||||||
|
params: {},
|
||||||
|
chartProperties: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
formData: {
|
||||||
|
handler(val) {
|
||||||
|
this.echoDataSet(val);
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
setCode() {
|
||||||
|
let code = "";
|
||||||
|
this.dataSet.forEach(el => {
|
||||||
|
if (el.id == this.dataSetValue) {
|
||||||
|
code = el.setCode;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.loadDataSet();
|
||||||
|
this.echoDataSet(this.formData);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async loadDataSet() {
|
||||||
|
const { code, data } = await queryAllDataSet();
|
||||||
|
this.dataSet = data;
|
||||||
|
if (code != "200") return;
|
||||||
|
},
|
||||||
|
async selectDataSet() {
|
||||||
|
const { code, data } = await detailBysetId(this.dataSetValue);
|
||||||
|
this.userNameList = data.dataSetParamDtoList;
|
||||||
|
this.setParamList = data.setParamList;
|
||||||
|
if (code != "200") return;
|
||||||
|
},
|
||||||
|
async saveDataBtn() {
|
||||||
|
const contextData = {};
|
||||||
|
for (let i = 0; i < this.userNameList.length; i++) {
|
||||||
|
contextData[this.userNameList[i].paramName] = this.userNameList[
|
||||||
|
i
|
||||||
|
].sampleItem;
|
||||||
|
}
|
||||||
|
const params = {
|
||||||
|
chartType: this.chartType,
|
||||||
|
setCode: this.setCode,
|
||||||
|
chartProperties: this.chartProperties,
|
||||||
|
contextData
|
||||||
|
};
|
||||||
|
this.$emit("input", params);
|
||||||
|
this.$emit("change", params);
|
||||||
|
},
|
||||||
|
selectParams(val, key) {
|
||||||
|
this.chartProperties[key] = val;
|
||||||
|
},
|
||||||
|
getDictKey() {
|
||||||
|
return this.dictKey == null ? "CHART_PROPERTIES" : this.dictKey;
|
||||||
|
},
|
||||||
|
// 数据集回显
|
||||||
|
async echoDataSet(val) {
|
||||||
|
if (!val) return;
|
||||||
|
const setCode = val.setCode;
|
||||||
|
|
||||||
|
await this.loadDataSet();
|
||||||
|
|
||||||
|
this.dataSetValue = this.dataSet.filter(
|
||||||
|
el => setCode == el.setCode
|
||||||
|
)[0].id;
|
||||||
|
|
||||||
|
await this.selectDataSet();
|
||||||
|
this.echoDynamicData(val);
|
||||||
|
},
|
||||||
|
echoDynamicData(val) {
|
||||||
|
const chartProperties = this.deepClone(val.chartProperties);
|
||||||
|
this.chartProperties = chartProperties;
|
||||||
|
if (this.userNameList.length > 0) {
|
||||||
|
}
|
||||||
|
if (this.setParamList.length > 0) {
|
||||||
|
for (let i = 0; i < this.setParamList.length; i++) {
|
||||||
|
const item = this.setParamList[i];
|
||||||
|
if (chartProperties.hasOwnProperty(item)) {
|
||||||
|
this.params[item] = chartProperties[item];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="sass" scoped></style>
|
@ -0,0 +1,442 @@
|
|||||||
|
<template>
|
||||||
|
<div class="collapse-input-style">
|
||||||
|
<el-form label-width="100px" label-position="left">
|
||||||
|
<template v-for="(item, index) in options">
|
||||||
|
<div v-if="isShowForm(item, '[object Object]')" :key="index">
|
||||||
|
<el-form-item
|
||||||
|
v-if="
|
||||||
|
inputShow[item.name] &&
|
||||||
|
item.type != 'dycustComponents' &&
|
||||||
|
item.type != 'dynamic-add-table'
|
||||||
|
"
|
||||||
|
:label="item.label"
|
||||||
|
:prop="item.name"
|
||||||
|
:required="item.required"
|
||||||
|
>
|
||||||
|
<el-input-number
|
||||||
|
v-if="item.type == 'el-input-number'"
|
||||||
|
size="mini"
|
||||||
|
style="width:100%"
|
||||||
|
v-model.trim="formData[item.name]"
|
||||||
|
controls-position="right"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-if="item.type == 'el-input-text'"
|
||||||
|
v-model.trim="formData[item.name]"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
clearable
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-if="item.type == 'el-input-textarea'"
|
||||||
|
v-model.trim="formData[item.name]"
|
||||||
|
type="textarea"
|
||||||
|
size="mini"
|
||||||
|
rows="2"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-switch
|
||||||
|
v-if="item.type == 'el-switch'"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
size="mini"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
<ColorPicker
|
||||||
|
v-if="item.type == 'vue-color'"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
@change="val => changed(val, item.name)"
|
||||||
|
/>
|
||||||
|
<customUpload
|
||||||
|
v-if="item.type == 'custom-upload'"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-radio-group
|
||||||
|
v-if="item.type == 'el-radio-group'"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
@change="val => changed(val, item.name)"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
v-for="itemChild in item.selectOptions"
|
||||||
|
:key="itemChild.code"
|
||||||
|
:label="itemChild.code"
|
||||||
|
>{{ itemChild.name }}</el-radio
|
||||||
|
>
|
||||||
|
</el-radio-group>
|
||||||
|
|
||||||
|
<el-select
|
||||||
|
v-if="item.type == 'el-select'"
|
||||||
|
size="mini"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择"
|
||||||
|
@change="val => changed(val, item.name)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="itemChild in item.selectOptions"
|
||||||
|
:key="itemChild.code"
|
||||||
|
:label="itemChild.name"
|
||||||
|
:value="itemChild.code"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
|
<el-slider
|
||||||
|
v-if="item.type == 'el-slider'"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
@change="val => changed(val, item.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="item.type == 'el-button'"
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
plain
|
||||||
|
@click="addStaticData"
|
||||||
|
>编辑</el-button
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
title="代码编辑"
|
||||||
|
:visible.sync="dialogVisibleStaticData"
|
||||||
|
width="50%"
|
||||||
|
:before-close="handleClose"
|
||||||
|
>
|
||||||
|
<vue-json-editor
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
:show-btns="false"
|
||||||
|
:mode="'code'"
|
||||||
|
lang="zh"
|
||||||
|
class="my-editor"
|
||||||
|
/>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisibleStaticData = false"
|
||||||
|
>取 消</el-button
|
||||||
|
>
|
||||||
|
<el-button type="primary" @click="saveData">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</el-form-item>
|
||||||
|
<dynamicComponents
|
||||||
|
v-if="item.type == 'dycustComponents' && inputShow[item.name]"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
:chart-type="item.chartType"
|
||||||
|
:dict-key="item.dictKey"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
<dynamic-add-table
|
||||||
|
v-if="item.type == 'dynamic-add-table' && inputShow[item.name]"
|
||||||
|
v-model="formData[item.name]"
|
||||||
|
:chart-type="item.chartType"
|
||||||
|
@change="changed($event, item.name)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="isShowForm(item, '[object Array]')" :key="'a-' + index">
|
||||||
|
<el-collapse accordion>
|
||||||
|
<el-collapse-item
|
||||||
|
v-for="(itemChild, indexChild) in item"
|
||||||
|
:key="indexChild"
|
||||||
|
:title="itemChild.name"
|
||||||
|
:name="indexChild"
|
||||||
|
>
|
||||||
|
<template v-for="(itemChildList, idx) in itemChild.list">
|
||||||
|
<el-form-item
|
||||||
|
:key="idx"
|
||||||
|
:label="itemChildList.label"
|
||||||
|
:prop="itemChildList.name"
|
||||||
|
:required="itemChildList.required"
|
||||||
|
>
|
||||||
|
<el-input-number
|
||||||
|
v-if="itemChildList.type == 'el-input-number'"
|
||||||
|
size="mini"
|
||||||
|
style="width:100%"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
controls-position="right"
|
||||||
|
:placeholder="itemChildList.placeholder"
|
||||||
|
@change="changed($event, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-if="itemChildList.type == 'el-input-text'"
|
||||||
|
v-model.trim="formData[itemChildList.name]"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
clearable
|
||||||
|
@change="changed($event, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-if="itemChildList.type == 'el-input-textarea'"
|
||||||
|
v-model.trim="formData[itemChildList.name]"
|
||||||
|
size="mini"
|
||||||
|
type="textarea"
|
||||||
|
rows="2"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
@change="changed($event, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-switch
|
||||||
|
v-if="itemChildList.type == 'el-switch'"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
size="mini"
|
||||||
|
@change="changed($event, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ColorPicker
|
||||||
|
v-if="itemChildList.type == 'vue-color'"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
@change="val => changed(val, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-upload
|
||||||
|
v-if="itemChildList.type == 'el-upload-picture'"
|
||||||
|
size="mini"
|
||||||
|
action="https://jsonplaceholder.typicode.com/posts/"
|
||||||
|
list-type="picture-card"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-radio-group
|
||||||
|
v-if="itemChildList.type == 'el-radio-group'"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
@change="val => changed(val, itemChildList.name)"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
v-for="it in itemChildList.selectOptions"
|
||||||
|
:key="it.code"
|
||||||
|
:label="it.code"
|
||||||
|
>{{ it.name }}</el-radio
|
||||||
|
>
|
||||||
|
</el-radio-group>
|
||||||
|
|
||||||
|
<el-select
|
||||||
|
v-if="itemChildList.type == 'el-select'"
|
||||||
|
size="mini"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择"
|
||||||
|
@change="val => changed(val, itemChildList.name)"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="it in itemChildList.selectOptions"
|
||||||
|
:key="it.code"
|
||||||
|
:label="it.name"
|
||||||
|
:value="it.code"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
|
<el-slider
|
||||||
|
v-if="itemChildList.type == 'el-slider'"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
@change="val => changed(val, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<customColorComponents
|
||||||
|
v-if="itemChildList.type == 'customColor'"
|
||||||
|
:key="'b-' + idx"
|
||||||
|
v-model="formData[itemChildList.name]"
|
||||||
|
@change="changed($event, itemChildList.name)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ColorPicker from "./colorPicker.vue";
|
||||||
|
import vueJsonEditor from "vue-json-editor";
|
||||||
|
import "codemirror/lib/codemirror.css"; // 核心样式
|
||||||
|
import "codemirror/theme/cobalt.css"; // 引入主题后还需要在 options 中指定主题才会生效
|
||||||
|
// language
|
||||||
|
import "codemirror/mode/vue/vue.js";
|
||||||
|
import "codemirror/mode/javascript/javascript.js";
|
||||||
|
import "codemirror/mode/sql/sql.js";
|
||||||
|
import "codemirror/mode/shell/shell.js";
|
||||||
|
import dynamicComponents from "./dynamicComponents.vue";
|
||||||
|
import customColorComponents from "./customColorComponents";
|
||||||
|
import dynamicAddTable from "./dynamicAddTable.vue";
|
||||||
|
import customUpload from "./customUpload.vue";
|
||||||
|
export default {
|
||||||
|
name: "DynamicForm",
|
||||||
|
components: {
|
||||||
|
ColorPicker,
|
||||||
|
vueJsonEditor,
|
||||||
|
dynamicComponents,
|
||||||
|
customColorComponents,
|
||||||
|
dynamicAddTable,
|
||||||
|
customUpload
|
||||||
|
},
|
||||||
|
model: {
|
||||||
|
prop: "value",
|
||||||
|
event: "input"
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
options: Array,
|
||||||
|
value: {
|
||||||
|
type: [Object],
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formData: {},
|
||||||
|
inputShow: {}, // 控制表单是否显示
|
||||||
|
dialogVisibleStaticData: false,
|
||||||
|
validationRules: "",
|
||||||
|
optionsJavascript: {
|
||||||
|
mode: "text/javascript",
|
||||||
|
tabSize: 2, // 缩进格式
|
||||||
|
lineNumbers: true, // 显示行号
|
||||||
|
line: true,
|
||||||
|
styleActiveLine: true, // 高亮选中行
|
||||||
|
|
||||||
|
hintOptions: {
|
||||||
|
completeSingle: true // 当匹配只有一项的时候是否自动补全
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value(newValue, oldValue) {
|
||||||
|
this.formData = newValue || {};
|
||||||
|
},
|
||||||
|
options(val) {
|
||||||
|
this.setDefaultValue();
|
||||||
|
this.isShowData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.isShowData();
|
||||||
|
this.setDefaultValue();
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
onJsonChange(val) {
|
||||||
|
console.log(val);
|
||||||
|
},
|
||||||
|
onJsonSave(val) {
|
||||||
|
console.log(val);
|
||||||
|
},
|
||||||
|
// 无论哪个输入框改变 都需要触发事件 将值回传
|
||||||
|
changed(val, key) {
|
||||||
|
if (val.extend) {
|
||||||
|
this.$set(this.formData, key, val.value);
|
||||||
|
} else {
|
||||||
|
this.$set(this.formData, key, val);
|
||||||
|
}
|
||||||
|
this.$emit("onChanged", this.formData);
|
||||||
|
// key为当前用户操作的表单组件
|
||||||
|
for (let i = 0; i < this.options.length; i++) {
|
||||||
|
let item = this.options[i];
|
||||||
|
if (item.relactiveDom == key) {
|
||||||
|
this.inputShow[item.name] = val == item.relactiveDomValue;
|
||||||
|
this.inputShow = Object.assign({}, this.inputShow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
saveData() {
|
||||||
|
this.$emit("onChanged", this.formData);
|
||||||
|
this.dialogVisibleStaticData = false;
|
||||||
|
},
|
||||||
|
// 静态数据
|
||||||
|
addStaticData() {
|
||||||
|
this.dialogVisibleStaticData = true;
|
||||||
|
},
|
||||||
|
handleClose() {
|
||||||
|
this.dialogVisibleStaticData = false;
|
||||||
|
},
|
||||||
|
// 组件属性 数据是否展示动态还是静态数据
|
||||||
|
isShowData() {
|
||||||
|
let currentData = {};
|
||||||
|
const data = [];
|
||||||
|
for (let i = 0; i < this.options.length; i++) {
|
||||||
|
// 添加默认的inputShow值
|
||||||
|
this.inputShow[this.options[i].name] = true;
|
||||||
|
if (this.options[i].selectValue) {
|
||||||
|
currentData = this.options[i];
|
||||||
|
} else {
|
||||||
|
data.push(this.options[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data.forEach(el => {
|
||||||
|
if (el.relactiveDomValue != currentData.value) {
|
||||||
|
this.inputShow[el.name] = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 组件拖入时 赋值
|
||||||
|
setDefaultValue() {
|
||||||
|
if (this.options && this.options.length > 0) {
|
||||||
|
for (let i = 0; i < this.options.length; i++) {
|
||||||
|
const obj = this.options[i];
|
||||||
|
if (Object.prototype.toString.call(obj) == "[object Object]") {
|
||||||
|
this.formData[this.options[i].name] = this.deepClone(
|
||||||
|
this.options[i].value
|
||||||
|
);
|
||||||
|
} else if (Object.prototype.toString.call(obj) == "[object Array]") {
|
||||||
|
for (let j = 0; j < obj.length; j++) {
|
||||||
|
const list = obj[j].list;
|
||||||
|
list.forEach(el => {
|
||||||
|
this.formData[el.name] = el.value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.formData = Object.assign({}, this.formData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 是否显示 那种格式
|
||||||
|
isShowForm(val, type) {
|
||||||
|
return Object.prototype.toString.call(val) == type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
/deep/ .el-form-item {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
/deep/ .el-form-item__label {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.code-mirror {
|
||||||
|
width: 100%;
|
||||||
|
height: 100% !important;
|
||||||
|
}
|
||||||
|
.el-collapse {
|
||||||
|
border-top: none;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
/deep/.el-collapse-item__header {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
background: transparent;
|
||||||
|
color: #bcc9d4;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
border-color: #282e3a;
|
||||||
|
}
|
||||||
|
/deep/.el-collapse-item__wrap {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
/deep/.el-collapse-item__content {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,678 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 柱状图json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:21:45
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 11:40:29
|
||||||
|
*/
|
||||||
|
export const widgetBarchart = {
|
||||||
|
code: 'widget-barchart',
|
||||||
|
type: 'barChart',
|
||||||
|
tabName: '柱状图',
|
||||||
|
label: '柱状图',
|
||||||
|
icon: 'iconzhuzhuangtu',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '柱状图',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '竖展示',
|
||||||
|
name: 'verticalShow',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '背景颜色',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name: '柱体设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '最大宽度',
|
||||||
|
name: 'maxWidth',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '圆角',
|
||||||
|
name: 'radius',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '最小高度',
|
||||||
|
name: 'minHeight',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '标题设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '标题',
|
||||||
|
name: 'isNoTitle',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '标题',
|
||||||
|
name: 'titleText',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'textColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#FFD700'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '字体粗细',
|
||||||
|
name: 'textFontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体字号',
|
||||||
|
name: 'textFontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '字体位置',
|
||||||
|
name: 'textAlign',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '副标题',
|
||||||
|
name: 'subText',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'subTextColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'rgba(30, 144, 255, 1)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '字体粗细',
|
||||||
|
name: 'subTextFontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体字号',
|
||||||
|
name: 'subTextFontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 20
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '图例操作',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '图例显示',
|
||||||
|
name: 'isShowLegend',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图例名称',
|
||||||
|
name: 'legendName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'lengedColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体字号',
|
||||||
|
name: 'lengedFontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '图例宽度',
|
||||||
|
name: 'lengedWidth',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '横向位置',
|
||||||
|
name: 'lateralPosition',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '纵向位置',
|
||||||
|
name: 'longitudinalPosition',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'top', name: '顶部'},
|
||||||
|
{code: 'bottom', name: '底部'},
|
||||||
|
],
|
||||||
|
value: 'top'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '布局前置',
|
||||||
|
name: 'layoutFront',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'vertical', name: '竖排'},
|
||||||
|
{code: 'horizontal', name: '横排'},
|
||||||
|
],
|
||||||
|
value: 'horizontal'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'X轴设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '显示',
|
||||||
|
name: 'hideX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '坐标名',
|
||||||
|
name: 'xName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '坐标名颜色',
|
||||||
|
name: 'nameColorX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '坐标字号',
|
||||||
|
name: 'nameFontSizeX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '数值颜色',
|
||||||
|
name: 'Xcolor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '数值字号',
|
||||||
|
name: 'fontSizeX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 14,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '数值角度',
|
||||||
|
name: 'textAngle',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '数值间隔',
|
||||||
|
name: 'textInterval',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '轴反转',
|
||||||
|
name: 'reversalX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '轴颜色',
|
||||||
|
name: 'lineColorX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '分割线显示',
|
||||||
|
name: 'isShowSplitLineX',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '分割线颜色',
|
||||||
|
name: 'splitLineColorX',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Y轴设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '显示',
|
||||||
|
name: 'isShowY',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '坐标名',
|
||||||
|
name: 'textNameY',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '坐标名颜色',
|
||||||
|
name: 'nameColorY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '坐标字号',
|
||||||
|
name: 'nameFontSizeY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 14,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '数值颜色',
|
||||||
|
name: 'colorY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '数值字号',
|
||||||
|
name: 'fontSizeY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 14,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '数值角度',
|
||||||
|
name: 'ytextAngle',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '缩放',
|
||||||
|
name: 'scale',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '均分',
|
||||||
|
name: 'splitNumber',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '轴反转',
|
||||||
|
name: 'reversalY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '轴颜色',
|
||||||
|
name: 'lineColorY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
}, {
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '分割线显示',
|
||||||
|
name: 'isShowSplitLineY',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false,
|
||||||
|
}, {
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '分割线颜色',
|
||||||
|
name: 'splitLineColorY',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '数值设定',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '显示',
|
||||||
|
name: 'isShow',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '距离',
|
||||||
|
name: 'distance',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体字号',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'subTextColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '字体粗细',
|
||||||
|
name: 'fontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '提示语设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体字号',
|
||||||
|
name: 'tipFontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'lineColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '坐标轴边距设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '左边距(像素)',
|
||||||
|
name: 'marginLeft',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 10,
|
||||||
|
}, {
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '顶边距(像素)',
|
||||||
|
name: 'marginTop',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 50,
|
||||||
|
}, {
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '右边距(像素)',
|
||||||
|
name: 'marginRight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 40,
|
||||||
|
}, {
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '底边距(像素)',
|
||||||
|
name: 'marginBottom',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 10,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '自定义配色',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'customColor',
|
||||||
|
label: '',
|
||||||
|
name: 'customColor',
|
||||||
|
required: false,
|
||||||
|
value: [{color: '#ff7f50'}, {color: '#87cefa'}, {color: '#da70d6'}, {color: '#32cd32'}, {color: '#6495ed'}],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'el-radio-group',
|
||||||
|
label: '数据类型',
|
||||||
|
name: 'dataType',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectValue: true,
|
||||||
|
selectOptions: [
|
||||||
|
{
|
||||||
|
code: 'staticData',
|
||||||
|
name: '静态数据',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'dynamicData',
|
||||||
|
name: '动态数据',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: 'staticData',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '刷新时间(毫秒)',
|
||||||
|
name: 'refreshTime',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
value: 5000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-button',
|
||||||
|
label: '静态数据',
|
||||||
|
name: 'staticData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'staticData',
|
||||||
|
value: [
|
||||||
|
{"axis": "苹果", "data": 1000},
|
||||||
|
{"axis": "三星", "data": 2229},
|
||||||
|
{"axis": "小米", "data": 3879},
|
||||||
|
{"axis": "oppo", "data": 2379},
|
||||||
|
{"axis": "vivo", "data": 4079},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dycustComponents',
|
||||||
|
label: '',
|
||||||
|
name: 'dynamicData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
chartType: 'widget-barchart',
|
||||||
|
dictKey: 'BAR_PROPERTIES',
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import {converArr} from '../util/common'
|
||||||
|
import { widgetTool } from "./configs"
|
||||||
|
|
||||||
|
export const widgetTools = converArr([...widgetTool])
|
||||||
|
|
||||||
|
export const getToolByCode = (code) => {
|
||||||
|
return [...widgetTool].find((item) => {
|
||||||
|
return item.code = code
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 大屏配置
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2022-03-09 19:45:37
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-09 19:59:18
|
||||||
|
*/
|
||||||
|
export const screenConfig = {
|
||||||
|
code: 'screen',
|
||||||
|
type: 'screen',
|
||||||
|
label: '大屏设置',
|
||||||
|
icon: '',
|
||||||
|
options: {
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '大屏宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: 'px',
|
||||||
|
value: '1920',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '大屏高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: 'px',
|
||||||
|
value: '1080',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '标题',
|
||||||
|
name: 'title',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '大屏',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-textarea',
|
||||||
|
label: '大屏简介',
|
||||||
|
name: 'description',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '背景颜色',
|
||||||
|
name: 'backgroundColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#000',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'custom-upload',
|
||||||
|
label: '图片地址',
|
||||||
|
name: 'backgroundImage',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'https://report.anji-plus.com/file/download/bf566e48-ccad-40e1-8ee9-228427e5466b',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
data: [],
|
||||||
|
position: [],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 超链接文本
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:03:58
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:37:53
|
||||||
|
*/
|
||||||
|
export const widgetHref = {
|
||||||
|
code: 'widget-href',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '超链接',
|
||||||
|
icon: 'iconchaolianjie',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '超链接',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '文本内容',
|
||||||
|
name: 'text',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '超链接',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体大小',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '26',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'color',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#FAD400',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体间距',
|
||||||
|
name: 'letterSpacing',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体背景',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'rgba(115,170,229,.5)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '文字粗细',
|
||||||
|
name: 'fontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '对齐方式',
|
||||||
|
name: 'textAlign',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-radio-group',
|
||||||
|
label: '跳转方式',
|
||||||
|
name: 'jumpMode',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{
|
||||||
|
code: 'self',
|
||||||
|
name: '本窗口',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'other',
|
||||||
|
name: '新窗口',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: 'self',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '超链地址',
|
||||||
|
name: 'linkAdress',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'http://www.baidu.com',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 40,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: iframe json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:17:55
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:37:58
|
||||||
|
*/
|
||||||
|
export const widgetIframe = {
|
||||||
|
code: 'widget-iframe',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '内联框架',
|
||||||
|
icon: 'iconkuangjia',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'iframe',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '地址',
|
||||||
|
name: 'iframeAdress',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'https://report.anji-plus.com/index.html',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 图片json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:07:23
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:01
|
||||||
|
*/
|
||||||
|
export const widgetImage = {
|
||||||
|
code: 'widget-image',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '图片',
|
||||||
|
icon: 'icontupian',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '图片',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '开启旋转',
|
||||||
|
name: 'startRotate',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '旋转速度',
|
||||||
|
name: 'rotationSpeed',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 70
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-slider',
|
||||||
|
label: '透明度',
|
||||||
|
name: 'transparency',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '圆角',
|
||||||
|
name: 'borderRadius',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '0'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'custom-upload',
|
||||||
|
label: '图片地址',
|
||||||
|
name: 'imageAdress',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'http://10.108.26.197:9095/file/download/fd20d563-00aa-45e2-b5db-aff951f814ec',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '背景颜色',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 滚动文件json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:00:00
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:04
|
||||||
|
*/
|
||||||
|
export const widgetMarquee = {
|
||||||
|
code: 'widget-marquee',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '滚动文本',
|
||||||
|
icon: 'iconhengxiangwenzi',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '跑马灯',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '文本内容',
|
||||||
|
name: 'text',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '滚动文本',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体大小',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '26',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'color',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#FAD400',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体间距',
|
||||||
|
name: 'letterSpacing',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体背景',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'rgba(115,170,229,.5)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '文字粗细',
|
||||||
|
name: 'fontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
/* {
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '滚动速度',
|
||||||
|
name: 'jScrollPane',
|
||||||
|
//required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '50',
|
||||||
|
}*/
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'el-radio-group',
|
||||||
|
label: '数据类型',
|
||||||
|
name: 'dataType',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectValue: true,
|
||||||
|
selectOptions: [
|
||||||
|
{
|
||||||
|
code: 'staticData',
|
||||||
|
name: '静态数据',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'dynamicData',
|
||||||
|
name: '动态数据',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: 'staticData',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '刷新时间(毫秒)',
|
||||||
|
name: 'refreshTime',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
value: 5000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-button',
|
||||||
|
label: '静态数据',
|
||||||
|
name: 'staticData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'staticData',
|
||||||
|
value: '文本框',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dycustComponents',
|
||||||
|
label: '',
|
||||||
|
name: 'dynamicData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
chartType: 'widget-text',
|
||||||
|
dictKey: 'TEXT_PROPERTIES',
|
||||||
|
value: '',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 40,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 轮播图
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:08:53
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:08
|
||||||
|
*/
|
||||||
|
export const widgetSliders = {
|
||||||
|
code: 'widget-slider',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '轮播图片',
|
||||||
|
icon: 'slider',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '隐藏图层',
|
||||||
|
name: 'hideLayer',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '轮播方向',
|
||||||
|
name: 'tabDirection',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '选择器',
|
||||||
|
name: 'tabSelector',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '轮播时间',
|
||||||
|
name: 'tabTime',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: true,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: true,
|
||||||
|
placeholder: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: true,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: true,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,305 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 表格json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:16:10
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:11
|
||||||
|
*/
|
||||||
|
export const widgetTable = {
|
||||||
|
code: 'widget-table',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '表格',
|
||||||
|
icon: 'iconbiaoge',
|
||||||
|
options: {
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '表格',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '字体位置',
|
||||||
|
name: 'textAlign',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体大小',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '16'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '显示行数',
|
||||||
|
name: 'vis',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '5'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '行高',
|
||||||
|
name: 'rowHeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '50'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '开启滚动',
|
||||||
|
name: 'isRoll',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '动画效果',
|
||||||
|
name: 'effect',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'top', name: '上滚动'},
|
||||||
|
{code: 'topLoop', name: '上循环滚动'},
|
||||||
|
],
|
||||||
|
value: 'topLoop'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '滚动间隔(毫秒)',
|
||||||
|
name: 'interTime',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 2500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '动效时间(毫秒)',
|
||||||
|
name: 'delayTime',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '滚动个数',
|
||||||
|
name: 'scroll',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '边框线',
|
||||||
|
name: 'isLine',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '边框宽度',
|
||||||
|
name: 'borderWidth',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '边框颜色',
|
||||||
|
name: 'borderColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff'
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name: '表头设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'el-switch',
|
||||||
|
label: '表头显隐',
|
||||||
|
name: 'isHeader',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '表头颜色',
|
||||||
|
name: 'headColor',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '表头背景',
|
||||||
|
name: 'headBackColor',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#0a73ff',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '表体设置',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '文字颜色',
|
||||||
|
name: 'bodyColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#fff',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '表格背景色',
|
||||||
|
name: 'tableBgColor',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '奇行颜色',
|
||||||
|
name: 'oldColor',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#0a2732',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '偶行颜色',
|
||||||
|
name: 'eventColor',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#003b51'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
{
|
||||||
|
type: 'dynamic-add-table',
|
||||||
|
label: '',
|
||||||
|
name: 'dynamicAddTable',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: [
|
||||||
|
{name: '日期', key: 'date', width: '50%'},
|
||||||
|
{name: '姓名', key: 'name', width: '50%'},
|
||||||
|
{name: '地址', key: 'address', width: '200%',
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'el-radio-group',
|
||||||
|
label: '数据类型',
|
||||||
|
name: 'dataType',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectValue: true,
|
||||||
|
selectOptions: [
|
||||||
|
{
|
||||||
|
code: 'staticData',
|
||||||
|
name: '静态数据',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'dynamicData',
|
||||||
|
name: '动态数据',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: 'staticData',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '刷新时间(毫秒)',
|
||||||
|
name: 'refreshTime',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
value: 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-button',
|
||||||
|
label: '静态数据',
|
||||||
|
name: 'staticData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'staticData',
|
||||||
|
value: [
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0001'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0002'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0003'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0004'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0005'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0006'},
|
||||||
|
{date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄0007'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dycustComponents',
|
||||||
|
label: '',
|
||||||
|
name: 'dynamicData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
chartType: 'widget-table',
|
||||||
|
dictKey: 'TEXT_PROPERTIES', //表格的暂不起作用
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 600,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 300,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 文本json文件
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 06:52:13
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:13
|
||||||
|
*/
|
||||||
|
export const widgetText = {
|
||||||
|
code: 'widget-text',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '文本',
|
||||||
|
icon: 'iconziyuan',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '文本框',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '文本内容',
|
||||||
|
name: 'text',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '文本框',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体大小',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '26',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'color',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#FAD400',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体间距',
|
||||||
|
name: 'letterSpacing',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体背景',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'rgba(115,170,229,.0)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '文字粗细',
|
||||||
|
name: 'fontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '对齐方式',
|
||||||
|
name: 'textAlign',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'center'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'el-radio-group',
|
||||||
|
label: '数据类型',
|
||||||
|
name: 'dataType',
|
||||||
|
require: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectValue: true,
|
||||||
|
selectOptions: [
|
||||||
|
{
|
||||||
|
code: 'staticData',
|
||||||
|
name: '静态数据',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: 'dynamicData',
|
||||||
|
name: '动态数据',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: 'staticData',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '刷新时间(毫秒)',
|
||||||
|
name: 'refreshTime',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
value: 5000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-button',
|
||||||
|
label: '静态数据',
|
||||||
|
name: 'staticData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'staticData',
|
||||||
|
value: '文本框',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'dycustComponents',
|
||||||
|
label: '',
|
||||||
|
name: 'dynamicData',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
relactiveDom: 'dataType',
|
||||||
|
relactiveDomValue: 'dynamicData',
|
||||||
|
chartType: 'widget-text',
|
||||||
|
dictKey: 'TEXT_PROPERTIES',
|
||||||
|
value: '',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 40
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 时间控件json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:05:52
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:16
|
||||||
|
*/
|
||||||
|
export const widgetTime = {
|
||||||
|
code: 'widget-time',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '当前时间',
|
||||||
|
icon: 'iconshijian',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '当前时间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '时间格式',
|
||||||
|
name: 'timeFormat',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'yyyy-MM-dd', name: '日期'},
|
||||||
|
{code: 'yyyy-MM-dd hh:mm', name: '日期+时分'},
|
||||||
|
{code: 'yyyy-MM-dd hh:mm:ss', name: '日期+时分秒'},
|
||||||
|
{code: 'MM-dd', name: '日期无年'},
|
||||||
|
{code: 'hh:mm', name: '时分'},
|
||||||
|
{code: 'hh:mm:ss', name: '时分秒'},
|
||||||
|
{code: 'year-week', name: '日期+星期'},
|
||||||
|
{code: 'year-h-m-week', name: '日期+时分+星期'},
|
||||||
|
{code: 'year-h-m-s-week', name: '日期+时分秒+星期'},
|
||||||
|
{code: 'week', name: '星期'}
|
||||||
|
],
|
||||||
|
value: 'yyyy-MM-dd hh:mm:ss'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体间距',
|
||||||
|
name: 'letterSpacing',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '0'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '字体大小',
|
||||||
|
name: 'fontSize',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '26'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体颜色',
|
||||||
|
name: 'color',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: '#FAD400'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'vue-color',
|
||||||
|
label: '字体背景',
|
||||||
|
name: 'background',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'rgba(115,170,229,.5)'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '文字粗细',
|
||||||
|
name: 'fontWeight',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'normal', name: '正常'},
|
||||||
|
{code: 'bold', name: '粗体'},
|
||||||
|
{code: 'bolder', name: '特粗体'},
|
||||||
|
{code: 'lighter', name: '细体'}
|
||||||
|
],
|
||||||
|
value: 'normal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-select',
|
||||||
|
label: '对齐方式',
|
||||||
|
name: 'textAlign',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
selectOptions: [
|
||||||
|
{code: 'center', name: '居中'},
|
||||||
|
{code: 'left', name: '左对齐'},
|
||||||
|
{code: 'right', name: '右对齐'},
|
||||||
|
],
|
||||||
|
value: 'left'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: 视频json
|
||||||
|
* @version:
|
||||||
|
* @Author: qianlishi
|
||||||
|
* @Date: 2021-08-29 07:10:22
|
||||||
|
* @LastEditors: qianlishi
|
||||||
|
* @LastEditTime: 2022-03-11 10:38:19
|
||||||
|
*/
|
||||||
|
export const widgetVideo = {
|
||||||
|
code: 'widget-video',
|
||||||
|
type: 'text',
|
||||||
|
tabName: '文本栏',
|
||||||
|
label: '视频',
|
||||||
|
icon: 'iconshipin',
|
||||||
|
options: {
|
||||||
|
// 配置
|
||||||
|
setup: [
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '图层名称',
|
||||||
|
name: 'layerName',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'video',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-text',
|
||||||
|
label: '地址',
|
||||||
|
name: 'videoAdress',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 'https://www.w3school.com.cn//i/movie.ogg',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 数据
|
||||||
|
data: [],
|
||||||
|
// 坐标
|
||||||
|
position: [
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '左边距',
|
||||||
|
name: 'left',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '上边距',
|
||||||
|
name: 'top',
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '宽度',
|
||||||
|
name: 'width',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1920px大屏中的宽度',
|
||||||
|
value: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'el-input-number',
|
||||||
|
label: '高度',
|
||||||
|
name: 'height',
|
||||||
|
required: false,
|
||||||
|
placeholder: '该容器在1080px大屏中的高度',
|
||||||
|
value: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
### 目录结构
|
||||||
|
|
||||||
|
├── screenDesigner
|
||||||
|
│ ├── components(文件夹) 公共组件目录
|
||||||
|
│ ├── config(文件夹) 配置 json
|
||||||
|
│ │ ├── texts(文件夹) (文本、滚动文本、超链接、当前时间、图片、视频、表格、内联框架)
|
||||||
|
│ │ ├── barCharts(文件夹) (柱状图)
|
||||||
|
│ │ ├── lineCharts(文件夹) (折线图)
|
||||||
|
│ │ ├── pieCharts(文件夹) (饼图)
|
||||||
|
│ │ ├── mapCharts(文件夹) (地图)
|
||||||
|
│ ├── util(文件夹) 公共 js
|
||||||
|
│ ├── widget(文件夹) 图表组件
|
||||||
|
│ │ ├── texts(文件夹) (文本、滚动文本、超链接、当前时间、图片、视频、表格、内联框架)
|
||||||
|
│ │ ├── barCharts(文件夹) (柱状图)
|
||||||
|
│ │ ├── lineCharts(文件夹) (折线图)
|
||||||
|
│ │ ├── pieCharts(文件夹) (饼图)
|
||||||
|
│ │ ├── mapCharts(文件夹) (地图)
|
||||||
|
│ ├── index.vue 大屏设计器
|
||||||
|
│ ├── preview.vue 预览大屏
|
@ -0,0 +1 @@
|
|||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
export const converArr = (data) => {
|
||||||
|
console.log(data)
|
||||||
|
let tempArr = [], newArr = []
|
||||||
|
for (let i = 0; i < data.length; i++) {
|
||||||
|
const item = data[i]
|
||||||
|
if (tempArr.indexOf(item.type) === -1) {
|
||||||
|
newArr.push({
|
||||||
|
name: item.tabName,
|
||||||
|
type: item.type,
|
||||||
|
list: [item]
|
||||||
|
})
|
||||||
|
tempArr.push(item.type);
|
||||||
|
} else {
|
||||||
|
for (let j = 0; j < newArr.length; j++) {
|
||||||
|
if (newArr[j].type == item.type) {
|
||||||
|
newArr[j].list.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newArr
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: lide1202@hotmail.com
|
||||||
|
* @Date: 2021-3-13 11:04:24
|
||||||
|
* @Last Modified by: lide1202@hotmail.com
|
||||||
|
* @Last Modified time: 2021-3-13 11:04:24
|
||||||
|
!-->
|
||||||
|
<template>
|
||||||
|
<a
|
||||||
|
:href="styleColor.linkAdress"
|
||||||
|
:style="styleColor"
|
||||||
|
:target="styleColor.jumpMode"
|
||||||
|
>{{ styleColor.text }}</a
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetHref",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
color: this.transStyle.color || "#fff",
|
||||||
|
"font-weight": this.transStyle.fontWeight || "600",
|
||||||
|
text: this.transStyle.text || "超链接",
|
||||||
|
"font-size": this.transStyle.fontSize + "px" || "12px",
|
||||||
|
"letter-spacing": this.transStyle.letterSpacing + "em",
|
||||||
|
background: this.transStyle.background,
|
||||||
|
"text-align": this.transStyle.textAlign,
|
||||||
|
display:
|
||||||
|
this.transStyle.hideLayer == undefined
|
||||||
|
? "block"
|
||||||
|
: this.transStyle.hideLayer
|
||||||
|
? "none"
|
||||||
|
: "block",
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px",
|
||||||
|
linkAdress: this.transStyle.linkAdress,
|
||||||
|
jumpMode: this.transStyle.jumpMode == "other" ? "_blank" : "_self"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
a {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,60 @@
|
|||||||
|
<template>
|
||||||
|
<iframe
|
||||||
|
:style="styleColor"
|
||||||
|
:src="styleColor.iframeAdress"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetIframe",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px",
|
||||||
|
iframeAdress: this.transStyle.iframeAdress
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
iframe {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,79 @@
|
|||||||
|
<template>
|
||||||
|
<div class="imagebox" :style="styleColor">
|
||||||
|
<img
|
||||||
|
:class="transStyle.startRotate ? 'startImg' : ''"
|
||||||
|
:style="imgStyle"
|
||||||
|
:src="imgStyle.imageAdress"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetImage",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
background: this.transStyle.background,
|
||||||
|
"text-align": this.transStyle.textAlign,
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
imgStyle() {
|
||||||
|
return {
|
||||||
|
imageAdress: this.transStyle.imageAdress,
|
||||||
|
"border-radius": this.transStyle.borderRadius + "px",
|
||||||
|
opacity: this.transStyle.transparency / 100,
|
||||||
|
animation: this.transStyle.startRotate? "turn "+(101-this.transStyle.rotationSpeed)/10+"s linear infinite":"none"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.options = this.value;
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.imagebox {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.imagebox img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.startImg {
|
||||||
|
animation: turn 1s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,100 @@
|
|||||||
|
<template>
|
||||||
|
<div class="text" :style="styleColor">
|
||||||
|
<marquee behavior="" :direction="styleColor.direction">{{
|
||||||
|
styleColor.text
|
||||||
|
}}</marquee>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetMarquee",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
color: this.transStyle.color,
|
||||||
|
"font-weight": this.transStyle.fontWeight,
|
||||||
|
text: this.transStyle.text,
|
||||||
|
"font-size": this.transStyle.fontSize + "px",
|
||||||
|
"letter-spacing": this.transStyle.letterSpacing + "em",
|
||||||
|
background: this.transStyle.background,
|
||||||
|
"text-align": this.transStyle.textAlign,
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px",
|
||||||
|
marqueeSet: this.transStyle.marqueeSet,
|
||||||
|
styleColor: this.transStyle.marqueeQuit
|
||||||
|
};
|
||||||
|
},
|
||||||
|
isBehavior() {
|
||||||
|
return this.styleColor.marqueeSet ? "start()" : "stop()";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
this.optionsData = val.data;
|
||||||
|
this.setOptionsData();
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
this.optionsData = this.value.data;
|
||||||
|
this.setOptionsData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 数据解析
|
||||||
|
setOptionsData() {
|
||||||
|
const optionsData = this.optionsData; // 数据类型 静态 or 动态
|
||||||
|
if (optionsData.dataType == "dynamicData") {
|
||||||
|
this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
|
||||||
|
} else {};
|
||||||
|
},
|
||||||
|
dynamicDataFn(val, refreshTime) {
|
||||||
|
if (!val) return;
|
||||||
|
if (this.ispreview) {
|
||||||
|
this.getEchartData(val);
|
||||||
|
this.flagInter = setInterval(() => {
|
||||||
|
this.getEchartData(val);
|
||||||
|
}, refreshTime);
|
||||||
|
} else {
|
||||||
|
this.getEchartData(val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getEchartData(val) {
|
||||||
|
const data = this.queryEchartsData(val);
|
||||||
|
data.then(res => {
|
||||||
|
this.styleColor.text = res[0].value;
|
||||||
|
this.$forceUpdate();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.text {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,128 @@
|
|||||||
|
<template>
|
||||||
|
<superslide :options="options" class="slideBox">
|
||||||
|
<!-- slides -->
|
||||||
|
<div class="bd">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<img src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=717294809,2494697366&fm=26&gp=0.jpg" alt="">
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2090090414,3038344648&fm=26&gp=0.jpg" alt="">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- Optional controls slots -->
|
||||||
|
<!-- slot="titCell" -->
|
||||||
|
<div slot="titCell" class="hd">
|
||||||
|
<ul>
|
||||||
|
<li class="on">1</li>
|
||||||
|
<li class="">2</li>
|
||||||
|
<li class="">3</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- slot="prev" -->
|
||||||
|
<a slot="prev" class="prev" href="javascript:void(0)" />
|
||||||
|
<!-- slot="next" -->
|
||||||
|
<a slot="next" class="next" href="javascript:void(0)" />
|
||||||
|
<!-- slot="pageStateCell" -->
|
||||||
|
<span slot="pageStateCell" class="pageState" />
|
||||||
|
</superslide>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'WidgetSlider',
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {
|
||||||
|
mainCell: '.bd ul',
|
||||||
|
autoPlay: true,
|
||||||
|
effect: 'leftLoop',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.slideBox {
|
||||||
|
width: 450px;
|
||||||
|
height: 230px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.slideBox .hd {
|
||||||
|
height: 15px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
right: 5px;
|
||||||
|
bottom: 5px;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.slideBox .hd ul {
|
||||||
|
overflow: hidden;
|
||||||
|
zoom: 1;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.slideBox .hd ul li {
|
||||||
|
float: left;
|
||||||
|
margin-right: 2px;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
line-height: 14px;
|
||||||
|
text-align: center;
|
||||||
|
background: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.slideBox .hd ul li.on {
|
||||||
|
background: #f00;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.slideBox .bd {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
.slideBox .bd li {
|
||||||
|
zoom: 1;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.slideBox .bd img {
|
||||||
|
width: 450px;
|
||||||
|
height: 230px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/* 下面是前/后按钮代码,如果不需要删除即可 */
|
||||||
|
.slideBox .prev,
|
||||||
|
.slideBox .next {
|
||||||
|
position: absolute;
|
||||||
|
left: 3%;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -25px;
|
||||||
|
display: block;
|
||||||
|
width: 32px;
|
||||||
|
height: 40px;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOsAAAAgCAMAAADE+3+QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkYyNjE4RUVDRjgxMTFFMjk1ODhDQkIzNDg3MjdGNUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkYyNjE4RUZDRjgxMTFFMjk1ODhDQkIzNDg3MjdGNUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjI2MThFQ0NGODExMUUyOTU4OENCQjM0ODcyN0Y1QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjI2MThFRENGODExMUUyOTU4OENCQjM0ODcyN0Y1QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmLDzTcAAAAJUExURcHBwf///////wCiYf4AAAADdFJOU///ANfKDUEAAACjSURBVHja5JnRDUQhDMNM9h/6STfCgeKPsIBjhGgpnHPy7wLyYLUicC5IPJGtJfi5ngsSL1Q7AYgsW8QTV7YJJ6psFU1M2S6YiLJlLPFk21CiydaRaOT+7mKxhYOERDcuCBy+cheiJHBqHEYGqZzPug6d4aG7aajmDPUSQz3iUO8/9KYbeqsPzWCGZmtDM9OhWfjSH8fY31UuSMkT2UqET4ABAHo9NyVXKF5RAAAAAElFTkSuQmCC) -110px
|
||||||
|
5px no-repeat;
|
||||||
|
filter: alpha(opacity=50);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.slideBox .next {
|
||||||
|
left: auto;
|
||||||
|
right: 3%;
|
||||||
|
background-position: 8px 5px;
|
||||||
|
}
|
||||||
|
.slideBox .prev:hover,
|
||||||
|
.slideBox .next:hover {
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.slideBox .prevStop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.slideBox .nextStop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,257 @@
|
|||||||
|
<template>
|
||||||
|
<div :style="styleObj">
|
||||||
|
<superslide v-if="hackReset" :options="options" class="txtScroll-top">
|
||||||
|
<!--表头-->
|
||||||
|
<div class="title">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in header"
|
||||||
|
:style="[headerTableStlye, tableFiledWidth(index), tableRowHeight()]"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
{{ item.name }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--数据-->
|
||||||
|
<div class="bd">
|
||||||
|
<ul class="infoList">
|
||||||
|
<li
|
||||||
|
v-for="(item, index) in list"
|
||||||
|
:key="index"
|
||||||
|
:style="tableRowHeight()"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-for="(itemChild, idx) in header"
|
||||||
|
:key="idx"
|
||||||
|
:style="[
|
||||||
|
bodyTableStyle,
|
||||||
|
bodyTable(index),
|
||||||
|
tableFiledWidth(idx),
|
||||||
|
tableRowHeight()
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
{{ item[itemChild.key] }}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</superslide>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import vue from "vue";
|
||||||
|
import VueSuperSlide from "vue-superslide";
|
||||||
|
|
||||||
|
vue.use(VueSuperSlide);
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
hackReset: true,
|
||||||
|
options: {
|
||||||
|
titCell: ".hd ul",
|
||||||
|
mainCell: ".bd ul",
|
||||||
|
effect: "topLoop",
|
||||||
|
autoPage: true,
|
||||||
|
//effect: "top",
|
||||||
|
autoPlay: true,
|
||||||
|
vis: 5,
|
||||||
|
rowHeight: "50px"
|
||||||
|
},
|
||||||
|
header: [],
|
||||||
|
list: [],
|
||||||
|
optionsSetUp: {},
|
||||||
|
optionsPosition: {},
|
||||||
|
optionsData: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
styleObj() {
|
||||||
|
console.log(this.optionsSetUp);
|
||||||
|
const allStyle = this.optionsPosition;
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
width: allStyle.width + "px",
|
||||||
|
height: allStyle.height + "px",
|
||||||
|
left: allStyle.left + "px",
|
||||||
|
top: allStyle.top + "px",
|
||||||
|
background: this.optionsSetUp.tableBgColor
|
||||||
|
};
|
||||||
|
},
|
||||||
|
headerTableStlye() {
|
||||||
|
const headStyle = this.optionsSetUp;
|
||||||
|
return {
|
||||||
|
"text-align": headStyle.textAlign,
|
||||||
|
"font-size": headStyle.fontSize + "px",
|
||||||
|
"border-style": headStyle.isLine ? "solid" : "none",
|
||||||
|
"border-width": headStyle.borderWidth + "px",
|
||||||
|
"border-color": headStyle.borderColor,
|
||||||
|
display: headStyle.isHeader ? "block" : "none",
|
||||||
|
color: headStyle.headColor,
|
||||||
|
"background-color": headStyle.headBackColor
|
||||||
|
};
|
||||||
|
},
|
||||||
|
bodyTableStyle() {
|
||||||
|
const bodyStyle = this.optionsSetUp;
|
||||||
|
return {
|
||||||
|
"text-align": bodyStyle.textAlign,
|
||||||
|
"font-size": bodyStyle.fontSize + "px",
|
||||||
|
"border-style": bodyStyle.isLine ? "solid" : "none",
|
||||||
|
"border-width": bodyStyle.borderWidth + "px",
|
||||||
|
"border-color": bodyStyle.borderColor,
|
||||||
|
color: bodyStyle.bodyColor,
|
||||||
|
"background-color": bodyStyle.tableBgColor
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.optionsSetUp = val.setup;
|
||||||
|
this.optionsPosition = val.position;
|
||||||
|
this.optionsData = val.data;
|
||||||
|
this.initData();
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.optionsSetUp = this.value.setup;
|
||||||
|
this.optionsPosition = this.value.position;
|
||||||
|
this.optionsData = this.value.data;
|
||||||
|
this.initData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initData() {
|
||||||
|
this.handlerRollFn();
|
||||||
|
this.handlerHead();
|
||||||
|
this.handlerData();
|
||||||
|
this.visConfig();
|
||||||
|
},
|
||||||
|
visConfig() {
|
||||||
|
this.options.vis = this.optionsSetUp.vis;
|
||||||
|
},
|
||||||
|
handlerRollFn() {
|
||||||
|
const options = this.options;
|
||||||
|
const rollSet = this.optionsSetUp;
|
||||||
|
options.autoPlay = rollSet.isRoll;
|
||||||
|
options.effect = rollSet.effect;
|
||||||
|
options.interTime = rollSet.interTime;
|
||||||
|
options.delayTime = rollSet.delayTime;
|
||||||
|
options.scroll = rollSet.scroll;
|
||||||
|
this.options = options;
|
||||||
|
this.hackResetFun();
|
||||||
|
},
|
||||||
|
handlerHead() {
|
||||||
|
const head = this.optionsSetUp.dynamicAddTable;
|
||||||
|
this.header = head;
|
||||||
|
},
|
||||||
|
handlerData() {
|
||||||
|
const tableData = this.optionsData;
|
||||||
|
tableData.dataType == "staticData"
|
||||||
|
? this.handlerStaticData(tableData.staticData)
|
||||||
|
: this.handlerDynamicData(tableData.dynamicData, tableData.refreshTime);
|
||||||
|
},
|
||||||
|
handlerStaticData(data) {
|
||||||
|
this.list = data;
|
||||||
|
},
|
||||||
|
handlerDynamicData(data, refreshTime) {
|
||||||
|
if (!data) return;
|
||||||
|
if (this.ispreview) {
|
||||||
|
this.getEchartData(data);
|
||||||
|
this.flagInter = setInterval(() => {
|
||||||
|
this.getEchartData(data);
|
||||||
|
}, refreshTime);
|
||||||
|
} else {
|
||||||
|
this.getEchartData(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getEchartData(val) {
|
||||||
|
const data = this.queryEchartsData(val);
|
||||||
|
data.then(res => {
|
||||||
|
this.list = res;
|
||||||
|
this.hackResetFun();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// vue hack 之强制刷新组件
|
||||||
|
hackResetFun() {
|
||||||
|
this.hackReset = false;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.hackReset = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 计算 奇偶背景色
|
||||||
|
bodyTable(index) {
|
||||||
|
let styleJson = {};
|
||||||
|
if (index % 2) {
|
||||||
|
styleJson["background-color"] = this.optionsSetUp.eventColor;
|
||||||
|
} else {
|
||||||
|
styleJson["background-color"] = this.optionsSetUp.oldColor;
|
||||||
|
}
|
||||||
|
return styleJson;
|
||||||
|
},
|
||||||
|
tableRowHeight() {
|
||||||
|
let styleJson = {};
|
||||||
|
if (this.optionsSetUp.rowHeight) {
|
||||||
|
styleJson["height"] = this.optionsSetUp.rowHeight + "px";
|
||||||
|
styleJson["line-height"] = this.optionsSetUp.rowHeight + "px";
|
||||||
|
} else {
|
||||||
|
styleJson["height"] = this.options.rowHeight;
|
||||||
|
styleJson["line-height"] = this.optionsSetUp.rowHeight + "px";
|
||||||
|
}
|
||||||
|
return styleJson;
|
||||||
|
},
|
||||||
|
tableFiledWidth(index) {
|
||||||
|
let styleJson = {};
|
||||||
|
if (this.optionsSetUp.dynamicAddTable[index].width) {
|
||||||
|
styleJson["width"] = this.optionsSetUp.dynamicAddTable[index].width;
|
||||||
|
}
|
||||||
|
return styleJson;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
/* 本例子css */
|
||||||
|
.txtScroll-top {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title > div {
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.txtScroll-top .bd {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.txtScroll-top .infoList li {
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.txtScroll-top .infoList li > div {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.txtScroll-top .infoList li:nth-child(n) {
|
||||||
|
background: rgb(0, 59, 81);
|
||||||
|
}
|
||||||
|
|
||||||
|
.txtScroll-top .infoList li:nth-child(2n) {
|
||||||
|
background: rgb(10, 39, 50);
|
||||||
|
}*/
|
||||||
|
</style>
|
@ -0,0 +1,98 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: lide1202@hotmail.com
|
||||||
|
* @Date: 2021-3-13 11:04:24
|
||||||
|
* @Last Modified by: lide1202@hotmail.com
|
||||||
|
* @Last Modified time: 2021-3-13 11:04:24
|
||||||
|
!-->
|
||||||
|
<template>
|
||||||
|
<div class="text" :style="styleColor">{{ styleColor.text }}</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetText",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {},
|
||||||
|
optionsData: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
color: this.transStyle.color,
|
||||||
|
"font-weight": this.transStyle.fontWeight,
|
||||||
|
text: this.transStyle.text,
|
||||||
|
"font-size": this.transStyle.fontSize + "px",
|
||||||
|
"letter-spacing": this.transStyle.letterSpacing + "em",
|
||||||
|
background: this.transStyle.background,
|
||||||
|
"text-align": this.transStyle.textAlign,
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
this.optionsData = val.data;
|
||||||
|
this.setOptionsData();
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
this.optionsData = this.value.data;
|
||||||
|
this.setOptionsData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 数据解析
|
||||||
|
setOptionsData() {
|
||||||
|
const optionsData = this.optionsData; // 数据类型 静态 or 动态
|
||||||
|
if (optionsData.dataType == "dynamicData") {
|
||||||
|
this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
|
||||||
|
} else {};
|
||||||
|
},
|
||||||
|
dynamicDataFn(val, refreshTime) {
|
||||||
|
if (!val) return;
|
||||||
|
if (this.ispreview) {
|
||||||
|
this.getEchartData(val);
|
||||||
|
this.flagInter = setInterval(() => {
|
||||||
|
this.getEchartData(val);
|
||||||
|
}, refreshTime);
|
||||||
|
} else {
|
||||||
|
this.getEchartData(val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getEchartData(val) {
|
||||||
|
const data = this.queryEchartsData(val);
|
||||||
|
data.then(res => {
|
||||||
|
this.styleColor.text = res[0].value;
|
||||||
|
this.$forceUpdate();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.text {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,163 @@
|
|||||||
|
<template>
|
||||||
|
<div class="text" :style="styleColor">{{ timestr }}</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetTime",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
timestr: "",
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
console.log(this.objToOne(this.options));
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
color: this.transStyle.color || "#fff",
|
||||||
|
text: this.transStyle.text || "文本框",
|
||||||
|
"font-size": this.transStyle.fontSize + "px" || "30px",
|
||||||
|
"letter-spacing": this.transStyle.letterSpacing + "em",
|
||||||
|
background: this.transStyle.background,
|
||||||
|
"font-weight": this.transStyle.fontWeight,
|
||||||
|
"text-align": this.transStyle.textAlign,
|
||||||
|
display:
|
||||||
|
this.transStyle.hideLayer == undefined
|
||||||
|
? "block"
|
||||||
|
: this.transStyle.hideLayer
|
||||||
|
? "none"
|
||||||
|
: "block",
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
this.getTime();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
formatFunction(date, fmt) {
|
||||||
|
if (/(y+)/.test(fmt)) {
|
||||||
|
fmt = fmt.replace(
|
||||||
|
RegExp.$1,
|
||||||
|
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const o = {
|
||||||
|
"M+": date.getMonth() + 1, // 月份
|
||||||
|
"d+": date.getDate(), // 日
|
||||||
|
"h+": date.getHours(), // 小时
|
||||||
|
"m+": date.getMinutes(), // 分
|
||||||
|
"s+": date.getSeconds(), // 秒
|
||||||
|
"q+": Math.floor((date.getMonth() + 3) / 3), // 季度
|
||||||
|
S: date.getMilliseconds() // 毫秒
|
||||||
|
};
|
||||||
|
for (let k in o) {
|
||||||
|
if (new RegExp("(" + k + ")").test(fmt)) {
|
||||||
|
fmt = fmt.replace(
|
||||||
|
RegExp.$1,
|
||||||
|
RegExp.$1.length == 1
|
||||||
|
? o[k]
|
||||||
|
: ("00" + o[k]).substr(("" + o[k]).length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fmt;
|
||||||
|
},
|
||||||
|
check(val) {
|
||||||
|
if (val < 10) {
|
||||||
|
return "0" + val;
|
||||||
|
} else {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
formatWeek(date, fmt) {
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = date.getMonth() + 1;
|
||||||
|
const day = date.getDate();
|
||||||
|
const hours = date.getHours();
|
||||||
|
const minutes = date.getMinutes();
|
||||||
|
const seconds = date.getSeconds();
|
||||||
|
let dayCycle = date.getDay();
|
||||||
|
const dayCycleArray = ["日", "一", "二", "三", "四", "五", "六"];
|
||||||
|
for (let i = 0; i < 7; i++) {
|
||||||
|
if (dayCycle == i) {
|
||||||
|
dayCycle = " 星期" + dayCycleArray[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fmt == "year-week") {
|
||||||
|
return year + "-" + month + "-" + day + dayCycle;
|
||||||
|
} else if (fmt == "year-h-m-week") {
|
||||||
|
return (
|
||||||
|
year +
|
||||||
|
"-" +
|
||||||
|
month +
|
||||||
|
"-" +
|
||||||
|
day +
|
||||||
|
" " +
|
||||||
|
hours +
|
||||||
|
":" +
|
||||||
|
minutes +
|
||||||
|
dayCycle
|
||||||
|
);
|
||||||
|
} else if (fmt == "year-h-m-s-week") {
|
||||||
|
return (
|
||||||
|
year +
|
||||||
|
"-" +
|
||||||
|
month +
|
||||||
|
"-" +
|
||||||
|
day +
|
||||||
|
" " +
|
||||||
|
hours +
|
||||||
|
":" +
|
||||||
|
minutes +
|
||||||
|
":" +
|
||||||
|
seconds +
|
||||||
|
dayCycle
|
||||||
|
);
|
||||||
|
} else if (fmt == "week") {
|
||||||
|
return dayCycle;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
displayTime() {
|
||||||
|
this.timestr =
|
||||||
|
this.transStyle.timeFormat.indexOf("week") > -1
|
||||||
|
? this.formatWeek(new Date(), this.transStyle.timeFormat)
|
||||||
|
: this.formatFunction(new Date(), this.transStyle.timeFormat);
|
||||||
|
},
|
||||||
|
getTime() {
|
||||||
|
setInterval(() => {
|
||||||
|
this.displayTime();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.text {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,61 @@
|
|||||||
|
<template>
|
||||||
|
<video :style="styleColor" :src="styleColor.videoAdress" controls="controls">
|
||||||
|
您的浏览器不支持 video 标签。
|
||||||
|
</video>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "WidgetVideo",
|
||||||
|
components: {},
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
ispreview: Boolean
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
transStyle() {
|
||||||
|
return this.objToOne(this.options);
|
||||||
|
},
|
||||||
|
styleColor() {
|
||||||
|
return {
|
||||||
|
position: this.ispreview ? "absolute" : "static",
|
||||||
|
width: this.transStyle.width + "px",
|
||||||
|
height: this.transStyle.height + "px",
|
||||||
|
left: this.transStyle.left + "px",
|
||||||
|
top: this.transStyle.top + "px",
|
||||||
|
right: this.transStyle.right + "px",
|
||||||
|
videoAdress: this.transStyle.videoAdress
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
handler(val) {
|
||||||
|
this.options = val;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.options = this.value;
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
video {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue