detailsModal.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.corporation.businessAuth')"
  6. :cancelText="t('routes.corporation.reject')"
  7. :okText="t('routes.corporation.allow')"
  8. @cancel="closeModal"
  9. @visible-change="handleVisibleChange"
  10. >
  11. <template #footer>
  12. <div>
  13. <a-button type="primary" danger @click="submitModal(false)">{{
  14. t('routes.corporation.reject')
  15. }}</a-button>
  16. <a-button type="primary" @click="submitModal(true)">{{
  17. t('routes.corporation.allow')
  18. }}</a-button>
  19. </div>
  20. </template>
  21. <div class="pt-3px pr-3px">
  22. <BasicForm @register="registerForm">
  23. <template #text="{ model, field }"> {{ `: ${model[field]}` }} </template>
  24. <template #link="{ model, field }">
  25. <a :href="model[field]" target="_blank">{{ `: ${model[field]}` }}</a>
  26. </template>
  27. <template #image="{ model, field }">
  28. <div v-if="model[field]">
  29. <TableImg :size="200" :simpleShow="true" :imgList="[model[field]]" />
  30. </div>
  31. </template>
  32. </BasicForm>
  33. </div>
  34. </BasicModal>
  35. </template>
  36. <script lang="ts">
  37. import { defineComponent, ref, nextTick, computed } from 'vue';
  38. import { TableImg } from '/@/components/Table';
  39. import { BasicModal, useModalInner } from '/@/components/Modal';
  40. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  41. import { useMessage } from '/@/hooks/web/useMessage';
  42. import { checkDevice, selectCompanyById, auditCompany } from '/@/api/corporation/modal';
  43. import { useI18n } from '/@/hooks/web/useI18n';
  44. import { useLocaleStore } from '/@/store/modules/locale';
  45. const localeStore = useLocaleStore();
  46. export default defineComponent({
  47. components: { BasicModal, BasicForm, TableImg },
  48. props: {
  49. userData: { type: Object },
  50. },
  51. emits: ['register'],
  52. setup(props) {
  53. const modelRef = ref({});
  54. const { t } = useI18n();
  55. const num = ref(0);
  56. const { createMessage } = useMessage();
  57. const { error, success } = createMessage; //success,
  58. const [register, { closeModal }] = useModalInner((data) => {
  59. data && onDataReceive(data);
  60. });
  61. const isJA = computed(() => localeStore.getLocale === 'ja');
  62. const handlevalidator = async (_, value) => {
  63. console.log('handlevalidator', value);
  64. if (!value) {
  65. return Promise.resolve();
  66. }
  67. try {
  68. let res = await checkDevice({
  69. childName: value,
  70. });
  71. if (res.message) {
  72. return Promise.reject(res.message);
  73. } else {
  74. return Promise.resolve();
  75. }
  76. } catch (err) {
  77. return Promise.reject(err);
  78. }
  79. };
  80. const schemas: FormSchema[] = [
  81. {
  82. field: 'name',
  83. label: t('routes.corporation.name'),
  84. slot: 'text',
  85. component: 'Input',
  86. },
  87. {
  88. field: 'contacts',
  89. label: '联系人',
  90. slot: 'text',
  91. component: 'Input',
  92. },
  93. {
  94. field: 'phone',
  95. label: t('routes.corporation.phone'),
  96. slot: 'text',
  97. component: 'Input',
  98. },
  99. {
  100. field: 'area',
  101. label: t('routes.corporation.area'),
  102. slot: 'text',
  103. component: 'Input',
  104. },
  105. {
  106. field: 'address',
  107. label: t('routes.corporation.address'),
  108. slot: 'text',
  109. component: 'Input',
  110. },
  111. {
  112. field: 'website',
  113. label: t('routes.corporation.website'),
  114. slot: 'text',
  115. component: 'Input',
  116. },
  117. {
  118. field: 'introduce',
  119. label: `${t('routes.corporation.introduce')} :`,
  120. slot: 'name',
  121. component: 'Input',
  122. },
  123. {
  124. field: 'logo',
  125. label: `${t('routes.corporation.companyLogo')} :`,
  126. slot: 'image',
  127. component: 'Input',
  128. },
  129. {
  130. field: 'qualification',
  131. label: `${t('routes.corporation.qualification')} :`,
  132. slot: 'image',
  133. component: 'Input',
  134. },
  135. ];
  136. // let schemasList = []
  137. const [
  138. registerForm,
  139. { setFieldsValue, resetFields, appendSchemaByField, removeSchemaByFiled },
  140. ] = useForm({
  141. labelWidth: isJA.value ? 150 : 120,
  142. schemas,
  143. showActionButtonGroup: false,
  144. actionColOptions: {
  145. span: 24,
  146. },
  147. });
  148. async function submitModal(val) {
  149. console.log('submitModal', val);
  150. let res = await auditCompany({
  151. id: modelRef.value.id,
  152. state: val ? 1 : 2,
  153. });
  154. success(res);
  155. closeModal();
  156. }
  157. async function onDataReceive(data) {
  158. // 方式1;
  159. resetFields();
  160. let { id } = data.record;
  161. let res = await selectCompanyById({
  162. id,
  163. });
  164. console.log('setFieldsValue', res);
  165. setFieldsValue({
  166. ...res,
  167. });
  168. modelRef.value = { ...data.record };
  169. }
  170. function numOnChange(event) {
  171. const value = Number(event);
  172. if (num.value > value) {
  173. //减
  174. let delList = Array.from(new Array(num.value)).map((_, index) => {
  175. console.log(index, value, num.value);
  176. if (index >= value) {
  177. return `ID${index}`;
  178. }
  179. });
  180. removeSchemaByFiled(delList);
  181. console.log('schemasList减', value, num.value, delList);
  182. // value,num.value,schemasList.filter((_,index) => {return !(index<num.value)}).map((_,index) => `ID${index}`))
  183. } else {
  184. //增
  185. let schemasList: FormSchema[] = Array.from(new Array(value)).map((_, index) => {
  186. return {
  187. field: `ID${index}`,
  188. component: 'Input',
  189. label: '设备ID' + index,
  190. itemProps: {
  191. validateTrigger: 'blur',
  192. },
  193. colProps: {
  194. span: 24,
  195. },
  196. rules: [
  197. {
  198. required: false,
  199. trigger: 'blur',
  200. validator: handlevalidator,
  201. },
  202. ],
  203. };
  204. });
  205. console.log(
  206. 'schemasList增',
  207. num.value,
  208. schemasList.filter((_, index) => {
  209. return index >= num.value;
  210. }),
  211. );
  212. schemasList
  213. .filter((_, index) => {
  214. return index >= num.value;
  215. })
  216. .forEach((item) => appendSchemaByField(item, ''));
  217. }
  218. num.value = value;
  219. }
  220. function handleVisibleChange(v) {
  221. v && props.userData && nextTick(() => onDataReceive(props.userData));
  222. }
  223. return {
  224. register,
  225. submitModal,
  226. schemas,
  227. registerForm,
  228. numOnChange,
  229. modelRef,
  230. handleVisibleChange,
  231. num,
  232. closeModal,
  233. errorMsg: error,
  234. t,
  235. };
  236. },
  237. });
  238. </script>