Showing
9 changed files
with
99 additions
and
182 deletions
1 | -import BasicForm from './src/BasicForm.vue'; | |
1 | +export { default as BasicForm } from './src/BasicForm.vue'; | |
2 | 2 | |
3 | 3 | export * from './src/types/form'; |
4 | 4 | export * from './src/types/formItem'; |
... | ... | @@ -22,4 +22,4 @@ export { |
22 | 22 | } from '/@/components/Form/src/externalCompns/components/JEasyCron'; |
23 | 23 | // Jeecg自定义校验 |
24 | 24 | export { JCronValidator } from '/@/components/Form/src/externalCompns/components/JEasyCron'; |
25 | -export { BasicForm }; | |
25 | +// export { BasicForm }; | ... | ... |
... | ... | @@ -38,9 +38,6 @@ import ApiSearchSelect from './components/ApiSearchSelect.vue'; |
38 | 38 | import CustomMinMaxInput from './externalCompns/components/CustomMinMaxInput.vue'; |
39 | 39 | import StructForm from './externalCompns/components/StructForm/StructForm.vue'; |
40 | 40 | import ApiSelectScrollLoad from './components/ApiSelectScrollLoad.vue'; |
41 | -import TransferModal from './components/TransferModal.vue'; | |
42 | -import TransferTableModal from './components/TransferTableModal.vue'; | |
43 | -import ObjectModelValidateForm from './externalCompns/components/ObjectModelValidateForm/ObjectModelValidateForm.vue'; | |
44 | 41 | |
45 | 42 | const componentMap = new Map<ComponentType, Component>(); |
46 | 43 | |
... | ... | @@ -86,9 +83,6 @@ componentMap.set('ApiSearchSelect', ApiSearchSelect); |
86 | 83 | componentMap.set('CustomMinMaxInput', CustomMinMaxInput); |
87 | 84 | componentMap.set('StructForm', StructForm); |
88 | 85 | componentMap.set('ApiSelectScrollLoad', ApiSelectScrollLoad); |
89 | -componentMap.set('TransferModal', TransferModal); | |
90 | -componentMap.set('TransferTableModal', TransferTableModal); | |
91 | -componentMap.set('ObjectModelValidateForm', ObjectModelValidateForm); | |
92 | 86 | |
93 | 87 | export function add(compName: ComponentType, component: Component) { |
94 | 88 | componentMap.set(compName, component); | ... | ... |
... | ... | @@ -150,7 +150,7 @@ |
150 | 150 | |
151 | 151 | const getIsFixed = computed(() => { |
152 | 152 | /* eslint-disable-next-line */ |
153 | - mixSideHasChildren.value = unref(childrenMenus).length > 0;interfaceDisplay | |
153 | + mixSideHasChildren.value = unref(childrenMenus).length > 0; | |
154 | 154 | const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren); |
155 | 155 | if (isFixed) { |
156 | 156 | /* eslint-disable-next-line */ | ... | ... |
... | ... | @@ -120,7 +120,7 @@ export class VAxios { |
120 | 120 | if (userStore && userStore.jwtToken) { |
121 | 121 | try { |
122 | 122 | const res = jwt_decode(userStore.jwtToken) as JwtModel; |
123 | - const currentTime = new Date().getTime() / 1000; | |
123 | + const currentTime = (new Date().getTime() + (config.timeout || 0)) / 1000; | |
124 | 124 | if (currentTime >= res.exp && this.isNeedTokenURL(config.url)) { |
125 | 125 | await this.refreshTokenBeforeReq(userStore.doRefresh); |
126 | 126 | } | ... | ... |
... | ... | @@ -182,7 +182,7 @@ |
182 | 182 | </div> |
183 | 183 | </template> |
184 | 184 | <script lang="ts"> |
185 | - import { defineComponent, reactive, unref, nextTick, h, onUnmounted, ref } from 'vue'; | |
185 | + import { defineComponent, reactive, unref, h, onMounted } from 'vue'; | |
186 | 186 | import { |
187 | 187 | DeviceModel, |
188 | 188 | DeviceRecord, |
... | ... | @@ -216,7 +216,7 @@ |
216 | 216 | import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; |
217 | 217 | import { QuestionCircleOutlined } from '@ant-design/icons-vue'; |
218 | 218 | import { Authority } from '/@/components/Authority'; |
219 | - import { useRouter } from 'vue-router'; | |
219 | + import { useRoute, useRouter } from 'vue-router'; | |
220 | 220 | import { useBatchOperation } from '/@/utils/useBatchOperation'; |
221 | 221 | |
222 | 222 | export default defineComponent({ |
... | ... | @@ -243,7 +243,7 @@ |
243 | 243 | const { createMessage } = useMessage(); |
244 | 244 | const go = useGo(); |
245 | 245 | const ROUTER = useRouter(); |
246 | - const immediateStatus = ref(false); | |
246 | + const ROUTE = useRoute(); | |
247 | 247 | const searchInfo = reactive<Recordable>({}); |
248 | 248 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); |
249 | 249 | const [registerModal, { openModal }] = useModal(); |
... | ... | @@ -259,9 +259,7 @@ |
259 | 259 | reload, |
260 | 260 | setLoading, |
261 | 261 | setSelectedRowKeys, |
262 | - setTableData, | |
263 | 262 | getForm, |
264 | - setPagination, | |
265 | 263 | getSelectRowKeys, |
266 | 264 | getSelectRows, |
267 | 265 | getRowSelection, |
... | ... | @@ -269,17 +267,13 @@ |
269 | 267 | ] = useTable({ |
270 | 268 | title: '设备列表', |
271 | 269 | api: devicePage, |
272 | - immediate: immediateStatus.value, | |
273 | 270 | columns, |
274 | 271 | beforeFetch: (params) => { |
275 | 272 | const { deviceProfileId } = params; |
276 | 273 | const obj = { |
277 | 274 | ...params, |
278 | 275 | ...{ |
279 | - deviceProfileIds: | |
280 | - deviceProfileId === undefined || deviceProfileId === null || deviceProfileId == '' | |
281 | - ? null | |
282 | - : [deviceProfileId], | |
276 | + deviceProfileIds: deviceProfileId ? [deviceProfileId] : null, | |
283 | 277 | }, |
284 | 278 | }; |
285 | 279 | delete obj.deviceProfileId; |
... | ... | @@ -313,54 +307,6 @@ |
313 | 307 | |
314 | 308 | const { isExistOption } = useBatchOperation(getRowSelection, setSelectedRowKeys); |
315 | 309 | |
316 | - function getParams(keyword) { | |
317 | - const reg = new RegExp('(^|&)' + keyword + '=([^&]*)(&|$)', 'i'); | |
318 | - const r = window.location.search.substr(1).match(reg); | |
319 | - if (r != null) return unescape(r[2]); | |
320 | - return null; //注意此处参数是中文,解码使用的方法是unescape ,那么在传值的时候如果是中文,需要使用escape('曲浩')方法来编码。 | |
321 | - } | |
322 | - | |
323 | - const count = ref(0); | |
324 | - const onCloseVal = ref(0); | |
325 | - const deviceProfileId = ref(''); | |
326 | - count.value = Number(getParams('count')); | |
327 | - deviceProfileId.value = getParams('deviceProfileId') || ''; | |
328 | - const setRowClassName = async () => { | |
329 | - if (deviceProfileId.value !== undefined) { | |
330 | - const { items, total } = await devicePage({ | |
331 | - page: 1, | |
332 | - pageSize: count.value === 0 ? 10 : count.value, | |
333 | - deviceProfileIds: | |
334 | - deviceProfileId.value === undefined || | |
335 | - deviceProfileId.value === null || | |
336 | - deviceProfileId.value == '' | |
337 | - ? null | |
338 | - : [deviceProfileId.value], | |
339 | - }); | |
340 | - setPagination({ total }); | |
341 | - nextTick(() => { | |
342 | - setTableData(items); | |
343 | - const { setFieldsValue, resetFields } = getForm(); | |
344 | - setFieldsValue({ | |
345 | - deviceProfileId: deviceProfileId.value || null, | |
346 | - }); | |
347 | - if (onCloseVal.value == 1) { | |
348 | - resetFields(); | |
349 | - } | |
350 | - }); | |
351 | - } else { | |
352 | - setTimeout(() => { | |
353 | - reload(); | |
354 | - }, 80); | |
355 | - } | |
356 | - }; | |
357 | - setRowClassName(); | |
358 | - onUnmounted(() => { | |
359 | - deviceProfileId.value = ''; | |
360 | - count.value = 10; | |
361 | - onCloseVal.value = 1; | |
362 | - }); | |
363 | - | |
364 | 310 | const userInfo: any = getAuthCache(USER_INFO_KEY); |
365 | 311 | const role: string = userInfo.roles[0]; |
366 | 312 | |
... | ... | @@ -494,6 +440,11 @@ |
494 | 440 | reload(); |
495 | 441 | }; |
496 | 442 | |
443 | + onMounted(() => { | |
444 | + const queryParams = ROUTE.query as Record<'deviceProfileId', undefined | string>; | |
445 | + const { setFieldsValue } = getForm(); | |
446 | + setFieldsValue({ deviceProfileId: queryParams.deviceProfileId }); | |
447 | + }); | |
497 | 448 | return { |
498 | 449 | registerTable, |
499 | 450 | handleCreate, | ... | ... |
... | ... | @@ -50,6 +50,12 @@ |
50 | 50 | import { postAddConvertApi } from '/@/api/datamanager/dataManagerApi'; |
51 | 51 | import { useMessage } from '/@/hooks/web/useMessage'; |
52 | 52 | import { Button } from '/@/components/Button'; |
53 | + import { add } from '/@/components/Form/src/componentMap'; | |
54 | + import TransferModal from '/@/components/Form/src/components/TransferModal.vue'; | |
55 | + import TransferTableModal from '/@/components/Form/src/components/TransferTableModal.vue'; | |
56 | + | |
57 | + add('TransferModal', TransferModal); | |
58 | + add('TransferTableModal', TransferTableModal); | |
53 | 59 | |
54 | 60 | export default defineComponent({ |
55 | 61 | name: 'ConfigDrawer', | ... | ... |
... | ... | @@ -127,6 +127,10 @@ |
127 | 127 | import Action from './cpns/Action.vue'; |
128 | 128 | import { findOperation } from './config/formatData'; |
129 | 129 | import { formatToDateTime } from '/@/utils/dateUtil'; |
130 | + import ObjectModelValidateForm from '/@/components/Form/src/externalCompns/components/ObjectModelValidateForm/ObjectModelValidateForm.vue'; | |
131 | + import { add } from '/@/components/Form/src/componentMap'; | |
132 | + | |
133 | + add('ObjectModelValidateForm', ObjectModelValidateForm); | |
130 | 134 | |
131 | 135 | const emit = defineEmits(['register', 'success']); |
132 | 136 | const provideOrgid = ref(''); | ... | ... |
... | ... | @@ -2,6 +2,13 @@ import type { FormSchema } from '/@/components/Form/index'; |
2 | 2 | import { getAreaList } from '/@/api/oem/index'; |
3 | 3 | import { emailRule, phoneRule } from '/@/utils/rules'; |
4 | 4 | |
5 | +export enum Level { | |
6 | + PROVINCE = 'PROVINCE', | |
7 | + CITY = 'CITY', | |
8 | + COUNTY = 'COUNTY', | |
9 | + TOWN = 'TOWN', | |
10 | +} | |
11 | + | |
5 | 12 | export const schemas: FormSchema[] = [ |
6 | 13 | { |
7 | 14 | field: 'name', |
... | ... | @@ -201,150 +208,104 @@ export const provSchemas: FormSchema[] = [ |
201 | 208 | colProps: { |
202 | 209 | span: 6, |
203 | 210 | }, |
204 | - componentProps({ formModel, formActionType }) { | |
205 | - const { updateSchema } = formActionType; | |
211 | + componentProps({ formActionType }) { | |
212 | + const { setFieldsValue } = formActionType; | |
206 | 213 | return { |
207 | 214 | api: getAreaList, |
208 | 215 | labelField: 'name', |
209 | 216 | valueField: 'code', |
210 | 217 | placeholder: '省份', |
211 | - params: { parentId: 1 }, | |
212 | - async onChange(value) { | |
213 | - if (value === undefined) { | |
214 | - formModel.nameCity = undefined; // reset city value | |
215 | - formModel.nameCoun = undefined; | |
216 | - formModel.nameTown = undefined; | |
217 | - updateSchema([ | |
218 | - { | |
219 | - field: 'nameCity', | |
220 | - componentProps: { | |
221 | - options: [], | |
222 | - placeholder: '城市', | |
223 | - }, | |
224 | - }, | |
225 | - { | |
226 | - field: 'nameCoun', | |
227 | - componentProps: { | |
228 | - options: [], | |
229 | - placeholder: '区/县', | |
230 | - }, | |
231 | - }, | |
232 | - { | |
233 | - field: 'nameTown', | |
234 | - componentProps: { | |
235 | - options: [], | |
236 | - placeholder: '城镇/街道', | |
237 | - }, | |
238 | - }, | |
239 | - ]); | |
240 | - } else { | |
241 | - const nameCity = await getAreaList({ parentId: value }); | |
242 | - nameCity.forEach((item) => { | |
243 | - item.label = item.name; | |
244 | - item.value = item.code; | |
245 | - }); | |
246 | - formModel.nameCity = undefined; // reset city value | |
247 | - formModel.nameCoun = undefined; | |
248 | - formModel.nameTown = undefined; | |
249 | - updateSchema({ | |
250 | - field: 'nameCity', | |
251 | - componentProps: { | |
252 | - options: nameCity, | |
253 | - placeholder: '城市', | |
254 | - async onChange(value) { | |
255 | - if (value === undefined) { | |
256 | - formModel.nameCoun = undefined; // reset city value | |
257 | - formModel.nameTown = undefined; | |
258 | - updateSchema([ | |
259 | - { | |
260 | - field: 'nameCoun', | |
261 | - componentProps: { | |
262 | - options: [], | |
263 | - }, | |
264 | - }, | |
265 | - { | |
266 | - field: 'nameTown', | |
267 | - componentProps: { | |
268 | - options: [], | |
269 | - }, | |
270 | - }, | |
271 | - ]); | |
272 | - } else { | |
273 | - // 获取区数据 | |
274 | - const nameCoun = await getAreaList({ parentId: value }); | |
275 | - nameCoun.forEach((item) => { | |
276 | - item.label = item.name; | |
277 | - item.value = item.code; | |
278 | - }); | |
279 | - updateSchema({ | |
280 | - field: 'nameCoun', | |
281 | - componentProps: { | |
282 | - // 请选择区 | |
283 | - options: nameCoun, | |
284 | - async onChange(value) { | |
285 | - if (value === undefined) { | |
286 | - formModel.nameTown = undefined; | |
287 | - updateSchema({ | |
288 | - field: 'nameTown', | |
289 | - componentProps: { | |
290 | - placeholder: '城镇/街道', | |
291 | - options: [], | |
292 | - }, | |
293 | - }); | |
294 | - } else { | |
295 | - const nameTown = await getAreaList({ parentId: value }); | |
296 | - nameTown.forEach((item) => { | |
297 | - item.label = item.name; | |
298 | - item.value = item.code; | |
299 | - }); | |
300 | - updateSchema({ | |
301 | - field: 'nameTown', | |
302 | - componentProps: { | |
303 | - placeholder: '城镇/街道', | |
304 | - options: nameTown, | |
305 | - }, | |
306 | - }); | |
307 | - } | |
308 | - }, | |
309 | - }, | |
310 | - }); | |
311 | - } | |
312 | - }, | |
313 | - }, | |
314 | - }); | |
315 | - } | |
218 | + params: { parentId: 1, level: Level.PROVINCE }, | |
219 | + onChange: () => { | |
220 | + setFieldsValue({ nameCity: null, nameCoun: null, nameTown: null }); | |
316 | 221 | }, |
317 | 222 | }; |
318 | 223 | }, |
319 | 224 | }, |
320 | 225 | { |
321 | 226 | field: 'nameCity', |
322 | - component: 'Select', | |
227 | + component: 'ApiSelect', | |
323 | 228 | label: '', |
324 | 229 | colProps: { |
325 | 230 | span: 6, |
326 | 231 | }, |
232 | + componentProps: ({ formActionType, formModel }) => { | |
233 | + const nameProv = Reflect.get(formModel, 'nameProv'); | |
234 | + const { setFieldsValue } = formActionType; | |
235 | + return { | |
236 | + api: async (params: Recordable) => { | |
237 | + try { | |
238 | + if (!nameProv) return; | |
239 | + const result = await getAreaList(params); | |
240 | + return result; | |
241 | + } catch (error) { | |
242 | + return []; | |
243 | + } | |
244 | + }, | |
245 | + labelField: 'name', | |
246 | + valueField: 'code', | |
247 | + placeholder: '城市', | |
248 | + params: { parentId: nameProv, level: Level.CITY }, | |
249 | + onChange: () => { | |
250 | + setFieldsValue({ nameCoun: null, nameTown: null }); | |
251 | + }, | |
252 | + }; | |
253 | + }, | |
327 | 254 | }, |
328 | 255 | { |
329 | 256 | field: 'nameCoun', |
330 | - component: 'Select', | |
257 | + component: 'ApiSelect', | |
331 | 258 | label: '', |
332 | 259 | colProps: { |
333 | 260 | span: 6, |
334 | 261 | }, |
335 | - componentProps: { | |
336 | - placeholder: '区/县', | |
262 | + componentProps: ({ formActionType, formModel }) => { | |
263 | + const nameCity = Reflect.get(formModel, 'nameCity'); | |
264 | + const { setFieldsValue } = formActionType; | |
265 | + return { | |
266 | + api: async (params: Recordable) => { | |
267 | + try { | |
268 | + if (!nameCity) return; | |
269 | + const result = await getAreaList(params); | |
270 | + return result; | |
271 | + } catch (error) { | |
272 | + return []; | |
273 | + } | |
274 | + }, | |
275 | + labelField: 'name', | |
276 | + valueField: 'code', | |
277 | + placeholder: '区/县', | |
278 | + params: { parentId: nameCity, level: Level.COUNTY }, | |
279 | + onChange: () => { | |
280 | + setFieldsValue({ nameTown: null }); | |
281 | + }, | |
282 | + }; | |
337 | 283 | }, |
338 | 284 | }, |
339 | 285 | { |
340 | 286 | field: 'nameTown', |
341 | - component: 'Select', | |
287 | + component: 'ApiSelect', | |
342 | 288 | label: '', |
343 | 289 | colProps: { |
344 | 290 | span: 6, |
345 | 291 | }, |
346 | - componentProps: { | |
347 | - placeholder: '城镇/街道', | |
292 | + componentProps: ({ formModel }) => { | |
293 | + const nameCoun = Reflect.get(formModel, 'nameCoun'); | |
294 | + return { | |
295 | + api: async (params: Recordable) => { | |
296 | + try { | |
297 | + if (!nameCoun) return; | |
298 | + const result = await getAreaList(params); | |
299 | + return result; | |
300 | + } catch (error) { | |
301 | + return []; | |
302 | + } | |
303 | + }, | |
304 | + labelField: 'name', | |
305 | + valueField: 'code', | |
306 | + placeholder: '城镇/街道', | |
307 | + params: { parentId: nameCoun, level: Level.TOWN }, | |
308 | + }; | |
348 | 309 | }, |
349 | 310 | }, |
350 | 311 | ]; | ... | ... |
... | ... | @@ -66,6 +66,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { |
66 | 66 | build: { |
67 | 67 | target: 'es2015', |
68 | 68 | outDir: OUTPUT_DIR, |
69 | + // minify: 'terser', // The minify mode is set to use terser to remove console | |
69 | 70 | terserOptions: { |
70 | 71 | compress: { |
71 | 72 | keep_infinity: true, | ... | ... |