workbench.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <script setup>
  2. import { onShow } from '@dcloudio/uni-app'
  3. import { useUserStore } from '@/stores/user'
  4. import { WORKBENCH_MODULES } from '@/config/workbench-menus'
  5. import { PAGE_PATHS, WORKBENCH_ROUTE_MAP } from '@/config/api'
  6. const userStore = useUserStore()
  7. const modules = WORKBENCH_MODULES
  8. onShow(() => {
  9. userStore.checkLoginStatus()
  10. if (!userStore.isLoggedIn) {
  11. uni.reLaunch({ url: PAGE_PATHS.login })
  12. }
  13. })
  14. const openMenu = (module, menu) => {
  15. if (!menu.enabled) {
  16. uni.showToast({ title: '本期暂未开放', icon: 'none' })
  17. return
  18. }
  19. const route = WORKBENCH_ROUTE_MAP[menu.code]
  20. if (route) {
  21. uni.navigateTo({ url: route })
  22. return
  23. }
  24. const title = encodeURIComponent(menu.name || '')
  25. const moduleTitle = encodeURIComponent(module.title || '')
  26. const code = encodeURIComponent(menu.code || '')
  27. uni.navigateTo({
  28. url: `${PAGE_PATHS.bizPlaceholder}?title=${title}&module=${moduleTitle}&code=${code}`
  29. })
  30. }
  31. </script>
  32. <template>
  33. <view class="mp-page mp-page--tab">
  34. <view class="mp-header">
  35. <text class="mp-header__title">工作台</text>
  36. <text class="mp-header__meta">选择业务模块,进入对应功能办理</text>
  37. </view>
  38. <view class="mp-section">
  39. <view
  40. v-for="mod in modules"
  41. :key="mod.key"
  42. class="mp-module-block"
  43. :class="'mp-module-block--' + mod.key"
  44. >
  45. <view class="mp-module-block__head">
  46. <text class="mp-module-block__icon">{{ mod.iconText }}</text>
  47. <view class="mp-module-block__title-wrap">
  48. <text class="mp-module-block__title">{{ mod.title }}</text>
  49. <text class="mp-module-block__desc">{{ mod.desc }}</text>
  50. </view>
  51. </view>
  52. <view class="mp-menu-grid">
  53. <view
  54. v-for="(menu, idx) in mod.menus"
  55. :key="menu.code || menu.name + idx"
  56. class="mp-menu-card"
  57. :class="{ 'mp-menu-card--disabled': !menu.enabled }"
  58. @click="openMenu(mod, menu)"
  59. >
  60. <view class="mp-menu-card__icon" />
  61. <text class="mp-menu-card__name">{{ menu.name }}</text>
  62. </view>
  63. </view>
  64. </view>
  65. </view>
  66. </view>
  67. </template>