<template>
  <page-header-wrapper>
    <a-card>
      <JeepaySearchForm :searchFunc="searchFunc" :resetFunc="() => { vdata.searchData = {} }">
        <jeepay-text-up v-model:value="vdata.searchData['mchServiceName']" :placeholder="'服务商号/服务商名称'" />
        <JeepaySearchInfoInput v-model:value="vdata.searchData['mchUserName']" placeholder="用户号/名称/手机号" :textUpStyle="true" :mchNoAndName="true" showType="MCH" />

        <jeepay-text-up  v-model:value="vdata.searchData['mchApplyName']"  :placeholder="'商户号/商户名称'"  />
        <jeepay-text-up   v-model:value="vdata.searchData['storeId']"  :placeholder="'门店名称/门店编号'"  />
        <jeepay-text-up   v-model:value="vdata.searchData['contactPhone']"    :placeholder="'联系人电话'" />
      </JeepaySearchForm>
      <!-- 列表渲染 -->
      <JeepayTable
        ref="infoTable"
        :initData="false"
        :reqTableDataFunc="reqTableDataFunc"
        :tableColumns="tableColumns"
        :searchData="vdata.searchData"
        rowKey="storeId"
        @btnLoadClose="vdata.btnLoading=false"
      >
        <template #topBtnSlot>
          <div>
            <a-button v-if="$access('ENT_MCH_STORE_ADD')" type="primary" class="mg-b-30" @click="addFunc"><plus-outlined />新建</a-button>
          </div>
        </template>
        <template #bodyCell="{ column, record }">


          <template v-if="column.key === 'mchUserName'">
            <a-tooltip  class="my-tooltip" overlayClassName="tooltip-box-name">
              <template #title>
                <span>用户名称：{{record.mchUserName}}</span><br>
                <span>用户手机号：{{record.mchUserPhone}}</span>
              </template>
              <div class="my-tooltip-title-box"> {{record.mchUserName}}</div>
            </a-tooltip>
          </template>
          <template v-if="column.key === 'mchServiceName'">
            <a-tooltip  class="my-tooltip" overlayClassName="tooltip-box-name">
              <template #title>
                <span>服务商名称：{{record.mchServiceName}}</span><br>
                <span>服务商号：{{record.agentNo}}</span>
              </template>
              <div class="my-tooltip-title-box"> {{record.mchServiceName}}</div>
            </a-tooltip>
          </template>
          <template v-if="column.key === 'bindAppIdName'">
            <a-tooltip  class="my-tooltip" overlayClassName="tooltip-box-name">
              <template #title>
                <span>应用名称：{{record.bindAppIdName}}</span><br>
                <span>应用ID：{{record.bindAppId}}</span>
              </template>
              <div class="my-tooltip-title-box"> {{record.bindAppIdName}}</div>
            </a-tooltip>
          </template>

          <template v-if="column.key === 'mchApplyName'">
            <a-tooltip  class="my-tooltip" overlayClassName="tooltip-box-name">
              <template #title>
                <span>商户名称：{{record.mchApplyName}}</span><br>
                <span>商户号：{{record.mchApplyId}}</span>
              </template>
              <div class="my-tooltip-title-box"> {{record.mchApplyName}}</div>
            </a-tooltip>
          </template>
          <template v-if="column.key === 'storeName'">

            <a @click="editFunc(record)"><b>{{ record.storeName }}</b></a>
          </template>
          <template v-if="column.key === 'defaultFlag'">
            <a-tag v-if="record.defaultFlag===1" color="green">是</a-tag>
            <a-switch v-else :checked="record.defaultFlag===1?true:false" @change="(defaultFlag) => { return updateState(record.mchNo, record.storeId, defaultFlag)}" />
          </template>
          <template v-if="column.key === 'deviceNumber'">
            <a href="javascript:void(0)" >{{ record.deviceNumber ? record.deviceNumber : 0 }}</a>
          </template>
          <template v-if="column.key === 'remark'">
            <span @click="editFunc(record)" class="two-lines"
            ><b>{{ record.remark != "" ? record.remark : "--" }}</b>
              <EditOutlined @click="editFunc(record)" />
            </span>
          </template>

          <template v-if="column.key === 'alipayShopStatus'">
            <a-tag v-if="record.alipayShopStatus=='0'" />
            <a-tag v-else-if="record.alipayShopStatus=='99'" color="green">审核通过</a-tag>
            <a-tag v-else-if="record.alipayShopStatus=='-1'" color="red">审核拒绝</a-tag>
            <div v-else>
              <a-tag color="orange">审核中</a-tag>
              <a-tag
                v-if="$access('ENT_MCH_ALIPAY_SHOP_STATUS')"
                color="blue"
                style="cursor: pointer;"
                @click="updateAlipayShopStatusFunc(record.storeId)"
              >
                <sync-outlined />更新状态
              </a-tag>
            </div>
          </template>

          <template v-if="column.key === 'op'">
            <!-- 操作列插槽 -->
            <JeepayTableColumns>
              <a-button v-if="$access('ENT_MCH_STORE_EDIT')" type="link" style="padding-right: 10px;padding-left: 10px;" @click="editFunc(record)">修改</a-button>
              <a-button v-if="$access('ENT_MCH_ALIPAY_SHOP_ADD') && record.alipayShopStatus == '0'" type="link" @click="alipayShopCreateFunc(record.storeId)">创建蚂蚁店铺</a-button>
              <a-button v-if="$access('ENT_MCH_ALIPAY_SHOP_EDIT') && record.alipayShopStatus != '0' && record.alipayShopId" type="link" @click="alipayShopUpdateFunc(record.storeId)">修改蚂蚁店铺</a-button>
              <a-button v-if="$access('ENT_MCH_STORE_DELETE')" type="link" style="color: red" @click="delFunc(record.storeId)">删除</a-button>
            </JeepayTableColumns>
          </template>
        </template>
      </JeepayTable>
    </a-card>

    <!-- 新增 / 修改 页面组件  -->
    <InfoAddOrEdit ref="infoAddOrEdit" :callbackFunc="searchFunc" />
    <!-- 详情页面组件  -->
    <InfoDetail ref="infoDetail" :callback-func="searchFunc" />
    <!-- 蚂蚁店铺 页面组件  -->
    <AlipayShop ref="alipayShopRef" :callbackFunc="searchFunc" />
  </page-header-wrapper>
</template>
<script lang="ts" setup>
import { API_URL_MCH_STORE_LIST, API_ALIPAY_SHOP, req, reqLoad } from '@/api/manage'
import InfoAddOrEdit from './AddOrEdit.vue'
import AlipayShop from './AlipayShop.vue'
import InfoDetail from './Detail.vue'
import { useRoute } from 'vue-router'
import { ref, onMounted, reactive, getCurrentInstance } from 'vue'
// 获取全局函数
const { $infoBox,$access } = getCurrentInstance()!.appContext.config.globalProperties

// const tableColumns = reactive([
//   { title: '门店名称', key: 'storeName', dataIndex: 'storeName' },
//   { title: '门店编号', dataIndex: 'storeId' },
//   { title: '用户号', dataIndex: 'mchNo' },
//   { title: '用户名称', dataIndex: 'mchName' },
//   { title: '默认', key: 'defaultFlag', align: 'center' },
//   { title: '蚂蚁店铺状态', key: 'alipayShopStatus', dataIndex: 'alipayShopStatus' },
//   { title: '创建时间', dataIndex: 'createdAt'},
//   { key: 'op',title: '操作', fixed: 'right', align: 'center'}
// ])

const tableColumns = reactive([
  { title: "商户名称", key: "mchApplyName", dataIndex: "mchApplyName" },
  { title: "门店名称", key: "storeName", dataIndex: "storeName"},
  { title: "门店编号", dataIndex: "storeId"},
  { title: '用户名称', key: 'mchUserName', dataIndex: 'mchUserName' },
  { title: '服务商', key: 'mchServiceName', dataIndex: 'mchServiceName' },
  // { title: "是否默认", key: "defaultFlag", align: "center" },
  { title: "所属应用",key: "bindAppIdName", dataIndex: "bindAppIdName" },
  { title: "联系电话", dataIndex: "contactPhone" },
  { title: "备注", key: "remark", dataIndex: "remark"},
  { title: "设备总数", key: "deviceNumber", dataIndex: "deviceNumber", align: "center" },
  // { title: '蚂蚁店铺状态', key: 'alipayShopStatus', dataIndex: 'alipayShopStatus' },
  { title: "创建时间", dataIndex: "createdAt" },
  { key: "op", title: "操作", fixed: "right", align: "center" },
]);


    const infoDetail = ref()
    const infoAddOrEdit  = ref()
    const alipayShopRef  =ref()
    const infoTable = ref()
    const vdata = reactive({
      tableColumns: tableColumns,
      searchData: {},
      btnLoading: false
    })

    const queryFunc = () => {

      vdata.btnLoading = true
      infoTable.value.refTable(true)
    }

    onMounted(() => {
      vdata.searchData['mchNo'] = useRoute().query.mchNo
      if(useRoute().query.applyId !== undefined){
        vdata.searchData['mchApplyId'] = useRoute().query.applyId as any
      }
      queryFunc()
    })

    // 请求table接口数据
    function reqTableDataFunc (params)  {
       return req.list(API_URL_MCH_STORE_LIST, params)
    }

    function searchFunc() { // 点击【查询】按钮点击事件
      vdata.btnLoading = true // 打开查询按钮的loading
      infoTable.value.refTable(true)
    }
    function addFunc () { // 业务通用【新增】 函数
      infoAddOrEdit.value.show(vdata.searchData['mchNo'])
    }
    function alipayShopCreateFunc (recordId) { // 创建蚂蚁店铺
      alipayShopRef.value.show(recordId, true)
    }
    function alipayShopUpdateFunc (recordId) { // 更新蚂蚁店铺
      alipayShopRef.value.show(recordId, false)
    }
    function delFunc (recordId) { // 业务通用【删除】 函数
      $infoBox.confirmDanger('确认删除？', '', () => {
        return req.delById(API_URL_MCH_STORE_LIST, recordId).then(res => {
         $infoBox.message.success('删除成功！')
          infoTable.value.refTable(false)
        }).catch(err => {})
      })
    }
    function editFunc (record) { // 业务通用【修改】 函数
      infoAddOrEdit.value.show(vdata.searchData['mchNo'], record)
    }
    function detailFunc (recordId: any) { // 门店详情页
      infoDetail.value.show(recordId)
    }
    function updateState (mchNo, recordId, state) { // 【更新状态】
      const title = state === 1 ? '确认[默认]该门店？' : '确认[取消默认]该门店？'
      const content = '开启默认后则默认使用该门店配置，有且只能有一个默认门店。'
      return new Promise<void>((resolve, reject) => {
        $infoBox.confirmDanger(title, content, () => {
          return reqLoad.updateById(API_URL_MCH_STORE_LIST, recordId, { mchNo: mchNo, defaultFlag: state }).then(res => {
            searchFunc()
            resolve()
          }).catch(err => reject(err))
        },
          () => {
          reject(new Error())
        })
      })
    }

    function updateAlipayShopStatusFunc (recordId) { // 【更新蚂蚁店铺状态】
      return new Promise<void>((resolve, reject) => {
        reqLoad.getById(API_ALIPAY_SHOP + '/createResult', recordId, undefined).then(res => {
          vdata.btnLoading = false
          searchFunc()
        }).catch(valid =>{
          vdata.btnLoading = false
        })
      })
    }
</script>
<style>
.two-lines {
  color: #1965ff;
  max-width: 150px;
  display: block;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.my-tooltip .ant-btn {
  width: 600px !important;
  background-color: #f0f0f0;
  color: #333;
  border: 1px solid #ddd;
  padding: 5px;
  border-radius: 4px;
}
.ant-dropdown-menu-item-only-child{
  text-align: center;
}
</style>
