SaleInterfaceSyncForm.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div>
  3. <BasicForm @register="registerForm" ref="formRef"/>
  4. <!-- 子表单区域 -->
  5. <a-tabs v-model:activeKey="activeKey" animated @change="handleChangeTabs">
  6. <a-tab-pane tab="询价单-接口同步-子表" key="saleInterfaceItem" :forceRender="true">
  7. <JVxeTable
  8. keep-source
  9. resizable
  10. ref="saleInterfaceItem"
  11. v-if="saleInterfaceItemTable.show"
  12. :loading="saleInterfaceItemTable.loading"
  13. :columns="saleInterfaceItemTable.columns"
  14. :dataSource="saleInterfaceItemTable.dataSource"
  15. :height="340"
  16. :rowNumber="true"
  17. :rowSelection="true"
  18. :disabled="formDisabled"
  19. :toolbar="true"
  20. />
  21. </a-tab-pane>
  22. </a-tabs>
  23. <div style="width: 100%;text-align: center" v-if="!formDisabled">
  24. <a-button @click="handleSubmit" pre-icon="ant-design:check" type="primary">提 交</a-button>
  25. </div>
  26. </div>
  27. </template>
  28. <script lang="ts">
  29. import {BasicForm, useForm} from '/@/components/Form/index';
  30. import { computed, defineComponent, reactive, ref, unref } from 'vue';
  31. import {defHttp} from '/@/utils/http/axios';
  32. import { propTypes } from '/@/utils/propTypes';
  33. import { useJvxeMethod } from '/@/hooks/system/useJvxeMethods';
  34. import { VALIDATE_FAILED } from '/@/utils/common/vxeUtils';
  35. import {getBpmFormSchema,saleInterfaceItemColumns} from '../SaleInterfaceSync.data';
  36. import {saveOrUpdate,saleInterfaceItemList} from '../SaleInterfaceSync.api';
  37. export default defineComponent({
  38. name: "SaleInterfaceSyncForm",
  39. components:{
  40. BasicForm,
  41. },
  42. props:{
  43. formData: propTypes.object.def({}),
  44. formBpm: propTypes.bool.def(true),
  45. },
  46. setup(props){
  47. const [registerForm, { setFieldsValue, setProps }] = useForm({
  48. labelWidth: 150,
  49. schemas: getBpmFormSchema(props.formData),
  50. showActionButtonGroup: false,
  51. baseColProps: {span: 12}
  52. });
  53. const formDisabled = computed(()=>{
  54. if(props.formData.disabled === false){
  55. return false;
  56. }
  57. return true;
  58. });
  59. const refKeys = ref(['saleInterfaceItem', ]);
  60. const activeKey = ref('saleInterfaceItem');
  61. const saleInterfaceItem = ref();
  62. const tableRefs = {saleInterfaceItem, };
  63. const saleInterfaceItemTable = reactive({
  64. loading: false,
  65. dataSource: [],
  66. columns:saleInterfaceItemColumns,
  67. show: false
  68. })
  69. const [handleChangeTabs,handleSubmit,requestSubTableData,formRef] = useJvxeMethod(requestAddOrEdit,classifyIntoFormData,tableRefs,activeKey,refKeys,validateSubForm);
  70. function classifyIntoFormData(allValues) {
  71. let main = Object.assign({}, allValues.formValue)
  72. return {
  73. ...main, // 展开
  74. saleInterfaceItemList: allValues.tablesValue[0].tableData,
  75. }
  76. }
  77. //表单提交事件
  78. async function requestAddOrEdit(values) {
  79. await saveOrUpdate(values, true);
  80. }
  81. const queryByIdUrl = '/saleCode/saleInterfaceSync/queryById';
  82. async function initFormData(){
  83. let params = {id: props.formData.dataId};
  84. const data = await defHttp.get({url: queryByIdUrl, params});
  85. //设置表单的值
  86. await setFieldsValue({...data});
  87. requestSubTableData(saleInterfaceItemList, {id: data.id}, saleInterfaceItemTable, ()=>{
  88. saleInterfaceItemTable.show = true;
  89. });
  90. //默认是禁用
  91. await setProps({disabled: formDisabled.value})
  92. }
  93. initFormData();
  94. return {
  95. registerForm,
  96. formDisabled,
  97. formRef,
  98. handleSubmit,
  99. activeKey,
  100. handleChangeTabs,
  101. saleInterfaceItem,
  102. saleInterfaceItemTable,
  103. }
  104. }
  105. });
  106. </script>