BaseShipArchiveRelateCustomerModal.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" :height="310" @ok="handleSubmit">
  3. <BasicForm @register="registerForm" name="BaseShipArchiveRelateCustomerForm" />
  4. <!-- 子表单区域 -->
  5. <JVxeTable v-if="isUpdate"
  6. keep-source
  7. resizable
  8. :loading="demoFieldDefValSubTable.loading"
  9. :columns="demoFieldDefValSubTable.columns"
  10. :dataSource="demoFieldDefValSubTable.dataSource"
  11. :maxHeight="340"
  12. :rowNumber="false"
  13. :rowSelection="false"
  14. :toolbar="false"
  15. />
  16. </BasicModal>
  17. </template>
  18. <script lang="ts" setup>
  19. import {ref, computed, unref,reactive} from 'vue';
  20. import {BasicModal, useModalInner} from '/@/components/Modal';
  21. import {BasicForm, useForm} from '/@/components/Form/index';
  22. import {formSchema,getFIle,columns} from '../BaseShipArchiveRelateCustomer.data';
  23. import {saveOrUpdate,list} from '../BaseShipArchiveRelateCustomer.api';
  24. import { JVxeTable } from '/@/components/jeecg/JVxeTable'
  25. // Emits声明
  26. const emit = defineEmits(['register','success']);
  27. const isUpdate = ref(true);
  28. const isDetail = ref(false);
  29. const demoFieldDefValSubTable = reactive({
  30. loading: false,
  31. dataSource: [],
  32. columns:columns
  33. })
  34. //表单配置
  35. const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
  36. labelWidth: 150,
  37. schemas: formSchema,
  38. showActionButtonGroup: false,
  39. baseColProps: {span: 24}
  40. });
  41. //表单赋值
  42. const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
  43. //重置表单
  44. await resetFields();
  45. setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
  46. isUpdate.value = !!data?.isUpdate;
  47. isDetail.value = !!data?.showFooter;
  48. await list({headId:data.record.headId,status:1}).then(function (response) {
  49. // console.log(response.records);
  50. response.records.forEach(item => {
  51. data.record.name = item.name;
  52. data.record.customerId = item.customerId;
  53. data.record.startDate = item.startDate;
  54. });
  55. }).catch(function (error) {
  56. console.log(error);
  57. });
  58. // console.log("==============================="+data.record.headId);
  59. console.log("==============================="+unref(isUpdate));
  60. if (unref(isUpdate)) {
  61. getFIle("1")
  62. await list({headId:data.record.headId}).then(function (response) {
  63. // console.log("=========================");
  64. // console.log(response.records);
  65. // response.records.forEach(item => {
  66. // console.log(item);
  67. // });
  68. // console.log(response.records);
  69. demoFieldDefValSubTable.dataSource = response.records;
  70. }).catch(function (error) {
  71. console.log(error);
  72. });
  73. }else{
  74. getFIle();
  75. }
  76. //表单赋值
  77. await setFieldsValue({
  78. ...data.record,
  79. });
  80. // 隐藏底部时禁用整个表单
  81. setProps({ disabled: !data?.showFooter })
  82. });
  83. //设置标题
  84. const title = computed(() => (!unref(isUpdate) ? '关联客户' : !unref(isDetail) ? '历史客户' : '关联客户'));
  85. //表单提交事件
  86. async function handleSubmit(v) {
  87. try {
  88. let values = await validate();
  89. setModalProps({confirmLoading: true});
  90. //提交表单
  91. await saveOrUpdate(values, isUpdate.value);
  92. //关闭弹窗
  93. closeModal();
  94. //刷新列表
  95. emit('success');
  96. } catch ({ errorFields }) {
  97. if (errorFields) {
  98. const firstField = errorFields[0];
  99. if (firstField) {
  100. scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
  101. }
  102. }
  103. return Promise.reject(errorFields);
  104. } finally {
  105. setModalProps({confirmLoading: false});
  106. }
  107. }
  108. </script>
  109. <style lang="less" scoped>
  110. /** 时间和数字输入框样式 */
  111. :deep(.ant-input-number) {
  112. width: 100%;
  113. }
  114. :deep(.ant-calendar-picker) {
  115. width: 100%;
  116. }
  117. </style>