AddModal.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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, rtksaveOrEdit } from '/@/api/product/index';
  25. import { useI18n } from '/@/hooks/web/useI18n';
  26. const { t } = useI18n();
  27. export default defineComponent({
  28. components: { BasicModal, BasicForm },
  29. props: {
  30. userData: { type: Object },
  31. },
  32. emits: ['update', 'register'],
  33. setup(props, { emit }) {
  34. const modelRef = ref({
  35. operator: '中国移动',
  36. ipAddr: '120.253.239.161',
  37. mountPoint: 'RTCM33_GRCEJ',
  38. port: '8001',
  39. });
  40. const fileFlow = reactive({
  41. file: null,
  42. title: '新增RTK账号',
  43. });
  44. const { createMessage } = useMessage();
  45. const schemas: FormSchema[] = [
  46. {
  47. field: 'id',
  48. component: 'Input',
  49. label: 'id',
  50. show: false,
  51. colProps: {
  52. span: 20,
  53. },
  54. },
  55. {
  56. field: 'cameraSnCode',
  57. component: 'Input',
  58. required: true,
  59. label: '相机sn',
  60. componentProps: {
  61. maxLength: 50,
  62. onChange: (value) => {handlertkSn(value.target.value);},
  63. },
  64. colProps: {
  65. span: 20,
  66. },
  67. },
  68. {
  69. field: 'rtkType',
  70. component: 'Select',
  71. label: '板卡类型',
  72. required: true,
  73. colProps: {
  74. span: 20,
  75. },
  76. componentProps: {
  77. options: [
  78. {
  79. label: '千寻板卡千寻账号',
  80. value: 0,
  81. key: 0,
  82. },
  83. {
  84. label: '千寻板卡移动账号',
  85. value: 1,
  86. key: 1,
  87. },
  88. {
  89. label: '北云板卡移动账号',
  90. value: 2,
  91. key: 2,
  92. },
  93. ],
  94. onChange: (value) => {
  95. handlertkType(value);
  96. },
  97. },
  98. // required: true,
  99. },
  100. {
  101. field: 'rtkSnCode',
  102. component: 'Input',
  103. required: true,
  104. label: '板卡sn号',
  105. componentProps: {
  106. maxLength: 50,
  107. },
  108. colProps: {
  109. span: 20,
  110. },
  111. },
  112. {
  113. field: 'sgTtkSn',
  114. component: 'Input',
  115. required: true,
  116. label: '深光rtk插件sn',
  117. componentProps: {
  118. maxLength: 50,
  119. },
  120. colProps: {
  121. span: 20,
  122. },
  123. },
  124. {
  125. field: 'operator',
  126. component: 'Input',
  127. required: true,
  128. label: '运营商',
  129. defaultValue: '中国移动',
  130. componentProps: {
  131. maxLength: 50,
  132. },
  133. colProps: {
  134. span: 20,
  135. },
  136. },
  137. {
  138. field: 'ipAddr',
  139. component: 'Input',
  140. label: 'IP地址',
  141. ifShow: false,
  142. required: true,
  143. defaultValue: '120.253.239.161',
  144. colProps: {
  145. span: 20,
  146. },
  147. // rules: [
  148. // {
  149. // required: true,
  150. // // @ts-ignore
  151. // validator: async (rule, value) => {
  152. // if (!value) {
  153. // return Promise.reject('请输入IP地址');
  154. // }
  155. // if (/.*[\u4e00-\u9fa5]+.*$/.test(value)) {
  156. // /* eslint-disable-next-line */
  157. // return Promise.reject('不支持中文字符');
  158. // }
  159. // return Promise.resolve();
  160. // },
  161. // trigger: 'change',
  162. // },
  163. // ],
  164. componentProps: {
  165. maxLength: 50,
  166. onChange: (data) => {
  167. console.log('data', data);
  168. },
  169. },
  170. },
  171. {
  172. field: 'mountPoint',
  173. component: 'Input',
  174. required: true,
  175. label: '挂载点',
  176. defaultValue: 'RTCM33_GRCEJ',
  177. componentProps: {
  178. maxLength: 50,
  179. },
  180. colProps: {
  181. span: 20,
  182. },
  183. },
  184. {
  185. field: 'port',
  186. component: 'Input',
  187. required: true,
  188. label: '端口',
  189. defaultValue: '8001',
  190. componentProps: {
  191. maxLength: 50,
  192. },
  193. colProps: {
  194. span: 20,
  195. },
  196. },
  197. {
  198. field: 'userName',
  199. component: 'Input',
  200. required: true,
  201. label: '用户名称',
  202. componentProps: {
  203. maxLength: 50,
  204. },
  205. colProps: {
  206. span: 20,
  207. },
  208. },
  209. {
  210. field: 'password',
  211. component: 'Input',
  212. label: '密码',
  213. required: true,
  214. componentProps: {
  215. maxLength: 50,
  216. 'v-model:visible': false,
  217. // readonly:preventAutoFill.value,
  218. placeholder: '请输入数字、字母大小写组合',
  219. },
  220. colProps: { span: 20 },
  221. },
  222. ];
  223. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema, clearValidate }] = useForm({
  224. labelWidth: 120,
  225. schemas,
  226. showActionButtonGroup: false,
  227. actionColOptions: {
  228. span: 20,
  229. },
  230. });
  231. onMounted(() => {});
  232. let addListFunc = () => {};
  233. const [register, { closeModal }] = useModalInner((data) => {
  234. data && onDataReceive(data);
  235. });
  236. function onDataReceive(data) {
  237. modelRef.value = data;
  238. fileFlow.title = data.id ? '编辑RTK账号' : '新增RTK账号';
  239. handlertkSn(data.cameraSnCode ? true : false )
  240. resetFields();
  241. console.log('data', data);
  242. handlertkType(data.rtkType)
  243. setFieldsValue(data);
  244. clearValidate();
  245. }
  246. function handlertkType(val) {
  247. console.log('val', val);
  248. let ifShow = val != 0;
  249. updateSchema([
  250. { field: 'ipAddr', ifShow },
  251. { field: 'mountPoint', ifShow },
  252. { field: 'port', ifShow },
  253. { field: 'userName', ifShow },
  254. { field: 'sgTtkSn', ifShow },
  255. { field: 'password', ifShow },
  256. { field: 'operator', ifShow },
  257. ]);
  258. }
  259. function handlertkSn(val) {
  260. console.log('handlertkSn', val);
  261. let required = !!val;
  262. !required && clearValidate()
  263. updateSchema([
  264. { field: 'cameraSnCode', required },
  265. { field: 'rtkType', required },
  266. { field: 'rtkSnCode', required },
  267. { field: 'sgTtkSn', required },
  268. { field: 'ipAddr', required },
  269. { field: 'mountPoint', required },
  270. { field: 'port', required },
  271. { field: 'userName', required },
  272. { field: 'password', required },
  273. { field: 'operator', required },
  274. ]);
  275. }
  276. const handleSubmit = async () => {
  277. function isEmptyString(value) {
  278. return value === null || value === undefined || value === '';
  279. }
  280. try {
  281. const params = await validate();
  282. let keyData = Object.values(params).some((item) => {
  283. if( item == params.id ){
  284. return false
  285. } else {
  286. return !isEmptyString(item);
  287. }
  288. });
  289. if (!keyData){
  290. return createMessage.error('请填写至少一项数据')
  291. }
  292. params.rtkSnCode = params.rtkSnCode && params.rtkSnCode.trim()
  293. console.log('params', Object.values(params), keyData);
  294. const res = await rtksaveOrEdit(params);
  295. console.log('res', res);
  296. closeModal();
  297. resetFields();
  298. createMessage.success(t('common.optSuccess'));
  299. emit('update');
  300. } catch (error) {
  301. console.log('not passing', error);
  302. }
  303. };
  304. function handleVisibleChange(v) {
  305. v && props.userData && nextTick(() => onDataReceive(props.userData));
  306. }
  307. return {
  308. register,
  309. schemas,
  310. registerForm,
  311. model: modelRef,
  312. fileFlow,
  313. handleVisibleChange,
  314. handleSubmit,
  315. addListFunc,
  316. resetFields,
  317. handlertkSn,
  318. t,
  319. };
  320. },
  321. });
  322. </script>