AdduserModal.vue 9.9 KB

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