riku
2023-12-26 4253da96a80b36aa66a1322b0379ec624e01101c
src/components/form/FYForm.vue
@@ -3,7 +3,7 @@
    :inline="false"
    :model="formObj"
    ref="formRef"
    :rules="rules"
    :rules="allRules"
    label-position="right"
    label-width="150px"
  >
@@ -26,12 +26,17 @@
 * 可传入初始表单数据formInfo,表单校验规则rules
 * 实现submit和cancel触发函数
 */
import { defineProps, defineEmits, reactive, ref, watch } from 'vue';
import { defineProps, defineEmits, reactive, ref, watch, computed, defineExpose } from 'vue';
import { useFormConfirm } from '@/composables/formConfirm';
const props = defineProps({
  //表单基本信息
  formInfo: Object,
  formInfo: {
    type: Object,
    default: () => {
      return {};
    }
  },
  //表单检验规则
  rules: Object,
  showButtons: {
@@ -43,7 +48,7 @@
  //重置按钮是否可用
  useReset: Boolean,
  //触发重置
  reset: Boolean,
  doClear: Boolean,
  //通知编辑状态
  isEdit: Boolean
});
@@ -51,8 +56,46 @@
//触发函数,提交和取消
const emit = defineEmits(['submit', 'cancel', 'update:isEdit']);
const baseRules = reactive({
  _usertype: [
    {
      required: true,
      message: '用户类型不能为空',
      trigger: 'change'
    }
  ],
  _locations: [
    {
      required: true,
      message: '行政区划不能为空',
      trigger: 'change'
      // validator: (rule, value, callback) => {
      //   if (!value) {
      //     callback(new Error('Please input the age'));
      //   } else {
      //     callback()
      //   }
      // }
    }
  ],
  _scenetype: [
    {
      required: true,
      message: '场景类型不能为空',
      trigger: 'change'
      // validator: (rule, value, callback) => {
      //   if (!value) {
      //     callback(new Error('Please input the age'));
      //   } else {
      //     callback()
      //   }
      // }
    }
  ]
});
//表单操作函数
const { formObj, formRef, edit, onSubmit, onCancel, onReset, formProps } = useFormConfirm({
const { formObj, formRef, edit, onSubmit, onCancel, onReset, clear } = useFormConfirm({
  submit: {
    do: submit
  },
@@ -68,13 +111,18 @@
function submit() {
  loading.value = true;
  return new Promise((resolve, reject) => {
    emit('submit', formObj, () => {
      loading.value = false;
      resolve();
    },(err)=>{
      loading.value = false;
      reject(err);
    });
    emit(
      'submit',
      formObj,
      () => {
        loading.value = false;
        resolve();
      },
      (err) => {
        loading.value = false;
        reject(err);
      }
    );
  });
}
@@ -83,21 +131,25 @@
  emit('cancel');
}
const allRules = computed(() => {
  return { ...baseRules, ...props.rules };
});
//监听表单初始数据传入
watch(
  () => props.formInfo,
  (nValue) => {
    formObj.value = nValue;
  },
  { deep: false, immediate: false }
  { deep: false, immediate: true }
);
//监听表单重置功能触发
watch(
  () => props.reset,
  () => props.doClear,
  (nValue) => {
    if (nValue) {
      onReset();
      clear();
    }
  }
);
@@ -106,6 +158,8 @@
watch(edit, (nValue) => {
  emit('update:isEdit', nValue);
});
defineExpose({ formObj, onSubmit, onCancel, onReset });
</script>
<style scoped></style>