+ • 次日全天禁止手机带入卫生间
+ • 需在22:00前完成全部B类任务 +
From bc94c75b544676e57aec4c943628e9e30ac7bfc2 Mon Sep 17 00:00:00 2001 From: Shuery-Shuai <2463253700@qq.com> Date: Fri, 2 Oct 2026 00:28:37 +0800 Subject: [PATCH] first commit --- backend/Dockerfile | 6 + backend/app/__init__.py | 0 backend/app/auth.py | 25 + backend/app/crud.py | 0 backend/app/database.py | 0 backend/app/main.py | 35 + backend/app/models.py | 55 + backend/app/routers/auth.py | 19 + backend/app/routers/debts.py | 0 backend/app/routers/rewards.py | 0 backend/app/routers/stats.py | 0 backend/app/routers/violations.py | 14 + backend/app/schemas.py | 0 backend/requirements.txt | 6 + docker-compose.yml | 21 + docs/家庭共修公约.html | 1668 ++++++++++++++++++++ docs/网站原型.html | 1342 ++++++++++++++++ frontend/Dockerfile | 11 + frontend/build.log | 66 + frontend/nginx.conf | 12 + frontend/package.json | 0 frontend/src/App.vue | 0 frontend/src/api/index.js | 26 + frontend/src/components/ViolationModal.vue | 0 frontend/src/router/index.js | 31 + frontend/src/views/Home.vue | 35 + frontend/src/views/Login.vue | 44 + frontend/src/views/Mine.vue | 0 frontend/src/views/Records.vue | 0 frontend/src/views/Stats.vue | 0 nginx.conf | 67 + 31 files changed, 3483 insertions(+) create mode 100644 backend/Dockerfile create mode 100644 backend/app/__init__.py create mode 100644 backend/app/auth.py create mode 100644 backend/app/crud.py create mode 100644 backend/app/database.py create mode 100644 backend/app/main.py create mode 100644 backend/app/models.py create mode 100644 backend/app/routers/auth.py create mode 100644 backend/app/routers/debts.py create mode 100644 backend/app/routers/rewards.py create mode 100644 backend/app/routers/stats.py create mode 100644 backend/app/routers/violations.py create mode 100644 backend/app/schemas.py create mode 100644 backend/requirements.txt create mode 100644 docker-compose.yml create mode 100644 docs/家庭共修公约.html create mode 100644 docs/网站原型.html create mode 100644 frontend/Dockerfile create mode 100644 frontend/build.log create mode 100644 frontend/nginx.conf create mode 100644 frontend/package.json create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/index.js create mode 100644 frontend/src/components/ViolationModal.vue create mode 100644 frontend/src/router/index.js create mode 100644 frontend/src/views/Home.vue create mode 100644 frontend/src/views/Login.vue create mode 100644 frontend/src/views/Mine.vue create mode 100644 frontend/src/views/Records.vue create mode 100644 frontend/src/views/Stats.vue create mode 100644 nginx.conf diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..7764c16 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.14-slim +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY ./app /app/app +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/auth.py b/backend/app/auth.py new file mode 100644 index 0000000..d2288e9 --- /dev/null +++ b/backend/app/auth.py @@ -0,0 +1,25 @@ +from jose import JWTError, jwt +from datetime import datetime, timedelta +from fastapi.security import OAuth2PasswordBearer +from fastapi import Depends, HTTPException + +SECRET_KEY = "your-secret-key-change-in-production" # 生产环境用环境变量 +ALGORITHM = "HS256" +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/token") + +def create_access_token(data: dict, expires_delta: timedelta): + to_encode = data.copy() + expire = datetime.utcnow() + expires_delta + to_encode.update({"exp": expire}) + return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) + +def get_current_user(token: str = Depends(oauth2_scheme)): + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + username: str = payload.get("sub") + role: str = payload.get("role") + if username is None: + raise HTTPException(401, "无效令牌") + return {"username": username, "role": role} + except JWTError: + raise HTTPException(401, "令牌验证失败") \ No newline at end of file diff --git a/backend/app/crud.py b/backend/app/crud.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/database.py b/backend/app/database.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..61cc50a --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,35 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from .database import engine, Base +from .routers import violations, debts, rewards, stats + +Base.metadata.create_all(bind=engine) + +app = FastAPI(title="自律公约执行系统") + +# CORS +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # 生产环境应限制域名 + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(violations.router, prefix="/api/violations", tags=["violations"]) +app.include_router(debts.router, prefix="/api/debts", tags=["debts"]) +app.include_router(rewards.router, prefix="/api/rewards", tags=["rewards"]) +app.include_router(stats.router, prefix="/api/stats", tags=["stats"]) + +@app.get("/") +def root(): + return {"status": "ok"} + +@app.on_event("startup") +def init_users(): + db = next(get_db()) + if not db.query(User).first(): + db.add_all([ + User(username="parent", hashed_password=pwd_context.hash("family2026"), role="parent"), + User(username="child", hashed_password=pwd_context.hash("self2026"), role="child") + ]) + db.commit() \ No newline at end of file diff --git a/backend/app/models.py b/backend/app/models.py new file mode 100644 index 0000000..c86f921 --- /dev/null +++ b/backend/app/models.py @@ -0,0 +1,55 @@ +from passlib.context import CryptContext +from sqlalchemy import Column, Integer, String, Date, Boolean, Float, DateTime +from sqlalchemy.ext.declarative import declarative_base + +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") +Base = declarative_base() + +class Violation(Base): + __tablename__ = "violations" + id = Column(Integer, primary_key=True, index=True) + date = Column(Date, nullable=False) + type = Column(String, nullable=False) + clause = Column(String) + sanction_level = Column(Integer) # 1/2/3 + executed = Column(Boolean, default=False) + confirmed = Column(Boolean, default=False) + remark = Column(String) # 含屏幕时间 + star_mark = Column(Boolean, default=False) + +class Debt(Base): + __tablename__ = "debts" + id = Column(Integer, primary_key=True, index=True) + date = Column(Date) + task_name = Column(String) + owed_amount = Column(Float) + interest_rate = Column(Float, default=1.5) + due_amount = Column(Float) + completed = Column(Boolean, default=False) + completion_date = Column(Date) + +class Reward(Base): + __tablename__ = "rewards" + id = Column(Integer, primary_key=True, index=True) + type = Column(String) # 全勤/时长之星等 + achieve_date = Column(Date) + content = Column(String) + exchange_date = Column(Date) + confirmed = Column(Boolean, default=False) + +class Parameter(Base): + __tablename__ = "parameters" + id = Column(Integer, primary_key=True, index=True) + name = Column(String, unique=True) + value = Column(String) + effective_date = Column(Date) + +class User(Base): + __tablename__ = "users" + id = Column(Integer, primary_key=True) + username = Column(String, unique=True, nullable=False) + hashed_password = Column(String, nullable=False) + role = Column(String, default="child") # parent / child + + def verify_password(self, password: str) -> bool: + return pwd_context.verify(password, self.hashed_password) \ No newline at end of file diff --git a/backend/app/routers/auth.py b/backend/app/routers/auth.py new file mode 100644 index 0000000..b665251 --- /dev/null +++ b/backend/app/routers/auth.py @@ -0,0 +1,19 @@ +from fastapi import APIRouter, Depends, HTTPException +from fastapi.security import OAuth2PasswordRequestForm +from sqlalchemy.orm import Session +from ..database import get_db +from .. import models, auth +from datetime import timedelta + +router = APIRouter() + +@router.post("/token") +def login(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)): + user = db.query(models.User).filter(models.User.username == form_data.username).first() + if not user or not user.verify_password(form_data.password): + raise HTTPException(401, "用户名或密码错误") + access_token = auth.create_access_token( + data={"sub": user.username, "role": user.role}, + expires_delta=timedelta(hours=24) + ) + return {"access_token": access_token, "token_type": "bearer"} \ No newline at end of file diff --git a/backend/app/routers/debts.py b/backend/app/routers/debts.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/routers/rewards.py b/backend/app/routers/rewards.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/routers/stats.py b/backend/app/routers/stats.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/routers/violations.py b/backend/app/routers/violations.py new file mode 100644 index 0000000..ff503f4 --- /dev/null +++ b/backend/app/routers/violations.py @@ -0,0 +1,14 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session +from ..database import get_db +from .. import crud, schemas + +router = APIRouter() + +@router.post("/", response_model=schemas.ViolationOut) +def create_violation(violation: schemas.ViolationCreate, db: Session = Depends(get_db)): + return crud.create_violation(db, violation) + +@router.get("/", response_model=list[schemas.ViolationOut]) +def list_violations(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): + return crud.get_violations(db, skip=skip, limit=limit) \ No newline at end of file diff --git a/backend/app/schemas.py b/backend/app/schemas.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..d5ba3f8 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,6 @@ +fastapi +uvicorn[standard] +sqlalchemy +pydantic +python-jose[cryptography] +passlib[bcrypt] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8328198 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +services: + backend: + build: ./backend + container_name: convention-backend + ports: + - "44310:8000" + volumes: + - ./backend/data:/app/data # SQLite 文件持久化 + environment: + - SECRET_KEY=your-long-random-string + - DATABASE_URL=sqlite:///./data/convention.db + restart: unless-stopped + + frontend: + build: ./frontend + container_name: convention-frontend + ports: + - "4431:80" + depends_on: + - backend + restart: unless-stopped \ No newline at end of file diff --git a/docs/家庭共修公约.html b/docs/家庭共修公约.html new file mode 100644 index 0000000..73f19e4 --- /dev/null +++ b/docs/家庭共修公约.html @@ -0,0 +1,1668 @@ + + +
+ + +(第一版)
+ + + + ++ 为规范本人日常行为,培养时间管理能力与自律意识,保障学业与身心健康协调发展,特制定本公约。 +
+ ++ 适用于学期内周一至周日及各类假期(节假日、寒暑假另有特别规定见第八章)。 +
+ ++ 本公约由本人自愿订立,经家长及监督人确认后生效,具有家庭内部约束力。双方理解本公约不创设法律义务,但愿意以家庭荣誉和彼此信任共同遵守。 +
+ ++ 本公约条款如产生歧义,由订立人与监督人协商解释。协商不成的,以最有利于本人习惯养成的方向解释。双方在履约过程中对条款理解产生分歧的,应在《违规记录表》备注栏中如实记录分歧要点,并于当周回顾时协商处理。若经协商认为有必要修改条款,则按第二十一条程序启动修订。 +
+ ++ 指具有严格时限要求、过期即丧失履行意义的事项。学期内包括: +
+寒暑假期间的 A 类任务定义见第八章特别规定。
+ ++ 指具备弹性时限、允许在一定周期内延期补做的事项。包括: +
+指不触发制裁、但须如实记录的事项。包括:
++ C + 类任务仅用于自我觉察与复盘,不纳入违规计分。记录载体为附件一《违规记录表》备注栏,日常可通过网站 + nurture.ppuc.lssa.fun 在线填写,线下表格仅作备份。 +
+ ++ 指未按照本公约规定的时限、标准或流程完成相应事项的行为。 +
+ ++ 指对 B + 类任务在未完成当日后的次日内予以补充完成的行为。 +
+ ++ 指补做时需在原任务量基础上增加的比例系数。当前数值见附件五《执行参数配置表》,后续可根据阶段变化由双方协商调整。 +
+ ++ 指本公约的执行监督方,即父母或兄长(或其中一方),职责包括: +
++ 指从某个日期起算,期间无任何违规行为的累计天数。若发生违规,则连续周期中断,自次日起重新起算。 +
+ ++ “学期”指学校教学周,“假期”包括周末、法定节假日、寒暑假。不同时期的规则适用以第八章为准。 +
+ ++ 本公约所涉行为,按内在属性分为四类,帮助理解公约设计逻辑。具体条款效力仍以 + A/B/C 类区分及后续各章规定为准: +
+有下列情形之一的,认定为违规:
++ 经认定违规的,立即执行“餐后厨房与餐厅清洁义务”,标准如下: +
++ 执行期限:须在违规当日下一餐结束后 30 分钟内启动清洁工作,且须经监督人检查确认合格。 +
++ 因突发疾病、学校临时安排、家庭紧急事务等原因导致无法履行 A + 类任务的,经监督人书面确认后,不计为违规。 +
+ ++ B 类任务须在当日 22:00 前完成。假期弹性时限见第八章。 +
++ 若在当日 22:00 + 前开始执行但比预定时间晚开始的,按以下方式处理: +
+有下列情形之一的,认定为完全未完成:
++ 处理方式:次日须补做,补做量 = 原定量 × 利息倍数(利息倍数见附件五)。 +
++ 若次日仍未按 3.4 + 款完成补做的,触发本公约第五章(违规分级制裁)中的三级制裁。 +
++ 因身体不适、学校考试等正当理由未完成的,经监督人确认后可不计入违规,但须在后续3 天内择期补做。 +
++ 若本人于当日20:00 前主动启动所有 B + 类任务,并在 21:00 + 前全部完成,可在当日的《违规记录表》上获得一个“星标”。累计获得3 个“星标”,可抵消一次一级制裁中的打扫义务(即豁免一次第二章的餐后清洁)。星标一经使用即清零。 +
+ +单次如厕时长不得超过15 分钟。
++ 设置手机闹钟为13 分钟,响铃时须立即结束并离开卫生间。 +
++ 超过 15 分钟未离开,或未在闹钟响铃后 3 + 分钟内离开的,认定为超时违规。 +
++ 自离开卫生间起后 24 小时内,不得将手机、平板电脑等电子产品带入卫生间及浴室。监督人有权在本人进入前要求将手机放于客厅指定位置。 +
+连续两日超时,禁带期限延长至48 小时。
+ +单次淋浴时长不得超过20 分钟。
++ 闹钟设定为18 分钟,响铃后须在 2 + 分钟内关闭水流。 +
+超 20 分钟未关水认定为超时违规。
++ 同第四条禁带令。同日如厕和洗澡均超时,禁带期限以较晚结束者起算 + 24 小时,不重复叠加。 +
+ ++ 每日22:30(假期可延至 + 23:00,见第八章),本人须将手机、平板等娱乐电子设备放置于客厅指定充电区域,不得以任何理由保留于卧室。 +
++ 次日完成 A + 类任务“按时起床”前,不得取回手机。起床后至上学前如需使用,须在餐厅或客厅等公共区域,不得带回卧室。 +
++ 违反上述任一款,次日全天执行“手机禁用令”——手机仅保留通话与基础查资料功能,由监督人代为保管。 +
+ ++ 每日22:50 前须躺下准备入睡(熄灯或仅保留弱光阅读灯),不得再进行任何需使用电子设备的活动。 +
++ 超过 22:50 + 仍未躺下,或在床上使用手机、平板等设备的,认定为就寝违规。 +
++ 就寝违规计入违规累计(每次计 1 + 次),并触发次日“手机禁用令”(同 6.3 款)。 +
+ ++ 每日除学习必要外的娱乐屏幕时间,建议不超过1 小时(具体可参考附件五执行参数)。 +
++ 本人须在每日 22:30 + 前,在《违规记录表》备注栏如实填写当日娱乐屏幕时间估算值。未填写的,不触发制裁,但视为未完成 + C 类任务。 +
+ ++ 以一个自然周(周一至周日)为统计周期,周日 + 24:00 归零重计。 +
++ C + 类任务(屏幕时间日志、冷静期记录)不计入违规。 +
+触发条件:单次违规(未达到累计条件)。
++ 制裁措施:执行对应条款具体后果(如打扫、禁带令等)。 +
++ 触发条件:同一周期内累计达到2 次违规。 +
++ 制裁措施:一级制裁全部内容 + + 次日全天禁止手机带入卫生间。 +
++ 触发条件:累计达到3 次或以上违规,或 B 类任务次日仍未补做。 +
++ 制裁措施:执行一、二级全部内容 + + 扣除“发呆自由时间”1 小时(若无则顺延至下周扣除)。 +
++ 每周日 + 22:00,监督人与本人共同回顾。若本人当周达到三级制裁,但在周日晚间主动完成一次“厨房深度清洁”(标准高于第二章日常打扫,需经监督人验收),可将三级制裁降为二级执行。此条款为一次性修复机会,不可累积。 +
++ 监督人执行时须引用具体条款,本人须配合,不得拒绝。 +
+ ++ 一周内 A 类任务无违规,B + 类任务无完全未完成记录,且累计违规不超过 1 次。 +
++ 次周兑换一样指定美食(奶茶、蛋糕、炸鸡等),由监督人采购或制作。 +
+当周奖励须在次周内兑换,逾期作废。
+ +连续7 日无如厕/洗澡超时违规。
++ 达成当周周末兑换1 小时“绝对自由发呆时间”。 +
++ 本人兑换发呆时间时,须提前告知监督人并放置“请勿打扰”标识。一旦开始计时,若非安全紧急情况,监督人任何一次打断都将导致本次发呆计时重置,从头开始。确保奖励体验绝对完整。 +
+仅当周周末有效,特殊情况下经同意可顺延一次。
+ ++ 同时达成第十条与第十一条条件的,两项奖励可兼得。 +
+ ++ 写作业期间允许使用手机播放音乐,但须同时满足以下条件: +
+有下列情形之一的,认定为违反听歌规则:
++ 经认定听歌违规的,当日剩余写作业时间不得再以任何形式使用手机播放音乐,仅可接受由监督人用外部音响播放纯音乐(曲目由监督人选定)。同时,该次违规计入违规累计。 +
+ ++ 写作业过程中遇疑难题目,允许使用手机查阅 AI + 或网络资料,但须同时满足以下条件: +
+有下列情形之一的,认定为违反查题规则:
+经认定查题违规的:
++ 查完 AI + 并锁定答案后,本人须用红笔在草稿纸上将该题的关键解题步骤完整写出一遍。未完成该步骤的,视为该题仍未“彻底完成”,不得计入作业完成清单。 +
+ ++ 因突发疾病、学校临时活动、家庭紧急事务、断电断网等不可抗力导致违约,本人须在事发后1 小时内口头告知,监督人确认后记为“豁免”。 +
+期中、期末、月考前三日至考试结束当日。
++ 考试周内达成“时长管控之星”,奖励翻倍为2 小时发呆自由时间。 +
+ +周六、周日及 3 天以内法定节假日。
+若周末有补习或特殊安排,经双方同意可按学期日标准执行。
+ +以学校正式公布的寒暑假起止日期为准。
++ 每日起床闹钟可设定不晚于上午 9:00,须在 10 + 分钟内完成起床。 +
+寒暑假期间,A 类任务为:
++ 连续21 天全勤(无任何违规)可兑换一次“半日自由出行”(地点、交通须经家长同意并确保安全)。该奖励与周奖励不冲突。 +
++ 每次进入或退出考试周、小长假、寒暑假时,本人与监督人须在《违规记录表》备注栏共同签字确认,明确当日启用哪套规则。 +
+ ++ 本公约自2026 年 8 月 6 日起生效,有效期至2027 年 8 月 6 日,期满可续签或修订。 +
++ 生效后前 14 天为试行期,期间本人可提出异议,经同意可临时调整。试行期结束后正式执行。 +
+ ++ 若连续三周因公约执行导致本人出现明显焦虑、抵触情绪或亲子关系严重紧张,经本人或监督人提议,双方可协商暂停公约一周,进行无惩罚的弹性调整。暂停期间不记录违规,但 + C 类任务(屏幕时间日志)仍建议如实记录,以供复盘中参考。 +
++ 暂停结束后,双方应就触发暂停的条款进行商议,决定是否启动修订程序。 +
++ 存在歧义或未规定情形,由双方协商解决,以有利于习惯养成的方向解释。 +
+
+ 本公约的执行可借助电子化工具辅助记录与提醒。家长已开发公约执行网站,网址为:https://nurture.ppuc.lssa.fun。网站将作为附件日常填写与记录的主要平台,包括但不限于违规记录、奖励兑换、债务补做、星标备忘录、执行参数配置及自定义任务清单等。电子化工具仅作为记录与提醒的辅助手段,不改变本公约条款的约束力与解释方式。若电子化工具中展示的规则与本文本不一致,以本文本为准。线下签字版本仍为最终依据,双方可定期将网站记录导出打印并签字存档。
+
+ 我们理解本公约不创设法律义务,但愿意以家庭荣誉和彼此信任共同遵守。 +
+| 角色 | +签名 | +日期 | +
|---|---|---|
| 订立人(本人) | ++ | 年 月 日 | +
| 监督人(父) | ++ | 年 月 日 | +
| 监督人(母) | ++ | 年 月 日 | +
| 监督人(兄) | ++ | 年 月 日 | +
注:签名区使用留白,实际签署时请手写填入。
+ + + +| 日期 | +违规事项 | +违规条款 | +触发制裁 | +执行情况(监督人确认) | +本人确认 | +备注(含屏幕时间/冷静期/分歧记录等) | +
|---|---|---|---|---|---|---|
| 月/ 日 | ++ | + | + | + | + | + |
| 月/ 日 | ++ | + | + | + | + | + |
+ 填写人:由监督人主笔填写,本人核对并签字确认。双方对记录内容有分歧时,应在备注栏注明异议。日常记录优先使用网站 + nurture.ppuc.lssa.fun,本表可每周打印归档。 +
++ 填写时机:每日 22:30 + 前完成当日记录。若当日无违规,可仅填日期并在“违规事项”列写“无”或留空,但须在备注栏填写屏幕时间估算值(C + 类任务)。 +
+各列说明:
+| 列名 | +填写内容 | +示例 | +
|---|---|---|
| 日期 | +记录发生违规的具体日期,格式为“月/日” | +8/6 | +
| 违规事项 | +简要描述违规行为,如“起床超时”“跳绳未完成”“如厕超时”等 | +作业超时未完成 | +
| 违规条款 | +引用公约中对应的条款编号,便于后续核对 | +第2.2条(三) | +
| 触发制裁 | +记录该次违规触发的具体制裁级别和内容 | +一级制裁:餐后清洁 | +
| 执行情况 | +监督人确认制裁是否在规定时间内完成,是否达标 | +已完成,验收合格 | +
| 本人确认 | +本人签字或打勾表示认可记录属实 | +✓ | +
| 备注 | +
+ 用于补充特殊信息,包括但不限于: ①当日娱乐屏幕时间估算值(C + 类任务,每日必填); ②冷静期记录(与监督人冲突后的简要复盘); ③模式切换确认(进入/退出考试周、假期时双方签字); ④获得“星标”的记录; ⑤不可抗力豁免的简要说明; ⑥对公约条款理解产生分歧时,简要记录分歧要点 + |
+ + 屏幕时间约40分钟;对作业时限理解有分歧,已协商;寒假模式切换确认 + | +
C 类任务记录规范:
+约45分钟。允许粗略估计。
+ 因手机问题争执,下次可提前说明使用时长。不强制格式,重在复盘而非追责。
+ 分歧记录规范:
++ 当双方对条款理解产生争议时,在备注栏记录分歧内容及初步协商结果。若无法当场解决,应注明“待回顾协商”,并于当周回顾时处理。若回顾后认定需要修订条款,则依据第二十一条启动修改程序,并将最终修订情况记载于附件五《执行参数配置表》的“参数变更记录”区域或未来建立的正式修订记录中。 +
+ + + +| 奖励类型 | +达成日期 | +达成条件 | +兑换内容 | +兑换日期 | +监督人确认 | +
|---|---|---|---|---|---|
| 任务全勤奖励 | +月/ 日 | +一周无违规 | ++ | 月/ 日 | ++ |
| 时长管控之星 | +月/ 日 | +连续 7 天不超时 | ++ | 月/ 日 | ++ |
| 寒暑假全勤奖 | +月/ 日 | +连续 21 天无违规 | ++ | 月/ 日 | ++ |
+ 填写人:由本人提议兑换时,双方共同填写。监督人负责最终确认。日常记录可通过网站 + nurture.ppuc.lssa.fun 完成,本表用于阶段性存档。 +
++ 填写时机:奖励达成条件满足后 24 + 小时内启动兑换流程,实际兑换完成后记录。 +
+各列说明:
+| 列名 | +填写内容 | +示例 | +
|---|---|---|
| 奖励类型 | +填写奖励名称,三选一 | +任务全勤奖励 | +
| 达成日期 | +填写条件达成的周日日期(全勤奖)或达成当日日期 | +8/12 | +
| 达成条件 | +简要勾选或描述达成条件 | +一周无违规,A类全勤 | +
| 兑换内容 | +本人指定的具体奖励内容 | +珍珠奶茶大杯 或 周六下午发呆1小时 | +
| 兑换日期 | +实际兑换的日期 | +8/13 | +
| 监督人确认 | +监督人签字或打勾,表示奖励已兑现 | +✓ | +
兑换时效提醒:
+| 日期 | +亏欠任务 | +亏欠个数/时长 | +利息倍数 | +应补个数/时长 | +补做日期 | +补做完成(监督人确认) | +
|---|---|---|---|---|---|---|
| 月/ 日 | ++ | + | + | + | + | + |
| 月/ 日 | ++ | + | + | + | + | + |
+ 填写人:由监督人填写,本人在“补做日期”完成后共同核对确认。日常可通过网站 + nurture.ppuc.lssa.fun 记录债务,本表备用。 +
++ 填写时机:发生 B + 类任务“完全未完成”时立即登记债务;补做完成后当日更新“补做完成”列。 +
+各列说明:
+| 列名 | +填写内容 | +示例 | +
|---|---|---|
| 日期 | +发生亏欠的原始日期 | +8/7 | +
| 亏欠任务 | +具体任务名称 | +跳绳 或 复习与预习 | +
| 亏欠个数/时长 | +原始应完成但未完成的量 | +1000个 或 30分钟 | +
| 利息倍数 | +填写附件五中当前生效的利息倍数 | +1.5 | +
| 应补个数/时长 | +亏欠量 × 利息倍数 | +1500个 或 45分钟 | +
| 补做日期 | +实际补做的日期,须为亏欠次日(含)以后 | +8/8 | +
| 补做完成 | +监督人验收后签字或打勾 | +✓ 已完成1500个 | +
重要提醒:
+| 日期 | +事项(获星标/豁免/情绪罚单等) | +本人确认 | +监督人确认 | +
|---|---|---|---|
| + | + | + | + |
| + | + | + | + |
+ 填写人:由本人或监督人提议记录时填写,双方签字确认。优先使用网站 + nurture.ppuc.lssa.fun 记录,本表备份。 +
++ 填写时机:事件发生当日记录,确保信息准确。 +
+各列说明:
+| 列名 | +填写内容 | +示例 | +
|---|---|---|
| 日期 | +事件发生日期 | +8/8 | +
| 事项 | +简要描述特殊事件类型和内容 | ++ 获星标:今日20点前完成全部B类任务 或 豁免:因感冒免跳绳一天 或 + 情绪罚单:妈妈本周第2次罚单,我获得30分钟发呆时间 + | +
| 本人确认 | +本人签字或打勾 | +✓ | +
| 监督人确认 | +监督人签字或打勾 | +✓ | +
星标使用流程:
+使用3个星标,豁免本次餐后清洁义务。
+ + 本附件集中记录公约中所有可随阶段调整的数值参数,便于双方随时查阅与协商更新。参数一经双方签字确认,即作为公约的有机组成部分,与正文条款具有同等约束力。参数调整可通过网站 + nurture.ppuc.lssa.fun 发起并记录,但须线下签字确认。 +
+| 参数名称 | +适用条款 | +当前设定值 | +备注 | +
|---|---|---|---|
| 跳绳每日个数 | +第 3.1 条 | +1000 个 | +可分多组完成 | +
| 背单词每日新词数 | +第 3.1 条 | +20 个 | +须复习前一日单词 | +
| 复习与预习每日时长 | +第 3.1 条 | +复习 15 分钟 + 预习 15 分钟(合计 30 分钟) | +可根据学业阶段调整 | +
| 利息倍数 | +第 1.6 条、第 3.4 条 | +1.5 倍 | +补做量 = 原定量 × 此倍数 | +
| 娱乐屏幕时间建议上限 | +第 8.1 条 | +1 小时/日 | +非强制性建议 | +
| 如厕时限 | +第 4.1 条 | +15 分钟 | ++ |
| 洗澡时限 | +第 5.1 条 | +20 分钟 | ++ |
| 起床时限(学期) | +第 2.1 条 | +10 分钟 | +学期内标准 | +
| 作业完成时限 | +第 2.1 条 | +21:00(可延至 22:00) | ++ |
| 就寝时限(学期) | +第 7.1 条 | +22:50 | +学期内标准 | +
| 寒暑假每日学习时长 | +第 18.3 条 | +4 小时 | ++ |
| 寒暑假课外阅读时长 | +第 18.4 条 | +30 分钟 | ++ |
+ 以下区域用于记录参数的调整历史。每次调整需经双方签字,并注明生效日期。此记录可视为公约的修订补充页。 +
+| 变更日期 | +变更参数 | +原值 → 新值 | +变更理由 | +订立人签字 | +监督人签字 | +
|---|---|---|---|---|---|
| + | + | + | + | + | + |
| + | + | + | + | + | + |
+ 当参数变更达到一定次数或涉及多项时,双方可决定将其汇总,并视情况更新正文条款。 +
+ + + ++ 本附件用于记录本人根据 1.2 + 条(四)款自行列入计划的日常训练项目。所列任务视为 B + 类任务,适用补做、利息及违规计分规则。任务若有完成标准、时长或个数要求,应在此明确写明。可通过网站 + nurture.ppuc.lssa.fun 填写并同步更新。 +
+| 序号 | +任务名称 | +完成标准(个数/时长/内容) | +每日时限 | +生效日期 | +本人签字 | +监督人签字 | +备注 | +
|---|---|---|---|---|---|---|---|
| 1 | ++ | + | + | + | + | + | + |
| 2 | ++ | + | + | + | + | + | + |
| 3 | ++ | + | + | + | + | + | + |
+ 本公约共十章二十七条,附件六份。它是一份活的契约,服务于成长,而非单纯的束缚。愿秩序之下,自由生长。 +
+ + diff --git a/docs/网站原型.html b/docs/网站原型.html new file mode 100644 index 0000000..03262a5 --- /dev/null +++ b/docs/网站原型.html @@ -0,0 +1,1342 @@ + + + + + +