reviewModal.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. title="测试登记"
  6. @cancel="resetFields"
  7. @ok="handleSubmit"
  8. :min-height="0"
  9. >
  10. <BasicForm @register="registerForm">
  11. <template #text="{ model, field }">
  12. {{ model[field] }}
  13. </template>
  14. </BasicForm>
  15. </BasicModal>
  16. </template>
  17. <script lang="ts">
  18. import { defineComponent, ref, onMounted, h } from 'vue';
  19. import { BasicModal, useModalInner } from '/@/components/Modal';
  20. import { useMessage } from '/@/hooks/web/useMessage';
  21. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  22. import { testPassOrFail } from '/@/api/spares';
  23. import { uploadApi } from '/@/api/product/index';
  24. import { useI18n } from '/@/hooks/web/useI18n';
  25. const { t } = useI18n();
  26. export default defineComponent({
  27. components: { BasicModal, BasicForm },
  28. props: {
  29. userData: { type: Object },
  30. },
  31. emits: ['update'],
  32. setup(_, { emit }) {
  33. const modelRef = ref({});
  34. const schemas: FormSchema[] = [
  35. {
  36. field: 'repairId',
  37. component: 'Input',
  38. slot: 'text',
  39. label: '维修单号',
  40. componentProps: {
  41. maxLength: 50,
  42. },
  43. colProps: {
  44. span: 18,
  45. },
  46. },
  47. {
  48. field: 'deviceType',
  49. component: 'Input',
  50. slot: 'text',
  51. label: '设备信息',
  52. },
  53. {
  54. field: 'resultStatus',
  55. component: 'RadioGroup',
  56. required: true,
  57. label: '测试结果',
  58. defaultValue: 0,
  59. componentProps: {
  60. options: [
  61. { label: '通过', value: 0 },
  62. { label: '不通过', value: 1 },
  63. ],
  64. },
  65. },
  66. {
  67. field: 'resultInfo',
  68. component: 'InputTextArea',
  69. label: '测试描述',
  70. componentProps: {
  71. maxLength: 500,
  72. rows: 3,
  73. },
  74. colProps: {
  75. span: 18,
  76. },
  77. },
  78. {
  79. field: 'resultImg',
  80. component: 'Upload',
  81. label: '相关图片',
  82. itemProps: {
  83. validateTrigger: 'blur',
  84. },
  85. componentProps: {
  86. api: uploadApi,
  87. // fileFlow:true,
  88. maxNumber: 6,
  89. maxSize: 5,
  90. accept: ['jpeg', 'jpg', 'png'],
  91. },
  92. colProps: {
  93. span: 12,
  94. },
  95. },
  96. ];
  97. const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
  98. labelWidth: 100,
  99. schemas: schemas,
  100. showActionButtonGroup: false,
  101. actionColOptions: {
  102. span: 24,
  103. },
  104. });
  105. const { createMessage, createConfirm } = useMessage();
  106. onMounted(() => {});
  107. let addListFunc = () => {};
  108. const [register, { closeModal }] = useModalInner((data) => {
  109. // console.log(data);
  110. data && onDataReceive(data);
  111. });
  112. function onDataReceive(data) {
  113. modelRef.value = data;
  114. resetFields();
  115. setFieldsValue({
  116. ...data,
  117. deviceType: `${t('routes.scene.tableType.' + data.cameraType)} ${
  118. data.cameraSnCode || '无'
  119. }`,
  120. });
  121. }
  122. const handleSubmit = async () => {
  123. createConfirm({
  124. iconType: 'warning',
  125. title: () => h('span', '温馨提示'),
  126. content: '确定要提交测试结果吗?',
  127. onOk: async () => {
  128. const params = await validate();
  129. const res = await testPassOrFail(params);
  130. console.log('validate', params, res);
  131. createMessage.success(t('common.optSuccess'));
  132. closeModal();
  133. emit('update');
  134. },
  135. });
  136. };
  137. return {
  138. register,
  139. model: modelRef,
  140. registerForm,
  141. handleSubmit,
  142. addListFunc,
  143. resetFields,
  144. t,
  145. };
  146. },
  147. });
  148. </script>
  149. <style lang="less" scoped>
  150. .recoverPage {
  151. .form_item {
  152. line-height: 30px;
  153. .item_lable {
  154. display: inline-block;
  155. width: 100px;
  156. text-align: right;
  157. }
  158. }
  159. }
  160. </style>