dtmp-edu-open-widgets

Deprecated - 该方案为 2020.5.11 前的【临时方案】 - 如在该时间之后请使用钉钉小程序插件方案,联系钉钉教育线同学既可

Usage no npm install needed!

<script type="module">
  import dtmpEduOpenWidgets from 'https://cdn.skypack.dev/dtmp-edu-open-widgets';
</script>

README

dtmp-edu-open-widgets

钉钉教育选班级组件

  • Deprecated
    • 该方案为 2020.5.11 前的【临时方案】
    • 如在该时间之后请使用钉钉小程序插件方案,联系钉钉教育线同学既可

使用说明

服务端

  • 请代理钉钉开放平台教育线如下 3 个接口:
    • edu/class/listbyteacher
    • edu/class/student/get
    • edu/class/student/list
  • 代理说明
    • request post url 中添加 access_token
    • request post body 透明转发
    • response body 透明转发

小程序

安装

  • npm install dtmp-edu-open-widgets
  • cp -R ./node_modules/dtmp-edu-open-widgets ./widgets
    • widgets 不能修改为其他命名,必须要在小程序根目录
  • app.json 放入如下页面
    • widgets/pages/choose-classes/index

使用

// page.js
import { chooseClasses, setHttpApiMap } from '../../widgets';

// 代理【开放平台接口】
setHttpApiMap({
  "edu/class/listbyteacher": 'https://mydomain.com/edu/class/listbyteachera',
  "edu/class/student/get": 'https://mydomain.com/edu/class/student/get',
  'edu/class/student/list': 'https://mydomain.com/edu/class/student/list'
});


onChooseClassTap() {
  // chooseClasses 选项见下面 ChooseClassesOption 类型
  chooseClasses({
    corpId: 'corpId',
    // 当前用户的 userId
    userId: 'userId',

    hideStudentPicker: true,
    pageTitle: '选择班级',
  }).then(classes => {
    dd.alert({
      title: '选中班级',
      content: JSON.stringify(classes, null, 2)
    });
  });
}
export interface PickedClass {
  classId: string;
  /**
   * 是否全选班级
   */
  isAll: true;
}

export interface PickedStudents {
  classId: string;
  /**
   * 被选中的学生staffId
   */
  studentIds: string[];
}

/**
 * 班级选项
 */
export interface ChooseClassesOption {
  corpId: string;

  /**
   * 最大可选学生数
   */
  maxStudents?: number;

  /**
   * 页面标题
   */
  pageTitle?: string;
  /**
   * 页面上部的提示信息
   */
  tip?: string;
  /**
   * 页面右下角的默认提示
   */
  advice?: string;

  /**
   * 是否隐藏学生的家长信息
   */
  hideGuardian?: boolean;

  /**
   * 页面上部的提示信息
   */
  hint?: string;

  /**
   * 已选的学生
   */
  pickedStudents?: (PickedClass | PickedStudents)[];

  /**
   * 只能选择到班级维度,不提供选择班级下学生入口
   */
  hideStudentPicker?: boolean;

  /**
   * 以「role」的角色查询所在的班级,比如:查询当前用户作为「老师」角色所在的班级
   * - 默认为 EChooseStudentRole.teacher
   */
  role?: EChooseStudentRole;

  /**
   * 以「群类型」过滤班级列表,比如:查询「师生群」的所有班级列表
   * - 不传递该参数是返回所有班级列表
   */
  groupType?: EChooseStudentGroupType;
}

export enum EChooseStudentGroupType {
  /**
   * 官方班级群(老师 & 家长)
   */
  OfficialClassGroup = 'officialClassGroup',

  /**
   * 官方师生群 (老师 & 学生)
   */
  TeacherStudentGroup = 'teacherStudentGroup',
}

export enum EChooseStudentRole {
  teacher = 'teacher',
  guardian = 'guardian',
  all = 'all',
  student = 'student',
}

/**
 * 返回的学生数据类型
 */
export interface StudentShape {
  name: string;
  /**
   * 工号
   */
  staffId: string;
  avatar?: string;
  /**
   * 家长
   */
  guardians?: {
    name: string;
    relationName: string;
    /**
     * 工号
     */
    staffId: string;
    avatar?: string;
    /**
     * 是否已经激活
     */
    isActive: boolean;
  }[];
}

export enum ChooseClassesErrorCode {
  /**
   * 用户取消
   */
  Cancel = 1,
}

/**
 * chooseClasses() promise reject 时返回的类型
 */
export interface ChooseClassesError {
  code: ChooseClassesErrorCode;
  message: string;
}

/**
 * chooseClasses() promise resolve 时返回的类型
 */
export interface ChooseClassesData {
  classId: string;
  className: string;
  isAll: boolean;
  students: StudentShape[];
}