Skip to content

Repository files navigation

CRIS · 性别角色探索测验

移动优先的双维度自我探索网页与四象限可视化。

Scale Dimensions UI Purpose

在线体验

Note

本项目适合自我探索与研究原型展示,不应把单次网页结果用于临床诊断、人格定性或对个体作高风险决策。

一个移动优先的性别角色自我探索网页:基于中国大学生性别角色量表(CSRI-50),在「男性化 / 女性化」两个独立维度上看见自己的交织方式,并在四象限落点图上找到自己的位置、看见其他真实填写者的分布。

这是什么

基于 中国大学生性别角色量表(CSRI-50,刘电芝 等 2011,心理学报) 编制。该量表在 Sandra Bem (1974) 的 BSRI 与钱铭怡 (2000) 的 CSRI 基础上重编,采用全国 5008 名大学生常模,是当前国内性别角色研究最普遍使用的版本。

50 题 7 点量表,帮你在「男性化 / 女性化」两个独立维度上看见自己的交织方式,并被归类为四种类型之一(双性化 / 男性化 / 女性化 / 未分化)。报告按你的类型着色,给出暖心、启发、且客观谨慎的解读。为更通俗,应用对外也常把这两个维度表述为「坚韧果断」与「温柔共情」两种特质。

功能特性

  • 📱 移动优先:单栏响应式、大按钮、进度条,手机上体验完整。
  • 🚻 开场只问性别(👦 男生 / 👧 女生),仅用于落点图配色与群体对照(男=蓝、女=粉),不进入计分。
  • 🧮 严谨计分:男性化 (M)、女性化 (F) 各 16 题均值,中性 18 题作干扰不计分;以 男性化 4.8 / 女性化 5.0 为 CSRI-50 常模中位数分界。
  • 🌐 四象限落点图:横轴=女性化、纵轴=男性化,分界两轴不同(4.8 / 5.0),色块非正方;男蓝、女粉。
  • 👥 可见真实群体分布:接入后端时显示实时真实累积的全体落点(按匿名 uid 去重,每行一 respondent),前端用 localStorage 缓存、刷新秒开、仅增量更新。
  • 🎨 统一主题的四型报告:四种类型共享当前粉色报告主题;男性化 / 女性化的蓝粉区分主要保留在分数卡与四象限落点图中。
  • 🎉 答题鼓励:答到 1/3、2/3 时弹出动态居中撒花 / 喝彩。
  • 📸 一键下载报告截图(PNG)与 个人作答数据(JSON),并附「复制 AI 开场白」便于把数据交给别的 AI 深入对话。
  • 🔒 匿名且隐私安全:全程不采集姓名 / 微信 / IP,每人仅能取回自己的明细。
  • 📲 私人找回二维码(提交后才生成):真实提交成功后,报告底部才会生成一个私人二维码,编码你的专属恢复链接;它绝不进入「保存报告」分享图(分享图只含报告本身)。截屏单独保存此码,用手机扫一下即可回到原始作答数据,无需记住任何提取码。

界面预览

以下截图来自仓库 posters/ 目录,展示测验从开始、落点到报告的主要界面。

开始页 关于本测验 四象限落点
开始页 关于本测验 四象限落点图
你的报告(解读) 保存与分享
个性化解读报告 保存与分享报告

计分与分类规则

维度 题数 计分
男性化 (M) 16 16 题均值(1–7)
女性化 (F) 16 16 题均值(1–7)
中性(填充,不计分) 18 仅用于降低作答偏性

7 点量表:1=很不符合,2=基本不是,3=比较不符合,4=说不清,5=较符合,6=基本符合,7=很符合。

分类(分界取 CSRI-50 常模中位数,阈值源自刘电芝 2011 全国 5008 名大学生复测):

  • 双性化:M≥4.8 且 F≥5.0
  • 男性化:M≥4.8 且 F<5.0
  • 女性化:M<4.8 且 F≥5.0
  • 未分化:M<4.8 且 F<5.0

题目按 CSRI-50 原量表发表顺序混合排列(已含 M/F/中性),计分一律按类别汇总,与呈现顺序无关。 本测验仅供自我探索与科普,不构成任何临床诊断。

题目与分类(CSRI-50,按呈现顺序)

计分只取「男性化(M)」「女性化(F)」各 16 题的均值;「中性(N)」18 题仅作干扰、不参与计分。下表给出每一题的归属(与测验呈现顺序完全一致,分类依据刘电芝 2011 原量表):

题号 词项 分类 题号 词项 分类
1 有亲和力的 F 26 理性的 M
2 乐于冒险的 M 27 勤俭的 F
3 节俭的 F 28 富有同情心的 F
4 懈怠的 N 29 消极的 N
5 有领导风范的 M 30 男子气的 M
6 大度的 M 31 有爱心的 F
7 文静的 F 32 慷慨的 M
8 认真的 N 33 有组织能力的 M
9 真诚的 N 34 乐于安慰人的 F
10 自以为是的 N 35 胆大的 M
11 冷静的 M 36 不卑不亢的 N
12 孝顺的 N 37 豪放的 M
13 谦虚的 N 38 乐于助人的 N
14 善于倾听的 F 39 女子气的 F
15 沉稳的 M 40 文雅的 F
16 心细的 F 41 投其所好的 N
17 得过且过的 N 42 有领导能力的 M
18 乐群的 N 43 温柔的 F
19 能体谅人的 F 44 勇敢的 M
20 语调柔和的 F 45 墨守成规的 N
21 愉快的 N 46 诚实的 N
22 有判断力的 M 47 有支配力的 M
23 傲慢的 N 48 温顺的 F
24 心胸开阔的 M 49 不合群的 N
25 推诿责任的 N 50 善解人意的 F

合计:男性化(M) 16 题、女性化(F) 16 题、中性(N) 18 题;计分仅用 M、F 两组均值。

架构与技术栈

浏览器 (index.html 单文件静态前端)
   │  fetch 云函数 HTTP 网关
   ▼
腾讯云开发 CloudBase
   ├─ 云函数 crisApi(Node.js,无框架)
   │     GET  /api/points   全体落点(demo 已排除)
   │     POST /api/submit   写落点 + 明细,返回匿名 uid
   │     GET  /api/mine     凭恢复凭证取回本人明细(404=无记录)
   │     POST /api/delete   凭恢复凭证删除本人记录
   └─ 云数据库(Serverless 文档型)集合 responses(按 uid 主键去重)
  • 前端:纯静态单文件 index.html(内联 CSS/JS,零构建、零依赖),托管于 GitHub Pages,开箱即用。
  • 后端:腾讯云开发 CloudBase 云函数 + 文档型数据库。浏览器不携带任何密钥,仅 fetch 网关;服务端依据 50 题原始作答重算 M/F/type,绝不信任前端传来的分值。
  • 为什么这样分:静态前端走 GitHub Pages(全球 CDN、免费),数据后端走 CloudBase(大陆用户可直接上传、无需 VPN,免费体验版额度足够小众流量)。

隐私与匿名机制

  • 每次真实提交前端生成密码学安全的随机恢复凭证并存入浏览器 localStorage,连同 50 题原始作答一起发到 POST /api/submit;后端只使用该凭证的 SHA-256 派生 ID 作为文档主键,新记录不再保存明文恢复凭证。
  • 凭恢复凭证取回数据:「下载我的数据」调用 GET /api/mine 并在请求头携带恢复凭证;后端按其哈希定位记录。新生成的恢复链接使用 #recover= URL fragment;旧版 ?uid= 链接继续兼容。
  • 换手机或清缓存后,凭结果页的「数据提取码」仍可取回自己的数据。
  • 群体分布接口不泄露个人钥匙:GET /api/points 只返回全体落点的 {m, f, gender, source} 聚合,绝不返回任何 uid;结合 /api/mine 批量扒取他人 50 题作答的路径已被封死。后端对 POST /api/submit 严格校验 50 个 1–7 整数,并对单 IP 启用滑动窗口限流(429)。

数据找回(二维码)

只有服务端确认真实记录存在后,「下载数据」才会在下载 JSON 的同时生成一个单独的恢复二维码,编码 https://cochranek.github.io/cris/#recover=<恢复凭证>。恢复凭证不会写进下载的 JSON,也不会进入「保存报告」分享图;如果云端提交失败,只下载本地 JSON,不会生成一个无效的恢复二维码。

  • 二维码由页面本地内置的 assets/qrcode.min.js 生成(已随仓库打包,无需联网、无 CDN 依赖);若加载失败,该区会退化为显示明文提取码,手动抄写同样可找回。
  • 新恢复链接打开后,前端读取 #recover= 进入「找回你的数据」页并向 /api/mine 取回;旧版 ?uid= 链接仍可读取,便于兼容历史二维码。
  • 注意:同一浏览器默认复用同一恢复凭证,因此重测会覆盖该凭证对应的旧记录,二维码找回的是该凭证最新一次作答。
  • 不想保留云端数据?报告内「🗑 删除我的云端数据」按钮会调用 POST /api/delete 仅删除你本人 uid 对应记录(需二次确认)。

隐藏入口(彩蛋)

为方便演示与体验,测验内置一个非显性入口(点**第 1 题题干旁的题号「1」**触发):

  • 一键演示(点第 1 题题号「1」):自动随机作答一份合理的问卷,并仅本地生成示例报告——不提交、不落库(演示模式),帮你快速预览报告样式与自己的落点,绝不会写入后端或污染真实统计。

这个入口仅用于演示 / 便捷体验,普通用户从首页正常作答即可,无需知道它的存在。

跨平台来源标记(?src=)

若要把同一测验投到快手 / 抖音 / 小红书等不同渠道并区分来源,给每个渠道的链接加上不同参数即可:

  • 快手:https://cochranek.github.io/cris/?src=ks
  • 抖音:https://cochranek.github.io/cris/?src=dy
  • 小红书:https://cochranek.github.io/cris/?src=xhs
  • 微信:https://cochranek.github.io/cris/?src=wx
  • 测试:https://cochranek.github.io/cris/?src=test(完全不落库,仅供本地联调/预览,不写入后端)
  • 裸链(无参数):记为 direct

前端加载时读取 ?src= 并随提交一起发给后端,后端在每条记录上打 source 字段(落点与取回接口均已返回该字段)。这不是程序自动识别平台,而是你自己在链接上打的"来源标签"(类似 UTM),谁点的是哪条链接就归到哪个来源;它不依赖任何平台 API 或 referer。

注:?src=test 为纯本地演示来源——不提交、不落库,不会产生任何后端记录,也不计入任何统计;其余来源(如 wx)会正常打 source 字段并落库。

⚠️ 要让 source 真正落库,需把改后的云函数重新部署到 CloudBase(ENV_ID=xxx bash cloudbase/deploy_cloudbase.sh);仅更新前端不会写库。之后把 /api/points 全量落点按 source 分组,即可在 Excel / Python 里对比各渠道的 M/F/type 分布与性别比。 ⚠️ 方法学:这测的是"经某渠道招募来的受访者",不是该平台全体用户的性别角色分布;匿名方案跨设备不去重,同一人点不同链接会产生多个 uid(重复计数)。

已知限制

  • 匿名去重的固有代价:同一浏览器反复作答默认复用同一恢复凭证并覆盖旧记录;但换浏览器 / 清缓存 / 无痕模式会产生新的随机凭证,从而被重复计数。这是纯匿名方案的两难,若需严格去重需引入账号体系。
  • 演示数据已隔离:带 demo 标记的记录不计入真实分布,但会占用数据库条目;生产环境可按需定期清理。
  • 冷启动延迟:CloudBase 免费版云函数首次调用可能有数百毫秒~1 秒冷启动,仅影响首访,无需预优化。
  • 非临床工具:本测验基于公开学术量表,仅供科普与自我探索,不构成任何临床诊断。

目录结构

index.html                    单文件前端(内联 CSS/JS:题项 / 计分 / 报告 / 绘图 / 彩蛋)
assets/                       前端运行时依赖(qrcode.min.js 生成私人找回二维码 / html2canvas.min.js 保存报告截图)
posters/                      宣传与文档用截图(README「界面预览」所用:cover / about / quadrant / interpret / save)
cloudbase/crisApi/            生产后端(CloudBase 云函数 + 云数据库)
cloudbase/deploy_cloudbase.sh CloudBase 一键部署脚本(需先 tcb login)
cloudbase/DEPLOY.md           后端部署与跨域配置详细手册

本地预览(纯静态,无后端)

python3 -m http.server 8000
# 浏览器打开 http://localhost:8000

此时落点图仅展示本人落点(无群体分布),其余功能完整体验。

部署

  • GitHub Pages(纯静态,开箱即用):把 index.html 推到 main 分支根目录即可。
  • 带真实后端(推荐,显示真实全体落点):把 cloudbase/crisApi/ 部署到腾讯云开发 CloudBase(大陆可达·免费额度), 在环境里建一个 云数据库集合 responses,为该云函数开 HTTP 触发 / 云接入 并配置跨域白名单 https://cochranek.github.io, 再把 index.html 顶部的 const API_BASE 指向云函数域名。注意:CloudBase 默认域名实际形如 https://<ENV_ID>-<APP_ID>.<地域>.app.tcloudbase.com/crisApi (<APP_ID> 是腾讯云账号 appid;控制台「访问服务 / 网关」页显示的完整域名才是对的,不要漏掉 -<APP_ID> 后缀)。 详细步骤见 cloudbase/DEPLOY.md。每位真实填写者的落点都会被累积,前端读取的是真实全体分布(大陆用户可直接上传,无需 VPN)。 需要重新部署后端时,运行 ENV_ID=xxx bash cloudbase/deploy_cloudbase.sh。

许可证与免责

  • 测验内容基于 公开学术量表 CSRI-50(刘电芝 等,2011,心理学报) 编制;本项目以 MIT 许可证 开源(见仓库根目录 LICENSE),可自由用于科普、学习与二次开发,请保留量表出处署名。
  • 本作品仅供科普与自我探索,不构成任何临床诊断,也不对基于本测验的任何决策负责。

About

CSRI-50 中文版性别角色探索测验(移动优先单文件前端 + CloudBase 后端)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages