AddModal.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. title="新增相机"
  6. @visible-change="handleVisibleChange"
  7. @cancel="resetFields"
  8. @ok="handleSubmit"
  9. >
  10. <div class="pt-2px pr-3px">
  11. <BasicForm @register="registerForm" :model="model" />
  12. </div>
  13. </BasicModal>
  14. </template>
  15. <script lang="ts">
  16. import { defineComponent, ref, nextTick, onMounted } from 'vue';
  17. import { BasicModal, useModalInner } from '/@/components/Modal';
  18. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  19. import { useMessage } from '/@/hooks/web/useMessage';
  20. import { addCameraApi } from '/@/api/device/list';
  21. import { useI18n } from '/@/hooks/web/useI18n';
  22. const { t } = useI18n();
  23. export default defineComponent({
  24. components: { BasicModal, BasicForm },
  25. props: {
  26. userData: { type: Object },
  27. },
  28. emits: ['update', 'register'],
  29. setup(props, { emit }) {
  30. const modelRef = ref({});
  31. const { createMessage } = useMessage();
  32. const schemas: FormSchema[] = [
  33. {
  34. field: 'own',
  35. component: 'Select',
  36. label: t('routes.devices.own'),
  37. colProps: {
  38. span: 24,
  39. },
  40. componentProps: {
  41. options: [0, 2, 1, 3].map((ele) => {
  42. return { value: ele, key: ele, label: renderOwnTypeLabel(ele) };
  43. }),
  44. },
  45. required: true,
  46. },
  47. {
  48. field: 'cameraType',
  49. component: 'Select',
  50. label: t('routes.devices.cameraType'),
  51. required: true,
  52. colProps: {
  53. span: 24,
  54. },
  55. componentProps: {
  56. options: [4, 1, 9, 10, 6].map((ele) => {
  57. return { value: ele, key: ele, label: rendercameraTypeLabel(ele) };
  58. }),
  59. },
  60. },
  61. {
  62. field: 'childName',
  63. component: 'Input',
  64. label: t('routes.devices.childName'),
  65. required: true,
  66. colProps: {
  67. span: 24,
  68. },
  69. },
  70. {
  71. field: 'wifiName',
  72. component: 'Input',
  73. required: true,
  74. label: t('routes.devices.wifiName'),
  75. colProps: {
  76. span: 24,
  77. },
  78. },
  79. // {
  80. // field: 'address',
  81. // required: true,
  82. // component: 'Input',
  83. // label: t('routes.devices.address'),
  84. // colProps: {
  85. // span: 24,
  86. // },
  87. // },
  88. {
  89. field: 'snCode',
  90. component: 'Input',
  91. label: t('routes.devices.snCode'),
  92. required: true,
  93. ifShow: ({ model }) => {
  94. console.log('record', model['cameraType']);
  95. if (model['cameraType'] && [4, 1, 9, 10].includes(model['cameraType'])) {
  96. return true;
  97. } else {
  98. return false;
  99. }
  100. },
  101. colProps: {
  102. span: 24,
  103. },
  104. },
  105. {
  106. field: 'balance',
  107. component: 'Input',
  108. required: true,
  109. label: t('routes.devices.balance'),
  110. colProps: {
  111. span: 24,
  112. },
  113. },
  114. // {
  115. // field: 'orderSn',
  116. // component: 'Input',
  117. // label: t('routes.devices.orderSn'),
  118. // colProps: {
  119. // span: 24,
  120. // },
  121. // },
  122. // {
  123. // field: 'companyId',
  124. // component: 'ApiSelect',
  125. // label: t('routes.devices.companyId'),
  126. // itemProps: {
  127. // validateTrigger: 'blur',
  128. // },
  129. // componentProps: {
  130. // api: allCompanyApi,
  131. // numberToString: true,
  132. // labelField: 'name',
  133. // valueField: 'id',
  134. // immediate: true,
  135. // params: {
  136. // page: 1,
  137. // limit: 1000,
  138. // },
  139. // },
  140. // colProps: {
  141. // span: 24,
  142. // },
  143. // },
  144. ];
  145. const [registerForm, { validate, resetFields }] = useForm({
  146. labelWidth: 120,
  147. schemas,
  148. showActionButtonGroup: false,
  149. actionColOptions: {
  150. span: 24,
  151. },
  152. });
  153. onMounted(() => {});
  154. let addListFunc = () => {};
  155. const [register, { closeModal }] = useModalInner((data) => {
  156. data && onDataReceive(data);
  157. });
  158. function renderOwnTypeLabel(type: number): string {
  159. switch (type) {
  160. case 0:
  161. return t('routes.devices.ownName.0');
  162. case 2:
  163. return t('routes.devices.ownName.2');
  164. case 1:
  165. return t('routes.devices.ownName.1');
  166. case 3:
  167. return t('routes.devices.ownName.3');
  168. default:
  169. return '';
  170. }
  171. }
  172. function rendercameraTypeLabel(cameraType: number): string {
  173. switch (cameraType) {
  174. case 4:
  175. return t('routes.devices.cameraName.4');
  176. case 1:
  177. return t('routes.devices.cameraName.1');
  178. case 9:
  179. return t('routes.devices.cameraName.9');
  180. case 10:
  181. return t('routes.devices.cameraName.10');
  182. case 6:
  183. return t('routes.devices.cameraName.6');
  184. default:
  185. return '';
  186. }
  187. }
  188. function onDataReceive(data) {
  189. console.log('Data Received', data);
  190. const { addList } = data;
  191. if (typeof addList === 'function') {
  192. //是函数 其中 FunName 为函数名称
  193. addListFunc = addList;
  194. }
  195. }
  196. const handleSubmit = async () => {
  197. try {
  198. const params = await validate();
  199. const res = await addCameraApi(params as any);
  200. console.log('res', res);
  201. closeModal();
  202. resetFields();
  203. createMessage.success(res);
  204. emit('update');
  205. } catch (error) {
  206. console.log('not passing', error);
  207. }
  208. };
  209. function handleVisibleChange(v) {
  210. v && props.userData && nextTick(() => onDataReceive(props.userData));
  211. }
  212. return {
  213. register,
  214. rendercameraTypeLabel,
  215. renderOwnTypeLabel,
  216. schemas,
  217. registerForm,
  218. model: modelRef,
  219. handleVisibleChange,
  220. handleSubmit,
  221. addListFunc,
  222. resetFields,
  223. t,
  224. };
  225. },
  226. });
  227. </script>