Commit 39090150 by maolipeng

Merge branch 'master' into feature/maolipeng/20210610/zuhuyouhua

# Conflicts:
#	src/common/js/axios.ts
#	src/common/js/user.ts
#	src/modules/college-manage/UserManagePage.tsx
#	src/modules/root/Login.jsx
parents ee671dd0 f481a767
...@@ -5,9 +5,8 @@ ...@@ -5,9 +5,8 @@
*/ */
import React from 'react'; import React from 'react';
import { Modal, Input, Table } from 'antd'; import { Modal, Input } from 'antd';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
// import _ from 'underscore';
import './ChooseMembersModal.less'; import './ChooseMembersModal.less';
import User from '@/common/js/user' import User from '@/common/js/user'
import { XMTable } from '@/components'; import { XMTable } from '@/components';
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
*/ */
import React from 'react'; import React from 'react';
import { Modal, Button, Breadcrumb, Radio, message } from 'antd'; import { Modal, Button, Breadcrumb, message } from 'antd';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
import { FILE_TYPE_ICON_MAP, DEFAULT_SIZE_UNIT } from "@/domains/resource-disk/constants"; import { FILE_TYPE_ICON_MAP, DEFAULT_SIZE_UNIT } from "@/domains/resource-disk/constants";
import LottieIcon from '@/components/LottieIcon'; import LottieIcon from '@/components/LottieIcon';
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-31 09:34:31 * @Date: 2020-08-31 09:34:31
* @LastEditors: wufan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-27 10:42:12 * @LastEditTime: 2021-06-24 19:34:21
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-31 09:34:25 * @Date: 2020-08-31 09:34:25
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-12 17:27:08 * @LastEditTime: 2021-06-23 16:08:50
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
import Storage from './storage'; import Storage from './storage';
import { PREFIX, USER_PREFIX } from '@/domains/basic-domain/constants'; import { PREFIX, USER_PREFIX } from '@/domains/basic-domain/constants';
declare var window:any;
class User { class User {
getVersion() { getVersion() {
...@@ -17,11 +17,11 @@ class User { ...@@ -17,11 +17,11 @@ class User {
} }
getStoreId(){ getStoreId(){
return Storage.get(`${PREFIX}_storeId`) return window.currentStoreUserInfo.storeId || Storage.get(`${PREFIX}_storeId`)
} }
getEnterpriseId() { getEnterpriseId() {
return Storage.get(`${PREFIX}_enterpriseId`); return window.currentStoreUserInfo.enterpriseId || Storage.get(`${PREFIX}_enterpriseId`);
} }
getStoreName() { getStoreName() {
...@@ -33,21 +33,23 @@ class User { ...@@ -33,21 +33,23 @@ class User {
} }
getStoreUserId() { getStoreUserId() {
return Storage.get(`${PREFIX}_storeUserId`); return window.currentStoreUserInfo.storeUserId || Storage.get(`${PREFIX}_storeUserId`);
} }
getCustomerId() { getCustomerId() {
return Storage.get(`${PREFIX}_customerId`); return Storage.get(`${PREFIX}_customerId`);
} }
getUserId() { getUserId() {
return Storage.get(`${PREFIX}_userId`); return window.currentStoreUserInfo.userId || Storage.get(`${PREFIX}_userId`);
} }
getUserRole() { getUserRole() {
return Storage.get(`${PREFIX}_userRole`); return Storage.get(`${PREFIX}_userRole`);
} }
getToken() { getToken() {
return Storage.get(`${PREFIX}_token`); return window.currentStoreUserInfo.token || Storage.get(`${PREFIX}_token`);
} }
getIsAdmin() { getIsAdmin() {
......
@font-face { @font-face {
font-family: 'iconfont'; /* project id 2223403 */ font-family: 'iconfont'; /* Project id 2223403 */
src: url('//at.alicdn.com/t/font_2223403_boiin24pch6.eot'); src: url('//at.alicdn.com/t/font_2223403_oe5p510553.woff2?t=1624259078391') format('woff2'),
src: url('//at.alicdn.com/t/font_2223403_boiin24pch6.eot?#iefix') format('embedded-opentype'), url('//at.alicdn.com/t/font_2223403_oe5p510553.woff?t=1624259078391') format('woff'),
url('//at.alicdn.com/t/font_2223403_boiin24pch6.woff2') format('woff2'), url('//at.alicdn.com/t/font_2223403_oe5p510553.ttf?t=1624259078391') format('truetype');
url('//at.alicdn.com/t/font_2223403_boiin24pch6.woff') format('woff'),
url('//at.alicdn.com/t/font_2223403_boiin24pch6.ttf') format('truetype'),
url('//at.alicdn.com/t/font_2223403_boiin24pch6.svg#iconfont') format('svg');
} }
.iconfont{ .iconfont {
font-family:"iconfont" !important; font-family: 'iconfont' !important;
font-size:16px; font-size: 16px;
font-style:normal; font-style: normal;
} }
{"v":"5.6.10","fr":25,"ip":0,"op":25,"w":150,"h":150,"nm":"搜索无结果","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"“ͼ²ã 3”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-70,0.5],[40,0.5],[40,-0.5],[-70,-0.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[52.1,0.5],[70,0.5],[70,-0.5],[52.1,-0.5]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.670587995941,0.792156982422,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70,126],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"“ͼ²ã 4”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[5]},{"t":20,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[53.25,58.75,0],"to":[0,-0.292,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[53.25,57,0],"to":[0,0,0],"ti":[0,-0.292,0]},{"t":20,"s":[53.25,58.75,0]}],"ix":2},"a":{"a":0,"k":[48.25,48.25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.3,0.4],[1.1,-0.6],[0.5,-1.4],[0,0],[-0.5,0.3],[-0.8,-0.3],[-0.3,-0.5],[0.2,-0.7],[0.4,-0.3],[0,0],[0.4,-0.4],[0.3,-0.8],[0,0],[0,0],[0,0],[-0.3,0.3],[-0.5,0.2],[0,0],[-0.1,0.1],[-0.3,0.9],[0.6,0.9]],"o":[[-1.4,-0.4],[-1.1,0.5],[0,0],[0.3,-0.8],[0.5,-0.4],[0.7,0.2],[0.2,0.5],[-0.1,0.5],[0,0],[-1.6,0.7],[-0.4,0.4],[0,0],[0,0],[0,0],[0.1,-0.5],[0.3,-0.3],[0,0],[0.5,-0.2],[0.6,-0.5],[0.4,-1.2],[-0.6,-0.9]],"v":[[1.25,-6.75],[-2.45,-6.55],[-4.75,-3.65],[-2.55,-2.95],[-1.45,-4.65],[0.55,-4.85],[1.95,-3.85],[2.05,-2.15],[1.15,-0.95],[0.85,-0.75],[-2.15,0.95],[-3.15,2.75],[-3.25,2.85],[-1.05,3.55],[-0.95,3.25],[-0.25,2.05],[0.85,1.35],[2.05,0.85],[2.95,0.35],[4.35,-1.75],[4.05,-4.85]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.4,-0.1],[-0.2,-0.3],[0.1,-0.5],[0.3,-0.2],[0.4,0.1],[0.2,0.3],[-0.2,0.5],[-0.4,0.2]],"o":[[0.4,0.1],[0.2,0.3],[-0.1,0.4],[-0.4,0.2],[-0.4,-0.1],[-0.2,-0.4],[0.1,-0.4],[0.3,-0.2]],"v":[[-2.45,4.15],[-1.55,4.85],[-1.45,6.05],[-2.15,6.95],[-3.35,7.05],[-4.25,6.35],[-4.35,5.15],[-3.55,4.25]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.160783999574,0.4,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.65,41.15],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 1","sr":1,"ks":{"o":{"a":0,"k":19,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[22.695,22.109],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.87450986376,0.901960844152,0.956862804936,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-14.777,8.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"“ͼ²ã 5”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[-9]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[-9]},{"t":25,"s":[-7]}],"ix":10},"p":{"a":0,"k":[106.125,131.5,0],"ix":2},"a":{"a":0,"k":[114.75,123.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.099,0.014],[0,0],[-0.051,-1.117],[0,0],[-1.116,0.05],[-0.112,0.086],[0,0],[-0.121,0.892],[0,0],[1.09,0.148]],"o":[[0,0],[-1.104,-0.049],[0,0],[-0.05,1.104],[0.1,0.013],[0,0],[0.833,-0.189],[0,0],[0.147,-1.09],[-0.198,-0.027]],"v":[[3.861,-4.084],[-3.904,-4.131],[-5.884,-2.18],[-5.968,2.148],[-4.018,4.13],[-3.608,4.084],[3.85,2.677],[5.493,0.982],[5.871,-1.792],[4.158,-4.043]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.862744978362,0.886274988511,0.945097979377,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.329,76.27],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.109,-3.648],[0,0],[-0.135,0.99],[-1.527,0.096],[-1.086,-1.661]],"o":[[0,0],[-4.167,-3.493],[0.089,-1.401],[1.229,-0.135],[1.158,1.873]],"v":[[6.657,2.541],[-0.354,7.339],[-6.522,0.749],[-3.642,-6.329],[4.847,-5.678]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.189,79.125],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.292,-8.52],[-8.486,-2.197],[-2.86,7.558],[0,0],[0,0],[0,0],[7.656,1.972]],"o":[[-2.198,8.486],[7.913,2.09],[0,0],[0,0],[0,0],[0.613,-7.581],[-8.392,-2.232]],"v":[[-17.808,-3.965],[-6.498,15.418],[12.397,5.674],[18.779,7.37],[20.006,3.185],[13.402,1.466],[1.575,-15.275]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-1.577,6.124],[-6.159,-1.671],[1.671,-6.16],[6.159,1.671]],"o":[[1.577,-6.125],[6.159,1.671],[-1.671,6.159],[-6.16,-1.671]],"v":[[-13.565,-2.865],[0.476,-11.032],[8.642,3.01],[-5.399,11.176]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.160783999574,0.4,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[77.396,70.77],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.198,-8.485],[-8.485,-2.197],[-2.697,7.711],[0,0],[0,0],[0,0],[7.562,2.006]],"o":[[-2.198,8.486],[8.007,2.056],[0,0],[0,0],[0,0],[0.648,-7.487],[-8.452,-2.104]],"v":[[-17.786,-3.965],[-6.476,15.417],[12.444,5.452],[18.884,7.019],[19.984,2.776],[13.355,1.278],[1.563,-15.369]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-1.671,6.159],[-6.16,-1.671],[1.671,-6.16],[6.16,1.671]],"o":[[1.577,-6.125],[6.159,1.671],[-1.671,6.159],[-6.124,-1.577]],"v":[[-13.543,-2.866],[0.499,-11.032],[8.664,3.009],[-5.377,11.175]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.64313695571,0.839215985466,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[75.467,70.514],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.983,1.086],[0,0],[-1.807,-0.492]],"o":[[-1.513,-0.414],[0,0],[1.182,1.312],[0,0]],"v":[[2.478,0.351],[-1.259,-1.934],[-2.478,-0.834],[2.046,1.934]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[69.921,76.684],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.786,-12.74],[0.791,12.84],[1.786,12.74],[-0.791,-12.84]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.670587995941,0.792156982422,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.092,100.967],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.842,0.995],[6.633,20.985],[1.849,5.701],[0,0],[-0.597,-6.742],[-2.239,-2.827]],"o":[[2.805,-3.555],[-1.704,-5.278],[0,0],[0.61,6.643],[0.859,10.007],[4.38,5.642]],"v":[[5.275,20.19],[3.067,-7.358],[-2.262,-23.827],[-9.7,-19.591],[-7.896,0.536],[-5.755,18.186]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.976,102.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"“ͼ²ã 6”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[0]},{"t":25,"s":[-2]}],"ix":10},"p":{"a":0,"k":[46.75,103.75,0],"ix":2},"a":{"a":0,"k":[41.75,93.25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.208,0.425],[0.18,0.149],[0.231,0.035],[0.096,0],[0.16,-0.072],[0.089,-0.227],[0.005,-0.268],[0,0],[-0.011,0.006],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.082,-0.247],[-0.038,-0.437]],"o":[[-0.059,-0.648],[-0.105,-0.212],[-0.179,-0.15],[-0.098,-0.015],[-0.162,0],[-0.244,0.106],[-0.093,0.229],[0,0],[0.001,-0.262],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.069,0.056],[0.082,0.245],[0,0]],"v":[[1.424,1.184],[1.055,-0.411],[0.634,-0.962],[0.002,-1.247],[-0.288,-1.271],[-0.778,-1.174],[-1.297,-0.619],[-1.424,0.117],[-0.424,0.132],[-0.358,-0.268],[-0.364,-0.272],[-0.36,-0.267],[-0.358,-0.268],[-0.364,-0.272],[-0.36,-0.267],[-0.382,-0.294],[-0.366,-0.262],[-0.36,-0.267],[-0.382,-0.294],[-0.366,-0.262],[-0.354,-0.266],[-0.288,-0.271],[-0.155,-0.259],[-0.004,-0.192],[0.243,0.242],[0.428,1.271]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.670587995941,0.792156982422,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.311,80.461],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.227,-0.717],[0.951,1.669],[-1.523,0.67],[-0.935,-1.767]],"o":[[-1.228,0.717],[-0.951,-1.669],[1.523,-0.67],[0.935,1.769]],"v":[[1.99,3.052],[-2.205,0.768],[-1.693,-3.099],[2.153,-1.174]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.551,81.273],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[11.126,-0.566],[-0.675,-2.132],[0.655,-0.302],[-0.723,0.089],[-0.51,1.944],[0.119,0.524],[-0.636,2.734],[-6.57,-3.268],[-0.597,-0.702],[3.643,-7.017]],"o":[[0.083,0.114],[0.135,0.427],[-0.983,0.451],[-4.375,-4.338],[0.719,-2.619],[-0.441,-1.69],[1.432,-5.848],[1.403,0.728],[0.764,0.931],[-2.378,4.787]],"v":[[-7.743,8.907],[-6.663,12.317],[-9.621,12.457],[-9.897,12.919],[-15.694,3.496],[-13.562,0.898],[-13.601,-3.968],[6.854,-9.74],[11.71,-10.995],[12.562,0.884]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.345097979377,0.388234994926,0.509803981407,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35.072,65.811],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.87,0.778],[1.153,0.181],[0.87,-0.778],[-1.153,-0.181]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.356862984452,0.4,0.521568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[40.506,84.78],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.16,-0.257],[0,-0.148],[0.091,-0.129],[0.244,-0.14],[0,0],[-0.201,0.276],[0.002,0.343],[0.23,0.367],[0.425,0.377],[0,0]],"o":[[0.375,0.333],[0.162,0.258],[-0.002,0.131],[-0.092,0.127],[0,0],[0.33,-0.191],[0.201,-0.275],[0,-0.39],[-0.232,-0.369],[0,0],[0,0]],"v":[[-1.009,-1.199],[-0.209,-0.305],[0.007,0.303],[-0.119,0.668],[-0.615,1.08],[-0.115,1.947],[0.691,1.255],[1.007,0.303],[0.639,-0.836],[-0.345,-1.947],[-1.009,-1.198]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.356862984452,0.4,0.521568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.695,78.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.829,-0.803],[-0.11,1.149],[0.829,0.803],[0.109,-1.149]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.356862984452,0.4,0.521568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35.411,79.067],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.416,-0.979],[-0.466,1.657],[1.416,0.979],[0.466,-1.657]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.356862984452,0.4,0.521568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.491,75.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.114,-0.083],[-2.035,-5.689],[0,0],[-5.689,2.035],[1.9,5.263],[0.067,0.214],[1.012,3.197],[5.641,-1.739]],"o":[[-5.689,2.036],[0,0],[2.035,5.689],[5.262,-1.9],[-0.052,-0.311],[-0.337,-1.065],[-1.754,-5.543],[-0.083,-0.114]],"v":[[-4.55,-13.548],[-11.144,0.595],[-8.973,6.709],[5.169,13.303],[11.279,0.298],[10.993,-0.456],[9.051,-6.736],[-4.238,-13.6]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.427,76.893],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.9,0.107],[-2.644,1.14],[0,0],[0,0]],"o":[[2.423,2.276],[3.014,-0.111],[0,0],[0,0],[0,0]],"v":[[-7.198,1.043],[0.51,4.246],[7.198,2.492],[5.017,-4.353],[-5.794,-2.735]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.345097979377,0.388234994926,0.509803981407,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[40.326,87.963],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-3.737,1.298],[0.971,3.253],[0.105,0.095],[0.1,-0.005]],"o":[[0,0],[0,0],[1.271,3.238],[3.842,-1.202],[-0.005,-0.101],[-0.005,-0.1],[0,0]],"v":[[5.027,-9.962],[-9.249,-5.309],[-5.898,5.13],[3.099,8.664],[8.278,0.482],[8.162,0.188],[8.052,-0.007]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.890196018593,0.909803981407,0.960784014534,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.246,89.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"“ͼ²ã 7”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.854,0.007],[0.007,0.854],[0.854,-0.006],[-0.007,-0.854]],"o":[[0.854,-0.007],[-0.006,-0.854],[-0.854,0.007],[0.006,0.855]],"v":[[0.035,1.486],[1.486,-0.035],[-0.035,-1.487],[-1.486,0.035]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.197,124.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,1.802],[4.401,0.025],[0.009,-3.324],[-3.898,-0.11]],"o":[[0.009,-3.324],[-4.401,-0.024],[-0.022,1.615],[4.121,0.132]],"v":[[7.981,2.129],[-0.013,-3.907],[-8.008,2.054],[-0.449,3.33]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.727,122.622],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.503,-2.959],[-1.367,-4.04],[0,0],[2.631,3.121],[4.447,0.017]],"o":[[4.236,0.032],[2.554,3.03],[0,0],[-1.406,-4.157],[-2.681,-3.193],[0,0]],"v":[[-8.442,-6.963],[1.557,-2.6],[7.495,7.963],[8.442,7.643],[2.322,-3.245],[-8.436,-7.963]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.627450980392,0.670587995941,0.792156982422,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.966,115.441],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.013,-2.877],[0.546,-9.378],[0,0],[0,0],[5.511,2.615]],"o":[[-2.91,4.293],[0,0],[0,0],[0.658,-5.932],[-5.15,-2.415]],"v":[[-6.812,-6.491],[-12.009,14.064],[5.068,14.085],[11.351,1.067],[3.997,-11.67]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.803921987496,0.83529399797,0.917646998985,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.722,111.739],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.3,-5.601],[-3.1,-17.601],[0,0],[0,0],[-5,1.2]],"o":[[0.9,3.699],[0,0],[0,0],[13,-8],[6.9,-1.5]],"v":[[17.1,-11.35],[23.1,20.65],[-17.6,20.65],[-23.1,-5.45],[3.9,-19.15]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.803921987496,0.83529399797,0.917646998985,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.9,105.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"“ͼ²ã 8”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.3,4.9],[-6.9,-1.3],[-10.3,-4.601],[0,0],[0,0]],"o":[[1,-1.5],[3.7,0.7],[0,0],[0,0],[-8.2,-5]],"v":[[-16.65,-10.15],[-0.95,-12.95],[19.95,-4.95],[11.85,14.25],[-9.35,4.75]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.752940996955,0.788234994926,0.882353001015,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[62.523,98.47],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.4,-3.9],[0,0],[-3.9,-2.399],[-0.1,-0.101],[0,0],[-1.199,1.9],[0,0],[3.7,2.5],[0.2,0.1],[0,0]],"o":[[0,0],[-2.4,3.8],[0.1,0.101],[0,0],[2,1.1],[0,0],[2.5,-3.7],[-0.199,-0.1],[0,0],[-4.1,-2.2]],"v":[[-16.2,-9.85],[-16.5,-9.45],[-13.9,1.85],[-13.5,2.15],[8,13.95],[13.7,12.55],[16.4,8.65],[14.2,-2.45],[13.6,-2.85],[-4.6,-12.85]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[84.373,106.569],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"“ͼ²ã 9”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,0.6],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[0.6,0],[0,0],[0,-0.6]],"v":[[12.5,-2.5],[-12.5,-2.5],[-13.5,-1.5],[-13.5,1.5],[-12.5,2.5],[12.5,2.5],[13.5,1.5],[13.5,-1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.96470600203,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.5,29.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,0.6],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[0.6,0],[0,0],[0,-0.6]],"v":[[12.5,-2.5],[-12.5,-2.5],[-13.5,-1.5],[-13.5,1.5],[-12.5,2.5],[12.5,2.5],[13.5,1.5],[13.5,-1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.96470600203,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.5,20.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,0.6],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[0.6,0],[0,0],[0,-0.6]],"v":[[6.5,-2.5],[-6.5,-2.5],[-7.5,-1.5],[-7.5,1.5],[-6.5,2.5],[6.5,2.5],[7.5,1.5],[7.5,-1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.96470600203,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[61.5,11.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,0.6],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[0.6,0],[0,0],[0,-0.6]],"v":[[17,-2.5],[-17,-2.5],[-18,-1.5],[-18,1.5],[-17,2.5],[17,2.5],[18,1.5],[18,-1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.96470600203,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[72,2.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"“ͼ²ã 10”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.1,0],[0,0],[0,-1.1],[0,0],[-1.1,0],[0,0],[0,1.1],[0,0]],"o":[[0,0],[-1.1,0],[0,0],[0,1.1],[0,0],[1.1,0],[0,0],[0,-1.1]],"v":[[18.5,-25],[-18.5,-25],[-20.5,-23],[-20.5,23],[-18.5,25],[18.5,25],[20.5,23],[20.5,-23]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784014534,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[23.5,52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"“ͼ²ã 11”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,74,0],"ix":2},"a":{"a":0,"k":[70,63.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,0.6],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[0.6,0],[0,0],[0,-0.6]],"v":[[12.5,-2.5],[-12.5,-2.5],[-13.5,-1.5],[-13.5,1.5],[-12.5,2.5],[12.5,2.5],[13.5,1.5],[13.5,-1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.87450986376,0.901960844152,0.956862804936,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[117.5,44.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-5.5,5.5],[-5.5,-5.5],[5.5,-5.5],[5.5,5.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.875903739181,0.902435601926,0.955499387255,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.5,30.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.2,0],[0,0],[0,3.3],[0,0]],"o":[[0,0],[0,2.2],[0,0],[-3.3,0],[0,0],[0,0]],"v":[[14.6,-6],[14.6,2],[18.6,6],[-12.6,6],[-18.6,0],[-18.6,-6]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901961023667,0.917646998985,0.956862984452,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[112.6,64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0.6],[0,0],[-0.6,0],[0,0],[0,-0.6],[0,0],[0.6,0]],"o":[[-0.6,0],[0,0],[0,-0.6],[0,0],[0.6,0],[0,0],[0,0.6],[0,0]],"v":[[-13.5,4],[-14.5,3],[-14.5,0],[-13.5,-1],[11.5,-1],[12.5,0],[12.5,3],[11.5,4]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-14.5,-7],[-14.5,-18],[-3.5,-18],[-3.5,-7]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.6,0],[0,0],[0,-0.6],[0,0],[-0.6,0],[0,0],[0,2.8],[0,0]],"o":[[0,0],[-0.6,0],[0,0],[0,0.6],[0,0],[2.8,0],[0,0],[0,-0.6]],"v":[[19.5,-27],[-19.5,-27],[-20.5,-26],[-20.5,26],[-19.5,27],[15.5,27],[20.5,22],[20.5,-26]],"c":true},"ix":2},"nm":"路径 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784014534,0.968626972273,0.984314024682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[118.5,43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: wufan * @Author: wufan
* @Date: 2021-06-15 13:48:35 * @Date: 2021-06-15 13:48:35
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-06-15 14:24:57 * @LastEditTime: 2021-06-24 11:10:45
* @Description: Description * @Description: Description
*/ */
import React from 'react'; import React from 'react';
...@@ -12,6 +12,7 @@ import student from '@/common/lottie/student.json'; ...@@ -12,6 +12,7 @@ import student from '@/common/lottie/student.json';
import activity from '@/common/lottie/activity.json'; import activity from '@/common/lottie/activity.json';
import teacher from '@/common/lottie/teacher.json'; import teacher from '@/common/lottie/teacher.json';
import college from '@/common/lottie/college.json'; import college from '@/common/lottie/college.json';
import search from '@/common/lottie/search.json';
import './LottieIcon.less'; import './LottieIcon.less';
...@@ -29,7 +30,8 @@ const ANIMATION_DATA_MAP: { ...@@ -29,7 +30,8 @@ const ANIMATION_DATA_MAP: {
student, student,
activity, activity,
teacher, teacher,
college college,
search
} }
function LottieIcon(props: LottieIconInterface) { function LottieIcon(props: LottieIconInterface) {
......
<!-- <!--
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-24 12:20:57 * @Date: 2020-08-24 12:20:57
* @LastEditors: wufan * @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-27 10:24:06 * @LastEditTime: 2021-06-21 15:06:27
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
--> -->
...@@ -13,17 +13,23 @@ ...@@ -13,17 +13,23 @@
<link rel="icon" href="" /> <link rel="icon" href="" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" /> <meta name="theme-color" content="#000000" />
<meta name="description" content="小麦企学院,一站式企业培训数字化服务商,通过“工具+内容”,帮助企业快速从0到1搭建数字化培训体系,并让整个培训过程可视化,降低培训成本,提升培训效率。"> <meta
<meta name="keywords" content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,资料云盘,培训课程,培训任务,直播课,视频课,图文课,线下课,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂"> name="description"
content="小麦企学院,一站式企业培训数字化服务商,通过“工具+内容”,帮助企业快速从0到1搭建数字化培训体系,并让整个培训过程可视化,降低培训成本,提升培训效率。"
/>
<meta
name="keywords"
content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,资料云盘,培训课程,培训任务,直播课,视频课,图文课,线下课,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂"
/>
<!-- <link rel="apple-touch-icon" href="../src/common/images/logo.png" /> --> <!-- <link rel="apple-touch-icon" href="../src/common/images/logo.png" /> -->
<link rel="shortcut icon" href="https://image.xiaomaiketang.com/xm/c4KiP2epBP.png"> <link rel="shortcut icon" href="https://image.xiaomaiketang.com/xm/c4KiP2epBP.png" />
<!-- <!--
manifest.json provides metadata used when your web app is installed on a manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
--> -->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_oqqm4z9s35j.css"> <link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_oe5p510553.css" />
<!-- <!--
Notice the use of %PUBLIC_URL% in the tags above. Notice the use of %PUBLIC_URL% in the tags above.
...@@ -69,146 +75,152 @@ ...@@ -69,146 +75,152 @@
// Browser globals (root is window) // Browser globals (root is window)
root.download = factory(); root.download = factory();
} }
}(this, function () { })(this, function () {
return function download(data, strFileName, strMimeType) { return function download(data, strFileName, strMimeType) {
var self = window, // this script is only for browsers anyway... var self = window, // this script is only for browsers anyway...
defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads defaultMime = 'application/octet-stream', // this default mime also triggers iframe downloads
mimeType = strMimeType || defaultMime, mimeType = strMimeType || defaultMime,
payload = data, payload = data,
url = !strFileName && !strMimeType && payload, url = !strFileName && !strMimeType && payload,
anchor = document.createElement("a"), anchor = document.createElement('a'),
toString = function(a){return String(a);}, toString = function (a) {
myBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString), return String(a);
fileName = strFileName || "download", },
myBlob = self.Blob || self.MozBlob || self.WebKitBlob || toString,
fileName = strFileName || 'download',
blob, blob,
reader; reader;
myBlob= myBlob.call ? myBlob.bind(self) : Blob ; myBlob = myBlob.call ? myBlob.bind(self) : Blob;
if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
payload=[payload, mimeType];
mimeType=payload[0];
payload=payload[1];
}
if (String(this) === 'true') {
//reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
payload = [payload, mimeType];
mimeType = payload[0];
payload = payload[1];
}
if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument if (url && url.length < 2048) {
fileName = url.split("/").pop().split("?")[0]; // if no filename and no mime, assume a url was passed as the only argument
fileName = url.split('/').pop().split('?')[0];
anchor.href = url; // assign href prop to temp anchor anchor.href = url; // assign href prop to temp anchor
if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path: if (anchor.href.indexOf(url) !== -1) {
var ajax=new XMLHttpRequest(); // if the browser determines that it's a potentially valid url path:
ajax.open( "GET", url, true); var ajax = new XMLHttpRequest();
ajax.responseType = 'blob'; ajax.open('GET', url, true);
ajax.onload= function(e){ ajax.responseType = 'blob';
ajax.onload = function (e) {
download(e.target.response, fileName, defaultMime); download(e.target.response, fileName, defaultMime);
}; };
setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return: setTimeout(function () {
return ajax; ajax.send();
}, 0); // allows setting custom ajax headers using the return:
return ajax;
} // end if valid url? } // end if valid url?
} // end if url? } // end if url?
//go ahead and download dataURLs right away //go ahead and download dataURLs right away
if(/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)){ if (/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)) {
if (payload.length > 1024 * 1024 * 1.999 && myBlob !== toString) {
if(payload.length > (1024*1024*1.999) && myBlob !== toString ){ payload = dataUrlToBlob(payload);
payload=dataUrlToBlob(payload); mimeType = payload.type || defaultMime;
mimeType=payload.type || defaultMime; } else {
}else{ return navigator.msSaveBlob // IE10 can't do a[download], only Blobs:
return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs: ? navigator.msSaveBlob(dataUrlToBlob(payload), fileName)
navigator.msSaveBlob(dataUrlToBlob(payload), fileName) : : saver(payload); // everyone else can save dataURLs un-processed
saver(payload) ; // everyone else can save dataURLs un-processed
} }
} //end if dataURL passed?
}//end if dataURL passed?
blob = payload instanceof myBlob ?
payload :
new myBlob([payload], {type: mimeType}) ;
blob = payload instanceof myBlob ? payload : new myBlob([payload], { type: mimeType });
function dataUrlToBlob(strUrl) { function dataUrlToBlob(strUrl) {
var parts= strUrl.split(/[:;,]/), var parts = strUrl.split(/[:;,]/),
type= parts[1], type = parts[1],
decoder= parts[2] == "base64" ? atob : decodeURIComponent, decoder = parts[2] == 'base64' ? atob : decodeURIComponent,
binData= decoder( parts.pop() ), binData = decoder(parts.pop()),
mx= binData.length, mx = binData.length,
i= 0, i = 0,
uiArr= new Uint8Array(mx); uiArr = new Uint8Array(mx);
for(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i); for (i; i < mx; ++i) uiArr[i] = binData.charCodeAt(i);
return new myBlob([uiArr], {type: type}); return new myBlob([uiArr], { type: type });
} }
function saver(url, winMode){ function saver(url, winMode) {
if ('download' in anchor) {
if ('download' in anchor) { //html5 A[download] //html5 A[download]
anchor.href = url; anchor.href = url;
anchor.setAttribute("download", fileName); anchor.setAttribute('download', fileName);
anchor.className = "download-js-link"; anchor.className = 'download-js-link';
anchor.innerHTML = "downloading..."; anchor.innerHTML = 'downloading...';
anchor.style.display = "none"; anchor.style.display = 'none';
document.body.appendChild(anchor); document.body.appendChild(anchor);
setTimeout(function() { setTimeout(function () {
anchor.click(); anchor.click();
document.body.removeChild(anchor); document.body.removeChild(anchor);
if(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );} if (winMode === true) {
setTimeout(function () {
self.URL.revokeObjectURL(anchor.href);
}, 250);
}
}, 66); }, 66);
return true; return true;
} }
// handle non-a[download] safari as best we can: // handle non-a[download] safari as best we can:
if(/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) { if (/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent)) {
url=url.replace(/^data:([\w\/\-\+]+)/, defaultMime); url = url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
if(!window.open(url)){ // popup blocked, offer direct download: if (!window.open(url)) {
if(confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")){ location.href=url; } // popup blocked, offer direct download:
if (confirm('Displaying New Document\n\nUse Save As... to download, then click back to return to this page.')) {
location.href = url;
}
} }
return true; return true;
} }
//do iframe dataURL download (old ch+FF): //do iframe dataURL download (old ch+FF):
var f = document.createElement("iframe"); var f = document.createElement('iframe');
document.body.appendChild(f); document.body.appendChild(f);
if(!winMode){ // force a mime that will download: if (!winMode) {
url="data:"+url.replace(/^data:([\w\/\-\+]+)/, defaultMime); // force a mime that will download:
url = 'data:' + url.replace(/^data:([\w\/\-\+]+)/, defaultMime);
} }
f.src=url; f.src = url;
setTimeout(function(){ document.body.removeChild(f); }, 333); setTimeout(function () {
document.body.removeChild(f);
}//end saver }, 333);
} //end saver
if (navigator.msSaveBlob) {
// IE10+ : (has Blob, but not a[download] or URL)
if (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)
return navigator.msSaveBlob(blob, fileName); return navigator.msSaveBlob(blob, fileName);
} }
if(self.URL){ // simple fast and modern way using Blob and URL: if (self.URL) {
// simple fast and modern way using Blob and URL:
saver(self.URL.createObjectURL(blob), true); saver(self.URL.createObjectURL(blob), true);
}else{ } else {
// handle non-Blob()+non-URL browsers: // handle non-Blob()+non-URL browsers:
if(typeof blob === "string" || blob.constructor===toString ){ if (typeof blob === 'string' || blob.constructor === toString) {
try{ try {
return saver( "data:" + mimeType + ";base64," + self.btoa(blob) ); return saver('data:' + mimeType + ';base64,' + self.btoa(blob));
}catch(y){ } catch (y) {
return saver( "data:" + mimeType + "," + encodeURIComponent(blob) ); return saver('data:' + mimeType + ',' + encodeURIComponent(blob));
} }
} }
// Blob but not URL support: // Blob but not URL support:
reader=new FileReader(); reader = new FileReader();
reader.onload=function(e){ reader.onload = function (e) {
saver(this.result); saver(this.result);
}; };
reader.readAsDataURL(blob); reader.readAsDataURL(blob);
} }
return true; return true;
}; /* end download() */ }; /* end download() */
})) });
</script> </script>
</body> </body>
</html> </html>
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-04-27 20:35:34 * @Date: 2020-04-27 20:35:34
* @LastEditors: wufan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-03-26 16:14:09 * @LastEditTime: 2021-06-23 14:14:20
* @Description: * @Description:
*/ */
...@@ -23,8 +23,8 @@ import User from '@/common/js/user'; ...@@ -23,8 +23,8 @@ import User from '@/common/js/user';
import Service from "@/common/js/service"; import Service from "@/common/js/service";
declare var getParameterByName: any; declare var getParameterByName: any;
declare var window: any;
window.currentStoreUserInfo = {}
const history = createHashHistory(); const history = createHashHistory();
window.RCHistory = _.extend({}, history, { window.RCHistory = _.extend({}, history, {
...@@ -65,6 +65,10 @@ if (getParameterByName('code') && isWeiXin()) { ...@@ -65,6 +65,10 @@ if (getParameterByName('code') && isWeiXin()) {
User.setUserId(res.result.loginInfo.userId); User.setUserId(res.result.loginInfo.userId);
User.setToken(res.result.loginInfo.xmToken); User.setToken(res.result.loginInfo.xmToken);
User.setEnterpriseId(res.result.enterpriseId); User.setEnterpriseId(res.result.enterpriseId);
window.currentStoreUserInfo = {}
window.currentStoreUserInfo.userId = res.result.loginInfo.userId;
window.currentStoreUserInfo.token = res.result.loginInfo.xmToken;
window.currentStoreUserInfo.enterpriseId = res.result.enterpriseId;
mount() mount()
}) })
} else { } else {
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import _ from "underscore"; import _ from "underscore";
import PageControl from "@/components/PageControl"; import { CheckBox, PageControl } from "@/components";
import { CheckBox } from "@/components";
import { Button, Table, Modal, message, Input } from "antd"; import { Button, Table, Modal, message, Input } from "antd";
import Service from '@/common/js/service'; import { XMTable } from '@/components';
import college from '@/common/lottie/college.json';
import StoreService from "@/domains/store-domain/storeService"; import StoreService from "@/domains/store-domain/storeService";
import EmployeeAddOrEditModal from "../store-manage/EmployeeAddOrEditModal"; import EmployeeAddOrEditModal from "../store-manage/EmployeeAddOrEditModal";
import User from "@/common/js/user"; import User from "@/common/js/user";
...@@ -19,7 +19,6 @@ import LimitTip from "./LimitTip"; ...@@ -19,7 +19,6 @@ import LimitTip from "./LimitTip";
import "./EmployeeManage.less"; import "./EmployeeManage.less";
import ChooseMembersModal from "./modal/ChooseMembersModal"; import ChooseMembersModal from "./modal/ChooseMembersModal";
import SetEmployeeModal from "./modal/SetEmployeeModal";
const { confirm } = Modal; const { confirm } = Modal;
const { Search } = Input; const { Search } = Input;
...@@ -366,7 +365,11 @@ function EmployeeManage() { ...@@ -366,7 +365,11 @@ function EmployeeManage() {
</div> </div>
<LimitTip type="员工" total={total} tip={()=>{return (<div>数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人</div>)}}/> <LimitTip type="员工" total={total} tip={()=>{return (<div>数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人</div>)}}/>
<div className="box-body"> <div className="box-body">
<Table <XMTable
renderEmpty={{
image: college,
description: '暂无数据'
}}
size={"middle"} size={"middle"}
pagination={false} pagination={false}
dataSource={employeeList} dataSource={employeeList}
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-05-30 15:57:40 * @LastEditTime: 2021-06-21 11:13:15
* @Description: 学员管理页面 * @Description: 学员管理页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -11,14 +11,17 @@ import React, { useEffect, useState } from "react"; ...@@ -11,14 +11,17 @@ import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import _ from "underscore"; import _ from "underscore";
import { PageControl } from "@/components"; import { PageControl } from "@/components";
import { Table, Input, DatePicker, Select, Button, message } from "antd"; import { Input, DatePicker, Select, Button, message } from "antd";
import StoreService from "@/domains/store-domain/storeService"; import StoreService from "@/domains/store-domain/storeService";
import User from "@/common/js/user"; import User from "@/common/js/user";
import ChooseMembersModal from "./modal/ChooseMembersModal"; import ChooseMembersModal from "./modal/ChooseMembersModal";
import LimitTip from "./LimitTip" import LimitTip from "./LimitTip"
import { XMTable } from '@/components';
import college from '@/common/lottie/college.json';
import "./UserManagePage.less"; import "./UserManagePage.less";
import moment from "moment"; import moment from "moment";
const { Option } = Select; const { Option } = Select;
const { Search } = Input; const { Search } = Input;
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
...@@ -202,7 +205,11 @@ function UserManagePage() { ...@@ -202,7 +205,11 @@ function UserManagePage() {
} }
<LimitTip type="学员" total={total} tip={()=>{ return (<div><div>1、数据为当前学院的员工数,若学员存在多个学院,企业人数只统计为1人;</div><div>2、若一个学员既用「企业微信」登录学习又用「微信」登录学习,企业人数将统计为2人。</div></div>)}}/> <LimitTip type="学员" total={total} tip={()=>{ return (<div><div>1、数据为当前学院的员工数,若学员存在多个学院,企业人数只统计为1人;</div><div>2、若一个学员既用「企业微信」登录学习又用「微信」登录学习,企业人数将统计为2人。</div></div>)}}/>
<div className="box-body"> <div className="box-body">
<Table <XMTable
renderEmpty={{
image: college,
description: '暂无数据'
}}
size={"middle"} size={"middle"}
pagination={false} pagination={false}
dataSource={userList} dataSource={userList}
......
...@@ -5,8 +5,9 @@ ...@@ -5,8 +5,9 @@
*/ */
import React from 'react'; import React from 'react';
import { Modal, Input, Table, message, Tooltip, Empty } from 'antd'; import { Modal, Input, message, Tooltip } from 'antd';
import { XMTable } from '@/components'; import { XMTable } from '@/components';
import college from '@/common/lottie/college.json';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
import User from '@/common/js/user' import User from '@/common/js/user'
import SetEmployeeModal from "./SetEmployeeModal"; import SetEmployeeModal from "./SetEmployeeModal";
...@@ -319,7 +320,7 @@ class ChooseMembersModal extends React.Component { ...@@ -319,7 +320,7 @@ class ChooseMembersModal extends React.Component {
pagination={false} pagination={false}
scroll={{ y: 290}} scroll={{ y: 290}}
renderEmpty={{ renderEmpty={{
image: searchKey ? search : '', image: searchKey ? search : college,
description: <div> description: <div>
<div style={{ color: '#333' }}>暂无数据</div> <div style={{ color: '#333' }}>暂无数据</div>
<div style={{ color: '#666', padding: '0 32px', fontSize: '12px' }}>需要先将员工添加到企微可见范围后,员工才会出现在这里</div> <div style={{ color: '#666', padding: '0 32px', fontSize: '12px' }}>需要先将员工添加到企微可见范围后,员工才会出现在这里</div>
...@@ -346,7 +347,11 @@ class ChooseMembersModal extends React.Component { ...@@ -346,7 +347,11 @@ class ChooseMembersModal extends React.Component {
<span className={ (selectUserList.length > 0) ? 'span-right-l' : null }>清空</span> <span className={ (selectUserList.length > 0) ? 'span-right-l' : null }>清空</span>
</div> </div>
<div className='container-right-body'> <div className='container-right-body'>
<Table <XMTable
renderEmpty={{
image: college,
description: '暂无数据'
}}
rowKey={(record) => record.enterpriseVisibleUserId} rowKey={(record) => record.enterpriseVisibleUserId}
dataSource={selectUserList} dataSource={selectUserList}
columns={this.selectedColumnsRight()} columns={this.selectedColumnsRight()}
......
...@@ -125,7 +125,9 @@ ...@@ -125,7 +125,9 @@
.ant-empty-normal { .ant-empty-normal {
margin: 120px 0 !important; margin: 120px 0 !important;
} }
.ant-empty {
margin-top: 76px;
}
.avatar{ .avatar{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* @Description: 大班直播、互动班课列表的筛选组件 * @Description: 大班直播、互动班课列表的筛选组件
*/ */
import React, { useState, useRef, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { Row, Input, Select ,Tooltip} from 'antd'; import { Row, Input, Select ,Tooltip} from 'antd';
import RangePicker from "@/modules/common/DateRangePicker"; import RangePicker from "@/modules/common/DateRangePicker";
...@@ -86,7 +86,7 @@ function PlanFilter(props) { ...@@ -86,7 +86,7 @@ function PlanFilter(props) {
}; };
StoreService.getStoreUserBasicPage( _query).then((res) => { StoreService.getStoreUserBasicPage( _query).then((res) => {
const { result = {} } = res; const { result = {} } = res;
const { records = [], total = 0, hasNext } = result; const { records = [], hasNext } = result;
const list = current > 1 ? creatorList.concat(records) : records; const list = current > 1 ? creatorList.concat(records) : records;
setHasNext(hasNext); setHasNext(hasNext);
setCreatorList(list); setCreatorList(list);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2019-07-10 10:30:49 * @Date: 2019-07-10 10:30:49
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-24 16:29:05 * @LastEditTime: 2021-06-22 17:47:02
* @Description: * @Description:
*/ */
import React, { useContext, useEffect, useState } from 'react'; import React, { useContext, useEffect, useState } from 'react';
...@@ -31,7 +31,7 @@ const App: React.FC = (props: any) => { ...@@ -31,7 +31,7 @@ const App: React.FC = (props: any) => {
const [menuType, setMenuType] = useState(true); const [menuType, setMenuType] = useState(true);
const enterpriseId = User.getEnterpriseId(); const enterpriseId = User.getEnterpriseId();
window.ctx = ctx; window.ctx = ctx;
useEffect(() => { useEffect(() => {
getStoreAndUserInfo(); getStoreAndUserInfo();
...@@ -62,24 +62,36 @@ const App: React.FC = (props: any) => { ...@@ -62,24 +62,36 @@ const App: React.FC = (props: any) => {
async function getStoreAndUserInfo() { async function getStoreAndUserInfo() {
await (enterpriseId ? getStoreInfo() : getStoreGroupAndStoreList()); await (enterpriseId ? getStoreInfo() : getStoreGroupAndStoreList());
} }
function getStoreInfo() { function getStoreInfo() {
console.log("currentStoreUserInfo",window.currentStoreUserInfo);
const params = { const params = {
storeId: User.getStoreId(), storeId: User.getStoreId(),
userId: User.getUserId(), userId: User.getUserId(),
}; };
Service.Hades('public/customerHades/getStoreAndUserMsg', params).then((res) => { Service.Hades('public/customerHades/getStoreAndUserMsg', params).then((res) => {
const { id, storeUserId, storeName, userRole, storeType } = res.result; if(res.success){
User.setStoreId(id); const { id, storeUserId, storeName, userRole, storeType } = res.result;
User.setStoreUserId(storeUserId); User.setStoreId(id);
User.setStoreName(storeName); User.setStoreUserId(storeUserId);
Bus.trigger('storeNameChange',storeName); User.setStoreName(storeName);
User.setUserRole(userRole); Bus.trigger('storeNameChange',storeName);
User.setStoreType(storeType); User.setUserRole(userRole);
setStoreUserId(storeUserId) User.setStoreType(storeType);
getUserPermission(); setCurrentStoreUserInfo(id,storeUserId)
setStoreUserId(storeUserId);
getUserPermission();
}
}) })
} }
function setCurrentStoreUserInfo(storeId:any,storeUserId:any){
window.currentStoreUserInfo.storeId = storeId;
window.currentStoreUserInfo.storeUserId = storeUserId;
window.currentStoreUserInfo.userId = User.getUserId();
window.currentStoreUserInfo.token = User.getToken();
window.currentStoreUserInfo.enterpriseId = User.getEnterpriseId();
}
function getStoreGroupAndStoreList() { function getStoreGroupAndStoreList() {
...@@ -99,6 +111,7 @@ const App: React.FC = (props: any) => { ...@@ -99,6 +111,7 @@ const App: React.FC = (props: any) => {
Bus.trigger('storeNameChange', storeName); Bus.trigger('storeNameChange', storeName);
User.setUserRole(userRole); User.setUserRole(userRole);
User.setStoreType(storeType); User.setStoreType(storeType);
setCurrentStoreUserInfo(id,storeUserId);
ctx.dispatch(setStoreGroupList(storeGroupVOS)) ctx.dispatch(setStoreGroupList(storeGroupVOS))
ctx.dispatch(setStoreList(storeVOS)); ctx.dispatch(setStoreList(storeVOS));
setStoreUserId(storeUserId) setStoreUserId(storeUserId)
......
...@@ -286,6 +286,9 @@ export default class CollegeManagePage extends React.Component { ...@@ -286,6 +286,9 @@ export default class CollegeManagePage extends React.Component {
return null; return null;
}; };
User.setStoreId(item.id); User.setStoreId(item.id);
User.setStoreUserId(item.storeUserId);
window.currentStoreUserInfo.storeId = item.id;
window.currentStoreUserInfo.storeUserId = item.storeUserId;
window.RCHistory.push('/home') window.RCHistory.push('/home')
}} }}
> >
...@@ -303,6 +306,9 @@ export default class CollegeManagePage extends React.Component { ...@@ -303,6 +306,9 @@ export default class CollegeManagePage extends React.Component {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
User.setStoreId(item.id); User.setStoreId(item.id);
User.setStoreUserId(item.storeUserId);
window.currentStoreUserInfo.storeId = item.id;
window.currentStoreUserInfo.storeUserId = item.storeUserId;
window.RCHistory.push('/college-info') window.RCHistory.push('/college-info')
}} }}
>编辑</span> >编辑</span>
...@@ -357,6 +363,9 @@ export default class CollegeManagePage extends React.Component { ...@@ -357,6 +363,9 @@ export default class CollegeManagePage extends React.Component {
return null; return null;
}; };
User.setStoreId(item.id); User.setStoreId(item.id);
User.setStoreUserId(item.storeUserId);
window.currentStoreUserInfo.storeId = item.id;
window.currentStoreUserInfo.storeUserId = item.storeUserId;
window.RCHistory.push('/home') window.RCHistory.push('/home')
}} }}
> >
...@@ -374,6 +383,9 @@ export default class CollegeManagePage extends React.Component { ...@@ -374,6 +383,9 @@ export default class CollegeManagePage extends React.Component {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
User.setStoreId(item.id); User.setStoreId(item.id);
User.setStoreUserId(item.storeUserId);
window.currentStoreUserInfo.storeId = item.id;
window.currentStoreUserInfo.storeUserId = item.storeUserId;
window.RCHistory.push('/college-info') window.RCHistory.push('/college-info')
}} }}
>编辑</span> >编辑</span>
......
...@@ -10,6 +10,7 @@ import './CreateCollege.less'; ...@@ -10,6 +10,7 @@ import './CreateCollege.less';
let cutFlag = false; let cutFlag = false;
export default class CreateCollege extends React.Component { export default class CreateCollege extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
...@@ -18,6 +19,7 @@ export default class CreateCollege extends React.Component { ...@@ -18,6 +19,7 @@ export default class CreateCollege extends React.Component {
name: '', name: '',
enterpriseId: User.getEnterpriseId(), enterpriseId: User.getEnterpriseId(),
}; };
this.loginInputRef = React.createRef()
} }
componentDidMount() { componentDidMount() {
...@@ -200,11 +202,11 @@ export default class CreateCollege extends React.Component { ...@@ -200,11 +202,11 @@ export default class CreateCollege extends React.Component {
</div> </div>
<div className="create-box"> <div className="create-box">
<div className="image-box"> <div className="image-box">
<img className="image" src="https://image.xiaomaiketang.com/xm/fe4NCjr7XF.png"/> <img className="image" src={logo}/>
<div className="image-mask"> <div className="image-mask">
<span <span
className="icon iconfont" className="icon iconfont"
onClick={() => this.refs.logoInput.click()} onClick={() => this.loginInputRef.current.click()}
>&#xe6f5;</span> >&#xe6f5;</span>
<span <span
className="icon iconfont" className="icon iconfont"
...@@ -241,7 +243,7 @@ export default class CreateCollege extends React.Component { ...@@ -241,7 +243,7 @@ export default class CreateCollege extends React.Component {
type="file" type="file"
accept="image/*" accept="image/*"
value={""} value={""}
ref="logoInput" ref={this.loginInputRef}
style={{ display: "none" }} style={{ display: "none" }}
onChange={this.handleSelectCover} onChange={this.handleSelectCover}
/> />
......
...@@ -2,33 +2,33 @@ ...@@ -2,33 +2,33 @@
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2019-09-10 18:26:03 * @Date: 2019-09-10 18:26:03
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-27 19:44:42 * @LastEditTime: 2021-06-24 19:28:14
* @Description: * @Description:
*/ */
import React, { useRef, useContext, useEffect, useState } from "react"; import React, { useRef, useContext, useEffect, useState } from 'react';
import "./Header.less"; import './Header.less';
import { Radio, Button, Dropdown, Modal, Tooltip, message } from "antd"; import { Radio, Button, Dropdown, Modal, Tooltip, message } from 'antd';
import { LIVE_SHARE } from "@/domains/course-domain/constants"; import { LIVE_SHARE } from '@/domains/course-domain/constants';
import User from "@/common/js/user"; import User from '@/common/js/user';
import Service from "@/common/js/service"; import Service from '@/common/js/service';
import StoreService from "@/domains/store-domain/storeService"; import StoreService from '@/domains/store-domain/storeService';
import BaseService from "@/domains/basic-domain/baseService"; import BaseService from '@/domains/basic-domain/baseService';
import { XMContext } from "@/store/context"; import { XMContext } from '@/store/context';
import logoImg from "@/common/images/logo.png"; import logoImg from '@/common/images/logo.png';
import CourseService from "@/domains/course-domain/CourseService"; import CourseService from '@/domains/course-domain/CourseService';
import qrcode from "@/libs/qrcode/qrcode.js"; import qrcode from '@/libs/qrcode/qrcode.js';
import Bus from '@/core/tbus'; import Bus from '@/core/tbus';
import ClickOutside from '../../components/ClickOutside'; import ClickOutside from '../../components/ClickOutside';
import _ from "underscore"; import _ from 'underscore';
const baseImg = "https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png"; const baseImg = 'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png';
const { confirm } = Modal; const { confirm } = Modal;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
function Header(props) { function Header(props) {
const { menuType, handleMenuType } = props; const { menuType, handleMenuType } = props;
const [storeId, setStoreId] = useState(User.getStoreId()); const [storeId, setStoreId] = useState(User.getStoreId());
const [storeName, setStoreName] = useState(User.getStoreName()) const [storeName, setStoreName] = useState(User.getStoreName());
const [avatar, setAvatar] = useState(''); const [avatar, setAvatar] = useState('');
const [nickName, setNickName] = useState(''); const [nickName, setNickName] = useState('');
const [phone, setPhone] = useState(''); const [phone, setPhone] = useState('');
...@@ -37,10 +37,11 @@ function Header(props) { ...@@ -37,10 +37,11 @@ function Header(props) {
const [instScroll, setInstScroll] = useState(false); const [instScroll, setInstScroll] = useState(false);
const ctx = useContext(XMContext); const ctx = useContext(XMContext);
const htmlUrl = `${LIVE_SHARE}store/index?id=${User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`; const htmlUrl = `${LIVE_SHARE}store/index?id=${User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
const helpCenterUrl = 'https://www.yuque.com/wangzhong-zkqw0/qixue'; // 帮助中心
const storeUserId = User.getStoreUserId(); const storeUserId = User.getStoreUserId();
const enterpriseId = User.getEnterpriseId(); const enterpriseId = User.getEnterpriseId();
const messageHelpRef = useRef(null) const messageHelpRef = useRef(null);
const domRef = useRef(null); const domRef = useRef(null);
const listRef = useRef(list); const listRef = useRef(list);
...@@ -58,17 +59,17 @@ function Header(props) { ...@@ -58,17 +59,17 @@ function Header(props) {
enterpriseId ? getEnterpriseUser() : User.setIsAdmin(false); enterpriseId ? getEnterpriseUser() : User.setIsAdmin(false);
}, [storeUserId]); }, [storeUserId]);
useEffect(()=> { useEffect(() => {
if (!messageHelpRef.current) { if (!messageHelpRef.current) {
return return;
} }
if (menuType) { if (menuType) {
messageHelpRef.current.style.marginLeft = "194px" messageHelpRef.current.style.marginLeft = '194px';
} else { } else {
messageHelpRef.current.style.marginLeft = "76px" messageHelpRef.current.style.marginLeft = '76px';
} }
},[menuType]) }, [menuType]);
function getUserInfo() { function getUserInfo() {
const param = { const param = {
storeUserId: User.getStoreUserId(), storeUserId: User.getStoreUserId(),
...@@ -85,7 +86,7 @@ function Header(props) { ...@@ -85,7 +86,7 @@ function Header(props) {
const params = { const params = {
enterpriseId, enterpriseId,
userId: User.getUserId(), userId: User.getUserId(),
} };
BaseService.getEnterpriseUser(params).then((res) => { BaseService.getEnterpriseUser(params).then((res) => {
const { isAdmin } = res.result; const { isAdmin } = res.result;
User.setIsAdmin(isAdmin); User.setIsAdmin(isAdmin);
...@@ -99,7 +100,7 @@ function Header(props) { ...@@ -99,7 +100,7 @@ function Header(props) {
userId: User.getUserId(), userId: User.getUserId(),
}; };
Service.Hades('public/customerHades/getStoreListUser', params).then((res) => { Service.Hades('public/customerHades/getStoreListUser', params).then((res) => {
const newList = _.filter(res.result, item => item.state === 'VALID'); const newList = _.filter(res.result, (item) => item.state === 'VALID');
setList(newList); setList(newList);
listRef.current = newList; listRef.current = newList;
}); });
...@@ -119,53 +120,52 @@ function Header(props) { ...@@ -119,53 +120,52 @@ function Header(props) {
} }
function scrollEventListener() { function scrollEventListener() {
if (domRef.current.scrollHeight === 190 + domRef.current.scrollTop) { if (domRef.current.scrollHeight === 190 + domRef.current.scrollTop) {
setInstScroll(false); setInstScroll(false);
} else { } else {
setInstScroll(true); setInstScroll(true);
} }
}; }
function userMenu() { function userMenu() {
return ( return (
<div className="user-center-dropdown"> <div className='user-center-dropdown'>
<div className="user-detail"> <div className='user-detail'>
<div className="box"> <div className='box'>
<Tooltip title={nickName}> <Tooltip title={nickName}>
<div className="name">{nickName}</div> <div className='name'>{nickName}</div>
</Tooltip> </Tooltip>
<span className="phone">{phone}</span> <span className='phone'>{phone}</span>
</div> </div>
<span className="setting" onClick={() => toPersonalInfoPage()}>个人设置 <span className='setting' onClick={() => toPersonalInfoPage()}>
<span className="iconfont icon">&#xe79b;</span> 个人设置
<span className='iconfont icon'>&#xe79b;</span>
</span> </span>
</div> </div>
<div className="menu"> <div className='menu'>
{User.getEnterpriseId() && {User.getEnterpriseId() && (
<div <div
className="menu-item" className='menu-item'
key="1" key='1'
onClick={() => { onClick={() => {
window.RCHistory.push({ window.RCHistory.push({
pathname: '/college-manage', pathname: '/college-manage',
}); });
}} }}>
> <span className='menu-before iconfont icon'>&#xe84e;</span>
<span className="menu-before iconfont icon">&#xe84e;</span>
<span>进入管理后台</span> <span>进入管理后台</span>
<span className="menu-after iconfont icon">&#xe79b;</span> <span className='menu-after iconfont icon'>&#xe79b;</span>
</div> </div>
} )}
<div <div
className="menu-item" className='menu-item'
key="2" key='2'
onClick={(e) => { onClick={(e) => {
handleLogoutConfirm(); handleLogoutConfirm();
}} }}>
> <span className='menu-before iconfont icon'>&#xe870;</span>
<span className="menu-before iconfont icon">&#xe870;</span>
<span>退出登录</span> <span>退出登录</span>
<span className="menu-after iconfont icon">&#xe79b;</span> <span className='menu-after iconfont icon'>&#xe79b;</span>
</div> </div>
</div> </div>
</div> </div>
...@@ -184,13 +184,11 @@ function Header(props) { ...@@ -184,13 +184,11 @@ function Header(props) {
function handleLogoutConfirm() { function handleLogoutConfirm() {
return confirm({ return confirm({
title: "你确定要退出登录吗?", title: '你确定要退出登录吗?',
content: "退出后,需重新登录", content: '退出后,需重新登录',
icon: ( icon: <span className='icon iconfont default-confirm-icon'>&#xe839; </span>,
<span className="icon iconfont default-confirm-icon">&#xe839; </span> okText: '退出登录',
), cancelText: '点错了',
okText: "退出登录",
cancelText: "点错了",
onOk: () => { onOk: () => {
handleLogout(); handleLogout();
}, },
...@@ -198,14 +196,13 @@ function Header(props) { ...@@ -198,14 +196,13 @@ function Header(props) {
} }
function handleLogout() { function handleLogout() {
BaseService.logout({identifier:User.getIdentifier()}).then((res) => { BaseService.logout({ identifier: User.getIdentifier() }).then((res) => {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
User.clearUserInfo(); User.clearUserInfo();
const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId()||User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`; const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId() || User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
window.location.href = url; window.location.href = url;
}); });
} }
...@@ -214,29 +211,29 @@ function Header(props) { ...@@ -214,29 +211,29 @@ function Header(props) {
urls: [htmlUrl], urls: [htmlUrl],
}).then((res) => { }).then((res) => {
const { result = [] } = res; const { result = [] } = res;
const qrcodeWrapDom = document.querySelector("#h5-qrcode"); const qrcodeWrapDom = document.querySelector('#h5-qrcode');
const qrcodeNode = new qrcode({ const qrcodeNode = new qrcode({
text: result[0].shortUrl, text: result[0].shortUrl,
size: 110, size: 110,
}); });
qrcodeWrapDom && qrcodeWrapDom.appendChild(qrcodeNode); qrcodeWrapDom && qrcodeWrapDom.appendChild(qrcodeNode);
}); });
} }
// 复制分享链接 // 复制分享链接
function handleCopy() { function handleCopy() {
window.copyText(htmlUrl); window.copyText(htmlUrl);
message.success('已复制学院地址,快去分享吧~'); message.success('已复制学院地址,快去分享吧~');
} }
return ( return (
<div id="top-container" className="top-container"> <div id='top-container' className='top-container'>
<div className="top top-nav"> <div className='top top-nav'>
{/* <div> {/* <div>
<img src={topLeftLogo} className="logo" alt="" /> <img src={topLeftLogo} className="logo" alt="" />
</div> */} </div> */}
<div className="message-help" ref={messageHelpRef}> <div className='message-help' ref={messageHelpRef}>
{list.length ? ( {list.length ? (
<ClickOutside <ClickOutside
onClickOutside={() => { onClickOutside={() => {
...@@ -244,46 +241,56 @@ function Header(props) { ...@@ -244,46 +241,56 @@ function Header(props) {
setOpenDropdown(false); setOpenDropdown(false);
} }
}} }}
className="college-container" className='college-container'>
>
<div style={{ width: '100%', height: '100%' }}> <div style={{ width: '100%', height: '100%' }}>
<div className="college" onClick={() => setOpenDropdown(false)}> <div className='college' onClick={() => setOpenDropdown(false)}>
<span <span
className="college-name" className='college-name'
onClick={(e) => {
e.stopPropagation();
setOpenDropdown(!openDropdown);
addShadow();
}}
>{storeName}</span>
{list.length > 1 && <span
className={`icon iconfont ${list.length > 1 ? 'select' : ''}`}
onClick={(e) => { onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
setOpenDropdown(!openDropdown); setOpenDropdown(!openDropdown);
addShadow(); addShadow();
}} }}>
>&#xe651;</span>} {storeName}
</span>
{list.length > 1 && (
<span
className={`icon iconfont ${list.length > 1 ? 'select' : ''}`}
onClick={(e) => {
e.stopPropagation();
setOpenDropdown(!openDropdown);
addShadow();
}}>
&#xe651;
</span>
)}
</div> </div>
<div className={`select-college ${openDropdown ? 'active' : ''}`}> <div className={`select-college ${openDropdown ? 'active' : ''}`}>
<h2>切换学院</h2> <h2>切换学院</h2>
<RadioGroup <RadioGroup
onChange={(e) => { onChange={(e) => {
setStoreId(e.target.value) setStoreId(e.target.value);
User.setStoreId(e.target.value); User.setStoreId(e.target.value);
list.map((item)=>{
if(item.id === e.target.value){
User.setStoreUserId(item.storeUserId);
}
})
User.setUserId(User.getUserId());
User.setToken(User.getToken());
User.setEnterpriseId(User.getEnterpriseId())
window.RCHistory.push('/home'); window.RCHistory.push('/home');
window.location.reload(); window.location.reload();
}} }}
value={storeId} value={storeId}
id="college-radio-group" id='college-radio-group'>
>
{_.map(list, (item) => ( {_.map(list, (item) => (
<Radio value={item.id} key={item.id}> <Radio value={item.id} key={item.id}>
<span className="name">{item.storeName}</span> <span className='name'>{item.storeName}</span>
</Radio> </Radio>
))} ))}
</RadioGroup> </RadioGroup>
{instScroll && <div className="scroll-shadow"></div>} {instScroll && <div className='scroll-shadow'></div>}
{/* <div className="control"> {/* <div className="control">
<Button <Button
size="small" size="small"
...@@ -308,61 +315,64 @@ function Header(props) { ...@@ -308,61 +315,64 @@ function Header(props) {
</div> </div>
</ClickOutside> </ClickOutside>
) : ( ) : (
<div className="store-related"> <div className='store-related'>
<div className="store-name">{storeName}</div> <div className='store-name'>{storeName}</div>
</div> </div>
)} )}
<div className="right-box"> <div className='right-box'>
<div className="right-bg-img"> <div className='right-bg-img'>
<img src="https://image.xiaomaiketang.com/xm/WCwjyyXYda.png"></img> <img src='https://image.xiaomaiketang.com/xm/WCwjyyXYda.png'></img>
</div> </div>
<div className="link-to-store"> <div className='link-to-store'>
<div className="link"> <div className='link'>
<span className="link-btn"> <span className='link-btn'>
<span className="icon iconfont tool-tip-right">&#xe85d;</span> <span className='icon iconfont tool-tip-right'>&#xe85d;</span>
<span className="text">前往学院</span> <span className='text'>前往学院</span>
</span> </span>
<div className="store-popover"> <div className='store-popover'>
<div className="pc-url"> <div className='pc-url'>
<div className="name">网页端学院</div> <div className='name'>网页端学院</div>
<div <div
className="url-link" className='url-link'
onClick={() => { onClick={() => {
window.open(htmlUrl); window.open(htmlUrl);
}} }}>
> {'立即前往 >'}
{"立即前往 >"}
</div> </div>
</div> </div>
<div className="h5-url"> <div className='h5-url'>
<div className="name">手机端学院</div> <div className='name'>手机端学院</div>
<div id="h5-qrcode"></div> <div id='h5-qrcode'></div>
<div className="tip">微信扫码,打开学院</div> <div className='tip'>微信扫码,打开学院</div>
</div> </div>
</div> </div>
</div> </div>
<div className="share" onClick={handleCopy}> <div className='share' onClick={handleCopy}>
<span className="share-btn"> <span className='share-btn'>
<span className="icon iconfont tool-tip-right">&#xe85e;</span> <span className='icon iconfont tool-tip-right'>&#xe85e;</span>
<span className="text">分享学院</span> <span className='text'>分享学院</span>
</span> </span>
</div> </div>
<div className='help'>
<a href={helpCenterUrl} target='_blank' className='help-btn'>
<span className='icon iconfont tool-tip-right'>&#xe8ed;</span>
<span className='text'>帮助中心</span>
</a>
</div>
</div> </div>
<Dropdown overlay={userMenu()} arrow> <Dropdown overlay={userMenu()} arrow>
<div className="user"> <div className='user'>
<img <img
style={{ style={{
width: 32 + "px", width: 32 + 'px',
height: 32 + "px", height: 32 + 'px',
borderRadius: "50%", borderRadius: '50%',
overflow: "hidden", overflow: 'hidden',
flexShrink: 0, flexShrink: 0,
}} }}
src={avatar || baseImg} src={avatar || baseImg}
/> />
<span className="name"> <span className='name'>{nickName}</span>
{nickName}
</span>
</div> </div>
</Dropdown> </Dropdown>
</div> </div>
......
@import "../../core/variables.less"; @import '../../core/variables.less';
@top-height: 60px; @top-height: 60px;
@icon-color: #939393; @icon-color: #939393;
.top-container { .top-container {
...@@ -7,16 +7,23 @@ ...@@ -7,16 +7,23 @@
left: 0; left: 0;
right: 0; right: 0;
height: @top-height; height: @top-height;
background-color: #2966FF; background-color: #2966ff;
// z-index:2; // z-index:2;
&::after{ &::after {
content:''; content: '';
width:100%; width: 100%;
height:60px; height: 60px;
background: linear-gradient(180deg, #2966FF 0%, rgba(41, 102, 255, 0.82) 29%, rgba(41, 102, 255, 0.58) 55%, rgba(41, 102, 255, 0.27) 77%, rgba(7, 78, 255, 0) 100%); background: linear-gradient(
position:absolute; 180deg,
z-index:2; #2966ff 0%,
top:59px; rgba(41, 102, 255, 0.82) 29%,
rgba(41, 102, 255, 0.58) 55%,
rgba(41, 102, 255, 0.27) 77%,
rgba(7, 78, 255, 0) 100%
);
position: absolute;
z-index: 2;
top: 59px;
} }
.logo { .logo {
display: inline-block; display: inline-block;
...@@ -26,7 +33,7 @@ ...@@ -26,7 +33,7 @@
.logo-name { .logo-name {
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
color: #2966FF; color: #2966ff;
line-height: 20px; line-height: 20px;
vertical-align: middle; vertical-align: middle;
font-weight: bold; font-weight: bold;
...@@ -204,7 +211,7 @@ ...@@ -204,7 +211,7 @@
cursor: pointer; cursor: pointer;
} }
.college-name { .college-name {
color:#FFFFFF; color: #ffffff;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
...@@ -213,9 +220,9 @@ ...@@ -213,9 +220,9 @@
.icon { .icon {
font-size: 14px; font-size: 14px;
margin-left: 8px; margin-left: 8px;
color: #FFF; color: #fff;
&:hover { &:hover {
color:#FFF; color: #fff;
} }
} }
} }
...@@ -283,7 +290,7 @@ ...@@ -283,7 +290,7 @@
align-items: center; align-items: center;
.store-name { .store-name {
font-size: 14px; font-size: 14px;
color: #FFF; color: #fff;
line-height: 49px; line-height: 49px;
margin-left: 8px; margin-left: 8px;
white-space: nowrap; white-space: nowrap;
...@@ -296,17 +303,17 @@ ...@@ -296,17 +303,17 @@
width: 1px; width: 1px;
height: 16px; height: 16px;
background-color: #f4f4f4; background-color: #f4f4f4;
margin-right:16px; margin-right: 16px;
} }
} }
.right-box { .right-box {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.right-bg-img{ .right-bg-img {
img{ img {
width:277px; width: 277px;
height:60px; height: 60px;
} }
} }
.link-to-store { .link-to-store {
...@@ -315,90 +322,91 @@ ...@@ -315,90 +322,91 @@
line-height: 49px; line-height: 49px;
.text { .text {
font-size: 14px; font-size: 14px;
color: #FFF; color: #fff;
line-height: 49px; line-height: 49px;
margin-left: 7px; margin-left: 7px;
} }
.iconfont { .iconfont {
color: #FFF; color: #fff;
} }
.link { .link {
cursor: pointer; cursor: pointer;
position: relative; position: relative;
.link-btn{ .link-btn {
padding:3px 12px; padding: 3px 12px;
border: 1px solid rgba(255, 255, 255, 0.5); border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 4px; border-radius: 4px;
&:hover{ &:hover {
border: 1px solid rgba(255, 255, 255, 1); border: 1px solid rgba(255, 255, 255, 1);
} }
} }
.store-popover { .store-popover {
position: absolute;
display: none; display: none;
width: 216px;
height: 260px;
top: 49px;
left: 0;
background-color: #fff;
flex-wrap: wrap;
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
z-index: 10;
.pc-url {
display: flex;
justify-content: space-between;
width: 100%;
height: 56px;
padding: 16px;
border-bottom: 1px solid #e8e8e8;
.name {
width: 70px;
font-size: 14px;
color: #333333;
line-height: 20px;
}
.url-link {
color: #2966ff;
font-size: 14px;
line-height: 20px;
}
}
.h5-url {
width: 100%;
.name,
.tip {
width: 70px;
font-size: 14px;
color: #333333;
line-height: 52px;
margin: 0 auto;
}
#h5-qrcode {
width: 110px;
height: 110px;
margin: 0 auto;
}
.tip {
line-height: 41px;
width: 130px;
}
}
} }
&:hover { &:hover {
.store-popover { .store-popover {
position: absolute;
display: flex; display: flex;
width: 216px;
height: 260px;
top: 49px;
left: 0;
background-color: #fff;
flex-wrap: wrap;
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
z-index: 10;
.pc-url {
display: flex;
justify-content: space-between;
width: 100%;
height: 56px;
padding: 16px;
border-bottom: 1px solid #e8e8e8;
.name {
width: 70px;
font-size: 14px;
color: #333333;
line-height: 20px;
}
.url-link {
color: #2966FF;
font-size: 14px;
line-height: 20px;
}
}
.h5-url {
width: 100%;
.name,
.tip {
width: 70px;
font-size: 14px;
color: #333333;
line-height: 52px;
margin: 0 auto;
}
#h5-qrcode {
width: 110px;
height: 110px;
margin: 0 auto;
}
.tip {
line-height: 41px;
width: 130px;
}
}
} }
} }
} }
.share { .share,
.help {
cursor: pointer; cursor: pointer;
margin-left: 16px; margin-left: 16px;
.share-btn{ .share-btn,
padding:3px 12px; .help-btn {
padding: 3px 12px;
border: 1px solid rgba(255, 255, 255, 0.5); border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 4px; border-radius: 4px;
&:hover{ &:hover {
border: 1px solid rgba(255, 255, 255, 1); border: 1px solid rgba(255, 255, 255, 1);
} }
} }
...@@ -529,7 +537,7 @@ ...@@ -529,7 +537,7 @@
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
color:#FFF; color: #fff;
} }
} }
} }
...@@ -588,7 +596,7 @@ ...@@ -588,7 +596,7 @@
.user-detail { .user-detail {
position: relative; position: relative;
padding-bottom: 16px; padding-bottom: 16px;
border-bottom: 1px solid #E8E8E8; border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
...@@ -625,7 +633,7 @@ ...@@ -625,7 +633,7 @@
cursor: pointer; cursor: pointer;
color: #333; color: #333;
.menu-before { .menu-before {
color: #BFBFBF; color: #bfbfbf;
margin-right: 8px; margin-right: 8px;
font-size: 14px; font-size: 14px;
} }
......
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react';
import { withRouter } from 'react-router-dom' import { withRouter } from 'react-router-dom';
import './Login.less' import './Login.less';
import { Input, Popover, message, Tabs, Button } from 'antd' import { Input, Popover, message, Tabs, Button } from 'antd';
import CheckBeforeSendCode from '../../components/CheckBeforeSendCode' import CheckBeforeSendCode from '../../components/CheckBeforeSendCode';
import User from '@/common/js/user' import User from '@/common/js/user';
import WechatLogin from './WechatLogin' import WechatLogin from './WechatLogin';
import BaseService from '@/domains/basic-domain/baseService' import BaseService from '@/domains/basic-domain/baseService';
import storage from '@/common/js/storage' import axios from 'axios';
import axios from 'axios' import storage from '@/common/js/storage';
import _ from 'underscore' import _ from 'underscore';
import user from '@/common/js/user' import user from '@/common/js/user';
const { TabPane } = Tabs const { TabPane } = Tabs;
function Login(props) { function Login(props) {
const [phone, setPhone] = useState('') // 登录手机号 /**
const [phoneverify, setPhoneverify] = useState('') // 密码登录验证码 * 手机登陆入口,暂时隐藏,此页注释代码勿删
const [openCheck1, setOpenCheck1] = useState(false) */
const [checking1, setChecking1] = useState(false)
const [codeText, setCodeText] = useState('获取验证码') // 验证码提示语 // const [phone, setPhone] = useState(''); // 登录手机号
const [waitStatus, setWaitStatus] = useState(false) // 验证码是否在倒计时 // const [phoneverify, setPhoneverify] = useState(''); // 密码登录验证码
const [errorMessage, setErrorMessage] = useState('') // const [openCheck1, setOpenCheck1] = useState(false);
const [phoneError, setPhoneError] = useState(false) // const [checking1, setChecking1] = useState(false);
const [checkObject1, setCheckObject1] = useState({}) // const [codeText, setCodeText] = useState('获取验证码'); // 验证码提示语
// const [waitStatus, setWaitStatus] = useState(false); // 验证码是否在倒计时
// const [errorMessage, setErrorMessage] = useState('');
// const [phoneError, setPhoneError] = useState(false);
// const [checkObject1, setCheckObject1] = useState({});
/**
* 手机登陆入口,暂时隐藏,此页注释代码勿删
*/
useEffect(() => { useEffect(() => {
const enterpriseId = getParameterByName('enterpriseId') const enterpriseId = getParameterByName('enterpriseId');
const userId = getParameterByName('userId') const userId = getParameterByName('userId');
const from = getParameterByName('from') const from = getParameterByName('from');
const storeId = getParameterByName('storeId') const storeId = getParameterByName('storeId');
if (storeId) { if (storeId) {
User.setCustomerStoreId(storeId) User.setCustomerStoreId(storeId);
} }
if (from === 'customer' && enterpriseId && userId) { if (from === 'customer' && enterpriseId && userId) {
if (!user.getToken() || enterpriseId !== user.getEnterpriseId() || userId !== User.getUserId()) { if (!user.getToken() || enterpriseId !== user.getEnterpriseId() || userId !== User.getUserId()) {
getWXWorkLoginNoCheck(enterpriseId, userId) getWXWorkLoginNoCheck(enterpriseId, userId);
} else { } else {
window.RCHistory.push({ window.RCHistory.push({
pathname: `/switch-route` pathname: `/switch-route`,
}) });
} }
} else { } else {
User.removeUserId() User.removeUserId();
User.removeToken() User.removeToken();
User.removeEnterpriseId() User.removeEnterpriseId();
} }
storage.set("expiration_tip_login",true) storage.set("expiration_tip_login",true)
}, []) }, [])
...@@ -50,122 +58,141 @@ function Login(props) { ...@@ -50,122 +58,141 @@ function Login(props) {
const params = { const params = {
appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN', appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN',
enterpriseId, enterpriseId,
userId userId,
} };
BaseService.getWXWorkLoginNoCheck(params).then((res) => { BaseService.getWXWorkLoginNoCheck(params).then((res) => {
User.setUserId(res.result.loginInfo.userId) User.setUserId(res.result.loginInfo.userId)
User.setToken(res.result.loginInfo.xmToken) User.setToken(res.result.loginInfo.xmToken)
User.setEnterpriseId(res.result.enterpriseId) User.setEnterpriseId(res.result.enterpriseId)
window.currentStoreUserInfo = {}
window.currentStoreUserInfo.userId = res.result.loginInfo.userId;
window.currentStoreUserInfo.token = res.result.loginInfo.xmToken;
window.currentStoreUserInfo.enterpriseId = res.result.enterpriseId;
User.setIdentifier(res.result.identifier) User.setIdentifier(res.result.identifier)
window.RCHistory.push({ window.RCHistory.push({
pathname: `/switch-route` pathname: `/switch-route`,
}) });
}) });
}
async function checkAccount(code, callback = () => {}) {
callback()
}
function checkSend(code) {
if (!phone) {
setPhoneError(true)
setErrorMessage('请输入手机号')
return
}
if (phone.length != 11) {
setPhoneError(true)
setErrorMessage('请输入11位手机号')
return
}
!_.isEmpty(checkObject1) && checkObject1.reset()
setOpenCheck1(true)
}
function handleSendSMSCode(checkData, userType) {
if (waitStatus) return
let timer
const params = {
phone: phone,
sig: checkData.sig,
sessionId: checkData.csessionid,
token: checkData.token,
scene: 'nc_login',
serverType: 'CLOUD_CLASS_LOGIN',
appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN'
}
BaseService.sendLoginAuthCode(params).then((res) => {
if (!res.success) {
setErrorMessage(res.message)
} else {
timeSub(60)
setChecking1(true)
}
})
function timeSub(waitTime, unit) {
clearTimeout(timer)
timer = setTimeout(function () {
if (waitTime === 0) {
setCodeText('发送验证码')
setChecking1(false)
setWaitStatus(false)
clearTimeout(timer)
} else {
setCodeText(`${waitTime}秒后重发`)
setWaitStatus(true)
timeSub(--waitTime, 1000)
}
}, unit || 0)
}
} }
function handleSubmit() { /**
if (!phone) { * 手机登陆入口,暂时隐藏,此页注释代码勿删
setPhoneError(true) */
setErrorMessage('请输入手机号')
return // async function checkAccount(code, callback = () => {}) {
} // callback();
if (phone.length != 11) { // }
setPhoneError(true) // function checkSend(code) {
setErrorMessage('请输入11位手机号') // if (!phone) {
return // setPhoneError(true);
} // setErrorMessage('请输入手机号');
if (!phoneverify) { // return;
setErrorMessage('请输入验证码') // }
return // if (phone.length != 11) {
} // setPhoneError(true);
const params = { // setErrorMessage('请输入11位手机号');
phone, // return;
authCode: phoneverify, // }
appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN' // !_.isEmpty(checkObject1) && checkObject1.reset();
} // setOpenCheck1(true);
BaseService.login(params).then((res) => { // }
if (!res.success) { // function handleSendSMSCode(checkData, userType) {
setErrorMessage(res.message) // if (waitStatus) return;
} else { // let timer;
User.setUserId(res.result.userId) // const params = {
User.setToken(res.result.xmToken) // phone: phone,
window.RCHistory.push({ // sig: checkData.sig,
pathname: `/switch-route` // sessionId: checkData.csessionid,
}) // token: checkData.token,
} // scene: 'nc_login',
}) // serverType: 'CLOUD_CLASS_LOGIN',
} // appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN',
// };
// BaseService.sendLoginAuthCode(params).then((res) => {
// if (!res.success) {
// setErrorMessage(res.message);
// } else {
// timeSub(60);
// setChecking1(true);
// }
// });
// function timeSub(waitTime, unit) {
// clearTimeout(timer);
// timer = setTimeout(function () {
// if (waitTime === 0) {
// setCodeText('发送验证码');
// setChecking1(false);
// setWaitStatus(false);
// clearTimeout(timer);
// } else {
// setCodeText(`${waitTime}秒后重发`);
// setWaitStatus(true);
// timeSub(--waitTime, 1000);
// }
// }, unit || 0);
// }
// }
// function handleSubmit() {
// if (!phone) {
// setPhoneError(true);
// setErrorMessage('请输入手机号');
// return;
// }
// if (phone.length != 11) {
// setPhoneError(true);
// setErrorMessage('请输入11位手机号');
// return;
// }
// if (!phoneverify) {
// setErrorMessage('请输入验证码');
// return;
// }
// const params = {
// phone,
// authCode: phoneverify,
// appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN',
// };
// BaseService.login(params).then((res) => {
// if (!res.success) {
// setErrorMessage(res.message);
// } else {
// User.setUserId(res.result.userId);
// User.setToken(res.result.xmToken);
// window.RCHistory.push({
// pathname: `/switch-route`,
// });
// }
// });
// }
/**
* 手机登陆入口,暂时隐藏,此页注释代码勿删
*/
return ( return (
<div className="login-page" > <div className='login-page'>
<div className="logo-img-box"><img src="https://image.xiaomaiketang.com/xm/6k8PPCmywG.png" className="logo-img"/></div> <div className='logo-img-box'>
<div className="login-main"> <img src='https://image.xiaomaiketang.com/xm/6k8PPCmywG.png' className='logo-img' />
<div className="left-banner"> </div>
<div className="img-box"><img src="https://image.xiaomaiketang.com/xm/CDCcdAdaPs.png" alt="" /></div> <div className='login-main'>
<div className='left-banner'>
<div className='img-box'>
<img src='https://image.xiaomaiketang.com/xm/CDCcdAdaPs.png' alt='' />
</div>
</div> </div>
<div className="login-box"> <div className='login-box'>
<div className="left-top-block color-block"></div> <div className='left-top-block color-block'></div>
<div className="right-bottom-block color-block"></div> <div className='right-bottom-block color-block'></div>
<div className="login"> <div className='login'>
<div className="r"> <div className='r'>
<Tabs defaultActiveKey="1"> <Tabs defaultActiveKey='1'>
<TabPane tab="企业微信登录" key="1"> <TabPane tab='企业微信登录' key='1'>
<WechatLogin></WechatLogin> <WechatLogin></WechatLogin>
</TabPane> </TabPane>
<TabPane tab='手机号登录' key='2'> {/* 手机登陆入口,暂时隐藏,此页注释代码勿删 */}
{/* <TabPane tab='手机号登录' key='2'>
<div className='login-form'> <div className='login-form'>
<div className='form'> <div className='form'>
<div className='username' style={{ marginBottom: 16 }}> <div className='username' style={{ marginBottom: 16 }}>
...@@ -246,14 +273,15 @@ function Login(props) { ...@@ -246,14 +273,15 @@ function Login(props) {
</div> </div>
</div> </div>
</div> </div>
</TabPane> </TabPane> */}
{/* 手机登陆入口,暂时隐藏,此页注释代码勿删 */}
</Tabs> </Tabs>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
) );
} }
export default withRouter(Login) export default withRouter(Login);
@import url("../../core/variables.less"); @import url('../../core/variables.less');
.login-page { .login-page {
position: static; position: static;
font-family: "微软雅黑"; font-family: '微软雅黑';
padding: 0; padding: 0;
min-width: 1200px; min-width: 1200px;
background: #F4F6FA; background: #f4f6fa;
height: 100%; height: 100%;
overflow-y: hidden; overflow-y: hidden;
.logo-img-box{ .logo-img-box {
position: absolute; position: absolute;
top:24px; top: 24px;
right:32px; right: 32px;
z-index:1; z-index: 1;
.logo-img{ .logo-img {
width:120px; width: 120px;
display: inline-block; display: inline-block;
} }
} }
.login-main { .login-main {
min-width: 1200px; min-width: 1200px;
display: flex; display: flex;
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
width: 540px; width: 540px;
height: 100vh; height: 100vh;
.img-box { .img-box {
background: #2966FF; background: #2966ff;
width: 540px; width: 540px;
height: 100vh; height: 100vh;
img { img {
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%,-50%); transform: translate(-50%, -50%);
} }
} }
} }
...@@ -50,10 +50,10 @@ ...@@ -50,10 +50,10 @@
height: 256px; height: 256px;
background: rgba(41, 102, 255, 0.05); background: rgba(41, 102, 255, 0.05);
position: absolute; position: absolute;
top:0; top: 0;
left: 0; left: 0;
&.right-bottom-block { &.right-bottom-block {
top:auto; top: auto;
left: auto; left: auto;
bottom: 0; bottom: 0;
right: 0; right: 0;
...@@ -90,11 +90,11 @@ ...@@ -90,11 +90,11 @@
height: 420px; height: 420px;
position: absolute; position: absolute;
left: 50%; left: 50%;
top:50%; top: 50%;
transform: translate(-50%,-50%); transform: translate(-50%, -50%);
overflow: hidden; overflow: hidden;
background-color: #ffffff; background-color: #ffffff;
border-radius: 4px; border-radius: 4px;
.ant-tabs-tab-btn { .ant-tabs-tab-btn {
color: #999999; color: #999999;
font-size: 18px; font-size: 18px;
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
.ant-tabs-tab-active { .ant-tabs-tab-active {
.ant-tabs-tab-btn { .ant-tabs-tab-btn {
color: #333333; color: #333333;
font-weight:500!important; font-weight: 500 !important;
} }
} }
.ant-tabs-nav::before { .ant-tabs-nav::before {
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
} }
.ant-tabs-tab { .ant-tabs-tab {
text-align: center; text-align: center;
margin:0; margin: 0;
} }
.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list { .ant-tabs > .ant-tabs-nav .ant-tabs-nav-list {
margin: 0 auto; margin: 0 auto;
...@@ -128,13 +128,7 @@ ...@@ -128,13 +128,7 @@
width: 280px; width: 280px;
height: 100%; height: 100%;
background: @primary; background: @primary;
background: -webkit-gradient( background: -webkit-gradient(linear, left top, left bottom, from(#ffaa1a), to(#ff8634)) !important;
linear,
left top,
left bottom,
from(#ffaa1a),
to(#ff8634)
) !important;
display: flex; display: flex;
display: -webkit-flex; display: -webkit-flex;
-webkit-flex-direction: column; -webkit-flex-direction: column;
...@@ -197,8 +191,8 @@ ...@@ -197,8 +191,8 @@
} }
} }
} }
.login-form{ .login-form {
margin-top:32px; margin-top: 32px;
} }
.qrcode { .qrcode {
display: none; display: none;
...@@ -281,7 +275,7 @@ ...@@ -281,7 +275,7 @@
font-weight: 500; font-weight: 500;
color: #333; color: #333;
&::after { &::after {
content: ""; content: '';
display: block; display: block;
width: 24px; width: 24px;
height: 4px; height: 4px;
...@@ -383,12 +377,12 @@ ...@@ -383,12 +377,12 @@
border-radius: 3px; border-radius: 3px;
margin-top: 60px; margin-top: 60px;
font-size: 14px; // font-weight: 300; font-size: 14px; // font-weight: 300;
color:#2966FF; color: #2966ff;
&:hover { &:hover {
color: #2966FF; color: #2966ff;
} }
&::before { &::before {
content: ""; content: '';
display: block; display: block;
height: 20px; height: 20px;
width: 1px; width: 1px;
...@@ -416,7 +410,7 @@ ...@@ -416,7 +410,7 @@
} }
.refresh { .refresh {
font-size: 14px; font-size: 14px;
color: #2966FF; color: #2966ff;
cursor: pointer; cursor: pointer;
} }
} }
...@@ -466,10 +460,10 @@ ...@@ -466,10 +460,10 @@
transition: all 0.3s; transition: all 0.3s;
cursor: pointer; cursor: pointer;
border: none; border: none;
text-align:center; text-align: center;
&:hover { &:hover {
opacity: 0.7; opacity: 0.7;
background: #5C8AFF; background: #5c8aff;
} }
} }
} }
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
.icon-img{ .icon-img{
width:18px; width:18px;
height:18px; height:18px;
margin-right:16px; margin-right:6px;
} }
.listType { .listType {
width: 5px; width: 5px;
......
...@@ -192,11 +192,11 @@ function Aside(props: any) { ...@@ -192,11 +192,11 @@ function Aside(props: any) {
function handleMenu() { function handleMenu() {
handleMenuType(); handleMenuType();
setCollapsed(!collapsed) setCollapsed(!collapsed)
// if (!collapsed) { if (!collapsed) {
// setOpenKeys([]) setOpenKeys([])
// } else { } else {
// setOpenKeys(lastOpenKeys) setOpenKeys(lastOpenKeys)
// } }
} }
return ( return (
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
color: #999999; color: #999999;
line-height: 20px; line-height: 20px;
} }
.rwm{ .rwm {
position: relative; position: relative;
width: 210px; width: 210px;
height: 210px; height: 210px;
...@@ -18,30 +18,29 @@ ...@@ -18,30 +18,29 @@
margin-top: 24px; margin-top: 24px;
border: 1px solid #e8e8e8; border: 1px solid #e8e8e8;
border-radius: 2px; border-radius: 2px;
padding:15px; padding: 15px;
.error{ .error {
position: absolute; position: absolute;
width: 200px; width: 200px;
height: 200px; height: 200px;
background: rgba(255, 255, 255, 0.95); background: rgba(255, 255, 255, 0.95);
display: flex; display: flex;
align-items:center; align-items: center;
justify-content:center; justify-content: center;
left:5px; left: 5px;
top:5px; top: 5px;
div{ div {
margin: 0 10px; margin: 0 10px;
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
color: #333333; color: #333333;
line-height: 20px; line-height: 20px;
}
} .ope {
.ope{ cursor: pointer;
cursor: pointer; color: rgba(82, 137, 250, 1);
color:rgba(82, 137, 250, 1); }
}
} }
} }
......
import React, { useState, useRef, useEffect } from 'react'; import React, { useState, useRef, useEffect } from 'react';
import qrcode from "@/libs/qrcode/qrcode.js"; import qrcode from '@/libs/qrcode/qrcode.js';
import Service from "@/common/js/service"; import Service from '@/common/js/service';
import User from '@/common/js/user'; import User from '@/common/js/user';
import { PATH } from '@/domains/basic-domain/constants'; import { PATH } from '@/domains/basic-domain/constants';
import './WechatLogin.less' import './WechatLogin.less';
const Logo = require("@/common/images/logo.png") const Logo = require('@/common/images/logo.png');
declare var location: any; declare var location: any;
declare var window: any;
export default function WechatLogin(props: any) { export default function WechatLogin(props: any) {
const freshTime = 60; const freshTime = 60;
const init: any = null; const init: any = null;
const [status, setStatus] = useState(0); const [status, setStatus] = useState(0);
const [ticket, setTicket] = useState(''); const [ticket, setTicket] = useState('');
const [leftTime, setLeftTime] = useState(freshTime) const [leftTime, setLeftTime] = useState(freshTime);
const QRCode = useRef(init); const QRCode = useRef(init);
const timer = useRef(init); const timer = useRef(init);
const leftTimeRef = useRef(init); const leftTimeRef = useRef(init);
useEffect(() => {
leftTimeRef.current = leftTime;
}, [leftTime])
useEffect(() => {
clearInterval(timer.current as any);
if (status === 0) {
Service.Hades("anon/hades/getTicket", {}).then((res: any) => {
setTicket(res.result)
const redirect = `${PATH}?ticket=${res.result}&appTermEnum=XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN&env=${process.env.DEPLOY_ENV || 'dev'}`
// console.log(redirect)
// const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww409ccf9c6e31f19e&redirect_uri=${encodeURIComponent(redirect)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
// console.log(url)
const qrcodeWrapDom:any = document.querySelector('#qrcode');
let qrnode = new qrcode({
text: redirect,
correctLevel: 2,
size: 180,
// image: 'https://image.xiaomaiketang.com/xm/Newk4NrxKC.png',
image: 'https://image.xiaomaiketang.com/xm/bFkRBz7teA.png',
imageSize: 50
});
qrcodeWrapDom.innerHTML = '';
qrcodeWrapDom && qrcodeWrapDom.appendChild(qrnode);
// QRCode.current.innerHTML = ''
// QRCode.current.prepend(qrnode);
setLeftTime(freshTime);
timer.current = setInterval(() => {
if (leftTimeRef.current == 0) {
clearInterval(timer.current);
setStatus(1);
return
}
setLeftTime(leftTimeRef.current - 1); useEffect(() => {
leftTimeRef.current = leftTime;
}, [leftTime]);
}, 1000) useEffect(() => {
}) clearInterval(timer.current as any);
} if (status === 0) {
return () => { Service.Hades('anon/hades/getTicket', {}).then((res: any) => {
setTicket(res.result);
const redirect = `${PATH}?ticket=${res.result}&appTermEnum=XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN&env=${process.env.DEPLOY_ENV || 'dev'}`;
const qrcodeWrapDom: any = document.querySelector('#qrcode');
let qrnode = new qrcode({
text: redirect,
correctLevel: 2,
size: 180,
image: 'https://image.xiaomaiketang.com/xm/bFkRBz7teA.png',
imageSize: 50,
});
qrcodeWrapDom.innerHTML = '';
qrcodeWrapDom && qrcodeWrapDom.appendChild(qrnode);
// QRCode.current.innerHTML = ''
// QRCode.current.prepend(qrnode);
setLeftTime(freshTime);
timer.current = setInterval(() => {
if (leftTimeRef.current == 0) {
clearInterval(timer.current); clearInterval(timer.current);
} setStatus(1);
}, [status]) return;
}
useEffect(() => {
if (leftTime == 60 || !ticket) {
return
}
Service.Hades('anon/hades/getTicketState', {
ticket
}).then((res: any) => {
if (res.result === 'AUTH_SUCCESS') {
Service.Hades('anon/hades/getTicketWXWorkLogin', {
ticket
}).then((_res: any) => {
User.setUserId(_res.result.loginInfo.userId);
User.setToken(_res.result.loginInfo.xmToken);
User.setEnterpriseId(_res.result.enterpriseId);
User.setIdentifier(_res.result.identifier)
window.RCHistory.push({
pathname: `/switch-route`,
})
})
}
})
}, [leftTime]) setLeftTime(leftTimeRef.current - 1);
}, 1000);
});
}
return () => {
clearInterval(timer.current);
};
}, [status]);
return <div className='wechatLoginBox'> useEffect(() => {
<div className="rwm"> if (leftTime == 60 || !ticket) {
<div id="qrcode"></div> return;
}
{ Service.Hades('anon/hades/getTicketState', {
status === 1 && <div className="error"> ticket,
<div>二维码已过期 }).then((res: any) => {
<p className="ope" onClick={() => { if (res.result === 'AUTH_SUCCESS') {
setStatus(0) Service.Hades('anon/hades/getTicketWXWorkLogin', {
}}>刷新</p> ticket,
</div> }).then((_res: any) => {
</div> User.setUserId(_res.result.loginInfo.userId);
} User.setToken(_res.result.loginInfo.xmToken);
{ User.setEnterpriseId(_res.result.enterpriseId);
status === 2 && <div className="error"> User.setIdentifier(_res.result.identifier);
<div>所在企业还未注册学院 window.currentStoreUserInfo = {}
window.currentStoreUserInfo.userId = _res.result.loginInfo.userId;
window.currentStoreUserInfo.token = _res.result.loginInfo.xmToken;
window.currentStoreUserInfo.enterpriseId = _res.result.enterpriseId;
window.RCHistory.push({
pathname: `/switch-route`,
});
});
}
});
}, [leftTime]);
<p className="ope" onClick={() => { return (
setStatus(0) <div className='wechatLoginBox'>
}}>我知道了</p> <div className='rwm'>
</div> <div id='qrcode'></div>
</div>
}
{
status === 3 && <div className="error">
<div>你还不是学院员工,请联系企业管理员
<p className="ope" onClick={() => { {status === 1 && (
setStatus(0) <div className='error'>
}}>我知道了</p> <div>
</div> 二维码已过期
</div> <p
} className='ope'
</div> onClick={() => {
<p className='text'>请使用企业微信扫码登录</p> setStatus(0);
}}>
刷新
</p>
</div>
</div>
)}
{status === 2 && (
<div className='error'>
<div>
所在企业还未注册学院
<p
className='ope'
onClick={() => {
setStatus(0);
}}>
我知道了
</p>
</div>
</div>
)}
{status === 3 && (
<div className='error'>
<div>
你还不是学院员工,请联系企业管理员
<p
className='ope'
onClick={() => {
setStatus(0);
}}>
我知道了
</p>
</div>
</div>
)}
</div>
<p className='text'>请使用企业微信扫码登录</p>
</div> </div>
} );
\ No newline at end of file }
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-02-01 14:12:38 * @LastEditTime: 2021-06-21 11:17:44
* @Description: 学院装修页面 * @Description: 学院装修页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import React, { useEffect, useState } from "react"; import React, { useState } from "react";
import { withRouter, Switch, Route } from "react-router-dom"; import { withRouter } from "react-router-dom";
import _ from "underscore"; import _ from "underscore";
import { Tabs } from "antd"; import { Tabs } from "antd";
import "./StoreDecorationPage.less"; import "./StoreDecorationPage.less";
...@@ -16,9 +16,6 @@ import StoreH5DecorationTab from "./StoreH5DecorationTab"; ...@@ -16,9 +16,6 @@ import StoreH5DecorationTab from "./StoreH5DecorationTab";
import StoreWebDecorationTab from "./StoreWebDecorationTab"; import StoreWebDecorationTab from "./StoreWebDecorationTab";
const { TabPane } = Tabs; const { TabPane } = Tabs;
declare var window: any;
interface StoreDecoprationProps { interface StoreDecoprationProps {
match: { match: {
url: string; url: string;
...@@ -27,7 +24,6 @@ interface StoreDecoprationProps { ...@@ -27,7 +24,6 @@ interface StoreDecoprationProps {
function StoreDecorationPage(props: StoreDecoprationProps) { function StoreDecorationPage(props: StoreDecoprationProps) {
const [currentTab, setCurrentTab] = useState("h5"); const [currentTab, setCurrentTab] = useState("h5");
const { match } = props;
return ( return (
<div className="page store-decoration-page"> <div className="page store-decoration-page">
...@@ -36,7 +32,6 @@ function StoreDecorationPage(props: StoreDecoprationProps) { ...@@ -36,7 +32,6 @@ function StoreDecorationPage(props: StoreDecoprationProps) {
<Tabs <Tabs
onChange={(key) => { onChange={(key) => {
setCurrentTab(key); setCurrentTab(key);
// window.RCHistory.push(`${match.url}/store-decoration/${key}`);
}} }}
activeKey={currentTab} activeKey={currentTab}
> >
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-05-28 16:20:26 * @LastEditTime: 2021-06-21 11:16:21
* @Description: web学院banner页面 * @Description: web学院banner页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -10,8 +10,7 @@ ...@@ -10,8 +10,7 @@
import React from "react"; import React from "react";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import _ from "underscore"; import _ from "underscore";
// import PhotoClip from 'photoclip' import { Modal, message, Button } from "antd";
import { Table, Modal, message, Button } from "antd";
import StoreService from "@/domains/store-domain/storeService"; import StoreService from "@/domains/store-domain/storeService";
import { import {
sortableContainer, sortableContainer,
...@@ -24,6 +23,8 @@ import User from "@/common/js/user"; ...@@ -24,6 +23,8 @@ import User from "@/common/js/user";
import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal"; import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal";
import "./StoreDecorationPage.less"; import "./StoreDecorationPage.less";
import Upload from "@/core/upload"; import Upload from "@/core/upload";
import { XMTable } from '@/components';
import college from '@/common/lottie/college';
const { confirm } = Modal; const { confirm } = Modal;
const DragHandle = sortableHandle(() => ( const DragHandle = sortableHandle(() => (
...@@ -391,7 +392,11 @@ class StoreH5Decoration extends React.Component { ...@@ -391,7 +392,11 @@ class StoreH5Decoration extends React.Component {
</Button> </Button>
</div> </div>
<div className="box-body"> <div className="box-body">
<Table <XMTable
renderEmpty={{
image: college,
description: '暂无数据'
}}
size={"middle"} size={"middle"}
pagination={false} pagination={false}
dataSource={storeDecorationlist} dataSource={storeDecorationlist}
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: wufan * @Author: wufan
* @Date: 2020-11-30 10:47:38 * @Date: 2020-11-30 10:47:38
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-05-28 16:21:04 * @LastEditTime: 2021-06-21 11:16:31
* @Description: web学院banner页面 * @Description: web学院banner页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -10,8 +10,7 @@ ...@@ -10,8 +10,7 @@
import React from "react"; import React from "react";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import _ from "underscore"; import _ from "underscore";
// import PhotoClip from 'photoclip' import { Modal, message, Button } from "antd";
import { Table, Modal, message, Button } from "antd";
import StoreService from "@/domains/store-domain/storeService"; import StoreService from "@/domains/store-domain/storeService";
import { import {
sortableContainer, sortableContainer,
...@@ -24,6 +23,8 @@ import User from "@/common/js/user"; ...@@ -24,6 +23,8 @@ import User from "@/common/js/user";
import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal"; import SelectPrepareFileModal from "@/modules/prepare-lesson/modal/SelectPrepareFileModal";
import "./StoreDecorationPage.less"; import "./StoreDecorationPage.less";
import Upload from "@/core/upload"; import Upload from "@/core/upload";
import { XMTable } from '@/components';
import college from '@/common/lottie/college';
const { confirm } = Modal; const { confirm } = Modal;
const DragHandle = sortableHandle(() => ( const DragHandle = sortableHandle(() => (
...@@ -389,7 +390,11 @@ class StoreWebDecoration extends React.Component { ...@@ -389,7 +390,11 @@ class StoreWebDecoration extends React.Component {
</Button> </Button>
</div> </div>
<div className="box-body"> <div className="box-body">
<Table <XMTable
renderEmpty={{
image: college,
description: '暂无数据'
}}
size={"middle"} size={"middle"}
pagination={false} pagination={false}
dataSource={storeDecorationlist} dataSource={storeDecorationlist}
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
* @Author: yuananting * @Author: yuananting
* @Date: 2021-04-08 15:50:52 * @Date: 2021-04-08 15:50:52
* @LastEditors: wufan * @LastEditors: wufan
* @LastEditTime: 2021-04-24 15:55:19 * @LastEditTime: 2021-06-21 11:24:48
* @Description: 助学工具-考试-答案详情 * @Description: 助学工具-考试-答案详情
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect} from 'react';
import { Route, withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import User from '@/common/js/user'; import User from '@/common/js/user';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
import Lottie from 'lottie-web'; import Lottie from 'lottie-web';
...@@ -20,7 +20,6 @@ const NUM_TO_WORD_MAP = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', ...@@ -20,7 +20,6 @@ const NUM_TO_WORD_MAP = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
function AnswerDescPage(props) { function AnswerDescPage(props) {
const examId = props.match.params.testId.replace(/\?.+/, ''); const examId = props.match.params.testId.replace(/\?.+/, '');
const paperId = window.getParameterByName('paperId'); const paperId = window.getParameterByName('paperId');
const [customerId, setCustomerId] = useState('');
const [examDetail, setExamDetail] = useState({ const [examDetail, setExamDetail] = useState({
examDesc: '', examDesc: '',
examDuration: 0, examDuration: 0,
...@@ -155,68 +154,10 @@ function AnswerDescPage(props) { ...@@ -155,68 +154,10 @@ function AnswerDescPage(props) {
setIsShowErrorPage(true); setIsShowErrorPage(true);
} }
function handleChangeActiveIndex(isPre) {
if (onlyError) {
if (isPre && activeOrderIndex !== errorQuestionList[0].orderIndex) {
setActiveOrderIndex(errorQuestionList[activeIndex - 1].orderIndex);
setActiveIndex(activeIndex - 1);
} else if (!isPre && activeOrderIndex !== errorQuestionList[errorCount - 1].orderIndex) {
setActiveOrderIndex(errorQuestionList[activeIndex + 1].orderIndex);
setActiveIndex(activeIndex + 1);
}
} else {
if (isPre && activeOrderIndex !== 0) {
setActiveOrderIndex(activeIndex - 1);
setActiveIndex(activeIndex - 1);
} else if (!isPre && activeOrderIndex !== questionList.length - 1) {
setActiveOrderIndex(activeIndex + 1);
setActiveIndex(activeIndex + 1);
}
}
}
function renderFooterText() {
if (onlyError && errorCount > 0) {
// 只看错题
return (
<div className='footer-btn'>
<div className='pre-next'>
<div
className={`${activeOrderIndex === (errorQuestionList.length > 0 ? errorQuestionList[0].orderIndex : 0) ? 'disabled' : ''} pre`}
onClick={() => handleChangeActiveIndex(true)}>
<span className='icon iconfont'>&#xe79c;</span>
<div className='text'>上一题</div>
</div>
<div
className={`${activeOrderIndex === (errorQuestionList.length > 0 ? errorQuestionList[errorCount - 1].orderIndex : 0) ? 'disabled' : ''} next`}
onClick={() => handleChangeActiveIndex(false)}>
<div className='text'>下一题</div>
<span className='icon iconfont'>&#xe79b;</span>
</div>
</div>
</div>
);
} else if (!onlyError) {
return (
<div className='footer-btn'>
<div className='pre-next'>
<div className={`${activeOrderIndex === 0 ? 'disabled' : ''} pre`} onClick={() => handleChangeActiveIndex(true)}>
<span className='icon iconfont'>&#xe79c;</span>
<div className='text'>上一题</div>
</div>
<div className={`${activeOrderIndex === questionList.length - 1 ? 'disabled' : ''} next`} onClick={() => handleChangeActiveIndex(false)}>
<div className='text'>下一题</div>
<span className='icon iconfont'>&#xe79b;</span>
</div>
</div>
</div>
);
}
}
function handleRenderQuestionItem() { function handleRenderQuestionItem() {
return _.map(questionList, (questionItem, questionIndex) => { return _.map(questionList, (questionItem, questionIndex) => {
const { questionStemList, optionList, gapFillingAnswerList, questionAnswerDescList, questionType, score, questionId, orderIndex } = questionItem; const { questionStemList, optionList, gapFillingAnswerList, questionType, score, questionId, orderIndex } = questionItem;
return ( return (
<div className={`question-info-item`}> <div className={`question-info-item`}>
{renderStem(questionItem, questionStemList, questionType, score, orderIndex, questionId, gapFillingAnswerList)} {renderStem(questionItem, questionStemList, questionType, score, orderIndex, questionId, gapFillingAnswerList)}
...@@ -225,7 +166,6 @@ function AnswerDescPage(props) { ...@@ -225,7 +166,6 @@ function AnswerDescPage(props) {
return renderOption(optionItem, optionIndex, questionId); return renderOption(optionItem, optionIndex, questionId);
})} })}
{renderAnswerCompare(questionId, questionType, optionList, gapFillingAnswerList)} {renderAnswerCompare(questionId, questionType, optionList, gapFillingAnswerList)}
{/* {renderAnswerDesc(questionAnswerDescList)} */}
</div> </div>
); );
}); });
...@@ -503,133 +443,6 @@ function AnswerDescPage(props) { ...@@ -503,133 +443,6 @@ function AnswerDescPage(props) {
} }
} }
// 渲染答案解析
function renderAnswerDesc(questionAnswerDescList) {
const textContent = _.filter(questionAnswerDescList, (item) => {
return item.type === 'RICH_TEXT';
});
const mediaContent = _.filter(questionAnswerDescList, (item) => {
return item.type !== 'RICH_TEXT';
});
let content = textContent.length > 0 ? `${textContent[0].content}:` : '';
let textDom = (
<div
key={0}
className='text-dom'
dangerouslySetInnerHTML={{
__html: content,
}}
/>
);
return (
<div className='desc-line__item'>
{textDom}
{renderAnswerDescMedia(mediaContent)}
</div>
);
}
// 渲染答案解析的多媒体
function renderAnswerDescMedia(mediaContent) {
const pictureMediaList = _.filter(mediaContent, (mediaItem) => {
return mediaItem.type === 'PICTURE';
});
const voiceMediaList = _.filter(mediaContent, (mediaItem) => {
return mediaItem.type === 'VOICE';
});
const audioMediaList = _.filter(mediaContent, (mediaItem) => {
return mediaItem.type === 'AUDIO';
});
const videoMediaList = _.filter(mediaContent, (mediaItem) => {
return mediaItem.type === 'VIDEO';
});
return (
<div className='desc-media-container'>
{pictureMediaList.length > 0 && (
<div className='desc-picture-box'>
{_.map(pictureMediaList, (pictureItem, pictureIndex) => {
let { content } = pictureItem;
return (
<div className='picture-box' key={pictureIndex}>
<img className='img-box' src={content} onClick={() => handleScanFile('JPG', content)} />
</div>
);
})}
</div>
)}
{audioMediaList.length > 0 && (
<div className='desc-audio-box'>
{_.map(audioMediaList, (audioItem, audioIndex) => {
let { content, size } = audioItem;
return (
<div className='audio-box' key={audioIndex}>
<XMAudio
forbidParse
url={content}
getDuration={(durationSize) => {
size = durationSize;
}}
index={audioIndex}
size={size || 1000}
/>
</div>
);
})}
</div>
)}
{voiceMediaList.length > 0 && (
<div className='desc-audio-box'>
{_.map(voiceMediaList, (voiceItem, voiceIndex) => {
let { content, size } = voiceItem;
return (
<div className='audio-box' key={voiceIndex}>
<XMAudio
forbidParse
url={content}
getDuration={(durationSize) => {
size = durationSize;
}}
index={voiceIndex}
size={size || 1000}
/>
</div>
);
})}
</div>
)}
{videoMediaList.length > 0 && (
<div className='desc-video-box'>
{_.map(videoMediaList, (videoItem, videoIndex) => {
let { content } = videoItem;
return (
<div className='video-box' key={videoIndex}>
<img className='video-box_content' src={`${content}?x-oss-process=video/snapshot,t_0,m_fast`} />
<img className='video-box_btn' src='https://image.xiaomaiketang.com/xm/r5H8cYm4ch.png' onClick={() => handleScanFile('MP4', content)} />
</div>
);
})}
</div>
)}
</div>
);
}
// 答题卡展开和收起
function handleToggleQuestionCardShow() {
setIsShowQuestionCard(!isShowQuestionCard);
}
// 快速跳转题目
function handleQuickActiveQuestion(orderIndex, answerIndex) {
setActiveOrderIndex(orderIndex);
setActiveIndex(answerIndex);
setIsShowQuestionCard(false);
}
// 只选错题 // 只选错题
function chooseErrorAnswer() { function chooseErrorAnswer() {
...@@ -640,8 +453,6 @@ function AnswerDescPage(props) { ...@@ -640,8 +453,6 @@ function AnswerDescPage(props) {
setQuestionList(!onlyError ? errorQuestionList : allQuestionList); setQuestionList(!onlyError ? errorQuestionList : allQuestionList);
} }
const { totalQuestionCount, userCorrectQuestion } = examDetail;
let sortedAnswerList = []; let sortedAnswerList = [];
let userAnswerMap = {}; let userAnswerMap = {};
userAnswerList.forEach((item) => { userAnswerList.forEach((item) => {
...@@ -689,7 +500,6 @@ function AnswerDescPage(props) { ...@@ -689,7 +500,6 @@ function AnswerDescPage(props) {
<div className='question-list-box'>{handleRenderQuestionItem()}</div> <div className='question-list-box'>{handleRenderQuestionItem()}</div>
</div> </div>
</If> </If>
{/* {renderFooterText()} */}
</div> </div>
{showScanFile && ( {showScanFile && (
<ScanFileModal <ScanFileModal
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-23 18:28:50 * @Date: 2021-02-23 18:28:50
* @LastEditors: fusanqiasng * @LastEditors: wufan
* @LastEditTime: 2021-06-16 09:59:04 * @LastEditTime: 2021-06-24 13:39:30
* @Description: 助学工具-课程分类 * @Description: 助学工具-课程分类
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -14,9 +14,11 @@ import AidToolService from '@/domains/aid-tool-domain/AidToolService'; ...@@ -14,9 +14,11 @@ import AidToolService from '@/domains/aid-tool-domain/AidToolService';
import User from '@/common/js/user'; import User from '@/common/js/user';
import { Tree, Input, Space, Button, Menu, Dropdown, message, Modal } from 'antd'; import { Tree, Input, Space, Button, Menu, Dropdown, message, Modal } from 'antd';
import ShowTips from '@/components/ShowTips'; import ShowTips from '@/components/ShowTips';
import LottieIcon from '@/components/LottieIcon';
const { DirectoryTree } = Tree; const { DirectoryTree } = Tree;
const { Search } = Input; const { Search } = Input;
const { confirm } = Modal; const { confirm } = Modal;
class CourseCategoryManage extends Component { class CourseCategoryManage extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
...@@ -567,16 +569,29 @@ class CourseCategoryManage extends Component { ...@@ -567,16 +569,29 @@ class CourseCategoryManage extends Component {
<ShowTips message='为方便管理,该分类用于课程、培训计划、题库、知识库等模块,改动将同步各模块更新' /> <ShowTips message='为方便管理,该分类用于课程、培训计划、题库、知识库等模块,改动将同步各模块更新' />
</div> </div>
<div className='course-category-tree'> <div className='course-category-tree'>
<DirectoryTree {
expandedKeys={expandedKeys} <Choose>
autoExpandParent={autoExpandParent} <When condition={(treeData.length !== 0)}>
onExpand={this.onExpand} <DirectoryTree
selectedKeys={selectedKeys} expandedKeys={expandedKeys}
onSelect={this.onSelect} autoExpandParent={autoExpandParent}
draggable onExpand={this.onExpand}
blockNode selectedKeys={selectedKeys}
onDrop={this.onDrop} onSelect={this.onSelect}
treeData={treeData}></DirectoryTree> draggable
blockNode
onDrop={this.onDrop}
treeData={treeData}></DirectoryTree>
</When>
<Otherwise>
<LottieIcon
title={<span className="desc">搜索无结果</span>}
type="search"
size={150}
/>
</Otherwise>
</Choose>
}
</div> </div>
</div> </div>
{operateCourseCategoryModal} {operateCourseCategoryModal}
......
...@@ -14,6 +14,12 @@ ...@@ -14,6 +14,12 @@
margin-top: 12px; margin-top: 12px;
width: 900px; width: 900px;
border: 1px solid #e8e8e8; border: 1px solid #e8e8e8;
.lottie-icon {
margin-top: 100px!important;
.desc {
color: #999!important;
}
}
.ant-tree.ant-tree-directory { .ant-tree.ant-tree-directory {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
......
import React, { useState, useRef, useEffect, useContext } from 'react'; import React, { useState, useRef, useEffect, useContext } from 'react';
import { Input, Select, DatePicker, Tooltip, Button, Table, Dropdown, Menu, Modal } from 'antd'; import { Input, Select, DatePicker, Tooltip, Button, Dropdown, Menu, Modal } from 'antd';
import TeacherSelect from '@/modules/common/TeacherSelect'; import TeacherSelect from '@/modules/common/TeacherSelect';
import { Route, withRouter } from 'react-router-dom'; import { Route, withRouter } from 'react-router-dom';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
...@@ -14,8 +14,6 @@ import PreviewModal from './PreviewModal'; ...@@ -14,8 +14,6 @@ import PreviewModal from './PreviewModal';
import './index.less'; import './index.less';
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
const { Search } = Input; const { Search } = Input;
const { Option } = Select;
interface sortType { interface sortType {
type: 'ascend' | 'descend' | null | undefined; type: 'ascend' | 'descend' | null | undefined;
} }
...@@ -42,9 +40,7 @@ function ExaminationManager(props: any) { ...@@ -42,9 +40,7 @@ function ExaminationManager(props: any) {
type: undefined, type: undefined,
}; };
const sortEnum = {};
const { match } = props; const { match } = props;
const sortState: any = false;
const ctx: any = useContext(XMContext); const ctx: any = useContext(XMContext);
const [query, setQuery] = useState(queryInit); const [query, setQuery] = useState(queryInit);
const [expandFilter, setExpandFilter] = useState(false); const [expandFilter, setExpandFilter] = useState(false);
...@@ -53,7 +49,6 @@ function ExaminationManager(props: any) { ...@@ -53,7 +49,6 @@ function ExaminationManager(props: any) {
const [field, setfield] = useState(''); const [field, setfield] = useState('');
const [order, setOrder] = useState(sortStatus.type); const [order, setOrder] = useState(sortStatus.type);
const [modal, setModal] = useState(null); const [modal, setModal] = useState(null);
const [questionCntSort, setQuestionCntSort] = useState(sortState);
const [openPreviewModal, setOpenPreviewModal] = useState(false); const [openPreviewModal, setOpenPreviewModal] = useState(false);
const [info, setInfo] = useState({ examDuration: 0 }); const [info, setInfo] = useState({ examDuration: 0 });
const queryRef = useRef({}); const queryRef = useRef({});
...@@ -76,7 +71,6 @@ function ExaminationManager(props: any) { ...@@ -76,7 +71,6 @@ function ExaminationManager(props: any) {
const columns = [ const columns = [
{ {
title: '考试', title: '考试',
// fixed:fixStr.left,
width: 320, width: 320,
dataIndex: 'examName', dataIndex: 'examName',
render: (text: any, record: any) => { render: (text: any, record: any) => {
...@@ -279,9 +273,6 @@ function ExaminationManager(props: any) { ...@@ -279,9 +273,6 @@ function ExaminationManager(props: any) {
function getList() { function getList() {
const _query = { ...queryRef.current }; const _query = { ...queryRef.current };
// if(_query.examCreator){
// _query.examCreator =parseInt(_query.examCreator)
// }
Service.Hades('public/hades/queryExamPageList', { Service.Hades('public/hades/queryExamPageList', {
..._query, ..._query,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment