{"version":3,"sources":["webpack:///./src/assets/images/icon-edite2.png","webpack:///./src/axios/trainingCenter/AiEditor/blocks.api.js","webpack:///./src/axios/trainingCenter/AiEditor/blocks.js","webpack:///./src/components/hardwareBlockEditor/mixinBlocklyInterpreter.js","webpack:///./node_modules/core-js/modules/es.array.reduce.js","webpack:///./src/assets/images/icon-view.png","webpack:///./src/assets/images/icon-nomessage.png","webpack:///./src/components/hardwareBlockEditor/HardwareBlockEditor.vue?91c5","webpack:///src/components/hardwareBlockEditor/HardwareBlockEditor.vue","webpack:///./src/components/hardwareBlockEditor/HardwareBlockEditor.vue?b9d1","webpack:///./src/components/hardwareBlockEditor/HardwareBlockEditor.vue","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./src/components/hardwareBlockEditor/HardwareBlockIndexB.vue?3736","webpack:///./public/images/block.png","webpack:///./src/components/hardwareBlockEditor/HardwareBlockIndexB.vue?abae","webpack:///src/components/hardwareBlockEditor/HardwareBlockIndexB.vue","webpack:///./src/components/hardwareBlockEditor/HardwareBlockIndexB.vue?88ef","webpack:///./src/components/hardwareBlockEditor/HardwareBlockIndexB.vue","webpack:///./src/components/hardwareBlockEditor/HardwareBlockEditor.vue?c2db","webpack:///./src/assets/js/mixin/mixinMediaBlocks.js"],"names":["module","exports","tag","process","new_service_basis","getEnv","service_basis","getBlockList","getModelBlockList","saveProjectCode","submitProjectCode","getProjectInfo","getTrainingByTrainingId","insertDefBlocks","getDefBlocksByUserId","deleteDefBlocks","getMediaByTrainingId","deleteMedia","updateMedia","insertMedia","data","axios","post","api","BlocklyInterpreter","outPut","highlightPause","latestCode","myInterpreter","hasMoreCode","mockCode","watch","created","mounted","_this","this","setTimeout","generateCodeAndLoadIntoInterpreter","workspace","addChangeListener","event","Blockly","Events","Ui","bus","$on","blockId","highlightBlock","beforeDestroy","$off","methods","getPythonCode","code","reg","generator","Python","checkAllGeneratorFunctionsDefined","workspaceIsVisible","workspaceToCode","pythonEditorCode","test","console","log","$store","state","blocklyHome","codeText","pythonEditorCodeFilter","arr","split","pythonCode","filter","join","stepPythonCode","i","trim","eval","length","stepRunHandle","initApi","interpreter","scope","setProperty","createNativeFunction","text","toString","wrapper","id","createPrimitive","resetStepUi","clearOutput","STATEMENT_PREFIX","addReservedWords","replace","$","$reduce","left","sloppyArrayMethod","target","proto","forced","reduce","callbackfn","arguments","undefined","render","_vm","_h","$createElement","_c","_self","staticClass","attrs","on","undoHandle","_v","redoHandle","_e","class","modeToCode","directives","name","rawName","value","expression","model","callback","$$v","staticStyle","_t","staticRenderFns","components","PythonEditor","prop","mixins","props","blockXmlText","type","String","default","Media","Array","projectId","trainingId","xmlData","Object","str","path","saveFlag","Number","langMsg","theme","renderer","blocks","Boolean","stepOperate","iconEdite2","iconView","iconNoMessage","netCamera","url","window","gtaAiConfig","netCameraObj","host1","host","isPreview","localCamera","renameVal","blockType","popupActive","MSG","rendererName","oldWorkspaceXmlTxt","prevSaveWorkSpaceXmlTxt","mediaGotten","Placeholder","ProjectId","elMedia","blockIcon","newBLockInfo","blockName","paramsList","createBlockMenu","createBlockParam","newBlockScript","paramValText","inject","reload","blockSData","blocksList","handler","addBlockCollectionToToolbox","deep","xmlText","createBlocksByWorkspaceXML","textToWorkspace","setVisible","val","workspaceToDom","outerHTML","computed","Items","myScore","getScore","self","getMedia","blocklyInit","addEventListener","onresize","registerToolboxCategoryCallback","registerButtonCallback","toolboxXml","setToolboxText","oldWorkspaceXml","toolbox","grid","spacing","colour","snap","media","zoom","move","comments","oldWorkspaceXmlTmp","BindResetSvg","resetSvgDom","blockChangeListene","trashcan","svgLid_","style","pointerEvents","getMetrics","changeblock","blockMoveHandler","_ws","toolboxDimensions","flyoutDimensions","svgSize","viewSize","toolbox_","height","width","contentDimensions","absoluteLeft","toolboxPosition","isOpen","absoluteTop","metrics","contentHeight","contentWidth","contentTop","top","contentLeft","viewHeight","viewWidth","viewTop","scrollY","viewLeft","scrollX","svgHeight","svgWidth","toolboxWidth","toolboxHeight","flyoutWidth","flyoutHeight","messageKey","indexOf","toolboxText","document","getElementById","p1","p2","addCustomBlockCategory","xmlDom","createElement","setAttribute","addCustomBlockByJS","typename","blockCodeTxt","reg_label","blockXmlDom","Xml","textToDom","blockCreateXMl","firstChild","blockJsIndex","blockCreateTxt","blockCreateJSText","slice","blockStyle","getBlockStyleByText","blockCreatePythonText","blockCreateJS","Function","call","O","blockCreatePython","error","Blocks","blockXml","newBlock","blockToDom","shadowXml","createDocumentFragment","parser","DOMParser","xmldom_2","parseFromString","num","getChartNum","index","substr","index_2","index_3","index_4","valueXml","innerHTML","appendChild","blockTxt","blockStyleArr","match","reg_style","quotation_reg","toolboxLabelStyle","blocklyTreeRowList","forEach","blocklyTreeIcon","nextChildNodes","floatWise","blocklyTreeRow","classList","add","getArrtributeStyle","oElement","currentStyle","attemptCodeGeneration","getAllBlocks","missingBlockGenerators","push","valid","msg","ws","markFocused","setScale","options","zoomOptions","startScale","beginCanvasTransition","cleanUp","scrollCenter","endCanvasTransition","bind","e","stopPropagation","preventDefault","clearWorkspace","clear","click","coloursFlyoutCallback","createBlocksByList","createMediaBlocksByWorkspaceXML","xmlDataUpdate","token","fileData","xml","getAttribute","prefix","urlstr","substring","nameIndex","mediaFileName","$util","urlToStr","decrypt","decodeURIComponent","picTempList","picTem","mediaFileUrl","hasPicTemp","prefix2","nameIndex2","MediaFileName2","camTempList","RegExp","camTem","prefix3","nameIndex3","MediaFileName3","audioTempList","audioTemp","hasTemp","blocksGradient","defaultBlockStyles","blocklySvg","getElementsByClassName","styleName","colourPrimary","defs","createElementNS","linearGradient","stop_1","stop_2","chart","cancelPopup","cancelLocalCamera","cancelNetCamera","addBlockTextToTool","newBlocksType","blocksId","parentXmlDom","querySelector","dispose","component","aFunction","toObject","fails","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","SLOPPY_METHOD","FORCED","comparefn","_g","_b","ref","sidebarSwitch","Project","ProjectName","BlocksFileUrl","$event","$attrs","$listeners","homeWorkStatus","beMark","hasAttr","scoreTitle","trainingDetails","reportInfo","guideBookSwitch","codeRunSwitch","buildingBlocksType","projectTask","trainingName","points","presetGoal","selfRatedScore","score","appraise","NewProject","MyProjectList","PageSize","Cases","taskInfo","submitObj","ProjectContent","buildingBlocksTypeObj","answer","question","save","homework","searchKey","isComplete","isPublic","TrainId","CourseHourId","CourseName","leaveType","Status","scored","rightSideVal","iconSubmitCode","iconExercise","switchIcon","status","Train","changeMode","sidebarSwitchHandle","switchObj","btnToCode","userId","accountInfo","result","isSuccess","$nextTick","resizeEvent","createEvent","initUIEvent","dispatchEvent","updated","destroyed","activated","MediaBlocks","textTempList","renamePicObj","renameCamObj","renameAudioObj","renameTextObj","photoBaseUrl","photoDomain","reg_base_url","mediaFiles","map","item","JSON","parse","stringify","file","pic_match","audio_match","text_match","hasItem","hasAudioItem","hasTextItem","find","reduceMediaArr","list","picAddedList","picTemp","findMedia","reduceArr","textAddedList","textTemp","camAddedList","List","obj","newList","prev","cur","vList","xmlList","audioXmlList","picXmlList","camXmlList","textXmlList","buttonblock_1","audioBlock","buttonblock_2","buttonblock_3","buttonblock_4","setFlyoutLabelPosition","imageName","index_1","enstr","encrypt","typestrurl","Msg","blockCreate","renamePic","blockText","block","encryptCamera","blockCreateTxt2","blockCreate2","deleteCameraMedia","renameCam","blockText2","block2","deleteAudioMedia","renameAudio","textName","deleteTextMedia","renameText","childNodes","picarr","ImgIndex","nameStr","subEnstr","reg_newName","urlstr_2","mediaItem","mediaUpload","camArr","enstr2","camIndex","nameStr2","enstr3","mediaFileUrl_2","search","textArr","textIndex","sessionStorage","trans_match","scrollWidth","myLabelStyle1","myLabelStyle2","myLabelStyle3","myLabelStyle4","myBtnStyle1","myBtnStyle2","myBtnStyle3","myBtnStyle4","transform_1","y_1","transform_2","y_2","transform_3","y_3","transform_4","y_4","y_1_1","y_2_1","y_3_1","y_4_1","btnCreatePictureBlock","inputNode","clickTarget","nodeList","querySelectorAll","len","node","textContent","parentNode","inputUploadFile","btnCreateAudioBlock","btnCreateCameraBlock","btnCreateTextBlock","tempList","fileName","reg_name","onchange","evt","formatPass","fileList","files","from","formdata","FormData","append","$message","message","duration","filesFormatEveryCheck","loading","$loading","lock","spinner","background","close","COMMON","UploadMultipleFile","then","returnCode","catch","err","mediaList","BLOCK","AI_EDITOR","pageIndex","$parent","fileUrl","typeBlocks","getBlocksByType","typeBlocksLen","msgConfirm","$confirm","action","mediaDeleteByKey","fileUrl_2","Promise","resolve","reject","total","$forceUpdate","$set","splice","mediaId","confirmReanme","runType","renameObj","renameLabel","newTypestrurl","updateMediaBlock","res","audioTem","textTem","addTypedBlock","workspaceXml","allBlocks","domToWorkspace","rename","confirmNetCamera","camItem"],"mappings":"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","file":"js/chunk-8c0995aa.716ed4cc.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAx0lEQVQokZ2TsQ3CMBBFn5GVNgyQFbJESkSVlo4JEAsADaJiBDpaSsoswQpZIB3QhMIndFjGNvzm/G0/63xnm/lhJEMroAR2etJmgAvgCBjx7wMmCbABTgqc6sUYXAMXoBB/BtY5cAVccfcE6IAl8FGgEFwKWIm/AS3w9Df6cCGp1uJ7YAYMofQ0bHDFacQPAvYh0If3uLYgKbaS8ldp+CFxxBWni4HgHslGxluJd1xbkrIKwhsn5RfsJ9l/IA1nfauQUh8jqheH2R4Gv7ACIgAAAABJRU5ErkJggg==\""," /* eslint-disable */ \n let tag= process.env.VUE_APP_TAG\n let new_service_basis=getEnv(tag).service_basis\n\nexport default {\n // 标注项目接口\n /**\n * 获取积木列表\n */\n getBlockList: `${new_service_basis}/ai/training/project/getBlockList`,\n /**\n * 获取积木列表 --我的模型和公共模型部分\n */\n getModelBlockList: `${new_service_basis}/ai/training/project/getModelBlockList`,\n /**\n * 保存项目代码\n */\n saveProjectCode: `${new_service_basis}/ai/training/project/saveProjectCode`,\n /**\n * 提交项目代码\n */\n submitProjectCode: `${new_service_basis}/ai/training/project/submitProjectCode`,\n /**\n * 获取项目信息\n */\n getProjectInfo: `${new_service_basis}/ai/training/project/getProjectInfo`,\n /**\n * 根据实训id查询实训信息\n */\n getTrainingByTrainingId: `${new_service_basis}/ai/training/training/getTrainingByTrainingId`,\n /**\n * 新增自定义积木\n */\n insertDefBlocks: `${new_service_basis}/ai/training/project/insertDefBlocks`,\n /**\n * 获取自定义积木\n */\n getDefBlocksByUserId: `${new_service_basis}/ai/training/project/getDefBlocksByUserId`,\n /**\n * 删除自定义积木\n */\n deleteDefBlocks: `${new_service_basis}/ai/training/project/deleteDefBlocks`,\n /**\n * 查询媒体积木\n */\n getMediaByTrainingId: `${new_service_basis}/ai/training/project/getMediaByTrainingId`,\n /**\n * 删除媒体积木\n */\n deleteMedia: `${new_service_basis}/ai/training/project/deleteMedia`,\n /**\n * 修改媒体积木\n */\n updateMedia: `${new_service_basis}/ai/training/project/updateMedia`,\n /**\n * 新增媒体积木\n */\n insertMedia: `${new_service_basis}/ai/training/project/insertMedia`,\n\n};\n","import axios from \"../../index\";\nimport api from \"./blocks.api\";\n\nexport default {\n /**\n * 获取积木列表\n */\n getBlockList(data = {}) {\n return axios.post(api.getBlockList, data);\n },\n /**\n * 获取积木列表 --我的模型和公共模型部分\n */\n getModelBlockList(data = {}) {\n return axios.post(api.getModelBlockList, data);\n },\n /**\n * 保存项目代码 @data buildingBlocks 项目积木;buildingBlocksType积木类型 isComplete是否完成 isPublic是否公开 pid trainingId实训id userRole用户角色\n */\n saveProjectCode(data = {}) {\n return axios.post(api.saveProjectCode, data);\n },\n /**\n * 提交题解 @data buildingBlocks 项目积木;buildingBlocksType积木类型 isComplete是否完成 isPublic是否公开 pid trainingId实训id userRole用户角色\n */\n submitProjectCode(data = {}) {\n return axios.post(api.submitProjectCode, data);\n },\n /**\n 获取项目信息 @data createBy创建人id trainingId实训id\n */\n getProjectInfo(data = {}) {\n return axios.post(api.getProjectInfo, data);\n },\n /**\n 根据实训id查询实训信息 @data trainingId实训id\n */\n getTrainingByTrainingId(data = {}) {\n return axios.post(api.getTrainingByTrainingId, data);\n },\n /**\n 新增自定义积木 @data blocksLevel defBlocksContent defBlocksName parentId\n */\n insertDefBlocks(data = {}) {\n return axios.post(api.insertDefBlocks, data);\n },\n /**\n 获取新增自定义积木 @data \n */\n getDefBlocksByUserId(data = {}) {\n return axios.post(api.getDefBlocksByUserId, data);\n },\n /**\n 删除自定义积木 @data defBlocksId 自定义积木块id \n */\n deleteDefBlocks(data = {}) {\n return axios.post(api.deleteDefBlocks, data);\n },\n /**\n 查询媒体积木 @data trainingId 实训id userId 媒体积木的创建人id\n */\n getMediaByTrainingId(data = {}) {\n return axios.post(api.getMediaByTrainingId, data);\n },\n /**\n 删除媒体积木 @data mediaFileName 媒体名称 mediaId 媒体id\n */\n deleteMedia(data = {}) {\n return axios.post(api.deleteMedia, data);\n },\n /**\n 修改媒体积木 @data mediaFileName 媒体名称 mediaId 媒体id\n */\n updateMedia(data = {}) {\n return axios.post(api.updateMedia, data);\n },\n /**\n 新增媒体积木 @data mediaFileName 媒体名称 mediaFileUrl 媒体文件url trainingId 实训id userId 项目创建人id\n */\n insertMedia(data = {}) {\n return axios.post(api.insertMedia, data);\n },\n\n};\n","'use strict'\n/**\n * 硬件编辑器代逐行运行的业务逻辑\n *\n *window.Interpreter 在public/index 通过 引入\n *\n * @author linhui.zhang\n */\n\nimport Blockly from '@/assets/blockly/renderers/index.js'\nimport bus from '@/utils/bus'\n// import {debounce} from 'lodash'\n//实训接口\n// import BLOCK from '@/axios/trainingCenter/AiEditor/blocks.js'\n// import Interpreter from '../../../public/blockly/code/acorn_interpreter.js'\nexport const BlocklyInterpreter = {\n data() {\n return {\n // newBlocksType: null, //自建积木类型\n // newBlocks: null, //自建积木类工具箱的积木;\n // renameDefBlockObj: {}, //缓存重命名的自定义积木l\n outPut: '',\n highlightPause: false,\n latestCode: '',\n myInterpreter: null, //编译对象\n hasMoreCode: true,\n mockCode: `\n n = 1\n for count in range(2):\n n = n+1\n print(n)\n `,\n }\n },\n watch: {},\n created() {\n //控制积木分布执行\n },\n mounted() {\n let _this = this\n setTimeout(() => {\n // Load the interpreter now, and upon future changes.\n this.generateCodeAndLoadIntoInterpreter()\n this.workspace.addChangeListener(function(event) {\n if (!(event instanceof Blockly.Events.Ui)) {\n // Something changed. Parser needs to be reloaded.\n _this.generateCodeAndLoadIntoInterpreter()\n }\n })\n }, 500)\n\n bus.$on('stepHighlightBlock', (blockId) => {\n _this.highlightBlock(blockId)\n })\n },\n beforeDestroy() {\n bus.$off('stepHighlightBlock')\n },\n methods: {\n getPythonCode() {\n let code,\n reg = /[\\n\\r]$/,\n generator = Blockly.Python\n if (\n this.checkAllGeneratorFunctionsDefined(generator) &&\n this.workspaceIsVisible\n ) {\n code = generator.workspaceToCode(this.workspace)\n } else if (!this.workspaceIsVisible) {\n code = this.pythonEditorCode\n if (!reg.test(code)) {\n code = code + '\\n'\n }\n }\n console.log('code', code)\n this.$store.state.blocklyHome.codeText = code\n\n //过滤python脚本\n this.pythonEditorCode= this.pythonEditorCodeFilter(code)\n\n // this.pythonEditorCode = code //获取python脚本;\n\n return code\n },\n pythonEditorCodeFilter(code) {\n let arr = code.split('\\n')\n let pythonCode = ''\n\n arr= arr.filter((code) => {\n return !/highlightBlock\\(/.test(code)\n })\n pythonCode = arr.join('\\n')\n console.log('pythonCode--------\\n', pythonCode)\n return pythonCode\n\n },\n stepPythonCode() {\n let arr = this.latestCode.split('\\n')\n\n for (let i = 0; i < arr.length - 1; i++) {\n let code = arr[i]\n if (/highlightBlock\\(/.test(code)) {\n setTimeout(() => {\n code = code.trim()\n code = `\"this.${code}\"`\n // console.log(code)\n eval(code)\n return\n }, 1000)\n }\n }\n },\n stepRunHandle() {\n let _this = this\n // let func = eval(`this.highlightBlock('%QwZ9rDNnFs!xC7vnCU{');`)\n // func(this);\n // new Function(`this.highlightBlock('72yVfgywiX}+^Fjz+CAV')`)\n // this.highlightBlock('72yVfgywiX}+^Fjz+CAV')\n let myCode = this.getPythonCode()\n this.stepPythonCode()\n\n return\n if (!this.myInterpreter) {\n let myCode = this.getPythonCode()\n // First statement of this code.\n // Clear the program output.\n this.resetStepUi(true)\n // js 解析器插件\n this.myInterpreter = new window.Interpreter(\n // this.mockCode,\n this.latestCode,\n this.initApi\n )\n setTimeout(function() {\n _this.highlightPause = true\n _this.stepRunHandle()\n }, 1)\n return\n }\n this.highlightPause = false\n do {\n try {\n this.hasMoreCode = this.myInterpreter.step()\n console.log('this.hasMoreCode ', this.hasMoreCode)\n } finally {\n if (!this.hasMoreCode) {\n this.outPut += '\\n\\n<< Program complete >>'\n this.myInterpreter = null\n this.resetStepUi(false)\n }\n }\n } while (this.hasMoreCode && !this.highlightPause)\n },\n\n initApi(interpreter, scope) {\n let _this = this\n // Add an API function for the alert() block, generated for \"text_print\" blocks.\n interpreter.setProperty(\n scope,\n 'alert',\n interpreter.createNativeFunction(function(text) {\n text = text ? text.toString() : ''\n this.outPut += '\\n' + text\n console.log('text', text)\n })\n )\n\n // Add an API function for highlighting blocks.\n var wrapper = function(id) {\n id = id ? id.toString() : ''\n console.log('id--------\\n', id)\n return interpreter.createPrimitive(_this.highlightBlock(id))\n }\n interpreter.setProperty(\n scope,\n 'highlightBlock',\n interpreter.createNativeFunction(wrapper)\n )\n }, // initApi end\n highlightBlock(id) {\n this.workspace.highlightBlock(id)\n this.highlightPause = true\n // this.highlightPause = true\n if (this.hasMoreCode) {\n setTimeout(() => {\n // this.stepRunHandle()\n }, 300)\n }\n },\n resetStepUi(clearOutput) {\n this.workspace.highlightBlock(null)\n this.highlightPause = false\n },\n //盛鼎代码生成器的方法\n generateCodeAndLoadIntoInterpreter() {\n Blockly.Python.STATEMENT_PREFIX = 'highlightBlock(%1);\\n'\n Blockly.Python.addReservedWords('highlightBlock')\n this.latestCode = Blockly.Python.workspaceToCode(this.workspace)\n // this.latestCode = Blockly.Python.workspaceToCode(this.workspace)\n this.latestCode = this.latestCode.replace(/^\\s+/, '')\n\n this.resetStepUi(true)\n },\n },\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar sloppyArrayMethod = require('../internals/sloppy-array-method');\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: sloppyArrayMethod('reduce') }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAApklEQVQokaXPPQ4BARDF8VmRSESnU+tonMA5dGrH0DiB2g10apE4gsIF9BqFRPw0PjZrs3bXS6aYN/nPvEkg6ilp1AQjIqKZ3lSSeSf963IRvI6IXnGGjyJTcMYMjZz5T/ilPQZ14CkuuGKOVhU4MMTh2R8xrgIH2lg9vTsWVeAxtrhhiW4Z+AXBDqO8n9PK+idMkKQP/IKvWKCTkyy+jFRt0C+YxwO2CASdPvyh3gAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAhCAYAAADK6cvnAAABm0lEQVRIie3WPWsUQRgA4GfX1KKEC5peFNJ4XSzVCDbpLIy1f8HaSxMO8heSNiCIxRVCPtRSwSI2Qv5BICFwGOtbi53NLZe9ubjuhSB5Ydlhdmee3Xlfhkm6vQzuoYsl3FQ/OliNvTCD+/iGW/8AlUExNMVawD5iHknNq4y+jYFLof0ah3/zO5EYi6aGOWsKK5azEk1rTnoj8qwTQ2NgG3uYHemfw3cs10Fj4DqeYreEtvA5fMzqhPGV6ExkwMuAtcP9Fd5jAT/xHIPI+AISsA4k3V6Whc6kYsCsfFkfhsnTgD3B0ci7mQvEpKI5wUoJG+BFBQb9JsCWfBkLLMWW84UEt11gY4iBLXwxzNkCfhjmtAqdGOPAFNsl7DEO5LvSfkDfNQkO5JW1H7Dj0H+CZ/iEN3XASVVa5K6JyIoJY9EUdhZ199L/A+zL173ONXYTuPQ/jG3eTZxxzsWVyuGlg9dFUyuuVA6nBv4K7btTdO6E++9UfkiCjdKDprHN0N5Jur3sAb6aUpGUoo9HqfzosIgPOJ0CdBrmXsTBH0vac3Bm7oFGAAAAAElFTkSuQmCC\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"blockly-wrap\"},[_c('div',{staticClass:\"blockly-tool\"},[_c('el-button',{staticClass:\"btn-undo\",attrs:{\"id\":\"btnUndo\"},on:{\"click\":_vm.undoHandle}},[_vm._v(\"撤销 \")]),_c('el-button',{staticClass:\"btn-redo\",attrs:{\"id\":\"btnRedo\"},on:{\"click\":_vm.redoHandle}},[_vm._v(\"重做 \")]),_c('el-button',{staticClass:\"btn-reset-svg\",attrs:{\"id\":\"btnResetSvg\"}},[_vm._v(\"整理\")]),_c('el-button',{staticClass:\"btn-run\",attrs:{\"id\":\"btnRun\"},on:{\"click\":_vm.stepRunHandle}},[_vm._v(\"运行\")])],1),(_vm.dragBlockStatu)?_c('div',{staticClass:\"recycle-wrap\"},[_c('i',{staticClass:\"recycle-bin\"})]):_vm._e(),_c('div',{class:['code-editer', { 'space-hide': _vm.workspaceIsVisible }],attrs:{\"contenteditable\":\"false\"}},[_c('el-button',{staticClass:\"btn-mode-code\",attrs:{\"id\":\"btnCodeEditer\"},on:{\"click\":_vm.modeToCode}},[_vm._v(\"代码模式\")]),_c('python-editor',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.pythonEditorCode),expression:\"pythonEditorCode\"}],attrs:{\"readOnly\":true,\"hint\":false},model:{value:(_vm.pythonEditorCode),callback:function ($$v) {_vm.pythonEditorCode=$$v},expression:\"pythonEditorCode\"}})],1),_c('div',{class:['blockly-box', { 'space-hide': !_vm.workspaceIsVisible }],attrs:{\"id\":\"blocklyBox\"}}),_c('xml',{staticStyle:{\"display\":\"none\"},attrs:{\"id\":\"toolBox\"}},[_vm._t(\"default\")],2),_c('xml',{staticStyle:{\"display\":\"none\"},attrs:{\"id\":\"toolBox2\"}},[_vm._t(\"default\")],2),_c('div',{staticClass:\"popup-list list-2\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HardwareBlockEditor.vue?vue&type=template&id=37aff850&scoped=true&\"\nimport script from \"./HardwareBlockEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./HardwareBlockEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HardwareBlockEditor.vue?vue&type=style&index=0&id=37aff850&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37aff850\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar sloppyArrayMethod = require('../internals/sloppy-array-method');\n\nvar nativeSort = [].sort;\nvar test = [1, 2, 3];\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar SLOPPY_METHOD = sloppyArrayMethod('sort');\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD;\n\n// `Array.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockIndexB.vue?vue&type=style&index=0&id=94bf427c&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockIndexB.vue?vue&type=style&index=0&id=94bf427c&lang=scss&scoped=true&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAyCAMAAAAAykVBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDMUZDMkQ5MkRFMTAxMUVBOTgyMEM4MERDRDM0QUM4OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDMUZDMkQ5M0RFMTAxMUVBOTgyMEM4MERDRDM0QUM4OSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkMxRTc0OTE2REUxMDExRUE5ODIwQzgwRENEMzRBQzg5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMxRTc0OTE3REUxMDExRUE5ODIwQzgwRENEMzRBQzg5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+pSrE3AAAArtQTFRFTIX2Tof3TYb2S4X2TYf2T4f3UIn1VIv4UIj3XZP/T4j3UYn4U4r4Uor4U4v4XpP/UYj4UIj4rsn/YJX/X5T/XpT/Ypb/YZb/c6T9b6H8YZX/aJr/1uP/a579aZz9bJ3/Y5f/a5z/ZJj/bqH8Zpn/cqT9aZv/aJv9dKX8b6L8q8f/Z5v+dKT8apv/caP8Z5n/daX8pcP/pML/bJ/81eP/caL8bp7/a5/9ZJj+ZZn+ZZj/YJT/l7r/osH/eKX/Zpj/Zpn+bqD8cKL8ZZr+b5//ap79Zpr+qsb/bJ78ap39bZ/8mbv/daP/eqb/cqP8qcX/jbP/gav/ZJf/j7T/gqz/dqT/lrn/baD8aZ39ZJn+hK3/X5X/kLX/fqv3m73/n7//irH/f6r/W5H7ocD/i7L/qcb/nr//eab/o8L/VpDxqcb6Z5v90OD/oMD/SoX1mLr/YpX/fan/k7f/ZZn/1uT/Z5r/psT/p8T/p8X/iLD/W5L6krb/h6//fKj/Tob2dKL/cKD/c6T8qMX/WZPwe6f/m7z/c6H/S4X1lLj/caH/apz/0+L/VYz4ha7/WZD7dKX9nb7/fav3nb3/XJL7mLv47vX+WJLxVI7xUIr0WZH7Uon3Uoz1TYf0hK/9oL//SYb0f6n/VY/xgK78g6/4ocH5baH8cqH/g6z/g6/8gq77faj/eKn7W5L7VY/ylLf/VIz4ga74fqz7Uov1rMj/gKr/TYX2jrT/0eD/i7H/f6z3TIX1+Pv+VIz0fKr3Toj2aJv/VYz0hrD4psT6fqn/iK//hLD8nL3/ibH/Uon4X5P/mbz5k7n4UYr0krf/dqf6e6r7hq//caD/nr7/VY/0a578hq7/WpTxfKr7ibD/kbb/S4f0rcj7d6T/nb75mrz/bZ7/TYf3Ypf+0uH/WJLwlbj/c6L/WpH7jLL/////DlpO8QAAAOl0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBqIGXNAAACuklEQVR42uza11MTQRzA8YOIIYIemAvRJJogdkUsWIK0AAkQeieh9w4C0nsvSrX33nvvvffee78/w90Lk9E3w/iQ29nP3N3O7OzL93XvR9gwZDJZaGjoOMjJyc3NbTzg4CBmTATs7e1tGVKp9BjNFoSNUCjkGuLQst3oxnGX7r/BlrhFIpGIa2Bd5R4WxY0wELdyKzviRHw+39JQ3J9HWBM33GCWya/YEmdhOMvkRyyI48fExFhZW1tZ6z66FSwMK4jZZrYGjjAn1nbvO2f0cQspijIfjNtrHq5ANs7covvLAkCj0cjlcnd3d7mnp6dKpZoG5eRMYozViY6O9vX1VSqVY3TmA899fHzUavUcICoqSqFQ2NnZ7QDvaMYUCKweHh5zgRlQYGDgBGAUePR6ehoapkOToZnAhty/44YxzAbef3dxqBF6duWUPo4SCAQmg2RmjD5f3pb7P+KM1PnDX9GNMzl6Zoku7g5JkkNQsy6OqSNIHo9nipra+32OyMaZ1q6OkwzEEeg5sb5PgmwcQby9sBjdOGLTSITjCByH43AcjsNxOA7H4Tgch+NwHI7DcTjO2HAQjuOsQjeOc+AeshdEnC3Lkb3a42TdRfZS9mzWBwmNaFzbyu0SGtG4/G9XJTSicflN2RIa0bi2l+8c6T/iOChpynbU//AnSVIgEFAUxYeEkG64VAbnSouL4VBpSYlYfAlOlHZ2wmlS6ad5gJeXV339k46Ona2tP+rq/P39IyIi3ru6umZkBAQENDfX1OwtLLy2OSnpeEhISHh4+C6tVtvV9eJxdfX1iorXtxITT6em/goODj4ZFhYWGxv7pqrqQVHRwfb275GRkc7OzgUFfn5+H1ta4uNv9vf39j5NT09I2JiXl5Li4uKSmTkbmAWUlpaVlZc3NgYFBaWleXt7T4X0bfRvAQYAJr8EA22xBzQAAAAASUVORK5CYII=\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"training-area-wrap\"},[_c('hardware-block-editor',_vm._g(_vm._b({ref:\"blockly\",class:['blockly-editer', { 'blockly-editer-open': !_vm.sidebarSwitch }],attrs:{\"workspaceIsVisible\":_vm.workspaceIsVisible,\"project-id\":_vm.projectId,\"trainingId\":_vm.trainingId,\"xml-data\":{\n name: _vm.Project.ProjectName,\n type: 1,\n path: _vm.Project.BlocksFileUrl,\n },\"save-flag\":_vm.saveFlag,\"Media\":_vm.Media},on:{\"getMedia\":_vm.getMedia,\"update:Media\":function($event){_vm.Media=$event},\"update:media\":function($event){_vm.Media=$event}},model:{value:(_vm.Blocks),callback:function ($$v) {_vm.Blocks=$$v},expression:\"Blocks\"}},'hardware-block-editor',_vm.$attrs,false),_vm.$listeners),[_c('category',{attrs:{\"name\":\"%{BKY_CATEVENT}\",\"colour\":\"50\"}},[_c('block',{attrs:{\"type\":\"gta_ai_event_print\"}},[_c('value',{attrs:{\"name\":\"NAME\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_event_item\"}})])],1),_c('block',{attrs:{\"type\":\"gta_ai_event_4\"}}),_c('block',{attrs:{\"type\":\"gta_ai_event_5\"}}),_c('block',{attrs:{\"type\":\"gta_define_robot_B\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_close\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_get_battery\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_get_version\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_ai_event_6\"}},[_c('value',{attrs:{\"name\":\"NAME\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_event_item\"}})])],1),_c('block',{attrs:{\"type\":\"gta_ai_event_8\"}})],1),_c('category',{attrs:{\"name\":\"%{BKY_CATLOOPS}\",\"colour\":\"%{BKY_LOOPS_HUE}\"}},[_c('block',{attrs:{\"type\":\"controls_repeat_ext\"}},[_c('value',{attrs:{\"name\":\"TIMES\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"20\")])],1)])],1),_c('block',{attrs:{\"type\":\"gta_controls_whileUntil\"}},[_c('value',{attrs:{\"name\":\"NAME1\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}})])],1),_c('block',{attrs:{\"type\":\"controls_for\"}},[_c('value',{attrs:{\"name\":\"FROM\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)]),_c('value',{attrs:{\"name\":\"TO\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"10\")])],1)]),_c('value',{attrs:{\"name\":\"BY\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)])],1),_c('block',{attrs:{\"type\":\"controls_forEach\"}},[_c('value',{attrs:{\"name\":\"LIST\"}},[_c('block',{attrs:{\"type\":\"variables_get\"}},[_c('field',{attrs:{\"name\":\"VAR\"}},[_vm._v(\"{listVariable}\")])],1)],1)],1),_c('block',{attrs:{\"type\":\"break_continue\"}}),_c('block',{attrs:{\"type\":\"controls_if\"}},[_c('value',{attrs:{\"name\":\"IF0\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}})])],1),_c('block',{attrs:{\"type\":\"logic_negate\"}},[_c('value',{attrs:{\"name\":\"BOOL\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}},[_c('field')],1)])],1),_c('block',{attrs:{\"type\":\"logic_ternary\"}},[_c('value',{attrs:{\"name\":\"IF\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}})]),_c('value',{attrs:{\"name\":\"THEN\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_controls_item\"}})]),_c('value',{attrs:{\"name\":\"ELSE\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_controls_item\"}})])],1),_c('block',{attrs:{\"type\":\"waiting_time\"}})],1),_c('category',{attrs:{\"name\":\"%{BKY_CATMATH}\",\"colour\":\"%{BKY_MATH_HUE}\"}},[_c('block',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"123\")])],1),_c('block',{attrs:{\"type\":\"math_arithmetic_add\"}},[_c('value',{attrs:{\"name\":\"A\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)]),_c('value',{attrs:{\"name\":\"B\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)])],1),_c('block',{attrs:{\"type\":\"logic_compare_1\"}},[_c('value',{attrs:{\"name\":\"A\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}})],1)]),_c('value',{attrs:{\"name\":\"B\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}})],1)])],1),_c('block',{attrs:{\"type\":\"logic_operation\"}},[_c('value',{attrs:{\"name\":\"A\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}},[_c('field')],1)]),_c('value',{attrs:{\"name\":\"B\"}},[_c('shadow',{attrs:{\"type\":\"logic_null\"}},[_c('field')],1)])],1),_c('block',{attrs:{\"type\":\"logic_boolean\"}}),_c('block',{attrs:{\"type\":\"math_random_int\"}},[_c('value',{attrs:{\"name\":\"FROM\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)]),_c('value',{attrs:{\"name\":\"TO\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"100\")])],1)])],1),_c('block',{attrs:{\"type\":\"math_modulo\"}},[_c('value',{attrs:{\"name\":\"DIVIDEND\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}})],1)]),_c('value',{attrs:{\"name\":\"DIVISOR\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}})],1)])],1),_c('block',{attrs:{\"type\":\"math_single\"}},[_c('value',{attrs:{\"name\":\"NUM\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}})],1)])],1),_c('block',{attrs:{\"type\":\"math_trig\"}},[_c('value',{attrs:{\"name\":\"NUM\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"45\")])],1)])],1),_c('block',{attrs:{\"type\":\"math_constant\"}}),_c('block',{attrs:{\"type\":\"math_number_property\"}},[_c('value',{attrs:{\"name\":\"NUMBER_TO_CHECK\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"0\")])],1)])],1),_c('block',{attrs:{\"type\":\"math_round\"}},[_c('value',{attrs:{\"name\":\"NUM\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"3.1\")])],1)])],1),_c('block',{attrs:{\"type\":\"math_random_float\"}}),_c('block',{attrs:{\"type\":\"math_on_list\"}},[_c('value',{attrs:{\"name\":\"LIST\"}},[_c('block',{attrs:{\"type\":\"variables_get\"}},[_c('field',{attrs:{\"name\":\"VAR\"}},[_vm._v(\"{listVariable}\")])],1)],1)],1),_c('block',{attrs:{\"type\":\"math_constrain\"}},[_c('value',{attrs:{\"name\":\"VALUE\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"50\")])],1)]),_c('value',{attrs:{\"name\":\"LOW\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)]),_c('value',{attrs:{\"name\":\"HIGH\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"100\")])],1)])],1),_c('block',{attrs:{\"type\":\"math_atan2\"}},[_c('value',{attrs:{\"name\":\"X\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)]),_c('value',{attrs:{\"name\":\"Y\"}},[_c('shadow',{attrs:{\"type\":\"math_number\"}},[_c('field',{attrs:{\"name\":\"NUM\"}},[_vm._v(\"1\")])],1)])],1)],1),_c('category',{attrs:{\"name\":\"%{BKY_CATVARIABLES}\",\"colour\":\"%{BKY_VARIABLES_HUE}\",\"custom\":\"VARIABLE\"}}),_c('category',{staticClass:\"PROCEDURE\",attrs:{\"name\":\"%{BKY_CATFUNCTIONS}\",\"colour\":\"%{BKY_PROCEDURES_HUE}\",\"custom\":\"PROCEDURE\"}}),_c('category',{attrs:{\"name\":\"行驶\",\"colour\":\"%{BKY_DATATYPE_HUE}\"}},[_c('block',{attrs:{\"type\":\"gta_robot_B_drive_wheels\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_chassis_move\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1)],1),_c('category',{attrs:{\"name\":\"姿势\",\"colour\":\"%{BKY_DATATYPE_HUE}\"}},[_c('block',{attrs:{\"type\":\"gta_robot_B_arm_recenter\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_arm_move_to\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_gripper_close\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_gripper_open\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_servo_move_to\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1)],1),_c('category',{attrs:{\"name\":\"摄像头\",\"colour\":\"%{BKY_DATATYPE_HUE}\"}},[_c('block',{attrs:{\"type\":\"gta_robot_B_display_video\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_get_camera_image\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1)],1),_c('category',{attrs:{\"name\":\"技能\",\"colour\":\"%{BKY_VARIABLES_HUE}\"}},[_c('block',{attrs:{\"type\":\"gta_robot_B_detect_color_blob\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})]),_c('value',{attrs:{\"name\":\"LOW\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_event_item\"}})]),_c('value',{attrs:{\"name\":\"HIGH\"}},[_c('shadow',{attrs:{\"type\":\"gta_ai_event_item\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_hsv\"}}),_c('block',{attrs:{\"type\":\"gta_robot_B_move_along_line\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_detect_pattern\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_move_to_pattern\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_detect_face\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1),_c('block',{attrs:{\"type\":\"gta_robot_B_detect_qrcode\"}},[_c('value',{attrs:{\"name\":\"ROBOT\"}},[_c('shadow',{attrs:{\"type\":\"gta_robot\"}})])],1)],1),_c('sep')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockIndexB.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockIndexB.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HardwareBlockIndexB.vue?vue&type=template&id=94bf427c&scoped=true&\"\nimport script from \"./HardwareBlockIndexB.vue?vue&type=script&lang=js&\"\nexport * from \"./HardwareBlockIndexB.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HardwareBlockIndexB.vue?vue&type=style&index=0&id=94bf427c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"94bf427c\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockEditor.vue?vue&type=style&index=0&id=37aff850&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HardwareBlockEditor.vue?vue&type=style&index=0&id=37aff850&lang=scss&scoped=true&\"","'use strict'\n/**\n * 上传头像\n * zlh\n */\nimport Blockly from '@/assets/blockly/renderers/index.js'\n//项目接口\nimport AI_EDITOR from '@/axios/personalSpace/AiEditor/blocks.js'\n//实训接口\nimport BLOCK from '@/axios/trainingCenter/AiEditor/blocks.js'\n//上传文件等公共接口\nimport COMMON from '@/axios/common/common.js'\n\nexport const MediaBlocks = {\n data() {\n return {\n picTempList: [], //图片积木缓存\n camTempList: [], //摄像头积木缓存\n audioTempList: [], //摄像头积木缓存\n textTempList: [], //文本积木缓存\n renamePicObj: {}, //缓存重命名的图片积木\n renameCamObj: {}, //缓存重命名的摄像头积木\n renameAudioObj: {}, //缓存重命名的音频积木\n renameTextObj: {}, //缓存重命名的文本积木\n photoBaseUrl: window.gtaAiConfig.photoDomain, // 新UC头像基地址\n }\n },\n watch: {\n Media(Media) {\n // 将媒体图片数据放到图片变量图片取现点\n let self = this\n let reg_base_url = new RegExp(this.photoBaseUrl)\n let mediaFiles =\n Media.length > 0\n ? Media.map((item) => {\n let mediaFileUrl\n if (reg_base_url.test(item.mediaFileUrl)) {\n mediaFileUrl = item.mediaFileUrl\n } else {\n mediaFileUrl = self.photoBaseUrl + item.mediaFileUrl\n }\n return {\n mediaFileUrl: mediaFileUrl,\n mediaFileName: item.mediaFileName,\n }\n })\n : [],\n picTempList = JSON.parse(JSON.stringify(this.picTempList)),\n camTempList = [],\n audioTempList = JSON.parse(JSON.stringify(this.audioTempList)),\n textTempList = JSON.parse(JSON.stringify(this.textTempList))\n\n if (Media.length < 0) {\n return\n }\n\n mediaFiles.forEach(function(file) {\n // mediaFiles.forEach(function toPicTempList(file) {\n let pic_match = /.jpeg|.png|.jpg|.svg/i\n let audio_match = /.WMA|.mp3|.wav|.wma|.ape|.flac|.ogg|.aac|.m4a/i\n let text_match = /.txt/i\n\n var hasItem = false\n var hasAudioItem = false\n var hasTextItem = false\n picTempList.find((item) => {\n if (item.mediaFileUrl == file.mediaFileUrl) {\n hasItem = true\n }\n })\n audioTempList.find((item) => {\n if (item.mediaFileUrl == file.mediaFileUrl) {\n hasAudioItem = true\n }\n })\n textTempList.find((item) => {\n if (item.mediaFileUrl == file.mediaFileUrl) {\n hasTextItem = true\n }\n })\n // 图片列表\n if (\n !hasItem &&\n file.mediaFileUrl.indexOf('http://') != -1 &&\n pic_match.test(file.mediaFileUrl)\n ) {\n picTempList.push(file)\n }\n //摄像头列表\n if (\n !hasItem &&\n (file.mediaFileUrl.indexOf('rtsp:') != -1 ||\n /.m3u8$/.test(file.mediaFileUrl))\n ) {\n camTempList.push(file)\n }\n // 音频列表\n if (\n !hasAudioItem &&\n file.mediaFileUrl.indexOf('http://') != -1 &&\n audio_match.test(file.mediaFileUrl)\n ) {\n audioTempList.push(file)\n }\n // 文本列表\n if (\n !hasTextItem &&\n file.mediaFileUrl.indexOf('http://') != -1 &&\n text_match.test(file.mediaFileUrl)\n ) {\n textTempList.push(file)\n }\n })\n\n if (picTempList.length > this.picTempList.length) {\n this.picTempList = picTempList\n }\n camTempList = this.reduceMediaArr(camTempList)\n this.camTempList = camTempList\n if (audioTempList.length > this.audioTempList.length) {\n this.audioTempList = audioTempList\n }\n if (textTempList.length > this.textTempList.length) {\n this.textTempList = textTempList\n }\n },\n picTempList: {\n handler(list) {\n // console.log('picTempList', list)\n //缓存的图片积木监听\n var picAddedList = []\n if (!this.mediaGotten) {\n //检验数据库有没有返回-可能不需要判断数据库有没有返回\n return\n }\n\n list.forEach((picTemp) => {\n let findMedia = this.Media.find(\n (item) => item && item.mediaFileUrl === picTemp.mediaFileUrl\n )\n // 如果从数据库中存取中没有的图片信息,则进行上传\n if (!findMedia) {\n picAddedList[picAddedList.length] = picTemp\n }\n })\n // 图片添加到数据库\n this.reduceArr(picAddedList) //去重\n },\n deep: true,\n },\n audioTempList(audioTempList) {\n //缓存的音频积木监听\n var picAddedList = []\n if (!this.mediaGotten) {\n //检验数据库有没有返回\n return\n }\n audioTempList.forEach((audioTemp) => {\n let findMedia = this.Media.find(\n (item) => item && item.mediaFileUrl === audioTemp.mediaFileUrl\n )\n // 如果从数据库中存取中没有的图片信息,则进行上传\n if (!findMedia) {\n picAddedList[picAddedList.length] = audioTemp\n }\n })\n this.reduceArr(picAddedList) //去重\n },\n textTempList(list) {\n //缓存的文本积木监听\n var textAddedList = []\n if (!this.mediaGotten) {\n //检验数据库有没有返回-可能不需要判断数据库有没有返回\n return\n }\n\n list.forEach((textTemp) => {\n let findMedia = this.Media.find(\n (item) => item && item.mediaFileUrl === textTemp.mediaFileUrl\n )\n // 如果从数据库中存取中没有的文本信息,则进行上传\n if (!findMedia) {\n textAddedList[textAddedList.length] = textTemp\n }\n })\n\n // 文本添加到数据库\n this.reduceArr(textAddedList) //去重\n // if (textAddedList.length > 0) {\n // }\n },\n //缓存的摄像头积木监听\n camTempList(camTempList) {\n var camAddedList = []\n // 摄像头提交到数据库\n this.reduceMediaArr(camAddedList) //去重\n },\n },\n mounted() {},\n\n methods: {\n //媒体的积木去重\n reduceMediaArr(List) {\n let obj = {}\n let newList = List.reduce((prev, cur) => {\n obj[cur.mediaFileUrl] && obj[cur.mediaFileName]\n ? ''\n : (obj[cur.mediaFileUrl] = true && prev.push(cur))\n return prev\n }, [])\n return newList\n },\n /**\n *\n *创建媒体积木功能\n 上传图片的时候 创建积木列表\n */\n createBlocksByList(vList, camTempList, audioTempList, textTempList) {\n //去重\n vList = this.reduceArr(vList) //图片列表\n camTempList = this.reduceMediaArr(camTempList) //媒体积木先不去重\n audioTempList = this.reduceArr(audioTempList)\n textTempList = this.reduceArr(textTempList)\n var xmlList = [],\n audioXmlList = [],\n picXmlList = [],\n camXmlList = [],\n textXmlList = [],\n // 按钮\n buttonblock_1 =\n '' +\n //音频\n ' ' +\n '' +\n ' ' +\n '',\n audioBlock =\n '' +\n //音频功能\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '',\n buttonblock_2 =\n '' +\n //图片\n ' ' +\n '' +\n ' ' +\n '',\n buttonblock_3 =\n '' +\n //摄像头\n '' +\n '' +\n ' ' +\n '',\n buttonblock_4 =\n '' +\n //文本\n ' ' +\n '' +\n ' ' +\n ''\n\n //动态媒体类型的音频、图片、摄像头标签的动态位置\n this.setFlyoutLabelPosition()\n\n // 图片积木\n for (let i = 0; i < vList.length; i++) {\n //截取获取图片的名称\n var imageName = vList[i].mediaFileName || '图片'\n var index_1 = imageName.indexOf('.')\n if (index_1 != -1) {\n imageName = imageName.slice(0, index_1)\n }\n if (!imageName) {\n imageName = '图片'\n }\n var enstr = this.$util.urlToStr.encrypt(vList[i].mediaFileUrl) //加密\n var typestrurl = 'MEDIAPIC' + enstr + 'mediaFileName=' + imageName\n // 传入url,新建不同的积木块\n var blockCreateTxt =\n \"Blockly.Blocks['\" +\n typestrurl +\n \"'] = {\" +\n 'init: function () {' +\n 'this.appendDummyInput()' +\n '.appendField(new Blockly.FieldImage(\"' +\n vList[i].mediaFileUrl +\n // vList[i] +\n '\", 30, 30, \"*\"))' +\n '.appendField(\"' +\n imageName +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['PIC_BLOCKS_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteMedia('\" +\n vList[i].mediaFileUrl +\n \"','\" +\n imageName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renamePic(this.getFieldValue(),'\" +\n imageName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n typestrurl +\n \"'] = function(block) {return ['\" +\n '\"' +\n vList[i].mediaFileUrl +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL ];};\",\n blockCreate = new Function(\n 'Blockly',\n 'deleteMedia',\n 'renamePic',\n blockCreateTxt\n )\n\n // 如果已经存在就不用再创建\n if (!Blockly.Blocks[typestrurl]) {\n blockCreate.call(this, Blockly, this.deleteMedia, this.renamePic)\n }\n\n var blockText =\n '' + '' + '' + ''\n var block = Blockly.Xml.textToDom(blockText).firstChild\n picXmlList.push(block)\n }\n\n // 摄像头积木\n for (let i = 0; i < camTempList.length; i++) {\n //截取获取图片的名称\n var mediaFileName = camTempList[i].mediaFileName\n var mediaFileUrl = camTempList[i].mediaFileUrl\n // 创建积木代码\n if (!mediaFileName) {\n mediaFileName = '摄像头'\n }\n var encryptCamera =\n 'MEDIACAM' +\n this.$util.urlToStr.encrypt(mediaFileUrl) +\n 'mediaFileName=' +\n mediaFileName\n\n var blockCreateTxt2 =\n \"Blockly.Blocks['\" +\n encryptCamera +\n \"'] = {\" +\n 'init:function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n mediaFileName +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['PLAY_CAMERA_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteCameraMedia('\" +\n mediaFileUrl +\n \"','\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameCam('\" +\n mediaFileUrl +\n \"','\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n encryptCamera +\n \"'] = function(block) { return ['\" +\n 'url=' +\n '\"' +\n mediaFileUrl +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n // \"'] = function(block) { return ['\\\"'+block.getFieldValue()+'\\\"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n blockCreate2 = new Function(\n 'Blockly',\n 'deleteCameraMedia',\n 'renameCam',\n blockCreateTxt2\n )\n\n // 如果已经存在就不用再创建\n if (!Blockly.Blocks[encryptCamera]) {\n blockCreate2.call(\n this,\n Blockly,\n this.deleteCameraMedia,\n this.renameCam\n )\n }\n var blockText2 =\n '' +\n '' +\n '' +\n ''\n var block2 = Blockly.Xml.textToDom(blockText2).firstChild\n // xmlList.unshift(block);\n camXmlList.push(block2)\n }\n\n // 音频积木\n for (let i = 0; i < audioTempList.length; i++) {\n //截取获取图片的名称\n let mediaFileName = audioTempList[i].mediaFileName,\n mediaFileUrl = audioTempList[i].mediaFileUrl\n // 创建积木代码\n if (!mediaFileName) {\n mediaFileName = '音频'\n }\n let encryptCamera =\n 'MEDIAAUDIO' +\n this.$util.urlToStr.encrypt(mediaFileUrl) +\n 'mediaFileName=' +\n mediaFileName\n\n let blockCreateTxt2 =\n \"Blockly.Blocks['\" +\n encryptCamera +\n \"'] = {\" +\n 'init:function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n mediaFileName +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['UPLOAD_AUDIO_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteAudioMedia('\" +\n mediaFileUrl +\n \"','\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameAudio('\" +\n mediaFileUrl +\n \"','\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n encryptCamera +\n \"'] = function(block) { return ['\" +\n // \"url=\" +\n '\"' +\n mediaFileUrl +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n blockCreate2 = new Function(\n 'Blockly',\n 'deleteAudioMedia',\n 'renameAudio',\n blockCreateTxt2\n )\n\n // 如果已经存在就不用再创建\n if (!Blockly.Blocks[encryptCamera]) {\n blockCreate2.call(\n this,\n Blockly,\n this.deleteAudioMedia,\n this.renameAudio\n )\n }\n let blockText2 =\n '' +\n '' +\n '' +\n ''\n let block2 = Blockly.Xml.textToDom(blockText2).firstChild\n // xmlList.unshift(block);\n audioXmlList.push(block2)\n }\n\n // 文本积木\n for (let i = 0; i < textTempList.length; i++) {\n //截取获取图片的名称\n let textName = textTempList[i].mediaFileName || '文本'\n let mediaFileUrl = textTempList[i].mediaFileUrl\n let index_1 = textName.indexOf('.')\n if (index_1 != -1) {\n textName = textName.slice(0, index_1)\n }\n let enstr = this.$util.urlToStr.encrypt(textTempList[i].mediaFileUrl) //加密\n let typestrurl = 'MEDIATEXT' + enstr + 'mediaFileName=' + textName\n // 传入url,新建不同的积木块\n let blockCreateTxt =\n \"Blockly.Blocks['\" +\n typestrurl +\n \"'] = {\" +\n 'init: function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n textName +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['PIC_BLOCKS_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteTextMedia('\" +\n mediaFileUrl +\n \"','\" +\n textName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameText('\" +\n mediaFileUrl +\n \"','\" +\n textName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n typestrurl +\n \"'] = function(block) {return ['\" +\n '\"' +\n textTempList[i].mediaFileUrl +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL ];};\",\n blockCreate = new Function(\n 'Blockly',\n 'deleteTextMedia',\n 'renameText',\n blockCreateTxt\n )\n\n // 如果已经存在就不用再创建\n if (!Blockly.Blocks[typestrurl]) {\n blockCreate.call(this, Blockly, this.deleteTextMedia, this.renameText)\n }\n\n let blockText =\n '' + '' + '' + ''\n let block = Blockly.Xml.textToDom(blockText).firstChild\n textXmlList.push(block)\n }\n\n //分类依序放置音频、图片、媒体的积木\n xmlList = [\n ...Blockly.Xml.textToDom(buttonblock_1).childNodes,\n ...audioXmlList,\n ...Blockly.Xml.textToDom(audioBlock).childNodes,\n ...Blockly.Xml.textToDom(buttonblock_2).childNodes,\n ...picXmlList,\n ...Blockly.Xml.textToDom(buttonblock_3).childNodes,\n ...camXmlList,\n ...Blockly.Xml.textToDom(buttonblock_4).childNodes,\n ...textXmlList,\n ]\n return xmlList\n },\n\n //从工作台创建媒体类积木\n createMediaBlocksByWorkspaceXML(oldWorkspaceXmlTxt, typestrurl, renameVal) {\n let arr = oldWorkspaceXmlTxt\n ? oldWorkspaceXmlTxt.split(' {\n let urlstr_2 = urlstr.replace(photoBaseUrl, '')\n let mediaItem = this.Media.find(\n (item) =>\n item.mediaFileName == mediaFileName &&\n (item.mediaFileUrl === urlstr || item.mediaFileUrl === urlstr_2)\n )\n if (!mediaItem) {\n this.mediaUpload([\n {\n mediaFileUrl: urlstr_2,\n mediaFileName: mediaFileName,\n },\n ])\n //加载到缓存\n this.picTempList.push({\n mediaFileUrl: urlstr,\n mediaFileName: mediaFileName,\n })\n }\n }, 200)\n\n // 创建 blockly\n var blockCreateTxt =\n \"Blockly.Blocks['\" +\n picarr[1] +\n \"'] = {\" +\n 'init: function () {' +\n 'this.appendDummyInput()' +\n '.appendField(new Blockly.FieldImage(\"' +\n urlstr +\n '\", 30, 30, \"*\"))' +\n '.appendField(\"' +\n mediaFileName +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['PIC_BLOCKS_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteMedia('\" +\n urlstr +\n \"','\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' + //重命名\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renamePic(this.getFieldValue(),'\" +\n mediaFileName +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n picarr[1] +\n \"'] = function(block) {return ['\" +\n '\"' +\n urlstr.trim() +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL ];};\",\n // \"'] = function(block) {return ['\\\"'+block.getFieldValue().trim()+'\\\"',Blockly.Python.ORDER_FUNCTION_CALL ];};\",\n blockCreate = new Function(\n 'Blockly',\n 'deleteMedia',\n 'renamePic',\n blockCreateTxt\n )\n blockCreate.call(this, Blockly, this.deleteMedia, this.renamePic)\n //加载到缓存\n }\n\n // 摄像头缓存\n if (arr[i].substring(0, 9) == '\"MEDIACAM') {\n var camArr = arr[i].split('\"')\n var enstr2 = camArr[1].substring(8, camArr[1].length)\n var camIndex = enstr2.indexOf('mediaFileName=')\n var nameStr2 = enstr2.slice(camIndex)\n var MediaFileName2 = nameStr2.replace('mediaFileName=', '')\n var enstr3 = enstr2.slice(0, camIndex)\n var mediaFileUrl = this.$util.urlToStr.decrypt(enstr3)\n // debugger;\n mediaFileUrl = decodeURIComponent(mediaFileUrl) //URI解码\n // 如果已经存在就不用再创建\n if (Blockly.Blocks[camArr[1]]) {\n continue\n }\n //工作区未存在Media列表的积木添加到媒体积木列表Media,并向请求接口对应增加一个积木数据\n setTimeout(() => {\n let mediaFileUrl_2 = mediaFileUrl.replace(photoBaseUrl, '')\n let mediaItem = this.Media.find(\n (item) =>\n item.mediaFileName == MediaFileName2 &&\n (item.mediaFileUrl === mediaFileUrl ||\n item.mediaFileUrl === mediaFileUrl_2)\n )\n if (!mediaItem) {\n this.mediaUpload([\n {\n mediaFileUrl: mediaFileUrl_2,\n mediaFileName: MediaFileName2 || '摄像头',\n },\n ])\n //加载到缓存\n this.camTempList.push({\n mediaFileUrl: mediaFileUrl,\n mediaFileName: MediaFileName2 || '摄像头',\n })\n }\n }, 200)\n\n // 创建 blockly\n var blockCreateTxt2 =\n \"Blockly.Blocks['\" +\n camArr[1] +\n \"'] = {\" +\n 'init:function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n MediaFileName2 +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['PLAY_CAMERA_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteCameraMedia('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameCam('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n camArr[1] +\n \"'] = function(block) { return ['\" +\n // '\"GTAMEDIA=[' +\n 'url=' +\n '\"' +\n mediaFileUrl +\n '\"' +\n // ']=GTAMEDIA\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n // \"'] = function(block) { return ['\\\"'+block.getFieldValue()+'\\\"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n blockCreate2 = new Function(\n 'Blockly',\n 'deleteCameraMedia',\n 'renameCam',\n blockCreateTxt2\n )\n\n // 将上述代码放入 Blockly 当中\n blockCreate2.call(\n this,\n Blockly,\n this.deleteCameraMedia,\n this.renameCam\n )\n }\n\n // 音频缓存\n if (arr[i].substring(0, 11) == '\"MEDIAAUDIO') {\n let camArr = arr[i].split('\"')\n let enstr2 = camArr[1].substring(10, camArr[1].length)\n let camIndex = enstr2.indexOf('mediaFileName')\n let nameStr2 = enstr2.slice(camIndex)\n let MediaFileName2 = nameStr2.replace('mediaFileName=', '')\n let enstr3 = enstr2.slice(0, camIndex)\n let mediaFileUrl = this.$util.urlToStr.decrypt(enstr3)\n mediaFileUrl = decodeURIComponent(mediaFileUrl) //URI解码\n // 如果已经存在就不用再创建\n if (Blockly.Blocks[camArr[1]]) {\n continue\n }\n\n //工作区未存在Media列表的积木添加到媒体积木列表Media,并向请求接口对应增加一个积木数据\n setTimeout(() => {\n let mediaFileUrl_2 = mediaFileUrl.replace(photoBaseUrl, '')\n let mediaItem = this.Media.find(\n (item) =>\n item.mediaFileName == MediaFileName2 &&\n (item.mediaFileUrl === mediaFileUrl ||\n item.mediaFileUrl === mediaFileUrl_2)\n )\n if (!mediaItem) {\n this.mediaUpload([\n {\n mediaFileUrl: mediaFileUrl_2,\n mediaFileName: MediaFileName2 || '音频',\n },\n ])\n //加载到缓存\n this.audioTempList.push({\n mediaFileUrl: mediaFileUrl,\n mediaFileName: MediaFileName2 || '音频',\n })\n }\n }, 1000)\n\n // 创建 blockly\n let blockCreateTxt2 =\n \"Blockly.Blocks['\" +\n camArr[1] +\n \"'] = {\" +\n 'init:function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n MediaFileName2 +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['UPLOAD_AUDIO_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteAudioMedia('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameAudio('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n camArr[1] +\n \"'] = function(block) { return ['\" +\n // '\"GTAMEDIA=[' +\n // \"url=\" +\n '\"' +\n mediaFileUrl +\n '\"' +\n // ']=GTAMEDIA\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n // \"'] = function(block) { return ['\\\"'+block.getFieldValue()+'\\\"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n blockCreate2 = new Function(\n 'Blockly',\n 'deleteAudioMedia',\n 'renameAudio',\n blockCreateTxt2\n )\n\n // 将上述代码放入 Blockly 当中\n blockCreate2.call(\n this,\n Blockly,\n this.deleteAudioMedia,\n this.renameAudio\n )\n }\n // 文本缓存\n if (arr[i].substring(0, 10).search('MEDIATEXT') != -1) {\n let textArr = arr[i].split('\"')\n let enstr2 = textArr[1].substring(9, textArr[1].length)\n let textIndex = enstr2.indexOf('mediaFileName')\n let nameStr2 = enstr2.slice(textIndex)\n let MediaFileName2 = nameStr2.replace('mediaFileName=', '')\n let enstr3 = enstr2.slice(0, textIndex)\n let mediaFileUrl = this.$util.urlToStr.decrypt(enstr3)\n mediaFileUrl = decodeURIComponent(mediaFileUrl) //URI解码\n // 如果已经存在就不用再创建\n if (Blockly.Blocks[textArr[1]]) {\n continue\n }\n\n //工作区未存在Media列表的积木添加到媒体积木列表Media,并向请求接口对应增加一个积木数据\n setTimeout(() => {\n let mediaFileUrl_2 = mediaFileUrl.replace(photoBaseUrl, '')\n let mediaItem = this.Media.find(\n (item) =>\n item.mediaFileName == MediaFileName2 &&\n (item.mediaFileUrl === mediaFileUrl ||\n item.mediaFileUrl === mediaFileUrl_2)\n )\n if (!mediaItem) {\n this.mediaUpload([\n {\n mediaFileUrl: mediaFileUrl_2,\n mediaFileName: MediaFileName2 || '文本',\n },\n ])\n //加载到缓存\n this.textTempList.push({\n mediaFileUrl: mediaFileUrl,\n mediaFileName: MediaFileName2 || '文本',\n })\n }\n }, 1000)\n\n // 创建 blockly\n let blockCreateTxt2 =\n \"Blockly.Blocks['\" +\n textArr[1] +\n \"'] = {\" +\n 'init:function () {' +\n 'this.appendDummyInput()' +\n '.appendField(\"' +\n MediaFileName2 +\n '\");' +\n 'this.setOutput(true, null);' +\n \"this.setStyle('media_blocks');\" +\n 'this.setTooltip(\"\");' +\n `this.setHelpUrl(\"${Blockly.Msg['UPLOAD_AUDIO_HELPURL']}\");` +\n ' }' +\n ',' +\n 'customContextMenu:function(options) {' +\n 'var option= {' +\n 'enabled:true,' +\n 'text:\"删除\",' +\n 'callback:function() {' +\n \"deleteTextMedia('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'var option2= {' +\n 'enabled:true,' +\n 'text:\"重命名\",' +\n 'callback:function() {' +\n \"renameText('\" +\n mediaFileUrl +\n \"','\" +\n MediaFileName2 +\n \"');\" +\n '}.bind(this)' +\n '};' +\n 'options.push(option);' +\n 'options.push(option2);' +\n '}' +\n '};' +\n \" Blockly.Python['\" +\n textArr[1] +\n \"'] = function(block) { return ['\" +\n '\"' +\n mediaFileUrl +\n '\"' +\n \"',Blockly.Python.ORDER_FUNCTION_CALL];};\",\n blockCreate2 = new Function(\n 'Blockly',\n 'deleteTextMedia',\n 'renameText',\n blockCreateTxt2\n )\n\n // 将上述代码放入 Blockly 当中\n blockCreate2.call(\n this,\n Blockly,\n this.deleteTextMedia,\n this.renameText\n )\n }\n }\n },\n\n reduceArr(List) {\n let obj = {}\n let newList = List.reduce((prev, cur) => {\n obj[cur.mediaFileUrl]\n ? ''\n : (obj[cur.mediaFileUrl] = true && prev.push(cur))\n return prev\n }, [])\n return newList\n },\n\n //动态媒体类型的音频、图片、摄像头标签的动态位置\n setFlyoutLabelPosition() {\n setTimeout(() => {\n //媒体标签的样式设置,需异步\n let flyoutWidth = sessionStorage.flyoutWidth,\n trans_match = /(?<=translate\\().*(?=\\))/,\n scrollWidth = flyoutWidth - 40,\n myLabelStyle1 = document.querySelector('.block-text1'),\n myLabelStyle2 = document.querySelector('.block-text2'),\n myLabelStyle3 = document.querySelector('.block-text3'),\n myLabelStyle4 = document.querySelector('.block-text4'),\n myBtnStyle1 = document.querySelector('.block-btn-1'),\n myBtnStyle2 = document.querySelector('.block-btn-2'),\n myBtnStyle3 = document.querySelector('.block-btn-3'),\n myBtnStyle4 = document.querySelector('.block-btn-4'),\n transform_1 = myLabelStyle1.getAttribute('transform'),\n y_1 = transform_1.match(trans_match)[0].split(',')[1],\n transform_2 = myLabelStyle2.getAttribute('transform'),\n y_2 = transform_2.match(trans_match)[0].split(',')[1],\n transform_3 = myLabelStyle3.getAttribute('transform'),\n y_3 = transform_3.match(trans_match)[0].split(',')[1],\n transform_4 = myLabelStyle4.getAttribute('transform'),\n y_4 = transform_4.match(trans_match)[0].split(',')[1],\n y_1_1 = eval(y_1) + 35,\n y_2_1 = eval(y_2) + 35,\n y_3_1 = eval(y_3) + 35,\n y_4_1 = eval(y_4) + 35\n myLabelStyle1.setAttribute(\n 'transform',\n 'translate(' + 5 + ',' + y_1 + ')'\n )\n myLabelStyle2.setAttribute(\n 'transform',\n 'translate(' + 5 + ',' + y_2 + ')'\n )\n myLabelStyle3.setAttribute(\n 'transform',\n 'translate(' + 5 + ',' + y_3 + ')'\n )\n myLabelStyle4.setAttribute(\n 'transform',\n 'translate(' + 5 + ',' + y_4 + ')'\n )\n myBtnStyle1.setAttribute(\n 'transform',\n 'translate(' + scrollWidth + ',' + y_1_1 + ')'\n )\n myBtnStyle2.setAttribute(\n 'transform',\n 'translate(' + scrollWidth + ',' + y_2_1 + ')'\n )\n myBtnStyle3.setAttribute(\n 'transform',\n 'translate(' + scrollWidth + ',' + y_3_1 + ')'\n )\n myBtnStyle4.setAttribute(\n 'transform',\n 'translate(' + scrollWidth + ',' + y_4_1 + ')'\n )\n }, 50)\n },\n\n /**\n *\n *\n * 图片、音频、文本上传按钮功能区\n *\n * */\n // 图片变量创建按钮\n btnCreatePictureBlock() {\n //上传图片\n var inputNode = document.createElement('input'),\n self = this,\n clickTarget = this.elMedia,\n reg_name = /[`~!@#$^&*()=|{}':;',\\\\[\\].<>/?~!@#¥……&*()——|{}【】';:\"\"'。,、?\\s0e]/g,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n )\n\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n // 文件上传按钮配置\n inputNode.setAttribute('type', 'file')\n inputNode.setAttribute('multiple', 'true')\n inputNode.setAttribute('accept', 'image/*') // 限制.rar 和.zip压缩文件格式上传\n //文件上传到-资源平台服务器\n self.inputUploadFile(inputNode, clickTarget, self.picTempList, 'image')\n // 点击上传按钮\n inputNode.click()\n },\n // 音频变量创建按钮\n btnCreateAudioBlock() {\n //上传音频\n var inputNode = document.createElement('input')\n let self = this,\n clickTarget = this.elMedia,\n reg_name = /[`~!@#$^&*()=|{}':;',\\\\[\\]<>/?~!@#¥……&*()——|{}【】';:\"\"'。,、?\\s0e]/g,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n )\n\n // if (!this.projectId || this.projectId === this.Placeholder.ProjectId) {\n // this.$message({\n // message: \"项目案例保存后再修改~\",\n // type: \"warning\",\n // duration: 2000\n // });\n // return;\n // }\n\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n\n // 文件上传按钮配置\n inputNode.setAttribute('type', 'file')\n inputNode.setAttribute('multiple', 'true')\n inputNode.setAttribute('accept', 'audio/*')\n //文件上传到-资源平台服务器\n self.inputUploadFile(inputNode, clickTarget, self.audioTempList, 'audio')\n\n // 点击上传按钮\n inputNode.click()\n },\n // 摄像头变量创建按钮\n btnCreateCameraBlock() {\n //打开摄像头弹框\n this.popupActive = 'camera'\n },\n\n // 文本变量创建按钮\n btnCreateTextBlock() {\n //上传文本\n var inputNode = document.createElement('input'),\n self = this,\n clickTarget = this.elMedia,\n reg_name = /[`~!@#$^&*()=|{}':;',\\\\[\\].<>/?~!@#¥……&*()——|{}【】';:\"\"'。,、?\\s0e]/g,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n )\n\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n // 文件上传按钮配置\n inputNode.setAttribute('type', 'file')\n inputNode.setAttribute('multiple', 'true')\n inputNode.setAttribute('accept', '.txt') // 限制.rar 和.zip压缩文件格式上传\n\n //文件上传到-资源平台服务器\n self.inputUploadFile(inputNode, clickTarget, self.textTempList, 'txt')\n\n // 点击上传按钮\n inputNode.click()\n },\n //文件上传到-资源平台服务器\n inputUploadFile(inputNode, clickTarget, tempList, fileName) {\n let self = this,\n reg_name = /[`~!@#$^&*()=|{}':;',\\\\[\\].<>/?~!@#¥……&*()——|{}【】';:\"\"'。,、?\\se]/g\n inputNode.onchange = function uploadImg(evt) {\n // 获取 file\n let fileList = evt.target.files,\n list = Array.from(fileList),\n formatPass,\n formdata = new FormData();\n\n list.forEach((file) => {\n formdata.append('file', file)\n })\n // 实例化\n // var fileName = file.name\n //过滤特殊字符\n // fileName = fileName.replace(reg_name, '')\n //截取名称长度\n // fileName = fileName.slice(0, 10)\n let pic_match = /.jpeg|.png|.jpg|.svg/i,\n audio_match = /.WMA|.mp3|.wav|.wma|.ape|.flac|.ogg|.aac|.m4a/i,\n text_match = /.txt/i;\n if (list.length > 20) {\n return self.$message({\n message: '单次上传不可超过20个文件哦!',\n type: 'error',\n duration: 2000,\n })\n }\n\n if (fileName === 'txt') {\n formatPass = self.$util.filesFormatEveryCheck(list, text_match)\n if (!formatPass) {\n self.$message({\n message: '上传失败,请上传txt文件!',\n type: 'error',\n duration: 2000,\n })\n return\n }\n } else if (fileName === 'image') {\n formatPass = self.$util.filesFormatEveryCheck(list, pic_match)\n if (!formatPass) {\n self.$message({\n message: '上传失败,请上传图片!',\n type: 'error',\n duration: 2000,\n })\n return\n }\n } else if (fileName === 'audio') {\n formatPass = self.$util.filesFormatEveryCheck(list, audio_match)\n if (!formatPass) {\n self.$message({\n message: '上传失败,请上传音频!',\n type: 'error',\n duration: 2000,\n })\n return\n }\n }\n\n const loading = self.$loading({\n lock: true,\n text: '上传中请稍等...',\n spinner: 'el-icon-loading',\n background: 'rgba(0, 0, 0, 0.7)'\n });\n setTimeout(() => {\n loading.close(); // 超过60秒时关闭loading效果\n }, 1000*60);\n\n COMMON.UploadMultipleFile(formdata).then(async (result) => {\n if (result && result.returnCode == 200 && result.data) {\n // 单击媒体分类位置\n clickTarget.click()\n let arr = []\n result.data.forEach((item) => {\n //过滤特殊字符\n let mediaFileName = item.fileName.replace(reg_name, '')\n //截取名称长度\n mediaFileName = mediaFileName.slice(0, 10)\n let mediaFileUrl = self.photoBaseUrl + item.url\n arr.push({ mediaFileName, mediaFileUrl })\n })\n // 添加到图片数组当中\n // tempList.push({\n // mediaFileName: fileName,\n // mediaFileUrl: fileUrl,\n // })\n // tempList.concat(arr)\n // // 更新数据库\n await self.mediaUpload(arr, clickTarget)\n\n inputNode = null // 释放 input\n // 单击媒体分类位置,图片显示\n // clickTarget.click()\n loading.close();\n } else {\n loading.close();\n }\n }).catch((err) => {\n loading.close();\n })\n }\n },\n\n // 提交媒体图片上传接口\n async mediaUpload(mediaList, clickTarget) {\n let { trainingId, accountInfo, projectId } = this,\n result,\n data = {}\n data.mediaList = mediaList\n //新增媒体积木存放在后台\n if (trainingId) {\n //实训中心的调用\n data.trainingId = trainingId\n data.userId = accountInfo.userId\n result = await BLOCK.insertMedia(data)\n } else if (projectId) {\n //ai-editor的调用\n data.projectId = projectId\n result = await AI_EDITOR.insertMedia(data)\n } else {\n return\n }\n\n if (result.isSuccess) {\n await this.getMedia() //重新获取媒体积木;\n if (clickTarget) {\n clickTarget.click()\n }\n this.mediaGotten = 1 //代表上传了数据\n } else {\n this.$message.error('媒体变量上传失败!')\n }\n },\n async getMedia(pageIndex) {\n return await this.$parent.getMedia()\n \n // let res = await this.$emit('getMedia', pageIndex)\n },\n\n /**\n *\n *\n * 删除积木功能操作\n * */\n //删除图片\n deleteMedia(fileUrl, mediaFileName) {\n //加密,同步于创建图片变量中的 url 转化为 base64 的操作\n var enstr = this.$util.urlToStr.encrypt(fileUrl),\n typestrurl = 'MEDIAPIC' + enstr + 'mediaFileName=' + mediaFileName,\n typeBlocks = this.workspace.getBlocksByType(typestrurl),\n typeBlocksLen = typeBlocks.length,\n msgConfirm = `要删除对该媒体变量的 ${typeBlocksLen} 个引用吗?`\n // 检测该图片变量是否还在使用\n if (typeBlocksLen) {\n // 弹窗是否要删除图片变量\n this.$confirm(msgConfirm).then((action) => {\n if (action === 'confirm') {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n })\n } else {\n return\n }\n })\n } else {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n // 更新服务器 Xml 文件\n // this.xmlDataUpdate();\n })\n }\n },\n // 删除摄像头积木\n deleteCameraMedia(fileUrl, mediaFileName) {\n //加密,同步于创建图片变量中的 url 转化为 base64 的操作\n var enstr = this.$util.urlToStr.encrypt(fileUrl),\n typestrurl = 'MEDIACAM' + enstr + 'mediaFileName' + mediaFileName,\n typeBlocks = this.workspace.getBlocksByType(typestrurl),\n typeBlocksLen = typeBlocks.length,\n msgConfirm = `要删除对该媒体变量的 ${typeBlocksLen} 个引用吗?`\n // 检测该图片变量是否还在使用\n if (typeBlocksLen) {\n this.$confirm(msgConfirm).then((action) => {\n if (action === 'confirm') {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n // 更新服务器 Xml 文件\n this.xmlDataUpdate()\n })\n } else {\n return\n }\n })\n } else {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n // 更新服务器 Xml 文件\n this.xmlDataUpdate()\n })\n }\n },\n // 删除音频积木\n deleteAudioMedia(fileUrl, mediaFileName) {\n //加密,同步于创建图片变量中的 url 转化为 base64 的操作\n var enstr = this.$util.urlToStr.encrypt(fileUrl),\n typestrurl = 'MEDIAAUDIO' + enstr + 'mediaFileName' + mediaFileName,\n typeBlocks = this.workspace.getBlocksByType(typestrurl),\n typeBlocksLen = typeBlocks.length,\n msgConfirm = `要删除对该媒体变量的 ${typeBlocksLen} 个引用吗?`\n\n // 检测该变量是否还在使用\n if (typeBlocksLen) {\n // 弹窗是否要删除音频变量\n this.$confirm(msgConfirm).then((action) => {\n if (action === 'confirm') {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n // 更新服务器 Xml 文件\n this.xmlDataUpdate()\n })\n } else {\n return\n }\n })\n } else {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n // 更新服务器 Xml 文件\n // this.xmlDataUpdate();\n })\n }\n },\n // 删除\n deleteTextMedia(fileUrl, mediaFileName) {\n //加密,同步于创建图片变量中的 url 转化为 base64 的操作\n var enstr = this.$util.urlToStr.encrypt(fileUrl),\n typestrurl = 'MEDIATEXT' + enstr + 'mediaFileName' + mediaFileName,\n typeBlocks = this.workspace.getBlocksByType(typestrurl),\n typeBlocksLen = typeBlocks.length,\n msgConfirm = `要删除对该媒体变量的 ${typeBlocksLen} 个引用吗?`\n\n // 检测该变量是否还在使用\n if (typeBlocksLen) {\n // 弹窗是否要删除音频变量\n this.$confirm(msgConfirm).then((action) => {\n if (action === 'confirm') {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n\n // 更新服务器 Xml 文件\n this.xmlDataUpdate()\n })\n } else {\n return\n }\n })\n } else {\n this.mediaDeleteByKey(fileUrl, mediaFileName).then((/*result*/) => {\n // 删除 workspace 中的积木\n typeBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n // 更新服务器 Xml 文件\n // this.xmlDataUpdate();\n })\n }\n },\n // 删除服务器数据库中数据以及后续处理\n mediaDeleteByKey(fileUrl, mediaFileName) {\n let self = this,\n findMedia,\n clickTarget = this.elMedia,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n ),\n photoBaseUrl = this.photoBaseUrl,\n fileUrl_2 = fileUrl.replace(photoBaseUrl, '')\n\n findMedia = this.Media.find(\n (item) =>\n item &&\n (item.mediaFileUrl === fileUrl || item.mediaFileUrl === fileUrl_2)\n // &&item.mediaFileName === mediaFileName\n )\n // 数据库内删除图片\n return new Promise((resolve, reject) => {\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n\n\n if (findMedia != -1) {\n // 删除图片缓存数据\n\n let picTempList = self.picTempList.reduce(\n (total, item, index, arr) => {\n \n if (\n item &&\n item.mediaFileUrl === fileUrl &&\n item.mediaFileName == mediaFileName\n ) {\n clickTarget.click()\n\n setTimeout(() => {\n clickTarget.click()\n }, 200)\n } else {\n total.push(item)\n }\n // console.log(\"-----total\",total)\n return total\n },\n []\n )\n this.$forceUpdate()\n this.picTempList = picTempList\n this.$set(this, 'picTempList', picTempList) //更新数组\n // console.log('self.picTempList2', this.picTempList)\n self.$forceUpdate() //强制更新\n // 删除摄像头缓存数据\n self.camTempList.forEach((item, index, arr) => {\n if (\n item &&\n new RegExp(item.mediaFileUrl).test(fileUrl) &&\n item.mediaFileName == mediaFileName\n ) {\n clickTarget.click()\n arr.splice(index, 1)\n clickTarget.click()\n resolve()\n return index\n }\n })\n\n // 删除音频缓存数据\n self.audioTempList.forEach((item, index, arr) => {\n if (\n item &&\n item.mediaFileUrl == fileUrl &&\n item.mediaFileName == mediaFileName\n ) {\n clickTarget.click()\n arr.splice(index, 1)\n clickTarget.click()\n resolve()\n return index\n }\n })\n // 删除文本缓存数据\n self.textTempList.forEach((item, index, arr) => {\n if (\n item &&\n item.mediaFileUrl == fileUrl &&\n item.mediaFileName == mediaFileName\n ) {\n clickTarget.click()\n arr.splice(index, 1)\n clickTarget.click()\n resolve()\n return index\n }\n })\n }\n\n let data = {\n mediaId: findMedia.mediaId,\n mediaFileName: findMedia.mediaFileName,\n }\n if (this.trainingId) {\n //实训中心编辑器的逻辑删除api\n BLOCK.deleteMedia(data).then((result) => {\n if (result.isSuccess) {\n resolve(result)\n } else {\n reject(result)\n }\n })\n } else {\n //AI-T编辑器的删除api\n AI_EDITOR.deleteMedia(data).then((result) => {\n if (result.isSuccess) {\n resolve(result)\n } else {\n reject(result)\n }\n })\n }\n })\n },\n\n /**\n *\n *\n * 积木重命名功能操作\n * */\n //图片重命名\n renamePic(fileUrl, mediaFileName) {\n this.renamePicObj = { fileUrl, mediaFileName }\n this.renameCamObj = {}\n this.renameAudioObj = {}\n this.renameTextObj = {}\n this.popupActive = 'rename'\n },\n //摄像头重命名\n renameCam(fileUrl, mediaFileName) {\n this.renameCamObj = { fileUrl, mediaFileName }\n this.renamePicObj = {}\n this.renameAudioObj = {}\n this.renameTextObj = {}\n this.popupActive = 'rename'\n },\n //音频重命名\n renameAudio(fileUrl, mediaFileName) {\n this.renameCamObj = {}\n this.renamePicObj = {}\n this.renameTextObj = {}\n this.renameAudioObj = { fileUrl, mediaFileName }\n this.popupActive = 'rename'\n },\n //文本重命名\n renameText(fileUrl, mediaFileName) {\n this.renameCamObj = {}\n this.renamePicObj = {}\n this.renameAudioObj = {}\n this.renameTextObj = { fileUrl, mediaFileName }\n this.popupActive = 'rename'\n },\n //确定重命名\n async confirmReanme(runType) {\n let that = this\n this.popupActive = ''\n let reg_name = /[`~!@#$^&*()=|{}':;',\\\\[\\]<>/?~!@#¥……&*()——|{}【】';:\"\"'。,、?\\s0e]/g\n let renameVal = this.renameVal.replace(reg_name, ''),\n renamePicObj = this.renamePicObj,\n renameCamObj = this.renameCamObj,\n renameAudioObj = this.renameAudioObj,\n renameTextObj = this.renameTextObj,\n //获取需要重命名积木的对象\n renameObj = renamePicObj.mediaFileName\n ? renamePicObj\n : renameCamObj.mediaFileName\n ? renameCamObj\n : renameAudioObj.mediaFileName\n ? renameAudioObj\n : renameTextObj,\n renameLabel = renamePicObj.mediaFileName\n ? 'MEDIAPIC'\n : renameCamObj.mediaFileName\n ? 'MEDIACAM'\n : renameAudioObj.mediaFileName\n ? 'MEDIAAUDIO'\n : 'MEDIATEXT'\n // console.log('renameTextObj', renameTextObj)\n if (renameObj && renameObj.mediaFileName) {\n let enstr = this.$util.urlToStr.encrypt(renameObj.fileUrl),\n typestrurl =\n renameLabel + enstr + 'mediaFileName=' + renameObj.mediaFileName,\n newTypestrurl = renameLabel + enstr + 'mediaFileName=' + renameVal,\n typeBlocks = this.workspace.getBlocksByType(typestrurl),\n clickTarget = this.elMedia,\n typeBlocksLen = typeBlocks.length,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n )\n // let allBlocks2 = this.workspace.getAllBlocks();\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n //调用请求接口\n let res = await this.updateMediaBlock(renameObj, renameVal, renameLabel)\n //手动修改重命名\n if (res.isSuccess) {\n //图片重命名\n if (renameLabel == 'MEDIAPIC') {\n this.picTempList = this.picTempList.map((picTem) => {\n if (picTem.mediaFileUrl == renameObj.fileUrl) {\n picTem = {\n mediaFileName: renameVal,\n mediaFileUrl: picTem.mediaFileUrl,\n }\n }\n return picTem\n })\n } else if (renameLabel == 'MEDIACAM') {\n //摄像头重命名\n this.camTempList = this.camTempList.map((camTem) => {\n if (\n camTem.mediaFileUrl == renameObj.fileUrl &&\n camTem.mediaFileName == renameObj.mediaFileName\n ) {\n camTem = {\n mediaFileName: renameVal,\n mediaFileUrl: camTem.mediaFileUrl,\n }\n }\n return camTem\n })\n } else if (renameLabel == 'MEDIAAUDIO') {\n //音频重命名\n this.audioTempList = this.audioTempList.map((audioTem) => {\n if (audioTem.mediaFileUrl == renameObj.fileUrl) {\n audioTem = {\n mediaFileName: renameVal,\n mediaFileUrl: audioTem.mediaFileUrl,\n }\n }\n return audioTem\n })\n } else if (renameLabel == 'MEDIATEXT') {\n //文本重命名\n this.textTempList = this.textTempList.map((textTem) => {\n if (textTem.mediaFileUrl == renameObj.fileUrl) {\n textTem = {\n mediaFileName: renameVal,\n mediaFileUrl: textTem.mediaFileUrl,\n }\n }\n return textTem\n })\n }\n //如果工作台有该积木,进行工作台积木重命名\n if (typeBlocksLen) {\n typeBlocks.map((block) => {\n block.type = newTypestrurl\n })\n this.workspace.addTypedBlock(typeBlocks[0])\n\n // this.xmlDataUpdate();\n let workspaceXml = Blockly.Xml.workspaceToDom(this.workspace)\n let xmlText = workspaceXml.outerHTML //workspace XMl文本内容\n let allBlocks = this.workspace.getAllBlocks() //获取所有积木\n allBlocks.forEach((block) => {\n block.dispose(false, true)\n })\n // 对新的积木重新生成\n this.createBlocksByWorkspaceXML(xmlText)\n Blockly.Xml.domToWorkspace(workspaceXml, this.workspace)\n }\n this.coloursFlyoutCallback(/* workspace */) //创建媒体类型积木\n clickTarget.click()\n //两次点击\n // setTimeout(() => {\n clickTarget.click()\n // }, 100)\n }\n }\n },\n //修改媒体积木接口\n async updateMediaBlock(renameObj, rename) {\n var self = this,\n findMedia,\n fileUrl = renameObj.fileUrl,\n data,\n mediaId\n findMedia = this.Media.find(\n (item) => item && new RegExp(item.mediaFileUrl).test(fileUrl)\n )\n // console.log(' this.findMedia', findMedia)\n if (findMedia) {\n mediaId = findMedia.mediaId\n } else {\n console.log('mediaId为null')\n }\n\n data = {\n mediaId: mediaId,\n mediaFileName: rename,\n }\n if (this.trainingId) {\n return BLOCK.updateMedia(data)\n } else {\n return AI_EDITOR.updateMedia(data)\n }\n },\n\n /**\n *\n *\n * 摄像头功能处理\n * */\n //创建网络摄像头积木\n confirmNetCamera(netCamera) {\n this.popupActive = '' //关闭弹框\n var mediaFileName = netCamera.name || '摄像头'\n mediaFileName = mediaFileName.replace(/,/, '')\n mediaFileName = mediaFileName.replace(/,/, '')\n var mediaFileUrl = netCamera.url\n var clickTarget = this.elMedia,\n nodeList = document.querySelectorAll(\n '.blocklyTreeRow > .blocklyTreeLabel'\n ) //积木树列表?\n // 获取元素,再次定位媒体位置,做二次点击处理\n if (!clickTarget) {\n for (let i = 0, len = nodeList.length; i < len; i++) {\n let node = nodeList[i]\n if (node.textContent.indexOf('媒体') > -1) {\n this.elMedia = clickTarget = node.parentNode\n }\n }\n }\n let camItem = this.camTempList.filter((item) => {\n return (\n item.mediaFileName == mediaFileName &&\n item.mediaFileUrl == mediaFileUrl\n )\n })\n if (camItem.length > 0) {\n return this.$message.error('已有此摄像头积木,不能重复创建')\n }\n this.camTempList.push({\n mediaFileName: mediaFileName,\n mediaFileUrl: mediaFileUrl,\n })\n this.mediaUpload([\n {\n mediaFileName: mediaFileName,\n mediaFileUrl: mediaFileUrl,\n },\n ])\n //接着对camTempList监听处理,双击打开媒体类别工具箱;\n clickTarget.click()\n setTimeout(() => {\n clickTarget.click()\n }, 10)\n },\n }, // methods end\n}\n"],"sourceRoot":""}