Files
new-cashier/jeepay-ui-merchant/src/views/store/AlipayShop.vue
2024-05-23 14:39:33 +08:00

221 lines
7.7 KiB
Vue

<template>
<a-drawer
v-model:visible="vdata.isShow"
:title="vdata.isAdd ? '创建蚂蚁店铺' : '修改蚂蚁店铺'"
width="60%"
:mask-closable="false"
@close="vdata.isShow = false"
>
<a-form v-if="!vdata.isAdd" :model="vdata.saveObject" :label-col="{span: 6}" :wrapper-col="{span: 15}">
<a-row justify="space-between" type="flex">
<a-col :span="12">
<a-form-item label="蚂蚁店铺ID:">
<a-span>{{ vdata.saveObject.alipayShopId }}</a-span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="蚂蚁店铺状态">
<a-tag v-if="vdata.saveObject.alipayShopStatus=='0'">未创建</a-tag>
<a-tag v-else-if="vdata.saveObject.alipayShopStatus=='99'" color="green">审核通过</a-tag>
<a-tag v-else-if="vdata.saveObject.alipayShopStatus=='-1'" color="red">审核拒绝</a-tag>
<div v-else>
<a-tag color="orange">审核中</a-tag>
<a-button
v-if="$access('ENT_MCH_ALIPAY_SHOP_STATUS')"
type="primary"
:size="'small'"
:loading="vdata.updateLoading"
@click="updateShopStatusFunc(vdata.saveObject.storeId)"
>
<sync-outlined /> 更新状态
</a-button>
</div>
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-divider v-if="!vdata.isAdd" />
<a-form ref="infoFormModel" :model="vdata.saveObject" :label-col="{span: 6}" :wrapper-col="{span: 15}" :rules="rules">
<a-row justify="space-between" type="flex">
<a-col :span="12">
<a-form-item label="门店名称:" name="storeName">
<a-input v-model:value="vdata.saveObject.storeName" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="联系人电话" name="contactPhone">
<a-input v-model:value="vdata.saveObject.contactPhone" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="门店类目" name="shopCategory">
<JeepayAliMccSelect v-model:value="vdata.saveObject.shopCategory" />
</a-form-item>
</a-col>
<a-col v-if="vdata.isAdd" :span="12">
<a-form-item label="店铺经营类型" name="shopType">
<a-radio-group v-model:value="vdata.saveObject.shopType">
<a-radio value="01">直营</a-radio>
<a-radio value="02">加盟</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
</a-row>
<!-- 引入地图组件 -->
<JeepayAmap v-if="vdata.isShow" ref="jeepayAmapRef" />
</a-form>
<div class="drawer-btn-center">
<a-button :style="{ marginRight: '8px' }" @click="vdata.isShow = false"><close-outlined /> 取消</a-button>
<a-button :style="{ marginRight: '8px' }" type="primary" :loading="vdata.confirmLoading" @click="okFunc"><check-outlined /> 确定</a-button>
<a-button v-if="$access('ENT_MCH_ALIPAY_SHOP_DELETE') && vdata.saveObject.alipayShopStatus != '0'" type="danger" @click="alipayShopCloseFunc"><close-outlined /> 关闭蚂蚁店铺</a-button>
</div>
</a-drawer>
</template>
<script lang="ts" setup>
import { req, reqLoad, API_URL_MCH_STORE_LIST, API_ALIPAY_SHOP }from '@/api/manage'
import { reactive, ref, getCurrentInstance, nextTick } from 'vue'
const { $infoBox, $access } = getCurrentInstance()!.appContext.config.globalProperties
const jeepayAmapRef = ref()
const infoFormModel = ref()
const props = defineProps({
callbackFunc: {type: Function, default: () => {} }
})
const vdata: any = reactive({
isAdd: false, // 是否新增
confirmLoading: false, // 显示确定按钮loading图标
isShow: false, // 是否显示弹层/抽屉
saveObject: {} as any, // 数据对象
recordId: null, // 更新对象ID
})
const rules = {
areaCode: [{ required: true, message: '请选择省市区', trigger: 'blur' }],
storeName: [{ required: true, message: '请输入门店名称', trigger: 'blur' }],
contactPhone: [{ required: true, message: '请输入联系人电话', trigger: 'blur' }],
shopCategory: [{ required: true, message: '请输入门店类目', trigger: 'blur' }],
shopType: [{ required: true, message: '请输入店铺经营类型', trigger: 'blur' }]
}
function show (recordId, isAdd) { // 弹层打开事件
vdata.isAdd = isAdd
if (infoFormModel.value !== undefined) {
infoFormModel.value.resetFields()
}
// 数据恢复为默认数据
vdata.saveObject = { lng: '', lat: ''}
vdata.confirmLoading = false // 关闭loading
vdata.updateLoading = false // 关闭loading
vdata.isShow = true
let initMapData : any = {}
if (!isAdd) {
vdata.recordId = recordId
req.getById(API_ALIPAY_SHOP, recordId).then(res => {
vdata.saveObject = res
console.log(vdata.saveObject)
// 门店包含了区域编码
if(res.areaCode && res.areaCode.length){
initMapData.areacode = res.areaCode
initMapData.lnglat = res.lng + ',' + res.lat
initMapData.address = res.address
}
// 显示地图信息
nextTick(() => jeepayAmapRef.value.init(initMapData))
})
}else {
// 创建蚂蚁店铺,拉取商户门店信息
vdata.recordId = recordId
req.getById(API_URL_MCH_STORE_LIST, recordId).then(res => {
vdata.saveObject = res
// 门店包含了区域编码
if(res.areaCode && res.areaCode.length){
initMapData.areacode = res.areaCode
initMapData.lnglat = res.lng + ',' + res.lat
initMapData.address = res.address
}
// 显示地图信息
nextTick(() => jeepayAmapRef.value.init(initMapData))
})
}
}
// 创建/修改蚂蚁店铺
function okFunc () {
let mapData = jeepayAmapRef.value.getMapData()
if(!mapData || mapData.areacode.length == 0 || !mapData.address || !mapData.lnglat){
return $infoBox.message.error('请选择地理位置')
}
if(mapData.lnglat.indexOf(',') < 0){
return $infoBox.message.error('请输入正确的经纬度')
}
infoFormModel.value.validate().then(valid =>{
vdata.saveObject.lng = mapData.lnglat.split(',')[0]
vdata.saveObject.lat = mapData.lnglat.split(',')[1]
vdata.saveObject.address = mapData.address
vdata.saveObject.areaCode = JSON.stringify(mapData.areacode)
vdata.confirmLoading = true // 显示loading
if (vdata.isAdd) {
reqLoad.add(API_ALIPAY_SHOP + '/' + vdata.recordId, vdata.saveObject).then(res => {
vdata.isShow = false
vdata.confirmLoading = false
props.callbackFunc() // 刷新列表
}).catch(valid =>{
vdata.confirmLoading = false
})
}else {
reqLoad.updateById(API_ALIPAY_SHOP, vdata.recordId, vdata.saveObject).then(res => {
vdata.isShow = false
vdata.confirmLoading = false
props.callbackFunc() // 刷新列表
}).catch(valid =>{
vdata.confirmLoading = false
})
}
})
}
function alipayShopCloseFunc () { // 关闭蚂蚁店铺
$infoBox.confirmDanger('关闭蚂蚁店铺', '确定关闭蚂蚁店铺吗?', () => {
return reqLoad.delById(API_ALIPAY_SHOP, vdata.recordId).then(res => {
$infoBox.message.success('关闭成功')
props.callbackFunc() // 刷新列表
}).catch(err => console.log(err))
},() => {
console.log(1111)
})
}
function updateShopStatusFunc (recordId) { // 【更新蚂蚁店铺状态】
vdata.updateLoading = true
reqLoad.getById(API_ALIPAY_SHOP + '/createResult', recordId, undefined).then(res => {
vdata.updateLoading = false
vdata.saveObject.alipayShopStatus = res.alipayShopStatus
}).catch(err =>{
console.log(err)
})
}
defineExpose({show})
</script>