Blame view

pages/workbench/index.vue 4.71 KB
c293da23   刘淇   新园林init
1
  <template>
37c26bd3   刘淇   巡查计划
2
    <!-- 外层容器:包含蓝色块 + 原始内容 -->
c293da23   刘淇   新园林init
3
    <view class="workbench-container">
9b30ab8c   刘淇   新增快速工单,原版
4
5
6
7
8
9
10
11
      <!-- 加载页:覆盖整个容器,渲染完成后隐藏 -->
      <up-loading-page
          v-if="loading"
          loading-text="加载中..."
          color="#577ee3"
          style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999;"
      ></up-loading-page>
  
37c26bd3   刘淇   巡查计划
12
13
      <!-- 蓝色装饰块:#577ee3 -->
      <view class="blue-decor-block"></view>
c293da23   刘淇   新园林init
14
  
37c26bd3   刘淇   巡查计划
15
16
17
18
      <!-- 原始内容容器:仅添加定位和顶部偏移实现压边 -->
      <view class="content-wrap">
        <!-- uview-plus空状态组件 -->
        <u-empty
9b30ab8c   刘淇   新增快速工单,原版
19
            v-if="!moduleList.length && !loading"
37c26bd3   刘淇   巡查计划
20
21
22
23
24
25
26
            mode="list"
            text="暂无菜单数据"
            color="#999"
            font-size="28rpx"
        ></u-empty>
  
        <!-- 菜单卡片列表(修复header插槽语法,恢复标题显示) -->
9b30ab8c   刘淇   新增快速工单,原版
27
        <view v-else-if="!loading" class="menu-card-wrap">
37c26bd3   刘淇   巡查计划
28
          <up-card
993d98fa   刘淇   工作台
29
30
31
32
              :title-size="18"
              v-for="(parentModule, index) in moduleList"
              :key="parentModule.id"
              :title="parentModule.name"
37c26bd3   刘淇   巡查计划
33
          >
37c26bd3   刘淇   巡查计划
34
35
36
37
38
39
40
41
42
43
            <template #body>
              <view>
                <up-grid
                    :border="false"
                    col="4"
                >
                  <up-grid-item
                      v-for="(listItem,listIndex) in parentModule.children"
                      :key="listItem.id"
                      @click="handleMenuClick(listItem)"
5cb33b90   刘淇   完成巡查计划 详情
44
                      class="grid-item-wrap"
37c26bd3   刘淇   巡查计划
45
46
47
48
49
50
51
52
53
54
55
56
                  >
                    <u-image
                        :src="listItem.icon "
                        mode="aspectFit"
                        width="80rpx"
                        height="80rpx"
                        lazy-load
                        radius="16rpx"
                    ></u-image>
                    <text class="grid-text">{{ listItem.name }}</text>
                  </up-grid-item>
                </up-grid>
5cb33b90   刘淇   完成巡查计划 详情
57
  
37c26bd3   刘淇   巡查计划
58
59
60
              </view>
            </template>
          </up-card>
c293da23   刘淇   新园林init
61
62
63
64
65
        </view>
      </view>
    </view>
  </template>
  
37c26bd3   刘淇   巡查计划
66
  <script setup lang="ts">
9b30ab8c   刘淇   新增快速工单,原版
67
  // 原始代码完全保留,新增loading状态
37c26bd3   刘淇   巡查计划
68
  import {ref, nextTick} from 'vue';
993d98fa   刘淇   工作台
69
70
71
72
  import { onShow } from '@dcloudio/uni-app';
  import { useUserStore } from '@/pinia/user';
  import globalConfig from '@/common/config/global';
  import cache from '@/common/utils/cache';
37c26bd3   刘淇   巡查计划
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  
  interface MenuItem {
    id: number;
    name: string;
    subtitle?: string;
    type: number;
    sort: number;
    parentId: number;
    icon: string;
    jumpUrl: string;
    miniAppId?: string;
    badgeText?: string;
    badgeColor?: string;
    statisticCount: number | null;
    hasStatistic: boolean;
    extra: any;
    children: MenuItem[];
  }
c293da23   刘淇   新园林init
91
  
9b30ab8c   刘淇   新增快速工单,原版
92
93
  // 新增:加载状态(默认开启)
  const loading = ref(true);
c293da23   刘淇   新园林init
94
  const userStore = useUserStore();
37c26bd3   刘淇   巡查计划
95
96
97
98
99
100
101
102
103
104
  const moduleList = ref<MenuItem[]>([]);
  
  // 无用变量(保留避免警告)
  const subTitle = ref('');
  const thumb = ref('');
  const border = ref(true);
  const click = () => {
  };
  const headClick = () => {
  };
c293da23   刘淇   新园林init
105
  
37c26bd3   刘淇   巡查计划
106
  onShow(async () => {
c293da23   刘淇   新园林init
107
    try {
9b30ab8c   刘淇   新增快速工单,原版
108
109
110
      // 重置加载状态
      loading.value = true;
  
993d98fa   刘淇   工作台
111
      const rawMenuData = userStore.moduleListInfo || cache.get(globalConfig.cache.moduleListKey);
37c26bd3   刘淇   巡查计划
112
113
      const menuData = rawMenuData || [];
      moduleList.value = menuData;
9b30ab8c   刘淇   新增快速工单,原版
114
115
  
      // 关键:等待DOM完全渲染后再隐藏加载页
37c26bd3   刘淇   巡查计划
116
      await nextTick();
9b30ab8c   刘淇   新增快速工单,原版
117
118
119
120
121
      // 额外延迟(可选,确保视觉更流畅)
      setTimeout(() => {
        loading.value = false;
      }, 300);
  
37c26bd3   刘淇   巡查计划
122
123
124
125
      console.log('菜单数据:', moduleList.value);
    } catch (error) {
      console.error('获取菜单数据失败:', error);
      moduleList.value = [];
9b30ab8c   刘淇   新增快速工单,原版
126
127
128
      // 出错时也隐藏加载页
      await nextTick();
      loading.value = false;
c293da23   刘淇   新园林init
129
    }
37c26bd3   刘淇   巡查计划
130
  });
c293da23   刘淇   新园林init
131
  
37c26bd3   刘淇   巡查计划
132
133
134
135
136
137
138
139
  const handleMenuClick = (item: MenuItem) => {
    if (!item.jumpUrl) {
      uni.showToast({
        title: '暂无跳转链接',
        icon: 'none',
        duration: 2000
      });
      return;
c293da23   刘淇   新园林init
140
    }
37c26bd3   刘淇   巡查计划
141
142
143
144
145
146
147
148
149
150
151
152
    console.log(item.jumpUrl)
    uni.navigateTo({
      url: item.jumpUrl,
      fail: (err) => {
        console.error('页面跳转失败:', err);
        uni.showToast({
          title: '页面路径错误',
          icon: 'none',
          duration: 2000
        });
      }
    });
c293da23   刘淇   新园林init
153
154
155
156
  };
  </script>
  
  <style scoped>
37c26bd3   刘淇   巡查计划
157
  /* 仅新增/保留必要样式,不修改卡片核心样式 */
c293da23   刘淇   新园林init
158
  .workbench-container {
37c26bd3   刘淇   巡查计划
159
    width: 100%;
c293da23   刘淇   新园林init
160
    min-height: 100vh;
37c26bd3   刘淇   巡查计划
161
162
    position: relative;
    background-color: #fff;
c293da23   刘淇   新园林init
163
  }
5cb33b90   刘淇   完成巡查计划 详情
164
165
166
  .grid-item-wrap{
    margin-top: 20px;
  }
37c26bd3   刘淇   巡查计划
167
168
169
170
171
172
173
174
175
176
  
  /* 蓝色块样式 */
  .blue-decor-block {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 200px;
    background-color: #577ee3;
    z-index: 1;
c293da23   刘淇   新园林init
177
  }
37c26bd3   刘淇   巡查计划
178
179
180
181
182
  
  /* 内容容器样式 */
  .content-wrap {
    position: relative;
    z-index: 2;
37c26bd3   刘淇   巡查计划
183
    padding-top: 160px;
c293da23   刘淇   新园林init
184
  }
37c26bd3   刘淇   巡查计划
185
  
37c26bd3   刘淇   巡查计划
186
187
188
  
  /* 网格文字样式(保留原始) */
  .grid-text {
c293da23   刘淇   新园林init
189
    font-size: 24rpx;
37c26bd3   刘淇   巡查计划
190
191
192
    color: #333;
    text-align: center;
    margin-top: 10rpx;
c293da23   刘淇   新园林init
193
  }
9b30ab8c   刘淇   新增快速工单,原版
194
  
5cb33b90   刘淇   完成巡查计划 详情
195
  
37c26bd3   刘淇   巡查计划
196
  </style>