riku
2023-12-21 3d7bf6dff3d1e2f12c4ecd0120ee110348ccdf49
src/components/form/FYForm.vue
@@ -26,7 +26,7 @@
 * 可传入初始表单数据formInfo,表单校验规则rules
 * 实现submit和cancel触发函数
 */
import { defineProps, defineEmits, reactive, ref, watch, computed } from 'vue';
import { defineProps, defineEmits, reactive, ref, watch, computed, defineExpose } from 'vue';
import { useFormConfirm } from '@/composables/formConfirm';
const props = defineProps({
@@ -62,15 +62,29 @@
  _locations: [
    {
      required: true,
      message: '省/市/区/镇不能为空',
      // message: '行政区划不能为空',
      trigger: 'change',
      validator: (rule, value, callback) => {
        if (!value) {
          callback(new Error('Please input the age'));
        } else {
          callback()
        }
      }
    }
  ],
  _scenetype: [
    {
      required: true,
      message: '场景类型不能为空',
      trigger: 'change'
      trigger: 'change',
      validator: (rule, value, callback) => {
        if (!value) {
          callback(new Error('Please input the age'));
        } else {
          callback()
        }
      }
    }
  ]
});
@@ -92,13 +106,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);
      }
    );
  });
}
@@ -107,9 +126,9 @@
  emit('cancel');
}
const allRules = computed(()=>{
  return {...baseRules, ...props.rules}
})
const allRules = computed(() => {
  return { ...baseRules, ...props.rules };
});
//监听表单初始数据传入
watch(
@@ -117,7 +136,7 @@
  (nValue) => {
    formObj.value = nValue;
  },
  { deep: false, immediate: true }
  { deep: true, immediate: true }
);
//监听表单重置功能触发
@@ -134,6 +153,8 @@
watch(edit, (nValue) => {
  emit('update:isEdit', nValue);
});
defineExpose({ onSubmit, onCancel, onReset });
</script>
<style scoped></style>