EditModal.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.equity.renew')"
  6. height="500"
  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. <template #img="{ model }">
  17. <TableImg v-if="model.invoiceUrl" :size="200" :adaptations="true" :simpleShow="true" :imgList="[model.invoiceUrl]" />
  18. </template>
  19. </BasicForm>
  20. </div>
  21. </BasicModal>
  22. </template>
  23. <script lang="ts">
  24. import { defineComponent, nextTick, onMounted, reactive, computed } from 'vue';
  25. import { BasicModal, useModalInner } from '/@/components/Modal';
  26. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  27. import { TableImg } from '/@/components/Table';
  28. import { useMessage } from '/@/hooks/web/useMessage';
  29. import { InvoiceRegister, InvoiceDetail } from '/@/api/order';
  30. import { useUserStore } from '/@/store/modules/user';
  31. import { useI18n } from '/@/hooks/web/useI18n';
  32. import { renewApi } from '/@/api/equity/index';
  33. import dayjs from 'dayjs';
  34. const { t } = useI18n();
  35. export default defineComponent({
  36. components: { BasicModal, BasicForm, TableImg },
  37. props: {
  38. userData: { type: Object },
  39. },
  40. emits: ['update', 'register'],
  41. setup(props, { emit }) {
  42. const fileFlow = reactive({
  43. file:null,
  44. type:2,//2-普通发票,3-专用发票
  45. validTimeType: 0,
  46. incrementEndTime:'',
  47. })
  48. const { createMessage } = useMessage();
  49. const userStore = useUserStore();
  50. const agent = computed(() => userStore.getAgent);
  51. const schemas: FormSchema[] = [
  52. {
  53. field: 'userName',
  54. component: 'Input',
  55. label: t('routes.equity.userName'),
  56. slot: 'text',
  57. colProps: {
  58. span: 24,
  59. },
  60. },{
  61. field: 'id',
  62. component: 'Input',
  63. label: t('routes.equity.id'),
  64. slot: 'text',
  65. colProps: {
  66. span: 24,
  67. },
  68. },{
  69. field: 'totalTime',
  70. component: 'Select',
  71. label: t('routes.equity.totalTime'),
  72. required: true,
  73. suffix:`${t('routes.equity.syks')} ${agent.value.majorSubNum} ${t('routes.equity.unit.1')}`,
  74. defaultValue:1,
  75. itemProps: {
  76. validateTrigger: 'onBlur',
  77. },
  78. componentProps: {
  79. options:[],
  80. onChange:(value)=>{
  81. setFieldsValue({
  82. incrementEndTime:dayjs(fileFlow.incrementEndTime || new Date()).add(value,fileFlow.validTimeType == 0?'year':'month').format('YYYY-MM-DD')
  83. });
  84. }
  85. },
  86. colProps: {
  87. span: 19,
  88. },
  89. },{
  90. field: 'incrementEndTime',
  91. component: 'DatePicker',
  92. label: t('routes.equity.expiryTime'),
  93. required: true,
  94. defaultValue:dayjs().add(1,'year').format('YYYY-MM-DD'),
  95. componentProps: {
  96. disabled:true,
  97. valueFormat: 'YYYY-MM-DD',
  98. format: 'YYYY-MM-DD',
  99. disabledDate: (current) => {
  100. return current && current < dayjs().endOf('day');
  101. },
  102. },
  103. colProps: {
  104. span: 22,
  105. },
  106. }
  107. ];
  108. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  109. labelWidth: 120,
  110. schemas:schemas,
  111. showActionButtonGroup: false,
  112. actionColOptions: {
  113. span: 24,
  114. },
  115. });
  116. onMounted(() => {});
  117. let addListFunc = () => {};
  118. const [register, { closeModal }] = useModalInner((data) => {
  119. data && onDataReceive(data);
  120. });
  121. async function onDataReceive(data) {
  122. resetFields();
  123. // let detail = await InvoiceDetail({id:data.id})
  124. console.log('data',data)
  125. fileFlow.type = data.type
  126. fileFlow.validTimeType = data.validTimeType
  127. fileFlow.incrementEndTime = data.incrementEndTime
  128. updateSchema([{
  129. field: 'totalTime',
  130. suffix:`${t('routes.equity.syks')} ${data.validTimeType == 1?agent.value.highSubNum:agent.value.majorSubNum} ${data.validTimeType == 1?t('routes.equity.unit.-2'):t('routes.equity.unit.-1')}`,
  131. componentProps: {
  132. options: timeOption(data.validTimeType)
  133. },
  134. }])
  135. setFieldsValue({
  136. ...data,
  137. incrementEndTime:dayjs(data.isExpired == 1?new Date():data.incrementEndTime).add(1,data.validTimeType == 0?'year':'month').format('YYYY-MM-DD')
  138. });
  139. }
  140. function timeOption(incrementTypeId) {
  141. let list = []
  142. let timeVal = incrementTypeId == 1?agent.value.highSubNum:agent.value.majorSubNum
  143. let value = 10, unit = t('routes.equity.unit.-1')
  144. if(incrementTypeId == 1){//高级会员月
  145. value = timeVal>12?12:timeVal
  146. unit = t('routes.equity.unit.-3')
  147. }else{
  148. value = timeVal>10?10:timeVal
  149. }
  150. for (let index = 1; index <= value; index++) {
  151. list.push({
  152. label: index+unit,
  153. value: index,
  154. key: index,
  155. })
  156. }
  157. return list
  158. }
  159. const handleSubmit = async () => {
  160. const params = await validate();
  161. await renewApi(params);
  162. createMessage.success(t('common.optSuccess'));
  163. closeModal();
  164. emit('update',true);
  165. };
  166. function handleVisibleChange(v) {
  167. v && props.userData && nextTick(() => onDataReceive(props.userData));
  168. }
  169. return {
  170. register,
  171. registerForm,
  172. fileFlow,
  173. handleVisibleChange,
  174. handleSubmit,
  175. addListFunc,
  176. resetFields,
  177. t,
  178. };
  179. },
  180. });
  181. </script>