remaining.ts 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673
  1. import { Layout } from '@/utils/routerHelper'
  2. const { t } = useI18n()
  3. /**
  4. * redirect: noredirect 当设置 noredirect 的时候该路由在面包屑导航中不可被点击
  5. * name:'router-name' 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
  6. * meta : {
  7. hidden: true 当设置 true 的时候该路由不会再侧边栏出现 如404,login等页面(默认 false)
  8. alwaysShow: true 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式,
  9. 只有一个时,会将那个子路由当做根路由显示在侧边栏,
  10. 若你想不管路由下面的 children 声明的个数都显示你的根路由,
  11. 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,
  12. 一直显示根路由(默认 false)
  13. title: 'title' 设置该路由在侧边栏和面包屑中展示的名字
  14. icon: 'svg-name' 设置该路由的图标
  15. noCache: true 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
  16. breadcrumb: false 如果设置为false,则不会在breadcrumb面包屑中显示(默认 true)
  17. affix: true 如果设置为true,则会一直固定在tag项中(默认 false)
  18. noTagsView: true 如果设置为true,则不会出现在tag中(默认 false)
  19. activeMenu: '/dashboard' 显示高亮的路由路径
  20. followAuth: '/dashboard' 跟随哪个路由进行权限过滤
  21. canTo: true 设置为true即使hidden为true,也依然可以进行路由跳转(默认 false)
  22. }
  23. **/
  24. const remainingRouter: AppRouteRecordRaw[] = [
  25. {
  26. path: '/redirect',
  27. component: Layout,
  28. name: 'Redirect',
  29. children: [
  30. {
  31. path: '/redirect/:path(.*)',
  32. name: 'Redirect',
  33. component: () => import('@/views/Redirect/Redirect.vue'),
  34. meta: {}
  35. }
  36. ],
  37. meta: {
  38. hidden: true,
  39. noTagsView: true
  40. }
  41. },
  42. {
  43. path: '/',
  44. component: Layout,
  45. redirect: '/index',
  46. name: 'Home',
  47. meta: {},
  48. children: [
  49. {
  50. path: 'index',
  51. component: () => import('@/views/Home/Index.vue'),
  52. name: 'Index',
  53. meta: {
  54. title: t('router.home'),
  55. icon: 'ep:home-filled',
  56. noCache: false,
  57. affix: true
  58. }
  59. }
  60. ]
  61. },
  62. {
  63. path: '/dingding',
  64. component: () => import('@/views/pms/dingding.vue'),
  65. meta:{
  66. hidden: true,
  67. }
  68. },
  69. {
  70. path: '/deviceattrstemplate',
  71. component: Layout,
  72. name: 'DeviceAttrsCenter',
  73. meta: {
  74. hidden: true
  75. },
  76. children: [
  77. {
  78. path: 'template/detail/:id',
  79. component: () => import('@/views/pms/devicetemplate/detail/attrsModel/index.vue'),
  80. name: 'DeviceAttrTemplateModel',
  81. meta: {
  82. title: t('rem.DeviceAttrTemplateModel'),
  83. noCache: false,
  84. hidden: true,
  85. canTo: true,
  86. activeMenu: '/template/info'
  87. }
  88. }
  89. ]
  90. },
  91. {
  92. path: '/modelattrstemplate',
  93. component: Layout,
  94. name: 'ModelAttrsCenter',
  95. meta: {
  96. hidden: true
  97. },
  98. children: [
  99. {
  100. path: 'template/detail/:id',
  101. component: () => import('@/views/pms/modeltemplate/detail/attrsModel/index.vue'),
  102. name: 'ModelAttrTemplate',
  103. meta: {
  104. title: t('rem.AttributeInformationDetails'),
  105. noCache: false,
  106. hidden: true,
  107. canTo: true,
  108. activeMenu: '/template/info'
  109. }
  110. }
  111. ]
  112. },
  113. {
  114. path: '/iotProjectInfo',
  115. component: Layout,
  116. name: 'IotProjectInfo',
  117. meta: {
  118. hidden: true
  119. },
  120. children: [
  121. {
  122. path: 'project/info/:type/:id?(\\d+)',
  123. component: () => import('@/views/pms/iotprojectinfo/IotProjectInfoForm.vue'),
  124. name: 'IotProjectInfo',
  125. meta: {
  126. title: t('rem.AddProjectInformation'),
  127. noCache: false,
  128. hidden: true,
  129. canTo: true,
  130. activeMenu: '/project/info'
  131. }
  132. }
  133. ]
  134. },
  135. {
  136. path: '/iotProjectTask',
  137. component: Layout,
  138. name: 'IotProjectTaskInfo',
  139. meta: {
  140. hidden: true
  141. },
  142. children: [
  143. {
  144. path: 'project/task/:type/:id?(\\d+)/:projectId?',
  145. component: () => import('@/views/pms/iotprojecttask/IotProjectTaskForm.vue'),
  146. name: 'IotProjectTaskInfo',
  147. meta: {
  148. title: t('rem.TaskAllocation'),
  149. noCache: false,
  150. hidden: true,
  151. canTo: true,
  152. activeMenu: '/project/task'
  153. }
  154. }
  155. ]
  156. },
  157. {
  158. path: '/fillOrderInfo',
  159. component: Layout,
  160. name: 'FillOrderInfo',
  161. meta: {
  162. hidden: true
  163. },
  164. children: [
  165. {
  166. path: 'template/detail/:id',
  167. component: () => import('@/views/pms/iotopeationfill/index1.vue'),
  168. name: 'FillOrderInfo',
  169. meta: {
  170. title: t('rem.FillInInformation'),
  171. noCache: false,
  172. hidden: true,
  173. canTo: true,
  174. activeMenu: '/template/info'
  175. }
  176. },
  177. {
  178. path: 'template/detail/:deptId/:orderStatus/:createTime*',
  179. component: () => import('@/views/pms/iotopeationfill/index.vue'),
  180. name: 'FillOrderInfo1',
  181. meta: {
  182. title: t('rem.FillInInformation'),
  183. noCache: false,
  184. hidden: true,
  185. canTo: true,
  186. activeMenu: '/template/info'
  187. }
  188. },
  189. {
  190. path: 'template/detail/:deptId/:isFill/:createTime*',
  191. component: () => import('@/views/pms/iotopeationfill/StatisticsForm.vue' +
  192. ''),
  193. name: 'FillOrderInfo2',
  194. meta: {
  195. title: t('rem.FillInInformation'),
  196. noCache: false,
  197. hidden: true,
  198. canTo: true,
  199. activeMenu: '/template/info'
  200. }
  201. },
  202. {
  203. path: 'template/detail/:id/:deviceid/:status/:deptid/:createtime',
  204. component: () => import('@/views/pms/device/record/RecordInfo.vue'),
  205. name: 'FillOrderInfoDevice',
  206. meta: {
  207. title: t('rem.detail'),
  208. noCache: false,
  209. hidden: true,
  210. canTo: true,
  211. activeMenu: '/template/info'
  212. }
  213. }
  214. ]
  215. },
  216. {
  217. path: '/iotpms/iotdevicepms', // 商品中心
  218. component: Layout,
  219. name: 'PmsDeviceCenter',
  220. meta: {
  221. hidden: true
  222. },
  223. children: [
  224. {
  225. path: 'device/detail/add/:type/:deptId',
  226. component: () => import('@/views/pms/device/IotDeviceForm.vue'),
  227. name: 'DeviceDetailAdd',
  228. meta: {
  229. noCache: false,
  230. hidden: true,
  231. canTo: true,
  232. icon: 'ep:add',
  233. title: t('rem.AddEquipment'),
  234. activeMenu: '/device/base'
  235. }
  236. },
  237. {
  238. path: 'device/detail/add',
  239. component: () => import('@/views/pms/device/IotDeviceFormAdd.vue'),
  240. name: 'DeviceDetailAddd',
  241. meta: {
  242. noCache: false,
  243. hidden: true,
  244. canTo: true,
  245. icon: 'ep:add',
  246. title: t('rem.AddEquipment'),
  247. activeMenu: '/device/base'
  248. }
  249. },
  250. {
  251. path: 'device/detail/edit/:type/:id(\\d+)',
  252. component: () => import('@/views/pms/device/IotDeviceForm.vue'),
  253. name: 'DeviceDetailEdit',
  254. meta: {
  255. noCache: true,
  256. hidden: true,
  257. canTo: true,
  258. icon: 'ep:edit',
  259. title: t('rem.EquipmentEditing'),
  260. activeMenu: '/device/base'
  261. }
  262. },{
  263. path: 'device/detail/:id',
  264. component: () => import('@/views/pms/device/DeviceInfo.vue'),
  265. name: 'DeviceDetailInfo',
  266. meta: {
  267. noCache: false,
  268. hidden: true,
  269. canTo: true,
  270. icon: 'ep:info',
  271. title: t('rem.EquipmentDetails'),
  272. activeMenu: '/device/info'
  273. }
  274. },{
  275. path: 'tddevice/detail/:id/:ifInline/:time/:name/:code/:dept',
  276. component: () => import('@/views/pms/device/monitor/TdDeviceInfo.vue'),
  277. name: 'TdDeviceDetail',
  278. meta: {
  279. noCache: false,
  280. hidden: true,
  281. canTo: true,
  282. icon: 'ep:info',
  283. title: t('rem.MonitoringDetails'),
  284. activeMenu: '/device/info'
  285. }
  286. },{
  287. path: 'device/upload/:id',
  288. component: () => import('@/views/pms/device/DeviceUpload.vue'),
  289. name: 'DeviceUpload',
  290. meta: {
  291. noCache: false,
  292. hidden: true,
  293. canTo: true,
  294. icon: 'ep:info',
  295. title: t('rem.UploadFile'),
  296. activeMenu: '/device/upload'
  297. }
  298. },{
  299. path: 'device/bom/:id',
  300. component: () => import('@/views/pms/device/bom/BomInfo.vue'),
  301. name: 'DeviceBom',
  302. meta: {
  303. noCache: false,
  304. hidden: true,
  305. canTo: true,
  306. icon: 'ep:info',
  307. title: t('rem.EquipmentBOM'),
  308. activeMenu: '/device/bom'
  309. }
  310. },
  311. {
  312. path: 'device/person',
  313. component: () => import('@/views/pms/device/personlog/ConfigDevicePerson.vue'),
  314. name: 'ConfigDevicePerson',
  315. meta: {
  316. noCache: false,
  317. hidden: true,
  318. canTo: true,
  319. icon: 'ep:add',
  320. title: t('rem.EquipmentResponsiblePerson'),
  321. activeMenu: '/device/person'
  322. }
  323. },
  324. {
  325. path: 'device/status',
  326. component: () => import('@/views/pms/device/statuslog/ConfigDeviceStatus.vue'),
  327. name: 'ConfigDeviceStatus',
  328. meta: {
  329. noCache: false,
  330. hidden: true,
  331. canTo: true,
  332. icon: 'ep:add',
  333. title: t('rem.EquipmentStatusAdjustment'),
  334. activeMenu: '/device/status'
  335. }
  336. },
  337. {
  338. path: 'device/allot',
  339. component: () => import('@/views/pms/device/allotlog/ConfigDeviceAllot.vue'),
  340. name: 'ConfigDeviceAllot',
  341. meta: {
  342. noCache: false,
  343. hidden: true,
  344. canTo: true,
  345. icon: 'ep:add',
  346. title: t('rem.EquipmentAllocation'),
  347. activeMenu: '/device/allot'
  348. }
  349. }
  350. ]
  351. },
  352. {
  353. path: '/iotpms/iotlockstock',
  354. component: Layout,
  355. name: 'PmsLockStockCenter',
  356. meta: {
  357. hidden: true
  358. },
  359. children: [
  360. {
  361. path: 'lockstock',
  362. component: () => import('@/views/pms/iotlockstock/index.vue'),
  363. name: 'IotLockStock',
  364. meta: {
  365. noCache: false,
  366. hidden: true,
  367. canTo: true,
  368. icon: 'ep:menu',
  369. title: t('rem.LocalStock'),
  370. activeMenu: '/lockstock/index'
  371. }
  372. },
  373. {
  374. path: 'lockstock/add',
  375. component: () => import('@/views/pms/iotlockstock/IotAddToStock.vue'),
  376. name: 'LockStockAdd',
  377. meta: {
  378. noCache: false,
  379. hidden: true,
  380. canTo: true,
  381. icon: 'ep:add',
  382. title: t('rem.ManualWarehousing'),
  383. activeMenu: '/lockstock/add'
  384. }
  385. },
  386. {
  387. path: 'lockstock/edit/:id(\\d+)',
  388. component: () => import('@/views/pms/iotlockstock/IotAddToStock.vue'),
  389. name: 'LockStockEdit',
  390. meta: {
  391. noCache: true,
  392. hidden: true,
  393. canTo: true,
  394. icon: 'ep:edit',
  395. title: t('rem.EditingWarehousing'),
  396. activeMenu: '/lockstock/edit'
  397. }
  398. }
  399. ]
  400. },
  401. {
  402. path: '/iotpms/iotsapstock',
  403. component: Layout,
  404. name: 'PmsSapStockCenter',
  405. meta: {
  406. hidden: true
  407. },
  408. children: [
  409. {
  410. path: 'sapstock',
  411. component: () => import('@/views/pms/iotsapstock/index.vue'),
  412. name: 'IotSapStock',
  413. meta: {
  414. noCache: false,
  415. hidden: true,
  416. canTo: true,
  417. icon: 'ep:menu',
  418. title: t('rem.SAPStock'),
  419. activeMenu: '/sapstock/index'
  420. }
  421. },
  422. {
  423. path: 'sapstock/config',
  424. component: () => import('@/views/pms/iotsapstock/IotSapStockConfig.vue'),
  425. name: 'IotSapStockConfig',
  426. meta: {
  427. noCache: false,
  428. hidden: true,
  429. canTo: true,
  430. icon: 'ep:add',
  431. title: t('rem.ConfigureSafetyStock'),
  432. activeMenu: '/sapstock/config'
  433. }
  434. },
  435. {
  436. path: 'sapstock/safe',
  437. component: () => import('@/views/pms/iotsapstock/IotConfigSafeStock.vue'),
  438. name: 'IotConfigSafeStock',
  439. meta: {
  440. noCache: false,
  441. hidden: true,
  442. canTo: true,
  443. icon: 'ep:add',
  444. title: t('rem.ConfigureSafetyStock'),
  445. activeMenu: '/sapstock/safe'
  446. }
  447. },
  448. ]
  449. },
  450. {
  451. path: '/iotpms/iotmaintenanceplan',
  452. component: Layout,
  453. name: 'PmsMaintenanceCenter',
  454. meta: {
  455. hidden: true
  456. },
  457. children: [
  458. {
  459. path: 'maintenanceplan',
  460. component: () => import('@/views/pms/maintenance/index.vue'),
  461. name: 'IotMaintenancePlan',
  462. meta: {
  463. noCache: false,
  464. hidden: true,
  465. canTo: true,
  466. icon: 'ep:menu',
  467. title: t('rem.MaintenancePlan'),
  468. activeMenu: '/maintenanceplan/index'
  469. }
  470. },
  471. {
  472. path: 'maintenanceplan/add',
  473. component: () => import('@/views/pms/maintenance/IotMaintenancePlan.vue'),
  474. name: 'IotAddMainPlan',
  475. meta: {
  476. noCache: false,
  477. hidden: true,
  478. canTo: true,
  479. icon: 'ep:add',
  480. title: t('rem.AddMaintenancePlan'),
  481. activeMenu: '/maintenanceplan/add'
  482. }
  483. },
  484. {
  485. path: 'maintenanceplan/edit/:id(\\d+)',
  486. component: () => import('@/views/pms/maintenance/IotMaintenancePlanEdit.vue'),
  487. name: 'IotMainPlanEdit',
  488. meta: {
  489. noCache: true,
  490. hidden: true,
  491. canTo: true,
  492. icon: 'ep:edit',
  493. title: t('rem.EditMaintenancePlan'),
  494. activeMenu: '/maintenanceplan/edit'
  495. }
  496. },
  497. {
  498. path: 'maintenanceplan/detail/:id(\\d+)',
  499. component: () => import('@/views/pms/maintenance/IotMaintenancePlanDetail.vue'),
  500. name: 'IotMaintenancePlanDetail',
  501. meta: {
  502. noCache: true,
  503. hidden: true,
  504. canTo: true,
  505. icon: 'ep:edit',
  506. title: t('rem.MaintenancePlanDetail'),
  507. activeMenu: '/maintenanceplan/detail'
  508. }
  509. }
  510. ]
  511. },
  512. {
  513. path: '/iotpms/iotmainworkorder',
  514. component: Layout,
  515. name: 'PmsMainWorkOrderCenter',
  516. meta: {
  517. hidden: true
  518. },
  519. children: [
  520. {
  521. path: 'mainworkorder',
  522. component: () => import('@/views/pms/iotmainworkorder/index.vue'),
  523. name: 'IotMainWorkOrder',
  524. meta: {
  525. noCache: false,
  526. hidden: true,
  527. canTo: true,
  528. icon: 'ep:menu',
  529. title: t('rem.MaintenanceOrder'),
  530. activeMenu: '/mainworkorder/index'
  531. }
  532. },
  533. {
  534. path: 'mainworkorder/bom/:id(\\d+)',
  535. component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrder.vue'),
  536. name: 'IotMainWorkOrderBom',
  537. meta: {
  538. noCache: false,
  539. hidden: true,
  540. canTo: true,
  541. icon: 'ep:add',
  542. title: t('rem.FillMaintenanceOrder'),
  543. activeMenu: '/mainworkorder/bom'
  544. }
  545. },
  546. {
  547. path: 'mainworkorder/add',
  548. component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderAdd.vue'),
  549. name: 'IotMainWorkOrderAdd',
  550. meta: {
  551. noCache: false,
  552. hidden: true,
  553. canTo: true,
  554. icon: 'ep:add',
  555. title: t('rem.AddMaintenanceOrder'),
  556. activeMenu: '/mainworkorder/add'
  557. }
  558. },
  559. {
  560. path: 'mainworkorder/detail/:id(\\d+)',
  561. component: () => import('@/views/pms/iotmainworkorder/IotMainWorkOrderDetail.vue'),
  562. name: 'IotMainWorkOrderDetail',
  563. meta: {
  564. noCache: false,
  565. hidden: true,
  566. canTo: true,
  567. icon: 'ep:add',
  568. title: t('rem.MaintenanceOrderDetail'),
  569. activeMenu: '/mainworkorder/detail'
  570. }
  571. },
  572. {
  573. path: 'mainworkorder/device/detail/:orderId/:deviceId(\\d+)',
  574. component: () => import('@/views/pms/device/maintenance/MaintenanceDetail.vue'),
  575. name: 'IotDeviceMainWorkOrderDetail',
  576. meta: {
  577. noCache: false,
  578. hidden: true,
  579. canTo: true,
  580. icon: 'ep:add',
  581. title: t('rem.MaintenanceOrderDetail'),
  582. activeMenu: '/mainworkorder/detail'
  583. }
  584. }
  585. ]
  586. },
  587. {
  588. path: '/iotpms/iotmaterialreq',
  589. component: Layout,
  590. name: 'PmsMaterialReqCenter',
  591. meta: {
  592. hidden: true
  593. },
  594. children: [
  595. {
  596. path: 'materialreq',
  597. component: () => import('@/views/pms/iotmaterialrequisition/index.vue'),
  598. name: 'IotMaterialRequisition',
  599. meta: {
  600. noCache: false,
  601. hidden: true,
  602. canTo: true,
  603. icon: 'ep:menu',
  604. title: t('rem.MaterialRequisition'),
  605. activeMenu: '/materialreq/index'
  606. }
  607. },
  608. {
  609. path: 'materialreq/add',
  610. component: () => import('@/views/pms/iotmaterialrequisition/IotMaterialRequisitionAdd.vue'),
  611. name: 'IotMaterialRequisitionAdd',
  612. meta: {
  613. noCache: false,
  614. hidden: true,
  615. canTo: true,
  616. icon: 'ep:add',
  617. title: t('rem.MaterialRequisitionAdd'),
  618. activeMenu: '/materialreq/add'
  619. }
  620. },
  621. {
  622. path: 'materialreq/detail/:id(\\d+)',
  623. component: () => import('@/views/pms/iotmaterialrequisition/IotMaterialReqDetail.vue'),
  624. name: 'IotMaterialReqDetail',
  625. meta: {
  626. noCache: false,
  627. hidden: true,
  628. canTo: true,
  629. icon: 'ep:view',
  630. title: t('rem.CollectionFormDetails'),
  631. activeMenu: '/materialreq/detail'
  632. }
  633. },
  634. ]
  635. },
  636. {
  637. path: '/iotpms/maincalendar',
  638. component: Layout,
  639. name: 'PmsMainCalendarCenter',
  640. meta: {
  641. hidden: true
  642. },
  643. children: [
  644. {
  645. path: 'maintenancecalendar',
  646. component: () => import('@/views/pms/iotmaincalendar/index.vue'),
  647. name: 'MaintenanceCalendar',
  648. meta: {
  649. noCache: false,
  650. hidden: true,
  651. canTo: true,
  652. icon: 'ep:menu',
  653. title: t('rem.MaintainCalendar'),
  654. activeMenu: '/maintenancecalendar/index'
  655. }
  656. }
  657. ]
  658. },
  659. {
  660. path: '/iotpms/iotmaintain',
  661. component: Layout,
  662. name: 'PmsMaintainCenter',
  663. meta: {
  664. hidden: true
  665. },
  666. children: [
  667. {
  668. path: 'maintain/add/:id?(\\d+)',
  669. component: () => import('@/views/pms/maintain/IotMaintain.vue'),
  670. name: 'MaintainAdd',
  671. meta: {
  672. noCache: false,
  673. hidden: true,
  674. canTo: true,
  675. icon: 'ep:add',
  676. title: t('rem.RepairOrderAdd'),
  677. activeMenu: '/maintain/add'
  678. }
  679. },
  680. {
  681. path: 'maintain/edit/:id(\\d+)',
  682. component: () => import('@/views/pms/maintain/IotMaintain.vue'),
  683. name: 'MaintainEdit',
  684. meta: {
  685. noCache: true,
  686. hidden: true,
  687. canTo: true,
  688. icon: 'ep:edit',
  689. title: t('rem.RepairOrderEdit'),
  690. activeMenu: '/maintain/edit'
  691. }
  692. },{
  693. path: 'maintain/detail/:id(\\d+)',
  694. component: () => import('@/views/pms/maintain/IotMaintainDetail.vue'),
  695. name: 'MaintainDetail',
  696. meta: {
  697. noCache: false,
  698. hidden: true,
  699. canTo: true,
  700. icon: 'ep:add',
  701. title: t('rem.RepairOrderDetail'),
  702. activeMenu: '/maintain/detail'
  703. }
  704. },
  705. ]
  706. },
  707. {
  708. path: '/iotpms/iotinspectroute',
  709. component: Layout,
  710. name: 'PmsInspectRouteCenter',
  711. meta: {
  712. hidden: true
  713. },
  714. children: [
  715. {
  716. path: 'route/add',
  717. component: () => import('@/views/pms/inspect/route/IotInspectRoute.vue'),
  718. name: 'RouteAdd',
  719. meta: {
  720. noCache: false,
  721. hidden: true,
  722. canTo: true,
  723. icon: 'ep:add',
  724. title: t('rem.InspectionRouteAdd'),
  725. activeMenu: '/route/add'
  726. }
  727. },
  728. {
  729. path: 'route/edit/:id(\\d+)',
  730. component: () => import('@/views/pms/inspect/route/IotInspectRoute.vue'),
  731. name: 'RouteEdit',
  732. meta: {
  733. noCache: true,
  734. hidden: true,
  735. canTo: true,
  736. icon: 'ep:edit',
  737. title: t('rem.InspectionRouteEdit'),
  738. activeMenu: '/route/edit'
  739. }
  740. // }
  741. // ,{
  742. // path: 'route/detail/:id(\\d+)',
  743. // component: () => import('@/views/pms/maintain/IotMaintainDetail.vue'),
  744. // name: 'InspectRouteDetail',
  745. // meta: {
  746. // noCache: false,
  747. // hidden: true,
  748. // canTo: true,
  749. // icon: 'ep:add',
  750. // title: '巡检路线详情',
  751. // activeMenu: '/route/detail'
  752. // }
  753. },
  754. ]
  755. },
  756. {
  757. path: '/iotpms/iotinspectplan',
  758. component: Layout,
  759. name: 'PmsInspectPlanCenter',
  760. meta: {
  761. hidden: true
  762. },
  763. children: [
  764. {
  765. path: 'inspect/plan/add',
  766. component: () => import('@/views/pms/inspect/plan/IotInspectPlan.vue'),
  767. name: 'InspectPlanAdd',
  768. meta: {
  769. noCache: false,
  770. hidden: true,
  771. canTo: true,
  772. icon: 'ep:add',
  773. title: t('rem.InspectPlanAdd'),
  774. activeMenu: '/inspect/plan/add'
  775. }
  776. },
  777. {
  778. path: 'inspect/plan/edit/:id(\\d+)',
  779. component: () => import('@/views/pms/inspect/plan/IotInspectPlan.vue'),
  780. name: 'InspectPlanEdit',
  781. meta: {
  782. noCache: true,
  783. hidden: true,
  784. canTo: true,
  785. icon: 'ep:edit',
  786. title: t('rem.InspectPlanEdit'),
  787. activeMenu: '/inspect/plan/edit'
  788. }
  789. // }
  790. // ,{
  791. // path: 'route/detail/:id(\\d+)',
  792. // component: () => import('@/views/pms/maintain/IotMaintainDetail.vue'),
  793. // name: 'InspectRouteDetail',
  794. // meta: {
  795. // noCache: false,
  796. // hidden: true,
  797. // canTo: true,
  798. // icon: 'ep:add',
  799. // title: '巡检路线详情',
  800. // activeMenu: '/route/detail'
  801. // }
  802. },
  803. ]
  804. },
  805. {
  806. path: '/iotpms/iotinspectorder',
  807. component: Layout,
  808. name: 'PmsInspectOrderCenter',
  809. meta: {
  810. hidden: true
  811. },
  812. children: [
  813. {
  814. path: 'inspect/order/detail/index/:status?',
  815. component: () => import('@/views/pms/inspect/order/detail/IotInspectOrderDetailStat.vue'),
  816. name: 'IotInspectOrderDetailStat',
  817. meta: {
  818. noCache: false,
  819. hidden: true,
  820. canTo: true,
  821. icon: 'ep:index',
  822. title: t('rem.InspectOrder'),
  823. activeMenu: '/inspect/order/detail/index'
  824. }
  825. },
  826. {
  827. path: 'inspect/order/index/:status?',
  828. component: () => import('@/views/pms/inspect/order/index.vue'),
  829. name: 'IotInspectOrdere',
  830. meta: {
  831. noCache: false,
  832. hidden: true,
  833. canTo: true,
  834. icon: 'ep:index',
  835. title: t('rem.InspectOrder'),
  836. activeMenu: '/inspect/order/index'
  837. }
  838. },
  839. {
  840. path: 'inspect/order/add',
  841. component: () => import('@/views/pms/inspect/order/InspectOrderDetail.vue'),
  842. name: 'InspectOrderAdd',
  843. meta: {
  844. noCache: false,
  845. hidden: true,
  846. canTo: true,
  847. icon: 'ep:add',
  848. title: t('rem.InspectOrderAdd'),
  849. activeMenu: '/inspect/order/add'
  850. }
  851. },
  852. {
  853. path: 'inspect/order/edit/:id(\\d+)',
  854. component: () => import('@/views/pms/inspect/order/InspectOrderDetail.vue'),
  855. name: 'InspectOrderEdit',
  856. meta: {
  857. noCache: true,
  858. hidden: true,
  859. canTo: true,
  860. icon: 'ep:edit',
  861. title: t('rem.InspectPlanEdit'),
  862. activeMenu: '/inspect/order/edit'
  863. }
  864. }
  865. ,{
  866. path: '/inspect/order/detail/:id(\\d+)',
  867. component: () => import('@/views/pms/inspect/order/InspectOrderDetail.vue'),
  868. name: 'InspectOrderDetail',
  869. meta: {
  870. noCache: false,
  871. hidden: true,
  872. canTo: true,
  873. icon: 'ep:add',
  874. title: t('rem.InspectOrderDetail'),
  875. activeMenu: '/inspect/order/detail'
  876. }
  877. },{
  878. path: '/inspect/order/write/:id(\\d+)',
  879. component: () => import('@/views/pms/inspect/order/WriteOrder.vue'),
  880. name: 'InspectOrderWrite',
  881. meta: {
  882. noCache: false,
  883. hidden: true,
  884. canTo: true,
  885. icon: 'ep:add',
  886. title: t('rem.InspectOrderAdd'),
  887. activeMenu: '/inspect/order/write'
  888. }
  889. }
  890. ]
  891. },
  892. {
  893. path: '/failure',
  894. component: Layout,
  895. name: 'failure',
  896. meta: {
  897. hidden: true
  898. },
  899. children: [
  900. {
  901. path: 'failure/detail/:id',
  902. component: () => import('@/views/pms/failure/FailureInfo.vue'),
  903. name: 'FailureDetail',
  904. meta: {
  905. noCache: true,
  906. hidden: true,
  907. canTo: true,
  908. title: t('rem.FailureDetail'),
  909. activeMenu: '/failure/detail'
  910. }
  911. }
  912. ]
  913. },
  914. {
  915. path: '/user',
  916. component: Layout,
  917. name: 'UserInfo',
  918. meta: {
  919. hidden: true
  920. },
  921. children: [
  922. {
  923. path: 'profile',
  924. component: () => import('@/views/Profile/Index.vue'),
  925. name: 'Profile',
  926. meta: {
  927. canTo: true,
  928. hidden: true,
  929. noTagsView: false,
  930. icon: 'ep:user',
  931. title: t('common.profile')
  932. }
  933. },
  934. {
  935. path: 'notify-message',
  936. component: () => import('@/views/system/notify/my/index.vue'),
  937. name: 'MyNotifyMessage',
  938. meta: {
  939. canTo: true,
  940. hidden: true,
  941. noTagsView: false,
  942. icon: 'ep:message',
  943. title: '我的站内信'
  944. }
  945. }
  946. ]
  947. },
  948. {
  949. path: '/dict',
  950. component: Layout,
  951. name: 'dict',
  952. meta: {
  953. hidden: true
  954. },
  955. children: [
  956. {
  957. path: 'type/data/:dictType',
  958. component: () => import('@/views/system/dict/data/index.vue'),
  959. name: 'SystemDictData',
  960. meta: {
  961. title: '字典数据',
  962. noCache: true,
  963. hidden: true,
  964. canTo: true,
  965. icon: '',
  966. activeMenu: '/system/dict'
  967. }
  968. }
  969. ]
  970. },
  971. {
  972. path: '/codegen',
  973. component: Layout,
  974. name: 'CodegenEdit',
  975. meta: {
  976. hidden: true
  977. },
  978. children: [
  979. {
  980. path: 'edit',
  981. component: () => import('@/views/infra/codegen/EditTable.vue'),
  982. name: 'InfraCodegenEditTable',
  983. meta: {
  984. noCache: true,
  985. hidden: true,
  986. canTo: true,
  987. icon: 'ep:edit',
  988. title: '修改生成配置',
  989. activeMenu: 'infra/codegen/index'
  990. }
  991. }
  992. ]
  993. },
  994. {
  995. path: '/job',
  996. component: Layout,
  997. name: 'JobL',
  998. meta: {
  999. hidden: true
  1000. },
  1001. children: [
  1002. {
  1003. path: 'job-log',
  1004. component: () => import('@/views/infra/job/logger/index.vue'),
  1005. name: 'InfraJobLog',
  1006. meta: {
  1007. noCache: true,
  1008. hidden: true,
  1009. canTo: true,
  1010. icon: 'ep:edit',
  1011. title: '调度日志',
  1012. activeMenu: 'infra/job/index'
  1013. }
  1014. }
  1015. ]
  1016. },
  1017. {
  1018. path: '/login',
  1019. component: () => import('@/views/Login/Login.vue'),
  1020. name: 'Login',
  1021. meta: {
  1022. hidden: true,
  1023. title: t('router.login'),
  1024. noTagsView: true
  1025. }
  1026. },
  1027. {
  1028. path: '/sso',
  1029. component: () => import('@/views/Login/Login.vue'),
  1030. name: 'SSOLogin',
  1031. meta: {
  1032. hidden: true,
  1033. title: t('router.login'),
  1034. noTagsView: true
  1035. }
  1036. },
  1037. {
  1038. path: '/social-login',
  1039. component: () => import('@/views/Login/SocialLogin.vue'),
  1040. name: 'SocialLogin',
  1041. meta: {
  1042. hidden: true,
  1043. title: t('router.socialLogin'),
  1044. noTagsView: true
  1045. }
  1046. },
  1047. {
  1048. path: '/403',
  1049. component: () => import('@/views/Error/403.vue'),
  1050. name: 'NoAccess',
  1051. meta: {
  1052. hidden: true,
  1053. title: '403',
  1054. noTagsView: true
  1055. }
  1056. },
  1057. {
  1058. path: '/404',
  1059. component: () => import('@/views/Error/404.vue'),
  1060. name: 'NoFound',
  1061. meta: {
  1062. hidden: true,
  1063. title: '404',
  1064. noTagsView: true
  1065. }
  1066. },
  1067. {
  1068. path: '/500',
  1069. component: () => import('@/views/Error/500.vue'),
  1070. name: 'Error',
  1071. meta: {
  1072. hidden: true,
  1073. title: '500',
  1074. noTagsView: true
  1075. }
  1076. },
  1077. {
  1078. path: '/supplier/product', // 商品中心
  1079. component: Layout,
  1080. name: 'SupplierCenter',
  1081. meta: {
  1082. hidden: true
  1083. },
  1084. children: [
  1085. {
  1086. path: 'supplier/detail/add',
  1087. component: () => import('@/views/supplier/base/form/index.vue'),
  1088. name: 'SupplierDetailAdd',
  1089. meta: {
  1090. noCache: false,
  1091. hidden: true,
  1092. canTo: true,
  1093. icon: 'ep:edit',
  1094. title: '供应商添加',
  1095. activeMenu: '/supplier/base'
  1096. }
  1097. },
  1098. {
  1099. path: 'supplier/detail/edit/:id(\\d+)',
  1100. component: () => import('@/views/supplier/base/form/index.vue'),
  1101. name: 'SupplierDetailEdit',
  1102. meta: {
  1103. noCache: true,
  1104. hidden: true,
  1105. canTo: true,
  1106. icon: 'ep:edit',
  1107. title: '供应商编辑',
  1108. activeMenu: '/supplier/base'
  1109. }
  1110. },
  1111. {
  1112. path: '/supplier/detail/info/:id(\\d+)',
  1113. component: () => import('@/views/supplier/base/form/index.vue'),
  1114. name: 'SupplierDetailInfo',
  1115. meta: {
  1116. noCache: true,
  1117. hidden: true,
  1118. canTo: true,
  1119. icon: 'ep:view',
  1120. title: '供应商详情',
  1121. activeMenu: '/supplier/base'
  1122. }
  1123. },
  1124. {
  1125. path: 'supplier/approvalDetail/:id',
  1126. name: 'SupplierApprovalInfo',
  1127. meta: {
  1128. title: '供应商审核详情',
  1129. noCache: true,
  1130. hidden: true,
  1131. activeMenu: '/supplier/base'
  1132. },
  1133. component: () => import('@/views/supplier/approvaldetail/ApprovalDetail.vue')
  1134. }
  1135. ]
  1136. },
  1137. {
  1138. path: '/bpm',
  1139. component: Layout,
  1140. name: 'bpm',
  1141. meta: {
  1142. hidden: true
  1143. },
  1144. children: [
  1145. {
  1146. path: 'manager/form/edit',
  1147. component: () => import('@/views/bpm/form/editor/index.vue'),
  1148. name: 'BpmFormEditor',
  1149. meta: {
  1150. noCache: true,
  1151. hidden: true,
  1152. canTo: true,
  1153. title: '设计流程表单',
  1154. activeMenu: '/bpm/manager/form'
  1155. }
  1156. },
  1157. {
  1158. path: 'manager/definition',
  1159. component: () => import('@/views/bpm/model/definition/index.vue'),
  1160. name: 'BpmProcessDefinition',
  1161. meta: {
  1162. noCache: true,
  1163. hidden: true,
  1164. canTo: true,
  1165. title: '流程定义',
  1166. activeMenu: '/bpm/manager/model'
  1167. }
  1168. },
  1169. {
  1170. path: 'process-instance/detail',
  1171. component: () => import('@/views/bpm/processInstance/detail/index.vue'),
  1172. name: 'BpmProcessInstanceDetail',
  1173. meta: {
  1174. noCache: true,
  1175. hidden: true,
  1176. canTo: true,
  1177. title: '流程详情',
  1178. activeMenu: '/bpm/task/my'
  1179. },
  1180. props: (route) => ({
  1181. id: route.query.id,
  1182. taskId: route.query.taskId,
  1183. activityId: route.query.activityId
  1184. })
  1185. },
  1186. {
  1187. path: 'process-instance/report',
  1188. component: () => import('@/views/bpm/processInstance/report/index.vue'),
  1189. name: 'BpmProcessInstanceReport',
  1190. meta: {
  1191. noCache: true,
  1192. hidden: true,
  1193. canTo: true,
  1194. title: '数据报表',
  1195. activeMenu: '/bpm/manager/model'
  1196. }
  1197. },
  1198. {
  1199. path: 'oa/leave/create',
  1200. component: () => import('@/views/bpm/oa/leave/create.vue'),
  1201. name: 'OALeaveCreate',
  1202. meta: {
  1203. noCache: true,
  1204. hidden: true,
  1205. canTo: true,
  1206. title: '发起 OA 请假',
  1207. activeMenu: '/bpm/oa/leave'
  1208. }
  1209. },
  1210. {
  1211. path: 'oa/leave/detail',
  1212. component: () => import('@/views/bpm/oa/leave/detail.vue'),
  1213. name: 'OALeaveDetail',
  1214. meta: {
  1215. noCache: true,
  1216. hidden: true,
  1217. canTo: true,
  1218. title: '查看 OA 请假',
  1219. activeMenu: '/bpm/oa/leave'
  1220. }
  1221. },
  1222. {
  1223. path: 'manager/model/create',
  1224. component: () => import('@/views/bpm/model/form/index.vue'),
  1225. name: 'BpmModelCreate',
  1226. meta: {
  1227. noCache: true,
  1228. hidden: true,
  1229. canTo: true,
  1230. title: '创建流程',
  1231. activeMenu: '/bpm/manager/model'
  1232. }
  1233. },
  1234. {
  1235. path: 'manager/model/:type/:id',
  1236. component: () => import('@/views/bpm/model/form/index.vue'),
  1237. name: 'BpmModelUpdate',
  1238. meta: {
  1239. noCache: true,
  1240. hidden: true,
  1241. canTo: true,
  1242. title: '修改流程',
  1243. activeMenu: '/bpm/manager/model'
  1244. }
  1245. }
  1246. ]
  1247. },
  1248. {
  1249. path: '/mall/product', // 商品中心
  1250. component: Layout,
  1251. name: 'ProductCenter',
  1252. meta: {
  1253. hidden: true
  1254. },
  1255. children: [
  1256. {
  1257. path: 'spu/add',
  1258. component: () => import('@/views/mall/product/spu/form/index.vue'),
  1259. name: 'ProductSpuAdd',
  1260. meta: {
  1261. noCache: false, // 需要缓存
  1262. hidden: true,
  1263. canTo: true,
  1264. icon: 'ep:edit',
  1265. title: '商品添加',
  1266. activeMenu: '/mall/product/spu'
  1267. }
  1268. },
  1269. {
  1270. path: 'spu/edit/:id(\\d+)',
  1271. component: () => import('@/views/mall/product/spu/form/index.vue'),
  1272. name: 'ProductSpuEdit',
  1273. meta: {
  1274. noCache: true,
  1275. hidden: true,
  1276. canTo: true,
  1277. icon: 'ep:edit',
  1278. title: '商品编辑',
  1279. activeMenu: '/mall/product/spu'
  1280. }
  1281. },
  1282. {
  1283. path: 'spu/detail/:id(\\d+)',
  1284. component: () => import('@/views/mall/product/spu/form/index.vue'),
  1285. name: 'ProductSpuDetail',
  1286. meta: {
  1287. noCache: true,
  1288. hidden: true,
  1289. canTo: true,
  1290. icon: 'ep:view',
  1291. title: '商品详情',
  1292. activeMenu: '/mall/product/spu'
  1293. }
  1294. },
  1295. {
  1296. path: 'property/value/:propertyId(\\d+)',
  1297. component: () => import('@/views/mall/product/property/value/index.vue'),
  1298. name: 'ProductPropertyValue',
  1299. meta: {
  1300. noCache: true,
  1301. hidden: true,
  1302. canTo: true,
  1303. icon: 'ep:view',
  1304. title: '商品属性值',
  1305. activeMenu: '/product/property'
  1306. }
  1307. }
  1308. ]
  1309. },
  1310. {
  1311. path: '/mall/trade', // 交易中心
  1312. component: Layout,
  1313. name: 'TradeCenter',
  1314. meta: {
  1315. hidden: true
  1316. },
  1317. children: [
  1318. {
  1319. path: 'order/detail/:id(\\d+)',
  1320. component: () => import('@/views/mall/trade/order/detail/index.vue'),
  1321. name: 'TradeOrderDetail',
  1322. meta: { title: '订单详情', icon: 'ep:view', activeMenu: '/mall/trade/order' }
  1323. },
  1324. {
  1325. path: 'after-sale/detail/:id(\\d+)',
  1326. component: () => import('@/views/mall/trade/afterSale/detail/index.vue'),
  1327. name: 'TradeAfterSaleDetail',
  1328. meta: { title: '退款详情', icon: 'ep:view', activeMenu: '/mall/trade/after-sale' }
  1329. }
  1330. ]
  1331. },
  1332. {
  1333. path: '/member',
  1334. component: Layout,
  1335. name: 'MemberCenter',
  1336. meta: { hidden: true },
  1337. children: [
  1338. {
  1339. path: 'user/detail/:id',
  1340. name: 'MemberUserDetail',
  1341. meta: {
  1342. title: '会员详情',
  1343. noCache: true,
  1344. hidden: true
  1345. },
  1346. component: () => import('@/views/member/user/detail/index.vue')
  1347. }
  1348. ]
  1349. },
  1350. {
  1351. path: '/pay',
  1352. component: Layout,
  1353. name: 'pay',
  1354. meta: { hidden: true },
  1355. children: [
  1356. {
  1357. path: 'cashier',
  1358. name: 'PayCashier',
  1359. meta: {
  1360. title: '收银台',
  1361. noCache: true,
  1362. hidden: true
  1363. },
  1364. component: () => import('@/views/pay/cashier/index.vue')
  1365. }
  1366. ]
  1367. },
  1368. {
  1369. path: '/diy',
  1370. name: 'DiyCenter',
  1371. meta: { hidden: true },
  1372. component: Layout,
  1373. children: [
  1374. {
  1375. path: 'template/decorate/:id',
  1376. name: 'DiyTemplateDecorate',
  1377. meta: {
  1378. title: '模板装修',
  1379. noCache: true,
  1380. hidden: true,
  1381. activeMenu: '/mall/promotion/diy/template'
  1382. },
  1383. component: () => import('@/views/mall/promotion/diy/template/decorate.vue')
  1384. },
  1385. {
  1386. path: 'page/decorate/:id',
  1387. name: 'DiyPageDecorate',
  1388. meta: {
  1389. title: '页面装修',
  1390. noCache: true,
  1391. hidden: true,
  1392. activeMenu: '/mall/promotion/diy/page'
  1393. },
  1394. component: () => import('@/views/mall/promotion/diy/page/decorate.vue')
  1395. }
  1396. ]
  1397. },
  1398. {
  1399. path: '/crm',
  1400. component: Layout,
  1401. name: 'CrmCenter',
  1402. meta: { hidden: true },
  1403. children: [
  1404. {
  1405. path: 'clue/detail/:id',
  1406. name: 'CrmClueDetail',
  1407. meta: {
  1408. title: '线索详情',
  1409. noCache: true,
  1410. hidden: true,
  1411. activeMenu: '/crm/clue'
  1412. },
  1413. component: () => import('@/views/crm/clue/detail/index.vue')
  1414. },
  1415. {
  1416. path: 'customer/detail/:id',
  1417. name: 'CrmCustomerDetail',
  1418. meta: {
  1419. title: '客户详情',
  1420. noCache: true,
  1421. hidden: true,
  1422. activeMenu: '/crm/customer'
  1423. },
  1424. component: () => import('@/views/crm/customer/detail/index.vue')
  1425. },
  1426. {
  1427. path: 'business/detail/:id',
  1428. name: 'CrmBusinessDetail',
  1429. meta: {
  1430. title: '商机详情',
  1431. noCache: true,
  1432. hidden: true,
  1433. activeMenu: '/crm/business'
  1434. },
  1435. component: () => import('@/views/crm/business/detail/index.vue')
  1436. },
  1437. {
  1438. path: 'contract/detail/:id',
  1439. name: 'CrmContractDetail',
  1440. meta: {
  1441. title: '合同详情',
  1442. noCache: true,
  1443. hidden: true,
  1444. activeMenu: '/crm/contract'
  1445. },
  1446. component: () => import('@/views/crm/contract/detail/index.vue')
  1447. },
  1448. {
  1449. path: 'receivable-plan/detail/:id',
  1450. name: 'CrmReceivablePlanDetail',
  1451. meta: {
  1452. title: '回款计划详情',
  1453. noCache: true,
  1454. hidden: true,
  1455. activeMenu: '/crm/receivable-plan'
  1456. },
  1457. component: () => import('@/views/crm/receivable/plan/detail/index.vue')
  1458. },
  1459. {
  1460. path: 'receivable/detail/:id',
  1461. name: 'CrmReceivableDetail',
  1462. meta: {
  1463. title: '回款详情',
  1464. noCache: true,
  1465. hidden: true,
  1466. activeMenu: '/crm/receivable'
  1467. },
  1468. component: () => import('@/views/crm/receivable/detail/index.vue')
  1469. },
  1470. {
  1471. path: 'contact/detail/:id',
  1472. name: 'CrmContactDetail',
  1473. meta: {
  1474. title: '联系人详情',
  1475. noCache: true,
  1476. hidden: true,
  1477. activeMenu: '/crm/contact'
  1478. },
  1479. component: () => import('@/views/crm/contact/detail/index.vue')
  1480. },
  1481. {
  1482. path: 'product/detail/:id',
  1483. name: 'CrmProductDetail',
  1484. meta: {
  1485. title: '产品详情',
  1486. noCache: true,
  1487. hidden: true,
  1488. activeMenu: '/crm/product'
  1489. },
  1490. component: () => import('@/views/crm/product/detail/index.vue')
  1491. }
  1492. ]
  1493. },
  1494. {
  1495. path: '/ai',
  1496. component: Layout,
  1497. name: 'Ai',
  1498. meta: {
  1499. hidden: true
  1500. },
  1501. children: [
  1502. {
  1503. path: 'image/square',
  1504. component: () => import('@/views/ai/image/square/index.vue'),
  1505. name: 'AiImageSquare',
  1506. meta: {
  1507. title: '绘图作品',
  1508. icon: 'ep:home-filled',
  1509. noCache: false
  1510. }
  1511. },
  1512. {
  1513. path: 'knowledge/document',
  1514. component: () => import('@/views/ai/knowledge/document/index.vue'),
  1515. name: 'AiKnowledgeDocument',
  1516. meta: {
  1517. title: '知识库文档',
  1518. icon: 'ep:document',
  1519. noCache: false,
  1520. activeMenu: '/ai/knowledge'
  1521. }
  1522. },
  1523. {
  1524. path: 'knowledge/document/create',
  1525. component: () => import('@/views/ai/knowledge/document/form/index.vue'),
  1526. name: 'AiKnowledgeDocumentCreate',
  1527. meta: {
  1528. title: '创建文档',
  1529. icon: 'ep:plus',
  1530. noCache: true,
  1531. hidden: true,
  1532. activeMenu: '/ai/knowledge'
  1533. }
  1534. },
  1535. {
  1536. path: 'knowledge/document/update',
  1537. component: () => import('@/views/ai/knowledge/document/form/index.vue'),
  1538. name: 'AiKnowledgeDocumentUpdate',
  1539. meta: {
  1540. title: '修改文档',
  1541. icon: 'ep:edit',
  1542. noCache: true,
  1543. hidden: true,
  1544. activeMenu: '/ai/knowledge'
  1545. }
  1546. },
  1547. {
  1548. path: 'knowledge/retrieval',
  1549. component: () => import('@/views/ai/knowledge/knowledge/retrieval/index.vue'),
  1550. name: 'AiKnowledgeRetrieval',
  1551. meta: {
  1552. title: '文档召回测试',
  1553. icon: 'ep:search',
  1554. noCache: true,
  1555. hidden: true,
  1556. activeMenu: '/ai/knowledge'
  1557. }
  1558. },
  1559. {
  1560. path: 'knowledge/segment',
  1561. component: () => import('@/views/ai/knowledge/segment/index.vue'),
  1562. name: 'AiKnowledgeSegment',
  1563. meta: {
  1564. title: '知识库分段',
  1565. icon: 'ep:tickets',
  1566. noCache: true,
  1567. hidden: true,
  1568. activeMenu: '/ai/knowledge'
  1569. }
  1570. },
  1571. {
  1572. path: 'console/workflow/create',
  1573. component: () => import('@/views/ai/workflow/form/index.vue'),
  1574. name: 'AiWorkflowCreate',
  1575. meta: {
  1576. noCache: true,
  1577. hidden: true,
  1578. canTo: true,
  1579. title: '设计 AI 工作流',
  1580. activeMenu: '/ai/console/workflow'
  1581. }
  1582. },
  1583. {
  1584. path: 'console/workflow/:type/:id',
  1585. component: () => import('@/views/ai/workflow/form/index.vue'),
  1586. name: 'AiWorkflowUpdate',
  1587. meta: {
  1588. noCache: true,
  1589. hidden: true,
  1590. canTo: true,
  1591. title: '设计 AI 工作流',
  1592. activeMenu: '/ai/console/workflow'
  1593. }
  1594. }
  1595. ]
  1596. },
  1597. {
  1598. path: '/:pathMatch(.*)*',
  1599. component: () => import('@/views/Error/404.vue'),
  1600. name: '',
  1601. meta: {
  1602. title: '404',
  1603. hidden: true,
  1604. breadcrumb: false
  1605. }
  1606. },
  1607. {
  1608. path: '/iot',
  1609. component: Layout,
  1610. name: 'IOT',
  1611. meta: {
  1612. hidden: true
  1613. },
  1614. children: [
  1615. {
  1616. path: 'product/product/detail/:id',
  1617. name: 'IoTProductDetail',
  1618. meta: {
  1619. title: '产品详情',
  1620. noCache: true,
  1621. hidden: true,
  1622. activeMenu: '/iot/device/product'
  1623. },
  1624. component: () => import('@/views/iot/product/product/detail/index.vue')
  1625. },
  1626. {
  1627. path: 'device/detail/:id',
  1628. name: 'IoTDeviceDetail',
  1629. meta: {
  1630. title: '设备详情',
  1631. noCache: true,
  1632. hidden: true,
  1633. activeMenu: '/iot/device/device'
  1634. },
  1635. component: () => import('@/views/iot/device/device/detail/index.vue')
  1636. },
  1637. {
  1638. path: 'plugin/detail/:id',
  1639. name: 'IoTPluginDetail',
  1640. meta: {
  1641. title: '插件详情',
  1642. noCache: true,
  1643. hidden: true,
  1644. activeMenu: '/iot/plugin'
  1645. },
  1646. component: () => import('@/views/iot/plugin/detail/index.vue')
  1647. }
  1648. ]
  1649. },
  1650. ]
  1651. export default remainingRouter