| | |
| | | <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-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-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 |
| | |
| | | <el-option |
| | | v-for="item in form.resolutions" |
| | | :key="`${item.width}*${item.height}`" |
| | | :label=" |
| | | `${item.width}*${item.height}` == '0*0' |
| | | ? '本机分辨率' |
| | | : `${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" |
| | | > |
| | | <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 label="处理完成后自动删除文件" prop="isAutoDelFile" label-width="200px" 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-form-item> |
| | | |
| | | <el-form-item label-width="0px" style="text-align: left"> |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="onSubmit('addForm')" |
| | | :disabled="isDisabled" |
| | | >保存</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | size="small" |
| | | @click="deleteDir" |
| | | v-if="!isAdd" |
| | | :disabled="isDisabled" |
| | | <el-button size="small" type="primary" @click="onSubmit('addForm')" :disabled="isDisabled">保存</el-button> |
| | | <el-button type="danger" size="small" @click="deleteDir" v-if="!isAdd" :disabled="isDisabled" |
| | | >删除数据栈</el-button |
| | | > |
| | | </el-form-item> |
| | |
| | | :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> |
| | |
| | | <!-- 上传管理 --> |
| | | <el-divider></el-divider> |
| | | <div class="upload-menu"> |
| | | <span |
| | | @click="activeName = 'uploaded'" |
| | | :class="activeName === 'uploaded' ? 'active tab' : 'tab'" |
| | | >已上传</span |
| | | > |
| | | <span |
| | | @click="activeName = 'uploading'" |
| | | :class="activeName === 'uploading' ? 'active tab' : 'tab'" |
| | | >正在上传</span |
| | | > |
| | | <span @click="activeName = 'uploaded'" :class="activeName === 'uploaded' ? 'active tab' : 'tab'">已上传</span> |
| | | <span @click="activeName = 'uploading'" :class="activeName === 'uploading' ? 'active tab' : 'tab'">正在上传</span> |
| | | |
| | | <div class="btn-right"> |
| | | <el-input |
| | |
| | | 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-button |
| | | type="text" |
| | | class="iconfont iconzanting btn" |
| | | @click="handleFileStatus({}, 0, true)" |
| | | ></el-button> |
| | | <el-tooltip content="批量暂停" placement="bottom" popper-class="atooltip"> |
| | | <el-button type="text" class="iconfont iconzanting btn" @click="handleFileStatus({}, 0, true)"></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> |
| | | |
| | | <!-- 文件上传 --> |
| | |
| | | :header-cell-style="{ |
| | | background: '#f8f8f8', |
| | | color: '#222222', |
| | | textAlign: 'center', |
| | | textAlign: 'center' |
| | | }" |
| | | @select="handleSelect" |
| | | @select-all="handleSelect" |
| | | > |
| | | <el-table-column |
| | | type="selection" |
| | | 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 }"> |
| | | <div :class="snapshotClass"> |
| | |
| | | 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> |
| | |
| | | margin-left: 10px; |
| | | " |
| | | /> |
| | | <a |
| | | v-else |
| | | style="line-height: 30px; margin-left: 10px; cursor: pointer" |
| | | @click="preview(row)" |
| | | >{{ row.name }}</a |
| | | > |
| | | <a v-else style="line-height: 30px; margin-left: 10px; cursor: pointer" @click="preview(row)">{{ |
| | | row.name |
| | | }}</a> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="fileSize" label="大小"> |
| | | <template slot-scope="scope">{{ |
| | | scope.row.size | readFileSizeUnit |
| | | }}</template> |
| | | <template slot-scope="scope">{{ scope.row.size | readFileSizeUnit }}</template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="duration" |
| | |
| | | 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 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" |
| | | > |
| | | <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') |
| | | " |
| | | v-if="!PollData.stackChannelCount && (scope.row.status == '1' || scope.row.status == '2')" |
| | | > |
| | | 数据栈算力不足 |
| | | </div> |
| | |
| | | :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" |
| | |
| | | </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" |
| | |
| | | </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" |
| | |
| | | <!-- 其他操作 --> |
| | | <el-dropdown @command="dropdownClick"> |
| | | <!-- <span class="iconfont icongengduo1 btn"></span> --> |
| | | <el-button |
| | | type="text" |
| | | :disabled="scope.row.status == 2" |
| | | class="iconfont icongengduo1 btn" |
| | | ></el-button> |
| | | <el-button type="text" :disabled="scope.row.status == 2" class="iconfont icongengduo1 btn"></el-button> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item |
| | | icon="el-icon-edit" |
| | | :command="{ cb: handleFileRename, data: scope.row }" |
| | | <el-dropdown-item icon="el-icon-edit" :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 icon="el-icon-copy-document" :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 icon="el-icon-delete" :command="{ cb: handleFileDelete, data: scope.row }" |
| | | >删除</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | |
| | | <file-uploader |
| | | :ref="`uploader_${stack.id}`" |
| | | :key="stack.id" |
| | | v-show=" |
| | | activeName === 'uploading' && stack.id == DataStackPool.selectedDir.id |
| | | " |
| | | v-show="activeName === 'uploading' && stack.id == DataStackPool.selectedDir.id" |
| | | :sourceType="stack.type" |
| | | /> |
| | | </template> |
| | |
| | | 您的浏览器不支持 video 标签。 |
| | | </video> --> |
| | | |
| | | <wasm-player |
| | | :rtspUrl="videoUrl" |
| | | :showArea="false" |
| | | v-if="videoUrl" |
| | | ></wasm-player> |
| | | <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> |
| | | <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 |
| | | > |
| | | <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> |
| | |
| | | findAllFileByStackId, |
| | | renameFile, |
| | | moveFile, |
| | | copyFile, |
| | | } from "@/api/localVedio"; |
| | | copyFile |
| | | } from "@/api/localVedio" |
| | | |
| | | 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"; |
| | | import WasmPlayer from "@/components/wasmPlayer" |
| | | |
| | | export default { |
| | | name: "DataStackInfo", |
| | |
| | | InfoCard, |
| | | eChartsBar, |
| | | FileUploader, |
| | | WasmPlayer, |
| | | WasmPlayer |
| | | }, |
| | | props: { |
| | | cameraList: { |
| | | default: () => { |
| | | return []; |
| | | return [] |
| | | }, |
| | | type: Array, |
| | | }, |
| | | type: Array |
| | | } |
| | | }, |
| | | filters: { |
| | | statusFormat(value) { |
| | |
| | | 0: "暂停处理", |
| | | 1: "等待处理", |
| | | 2: "处理中", |
| | | 9: "处理完成", |
| | | }; |
| | | return statusCode[value]; |
| | | 9: "处理完成" |
| | | } |
| | | return statusCode[value] |
| | | }, |
| | | 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]; |
| | | }; |
| | | 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] |
| | | } |
| | | |
| | | value = parseFloat(value, 10); |
| | | value = parseFloat(value, 10) |
| | | for (var i = 0; i < UNITS.length; i++) { |
| | | if (value < Math.pow(1024, i)) { |
| | | if (UNITS[i - 1]) { |
| | | return format(value, i - 1); |
| | | return format(value, i - 1) |
| | | } |
| | | return value + UNITS[i]; |
| | | return value + UNITS[i] |
| | | } |
| | | } |
| | | return format(value, i - 1); |
| | | }, |
| | | return format(value, i - 1) |
| | | } |
| | | }, |
| | | computed: { |
| | | snapshotClass() { |
| | | let classs = ["snapshot"]; |
| | | 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; |
| | | return classs |
| | | }, |
| | | dirOptions() { |
| | | return this.DataStackPool.dirs.filter((dir) => { |
| | | return dir.id !== this.DataStackPool.selectedDir.id; |
| | | }); |
| | | }, |
| | | return dir.id !== this.DataStackPool.selectedDir.id |
| | | }) |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | searchInput: "", |
| | | form: { |
| | | id: "", |
| | | resolution: "", |
| | | resolution: "" |
| | | }, |
| | | fileList: [], |
| | | // 记录添加状态 |
| | | isAdd: false, |
| | | addParentId: "", |
| | | rules: { |
| | | dirName: [ |
| | | { required: true, message: "设备名称不能为空", trigger: "blur" }, |
| | | ], |
| | | dirName: [{ required: true, message: "设备名称不能为空", trigger: "blur" }] |
| | | }, |
| | | activeName: "uploaded", |
| | | page: 1, |
| | |
| | | editRowId: "", |
| | | timer: 0, |
| | | targetDir: "", |
| | | targetFile: "", |
| | | }; |
| | | targetFile: "" |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.initFormData(); |
| | | this.initFormData() |
| | | }, |
| | | beforeDestroy() { |
| | | this.taskUid = 0; |
| | | this.taskUid = 0 |
| | | }, |
| | | methods: { |
| | | checkResolution(val) { |
| | | this.form.resolution_width = Number(val.split("*")[0]); |
| | | this.form.resolution_height = Number(val.split("*")[1]); |
| | | this.form.resolution_width = Number(val.split("*")[0]) |
| | | this.form.resolution_height = Number(val.split("*")[1]) |
| | | }, |
| | | preview(row) { |
| | | this.previewDialog = true; |
| | | 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", ""); |
| | | 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) |
| | | } |
| | | }, |
| | | // 清空输入框 |
| | |
| | | sort: 0, |
| | | status: 0, |
| | | type: 1, |
| | | }; |
| | | resolutions: [ |
| | | { |
| | | height: 0, |
| | | width: 0 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | // 添加设备 |
| | | addDir(node) { |
| | | this.isAdd = true; |
| | | this.isDisabled = false; |
| | | this.initFormData(); |
| | | this.DataStackPool.clean(); |
| | | this.fileList = []; |
| | | this.isAdd = true |
| | | this.isDisabled = false |
| | | this.initFormData() |
| | | this.DataStackPool.clean() |
| | | this.fileList = [] |
| | | }, |
| | | // 数据栈文件夹选中时,由父组件触发 |
| | | selectDir(node) { |
| | | if (node.id === "") { |
| | | return; |
| | | return |
| | | } |
| | | |
| | | this.isDisabled = false; |
| | | this.isAdd = false; |
| | | this.videoItem = null; |
| | | this.$refs.addForm.resetFields(); |
| | | this.isDisabled = false |
| | | this.isAdd = false |
| | | this.videoItem = null |
| | | this.$refs.addForm.resetFields() |
| | | // 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; |
| | | this.form = { ...node } |
| | | this.form.resolution = `${node.resolution_width}*${node.resolution_height}` |
| | | delete this.form.createTime |
| | | delete this.form.updateTime |
| | | delete this.form.status |
| | | |
| | | this.fileList = []; |
| | | this.searchInput = ""; |
| | | this.page = 1; |
| | | this.size = 10; |
| | | this.total = 0; |
| | | this.multipleSelection = []; // 清空选中状态 |
| | | this.initFetchListTask(); |
| | | this.videoUrl = ""; |
| | | this.imgUrl = ""; |
| | | this.fileList = [] |
| | | this.searchInput = "" |
| | | this.page = 1 |
| | | this.size = 10 |
| | | this.total = 0 |
| | | this.multipleSelection = [] // 清空选中状态 |
| | | this.initFetchListTask() |
| | | this.videoUrl = "" |
| | | this.imgUrl = "" |
| | | }, |
| | | initFetchListTask() { |
| | | const uid = Math.round(Math.random() * 1000); |
| | | this.taskUid = uid; |
| | | this.timingtask(uid); |
| | | const uid = Math.round(Math.random() * 1000) |
| | | this.taskUid = uid |
| | | this.timingtask(uid) |
| | | }, |
| | | timingtask(uid) { |
| | | if (uid !== this.taskUid || this.form.id === "") { |
| | | return; |
| | | return |
| | | } |
| | | this.fetchFileList(); |
| | | let _this = this; |
| | | this.fetchFileList() |
| | | let _this = this |
| | | this.timer = setTimeout(() => { |
| | | _this.timingtask(uid); |
| | | }, 2 * 1000); |
| | | _this.timingtask(uid) |
| | | }, 2 * 1000) |
| | | }, |
| | | fetchFileList() { |
| | | findAllFileByStackId({ |
| | |
| | | stackId: this.form.id, |
| | | page: this.page, |
| | | size: this.size, |
| | | type: 0, |
| | | type: 0 |
| | | }) |
| | | .then((rsp) => { |
| | | if (rsp && rsp.success && rsp.data.total >= 0) { |
| | | this.fileList = rsp.data.dataList; |
| | | this.total = rsp.data.total; |
| | | 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); |
| | | }); |
| | | this.$refs.multipleTable.toggleRowSelection(row) |
| | | }) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | |
| | | // 保存 |
| | |
| | | if (this.form.name.indexOf("/") >= 0) { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "保存失败,数据栈名称不能包含'/'!", |
| | | }); |
| | | return; |
| | | message: "保存失败,数据栈名称不能包含'/'!" |
| | | }) |
| | | return |
| | | } |
| | | } |
| | | this.$refs[formName].validate(async (valid) => { |
| | |
| | | if (rsp.success) { |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "数据栈信息保存成功!", |
| | | }); |
| | | this.DataStackPool.fetchFiles(); |
| | | message: "数据栈信息保存成功!" |
| | | }) |
| | | this.DataStackPool.fetchFiles() |
| | | } else { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "数据栈信息保存失败!", |
| | | }); |
| | | message: "数据栈信息保存失败!" |
| | | }) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | }); |
| | | }) |
| | | }, |
| | | // 删除摄像机 |
| | | 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.initFormData() |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "删除成功!", |
| | | }); |
| | | this.DataStackPool.fetchFiles(); |
| | | this.DataStackPool.selectedDir = {}; |
| | | message: "删除成功!" |
| | | }) |
| | | this.DataStackPool.fetchFiles() |
| | | this.DataStackPool.selectedDir = {} |
| | | // 删除后恢复未选中状态 |
| | | this.addDir() |
| | | this.isAdd = false |
| | | this.isDisabled = true |
| | | } else { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "删除失败!", |
| | | }); |
| | | message: "删除失败!" |
| | | }) |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "删除失败!", |
| | | }); |
| | | }); |
| | | }); |
| | | message: "删除失败!" |
| | | }) |
| | | }) |
| | | }) |
| | | }, |
| | | handleTabClick(tab, event) { |
| | | console.log(tab, event); |
| | | console.log(tab, event) |
| | | }, |
| | | handleSelect(val) { |
| | | this.multipleSelection = val.map((row) => { |
| | | return row.id; |
| | | }); |
| | | return row.id |
| | | }) |
| | | }, |
| | | handelSearchInputChange(val) { |
| | | this.multipleSelection = []; |
| | | this.multipleSelection = [] |
| | | }, |
| | | handleUpload() { |
| | | console.log(this.DataStackPool.selectedDir.id); |
| | | console.log( |
| | | this.$refs[ |
| | | `uploader_${this.DataStackPool.selectedDir.id}` |
| | | ][0].$refs.button.$refs.btn.click() |
| | | ); |
| | | console.log(this.DataStackPool.selectedDir.id) |
| | | console.log(this.$refs[`uploader_${this.DataStackPool.selectedDir.id}`][0].$refs.button.$refs.btn.click()) |
| | | }, |
| | | handleRefrashFileList(val) { |
| | | this.page = val; |
| | | this.multipleSelection = []; |
| | | this.fetchFileList(); |
| | | this.page = val |
| | | this.multipleSelection = [] |
| | | this.fetchFileList() |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.size = val; |
| | | this.multipleSelection = []; |
| | | this.fetchFileList(); |
| | | this.size = val |
| | | this.multipleSelection = [] |
| | | this.fetchFileList() |
| | | }, |
| | | async handleSortFile(direct, id) { |
| | | let res = await sortFile({ |
| | | id: id, |
| | | direct: direct, |
| | | }); |
| | | direct: direct |
| | | }) |
| | | if (res && res.success) { |
| | | this.fetchFileList(); |
| | | 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) { |
| | | let ids = this.multipleSelection; |
| | | let ids = this.multipleSelection |
| | | if (!multi) { |
| | | ids = [row.id]; |
| | | ids = [row.id] |
| | | } |
| | | if (!ids.length) { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "未选中文件", |
| | | }); |
| | | return; |
| | | message: "未选中文件" |
| | | }) |
| | | return |
| | | } |
| | | try { |
| | | let res = await updateStatus({ |
| | | ids: ids, |
| | | status: status, |
| | | }); |
| | | status: status |
| | | }) |
| | | if (res && res.success) { |
| | | this.fetchFileList(); |
| | | this.fetchFileList() |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "切换文件处理状态成功", |
| | | }); |
| | | message: "切换文件处理状态成功" |
| | | }) |
| | | } |
| | | } catch { |
| | | console.log("err"); |
| | | console.log("err") |
| | | } |
| | | }, |
| | | dropdownClick(cmd) { |
| | | cmd.cb(cmd.data); |
| | | cmd.cb(cmd.data) |
| | | }, |
| | | handleFileDelete(rows, multi = false) { |
| | | let _this = this; |
| | | let ids = this.multipleSelection; |
| | | let _this = this |
| | | let ids = this.multipleSelection |
| | | if (!multi) { |
| | | ids = [rows.id]; |
| | | ids = [rows.id] |
| | | } |
| | | if (!ids.length) { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "未选中文件", |
| | | }); |
| | | return; |
| | | message: "未选中文件" |
| | | }) |
| | | return |
| | | } |
| | | this.$confirm("提示:确定删除该文件吗?", { |
| | | center: true, |
| | | cancelButtonClass: "comfirm-class-cancle", |
| | | confirmButtonClass: "comfirm-class-sure", |
| | | confirmButtonClass: "comfirm-class-sure" |
| | | }) |
| | | .then(() => { |
| | | deleteLocalFile({ ids: ids }).then((rsp) => { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "文件已删除", |
| | | }); |
| | | }); |
| | | message: "文件已删除" |
| | | }) |
| | | }) |
| | | }) |
| | | .catch(() => {}); |
| | | .catch(() => {}) |
| | | }, |
| | | handleFileMove(row) { |
| | | this.targetDir = ""; |
| | | this.targetFile = row.id; |
| | | this.fileDialog = true; |
| | | this.targetDir = "" |
| | | this.targetFile = row.id |
| | | this.fileDialog = true |
| | | }, |
| | | handleFileRename(row) { |
| | | this.editRowId = row.id; |
| | | clearTimeout(this.timer); |
| | | this.timer = null; |
| | | this.editRowId = row.id |
| | | clearTimeout(this.timer) |
| | | this.timer = null |
| | | }, |
| | | cellRenameFile(row) { |
| | | this.editRowId = ""; |
| | | this.editRowId = "" |
| | | renameFile({ id: row.id, name: row.name }) |
| | | .then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "文件重命名成功", |
| | | }); |
| | | message: "文件重命名成功" |
| | | }) |
| | | } else { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "文件重命名失败", |
| | | }); |
| | | message: "文件重命名失败" |
| | | }) |
| | | } |
| | | if (!this.timer) { |
| | | this.initFetchListTask(); |
| | | this.initFetchListTask() |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | if (!this.timer) { |
| | | this.initFetchListTask(); |
| | | this.initFetchListTask() |
| | | } |
| | | }); |
| | | }) |
| | | }, |
| | | isSelectable(row, rowIndex) { |
| | | return row.status !== 2; |
| | | 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: "复制失败", |
| | | }); |
| | | } |
| | | 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: "移动成功", |
| | | }); |
| | | this.fileDialog = false; |
| | | message: "移动成功" |
| | | }) |
| | | this.fileDialog = false |
| | | } else { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "移动失败", |
| | | }); |
| | | message: "移动失败" |
| | | }) |
| | | } |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | height: 230px; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |