| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | <!-- 产品档案 --><template>  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" width="550px" @ok="handleSubmit">    <BasicForm @register="registerForm" @submit="handleSubmit" style="margin-top: 26px" />  </BasicModal></template><script lang="ts" setup>  import { ref, computed, unref,onMounted } from 'vue';  //引入依赖  import { useForm, BasicForm, FormSchema } from '/@/components/Form';  import { BasicModal, useModalInner } from '/@/components/Modal';  import { saveOrUpdateDict } from '../api/productCassification.api';  import { defHttp } from '/@/utils/http/axios';  const emit = defineEmits(['register', 'success']); //定义emit  const isUpdate = ref(true); //判断编辑还是新增  const rowId = ref('');//获取主键  let classOption = ref([])  //获取表单数据  const [registerModal, { closeModal, setModalProps }] = useModalInner(    async (data) => {      // 重置表单      await resetFields();      setModalProps({ confirmLoading: false});      isUpdate.value = !!data?.isUpdate;           getOptions(isUpdate,data.record)      if (unref(isUpdate)) {      rowId.value = data.record.id;      //表单赋值      await setFieldsValue({        ...data.record,      });    }    }  )  function getOptions(isUpdate,data) {    defHttp        .get({ url: 'baseCode/baseProductClass/list'}, { isTransformResponse: false })        .then((res) => {            if (res.success) {              var option = []              res.result.records.forEach(element => {                  var obj = {                    label: element.name,                    value: element.id                  };                  option.push(obj)              });                classOption.value = []               if(unref(isUpdate)){  //编辑                var row = JSON.parse(JSON.stringify(data))                option.map(item=>{                  if(item.label!=row.parentId){                    classOption.value.push(item)                  }                })              }else{                classOption.value = option              }            }        })        .finally(() => {            // loading.value = false;        });  }  //获取title  const getTitle = computed(() => {    return (!unref(isUpdate) ? '新增产品分类(add)' : '编辑产品分类(edit)');  })  //自定义表单字段  const formSchemas: FormSchema[] = [    {      //标题名称      label: '上级分类(parent)',      //字段      field: 'parentId',      //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType      component: 'JSelectInput',      componentProps:{        options: classOption,      },    },    {      label: '编码(code)',      field: 'code',      component: 'Input',      // required: true,      componentProps:{        AutoComplete:'off',        placeholder:'请输入,为空则自动生成'      },    },    {      label: '名称(name)',      field: 'name',      component: 'Input',      required: true,      componentProps:{        AutoComplete:'off'      },    },    {      label: '毛利率(gross margin)',      field: 'grossMargin',      component: 'Input',      componentProps:{        AutoComplete:'off',        addonAfter:"%",      },    },    {      label: '税率(tax rate)',      field: 'taxRate',      component: 'Input',      componentProps:{        AutoComplete:'off',        addonAfter:"%",      },    },    {      label: '',      field: 'id',      component: 'Input',      show: false    },  ];  /**   * BasicForm绑定注册;   * useForm 是整个框架的核心用于表单渲染,里边封装了很多公共方法;   * 支持(schemas: 渲染表单列,autoSubmitOnEnter:回车提交,submitButtonOptions:自定义按钮文本和图标等方法);   * 平台通过此封装,简化了代码,支持自定义扩展;   */  const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({    //注册表单列    schemas: formSchemas,    //回车提交    autoSubmitOnEnter: true,    //不显示重置按钮    showResetButton: false,    showSubmitButton:false,    labelCol: { style: { width: '150px'} },    labelAlign:'right'    //查询列占比 24代表一行 取值范围 0-24  });  /**   * 点击提交按钮的value值   * @param values   */  //表单提交事件  async function handleSubmit() {    try {      let values = await validate();      setModalProps({ confirmLoading: true });      //提交表单      await saveOrUpdateDict(values, isUpdate.value);            //关闭弹窗      closeModal();      //刷新列表      emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } });    } finally {      setModalProps({ confirmLoading: false });    }  }  </script>
 |