济菏高速业务端
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.
 
 
 
 
 

1088 lines
32 KiB

<template>
<qz-dialog :title="title" :visible.sync="visible" top="6vh" width="1200px">
<el-card
class="box-card"
style="margin-top: 2vh; background-color: #017cc4"
>
<span v-if="dataForm.applyType == ''" style="color: red"
>请先选择屏幕尺寸,以方便查看具体预览</span
>
<span style="color: red; margin-left: 20px"
>使用"#"作为占位符号,例如:前方#公里出现交通事故,请减速慢行</span
>
<div
style="
background-color: #000000;
color: yellow;
margin: 0 auto;
overflow: hidden;
position: relative;
"
v-on:ondragenter="ondragenter"
v-on:drop="faceDrop"
v-on:dragover="allowDrop"
v-bind:style="divStyle"
>
<div
v-for="(res, index) in templateContent"
:key="index"
v-drag
@click="cliTest(res)"
:id="index"
v-model="templateContent"
style="line-height: 1; position: absolute; white-space: nowrap"
:class="{ previewContentCSS: ispreviewContent == index }"
:style="{
color: res.fontColor,
fontSize: res.fontSize + 'px',
fontFamily: res.fontType,
letterSpacing: res.fontSpacing + 'px',
left: res.coordinate.substring(0, 3) + 'px',
top: res.coordinate.substring(3, 6) + 'px',
zIndex: '1000',
}"
v-html="res.content"
></div>
<div
v-for="(item, i) in templateContent"
:key="i"
v-if="item.img != ''"
:id="i"
v-drag
@click="cliTest(item)"
:class="{ previewContentCSS: ispreviewContent == i }"
v-model="templateContent"
style="line-height: 1; position: absolute"
:style="{
left: item.coordinate.substring(0, 3) + 'px',
top: item.coordinate.substring(3, 6) + 'px',
}"
>
<img
:src="isAdd ? item.img : item.imageName"
alt=""
@click="del(item)"
/>
</div>
</div>
</el-card>
<el-card>
<el-form
:model="dataForm"
:rules="dataRule"
label-width="90px"
ref="dataForm"
size="mini"
>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item prop="screenSize" label="屏幕尺寸">
<el-select
@change="resolvingPowerType"
v-model="dataForm.screenSize"
filterable
placeholder="请选择"
>
<el-option
v-for="item in screenSizeOptions"
:key="item.type"
:label="item.type"
:value="item.type"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="13">
<el-form-item prop="contentPosition" label="内容位置">
<el-button-group v-model="dataForm.contentPosition">
<el-button @click="alignment('1')" size="small"
>左对齐</el-button
>
<el-button @click="alignment('2')" size="small"
>左右对齐</el-button
>
<el-button @click="alignment('3')" size="small"
>右对齐</el-button
>
<el-button @click="alignment('4')" size="small"
>上对齐</el-button
>
<el-button @click="alignment('5')" size="small"
>上下对齐</el-button
>
<el-button @click="alignment('6')" size="small"
>下对齐</el-button
>
</el-button-group>
</el-form-item>
</el-col> -->
<el-col :span="2">
<el-button type="primary" @click="addTemplateContent"
>新增</el-button
>
</el-col>
<!-- <el-col :span="2">-->
<!-- <el-button type="primary" @click="chooseImageEvent()"-->
<!-- >选择图片</el-button-->
<!-- >-->
<!-- </el-col>-->
</el-row>
<!-- 选择图片弹出框开始 -->
<qz-dialog
title="选择图片"
:visible.sync="dialogVisible"
:before-close="close"
top="6vh"
width="1100px"
:modal="false"
append-to-body
>
<!-- 选择图片内容区域开始 -->
<div class="changeImage">
<el-row style="padding-left: 60px">
<el-checkbox-group v-model="checkList">
<el-col
:span="8"
v-for="(item, index) in imgUrl"
:key="index"
style="margin-top: 12px"
>
<el-checkbox :label="item.pictureUrl">
<div class="photo">
<img
:src="item.pictureUrl"
@dblclick="dblEvent(item.pictureUrl)"
draggable="true"
v-on:dragstart="faceImagedragg($event, item)"
/>
</div>
</el-checkbox>
</el-col>
</el-checkbox-group>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="close">{{
$t("cancel")
}}</el-button>
<el-button
size="small"
@click="sendBtnEvent()"
type="primary"
v-loading="loading"
>{{ $t("confirm") }}</el-button
>
</span>
</div>
<!-- 选择图片内容区域结束 -->
</qz-dialog>
<!-- 选择图片弹出框结束 -->
<!-- <el-scrollbar style="height:15vh;width: 1130px">-->
<el-row
:gutter="24"
v-for="(res, index) in templateContent"
:key="index"
v-show="res.content != ''"
>
<el-col :span="22">
<el-form-item label="内容">
<el-input
type="textarea"
clearable
placeholder="内容"
v-model="res.content"
></el-input>
</el-form-item>
</el-col>
<el-col :span="2">
<el-button
type="danger"
icon="el-icon-delete"
@click="delTemplateContent(res)"
></el-button>
</el-col>
<el-col :span="6">
<el-form-item prop="fontColor" label="字体颜色">
<el-select
v-model="res.fontColor"
filterable
placeholder="请选择"
>
<el-option
v-for="item in colorOptions"
:key="item.cssClass"
:label="item.dictLabel"
:value="item.cssClass"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="fontSize" label="字体大小">
<el-select v-model="res.fontSize" style="width: 100%">
<el-option
v-for="item in fontSizeOpt"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="fontType" label="字体类型">
<el-select v-model="res.fontType" filterable placeholder="请选择">
<el-option
v-for="item in fontTypeOptions"
:key="item.dictLabel"
:label="item.dictLabel"
:value="item.dictLabel"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="fontSpacing" label="字体间距">
<el-input-number
:min="0"
controls-position="right"
v-model="res.fontSpacing"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-show="templateContent.length > 1">
<el-divider></el-divider>
</el-col>
</el-row>
<!-- </el-scrollbar>-->
<el-row :gutter="24">
<el-col :span="6">
<el-form-item prop="rollSpeed" label="滚动速度(毫秒)">
<!-- 毫秒 -->
<el-input-number
:min="0"
controls-position="right"
v-model="dataForm.rollSpeed"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="stopTime" label="停留时间(秒)">
<el-input-number
:min="0"
controls-position="right"
v-model="dataForm.stopTime"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="applyType" label="适用类型">
<!-- <el-input clearable
placeholder="适用类型"
v-model="dataForm.applyType"></el-input> -->
<el-select
v-model="dataForm.applyType"
filterable
placeholder="请选择"
>
<el-option
v-for="item in applyTypeOptions"
:key="item.code"
:label="item.content"
:value="item.code"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="inScreenMode" label="入屏方式">
<el-select
v-model="dataForm.inScreenMode"
filterable
placeholder="请选择"
>
<el-option
v-for="item in inScreenModeOptions"
:key="item.cssClass"
:label="item.dictLabel"
:value="item.cssClass"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item prop="templateType" label="模板类型">
<el-select
v-model="dataForm.templateType"
filterable
placeholder="请选择"
>
<el-option
v-for="item in isCurrencyOptions"
:key="item.code"
:label="item.content"
:value="item.code"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="vmsType" label="情报板类型">
<el-input
clearable
placeholder="情报板类型"
v-model="dataForm.vmsType"
></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="isCurrency" label="模板模式">
<el-select
v-model="dataForm.isCurrency"
filterable
placeholder="请选择"
>
<el-option
v-for="item in isCurrencyOptions"
:key="item.code"
:label="item.content"
:value="item.code"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="remark" label="备注">
<el-input
clearable
placeholder="备注"
v-model="dataForm.remark"
></el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="24">
<el-form-item prop="picSize"
label="图片大小">
<el-select v-model="dataForm.imgSizeFrom"
size='mini'
filterable
placeholder="请选择"
style="width: 173px;">
<el-option v-for="item,index in imgSize"
:key="index"
:label="item.name"
:value="item.type">
</el-option>
</el-select>
</el-form-item>
</el-col> -->
</el-row>
</el-form>
</el-card>
<template slot="footer">
<el-button size="small" @click="visible = false">{{
$t("cancel")
}}</el-button>
<el-button
size="small"
@click="dataFormSubmitHandle()"
type="primary"
v-loading="loading"
>{{ $t("confirm") }}
</el-button>
</template>
</qz-dialog>
</template>
<script>
// import * as api from "./api";
// import util from "@/libs/util";
// import { saveContentsList } from "./api";
export default {
data() {
return {
applyTypeOptions: [],
fontSizeOpt: [],
fontTypeOptions: [],
checkList: [], //复选框一组
obj: "",
imgUrl: [],
imgUrlOther: [],
dialogVisible: false, //选择图片
fileList: [
{
name: "food.jpeg",
url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
},
{
name: "food2.jpeg",
url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
},
],
listquery: [], //拖拽图片
curDragImgItem: "",
visible: false,
startTxt_x: "000",
startTxt_y: "000",
width: "1024",
height: "128",
content: "",
fontColor: "yellow",
fontSize: "24",
fontType: "KaiTi",
fontSpacing: 0,
coordinate: "000000",
url: "",
previewContent: "", //预览内容
ispreviewContent: -1,
dataForm: {
id: "",
screenSize: "1024*128",
inScreenMode: "",
rollSpeed: undefined,
stopTime: undefined,
applyType: "",
isCurrency: "",
templateType: "",
vmsType: "",
createby: "",
createtime: "",
updateby: "",
updatetime: "",
remark: "",
imgSizeFrom: "", //尺寸大小
},
templateContent: [],
screenSizeOptions: [
{
type: "144*72",
},
{
type: "768*72",
},
{
type: "320*32",
},
{
type: "384*32",
},
{
type: "1024*128",
},
{
type: "480*48",
},
{
type: "480*72",
},
{
type: "880*80",
},
],
colorOptions: [
// {
// code: "red",
// content: "红色",
// },
// {
// code: "yellow",
// content: "黄色",
// },
// {
// code: "White",
// content: "白色",
// },
// {
// code: "#00FF00",
// content: "绿色",
// },
],
isCurrencyOptions: [
{
code: "0",
content: "通用",
},
{
code: "1",
content: "仅为智能推荐模板",
},
],
inScreenModeOptions: [
// {
// code: "0",
// name: "清屏(全黑)",
// },
// {
// code: "1",
// name: "立即显示",
// },
// {
// code: "2",
// name: "上移",
// },
// {
// code: "3",
// name: "下移",
// },
// {
// code: "4",
// name: "左移",
// },
// {
// code: "5",
// name: "右移",
// },
// {
// code: "6",
// name: "横百叶窗",
// },
// {
// code: "7",
// name: "竖百叶窗",
// },
// {
// code: "8",
// name: "上下合拢",
// },
// {
// code: "9",
// name: "上下展开",
// },
// {
// code: "10",
// name: "左右合拢",
// },
// {
// code: "11",
// name: "左右展开",
// },
// {
// code: "12",
// name: "中心合拢",
// },
// {
// code: "13",
// name: "中心展开",
// },
// {
// code: "14",
// name: "向下马赛克",
// },
// {
// code: "15",
// name: "向右马赛克",
// },
// {
// code: "16",
// name: "淡入",
// },
// {
// code: "17",
// name: "淡出",
// },
// {
// code: "18",
// name: "字符闪烁(闪后消失)",
// },
// {
// code: "19",
// name: "字符闪烁(闪后停留)",
// },
// {
// code: "20",
// name: "区域闪烁(闪后复原)",
// },
// {
// code: "21",
// name: "区域闪烁(闪后区域为黑)",
// },
],
imgSize: [
{
type: "1024*128",
name: "全屏",
},
{
type: "",
name: "正常",
},
],
title: "选择图片",
loading: false,
isAdd: false,
};
},
directives: {
drag: function (el, binding, vnode) {
let that = vnode.context;
let dragBox = el;
dragBox.onmousedown = (e) => {
// that.startTxt_x = dragBox.style.left.substring (0, dragBox.style.left.length - 2)
// that.startTxt_y = dragBox.style.left.substring (0, dragBox.style.top.length - 2)
let disX = e.clientX - dragBox.offsetLeft;
let disY = e.clientY - dragBox.offsetTop;
let clientHeight = dragBox.clientHeight;
let clientWidth = dragBox.clientWidth;
document.onmousemove = function (e) {
//鼠标移动触发事件,元素移到对应为位置
let left = e.pageX - disX;
let top = e.pageY - disY;
//限制区域
if (left <= 0) {
left = 0;
} else if (that.width - left - clientWidth <= 0) {
left = that.width - clientWidth;
}
if (top <= 0) {
top = 0;
} else if (that.height - top - clientHeight <= 0) {
top = that.height - clientHeight;
}
dragBox.style.left = left + "px";
dragBox.style.top = top + "px";
let a = (Array(3).join("0") + parseInt(left)).slice(-3);
let b = (Array(3).join("0") + parseInt(top)).slice(-3);
that.templateContent[dragBox.id].coordinate = a + b;
};
document.onmouseup = function () {
//鼠标抬起,清除绑定的事件,元素放置在对应的位置
document.onmousemove = null;
document.onmousedown = null;
};
e.preventDefault(); //阻止浏览器的默认事件
};
},
},
computed: {
dataRule() {
return {
isCurrency: [
{//模板模式
required: true,
message: this.$t("validate.required"),
trigger: "blur",
},
],
rollSpeed: [
//滚动速度
{
required: true,
message: this.$t("validate.required"),
trigger: "blur",
},
],
stopTime: [
//停留时间
{
required: true,
message: this.$t("validate.required"),
trigger: "blur",
},
],
inScreenMode: [
//入屏方式
{
required: true,
message: this.$t("validate.required"),
trigger: "blur",
},
],
};
},
divStyle: function () {
return {
width: this.width + "px",
height: this.height + "px",
};
},
},
watch: {
templateContent: {
deep: true,
handler: function (newValue, oldValue) {
// this.templateContent=newValue
var vm = this;
let inrex = [];
for (let index = vm.templateContent.length - 1; index >= 0; index--) {
if (
vm.templateContent[index].content == "" &&
(vm.templateContent[index].img == "" ||
vm.templateContent[index].imageName == "")
) {
inrex.push(index);
}
}
for (let index = 0; index < inrex.length; index++) {
vm.templateContent.splice(inrex[index], 1);
}
},
},
},
created() {
this.getDicts("vms_apply_type").then((data) => {
this.applyTypeOptions = data;
});
// this.getDicts("fontType").then((data) => {
// this.fontTypeOptions = data;
// });
this.getDicts("iot_device_font_type").then((res) => {
this.fontTypeOptions = res.data;
console.log(this.fontTypeOptions, "字体类型");
});
this.getDicts("iot_devices_font_color").then((res) => {
this.colorOptions = res.data;
console.log(this.colorOptions, "字体颜色");
});
this.getDicts("iot_device_font_size").then((res) => {
this.fontSizeOpt = res.data;
console.log(this.fontSizeOpt, "字体大小");
});
this.getDicts("iot_device_font_inScreen_mode").then((res) => {
this.inScreenModeOptions = res.data;
console.log(this.inScreenModeOptions, "入屏方式");
});
},
methods: {
init() {
// this.getDicts("fontSize").then((data) => {
// this.fontSizeOpt = data;
// });
this.title = !this.dataForm.id ? this.$t("add") : this.$t("update");
this.isAdd = !this.dataForm.id;
this.visible = true;
this.$nextTick(() => {
if (this.isAdd) {
this.$refs["dataForm"] && this.$refs["dataForm"].resetFields();
this.dataForm.id = "";
this.templateContent = [];
this.width = "1024";
this.height = "128";
this.templateContent.push({
content: "请输入内容",
fontColor: "yellow",
fontSize: "24",
fontType: "KaiTi",
fontSpacing: 0,
coordinate: "000000",
img: "",
});
} else {
this.getInfo();
this.$refs["dataForm"] && this.$refs["dataForm"].clearValidate();
}
});
},
del(index) {
this.obj = index;
var _this = this;
document.onkeydown = function (e) {
let key = window.event.keyCode;
if (_this.obj != "") {
if (key == 46 || key == 8) {
let inx = "";
for (let index = 0; index < _this.templateContent.length; index++) {
if (_this.templateContent[index] == _this.obj) {
inx = index;
}
}
_this.templateContent.splice(inx, 1);
_this.obj = "";
} else {
_this.obj = "";
}
}
};
},
// 选择图片按钮
chooseImageEvent() {
this.imgUrl = [];
this.getImageInfo();
this.dialogVisible = true;
},
//选择图片弹框关闭事件
close() {
this.checkList = [];
this.dialogVisible = false;
},
// 图片双击事件
dblEvent(item) {
if (this.templateContent.length > 7) {
this.$message.error("最多只能添加七条信息!");
return;
}
this.templateContent.push({
content: "",
fontColor: null,
fontSize: null,
fontType: null,
fontSpacing: 0,
coordinate: "000000",
img: item,
imageName: item,
});
this.checkList = [];
this.dialogVisible = false;
},
// 选择图片点击确定按钮
sendBtnEvent() {
if (this.templateContent.length > 7) {
this.$message.error("最多只能添加七条信息!");
return;
}
if (this.checkList.length > 1) {
this.$message.error("每次只能选择一张图片!");
return;
}
if (this.checkList.length > 0) {
for (var i = 0; i < this.checkList.length; i++)
this.templateContent.push({
content: "",
fontColor: null,
fontSize: null,
fontType: null,
fontSpacing: 0,
coordinate: "000000",
img: this.checkList[i],
});
this.checkList = [];
} else {
this.$message.error("请选择您要添加的图片!");
return;
}
this.dialogVisible = false;
},
// 选择图片弹框拖动图片
faceImagedragg(event, item) {
this.curDragImgItem = item; //拖动存储该图片信息
},
faceDrop(e) {
e.preventDefault(); //阻止默认行为
this.listquery.push(this.curDragImgItem);
},
// 全选
allowDrop(e) {
e.preventDefault(); //阻止默认行为
},
ondragenter(e) {
e.preventDefault(); //阻止默认行为
},
// 获取信息
getInfo() {
api.info(this.dataForm.id).then((data) => {
this.dataForm = data;
this.dataForm.isCurrency = this.dataForm.isCurrency + "";
if (this.dataForm.templateType != null) {
this.dataForm.templateType = this.dataForm.templateType + "";
}
this.width = this.dataForm.screenSize.split("*")[0];
this.height = this.dataForm.screenSize.split("*")[1];
});
api.getTemplateContentById(this.dataForm.id).then((data) => {
this.templateContent = data;
console.log(this.templateContent,"this.templateContent");
if (this.templateContent.length == 0) {
this.templateContent.push({
content: "",
fontColor: "yellow",
fontSize: "24",
fontType: "KaiTi",
fontSpacing: 0,
coordinate: "000000",
img: "",
});
}
});
},
// 表单提交
async dataFormSubmitHandle() {
let valid = await this.$refs.dataForm.validate().catch(() => {
return util.$message.showInfo2("校验错误");
});
if (!valid) return;
this.loading = true;
let templateId = "";
let method = !this.isAdd ? "put" : "post";
if (this.isAdd) {
await api.save(this.dataForm, method).then((data) => {
templateId = data;
});
let params = {
templateContent: this.templateContent,
templateId: templateId,
};
api.saveContentsList(params).catch((err) => {
throw err;
});
} else {
await api.save(this.dataForm, method).then((data) => {});
this.templateContent.forEach((e) => {
e.img = e.imageName;
});
let params = {
templateContent: this.templateContent,
templateId: this.dataForm.id,
};
await api.delContent(this.dataForm.id).catch((err) => {
throw err;
});
await api.saveContentsList(params).catch((err) => {
throw err;
});
}
this.loading = false;
this.visible = false;
this.isAdd = false;
this.$emit("refreshDataList", this.dataForm);
},
/*********************************************业务代码***********************************************/
//文字对齐方式
alignment(alignmentNum) {
let that = this;
let boardSize = this.dataForm.screenSize;
if (!boardSize || boardSize === "") {
boardSize = "768*72";
}
let width = boardSize.split("*")[0];
let height = boardSize.split("*")[1];
//获取内容
let contentWidth = document.getElementById("templateDivText").offsetWidth;
let contentHeight =
document.getElementById("templateDivText").offsetHeight;
switch (alignmentNum) {
case "1":
this.startTxt_x = "000";
break;
case "2":
this.startTxt_x = this.formatNum(
(width - contentWidth) / 2 < 0 ? 0 : (width - contentWidth) / 2,
3
);
break;
case "3":
this.startTxt_x = this.formatNum(
width - contentWidth <= 0 ? 0 : width - contentWidth,
3
);
break;
case "4":
this.startTxt_y = "000";
break;
case "5":
this.startTxt_y = this.formatNum(
(height - contentHeight) / 2 < 0 ? 0 : (height - contentHeight) / 2,
3
);
break;
case "6":
this.startTxt_y = this.formatNum(
height - contentHeight <= 0 ? 0 : height - contentHeight,
3
);
break;
}
},
/* 拆分分辨率大小 */
resolvingPowerType(data) {
let a = [];
a = data.split("*");
this.width = a[0];
this.height = a[1];
},
/*增加新的内容*/
addTemplateContent() {
if (this.templateContent.length >= 7) {
this.$message.error("最多只能添加7条信息!");
return;
}
this.templateContent.push({
content: "请输入内容",
fontColor: "yellow",
fontSize: "24",
fontType: "KaiTi",
fontSpacing: 0,
coordinate: "000000",
img: "",
});
},
/*删除内容*/
delTemplateContent(data) {
console.log(data,"data");
for (let i = 0; i < this.templateContent.length; i++) {
if (
this.templateContent.indexOf(data) ==
this.templateContent.indexOf(this.templateContent[i])
) {
this.templateContent.splice(this.templateContent.indexOf(data), 1);
}
}
},
cliTest(data) {
this.ispreviewContent = this.templateContent.indexOf(data);
},
/********************图片上传*********************/
handleRemove(file, fileList) {},
handlePreview(file) {},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}`);
},
/**
* 获取图片信息
*/
getImageInfo() {
let params = {
vmsSize: this.dataForm.screenSize,
};
api.queryImgInfo(params).then((data) => {
if (!data) {
return;
}
let list = data.sort((dataA, dataB) => {
dataA.id - dataB.id;
});
this.imgUrl.push(...list);
});
},
},
};
</script>
<style lang="less" scoped>
.previewContentCSS {
border: yellow 1px dashed;
}
/* 页脚 */
.dialog-footer {
padding-left: 450px;
}
.photoOther img,
.photo img {
max-width: 300px;
width: 100%;
// height: 80px;
}
</style>