<template> <div class="page"> <!-- {{props.props.propsData.isCad}} --> <div class="title">支付项目信息</div> <a-form style="margin-top: 30px;" :model="formState" name="basic" :wrapper-col="{ span: 6 }" autocomplete="off"> <a-form-item label="选择商品" name="subject" :rules="rulesRef.subject" :label-col="{ span: 2 }" labelAlign="left"> <div style="width:100%;display: flex;align-items: center;"> <a-select v-model:value="formState.subject" :default-active-first-option="false" mode="multiple" style="width: 100%" placeholder="请选择商品" @focus="onSubSearch" @search="onSubSearch" @change="onSubSearch" @select="onSelectss" @popupScroll="popupScroll"> <a-select-option v-for="(item,index) in optionss.list" :itemKey="item" :value="item.subject" :label="index" :key="index" > {{item.subject}} </a-select-option> </a-select> </div> </a-form-item> <a-form-item label="商品简介" name="shortname" :label-col="{ span: 2 }" labelAlign="left" > <a-input v-model:value="formState.shortname" placeholder="请输入商品描述" :disabled="true" /> </a-form-item> <a-form-item label="支付金额" name="price" :label-col="{ span: 2 }" labelAlign="left"> <a-radio-group v-model:value="formState.paymentmodel" name="radioGroup" class="pay"> <div style="display: flex;height: 40px;"> <a-radio value="0" style="width:150px;">商品默认金额</a-radio> <a-input-number style="width:200px;height: 35px;" v-model:value="price" :formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')" :parser="value => value.replace(/\$\s?|(,*)/g, '')" :disabled="true" /> <div style="width:50px;">元</div> </div> <div style="display: flex;height: 40px;margin-top: 20px;"> <a-radio value="1" style="width:150px;">自定义金额</a-radio> <a-input-number style="width:200px;height: 35px;" v-model:value="priceSet" :formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')" :parser="value => value.replace(/\$\s?|(,*)/g, '')"/> <div style="width:50px;">元</div> </div> </a-radio-group> </a-form-item> <a-form-item label="支付渠道" name="price" :label-col="{ span: 2 }" labelAlign="left"> <a-checkbox-group v-model:value="checkboxValue" style="width: 100%"> <div style="display:flex;" v-for="item,index in optionsWithDisabled" :itemKey="item"> <a-checkbox :value="item.value" :label="item.label" @change="onSelectCheckboxValue(item,index)"> <div>{{item.value}}</div> </a-checkbox> <div style="margin-left:20px;">收款账户</div> <div style="margin-left:20px;color: black;" v-if="listValue[index] &&listValue[index].paytype == 1">{{listValue[index].name}}</div> <div style="margin-left:20px;color: black;" v-else-if="listValue[index] &&listValue[index].paytype == 2">{{listValue[index].name}}</div> <div style="margin-left:20px;color: black;" v-else>默认</div> <div style="margin-left:20px;color: rgb(15, 64, 245);cursor: pointer;" @click="onSet(item.label)">设置</div> </div> </a-checkbox-group> </a-form-item> <a-form-item label="支付前填写手机号" name="price" :label-col="{ span: 3 }" labelAlign="left"> <div style="display: flex;"> <a-switch v-model:checked="formState.fullphone" /> </div> </a-form-item> <!-- <a-form-item label="开始时间" name="price" :label-col="{ span: 2 }" labelAlign="left"> <div style="display:flex"> <a-date-picker v-model:value="formState.starttime" :locale="locale" :format="dateFormat" :disabledDate="disabledDate"/> <a-time-picker style="margin-left:10px;" v-model:value="startvalue" format="HH:mm" /> </div> </a-form-item> --> <a-form-item label="倒计时结束时间" name="price" :label-col="{ span: 2 }" labelAlign="left"> <div style="display:flex"> <a-date-picker v-model:value="formState.expireendtime" :locale="locale" :format="dateFormat" :disabledDate="disabledDate"/> <a-time-picker style="margin-left:10px;" v-model:value="endvalue" format="HH:mm" /> </div> </a-form-item> <a-form-item label="信息备注" name="price" :label-col="{ span: 2 }" labelAlign="left"> <div style="display:flex"> <a-input v-model:value="formState.remark" placeholder="请填写备注" /> </div> </a-form-item> <a-form-item :wrapper-col="{ offset: 0, span: 8 }"> <a-button type="primary" html-type="submit" @click="onSubmit">确定</a-button> </a-form-item> </a-form> <img src="../../../../assets/img/show.png" alt="" style="width:375px;position: absolute;right: 300px;height:85%;top: 80px; display: block;border: 1px solid #cccccc;"/> <a-modal v-model:visible="visible" title="请选择默认用户" ok-text="确认" cancel-text="取消" @ok="hideModal" @cancel="onCancel" > <a-radio-group v-model:value="modalvalue"> <div v-for="item in list" :itemkey="item.id"> <a-radio v-if="item.paytype == 1" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.name}}</a-radio> <a-radio v-else-if="item.paytype == 2" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.name}}</a-radio> </div> </a-radio-group> </a-modal> </div> </template> <script lang="ts" setup> import { reactive, ref, defineEmits, defineExpose, toRaw, watch,toRefs } from "vue"; import dayjs, { Dayjs } from 'dayjs'; import locale from 'ant-design-vue/es/date-picker/locale/zh_CN'; import { message} from "ant-design-vue"; import { Form } from 'ant-design-vue'; import { onCreateGoodsPay,onfindWX,onfindAli,onFindbyLikeName } from '@/api/index' import { getUid } from "@/utils/userInfo"; import moment from 'moment'; const useForm = Form.useForm; interface FormState { subject: any, shortname: string, payment: string, paymentmodel: string, checked:boolean, starttime:string, expireendtime:string, fullphone:boolean, remark:string, } let formState = ref<FormState>({ subject: [], shortname: '', payment: '', paymentmodel: '0', checked:false, starttime:'', expireendtime:'', fullphone:false, remark:'' }); const visible = ref<boolean>(false); const list = ref<any>([]) let optionss = reactive<any>({ list:[] }) let goodspayditch = ref<any>([]) const props = defineProps(); const dateFormat = 'YYYY/MM/DD'; const endvalue = ref<Dayjs>(); const optionsWithDisabled = [ { value: '微信', label: '1' }, { label: '2', value: '支付宝' }, // { label: '3', value: '京东白条' }, // { label: '4', value: '花呗' } ]; const checkboxValue = ref<any>([]) const onSelectss =(value:any, option:any)=>{ console.log(option.itemKey.price,'option.itemKey.price'); formState.value = { paymentmodel:'0', ...option.itemKey, } price.value = option.itemKey.price/100 } const emit = defineEmits(['onBack']); let price = ref(0) let priceSet = ref(0) const modalvalue = ref<any>('0') let radioValue= reactive<any>({ }) let listValue = ref<any>([]) const rulesRef = reactive({ subject: [ { required: true, message: '请输入商品名称!', }, ], }); const { validate } = useForm(formState, rulesRef); const onSelect = (value: any, option: any) => { price.value = option.itemKey.price/100 } const onSubmit = () => { validate() .then(async (res) => { console.log(toRaw(formState.value),'toRaw(formState.value)'); const uid =getUid() const expireendtime = (moment(toRaw(formState.value).expireendtime.$d).format('YYYY-MM-DD'))+(moment(endvalue.value.$d).format('THH:mm:[00][Z]')) goodspayditch.value.map((item:any)=>{return item.goodsid === toRaw(formState.value).goodsid}) const prarms = { subject:toRaw(formState.value).subject, shortname:toRaw(formState.value).shortname, paymentmodel:toRaw(formState.value).paymentmodel, fullphone:toRaw(formState.value).fullphone?1:0, expireendtime:expireendtime, starttime: moment(new Date()).format('YYYY-MM-DDTHH:mm:[00][Z]'), goodsid: toRaw(formState.value).goodsid, goodspayditch:goodspayditch.value, payment:formState.value.paymentmodel == '0'?price.value*100:priceSet.value*100, uid, remark:toRaw(formState.value).remark } const data:any = await onCreateGoodsPay(prarms) if(data.state === 1){ message.success(data.message) emit('onBack') } }) .catch(err => { console.log('error', err); }); }; const disabledDate = (current:any)=>{ return current&¤t < moment().startOf("day") } const onCancel = ()=>{ radioValue = {} visible.value = false; } const onChangeRadioName = (e:any)=>{ radioValue = e } const onSet = async(index:string)=>{ const uid =getUid() let data:any ={} if (index == '1') { data = await onfindWX(uid); } else if (index == '2') { data = await onfindAli(uid); } list.value = data.data; showModal() } const popupScroll = ()=>{ console.log(1); } const onSubSearch = async(value:any)=>{ optionss.list=[] const uid = getUid(); const params = { name: value.target?'':value, page:1, size:10, uid, }; const data = await onFindbyLikeName(params); optionss.list= data.data.goods } const onSelectCheckboxValue = async(e:any,index:any)=>{ index = index+1 const uid =getUid() let data:any ={} if (index == '1') { data = await onfindWX(uid); } else if (index == '2') { data = await onfindAli(uid); } let params:any = data.data; if(goodspayditch.value[index-1]){ goodspayditch.value.splice(index-1,1) }else{ goodspayditch.value[index-1]=params[0] } } const showModal = () => { visible.value = true; }; const hideModal = () => { checkboxValue.value[radioValue.paytype-1] = optionsWithDisabled[radioValue.paytype-1].value goodspayditch.value[radioValue.paytype-1] = { appointpay: radioValue.id, goodsid: radioValue.id, optpay: radioValue.paytype, name: radioValue.name, random: '1', status: radioValue.status } listValue.value[radioValue.paytype-1] = radioValue visible.value = false; }; defineExpose({ endvalue, price, priceSet, dateFormat, visible, list, modalvalue, optionss, value1: ref<Dayjs>(), formState, onSelect, disabledDate, ...toRefs(checkboxValue), onChangeRadioName, onSet, showModal, hideModal, onSelectCheckboxValue, popupScroll, emit }); </script> <style lang="less" scoped> .page { width: 100%; .title { padding-top: 20px; text-align: left; } .pay { display: flex; flex-direction: column; .ant-radio-wrapper { height: 40px; } } } </style> <style lang="less"> .ant-checkbox-wrapper { height: 50px; span { display: flex; } } </style>