<template>
  <div class="split-coil-container">
    <!-- 顶部操作栏 -->
    <div class="header-bar">
      <div class="header-title">
        <i class="el-icon-s-operation"></i>
        <span>钢卷分卷</span>
      </div>
      <div class="header-actions">
        <el-button type="primary" size="small" @click="handleSave" :loading="loading">保存分卷</el-button>
        <el-button size="small" @click="handleCancel" :disabled="loading">取消</el-button>
      </div>
    </div>

    <!-- 流程图区域 -->
    <div class="flow-container">
      <!-- 左侧：母卷信息 -->
      <div class="flow-left">
        <div class="flow-section-title">
          <span>母卷信息</span>
          <el-button type="text" size="mini" @click="showCoilSelector" icon="el-icon-search">选择母卷</el-button>
        </div>
        <div class="coil-card mother-coil">
          <div class="coil-header">
            <i class="el-icon-s-grid"></i>
            <span class="coil-id">{{ motherCoil.currentCoilNo || '—' }}</span>
          </div>
          <div class="coil-body">
            <div class="coil-info-row">
              <span class="label">钢种：</span>
              <span class="value">{{ motherCoil.grade || '—' }}</span>
            </div>
            <div class="coil-info-row">
              <span class="label">厚度：</span>
              <span class="value">{{ motherCoil.thickness || '—' }} mm</span>
            </div>
            <div class="coil-info-row">
              <span class="label">宽度：</span>
              <span class="value">{{ motherCoil.width || '—' }} mm</span>
            </div>
            <div class="coil-info-row">
              <span class="label">重量：</span>
              <span class="value highlight">{{ motherCoil.weight || '—' }} t</span>
            </div>
          </div>
        </div>
      </div>

      <!-- 中间：流程箭头 -->
      <div class="flow-middle">
        <div class="flow-arrow-container">
          <div class="arrow-line" v-for="(item, index) in splitList" :key="index">
            <div class="arrow-start"></div>
            <div class="arrow-body"></div>
            <div class="arrow-end"></div>
          </div>
        </div>
        <div class="flow-label">
          <i class="el-icon-d-arrow-right"></i>
          <span>分割</span>
        </div>
      </div>

      <!-- 右侧：子卷列表 -->
      <div class="flow-right">
        <div class="flow-section-title">
          <span>子卷列表</span>
          <el-button type="text" size="mini" @click="addSplitItem" icon="el-icon-plus">添加子卷</el-button>
        </div>
        
        <div class="split-list">
          <div class="sub-coil-card" v-for="(item, index) in splitList" :key="index">
            <div class="sub-coil-header">
              <span class="sub-coil-number">{{ index + 1 }}</span>
              <el-button 
                type="text" 
                size="mini" 
                icon="el-icon-delete" 
                @click="removeSplitItem(index)"
                class="btn-remove"
              ></el-button>
            </div>
            <div class="sub-coil-body">
              <el-form size="small" label-width="70px">
                <el-form-item label="卷号">
                  <el-input v-model="item.currentCoilNo" placeholder="输入子卷卷号"></el-input>
                </el-form-item>
                <el-form-item label="重量(t)">
                  <el-input-number 
                    v-model="item.weight" 
                    :min="0" 
                    :precision="2"
                    controls-position="right"
                    style="width: 100%"
                  ></el-input-number>
                </el-form-item>
                <el-form-item label="长度(m)">
                  <el-input-number 
                    v-model="item.length" 
                    :min="0" 
                    :precision="2"
                    controls-position="right"
                    style="width: 100%"
                  ></el-input-number>
                </el-form-item>
              </el-form>
            </div>
          </div>
        </div>

        <!-- 汇总信息 -->
        <div class="summary-card">
          <div class="summary-item">
            <span class="summary-label">子卷数量：</span>
            <span class="summary-value">{{ splitList.length }}</span>
          </div>
          <div class="summary-item">
            <span class="summary-label">总重量：</span>
            <span class="summary-value" :class="{ 'error': totalWeight > motherCoil.weight }">
              {{ totalWeight.toFixed(2) }} t
            </span>
          </div>
          <div class="summary-item">
            <span class="summary-label">剩余重量：</span>
            <span class="summary-value" :class="{ 'error': remainWeight < 0 }">
              {{ remainWeight.toFixed(2) }} t
            </span>
          </div>
        </div>
      </div>
    </div>

    <!-- 钢卷选择器 -->
    <coil-selector
      :visible.sync="coilSelectorVisible"
      @select="handleCoilSelect"
    />
  </div>
</template>

<script>
import { getMaterialCoil, splitMaterialCoil } from '@/api/wms/coil';
import CoilSelector from '@/components/CoilSelector';

export default {
  name: 'SplitCoil',
  components: {
    CoilSelector
  },
  data() {
    return {
      // 母卷信息
      motherCoil: {
        coilId: null,
        currentCoilNo: '',
        grade: '',
        thickness: null,
        width: null,
        weight: null,
        warehouseId: null,
        team: null,
        itemType: null,
        itemId: null,
        enterCoilNo: '',
        supplierCoilNo: ''
      },
      // 子卷列表
      splitList: [
        { currentCoilNo: '', weight: 0, length: 0 }
      ],
      loading: false,
      // 钢卷选择器可见性
      coilSelectorVisible: false
    };
  },
  computed: {
    // 子卷总重量
    totalWeight() {
      return this.splitList.reduce((sum, item) => sum + (Number(item.weight) || 0), 0);
    },
    // 剩余重量
    remainWeight() {
      return (Number(this.motherCoil.weight) || 0) - this.totalWeight;
    }
  },
  created() {
    // 如果URL中有coilId参数，则加载母卷信息
    const coilId = this.$route.query.coilId;
    if (coilId) {
      this.loadMotherCoil(coilId);
    }
  },
  methods: {
    // 显示钢卷选择器
    showCoilSelector() {
      this.coilSelectorVisible = true;
    },

    // 钢卷选择回调
    handleCoilSelect(coil) {
      this.motherCoil = {
        coilId: coil.coilId,
        currentCoilNo: coil.currentCoilNo || '',
        grade: coil.grade || '',
        thickness: coil.thickness,
        width: coil.width,
        weight: coil.weight,
        warehouseId: coil.warehouseId,
        team: coil.team,
        itemType: coil.itemType,
        itemId: coil.itemId,
        enterCoilNo: coil.enterCoilNo || '',
        supplierCoilNo: coil.supplierCoilNo || ''
      };
      this.$message.success('母卷选择成功');
    },

    // 加载母卷信息
    async loadMotherCoil(coilId) {
      try {
        this.loading = true;
        const response = await getMaterialCoil(coilId);
        if (response.code === 200 && response.data) {
          const data = response.data;
          this.motherCoil = {
            coilId: data.coilId,
            currentCoilNo: data.currentCoilNo || '',
            grade: data.grade || '',
            thickness: data.thickness,
            width: data.width,
            weight: data.weight,
            warehouseId: data.warehouseId,
            team: data.team,
            itemType: data.itemType,
            itemId: data.itemId,
            enterCoilNo: data.enterCoilNo || '',
            supplierCoilNo: data.supplierCoilNo || ''
          };
        }
      } catch (error) {
        this.$message.error('加载母卷信息失败');
        console.error(error);
      } finally {
        this.loading = false;
      }
    },

    // 添加子卷
    addSplitItem() {
      this.splitList.push({
        currentCoilNo: '',
        weight: 0,
        length: 0
      });
    },
    
    // 删除子卷
    removeSplitItem(index) {
      if (this.splitList.length > 1) {
        this.splitList.splice(index, 1);
      } else {
        this.$message.warning('至少保留一个子卷');
      }
    },
    
    // 保存分卷
    async handleSave() {
      // 验证母卷信息
      if (!this.motherCoil.coilId) {
        this.$message.error('请先选择母卷');
        return;
      }

      // 验证子卷数量
      if (this.splitList.length < 1) {
        this.$message.error('至少需要一个子卷');
        return;
      }

      // 验证重量
      if (this.remainWeight < 0) {
        this.$message.error('子卷总重量不能超过母卷重量');
        return;
      }

      // 验证子卷信息
      for (let i = 0; i < this.splitList.length; i++) {
        const item = this.splitList[i];
        if (!item.currentCoilNo || item.currentCoilNo.trim() === '') {
          this.$message.error(`第${i + 1}个子卷的卷号不能为空`);
          return;
        }
        if (!item.weight || item.weight <= 0) {
          this.$message.error(`第${i + 1}个子卷的重量必须大于0`);
          return;
        }
      }

      try {
        this.loading = true;

        // 构造分卷数据
        const splitData = {
          coilId: this.motherCoil.coilId,
          currentCoilNo: this.motherCoil.currentCoilNo,
          hasMergeSplit: 1, // 1表示分卷
          newCoils: this.splitList.map(item => ({
            currentCoilNo: item.currentCoilNo,
            weight: item.weight,
            length: item.length,
            hasMergeSplit: 1,
            // 继承母卷的基本信息
            grade: this.motherCoil.grade,
            thickness: this.motherCoil.thickness,
            width: this.motherCoil.width,
            warehouseId: this.motherCoil.warehouseId,
            team: this.motherCoil.team,
            itemType: this.motherCoil.itemType,
            itemId: this.motherCoil.itemId
          }))
        };

        const response = await splitMaterialCoil(splitData);
        if (response.code === 200) {
          this.$message.success('分卷保存成功');
          // 延迟返回，让用户看到成功提示
          setTimeout(() => {
            this.$router.back();
          }, 1000);
        } else {
          this.$message.error(response.msg || '分卷保存失败');
        }
      } catch (error) {
        this.$message.error('分卷保存失败');
        console.error(error);
      } finally {
        this.loading = false;
      }
    },
    
    // 取消操作
    handleCancel() {
      this.$router.back();
    }
  }
};
</script>

<style scoped lang="scss">
.split-coil-container {
  padding: 20px;
  background: #f5f7fa;
  min-height: calc(100vh - 84px);
}

/* 顶部操作栏 */
.header-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #fff;
  padding: 16px 20px;
  margin-bottom: 20px;
  border-radius: 4px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.header-title {
  font-size: 18px;
  font-weight: 500;
  color: #303133;
  display: flex;
  align-items: center;
  gap: 8px;
  
  i {
    color: #0066cc;
    font-size: 20px;
  }
}

/* 流程图容器 */
.flow-container {
  display: flex;
  gap: 40px;
  background: #fff;
  padding: 30px;
  border-radius: 4px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  min-height: 600px;
}

.flow-left {
  flex: 0 0 300px;
}

.flow-middle {
  flex: 0 0 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
}

.flow-right {
  flex: 1;
  min-width: 0;
}

.flow-section-title {
  font-size: 16px;
  font-weight: 500;
  color: #303133;
  margin-bottom: 16px;
  padding-left: 12px;
  border-left: 4px solid #0066cc;
  display: flex;
  justify-content: space-between;
  align-items: center;
  
  .el-button--text {
    font-size: 12px;
  }
}

/* 母卷卡片 */
.mother-coil {
  border: 2px solid #0066cc;
  box-shadow: 0 4px 12px rgba(0, 102, 204, 0.15);
}

.coil-card {
  background: #fff;
  border: 1px solid #e4e7ed;
  border-radius: 8px;
  overflow: hidden;
}

.coil-header {
  background: #0066cc;
  color: #fff;
  padding: 16px 20px;
  display: flex;
  align-items: center;
  gap: 10px;
  
  i {
    font-size: 20px;
  }
  
  .coil-id {
    font-size: 16px;
    font-weight: 600;
    letter-spacing: 1px;
  }
}

.coil-body {
  padding: 20px;
}

.coil-info-row {
  display: flex;
  align-items: center;
  margin-bottom: 12px;
  
  &:last-child {
    margin-bottom: 0;
  }
  
  .label {
    color: #909399;
    font-size: 14px;
    min-width: 70px;
  }
  
  .value {
    color: #303133;
    font-size: 14px;
    font-weight: 500;
    
    &.highlight {
      color: #0066cc;
      font-size: 16px;
      font-weight: 600;
    }
  }
}

/* 流程箭头 */
.flow-arrow-container {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
}

.arrow-line {
  position: relative;
  height: 3px;
  margin: 20px 0;
  display: flex;
  align-items: center;
}

.arrow-start {
  width: 8px;
  height: 8px;
  background: #0066cc;
  border-radius: 50%;
}

.arrow-body {
  flex: 1;
  height: 3px;
  background: #0066cc;
}

.arrow-end {
  width: 0;
  height: 0;
  border-left: 12px solid #0066cc;
  border-top: 8px solid transparent;
  border-bottom: 8px solid transparent;
}

.flow-label {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: #ecf5ff;
  color: #0066cc;
  padding: 8px 16px;
  border-radius: 20px;
  font-size: 14px;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 6px;
  border: 1px solid #d9ecff;
}

/* 子卷列表 */
.split-list {
  max-height: 500px;
  overflow-y: auto;
  margin-bottom: 20px;
  padding-right: 10px;
  
  &::-webkit-scrollbar {
    width: 6px;
  }
  
  &::-webkit-scrollbar-thumb {
    background: #dcdfe6;
    border-radius: 3px;
  }
}

.sub-coil-card {
  background: #fff;
  border: 1px solid #e4e7ed;
  border-radius: 8px;
  margin-bottom: 16px;
  transition: all 0.3s;
  
  &:hover {
    border-color: #0066cc;
    box-shadow: 0 2px 8px rgba(0, 102, 204, 0.15);
  }
}

.sub-coil-header {
  background: #f5f7fa;
  padding: 12px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid #e4e7ed;
}

.sub-coil-number {
  font-size: 16px;
  font-weight: 600;
  color: #0066cc;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #ecf5ff;
  display: flex;
  align-items: center;
  justify-content: center;
}

.btn-remove {
  color: #f56c6c;
  padding: 0;
  
  &:hover {
    color: #f56c6c;
  }
}

.sub-coil-body {
  padding: 16px;
}

/* 汇总卡片 */
.summary-card {
  background: #ecf5ff;
  border: 1px solid #d9ecff;
  border-radius: 8px;
  padding: 16px 20px;
  display: flex;
  justify-content: space-around;
}

.summary-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}

.summary-label {
  font-size: 13px;
  color: #606266;
}

.summary-value {
  font-size: 20px;
  font-weight: 600;
  color: #0066cc;
  
  &.error {
    color: #f56c6c;
  }
}
</style>

