detail.vue 7.44 KB
<!--
 * @Date: 2024-09-29 14:26:41
 * @LastEditors: hookehuyr hookehuyr@gmail.com
 * @LastEditTime: 2024-09-30 15:33:16
 * @FilePath: /hager/src/views/product/detail.vue
 * @Description: 文件描述
-->
<template>
  <div class="product-detail">
    <hager-box>
      <div>
        <el-breadcrumb separator="/">
          <el-breadcrumb-item>所有产品</el-breadcrumb-item>
          <el-breadcrumb-item>配电产品</el-breadcrumb-item>
          <el-breadcrumb-item>低压主配电</el-breadcrumb-item>
          <el-breadcrumb-item>HW+系列空气断路器</el-breadcrumb-item>
        </el-breadcrumb>
      </div>
    </hager-box>
    <hager-box class="box-n">
      <el-row :gutter="10" style="margin-bottom: 3rem;">
        <el-col :span="10">
          <hager-carousel></hager-carousel>
        </el-col>
        <el-col :span="14">
          <div class="product-detail-info">
            <div class="product-title" style="">HW+系列空气断路器</div>
            <div class="product-sub" style="margin: 1rem 0 2rem;">全新智能型hw+系列空气断路器,可搭载集通讯、自诊断、功能编程、维护预警、远程监控、测量、报警、保护功能于一体的Sentinel Energy控制器。</div>
            <ul class="product-info-list">
              <li>实现谐波测量,实时监测电能质量;</li>
              <li>图文显示多电量参数,系统状态一目了然;</li>
              <li>支持Modbus远程通讯协议,无线蓝牙连接等多种通讯方式,全方位提升客户的数字化体验。</li>
            </ul>
          </div>
        </el-col>
      </el-row>
    </hager-box>
    <hager-box class="box-2n">
      <hager-h1 title="产品优势" sub="Product advantages"></hager-h1>
      <div class="product-advantage" style="">
        <div class="item" v-for="(item, index) in 3" :key="index">
          <el-row :gutter="0" v-for="(item, index) in 5" :key="index">
            <el-col :span="6">极致的分断能力:</el-col>
            <el-col :span="18">标配独立的故障指示触点、远程复位、ZSI保护功能</el-col>
          </el-row>
        </div>
      </div>
    </hager-box>
    <hager-box class="box-n">
      <hager-h1 title="产品资料" sub="Product Information"></hager-h1>
      <div class="product-info">
        <div class="info-control">
          <div class="control-left">
            <div :class="['button', is_active === 0 ? 'active' : '']" @click="onClick(0)">产品样本</div>
            <div :class="['button', is_active === 1 ? 'active' : '']" @click="onClick(1)">技术参数</div>
            <div :class="['button', is_active === 2 ? 'active' : '']" @click="onClick(2)">产品说明书</div>
            <div :class="['button', is_active === 3 ? 'active' : '']" @click="onClick(3)">安装教程</div>
          </div>
          <div>
            <div @click="goToDownload" :class="['button', is_download_checked ? 'active' : '']">下载选中</div>
          </div>
        </div>
        <div>
          <div class="info-list" v-for="(item, index) in download_list" :key="index">
            <div class="info-list-title">
              <i class="el-icon-document" style="font-size: 1.5rem;"></i>&nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;{{ item.size }}
            </div>
            <div class="info-list-control">
              <span>预览</span>
              <span>直接下载</span>
              <i v-if="item.checked" @click="item.checked = !item.checked" class="el-icon-folder-checked download-checked"></i>
              <i v-else @click="item.checked = !item.checked" class="el-icon-folder  download-unchecked"></i>
            </div>
          </div>
        </div>
      </div>
    </hager-box>
  </div>
</template>

<script>
import mixin from 'common/mixin';
import hagerBox from '@/components/common/hagerBox';
import hagerCarousel from '@/components/hagerCarousel';
import hagerH1 from '@/components/common/hagerH1.vue';
import { MessageBox, Message } from 'element-ui';

export default {
  components: { hagerBox, hagerCarousel, hagerH1 },
  mixins: [mixin.init],
  data () {
    return {
      is_active: 0,
      download_list: [{
        id: '123',
        name: '产品样本',
        size: '123MB',
        checked: false
      }, {
        id: '123',
        name: '产品样本',
        size: '123MB',
        checked: false
      }]
    }
  },
  computed: {
    is_download_checked () {
      return this.download_list.filter(item => item.checked).length > 0;
    }
  },
  mounted () {

  },
  methods: {
    onClick (n) {
      this.is_active = n;
    },
    goToDownload () {
      if (this.is_download_checked) {
        MessageBox.prompt('请输入发送邮箱', '温馨提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          inputPattern: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,
          inputErrorMessage: '邮箱格式不正确'
        }).then(({ value }) => {
          Message({
            type: 'success',
            message: '你的邮箱是: ' + value
          });
        }).catch(() => {
          Message({
            type: 'info',
            message: '取消输入'
          });
        });
      }
    }
  }
}
</script>

<style lang="less" scoped>
.product-detail {
  .box-n {
    background-color: #fff;
    padding: 2rem 0;
  }
  .box-2n {
    background-color: #f1f1f1;
    padding: 2rem 0;
  }
  .product-detail-info {
    .product-title {
      font-size: 2rem;
      font-weight: bold;
      color: @secondary-color;
    }
    .product-sub {
      margin: 1rem 0 2rem;
      color: @text-color;
    }
    .product-info-list {
      padding: 0 1rem;
      li {
        line-height: 2;
        font-size: 0.9rem;
      }
    }
  }
  .product-advantage {
    margin-top: 1rem;
    display: flex;
    flex-wrap: wrap;
    gap: 3rem;
    .item {
      flex: 0 1 calc(50% - 3rem); /* 每行2个元素,减去gap的宽度 */
      box-sizing: border-box;      /* 确保padding和border不会影响宽度计算 */
      padding-top: 1rem;
      background-color: #f0f0f0;
      border-top: 4px solid @primary-color;
      line-height: 2;
    }
  }
  .product-info {
    .info-control {
      display: flex;
      border-bottom: 4px solid @primary-color;
      padding-bottom: 1rem;
      margin-top: 2rem;
      .control-left {
        display: flex;
        flex: 1 0 0;
      }
      .button {
        background-color: #f3f3f3;
        padding: 1rem 2.2rem;
        border-radius: 5px;
        margin-right: 1rem;
        &:hover {
          cursor: pointer;
        }
        &.active {
          background-color: @primary-color;
          color: #fff;
        }
      }
    }
    .info-list {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding-top: 2rem;
      color: #6b6b6b;
      .info-list-title {
        display: flex; align-items: center;
      }
      .info-list-control {
        display: flex;
        justify-content: center;
        align-items: center;
        span {
          margin-right: 1rem;
          &:hover {
            cursor: pointer;
            color: @primary-color;
            text-decoration: underline;
          }
        }
        .download-checked {
          font-size: 1.5rem;
          color: @primary-color;
          &:hover {
            cursor: pointer;
          }
        }
        .download-unchecked {
          font-size: 1.5rem;
          &:hover {
            cursor: pointer;
          }
        }
      }
    }
  }
}
</style>