mirror of
https://gitee.com/bootx/dax-pay-ui.git
synced 2025-09-06 20:28:00 +00:00
132 lines
3.8 KiB
Vue
132 lines
3.8 KiB
Vue
<template>
|
|
<basic-modal
|
|
v-bind="$attrs"
|
|
:loading="confirmLoading"
|
|
:width="modalWidth"
|
|
:title="title"
|
|
:visible="visible"
|
|
:mask-closable="showable"
|
|
@cancel="handleCancel"
|
|
>
|
|
<a-form class="small-from-item" ref="formRef" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
<a-form-item label="主键" :hidden="true">
|
|
<a-input v-model:value="form.id" :disabled="showable" />
|
|
</a-form-item>
|
|
<a-form-item label="编码" name="code">
|
|
<a-input v-model:value="form.code" :disabled="showable" placeholder="请输入编码" />
|
|
</a-form-item>
|
|
<a-form-item label="名称" name="name">
|
|
<a-input v-model:value="form.name" :disabled="showable" placeholder="请输入名称" />
|
|
</a-form-item>
|
|
<a-form-item label="分类标签" name="groupTag">
|
|
<a-input v-model:value="form.groupTag" :disabled="showable" placeholder="请输入分类标签" />
|
|
</a-form-item>
|
|
<a-form-item label="备注" name="remark">
|
|
<a-input v-model:value="form.remark" :disabled="showable" placeholder="请输入备注" />
|
|
</a-form-item>
|
|
</a-form>
|
|
<template #footer>
|
|
<a-space>
|
|
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
|
<a-button v-if="!showable" key="forward" :loading="confirmLoading" type="primary" @click="handleOk">保存</a-button>
|
|
</a-space>
|
|
</template>
|
|
</basic-modal>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { nextTick, reactive } from 'vue'
|
|
import { $ref } from 'vue/macros'
|
|
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
|
import { add, get, update, existsByCode, existsByCodeNotId, Dict } from './Dict.api'
|
|
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
|
import { BasicModal } from '/@/components/Modal'
|
|
import { useValidate } from '/@/hooks/bootx/useValidate'
|
|
|
|
const {
|
|
initFormModel,
|
|
handleCancel,
|
|
search,
|
|
labelCol,
|
|
wrapperCol,
|
|
modalWidth,
|
|
title,
|
|
confirmLoading,
|
|
visible,
|
|
editable,
|
|
showable,
|
|
formEditType,
|
|
} = useFormEdit()
|
|
const { existsByServer } = useValidate()
|
|
// 表单
|
|
const formRef = $ref<FormInstance>()
|
|
let form = $ref({
|
|
id: null,
|
|
code: '',
|
|
name: '',
|
|
groupTag: '',
|
|
remark: '',
|
|
} as Dict)
|
|
// 校验
|
|
const rules = reactive({
|
|
code: [
|
|
{ required: true, message: '请输入字典编码', trigger: ['blur', 'change'] },
|
|
{ validator: validateCode, trigger: 'blur' },
|
|
],
|
|
name: [{ required: true, message: '请输入字典名称', trigger: ['blur', 'change'] }],
|
|
} as Record<string, Rule[]>)
|
|
// 事件
|
|
const emits = defineEmits(['ok'])
|
|
// 入口
|
|
function init(id, editType: FormEditType) {
|
|
initFormModel(id, editType)
|
|
resetForm()
|
|
getInfo(id, editType)
|
|
}
|
|
// 获取信息
|
|
function getInfo(id, editType: FormEditType) {
|
|
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
|
confirmLoading.value = true
|
|
get(id).then(({ data }) => {
|
|
form = data
|
|
confirmLoading.value = false
|
|
})
|
|
} else {
|
|
confirmLoading.value = false
|
|
}
|
|
}
|
|
// 保存
|
|
function handleOk() {
|
|
formRef.validate().then(async () => {
|
|
confirmLoading.value = true
|
|
if (formEditType.value === FormEditType.Add) {
|
|
await add(form)
|
|
} else if (formEditType.value === FormEditType.Edit) {
|
|
await update(form)
|
|
}
|
|
confirmLoading.value = false
|
|
handleCancel()
|
|
emits('ok')
|
|
})
|
|
}
|
|
|
|
// 重置表单的校验
|
|
function resetForm() {
|
|
nextTick(() => {
|
|
formRef.resetFields()
|
|
})
|
|
}
|
|
|
|
// 校验编码重复
|
|
async function validateCode() {
|
|
const { code, id } = form
|
|
return existsByServer(code, id, formEditType, existsByCode, existsByCodeNotId)
|
|
}
|
|
defineExpose({
|
|
init,
|
|
})
|
|
</script>
|
|
|
|
<style lang="less" scoped></style>
|