<template>
  <div class="pda-container">
    <!-- 头部栏 -->
    <div class="header-bar">
      <div class="header-left" @click="$router.back()">
        <i class="el-icon-arrow-left"></i>
        <span>生产领料</span>
      </div>
      <div class="header-right" @click="$router.push({ path: '/' })">
        首页
      </div>
    </div>

    <!-- 搜索框 -->
    <div class="search-container">
      <el-input clearable class="compact-input"
        v-model="scanCode"
        placeholder="请扫描标签条码"
        prefix-icon="el-icon-search"
        @keyup.enter.native="handleScan"
        ref="scanInput"
      />
      <div class="mode-switch">
        <el-switch
          class="custom-switch"
          v-model="isRemoveMode"
          active-color="#ff4949"
          inactive-color="#13ce66">
        </el-switch>
        <span v-if="isRemoveMode" class="switch-text">{{ '移除' }}</span>
        <span v-else class="switch-text2">{{ '添加' }}</span>
      </div>
    </div>

    <!-- 出库单信息卡片 -->
    <div class="material-info-card" v-if="outboundInfo.outboundNo">
      <div class="card-title">
        <span class="title-label">出库单号</span>
        <span class="title-value">{{ outboundInfo.outboundNo }}</span>
      </div>

      <div class="card-details">
        <div class="detail-item">
          <div class="detail-label">关联单号</div>
          <div class="detail-value">{{ outboundInfo.relatedNo }}</div>
        </div>
        <div class="detail-item">
          <div class="detail-label">标签张数</div>
          <div class="detail-value">
            <span class="qualified">{{ outboundInfo.pickedLabels }}</span><span class="total">{{ outboundInfo.totalLabels }}</span>
          </div>
        </div>
        <div class="detail-item">
          <div class="detail-label">物料总数</div>
          <div class="detail-value">
            <span class="qualified">{{ outboundInfo.pickedQty }}</span><span class="total">{{ outboundInfo.totalQty }}</span>
          </div>
        </div>
      </div>
    </div>

    <!-- 出库信息确认标题 -->
    <div class="section-title">
      <div class="title-left">
        <i class="el-icon-circle-check"></i>
        <span>出库信息确认</span>
      </div>
      <div class="title-right">
        <span class="material-list-link" @click="showMaterialListDialog">物料清单</span>
      </div>
    </div>

    <!-- 标签列表 -->
    <div class="label-list">
      <div class="list-header">
        <div class="col-no">NO.</div>
        <div class="col-label">标签条码</div>
        <div class="col-part">物料编码</div>
        <div class="col-unit">单位</div>
        <div class="col-qty">标签数量</div>
      </div>

      <div
        v-for="(label, index) in labelList"
        :key="label.id"
        class="list-item"
      >
        <div class="col-no">{{ labelList.length - index }}</div>
        <div class="col-label">{{ label.labelCode }}</div>
        <div class="col-part">{{ label.partNo }}</div>
        <div class="col-unit">{{ label.unit || '个' }}</div>
        <div class="col-qty">{{ label.quantity }}</div>
      </div>

      <!-- 空状态 -->
      <div v-if="labelList.length === 0" class="empty-labels">
        <p>暂无扫描标签</p>
      </div>
    </div>

    <!-- 底部操作按钮 -->
    <div class="bottom-actions">
      <button class="action-btn secondary" @click="confirmOutbound">
        确定
      </button>
      <button class="action-btn secondary" style="margin-left: 10px;" @click="printLabels">
        打印
      </button>
      <button class="action-btn secondary" style="margin-left: 10px;" @click="cancelOutbound">
        取消
      </button>
    </div>

    <!-- 物料清单弹窗 -->
    <div v-if="showMaterialDialog" class="material-overlay">
      <div class="material-modal">
        <div class="modal-header">
          <span class="modal-title">物料清单</span>
          <i class="el-icon-close close-btn" @click="closeMaterialDialog"></i>
        </div>

        <div class="modal-body">
          <!-- 加载状态 -->
          <div v-if="materialListLoading" class="loading-container">
            <i class="el-icon-loading"></i>
            <span>加载中...</span>
          </div>

          <!-- 物料表格 -->
          <div v-else-if="materialList.length > 0" class="material-table">
            <div class="table-header">
              <div class="col-no">NO.</div>
              <div class="col-material-code">物料编码</div>
              <div class="col-required-qty">需求数量</div>
              <div class="col-picked-qty">已领数量</div>
            </div>

            <div class="table-body">
              <div
                v-for="(item, index) in materialList"
                :key="index"
                class="table-row"
              >
                <div class="col-no">{{ index + 1 }}</div>
                <div class="col-material-code">{{ item.materialCode || item.partNo }}</div>
                <div class="col-required-qty">{{ item.requiredQty || 0 }}</div>
                <div class="col-picked-qty">{{ item.pickedQty || 0 }}</div>
              </div>
            </div>
          </div>

          <!-- 空数据状态 -->
          <div v-else class="empty-material">
            <i class="el-icon-document"></i>
            <p>暂无物料数据</p>
          </div>
        </div>

        <div class="modal-footer">
          <button class="btn-close" @click="closeMaterialDialog">关闭</button>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { scanMaterialLabel,getRequestMaterials } from '@/api/production/production-issue';
import moment from 'moment';
import { notify } from 'node-notifier';

export default {
  data() {
    return {
      scanCode: '',
      outboundInfo: {},
      labelList: [],
      outboundNo: '',
      buNo: '',
      showMaterialDialog: false,
      materialList: [],
      materialListLoading: false,
      isRemoveMode: false // 默认为添加模式
    };
  },
  methods: {
    formatDate(date) {
      return date ? moment(date).format('YYYY-MM-DD') : '';
    },
    // 处理扫描
    handleScan() {
      if (!this.scanCode.trim()) {
        return;
      }
 
      if (this.isRemoveMode) {
        this.removeLabelByCode(this.scanCode.trim());
      } else {
        this.validateAndAddLabel(this.scanCode.trim());
      }
      this.scanCode = '';
    },

    // 验证标签并添加到列表
    validateAndAddLabel(labelCode) {
      const params = {
        labelCode: labelCode,
        notifyNo: this.outboundNo,
        site: this.$store.state.user.site,
      };
      
      scanMaterialLabel(params).then(({ data }) => {
        if (data && data.code === 0) {
          // 检查是否已经扫描过
          const exists = this.labelList.find(item => item.labelCode === labelCode);
          if (exists) {
            this.$message.warning('该标签已扫描，请勿重复扫描');
            return;
          }

          // 添加到列表
          this.labelList.push({
            id: Date.now(),
            labelCode: labelCode,
            partNo: data.labelInfo.partNo,
            quantity: data.labelInfo.quantity,
            unit: data.labelInfo.unit,
            batchNo: data.labelInfo.batchNo
          });

          this.$message.success('操作成功');
        } else {
          this.$message.error(data.msg || '该标签与出库单不符，请检查');
        }
      }).catch(error => {
        this.$message.error('操作失败');
      });
    },

    // 通过条码移除标签
    removeLabelByCode(labelCode) {
      const index = this.labelList.findIndex(item => item.labelCode === labelCode);
      if (index !== -1) {
        this.labelList.splice(index, 1);
        this.$message.success('操作成功');
      } else {
        this.$message.warning('未找到该标签');
      }
    },

    // 确认出库
    confirmOutbound() {
      if (this.labelList.length === 0) {
        this.$message.warning('请先扫描标签');
        return;
      }

      const params = {
        site: this.outboundInfo.site,
        outboundNo: this.outboundNo,
        labels: this.labelList.map(label => ({
          labelCode: label.labelCode,
          quantity: label.quantity,
          batchNo: label.batchNo,
          partNo: label.partNo
        }))
      };

      confirmProductionPicking(params).then(({ data }) => {
        if (data && data.code === 0) {
          this.$message.success('操作成功');
          this.$router.back();
        } else {
          this.$message.error(data.msg || '操作失败');
        }
      }).catch(error => {
        console.error('出库确认失败:', error);
        this.$message.error('操作失败');
      });
    },

    // 打印标签
    printLabels() {
      if (this.labelList.length === 0) {
        this.$message.warning('暂无标签可打印');
        return;
      }

      this.$message.warning('打印功能开发中...');
    },

    // 取消出库
    cancelOutbound() {
      if (this.labelList.length > 0) {
        this.$confirm('取消后将清空已扫描的标签，确定取消吗？', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '继续操作',
          type: 'warning'
        }).then(() => {
          this.$router.back();
        }).catch(() => {
          // 用户选择继续操作
        });
      } else {
        this.$router.back();
      }
    },

    // 显示物料清单弹窗
    showMaterialListDialog() {
      this.showMaterialDialog = true;
      this.loadMaterialList();
    },

    // 加载物料清单
    loadMaterialList() {
      console.log('加载物料清单', this.outboundInfo, this.outboundNo);
      
      if (!this.$store.state.user.site || !this.outboundNo) {
        this.$message.error('缺少必要参数，无法获取物料清单');
        return;
      }

      this.materialListLoading = true;
      const params = {
        site: this.$store.state.user.site,
        outboundNo: this.outboundNo
      };

      getRequestMaterials(params).then(({ data }) => {      
        this.materialListLoading = false;
        if (data && data.code === 0) {
          this.materialList = data.materials || [];
        } else {
          this.$message.error(data.msg || '获取物料清单失败');
          this.materialList = [];
        }
      }).catch(error => {
        this.materialListLoading = false;
        this.$message.error('获取物料清单失败');
        this.materialList = [];
      });
    },

    // 关闭物料清单弹窗
    closeMaterialDialog() {
      this.showMaterialDialog = false;
    },

    // 加载出库单详情
    loadOutboundDetails() {
      const params = {
        outboundNo: this.outboundNo,
        site: this.$store.state.user.site,
      };
      console.log('加载出库单详情参数:', params);
      
      /* getOutboundDetails(params).then(({ data }) => {
        if (data && data.code === 0) {
          this.outboundInfo = data.data;
        } else {
          this.$message.error(data.msg || '获取出库单详情失败');
        }
      }).catch(error => {
        console.error('获取出库单详情失败:', error);
        this.$message.error('获取出库单详情失败');
      }); */
    }
  },

  mounted() {
    // 获取路由参数 
    this.outboundNo = this.$route.params.outboundNo;
    console.log("11111",this.outboundNo);
    
    
    if (!this.outboundNo) {
      this.$message.error('参数错误');
      this.$router.back();
      return;
    }

    // 聚焦扫描框
    this.$nextTick(() => {
      if (this.$refs.scanInput) {
        this.$refs.scanInput.focus();
      }
    });

    // 加载出库单详情
    this.loadOutboundDetails();
  }
};
</script>

<style scoped>
/* 复用入库页面的样式，只修改必要的部分 */
.pda-container {
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;
  background: #f5f5f5;
}

/* 头部栏 */
.header-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 16px;
  background: #17B3A3;
  color: white;
  height: 40px;
  min-height: 40px;
}

.header-left {
  display: flex;
  align-items: center;
  cursor: pointer;
  font-size: 16px;
  font-weight: 500;
}

.header-left i {
  margin-right: 8px;
  font-size: 18px;
}

.header-right {
  cursor: pointer;
  font-size: 16px;
  font-weight: 500;
}

/* 搜索容器 */
.search-container {
  padding: 12px 16px;
  background: white;
  display: flex;
  align-items: center;
  gap: 12px;
}

.search-container .el-input {
  width: 240px;
  margin-right: 12px;
}

/* 紧凑型输入框样式 */
.compact-input ::v-deep .el-input__inner {
  height: 36px;
  padding: 0 12px 0 35px;
  font-size: 14px;
}

.compact-input ::v-deep .el-input__prefix {
  left: 10px;
}

.compact-input ::v-deep .el-input__suffix {
  right: 30px;
}

/* 模式切换开关 */
.mode-switch {
  position: relative;
  display: inline-block;
}

.custom-switch {
  transform: scale(1.3);
}
/* 中间文字 */
.switch-text {
  position: absolute;
  left: 25%;
  transform: translateX(-50%);
  top: 50%;
  transform: translateY(-50%) translateX(-50%);
  font-size: 12px;
  font-weight: 500;
  color: #606266;
  white-space: nowrap;
  pointer-events: none;
  z-index: 1;
  top: 53%;
  transform: translate(-50%, -50%);
  font-size: 12px;
  font-weight: bold;
  color: white;
  pointer-events: none;
  z-index: 2;
}

.switch-text2 {
  position: absolute;
  left: 75%;
  transform: translateX(-50%);
  top: 50%;
  transform: translateY(-50%) translateX(-50%);
  font-size: 12px;
  font-weight: 500;
  color: #606266;
  white-space: nowrap;
  pointer-events: none;
  z-index: 1;
  top: 53%;
  transform: translate(-50%, -50%);
  font-size: 12px;
  font-weight: bold;
  color: white;
  pointer-events: none;
  z-index: 2;
}

/* 调整 switch 尺寸以便容纳文字 */
.custom-switch ::v-deep .el-switch__core {
  width: 60px;
  height: 28px;
}

/* 物料信息卡片 */
.material-info-card {
  background: white;
  margin: 4px 16px;
  padding: 6px 20px;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
  border: 1px solid #f0f0f0;
}

.card-title {
  margin-bottom: 16px;
}

.title-label {
  font-size: 11px;
  color: #999;
  display: block;
  margin-bottom: 6px;
  font-weight: normal;
}

.title-value {
  font-size: 18px;
  font-weight: bold;
  color: #333;
  line-height: 1.2;
  margin-left: 20px;
}

.card-details {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 4px;
}

.detail-item {
  flex: 1;
  text-align: center;
  min-width: 60px;
  max-width: 60px;
}

.detail-label {
  font-size: 11px;
  color: #999;
  margin-bottom: 6px;
  font-weight: normal;
  line-height: 1.2;
  margin-left: -12px;
}

.detail-value {
  font-size: 13px;
  color: #333;
  font-weight: 500;
  line-height: 1.2;
  margin-left: -12px;
}

.detail-value .qualified {
  color: #17B3A3;
  font-weight: 500;
}

.detail-value .total {
  color: #333;
  font-weight: 500;
}

.detail-value .total::before {
  content: '/';
  color: #333;
}

/* 区域标题 */
.section-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 8px;
  background: white;
  margin: 0 16px;
  margin-top: 4px;
  border-radius: 8px 8px 0 0;
  border-bottom: 2px solid #17B3A3;
}

.title-left {
  display: flex;
  align-items: center;
}

.title-left i {
  color: #17B3A3;
  font-size: 16px;
  margin-right: 8px;
}

.title-left span {
  color: #17B3A3;
  font-size: 14px;
  font-weight: 500;
}

.title-right {
  display: flex;
  align-items: center;
}

.material-list-link {
  color: #17B3A3;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  text-decoration: underline;
  transition: color 0.2s ease;
}

.material-list-link:hover {
  color: #0d8f7f;
}

/* 标签列表 */
.label-list {
  background: white;
  margin: 0 16px 12px;
  border-radius: 0 0 8px 8px;
  overflow: hidden;
}

.list-header {
  display: flex;
  background: #f8f9fa;
  padding: 12px 8px;
  border-bottom: 1px solid #e0e0e0;
  font-size: 12px;
  color: #666;
  font-weight: 500;
}

.list-item {
  display: flex;
  padding: 12px 8px;
  border-bottom: 1px solid #f0f0f0;
  font-size: 12px;
  color: #333;
}

.list-item:last-child {
  border-bottom: none;
}

.col-no {
  width: 20px;
  text-align: center;
}

.col-label {
  flex: 2;
  text-align: center;
}

.col-part {
  flex: 2;
  text-align: center;
}

.col-unit {
  width: 40px;
  text-align: center;
}

.col-qty {
  width: 60px;
  text-align: center;
}

.empty-labels {
  padding: 40px 20px;
  text-align: center;
  color: #999;
}

.empty-labels p {
  margin: 0;
  font-size: 14px;
}

/* 底部操作按钮 */
.bottom-actions {
  display: flex;
  padding: 16px;
  gap: 20px;
  background: white;
  margin-top: auto;
}

.action-btn {
  flex: 1;
  padding: 12px;
  border: 1px solid #17B3A3;
  background: white;
  color: #17B3A3;
  border-radius: 20px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s ease;
}

.action-btn:hover {
  background: #17B3A3;
  color: white;
}

.action-btn:active {
  transform: scale(0.98);
}

/* 物料清单弹窗样式 */
.material-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.material-modal {
  background: white;
  border-radius: 12px;
  width: 100%;
  max-width: 800px;
  max-height: 80vh;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.material-modal .modal-header {
  background: #17B3A3;
  color: white;
  padding: 5px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  min-height: 28px;
}

.close-btn {
  font-size: 16px;
  cursor: pointer;
  color: white;
  transition: color 0.2s ease;
  padding: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.close-btn:hover {
  color: #e0e0e0;
}

.material-modal .modal-title {
  font-size: 16px;
  font-weight: 500;
  margin: 0;
  line-height: 1.2;
}

.material-modal .modal-body {
  flex: 1;
  overflow: auto;
  padding: 0;
}

.material-table {
  width: 100%;
}

.table-header {
  display: flex;
  background: #f8f9fa;
  padding: 10px 6px;
  border-bottom: 2px solid #17B3A3;
  font-size: 12px;
  color: #333;
  font-weight: 600;
  position: sticky;
  top: 0;
  z-index: 1;
}

.table-body {
  max-height: 400px;
  overflow-y: auto;
}

.table-row {
  display: flex;
  padding: 10px 6px;
  border-bottom: 1px solid #f0f0f0;
  font-size: 12px;
  color: #333;
  transition: background-color 0.2s ease;
}

.table-row:hover {
  background-color: #f8f9fa;
}

.table-row:last-child {
  border-bottom: none;
}

.material-table .col-no {
  width: 25px;
  text-align: center;
  flex-shrink: 0;
  font-size: 12px;
}

.material-table .col-material-code {
  flex: 1.8;
  text-align: center;
  min-width: 100px;
  font-size: 12px;
  word-break: break-all;
}

.material-table .col-required-qty {
  flex: 0.8;
  text-align: center;
  min-width: 65px;
  font-size: 12px;
}

.material-table .col-picked-qty {
  flex: 0.8;
  text-align: center;
  min-width: 65px;
  font-size: 12px;
}

.material-modal .modal-footer {
  padding: 15px 20px;
  display: flex;
  justify-content: center;
  border-top: 1px solid #f0f0f0;
}

.btn-close {
  padding: 10px 20px;
  border-radius: 6px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s;
  border: 1px solid #17B3A3;
  background: white;
  color: #17B3A3;
}

.btn-close:hover {
  background: #17B3A3;
  color: white;
}

/* 加载状态样式 */
.loading-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 60px 20px;
  color: #666;
}

.loading-container i {
  font-size: 24px;
  margin-bottom: 12px;
  color: #17B3A3;
}

.loading-container span {
  font-size: 14px;
}

/* 空数据状态样式 */
.empty-material {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 60px 20px;
  color: #999;
}

.empty-material i {
  font-size: 48px;
  margin-bottom: 16px;
  color: #ddd;
}

.empty-material p {
  margin: 0;
  font-size: 14px;
}

/* 响应式设计 */
@media (max-width: 360px) {
  .header-bar {
    padding: 8px 12px;
  }

  .search-container {
    padding: 8px 12px;
  }

  .material-info-card {
    margin: 4px 12px;
    padding: 6px 16px;
  }

  .section-title {
    margin: 0 12px;
    margin-top: 4px;
  }

  .label-list {
    margin: 0 12px 8px;
  }

  .card-details {
    flex-wrap: wrap;
    gap: 6px;
  }

  .detail-item {
    flex: 0 0 48%;
    margin-bottom: 6px;
    min-width: 50px;
  }

  .list-header, .list-item {
    font-size: 11px;
  }

  .col-label, .col-part {
    flex: 1.5;
  }
}
</style>
