| | |
| | | <template>
|
| | | <div class="all" ref="curPage">
|
| | | <div class="general-set">
|
| | | <div class="general-seting">
|
| | | <div class="general-center" ref="left">
|
| | | <div
|
| | | class="menu-item"
|
| | |
| | | v-for="(item, i) in menuArr"
|
| | | :key="i"
|
| | | >
|
| | | <span class="iconfont" :style="`font-size:${item.size}px;`">{{ item.icon }}</span>
|
| | | <span class="iconfont" :style="`font-size:${item.size}px;`">{{
|
| | | item.icon
|
| | | }}</span>
|
| | | <span class="title">{{ item.name }}</span>
|
| | | </div>
|
| | | </div>
|
| | | <div class="general-right">
|
| | | <div class="lang" v-if="activePage == 0">
|
| | | <!-- <div class="lang" v-if="activePage == 0">
|
| | | <div class="bar">
|
| | | <span class="name">设备ID</span>
|
| | | <span class="desc">{{ deviceInfo.server_id }}</span>
|
| | |
| | | <span class="name">运行时间</span>
|
| | | <span class="desc">{{ deviceInfo.runningTime }}</span>
|
| | | </div>
|
| | | </div>
|
| | | <div class="lang" v-if="activePage == 1">
|
| | | </div> -->
|
| | | <div class="lang" v-if="activePage == 0">
|
| | | <div class="min-dur">
|
| | | <div class="title">抓拍前录像时长</div>
|
| | | <div class="entity">
|
| | |
| | | v-model="fakeObj.min"
|
| | | id="cut_min_duration"
|
| | | :min="5 / 1.2"
|
| | | :max="100" :step="5 / 1.2"
|
| | | :max="100"
|
| | | :step="5 / 1.2"
|
| | | @input="min_len = min_video_len"
|
| | | show-stops
|
| | | :show-tooltip="true"
|
| | |
| | | v-model="min_len"
|
| | | @change="fakeObj.min = +(min_len / 1.2)"
|
| | | controls-position="right"
|
| | | :min="5" :step="5"
|
| | | :max="120" step-strictly
|
| | | :min="5"
|
| | | :step="5"
|
| | | :max="120"
|
| | | step-strictly
|
| | | size="small"
|
| | | ></el-input-number
|
| | | > s
|
| | |
| | | id="cut_max_duration"
|
| | | :min="5 / 1.2"
|
| | | @input="max_len = max_video_len"
|
| | | :max="100" :step="5 / 1.2"
|
| | | :max="100"
|
| | | :step="5 / 1.2"
|
| | | show-stops
|
| | | :format-tooltip="formatTooltip"
|
| | | :show-tooltip="true"
|
| | |
| | | v-model="max_len"
|
| | | @change="fakeObj.max = +(max_len / 1.2)"
|
| | | controls-position="right"
|
| | | :min="5" :step="5" step-strictly
|
| | | :min="5"
|
| | | :step="5"
|
| | | step-strictly
|
| | | :max="120"
|
| | | size="small"
|
| | | ></el-input-number
|
| | |
| | |
|
| | | <div class="save-btn" @click="submitAlarm">保存</div>
|
| | | </div>
|
| | | <div class="lang" v-if="activePage == 2">
|
| | | <div class="title">事件声音</div>
|
| | | <div class="lang" v-if="activePage == 1">
|
| | | <div class="bar title voice-title" style="border: 2px solid #fff;">事件声音</div>
|
| | | <div class="bar-group">
|
| | | <div
|
| | | class="bar"
|
| | |
| | | ref="soundBar"
|
| | | >
|
| | | <div class="left-part">
|
| | | <span
|
| | | class="icon iconfont"
|
| | | style="margin-right: 12px; color: dodgerblue"
|
| | | ></span
|
| | | >
|
| | | <span class="name">{{ item.name }}</span>
|
| | | </div>
|
| | | <div class="btns">
|
| | | <span @click="togglePlay(item, i)">
|
| | |
|
| | | <span class="iconfont" v-if="!item.isPlay" style="cursor: pointer;">{{playSpan}}</span>
|
| | | <span class="iconfont" v-else style="cursor: pointer;">{{playSpan2}}</span>
|
| | | <!-- |
| | | <i
|
| | | v-if="!item.isPlay"
|
| | | class="el-icon-video-play"
|
| | | style=""
|
| | | ></i>
|
| | | <i v-else class="el-icon-video-pause"></i>
|
| | | <i v-else class="el-icon-video-pause"></i> -->
|
| | | </span>
|
| | | <span
|
| | | class="icon iconfont"
|
| | | style="cursor: pointer; color: indianred"
|
| | | class="icon iconfont del"
|
| | | style="cursor: pointer;"
|
| | | @click="removeSound(item)"
|
| | | ></span
|
| | | >{{delspan}}</span
|
| | | >
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <el-upload
|
| | | class="upload-demo"
|
| | | drag
|
| | | action="https://jsonplaceholder.typicode.com/posts/"
|
| | | :http-request="uploadSound"
|
| | | v-if="showUpload"
|
| | | :show-file-list="false"
|
| | | >
|
| | | <i class="el-icon-upload"></i>
|
| | | <div class="el-upload__text">
|
| | | 事件声音文件拖到此处,或
|
| | | <em>点击上传</em>
|
| | | <br />仅支持mp3/wma等格式
|
| | | </div>
|
| | | </el-upload>
|
| | | <div v-if="showUpload" @click.stop >
|
| | | <el-upload
|
| | | class="upload-demo"
|
| | | drag
|
| | | action=""
|
| | | :http-request="uploadSound"
|
| | | :show-file-list="false"
|
| | | >
|
| | | <div class="info">请将声音事件文件拖拽到此处,或<span class="info-click" >点击上传</span></div>
|
| | | <div class="des" v-if="showUpload" @click.stop>仅支持mp3、wav等格式</div>
|
| | | </el-upload> |
| | | </div>
|
| | |
|
| | |
|
| | | <div class="add-group">
|
| | | <div class="add-btn">
|
| | | <span class="icon iconfont" @click.stop="showUpload = !showUpload"
|
| | |
| | | </div>
|
| | | </div>
|
| | |
|
| | | <div class="self-setting" v-if="activePage == 3">
|
| | | <div class="self-setting" v-if="activePage == 2">
|
| | | <div class="top-title">图标主题</div>
|
| | |
|
| | | <div class="icon-bar" style="cursor: pointer" @click="selectIcons(0)">
|
| | |
| | | class="entity-img"
|
| | | v-for="(item, i) in realIconList"
|
| | | :key="i"
|
| | | @click="colorCard(item.color)"
|
| | | >
|
| | | <img :src="item.url" alt="" />
|
| | | </div>
|
| | |
| | | <script>
|
| | | import { saveAlarmConfig, getDevInfo } from "@/api/system";
|
| | | import { uploadSound, getSoundList, deleteSound } from "@/api/event";
|
| | | // import config from "../../../../package.json";
|
| | |
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | playSpan:"\ue6e8",
|
| | | playSpan2:"\ue6e8",
|
| | | delspan:"\ue6e8",
|
| | | warnSpn:"\ue6e8",
|
| | | curPlayingIndex: null,
|
| | | showUpload: false,
|
| | | activeIcons: 0,
|
| | |
| | | max: 0,
|
| | | },
|
| | | menuArr: [
|
| | | { name: "设备信息", icon: "\ue933" ,size:18},
|
| | | { name: "事件录像时长", icon: "\ue6f3" ,size:20},
|
| | | { name: "事件声音", icon: "\ue6e1" ,size:16},
|
| | | { name: "个性化设置", icon: "\ue756" ,size:18},
|
| | | // { name: "设备信息", icon: "\ue933" ,size:18},
|
| | | { name: "事件录像时长", icon: "\ue6f3", size: 20 },
|
| | | { name: "事件声音", icon: "\ue6e1", size: 16 },
|
| | | { name: "个性化设置", icon: "\ue756", size: 18 },
|
| | | ],
|
| | | soundList: [],
|
| | | activePage: 0,
|
| | |
| | | },
|
| | | isPlay: false,
|
| | | realIconList: [
|
| | | { url: "/images/settings/日志管理.png" },
|
| | | { url: "/images/settings/实时监控.png" },
|
| | | { url: "/images/settings/数据可视化.png" },
|
| | | { url: "/images/settings/日志管理.png",color:"green" },
|
| | | { url: "/images/settings/实时监控.png",color:"yellow" },
|
| | | { url: "/images/settings/数据可视化.png",color:"pink" },
|
| | | ],
|
| | | flatIconList: [
|
| | | { url: "/images/settings/数据推送.png" },
|
| | |
| | | _this.curPlayingIndex = null;
|
| | | }
|
| | | });
|
| | | const url = localStorage.getItem("backgroundPic")
|
| | | const url = localStorage.getItem("backgroundPic");
|
| | | if (url) {
|
| | | const arr = url.split("/")
|
| | | this.activeBg= this.tableBGList.findIndex((x) => {
|
| | | return x.url.includes(arr[arr.length-1])
|
| | | })
|
| | | }else{
|
| | | this.activeBg= 0
|
| | | const arr = url.split("/");
|
| | | this.activeBg = this.tableBGList.findIndex((x) => {
|
| | | return x.url.includes(arr[arr.length - 1]);
|
| | | });
|
| | | } else {
|
| | | this.activeBg = 0;
|
| | | }
|
| | | const e = this.$refs.curPage
|
| | | const e = this.$refs.curPage;
|
| | | e.addEventListener("click", (e) => {
|
| | | if (this.showUpload) {
|
| | | this.showUpload = false;
|
| | |
| | | });
|
| | | },
|
| | | beforeDestroy() {
|
| | | this.$refs.curPage.removeEventListener("click")
|
| | | this.$refs.curPage.removeEventListener("click");
|
| | | },
|
| | | computed: {
|
| | | min_video_len() {
|
| | |
| | | return day + "天 " + hour + "小时 " + minute + "分 " + second + "秒";
|
| | | },
|
| | | uploadSound(params) {
|
| | | debugger
|
| | | let param = new FormData();
|
| | | param.append("file", params.file);
|
| | | uploadSound(param).then(
|
| | | (res) => {
|
| | | this.$message.success("上传成功");
|
| | | this.showUpload = false
|
| | | this.showUpload = false;
|
| | | this.getSounds();
|
| | | },
|
| | | (err) => {
|
| | |
| | | this.activeIcons = i;
|
| | | },
|
| | | removeSound(item) {
|
| | | this.$confirm("您是否确认删除事件声音", "删除事件声音", {
|
| | | confirmButtonText: "确定",
|
| | | cancelButtonText: "取消",
|
| | | type: "warning",
|
| | | }).then(() => {
|
| | | const h = this.$createElement;
|
| | | const icon = |
| | | this.$msgbox({
|
| | | message: h('div', {style: 'display: flex; flex-direction: column; justify-content: center; align-items: center;'}, [
|
| | | h('span',{class:'iconfont warn-icon'},`${this.warnSpn}`),
|
| | | h('span', {class:'warn-title'}, '删除事件声音 '),
|
| | | h('span', {class:'warn-dec'}, '您是否确认删除事件声音?')
|
| | | ]),
|
| | | showCancelButton: true,
|
| | | confirmButtonText: '确定',
|
| | | cancelButtonText: '取消',
|
| | | }).then(() => {
|
| | | deleteSound({
|
| | | id: item.id,
|
| | | }).then(
|
| | |
| | | },
|
| | | clickSound(item, i) {
|
| | | this.$refs["soundBar"].forEach((x) => {
|
| | | x.style.backgroundColor = "rgba(248, 248, 248, 1)";
|
| | | x.style = "border: 2px solid #FFF;";
|
| | | });
|
| | | this.$refs["soundBar"][i].style.backgroundColor =
|
| | | "rgba(233, 233, 233, 1)";
|
| | | this.$refs["soundBar"][i].style =
|
| | | "border: 2px solid #4E94FF;";
|
| | | },
|
| | | submitAlarm() {
|
| | | saveAlarmConfig({
|
| | |
| | | }
|
| | | });
|
| | | },
|
| | | colorCard(color) {
|
| | | document.documentElement.style.setProperty('--colorCard',`${color}`)
|
| | | localStorage.setItem('--colorCard',`${color}`)
|
| | | }
|
| | | },
|
| | | };
|
| | | </script>
|
| | | <style lang="scss">
|
| | |
|
| | | <style scoped lang="scss">
|
| | |
|
| | | .all {
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .general-set {
|
| | | .general-seting {
|
| | | height: 100%;
|
| | | display: flex;
|
| | | flex-direction: row;
|
| | |
| | | box-sizing: border-box;
|
| | | .general-center {
|
| | | height: 100%;
|
| | | width: 280px;
|
| | | width: 300px;
|
| | | overflow: auto;
|
| | | box-sizing: border-box;
|
| | | flex-shrink: 0;
|
| | | padding: 10px;
|
| | | border-right: 5px solid #f8f8f8;
|
| | | padding: 24px 10px;
|
| | | border-right: 4px solid #F2F2F7;
|
| | | background-color: #FBFAFF;
|
| | |
|
| | | |
| | |
|
| | | .menu-item {
|
| | | background-color: #f8f8f8;
|
| | | height: 50px;
|
| | | margin-bottom: 10px;
|
| | | border-radius: 10px;
|
| | | line-height: 50px;
|
| | | |
| | | height: 56px;
|
| | | margin-bottom: 4px;
|
| | | border-radius: 8px;
|
| | | line-height: 56px;
|
| | | box-sizing: border-box;
|
| | | font-size: 14px;
|
| | | padding: 0 20px;
|
| | | font-size: 16px;
|
| | | padding-left: 15px;
|
| | | cursor: pointer;
|
| | | display: flex;
|
| | | .iconfont {
|
| | | margin-right: 8px;
|
| | | margin: 0 17px;
|
| | | font-size: 24px !important;
|
| | | }
|
| | | .title {
|
| | | font-size: 15px;
|
| | | font-size: 16px;
|
| | | font-weight: 700;
|
| | | }
|
| | | }
|
| | | .menu-item-active {
|
| | | background-color: #3d68e1;
|
| | | color: white;
|
| | | background-color: var(--colorCard) !important;
|
| | | color: white !important;
|
| | | }
|
| | | .menu-item:hover {
|
| | | background-color: #3d68e1;
|
| | | color: white;
|
| | | }
|
| | | /* .menu-item:hover {
|
| | | background-color: #F2F2F7;
|
| | | } */
|
| | | }
|
| | | .general-right {
|
| | | flex: 1;
|
| | |
| | | overflow: auto;
|
| | | box-sizing: border-box;
|
| | |
|
| | | padding: 20px 40px;
|
| | | padding: 10px 18px 10px 10px;
|
| | | .el-form-item.is-required:not(.is-no-asterisk)
|
| | | > .el-form-item__label:before,
|
| | | .el-form-item.is-required:not(.is-no-asterisk)
|
| | |
| | | text-align: left;
|
| | | margin-bottom: 5px;
|
| | | }
|
| | | .voice-title {
|
| | | justify-content: center !important;
|
| | | font-weight: 700 ;
|
| | | }
|
| | | .bar-group {
|
| | | overflow: auto;
|
| | | height: 100%;
|
| | | height: 520px;
|
| | | }
|
| | | .bar {
|
| | | height: 44px;
|
| | | height: 48px;
|
| | | background-color: #f8f8f8;
|
| | | border-radius: 10px;
|
| | | line-height: 44px;
|
| | | line-height: 48px;
|
| | | box-sizing: border-box;
|
| | | padding: 0 30px 0 20px;
|
| | | padding: 0 20px 0 20px;
|
| | | font-weight: 700;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 10px;
|
| | | .left-part {
|
| | | .icon {
|
| | | color: rgba(191, 191, 191, 1);
|
| | | font-size: 16px;
|
| | | margin-right: 5px;
|
| | | }
|
| | | }
|
| | | margin-bottom: 2px;
|
| | | border: 2px solid #fff;
|
| | | .name {
|
| | | font-size: 15px;
|
| | | }
|
| | | font-size: 14px;
|
| | | } |
| | | .btns {
|
| | | width: 50px;
|
| | | width: 52px;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | color: rgba(191, 191, 191, 1);
|
| | | .el-icon-video-pause {
|
| | | /* .el-icon-video-pause {
|
| | | cursor: pointer;
|
| | | font-size: 23px;
|
| | | vertical-align: middle;
|
| | |
| | | font-size: 23px;
|
| | | vertical-align: middle;
|
| | | color: #409eff;
|
| | | } */
|
| | | span {
|
| | | color: #333
|
| | | }
|
| | | .del:hover {
|
| | | color:#FC4958;
|
| | | }
|
| | | }
|
| | | .desc {
|
| | |
| | | color: rgba(134, 134, 134, 1);
|
| | | }
|
| | | }
|
| | | .bar:hover {
|
| | | background-color: rgba(233, 233, 233, 1);
|
| | | }
|
| | | /* .bar:hover {
|
| | | border: 2px solid #4E94FF !important;
|
| | | } */
|
| | | .add-group {
|
| | | margin: 10px auto;
|
| | | margin: 54px auto;
|
| | | width: fit-content;
|
| | | }
|
| | | .upload-demo {
|
| | |
| | | transition: all 0.5s;
|
| | | position: absolute;
|
| | | bottom: -40px;
|
| | |
|
| | | left: calc(50% - 145px);
|
| | | .el-upload-dragger {
|
| | | width: 290px;
|
| | |
| | | cursor: pointer;
|
| | | width: fit-content;
|
| | | .icon {
|
| | | font-size: 32px;
|
| | | font-size: 40px;
|
| | | color: rgba(61, 104, 225, 1);
|
| | | }
|
| | | }
|
| | |
| | | margin-right: 12px;
|
| | | cursor: pointer;
|
| | | // width: 120px;
|
| | | height: 80px;
|
| | | height: 80px;
|
| | | border: 2px solid transparent;
|
| | | img {
|
| | | border-radius: 5px;
|
| | | height: 100%;
|
| | | border-radius: 5px;
|
| | | height: 100%;
|
| | | }
|
| | | }
|
| | | .bg-img:hover {
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | .v-modal {
|
| | | opacity:0.35 !important;
|
| | | border-radius: 8px !important;
|
| | | }
|
| | |
|
| | | .el-message-box {
|
| | | position: absolute;
|
| | | width: 420px;
|
| | | height: 210px;
|
| | | left: 302px;
|
| | | top: 279px;
|
| | |
|
| | | background: #FFFFFF;
|
| | | border-radius: 8px;
|
| | | }
|
| | |
|
| | | .upload-demo {
|
| | | top: 452px;
|
| | | left: 2px !important;
|
| | | width: 452px;
|
| | | height: 150px;
|
| | | background: #FFFFFF;
|
| | | box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
|
| | | border-radius: 8px;
|
| | |
|
| | | ::v-deep .el-upload-dragger {
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | overflow: visible;
|
| | | width: 340px;
|
| | | height: 72px;
|
| | | margin-top:30px ;
|
| | | }
|
| | |
|
| | |
|
| | | .info {
|
| | |
|
| | | font-weight: bold;
|
| | | font-size: 14px;
|
| | | color: #828282;
|
| | | }
|
| | |
|
| | | .info-click {
|
| | | color: #4E94FF;
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | .des {
|
| | | position: absolute;
|
| | | top: 78px;
|
| | | left: 109px;
|
| | | z-index: 999;
|
| | | color: #4F4F4F;
|
| | | font-weight: bold;
|
| | | font-size: 12px;
|
| | | }
|
| | |
|
| | | </style>
|
| | |
|
| | | <style lang="scss">
|
| | | .el-message-box {
|
| | | .warn-icon {
|
| | | color:rgba(254, 109, 104, 1) ;
|
| | | font-size: 50px;
|
| | | margin-top:26px ;
|
| | | }
|
| | | .warn-title {
|
| | | font-weight: bold;
|
| | | font-size: 16px;
|
| | | margin: 5px;
|
| | | }
|
| | | .warn-dec {
|
| | | font-weight: bold;
|
| | | font-size: 14px;
|
| | | color: #828282;
|
| | | }
|
| | | .el-message-box__btns {
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | margin-top: 10px;
|
| | | button {
|
| | | width: 175px;
|
| | | height: 40px;
|
| | | border-radius: 25px;
|
| | | span {
|
| | | font-size: 16px;
|
| | | font-weight: 700;
|
| | | }
|
| | | }
|
| | | button:first-child {
|
| | | background-color: #E0E0E0;
|
| | | span {
|
| | | color: #333333;
|
| | | }
|
| | | }
|
| | | button:last-child {
|
| | | background-color: #4E94FF !important;
|
| | | span { |
| | | color: #fff;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | </style>
|