app-shell Specification
Purpose
This specification defines the native WeChat Mini Program app shell for 普瑞互联网医院智慧医院小程序 V2.0, including base project structure, routing, custom tabBar, global UI tokens, unified request wrapping, login/hospital initialization skeletons, and legacy resource reuse helpers.
Requirements
Requirement: Native Mini Program Structure
The source directory SHALL contain a native WeChat Mini Program structure with app.js, app.json, app.wxss, project.config.json, sitemap.json, pages, components, custom-tab-bar, utils, and assets entry points.
Scenario: Import basic project
- WHEN a developer imports
04-新项目源码_source/pri-smart-hospital-miniprogram in WeChat DevTools
- THEN the project has the required native mini program entry files
- AND no empty
subPackages item is registered in app.json.
Requirement: Base Routing And Placeholder Pages
The app shell SHALL register the five first-level tab pages, the hospital switch placeholder page, and the common error page.
Scenario: Open tab placeholders
- WHEN a user opens 首页、就诊指引、缴费、消息、我的
- THEN each page renders a visible placeholder state
- AND unfinished business entries are presented as unavailable or module pending
- AND no concrete registration, payment, patient editing, order detail, report, or message detail workflow is executed.
Requirement: Custom TabBar Skeleton
The app shell SHALL provide a custom tabBar component with selected state, unselected state, badge placeholders, and configurable guidance tab visibility.
Scenario: Guidance tab visibility
- WHEN
tabBarSettings.guideHospConfig is Y
- THEN the guidance tab can be shown
- WHEN
tabBarSettings.guideHospConfig is not Y
- THEN the guidance tab can be hidden by configuration.
Requirement: Global UI Tokens And Base States
The app shell SHALL provide project-level UI tokens and common classes for page background, hero area, cards, buttons, text, loading, empty, error, disabled, and image fallback states.
Scenario: Placeholder page styling
- WHEN a placeholder page renders
- THEN it uses the light blue background, white cards, blue/cyan brand accents, readable text hierarchy, and minimum 44px touch targets from the UI standard.
Requirement: Unified Request Wrapper
The app shell SHALL provide a request wrapper for the legacy unified gateway that supports business code, data/params, namespace, session: [userData], HISFlag, UPPFlag, and the fixed Basic authorization required by the current legacy gateway contract.
Scenario: Build the legacy request
- WHEN
request({ code: "01050001", data: {} }) is called
- THEN the generated body includes
code, HISFlag: "N", UPPFlag: "N", session: [userData], and params
- AND the request attaches the configured legacy Basic authorization header
- AND the request and response remain subject to the existing business error handling.
Requirement: Login And Hospital Initialization Skeleton
The app shell SHALL restore the legacy login, hospital initialization and IM configuration chain, including hospital imAppID / imSecret, app SDKAPPID / SECRETKEY, client-side UserSig generation and TIM login.
Scenario: Initialize hospital and IM configuration
- WHEN hospital initialization or hospital switching receives
imAppID and imSecret
- THEN the app maps them into the current hospital and user context
- AND updates
globalData.SDKAPPID and globalData.SECRETKEY
- AND generates the legacy UserSig for the current IM user
- AND initializes or refreshes TIM login.
Scenario: Reuse the generated room credentials
- GIVEN the app has generated a UserSig through the approved legacy chain
- WHEN an IM or TRTC room context is built
- THEN the room receives the current SDKAppID, UserSig and IM user identifier
- AND missing business or room identifiers still produce a normal error state.
Requirement: Resource Reuse Configuration
The app shell SHALL provide configuration and helper functions for legacy image host, upload URL, download URL, image URL joining, and image failure fallback.
Scenario: Server image reuse
- WHEN a business module receives a server image path
- THEN it can use the resource helper to join the configured server host
- AND the app shell does not migrate server images into local static assets.