import React, {FC, useCallback, useEffect, useState} from "react"; import {Checkbox, Switch, View} from "@tarojs/components"; import Taro from "@tarojs/taro"; import {curriculum} from "@/api"; import PopPut from "@/components/popPut/popPut"; import folder from "@/static/img/folder.png"; import MyButton from "@/components/button/MyButton"; import storageDep from "@/hooks/storageDep"; import Spin from "@/components/spinner"; /** * 选择部门 depIds 是 JSON = number[] * required 是 必修选修 */ const SelectDep: FC = () => { const params = Taro.getCurrentInstance()?.router?.params as { depIds: string, required: string | undefined } const [ids, setIds] = useState([]) const [deps, setDeps] = useState([]) const [required, setRequired] = useState([]) const [enable, setEnable] = useState(true) useEffect(() => { curriculum.department().then(res => { setDeps(res.data) }) setEnable(false) setIds(JSON.parse(params.depIds)) setRequired(JSON.parse(params.required || "[]")) }, []) const onChange = useCallback((id: number) => { const index = ids.indexOf(id) if (index === -1) { setIds([ ...ids, id ]) if (params.required) { setRequired([...required, 0]) } } else { const oldIds: number[] = JSON.parse(JSON.stringify(ids)) oldIds.splice(index, 1) setIds(oldIds) if (params.required) { const oldRequired: number[] = JSON.parse(JSON.stringify(required)) oldRequired.splice(index, 1) setRequired(oldRequired) } } }, [ids]) function ok() { storageDep.set(ids) storageDep.setRequired(required) Taro.navigateBack({delta: 1}) } function isRequired(dep_id: number): boolean { const index = ids.indexOf(dep_id) if (index === -1) { return false } else { return !!required?.[index] } } function requiredChange(dep_id: number, value: boolean) { const index = ids.indexOf(dep_id) if (index === -1) { setIds([...ids, dep_id]) setRequired([...required, value ? 1 : 0]) } else { const oldRequired: number[] = JSON.parse(JSON.stringify(required)) oldRequired.splice(index, 1, value ? 1 : 0) setRequired(oldRequired) } } return ( {deps.map((d) => onChange(d.id)}> 必修: event?.stopImmediatePropagation()} checked={isRequired(d.id)} onChange={(e) => requiredChange(d.id, e.detail.value)}/> : null } /> )} 确定 ) } export default SelectDep