|
|
@@ -0,0 +1,206 @@
|
|
|
+<template>
|
|
|
+ <div id="ptzPreset" style="width: 100%">
|
|
|
+ <el-tag v-for="item in presetList"
|
|
|
+ key="item.presetId"
|
|
|
+ closable
|
|
|
+ @close="delPreset(item)"
|
|
|
+ @click="gotoPreset(item)"
|
|
|
+ style="margin-right: 1rem; cursor: pointer"
|
|
|
+ >
|
|
|
+ {{item.presetName?item.presetName:item.presetId}}
|
|
|
+ </el-tag>
|
|
|
+ <el-input
|
|
|
+ min="1"
|
|
|
+ max="255"
|
|
|
+ placeholder="预置位编号"
|
|
|
+ addonBefore="预置位编号"
|
|
|
+ addonAfter="(1-255)"
|
|
|
+ style="width: 120px; vertical-align: bottom;"
|
|
|
+ v-if="inputVisible"
|
|
|
+ v-model="ptzPresetId"
|
|
|
+ ref="saveTagInput"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <template v-slot:append>
|
|
|
+ <el-button @click="addPreset()">保存</el-button>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ <el-button v-else size="small" @click="showInput">+ 添加</el-button>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: "ptzPreset",
|
|
|
+ props: [ 'channelDeviceId', 'deviceId'],
|
|
|
+ components: {},
|
|
|
+ created() {
|
|
|
+ this.getPresetList()
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ presetList: [],
|
|
|
+ inputVisible: false,
|
|
|
+ ptzPresetId: '',
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getPresetList: function () {
|
|
|
+ this.$axios({
|
|
|
+ method: 'get',
|
|
|
+ url: `/api/ptz/preset/query/${this.deviceId}/${this.channelDeviceId}`,
|
|
|
+ }).then((res)=> {
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.presetList = res.data.data;
|
|
|
+ // 防止出现表格错位
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.channelListTable.doLayout();
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ }).catch((error)=> {
|
|
|
+
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ showInput() {
|
|
|
+ this.inputVisible = true;
|
|
|
+ this.$nextTick(_ => {
|
|
|
+ this.$refs.saveTagInput.$refs.input.focus();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ addPreset: function (){
|
|
|
+ const loading = this.$loading({
|
|
|
+ lock: true,
|
|
|
+ fullscreen: true,
|
|
|
+ text: '正在发送指令',
|
|
|
+ spinner: 'el-icon-loading',
|
|
|
+ background: 'rgba(0, 0, 0, 0.7)'
|
|
|
+ })
|
|
|
+ this.$axios({
|
|
|
+ method: 'get',
|
|
|
+ url: `/api/ptz/preset/add/${this.deviceId}/${this.channelDeviceId}`,
|
|
|
+ params: {
|
|
|
+ presetId: this.ptzPresetId
|
|
|
+ }
|
|
|
+ }).then((res)=> {
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ setTimeout(()=>{
|
|
|
+ loading.close()
|
|
|
+ this.inputVisible = false;
|
|
|
+ this.ptzPresetId = ""
|
|
|
+ this.getPresetList()
|
|
|
+ }, 1000)
|
|
|
+ }else {
|
|
|
+ loading.close()
|
|
|
+ this.inputVisible = false;
|
|
|
+ this.ptzPresetId = ""
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: res.data.msg,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }).catch((error)=> {
|
|
|
+ loading.close()
|
|
|
+ this.inputVisible = false;
|
|
|
+ this.ptzPresetId = ""
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: error,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ gotoPreset: function (preset){
|
|
|
+ console.log(preset)
|
|
|
+ this.$axios({
|
|
|
+ method: 'get',
|
|
|
+ url: `/api/ptz/preset/call/${this.deviceId}/${this.channelDeviceId}`,
|
|
|
+ params: {
|
|
|
+ presetId: preset.presetId
|
|
|
+ }
|
|
|
+ }).then((res)=> {
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: '调用成功',
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: res.data.msg,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }).catch((error)=> {
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: error,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ delPreset: function (preset){
|
|
|
+ this.$confirm("确定删除此预置位", '提示', {
|
|
|
+ dangerouslyUseHTMLString: true,
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ const loading = this.$loading({
|
|
|
+ lock: true,
|
|
|
+ fullscreen: true,
|
|
|
+ text: '正在发送指令',
|
|
|
+ spinner: 'el-icon-loading',
|
|
|
+ background: 'rgba(0, 0, 0, 0.7)'
|
|
|
+ })
|
|
|
+ this.$axios({
|
|
|
+ method: 'get',
|
|
|
+ url: `/api/ptz/preset/delete/${this.deviceId}/${this.channelDeviceId}`,
|
|
|
+ params: {
|
|
|
+ presetId: preset.presetId
|
|
|
+ }
|
|
|
+ }).then((res)=> {
|
|
|
+ if (res.data.code === 0) {
|
|
|
+ setTimeout(()=>{
|
|
|
+ loading.close()
|
|
|
+ this.getPresetList()
|
|
|
+ }, 1000)
|
|
|
+ }else {
|
|
|
+ loading.close()
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: res.data.msg,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ }).catch((error)=> {
|
|
|
+ loading.close()
|
|
|
+ this.$message({
|
|
|
+ showClose: true,
|
|
|
+ message: error,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }).catch(() => {
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style>
|
|
|
+.channel-form {
|
|
|
+ display: grid;
|
|
|
+ background-color: #FFFFFF;
|
|
|
+ padding: 1rem 2rem 0 2rem;
|
|
|
+ grid-template-columns: 1fr 1fr 1fr;
|
|
|
+ gap: 1rem;
|
|
|
+}
|
|
|
+</style>
|