添加登录验证码

master
fanluyan 2 years ago
parent 98e915aa7c
commit 9badc25dc7

48
package-lock.json generated

@ -14,6 +14,7 @@
"element-ui": "^2.15.13",
"moment": "^2.29.4",
"update-element-ui-theme": "^1.0.0",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
@ -10830,6 +10831,27 @@
"uuid": "dist/bin/uuid"
}
},
"node_modules/v-viewer": {
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/v-viewer/-/v-viewer-1.6.4.tgz",
"integrity": "sha512-LVkiUHpmsbsZXebeNXnu8krRCi5i2n07FeLFxoIVGhw8lVvTBO0ffpbDC6mLEuacCjrIh09HjIqpciwUtWE8lQ==",
"dependencies": {
"throttle-debounce": "^2.0.1",
"viewerjs": "^1.5.0"
},
"engines": {
"node": ">=4",
"npm": ">=3"
}
},
"node_modules/v-viewer/node_modules/throttle-debounce": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@ -10855,6 +10877,11 @@
"node": ">= 0.8"
}
},
"node_modules/viewerjs": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.11.3.tgz",
"integrity": "sha512-efG3U61Umuj/1x6JAtdvnY9m407C/RkrkFilsMcLEWKDivpjNU3/FeL+feCY1Vkur9aQeBJ+z6K4CCPP7hv6vA=="
},
"node_modules/vue": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",
@ -19954,6 +19981,22 @@
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true
},
"v-viewer": {
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/v-viewer/-/v-viewer-1.6.4.tgz",
"integrity": "sha512-LVkiUHpmsbsZXebeNXnu8krRCi5i2n07FeLFxoIVGhw8lVvTBO0ffpbDC6mLEuacCjrIh09HjIqpciwUtWE8lQ==",
"requires": {
"throttle-debounce": "^2.0.1",
"viewerjs": "^1.5.0"
},
"dependencies": {
"throttle-debounce": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="
}
}
},
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@ -19976,6 +20019,11 @@
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dev": true
},
"viewerjs": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.11.3.tgz",
"integrity": "sha512-efG3U61Umuj/1x6JAtdvnY9m407C/RkrkFilsMcLEWKDivpjNU3/FeL+feCY1Vkur9aQeBJ+z6K4CCPP7hv6vA=="
},
"vue": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",

@ -14,6 +14,7 @@
"element-ui": "^2.15.13",
"moment": "^2.29.4",
"update-element-ui-theme": "^1.0.0",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Before

Width:  |  Height:  |  Size: 553 KiB

After

Width:  |  Height:  |  Size: 553 KiB

@ -1,11 +1,13 @@
<template>
<div class="header">
<div class="logo">
<img
<!-- <img
src="../../assets/img/logo.png"
alt="欣影"
width="110px"
/>
/>-->
视频监控可视化平台
</div>
<v-sidebar></v-sidebar>
<div class="header-right">

@ -33,6 +33,14 @@ import moment from "moment"; // 导入文件
// 注册全局 moment
Vue.prototype.$moment = moment;
Vue.config.productionTip = false;
//图片预览
import "viewerjs/dist/viewer.css";
import Viewer from "v-viewer";
Vue.use(Viewer);
// 这里是插件的默认设置
Viewer.setDefaults({
zIndexInline: 9999,
});
new Vue({
router,

@ -4,8 +4,7 @@
<div class="loginFilter">
<div class="ms-login">
<div class="ms-title">
<img src="../assets/img/logo.png" alt="欣影" />
<h3>可视化智能管控系统</h3>
<h3>视频监控可视化平台</h3>
</div>
<el-form
:model="userInfo"
@ -31,6 +30,20 @@
<el-button slot="prepend" icon="el-icon-lock"></el-button>
</el-input>
</el-form-item>
<el-form-item prop="verificationCode" class="verifyItem">
<el-input
v-model="userInfo.verificationCode"
placeholder="请输入验证码"
>
<el-button slot="prepend" icon="el-icon-unlock"></el-button>
</el-input>
<div @click="refreshCode" class="verifyBox">
<!--验证码组件-->
<s-identify :identifyCode="identifyCode"></s-identify>
</div>
</el-form-item>
<div class="login-btn">
<el-button type="primary" @click="submitForm()"></el-button>
</div>
@ -38,27 +51,37 @@
</el-form>
</div>
</div>
<p class="webInfo">© 2023 可视化智能管控系统.All right reserved.</p>
<p class="webInfo">© 2023 视频监控可视化平台.All right reserved.</p>
</div>
</template>
<script>
import { mapMutations } from "vuex";
import { login } from "@/utils/api/index";
import SIdentify from "./components/SIdentify";
export default {
components: {
SIdentify,
},
data: function () {
return {
userInfo: {
username: "xytest",
password: "123456",
verificationCode: "",
},
rules: {
username: [
{ required: true, message: "请输入用户名", trigger: "blur" },
],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
verificationCode: [
{ required: true, message: "验证码不能为空", trigger: "blur" },
],
},
token: "",
identifyCode: "",
identifyCodes: "1234567890abcdefjhijklinopqrsduvwxyz",
};
},
computed: {
@ -69,6 +92,7 @@ export default {
this.$refs.loginForm.validate((valid) => {
if (valid) {
console.log(valid);
//console.log(this.userInfo.verificationCode);
//this.userInfo.password = this.$md5(this.userInfo.password); //
this.token = this.$md5(this.userInfo.password); //token
this.$store.commit("SET_TOKEN", this.token); //tokenvuex
@ -83,8 +107,27 @@ export default {
});
},
getLogin() {},
//
refreshCode() {
this.identifyCode = "";
this.makeCode(this.identifyCodes, 4);
},
makeCode(o, l) {
for (let i = 0; i < l; i++) {
this.identifyCode +=
this.identifyCodes[this.randomNum(0, this.identifyCodes.length)];
}
},
randomNum(min, max) {
return Math.floor(Math.random() * (max - min) + min);
},
},
created() {},
mounted() {
//
this.identifyCode = "";
this.makeCode(this.identifyCodes, 4);
},
};
</script>
@ -101,15 +144,15 @@ export default {
width: 100%;
height: 100%;
//background: #86b7ff;
-webkit-backdrop-filter: blur(30px);
backdrop-filter: blur(30px);
//backdrop-filter: blur(12px);
}
.loginFilter {
width: 420px;
height: 454px;
background: transparent;
height: 450px;
background: rgba(255, 255, 255, 0.6);
box-shadow: 0px 4px 12px 0px rgba(51, 51, 51, 0.15);
border-radius: 4px;
border-radius: 10px;
left: 50%;
top: 50%;
transform: translate(-50%;-50%);
@ -127,10 +170,7 @@ export default {
text-align: center;
border-bottom: 1px solid #dcdfe6;
padding: 40px 16px;
img {
margin-bottom: 8px;
//width: 160px;
}
h3 {
font-size: 30px;
//background: linear-gradient(0deg, #86b7ff, #4293fd 99.46289%);
@ -144,6 +184,13 @@ export default {
.el-form-item {
margin-bottom: 30px;
}
.verifyItem {
.el-form-item__content {
display: flex;
align-items: center;
justify-content: space-between;
}
}
.login-btn {
text-align: center;
button {

@ -0,0 +1,165 @@
<template>
<div class="s-canvas">
<canvas
id="s-canvas"
:width="contentWidth"
:height="contentHeight"
></canvas>
</div>
</template>
<script>
export default {
name: "SIdentify",
props: {
identifyCode: {
type: String,
default: "1234",
},
fontSizeMin: {
type: Number,
default: 25,
},
fontSizeMax: {
type: Number,
default: 30,
},
backgroundColorMin: {
type: Number,
default: 255,
},
backgroundColorMax: {
type: Number,
default: 255,
},
colorMin: {
type: Number,
default: 0,
},
colorMax: {
type: Number,
default: 160,
},
lineColorMin: {
type: Number,
default: 100,
},
lineColorMax: {
type: Number,
default: 255,
},
dotColorMin: {
type: Number,
default: 0,
},
dotColorMax: {
type: Number,
default: 255,
},
contentWidth: {
type: Number,
default: 112,
},
contentHeight: {
type: Number,
default: 36,
},
},
methods: {
//
randomNum(min, max) {
return Math.floor(Math.random() * (max - min) + min);
},
//
randomColor(min, max) {
let r = this.randomNum(min, max);
let g = this.randomNum(min, max);
let b = this.randomNum(min, max);
return "rgb(" + r + "," + g + "," + b + ")";
},
drawPic() {
let canvas = document.getElementById("s-canvas");
let ctx = canvas.getContext("2d");
ctx.textBaseline = "bottom";
//
ctx.fillStyle = this.randomColor(
this.backgroundColorMin,
this.backgroundColorMax
);
ctx.fillRect(0, 0, this.contentWidth, this.contentHeight);
//
for (let i = 0; i < this.identifyCode.length; i++) {
this.drawText(ctx, this.identifyCode[i], i);
}
this.drawLine(ctx);
this.drawDot(ctx);
},
drawText(ctx, txt, i) {
ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax);
ctx.font =
this.randomNum(this.fontSizeMin, this.fontSizeMax) + "px SimHei";
let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1));
let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5);
var deg = this.randomNum(-45, 45);
//
ctx.translate(x, y);
ctx.rotate((deg * Math.PI) / 180);
ctx.fillText(txt, 0, 0);
//
ctx.rotate((-deg * Math.PI) / 180);
ctx.translate(-x, -y);
},
drawLine(ctx) {
// 线
for (let i = 0; i < 5; i++) {
ctx.strokeStyle = this.randomColor(
this.lineColorMin,
this.lineColorMax
);
ctx.beginPath();
ctx.moveTo(
this.randomNum(0, this.contentWidth),
this.randomNum(0, this.contentHeight)
);
ctx.lineTo(
this.randomNum(0, this.contentWidth),
this.randomNum(0, this.contentHeight)
);
ctx.stroke();
}
},
drawDot(ctx) {
//
for (let i = 0; i < 80; i++) {
ctx.fillStyle = this.randomColor(0, 255);
ctx.beginPath();
ctx.arc(
this.randomNum(0, this.contentWidth),
this.randomNum(0, this.contentHeight),
1,
0,
2 * Math.PI
);
ctx.fill();
}
},
},
watch: {
identifyCode() {
this.drawPic();
},
},
mounted() {
this.drawPic();
},
};
</script>
<style scoped>
.s-canvas {
height: 36px;
}
.s-canvas canvas {
margin-left: 8px;
}
</style>

@ -11,7 +11,9 @@
v-for="item in terminalPhoto"
:key="item.id"
>
<img :src="item.path" alt="" />
<viewer class="bigimg">
<img :src="item.path" alt="" />
</viewer>
</swiper-slide>
<div
class="swiper-button-next swiper-button-white"
@ -35,17 +37,19 @@
>
<img :src="item.path" alt="" />
<p class="timeInfo">
{{ $moment(item.photoTime).format("YYYY-MM-DD HH:mm:ss") }}
{{ $moment(item.photoTime).format("YYYY-MM-DD ") }}
</p>
</swiper-slide>
<div
<!-- <div
v-if="terminalPhoto.length !== 1"
class="swiper-button-next swiper-button-white"
slot="button-next"
></div>
<div
v-if="terminalPhoto.length !== 1"
class="swiper-button-prev swiper-button-white"
slot="button-prev"
></div>
></div> -->
</swiper>
</div>
</template>
@ -74,8 +78,8 @@ export default {
loop: true,
loopedSlides: 5, // looped slides should be the same
//spaceBetween: 10,
//observer: true, //swiperswiper
//observeParents: true, //swiperswiper
observer: true, //swiperswiper
observeParents: true, //swiperswiper
// autoplay: {
// //
// delay: 2000,
@ -121,11 +125,14 @@ export default {
.slide-1 {
width: 100%;
overflow: hidden;
.bigimg {
width: 100%;
height: 100%;
}
img {
width: 1360px;
height: auto;
object-fit: cover;
width: 100%;
height: 100%;
// object-fit: cover;
}
}
}
@ -137,10 +144,14 @@ export default {
border: 3px solid transparent;
overflow: hidden;
box-sizing: border-box;
display: flex;
align-items: center;
img {
width: 320px;
height: auto;
object-fit: cover;
width: 100%;
height: 100%;
//object-fit: cover;
}
}
@ -155,14 +166,38 @@ export default {
color: @color-text-primary;
}
}
.nopic {
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white,
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
width: 40px;
height: 40px;
border-radius: 30px;
position: absolute;
top: 50%;
transform: translateY(-50%);
background-color: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
img {
object-fit: fill;
width: 100% !important;
height: 100% !important;
align-items: center;
font-size: 30px;
color: #fff;
text-align: center;
line-height: 60px;
}
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white,
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
background-size: 45% 45%;
}
.gallery-thumbs {
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white,
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
top: 60%;
}
}
}

@ -0,0 +1,134 @@
<template>
<!-- banner区域 -->
<div class="banner">
<div class="wrapper">
<div class="swiper-box" style="height: 500px" v-if="childDataList.length">
<!-- swiper1 -->
<swiper :options="swiperOptionTop" class="gallery-top" ref="swiperTop">
<swiper-slide class="" v-for="item in childDataList" :key="item.id">
<img :src="item.path" alt="" style="width: 100%" />
</swiper-slide>
<div
class="swiper-button-next swiper-button-white"
slot="button-next"
></div>
<div
class="swiper-button-prev swiper-button-white"
slot="button-prev"
></div>
</swiper>
<!-- swiper2 Thumbs -->
<swiper
:options="swiperOptionThumbs"
class="gallery-thumbs"
ref="swiperThumbs"
>
<swiper-slide class="" v-for="item in childDataList" :key="item.id">
<img :src="item.path" alt="" style="height: 100%; width: 100%" />
</swiper-slide>
</swiper>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
terminalPhoto: {
type: Array,
default: () => [],
},
},
data() {
return {
childDataList: [],
swiperOptionTop: {
loop: true,
loopedSlides: 5, // looped slides should be the same
spaceBetween: 10,
observer: true, //swiperswiper
observeParents: true, //swiperswiper
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
},
swiperOptionThumbs: {
loop: true,
loopedSlides: 5, // looped slides should be the same
spaceBetween: 10,
centeredSlides: true,
slidesPerView: "auto",
touchRatio: 0.2,
slideToClickedSlide: true,
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
},
};
},
watch: {
terminalPhoto: {
handler(val) {
console.log("dataObj deep change", val);
this.childDataList = val;
console.log(this.childDataList);
},
deep: true, //
immediate: true, //
},
},
methods: {},
mounted() {
this.$nextTick(() => {
const swiperTop = this.$refs.swiperTop.swiper;
const swiperThumbs = this.$refs.swiperThumbs.swiper;
swiperTop.controller.control = swiperThumbs;
swiperThumbs.controller.control = swiperTop;
});
},
};
</script>
<style lang="less" scoped>
.banner {
.wrapper {
width: 100%;
//margin: 300px auto;
}
}
.swiper-container {
background-color: #fff;
}
swiper-slide {
img {
width: 100%;
height: 100%;
}
}
.swiper-slide {
background-size: cover;
background-position: center;
}
.gallery-top {
height: 80% !important;
width: 100%;
}
.gallery-thumbs {
height: 20% !important;
box-sizing: border-box;
padding: 10px 0;
}
.gallery-thumbs .swiper-slide {
width: 25%;
height: 100%;
opacity: 0.4;
}
.gallery-thumbs .swiper-slide-active {
opacity: 1;
}
</style>

@ -4,20 +4,17 @@
:title="title"
:visible.sync="isShow"
:close-on-click-modal="false"
width="40%"
width="470px"
>
<el-form
label-position="left"
ref="formInfo"
label-width="100px"
label-width="80px"
:rules="rules"
:model="formdata"
>
<el-form-item label="名称:" prop="name">
<el-input
v-model="formdata.name"
autocomplete="off"
></el-input>
<el-input v-model="formdata.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="时间:" prop="time">
<el-time-picker
@ -26,12 +23,13 @@
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
value-format="HH:mm:ss">
value-format="HH:mm:ss"
>
</el-time-picker>
</el-form-item>
<el-form-item label="间隔:" prop="span">
<!-- <el-input v-model="formdata.span" autocomplete="off" type="number"></el-input> -->
<el-input-number v-model="formdata.span" :min="1" ></el-input-number>
<el-input-number v-model="formdata.span" :min="1"></el-input-number>
</el-form-item>
<el-form-item label="备注:" prop="remark">
<el-input v-model="formdata.remark" autocomplete="off"></el-input>
@ -47,53 +45,45 @@
import { addScheduleRulel, updateScheduleRulel } from "@/utils/api/index";
export default {
props: {
title:String
title: String,
},
data() {
return {
isShow: false,
formdata: {},
rules: {
name: [
{ required: true, message: "请输入名称", trigger: "blur" },
],
time: [
{ required: true, message: "请选择时间", trigger: "blur" },
],
span: [
{ required: true, message: "请输入间隔", trigger: "blur", },
],
remark: [
{ required: true, message: "请输入备注", trigger: "blur", },
],
}
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
time: [{ required: true, message: "请选择时间", trigger: "blur" }],
span: [{ required: true, message: "请输入间隔", trigger: "blur" }],
remark: [{ required: true, message: "请输入备注", trigger: "blur" }],
},
};
},
methods: {
//
getdataform(val){
console.log(val)
if (val==null) {
return this.formdata = {}
}
this.formdata = val
this.$set(this.formdata,'time',[val.startTime, val.endTime])
getdataform(val) {
console.log(val);
if (val == null) {
return (this.formdata = {});
}
this.formdata = val;
this.$set(this.formdata, "time", [val.startTime, val.endTime]);
},
//
submitForm() {
this.$refs.formInfo.validate((valid) => {
if (valid) {
this.formdata.startTime=this.formdata.time[0]
this.formdata.endTime=this.formdata.time[1]
delete this.formdata.time
this.formdata.startTime = this.formdata.time[0];
this.formdata.endTime = this.formdata.time[1];
delete this.formdata.time;
if (this.title == "新增") {
let formArr=[]
formArr.push(this.formdata)
let formArr = [];
formArr.push(this.formdata);
addScheduleRulel({ list: formArr })
.then((res) => {
this.isShow = false
this.isShow = false;
this.$message.success("添加成功");
this.$parent.deviceList()
this.$parent.deviceList();
})
.catch((err) => {
this.$message.error("添加失败");
@ -101,9 +91,9 @@ export default {
} else {
updateScheduleRulel(this.formdata)
.then((res) => {
this.isShow = false
this.isShow = false;
this.$message.success("修改成功");
this.$parent.deviceList()
this.$parent.deviceList();
})
.catch((err) => {
this.$message.error("修改失败");
@ -116,15 +106,12 @@ export default {
});
},
display() {
this.isShow = true
this.isShow = true;
},
hide() {
this.isShow = false
}
},
mounted() {
this.isShow = false;
},
},
mounted() {},
};
</script>

@ -2,7 +2,8 @@
<el-dialog
class="addLineDialog"
:title="lineDialogTitle"
:visible.sync="lineDialog"
:visible.sync="isShow"
:close-on-click-modal="false"
width="420px"
>
<el-form
@ -10,16 +11,16 @@
label-width="92px"
ref="formLineInfo"
:rules="rules"
:model="lineForm"
:model="formdata"
>
<el-form-item label="单位:" prop="bsManufacturer">
<el-input
v-model="lineForm.bsManufacturer"
v-model="formdata.bsManufacturer"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item label="DY等级" prop="dyLevel">
<el-select v-model="lineForm.dyLevelid" placeholder="请选择电压等级">
<el-select v-model="formdata.dyLevelid" placeholder="请选择电压等级">
<el-option
v-for="items in dyOptions"
:key="items.id"
@ -29,11 +30,11 @@
</el-select>
</el-form-item>
<el-form-item label="线路名称:" prop="name">
<el-input v-model="lineForm.name" autocomplete="off"></el-input>
<el-input v-model="formdata.name" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="closeDialog(0)"> </el-button>
<el-button @click="isShow = false"> </el-button>
<el-button type="primary" @click="submitForm()"> </el-button>
</div>
</el-dialog>
@ -47,24 +48,13 @@ import {
export default {
props: {
lineDialog: {
type: Boolean,
},
lineDialogTitle: {
type: String,
default: "新增",
},
formItem: {
type: Object,
default: function () {
return {};
},
},
lineDialogTitle: String,
},
data() {
return {
lineForm: {},
isShow: false,
formdata: {},
dyOptions: "",
rules: {
bsManufacturer: [
@ -72,7 +62,6 @@ export default {
],
dyLevelid: [
{ required: true, message: "请选择DY等级", trigger: "blur" },
{ type: "number", message: "DY等级数字值" },
],
name: [
{
@ -82,52 +71,45 @@ export default {
},
],
},
//
formArr: [],
};
},
methods: {
//
getdataform(val) {
console.log(val);
if (val == null) {
return (this.formdata = {});
}
this.formdata = val;
this.$set(this.formdata);
},
//
submitForm() {
this.$refs.formLineInfo.validate((valid) => {
if (valid) {
console.log(this.lineForm);
let formObj = {
bsManufacturer: this.lineForm.bsManufacturer,
dyLevelid: this.lineForm.dyLevelid,
name: this.lineForm.name,
};
this.formArr.push(formObj);
console.log(this.formArr);
//
if (this.lineDialogTitle == "新增") {
addLineJoggle({ list: this.formArr })
let formArr = [];
formArr.push(this.formdata);
console.log(formArr);
addLineJoggle({ list: formArr })
.then((res) => {
console.log(res);
this.$emit("lineDialogClose", 1); //
this.formArr = [];
this.isShow = false;
this.$message.success("添加成功");
this.$parent.lineList();
})
.catch((err) => {
console.log(err); //
this.$message.error("添加失败");
});
} else if (this.lineDialogTitle == "修改") {
let changeformObj = {
bsManufacturer: this.lineForm.bsManufacturer,
dyLevelid: this.lineForm.dyLevelid,
name: this.lineForm.name,
id: this.lineForm.id,
};
updateLineJoggle(changeformObj)
} else {
updateLineJoggle(this.formdata)
.then((res) => {
console.log(res);
this.$emit("lineDialogClose", 1); //
this.isShow = false;
this.$message.success("修改成功");
this.$parent.lineList();
})
.catch((err) => {
console.log(err); //
this.$message.error("修改失败");
});
}
@ -137,29 +119,14 @@ export default {
}
});
},
//
closeDialog(flag) {
this.$refs.formLineInfo.resetFields();
this.$emit("lineDialogClose", flag);
display() {
this.isShow = true;
},
},
mounted() {
console.log("打印传过来的对象", this.formItem);
console.log("打印传过来的对象", this.formItem.bsManufacturer);
this.lineForm = JSON.parse(JSON.stringify(this.formItem));
},
watch: {
formItem: {
handler(newVal, oldVal) {
//
this.$nextTick(() => {
this.lineForm = JSON.parse(JSON.stringify(this.formItem));
});
},
immediate: true,
deep: true,
hide() {
this.isShow = false;
},
},
created() {
getdyListJoggle().then((res) => {
console.log(res);

@ -5,9 +5,6 @@
<el-button type="primary" icon="el-icon-plus" @click="handleAddLine()"
>新增</el-button
>
<!-- <el-button type="primary" @click="handleResive()"></el-button>
<el-button type="primary" @click="handleDelete()"></el-button> -->
</div>
<div class="lineTable">
<el-table
@ -85,10 +82,8 @@
</div>
<!-- 新增线路 -->
<add-lineDialog
:lineDialog="lineDialog"
:lineDialogTitle="lineDialogTitle"
:formItem="formLineInfo"
@lineDialogClose="lineDialogClose"
ref="addlineDialogref"
></add-lineDialog>
</div>
</template>
@ -103,37 +98,32 @@ export default {
data() {
return {
lineDialogTitle: "", //
lineDialog: false,
formLineInfo: {}, //
lineTableData: [],
//multipleSelection: [], //
//
deleteArr: [],
page: 1, //
pageSize: 10, //
total: 0, //
};
},
created() {
this.lineList();
},
methods: {
//线
lineList(page, pageSize) {
lineList() {
getLineListJoggle({
pageindex: page,
pagesize: pageSize,
pageindex: this.page,
pagesize: this.pageSize,
})
.then((res) => {
console.log(res);
this.lineTableData = res.data.list;
this.total = res.data.total;
})
.catch((err) => {
console.log(err); //
});
.catch((err) => {});
},
//
handleRowClick(row, column, event) {
this.$refs.multipleTable.toggleRowSelection(row);
// console.log(column, row, event);
},
//
handleSelectionChange(val) {
@ -142,66 +132,45 @@ export default {
//
handleAddLine() {
this.lineDialog = true;
this.lineDialogTitle = "新增";
this.$refs.addlineDialogref.display();
this.$refs.addlineDialogref.getdataform(null);
},
//handleResive 线
handleResive(data) {
console.log(data);
this.lineDialogTitle = "修改";
this.formLineInfo = Object.assign({}, data);
this.lineDialog = true;
},
//
lineDialogClose(flag) {
if (flag) {
//
this.lineList(this.page, this.pageSize);
}
this.lineDialog = false;
this.formLineInfo = {};
this.$refs.addlineDialogref.display();
this.$refs.addlineDialogref.getdataform(data);
},
//
handleDelete(data) {
console.log(data);
this.deleteArr.push({
let deleteArr = [];
deleteArr.push({
id: data.id,
});
console.log(this.deleteArr);
this.$confirm("确定要删除记录吗,同时删除关联关系?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
//
deleteLineJoggle({ list: this.deleteArr }).then((res) => {
console.log(res);
this.lineList(this.page, this.pageSize);
});
this.$message({
type: "success",
message: "删除成功!",
deleteLineJoggle({ list: deleteArr }).then((res) => {
this.lineList(); //
});
this.$message({ type: "success", message: "删除成功!" });
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
this.$message({ type: "info", message: "已取消删除" });
});
},
//
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.page = val;
this.lineList(val, this.pageSize);
this.lineList();
},
},
created() {
this.lineList(this.page, this.pageSize);
},
};
</script>
<style lang="less">

@ -1,81 +0,0 @@
<template>
<el-row :gutter="10">
<el-col :span="12">
<el-tree :data="treeData" :props="props" node-key="id" default-expand-all @node-click="handleNodeClick" ref="tree"></el-tree>
</el-col>
<el-col :span="12">
<div v-if="selectedNode">
<p>{{ selectedNode.label }} 的数据:</p>
<pre>{{ JSON.stringify(selectedNode.data, null, 2) }}</pre>
</div>
</el-col>
</el-row>
</template>
<script>
export default {
data() {
return {
treeData: [
{
id: 1,
label: '节点1',
children: [
{
id: 2,
label: '子节点1',
data: { name: '节点1-子节点1' }
},
{
id: 3,
label: '子节点2',
data: { name: '节点1-子节点2' }
}
]
},
{
id: 4,
label: '节点2',
children: [
{
id: 5,
label: '子节点3',
data: { name: '节点2-子节点3' }
},
{
id: 6,
label: '子节点4',
data: { name: '节点2-子节点4' }
}
]
}
],
props: {
children: 'children',
label: 'label'
},
selectedNode: null
};
},
methods: {
handleNodeClick(node) {
this.selectedNode = node.data || null;
},
selectNodeById(id) {
const node = this.$refs.tree.getNode(id);
if (node) {
this.$refs.tree.setCurrentKey(node.key);
this.selectedNode = node.data || null;
}
}
},
mounted() {
//
const firstNode = this.treeData[0];
if (firstNode) {
this.$refs.tree.setCurrentKey(firstNode.id);
this.selectedNode = firstNode.children && firstNode.children.length ? firstNode.children[0].data : null;
}
}
};
</script>

@ -76,13 +76,12 @@ import {
getTerminalPhotoListJoggle,
} from "@/utils/api/index";
import carouselChart from "../components/carouselChart.vue";
import treeSide from "./components/treeSide.vue";
import picturemain from "./picturemain.vue"; //
import paramArea from "./paramArea.vue"; //
export default {
components: {
treeSide,
picturemain,
paramArea,
carouselChart,
@ -104,6 +103,7 @@ export default {
channelValue: "",
terminalPhoto: [], //
dateValue: "", //
nopicPath: require("@/assets/img/noPhoto.png"),
};
},
watch: {},
@ -200,8 +200,16 @@ export default {
})
.then((res) => {
console.log(res);
this.terminalPhoto = res.data.list;
if (res.data.list.length == 0) {
this.terminalPhoto = [
{
path: this.nopicPath,
},
];
//alert("");
} else {
this.terminalPhoto = res.data.list;
}
console.log(this.terminalPhoto);
})
.catch((err) => {
@ -216,7 +224,6 @@ export default {
return i.value === val;
});
console.log(channelObj);
this.getTerminalPhotoList(val, this.dateValue, channelObj.termid);
},
},

Loading…
Cancel
Save