BaseShipArchiveAccessoriesModal.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit" :maskClosable="false">
  3. <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button>
  4. <a-button style="margin-left:5px" type="primary" @click="handleEdit"> 编辑(edit)</a-button>
  5. <a-button style="margin-left:5px" type="primary" @click="handleDel"> 删除(delete)</a-button>
  6. <a-button style="margin-left:5px" type="primary" @click="handleGet" > 刷新(refresh)</a-button>
  7. <JVxeTable
  8. ref="tableRef"
  9. keep-source
  10. resizable
  11. :loading="demoFieldDefValSubTable.loading"
  12. :columns="demoFieldDefValSubTable.columns"
  13. :dataSource="demoFieldDefValSubTable.dataSource"
  14. :maxHeight="340"
  15. :rowNumber="false"
  16. :rowSelection="true"
  17. :toolbar="false"
  18. style="margin-top:1%"
  19. />
  20. </BasicModal>
  21. <BaseShipArchiveAccessoriesModal2 @register="accessoriesAdd2" @success="handleSuccess"></BaseShipArchiveAccessoriesModal2>
  22. </template>
  23. <script lang="ts" setup>
  24. import {ref, computed, unref,reactive} from 'vue';
  25. import {BasicModal, useModalInner} from '/@/components/Modal';
  26. import {BasicForm, useForm} from '/@/components/Form/index';
  27. import {formSchema,columns} from '../BaseShipArchiveAccessories.data';
  28. import {saveOrUpdate,list,deleteOne} from '../BaseShipArchiveAccessories.api';
  29. import BaseShipArchiveAccessoriesModal2 from './BaseShipArchiveAccessoriesModal2.vue'
  30. import {useModal} from '/@/components/Modal';
  31. import { JVxeTable } from '/@/components/jeecg/JVxeTable'
  32. import { useMessage } from '/@/hooks/web/useMessage';
  33. const { createMessage, createConfirm, createSuccessModal, createInfoModal, createErrorModal, createWarningModal, notification } = useMessage();
  34. const tableRef = ref<JVxeTableInstance>()
  35. const [accessoriesAdd2,{openModal: openModal2}] = useModal();
  36. const demoFieldDefValSubTable = reactive({
  37. loading: false,
  38. dataSource: [],
  39. columns:columns
  40. })
  41. // Emits声明
  42. const emit = defineEmits(['register','success']);
  43. var isShow = "";
  44. const isUpdate = ref(true);
  45. const isDetail = ref(false);
  46. //表单配置
  47. const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
  48. labelWidth: 150,
  49. schemas: formSchema,
  50. showActionButtonGroup: false,
  51. baseColProps: {span: 24}
  52. });
  53. async function handleSave(record: EditRecordRow) {
  54. console.log("=========================");
  55. }
  56. let headId = "";
  57. /**
  58. * 新增事件
  59. */
  60. function handleAdd(record: Recordable) {
  61. record.headId=headId;
  62. openModal2(true, {
  63. record,
  64. isUpdate: false,
  65. showFooter: true,
  66. });
  67. }
  68. function handleEdit(record: Recordable) {
  69. const values = tableRef.value.getSelectionData()
  70. if (values.length != 1) {
  71. createMessage.warn('请选择一条数据');
  72. return;
  73. }
  74. record = values[0];
  75. openModal2(true, {
  76. record,
  77. isUpdate: true,
  78. showFooter: true,
  79. });
  80. }
  81. function handleDel(record: Recordable) {
  82. const values = tableRef.value.getSelectionData()
  83. if (values.length != 1) {
  84. createMessage.warn('请选择一条数据');
  85. return;
  86. }
  87. createConfirm({
  88. title: '提示',
  89. content: `确定要删除吗?`,
  90. iconType: 'warning',
  91. okText:'确定',
  92. onOk: () => new Promise((resolve,rejected)=>{
  93. record = values[0];
  94. deleteOne({id: record.id}, handleGet);
  95. resolve();
  96. }),
  97. onCancel: () => {console.log('取消了')}
  98. });
  99. }
  100. //表单赋值
  101. const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
  102. //重置表单
  103. // await resetFields();
  104. // setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
  105. // isUpdate.value = !!data?.isUpdate;
  106. // isDetail.value = !!data?.showFooter;
  107. // if (unref(isUpdate)) {
  108. // //表单赋值
  109. // await setFieldsValue({
  110. // ...data.record,
  111. // });
  112. // }
  113. // isShow = true;
  114. headId = data.record.headId
  115. await list({headId:data.record.headId}).then(function (response) {
  116. // response.records.forEach(item => {
  117. // console.log(item);
  118. // });
  119. // console.log(response.records);
  120. demoFieldDefValSubTable.dataSource = response.records;
  121. }).catch(function (error) {
  122. console.log(error);
  123. });
  124. // 隐藏底部时禁用整个表单
  125. // setProps({ disabled: !data?.showFooter })
  126. });
  127. async function handleGet(){
  128. await list({headId:headId}).then(function (response) {
  129. demoFieldDefValSubTable.dataSource = response.records;
  130. }).catch(function (error) {
  131. console.log(error);
  132. });
  133. }
  134. //设置标题
  135. const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '配件明细(accessories details)' : '编辑'));
  136. //表单提交事件
  137. async function handleSubmit(v) {
  138. try {
  139. let values = await validate();
  140. setModalProps({confirmLoading: true});
  141. //提交表单
  142. await saveOrUpdate(values, isUpdate.value);
  143. //关闭弹窗
  144. closeModal();
  145. //刷新列表
  146. emit('success');
  147. } catch ({ errorFields }) {
  148. if (errorFields) {
  149. const firstField = errorFields[0];
  150. if (firstField) {
  151. scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
  152. }
  153. }
  154. return Promise.reject(errorFields);
  155. } finally {
  156. setModalProps({confirmLoading: false});
  157. }
  158. }
  159. </script>
  160. <style lang="less" scoped>
  161. /** 时间和数字输入框样式 */
  162. :deep(.ant-input-number) {
  163. width: 100%;
  164. }
  165. :deep(.ant-calendar-picker) {
  166. width: 100%;
  167. }
  168. </style>