<template>
  <div>
    <div style="padding: 8px; text-align: center" v-if="formData.data.code || formData.data.wlnCode">
      <span style="font-size: 18px; font-weight: 700">{{ formData.data.code }} </span>
      <span style="font-size: 18px; font-weight: 700" v-if="formData.data.wlnCode"> ({{ formData.data.wlnCode }})</span>
    </div>
    <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="submit">
      <template #type>
        <div style="width: 100%">
          <el-radio-group v-model="formData.data.type">
            <el-radio v-for="(itemType, index) in typeList" :key="index" :label="itemType.dictKey">{{ itemType.dictValue }}</el-radio>
          </el-radio-group>
        </div>
      </template>
      <template #departmentId>
        <div style="width: 100%">
          <el-select v-model="formData.data.departmentId" placeholder="请选择事业部" clearable style="width: 100%">
            <el-option v-for="item in departmentList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
          </el-select>
        </div>
      </template>
      <template #deliveryAddress>
        <div style="width: 100%">
          <el-row>
            <el-col :span="3">
              <el-form-item label-width="0" prop="province" style="width: 100%">
                <el-input v-model="formData.data.province" placeholder="请输入省" />
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label-width="0" prop="city" style="width: 100%">
                <el-input v-model="formData.data.city" placeholder="请输入市" />
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label-width="0" prop="county" style="width: 100%">
                <el-input v-model="formData.data.county" placeholder="请输入区/县" />
              </el-form-item>
            </el-col>
            <el-col :span="11">
              <el-form-item label-width="0" prop="detailedAddress" style="width: 100%">
                <el-input v-model="formData.data.detailedAddress" placeholder="请输入详细地址" />
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-form-item label-width="0" prop="postcode" style="width: 100%">
                <el-input v-model="formData.data.postcode" placeholder="请输入邮编" />
              </el-form-item>
            </el-col>
          </el-row>
        </div>
      </template>
      <template #consignee>
        <div style="width: 100%">
          <el-row>
            <el-col :span="6">
              <el-form-item label-width="0" prop="consignee" style="width: 100%">
                <el-input v-model="formData.data.consignee" placeholder="请输入联系人" />
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label-width="0" prop="consigneeNumber" style="width: 100%">
                <el-input v-model="formData.data.consigneeNumber" placeholder="请输入联系电话" />
              </el-form-item>
            </el-col>
          </el-row>
        </div>
      </template>
      <template #orderSkuList>
        <div style="width: 100%; padding: 0 20px">
          <div style="margin-bottom: 10px" v-if="!formOption.disabled">
            <el-button type="primary" size="small" @click="clickAddProduct()">选择产品</el-button>
            <el-button type="primary" size="small" @click="clickUploadProduct()">导入产品</el-button>
          </div>
          <el-collapse v-model="activeNames">
            <div v-for="(item, index) in formData.data.orderSkuList" :key="index" style="margin-bottom: 20px">
              <div style="border: 1px solid #edf0f5">
                <el-table :data="[item]" :row-style="{ height: '35px' }" header-row-class-name="tableHeader" :cell-class-name="cellStyleName">
                  <el-table-column label="产品" width="300">
                    <template #default="{ row }">
                      <div style="width: 100%">
                        <div style="line-height: 35px" v-if="!(route.query && route.query.detailId)">
                          <span style="color: black; font-weight: 700">库存数量: </span>
                          <span>{{ item.inventoryQuantity }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">商品名称: </span>
                          <span>{{ item.wlnSkuName }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">品号: </span>
                          <span>{{ item.code }}</span>
                        </div>
                        <div style="line-height: 35px; word-break: break-all">
                          <span style="color: black; font-weight: 700">品名: </span>
                          <span>{{ item.name }}</span>
                        </div>
                        <div style="line-height: 35px; display: flex">
                          <span style="width: 90px; color: black; font-weight: 700">E10成品品号: </span>
                          <el-form-item
                            :prop="'orderSkuList.' + index + '.erpCode'"
                            :rules="rules.erpCode"
                            :inline-message="true"
                            style="width: calc(100% - 90px)">
                            <el-input v-model="row.erpCode" placeholder="请输入E10成品品号" style="width: 100%" />
                          </el-form-item>
                        </div>
                        <div style="line-height: 35px; display: flex">
                          <span style="width: 52px; color: black; font-weight: 700">特征码: </span>
                          <el-form-item
                            :prop="'orderSkuList.' + index + '.featureCode'"
                            :rules="rules.featureCode"
                            :inline-message="true"
                            style="width: calc(100% - 52px)">
                            <el-input v-model="row.featureCode" placeholder="请输入特征码" style="width: 100%" />
                          </el-form-item>
                        </div>
                        <div style="line-height: 35px; display: flex">
                          <span style="width: 37px; color: black; font-weight: 700">数量: </span>
                          <el-form-item
                            :prop="'orderSkuList.' + index + '.quantity'"
                            :rules="rules.quantity"
                            :inline-message="true"
                            style="width: calc(100% - 37px)">
                            <el-input-number
                              onmousewheel="return false;"
                              v-model="row.quantity"
                              placeholder="数量"
                              style="width: 100%"
                              :controls="false"
                              :min="0"
                              :precision="0"
                              @change="changeQuantity(index, true)" />
                          </el-form-item>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">加工费: </span>
                          <span>{{ item.customProcessingFee }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">代发费: </span>
                          <span>{{ item.lssueFee }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">快递包材费: </span>
                          <span>{{ computeSingleDeliveryMaterialsFee(index) }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">包装人工费: </span>
                          <span>{{ item.packingLabor }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">管理费: </span>
                          <span>{{ item.managementFee }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">单价: </span>
                          <span>{{ item.unitPrice }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="color: black; font-weight: 700">小计: </span>
                          <span>{{ getSubtotal(item) }}</span>
                        </div>
                        <div style="line-height: 35px">
                          <span style="width: 37px; color: black; font-weight: 700">打印: </span>
                          <el-form-item
                            :prop="'orderSkuList.' + index + '.printType'"
                            :rules="rules.printType"
                            :inline-message="true"
                            style="width: calc(100% - 37px)">
                            <el-radio-group v-model="item.printType" @change="changeQuantity(index)">
                              <el-radio v-for="(itemType, index) in printType" :key="index" :label="itemType.dictKey">{{ itemType.dictValue }}</el-radio>
                            </el-radio-group>
                          </el-form-item>
                        </div>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column label="产品图稿" width="400">
                    <template #default="{ row }">
                      <div style="display: flex; width: 100%">
                        <div style="width: 80px">设计图:</div>
                        <div style="width: calc(100% - 80px)">
                          <el-image
                            fit="scale-down"
                            style="width: 148px; height: 148px; margin-right: 10px; cursor: pointer"
                            v-if="row.blueprint"
                            :src="row.blueprint"
                            @click="openFile(row.blueprint)" />
                          <div style="display: flex" v-if="!(route.query && route.query.detailId)">
                            <el-button type="primary" @click="clickDrawingFile(index)" text>选择图稿</el-button>
                            <el-upload
                              :show-file-list="false"
                              action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
                              :data="uploadImgData"
                              :before-upload="uploadImgFile"
                              :on-success="
                                (response, uploadFile) => {
                                  return handleImgSuccess(uploadFile, index);
                                }
                              "
                              style="width: 100%"
                              accept=".jpg,.jpeg,.png,.GIF,.JPG,.PNG">
                              <el-button type="primary" style="margin-left: 12px" text>上传图片</el-button>
                            </el-upload>
                          </div>
                        </div>
                      </div>
                      <div style="display: flex; margin-top: 20px; width: 100%">
                        <div style="width: 80px">图稿文件:</div>
                        <div style="width: calc(100% - 80px)">
                          <a
                            style="color: #409eff; cursor: pointer; word-break: break-all; margin-right: 10px"
                            @click="openFile(row.productionDocument)"
                            v-if="row.productionDocument">
                            {{ row.productionDocument }}
                          </a>
                          <div style="display: flex" v-if="!(route.query && route.query.detailId)">
                            <el-button type="primary" @click="clickDrawingFile(index)" text>选择图稿</el-button>
                            <el-upload
                              :show-file-list="false"
                              action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
                              :data="uploadData"
                              :before-upload="uploadFile"
                              :on-success="
                                (response, uploadFile) => {
                                  return handleSuccess(uploadFile, index);
                                }
                              "
                              style="width: 100%">
                              <el-button type="primary" style="margin-left: 12px" text>上传文件</el-button>
                            </el-upload>
                          </div>
                        </div>
                      </div>
                      <div style="font-weight: 700; margin-top: 20px">产品不干胶图稿</div>
                      <div style="display: flex; width: 100%">
                        <div style="width: 80px">不干胶图片:</div>
                        <div style="width: calc(100% - 80px)">
                          <el-image
                            fit="scale-down"
                            style="width: 148px; height: 148px; margin-right: 10px; cursor: pointer"
                            v-if="row.selfAdhesiveStickerFile && row.selfAdhesiveStickerFile.fileUrl"
                            :src="row.selfAdhesiveStickerFile.fileUrl"
                            @click="openFile(row.selfAdhesiveStickerFile.fileUrl)" />
                          <div style="display: flex" v-if="!(route.query && route.query.detailId)">
                            <el-upload
                              :show-file-list="false"
                              action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
                              :data="uploadAdhesiveData"
                              :before-upload="uploadAdhesiveFile"
                              :on-success="
                                (response, uploadFile) => {
                                  return handleAdhesiveSuccess(uploadFile, index);
                                }
                              "
                              style="width: 100%"
                              accept=".jpg,.jpeg,.png,.GIF,.JPG,.PNG">
                              <el-button type="primary" text>上传文件</el-button>
                            </el-upload>
                          </div>
                        </div>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column label="包材配件/单品" min-width="400">
                    <template #default="{ row }">
                      <div style="width: 100%">
                        <div style="margin-bottom: 10px" v-if="!(route.query && route.query.detailId)">
                          <el-button type="primary" @click="clickPackingFittings(index)">选择包材配件</el-button>
                        </div>
                        <el-table :data="row.orderSkuBomList" :row-style="{ height: '35px' }" header-row-class-name="tableHeader">
                          <el-table-column label="单价¥" width="120">
                            <template #default="props">
                              <div>
                                <span>{{ moneyFormat(props.row.unitPrice, 2) }}</span>
                              </div>
                            </template>
                          </el-table-column>
                          <el-table-column label="数量" width="100">
                            <template #default="props">
                              <el-form-item
                                :prop="'orderSkuList.' + index + '.orderSkuBomList.' + props.$index + '.quantity'"
                                :rules="rules.quantity"
                                :inline-message="true"
                                style="width: 100%">
                                <el-input-number
                                  onmousewheel="return false;"
                                  v-model="props.row.quantity"
                                  placeholder="数量"
                                  style="width: 100%"
                                  :controls="false"
                                  :min="0" />
                              </el-form-item>
                            </template>
                          </el-table-column>
                          <el-table-column label="名称" prop="bomSpecName" min-width="150" />
                          <el-table-column label="总量" width="80">
                            <template #default="props">
                              {{ computeQuantity(index, props.$index) }}
                            </template>
                          </el-table-column>
                          <el-table-column label="小计¥" width="100">
                            <template #default="props">
                              {{ moneyFormat(computeMoney(index, props.$index), 2) }}
                            </template>
                          </el-table-column>
                          <el-table-column label="操作" align="center" fixed="right" width="60" v-if="!(route.query && route.query.detailId)">
                            <template #default="props">
                              <el-button type="danger" @click="clickDeletePackingFittings(index, props.$index)" text>删除</el-button>
                            </template>
                          </el-table-column>
                        </el-table>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column label="操作" align="center" fixed="right" width="60" v-if="!(route.query && route.query.detailId)">
                    <template #default="{}">
                      <el-button type="danger" @click="clickDelete(index)" text>删除</el-button>
                    </template>
                  </el-table-column>
                </el-table>
                <el-collapse-item :name="index">
                  <template #title>
                    <span>包装</span>
                  </template>
                  <div style="display: flex; padding: 8px 10px 0px">
                    <div style="flex: 1; padding: 0px 10px">
                      <div>包装要求:</div>
                      <div v-if="route.query && route.query.detailId">
                        <div v-html="getStyle(item.packageRemark)"></div>
                      </div>
                      <Editor
                        v-else
                        :value="item.packageRemark"
                        @updateValue="
                          (val) => {
                            return updatePackageRemark(val, index);
                          }
                        "
                        :ref="'editor_' + index" />
                    </div>
                  </div>
                </el-collapse-item>
              </div>
            </div>
          </el-collapse>
        </div>
      </template>
      <template #deliveryTime>
        <div style="width: 100%">
          <el-date-picker
            v-model="formData.data.deliveryTime"
            type="datetime"
            placeholder="请选择交货日期"
            value-format="YYYY-MM-DD HH:mm:ss"
            style="width: 100%" />
        </div>
      </template>
      <template #totalMonet>
        <div style="width: 100%; margin-left: 30px">
          <div>
            <span style="font-weight: 700; color: #6c88f1">产品总金额: ¥{{ moneyFormat(calculatedAmount("unitPrice"), 2) }}</span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">
              定制加工费: ¥{{ moneyFormat(calculatedAmount("customProcessingFee"), 2) }}
            </span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">代发费: ¥{{ moneyFormat(calculatedAmount("lssueFee"), 2) }}</span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">快递包材费: ¥{{ moneyFormat(computeDeliveryMaterialsFee(), 2) }} </span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">包装人工费: ¥{{ moneyFormat(calculatedAmount("packingLabor"), 2) }}</span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">包材费: ¥{{ moneyFormat(calculatedPackagingMaterialCost(), 2) }}</span>
            <span style="font-weight: 700; color: #6c88f1; margin-left: 40px">管理费: ¥{{ moneyFormat(calculatedAmount("managementFee"), 2) }}</span>
          </div>
          <div style="padding: 8px 0 0 0">
            <span style="font-weight: 700; color: red">订单总金额(含税): ¥{{ moneyFormat(calculatedTotalAmount(), 2) }}</span>
          </div>
        </div>
      </template>
      <template #attachments>
        <div style="width: 100%">
          <el-upload
            v-model:fileList="fileList"
            action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
            :data="uploadFileData"
            multiple
            :before-upload="beforeUpload"
            :on-success="onSuccessFile"
            :on-preview="onPreviewFile">
            <el-button style="background: #20b2aa; color: #fff; border: 1px solid #20b2aa">上传</el-button>
          </el-upload>
        </div>
      </template>
      <template #remark>
        <div style="width: 100%">
          <div style="margin: 0 2vw" v-if="formOption.disabled">
            <div v-html="getStyle(formData.data.remark)"></div>
          </div>
          <Editor v-else :value="formData.data.remark" @updateValue="updateValue" ref="editor" />
        </div>
      </template>
    </byForm>

    <el-dialog title="选择产品" v-if="openProduct" v-model="openProduct" width="90%">
      <SelectProduct :selectStatus="true" :type="'null'" @selectProduct="selectProduct"></SelectProduct>
      <template #footer>
        <el-button @click="openProduct = false" size="large">关 闭</el-button>
      </template>
    </el-dialog>

    <el-dialog title="选择包材配件" v-if="openPackingFittings" v-model="openPackingFittings" width="90%">
      <SelectBOM :selectStatus="true" :bomClassifyIdList="[2, 3]" @selectBOM="selectPackingFittings"></SelectBOM>
      <template #footer>
        <el-button @click="openPackingFittings = false" size="large">关 闭</el-button>
      </template>
    </el-dialog>

    <el-dialog title="选择图稿文件" v-if="openDrawingFile" v-model="openDrawingFile" width="70%">
      <SelectPicture @selectPic="selectPic"></SelectPicture>
      <template #footer>
        <el-button @click="openDrawingFile = false" size="large">关 闭</el-button>
      </template>
    </el-dialog>

    <el-dialog title="导入产品" v-if="openUpload" v-model="openUpload" width="60%">
      <el-upload class="upload-demo" :show-file-list="false" drag action="##" :http-request="giveawayServerLog" v-loading="loadingUpload">
        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
        <div class="el-upload__text">拖拽文件进行上传</div>
      </el-upload>
      <template #footer>
        <el-button @click="openUpload = false">关 闭</el-button>
      </template>
    </el-dialog>
  </div>
</template>

<script setup>
import byForm from "/src/components/byForm/index";
import { ElMessage } from "element-plus";
import Editor from "/src/components/Editor/index.vue";
import { useRoute } from "vue-router";
import SelectProduct from "/src/views/group/product/management/index";
import SelectBOM from "/src/views/group/BOM/management/index";
import SelectPicture from "/src/components/select-picture/index.vue";

const { proxy } = getCurrentInstance();
// 接收父组件的传值
const props = defineProps({
  queryData: Object,
});
const route = useRoute();
const submit = ref(null);
const departmentList = ref([]);
const activeNames = ref([]);
const judgeStatus = () => {
  if (route.query.processType == 20 || route.query.processType == 10) {
    return true;
  }
  if (props.queryData.recordList && props.queryData.recordList.length > 0) {
    let data = props.queryData.recordList.filter((item) => item.status === 2 && item.nodeType !== 1);
    if (data && data.length > 0) {
      return true;
    }
  }
  return false;
};
const formOption = reactive({
  inline: true,
  labelWidth: "120px",
  itemWidth: 100,
  rules: [],
  labelPosition: "right",
});
const formData = reactive({
  data: {
    remark: "",
    type: 1,
    orderSkuList: [],
    fileList: [],
  },
});
const formConfig = computed(() => {
  return [
    {
      type: "title",
      title: "产品",
      label: "",
    },
    {
      type: "slot",
      prop: "orderSkuList",
      slotName: "orderSkuList",
    },
    {
      type: "title",
      title: "类型",
      label: "",
    },
    {
      type: "slot",
      prop: "type",
      slotName: "type",
      label: "订单类型",
    },
    {
      type: "slot",
      prop: "departmentId",
      slotName: "departmentId",
      label: "事业部",
      itemWidth: 25,
    },
    {
      type: "input",
      prop: "wlnCode",
      label: "E10单号",
      itemType: "text",
      itemWidth: 25,
    },
    formOption.disabled
      ? {}
      : {
          type: "title",
          title: "地址",
          label: "",
        },
    formOption.disabled
      ? {}
      : {
          type: "slot",
          slotName: "deliveryAddress",
          label: "收货地址",
        },
    formOption.disabled
      ? {}
      : {
          type: "slot",
          slotName: "consignee",
          label: "收货人",
        },
    {
      type: "title",
      title: "贸易",
      label: "",
    },
    {
      type: "slot",
      prop: "deliveryTime",
      slotName: "deliveryTime",
      label: "交货时间",
      itemWidth: 25,
    },
    {
      type: "select",
      label: "选择快递",
      prop: "expressDeliveryId",
      data: proxy.useUserStore().allDict["express_delivery"],
      itemWidth: 25,
      clearable: true,
    },
    {
      type: "select",
      label: "店铺来源",
      prop: "sourcePlatform",
      data: proxy.useUserStore().allDict["source_platform"],
      itemWidth: 25,
      clearable: true,
    },
    {
      type: "select",
      label: "店铺名称",
      prop: "shopName",
      data: proxy.useUserStore().allDict["shop_name"],
      itemWidth: 25,
      clearable: true,
    },
    {
      type: "title",
      title: "总计",
      label: "",
    },
    {
      type: "slot",
      prop: "totalMonet",
      slotName: "totalMonet",
    },
    {
      type: "title",
      title: "附件",
      label: "",
    },
    {
      type: "slot",
      slotName: "attachments",
      label: "附件",
    },
    {
      type: "title",
      title: "订单备注",
      label: "",
    },
    {
      type: "slot",
      slotName: "remark",
    },
  ];
});
const rules = ref({
  province: [{ required: true, message: "请输入省", trigger: "blur" }],
  detailedAddress: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
  consignee: [{ required: true, message: "请输入联系人", trigger: "blur" }],
  consigneeNumber: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
  deliveryTime: [{ required: true, message: "请选择交货时间", trigger: "change" }],
  expressDeliveryId: [{ required: true, message: "请选择快递", trigger: "change" }],
  sourcePlatform: [{ required: true, message: "请选择店铺来源", trigger: "change" }],
  shopName: [{ required: true, message: "请选择店铺", trigger: "change" }],
  quantity: [{ required: true, message: "请输入数量", trigger: "blur" }],
  type: [{ required: true, message: "请选择订单类型", trigger: "change" }],
  departmentId: [{ required: true, message: "请选择事业部", trigger: "change" }],
  wlnCode: [{ required: true, message: "请输入E10单号", trigger: "blur" }],
  erpCode: [{ required: true, message: "请输入E10成品品号", trigger: "blur" }],
});
const getDemandData = () => {
  proxy.post("/department/page", { pageNum: 1, pageSize: 999 }).then((res) => {
    if (res.rows && res.rows.length > 0) {
      departmentList.value = res.rows.map((item) => {
        return {
          dictKey: item.id,
          dictValue: item.name,
        };
      });
    }
  });
};
getDemandData();
const drawingFileIndex = ref(0);
const openDrawingFile = ref(false);
const clickDrawingFile = (index) => {
  drawingFileIndex.value = index;
  openDrawingFile.value = true;
};
const selectPic = (row) => {
  formData.data.orderSkuList[drawingFileIndex.value].blueprint = row.imgUrl;
  formData.data.orderSkuList[drawingFileIndex.value].productionDocument = row.fileUrl;
  formData.data.orderSkuList[drawingFileIndex.value].artworkLibraryId = row.id;
  ElMessage({ message: "选择完成", type: "success" });
  openDrawingFile.value = false;
};
const openFile = (path) => {
  window.open(path);
};
const updatePackageRemark = (val, index) => {
  formData.data.orderSkuList[index].packageRemark = val;
};
const clickDelete = (index) => {
  formData.data.orderSkuList.splice(index, 1);
};
const updateValue = (val) => {
  formData.data.remark = val;
};
const getStyle = (text) => {
  if (text) {
    return text.replace(/\n|\r\n/g, "<br>");
  } else {
    return "";
  }
};
const openProduct = ref(false);
const clickAddProduct = () => {
  openProduct.value = true;
};
const printType = ref([
  {
    dictKey: 1,
    dictValue: "单面",
  },
  {
    dictKey: 2,
    dictValue: "双面",
  },
]);
const typeList = ref([
  {
    dictKey: 1,
    dictValue: "自主订单",
  },
  {
    dictKey: 2,
    dictValue: "委外订单",
  },
]);
const skuDetail = ref({});
const selectProduct = (row, SKU) => {
  if (row.id) {
    let list = formData.data.orderSkuList.filter((item) => item.skuSpecId === row.id && item.bomSpecId === row.bomSpecId);
    if (list && list.length > 0) {
      return ElMessage("该产品已添加");
    }
    if (skuDetail.value && skuDetail.value.id === SKU.id) {
      pushProduct(skuDetail.value, SKU, row);
    } else {
      proxy.post("/sku/detail", { id: SKU.id }).then((res) => {
        skuDetail.value = res;
        pushProduct(res, SKU, row);
      });
    }
  } else {
    ElMessage("添加失败");
  }
};
const pushProduct = async (res, SKU, row) => {
  let data = proxy.deepClone(res);
  let orderSkuBomList = [];
  if (data.skuSpecList && data.skuSpecList.length > 0) {
    let listTwo = data.skuSpecList.filter((item) => item.id === row.id);
    if (listTwo && listTwo.length > 0) {
      if (listTwo[0].packagingMaterialList && listTwo[0].packagingMaterialList.length > 0) {
        orderSkuBomList = listTwo[0].packagingMaterialList.map((item) => {
          return {
            bomSpecId: item.bomSpecId,
            unitPrice: item.internalSellingPrice,
            quantity: item.quantity,
            bomSpecName: item.name,
          };
        });
      }
    }
  }
  let inventoryQuantity = 0;
  let getSkuInventoryQuantity = await proxy.post("/skuSpec/getSkuInventoryQuantity", { id: row.id }).then((resQuantity) => {
    inventoryQuantity = resQuantity;
  });
  formData.data.orderSkuList.push({
    wlnSkuName: SKU.name,
    skuId: row.skuId,
    code: row.code,
    name: row.name,
    skuSpecId: row.id,
    bomSpecId: row.bomSpecId,
    quantity: undefined,
    erpCode: "",
    featureCode: "",
    customProcessingFee: "",
    customProcessingType: "",
    lssueFee: "",
    deliveryMaterialsFee: "",
    packingLabor: "",
    managementFee: "",
    unitPrice: "",
    printType: 1,
    packageRemark: "",
    orderSkuBomList: orderSkuBomList,
    blueprint: row.designImgUrl,
    productionDocument: row.sharedFolder,
    artworkLibraryId: "0",
    inventoryQuantity: inventoryQuantity,
    proofingFee: 0,
  });
  ElMessage({ message: "添加成功", type: "success" });
};
const rowIndex = ref(null);
const openPackingFittings = ref(false);
const clickPackingFittings = (index) => {
  rowIndex.value = index;
  openPackingFittings.value = true;
};
const clickDeletePackingFittings = (index, indexTwo) => {
  formData.data.orderSkuList[index].orderSkuBomList.splice(indexTwo, 1);
};
const selectPackingFittings = (data) => {
  if (formData.data.orderSkuList[rowIndex.value].orderSkuBomList && formData.data.orderSkuList[rowIndex.value].orderSkuBomList.length > 0) {
    let list = formData.data.orderSkuList[rowIndex.value].orderSkuBomList.filter((item) => item.bomSpecId === data.id);
    if (list && list.length > 0) {
      return ElMessage("包材配件已添加");
    }
    formData.data.orderSkuList[rowIndex.value].orderSkuBomList.push({
      bomSpecId: data.id,
      unitPrice: data.internalSellingPrice,
      quantity: undefined,
      bomSpecName: data.name,
    });
  } else {
    formData.data.orderSkuList[rowIndex.value].orderSkuBomList = [
      {
        bomSpecId: data.id,
        unitPrice: data.internalSellingPrice,
        quantity: undefined,
        bomSpecName: data.name,
      },
    ];
  }
  ElMessage({ message: "添加成功", type: "success" });
};
const changeQuantity = (index) => {
  if (formData.data.orderSkuList[index].quantity) {
    proxy
      .post("/orderInfo/getSkuSpecPrice", {
        skuSpecId: formData.data.orderSkuList[index].skuSpecId,
        quantity: formData.data.orderSkuList[index].quantity,
        random: proxy.random(),
      })
      .then((res) => {
        if (formData.data.orderSkuList[index].printType == 2 && res.customProcessingFee) {
          formData.data.orderSkuList[index].customProcessingFee = Number(Math.round(res.customProcessingFee * 2 * 100) / 100);
        } else {
          formData.data.orderSkuList[index].customProcessingFee = res.customProcessingFee;
        }
        formData.data.orderSkuList[index].customProcessingType = res.customProcessingType;
        formData.data.orderSkuList[index].deliveryMaterialsFee = res.deliveryMaterialsFee;
        formData.data.orderSkuList[index].lssueFee = res.lssueFee;
        formData.data.orderSkuList[index].packingLabor = res.packingLabor;
        formData.data.orderSkuList[index].managementFee = res.managementFee;
        formData.data.orderSkuList[index].unitPrice = res.unitPrice;
      });
  }
};
const cellStyleName = ({ column, columnIndex }) => {
  if (column.label === "操作" && columnIndex === 3) {
    return "vertical-align";
  }
};
const uploadData = ref({});
const uploadFile = async (file) => {
  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
  uploadData.value = res.uploadBody;
  file.id = res.id;
  file.fileName = res.fileName;
  file.fileUrl = res.fileUrl;
  return true;
};
const handleSuccess = (UploadFile, index) => {
  formData.data.orderSkuList[index].productionDocument = UploadFile.raw.fileUrl;
  formData.data.orderSkuList[index].artworkLibraryId = "0";
};
const uploadImgData = ref({});
const uploadImgFile = async (file) => {
  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
  uploadImgData.value = res.uploadBody;
  file.id = res.id;
  file.fileName = res.fileName;
  file.fileUrl = res.fileUrl;
  return true;
};
const handleImgSuccess = (UploadFile, index) => {
  formData.data.orderSkuList[index].blueprint = UploadFile.raw.fileUrl;
  formData.data.orderSkuList[index].artworkLibraryId = "0";
};
const computeQuantity = (index, indexSKU) => {
  let quantity = 0;
  if (formData.data.orderSkuList[index].quantity && formData.data.orderSkuList[index].orderSkuBomList[indexSKU].quantity) {
    quantity = Number(
      Math.round(formData.data.orderSkuList[index].orderSkuBomList[indexSKU].quantity * formData.data.orderSkuList[index].quantity * 100) / 100
    );
  }
  return quantity;
};
const computeMoney = (index, indexSKU) => {
  let money = 0;
  if (
    formData.data.orderSkuList[index].quantity &&
    formData.data.orderSkuList[index].orderSkuBomList[indexSKU].quantity &&
    formData.data.orderSkuList[index].orderSkuBomList[indexSKU].unitPrice
  ) {
    money = Number(
      Math.round(
        formData.data.orderSkuList[index].orderSkuBomList[indexSKU].quantity *
          formData.data.orderSkuList[index].orderSkuBomList[indexSKU].unitPrice *
          formData.data.orderSkuList[index].quantity *
          100
      ) / 100
    );
  }
  return money;
};
const getSubtotal = (item) => {
  let money = 0;
  if (item.quantity) {
    money = Number(
      Math.round(
        (item.customProcessingFee + item.deliveryMaterialsFee + item.lssueFee + item.packingLabor + item.managementFee + item.unitPrice) * item.quantity * 100
      ) / 100
    );
  }
  return money;
};
const calculatedAmount = (label) => {
  let money = 0;
  if (formData.data.orderSkuList && formData.data.orderSkuList.length > 0) {
    for (let i = 0; i < formData.data.orderSkuList.length; i++) {
      if (formData.data.orderSkuList[i].quantity && formData.data.orderSkuList[i][label]) {
        money = Number(Math.round((money + formData.data.orderSkuList[i][label] * formData.data.orderSkuList[i].quantity) * 100) / 100);
      }
    }
  }
  return money;
};
const calculatedPackagingMaterialCost = () => {
  let money = 0;
  if (formData.data.orderSkuList && formData.data.orderSkuList.length > 0) {
    for (let i = 0; i < formData.data.orderSkuList.length; i++) {
      if (formData.data.orderSkuList[i].orderSkuBomList && formData.data.orderSkuList[i].orderSkuBomList.length > 0) {
        for (let j = 0; j < formData.data.orderSkuList[i].orderSkuBomList.length; j++) {
          if (formData.data.orderSkuList[i].orderSkuBomList[j].quantity && formData.data.orderSkuList[i].orderSkuBomList[j].unitPrice) {
            money = Number(
              Math.round(
                (money +
                  formData.data.orderSkuList[i].orderSkuBomList[j].quantity *
                    formData.data.orderSkuList[i].orderSkuBomList[j].unitPrice *
                    formData.data.orderSkuList[i].quantity) *
                  100
              ) / 100
            );
          }
        }
      }
    }
  }
  return money;
};
const calculatedTotalAmount = () => {
  let money = 0;
  money = Number(
    Math.round(
      (calculatedAmount("unitPrice") +
        calculatedAmount("customProcessingFee") +
        calculatedAmount("lssueFee") +
        computeDeliveryMaterialsFee() +
        calculatedAmount("packingLabor") +
        calculatedAmount("managementFee") +
        calculatedPackagingMaterialCost()) *
        100
    ) / 100
  );
  return money;
};
const fileList = ref([]);
const uploadFileData = ref({});
const beforeUpload = async (file) => {
  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
  uploadFileData.value = res.uploadBody;
  file.id = res.id;
  file.fileName = res.fileName;
  file.fileUrl = res.fileUrl;
  file.uploadState = true;
  return true;
};
const onSuccessFile = (any, UploadFile) => {
  UploadFile.raw.uploadState = false;
};
const onPreviewFile = (file) => {
  window.open(file.raw.fileUrl, "_blank");
};
const uploadAdhesiveData = ref({});
const uploadAdhesiveFile = async (file) => {
  const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
  uploadAdhesiveData.value = res.uploadBody;
  file.id = res.id;
  file.fileName = res.fileName;
  file.fileUrl = res.fileUrl;
  return true;
};
const handleAdhesiveSuccess = (UploadFile, index) => {
  formData.data.orderSkuList[index].selfAdhesiveStickerFile = {
    id: UploadFile.raw.id,
    fileName: UploadFile.raw.fileName,
    fileUrl: UploadFile.raw.fileUrl,
  };
};
const getFormData = () => {
  return proxy.deepClone(formData.data);
};
const handleSubmit = async (flag) => {
  if (flag) {
    return true;
  } else {
    let status = await proxy.$refs.submit.handleSubmit(() => {});
    if (status) {
      if (formData.data.orderSkuList && formData.data.orderSkuList.length > 0) {
        for (let i = 0; i < formData.data.orderSkuList.length; i++) {
          if (!formData.data.orderSkuList[i].blueprint) {
            ElMessage("请选择设计图");
            return false;
          }
          if (!formData.data.orderSkuList[i].productionDocument) {
            ElMessage("请选择生产文件");
            return false;
          }
          let packagingMaterialCost = 0;
          if (formData.data.orderSkuList[i].quantity) {
            if (formData.data.orderSkuList[i].orderSkuBomList && formData.data.orderSkuList[i].orderSkuBomList.length > 0) {
              for (let j = 0; j < formData.data.orderSkuList[i].orderSkuBomList.length; j++) {
                if (formData.data.orderSkuList[i].orderSkuBomList[j].quantity && formData.data.orderSkuList[i].orderSkuBomList[j].unitPrice) {
                  packagingMaterialCost = Number(
                    Math.round(
                      (packagingMaterialCost +
                        formData.data.orderSkuList[i].orderSkuBomList[j].quantity * formData.data.orderSkuList[i].orderSkuBomList[j].unitPrice) *
                        100
                    ) / 100
                  );
                }
              }
            }
          }
          formData.data.orderSkuList[i].packagingMaterialCost = packagingMaterialCost;
        }
        formData.data.productTotalAmount = calculatedAmount("unitPrice");
        formData.data.customProcessingFee = calculatedAmount("customProcessingFee");
        formData.data.lssueFee = calculatedAmount("lssueFee");
        formData.data.deliveryMaterialsFee = computeDeliveryMaterialsFee();
        formData.data.packingLabor = calculatedAmount("packingLabor");
        formData.data.managementFee = calculatedAmount("managementFee");
        formData.data.packagingMaterialCost = calculatedPackagingMaterialCost();
        formData.data.totalAmount = calculatedTotalAmount();
        formData.data.proofingFee = 0;
        if (fileList.value && fileList.value.length > 0) {
          for (let i = 0; i < fileList.value.length; i++) {
            if (fileList.value[i].raw.uploadState) {
              ElMessage("文件上传中,请稍后提交");
              return false;
            }
          }
          formData.data.fileList = fileList.value.map((item) => {
            return {
              id: item.raw.id,
              fileName: item.raw.fileName,
              fileUrl: item.raw.fileUrl,
            };
          });
        } else {
          formData.data.fileList = [];
        }
      } else {
        return ElMessage("请添加产品");
      }
      return true;
    } else {
      setTimeout(() => {
        const errorDiv = document.getElementsByClassName("is-error");
        errorDiv[0].scrollIntoView();
      }, 0);
    }
    return false;
  }
};
watch(
  () => props.queryData,
  (newValue) => {
    formOption.disabled = judgeStatus();
    if (props.queryData && ["10", "20", "30", "40"].includes(route.query.processType)) {
      formData.data = proxy.deepClone(newValue);
      if (route.query.id) {
        proxy.$refs.editor.changeHtml(formData.data.remark);
      }
      let list = [formData.data.id];
      if (formData.data.orderSkuList && formData.data.orderSkuList.length > 0) {
        list = list.concat(formData.data.orderSkuList.map((item) => item.id));
        proxy.post("/fileInfo/getList", { businessIdList: list }).then((fileObj) => {
          if (fileObj[formData.data.id] && fileObj[formData.data.id].length > 0) {
            let file = fileObj[formData.data.id].filter((item) => item.businessType == "0");
            if (file && file.length > 0) {
              fileList.value = file.map((item) => {
                return {
                  raw: item,
                  name: item.fileName,
                  url: item.fileUrl,
                };
              });
            } else {
              fileList.value = [];
            }
            let outerBoxSelfAdhesiveStickerFile = fileObj[formData.data.id].filter((item) => item.businessType == "1");
            if (outerBoxSelfAdhesiveStickerFile && outerBoxSelfAdhesiveStickerFile.length > 0) {
              formData.data.outerBoxSelfAdhesiveStickerFile = outerBoxSelfAdhesiveStickerFile[0];
            } else {
              formData.data.outerBoxSelfAdhesiveStickerFile = {};
            }
          }
          for (let i = 0; i < formData.data.orderSkuList.length; i++) {
            if (fileObj[formData.data.orderSkuList[i].id] && fileObj[formData.data.orderSkuList[i].id].length > 0) {
              formData.data.orderSkuList[i].selfAdhesiveStickerFile = {
                id: fileObj[formData.data.orderSkuList[i].id][0].id,
                fileName: fileObj[formData.data.orderSkuList[i].id][0].fileName,
                fileUrl: fileObj[formData.data.orderSkuList[i].id][0].fileUrl,
              };
            }
          }
        });
      }
    }
  },
  {
    deep: true,
  }
);
const saveShippingPackage = (data) => {
  formData.data.orderPackageBomList = data.orderPackageBomList;
  formData.data.outerBoxSelfAdhesiveStickerFile = data.outerBoxSelfAdhesiveStickerFile;
};
const computeDeliveryMaterialsFee = () => {
  let money = 0;
  if (formData.data.orderSkuList && formData.data.orderSkuList.length > 0) {
    for (let i = 0; i < formData.data.orderSkuList.length; i++) {
      if (formData.data.orderSkuList[i].deliveryMaterialsFee && formData.data.orderSkuList[i].quantity) {
        money = Number(Math.round((money + formData.data.orderSkuList[i].deliveryMaterialsFee * formData.data.orderSkuList[i].quantity) * 100) / 100);
      }
    }
  }
  return money;
};
const computeSingleDeliveryMaterialsFee = (index) => {
  let money = computeDeliveryMaterialsFee();
  let list = formData.data.orderSkuList.filter((item) => item.quantity > 0);
  let num = 0;
  let singlePrice = 0;
  if (list && list.length > 0) {
    for (let i = 0; i < list.length; i++) {
      num = Number(Math.round(num + list[i].quantity));
    }
    singlePrice = Number(Math.ceil((money / num) * 1000) / 1000);
  }
  formData.data.orderSkuList[index].deliveryMaterialsFee = singlePrice;
  return formData.data.orderSkuList[index].deliveryMaterialsFee;
};
const openUpload = ref(false);
const loadingUpload = ref(false);
const clickUploadProduct = () => {
  loadingUpload.value = false;
  openUpload.value = true;
};
const giveawayServerLog = (params) => {
  let file = params.file;
  let formFile = new FormData();
  formFile.append("file", file);
  loadingUpload.value = true;
  proxy.postUploadFile("/skuSpec/getSkuSpecListFromImport", formFile).then(
    (res) => {
      ElMessage({ message: "导入成功", type: "success" });
      openUpload.value = false;
      if (res.data && res.data.length > 0) {
        for (let i = 0; i < res.data.length; i++) {
          let list = formData.data.orderSkuList.filter((item) => item.skuSpecId === res.data[i].id && item.bomSpecId === res.data[i].bomSpecId);
          if (!(list && list.length > 0)) {
            let orderSkuBomList = [];
            if (res.data[i].packagingMaterialList && res.data[i].packagingMaterialList.length > 0) {
              orderSkuBomList = res.data[i].packagingMaterialList.map((item) => {
                return {
                  bomSpecId: item.bomSpecId,
                  unitPrice: item.internalSellingPrice,
                  quantity: item.quantity,
                  bomSpecName: item.name,
                };
              });
            }
            formData.data.orderSkuList.push({
              wlnSkuName: res.data[i].wlnSkuName,
              skuId: res.data[i].skuId,
              code: res.data[i].code,
              name: res.data[i].name,
              skuSpecId: res.data[i].id,
              bomSpecId: res.data[i].bomSpecId,
              quantity: undefined,
              erpCode: "",
              featureCode: "",
              customProcessingFee: "",
              customProcessingType: "",
              lssueFee: "",
              deliveryMaterialsFee: "",
              packingLabor: "",
              managementFee: "",
              unitPrice: "",
              printType: 1,
              packageRemark: "",
              orderSkuBomList: orderSkuBomList,
              blueprint: res.data[i].designImgUrl,
              productionDocument: res.data[i].sharedFolder,
              artworkLibraryId: "0",
              inventoryQuantity: res.data[i].inventoryQuantity,
              proofingFee: 0,
            });
          }
        }
      }
    },
    (err) => {
      console.log(err);
      loadingUpload.value = false;
    }
  );
};
// 向父组件暴露
defineExpose({ getFormData, handleSubmit, saveShippingPackage });
</script>

<style lang="scss" scoped>
::v-deep(.el-input-number .el-input__inner) {
  text-align: left;
}
:deep(.el-dialog) {
  margin-top: 10px !important;
  margin-bottom: 10px !important;
}
:deep(.ql-editor) {
  height: auto;
}
:deep(.el-collapse-item__header) {
  justify-content: center;
}
:deep(.el-collapse-item__arrow) {
  margin: 0;
}
:deep(.el-table__cell) {
  vertical-align: top;
}
:deep(.vertical-align) {
  vertical-align: middle;
}
.shippingPackage {
  .el-form-item {
    margin-bottom: 0;
  }
}
</style>