financial-web/src/views/financial-user/bill-user/bill-dialog.vue

99 lines
3.1 KiB
Vue
Raw Normal View History

2024-11-11 12:04:24 +08:00
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { FormInstance } from 'element-plus';
2024-11-13 13:22:00 +08:00
import { rules } from '@/views/financial-user/bill-user/utils/columns';
import { FormProps } from '@/views/financial-user/bill-user/utils/types';
2024-11-11 12:04:24 +08:00
import { $t } from '@/plugins/i18n';
import { incomeOrExpend } from '@/enums/baseConstant';
2024-11-14 12:01:08 +08:00
import { useBillUserStore } from '@/store/financialUser/billUser';
2024-11-13 13:22:00 +08:00
import { onSearch } from '@/views/financial-user/bill-user/utils/hooks';
import { useCategoryUserStore } from '@/store/financialUser/categoryUser';
2024-11-11 12:04:24 +08:00
const props = withDefaults(defineProps<FormProps>(), {
formInline: () => ({
// 类型1 - 收入,-1 - 支出
type: undefined,
// 金额
amount: undefined,
// 描述
description: undefined,
// 交易日期
transactionDate: undefined,
// 类别id
categoryId: undefined,
}),
});
const formRef = ref<FormInstance>();
const form = ref(props.formInline);
2024-11-14 12:01:08 +08:00
const billStore = useBillUserStore();
2024-11-11 12:04:24 +08:00
const categoryUserStore = useCategoryUserStore();
/** 提交表单 */
const onSubmit = () => {
formRef.value.validate(async (valid: any) => {
if (!valid) return;
const result = await billStore.addBill(form.value);
if (!result) return;
// 添加成功
form.value.amount = undefined;
await onSearch();
});
};
onMounted(() => {
categoryUserStore.getCategoryUserAllList();
});
defineExpose({ formRef });
</script>
<template>
<el-form ref="formRef" :model="form" :rules="rules" label-width="auto">
<!-- 类型1 - 收入-1 - 支出 -->
<el-form-item :label="$t('type')" prop="type">
<el-select v-model="form.type" :placeholder="$t('select') + $t('type')" clearable filterable>
<el-option v-for="(item, index) in incomeOrExpend" :key="index" :label="item.label" :navigationBar="false" :value="item.value" />
</el-select>
</el-form-item>
<!-- 交易日期 -->
<el-form-item :label="$t('transactionDate')" prop="transactionDate">
<el-date-picker
v-model="form.transactionDate"
:placeholder="$t('input') + $t('transactionDate')"
format="YYYY/MM/DD HH:mm:ss"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<!-- 类别id -->
<el-form-item :label="$t('category')" prop="categoryId">
<el-select v-model="form.categoryId" :placeholder="$t('select') + $t('category')" clearable filterable>
<el-option v-for="item in categoryUserStore.allCategoryList" :key="item.id" :label="item.categoryName" :navigationBar="false" :value="item.id" />
</el-select>
</el-form-item>
<!-- 描述 -->
<el-form-item :label="$t('description')" prop="description">
<el-input
v-model="form.description"
:autosize="{ minRows: 2, maxRows: 4 }"
:placeholder="$t('input') + $t('description')"
autocomplete="off"
maxlength="256"
show-word-limit
type="textarea"
@keydown.enter="onSubmit"
/>
</el-form-item>
<!-- 金额 -->
<el-form-item :label="$t('amount')" prop="amount">
<el-input v-model="form.amount" :min="0" :placeholder="$t('input') + $t('amount')" :step="0.01" autocomplete="off" type="number" @keydown.enter="onSubmit" />
</el-form-item>
</el-form>
</template>