<template>
|
<view class="sales-account">
|
<PageHeader :title="pageTitle" @back="goBack" />
|
<view class="search-section">
|
<up-form :model="form" :rules="rules" ref="formRef">
|
<up-form-item label="收入日期" prop="incomeDate">
|
<uni-datetime-picker type="date" v-model="form.incomeDate" />
|
</up-form-item>
|
<up-form-item label="收入类型" prop="incomeType">
|
<up-picker :columns="[incomeTypes]" key-name="label" v-model="incomeTypeIndex" @confirm="onIncomeTypeConfirm" />
|
</up-form-item>
|
<up-form-item label="客户名称" prop="customerName">
|
<up-input v-model="form.customerName" placeholder="请输入" />
|
</up-form-item>
|
<up-form-item label="收入金额" prop="incomeMoney">
|
<up-input type="number" v-model="form.incomeMoney" placeholder="请输入" />
|
</up-form-item>
|
<up-form-item label="收入描述" prop="incomeDescribed">
|
<up-input v-model="form.incomeDescribed" placeholder="请输入" />
|
</up-form-item>
|
<up-form-item label="收款方式" prop="incomeMethod">
|
<up-picker :columns="[paymentMethods]" key-name="label" v-model="incomeMethodIndex" @confirm="onMethodConfirm" />
|
</up-form-item>
|
<up-form-item label="发票号码" prop="invoiceNumber">
|
<up-input v-model="form.invoiceNumber" placeholder="请输入" />
|
</up-form-item>
|
<up-form-item label="备注" prop="note">
|
<up-textarea v-model="form.note" placeholder="请输入" autoHeight />
|
</up-form-item>
|
</up-form>
|
<view class="actions">
|
<u-button type="primary" @click="submitForm">保存</u-button>
|
</view>
|
</view>
|
</view>
|
</template>
|
|
<script setup>
|
import { ref, reactive, computed } from "vue";
|
import { onLoad } from "@dcloudio/uni-app";
|
import { useDict } from "@/utils/dict";
|
import { add, update, getAccountIncome } from "@/api/financialManagement/revenueManagement";
|
|
const operationType = ref("add");
|
const id = ref(undefined);
|
|
const { payment_methods, income_types } = useDict("payment_methods", "income_types");
|
const paymentMethods = ref([]);
|
const incomeTypes = ref([]);
|
const incomeTypeIndex = ref([0]);
|
const incomeMethodIndex = ref([0]);
|
|
const formRef = ref();
|
const form = reactive({
|
incomeDate: undefined,
|
incomeType: undefined,
|
customerName: "",
|
incomeMoney: undefined,
|
incomeDescribed: "",
|
incomeMethod: undefined,
|
invoiceNumber: "",
|
note: "",
|
});
|
|
const rules = {
|
incomeDate: [{ required: true, message: "请选择", trigger: "change" }],
|
incomeType: [{ required: true, message: "请选择", trigger: "change" }],
|
customerName: [{ required: true, message: "请输入", trigger: "blur" }],
|
incomeMoney: [{ required: true, message: "请输入", trigger: "blur" }],
|
incomeDescribed: [{ required: true, message: "请输入", trigger: "blur" }],
|
incomeMethod: [{ required: true, message: "请选择", trigger: "change" }],
|
};
|
|
const pageTitle = computed(() => (operationType.value === "edit" ? "编辑收入" : "新增收入"));
|
|
const onIncomeTypeConfirm = (e) => {
|
const item = incomeTypes.value[e.value[0]];
|
if (item) form.incomeType = item.value;
|
};
|
const onMethodConfirm = (e) => {
|
const item = paymentMethods.value[e.value[0]];
|
if (item) form.incomeMethod = item.value;
|
};
|
|
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 }));
|
};
|
|
const submitForm = () => {
|
formRef.value?.validate(async (valid) => {
|
if (!valid) return;
|
const payload = { ...form };
|
const res = operationType.value === "edit" ? await update({ id: id.value, ...payload }) : await add(payload);
|
if (res?.code === 200) {
|
uni.navigateBack();
|
}
|
});
|
};
|
|
const goBack = () => {
|
uni.navigateBack();
|
};
|
|
onLoad(async (query) => {
|
syncDict();
|
operationType.value = query?.type || "add";
|
if (query?.id) {
|
id.value = query.id;
|
const res = await getAccountIncome(id.value);
|
const data = res?.data ?? res;
|
Object.assign(form, data || {});
|
}
|
});
|
</script>
|
|
<style scoped lang="scss">
|
@import "@/styles/sales-common.scss";
|
.actions { margin-top: 16px; }
|
</style>
|