edit.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <script lang="ts" setup>
  2. import { computed, ref, unref } from 'vue';
  3. import { alert, useVbenModal } from '@vben/common-ui';
  4. import { useFormOptions, useVbenForm } from '#/adapter';
  5. import { JobTermApi } from '#/api';
  6. import { jobScriptCode, useSchema } from '../data.config';
  7. defineOptions({
  8. name: 'RoleEdit',
  9. });
  10. const emit = defineEmits(['success']);
  11. const modelRef = ref<Record<string, any>>({});
  12. const isUpdate = ref(true);
  13. const [Form, { validate, setValues, getValues, updateSchema }] = useVbenForm(
  14. useFormOptions({
  15. wrapperClass: 'grid-cols-2',
  16. schema: useSchema(),
  17. }),
  18. );
  19. const [Modal, { close, setState, getData, lock, unlock }] = useVbenModal({
  20. fullscreenButton: false,
  21. draggable: true,
  22. closeOnClickModal: false,
  23. onCancel() {
  24. close();
  25. },
  26. onConfirm: async () => {
  27. try {
  28. const { valid } = await validate();
  29. if (!valid) return;
  30. const values = await getValues();
  31. if (values.jobCreateType === 2) {
  32. values.scriptCode = '';
  33. const httpJob = Object.assign({}, values.httpJob, {
  34. ClientName: 'HttpJob',
  35. EnsureSuccessStatusCode: true,
  36. Timeout: 100_000,
  37. });
  38. delete values.httpJob;
  39. values.properties = JSON.stringify({
  40. HttpJob: JSON.stringify(httpJob),
  41. });
  42. }
  43. lock();
  44. const postParams = unref(modelRef);
  45. Object.assign(postParams, values);
  46. await (unref(isUpdate)
  47. ? JobTermApi.editDetail(postParams as JobTermApi.RecordItem)
  48. : JobTermApi.addDetail(postParams as JobTermApi.BasicRecordItem));
  49. alert('操作成功');
  50. emit('success');
  51. close();
  52. } finally {
  53. unlock();
  54. }
  55. },
  56. onOpenChange: async (isOpen: boolean) => {
  57. if (isOpen) {
  58. setState({ loading: true });
  59. const data = getData<Record<string, any>>();
  60. isUpdate.value = !!data.isUpdate;
  61. modelRef.value = { ...data.baseData };
  62. if (unref(isUpdate)) {
  63. const entity = await JobTermApi.getDetail(data.baseData.id);
  64. if (entity.jobCreateType === 2) {
  65. entity.httpJob = JSON.parse(JSON.parse(entity.properties).HttpJob);
  66. }
  67. modelRef.value = { ...entity };
  68. setValues(entity);
  69. updateSchema([
  70. { fieldName: 'jobId', componentProps: { disabled: true } },
  71. { fieldName: 'jobCreateType', componentProps: { disabled: true } },
  72. ]);
  73. } else {
  74. setValues({ scriptCode: jobScriptCode });
  75. updateSchema([
  76. { fieldName: 'jobId', componentProps: { disabled: false } },
  77. { fieldName: 'jobCreateType', componentProps: { disabled: false } },
  78. ]);
  79. }
  80. setState({ loading: false });
  81. }
  82. },
  83. });
  84. const getTitle = computed(() =>
  85. unref(isUpdate) ? '编辑任务调试' : '新增任务调试',
  86. );
  87. </script>
  88. <template>
  89. <Modal class="w-[1000px]" :title="getTitle">
  90. <Form />
  91. </Modal>
  92. </template>