MonitorList.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <el-form label-width="80px" size="mini" :inline="inline" class="monitor-list-form">
  3. <el-form-item label="可用监控">
  4. <el-checkbox-group v-model="checkList" class="m-box">
  5. <li v-for="(x, key) in monitorList" :key="key">
  6. <el-image class="el-image" :src="x.picUrl" :preview-src-list="[x.picUrl]"></el-image>
  7. <el-checkbox style="padding: 0 2px;" :label="x">{{ x.channelName }}</el-checkbox>
  8. </li>
  9. </el-checkbox-group>
  10. </el-form-item>
  11. <span v-for="(va, key) in value" :key="key">
  12. <all v-if="includes(va, 'Object')" :value="va" :keys="keys[key] || {}"></all>
  13. <div v-else-if="includes(va, 'Array') && keys[key]">
  14. <component :is="va | arrayType" :value="va" :keys="keys[key]" :headers="value['tabHeader'] || []" @change="change" :changeData="changeData"></component>
  15. </div>
  16. <template v-else>
  17. <el-form-item :label="keys[key] || key" v-if="keys[key] && key != '_caveat'"><el-input v-model="value[key]" type="textarea"></el-input></el-form-item>
  18. <el-alert style="margin-bottom: 10px;" v-if="key == '_caveat'" :title="value[key]" type="error" effect="dark" :closable="false"></el-alert>
  19. </template>
  20. </span>
  21. </el-form>
  22. </template>
  23. <script>
  24. import tplArray from './dataTypeTpl/array1Obj.vue';
  25. import tplTabArray from './dataTypeTpl/array2Arr.vue';
  26. export default {
  27. name: 'All',
  28. components: {
  29. tplArray,
  30. tplTabArray
  31. },
  32. props: {
  33. value: {
  34. type: Object,
  35. default() {
  36. return {};
  37. }
  38. },
  39. keys: {
  40. type: Object,
  41. default() {
  42. return {};
  43. }
  44. },
  45. inline: {
  46. type: Boolean,
  47. default: false
  48. }
  49. },
  50. data() {
  51. return {
  52. //表头变化
  53. changeData: {},
  54. //摄像头列表
  55. monitorList: [],
  56. checkList:[]
  57. };
  58. },
  59. watch:{
  60. "checkList.length"(n){
  61. this.value.list = this.checkList.map(x=>{
  62. return {
  63. ...x,
  64. name:x.channelName
  65. };
  66. });
  67. }
  68. },
  69. mounted() {
  70. this.$port.getMonitorList().then(res => {
  71. this.monitorList = res;
  72. let value = Object.assign({},this.value).list;
  73. //初始化checkList
  74. this.checkList = res.filter((x,i)=>{
  75. for(let v = 0,c = 0;c = value[v];v++){
  76. if(c.url==x.url){
  77. value.splice(c,1);
  78. return x;
  79. }
  80. }
  81. });
  82. });
  83. },
  84. //检测数组 - 对应数据结构类型
  85. filters: {
  86. arrayType(value) {
  87. return value.length ? (Array.isArray(value[0]) ? 'tplTabArray' : 'tplArray') : 'tplArray';
  88. }
  89. },
  90. methods: {
  91. change(data) {
  92. this.changeData = data;
  93. }
  94. }
  95. };
  96. </script>
  97. <style lang="less">
  98. .monitor-list-form {
  99. .m-box {
  100. display: flex;
  101. list-style-type: none;
  102. flex-wrap: wrap;
  103. & > li {
  104. width: calc(33.33% - 10px);
  105. border-radius: 4px;
  106. overflow: hidden;
  107. box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.1);
  108. margin: 5px;
  109. .el-image {
  110. width: 100%;
  111. }
  112. }
  113. }
  114. }
  115. </style>