From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 20 七月 2022 15:05:58 +0800 Subject: [PATCH] 修复国标配置的bug --- src/pages/cameraAccess/components/DataStackInfo.vue | 809 ++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 512 insertions(+), 297 deletions(-) diff --git a/src/pages/cameraAccess/components/DataStackInfo.vue b/src/pages/cameraAccess/components/DataStackInfo.vue index fffe4d0..aab0acd 100644 --- a/src/pages/cameraAccess/components/DataStackInfo.vue +++ b/src/pages/cameraAccess/components/DataStackInfo.vue @@ -3,25 +3,66 @@ <el-row> <el-col :span="12"> <el-form ref="addForm" :model="form" :rules="rules" label-width="88px"> - <el-form-item label="鍚嶇О" prop="name" style="width:440px"> - <el-input v-model="form.name" size="small" :disabled="isDisabled"></el-input> + <el-form-item label="鍚嶇О" prop="name" style="width: 440px"> + <el-input + v-model="form.name" + size="small" + :disabled="isDisabled" + ></el-input> </el-form-item> - <el-form-item label="绫诲瀷" prop="type" style="width:440px"> - <el-radio v-model="form.type" :label="1" :disabled="!isAdd">瑙嗛</el-radio> - <el-radio v-model="form.type" :label="2" :disabled="!isAdd">鍥剧墖</el-radio> - <el-radio v-model="form.type" :label="3" :disabled="!isAdd">闊抽</el-radio> - <el-radio v-model="form.type" :label="4" :disabled="!isAdd">鍏朵粬鏁版嵁</el-radio> + <el-form-item label="绫诲瀷" prop="type" style="width: 440px"> + <el-radio v-model="form.type" :label="1" :disabled="!isAdd" + >瑙嗛</el-radio + > + <el-radio v-model="form.type" :label="2" :disabled="!isAdd" + >鍥剧墖</el-radio + > + <el-radio v-model="form.type" :label="3" :disabled="!isAdd" + >闊抽</el-radio + > + <el-radio v-model="form.type" :label="4" :disabled="!isAdd" + >鍏朵粬鏁版嵁</el-radio + > </el-form-item> - + <el-form-item label="澶勭悊鍒嗚鲸鐜�" style="width: 440px"> + <el-select + v-model="form.resolution" + placeholder="鏈満鍒嗚鲸鐜�" + style="position: absolute; left: 0" + size="small" + @change="checkResolution" + > + <el-option + v-for="item in form.resolutions" + :key="`${item.width}*${item.height}`" + :label=" + `${item.width}*${item.height}` == '0*0' + ? '鏈満鍒嗚鲸鐜�' + : `${item.width}*${item.height}` + " + :value="`${item.width}*${item.height}`" + ></el-option> + </el-select> + </el-form-item> <el-form-item label="澶勭悊瀹屾垚鍚庤嚜鍔ㄥ垹闄ゆ枃浠�" prop="isAutoDelFile" label-width="200px" - style="width:440px" + style="width: 440px" > - <el-radio v-model="form.isAutoDelFile" :label="true" :disabled="isDisabled">鏄�</el-radio> - <el-radio v-model="form.isAutoDelFile" :label="false" :disabled="isDisabled">鍚�</el-radio> + <el-radio + v-model="form.isAutoDelFile" + :label="true" + :disabled="isDisabled" + >鏄�</el-radio + > + <el-radio + v-model="form.isAutoDelFile" + :label="false" + :disabled="isDisabled" + >鍚�</el-radio + > </el-form-item> <el-form-item label-width="0px" style="text-align: left"> @@ -30,14 +71,16 @@ type="primary" @click="onSubmit('addForm')" :disabled="isDisabled" - >淇濆瓨</el-button> + >淇濆瓨</el-button + > <el-button type="danger" size="small" @click="deleteDir" v-if="!isAdd" :disabled="isDisabled" - >鍒犻櫎鏁版嵁鏍�</el-button> + >鍒犻櫎鏁版嵁鏍�</el-button + > </el-form-item> </el-form> </el-col> @@ -49,8 +92,8 @@ <ul> <li> <info-card - style="width: 100%;min-width: 440px" - :realtime="PollData.RealTimeSum" + style="width: 100%; min-width: 440px" + :realtime="PollData.RealTimeValidCount" :polling="PollData.PollValidCount" :dataStack="PollData.stackChannelCount" ></info-card> @@ -61,7 +104,10 @@ :style="`width:80%;height:174px;position: relative;left: -12px;`" v-if="PollData.barCharts && PollData.barCharts.length !== 0" > - <eChartsBar ref="cpuMeneryCharts" :xAxisData="PollData.barCharts"></eChartsBar> + <eChartsBar + ref="cpuMeneryCharts" + :xAxisData="PollData.barCharts" + ></eChartsBar> </div> </div> </el-col> @@ -73,26 +119,36 @@ <span @click="activeName = 'uploaded'" :class="activeName === 'uploaded' ? 'active tab' : 'tab'" - >宸蹭笂浼�</span> + >宸蹭笂浼�</span + > <span @click="activeName = 'uploading'" :class="activeName === 'uploading' ? 'active tab' : 'tab'" - >姝e湪涓婁紶</span> + >姝e湪涓婁紶</span + > <div class="btn-right"> <el-input v-model="searchInput" placeholder="鎼滅储" clearable - style="width: 203px;" + style="width: 203px" size="small" @change="handelSearchInputChange" > - <i class="el-icon-search el-input__icon" style="color:#DCDFE6;padding:0px" slot="prefix"></i> + <i + class="el-icon-search el-input__icon" + style="color: #dcdfe6; padding: 0px" + slot="prefix" + ></i> </el-input> <!-- 鎵归噺鏆傚仠 --> - <el-tooltip content="鎵归噺鏆傚仠" placement="bottom" popper-class="atooltip"> + <el-tooltip + content="鎵归噺鏆傚仠" + placement="bottom" + popper-class="atooltip" + > <el-button type="text" class="iconfont iconzanting btn" @@ -100,40 +156,61 @@ ></el-button> </el-tooltip> <!-- 鎵归噺鍒犻櫎 --> - <el-tooltip content="鎵归噺鍒犻櫎" placement="bottom" popper-class="atooltip"> - <el-button type="text" class="el-icon-delete btn" @click="handleFileDelete({}, true)"></el-button> + <el-tooltip + content="鎵归噺鍒犻櫎" + placement="bottom" + popper-class="atooltip" + > + <el-button + type="text" + class="el-icon-delete btn" + @click="handleFileDelete({}, true)" + ></el-button> </el-tooltip> <!-- 鏂囦欢涓婁紶 --> - <el-button - type="primary" - size="small" - :disabled="!DataStackPool.selectedDir.id" - @click="handleUpload" - > - 涓婁紶 - <i class="el-icon-upload el-icon--right"></i> - </el-button> + <template v-for="stack in DataStackPool.dirs"> + <el-button + :class="`uploader_${stack.id}`" + :key="stack.id" + type="primary" + size="small" + v-show="stack.id == DataStackPool.selectedDir.id" + :disabled="!DataStackPool.selectedDir.id" + @click="handleUpload" + > + 涓婁紶 + <i class="el-icon-upload el-icon--right"></i> + </el-button> + </template> </div> </div> <!-- 宸蹭笂浼犳枃浠跺垪琛� --> <el-table ref="multipleTable" - v-show="activeName === 'uploaded' " + v-show="activeName === 'uploaded'" :data="fileList" tooltip-effect="dark" border - :header-cell-style="{background:'#f8f8f8', color:'#222222', textAlign:'center'}" + :header-cell-style="{ + background: '#f8f8f8', + color: '#222222', + textAlign: 'center', + }" @select="handleSelect" @select-all="handleSelect" > - <el-table-column type="selection" width="50" align="center" :selectable="isSelectable"></el-table-column> + <el-table-column + type="selection" + align="center" + :selectable="isSelectable" + ></el-table-column> <el-table-column prop="name" label="鏂囦欢鍚�"> - <template slot-scope="{row}"> + <template slot-scope="{ row }"> <div :class="snapshotClass"> <el-image - v-if="row.type==1" + v-if="row.type == 1" style="width: 30x; height: 30px" :src="'/httpImage/' + row.snapshot_url" fit="fill" @@ -142,11 +219,13 @@ <div slot="error" :class="snapshotClass"></div> </el-image> <el-image - v-if="row.type==2" - style="width: 30x; height: 30px" - :src="`/files/${row.path.substr(row.path.lastIndexOf('/')+1)}`" + v-if="row.type == 2" + style="width: 30x; height: 30px; background: #fff" + :src="`/files/${row.path.substr(row.path.lastIndexOf('/') + 1)}`" fit="fill" - :preview-src-list="[`/files/${row.path.substr(row.path.lastIndexOf('/')+1)}`]" + :preview-src-list="[ + `/files/${row.path.substr(row.path.lastIndexOf('/') + 1)}`, + ]" > <div slot="error" :class="snapshotClass"></div> </el-image> @@ -158,24 +237,62 @@ v-model="row.name" size="small" @blur="cellRenameFile(row)" - style="display: inline-block;width: calc(100% - 50px);margin-left: 10px;" + style=" + display: inline-block; + width: calc(100% - 50px); + margin-left: 10px; + " /> <a v-else - style="line-height: 30px;margin-left: 10px; cursor:pointer" + style="line-height: 30px; margin-left: 10px; cursor: pointer" @click="preview(row)" - >{{row.name}}</a> + >{{ row.name }}</a + > </template> </el-table-column> - <el-table-column prop="fileSize" label="澶у皬" width="120"> - <template slot-scope="scope">{{scope.row.size | readFileSizeUnit}}</template> + <el-table-column prop="fileSize" label="澶у皬"> + <template slot-scope="scope">{{ + scope.row.size | readFileSizeUnit + }}</template> </el-table-column> - <el-table-column prop="duration" label="鏃堕暱" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="uploadTime" label="涓婁紶鏃堕棿" show-overflow-tooltip align="center"> - <template slot-scope="scope">{{scope.row.createTime | moment}}</template> + <el-table-column + prop="duration" + label="鏃堕暱" + show-overflow-tooltip + align="center" + v-if="form.type != 2" + ></el-table-column> + <el-table-column + prop="uploadTime" + label="涓婁紶鏃堕棿" + show-overflow-tooltip + align="center" + > + <template slot-scope="scope">{{ + scope.row.createTime | moment + }}</template> </el-table-column> - <el-table-column prop="status" label="澶勭悊鐘舵��" show-overflow-tooltip align="center"> - <template slot-scope="scope">{{scope.row.status | statusFormat}}</template> + <el-table-column + prop="status" + label="澶勭悊鐘舵��" + show-overflow-tooltip + align="center" + > + <template slot-scope="scope"> + <div + class="lowHash" + v-if=" + !PollData.stackChannelCount && + (scope.row.status == '1' || scope.row.status == '2') + " + > + 鏁版嵁鏍堢畻鍔涗笉瓒� + </div> + <div class="normal" v-else> + {{ scope.row.status | statusFormat }} + </div> + </template> </el-table-column> <el-table-column label="鎿嶄綔" show-overflow-tooltip align="center"> <template slot-scope="scope"> @@ -186,10 +303,18 @@ :disabled="scope.row.status == 2" class="el-icon-top btn" @click="handleSortFile(1, scope.row.id)" - :style="scope.row.id === fileList[0].id ? 'visibility:hidden' : 'visibility:initial'" + :style=" + scope.row.id === fileList[0].id + ? 'visibility:hidden' + : 'visibility:initial' + " ></el-button> <!-- 鏆傚仠 --> - <el-tooltip content="鏆傚仠澶勭悊" placement="bottom" popper-class="atooltip"> + <el-tooltip + content="鏆傚仠澶勭悊" + placement="bottom" + popper-class="atooltip" + > <el-button type="text" :disabled="scope.row.status == 2" @@ -200,7 +325,11 @@ </el-tooltip> <!-- 寮�濮� --> - <el-tooltip content="閲嶆柊寮�濮�" placement="bottom" popper-class="atooltip"> + <el-tooltip + content="閲嶆柊寮�濮�" + placement="bottom" + popper-class="atooltip" + > <el-button type="text" :disabled="scope.row.status == 2" @@ -211,13 +340,17 @@ </el-tooltip> <!-- 閲嶆柊澶勭悊 --> - <el-tooltip content="閲嶆柊澶勭悊" placement="bottom" popper-class="atooltip"> + <el-tooltip + content="閲嶆柊澶勭悊" + placement="bottom" + popper-class="atooltip" + > <el-button type="text" :disabled="scope.row.status == 2" class="iconfont iconzhongxinkaishi btn" @click="handleFileStatus(scope.row, 1)" - v-show="scope.row.status === 9" + v-show="scope.row.status === 9 || scope.row.status === -2" ></el-button> </el-tooltip> @@ -232,16 +365,19 @@ <el-dropdown-menu slot="dropdown"> <el-dropdown-item icon="el-icon-edit" - :command="{cb: handleFileRename, data: scope.row}" - >閲嶅懡鍚�</el-dropdown-item> + :command="{ cb: handleFileRename, data: scope.row }" + >閲嶅懡鍚�</el-dropdown-item + > <el-dropdown-item icon="el-icon-copy-document" - :command="{cb: handleFileMove, data: scope.row}" - >绉诲姩/澶嶅埗</el-dropdown-item> + :command="{ cb: handleFileMove, data: scope.row }" + >绉诲姩/澶嶅埗</el-dropdown-item + > <el-dropdown-item icon="el-icon-delete" - :command="{cb: handleFileDelete, data: scope.row}" - >鍒犻櫎</el-dropdown-item> + :command="{ cb: handleFileDelete, data: scope.row }" + >鍒犻櫎</el-dropdown-item + > </el-dropdown-menu> </el-dropdown> </div> @@ -252,41 +388,72 @@ <!-- 鍒嗛〉 --> <div class="pagination"> <el-pagination + v-show="activeName == 'uploaded'" @size-change="handleSizeChange" @current-change="handleRefrashFileList" :current-page="page" - :page-sizes="[5, 10, 15, 20]" + :page-sizes="[10, 20, 50, 100]" :page-size="size" - style="position:absolute;right:10px;bottom:5px" + style="position: absolute; right: 10px; bottom: 5px" :total="total" layout="total, sizes, prev, pager, next" ></el-pagination> </div> - <!-- 鏂囦欢涓婁紶缁勪欢 --> - <!-- <file-uploader ref="uploader" v-show="activeName === 'uploading'" :attrs="attrs" /> --> - <file-uploader ref="uploader" v-show="activeName === 'uploading'" /> - + <template v-for="stack in DataStackPool.dirs"> + <!-- 鏂囦欢涓婁紶缁勪欢 --> + <file-uploader + :ref="`uploader_${stack.id}`" + :key="stack.id" + v-show=" + activeName === 'uploading' && stack.id == DataStackPool.selectedDir.id + " + :sourceType="stack.type" + /> + </template> <!-- 鏂囦欢棰勮 --> <el-dialog title="鏌ョ湅鏂囦欢" :visible.sync="previewDialog" width="500px"> - <video v-if="videoUrl" :src="videoUrl" controls style="margin-top: 12px;">鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 video 鏍囩銆�</video> + <!-- <video v-if="videoUrl" :src="videoUrl" controls style="margin-top: 12px"> + 鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 video 鏍囩銆� + </video> --> + + <wasm-player + :rtspUrl="videoUrl" + :showArea="false" + v-if="videoUrl" + ></wasm-player> + <el-image v-if="imgUrl" :src="imgUrl"></el-image> </el-dialog> <el-dialog title="绉诲姩/澶嶅埗" :visible.sync="fileDialog" width="500px"> - <p style="margin:0px 0px 20px 0px">璇烽�夋嫨鎮ㄦ兂澶嶅埗/绮樿创鍒扮殑 鏁版嵁鏍堬細</p> - <span class="iconfont iconwenjian" style="color:#3d68e1; margin-right:5px"></span> + <p style="margin: 0px 0px 20px 0px">璇烽�夋嫨鎮ㄦ兂澶嶅埗/绮樿创鍒扮殑 鏁版嵁鏍堬細</p> + <span + class="iconfont iconwenjian" + style="color: #3d68e1; margin-right: 5px" + ></span> <el-select v-model="targetDir" placeholder="璇烽�夋嫨鐩爣鏂囦欢澶�" size="mini"> - <el-option v-for="item in dirOptions" :key="item.id" :label="item.name" :value="item.id"> + <el-option + v-for="item in dirOptions" + :key="item.id" + :label="item.name" + :value="item.id" + > <span class="iconfont iconwenjian"></span> <span style="margin-left: 10px">{{ item.name }}</span> </el-option> </el-select> - <div style="margin-top:20px"> - <el-button type="primary" size="mini" @click="cellFileCopy">澶嶅埗</el-button> - <el-button type="primary" size="mini" @click="cellFileMove">绉诲姩</el-button> - <el-button type="info" size="mini" @click="fileDialog = false">鍙栨秷</el-button> + <div style="margin-top: 20px"> + <el-button type="primary" size="mini" @click="cellFileCopy" + >澶嶅埗</el-button + > + <el-button type="primary" size="mini" @click="cellFileMove" + >绉诲姩</el-button + > + <el-button type="info" size="mini" @click="fileDialog = false" + >鍙栨秷</el-button + > </div> </el-dialog> </div> @@ -303,43 +470,56 @@ findAllFileByStackId, renameFile, moveFile, - copyFile + copyFile, } from "@/api/localVedio"; +import { getCameraSceneRule } from "@/api/scene"; -import { changeRunType } from "@/api/pollConfig"; +import InfoCard from "./infoCard"; +import eChartsBar from "@/components/subComponents/eChartsBar"; +import FileUploader from "@/components/subComponents/FileUpload"; -import InfoCard from "./infoCard" -import eChartsBar from '@/components/subComponents/eChartsBar' -import FileUploader from '@/components/subComponents/FileUpload' +import WasmPlayer from "@/components/wasmPlayer"; export default { name: "DataStackInfo", components: { InfoCard, eChartsBar, - FileUploader + FileUploader, + WasmPlayer, }, props: { cameraList: { default: () => { return []; }, - type: Array - } + type: Array, + }, }, filters: { - statusFormat (value) { + statusFormat(value) { let statusCode = { + "-2": "澶勭悊寮傚父", "-1": "宸插垹闄�", - "0": "鏆傚仠澶勭悊", - "1": "绛夊緟澶勭悊", - "2": "澶勭悊涓�", - "9": "澶勭悊瀹屾垚" - } + 0: "鏆傚仠澶勭悊", + 1: "绛夊緟澶勭悊", + 2: "澶勭悊涓�", + 9: "澶勭悊瀹屾垚", + }; return statusCode[value]; }, - readFileSizeUnit (value) { - let UNITS = [' B', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']; + readFileSizeUnit(value) { + let UNITS = [ + " B", + " KB", + " MB", + " GB", + " TB", + " PB", + " EB", + " ZB", + " YB", + ]; let format = function (value, power) { return (value / Math.pow(1024, power)).toFixed(2) + UNITS[power]; }; @@ -354,31 +534,32 @@ } } return format(value, i - 1); - } + }, }, computed: { - snapshotClass () { + snapshotClass() { let classs = ["snapshot"]; if (this.form.type === 1) { - classs.push("snapshot-video") + classs.push("snapshot-video"); } else if (this.form.type === 2) { - classs.push("snapshot-image") + classs.push("snapshot-image"); } else if (this.form.type === 3) { - classs.push("snapshot-audio") + classs.push("snapshot-audio"); } else { - classs.push("snapshot-files") + classs.push("snapshot-files"); } return classs; }, - dirOptions () { - return this.DataStackPool.dirs.filter(dir => { - return dir.id !== this.DataStackPool.selectedDir.id - }) - } + dirOptions() { + return this.DataStackPool.dirs.filter((dir) => { + return dir.id !== this.DataStackPool.selectedDir.id; + }); + }, }, - data () { + data() { return { + hasRule: false, videoUrl: "", imgUrl: "", previewDialog: false, @@ -389,7 +570,8 @@ multipleSelection: [], searchInput: "", form: { - id: "" + id: "", + resolution: "", }, fileList: [], // 璁板綍娣诲姞鐘舵�� @@ -397,8 +579,8 @@ addParentId: "", rules: { dirName: [ - { required: true, message: "璁惧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" } - ] + { required: true, message: "璁惧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }, + ], }, activeName: "uploaded", page: 1, @@ -409,54 +591,46 @@ timer: 0, targetDir: "", targetFile: "", - attrs: { - accept: "" - } }; }, - mounted () { + mounted() { this.initFormData(); - console.log(this.PollData.barCharts) - }, - beforeDestroy () { + beforeDestroy() { this.taskUid = 0; }, - watch: { - 'fileList.length': { - handler (n, o) { - //鏁版嵁鏍堟枃浠舵暟閲忓彉鏇� - //鏇存柊鐙珛鍦烘櫙鏁版嵁鏍堟枃浠� - console.log(this.$root.$children[0].$children[1].$refs['sepRule']); - this.$root.$children[0].$children[1].$refs['sepRule'].getStackFiles(); + methods: { + async getRule() { + const res = await getCameraSceneRule({ + cameraId: this.DataStackPool.selectedDir.id, + }); + if (res && res.success && res.data.rules && res.data.rules.length > 0) { + this.hasRule = true; + console.log(this.hasRule); + } else { + this.hasRule = false; } }, - 'form.type': { - handler (n, o) { - console.log(n, o) - if (n == 1) { - //浠呮敮鎸佷笂浼犺棰� - this.$set(this.attrs, 'accept', ".mp4"); - }else if (n == 2) { - //鍥剧墖 - this.$set(this.attrs, 'accept', "image/jpg,image/jpeg,image/png"); - } - } - } - }, - methods: { - preview (row) { + checkResolution(val) { + this.form.resolution_width = Number(val.split("*")[0]); + this.form.resolution_height = Number(val.split("*")[1]); + }, + preview(row) { this.previewDialog = true; if (row.type === 1) { + this.videoUrl = "/files/" + row.identifier + ".mp4"; - this.videoUrl = "/files/" + row.identifier + ".mp4" + // 涓烘湐榛勪娇鐢ㄦ暟鎹爤瀹氬埗, 娌℃湁MD5 + if (row.identifier == "") { + this.videoUrl = row.path.replace("/opt/vasystem", ""); + } } else if (row.type === 2) { - - this.imgUrl = "/files/" + row.path.substr(row.path.lastIndexOf('/') + 1) + this.imgUrl = + "/files/" + row.path.substr(row.path.lastIndexOf("/") + 1); } }, // 娓呯┖杈撳叆妗� - initFormData () { + initFormData() { this.form = { enable: false, id: "", @@ -464,21 +638,27 @@ name: "", sort: 0, status: 0, - type: 1 + type: 1, + resolutions: [ + { + height: 0, + width: 0, + }, + ], }; }, // 娣诲姞璁惧 - addDir (node) { + addDir(node) { this.isAdd = true; this.isDisabled = false; this.initFormData(); this.DataStackPool.clean(); this.fileList = []; }, - selectDir (node) { - + // 鏁版嵁鏍堟枃浠跺す閫変腑鏃讹紝鐢辩埗缁勪欢瑙﹀彂 + selectDir(node) { if (node.id === "") { - return + return; } this.isDisabled = false; @@ -488,6 +668,7 @@ // this.initFormData(); // this.$refs.addForm.clearValidate(); this.form = { ...node }; + this.form.resolution = `${node.resolution_width}*${node.resolution_height}`; delete this.form.createTime; delete this.form.updateTime; delete this.form.status; @@ -499,144 +680,163 @@ this.total = 0; this.multipleSelection = []; // 娓呯┖閫変腑鐘舵�� this.initFetchListTask(); - this.videoUrl = ''; - this.imgUrl = ''; + this.videoUrl = ""; + this.imgUrl = ""; }, - initFetchListTask () { + initFetchListTask() { const uid = Math.round(Math.random() * 1000); this.taskUid = uid; this.timingtask(uid); }, - timingtask (uid) { + timingtask(uid) { if (uid !== this.taskUid || this.form.id === "") { return; } - this.fetchFileList(); - let _this = this; this.timer = setTimeout(() => { _this.timingtask(uid); }, 2 * 1000); }, - fetchFileList () { - findAllFileByStackId({ name: this.searchInput, stackId: this.form.id, page: this.page, size: this.size, type: 0 }).then(rsp => { - if (rsp && rsp.success && rsp.data.total > 0) { - this.fileList = rsp.data.dataList; - - this.total = rsp.data.total; - - // 瀹氭椂鍒锋柊浼氭竻绌洪�変腑鐘舵�侊紝鍦ㄨ繖閲屾仮澶� - this.fileList.forEach(row => { - //this.polygonDatas.push({snapshot_url:row.snapshot_url}) - if (this.multipleSelection.indexOf(row.id) !== -1) { - this.$nextTick(() => { - this.$refs.multipleTable.toggleRowSelection(row); - }) - } - }); - } - }).catch(err => { - console.log(err) + fetchFileList() { + findAllFileByStackId({ + name: this.searchInput, + stackId: this.form.id, + page: this.page, + size: this.size, + type: 0, }) - + .then((rsp) => { + if (rsp && rsp.success && rsp.data.total >= 0) { + this.fileList = rsp.data.dataList; + this.total = rsp.data.total; + // 瀹氭椂鍒锋柊浼氭竻绌洪�変腑鐘舵�侊紝鍦ㄨ繖閲屾仮澶� + this.fileList.forEach((row) => { + //this.polygonDatas.push({snapshot_url:row.snapshot_url}) + if (this.multipleSelection.indexOf(row.id) !== -1) { + this.$nextTick(() => { + this.$refs.multipleTable.toggleRowSelection(row); + }); + } + }); + } + }) + .catch((err) => { + console.log(err); + }); }, // 淇濆瓨 - onSubmit (formName) { - this.$refs[formName].validate(async valid => { + onSubmit(formName) { + if (formName == "addForm") { + if (this.form.name.indexOf("/") >= 0) { + this.$notify({ + type: "error", + message: "淇濆瓨澶辫触,鏁版嵁鏍堝悕绉颁笉鑳藉寘鍚�'/'锛�", + }); + return; + } + } + this.$refs[formName].validate(async (valid) => { if (valid) { - saveDir(this.form).then(rsp => { + saveDir(this.form).then((rsp) => { if (rsp.success) { this.$notify({ type: "success", - message: "鏁版嵁鏍堜俊鎭繚瀛樻垚鍔燂紒" + message: "鏁版嵁鏍堜俊鎭繚瀛樻垚鍔燂紒", }); this.DataStackPool.fetchFiles(); } else { this.$notify({ type: "error", - message: "鏁版嵁鏍堜俊鎭繚瀛樺け璐ワ紒" + message: "鏁版嵁鏍堜俊鎭繚瀛樺け璐ワ紒", }); } - }) + }); } }); }, // 鍒犻櫎鎽勫儚鏈� - deleteDir () { + deleteDir() { this.$confirm("鏄惁鍒犻櫎姝ゆ枃浠跺す锛�", { center: true, cancelButtonClass: "comfirm-class-cancle", - confirmButtonClass: "comfirm-class-sure" + confirmButtonClass: "comfirm-class-sure", }).then(() => { - delDir(this.form.id).then(res => { - if (res.success) { - this.initFormData(); - this.$notify({ - type: "success", - message: "鍒犻櫎鎴愬姛锛�" - }); - this.DataStackPool.fetchFiles(); - this.DataStackPool.selectedDir = {}; - } else { + delDir(this.form.id) + .then((res) => { + if (res.success) { + this.initFormData(); + this.$notify({ + type: "success", + message: "鍒犻櫎鎴愬姛锛�", + }); + this.DataStackPool.fetchFiles(); + this.DataStackPool.selectedDir = {}; + // 鍒犻櫎鍚庢仮澶嶆湭閫変腑鐘舵�� + this.addDir(); + this.isAdd = false; + this.isDisabled = true; + } else { + this.$notify({ + type: "error", + message: "鍒犻櫎澶辫触锛�", + }); + } + }) + .catch((err) => { this.$notify({ type: "error", - message: "鍒犻櫎澶辫触锛�" + message: "鍒犻櫎澶辫触锛�", }); - } - }).catch(err => { - this.$notify({ - type: "error", - message: "鍒犻櫎澶辫触锛�" }); - }); }); }, - handleTabClick (tab, event) { + handleTabClick(tab, event) { console.log(tab, event); }, - handleSelect (val) { - this.multipleSelection = val.map(row => { + handleSelect(val) { + this.multipleSelection = val.map((row) => { return row.id; }); }, - handelSearchInputChange (val) { + handelSearchInputChange(val) { this.multipleSelection = []; }, - handleUpload () { - - console.log(this.DataStackPool.selectedDir.id) - console.log(this.$refs.uploader.$refs.button.attrs) - console.log(this.$refs.uploader.$refs.button.$refs.btn.click()) + handleUpload() { + console.log(this.DataStackPool.selectedDir); + console.log(this.DataStackPool.dirs); + this.$refs[ + `uploader_${this.DataStackPool.selectedDir.id}` + ][0].$refs.button.$refs.btn.click(); }, - handleRefrashFileList (val) { + handleRefrashFileList(val) { this.page = val; this.multipleSelection = []; this.fetchFileList(); }, - handleSizeChange (val) { + handleSizeChange(val) { this.size = val; this.multipleSelection = []; this.fetchFileList(); }, - async handleSortFile (direct, id) { + async handleSortFile(direct, id) { let res = await sortFile({ id: id, - direct: direct - }) + direct: direct, + }); if (res && res.success) { this.fetchFileList(); //鏇存柊鐙珛鍦烘櫙鏁版嵁鏍堟枃浠� - console.log(this.$root.$children[0].$children[1].$refs['sepRule']) - this.$root.$children[0].$children[1].$refs['sepRule'].getStackFiles(); + console.log(this.$root.$children[0].$children[1].$refs["sepRule"]); + this.$root.$children[0].$children[1].$refs["sepRule"].getStackFiles(); this.$notify({ type: "success", - message: "鏂囦欢鎺掑簭鎴愬姛锛�" - }) + message: "鏂囦欢鎺掑簭鎴愬姛锛�", + }); } }, - async handleFileStatus (row, status, multi = false) { + async handleFileStatus(row, status, multi = false) { let ids = this.multipleSelection; if (!multi) { ids = [row.id]; @@ -644,30 +844,37 @@ if (!ids.length) { this.$notify({ type: "error", - message: "鏈�変腑鏂囦欢" - }) - return + message: "鏈�変腑鏂囦欢", + }); + return; + } + if (!this.hasRule && status === 1) { + this.$notify({ + type: "error", + message: "鎮ㄨ繕鏈厤缃畻娉曞満鏅�,璇峰厛閰嶇疆", + }); + return; } try { let res = await updateStatus({ ids: ids, - status: status - }) + status: status, + }); if (res && res.success) { this.fetchFileList(); this.$notify({ type: "success", - message: "鍒囨崲鏂囦欢澶勭悊鐘舵�佹垚鍔�" - }) + message: "鍒囨崲鏂囦欢澶勭悊鐘舵�佹垚鍔�", + }); } } catch { - console.log("err") + console.log("err"); } }, - dropdownClick (cmd) { + dropdownClick(cmd) { cmd.cb(cmd.data); }, - handleFileDelete (rows, multi = false) { + handleFileDelete(rows, multi = false) { let _this = this; let ids = this.multipleSelection; if (!multi) { @@ -676,93 +883,98 @@ if (!ids.length) { this.$notify({ type: "error", - message: "鏈�変腑鏂囦欢" - }) - return - } - this.$confirm('鎻愮ず锛氱‘瀹氬垹闄よ鏂囦欢鍚楋紵', { - center: true, - cancelButtonClass: 'comfirm-class-cancle', - confirmButtonClass: 'comfirm-class-sure' - }).then(() => { - deleteLocalFile({ ids: ids }).then(rsp => { - this.$notify({ - type: "error", - message: "鏂囦欢宸插垹闄�" - }) + message: "鏈�変腑鏂囦欢", }); - - }).catch(() => { }) + return; + } + this.$confirm("鎻愮ず锛氱‘瀹氬垹闄よ鏂囦欢鍚楋紵", { + center: true, + cancelButtonClass: "comfirm-class-cancle", + confirmButtonClass: "comfirm-class-sure", + }) + .then(() => { + deleteLocalFile({ ids: ids }).then((rsp) => { + this.$notify({ + type: "error", + message: "鏂囦欢宸插垹闄�", + }); + }); + }) + .catch(() => {}); }, - handleFileMove (row) { + handleFileMove(row) { this.targetDir = ""; this.targetFile = row.id; this.fileDialog = true; }, - handleFileRename (row) { + handleFileRename(row) { this.editRowId = row.id; clearTimeout(this.timer); this.timer = null; }, - cellRenameFile (row) { + cellRenameFile(row) { this.editRowId = ""; - renameFile({ id: row.id, name: row.name }).then(rsp => { + renameFile({ id: row.id, name: row.name }) + .then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "鏂囦欢閲嶅懡鍚嶆垚鍔�", + }); + } else { + this.$notify({ + type: "error", + message: "鏂囦欢閲嶅懡鍚嶅け璐�", + }); + } + if (!this.timer) { + this.initFetchListTask(); + } + }) + .catch(() => { + if (!this.timer) { + this.initFetchListTask(); + } + }); + }, + isSelectable(row, rowIndex) { + return row.status !== 2; + }, + cellFileCopy() { + copyFile({ id: this.targetFile, stackIds: [this.targetDir] }).then( + (rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "澶嶅埗鎴愬姛", + }); + this.fileDialog = false; + } else { + this.$notify({ + type: "error", + message: "澶嶅埗澶辫触", + }); + } + } + ); + }, + cellFileMove() { + moveFile({ id: this.targetFile, stackId: this.targetDir }).then((rsp) => { if (rsp && rsp.success) { this.$notify({ type: "success", - message: "鏂囦欢閲嶅懡鍚嶆垚鍔�" - }) - } else { - this.$notify({ - type: "error", - message: "鏂囦欢閲嶅懡鍚嶅け璐�" - }) - } - if (!this.timer) { - this.initFetchListTask(); - } - }).catch(() => { - if (!this.timer) { - this.initFetchListTask(); - } - }) - }, - isSelectable (row, rowIndex) { - return row.status !== 2 - }, - cellFileCopy () { - copyFile({ id: this.targetFile, stackIds: [this.targetDir] }).then(rsp => { - if (rsp && rsp.success) { - this.$notify({ - type: "success", - message: "澶嶅埗鎴愬姛" - }) + message: "绉诲姩鎴愬姛", + }); this.fileDialog = false; } else { this.$notify({ type: "error", - message: "澶嶅埗澶辫触" - }) + message: "绉诲姩澶辫触", + }); } - }) + }); }, - cellFileMove () { - moveFile({ id: this.targetFile, stackId: this.targetDir }).then(rsp => { - if (rsp && rsp.success) { - this.$notify({ - type: "success", - message: "绉诲姩鎴愬姛" - }) - this.fileDialog = false; - } else { - this.$notify({ - type: "error", - message: "绉诲姩澶辫触" - }) - } - }) - } - } + }, }; </script> @@ -866,20 +1078,23 @@ vertical-align: middle; } .snapshot-video { - background: url('/images/cameraAccess/video.png'); + background: url("/images/cameraAccess/video.png"); background-repeat: round; } .snapshot-image { - background: url('/images/cameraAccess/image.png'); + background: url("/images/cameraAccess/image.png"); background-repeat: round; } .snapshot-audio { - background: url('/images/cameraAccess/audio.png'); + background: url("/images/cameraAccess/audio.png"); background-repeat: round; } .snapshot-files { - background: url('/images/cameraAccess/files.png'); + background: url("/images/cameraAccess/files.png"); background-repeat: round; } + .video-player { + height: 230px; + } } -</style> \ No newline at end of file +</style> -- Gitblit v1.8.0