EditModal.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.retailer.setName')"
  6. @visible-change="handleVisibleChange"
  7. :confirmLoading="loading"
  8. @cancel="resetFields"
  9. width="650px"
  10. @ok="handleSubmit"
  11. >
  12. <div class="pt-2px pr-3px">
  13. <div class="name" style="line-height: 43px;">{{t('routes.retailer.form.dqname')}}:{{ modelRef.name }}</div>
  14. <BasicForm @register="registerForm">
  15. <template #text="{ model, field }">
  16. {{ model[field] }}
  17. </template>
  18. <template #type="{ model, field }">
  19. {{ renderOwnTypeLabel(Number(model[field])) }}
  20. </template>
  21. </BasicForm>
  22. </div>
  23. </BasicModal>
  24. </template>
  25. <script lang="ts">
  26. import { defineComponent, ref, nextTick, onMounted, reactive, computed } from 'vue';
  27. import { BasicModal, useModalInner } from '/@/components/Modal';
  28. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  29. import { useMessage } from '/@/hooks/web/useMessage';
  30. import { useI18n } from '/@/hooks/web/useI18n';
  31. import { isEmojiCharacter } from '/@/utils';
  32. import { useUserStore } from '/@/store/modules/user';
  33. import { addIncrementNum } from '/@/api/retailer';
  34. import { useLocaleStore } from '/@/store/modules/locale';
  35. const { t } = useI18n();
  36. export default defineComponent({
  37. components: { BasicModal, BasicForm },
  38. props: {
  39. userData: { type: Object },
  40. },
  41. emits: ['update', 'register'],
  42. setup(props, { emit }) {
  43. const modelRef = ref({});
  44. const loading = ref(false);
  45. const fileFlow = reactive({
  46. file: null,
  47. });
  48. const userStore = useUserStore();
  49. const { getUserInfoAction } = userStore
  50. const isDev = computed(() => userStore.getSystemEnv);
  51. const localeStore = useLocaleStore();
  52. const isEn = computed(() => localeStore.getLocale === 'en');
  53. const agent = computed(() => userStore.getAgent);
  54. const { createMessage } = useMessage();
  55. const schemas: FormSchema[] = [
  56. {
  57. field: 'id',
  58. component: 'Input',
  59. label: t('routes.product.types'),
  60. show: false,
  61. colProps: {
  62. span: 24,
  63. },
  64. },
  65. // {
  66. // field: 'name',
  67. // component: 'Input',
  68. // label: t('routes.retailer.form.dqname'),
  69. // slot: 'text',
  70. // colProps: {
  71. // span: 24,
  72. // },
  73. // },
  74. {
  75. field: 'majorAddNum',
  76. component: 'InputNumber',
  77. label: t('routes.retailer.majorAddNum', {value: agent.value.majorSubNum}),
  78. defaultValue: 0,
  79. colProps: {
  80. span: 22,
  81. },
  82. },
  83. {
  84. field: 'highAddNum',
  85. component: 'InputNumber',
  86. label: t('routes.retailer.highAddNum', {value: agent.value.highSubNum}),
  87. defaultValue: 0,
  88. ifShow: isDev.value,
  89. colProps: {
  90. span: 22,
  91. },
  92. },
  93. {
  94. field: 'downAddNum',
  95. component: 'InputNumber',
  96. label: t('routes.retailer.downAddNum', {value: agent.value.downSubNum}),
  97. defaultValue: 0,
  98. colProps: {
  99. span: 22,
  100. },
  101. },
  102. ];
  103. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  104. labelWidth: isEn.value ? 470 : 330,
  105. labelAlign: 'left',
  106. schemas,
  107. showActionButtonGroup: false,
  108. actionColOptions: {
  109. span: 24,
  110. },
  111. });
  112. onMounted(() => {});
  113. let addListFunc = () => {};
  114. const [register, { closeModal }] = useModalInner((data) => {
  115. data && onDataReceive(data);
  116. });
  117. function renderOwnTypeLabel(type: number): string {
  118. switch (type) {
  119. case 9:
  120. return t('routes.product.type.2');
  121. case 1:
  122. return t('routes.product.type.1');
  123. case 10:
  124. return t('routes.product.type.3');
  125. case 11:
  126. return t('routes.product.type.11');
  127. default:
  128. return '';
  129. }
  130. }
  131. function onDataReceive(data) {
  132. modelRef.value = data;
  133. console.log('onDataReceive', data);
  134. resetFields();
  135. setTimeout(() => {
  136. updateSchema([
  137. {
  138. field: 'majorAddNum',
  139. label: t('routes.retailer.majorAddNum', {value: agent.value.majorSubNum}),
  140. componentProps: {
  141. max: agent.value.majorSubNum,
  142. min: 0,
  143. },
  144. },
  145. {
  146. field: 'highAddNum',
  147. label: t('routes.retailer.highAddNum', {value: agent.value.highSubNum}),
  148. componentProps: {
  149. max: agent.value.highSubNum,
  150. min: 0,
  151. },
  152. ifShow: isDev.value,
  153. },
  154. {
  155. field: 'downAddNum',
  156. label: t('routes.retailer.downAddNum', {value: agent.value.downSubNum}),
  157. componentProps: {
  158. max: agent.value.downSubNum,
  159. min: 0,
  160. },
  161. },
  162. ]);
  163. }, 500);
  164. setFieldsValue({
  165. ...data,
  166. downAddNum: 0,
  167. majorAddNum: 0,
  168. highAddNum: 0,
  169. });
  170. }
  171. const handleSubmit = async () => {
  172. loading.value = true;
  173. try {
  174. const params = await validate();
  175. console.log('modelRef', params);
  176. const apiData = {
  177. // ...modelRef.value,
  178. ...(params as any),
  179. };
  180. console.log('res', apiData);
  181. const res = await addIncrementNum(apiData);
  182. console.log('res', res);
  183. closeModal();
  184. resetFields();
  185. createMessage.success(t('common.optSuccess'));
  186. emit('update');
  187. getUserInfoAction();
  188. loading.value = false;
  189. } catch (error) {
  190. console.log('not passing', error);
  191. loading.value = false;
  192. }
  193. };
  194. function handleVisibleChange(v) {
  195. v && props.userData && nextTick(() => onDataReceive(props.userData));
  196. }
  197. return {
  198. register,
  199. renderOwnTypeLabel,
  200. schemas,
  201. loading,
  202. registerForm,
  203. fileFlow,
  204. handleVisibleChange,
  205. handleSubmit,
  206. addListFunc,
  207. resetFields,
  208. t,
  209. modelRef,
  210. };
  211. },
  212. });
  213. </script>