AdduserModal.vue 8.9 KB

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