InvoiceModal.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.equity.add')"
  6. @visible-change="handleVisibleChange"
  7. @cancel="resetFields"
  8. @ok="handleSubmit"
  9. >
  10. <div class="pt-2px pr-3px">
  11. <BasicForm @register="registerForm">
  12. <template #text="{ model, field }">
  13. {{ model[field] }}{{fileFlow.type}}
  14. </template>
  15. </BasicForm>
  16. </div>
  17. </BasicModal>
  18. </template>
  19. <script lang="ts">
  20. import { defineComponent, nextTick, onMounted, reactive, computed } from 'vue';
  21. import { BasicModal, useModalInner } from '/@/components/Modal';
  22. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  23. import { useMessage } from '/@/hooks/web/useMessage';
  24. import { useI18n } from '/@/hooks/web/useI18n';
  25. import { dincrementList, checkUserName, addApi } from '/@/api/equity'
  26. import { useUserStore } from '/@/store/modules/user';
  27. import dayjs from 'dayjs';
  28. const { t } = useI18n();
  29. export default defineComponent({
  30. components: { BasicModal, BasicForm },
  31. props: {
  32. userData: { type: Object },
  33. },
  34. emits: ['update', 'register'],
  35. setup(props, { emit }) {
  36. const fileFlow = reactive({
  37. file:null,
  38. type:2,//2-普通发票,3-专用发票
  39. validTimeType:0,
  40. })
  41. const userStore = useUserStore();
  42. const { createMessage } = useMessage();
  43. const agent = computed(() => userStore.getAgent);
  44. const schemas: FormSchema[] = [
  45. {
  46. field: 'userName',
  47. component: 'Input',
  48. label: t('routes.equity.userName'),
  49. required: true,
  50. componentProps: {
  51. autoComplete:'off',
  52. // readonly:preventAutoFill.value
  53. },
  54. rules: [
  55. {
  56. required: true,
  57. // @ts-ignore
  58. validator: async (rule, value) => {
  59. console.log('value',value)
  60. const regEmail = /^(.+)@(.+)$/
  61. const regPos = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/; // 非中文
  62. if (!value) {
  63. return Promise.reject(t('routes.equity.rules.userName'));
  64. }
  65. if (!(regPos.test(value) || regEmail.test(value))) {
  66. /* eslint-disable-next-line */
  67. return Promise.reject(t('routes.equity.rules.userName1'));
  68. }
  69. // useThrottleFn(handleSplitLeftMenu, 50);
  70. let res = await checkUserName({userName:value})
  71. //await checkUserName({userName:value})
  72. // useThrottleFn(,50)()
  73. if(!res){
  74. return Promise.reject(t('routes.equity.rules.userName2'));
  75. }
  76. return Promise.resolve();
  77. },
  78. trigger: 'blur',
  79. },
  80. ],
  81. colProps: {
  82. span: 16,
  83. },
  84. },{
  85. field: 'incrementTypeId',
  86. component: 'ApiSelect',
  87. label: t('routes.equity.Type'),
  88. required: true,
  89. componentProps: {
  90. maxLength: 50,
  91. api: async function () {
  92. const list = await dincrementList();
  93. return list.map(ele => {
  94. return {name:t(`routes.finance.equityType.${ele.validTimeType}`),value:ele.id}
  95. });
  96. },
  97. numberToString: true,
  98. labelField: 'name',
  99. valueField: 'value',
  100. immediate: true,
  101. params: {
  102. agentName: '',
  103. },
  104. onChange:(value)=>{
  105. updateSchema([{
  106. field: 'count',
  107. componentProps: {
  108. max:value == 3?agent.value.highSubNum:agent.value.majorSubNum,
  109. min:1,
  110. },
  111. },{
  112. field: 'totalTime',
  113. suffix:`${t('routes.equity.syks')} ${value == 3?agent.value.highSubNum:agent.value.majorSubNum} ${value == 3?t('routes.equity.unit.-2'):t('routes.equity.unit.-1')}`,
  114. componentProps: {
  115. options: timeOption(value)
  116. },
  117. }])
  118. setFieldsValue({
  119. count:1,
  120. incrementEndTime: dayjs().add(1,value!='3'?'year':'month').format('YYYY-MM-DD'),
  121. });
  122. }
  123. },
  124. colProps: {
  125. span: 16,
  126. },
  127. },{
  128. field: 'count',
  129. component: 'InputNumber',
  130. label: t('routes.equity.countNumber'),
  131. required: true,
  132. // suffix:`${t('routes.equity.syks')} ${agent.value.majorSubNum} ${t('routes.equity.unit.1')}`,
  133. defaultValue:1,
  134. itemProps: {
  135. validateTrigger: 'onBlur',
  136. },
  137. componentProps: {
  138. max:agent.value.majorSubNum,
  139. min:1,
  140. // onChange:(value)=>{
  141. // setFieldsValue({
  142. // incrementEndTime:dayjs(fileFlow.incrementEndTime || new Date()).add(value,fileFlow.validTimeType == 0?'year':'month').format('YYYY-MM-DD')
  143. // });
  144. // }
  145. },
  146. colProps: {
  147. span: 19,
  148. },
  149. },{
  150. field: 'totalTime',
  151. component: 'Select',
  152. label: t('routes.equity.totalTime'),
  153. required: true,
  154. // suffix:`${t('routes.equity.syks')} ${agent.value.majorSubNum} ${t('routes.equity.unit.1')}`,
  155. itemProps: {
  156. validateTrigger: 'onBlur',
  157. },
  158. componentProps: {
  159. options:[],
  160. listHeight:150,
  161. onChange:(value)=>{
  162. let { incrementTypeId } = getFieldsValue()
  163. setFieldsValue({
  164. incrementEndTime:dayjs(fileFlow.incrementEndTime || new Date()).add(value,incrementTypeId != 3?'year':'month').format('YYYY-MM-DD')
  165. });
  166. }
  167. },
  168. colProps: {
  169. span: 19,
  170. },
  171. },{
  172. field: 'incrementEndTime',
  173. component: 'DatePicker',
  174. label: t('routes.equity.expiryTime'),
  175. required: true,
  176. defaultValue:dayjs().add(1,'year').format('YYYY-MM-DD'),
  177. componentProps: {
  178. disabled:true,
  179. valueFormat: 'YYYY-MM-DD',
  180. format: 'YYYY-MM-DD',
  181. disabledDate: (current) => {
  182. return current && current < dayjs().endOf('day');
  183. },
  184. },
  185. colProps: {
  186. span: 24,
  187. },
  188. }
  189. ];
  190. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema, getFieldsValue }] = useForm({
  191. labelWidth: 120,
  192. schemas:schemas,
  193. showActionButtonGroup: false,
  194. actionColOptions: {
  195. span: 24,
  196. },
  197. });
  198. onMounted(() => {});
  199. let addListFunc = () => {};
  200. const [register, { closeModal }] = useModalInner((data) => {
  201. data && onDataReceive(data);
  202. });
  203. function onDataReceive(data) {
  204. resetFields();
  205. console.log('validTimeType',data)
  206. fileFlow.type = data.type
  207. fileFlow.validTimeType = data.validTimeType
  208. setFieldsValue(data);
  209. updateSchema([
  210. {field: 'shipNum',ifShow:fileFlow.type == 3,},
  211. {field: 'email',ifShow:fileFlow.type == 2,},
  212. {field: 'file',ifShow:fileFlow.type == 2,},
  213. {field: 'totalTime',suffix:`${t('routes.equity.syks')} ${agent.value.majorSubNum} ${t('routes.equity.unit.1')}`,},
  214. {field: 'count',componentProps:{
  215. max:agent.value.majorSubNum,
  216. min:1,
  217. }},
  218. ])
  219. }
  220. const handleSubmit = async () => {
  221. // try {
  222. const params = await validate();
  223. console.log('params',params)
  224. let timeVal = params.incrementTypeId == 3?agent.value.highSubNum:agent.value.majorSubNum
  225. if((params.count * params.totalTime)>timeVal){
  226. createMessage.error(t('routes.equity.totalMessge'));
  227. return
  228. }
  229. await addApi(params);
  230. closeModal();
  231. resetFields();
  232. createMessage.success(t('common.optSuccess'));
  233. emit('update',true);
  234. // } catch (error) {
  235. // console.log('not passing', error);
  236. // }
  237. };
  238. function handleVisibleChange(v) {
  239. v && props.userData && nextTick(() => onDataReceive(props.userData));
  240. }
  241. function timeOption(incrementTypeId) {
  242. let list = []
  243. let timeVal = incrementTypeId == 3?agent.value.highSubNum:agent.value.majorSubNum
  244. let value = 10, unit = t('routes.equity.unit.-1')
  245. if(incrementTypeId == 3){//高级会员月
  246. value = timeVal>12?12:timeVal
  247. unit = t('routes.equity.unit.-3')
  248. }else{
  249. value = timeVal>10?10:timeVal
  250. }
  251. for (let index = 1; index <= value; index++) {
  252. list.push({
  253. label: index+unit,
  254. value: index,
  255. key: index,
  256. })
  257. }
  258. return list
  259. }
  260. return {
  261. register,
  262. registerForm,
  263. fileFlow,
  264. handleVisibleChange,
  265. handleSubmit,
  266. addListFunc,
  267. resetFields,
  268. timeOption,
  269. t,
  270. };
  271. },
  272. });
  273. </script>