Browse Source

Merge branch 'beta' into HK

lsc 10 months ago
parent
commit
7caf0211eb
2 changed files with 404 additions and 9 deletions
  1. 224 0
      js/Common/awsupload.js
  2. 180 9
      js/Desktop/DeskTop.js

+ 224 - 0
js/Common/awsupload.js

@@ -0,0 +1,224 @@
+let bucket; //aws上传接口
+let bucketname = "ccrb"; //桶
+const partsize = 5 * 1024 * 1024; // 5MB
+
+//--------------------------分断上传保证稳定性
+//初始化上传
+async function init() {
+    const credentials = {
+        accessKeyId: "AKIATLPEDU37QV5CHLMH",
+        secretAccessKey: "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",
+    }; //秘钥形式的登录上传
+    window.AWS.config.update(credentials);
+    window.AWS.config.region = "cn-northwest-1"; //设置区域
+    //桶的设置
+    bucket = new window.AWS.S3({
+        params: {
+            Bucket: bucketname
+        }
+    });
+    return bucket;
+}
+
+//初始化上传入口
+async function initMultipartUpload(key, file) {
+    const params = {
+        Bucket: bucketname,
+        Key: key,
+        ContentType: file.type,
+        "ACL": "public-read"
+    };
+    //创建一个续传通道
+    const data = await bucket.createMultipartUpload(params).promise();
+    return data.UploadId;
+}
+
+// 上传文件的某一部分
+async function uploadPart(file, keyname, uploadid, pn, start, end) {
+    //key可以设置为桶的相对路径,Body为文件, ACL最好要设置
+    var params = {
+        Bucket: bucketname,
+        Key: keyname,
+        PartNumber: pn,
+        UploadId: uploadid,
+        Body: file.slice(start, end)
+    };
+    const result = await bucket.uploadPart(params).promise();
+    return { ETag: result.ETag, PartNumber: pn };
+}
+
+// 完成分块上传
+async function completeMultipartUpload(parts, keyname, uploadid) {
+    const params = {
+        Bucket: bucketname,
+        Key: keyname,
+        MultipartUpload: { Parts: parts },
+        UploadId: uploadid
+    };
+    return await bucket.completeMultipartUpload(params).promise();
+}
+
+//中止分块上传
+async function abortMultipartUpload(key, uploadid) {
+    const params = {
+        Bucket: bucketname,
+        Key: key,
+        UploadId: uploadid
+    };
+    await bucket.abortMultipartUpload(params).promise();
+}
+
+// 实际的上传逻辑
+async function uploadFile(file, folderid) {
+    folderid = folderid || window.Guid.newGuid(); //分配到一个随机的id里
+    var keyname = folderid + "/" + file.name; //保存在指定的文件夹里
+    var uploadid = "";
+    try {
+        init(); // 初始化aws接口
+        // 初始化分块上传
+        uploadid = await initMultipartUpload(keyname, file);
+        // 分块上传文件
+        let parts = [];
+        let start = 0;
+        let end = 0;
+        let len = Math.ceil(file.length / partsize); //循环的长度
+        //循环上传
+        for (let i = 0; i < len; i++) {
+            start = i * partsize;
+            end = (i + 1) * partsize;
+            parts.push(await uploadPart(file, keyname, uploadid, i, start, end));
+        }
+        // 完成分块上传
+        await completeMultipartUpload(parts, keyname, uploadid);
+        return uploadid;
+    }
+    catch (error) {
+        // 如果出现错误,中止分块上传
+        console.error('An error occurred during file upload:', error);
+        await abortMultipartUpload(keyname, uploadid);
+    }
+}
+
+//--------------------------------下面支持断点续传
+
+//初始化亚马逊参数
+async function init() {
+    //秘钥形式的登录上传
+    const credentials = {
+        accessKeyId: "AKIATLPEDU37QV5CHLMH",
+        secretAccessKey: "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",
+        region: "cn-northwest-1"
+    };
+    window.AWS.config.update(credentials);
+    // window.AWS.config.region = "cn-northwest-1"; //设置区域
+    //桶的设置
+    bucket = new window.AWS.S3({
+        params: {
+            Bucket: bucketname
+        }
+    });
+    return bucket;
+}
+
+//获取当前文件是否有已上传断点信息
+async function getawscheckpoint(key) {
+    let partsinfo;
+    try {
+        const result = await bucket.listMultipartUploads({ Bucket: bucketname, Prefix: key }).promise();
+        //获取具体分片信息
+        if (result.Uploads.length) {
+            uploadid = result.Uploads[result.Uploads.length - 1].UploadId;
+            partsinfo = await bucket.listParts({ Bucket: bucketname, Key: key, UploadId: uploadid, }).promise();
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    return { uploadid, partsinfo };
+}
+
+//分段上传
+async function awsuploadpart(filestate, file, uploadid, parts, key) {
+    var partarr = [];//已完成的数组
+    //已完成的分片,转化成提交格式
+    const completeparts = parts.map((_) => {
+        partarr.push(_.PartNumber);
+        return { PartNumber: _.PartNumber, ETag: _.ETag };
+    });
+    // 分块上传文件
+    let uploadpart;
+    let start = 0;
+    let end = 0;
+    let len = Math.ceil(file.size / partsize); //循环的长度
+    if (partarr.length) {
+        filestate.status = "processing";
+        filestate.percent = parseInt((completeparts.length * 100) / len);
+    }
+    //循环上传
+    for (let i = 0; i < len; i++) {
+        start = i * partsize;
+        end = (i + 1) * partsize;
+        if (!partarr.includes(i)) {
+            uploadpart = await uploadPart(file, key, uploadid, i + 1, start, end);
+            if (uploadpart.ETag != null) {
+                completeparts.push(uploadpart);
+                filestate.percent = parseInt((completeparts.length * 100) / len);
+            }
+
+            else {
+                filestate.status = "fail";
+                return;
+            }
+        }
+    }
+    //提交上传成功信息
+    var data = await completeMultipartUpload(completeparts, key, uploadid);
+    filestate.status = "success";
+    return data;
+}
+
+//上传的接口
+async function awsupload(file, folderid, filestate) {
+    init(); //初始化桶
+    const key = (folderid || window.Guid.newGuid()) + "/" + file.name; //需要上传的文件名
+    filestate.percent = 0;
+    filestate.status = "start";
+    //上传的参数
+    var params = {
+        Bucket: bucketname,
+        Key: key
+    };
+    //设置桶上传文件
+    try {
+        //检查文件是否已上传
+        bucket.headObject(params, async (err, data) => {
+            // 没有上传成功,head方法会返回失败
+            if (err) {
+                //检查是否部分上传
+                const { uploadid, partsinfo } = await getawscheckpoint(key, bucket);
+                //如果已经部分存在,那么直接在节点续传
+                if (uploadid) {
+                    //断点续传
+                    var data = await awsuploadpart(filestate, file, uploadid, partsinfo.Parts, key);
+                    return { data, key, uploadid };
+                }
+                //不存在,上传新的
+                else {
+                    const uploadid = await initMultipartUpload(key, file); //初始化文件上传
+                    var data = await awsuploadpart(filestate, file, uploadid, [], key);
+                    return { data, key, uploadid };
+                }
+            }
+            //如果已经上传成功了,那么直接返回状态百分百
+            else if (data) {
+                //data存在,上传成功
+                filestate.percent = 100;
+                filestate.status = "success";
+                return { data, key };
+            }
+        });
+    }
+    catch (err) {
+        filestate.status = "error";
+        console.log(err);
+    }
+}

+ 180 - 9
js/Desktop/DeskTop.js

@@ -694,6 +694,11 @@ U.MD.D.I.guzmsteacherDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
     { "Name": "教學資源", "Url": "source", "style": { "cssText": "background-image:url(/img/icon/source.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "學生評價", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
+    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
 ];
 
 //中山小學學生桌面圖標的全局變量
@@ -1029,7 +1034,7 @@ U.MD.D.I.szjkyTeacherDeskIcon = [
     // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
     // { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
     { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
@@ -1056,7 +1061,7 @@ U.MD.D.I.szjkyAdminDeskIcon = [
     // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
     // { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
     { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
@@ -1353,7 +1358,7 @@ U.MD.D.I.scnuaiTeacherDeskIcon = [
     // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
     // { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
     { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
@@ -1380,7 +1385,7 @@ U.MD.D.I.scnuaiAdminDeskIcon = [
     // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
     // { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
     { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
@@ -1395,6 +1400,75 @@ U.MD.D.I.scnuaiStudentDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
 ];
 
+//cocobiz
+U.MD.D.I.cocobizteacherDeskIcon = [
+    { "Name": "課程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    { "Name": "課程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "學生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
+    { "Name": "學生評價", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    { "Name": "項目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    // { "Name": "工作管理", "Url": "studioCourse", "style": { "cssText": "background-image:url(/img/icon/studioCourse.png)" } },
+    // { "Name": "工作中心", "Url": "studioIndex", "style": { "cssText": "background-image:url(/img/icon/studioIndex.png)" } },
+    { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
+    { "Name": "年級管理", "Url": "Grade", "style": { "cssText": "background-image:url(/img/icon/Grade.png)" } },
+    { "Name": "班級管理", "Url": "class", "style": { "cssText": "background-image:url(/img/icon/class.png)" } },
+    // { "Name": "教學資源", "Url": "source", "style": { "cssText": "background-image:url(/img/icon/source.png)" } },
+    { "Name": "學習分析", "Url": "learnAna", "style": { "cssText": "background-image:url(/img/icon/learnAna.png)" } },
+    // { "Name": "AI共創", "Url": "AIChat", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    // { "Name": "AI協同", "Url": "ainew", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    // { "Name": "AI Agent", "Url": "aiagent", "style": { "cssText": "background-image:url(/img/icon/AIprogram2.png)" } },
+    { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
+    { "Name": "學生PBL", "Url": "pblCourse", "style": { "cssText": "background-image:url(/img/icon/pblCourse.png)" } },
+];
+
+//cocobiz
+U.MD.D.I.cocobizStudentDeskIcon = [
+    { "Name": "課程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "項目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "AI共創", "Url": "AIChat", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "AI協同", "Url": "ainew", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+];
+
+//xxzjky
+U.MD.D.I.xxzjkyteacherDeskIcon = [
+    { "Name": "課程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    { "Name": "課程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "學生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
+    { "Name": "學生評價", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    { "Name": "項目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    // { "Name": "工作管理", "Url": "studioCourse", "style": { "cssText": "background-image:url(/img/icon/studioCourse.png)" } },
+    // { "Name": "工作中心", "Url": "studioIndex", "style": { "cssText": "background-image:url(/img/icon/studioIndex.png)" } },
+    { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
+    { "Name": "年級管理", "Url": "Grade", "style": { "cssText": "background-image:url(/img/icon/Grade.png)" } },
+    { "Name": "班級管理", "Url": "class", "style": { "cssText": "background-image:url(/img/icon/class.png)" } },
+    // { "Name": "教學資源", "Url": "source", "style": { "cssText": "background-image:url(/img/icon/source.png)" } },
+    { "Name": "學習分析", "Url": "learnAna", "style": { "cssText": "background-image:url(/img/icon/learnAna.png)" } },
+    // { "Name": "AI共創", "Url": "AIChat", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    // { "Name": "AI協同", "Url": "ainew", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    // { "Name": "AI Agent", "Url": "aiagent", "style": { "cssText": "background-image:url(/img/icon/AIprogram2.png)" } },
+    { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
+    { "Name": "學生PBL", "Url": "pblCourse", "style": { "cssText": "background-image:url(/img/icon/pblCourse.png)" } },
+];
+
+//xxzjky
+U.MD.D.I.xxzjkyStudentDeskIcon = [
+    { "Name": "課程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "項目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "AI共創", "Url": "AIChat", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "AI協同", "Url": "ainew", "style": { "cssText": "background-image:url(/img/icon/AIChat.png)" } },
+    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+];
 
 //#region 桌面初始化a
 
@@ -1537,6 +1611,10 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
         _hkStudentDeskIconInfo = U.MD.D.I.hkStudentDeskIcon, //hk
         _hkaceTeacherDeskIconInfo = U.MD.D.I.hkaceteacherDeskIcon, //hk
         _hkaceStudentDeskIconInfo = U.MD.D.I.hkaceStudentDeskIcon, //hk
+        _cocobizTeacherDeskIconInfo = U.MD.D.I.cocobizteacherDeskIcon, //cocobiz
+        _cocobizStudentDeskIconInfo = U.MD.D.I.cocobizStudentDeskIcon, //cocobiz
+        _xxzjkyTeacherDeskIconInfo = U.MD.D.I.xxzjkyteacherDeskIcon, //xxzjky
+        _xxzjkyStudentDeskIconInfo = U.MD.D.I.xxzjkyStudentDeskIcon, //xxzjky
         _hkZJLSTeacherDeskIconInfo = U.MD.D.I.hkZJLSteacherDeskIcon, //hk
         _hkZJLSStudentDeskIconInfo = U.MD.D.I.hkZJLSStudentDeskIcon, //hk
         _yunhaiTeacherDeskIconInfo = U.MD.D.I.yunhaiTeacherDeskIcon, //雲海
@@ -1560,7 +1638,7 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
         _scnuaiStudentDeskIconInfo = U.MD.D.I.scnuaiStudentDeskIcon, //scnuai
         _szscOrganizerDeskIconInfo = U.MD.D.I.szscOrganizerDeskIcon; //scnuai
     var _oidA = ['69893dca-1d47-11ed-8c78-005056b86db5', "91305d49-01ba-11ed-8c78-005056b86db5", "d9db3320-503a-11ed-8c78-005056b86db5", "05b62310-8cda-11ed-b13d-005056b86db5", '1c3b9def-8fbe-11ed-b13d-005056b86db5', '91305d49-01ba-11ed-8c78-005056b86db4', 'ea2a8c65-f38c-11ed-91d8-005056b86db5', '4c686762-1d0a-11ed-8c78-005056b86db5', 'b1095a3c-1d06-4ac8-854f-7c0d97f4ab41', '206c38d2-0cbe-11ee-91d8-005056b86db5', '2f30fe58-a94f-11ee-b534-005056b86db5', 'eaba9110-d1eb-11ee-b534-005056b86db5','c7df0bd4-6e75-401a-a137-4e163aa62263'];
-    var _orgA = ["7ada499f-4ec7-11ed-8c78-005056b86db5", "eb2af5e9-ac3d-46b6-9fe3-3c1c364f018d", "383f207d-4ced-4eeb-a15a-7b0a2f3abe7b", "150e3120-9195-11ed-b13d-005056b86db5", "ee40e8e3-e36c-4872-8105-cf395481012s", '97c4ee8b-d010-4042-986d-e9d3c217264f', 'ec0af97a-7c10-4259-a7eb-db9cc8174cdc', '4df1b570-f6ac-48fc-8d50-d0b157dae776', 'e632b86c-f89d-11ed-91d8-005056b86db5', 'b50cf65a-001c-11ee-91d8-005056b86db5', '578de748-05d2-11ee-91d8-005056b86db5', '54f09f1e-09f0-11ee-91d8-005056b86db5', '7b016f69-0f4f-11ee-91d8-005056b86db5', '1973f6c7-1561-11ee-91d8-005056b86db5', '2fa75e51-189a-11ee-91d8-005056b86db5', 'a0fc1c55-3c2f-4ece-8cd4-ac3e2c1e9956', 'fbb00cc1-380b-4173-add4-59b3cf7682b5', '63060b4a-89dc-4f0c-bf04-a1de22d479ff', '777559d2-7239-11ee-b98c-005056b86db5', '03d24cf9-4fbc-4aeb-bb02-6f84f66e6344','884c5665-a453-46f3-b7b6-01d575290aa9'];
+    var _orgA = ["7ada499f-4ec7-11ed-8c78-005056b86db5", "eb2af5e9-ac3d-46b6-9fe3-3c1c364f018d", "383f207d-4ced-4eeb-a15a-7b0a2f3abe7b", "150e3120-9195-11ed-b13d-005056b86db5", "ee40e8e3-e36c-4872-8105-cf395481012s", '97c4ee8b-d010-4042-986d-e9d3c217264f', 'ec0af97a-7c10-4259-a7eb-db9cc8174cdc', '4df1b570-f6ac-48fc-8d50-d0b157dae776', 'e632b86c-f89d-11ed-91d8-005056b86db5', 'b50cf65a-001c-11ee-91d8-005056b86db5', '578de748-05d2-11ee-91d8-005056b86db5', '54f09f1e-09f0-11ee-91d8-005056b86db5', '7b016f69-0f4f-11ee-91d8-005056b86db5', '1973f6c7-1561-11ee-91d8-005056b86db5', '2fa75e51-189a-11ee-91d8-005056b86db5', 'a0fc1c55-3c2f-4ece-8cd4-ac3e2c1e9956', 'fbb00cc1-380b-4173-add4-59b3cf7682b5', '63060b4a-89dc-4f0c-bf04-a1de22d479ff', '777559d2-7239-11ee-b98c-005056b86db5', '03d24cf9-4fbc-4aeb-bb02-6f84f66e6344','884c5665-a453-46f3-b7b6-01d575290aa9','c9a6de59-8b4f-4be1-8565-a08081f649d3','7f280060-665e-4868-b68f-1eec9e1b4a07'];
     //清楚桌面圖標
     el.innerHTML = "";
     if (_org == 'c95e0a56-c205-11ed-8d51-005056b86db5' || _oid == "16d397f3-b192-11ed-9211-005056b86db5" || _org == "0fec3a8a-ad04-11ed-b13d-005056b86db5") {
@@ -1581,7 +1659,7 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
             { "Name": "工作中心", "Url": "studioIndex", "style": { "cssText": "background-image:url(/img/icon/studioIndex.png)" } },
             // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
             { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-            { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+            { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
             { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
             { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
             { "Name": "觀察記錄", "Url": "Record", "style": { "cssText": "background-image:url(/img/icon/Record.png)" } },
@@ -1616,7 +1694,7 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
             // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
             { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
             { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-            { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+            { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
         )
         _studentDesktopIconInfo.push(
         )
@@ -1649,7 +1727,7 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
     if (_oid == "d67940a5-510c-40ea-9c9a-2631ab03013a") {
         _teacherDesktopIconInfo.push(
             { "Name": "教師管理", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-            { "Name": "教師中心", "Url": "testStudent", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+            { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
             { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
         )
     }
@@ -1974,6 +2052,40 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _hkaceStudentDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _hkaceStudentDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if (_type == 2 && (_org == "c9a6de59-8b4f-4be1-8565-a08081f649d3")) {
+            for (i = 0; i < _cocobizStudentDeskIconInfo.length; i++) {
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_cocobizStudentDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_cocobizStudentDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _cocobizStudentDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _cocobizStudentDeskIconInfo[i].Name }, _iconcontent);
+            }
+        } else if (_type == 2 && (_org == "7f280060-665e-4868-b68f-1eec9e1b4a07")) {
+            for (i = 0; i < _xxzjkyStudentDeskIconInfo.length; i++) {
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_xxzjkyStudentDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_xxzjkyStudentDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _xxzjkyStudentDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _xxzjkyStudentDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if (_type == 2 && (_oid == "91305d49-01ba-11ed-8c78-005056b86db5")) {
             for (i = 0; i < _studentDesktopIconInfo.length; i++) {
                 _content = $$("div", {
@@ -2292,7 +2404,7 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
             }
         } else if ((_type == 1 || _type == 4) && (_oid == "4c686762-1d0a-11ed-8c78-005056b86db5")) {
             for (i = 0; i < _siesTeacherDeskIconInfo.length; i++) {
-                if(_role === 0 && _siesTeacherDeskIconInfo[i].Url == 'testTeacher'){
+                if(_role === 0 && _siesTeacherDeskIconInfo[i].Url == 'testTeacherSies'){
                     continue
                 }
                 _content = $$("div", {
@@ -2450,6 +2562,46 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _hkaceTeacherDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _hkaceTeacherDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if ((_type == 1 || _type == 4) && (_org == "c9a6de59-8b4f-4be1-8565-a08081f649d3")) {
+            for (i = 0; i < _cocobizTeacherDeskIconInfo.length; i++) {
+                if(_role === 0 && _cocobizTeacherDeskIconInfo[i].Url == 'testTeacher'){
+                    continue
+                }
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_cocobizTeacherDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_cocobizTeacherDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _cocobizTeacherDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _cocobizTeacherDeskIconInfo[i].Name }, _iconcontent);
+            }
+        } else if ((_type == 1 || _type == 4) && (_org == "7f280060-665e-4868-b68f-1eec9e1b4a07")) {
+            for (i = 0; i < _xxzjkyTeacherDeskIconInfo.length; i++) {
+                if(_role === 0 && _xxzjkyTeacherDeskIconInfo[i].Url == 'testTeacher'){
+                    continue
+                }
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_xxzjkyTeacherDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖動圖標即打開了桌面應用
+                        U.MD.D.click(this, obj);
+                    }, [_xxzjkyTeacherDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _xxzjkyTeacherDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _xxzjkyTeacherDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if ((_type == 1 || _type == 4) && (_org == "e632b86c-f89d-11ed-91d8-005056b86db5") && _role == 1) {
             for (i = 0; i < _gdjgAdminDeskIconInfo.length; i++) {
                 _content = $$("div", {
@@ -3521,6 +3673,8 @@ window.addEventListener('message', function (e) { // 監聽 message 事件
         U.MD.D.I.openInApplication("openCourseUpdate", e.data.cid)
     }else if (e.data.tools && e.data.tools == "openCourseEUpdate") {
         U.MD.D.I.openInApplication("openCourseEUpdate", e.data.cid)
+    }else if (e.data.tools && e.data.tools == "openCourseAiUpdate") {
+        U.MD.D.I.openInApplication("openCourseAiUpdate", e.data.cid)
     }else if (e.data.tools && e.data.tools == "openNewCourseUpdate") {
         U.MD.D.I.openInApplication("openNewCourseUpdate", e.data.cid)
     }else if (e.data.tools && e.data.tools == "inviteLoginSz") {
@@ -3811,6 +3965,23 @@ U.MD.D.I.openInApplication = function (str, data, screenType, tType) {
                 }, { "style": { "height": "36px" } }).form; //創建窗體
                 break;
             }
+        case "openCourseAiUpdate":
+            if (!_userinfo || Object.keys(_userinfo).length === 0) {
+                setTimeout(() => {
+                    U.MD.U.L.login();
+                }, 2000);
+            } else {
+                _formdiv = new U.UF.UI.form(
+                    "課程管理",
+                    $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": US.Config.bpbl + "/pbl-teacher-table/dist/#/aiAddCourse?cid=" + data + "&userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {
+                    "id": "openCourseUpdate",
+                    "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
+                    "onresize": function () { }
+                }, {
+                    closecallback: function () { }
+                }, { "style": { "height": "36px" } }).form; //創建窗體
+                break;
+            }
         case "openCourseNewUpdate":
                 if (!_userinfo || Object.keys(_userinfo).length === 0) {
                     setTimeout(() => {