AddModal.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  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 { rtkaccountFormSchema } from './data';
  26. import { rtkDevicesaveOrEdit } from '/@/api/rtk/index';
  27. import { useI18n } from '/@/hooks/web/useI18n';
  28. import { useUserStore } from '/@/store/modules/user';
  29. import moment from 'moment';
  30. const { t } = useI18n();
  31. export default defineComponent({
  32. components: { BasicModal, BasicForm },
  33. props: {
  34. userData: { type: Object },
  35. },
  36. emits: ['update', 'register'],
  37. setup(props, { emit }) {
  38. const userStore = useUserStore();
  39. const iseur = userStore.isEnv;
  40. const modelRef = ref({
  41. operator: '中国移动',
  42. ipAddr: '120.253.239.161',
  43. mountPoint: 'RTCM33_GRCEJ',
  44. port: '8001',
  45. });
  46. const fileFlow = reactive({
  47. file: null,
  48. title: '新增RTK账号',
  49. });
  50. let disabledDate = (current: any) => {
  51. return current && current < moment().subtract(1, 'days').endOf('day');
  52. };
  53. let range = (start: any, end: any) => {
  54. const result = [];
  55. for (let i = start; i < end; i++) {
  56. result.push(i);
  57. }
  58. return result;
  59. };
  60. let disabledDateTime = (current: any) => {
  61. if (current) {
  62. let today = moment().date();
  63. if (today == current.date()) {
  64. let minute = Number(moment().minutes());
  65. let hour = Number(moment().hour());
  66. let finalHour: number, finalMinute: number;
  67. console.log('today', minute, current.hour(), hour);
  68. // if (current.hour() > hour) {
  69. // finalMinute = 0;
  70. // } else {
  71. if (current.minute() >= 58) {
  72. finalHour = hour + 1;
  73. finalMinute = 0;
  74. } else {
  75. finalHour = hour;
  76. finalMinute = minute + 5;
  77. }
  78. // }
  79. console.log('today', finalHour, finalMinute);
  80. return {
  81. disabledHours: () => range(0, finalHour),
  82. disabledMinutes: () => range(0, finalMinute),
  83. };
  84. } else if (moment() > current) {
  85. return {
  86. disabledHours: () => range(0, 24),
  87. disabledMinutes: () => range(0, 60),
  88. disabledSeconds: () => range(0, 60),
  89. };
  90. }
  91. } else {
  92. return {
  93. disabledHours: () => range(0, 24),
  94. disabledMinutes: () => range(0, 60),
  95. disabledSeconds: () => range(0, 60),
  96. };
  97. }
  98. };
  99. const { createMessage } = useMessage();
  100. const schemas: FormSchema[] = [
  101. {
  102. field: 'id',
  103. component: 'Input',
  104. label: 'id',
  105. show: false,
  106. colProps: {
  107. span: 18,
  108. },
  109. },
  110. {
  111. field: 'cameraType',
  112. component: 'Select',
  113. label: '设备类型',
  114. required: true,
  115. defaultValue: 1,
  116. colProps: {
  117. span: 18,
  118. },
  119. componentProps: {
  120. options: [
  121. {
  122. label: '四维看见',
  123. value: 1,
  124. key: 1,
  125. },
  126. {
  127. label: '四维深时',
  128. value: 2,
  129. key: 2,
  130. },
  131. {
  132. label: '四维深光',
  133. value: 3,
  134. key: 3,
  135. },
  136. ],
  137. onChange: (value) => {
  138. handleCarmanType(value);
  139. },
  140. },
  141. // required: true,
  142. },
  143. {
  144. field: 'cameraSn',
  145. component: 'Input',
  146. required: true,
  147. label: '相机sn',
  148. componentProps: {
  149. maxLength: 50,
  150. onChange: (value) => {
  151. // handlertkSn(value.target.value);
  152. },
  153. },
  154. colProps: {
  155. span: 18,
  156. },
  157. },
  158. {
  159. field: 'rtkType',
  160. component: 'Select',
  161. label: '板卡类型',
  162. required: true,
  163. colProps: {
  164. span: 18,
  165. },
  166. componentProps: {
  167. options: [
  168. {
  169. label: '千寻板卡',
  170. value: 1,
  171. key: 1,
  172. },
  173. {
  174. label: '北云板卡',
  175. value: 2,
  176. key: 2,
  177. },
  178. ],
  179. onChange: (value) => {
  180. // if(value == 0){
  181. // handlertkuserType(1);
  182. // }
  183. handlertkType(value);
  184. },
  185. },
  186. // required: true,
  187. },
  188. {
  189. field: 'rtkSnCode',
  190. component: 'Input',
  191. required: true,
  192. label: '板卡SN号',
  193. componentProps: {
  194. maxLength: 50,
  195. },
  196. rules: [
  197. {
  198. required: true,
  199. // @ts-ignore
  200. validator: (rule, value) => {
  201. function isSpec(s) {
  202. var pattern = /[~!@#$%^&*<>|']/gi;
  203. return pattern.test(s);
  204. }
  205. if (value != null && value !== '') {
  206. if (isSpec(value) || value.indexOf(' ') !== -1) {
  207. return Promise.reject('不能包含特殊字符或空格');
  208. } else {
  209. return Promise.resolve();
  210. }
  211. } else {
  212. return Promise.reject('不能为空');
  213. }
  214. },
  215. trigger: 'change',
  216. },
  217. ],
  218. colProps: {
  219. span: 18,
  220. },
  221. },
  222. {
  223. field: 'sgRtkSn',
  224. component: 'Input',
  225. required: true,
  226. label: '深光rtk插件SN号',
  227. ifShow: false,
  228. componentProps: {
  229. maxLength: 50,
  230. },
  231. rules: [
  232. {
  233. required: true,
  234. // @ts-ignore
  235. validator: (rule, value) => {
  236. console.log('isValidateTxtNonSpec', value);
  237. function isSpec(s) {
  238. var pattern = /[~!@#$%^&*<>|']/gi;
  239. return pattern.test(s);
  240. }
  241. if (!value) {
  242. return Promise.reject('请输入深光rtk插件SN号');
  243. }
  244. if (value != null && value !== '') {
  245. if (isSpec(value) || value.indexOf(' ') !== -1) {
  246. return Promise.reject('不能包含特殊字符或空格');
  247. } else {
  248. return Promise.resolve();
  249. }
  250. } else {
  251. return Promise.resolve();
  252. }
  253. },
  254. trigger: 'change',
  255. },
  256. ],
  257. colProps: {
  258. span: 18,
  259. },
  260. },
  261. {
  262. field: 'accountType',
  263. component: 'Select',
  264. label: '账号类型',
  265. required: true,
  266. colProps: {
  267. span: 18,
  268. },
  269. componentProps: {
  270. options: [
  271. {
  272. label: '账号池(不限期)',
  273. value: 0,
  274. key: 0,
  275. },
  276. {
  277. label: '账号池(限期)',
  278. value: 2,
  279. key: 2,
  280. },
  281. {
  282. label: '专用账号',
  283. value: 1,
  284. key: 1,
  285. },
  286. ],
  287. onChange: (value) => {
  288. handlertkuserType(value);
  289. },
  290. },
  291. // required: true,
  292. },
  293. ];
  294. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema, clearValidate }] =
  295. useForm({
  296. labelWidth: 120,
  297. schemas: [
  298. ...schemas,
  299. ...rtkaccountFormSchema,
  300. {
  301. field: 'failureTime',
  302. component: 'DatePicker',
  303. label: '到期日期',
  304. ifShow: false,
  305. colProps: {
  306. span: 16,
  307. },
  308. componentProps: {
  309. disabledDate: disabledDate,
  310. disabledTime: disabledDateTime,
  311. showTime: { defaultValue: moment('23:59:59', 'HH:mm:ss') },
  312. valueFormat: 'YYYY-MM-DD HH:mm:ss',
  313. // defaultValue: dayjs().add(7, 'day').format('YYYY-MM-DD') + ' 23:59:59',
  314. format: 'YYYY-MM-DD HH:mm:ss',
  315. },
  316. },
  317. ],
  318. showActionButtonGroup: false,
  319. actionColOptions: {
  320. span: 18,
  321. },
  322. });
  323. onMounted(() => {});
  324. let addListFunc = () => {};
  325. const [register, { closeModal }] = useModalInner((data) => {
  326. data && onDataReceive(data);
  327. });
  328. let tg = false
  329. function onDataReceive(data) {
  330. modelRef.value = data;
  331. fileFlow.title = data.id ? '编辑RTK' : '新增RTK';
  332. // handlertkSn(data.cameraSn ? true : false);
  333. resetFields();
  334. console.log('data', data);
  335. tg = data.rtkType != 0 && data.accountType == 1 ? true : false
  336. handleCarmanType(data.cameraType != null ? data.cameraType : 1);
  337. handlertkType(data.rtkType != null ? data.rtkType : 1);
  338. data.rtkType != 0 && handlertkuserType(data.accountType != null ? data.accountType : 0);
  339. setFieldsValue(data);
  340. clearValidate();
  341. }
  342. function handlertkType(val) {
  343. console.log('handlertkType', val);
  344. let upload = [
  345. { field: 'accountType', ifShow: val != 0 },
  346. { field: 'failureTime', ifShow: val == 0 },
  347. ]
  348. setFieldsValue({
  349. accountType: null
  350. })
  351. let ifShow = tg || false
  352. // let ifShow = false
  353. upload.push(
  354. ...[
  355. { field: 'ipAddr', ifShow },
  356. { field: 'mountPoint', ifShow },
  357. { field: 'port', ifShow },
  358. { field: 'userName', ifShow },
  359. { field: 'password', ifShow },
  360. { field: 'operator', ifShow },
  361. ]
  362. )
  363. updateSchema(upload);
  364. tg = false
  365. }
  366. function handlertkuserType(val) {
  367. console.log('handlertkuserType', val);
  368. let ifShow = val == 1;
  369. updateSchema([
  370. { field: 'ipAddr', ifShow },
  371. { field: 'mountPoint', ifShow },
  372. { field: 'port', ifShow },
  373. { field: 'userName', ifShow },
  374. // { field: 'sgRtkSn', ifShow },
  375. // { field: 'failureTime', ifShow: val == 0 && !iseur },
  376. { field: 'password', ifShow },
  377. { field: 'operator', ifShow },
  378. { field: 'failureTime', ifShow },
  379. ]);
  380. }
  381. function handleCarmanType(val) {
  382. let ifShow = val == 3;
  383. updateSchema([
  384. { field: 'sgRtkSn', ifShow },
  385. { field: 'cameraSn', required: val != 3 },
  386. ]);
  387. }
  388. function handlertkSn(val) {
  389. console.log('handlertkSn', val);
  390. let required = !!val;
  391. !required && clearValidate();
  392. updateSchema([
  393. { field: 'cameraSn', required },
  394. // { field: 'rtkType', required },
  395. { field: 'sgRtkSn', required },
  396. { field: 'ipAddr', required },
  397. { field: 'mountPoint', required },
  398. { field: 'port', required },
  399. { field: 'userName', required },
  400. { field: 'password', required },
  401. { field: 'operator', required },
  402. ]);
  403. }
  404. const handleSubmit = async () => {
  405. function isEmptyString(value) {
  406. return value === null || value === undefined || value === '';
  407. }
  408. try {
  409. const params = await validate();
  410. let keyData = Object.values(params).some((item) => {
  411. if (item == params.id) {
  412. return false;
  413. } else {
  414. return !isEmptyString(item);
  415. }
  416. });
  417. if (!keyData) {
  418. return createMessage.error('请填写至少一项数据');
  419. }
  420. params.rtkSnCode = params.rtkSnCode && params.rtkSnCode.trim();
  421. console.log('params', Object.values(params), keyData);
  422. const res = await rtkDevicesaveOrEdit(params);
  423. console.log('res', res);
  424. closeModal();
  425. resetFields();
  426. createMessage.success(t('common.optSuccess'));
  427. emit('update');
  428. } catch (error) {
  429. console.log('not passing', error);
  430. }
  431. };
  432. function handleVisibleChange(v) {
  433. v && props.userData && nextTick(() => onDataReceive(props.userData));
  434. }
  435. return {
  436. register,
  437. schemas,
  438. registerForm,
  439. model: modelRef,
  440. fileFlow,
  441. handleVisibleChange,
  442. handleSubmit,
  443. addListFunc,
  444. resetFields,
  445. handlertkSn,
  446. t,
  447. };
  448. },
  449. });
  450. </script>