济菏高速业务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

431 lines
11 KiB

<template>
<el-dialog :title="calcTitle" :visible.sync="dialogVisible" width="800px" append-to-body
:close-on-click-modal="false">
<el-card>
<el-form :model="dataForm" :rules="dataRule" label-width="110px" ref="dataForm" size="mini"
style="margin-right: 10px;">
<el-form-item label="所属类别" prop="category" v-if="type == 'template' && mode != 'toDevice'">
<el-row :gutter="0">
<el-col :span="6">
<el-select v-model="dataForm.category" placeholder="请选择所属类别" size="mini">
<el-option v-for="item in templateCategoryList" :key="item.dictValue" :label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="音量" prop="outVol">
<el-row :gutter="0">
<el-col :span="6">
<el-input-number v-model="dataForm.outVol" :min="1" :max="9"></el-input-number>
</el-col>
<el-col :span="18"><span style="margin-left: 10px;">取值范围 1 - 9</span></el-col>
</el-row>
</el-form-item>
<el-form-item label="循环次数" prop="repeatTimes">
<el-row :gutter="0">
<el-col :span="6">
<el-input-number v-model="dataForm.repeatTimes" :min="1" :max="16"></el-input-number>
</el-col>
<el-col :span="18"><span style="margin-left: 10px;">取值范围 1 - 16</span></el-col>
</el-row>
</el-form-item>
<el-form-item label="紧急度" prop="priority">
<el-row :gutter="0">
<el-col :span="6">
<el-select v-model="dataForm.priority" placeholder="请选择">
<el-option v-for="(item,key) in broadcastPriority" :key="key" :label="item" :value="key">
</el-option>
</el-select>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="详细内容" prop="content">
<el-input type="textarea" :rows="6" placeholder="详细内容" v-model="dataForm.content"></el-input>
</el-form-item>
</el-form>
</el-card>
<div slot="footer" class="dialog-footer">
<el-button style="background-color: #0e708b; color: #fff" @click="onClose">取消</el-button>
<el-button @click="onSubmit('dataForm')" v-loading="loading"
style="background-color: #10aac2; color: #fff">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import {
addTemplate,
editTemplate
} from "@/api/broadcast/template";
import { checkBoardContent } from "@/api/board/board";
import { broadcastPriority } from "@screen/utils/enum.js";
export default {
data() {
return {
broadcastPriority,
dialogVisible: false,
dataForm: {
content: ""
},
dataRule: {
category: [
{
required: true,
message: "请选择类别",
trigger: "blur",
},
],
content: [
{
required: true,
message: "请输入详细内容",
trigger: "blur",
},
]
},
screenSizeOptions: [],
colorList: [],
isCurrencyOptions: [
{
code: "0",
content: "通用",
},
{
code: "1",
content: "仅为智能推荐模板",
},
],
inScreenModeList: [],
fontSizeList: [],
title: "选择图片",
loading: false,
isAdd: false,
templateCategoryList: [],
infoType: "",
devicePixelBoolean: false,
categoryRules: false,
dataDefault: {
category:"",
content:"",
outVol:6,
repeatTimes:3,
priority:"1"
},
isLocked: false,
};
},
props: {
mode: {
//add edit
type: String,
default: "",
},
type: {
//template board
type: String,
default: "",
},
visible: {
type: Boolean,
default: false,
},
tpl: {
type: Object,
default: () => {},
},
},
components: {
},
computed: {
calcTitle() {
let str = "";
if (this.mode == "toDevice") {
str = `从模板添加待下发信息`;
} else {
str = `${this.mode == "add" ? "新增" : "编辑"}${
this.type == "template" ? "广播模板" : "待下发信息"
}`;
}
return str;
},
},
watch: {
visible: {
handler(newV) {
this.dialogVisible = newV;
if (this.$refs.dataForm) {
this.$refs.dataForm.clearValidate();
}
// if(newV){
// this.initData();
// }
},
immediate: true,
},
dialogVisible(newV) {
this.$emit("update:visible", newV);
},
tpl: {
handler(newV) {
// { "id": 3, "category": "0", "content": "保持车距,控制车速", "screenSize": "768*64", "fontColor": "FFFF00", "fontSize": "64", "fontType": "2", "fontSpacing": "0", "rollingSpeed": null, "stopTime": "50", "inScreenMode": "1", "formatStyle": "2", "remark": null, "createTime": "2024-01-06 10:40:19", "updateTime": "2024-01-06 11:04:53" }
if (newV && Object.keys(newV).length > 0) {
//防止关闭对话框时触发
this.initData();
}
},
deep: true,
},
mode: {
handler(newV) {
this.initData();
},
},
type: {
handler(newV) {
this.initData();
},
},
},
mounted() {},
created() {
this.getDicts("iot_template_category").then((res) => {
this.templateCategoryList = res.data;
this.dataDefault.category = this.templateCategoryList[0].dictValue
});
},
methods: {
initData() {
if (this.isLocked) {
return;
}
this.isLocked = true;
setTimeout(() => {
this.isLocked = false;
}, 100);
if (this.mode == "edit" || this.mode == "toDevice"){
this.dataForm = {
outVol: +this.tpl.outVol,
repeatTimes: +this.tpl.repeatTimes,
category: this.tpl.category,
priority: this.tpl.priority,
content: this.tpl.content,
id : this.tpl.id
};
}else if(this.mode == "add"){
this.dataForm = {
...this.dataDefault,
// outVol: 6,
// repeatTimes: 3,
// priority: 3
}
}
if (this.visible == false && this.mode == "toDevice") {
this.____doSubmit();
}
},
onClose() {
this.dialogVisible = false;
},
// 表单提交
async onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.____doSubmit();
} else {
console.log('格式不正确!!');
return false;
}
});
},
____doSubmit(){
// if (this.type == "template" && this.dataForm.category == undefined) {
// return this.$modal.msgError("请选择分类!");
// }
// if (!this.dataForm.content.trim()) {
// return this.$modal.msgError("当前输入内容为空");
// }
// if (this.dataForm.content.indexOf("\\") >= 0) {
// return this.$modal.msgError("内容不能含有特殊字符'\\\\'");
// }
let ctt = this.dataForm.content;
checkBoardContent(ctt).then((res) => {
if (res.code == 200) {
doNext();
} else {
this.$message({
type: "danger",
message: res.msg,
});
return;
}
});
let doNext = () => {
let data = {
outVol: ''+this.dataForm.outVol,
repeatTimes: ''+this.dataForm.repeatTimes,
category: ''+this.dataForm.category,
priority: this.dataForm.priority,
content: this.dataForm.content,
id: this.dataForm.id
}
this.loading = true;
// let templateId = "";
if (this.type == "template") {
if (this.mode == "edit") {
editTemplate(data).then((res) => {
afterSave("修改");
});
} else if (this.mode == "toDevice") {
this.loading = false;
this.$emit("afterSubmit", {
type: this.type,
mode: this.mode,
data: data,
});
} else {
addTemplate(data).then((res) => {
afterSave("新增");
});
}
} else {
this.loading = false;
// this.dialogVisible = false
this.$emit("afterSubmit", {
type: this.type,
mode: this.mode,
data: data,
});
}
const afterSave = (para) => {
this.$message.success(para + "成功");
this.loading = false;
// this.dialogVisible = false
this.$emit("afterSubmit", { type: this.type, mode: this.mode });
};
};
}
},
};
</script>
<style lang="scss" scoped>
.infoBoardButton {
::v-deep .el-radio-button--medium .el-radio-button__inner {
// height: 3vh;
// line-height: 3vh;
// padding: 0 0.6vw;
// font-size: 0.7vw;
}
}
.previewContentCSS {
border: yellow 1px dashed;
}
/* 页脚 */
.dialog-footer {
padding-left: 450px;
}
.photoOther img,
.photo img {
max-width: 300px;
width: 100%;
// height: 80px;
}
.infoBoardButton {
display: flex;
justify-content: left;
}
.boardTextStyle {
line-height: 1;
caret-color: rgba(0, 0, 0, 0);
user-select: none;
position: absolute;
// max-height: 128px;
overflow: hidden;
}
.blackBoard2 {
background: #000000;
display: flex;
margin: 0 auto;
overflow: hidden;
position: relative;
// justify-content: center;
align-items: center;
}
::v-deep .el-card__body {
padding: 10px 0;
}
//
::v-deep .el-dialog__header {
background-color: #145977;
}
::v-deep .el-dialog__body {
padding: 5px 20px;
background-color: #145977;
}
::v-deep .el-dialog__footer {
background-color: #145977;
}
::v-deep .el-card {
margin-top: 1vh;
background-color: #145977;
border: 2px solid #1d7890;
}
::v-deep .el-form-item__label {
color: #3de8ff;
}
::v-deep .el-input--mini .el-input__inner {
color: #fff;
background-color: #096d8c;
}
::v-deep .el-input-number.is-controls-right .el-input-number__decrease {
color: #fff;
background-color: #096d8c;
}
::v-deep .el-dialog__title {
color: #fff;
}
::v-deep .el-textarea__inner {
color: #fff;
background-color: #096d8c;
border-color: #096d8c;
}
::v-deep .el-input-number.is-controls-right .el-input-number__decrease {
border-color: transparent;
}
::v-deep .el-input-number.is-controls-right .el-input-number__increase {
border-color: transparent;
color: #fff;
background-color: #096d8c;
}
::v-deep .el-button--medium {
padding: 5px 25px;
font-size: 14px;
border-radius: 20px;
border: transparent;
}
::v-deep .el-radio-button__inner {
color: #ffffff;
background-color: pink;
border-color: #1d58a9;
-webkit-box-shadow: -1px 0 0 0 #1d58a9;
box-shadow: -1px 0 0 0 #1d58a9;
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
border-radius: 3px 3px 3px 3px;
opacity: 1;
border: none !important;
}
::v-deep .infoBoardButton .el-radio-button--medium .el-radio-button__inner {
margin: 0 3px;
}
</style>