gaoluyang
2 天以前 025e46e11cb2962fd7692adfa401333758cc779b
src/pages/sales/invoiceLedger/index.vue
@@ -84,7 +84,7 @@
                  </view>
               </view>
               <view class="action-buttons">
                  <van-button
                  <up-button
                     type="primary"
                     size="small"
                     class="action-btn"
@@ -92,9 +92,9 @@
                     @click="openEdit(item)"
                  >
                     编辑
                  </van-button>
                  <van-button
                     type="danger"
                  </up-button>
                  <up-button
                     type="error"
                     size="small"
                     plain
                     class="action-btn"
@@ -102,9 +102,8 @@
                     @click="handleDelete(item)"
                  >
                     删除
                  </van-button>
                  <van-button
                     type="default"
                  </up-button>
                  <up-button
                     size="small"
                     plain
                     class="action-btn"
@@ -112,8 +111,8 @@
                     @click="openFileActions(item.commonFiles || [])"
                  >
                     查看附件
                  </van-button>
                  <van-button
                  </up-button>
                  <up-button
                     type="primary"
                     size="small"
                     class="action-btn"
@@ -122,7 +121,7 @@
                     @click="openUpload(item)"
                  >
                     上传
                  </van-button>
                  </up-button>
               </view>
            </view>
         </view>
@@ -132,94 +131,113 @@
      </view>
      <!-- 筛选弹窗 -->
      <van-popup v-model:show="showFilter" position="bottom" round>
      <up-popup v-model="showFilter" mode="bottom" round><up-transition>
         <view class="filter-popup">
            <van-cell-group title="筛选条件" inset>
               <van-field
            <up-cell-group title="筛选条件" inset>
               <up-input
                  label="开票日期"
                  readonly
                  placeholder="请选择日期范围"
                  @click="showInvoiceRange = true"
                  :placeholder="invoiceRangeLabel || '请选择日期范围'"
                  v-model="invoiceRangeLabel"
               />
               <van-field
               <up-input
                  label="录入日期"
                  readonly
                  @click="showCreateDatePicker = true"
                  :placeholder="searchForm.createTimeStart || '请选择录入日期'"
                  v-model="searchForm.createTimeStart"
               />
               <view class="switch-row">
                  <text class="switch-label">不显示有发票行</text>
                  <van-switch v-model="searchForm.status" size="20" />
                  <up-switch v-model="searchForm.status" size="20" />
               </view>
            </van-cell-group>
            </up-cell-group>
            <view class="filter-actions">
               <van-button @click="resetFilter">重置</van-button>
               <van-button type="primary" @click="confirmFilter">确定</van-button>
               <up-button @click="resetFilter">重置</up-button>
               <up-button type="primary" @click="confirmFilter">确定</up-button>
            </view>
         </view>
      </van-popup>
      </up-transition></up-popup>
      <!-- 日历:开票日期范围 -->
      <van-popup v-model:show="showInvoiceRange" position="bottom">
         <van-calendar
            title="选择开票日期范围"
      <up-popup v-model="showInvoiceRange" mode="bottom"><up-transition>
         <up-datetime-picker
            mode="date"
            type="range"
            color="#2979ff"
            title="选择开票日期范围"
            @confirm="onInvoiceRangeConfirm"
            @cancel="showInvoiceRange = false"
         />
      </van-popup>
      </up-transition></up-popup>
      <!-- 日期:录入日期 -->
      <van-popup v-model:show="showCreateDatePicker" position="bottom">
         <van-date-picker
      <up-popup v-model="showCreateDatePicker" mode="bottom"><up-transition>
         <up-datetime-picker
            mode="date"
            type="selector"
            v-model="currentCreateDate"
            title="选择录入日期"
            @confirm="onCreateDateConfirm"
            @cancel="showCreateDatePicker = false"
         />
      </van-popup>
      </up-transition></up-popup>
      
      <!-- 单行上传弹窗(无表单) -->
      <van-popup v-model:show="showUpload" position="bottom" round>
      <up-popup v-model="showUpload" mode="bottom" round><up-transition>
         <view class="upload-container">
            <van-cell-group title="上传附件(仅支持 pdf,最大10MB,最多10个)" inset>
               <van-uploader
                  accept="*"
            <up-cell-group title="上传附件(仅支持 pdf,最大10MB,最多10个)" inset>
               <up-upload
                  accept="pdf"
                  multiple
                  :max-count="10"
                  :after-read="afterReadRowUpload"
                  :before-read="beforeReadPdf"
               />
                  :maxCount="10"
                  :afterRead="afterReadRowUpload"
                  :beforeRead="beforeReadPdf"
               >
                  <up-button type="primary">点击上传</up-button>
               </up-upload>
               <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>
                     <van-button size="mini" type="danger" plain @click="removeUploaded(idx)">移除</van-button>
                     <up-button size="mini" type="error" plain @click="removeUploaded(idx)">移除</up-button>
                  </view>
               </view>
            </van-cell-group>
            </up-cell-group>
            <view class="filter-actions">
               <van-button @click="showUpload = false">取消</van-button>
               <van-button type="primary" @click="confirmUpload">确认</van-button>
               <up-button @click="showUpload = false">取消</up-button>
               <up-button type="primary" @click="confirmUpload">确认</up-button>
            </view>
         </view>
      </van-popup>
      </up-transition></up-popup>
      <!-- 附件列表选择 -->
      <van-action-sheet v-model:show="showFileSheet" :actions="fileActions" cancel-text="取消" close-on-click-action @select="onSelectFile" />
      <up-action-sheet v-model="showFileSheet" :actions="fileActions" cancel-text="取消" close-on-click-action @select="onSelectFile">
         <view class="up-action-sheet__cancel" @click="showFileSheet = false">
            取消
         </view>
      </up-action-sheet>
   </view>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import dayjs from 'dayjs'
import PageHeader from '@/components/PageHeader.vue'
const showToast = (message) => {
   uni.showToast({
      title: message,
      icon: 'none'
   })
}
const showLoadingToast = (message) => {
   uni.showLoading({
      title: message,
      mask: true
   })
}
const closeToast = () => {
   uni.hideLoading()
}
import useUserStore from '@/store/modules/user'
import { getToken } from '@/utils/auth'
@@ -282,7 +300,7 @@
const getList = async () => {
   try {
      showLoadingToast({ message: '加载中...' })
      showLoadingToast('加载中...')
      const { invoiceDate, ...rest } = searchForm
      const res = await registrationProductPage({ ...rest, ...page })
      // 兼容不同返回结构
@@ -313,19 +331,10 @@
   showFilter.value = false
   getList()
}
const onInvoiceRangeConfirm = (e) => {
   // e 为 [start, end] 的 Date 对象或字符串,uni-app 下 Vant Calendar 返回时间戳数组
const onInvoiceRangeConfirm = ({ selectedValues }) => {
   try {
      let start, end
      if (Array.isArray(e)) {
         const [s, ed] = e
         start = dayjs(s).format('YYYY-MM-DD')
         end = dayjs(ed).format('YYYY-MM-DD')
      } else if (e && e.detail && Array.isArray(e.detail)) {
         const [s, ed] = e.detail
         start = dayjs(s).format('YYYY-MM-DD')
         end = dayjs(ed).format('YYYY-MM-DD')
      }
      const start = dayjs(selectedValues[0]).format('YYYY-MM-DD')
      const end = dayjs(selectedValues[1]).format('YYYY-MM-DD')
      searchForm.invoiceDateStart = start
      searchForm.invoiceDateEnd = end
      invoiceRangeLabel.value = `${start} 至 ${end}`
@@ -362,7 +371,7 @@
      success: async (res) => {
         if (res.confirm) {
            try {
               showLoadingToast({ message: '处理中...' })
               showLoadingToast('处理中...')
               await delInvoiceLedgerByRegProductId(row.id)
               closeToast()
               showToast('删除成功')
@@ -385,7 +394,7 @@
const confirmUpload = async () => {
   try {
      const payload = { fileList: fileList.value, id: currentId.value }
      showLoadingToast({ message: '提交中...' })
      showLoadingToast('提交中...')
      await commitFile(payload)
      closeToast()
      showToast('提交成功')
@@ -420,7 +429,7 @@
const uploadSingleFile = async (fileObj) => {
   return new Promise((resolve, reject) => {
      showLoadingToast({ message: '正在上传...' })
      showLoadingToast('正在上传...')
      uni.uploadFile({
         url: config.baseUrl + '/invoiceLedger/uploadFile',
         filePath: fileObj.url || fileObj.file?.path || fileObj.tempFilePath,
@@ -496,7 +505,7 @@
   try {
      const item = currentFilesToOpen[action.index]
      if (!item || !item.url) return
      showLoadingToast({ message: '下载中...' })
      showLoadingToast('下载中...')
      uni.downloadFile({
         url: item.url,
         success: (res) => {