editorModal.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @cancel="resetFields"
  5. @register="register"
  6. title="编辑场景"
  7. @ok="handleOk"
  8. >
  9. <div class="pt-3px pr-3px">
  10. <BasicForm @register="registerForm">
  11. <template #text="{ model, field }">
  12. {{ model[field] }}
  13. </template>
  14. </BasicForm>
  15. </div>
  16. </BasicModal>
  17. </template>
  18. <script lang="ts">
  19. import { defineComponent, ref, unref } from 'vue';
  20. import { UpdateApi } from '/@/api/scene/list';
  21. import { uploadLiveApi } from '/@/api/scene/live';
  22. import { BasicModal, useModalInner } from '/@/components/Modal';
  23. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  24. import { useI18n } from '/@/hooks/web/useI18n';
  25. import { useMessage } from '/@/hooks/web/useMessage';
  26. const { t } = useI18n();
  27. export default defineComponent({
  28. components: { BasicModal, BasicForm },
  29. props: {
  30. userData: { type: Object },
  31. },
  32. emits: ['reload', 'register'],
  33. setup(_, context) {
  34. const modelRef = ref({
  35. toUserId: 0,
  36. userId: 0,
  37. });
  38. const options = ref([]);
  39. const { createMessage } = useMessage();
  40. const schemas: FormSchema[] = [
  41. {
  42. field: 'sceneNum',
  43. component: 'Input',
  44. label: 'sceneNum',
  45. show: false,
  46. },
  47. {
  48. field: 'sceneName',
  49. component: 'Input',
  50. label: '场景名称',
  51. slot: 'text',
  52. colProps: {
  53. span: 22,
  54. },
  55. },
  56. {
  57. field: 'picList',
  58. label: '场景封面',
  59. component: 'Upload',
  60. required: true,
  61. itemProps: {
  62. validateTrigger: 'blur',
  63. },
  64. componentProps: {
  65. api: uploadLiveApi,
  66. maxSize: 5,
  67. emptyHidePreview: true,
  68. maxNumber: 1,
  69. accept: ['jpg', 'jpeg', 'gif', 'png'],
  70. afterFetch: function (data) {
  71. Reflect.set(data, 'url', data.message.url);
  72. return data;
  73. },
  74. },
  75. colProps: {
  76. span: 20,
  77. },
  78. },
  79. {
  80. field: 'isShow',
  81. component: 'RadioGroup',
  82. label: '是否显示在小程序',
  83. required: true,
  84. defaultValue: 0,
  85. componentProps: {
  86. options: [
  87. {
  88. label: '是',
  89. value: 1,
  90. key: 1,
  91. },
  92. {
  93. label: '否',
  94. value: 0,
  95. key: 0,
  96. },
  97. ],
  98. },
  99. },
  100. ];
  101. const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
  102. labelWidth: 150,
  103. schemas,
  104. showActionButtonGroup: false,
  105. actionColOptions: {
  106. span: 20,
  107. },
  108. });
  109. const [register, { closeModal }] = useModalInner((data) => {
  110. data && onDataReceive(data);
  111. });
  112. function onDataReceive(data) {
  113. data = unref(data);
  114. console.log('onDataReceive', data);
  115. setFieldsValue({
  116. ...data,
  117. sceneNum: data.num,
  118. picList: [data.appListPicUrl],
  119. });
  120. // 方式1;
  121. }
  122. async function handleOk() {
  123. let data = await validate();
  124. console.log('data', data);
  125. let res = await UpdateApi({
  126. ...data,
  127. appListPicUrl: data.picList[0],
  128. });
  129. context && context.emit('reload', res);
  130. createMessage.success(t('common.optSuccess'));
  131. closeModal();
  132. resetFields();
  133. }
  134. return { options, register, registerForm, model: modelRef, handleOk, resetFields };
  135. },
  136. });
  137. </script>