detailModal.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="fileFlow.title"
  6. @visible-change="handleVisibleChange"
  7. @cancel="resetFields"
  8. @ok="handleSubmit"
  9. :min-height="250"
  10. >
  11. <div class="pt-2px pr-3px">
  12. <BasicForm @register="registerForm" :model="model">
  13. <template #text="{ model, field }">
  14. {{ model[field] }}
  15. </template>
  16. </BasicForm>
  17. </div>
  18. </BasicModal>
  19. </template>
  20. <script lang="ts">
  21. import { defineComponent, ref, nextTick, onMounted, reactive } from 'vue';
  22. import { BasicModal, useModalInner } from '/@/components/Modal';
  23. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  24. import { useMessage } from '/@/hooks/web/useMessage';
  25. import { fileaddOrUpdate, uploadApi, getByKey } from '/@/api/media';
  26. import { useI18n } from '/@/hooks/web/useI18n';
  27. const { t } = useI18n();
  28. export default defineComponent({
  29. components: { BasicModal, BasicForm },
  30. props: {
  31. userData: { type: Object },
  32. },
  33. emits: ['update', 'register'],
  34. setup(props, { emit }) {
  35. const modelRef = ref({});
  36. const fileFlow = reactive({
  37. file: null,
  38. title: '编辑',
  39. });
  40. const { createMessage } = useMessage();
  41. const schemas: FormSchema[] = [
  42. {
  43. field: 'id',
  44. component: 'Input',
  45. show: false,
  46. label: 'id',
  47. required: false,
  48. },
  49. {
  50. field: 'uploadId',
  51. component: 'Input',
  52. show: false,
  53. label: 'id',
  54. required: false,
  55. },
  56. {
  57. field: 'name',
  58. component: 'Input',
  59. // defaultValue: '场景标题',
  60. label: '名称',
  61. colProps: {
  62. span: 18,
  63. },
  64. required: true,
  65. },
  66. {
  67. field: 'dictId',
  68. label: '分组',
  69. component: 'ApiSelect',
  70. required: true,
  71. componentProps: {
  72. api: getByKey,
  73. style: { maxWidth: '250px' },
  74. labelField: 'dictName',
  75. listHeight: 150,
  76. valueField: 'id',
  77. params: {
  78. type: 1,
  79. },
  80. },
  81. colProps: {
  82. xl: 18,
  83. xxl: 18,
  84. },
  85. },
  86. ];
  87. const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
  88. labelWidth: 120,
  89. schemas,
  90. showActionButtonGroup: false,
  91. actionColOptions: {
  92. span: 24,
  93. },
  94. });
  95. onMounted(() => {});
  96. let addListFunc = () => {};
  97. const [register, { closeModal }] = useModalInner((data) => {
  98. console.log(data);
  99. data && onDataReceive(data);
  100. });
  101. function onDataReceive(data) {
  102. modelRef.value = data;
  103. resetFields();
  104. setFieldsValue(data);
  105. }
  106. const handleSubmit = async () => {
  107. try {
  108. const params = await validate();
  109. const res = await fileaddOrUpdate(params);
  110. console.log('res', res);
  111. closeModal();
  112. resetFields();
  113. createMessage.success('操作成功。');
  114. emit('update');
  115. } catch (error) {
  116. console.log('not passing', error);
  117. }
  118. };
  119. function handleVisibleChange(v) {
  120. // console.log(v);
  121. // v && props.userData && nextTick(() => onDataReceive(props.userData));
  122. }
  123. return {
  124. register,
  125. schemas,
  126. registerForm,
  127. model: modelRef,
  128. fileFlow,
  129. handleVisibleChange,
  130. handleSubmit,
  131. addListFunc,
  132. resetFields,
  133. t,
  134. };
  135. },
  136. });
  137. </script>