Newer
Older
Nanping_sponge_GCYPG / src / views / preassess / adaptationConfig / tableDalgo.vue
@liyingjing liyingjing on 25 Oct 2023 5 KB 工程预评估
<template>
  <el-table
    stripe
    :data="tableData"
    style="width: 100%"
    v-loading="loading"
    class="table"
    max-height="680"
  >
    <el-table-column prop="itemType" label="设施类型" align="center">
      <template #default="{ row }">{{ findItemTypeText(row.itemType) }}</template>
    </el-table-column>
    <el-table-column prop="itemName" label="单项设施" align="center" />
    <el-table-column label="工程类型" align="center">
      <el-table-column
        v-for="item in sponge_engineering_type"
        :prop="item.value"
        :label="item.label"
        :key="item.value"
        align="center"
      >
        <template #default="{ row }">
          <div class="iconList" :class="{ disabled: opts === 'view' }">
            <div
              class="img"
              :title="icon.text"
              v-for="icon in row[`${item.value}_iconlist`]"
              @click="selectChange(icon.value, row, item.value, icon)"
            >
              <img :src="icon.url" alt="">
            </div>
          </div>
        </template>
      </el-table-column>
    </el-table-column>
  </el-table>
  <div class="tips">
    <span>注:</span>
    <div class="item" v-for="icon in tipsIconList">
      <div class="img">
        <img :src="icon.url" alt="">
      </div>
      <span class="line">———</span>
      <span>{{ icon.text }}</span>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { getFacilitiesPolluteRemoveConfigItemList } from '@/api/preassess/removalRate'
import {
  getFacilitiesAdaptabilityConfigItemList,
  facilitiesAdaptabilityConfigItemEdit
} from '@/api/preassess/adaptationConfig'
import { iconList } from './icon'
const { proxy } = getCurrentInstance();
const props = defineProps({
  id: {
    type: [String, Number],
    default: ''
  },
  opts: {
    type: String,
    default: ''
  }
})
const { id, opts } = props
const { sponge_engineering_type } = proxy.useDict("sponge_engineering_type")
const { sponge_facilities_type } = proxy.useDict("sponge_facilities_type")
const findItemTypeText = (itemType) => {
  const item = sponge_facilities_type.value.find(it => it.value === itemType)
  return item?.label || ''
}
const tableData = ref([])
const loading = ref(false)

const getTableList = async () => {
  loading.value = true
  const res = await getFacilitiesPolluteRemoveConfigItemList({ status: 1 })
  loading.value = false
  if(res.code !== 200) return
  for (const it of res.data) {
    for (const item of sponge_engineering_type.value) {
      it[item.value] = 'suitable'
      it[`${item.value}_iconlist`] = JSON.parse(JSON.stringify(iconList))
    }
  }
  tableData.value = res.data || []
}

const getTableList2 = async () => {
  loading.value = true
  const res = await getFacilitiesAdaptabilityConfigItemList({
    configId: id
  })
  loading.value = false
  if(res.code !== 200) return
  for (const it of res.data) {
    const adaptabilityConfigJson = JSON.parse(it.adaptabilityConfigJson)
    for (const item of sponge_engineering_type.value) {
      const adaptabilityConfigJsonItem = adaptabilityConfigJson.find(ele => ele.key === item.value)
      it[item.value] = adaptabilityConfigJsonItem?.value.replace(/\s*/g,"") || ''
      it[`${item.value}_iconlist`] = JSON.parse(JSON.stringify(iconList))
      const curIcon = it[`${item.value}_iconlist`].find(icon => icon.value === it[item.value])
      setIcon(it[`${item.value}_iconlist`], curIcon)
    }
  }
  tableData.value = res.data || []
  console.log(tableData)
}

const selectChange = async (value, row, prop, icon) => {
  if(opts === 'view') return
  console.log(value, row, prop)
  if(row[prop] === value) return
  row[prop] = value
  setIcon(row[`${prop}_iconlist`], icon)
  if(opts === 'add') return
  const adaptabilityConfigJson = JSON.parse(row.adaptabilityConfigJson)
  const it = adaptabilityConfigJson.find(item => item.key === prop)
  if(!it) return
  it.value = value
  row.adaptabilityConfigJson = JSON.stringify(adaptabilityConfigJson)
  const params = {
    id: row.id,
    configId: row.configId,
    facilitiesPolluteRemoveConfigItemId: row.facilitiesPolluteRemoveConfigItemId,
    adaptabilityConfigJson: row.adaptabilityConfigJson
  }
  console.log(params)
  loading.value = true
  await facilitiesAdaptabilityConfigItemEdit(params)
  loading.value = false
}

const setIcon = (iconList, curIcon) => {
  if(!curIcon) return
  restIcon(iconList)
  curIcon.actived = true
  curIcon.url = curIcon.alternative.active
}

const restIcon = (iconList) => {
  for (const icon of iconList) {
    icon.actived = false
    icon.url = icon.alternative.normal
  }
}

const tipsIconList = JSON.parse(JSON.stringify(iconList))
restIcon(tipsIconList)

onMounted(() => {
  if(id) getTableList2()
  else getTableList()
})

defineExpose({
  tableData,
  sponge_engineering_type
})
</script>

<style lang="scss" scoped>
::v-deep(.group) {
  display: flex;
  flex-direction: column;
  .group-item {
    margin-right: 0 !important;
  }
}
.iconList {
  margin-top: 2px;
  cursor: pointer;
  display: flex;
  justify-content: space-around;
  align-items: center;
  .img {
    width: 16px;
    height: 16px;
    img {
      width: 100%;
      height: 100%;
    }
  }
  &.disabled {
    .img {
      cursor: not-allowed;
    }
  }
}
.tips {
  display: flex;
  align-items: center;
  font-size: 16px;
  color: #777;
  margin-top: 10px;
  .item {
    display: flex;
    align-items: center;
    margin-right: 20px;
    margin-top: 2px;
    .img {
      width: 16px;
      height: 16px;
      img {
        width: 100%;
        height: 100%;
      }
    }
    .line {
      color: #999;
      margin: 0 2px;
    }
    &:last-of-type {
      margin-right: 0;
    }
  }
}
</style>