| | |
| | | <template> |
| | | <view class="invoice-detail"> |
| | | <view class="account-detail"> |
| | | <!-- 使用通用页面头部组件 --> |
| | | <PageHeader title="发票详情" @back="goBack" /> |
| | | |
| | | <!-- 表单内容 --> |
| | | <u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right"> |
| | | <u-cell-group title="基本信息"> |
| | | <u-form-item label="销售合同号" border-bottom> |
| | | <u-input v-model="form.salesContractNo" readonly /> |
| | | </u-form-item> |
| | | <u-form-item label="客户名称" border-bottom> |
| | | <u-input v-model="form.customerName" readonly /> |
| | | </u-form-item> |
| | | <u-form-item label="发票号" prop="invoiceNo" required border-bottom> |
| | | <u-input v-model="form.invoiceNo" placeholder="请输入" /> |
| | | </u-form-item> |
| | | <u-form-item label="发票金额(元)" prop="invoiceTotal" required border-bottom> |
| | | <u-input v-model="form.invoiceTotal" type="number" placeholder="请输入" /> |
| | | </u-form-item> |
| | | <u-form-item label="开票人" border-bottom> |
| | | <u-input v-model="form.invoicePerson" readonly /> |
| | | </u-form-item> |
| | | <u-form-item label="开票日期" prop="invoiceDate" required border-bottom> |
| | | <u-input v-model="form.invoiceDate" readonly placeholder="请选择" @click="showInvoiceDatePicker = true" /> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | |
| | | <u-cell-group title="附件材料(仅支持 pdf)"> |
| | | <u-upload |
| | | <PageHeader title="编辑开票台账" @back="goBack" /> |
| | | |
| | | <van-form @submit="submitForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center"> |
| | | <van-cell-group title="基本信息" inset> |
| | | <van-field v-model="form.salesContractNo" label="销售合同号" readonly /> |
| | | <van-field v-model="form.customerName" label="客户名称" readonly /> |
| | | <van-field v-model="form.invoiceNo" label="发票号" placeholder="请输入" required :rules="[{ required: true, message: '请输入发票号' }]" /> |
| | | <van-field v-model="form.invoiceTotal" label="发票金额(元)" type="number" placeholder="请输入" required :rules="[{ required: true, message: '请输入发票金额' }]" /> |
| | | <view class="tip-text" v-if="form.taxInclusiveTotalPrice">合同总额:{{ formatAmount(form.taxInclusiveTotalPrice) }} 元</view> |
| | | <van-field v-model="form.invoicePerson" label="开票人" readonly /> |
| | | <van-field v-model="form.invoiceDate" label="开票日期" readonly placeholder="请选择" @click="showInvoiceDatePicker = true" required :rules="[{ required: true, message: '请选择开票日期' }]" /> |
| | | </van-cell-group> |
| | | |
| | | <van-cell-group title="附件材料(仅支持 pdf)" inset> |
| | | <van-uploader |
| | | accept=".pdf" |
| | | multiple |
| | | :afterRead="afterReadUpload" |
| | | :beforeRead="beforeReadPdf" |
| | | :after-read="afterReadUpload" |
| | | :before-read="beforeReadPdf" |
| | | > |
| | | <u-button class="upload-btn" type="primary"> |
| | | <u-icon name="plus" size="14" /> |
| | | 上传文件 |
| | | </u-button> |
| | | </u-upload> |
| | | <van-button class="upload-btn" icon="plus" type="primary" block>上传文件</van-button> |
| | | </van-uploader> |
| | | <view class="uploaded-list" v-if="fileList.length"> |
| | | <view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx"> |
| | | <text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text> |
| | | <u-button size="mini" type="error" plain @click="removeUploaded(idx)">移除</u-button> |
| | | <van-button size="mini" type="danger" plain @click="removeUploaded(idx)">移除</van-button> |
| | | </view> |
| | | </view> |
| | | </u-cell-group> |
| | | |
| | | <!-- 提交按钮 --> |
| | | <view class="footer-btns"> |
| | | <u-button class="cancel-btn" @click="goBack">取消</u-button> |
| | | <u-button class="save-btn" type="primary" @click="submitForm">保存</u-button> |
| | | </view> |
| | | </u-form> |
| | | </van-cell-group> |
| | | |
| | | <!-- 开票日期选择器 --> |
| | | <u-popup v-model="showInvoiceDatePicker" mode="bottom"> |
| | | <u-datetime-picker |
| | | v-model="invoiceDateValue" |
| | | <view class="footer-btns"> |
| | | <van-button class="cancel-btn" @click="goBack">取消</van-button> |
| | | <van-button class="save-btn" native-type="submit" form-type="submit">保存</van-button> |
| | | </view> |
| | | </van-form> |
| | | |
| | | <van-popup v-model:show="showInvoiceDatePicker" position="bottom"> |
| | | <van-date-picker |
| | | v-model="currentInvoiceDate" |
| | | title="选择开票日期" |
| | | @confirm="onInvoiceDateConfirm" |
| | | @cancel="showInvoiceDatePicker = false" |
| | | /> |
| | | </u-popup> |
| | | </van-popup> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | // 替换 Vant 的 toast 方法 |
| | | // import { showToast, showLoadingToast, closeToast } from 'vant' |
| | | |
| | | // 替换 toast 方法 |
| | | const showToast = (message) => { |
| | | uni.showToast({ |
| | | title: message, |
| | | icon: 'none' |
| | | }) |
| | | } |
| | | |
| | | const showLoadingToast = (message) => { |
| | | uni.showLoading({ |
| | | title: message || '加载中...' |
| | | }) |
| | | } |
| | | |
| | | const closeToast = () => { |
| | | uni.hideLoading() |
| | | } |
| | | |
| | | import { ref, onMounted } from 'vue' |
| | | import { showToast, showLoadingToast, closeToast } from 'vant' |
| | | import dayjs from 'dayjs' |
| | | import useUserStore from '@/store/modules/user' |
| | | import { getToken } from '@/utils/auth' |