<template>
  <Dialog title="成交详情" v-model="show" width="800px">
    <el-tabs v-model="tabName">
      <el-tab-pane label="线索信息" name="clueInfo" v-if="checkPermi(['clue:pool:detail'])">
        <Descriptions :data="clueInfo" :schema="clueSchema" :columns="2" labelWidth="130px" />
      </el-tab-pane>
      <el-tab-pane label="成交信息" name="orderInfo">
        <Descriptions :data="orderInfo" :schema="orderSchema" :columns="2" labelWidth="130px" />
        <template v-if="orderInfo.signProducts && orderInfo.signProducts.length">
          <el-divider direction="horizontal" content-position="left">
            成交产品<span v-if="prodTotalPrice">,应收:{{ prodTotalPrice }}</span>
          </el-divider>
          <el-table :data="orderInfo.signProducts" border stripe>
            <el-table-column type="index" width="50" />
            <el-table-column prop="productName" label="成交产品" />
            <el-table-column prop="specsName" label="产品规格" />
            <el-table-column prop="signNum" label="成交数量" width="100px" />
            <el-table-column label="发货状态" prop="sendState" width="100px" />
            <el-table-column label="发货备注">
              <template #default="scope">
                <el-popover
                  placement="top"
                  width="500px"
                  trigger="click"
                  v-if="scope.row.sendRemark"
                >
                  <template #reference>
                    <el-button type="primary" style="padding: 0" text>点击查看</el-button>
                  </template>
                  <div v-dompurify-html="scope.row.sendRemark"></div>
                </el-popover>
              </template>
            </el-table-column>
          </el-table>
        </template>
        <el-divider direction="horizontal" content-position="left">
          其他费用<span v-if="extraTotalPrice">,应收:{{ extraTotalPrice }}</span>
        </el-divider>
        <el-table :data="orderInfo.extraPay" border stripe>
          <el-table-column type="index" width="50" />
          <el-table-column prop="extraPayType" label="费用项" />
          <el-table-column prop="extraPayMoney" label="金额" />
          <el-table-column prop="remark" label="备注" />
        </el-table>
        <el-divider
          v-if="prodTotalPrice + extraTotalPrice"
          direction="horizontal"
          content-position="left"
        >
          合计应收:{{ prodTotalPrice + extraTotalPrice }}
        </el-divider>
        <div v-if="checkPermi(['clue:order:add-fee'])">
          <el-divider direction="horizontal" content-position="left">
            额外支出<span v-if="extraPayTotalFee">,合计:{{ extraPayTotalFee }}</span>
          </el-divider>
          <el-table :data="extraPayList" border stripe>
            <el-table-column type="index" width="50" />
            <el-table-column prop="extraPayType" label="支出项" />
            <el-table-column prop="extraPayMoney" label="金额" />
            <el-table-column prop="remark" label="备注" />
          </el-table>
        </div>
      </el-tab-pane>
      <el-tab-pane
        label="回款记录"
        name="returnRecord"
        v-if="checkPermi(['clue:order:return-list'])"
      >
        <el-table :data="returnRecordList" border stripe>
          <el-table-column type="index" width="50" />
          <el-table-column prop="money" label="回款金额" />
          <el-table-column prop="applyTime" label="申请日期" />
          <el-table-column prop="isPayoff" label="是否结清" />
          <el-table-column prop="stateName" label="审核状态" />
        </el-table>
      </el-tab-pane>
      <el-tab-pane
        label="售后记录"
        name="afterSale"
        v-if="checkPermi(['clue:order:after-sale-list'])"
      >
        <el-table :data="aftersaleList" border stripe>
          <el-table-column type="index" width="50" />
          <el-table-column prop="reason" label="售后原因" />
          <el-table-column prop="refundAmount" label="退款金额" />
          <el-table-column prop="isReturns" label="是否退货" />
          <el-table-column prop="applyTime" label="申请日期" width="180px" />
          <el-table-column prop="stateName" label="审核状态" />
        </el-table>
      </el-tab-pane>
    </el-tabs>
    <div class="mb-15px"></div>
  </Dialog>
</template>

<script setup name="DialogOrder">
import * as ClueApi from '@/api/clue'
import * as OrderApi from '@/api/clue/sign'
import { getSimpleFieldList as getClueFieldList } from '@/api/clue/clueField'
import { getSimpleFieldList as getOrderFieldList } from '@/api/clue/orderField'
import { getPaymentPage } from '@/api/clue/payment'
import { getAfterSalePage } from '@/api/clue/afterSale'

import { checkPermi } from '@/utils/permission'
import { formatDate } from '@/utils/formatTime'

const tabName = ref('clueInfo')
const show = ref(false)
const clueInfo = ref({})
const orderInfo = ref({
  signProducts: [],
  extraPay: []
})
const returnRecordList = ref([])
const aftersaleList = ref([])
const extraPayList = ref([])

const prodTotalPrice = computed(() => {
  return (
    orderInfo.value.signProducts?.reduce(
      (pre, cur) => pre + (cur?.price || 0) * (cur?.signNum || 0),
      0
    ) || 0
  )
})

// 其他费用
const extraTotalPrice = computed(() => {
  return orderInfo.value.extraPay.reduce((pre, cur) => pre + cur.extraPayMoney, 0)
})

// 额外支出
const extraPayTotalFee = computed(() => {
  return extraPayList.value.reduce((pre, cur) => pre + cur.extraPayMoney, 0)
})

function open(clueId, orderId) {
  try {
    show.value = true
    tabName.value = 'clueInfo'
    getFields()
    ClueApi.getClue(clueId).then((data) => {
      clueInfo.value = { ...data, ...data.diyParams }
    })
    OrderApi.getSign(orderId).then((data) => {
      orderInfo.value = { ...data, ...data.diyParams }
      orderInfo.value.dealDate = formatDate(orderInfo.value.dealDate, 'YYYY-MM-DD HH:mm')
    })
    OrderApi.getSignExtraPayList({ id: orderId }).then((data) => {
      extraPayList.value = data
    })
    getPaymentPage({ signId: orderId, pageNo: 1, pageSize: 100 }).then((data) => {
      returnRecordList.value = data.list
    })
    getAfterSalePage({ signId: orderId, pageNo: 1, pageSize: 100 }).then((data) => {
      aftersaleList.value = data.list
    })
  } catch (error) {
    console.log(error)
  }
}

const clueSchema = ref([])
const orderSchema = ref([])
function getFields() {
  getClueFieldList().then((data) => {
    const arr = useCrudSchemas(data).allSchemas.detailSchema

    arr.forEach((it) => {
      if (it.label.includes('日期')) {
        it.dateFormat = 'YYYY-MM-DD'
      }
    })
    if (arr.length % 2 != 0) {
      arr.push({})
    }
    clueSchema.value = [
      ...arr,
      {
        field: 'requirement',
        label: '诉求',
        span: 2
      },
      {
        field: 'remark',
        label: '备注',
        span: 2,
        isEditor: true
      }
    ]
  })

  getOrderFieldList().then((data) => {
    const list = useCrudSchemas(data).allSchemas.detailSchema
    const arr = []
    list.forEach((it) => {
      if (it.label.includes('日期')) {
        it.dateFormat = 'YYYY-MM-DD'
      }
      if (it.field == 'receivedMoney') {
        checkPermi(['clue:order:return-list']) && arr.push(it)
      } else {
        arr.push(it)
      }
    })
    if (arr.length % 2 != 0) {
      arr.push({})
    }
    orderSchema.value = [
      ...arr,
      {
        field: 'remark',
        label: '备注',
        span: 2,
        isEditor: true
      }
    ]
  })
}

defineExpose({
  open
})
</script>

<style lang="scss" scoped></style>