<template>
  <BorderRadiusImage class='Card' borderRadius="2px"
    borderColor="linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0))" borderWidth="2px">
    <div class="info" :style="{ gap }">
      <p v-for="(item, index) in keyMap" :key="index">
        <span>{{ item.label }}: </span>
        <span>
          <slot :name="`form-${item.key}`" :data="cardData">
            {{ getValue(item.key) }}
          </slot>
        </span>
      </p>
    </div>

    <div class="bottom" v-if="hasBtn">
      <slot name="button">
        <Button>
          {{ buttonText }}
        </Button>
      </slot>
    </div>
    <div class="status" :style="{ background: 'linear-gradient(123deg, #00B3CC 0%, rgba(0, 179, 204, 0) 100%)' }">
      <span class="text">正常</span>
    </div>
  </BorderRadiusImage>
</template>

<script>
import Button from '@screen/components/Buttons/Button.vue';
import BorderRadiusImage from "@screen/components/BorderRadiusImage.vue";
import { get as pathGet } from "lodash";

export default {
  name: 'Card',
  components: {
    Button,
    BorderRadiusImage
  },
  props: {
    cardData: {
      type: Object,
      default: () => ({
        source: "济菏运管中心",
        location: "长清大学城收费站",
        direction: "117.123456",
        direction2: "37.12234",
        state: 1
      })
    },
    keyMap: {
      type: Array,
      default: () => ([
        {
          key: "source",
          label: "机构名称"
        },
        {
          key: "location",
          label: "机构地址"
        },
        {
          key: "direction",
          label: "经度"
        },
        {
          key: "direction2",
          label: "纬度"
        },
        {
          key: "direction3",
          label: "救援外协单位"
        }
      ])
    },
    buttonIcon: {
      type: String,
      default: "images/insert.svg"
    },
    buttonText: {
      type: String,
      default: "修改"
    },
    gap: {
      type: String,
      default: "6px"
    },
    hasBtn: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      stateMap: {
        1: "confirmed",
        2: 'comfortable',
        3: 'congestion',
        4: "normal"
      }
    }
  },
  methods: {
    getValue(key) {
      return pathGet(this.cardData, key) ?? '-'
    }
  }
}
</script>

<style lang='scss' scoped>
.Card {
  color: #fff;
  display: flex;
  background: #133242;
  opacity: 1;
  padding: 18px 12px;
  gap: 12px;
  height: 100%;
  overflow: hidden;
  position: relative;
  flex-direction: column;

  .info {
    flex: 1;
    display: flex;
    flex-direction: column;
    // align-items: center;
    // justify-content: space-between;

    >p {
      height: 21px;
      font-size: 14px;
      // font-family: PingFang SC, PingFang SC;
      font-weight: 400;
      line-height: 21px;
      display: flex;

      &>:first-child {
        margin-right: 6px;
        flex: 1;
      }

      &>:last-child {
        flex: 2;
        color: #FFFFFF;
      }
    }
  }

  .bottom {
    display: flex;
    justify-content: end;
    gap: 9px;
  }

  .status {
    position: absolute;
    right: 0;
    top: 0;
    width: 51px;
    height: 51px;
    clip-path: polygon(60% 0, 100% 39%, 100% 100%, 0 0);
    display: flex;
    justify-content: center;
    font-size: 12px;

    .text {
      transform: rotate(42deg);
      display: block;
      line-height: 30px;
    }

    &::after {
      content: "";
      position: absolute;
      background: linear-gradient(-147deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 0%, #FFFFFF 46%, rgba(255, 255, 255, 0) 100%);
      height: 1px;
      width: 124%;
      transform: rotate(45deg);
      right: calc(-25% - 1px);
      transform-origin: left top;
    }
  }
}
</style>