addModal.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="title"
  6. :width="600"
  7. @visible-change="handleVisibleChange"
  8. @cancel="resetFields"
  9. @ok="handleSubmit"
  10. >
  11. <div class="pt-2px pr-3px">
  12. <BasicForm @register="registerForm" >
  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 { agentNewAdd, checkUser } from '/@/api/dealer'
  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 title = ref('新增经销商');
  37. const preventAutoFill = ref(true);
  38. const fileFlow = reactive({
  39. coverImageUrl:''
  40. })
  41. const { createMessage } = useMessage();
  42. const schemas: FormSchema[] = [
  43. {
  44. field: 'name',
  45. component: 'Input',
  46. label: '经销商名称',
  47. required: true,
  48. componentProps: {
  49. maxlength: 50,
  50. },
  51. colProps: {
  52. span: 22,
  53. },
  54. },{
  55. field: 'nickName',
  56. component: 'Input',
  57. required: false,
  58. label: '联系人',
  59. componentProps: {
  60. maxlength: 50,
  61. },
  62. colProps: {
  63. span: 22,
  64. },
  65. },{
  66. field: 'userName',
  67. component: 'Input',
  68. label: '账号',
  69. required: true,
  70. componentProps: {
  71. placeholder:"请输入四维看看账号",
  72. autoComplete:'off',
  73. // readonly:preventAutoFill.value
  74. },
  75. rules: [
  76. {
  77. required: true,
  78. // @ts-ignore
  79. validator: async (rule, value) => {
  80. console.log('value',value)
  81. const regPos = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/; // 非中文
  82. if (!value) {
  83. return Promise.reject('请输入四维看看账号');
  84. }
  85. let res = await checkUser({userName:value})
  86. console.log('res',res)
  87. if (!regPos.test(value)) {
  88. /* eslint-disable-next-line */
  89. return Promise.reject('请输入正确的手机号');
  90. }
  91. return Promise.resolve();
  92. },
  93. trigger: 'change',
  94. },
  95. ],
  96. colProps: {
  97. span: 22,
  98. },
  99. },
  100. ];
  101. const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
  102. labelWidth: 120,
  103. schemas,
  104. showActionButtonGroup: false,
  105. actionColOptions: {
  106. span: 24,
  107. },
  108. });
  109. onMounted(() => {});
  110. let addListFunc = () => {};
  111. const [register, { closeModal }] = useModalInner((data) => {
  112. data && onDataReceive(data);
  113. });
  114. const formatrichtext = (richtext, len = 0) => {
  115. let content = richtext.replace(/<.+?>/g, '');
  116. content = content.replace(/ /ig, ''); /* 去除 */
  117. content = content.replace(/\s/ig, ''); /* 去除空格 */
  118. return content && content.length;
  119. }
  120. async function onDataReceive(data) {
  121. modelRef.value = data
  122. resetFields();
  123. }
  124. const handleSubmit = async () => {
  125. const params = await validate();
  126. const apiData = {
  127. ...params as any,
  128. coverImageUrl:params.coverImageUrl && params.coverImageUrl[0],
  129. content:params.newType == 1?params.newsUrl:params.content
  130. }
  131. try {
  132. await agentNewAdd(apiData);
  133. closeModal();
  134. resetFields();
  135. createMessage.success(t('common.optSuccess'));
  136. emit('update');
  137. } catch (error) {
  138. console.log('not passing', error);
  139. }
  140. };
  141. function handleVisibleChange(v) {
  142. v && props.userData && nextTick(() => onDataReceive(props.userData));
  143. }
  144. return {
  145. register,
  146. schemas,
  147. registerForm,
  148. model: modelRef,
  149. fileFlow,
  150. preventAutoFill,
  151. handleVisibleChange,
  152. handleSubmit,
  153. addListFunc,
  154. resetFields,
  155. title,
  156. t,
  157. };
  158. },
  159. });
  160. </script>