# jiananyou/leavemanager_wechat architecture

> Architecture diagram of the GitHub repository jiananyou/leavemanager_wechat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jiananyou/leavemanager_wechat
- Repository: https://github.com/jiananyou/leavemanager_wechat

## Overview

This is a WeChat mini-program for managing student leave requests. Users sign in by role; students can submit requests, while staff can review pending requests and accept or refuse them. Users can also browse requests by status or search by time, term, and reason, and students can save drafts locally for later editing. The excerpts show the login, submission, approval-detail, and time-search interactions; several other listed pages were not excerpted, so their internal behavior and connections are not asserted.

Main entry points: [`pages/index/index.js`](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/index/index.js) (Request dashboard), [`pages/common/vacate/vacate.js`](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/vacate/vacate.js) (Submit leave), [`pages/common/findbytime/findbytime.js`](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbytime/findbytime.js) (Time search), [`pages/search/search.js`](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/search/search.js) (Search options)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_account["Account"]
  node_login["Role login<br/>[login.js]"]
  node_profile["User profile<br/>[user.js]"]
  node_password["Change password<br/>[changepwd.js]"]
end

subgraph group_requests["Leave Requests"]
  node_home["Request dashboard<br/>[index.js]"]
  node_apply["Submit leave<br/>[vacate.js]"]
  node_course["Course lookup<br/>[vacate.js]"]
  node_format["Time formatter<br/>[util.js]"]
end

subgraph group_review["Review and Search"]
  node_pending["Pending requests<br/>[checking.js]"]
  node_approved["Approved requests<br/>[pass.js]"]
  node_rejected["Rejected requests<br/>[fail.js]"]
  node_detail["Request details<br/>[info.js]"]
  node_search["Search options<br/>[search.js]"]
  node_bytime["Time search<br/>[findbytime.js]"]
  node_byterm["Term search<br/>[findbyterm.js]"]
  node_bytype["Reason search<br/>[findbytype.js]"]
end

subgraph group_local["Local State"]
  node_trash["Draft bin<br/>[trashbin.js]"]
  node_redraft["Edit draft<br/>[reedit.js]"]
  node_storage[("Mini-program storage")]
end

node_user(("Mini-program user"))
node_backend{{"Leave service"}}

node_user -.->|"signs in"| node_login
node_login -->|"authenticates"| node_backend
node_login -->|"opens dashboard"| node_home
node_profile -->|"opens"| node_password
node_password -->|"changes password"| node_backend
node_home -->|"fetches status lists"| node_backend
node_home -->|"opens"| node_approved
node_home -->|"opens"| node_pending
node_home -->|"opens"| node_rejected
node_home -->|"opens"| node_trash
node_home -->|"opens"| node_apply
node_apply -->|"requests courses"| node_course
node_apply -->|"submits request"| node_backend
node_apply -->|"formats submission time"| node_format
node_apply -->|"saves draft"| node_storage
node_search -->|"opens"| node_bytime
node_search -->|"opens"| node_byterm
node_search -->|"opens"| node_bytype
node_bytime -->|"queries requests"| node_backend
node_bytime -->|"opens request"| node_detail
node_bytime -->|"stores results"| node_storage
node_detail -->|"reviews request"| node_backend
node_detail -->|"reads request list"| node_storage
node_redraft -->|"resubmits request"| node_backend
node_redraft -->|"updates drafts"| node_storage

click node_login "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/login/login.js"
click node_profile "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/user/user.js"
click node_password "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/changepwd/changepwd.js"
click node_home "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/index/index.js"
click node_apply "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/vacate/vacate.js"
click node_course "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/vacate/vacate.js"
click node_pending "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/checking/checking.js"
click node_approved "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/pass/pass.js"
click node_rejected "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/fail/fail.js"
click node_detail "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/info/info.js"
click node_search "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/search/search.js"
click node_bytime "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbytime/findbytime.js"
click node_byterm "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbyterm/findbyterm.js"
click node_bytype "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbytype/findbytype.js"
click node_trash "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/recycle/trashbin/trashbin.js"
click node_redraft "https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/recycle/reedit/reedit.js"
click node_format "https://github.com/jiananyou/leavemanager_wechat/blob/master/utils/util.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_login,node_profile,node_password,node_user toneBlue
class node_home,node_apply,node_course,node_format toneAmber
class node_pending,node_approved,node_rejected,node_detail,node_search,node_bytime,node_byterm,node_bytype toneMint
class node_trash,node_redraft,node_storage toneRose
class node_backend toneIndigo
```

## Components

### Account

- [Role login](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/login/login.js): `pages/login/login.js`
- [User profile](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/user/user.js): `pages/user/user.js`
- [Change password](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/changepwd/changepwd.js): `pages/changepwd/changepwd.js`

### Leave Requests

- [Request dashboard](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/index/index.js): `pages/index/index.js`
- [Submit leave](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/vacate/vacate.js): `pages/common/vacate/vacate.js`
- [Course lookup](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/vacate/vacate.js): `pages/common/vacate/vacate.js`
- [Time formatter](https://github.com/jiananyou/leavemanager_wechat/blob/master/utils/util.js): `utils/util.js`

### Review and Search

- [Pending requests](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/checking/checking.js): `pages/common/checking/checking.js`
- [Approved requests](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/pass/pass.js): `pages/common/pass/pass.js`
- [Rejected requests](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/fail/fail.js): `pages/common/fail/fail.js`
- [Request details](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/info/info.js): `pages/common/info/info.js`
- [Search options](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/search/search.js): `pages/search/search.js`
- [Time search](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbytime/findbytime.js): `pages/common/findbytime/findbytime.js`
- [Term search](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbyterm/findbyterm.js): `pages/common/findbyterm/findbyterm.js`
- [Reason search](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/findbytype/findbytype.js): `pages/common/findbytype/findbytype.js`

### Local State

- [Draft bin](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/recycle/trashbin/trashbin.js): `pages/common/recycle/trashbin/trashbin.js`
- [Edit draft](https://github.com/jiananyou/leavemanager_wechat/blob/master/pages/common/recycle/reedit/reedit.js): `pages/common/recycle/reedit/reedit.js`
- **Mini-program storage**

### Other components

- **Mini-program user**
- **Leave service**

## Connections

- Mini-program user → Role login: signs in
- Role login → Leave service: authenticates (evidence: `pages/login/login.js`)
- Role login → Request dashboard: opens dashboard (evidence: `pages/login/login.js`)
- User profile → Change password: opens (evidence: `pages/user/user.js`)
- Change password → Leave service: changes password (evidence: `pages/changepwd/changepwd.js`)
- Request dashboard → Leave service: fetches status lists (evidence: `pages/index/index.js`)
- Request dashboard → Approved requests: opens (evidence: `pages/index/index.js`)
- Request dashboard → Pending requests: opens (evidence: `pages/index/index.js`)
- Request dashboard → Rejected requests: opens (evidence: `pages/index/index.js`)
- Request dashboard → Draft bin: opens (evidence: `pages/index/index.js`)
- Request dashboard → Submit leave: opens (evidence: `pages/index/index.js`)
- Submit leave → Course lookup: requests courses (evidence: `pages/common/vacate/vacate.js`)
- Submit leave → Leave service: submits request (evidence: `pages/common/vacate/vacate.js`)
- Submit leave → Time formatter: formats submission time (evidence: `pages/common/vacate/vacate.js`)
- Submit leave → Mini-program storage: saves draft (evidence: `pages/common/vacate/vacate.js`)
- Search options → Time search: opens (evidence: `pages/search/search.js`)
- Search options → Term search: opens (evidence: `pages/search/search.js`)
- Search options → Reason search: opens (evidence: `pages/search/search.js`)
- Time search → Leave service: queries requests (evidence: `pages/common/findbytime/findbytime.js`)
- Time search → Request details: opens request (evidence: `pages/common/findbytime/findbytime.js`)
- Time search → Mini-program storage: stores results (evidence: `pages/common/findbytime/findbytime.js`)
- Request details → Leave service: reviews request (evidence: `pages/common/info/info.js`)
- Request details → Mini-program storage: reads request list (evidence: `pages/common/info/info.js`)
- Edit draft → Leave service: resubmits request (evidence: `pages/common/recycle/reedit/reedit.js`)
- Edit draft → Mini-program storage: updates drafts (evidence: `pages/common/recycle/reedit/reedit.js`)
