addCategoryModal.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <!-- bannerUrl: ""
  2. iconUrl: ""
  3. imgUrl: ""
  4. isShow: "0"
  5. level: "L1"
  6. name: "test"
  7. type: 0
  8. wapBannerUrl: "https://4dkk.4dage.com/shop/huafa/20220302/23135195983e96.png?x-oss-process=image/resize,m_fixed,w_100,h_100" -->
  9. <template>
  10. <BasicModal v-bind="$attrs" @register="register" title="新 增" @ok="handleOk">
  11. <div class="pt-3px pr-3px">
  12. <BasicForm @register="registerForm" />
  13. </div>
  14. </BasicModal>
  15. </template>
  16. <script lang="ts">
  17. import { defineComponent } from 'vue';
  18. import { categoryApi, uploadBannerApi, addCategoryApi } from '/@/api/product/category';
  19. import { TreeNode } from '/@/utils/treeUtils';
  20. import { BasicModal, useModalInner } from '/@/components/Modal';
  21. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  22. import { useMessage } from '/@/hooks/web/useMessage';
  23. const isLevel2 = (type: string) => type === 'L2';
  24. const schemas: FormSchema[] = [
  25. {
  26. field: 'name',
  27. component: 'Input',
  28. label: '分类名称',
  29. colProps: {
  30. span: 24,
  31. },
  32. required: true,
  33. },
  34. {
  35. field: 'level',
  36. component: 'RadioGroup',
  37. label: '级别',
  38. defaultValue: 'L1',
  39. colProps: {
  40. span: 24,
  41. },
  42. componentProps: {
  43. options: [
  44. {
  45. label: '一级分类',
  46. value: 'L1',
  47. },
  48. {
  49. label: '二级分类',
  50. value: 'L2',
  51. },
  52. ],
  53. },
  54. },
  55. {
  56. field: 'parentId',
  57. component: 'ApiSelect',
  58. label: '上级分类',
  59. ifShow: ({ values }) => isLevel2(values.level),
  60. colProps: {
  61. span: 18,
  62. },
  63. componentProps: {
  64. api: async function (params) {
  65. console.log('params', params);
  66. const res = (await categoryApi(params)) as any as TreeNode[];
  67. // const treeData = makeTree(res);
  68. return res.filter((i) => i.level === 'L1');
  69. },
  70. labelField: 'name',
  71. valueField: 'id',
  72. },
  73. },
  74. {
  75. field: 'isShow',
  76. component: 'RadioGroup',
  77. label: '是否显示',
  78. defaultValue: '1',
  79. colProps: {
  80. span: 24,
  81. },
  82. componentProps: {
  83. options: [
  84. {
  85. label: '显示',
  86. value: '1',
  87. },
  88. {
  89. label: '不显示',
  90. value: '0',
  91. },
  92. ],
  93. },
  94. },
  95. {
  96. field: 'sortOrder',
  97. component: 'InputNumber',
  98. label: '排序',
  99. defaultValue: 1,
  100. colProps: {
  101. span: 24,
  102. },
  103. componentProps: {
  104. min: 0,
  105. },
  106. },
  107. {
  108. field: 'wapBannerUrl',
  109. component: 'Upload',
  110. label: '手机banner',
  111. show: false,
  112. rules: [{ required: true, message: '请选择上传文件' }],
  113. componentProps: {
  114. api: uploadBannerApi,
  115. maxNumber: 1,
  116. maxSize: 5,
  117. afterFetch: function (data) {
  118. Reflect.set(data, 'url', data.message.url);
  119. return data;
  120. },
  121. },
  122. required: true,
  123. },
  124. ];
  125. export default defineComponent({
  126. components: { BasicModal, BasicForm },
  127. props: {
  128. userData: { type: Object },
  129. },
  130. emits: ['update', 'register'],
  131. setup(_, { emit }) {
  132. const { createMessage } = useMessage();
  133. const [registerForm, { validate, getFieldsValue, resetFields }] = useForm({
  134. labelWidth: 120,
  135. schemas,
  136. showActionButtonGroup: false,
  137. actionColOptions: {
  138. span: 24,
  139. },
  140. });
  141. const [register, { closeModal }] = useModalInner((data) => {
  142. data && onDataReceive(data);
  143. });
  144. function onDataReceive(data) {
  145. console.log('Data Received', data);
  146. }
  147. async function handleOk() {
  148. try {
  149. const values = await validate();
  150. console.log('values', values);
  151. if (values) {
  152. let data = getFieldsValue();
  153. console.log('data', data);
  154. await addCategoryApi({
  155. level: data.level,
  156. isShow: data.isShow,
  157. name: data.name,
  158. parentId: data.parentId,
  159. sortOrder: data.sortOrder,
  160. // wapBannerUrl: data.wapBannerUrl[0] || '',
  161. });
  162. emit('update');
  163. resetFields();
  164. createMessage.success('操作成功');
  165. closeModal();
  166. }
  167. } catch (error) {
  168. console.log('error', error);
  169. }
  170. // let res = await saveItemApi(data);
  171. }
  172. return { register, schemas, registerForm, handleOk };
  173. },
  174. });
  175. </script>