Files
mp-10584/src/views/glt/gltTicketTemplate/components/gltTicketTemplateEdit.vue
赵忠林 846e5ba791 refactor(gltTicketTemplate): 优化表单项标签显示
- 简化了购买量计入选项的标签文本
- 保留了原有的占位符提示信息
- 提升了界面显示的简洁性
2026-02-04 00:58:13 +08:00

265 lines
7.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 编辑弹窗 -->
<template>
<ele-modal
:width="900"
:visible="visible"
:maskClosable="false"
:maxable="maxable"
:title="isUpdate ? '编辑水票' : '添加水票'"
:body-style="{ paddingBottom: '28px' }"
@update:visible="updateVisible"
@ok="save"
>
<a-form
ref="formRef"
:model="form"
:rules="rules"
:label-col="styleResponsive ? { md: 5, sm: 5, xs: 24 } : { flex: '90px' }"
:wrapper-col="
styleResponsive ? { md: 19, sm: 19, xs: 24 } : { flex: '1' }
"
>
<a-form-item label="关联商品ID" name="goodsId">
<a-input
allow-clear
placeholder="请输入关联商品ID"
v-model:value="form.goodsId"
/>
</a-form-item>
<a-form-item label="名称" name="name">
<a-input
allow-clear
placeholder="请输入名称"
v-model:value="form.name"
/>
</a-form-item>
<a-form-item label="启用" name="enabled">
<a-input
allow-clear
placeholder="请输入启用"
v-model:value="form.enabled"
/>
</a-form-item>
<a-form-item label="单位名称" name="unitName">
<a-input
allow-clear
placeholder="请输入单位名称"
v-model:value="form.unitName"
/>
</a-form-item>
<a-form-item label="最小购买数量" name="minBuyQty">
<a-input
allow-clear
placeholder="请输入最小购买数量"
v-model:value="form.minBuyQty"
/>
</a-form-item>
<a-form-item label="起始发送数量" name="startSendQty">
<a-input
allow-clear
placeholder="请输入起始发送数量"
v-model:value="form.startSendQty"
/>
</a-form-item>
<a-form-item label="买赠" name="giftMultiplier">
<a-input
allow-clear
placeholder="请输入买赠买1送4 => gift_multiplier=4"
v-model:value="form.giftMultiplier"
/>
</a-form-item>
<a-form-item label="购买量也计入" name="includeBuyQty">
<a-input
allow-clear
placeholder="请输入是否把购买量也计入套票总量(默认仅计入赠送量)"
v-model:value="form.includeBuyQty"
/>
</a-form-item>
<a-form-item label="每期释放数量" name="monthlyReleaseQty">
<a-input
allow-clear
placeholder="请输入每期释放数量默认每月释放10"
v-model:value="form.monthlyReleaseQty"
/>
</a-form-item>
<a-form-item label="总共释放多少期" name="releasePeriods">
<a-input
allow-clear
placeholder="请输入总共释放多少期(若配置>0则按期数平均分摊"
v-model:value="form.releasePeriods"
/>
</a-form-item>
<a-form-item label="首期释放时机" name="firstReleaseMode">
<a-input
allow-clear
placeholder="请输入首期释放时机0=支付成功当刻1=下个月同日"
v-model:value="form.firstReleaseMode"
/>
</a-form-item>
<a-form-item label="备注" name="comments">
<a-textarea
:rows="4"
:maxlength="200"
placeholder="请输入描述"
v-model:value="form.comments"
/>
</a-form-item>
</a-form>
</ele-modal>
</template>
<script lang="ts" setup>
import { ref, reactive, watch } from 'vue';
import { Form, message } from 'ant-design-vue';
import { assignObject, uuid } from 'ele-admin-pro';
import { addGltTicketTemplate, updateGltTicketTemplate } from '@/api/glt/gltTicketTemplate';
import { GltTicketTemplate } from '@/api/glt/gltTicketTemplate/model';
import { useThemeStore } from '@/store/modules/theme';
import { storeToRefs } from 'pinia';
import { ItemType } from 'ele-admin-pro/es/ele-image-upload/types';
import { FormInstance } from 'ant-design-vue/es/form';
import { FileRecord } from '@/api/system/file/model';
// 是否是修改
const isUpdate = ref(false);
const useForm = Form.useForm;
// 是否开启响应式布局
const themeStore = useThemeStore();
const { styleResponsive } = storeToRefs(themeStore);
const props = defineProps<{
// 弹窗是否打开
visible: boolean;
// 修改回显的数据
data?: GltTicketTemplate | null;
}>();
const emit = defineEmits<{
(e: 'done'): void;
(e: 'update:visible', visible: boolean): void;
}>();
// 提交状态
const loading = ref(false);
// 是否显示最大化切换按钮
const maxable = ref(true);
// 表格选中数据
const formRef = ref<FormInstance | null>(null);
const images = ref<ItemType[]>([]);
// 用户信息
const form = reactive<GltTicketTemplate>({
id: undefined,
goodsId: undefined,
name: undefined,
enabled: undefined,
unitName: undefined,
minBuyQty: undefined,
startSendQty: undefined,
giftMultiplier: undefined,
includeBuyQty: undefined,
monthlyReleaseQty: undefined,
releasePeriods: undefined,
firstReleaseMode: undefined,
userId: undefined,
sortNumber: undefined,
comments: undefined,
status: undefined,
deleted: undefined,
tenantId: undefined,
createTime: undefined,
updateTime: undefined,
gltTicketTemplateId: undefined,
gltTicketTemplateName: '',
status: 0,
comments: '',
sortNumber: 100
});
/* 更新visible */
const updateVisible = (value: boolean) => {
emit('update:visible', value);
};
// 表单验证规则
const rules = reactive({
gltTicketTemplateName: [
{
required: true,
type: 'string',
message: '请填写水票名称',
trigger: 'blur'
}
]
});
const chooseImage = (data: FileRecord) => {
images.value.push({
uid: data.id,
url: data.path,
status: 'done'
});
form.image = data.path;
};
const onDeleteItem = (index: number) => {
images.value.splice(index, 1);
form.image = '';
};
const { resetFields } = useForm(form, rules);
/* 保存编辑 */
const save = () => {
if (!formRef.value) {
return;
}
formRef.value
.validate()
.then(() => {
loading.value = true;
const formData = {
...form
};
const saveOrUpdate = isUpdate.value ? updateGltTicketTemplate : addGltTicketTemplate;
saveOrUpdate(formData)
.then((msg) => {
loading.value = false;
message.success(msg);
updateVisible(false);
emit('done');
})
.catch((e) => {
loading.value = false;
message.error(e.message);
});
})
.catch(() => {});
};
watch(
() => props.visible,
(visible) => {
if (visible) {
images.value = [];
if (props.data) {
assignObject(form, props.data);
if(props.data.image){
images.value.push({
uid: uuid(),
url: props.data.image,
status: 'done'
})
}
isUpdate.value = true;
} else {
isUpdate.value = false;
}
} else {
resetFields();
}
},
{ immediate: true }
);
</script>