AddModal.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="fileFlow.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. <template #text="{ model, field }">
  13. {{ model[field] }}
  14. </template>
  15. </BasicForm>
  16. </div>
  17. </BasicModal>
  18. </template>
  19. <script lang="ts">
  20. import { defineComponent, ref, nextTick, onMounted, reactive } 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 { uploadApi } from '/@/api/product/index';
  25. import { rtkDevicesaveOrEdit } from '/@/api/rtk/index';
  26. import { useI18n } from '/@/hooks/web/useI18n';
  27. const { t } = useI18n();
  28. export default defineComponent({
  29. components: { BasicModal, BasicForm },
  30. props: {
  31. userData: { type: Object },
  32. },
  33. emits: ['update', 'register'],
  34. setup(props, { emit }) {
  35. const modelRef = ref({
  36. operator: '中国移动',
  37. ipAddr: '120.253.239.161',
  38. mountPoint: 'RTCM33_GRCEJ',
  39. port: '8001',
  40. });
  41. const fileFlow = reactive({
  42. file: null,
  43. title: '新增RTK账号',
  44. });
  45. const { createMessage } = useMessage();
  46. const schemas: FormSchema[] = [
  47. {
  48. field: 'id',
  49. component: 'Input',
  50. label: 'id',
  51. show: false,
  52. colProps: {
  53. span: 20,
  54. },
  55. },
  56. {
  57. field: 'cameraSn',
  58. component: 'Input',
  59. required: true,
  60. label: '相机sn',
  61. componentProps: {
  62. maxLength: 50,
  63. onChange: (value) => {
  64. handlertkSn(value.target.value);
  65. },
  66. },
  67. colProps: {
  68. span: 20,
  69. },
  70. },
  71. {
  72. field: 'rtkType',
  73. component: 'Select',
  74. label: '板卡类型',
  75. required: true,
  76. colProps: {
  77. span: 18,
  78. },
  79. componentProps: {
  80. options: [
  81. {
  82. label: '千寻板卡千寻账号',
  83. value: 0,
  84. key: 0,
  85. },
  86. {
  87. label: '千寻板卡移动账号',
  88. value: 1,
  89. key: 1,
  90. },
  91. {
  92. label: '北云板卡移动账号',
  93. value: 2,
  94. key: 2,
  95. },
  96. ],
  97. onChange: (value) => {
  98. handlertkType(value);
  99. },
  100. },
  101. // required: true,
  102. },
  103. {
  104. field: 'rtkSnCode',
  105. component: 'Input',
  106. required: true,
  107. label: '板卡SN号',
  108. componentProps: {
  109. maxLength: 50,
  110. },
  111. rules: [
  112. {
  113. required: true,
  114. // @ts-ignore
  115. validator: (rule, value, ) => {
  116. function isSpec(s) {
  117. var pattern = /[~!@#$%^&*<>|']/gi;
  118. return pattern.test(s);
  119. }
  120. if (value != null && value !== '') {
  121. if (isSpec(value) || value.indexOf(' ') !== -1) {
  122. return Promise.reject('不能包含特殊字符或空格');
  123. } else {
  124. return Promise.resolve();
  125. }
  126. } else {
  127. return Promise.reject('不能为空');
  128. }
  129. },
  130. trigger: 'change',
  131. },
  132. ],
  133. colProps: {
  134. span: 20,
  135. },
  136. },
  137. {
  138. field: 'sgRtkSn',
  139. component: 'Input',
  140. required: false,
  141. label: '深光rtk插件SN号',
  142. componentProps: {
  143. maxLength: 50,
  144. },
  145. rules: [
  146. {
  147. required: false,
  148. // @ts-ignore
  149. validator: (rule, value) => {
  150. console.log('isValidateTxtNonSpec', value);
  151. function isSpec(s) {
  152. var pattern = /[~!@#$%^&*<>|']/gi;
  153. return pattern.test(s);
  154. }
  155. if (value != null && value !== '') {
  156. if (isSpec(value) || value.indexOf(' ') !== -1) {
  157. return Promise.reject('不能包含特殊字符或空格');
  158. } else {
  159. return Promise.resolve();
  160. }
  161. } else {
  162. return Promise.resolve();
  163. }
  164. },
  165. trigger: 'change',
  166. },
  167. ],
  168. colProps: {
  169. span: 20,
  170. },
  171. },
  172. ];
  173. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema, clearValidate }] =
  174. useForm({
  175. labelWidth: 120,
  176. schemas,
  177. showActionButtonGroup: false,
  178. actionColOptions: {
  179. span: 20,
  180. },
  181. });
  182. onMounted(() => {});
  183. let addListFunc = () => {};
  184. const [register, { closeModal }] = useModalInner((data) => {
  185. data && onDataReceive(data);
  186. });
  187. function onDataReceive(data) {
  188. modelRef.value = data;
  189. fileFlow.title = data.id ? '编辑RTK' : '新增RTK';
  190. handlertkSn(data.cameraSn ? true : false);
  191. resetFields();
  192. console.log('data', data);
  193. handlertkType(data.rtkType);
  194. setFieldsValue(data);
  195. clearValidate();
  196. }
  197. function handlertkType(val) {
  198. console.log('val', val);
  199. let ifShow = val != 0;
  200. updateSchema([
  201. { field: 'ipAddr', ifShow },
  202. { field: 'mountPoint', ifShow },
  203. { field: 'port', ifShow },
  204. { field: 'userName', ifShow },
  205. // { field: 'sgRtkSn', ifShow },
  206. { field: 'password', ifShow },
  207. { field: 'operator', ifShow },
  208. ]);
  209. }
  210. function handlertkSn(val) {
  211. console.log('handlertkSn', val);
  212. let required = !!val;
  213. !required && clearValidate();
  214. updateSchema([
  215. { field: 'cameraSn', required },
  216. // { field: 'rtkType', required },
  217. // { field: 'sgRtkSn', required },
  218. { field: 'ipAddr', required },
  219. { field: 'mountPoint', required },
  220. { field: 'port', required },
  221. { field: 'userName', required },
  222. { field: 'password', required },
  223. { field: 'operator', required },
  224. ]);
  225. }
  226. const handleSubmit = async () => {
  227. function isEmptyString(value) {
  228. return value === null || value === undefined || value === '';
  229. }
  230. try {
  231. const params = await validate();
  232. let keyData = Object.values(params).some((item) => {
  233. if (item == params.id) {
  234. return false;
  235. } else {
  236. return !isEmptyString(item);
  237. }
  238. });
  239. if (!keyData) {
  240. return createMessage.error('请填写至少一项数据');
  241. }
  242. params.rtkSnCode = params.rtkSnCode && params.rtkSnCode.trim();
  243. console.log('params', Object.values(params), keyData);
  244. const res = await rtkDevicesaveOrEdit(params);
  245. console.log('res', res);
  246. closeModal();
  247. resetFields();
  248. createMessage.success(t('common.optSuccess'));
  249. emit('update');
  250. } catch (error) {
  251. console.log('not passing', error);
  252. }
  253. };
  254. function handleVisibleChange(v) {
  255. v && props.userData && nextTick(() => onDataReceive(props.userData));
  256. }
  257. return {
  258. register,
  259. schemas,
  260. registerForm,
  261. model: modelRef,
  262. fileFlow,
  263. handleVisibleChange,
  264. handleSubmit,
  265. addListFunc,
  266. resetFields,
  267. handlertkSn,
  268. t,
  269. };
  270. },
  271. });
  272. </script>