| | |
| | | <div class="search-for-video-analyze"> |
| | | <div class="filter-area"> |
| | | <div class="input-area"> |
| | | <el-input |
| | | class="search-input" |
| | | size="small" |
| | | v-model="keyword" |
| | | placeholder="请输入司机、车次、机车号等关键词进行搜索" |
| | | ></el-input> |
| | | <el-date-picker |
| | | style="width: 350px" |
| | | v-model="searchTime" |
| | | type="datetimerange" |
| | | size="small" |
| | |
| | | end-placeholder="结束日期" |
| | | align="right" |
| | | ></el-date-picker> |
| | | <el-button size="small" type="primary" @click="init">搜索</el-button> |
| | | <el-input |
| | | class="search-input" |
| | | size="small" |
| | | v-model="keyword" |
| | | placeholder="请输入司机、车次、机车号等关键词" |
| | | style="width: 315px" |
| | | > |
| | | <el-button |
| | | slot="append" |
| | | icon="el-icon-search" |
| | | size="small" |
| | | @click="init" |
| | | ></el-button> |
| | | </el-input> |
| | | </div> |
| | | <div class="checked-config"> |
| | | <span style="margin-top: 3px">已选条件:</span> |
| | | <span style="margin-top: 3px; color: #425277">已筛选条件:</span> |
| | | <span |
| | | v-show="!checkedConfigs.length" |
| | | class="tip" |
| | |
| | | <span class="title">{{ config.title }}</span |
| | | > : |
| | | <span class="val" v-for="option in config.data" :key="option.id"> |
| | | <!-- <template> |
| | | <div> |
| | | |
| | | </div> |
| | | </template>--> |
| | | <span v-if="option.isChecked" class="val-show"> |
| | | {{ option.name }} |
| | | <i>、</i> |
| | |
| | | :key="index" |
| | | > |
| | | <template v-if="config.isShow"> |
| | | <div class="title">{{ config.title }}</div> |
| | | <div class="title"> |
| | | <span class="icon iconfont">{{ getIcon(config.title) }}</span> |
| | | <span>{{ config.title }}</span> |
| | | </div> |
| | | <div class="options-wrap"> |
| | | <div |
| | | class="options" |
| | |
| | | <span>{{ option.name }}</span> |
| | | </div> |
| | | <div |
| | | class="option-name" |
| | | v-show="!config.isMultCheck" |
| | | @click="checkOption(config, option)" |
| | | > |
| | |
| | | </div> |
| | | </div> |
| | | <div class="btns text-center" v-show="config.isMultCheck"> |
| | | <el-button size="mini" @click="cancleMultCheck(config)" |
| | | >取消</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | @click="checkOption(config)" |
| | | >确定</el-button |
| | | > |
| | | <el-button size="mini" @click="cancleMultCheck(config)" |
| | | >取消</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | |
| | | v-if="config.showMore" |
| | | @click="showMore(config)" |
| | | > |
| | | <span>更多</span> |
| | | <span>更多</span> |
| | | <i |
| | | :class=" |
| | | config.isShowMore |
| | | ? 'el-icon-arrow-up' |
| | | : 'el-icon-arrow-down' |
| | | ? 'el-icon-caret-top' |
| | | : 'el-icon-caret-bottom' |
| | | " |
| | | ></i> |
| | | </div> |
| | |
| | | </template> |
| | | </div> |
| | | <div class="config" v-if="showAdvance"> |
| | | <div class="title">高级选项</div> |
| | | <div class="title"> |
| | | <span class="icon iconfont">{{ "\ue793" }}</span> |
| | | <span>高级选项</span> |
| | | </div> |
| | | <div> |
| | | <el-menu |
| | | class="el-menu-demo" |
| | |
| | | @change="filterSearchData" |
| | | > |
| | | <el-option value label="全部"></el-option> |
| | | <el-option :value="false" label="未关注"></el-option> |
| | | <el-option :value="true" label="已关注"></el-option> |
| | | <el-option :value="'1'" label="未关注"></el-option> |
| | | <el-option :value="'0'" label="已关注"></el-option> |
| | | </el-select> |
| | | </div> |
| | | <div> |
| | |
| | | const end = new Date(); |
| | | const start = new Date(); |
| | | start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
| | | //start.setHours(0,0,0); |
| | | picker.$emit("pick", [start, end]); |
| | | }, |
| | | }, |
| | |
| | | this.filterSearchData(); |
| | | }, |
| | | //二级查询 |
| | | filterSearchData(val) { |
| | | filterSearchData() { |
| | | let _this = this; |
| | | let query = { |
| | | KeyWord: this.keyword, |
| | |
| | | PageSize: |
| | | this.showType == "list" ? this.tablePageSize : this.tabPageSize, |
| | | IsDetail: this.showType == "list", |
| | | IsFollow: this.IsFollow ? "0" : "1", |
| | | IsFollow: this.IsFollow, |
| | | IsOperate: this.IsOperate, |
| | | }; |
| | | let filterQuerys = []; |
| | |
| | | }, |
| | | //一级查询 |
| | | init() { |
| | | if (this.checkedConfigs.length) { |
| | | this.filterSearchData(); |
| | | return; |
| | | } |
| | | let _this = this; |
| | | let query = { |
| | | KeyWord: this.keyword, |
| | |
| | | return item; |
| | | }); |
| | | } |
| | | |
| | | res.filterlst.forEach((config) => { |
| | | this.$set(config, "isShow", true); |
| | | // config.data = Object.keys(config.Node).map(key => { |
| | | // let obj = {}; |
| | | // obj.name = key; |
| | | // obj.id = config.Node[key] |
| | | // return obj |
| | | // }); |
| | | config.data = config.Node.map((item) => { |
| | | let obj = {}; |
| | | obj.name = item[0]; |
| | |
| | | config.showMore = false; |
| | | } |
| | | }); |
| | | // console.log(this.optionalConfigs); |
| | | }); |
| | | }); |
| | | }, |
| | |
| | | _this.selectedVideo = data; |
| | | _this.videoDialogVisible = true; |
| | | }, |
| | | checkFollow() {}, |
| | | checkType(type) { |
| | | this.showType = type; |
| | | this.filterSearchData(); |
| | |
| | | option.isChecked = true; |
| | | } |
| | | this.checkedConfigs.push(config); |
| | | |
| | | config.isShow = false; |
| | | config.isMultCheck = false; |
| | | if (config.IsAdvanced) { |
| | | this.showAdvance = false; |
| | | } |
| | | // this.$nextTick(() => { |
| | | // this.$set(config, 'isShow', false) |
| | | // }) |
| | | }, |
| | | |
| | | cancleMultCheck(config) { |
| | |
| | | config.data.forEach((opt) => { |
| | | opt.isChecked = false; |
| | | }); |
| | | }, |
| | | getIcon(name) { |
| | | switch (name) { |
| | | case "机车号": |
| | | return "\ue796"; |
| | | case "车次": |
| | | return "\ue795"; |
| | | case "区段/中间站": |
| | | return "\ue797"; |
| | | case "重点地段": |
| | | return "\ue78f"; |
| | | case "单位": |
| | | return "\ue794"; |
| | | case "高级选项": |
| | | return "\ue793"; |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | }, |
| | | handleSelect(key, keyPath) {}, |
| | | showMore(config) { |
| | |
| | | const disY = e.clientY - resizeEl.offsetTop; |
| | | |
| | | document.onmousemove = function (e) { |
| | | e.preventDefault(); // 移动时禁用默认事件 // 通过事件委托,计算移动的距离 |
| | | e.preventDefault(); // 移动时禁用默认事件 通过事件委托,计算移动的距离 |
| | | |
| | | const x = e.clientX - disX + (e.clientX - clientX); //这里 由于elementUI的dialog控制居中的,所以水平拉伸效果是双倍 |
| | | const y = e.clientY - disY; //比较是否小于最小宽高 |
| | |
| | | |
| | | <style lang="scss"> |
| | | .search-for-video-analyze { |
| | | //padding: 20px 30px; |
| | | //出横向滚动条 |
| | | padding: 20px 40px; |
| | | padding: 25px 33px; |
| | | background-color: #fff; |
| | | margin: 33px; |
| | | .flex-box { |
| | | display: flex; |
| | | } |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | |
| | | .el-range-editor--small .el-range-input { |
| | | font-size: 13px; |
| | | color: #7084b1; |
| | | } |
| | | .el-input__inner::placeholder { |
| | | color: #c7d0e5; |
| | | } |
| | | .el-range-editor--small .el-range-separator { |
| | | line-height: 25px; |
| | | font-size: 13px; |
| | | color: #7084b1; |
| | | } |
| | | .search-input { |
| | | width: 408px; |
| | | } |
| | | .el-date-editor { |
| | | margin: 0 20px; |
| | | margin-right: 20px; |
| | | } |
| | | .el-input-group__append, |
| | | .el-input-group__prepend { |
| | | background-color: #2d52d7; |
| | | color: #fff; |
| | | border: 1px solid #2d52d7; |
| | | padding: 0 16px; |
| | | |
| | | white-space: nowrap; |
| | | font-size: 18px; |
| | | } |
| | | } |
| | | .checked-config { |
| | |
| | | margin-bottom: 10px; |
| | | position: relative; |
| | | .config-item { |
| | | padding-left: 10px; |
| | | margin: 0 0 5px 5px; |
| | | background: #f3f3f3; |
| | | border: 1px solid #ddd; |
| | | padding-left: 8px; |
| | | margin: 0 5px; |
| | | background: #cfd5e3; |
| | | .remove { |
| | | cursor: pointer; |
| | | padding: 5px 5px; |
| | | margin-left: 5px; |
| | | background: #e1e4ed; |
| | | } |
| | | &:hover { |
| | | background: #fff; |
| | | border-color: #3d68e1; |
| | | outline: 1px solid #2d52d7; |
| | | .remove { |
| | | background: #3d68e1; |
| | | color: #fff; |
| | |
| | | display: flex; |
| | | flex-wrap: no-wrap; |
| | | cursor: pointer; |
| | | border-bottom: 1px solid #ddd; |
| | | border-bottom: 1px solid #d7dce8; |
| | | |
| | | .title { |
| | | padding: 10px 20px; |
| | | width: 100px; |
| | | width: 110px; |
| | | text-align: left; |
| | | background: #f3f3f3; |
| | | color: rgb(133, 133, 133); |
| | | background: #ecf0fc; |
| | | color: #2d52d7; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | .icon { |
| | | font-size: 14px; |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | .options-wrap { |
| | | flex: 1; |
| | |
| | | padding: 10px 20px; |
| | | height: 20px; |
| | | line-height: 20px; |
| | | &:hover { |
| | | color: #6486e7; |
| | | .option-name { |
| | | padding: 0 8px; |
| | | color: rgba(66, 82, 119, 1); |
| | | } |
| | | &:hover > .option-name { |
| | | outline: 1px solid #a8b7ee; |
| | | padding: 0 8px; |
| | | background: #e2e7f9; |
| | | color: #2d52d7; |
| | | } |
| | | .el-checkbox { |
| | | padding-right: 6px; |
| | |
| | | } |
| | | } |
| | | .btns { |
| | | margin: 20px 0; |
| | | margin: 12px 0; |
| | | .el-button--mini { |
| | | padding: 6px |
| | | 17px |
| | | ; |
| | | font-size: 12px; |
| | | border-radius: 4px |
| | | ; |
| | | } |
| | | } |
| | | } |
| | | .right-btns { |
| | |
| | | user-select: none; |
| | | justify-content: flex-end; |
| | | .more { |
| | | margin-top: 6px; |
| | | margin-top: 7px; |
| | | padding: 0px 6px; |
| | | border: 1px solid #ccc; |
| | | |
| | | margin-right: 10px; |
| | | width: 44px; |
| | | height: 26px; |
| | | line-height: 26px; |
| | | width: 46px; |
| | | height: 25px; |
| | | line-height: 25px; |
| | | border-radius: 2px; |
| | | background: #edeff2; |
| | | &:hover { |
| | | color: #6486e7; |
| | | } |
| | | } |
| | | .multCheck { |
| | | margin-top: 6px; |
| | | margin-top: 7px; |
| | | width: 44px; |
| | | height: 26px; |
| | | line-height: 26px; |
| | | padding: 0px 6px; |
| | | border: 1px solid #ccc; |
| | | height: 23px; |
| | | line-height: 23px; |
| | | padding: 0px 12px; |
| | | border: 1px solid #d7dce7; |
| | | border-radius: 2px; |
| | | &:hover { |
| | | color: #7695ec; |
| | | border-color: #7695ec; |
| | | } |
| | | &.checked { |
| | | color: #409eff; |
| | | border-color: #409eff; |
| | | } |
| | | color: #ee4e6e; |
| | | // &:hover { |
| | | // color: #7695ec; |
| | | // border-color: #7695ec; |
| | | // } |
| | | // &.checked { |
| | | // color: #409eff; |
| | | // border-color: #409eff; |
| | | // } |
| | | } |
| | | } |
| | | .el-menu.el-menu--horizontal { |
| | |
| | | } |
| | | .config-submenu { |
| | | .el-menu--horizontal { |
| | | //max-width: 700px; |
| | | //overflow-x: auto; |
| | | left: 20px !important; |
| | | & > ul { |
| | | flex-wrap: wrap; |
| | |
| | | margin: 0 -30px; |
| | | margin-bottom: -30px; |
| | | padding: 0; |
| | | // .el-row { |
| | | // display: flex; |
| | | // flex-wrap: wrap; |
| | | // } |
| | | .el-table__row { |
| | | cursor: pointer; |
| | | } |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: contain; |
| | | // width: 100%; |
| | | // max-height: 200px; |
| | | // border-radius: 3px; |
| | | } |
| | | } |
| | | .video-info { |
| | |
| | | top: -22px; |
| | | } |
| | | .dialog-video { |
| | | // z-index: 2020 !important; |
| | | .el-dialog { |
| | | width: 1180px; |
| | | // height: 893px; |
| | | } |
| | | .el-dialog__body { |
| | | background: #eaeaea; |
| | | padding: 0; |
| | | // height: 100%; |
| | | height: inherit; |
| | | } |
| | | .el-dialog__header { |
| | |
| | | .window-view { |
| | | width: 100%; |
| | | height: auto; |
| | | // height: 100%; |
| | | // min-height: 684px; |
| | | overflow: auto; |
| | | z-index: 2000; |
| | | } |