Blame view

pages/workbench/index.vue 6.91 KB
c293da23   刘淇   新园林init
1
  <template>
48ff5b95   刘淇   底部导航
2
    <view class="page-container">
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
3
      <!-- 加载页 -->
9b30ab8c   刘淇   新增快速工单,原版
4
      <up-loading-page
48ff5b95   刘淇   底部导航
5
          :loading="loading"
9b30ab8c   刘淇   新增快速工单,原版
6
7
          loading-text="加载中..."
          color="#577ee3"
48ff5b95   刘淇   底部导航
8
          zIndex="1000"
9b30ab8c   刘淇   新增快速工单,原版
9
10
      ></up-loading-page>
  
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
11
      <!-- 蓝色装饰块 -->
c64da17b   刘淇   新的业务线
12
      <view class="blue-decor-block" v-if="!loading">
e2e5221c   刘淇   验证码登录
13
14
        <text class="welcome-text u-line-1">你好{{ userInfo?.user?.nickname || '' }}</text>
        <text class="platform-name">蓟城山水全域智能运营管理平台</text>
12e66ec8   刘淇   新增树
15
      </view>
c293da23   刘淇   新园林init
16
  
c64da17b   刘淇   新的业务线
17
18
  
  
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
19
      <!-- 内容容器 -->
37c26bd3   刘淇   巡查计划
20
      <view class="content-wrap">
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
21
        <!-- 空状态:过滤后无数据且非加载中时显示 -->
37c26bd3   刘淇   巡查计划
22
        <u-empty
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
23
            v-if="!filteredModuleList.length && !loading"
48ff5b95   刘淇   底部导航
24
            mode="permission"
37c26bd3   刘淇   巡查计划
25
26
        ></u-empty>
  
c64da17b   刘淇   新的业务线
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  
      <view class="" v-if="!userInfo?.user?.nickname">
        <text class="welcome-text u-line-1 " style="padding: 20px 0;text-align: center;">本小程序仅限特定服务人群使用,需验证账号后方可登录</text>
        
        <up-button
            class="login-btn"
            type="primary"
            size="large"
           
            @click="ToLoginPage"
            shape="circle"
        >
          前往登录
        </up-button>
      </view>
  
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
43
44
        <!-- 菜单卡片列表:仅渲染有子节点的父模块 -->
        <view class="menu-card-wrap">
37c26bd3   刘淇   巡查计划
45
          <up-card
578c1373   刘淇   样式优化
46
47
              :title-size="14"
              :titleColor="'#000'"
48ff5b95   刘淇   底部导航
48
49
              :border="false"
              :shadow="true"
578c1373   刘淇   样式优化
50
51
52
              :head-style="{
               fontWeight:'500'
              }"
48ff5b95   刘淇   底部导航
53
              :foot-border-top="false"
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
54
              v-for="(parentModule, index) in filteredModuleList"
48ff5b95   刘淇   底部导航
55
              :key="`$parentModule.id_${index}`"
993d98fa   刘淇   工作台
56
              :title="parentModule.name"
48ff5b95   刘淇   底部导航
57
              class="card-container"
37c26bd3   刘淇   巡查计划
58
          >
37c26bd3   刘淇   巡查计划
59
            <template #body>
48ff5b95   刘淇   底部导航
60
61
62
63
64
65
              <view class="card-content">
                <view
                    v-for="(listItem, listIndex) in parentModule.children"
                    :key="listItem.id"
                    class="content-block"
                    @click="handleMenuClick(listItem)"
37c26bd3   刘淇   巡查计划
66
                >
48ff5b95   刘淇   底部导航
67
68
69
                  <u-image
                      :src="listItem.icon"
                      mode="aspectFit"
578c1373   刘淇   样式优化
70
71
                      width="48px"
                      height="48px"
48ff5b95   刘淇   底部导航
72
                      lazy-load
cf70629b   刘淇   养护计划 照片 自己写样式
73
                      radius="8px"
48ff5b95   刘淇   底部导航
74
75
76
77
                      class="block-icon"
                  ></u-image>
                  <text class="grid-text">{{ listItem.name }}</text>
                </view>
37c26bd3   刘淇   巡查计划
78
79
80
              </view>
            </template>
          </up-card>
c293da23   刘淇   新园林init
81
82
83
84
85
        </view>
      </view>
    </view>
  </template>
  
37c26bd3   刘淇   巡查计划
86
  <script setup lang="ts">
578c1373   刘淇   样式优化
87
88
89
  import {ref, computed} from 'vue';
  import {onShow} from '@dcloudio/uni-app';
  import {useUserStore} from '@/pinia/user';
993d98fa   刘淇   工作台
90
91
  import globalConfig from '@/common/config/global';
  import cache from '@/common/utils/cache';
37c26bd3   刘淇   巡查计划
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  
  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
110
  
12e66ec8   刘淇   新增树
111
  // ========== 全局变量定义区 ==========
9b30ab8c   刘淇   新增快速工单,原版
112
  const loading = ref(true);
c293da23   刘淇   新园林init
113
  const userStore = useUserStore();
37c26bd3   刘淇   巡查计划
114
  const moduleList = ref<MenuItem[]>([]);
12e66ec8   刘淇   新增树
115
  const userInfo = ref<any>(cache.get(globalConfig.cache.userInfoKey) || userStore.userInfo || {});
37c26bd3   刘淇   巡查计划
116
  
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
117
118
119
  // 计算属性:过滤出有子节点的父模块(children 存在且长度 > 0)
  const filteredModuleList = computed(() => {
    return moduleList.value.filter(item => {
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
120
121
122
123
      return Array.isArray(item.children) && item.children.length > 0;
    });
  });
  
37c26bd3   刘淇   巡查计划
124
  onShow(async () => {
c293da23   刘淇   新园林init
125
    try {
9b30ab8c   刘淇   新增快速工单,原版
126
      loading.value = true;
12e66ec8   刘淇   新增树
127
      userInfo.value = cache.get(globalConfig.cache.userInfoKey) || userStore.userInfo || {};
e6a04285   刘淇   单图情况 宽高70*70
128
  
12e66ec8   刘淇   新增树
129
      // 登录状态判断(多维度校验,确保准确性)
e6a04285   刘淇   单图情况 宽高70*70
130
      const isLogin = () => {
e6a04285   刘淇   单图情况 宽高70*70
131
        const token = cache.get(globalConfig.cache.tokenKey) || userStore.token;
12e66ec8   刘淇   新增树
132
133
        const userInfoVal = userInfo.value;
        console.log('当前用户信息:', userInfoVal?.user);
12e66ec8   刘淇   新增树
134
        return !!token && !!userInfoVal;
e6a04285   刘淇   单图情况 宽高70*70
135
136
      };
  
12e66ec8   刘淇   新增树
137
      // 未登录处理:跳转登录页,阻止后续逻辑执行
e6a04285   刘淇   单图情况 宽高70*70
138
      if (!isLogin()) {
c64da17b   刘淇   新的业务线
139
140
141
142
143
144
145
146
147
148
        // uni.showToast({title: '请先登录', icon: 'none', duration: 1500});
        // setTimeout(() => {
        //   uni.reLaunch({
        //     url: '/pages/login/index',
        //     fail: (err) => {
        //       console.error('跳转登录页失败:', err);
        //       uni.showToast({title: '跳转登录页异常', icon: 'none'});
        //     }
        //   });
        // }, 1500);
e6a04285   刘淇   单图情况 宽高70*70
149
        loading.value = false;
e6a04285   刘淇   单图情况 宽高70*70
150
151
152
        return;
      }
  
993d98fa   刘淇   工作台
153
      const rawMenuData = userStore.moduleListInfo || cache.get(globalConfig.cache.moduleListKey);
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
154
      moduleList.value = rawMenuData || [];
48ff5b95   刘淇   底部导航
155
      loading.value = false;
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
156
157
      console.log('原始菜单数据:', moduleList.value);
      console.log('过滤后有子节点的父模块:', filteredModuleList.value);
37c26bd3   刘淇   巡查计划
158
159
160
    } catch (error) {
      console.error('获取菜单数据失败:', error);
      moduleList.value = [];
9b30ab8c   刘淇   新增快速工单,原版
161
      loading.value = false;
c293da23   刘淇   新园林init
162
    }
37c26bd3   刘淇   巡查计划
163
  });
c293da23   刘淇   新园林init
164
  
c64da17b   刘淇   新的业务线
165
166
167
168
169
170
171
172
173
174
  const ToLoginPage = ()=> {
        uni.reLaunch({
            url: '/pages/login/index',
            fail: (err) => {
              console.error('跳转登录页失败:', err);
              uni.showToast({title: '跳转登录页异常', icon: 'none'});
            }
          });
  }
  
37c26bd3   刘淇   巡查计划
175
176
  const handleMenuClick = (item: MenuItem) => {
    if (!item.jumpUrl) {
578c1373   刘淇   样式优化
177
      uni.showToast({title: '暂无跳转链接', icon: 'none', duration: 2000});
37c26bd3   刘淇   巡查计划
178
      return;
c293da23   刘淇   新园林init
179
    }
37c26bd3   刘淇   巡查计划
180
181
182
183
    uni.navigateTo({
      url: item.jumpUrl,
      fail: (err) => {
        console.error('页面跳转失败:', err);
578c1373   刘淇   样式优化
184
        uni.showToast({title: '页面路径错误', icon: 'none', duration: 2000});
37c26bd3   刘淇   巡查计划
185
186
      }
    });
c293da23   刘淇   新园林init
187
188
189
  };
  </script>
  
48ff5b95   刘淇   底部导航
190
  <style scoped lang="scss">
48ff5b95   刘淇   底部导航
191
  .page-container {
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
192
193
    position: relative;
    min-height: 100vh;
5cb33b90   刘淇   完成巡查计划 详情
194
  }
37c26bd3   刘淇   巡查计划
195
  
37c26bd3   刘淇   巡查计划
196
197
198
199
200
  .blue-decor-block {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
24c0bbe7   刘淇   登录账号密码 加密存储
201
    padding: 80px 15px 115px;
12e66ec8   刘淇   新增树
202
203
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
    background-size: 100% 100%;
37c26bd3   刘淇   巡查计划
204
    z-index: 1;
578c1373   刘淇   样式优化
205
    color: #fff;
12e66ec8   刘淇   新增树
206
    text-align: left;
cf70629b   刘淇   养护计划 照片 自己写样式
207
  
12e66ec8   刘淇   新增树
208
    .welcome-text {
4570c70a   刘淇   消息中心
209
      font-size: 16px;
12e66ec8   刘淇   新增树
210
      display: block;
24c0bbe7   刘淇   登录账号密码 加密存储
211
      margin-bottom: 4px;
12e66ec8   刘淇   新增树
212
213
214
215
    }
  
    .platform-name {
      margin-bottom: 10px;
4570c70a   刘淇   消息中心
216
      font-size: 16px;
12e66ec8   刘淇   新增树
217
      display: block;
12e66ec8   刘淇   新增树
218
    }
c293da23   刘淇   新园林init
219
  }
37c26bd3   刘淇   巡查计划
220
  
37c26bd3   刘淇   巡查计划
221
222
223
  .content-wrap {
    position: relative;
    z-index: 2;
24c0bbe7   刘淇   登录账号密码 加密存储
224
    padding: 125px 0 0;
48ff5b95   刘淇   底部导航
225
226
    display: flex;
    flex-direction: column;
cf70629b   刘淇   养护计划 照片 自己写样式
227
    gap: 10px;
48ff5b95   刘淇   底部导航
228
229
  }
  
48ff5b95   刘淇   底部导航
230
231
232
233
  .menu-card-wrap {
    width: 100%;
  }
  
48ff5b95   刘淇   底部导航
234
  .card-container {
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
235
    --u-card-content-padding: 0;
cf70629b   刘淇   养护计划 照片 自己写样式
236
    border-radius: 4px;
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
237
    overflow: hidden;
48ff5b95   刘淇   底部导航
238
239
  }
  
48ff5b95   刘淇   底部导航
240
241
  .card-content {
    display: flex;
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
242
    flex-wrap: wrap;
cf70629b   刘淇   养护计划 照片 自己写样式
243
    gap: 10px;
48ff5b95   刘淇   底部导航
244
245
  }
  
48ff5b95   刘淇   底部导航
246
  .content-block {
cf70629b   刘淇   养护计划 照片 自己写样式
247
    width: calc((100% - 3 * 10px) / 4);
48ff5b95   刘淇   底部导航
248
249
    display: flex;
    flex-direction: column;
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
250
251
    align-items: center;
    justify-content: center;
cf70629b   刘淇   养护计划 照片 自己写样式
252
253
    padding: 7px 0;
    border-radius: 4px;
48ff5b95   刘淇   底部导航
254
255
    touch-action: manipulation;
    transition: background-color 0.2s;
c293da23   刘淇   新园林init
256
  }
37c26bd3   刘淇   巡查计划
257
  
48ff5b95   刘淇   底部导航
258
259
260
  .content-block:active {
    background-color: #e9ecef;
  }
37c26bd3   刘淇   巡查计划
261
  
48ff5b95   刘淇   底部导航
262
  .block-icon {
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
263
264
    display: block;
    margin: 0 auto;
48ff5b95   刘淇   底部导航
265
266
  }
  
37c26bd3   刘淇   巡查计划
267
  .grid-text {
cf70629b   刘淇   养护计划 照片 自己写样式
268
    font-size: 13px;
578c1373   刘淇   样式优化
269
    color: #1C1C1C;
37c26bd3   刘淇   巡查计划
270
    text-align: center;
cf70629b   刘淇   养护计划 照片 自己写样式
271
    margin-top: 5px;
67af4c8e   刘淇   工作台 如果没有子节点就不渲染父节点
272
    display: block;
c293da23   刘淇   新园林init
273
  }
37c26bd3   刘淇   巡查计划
274
  </style>