Flex
2025-03-27 ecdc51057ba5d0e16ea2b27d32d24540b6bbcf48
修改模型人物视频上传
已修改4个文件
已添加1个文件
764 ■■■■■ 文件已修改
easegen-front/package-lock.json 499 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/package.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/vite.config.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/package-lock.json
@@ -10,10 +10,13 @@
      "license": "MIT",
      "dependencies": {
        "@element-plus/icons-vue": "^2.1.0",
        "@ffmpeg/ffmpeg": "^0.9.8",
        "@form-create/designer": "^3.2.6",
        "@form-create/element-ui": "^3.2.11",
        "@iconify/iconify": "^3.1.1",
        "@microsoft/fetch-event-source": "^2.0.1",
        "@tensorflow-models/body-pix": "^2.2.1",
        "@tensorflow/tfjs": "^3.21.0",
        "@videojs-player/vue": "^1.0.0",
        "@vueuse/core": "^10.9.0",
        "@wangeditor/editor": "^5.1.23",
@@ -70,6 +73,7 @@
      "devDependencies": {
        "@commitlint/cli": "^19.0.1",
        "@commitlint/config-conventional": "^19.0.0",
        "@ffmpeg/core": "^0.10.0",
        "@iconify/json": "^2.2.187",
        "@intlify/unplugin-vue-i18n": "^2.0.0",
        "@purge-icons/generated": "^0.9.0",
@@ -3070,6 +3074,34 @@
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/@ffmpeg/core": {
      "version": "0.10.0",
      "resolved": "https://registry.npmmirror.com/@ffmpeg/core/-/core-0.10.0.tgz",
      "integrity": "sha512-qunWJl5PezpXEm31tb8Qu5z37B5KVA1VYZCpXchMhuAb3X9T7PuE3SlhOwphEoRhzaOa3lpofDfzihAUMFaVPQ==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@ffmpeg/ffmpeg": {
      "version": "0.9.8",
      "resolved": "https://registry.npmmirror.com/@ffmpeg/ffmpeg/-/ffmpeg-0.9.8.tgz",
      "integrity": "sha512-QradleJx78hHJBtI1wRsus1L1jxQB3v4h6k8c3CERI9fssm+NSSppuofmsOei7uq7iQEYq3oK9tJNAyEsRoNng==",
      "license": "MIT",
      "dependencies": {
        "is-url": "^1.2.4",
        "node-fetch": "^2.6.1",
        "regenerator-runtime": "^0.13.7",
        "resolve-url": "^0.2.1"
      },
      "engines": {
        "node": ">=12.16.1"
      }
    },
    "node_modules/@ffmpeg/ffmpeg/node_modules/regenerator-runtime": {
      "version": "0.13.11",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
      "license": "MIT"
    },
    "node_modules/@floating-ui/core": {
      "version": "1.6.9",
      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz",
@@ -4182,6 +4214,394 @@
        "@swc/counter": "^0.1.3"
      }
    },
    "node_modules/@tensorflow-models/body-pix": {
      "version": "2.2.1",
      "resolved": "https://registry.npmmirror.com/@tensorflow-models/body-pix/-/body-pix-2.2.1.tgz",
      "integrity": "sha512-JeZHcpVMR0mW2znmF0FpZ0f7zpSY7c6+A7FBOmcIyZupTkXmG3MwGGqFPsVjRBwfqaKa4qYCJd7Svqo6rMzJYw==",
      "license": "Apache-2.0",
      "peerDependencies": {
        "@tensorflow/tfjs-backend-webgl": "^4.10.0",
        "@tensorflow/tfjs-converter": "^4.10.0",
        "@tensorflow/tfjs-core": "^4.10.0"
      }
    },
    "node_modules/@tensorflow/tfjs": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs/-/tfjs-3.21.0.tgz",
      "integrity": "sha512-khcARd3/872llL/oF4ouR40qlT71mylU66PGT8kHP/GJ5YKj44sv8lDRjU7lOVlJK7jsJFWEsNVHI3eMc/GWNQ==",
      "license": "Apache-2.0",
      "dependencies": {
        "@tensorflow/tfjs-backend-cpu": "3.21.0",
        "@tensorflow/tfjs-backend-webgl": "3.21.0",
        "@tensorflow/tfjs-converter": "3.21.0",
        "@tensorflow/tfjs-core": "3.21.0",
        "@tensorflow/tfjs-data": "3.21.0",
        "@tensorflow/tfjs-layers": "3.21.0",
        "argparse": "^1.0.10",
        "chalk": "^4.1.0",
        "core-js": "3",
        "regenerator-runtime": "^0.13.5",
        "yargs": "^16.0.3"
      },
      "bin": {
        "tfjs-custom-module": "dist/tools/custom_module/cli.js"
      }
    },
    "node_modules/@tensorflow/tfjs-backend-cpu": {
      "version": "4.22.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.22.0.tgz",
      "integrity": "sha512-1u0FmuLGuRAi8D2c3cocHTASGXOmHc/4OvoVDENJayjYkS119fcTcQf4iHrtLthWyDIPy3JiPhRrZQC9EwnhLw==",
      "license": "Apache-2.0",
      "peer": true,
      "dependencies": {
        "@types/seedrandom": "^2.4.28",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      },
      "peerDependencies": {
        "@tensorflow/tfjs-core": "4.22.0"
      }
    },
    "node_modules/@tensorflow/tfjs-backend-webgl": {
      "version": "4.22.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.22.0.tgz",
      "integrity": "sha512-H535XtZWnWgNwSzv538czjVlbJebDl5QTMOth4RXr2p/kJ1qSIXE0vZvEtO+5EC9b00SvhplECny2yDewQb/Yg==",
      "license": "Apache-2.0",
      "peer": true,
      "dependencies": {
        "@tensorflow/tfjs-backend-cpu": "4.22.0",
        "@types/offscreencanvas": "~2019.3.0",
        "@types/seedrandom": "^2.4.28",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      },
      "peerDependencies": {
        "@tensorflow/tfjs-core": "4.22.0"
      }
    },
    "node_modules/@tensorflow/tfjs-converter": {
      "version": "4.22.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-converter/-/tfjs-converter-4.22.0.tgz",
      "integrity": "sha512-PT43MGlnzIo+YfbsjM79Lxk9lOq6uUwZuCc8rrp0hfpLjF6Jv8jS84u2jFb+WpUeuF4K33ZDNx8CjiYrGQ2trQ==",
      "license": "Apache-2.0",
      "peer": true,
      "peerDependencies": {
        "@tensorflow/tfjs-core": "4.22.0"
      }
    },
    "node_modules/@tensorflow/tfjs-core": {
      "version": "4.22.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-core/-/tfjs-core-4.22.0.tgz",
      "integrity": "sha512-LEkOyzbknKFoWUwfkr59vSB68DMJ4cjwwHgicXN0DUi3a0Vh1Er3JQqCI1Hl86GGZQvY8ezVrtDIvqR1ZFW55A==",
      "license": "Apache-2.0",
      "peer": true,
      "dependencies": {
        "@types/long": "^4.0.1",
        "@types/offscreencanvas": "~2019.7.0",
        "@types/seedrandom": "^2.4.28",
        "@webgpu/types": "0.1.38",
        "long": "4.0.0",
        "node-fetch": "~2.6.1",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      }
    },
    "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": {
      "version": "2019.7.3",
      "resolved": "https://registry.npmmirror.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz",
      "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==",
      "license": "MIT",
      "peer": true
    },
    "node_modules/@tensorflow/tfjs-core/node_modules/node-fetch": {
      "version": "2.6.13",
      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.13.tgz",
      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "whatwg-url": "^5.0.0"
      },
      "engines": {
        "node": "4.x || >=6.0.0"
      },
      "peerDependencies": {
        "encoding": "^0.1.0"
      },
      "peerDependenciesMeta": {
        "encoding": {
          "optional": true
        }
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-backend-cpu": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.21.0.tgz",
      "integrity": "sha512-88S21UAdzyK0CsLUrH17GPTD+26E85OP9CqmLZslaWjWUmBkeTQ5Zqyp6iK+gELnLxPx6q7JsNEeFuPv4254lQ==",
      "license": "Apache-2.0",
      "dependencies": {
        "@types/seedrandom": "^2.4.28",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      },
      "peerDependencies": {
        "@tensorflow/tfjs-core": "3.21.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-backend-webgl": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.21.0.tgz",
      "integrity": "sha512-N4zitIAT9IX8B8oe489qM3f3VcESxGZIZvHmVP8varOQakTvTX859aaPo1s8hK1qCy4BjSGbweooZe4U8D4kTQ==",
      "license": "Apache-2.0",
      "dependencies": {
        "@tensorflow/tfjs-backend-cpu": "3.21.0",
        "@types/offscreencanvas": "~2019.3.0",
        "@types/seedrandom": "^2.4.28",
        "@types/webgl-ext": "0.0.30",
        "@types/webgl2": "0.0.6",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      },
      "peerDependencies": {
        "@tensorflow/tfjs-core": "3.21.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-converter": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz",
      "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==",
      "license": "Apache-2.0",
      "peerDependencies": {
        "@tensorflow/tfjs-core": "3.21.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-core": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz",
      "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==",
      "license": "Apache-2.0",
      "dependencies": {
        "@types/long": "^4.0.1",
        "@types/offscreencanvas": "~2019.3.0",
        "@types/seedrandom": "^2.4.28",
        "@types/webgl-ext": "0.0.30",
        "@webgpu/types": "0.1.16",
        "long": "4.0.0",
        "node-fetch": "~2.6.1",
        "seedrandom": "^3.0.5"
      },
      "engines": {
        "yarn": ">= 1.3.2"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-data": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-data/-/tfjs-data-3.21.0.tgz",
      "integrity": "sha512-eFLfw2wIcFNxnP2Iv/SnVlihehzKMumk1b5Prcx1ixk/SbkCo5u0Lt7OVOWaEOKVqvB2sT+dJcTjAh6lrCC/QA==",
      "license": "Apache-2.0",
      "dependencies": {
        "@types/node-fetch": "^2.1.2",
        "node-fetch": "~2.6.1",
        "string_decoder": "^1.3.0"
      },
      "peerDependencies": {
        "@tensorflow/tfjs-core": "3.21.0",
        "seedrandom": "^3.0.5"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-layers": {
      "version": "3.21.0",
      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.21.0.tgz",
      "integrity": "sha512-CMVXsraakXgnXEnqD9QbtResA7nvV7Jz20pGmjFIodcQkClgmFFhdCG5N+zlVRHEz7VKG2OyfhltZ0dBq/OAhA==",
      "license": "Apache-2.0 AND MIT",
      "peerDependencies": {
        "@tensorflow/tfjs-core": "3.21.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/@webgpu/types": {
      "version": "0.1.16",
      "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.16.tgz",
      "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==",
      "license": "BSD-3-Clause"
    },
    "node_modules/@tensorflow/tfjs/node_modules/ansi-styles": {
      "version": "4.3.0",
      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
      "license": "MIT",
      "dependencies": {
        "color-convert": "^2.0.1"
      },
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/argparse": {
      "version": "1.0.10",
      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz",
      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
      "license": "MIT",
      "dependencies": {
        "sprintf-js": "~1.0.2"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/chalk": {
      "version": "4.1.2",
      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
      "license": "MIT",
      "dependencies": {
        "ansi-styles": "^4.1.0",
        "supports-color": "^7.1.0"
      },
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/chalk/chalk?sponsor=1"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/cliui": {
      "version": "7.0.4",
      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
      "license": "ISC",
      "dependencies": {
        "string-width": "^4.2.0",
        "strip-ansi": "^6.0.0",
        "wrap-ansi": "^7.0.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/color-convert": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
      "license": "MIT",
      "dependencies": {
        "color-name": "~1.1.4"
      },
      "engines": {
        "node": ">=7.0.0"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/color-name": {
      "version": "1.1.4",
      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
      "license": "MIT"
    },
    "node_modules/@tensorflow/tfjs/node_modules/emoji-regex": {
      "version": "8.0.0",
      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
      "license": "MIT"
    },
    "node_modules/@tensorflow/tfjs/node_modules/is-fullwidth-code-point": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/node-fetch": {
      "version": "2.6.13",
      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.13.tgz",
      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
      "license": "MIT",
      "dependencies": {
        "whatwg-url": "^5.0.0"
      },
      "engines": {
        "node": "4.x || >=6.0.0"
      },
      "peerDependencies": {
        "encoding": "^0.1.0"
      },
      "peerDependenciesMeta": {
        "encoding": {
          "optional": true
        }
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/regenerator-runtime": {
      "version": "0.13.11",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
      "license": "MIT"
    },
    "node_modules/@tensorflow/tfjs/node_modules/string-width": {
      "version": "4.2.3",
      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
      "license": "MIT",
      "dependencies": {
        "emoji-regex": "^8.0.0",
        "is-fullwidth-code-point": "^3.0.0",
        "strip-ansi": "^6.0.1"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/wrap-ansi": {
      "version": "7.0.0",
      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
      "license": "MIT",
      "dependencies": {
        "ansi-styles": "^4.0.0",
        "string-width": "^4.1.0",
        "strip-ansi": "^6.0.0"
      },
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/yargs": {
      "version": "16.2.0",
      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
      "license": "MIT",
      "dependencies": {
        "cliui": "^7.0.2",
        "escalade": "^3.1.1",
        "get-caller-file": "^2.0.5",
        "require-directory": "^2.1.1",
        "string-width": "^4.2.0",
        "y18n": "^5.0.5",
        "yargs-parser": "^20.2.2"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/@tensorflow/tfjs/node_modules/yargs-parser": {
      "version": "20.2.9",
      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
      "license": "ISC",
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/@transloadit/prettier-bytes": {
      "version": "0.0.7",
      "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
@@ -4479,13 +4899,28 @@
        "@types/lodash": "*"
      }
    },
    "node_modules/@types/long": {
      "version": "4.0.2",
      "resolved": "https://registry.npmmirror.com/@types/long/-/long-4.0.2.tgz",
      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==",
      "license": "MIT"
    },
    "node_modules/@types/node": {
      "version": "20.14.11",
      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.11.tgz",
      "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
      "devOptional": true,
      "dependencies": {
        "undici-types": "~5.26.4"
      }
    },
    "node_modules/@types/node-fetch": {
      "version": "2.6.12",
      "resolved": "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.12.tgz",
      "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
      "license": "MIT",
      "dependencies": {
        "@types/node": "*",
        "form-data": "^4.0.0"
      }
    },
    "node_modules/@types/nprogress": {
@@ -4493,6 +4928,12 @@
      "resolved": "https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.3.tgz",
      "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==",
      "dev": true
    },
    "node_modules/@types/offscreencanvas": {
      "version": "2019.3.0",
      "resolved": "https://registry.npmmirror.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz",
      "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==",
      "license": "MIT"
    },
    "node_modules/@types/qrcode": {
      "version": "1.5.5",
@@ -4508,6 +4949,12 @@
      "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz",
      "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
      "dev": true
    },
    "node_modules/@types/seedrandom": {
      "version": "2.4.34",
      "resolved": "https://registry.npmmirror.com/@types/seedrandom/-/seedrandom-2.4.34.tgz",
      "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==",
      "license": "MIT"
    },
    "node_modules/@types/semver": {
      "version": "7.5.8",
@@ -4539,6 +4986,18 @@
      "version": "0.0.20",
      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
      "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
    },
    "node_modules/@types/webgl-ext": {
      "version": "0.0.30",
      "resolved": "https://registry.npmmirror.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
      "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==",
      "license": "MIT"
    },
    "node_modules/@types/webgl2": {
      "version": "0.0.6",
      "resolved": "https://registry.npmmirror.com/@types/webgl2/-/webgl2-0.0.6.tgz",
      "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==",
      "license": "MIT"
    },
    "node_modules/@typescript-eslint/eslint-plugin": {
      "version": "7.17.0",
@@ -6075,6 +6534,13 @@
        "snabbdom": "^3.1.0"
      }
    },
    "node_modules/@webgpu/types": {
      "version": "0.1.38",
      "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.38.tgz",
      "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==",
      "license": "BSD-3-Clause",
      "peer": true
    },
    "node_modules/@xmldom/xmldom": {
      "version": "0.8.10",
      "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
@@ -7370,7 +7836,6 @@
      "version": "3.37.1",
      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz",
      "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
      "dev": true,
      "hasInstallScript": true,
      "funding": {
        "type": "opencollective",
@@ -10290,7 +10755,6 @@
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
@@ -11873,6 +12337,12 @@
        "node": ">=0.8.0"
      }
    },
    "node_modules/long": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/long/-/long-4.0.0.tgz",
      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
      "license": "Apache-2.0"
    },
    "node_modules/lru-cache": {
      "version": "5.1.1",
      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -12467,7 +12937,6 @@
      "version": "2.7.0",
      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
      "dev": true,
      "dependencies": {
        "whatwg-url": "^5.0.0"
      },
@@ -14187,8 +14656,7 @@
      "version": "0.2.1",
      "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz",
      "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
      "deprecated": "https://github.com/lydell/resolve-url#deprecated",
      "dev": true
      "deprecated": "https://github.com/lydell/resolve-url#deprecated"
    },
    "node_modules/restore-cursor": {
      "version": "4.0.0",
@@ -14402,7 +14870,6 @@
      "version": "5.2.1",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
      "dev": true,
      "funding": [
        {
          "type": "github",
@@ -14521,6 +14988,12 @@
      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
      "dev": true
    },
    "node_modules/seedrandom": {
      "version": "3.0.5",
      "resolved": "https://registry.npmmirror.com/seedrandom/-/seedrandom-3.0.5.tgz",
      "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
      "license": "MIT"
    },
    "node_modules/selection-update": {
      "version": "0.1.2",
@@ -15048,7 +15521,6 @@
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
      "dev": true,
      "dependencies": {
        "safe-buffer": "~5.2.0"
      }
@@ -15520,7 +15992,6 @@
      "version": "7.2.0",
      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
      "dev": true,
      "dependencies": {
        "has-flag": "^4.0.0"
      },
@@ -16161,8 +16632,7 @@
    "node_modules/tr46": {
      "version": "0.0.3",
      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
      "dev": true
      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
    },
    "node_modules/traverse": {
      "version": "0.6.9",
@@ -16376,8 +16846,7 @@
    "node_modules/undici-types": {
      "version": "5.26.5",
      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
      "devOptional": true
      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
    },
    "node_modules/unicode-canonical-property-names-ecmascript": {
      "version": "2.0.0",
@@ -17408,8 +17877,7 @@
    "node_modules/webidl-conversions": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
      "dev": true
      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
    },
    "node_modules/webpack-sources": {
      "version": "3.2.3",
@@ -17430,7 +17898,6 @@
      "version": "5.0.0",
      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
      "dev": true,
      "dependencies": {
        "tr46": "~0.0.3",
        "webidl-conversions": "^3.0.0"
easegen-front/package.json
@@ -25,6 +25,9 @@
    "lint:lint-staged": "lint-staged -c "
  },
  "dependencies": {
    "@ffmpeg/ffmpeg": "^0.9.8",
    "@tensorflow-models/body-pix": "^2.2.1",
    "@tensorflow/tfjs": "^3.21.0",
    "@element-plus/icons-vue": "^2.1.0",
    "@form-create/designer": "^3.2.6",
    "@form-create/element-ui": "^3.2.11",
@@ -101,6 +104,7 @@
    "@vitejs/plugin-legacy": "^5.3.1",
    "@vitejs/plugin-vue": "^5.0.4",
    "@vitejs/plugin-vue-jsx": "^3.1.0",
    "@ffmpeg/core": "^0.10.0",
    "autoprefixer": "^10.4.17",
    "bpmn-js": "8.9.0",
    "bpmn-js-properties-panel": "0.46.0",
easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
<template>
    <div>
        <input type="file" @change="handleFileChange" accept="video/*" />
        <div> è¯·ä¸Šä¼  <span style="color: red;" >mp4</span> æ ¼å¼æ–‡ä»¶ </div>
    </div>
</template>
<script setup>
import { onMounted, ref } from 'vue';
import * as bodyPix from '@tensorflow-models/body-pix';
import '@tensorflow/tfjs-backend-webgl';
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
import * as FileApi from '@/api/infra/file'
import CryptoJS from 'crypto-js'
// import { UploadRawFile, UploadRequestOptions } from 'element-plus/es/components/upload/src/upload'
import axios from 'axios'
// å®šä¹‰å“åº”式变量
const net = ref(null);
const downloadUrl = ref(null);
const ffmpeg = ref(null);
const videoElement = ref(null);
const canvas = ref(null);
const ctx = ref(null);
const frameRate = ref(30);
const frameDuration = ref(1000 / 30);
const segments = ref([]);
const getUploadUrl= ref("")
// æ–‡ä»¶åç§°
const fileName = ref("")
// æ–‡ä»¶ç±»åž‹
const fileType = ref("")
const emit = defineEmits(['Thnd','start'])
onMounted(async () => {
    /**
 * èŽ·å¾—ä¸Šä¼  URL
 */
    getUploadUrl.value = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/infra/file/upload';
    ffmpeg.value = createFFmpeg({ log: true });
    await ffmpeg.value.load();
    net.value = await bodyPix.load({
        architecture: 'MobileNetV1',
        outputStride: 16,
        multiplier: 0.5,
        quantizationBytes: 2
    });
});
const handleFileChange = (e) => {
    const file = e.target.files[0];
    if (file) {
        emit('start')
        fileName.value = file.name
        fileType.value = file.type
        handleVideoProcessing(file);
    }
};
const handleVideoProcessing = async (file) => {
    videoElement.value = document.createElement('video');
    videoElement.value.muted = true;
    videoElement.value.src = URL.createObjectURL(file);
    await new Promise((resolve, reject) => {
        videoElement.value.onloadedmetadata = () => {
            videoElement.value.play();
            resolve();
        };
        videoElement.value.onerror = () => {
            reject(new Error('视频加载失败'));
        };
    });
    canvas.value = document.createElement('canvas');
    canvas.value.width = 640;
    canvas.value.height = 480;
    ctx.value = canvas.value.getContext('2d');
    segments.value = [];
    processFrame();
};
const processFrame = async () => {
    if (videoElement.value.currentTime < videoElement.value.duration) {
        ctx.value.clearRect(0, 0, canvas.value.width, canvas.value.height);
        ctx.value.drawImage(videoElement.value, 0, 0, canvas.value.width, canvas.value.height);
        const imageData = ctx.value.getImageData(0, 0, canvas.value.width, canvas.value.height);
        const data = imageData.data;
        for (let i = 0; i < data.length; i += 4) {
            const r = data[i];
            const g = data[i + 1];
            const b = data[i + 2];
            if (g > r + 30 && g > b + 30) {
                data[i + 3] = 0;
            }
        }
        ctx.value.putImageData(imageData, 0, 0);
        const segment = canvas.value.toDataURL('image/png');
        segments.value.push(segment);
        await new Promise((resolve) => setTimeout(resolve, frameDuration.value));
        processFrame();
    } else {
        processSegments(segments.value, frameRate.value);
    }
};
const processSegments = async (segments, frameRate) => {
    const blobUrls = [];
    for (let i = 0; i < segments.length; i++) {
        const data = segments[i].split(',')[1];
        const byteCharacters = atob(data);
        const byteNumbers = new Array(byteCharacters.length);
        for (let j = 0; j < byteCharacters.length; j++) {
            byteNumbers[j] = byteCharacters.charCodeAt(j);
        }
        const byteArray = new Uint8Array(byteNumbers);
        const blob = new Blob([byteArray], { type: 'image/png' });
        const blobUrl = URL.createObjectURL(blob);
        blobUrls.push(blobUrl);
        await ffmpeg.value.FS('writeFile', `frame${i.toString().padStart(3, '0')}.png`, await fetchFile(blobUrl));
    }
    const originalVideoBlob = await fetch(videoElement.value.src).then(response => response.blob());
    await ffmpeg.value.FS('writeFile', 'original_video.mp4', await fetchFile(originalVideoBlob));
    await ffmpeg.value.run('-i', 'original_video.mp4', '-vn', '-acodec', 'copy', 'audio.aac');
    await ffmpeg.value.run('-framerate', frameRate.toString(), '-i', 'frame%03d.png', '-i', 'audio.aac', '-c:v', 'prores_ks', '-pix_fmt', 'yuva444p10le', '-profile:v', '4444', '-c:a', 'copy', 'output.mov');
    const data = ffmpeg.value.FS('readFile', 'output.mov');
    const processedBlob = new Blob([data.buffer], { type: 'video/quicktime' });
    transToFile( processedBlob, fileName.value, fileType.value ).then( res => {
        emit( 'Thnd', res )
    } )
};
const transToFile = async(blob, fileName, fileType) => {
    return new window.File([blob], fileName, {type: fileType})
}
</script>
<style>
input[type="file"] {
  /* åŸºæœ¬æ ·å¼ */
  border: none;
  background-color: #007bff;
  border-radius: 5px;
  cursor: pointer;
  width: 76px;
  /* éšè—æ–‡ä»¶å */
  color: transparent;
  /* æ”¯æŒæ‰€æœ‰æµè§ˆå™¨è®¾ç½®å­—体颜色透明 */
  &::file-selector-button { color: white }       /* æ ‡å‡†è¯­æ³• */
  &::-webkit-file-upload-button { color: white } /* Chrome/Safari */
  &::-moz-file-upload-button { color: white }    /* Firefox */
}
/* ç»Ÿä¸€æŒ‰é’®æ ·å¼ */
input[type="file"]::file-selector-button {
  background: transparent;
  border: none;
  padding: 8px 12px;
  margin: -8px -12px; /* æŠµæ¶ˆå®¹å™¨çš„padding */
  font: inherit;
}
/* æµè§ˆå™¨å…¼å®¹æ€§å¤„理 */
input[type="file"]::-webkit-file-upload-button {
  background: transparent;
  border: none;
  padding: 8px 12px;
  margin: -8px -12px;
  font: inherit;
}
input[type="file"]::-moz-file-upload-button {
  background: transparent;
  border: none;
  padding: 8px 12px;
  margin: -8px -12px;
  font: inherit;
}
input{
    padding: 8px 12px;
}
</style>
easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue
@@ -10,7 +10,7 @@
      <el-form-item :label="t('digitalhumans.name')" prop="name">
        <el-input v-model="formData.name" :placeholder="t('common.inputText') + t('digitalhumans.name')" />
      </el-form-item>
      <el-form-item :label="t('digitalhumans.code')" prop="code">
      <el-form-item :label="t('digitalhumans.code')" prop="code" v-if="false" > // å½“前数字人视频的编码类型
        <el-input v-model="formData.code" :placeholder="t('common.inputText') + t('digitalhumans.code')" />
      </el-form-item>
      <el-form-item :label="t('digitalhumans.gender')" prop="gender">
@@ -23,7 +23,7 @@
          />
        </el-select>
      </el-form-item>
      <el-form-item :label="t('digitalhumans.useModel')" prop="useModel">
      <el-form-item :label="t('digitalhumans.useModel')" prop="useModel" v-if="false" > //数字人模式选择框
        <el-select v-model="formData.useModel" :placeholder="t('common.selectText')+t('digitalhumans.useModel')">
          <el-option
            v-for="dict in getIntDictOptions(DICT_TYPE.USE_MODEL)"
@@ -38,7 +38,15 @@
        <UploadImg v-else v-model="formData.pictureUrl" />
      </el-form-item>
      <el-form-item v-if="formData.useModel == 2" :label="t('digitalhumans.video')" prop="videoUrl">
        <UploadFile v-if="!(formData.videoUrl || formData.fixVideoUrl)" v-model="formData.videoUrl" :fileType="['mp4']" :limit="1" @on-success="handleFileSuccess('videoUrl', $event)"/>
        <!-- åŽŸæœ¬è‡ªå¸¦çš„è§†é¢‘ä¸Šä¼  -->
        <!-- <UploadFile v-if="!(formData.videoUrl || formData.fixVideoUrl)" v-model="formData.videoUrl" :fileType="['mp4']" :limit="1" @on-success="handleFileSuccess('videoUrl', $event)"/> -->
        <!-- åŽæœŸæ·»åŠ çš„åŽ»é™¤ç»¿å¹•çš„ -->
        <div v-if="!(formData.videoUrl || formData.fixVideoUrl)" >
          <CES2 @start="StartCes" @Thnd="End" />
          <div style="color: red;" v-show="isUploading"  >
              å½“前正在处理并上传中,请耐心等待...
          </div>
        </div>
        <video-player v-if="formData.videoUrl || formData.fixVideoUrl" :property="videoProperty"/>
      </el-form-item>
<!--      <el-form-item :label="抠图标识" prop="matting">
@@ -73,7 +81,7 @@
      </el-form-item>
    </el-form>
    <template #footer>
      <el-button @click="submitForm" type="primary" :disabled="formLoading">{{t('common.ok')}}</el-button>
      <el-button @click="submitForm" type="primary" :disabled="formLoading" :loading="isUploading" >{{t('common.ok')}}</el-button>
      <el-button @click="dialogVisible = false">{{t('common.cancel')}}</el-button>
    </template>
  </Dialog>
@@ -84,10 +92,15 @@
import VideoPlayer from "@/components/DiyEditor/components/mobile/VideoPlayer/index.vue";
import {DiyComponent} from "@/components/DiyEditor/util";
import {VideoPlayerProperty} from "@/components/DiyEditor/components/mobile/VideoPlayer/config";
import { useUpload } from '@/components/UploadFile/src/useUpload'
import { el } from 'element-plus/es/locale';
import CES2 from './CES2.vue'
import { any } from 'vue-types';
const { t } = useI18n() // å›½é™…化
const message = useMessage() // æ¶ˆæ¯å¼¹çª—
const { uploadUrl, httpRequest } = useUpload() //上传方法
const dialogVisible = ref(false) // å¼¹çª—的是否展示
const dialogTitle = ref('') // å¼¹çª—的标题
const formLoading = ref(false) // è¡¨å•的加载中:1)修改时的数据加载;2)提交的按钮禁用
@@ -110,6 +123,9 @@
  useModel: undefined,
  status: undefined,
})
// å½“前是否正在上传视频
const isUploading = ref(false)
const videoProperty = {
  videoUrl: '',
@@ -142,6 +158,24 @@
})
const formRef = ref() // è¡¨å• Ref
const StartCes = () => {
  console.log( " ----- å¼€å§‹ ----- " )
  isUploading.value = true
}
const End = (res)=>{
  const FileObject = {
    file:res
  }
  httpRequest( FileObject ).then( response =>{
    console.log(response)
    formData.value.videoUrl = response.data;
  } ).finally( res => {
    isUploading.value = false
  } )
}
/** æ‰“开弹窗 */
const open = async (type: string, id?: number) => {
  dialogVisible.value = true
@@ -156,6 +190,8 @@
    } finally {
      formLoading.value = false
    }
  }else{
    InitHumMODEL()
  }
}
defineExpose({ open }) // æä¾› open æ–¹æ³•,用于打开弹窗
@@ -211,4 +247,17 @@
    formData.value.videoUrl = response.data;
  }
};
// ä¿®æ”¹é»˜è®¤çš„æ•°å­—人视频模式为视频
const InitHumMODEL = ()=>{
  let ModelList = getIntDictOptions( DICT_TYPE.USE_MODEL )
  for (let index = 0; index < ModelList.length; index++) {
    const element = ModelList[index];
    if( element.label === "视频" ){
      formData.value.useModel = Number( element.value )
    }
  }
}
</script>
easegen-front/vite.config.ts
@@ -3,6 +3,11 @@
import {loadEnv} from 'vite'
import {createVitePlugins} from './build/vite'
import {exclude, include} from "./build/vite/optimize"
import vue from '@vitejs/plugin-vue';
import { defineConfig } from 'vite';
// å½“前执行node命令时文件夹的地址(工作目录)
const root = process.cwd()
@@ -12,6 +17,7 @@
}
// https://vitejs.dev/config/
// defineConfig为后续添加
export default ({command, mode}: ConfigEnv): UserConfig => {
    let env = {} as any
    const isBuild = command === 'build'
@@ -28,6 +34,11 @@
            port: env.VITE_PORT, // ç«¯å£å·
            host: "0.0.0.0",
            open: env.VITE_OPEN === 'true',
            headers: {
                "Cross-Origin-Opener-Policy": "same-origin", // ä¿æŠ¤ä½ çš„æºç«™ç‚¹å…å—攻击
                "Cross-Origin-Embedder-Policy": "require-corp", // ä¿æŠ¤å—害者免受你的源站点的影响
            },
            // æœ¬åœ°è·¨åŸŸä»£ç†. ç›®å‰æ³¨é‡Šçš„原因:暂时没有用途,server ç«¯å·²ç»æ”¯æŒè·¨åŸŸ
            // proxy: {
            //   ['/admin-api']: {
@@ -40,6 +51,9 @@
        },
        // é¡¹ç›®ä½¿ç”¨çš„vite插件。 å•独提取到build/vite/plugin中管理
        plugins: createVitePlugins(),
        // plugins: [vue(), ...createVitePlugins()],
        css: {
            preprocessorOptions: {
                scss: {
@@ -81,5 +95,6 @@
            },
        },
        optimizeDeps: {include, exclude}
    }
}