<!-- 收货地址的新增/编辑 --> <template> <!-- {{ru}} --> <s-layout :title="state.model.id ? '编辑发票抬头' : '新增发票抬头'"> <uni-forms ref="invoiceFormRef" v-model="state.model" :rules="rules" validateTrigger="bind" labelWidth="160" labelAlign="left" border :labelStyle="{ fontWeight: 'bold' }"> <view class="bg-white form-box ss-p-x-30"> <uni-forms-item name="invoiceType" label="发票类型"> <radio-group @change="invoiceType"> <radio value="1" :checked="state.model.invoiceType == 1" color="var(--ui-BG-Main)" class="radio ss-m-r-30" style="transform: scale(0.9)">纸质普票 </radio> <radio value="2" :checked="state.model.invoiceType == 2" color="var(--ui-BG-Main)" class="radio" style="transform: scale(0.9)">专用发票</radio> </radio-group> </uni-forms-item> <!-- 当为专用发票时,不用选择抬头类型 --> <uni-forms-item name="invoiceTitleType" label="抬头类型" class="form-item" v-if="state.model.invoiceType == 1"> <radio-group class="uni-flex uni-row radio-group" @change="invoiceTitleType"> <radio value="1" :checked="state.model.invoiceTitleType == 1" color="var(--ui-BG-Main)" class="radio ss-m-r-30" style="transform: scale(0.9)">个人 </radio> <radio value="2" :checked="state.model.invoiceTitleType == 2" color="var(--ui-BG-Main)" style="transform: scale(0.9)" class="radio">单位</radio> </radio-group> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="发票抬头" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" placeholder="请输入发票抬头" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <template v-if="state.model.invoiceTitleType == 2"> <uni-forms-item name="taxIDNumber" label="单位税号" class="form-item"> <uni-easyinput v-model="state.model.taxIDNumber" type="number" placeholder="请输入单位税号" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="注册地址" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="注册电话" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="开户银行" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="银行账号" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> </template> <template v-if="state.model.invoiceType == 2"> <uni-forms-item name="taxIDNumber" label="单位税号" class="form-item"> <uni-easyinput v-model="state.model.taxIDNumber" type="number" placeholder="请输入单位税号" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="注册地址" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="注册电话" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="开户银行" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> <uni-forms-item name="invoiceTitle" label="银行账号" class="form-item"> <uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填" :inputBorder="false" placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"> </uni-easyinput> </uni-forms-item> </template> </view> <view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box" v-if="state.model.invoiceType == 2"> <view class="default-box-title" :class="{ shake: currentProtocol }"> <label class="radio ss-flex ss-col-center" @tap="onChange"> <radio :checked="state.protocol" color="var(--ui-BG-Main)" style="transform: scale(0.8)" @tap.stop="onChange" /> <view class="agreement-text ss-flex ss-col-center ss-m-l-8"> 我已阅读并同意 <view class="tcp-text" @tap.stop="onProtocol('专用发票抬头确认书')"> 《专用发票抬头确认书》 </view> </view> </label> </view> </view> </uni-forms> <su-fixed bottom :opacity="false" bg="" placeholder :noFixed="false" :index="10"> <view class="footer-box ss-flex-col ss-row-between ss-p-20"> <view class="ss-m-b-20"> <button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">保存</button> </view> <button v-if="state.model.id" class="ss-reset-button cancel-btn" @tap="onDelete"> 删除 </button> </view> </su-fixed> </s-layout> </template> <script setup> import { ref, reactive, unref } from 'vue'; import sheep from '@/sheep'; import { onLoad } from '@dcloudio/uni-app'; import _ from 'lodash'; import { mobile } from '@/sheep/validate/form'; import AreaApi from '@/sheep/api/system/area'; import AddressApi from '@/sheep/api/member/address'; import $helper from '@/sheep/helper'; const invoiceFormRef = ref(null); const currentProtocol = ref(false) const state = reactive({ showRegion: false, model: { invoiceType: 1, invoiceTitleType: 1, invoiceTitle: '', taxIDNumber: '' }, rules: {}, protocol: false, }); // 勾选协议 function onChange() { state.protocol = !state.protocol; } // 查看协议 function onProtocol(title) { sheep.$router.go('/pages/public/richtext', { title, }); } const rules = { invoiceType: { rules: [{ required: true, errorMessage: '请选择发票类型' }] }, invoiceTitleType: { rules: [{ required: true, errorMessage: '请选择抬头类型' }] }, invoiceTitle: { rules: [{ required: true, errorMessage: '请输入发票抬头' }] }, taxIDNumber: { rules: [{ required: true, errorMessage: '请输入单位税号' }] }, }; const invoiceType = (e) => { state.model.invoiceType = e.detail.value state.model.invoiceTitleType = 1 } const invoiceTitleType = (e) => { state.model.invoiceTitleType = e.detail.value } // 保存收货地址 const onSave = async () => { // 参数校验 const validate = await unref(invoiceFormRef) .validate() .catch((error) => { console.log('error: ', error); }); if (!validate) { return; } if(!state.protocol){ currentProtocol.value = true setTimeout(function(){ currentProtocol.value = false },500) return } // 提交请求 const formData = { ...state.model } const { code } = state.model.id > 0 ? await AddressApi.updateAddress(formData) : await AddressApi.createAddress(formData); if (code === 0) { sheep.$router.back(); } }; // 删除收货地址 const onDelete = () => { uni.showModal({ title: '提示', content: '确认删除此收货地址吗?', success: async function(res) { if (!res.confirm) { return; } const { code } = await AddressApi.deleteAddress(state.model.id); if (code === 0) { sheep.$router.back(); } }, }); }; onLoad(async (options) => { // // 情况一:基于 id 获得收件地址 // if (options.id) { // let { // code, // data // } = await AddressApi.getAddress(options.id); // if (code !== 0) { // return; // } // // console.log(data) // state.model = data; // } }); </script> <style lang="scss" scoped> .shake { animation: shake 0.05s linear 4 alternate; } @keyframes shake { from { transform: translateX(-10rpx); } to { transform: translateX(10rpx); } } :deep() { .uni-forms-item__label .label-text { font-size: 28rpx !important; color: #333333 !important; line-height: normal !important; } .uni-forms-item__content { display: flex; align-items: center; } .uni-easyinput__content-input { font-size: 28rpx !important; color: #333333 !important; line-height: normal !important; padding-left: 0 !important; } .uni-easyinput__content-textarea { font-size: 28rpx !important; color: #333333 !important; line-height: normal !important; margin-top: 8rpx !important; } .uni-icons { font-size: 40rpx !important; } .is-textarea-icon { margin-top: 22rpx; } .is-disabled { color: #333333; } } .default-box { width: 100%; box-sizing: border-box; height: 100rpx; .default-box-title { font-size: 28rpx; color: #333333; line-height: normal; } } .tcp-text { color: var(--ui-BG-Main); } .footer-box { .save-btn { width: 710rpx; height: 80rpx; border-radius: 40rpx; background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient)); color: $white; } .cancel-btn { width: 710rpx; height: 80rpx; border-radius: 40rpx; background: var(--ui-BG); } } </style>