| | |
| | | <view class="search-section"> |
| | | <view class="search-bar"> |
| | | <view class="search-input"> |
| | | <uni-datetime-picker type="daterange" v-model="filters.entryDate" @change="onDateChange" /> |
| | | <up-input class="search-text" placeholder="请输入客户名称搜索" v-model="searchForm.customerName" clearable /> |
| | | </view> |
| | | <view class="search-input"> |
| | | <up-input readonly placeholder="收款方式" v-model="incomeMethodLabel" @click="methodPickerShow = true" /> |
| | | </view> |
| | | <view class="filter-button" @click="getList"> |
| | | <up-icon name="search" size="24" color="#999" /> |
| | | <view class="filter-button" @click="handleQuery"> |
| | | <up-icon name="search" size="24" color="#999"></up-icon> |
| | | </view> |
| | | </view> |
| | | <view class="actions"> |
| | | <u-button type="primary" size="small" @click="goAdd">新增</u-button> |
| | | </view> |
| | | </view> |
| | | <view class="ledger-list" v-if="list.length>0"> |
| | | <view class="ledger-item" v-for="item in list" :key="item.id"> |
| | |
| | | <up-divider></up-divider> |
| | | <view class="item-details"> |
| | | <view class="detail-row"><text class="detail-label">收入日期</text><text class="detail-value">{{ item.incomeDate || '--' }}</text></view> |
| | | <view class="detail-row"><text class="detail-label">收入类型</text><text class="detail-value">{{ incomeTypeText(item.incomeType) || '--' }}</text></view> |
| | | <view class="detail-row"><text class="detail-label">收入类型</text><text class="detail-value">{{ incomeTypeText(item.incomeMethod) || '其他收入' }}</text></view> |
| | | <view class="detail-row"><text class="detail-label">收入金额(元)</text><text class="detail-value highlight">{{ fmtAmount(item.incomeMoney) }}</text></view> |
| | | <view class="detail-row"><text class="detail-label">发票号码</text><text class="detail-value">{{ item.invoiceNumber || '--' }}</text></view> |
| | | <view class="detail-row"><text class="detail-label">备注</text><text class="detail-value">{{ item.note || '--' }}</text></view> |
| | | </view> |
| | | <view class="card-actions"> |
| | | <u-button size="small" @click="goEdit(item)" :disabled="!!item.businessId">编辑</u-button> |
| | | <u-button size="small" type="error" @click="confirmDelete(item)" :disabled="!!item.businessId">删除</u-button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | const incomeTypes = ref([]); |
| | | const methodPickerShow = ref(false); |
| | | const incomeMethodLabel = ref(""); |
| | | const searchForm = reactive({ customerName: null,current:1,size:100 }); |
| | | |
| | | const syncDict = () => { |
| | | paymentMethods.value = (payment_methods?.value || []).map(i => ({ label: i.label, value: i.value })); |
| | | incomeTypes.value = (income_types?.value || []).filter(i=>i.value!=3).map(i => ({ label: i.label, value: i.value })); |
| | | incomeTypes.value = (income_types?.value || []).map(i => ({ label: i.label, value: i.value })); |
| | | }; |
| | | |
| | | const getList = () => { |
| | | listPage({ incomeMethod: filters.incomeMethod, entryDateStart: filters.entryDateStart, entryDateEnd: filters.entryDateEnd, current: 1, size: 100 }) |
| | | listPage({ ...searchForm }) |
| | | .then(res => { |
| | | const records = res?.data?.records ?? res?.records ?? []; |
| | | list.value = records; |
| | | }); |
| | | }; |
| | | |
| | | const onDateChange = (val) => { |
| | | if (val && val.length === 2) { |
| | | filters.entryDateStart = val[0]; |
| | | filters.entryDateEnd = val[1]; |
| | | } else { |
| | | filters.entryDateStart = undefined; |
| | | filters.entryDateEnd = undefined; |
| | | } |
| | | const handleQuery = () => { |
| | | searchForm.current = 1; |
| | | getList(); |
| | | }; |
| | | |
| | | const onSelectMethod = (e) => { |