diff --git a/public/avatar/avatar.png b/public/avatar/avatar.png new file mode 100644 index 0000000..d65138b Binary files /dev/null and b/public/avatar/avatar.png differ diff --git a/src/index.less b/src/index.less index 8fa8cd4..51836c1 100644 --- a/src/index.less +++ b/src/index.less @@ -232,8 +232,9 @@ code { } .form-avatar { - width: 100px; - height: 100px; + width: 60px; + height: 60px; + border-radius: 50%; } .form-course-thumb { diff --git a/src/pages/member/compenents/create.tsx b/src/pages/member/compenents/create.tsx index 4a77c2c..1f2cd80 100644 --- a/src/pages/member/compenents/create.tsx +++ b/src/pages/member/compenents/create.tsx @@ -3,6 +3,7 @@ import { Modal, Form, Cascader, Input, message } from "antd"; import styles from "./create.module.less"; import { user, department } from "../../../api/index"; import { UploadImageButton } from "../../../compenents"; +import { ValidataCredentials, getHost } from "../../../utils/index"; interface PropInterface { open: boolean; @@ -19,7 +20,7 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(true); const [departments, setDepartments] = useState([]); - const [avatar, setAvatar] = useState(""); + const [avatar, setAvatar] = useState(getHost() + "avatar/avatar.png"); useEffect(() => { getParams(); @@ -30,11 +31,11 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { email: "", name: "", password: "", - avatar: "", + avatar: getHost() + "avatar/avatar.png", idCard: "", dep_ids: [], }); - setAvatar(""); + setAvatar(getHost() + "avatar/avatar.png"); }, [form, open]); const getParams = () => { @@ -68,6 +69,10 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { }; const onFinish = (values: any) => { + if (!ValidataCredentials(values.idCard)) { + message.error("请输入正确的身份证号!"); + return; + } const arr = []; for (let i = 0; i < values.dep_ids.length; i++) { arr.push(values.dep_ids[i][values.dep_ids[i].length - 1]); @@ -100,16 +105,16 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { centered forceRender open={open} - width={416} + width={484} onOk={() => form.submit()} onCancel={() => onCancel()} maskClosable={false} > -
+
= ({ open, onCancel }) => { autoComplete="off" > - - - -
+
+ {avatar && ( + + )}
{ @@ -137,45 +139,49 @@ export const MemberCreate: React.FC = ({ open, onCancel }) => { }} >
- {avatar && ( - - )}
+ + + + + + - - - - - - + + +
diff --git a/src/pages/member/compenents/update.tsx b/src/pages/member/compenents/update.tsx index 371b165..1844a0e 100644 --- a/src/pages/member/compenents/update.tsx +++ b/src/pages/member/compenents/update.tsx @@ -3,6 +3,7 @@ import { Modal, Form, Cascader, Input, message } from "antd"; import styles from "./create.module.less"; import { user, department } from "../../../api/index"; import { UploadImageButton } from "../../../compenents"; +import { ValidataCredentials, getHost } from "../../../utils/index"; interface PropInterface { id: number; @@ -24,7 +25,7 @@ export const MemberUpdate: React.FC = ({ const [form] = Form.useForm(); const [loading, setLoading] = useState(true); const [departments, setDepartments] = useState([]); - const [avatar, setAvatar] = useState(""); + const [avatar, setAvatar] = useState(getHost() + "avatar/avatar.png"); useEffect(() => { getParams(); @@ -117,6 +118,10 @@ export const MemberUpdate: React.FC = ({ }; const onFinish = (values: any) => { + if (!ValidataCredentials(values.idCard)) { + message.error("请输入正确的身份证号!"); + return; + } const arr = []; for (let i = 0; i < values.dep_ids.length; i++) { if (Array.isArray(values.dep_ids[i])) { @@ -154,7 +159,7 @@ export const MemberUpdate: React.FC = ({ centered forceRender open={open} - width={416} + width={484} onOk={() => form.submit()} onCancel={() => onCancel()} maskClosable={false} @@ -171,18 +176,15 @@ export const MemberUpdate: React.FC = ({ autoComplete="off" > - - - -
+
+ {avatar && ( + + )}
{ @@ -191,41 +193,45 @@ export const MemberUpdate: React.FC = ({ }} >
- {avatar && ( - - )}
+ + + + + + - - - - - - + + +
diff --git a/src/utils/index.ts b/src/utils/index.ts index 3ffeca5..adccf5b 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -87,3 +87,53 @@ export function inStrArray(array: string[], value: string): boolean { } return false; } + +export function ValidataCredentials(value: any) { + let regIdCard = + /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/; + if (regIdCard.test(value)) { + if (value.length == 18) { + var idCardWi = new Array( + 7, + 9, + 10, + 5, + 8, + 4, + 2, + 1, + 6, + 3, + 7, + 9, + 10, + 5, + 8, + 4, + 2 + ); //将前17位加权因子保存在数组里 + var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2); //这是除以11后,可能产生的11位余数、验证码,也保存成数组 + var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和 + for (var i = 0; i < 17; i++) { + idCardWiSum += value.substring(i, i + 1) * idCardWi[i]; + } + var idCardMod = idCardWiSum % 11; //计算出校验码所在数组的位置 + var idCardLast = value.substring(17); //得到最后一位身份证号码 + //如果等于2,则说明校验码是10,身份证号码最后一位应该是X + if (idCardMod == 2) { + if (idCardLast == "X" || idCardLast == "x") { + return true; + } else { + return false; + } + } else { + //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码 + if (idCardLast == idCardY[idCardMod]) { + return true; + } else { + return false; + } + } + } + } +}