riku
2025-07-08 91513e171078ed6b0887f87b9fced33895d6d3fb
src/components/inspection/SceneDevice.vue
@@ -4,8 +4,7 @@
  <!-- 选项 -->
  <!-- 设备类型  -->
  <el-row>
    <el-col>
      <el-tabs class="child_select" placeholder="设备类型" v-model="currSelect.topDeviceTypeId">
    <el-tabs style="width: 100%" placeholder="设备类型" v-model="currSelect.topDeviceTypeId">
        <el-tab-pane v-for="item in deviceTopTypes" :key="item.id" :name="item.id">
          <template #label>
            <el-badge :value="item.count" :type="item.count == 0 ? 'danger' : 'primary'">
@@ -16,36 +15,40 @@
          </template>
        </el-tab-pane>
      </el-tabs>
    </el-col>
  </el-row>
  <el-collapse v-model="activeNames" style="border: 4px">
    <el-collapse-item
  <el-scrollbar :height="height" v-loading="loading">
    <!-- <el-collapse v-model="activeNames" style="border: 4px"> -->
    <!-- <el-collapse-item
      v-for="item in formInfo"
      :key="item.id"
      :name="item.id"
      class="collapse-item-class"
    >
      <template #title>
        <div style="display: flex; width: 100%; justify-content: space-between">
          <div style="">
            <el-descriptions style="" :column="3" size="small" border>
              <el-descriptions-item
                width="64px"
                :label="currSelect.topDeviceTypeId == 0 ? '站点名称' : '设备名称'"
                :span="3"
                >{{ item.name || '无' }}</el-descriptions-item
              >
              <el-descriptions-item label="供应商">{{
                item.supplier || '无'
              }}</el-descriptions-item>
              <el-descriptions-item label="运维商">{{
                item.maintainer || '无'
              }}</el-descriptions-item>
              <el-descriptions-item label="运维频次">
      > -->
    <!-- <template #title> -->
    <div v-for="item in formInfo" :key="item.id" :name="item.id" class="collapse-item-class">
      <el-card class="m-b-10">
        <div style="text-align: start">
          <el-row>
            <el-col :span="12">
              <div>
                <el-text>{{
                  (currSelect.topDeviceTypeId == 0 ? '站点名称:' : '设备名称:') +
                  (item.name || '无')
                }}</el-text>
              </div>
              <template v-if="item._showMore">
                <div>
                  <el-text>{{ '供应商:' + (item.supplier || '无') }}</el-text>
                </div>
                <div>
                  <el-text>{{ '运维商:' + (item.maintainer || '无') }}</el-text>
                </div>
                <el-space>
                  <el-text>{{ '运维频次:' }}</el-text>
                <el-select
                  v-model="item.maintainFrequency"
                  :disabled="isDisabled"
                  style="width: 150px"
                    style="width: 100px"
                >
                  <el-option
                    v-for="frequency of maintainFrequencysArray"
@@ -54,18 +57,30 @@
                    :value="frequency.key"
                  ></el-option>
                </el-select>
              </el-descriptions-item>
              <el-descriptions-item label="运维人员">{{
                item.maintainStaff || '无'
              }}</el-descriptions-item>
              <el-descriptions-item label="运维联系方式">{{
                item.maintainTel || '无'
              }}</el-descriptions-item>
              <el-descriptions-item label="品牌型号">{{
                item.brandModel || '无'
              }}</el-descriptions-item>
              <el-descriptions-item label="运行状态">
                <el-select v-model="item.runningStatus" :disabled="isDisabled" style="width: 150px">
                </el-space>
              </template>
            </el-col>
            <el-col :span="12">
              <div>
                <el-text>{{ '类型:' + (item._typename || '无') }}</el-text>
              </div>
              <template v-if="item._showMore">
                <div>
                  <el-text>{{ '运维人员:' + (item.maintainStaff || '无') }}</el-text>
                </div>
                <div>
                  <el-text>{{ '联系方式:' + (item.maintainTel || '无') }}</el-text>
                </div>
                <div>
                  <el-text>{{ '品牌型号:' + (item.brandModel || '无') }}</el-text>
                </div>
                <el-space>
                  <el-text>{{ '运行状态:' }}</el-text>
                  <el-select
                    v-model="item.runningStatus"
                    :disabled="isDisabled"
                    style="width: 100px"
                  >
                  <el-option
                    v-for="status of runStatusArray"
                    :key="status.key"
@@ -73,16 +88,20 @@
                    :value="status.key"
                  ></el-option>
                </el-select>
              </el-descriptions-item>
              <el-descriptions-item label="类型">
                {{ item._typename || '无' }}
              </el-descriptions-item>
            </el-descriptions>
          </div>
          <div style="display: flex">
            <!-- <div class="sub-title">{{ item.name }}</div> -->
            <!-- 图片 -->
                </el-space>
              </template>
            </el-col>
          </el-row>
          <el-row justify="end">
            <el-link type="success" @click="item._showMore = !item._showMore">
              <el-icon>
                <Bottom v-if="!item._showMore" />
                <Top v-else />
              </el-icon>
              {{ item._showMore ? '收起更多' : '更多信息' }}
            </el-link>
          </el-row>
          <!-- <div style="display: flex">
            <div class="image-container">
              <div
                class="block-div"
@@ -102,23 +121,25 @@
                }}</span>
              </div>
            </div>
            </div> -->
          </div>
        </div>
      </template>
        <!-- </template> -->
      <!-- 详细内容开始 -->
      <el-form :model="item" class="form_class">
        <el-form-item label="状态">
        <el-space>
          <div>
            <div>设</div>
            <div>备</div>
            <div>状</div>
            <div>态</div>
          </div>
          <el-tabs tab-position="top">
            <el-tab-pane
              v-for="(status, i) in item._statusList"
              :label="status.dlCreateTime.slice(0, 10)"
              :key="i"
            >
              <el-form :model="status" class="form-class">
                <el-form-item label="位置" style="margin-bottom: 10px">
                  {{ status.dlLocation }}
                </el-form-item>
                <el-form-item label="图片">
              <!-- <el-form :model="status" class="form-class"> -->
              <!-- <el-form-item label=""> -->
                  <!-- 图片 -->
                  <el-space>
                    <div v-if="status._paths && status._paths.length > 0">
@@ -133,29 +154,40 @@
                    </div>
                    <el-empty v-else></el-empty>
                  </el-space>
              <!-- </el-form-item> -->
              <el-form-item v-if="status.dlLocation" label="位置" style="margin-bottom: 10px">
                {{ status.dlLocation }}
                </el-form-item>
              </el-form>
              <!-- </el-form> -->
            </el-tab-pane>
          </el-tabs>
        </el-form-item>
      </el-form>
        </el-space>
      </el-card>
    </div>
      <!-- 详细内容结束 -->
    </el-collapse-item>
  </el-collapse>
    <!-- </el-collapse-item> -->
    <!-- </el-collapse> -->
  <!-- 空状态 -->
  <el-empty v-if="isEmpty" />
  </el-scrollbar>
  <!-- </template>
  </CompGenericWrapper> -->
</template>
<script>
import { reactive } from 'vue'
import deviceApi from '@/api/fysp/deviceApi'
import { $fysp } from '@/api/index'
import { toLabel } from '@/enum/device/device'
export default {
  components: {},
  props: {
    scene: Object
    scene: Object,
    height: {
      type: String,
      default: '70vh'
    }
  },
  watch: {
    // 选择改变监听
@@ -164,10 +196,16 @@
        this.getList()
      },
      deep: true
    },
    scene(nV, oV) {
      if (nV != oV) {
        this.init()
      }
    }
  },
  data() {
    return {
      loading: false,
      activeNames: [],
      // 控制是否展示空状态
      isEmpty: false,
@@ -180,7 +218,7 @@
      },
      // 控制表单是否可以编辑
      isDisabled: true,
      formInfo: {},
      formInfo: [],
      rules: [],
      // 设备类型
      deviceTopTypes: [
@@ -206,8 +244,7 @@
      ownershipArray: [
        { key: 0, value: '购买' },
        { key: 1, value: '租赁' }
      ],
      scene: {}
      ]
    }
  },
@@ -234,10 +271,7 @@
    showDetail(item) {
      item._isDetail = !item._isDetail
    },
    init(scene) {
      // 父组件主动调用初始化子组件的方法
      this.scene = scene
    init() {
      this.getList()
      this.getTabsCount()
    },
@@ -262,14 +296,17 @@
        newKey = newKey.charAt(0).toLowerCase() + newKey.slice(1)
        newObj[newKey] = obj[key]
      }
      return newObj
      return reactive(newObj)
    },
    // 新增字段
    initFormData(data) {
      data._isDetail = false
    },
    getList() {
      deviceApi.fetchDevices(this.scene.guid, this.currSelect.topDeviceTypeId).then((result) => {
      this.loading = true
      deviceApi
        .fetchDevices(this.scene.guid, this.currSelect.topDeviceTypeId)
        .then((result) => {
        this.initList()
        if (result.data == null || result.data.length <= 0) {
          this.isEmpty = true
@@ -296,17 +333,18 @@
              element = this.convertKeys(result.data[index])
              element = this.setDeviceType(element)
              element._picUrls = imgPaths
              for (let index = 0; index < statusData.length; index++) {
                for (let index = statusData.length - 1; index >= 0; index--) {
                const statusItem = statusData[index]
                // 设备对象添加一个属性列表属性用来保存设备状态
                this.saveStatus(element, statusItem)
                element.dlLocation = statusItem.dlLocation
                }
                this.formInfo.push(element)
              }
            }
          })
        }
      })
        .finally(() => (this.loading = false))
    },
    setDeviceType(element) {
      var type = []
@@ -330,7 +368,7 @@
      }
      // 排序
      device._statusList.sort(function (x, y) {
        return new Date(x.dlCreateTime) - new Date(y.dlCreateTime) //   降序,升序则反之
        return new Date(y.dlCreateTime) - new Date(x.dlCreateTime) //   降序,升序则反之
      })
    },
    submit() {},
@@ -390,8 +428,8 @@
  /* overflow: hidden; 确保图片不会超出容器 */
}
.pic-style {
  width: 150px;
  height: 150px;
  width: 100px;
  height: 100px;
  border-radius: 4px;
}
.card-style {