diff --git a/培训计划/课程体系0.1/website/dist/index.html b/培训计划/课程体系0.1/website/dist/index.html index 4705d9a..47b7b54 100644 --- a/培训计划/课程体系0.1/website/dist/index.html +++ b/培训计划/课程体系0.1/website/dist/index.html @@ -12,8 +12,8 @@ - - + +
diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping b/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping deleted file mode 100644 index 4131186..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@" - ret=$? -else - node "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping b/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping new file mode 120000 index 0000000..8e9a12d --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping @@ -0,0 +1 @@ +../baseline-browser-mapping/dist/cli.cjs \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping.cmd deleted file mode 100644 index 1661e18..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/baseline-browser-mapping.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\baseline-browser-mapping\dist\cli.cjs" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\baseline-browser-mapping\dist\cli.cjs" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/.bin/browserslist deleted file mode 100644 index 1df3f2a..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/browserslist +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../browserslist/cli.js" "$@" - ret=$? -else - node "$basedir/../browserslist/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/.bin/browserslist new file mode 120000 index 0000000..3cd991b --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../browserslist/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/browserslist.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/browserslist.cmd deleted file mode 100644 index e4006d7..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/browserslist.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\browserslist\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\browserslist\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/esbuild b/培训计划/课程体系0.1/website/node_modules/.bin/esbuild deleted file mode 100644 index 43ec011..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/esbuild +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@" - ret=$? -else - node "$basedir/../esbuild/bin/esbuild" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/esbuild b/培训计划/课程体系0.1/website/node_modules/.bin/esbuild new file mode 120000 index 0000000..c83ac07 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/esbuild @@ -0,0 +1 @@ +../esbuild/bin/esbuild \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/esbuild.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/esbuild.cmd deleted file mode 100644 index edc708f..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/esbuild.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\esbuild\bin\esbuild" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\esbuild\bin\esbuild" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/jsesc b/培训计划/课程体系0.1/website/node_modules/.bin/jsesc deleted file mode 100644 index e59ea43..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/jsesc +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../jsesc/bin/jsesc" "$@" - ret=$? -else - node "$basedir/../jsesc/bin/jsesc" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/jsesc b/培训计划/课程体系0.1/website/node_modules/.bin/jsesc new file mode 120000 index 0000000..7237604 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/jsesc @@ -0,0 +1 @@ +../jsesc/bin/jsesc \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/jsesc.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/jsesc.cmd deleted file mode 100644 index 66206ea..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/jsesc.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\jsesc\bin\jsesc" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\jsesc\bin\jsesc" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/json5 b/培训计划/课程体系0.1/website/node_modules/.bin/json5 deleted file mode 100644 index 71e29db..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/json5 +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../json5/lib/cli.js" "$@" - ret=$? -else - node "$basedir/../json5/lib/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/json5 b/培训计划/课程体系0.1/website/node_modules/.bin/json5 new file mode 120000 index 0000000..217f379 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/json5 @@ -0,0 +1 @@ +../json5/lib/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/json5.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/json5.cmd deleted file mode 100644 index 4ef655f..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/json5.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\json5\lib\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\json5\lib\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify deleted file mode 100644 index 0939216..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../loose-envify/cli.js" "$@" - ret=$? -else - node "$basedir/../loose-envify/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify new file mode 120000 index 0000000..ed9009c --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify @@ -0,0 +1 @@ +../loose-envify/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify.cmd deleted file mode 100644 index 6238bbb..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/loose-envify.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\loose-envify\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\loose-envify\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/nanoid b/培训计划/课程体系0.1/website/node_modules/.bin/nanoid deleted file mode 100644 index 68cab08..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/nanoid +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@" - ret=$? -else - node "$basedir/../nanoid/bin/nanoid.cjs" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/nanoid b/培训计划/课程体系0.1/website/node_modules/.bin/nanoid new file mode 120000 index 0000000..e2be547 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/nanoid @@ -0,0 +1 @@ +../nanoid/bin/nanoid.cjs \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/nanoid.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/nanoid.cmd deleted file mode 100644 index 0c47873..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/nanoid.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\nanoid\bin\nanoid.cjs" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\nanoid\bin\nanoid.cjs" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/.bin/parser deleted file mode 100644 index 5925785..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/.bin/parser new file mode 120000 index 0000000..ce7bf97 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/parser @@ -0,0 +1 @@ +../@babel/parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/parser.cmd deleted file mode 100644 index bbadb81..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\@babel\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\@babel\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/rollup b/培训计划/课程体系0.1/website/node_modules/.bin/rollup deleted file mode 100644 index e1c7fee..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/rollup +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../rollup/dist/bin/rollup" "$@" - ret=$? -else - node "$basedir/../rollup/dist/bin/rollup" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/rollup b/培训计划/课程体系0.1/website/node_modules/.bin/rollup new file mode 120000 index 0000000..5939621 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/rollup @@ -0,0 +1 @@ +../rollup/dist/bin/rollup \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/rollup.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/rollup.cmd deleted file mode 100644 index 066c669..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/rollup.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\rollup\dist\bin\rollup" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\rollup\dist\bin\rollup" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/.bin/semver deleted file mode 100644 index 6f6e6c7..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/semver +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" - ret=$? -else - node "$basedir/../semver/bin/semver.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/.bin/semver new file mode 120000 index 0000000..5aaadf4 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/semver.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/semver.cmd deleted file mode 100644 index 152bc92..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\semver\bin\semver.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\semver\bin\semver.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db b/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db deleted file mode 100644 index abcf449..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@" - ret=$? -else - node "$basedir/../update-browserslist-db/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db b/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db new file mode 120000 index 0000000..b11e16f --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db.cmd deleted file mode 100644 index ea181fb..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/update-browserslist-db.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\update-browserslist-db\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\update-browserslist-db\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/vite b/培训计划/课程体系0.1/website/node_modules/.bin/vite deleted file mode 100644 index bd16ac5..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/vite +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../vite/bin/vite.js" "$@" - ret=$? -else - node "$basedir/../vite/bin/vite.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/vite b/培训计划/课程体系0.1/website/node_modules/.bin/vite new file mode 120000 index 0000000..6d1e3be --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/.bin/vite @@ -0,0 +1 @@ +../vite/bin/vite.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.bin/vite.cmd b/培训计划/课程体系0.1/website/node_modules/.bin/vite.cmd deleted file mode 100644 index 05862ed..0000000 --- a/培训计划/课程体系0.1/website/node_modules/.bin/vite.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\vite\bin\vite.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\vite\bin\vite.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/.yarn-integrity b/培训计划/课程体系0.1/website/node_modules/.yarn-integrity index 75becef..664626e 100644 --- a/培训计划/课程体系0.1/website/node_modules/.yarn-integrity +++ b/培训计划/课程体系0.1/website/node_modules/.yarn-integrity @@ -1,5 +1,5 @@ { - "systemParams": "win32-x64-137", + "systemParams": "darwin-arm64-137", "modulesFolders": [ "node_modules" ], diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 deleted file mode 100644 index 07f7222..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../json5/lib/cli.js" "$@" - ret=$? -else - node "$basedir/../../../../json5/lib/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 new file mode 120000 index 0000000..ea74765 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5 @@ -0,0 +1 @@ +../../../../json5/lib/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5.cmd deleted file mode 100644 index 703b4d1..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/json5.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\json5\lib\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\json5\lib\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser deleted file mode 100644 index 193dfce..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser new file mode 120000 index 0000000..97a06c3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser.cmd deleted file mode 100644 index dca173e..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver deleted file mode 100644 index db6dc54..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../semver/bin/semver.js" "$@" - ret=$? -else - node "$basedir/../../../../semver/bin/semver.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver new file mode 120000 index 0000000..501bb2f --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver @@ -0,0 +1 @@ +../../../../semver/bin/semver.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver.cmd deleted file mode 100644 index f59d3aa..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/core/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\semver\bin\semver.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\semver\bin\semver.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc deleted file mode 100644 index f2b89a0..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../jsesc/bin/jsesc" "$@" - ret=$? -else - node "$basedir/../../../../jsesc/bin/jsesc" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc new file mode 120000 index 0000000..dac89cf --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc @@ -0,0 +1 @@ +../../../../jsesc/bin/jsesc \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc.cmd deleted file mode 100644 index 98cb70b..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/jsesc.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\jsesc\bin\jsesc" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\jsesc\bin\jsesc" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser deleted file mode 100644 index 193dfce..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser new file mode 120000 index 0000000..97a06c3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser.cmd deleted file mode 100644 index dca173e..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/generator/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist deleted file mode 100644 index 636a5e0..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../browserslist/cli.js" "$@" - ret=$? -else - node "$basedir/../../../../browserslist/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist new file mode 120000 index 0000000..93881e3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../../../../browserslist/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist.cmd deleted file mode 100644 index 1cbc3dd..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\browserslist\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\browserslist\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver deleted file mode 100644 index db6dc54..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../semver/bin/semver.js" "$@" - ret=$? -else - node "$basedir/../../../../semver/bin/semver.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver new file mode 120000 index 0000000..501bb2f --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver @@ -0,0 +1 @@ +../../../../semver/bin/semver.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver.cmd deleted file mode 100644 index f59d3aa..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\semver\bin\semver.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\semver\bin\semver.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/parser/bin/babel-parser.js b/培训计划/课程体系0.1/website/node_modules/@babel/parser/bin/babel-parser.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser deleted file mode 100644 index 193dfce..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser new file mode 120000 index 0000000..97a06c3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser.cmd deleted file mode 100644 index dca173e..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/template/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser deleted file mode 100644 index 193dfce..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser new file mode 120000 index 0000000..97a06c3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser.cmd deleted file mode 100644 index dca173e..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@babel/traverse/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/README.md b/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/README.md deleted file mode 100644 index a99ee7c..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# esbuild - -This is the Windows 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details. diff --git a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/esbuild.exe b/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/esbuild.exe deleted file mode 100644 index 000370f..0000000 Binary files a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/esbuild.exe and /dev/null differ diff --git a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/package.json b/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/package.json deleted file mode 100644 index 94abf8c..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@esbuild/win32-x64/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@esbuild/win32-x64", - "version": "0.21.5", - "description": "The Windows 64-bit binary for esbuild, a JavaScript bundler.", - "repository": { - "type": "git", - "url": "git+https://github.com/evanw/esbuild.git" - }, - "license": "MIT", - "preferUnplugged": true, - "engines": { - "node": ">=12" - }, - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] -} diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/README.md b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/README.md deleted file mode 100644 index e8a624b..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@rollup/rollup-win32-x64-gnu` - -This is the **x86_64-pc-windows-gnu** binary for `rollup` diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/package.json b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/package.json deleted file mode 100644 index 27d753b..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@rollup/rollup-win32-x64-gnu", - "version": "4.62.4", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ], - "files": [ - "rollup.win32-x64-gnu.node" - ], - "description": "Native bindings for Rollup", - "author": "Lukas Taegert-Atkinson", - "homepage": "https://rollupjs.org/", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rollup/rollup.git" - }, - "main": "./rollup.win32-x64-gnu.node" -} \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/rollup.win32-x64-gnu.node b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/rollup.win32-x64-gnu.node deleted file mode 100644 index f4d4620..0000000 Binary files a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-gnu/rollup.win32-x64-gnu.node and /dev/null differ diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/README.md b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/README.md deleted file mode 100644 index 7382dbc..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@rollup/rollup-win32-x64-msvc` - -This is the **x86_64-pc-windows-msvc** binary for `rollup` diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/package.json b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/package.json deleted file mode 100644 index 3ea256b..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@rollup/rollup-win32-x64-msvc", - "version": "4.62.4", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ], - "files": [ - "rollup.win32-x64-msvc.node" - ], - "description": "Native bindings for Rollup", - "author": "Lukas Taegert-Atkinson", - "homepage": "https://rollupjs.org/", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rollup/rollup.git" - }, - "main": "./rollup.win32-x64-msvc.node" -} \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/rollup.win32-x64-msvc.node b/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/rollup.win32-x64-msvc.node deleted file mode 100644 index 3adaf63..0000000 Binary files a/培训计划/课程体系0.1/website/node_modules/@rollup/rollup-win32-x64-msvc/rollup.win32-x64-msvc.node and /dev/null differ diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/README.md b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/README.md index 5121fc3..3e4c024 100644 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/README.md +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/README.md @@ -1,15 +1,15 @@ -# Installation -> `npm install --save @types/babel__core` - -# Summary -This package contains type definitions for @babel/core (https://github.com/babel/babel/tree/master/packages/babel-core). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core. - -### Additional Details - * Last updated: Mon, 20 Nov 2023 23:36:23 GMT - * Dependencies: [@babel/parser](https://npmjs.com/package/@babel/parser), [@babel/types](https://npmjs.com/package/@babel/types), [@types/babel__generator](https://npmjs.com/package/@types/babel__generator), [@types/babel__template](https://npmjs.com/package/@types/babel__template), [@types/babel__traverse](https://npmjs.com/package/@types/babel__traverse) - -# Credits -These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Melvin Groenhoff](https://github.com/mgroenhoff), [Jessica Franco](https://github.com/Jessidhia), and [Ifiok Jr.](https://github.com/ifiokjr). +# Installation +> `npm install --save @types/babel__core` + +# Summary +This package contains type definitions for @babel/core (https://github.com/babel/babel/tree/master/packages/babel-core). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core. + +### Additional Details + * Last updated: Mon, 20 Nov 2023 23:36:23 GMT + * Dependencies: [@babel/parser](https://npmjs.com/package/@babel/parser), [@babel/types](https://npmjs.com/package/@babel/types), [@types/babel__generator](https://npmjs.com/package/@types/babel__generator), [@types/babel__template](https://npmjs.com/package/@types/babel__template), [@types/babel__traverse](https://npmjs.com/package/@types/babel__traverse) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Melvin Groenhoff](https://github.com/mgroenhoff), [Jessica Franco](https://github.com/Jessidhia), and [Ifiok Jr.](https://github.com/ifiokjr). diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser deleted file mode 100644 index eae8720..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser new file mode 120000 index 0000000..80dcbd3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../../@babel/parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser.cmd deleted file mode 100644 index c6e1c47..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__core/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\@babel\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\@babel\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__generator/README.md b/培训计划/课程体系0.1/website/node_modules/@types/babel__generator/README.md index c8b10df..8bb78e4 100644 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__generator/README.md +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__generator/README.md @@ -1,15 +1,15 @@ -# Installation -> `npm install --save @types/babel__generator` - -# Summary -This package contains type definitions for @babel/generator (https://github.com/babel/babel/tree/master/packages/babel-generator). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__generator. - -### Additional Details - * Last updated: Thu, 03 Apr 2025 16:02:41 GMT - * Dependencies: [@babel/types](https://npmjs.com/package/@babel/types) - -# Credits -These definitions were written by [Troy Gerwien](https://github.com/yortus), [Melvin Groenhoff](https://github.com/mgroenhoff), [Cameron Yan](https://github.com/khell), and [Lyanbin](https://github.com/Lyanbin). +# Installation +> `npm install --save @types/babel__generator` + +# Summary +This package contains type definitions for @babel/generator (https://github.com/babel/babel/tree/master/packages/babel-generator). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__generator. + +### Additional Details + * Last updated: Thu, 03 Apr 2025 16:02:41 GMT + * Dependencies: [@babel/types](https://npmjs.com/package/@babel/types) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Melvin Groenhoff](https://github.com/mgroenhoff), [Cameron Yan](https://github.com/khell), and [Lyanbin](https://github.com/Lyanbin). diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/README.md b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/README.md index 63be156..bc4ea0b 100644 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/README.md +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/README.md @@ -1,15 +1,15 @@ -# Installation -> `npm install --save @types/babel__template` - -# Summary -This package contains type definitions for @babel/template (https://github.com/babel/babel/tree/master/packages/babel-template). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__template. - -### Additional Details - * Last updated: Mon, 06 Nov 2023 22:41:04 GMT - * Dependencies: [@babel/parser](https://npmjs.com/package/@babel/parser), [@babel/types](https://npmjs.com/package/@babel/types) - -# Credits -These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Melvin Groenhoff](https://github.com/mgroenhoff), and [ExE Boss](https://github.com/ExE-Boss). +# Installation +> `npm install --save @types/babel__template` + +# Summary +This package contains type definitions for @babel/template (https://github.com/babel/babel/tree/master/packages/babel-template). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__template. + +### Additional Details + * Last updated: Mon, 06 Nov 2023 22:41:04 GMT + * Dependencies: [@babel/parser](https://npmjs.com/package/@babel/parser), [@babel/types](https://npmjs.com/package/@babel/types) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Melvin Groenhoff](https://github.com/mgroenhoff), and [ExE Boss](https://github.com/ExE-Boss). diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser deleted file mode 100644 index eae8720..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -else - node "$basedir/../../../../@babel/parser/bin/babel-parser.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser new file mode 120000 index 0000000..80dcbd3 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser @@ -0,0 +1 @@ +../../../../@babel/parser/bin/babel-parser.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser.cmd b/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser.cmd deleted file mode 100644 index c6e1c47..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__template/node_modules/.bin/parser.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\@babel\parser\bin\babel-parser.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\@babel\parser\bin\babel-parser.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@types/babel__traverse/README.md b/培训计划/课程体系0.1/website/node_modules/@types/babel__traverse/README.md index 1c572f7..40fd89f 100644 --- a/培训计划/课程体系0.1/website/node_modules/@types/babel__traverse/README.md +++ b/培训计划/课程体系0.1/website/node_modules/@types/babel__traverse/README.md @@ -1,15 +1,15 @@ -# Installation -> `npm install --save @types/babel__traverse` - -# Summary -This package contains type definitions for @babel/traverse (https://github.com/babel/babel/tree/main/packages/babel-traverse). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__traverse. - -### Additional Details - * Last updated: Thu, 31 Jul 2025 21:02:30 GMT - * Dependencies: [@babel/types](https://npmjs.com/package/@babel/types) - -# Credits -These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Ryan Petrich](https://github.com/rpetrich), [Melvin Groenhoff](https://github.com/mgroenhoff), [Dean L.](https://github.com/dlgrit), [Ifiok Jr.](https://github.com/ifiokjr), [ExE Boss](https://github.com/ExE-Boss), and [Daniel Tschinder](https://github.com/danez). +# Installation +> `npm install --save @types/babel__traverse` + +# Summary +This package contains type definitions for @babel/traverse (https://github.com/babel/babel/tree/main/packages/babel-traverse). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__traverse. + +### Additional Details + * Last updated: Thu, 31 Jul 2025 21:02:30 GMT + * Dependencies: [@babel/types](https://npmjs.com/package/@babel/types) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Ryan Petrich](https://github.com/rpetrich), [Melvin Groenhoff](https://github.com/mgroenhoff), [Dean L.](https://github.com/dlgrit), [Ifiok Jr.](https://github.com/ifiokjr), [ExE Boss](https://github.com/ExE-Boss), and [Daniel Tschinder](https://github.com/danez). diff --git a/培训计划/课程体系0.1/website/node_modules/@types/estree/README.md b/培训计划/课程体系0.1/website/node_modules/@types/estree/README.md index eda7980..3e3e70f 100644 --- a/培训计划/课程体系0.1/website/node_modules/@types/estree/README.md +++ b/培训计划/课程体系0.1/website/node_modules/@types/estree/README.md @@ -1,15 +1,15 @@ -# Installation -> `npm install --save @types/estree` - -# Summary -This package contains type definitions for estree (https://github.com/estree/estree). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree. - -### Additional Details - * Last updated: Wed, 06 May 2026 21:01:00 GMT - * Dependencies: none - -# Credits -These definitions were written by [RReverser](https://github.com/RReverser). +# Installation +> `npm install --save @types/estree` + +# Summary +This package contains type definitions for estree (https://github.com/estree/estree). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree. + +### Additional Details + * Last updated: Wed, 06 May 2026 21:01:00 GMT + * Dependencies: none + +# Credits +These definitions were written by [RReverser](https://github.com/RReverser). diff --git a/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite b/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite deleted file mode 100644 index 7f43292..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../vite/bin/vite.js" "$@" - ret=$? -else - node "$basedir/../../../../vite/bin/vite.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite b/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite new file mode 120000 index 0000000..77b278a --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite @@ -0,0 +1 @@ +../../../../vite/bin/vite.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite.cmd b/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite.cmd deleted file mode 100644 index d1742a9..0000000 --- a/培训计划/课程体系0.1/website/node_modules/@vitejs/plugin-react/node_modules/.bin/vite.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\vite\bin\vite.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\vite\bin\vite.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/baseline-browser-mapping/dist/cli.cjs b/培训计划/课程体系0.1/website/node_modules/baseline-browser-mapping/dist/cli.cjs old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/cli.js b/培训计划/课程体系0.1/website/node_modules/browserslist/cli.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping deleted file mode 100644 index 4e9638f..0000000 --- a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../baseline-browser-mapping/dist/cli.cjs" "$@" - ret=$? -else - node "$basedir/../../../baseline-browser-mapping/dist/cli.cjs" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping new file mode 120000 index 0000000..4ffcf18 --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping @@ -0,0 +1 @@ +../../../baseline-browser-mapping/dist/cli.cjs \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping.cmd b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping.cmd deleted file mode 100644 index cf75d44..0000000 --- a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/baseline-browser-mapping.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\baseline-browser-mapping\dist\cli.cjs" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\baseline-browser-mapping\dist\cli.cjs" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db deleted file mode 100644 index 16e2f0b..0000000 --- a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../update-browserslist-db/cli.js" "$@" - ret=$? -else - node "$basedir/../../../update-browserslist-db/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db new file mode 120000 index 0000000..693117f --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../../../update-browserslist-db/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db.cmd b/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db.cmd deleted file mode 100644 index 1aac078..0000000 --- a/培训计划/课程体系0.1/website/node_modules/browserslist/node_modules/.bin/update-browserslist-db.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\update-browserslist-db\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\update-browserslist-db\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/esbuild/bin/esbuild b/培训计划/课程体系0.1/website/node_modules/esbuild/bin/esbuild old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/jsesc/bin/jsesc b/培训计划/课程体系0.1/website/node_modules/jsesc/bin/jsesc old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/json5/lib/cli.js b/培训计划/课程体系0.1/website/node_modules/json5/lib/cli.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/loose-envify/cli.js b/培训计划/课程体系0.1/website/node_modules/loose-envify/cli.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/nanoid/bin/nanoid.cjs b/培训计划/课程体系0.1/website/node_modules/nanoid/bin/nanoid.cjs old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid b/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid deleted file mode 100644 index a99c574..0000000 --- a/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../nanoid/bin/nanoid.cjs" "$@" - ret=$? -else - node "$basedir/../../../nanoid/bin/nanoid.cjs" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid b/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid new file mode 120000 index 0000000..7b4e5ad --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid @@ -0,0 +1 @@ +../../../nanoid/bin/nanoid.cjs \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid.cmd b/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid.cmd deleted file mode 100644 index 2dd3724..0000000 --- a/培训计划/课程体系0.1/website/node_modules/postcss/node_modules/.bin/nanoid.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\nanoid\bin\nanoid.cjs" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\nanoid\bin\nanoid.cjs" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify deleted file mode 100644 index d96b002..0000000 --- a/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -else - node "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify new file mode 120000 index 0000000..2a6b8df --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify @@ -0,0 +1 @@ +../../../loose-envify/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify.cmd b/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify.cmd deleted file mode 100644 index 0bd2734..0000000 --- a/培训计划/课程体系0.1/website/node_modules/react-dom/node_modules/.bin/loose-envify.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\loose-envify\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\loose-envify\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify deleted file mode 100644 index d96b002..0000000 --- a/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -else - node "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify new file mode 120000 index 0000000..2a6b8df --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify @@ -0,0 +1 @@ +../../../loose-envify/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify.cmd b/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify.cmd deleted file mode 100644 index 0bd2734..0000000 --- a/培训计划/课程体系0.1/website/node_modules/react/node_modules/.bin/loose-envify.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\loose-envify\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\loose-envify\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/rollup/dist/bin/rollup b/培训计划/课程体系0.1/website/node_modules/rollup/dist/bin/rollup old mode 100644 new mode 100755 index 4c3d5f5..b7a80e6 --- a/培训计划/课程体系0.1/website/node_modules/rollup/dist/bin/rollup +++ b/培训计划/课程体系0.1/website/node_modules/rollup/dist/bin/rollup @@ -1246,76 +1246,76 @@ yargsParser.camelCase = camelCase; yargsParser.decamelize = decamelize; yargsParser.looksLikeNumber = looksLikeNumber; -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ - - -function __addDisposableResource(env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; - -} - -var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -function __disposeResources(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + +function __addDisposableResource(env, value, async) { + if (value !== null && value !== void 0) { + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); + var dispose, inner; + if (async) { + if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); + dispose = value[Symbol.asyncDispose]; + } + if (dispose === void 0) { + if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); + dispose = value[Symbol.dispose]; + if (async) inner = dispose; + } + if (typeof dispose !== "function") throw new TypeError("Object not disposable."); + if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; + env.stack.push({ value: value, dispose: dispose, async: async }); + } + else if (async) { + env.stack.push({ async: true }); + } + return value; + +} + +var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +function __disposeResources(env) { + function fail(e) { + env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; + env.hasError = true; + } + var r, s = 0; + function next() { + while (r = env.stack.pop()) { + try { + if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); + if (r.dispose) { + var result = r.dispose.call(r.value); + if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + else s |= 1; + } + catch (e) { + fail(e); + } + } + if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); + if (env.hasError) throw env.error; + } + return next(); } const toZeroIfInfinity = value => Number.isFinite(value) ? value : 0; diff --git a/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify deleted file mode 100644 index d96b002..0000000 --- a/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -else - node "$basedir/../../../loose-envify/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify b/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify new file mode 120000 index 0000000..2a6b8df --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify @@ -0,0 +1 @@ +../../../loose-envify/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify.cmd b/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify.cmd deleted file mode 100644 index 0bd2734..0000000 --- a/培训计划/课程体系0.1/website/node_modules/scheduler/node_modules/.bin/loose-envify.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\loose-envify\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\loose-envify\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/semver/bin/semver.js b/培训计划/课程体系0.1/website/node_modules/semver/bin/semver.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/cli.js b/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/cli.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist deleted file mode 100644 index 08f728a..0000000 --- a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../browserslist/cli.js" "$@" - ret=$? -else - node "$basedir/../../../browserslist/cli.js" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist b/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist new file mode 120000 index 0000000..c4cc06e --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../../../browserslist/cli.js \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist.cmd b/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist.cmd deleted file mode 100644 index 8aea94d..0000000 --- a/培训计划/课程体系0.1/website/node_modules/update-browserslist-db/node_modules/.bin/browserslist.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\browserslist\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\browserslist\cli.js" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/vite/bin/vite.js b/培训计划/课程体系0.1/website/node_modules/vite/bin/vite.js old mode 100644 new mode 100755 diff --git a/培训计划/课程体系0.1/website/node_modules/vite/dist/node/chunks/dep-BB45zftN.js b/培训计划/课程体系0.1/website/node_modules/vite/dist/node/chunks/dep-BB45zftN.js index b96cb15..0fef701 100644 --- a/培训计划/课程体系0.1/website/node_modules/vite/dist/node/chunks/dep-BB45zftN.js +++ b/培训计划/课程体系0.1/website/node_modules/vite/dist/node/chunks/dep-BB45zftN.js @@ -263,83 +263,83 @@ pify$1.all = pify$1; var pifyExports = pify$2.exports; -var fs = require$$0__default; -var path$3 = require$$0; -var pify = pifyExports; - -var stat = pify(fs.stat); -var readFile = pify(fs.readFile); -var resolve = path$3.resolve; - -var cache = Object.create(null); - -function convert(content, encoding) { - if (Buffer.isEncoding(encoding)) { - return content.toString(encoding); - } - return content; -} - -readCache$1.exports = function (path, encoding) { - path = resolve(path); - - return stat(path).then(function (stats) { - var item = cache[path]; - - if (item && item.mtime.getTime() === stats.mtime.getTime()) { - return convert(item.content, encoding); - } - - return readFile(path).then(function (data) { - cache[path] = { - mtime: stats.mtime, - content: data - }; - - return convert(data, encoding); - }); - }).catch(function (err) { - cache[path] = null; - return Promise.reject(err); - }); -}; - -readCache$1.exports.sync = function (path, encoding) { - path = resolve(path); - - try { - var stats = fs.statSync(path); - var item = cache[path]; - - if (item && item.mtime.getTime() === stats.mtime.getTime()) { - return convert(item.content, encoding); - } - - var data = fs.readFileSync(path); - - cache[path] = { - mtime: stats.mtime, - content: data - }; - - return convert(data, encoding); - } catch (err) { - cache[path] = null; - throw err; - } - -}; - -readCache$1.exports.get = function (path, encoding) { - path = resolve(path); - if (cache[path]) { - return convert(cache[path].content, encoding); - } - return null; -}; - -readCache$1.exports.clear = function () { - cache = Object.create(null); +var fs = require$$0__default; +var path$3 = require$$0; +var pify = pifyExports; + +var stat = pify(fs.stat); +var readFile = pify(fs.readFile); +var resolve = path$3.resolve; + +var cache = Object.create(null); + +function convert(content, encoding) { + if (Buffer.isEncoding(encoding)) { + return content.toString(encoding); + } + return content; +} + +readCache$1.exports = function (path, encoding) { + path = resolve(path); + + return stat(path).then(function (stats) { + var item = cache[path]; + + if (item && item.mtime.getTime() === stats.mtime.getTime()) { + return convert(item.content, encoding); + } + + return readFile(path).then(function (data) { + cache[path] = { + mtime: stats.mtime, + content: data + }; + + return convert(data, encoding); + }); + }).catch(function (err) { + cache[path] = null; + return Promise.reject(err); + }); +}; + +readCache$1.exports.sync = function (path, encoding) { + path = resolve(path); + + try { + var stats = fs.statSync(path); + var item = cache[path]; + + if (item && item.mtime.getTime() === stats.mtime.getTime()) { + return convert(item.content, encoding); + } + + var data = fs.readFileSync(path); + + cache[path] = { + mtime: stats.mtime, + content: data + }; + + return convert(data, encoding); + } catch (err) { + cache[path] = null; + throw err; + } + +}; + +readCache$1.exports.get = function (path, encoding) { + path = resolve(path); + if (cache[path]) { + return convert(cache[path].content, encoding); + } + return null; +}; + +readCache$1.exports.clear = function () { + cache = Object.create(null); }; var readCacheExports = readCache$1.exports; diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild deleted file mode 100644 index b294b8f..0000000 --- a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../esbuild/bin/esbuild" "$@" - ret=$? -else - node "$basedir/../../../esbuild/bin/esbuild" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild new file mode 120000 index 0000000..f83b9ce --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild @@ -0,0 +1 @@ +../../../esbuild/bin/esbuild \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild.cmd b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild.cmd deleted file mode 100644 index 1db0f40..0000000 --- a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/esbuild.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\esbuild\bin\esbuild" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\esbuild\bin\esbuild" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup deleted file mode 100644 index fc87690..0000000 --- a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../rollup/dist/bin/rollup" "$@" - ret=$? -else - node "$basedir/../../../rollup/dist/bin/rollup" "$@" - ret=$? -fi -exit $ret diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup new file mode 120000 index 0000000..de0b20f --- /dev/null +++ b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup @@ -0,0 +1 @@ +../../../rollup/dist/bin/rollup \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup.cmd b/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup.cmd deleted file mode 100644 index 65e9cb3..0000000 --- a/培训计划/课程体系0.1/website/node_modules/vite/node_modules/.bin/rollup.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\rollup\dist\bin\rollup" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\rollup\dist\bin\rollup" %* -) \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/server/accounts.json b/培训计划/课程体系0.1/website/server/accounts.json index fe51488..a0c5774 100644 --- a/培训计划/课程体系0.1/website/server/accounts.json +++ b/培训计划/课程体系0.1/website/server/accounts.json @@ -1 +1,55 @@ -[] +[ + { + "id": "UMT3UBTG35", + "username": "13800001234", + "name": "阿云", + "contact": "13800001234", + "identities": [ + "opc_member|certified" + ], + "createdAt": "2026-08-22T03:50:36.243Z" + }, + { + "id": "UMT3UC3DME", + "username": "13800005678", + "name": "阿云", + "contact": "13800005678", + "identities": [ + "opc_member|certified" + ], + "createdAt": "2026-08-22T03:50:49.114Z" + }, + { + "id": "UMT3UEAXK1", + "username": "wx_9dcdd0bfa433a4fd43fe22ea", + "wxId": "wx_9dcdd0bfa433a4fd43fe22ea", + "phone": "", + "name": "微信用户", + "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132", + "phoneBound": false, + "identities": [ + "wx" + ], + "createdAt": "2026-08-22T03:52:32.216Z" + }, + { + "id": "UMT3UPOU3S", + "username": "13800009999", + "name": "测试", + "contact": "13800009999", + "identities": [ + "opc_member|certified" + ], + "createdAt": "2026-08-22T04:01:23.451Z" + }, + { + "id": "UMT3V4ARNH", + "username": "13800007777", + "name": "测", + "contact": "13800007777", + "identities": [ + "opc_member|certified" + ], + "createdAt": "2026-08-22T04:12:45.059Z" + } +] \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/server/bookings.json b/培训计划/课程体系0.1/website/server/bookings.json index fe51488..0637a08 100644 --- a/培训计划/课程体系0.1/website/server/bookings.json +++ b/培训计划/课程体系0.1/website/server/bookings.json @@ -1 +1 @@ -[] +[] \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/server/events.json b/培训计划/课程体系0.1/website/server/events.json index 80b90a8..15b557c 100644 --- a/培训计划/课程体系0.1/website/server/events.json +++ b/培训计划/课程体系0.1/website/server/events.json @@ -3,13 +3,17 @@ "id": "E-F001", "type": "free", "title": "AI 让民宿主每月省 10 小时", - "subtitle": "民宿 / 文旅创业 · 主题分享", + "subtitle": "民宿 / 文旅创业 · 线下公益课", "desc": "拆解民宿经营里的重复劳动,AI 怎么接住(点到即止,不卖课)", - "location": "线上直播(视频号)", + "location": "视频号直播", "link": "", "startAt": "2026-08-27T19:30:00+08:00", "durationMin": 90, - "status": "open" + "status": "open", + "mode": "online", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-S001", @@ -21,31 +25,43 @@ "link": "", "startAt": "2026-08-29T14:00:00+08:00", "durationMin": 180, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-F002", "type": "free", "title": "用 AI 做云南咖啡品牌", - "subtitle": "咖啡 / 农特产创业 · 主题分享", + "subtitle": "咖啡 / 农特产创业 · 线下公益课", "desc": "云南咖啡现状 + 品牌从 0 到 1 + AI 内容打法", - "location": "线上直播(视频号)", + "location": "昆明市大学生创业园", "link": "", "startAt": "2026-09-03T19:30:00+08:00", "durationMin": 90, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-F003", "type": "free", "title": "一人公司财税避坑入门", - "subtitle": "自由职业 / 小老板 · 主题分享", + "subtitle": "自由职业 / 小老板 · 线下公益课", "desc": "常见财税坑、发票、成本票、申报节点", - "location": "线上直播(视频号)", + "location": "视频号直播", "link": "", "startAt": "2026-09-10T19:30:00+08:00", "durationMin": 90, - "status": "open" + "status": "open", + "mode": "online", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-S002", @@ -57,19 +73,27 @@ "link": "", "startAt": "2026-09-12T14:00:00+08:00", "durationMin": 180, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-F004", "type": "free", "title": "你适不适合创业?先做一次 OPC 测评", - "subtitle": "大众 · 主题分享", + "subtitle": "大众 · 线下公益课", "desc": "适配 6 维速览 + 现场 30 题快速测评", - "location": "线上直播(视频号)", + "location": "昆明市大学生创业园", "link": "", "startAt": "2026-09-17T19:30:00+08:00", "durationMin": 90, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-S003", @@ -81,7 +105,11 @@ "link": "", "startAt": "2026-09-26T14:00:00+08:00", "durationMin": 180, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 }, { "id": "E-S004", @@ -93,6 +121,10 @@ "link": "", "startAt": "2026-09-27T14:00:00+08:00", "durationMin": 180, - "status": "open" + "status": "open", + "mode": "offline", + "host": "云超服 · OPC 培训", + "image": "", + "capacity": 0 } ] \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/server/mock-api.mjs b/培训计划/课程体系0.1/website/server/mock-api.mjs index 7209285..ccc4c77 100644 --- a/培训计划/课程体系0.1/website/server/mock-api.mjs +++ b/培训计划/课程体系0.1/website/server/mock-api.mjs @@ -34,14 +34,14 @@ const hash = (s) => createHash('sha256').update(String(s)).digest('hex'); // 排期种子(对齐 宣传与运营/07 主题表;首次运行写入 events.json) seedIfEmpty('events', [ - { id: 'E-F001', type: 'free', title: 'AI 让民宿主每月省 10 小时', subtitle: '民宿 / 文旅创业 · 主题分享', desc: '拆解民宿经营里的重复劳动,AI 怎么接住(点到即止,不卖课)', location: '线上直播(视频号)', link: '', startAt: '2026-08-27T19:30:00+08:00', durationMin: 90, status: 'open' }, - { id: 'E-S001', type: 'salon', title: '民宿 AI 化改造实战', subtitle: '交流沙龙 · 12–30 人小场', desc: '主题深谈 + AI 现场演示 + 1 对 1 快诊', location: '昆明市大学生创业园', link: '', startAt: '2026-08-29T14:00:00+08:00', durationMin: 180, status: 'open' }, - { id: 'E-F002', type: 'free', title: '用 AI 做云南咖啡品牌', subtitle: '咖啡 / 农特产创业 · 主题分享', desc: '云南咖啡现状 + 品牌从 0 到 1 + AI 内容打法', location: '线上直播(视频号)', link: '', startAt: '2026-09-03T19:30:00+08:00', durationMin: 90, status: 'open' }, - { id: 'E-F003', type: 'free', title: '一人公司财税避坑入门', subtitle: '自由职业 / 小老板 · 主题分享', desc: '常见财税坑、发票、成本票、申报节点', location: '线上直播(视频号)', link: '', startAt: '2026-09-10T19:30:00+08:00', durationMin: 90, status: 'open' }, - { id: 'E-S002', type: 'salon', title: '技能打包:把手艺变成产品', subtitle: '交流沙龙 · 副业转型专场', desc: '工作坊 + 快诊,把你的技能变成可定价产品', location: '昆明市大学生创业园', link: '', startAt: '2026-09-12T14:00:00+08:00', durationMin: 180, status: 'open' }, - { id: 'E-F004', type: 'free', title: '你适不适合创业?先做一次 OPC 测评', subtitle: '大众 · 主题分享', desc: '适配 6 维速览 + 现场 30 题快速测评', location: '线上直播(视频号)', link: '', startAt: '2026-09-17T19:30:00+08:00', durationMin: 90, status: 'open' }, - { id: 'E-S003', type: 'salon', title: 'OPC 测评报告 1 对 1 解读专场', subtitle: '交流沙龙 · 测评者组场', desc: '每人 15 分钟快诊,读懂你的类型码与赛道', location: '昆明市大学生创业园', link: '', startAt: '2026-09-26T14:00:00+08:00', durationMin: 180, status: 'open' }, - { id: 'E-S004', type: 'salon', title: '资源对接夜:能提供 × 需要', subtitle: '交流沙龙 · 综合场', desc: '供需现场配对,本地人脉面对面', location: '昆明市大学生创业园', link: '', startAt: '2026-09-27T14:00:00+08:00', durationMin: 180, status: 'open' } + { id: 'E-F001', type: 'free', mode: 'online', title: 'AI 让民宿主每月省 10 小时', subtitle: '民宿 / 文旅创业 · 公益课', desc: '拆解民宿经营里的重复劳动,AI 怎么接住(点到即止,不卖课)', location: '视频号直播', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-08-27T19:30:00+08:00', durationMin: 90, capacity: 0, status: 'open' }, + { id: 'E-S001', type: 'salon', mode: 'offline', title: '民宿 AI 化改造实战', subtitle: '交流沙龙 · 12–30 人小场', desc: '主题深谈 + AI 现场演示 + 1 对 1 快诊', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-08-29T14:00:00+08:00', durationMin: 180, capacity: 30, status: 'open' }, + { id: 'E-F002', type: 'free', mode: 'offline', title: '用 AI 做云南咖啡品牌', subtitle: '咖啡 / 农特产创业 · 公益课', desc: '云南咖啡现状 + 品牌从 0 到 1 + AI 内容打法', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-03T19:30:00+08:00', durationMin: 90, capacity: 60, status: 'open' }, + { id: 'E-F003', type: 'free', mode: 'online', title: '一人公司财税避坑入门', subtitle: '自由职业 / 小老板 · 公益课', desc: '常见财税坑、发票、成本票、申报节点', location: '视频号直播', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-10T19:30:00+08:00', durationMin: 90, capacity: 0, status: 'open' }, + { id: 'E-S002', type: 'salon', mode: 'offline', title: '技能打包:把手艺变成产品', subtitle: '交流沙龙 · 副业转型专场', desc: '工作坊 + 快诊,把你的技能变成可定价产品', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-12T14:00:00+08:00', durationMin: 180, capacity: 24, status: 'open' }, + { id: 'E-F004', type: 'free', mode: 'offline', title: '你适不适合创业?先做一次 OPC 测评', subtitle: '大众 · 公益课', desc: '适配 6 维速览 + 现场 30 题快速测评', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-17T19:30:00+08:00', durationMin: 90, capacity: 60, status: 'open' }, + { id: 'E-S003', type: 'salon', mode: 'offline', title: 'OPC 测评报告 1 对 1 解读专场', subtitle: '交流沙龙 · 测评者组场', desc: '每人 15 分钟快诊,读懂你的类型码与赛道', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-26T14:00:00+08:00', durationMin: 180, capacity: 20, status: 'open' }, + { id: 'E-S004', type: 'salon', mode: 'offline', title: '资源对接夜:能提供 × 需要', subtitle: '交流沙龙 · 综合场', desc: '供需现场配对,本地人脉面对面', location: '昆明市大学生创业园', host: '云超服 · OPC 培训', image: '', link: '', startAt: '2026-09-27T14:00:00+08:00', durationMin: 180, capacity: 30, status: 'open' } ]); const b64url = (buf) => Buffer.from(buf).toString('base64url'); @@ -269,6 +269,9 @@ export async function mockApi(req, res, next) { contact: acct.username, // 手机号即联系方式 statusLabel: String(body.status || '').trim(), want: body.want || '', + eventId: String(body.eventId || '').trim(), + eventTitle: String(body.eventTitle || '').trim(), + eventStart: String(body.eventStart || '').trim(), topics: Array.isArray(body.topics) ? body.topics : [], question: body.question || '', source: body.source || '' @@ -301,9 +304,21 @@ export async function mockApi(req, res, next) { const next = upcoming[0] || null; return json(res, 200, { ok: true, next, free, salon, upcoming: upcoming.slice(0, 6) }); } + // 可报名场次:未结束/未关闭的最近场次(报名页选择用) + if (q.get('bookable')) { + const list = upcoming.filter((e) => e.status !== 'closed' && e.status !== 'done').slice(0, 30); + return json(res, 200, { ok: true, list }); + } return json(res, 200, { ok: true, list: all }); } + /* ---------------- 公开:活动详情 ---------------- */ + if (resName === 'events' && method === 'GET' && id) { + const e = loadAll('events').find((x) => x.id === id); + if (!e) return json(res, 404, { ok: false, error: '活动不存在' }); + return json(res, 200, { ok: true, event: e }); + } + /* ---------------- 公开:上报测评结果 ---------------- */ if (resName === 'tests' && method === 'POST' && !id) { const body = (await readBody(req)) || {}; @@ -359,6 +374,97 @@ export async function mockApi(req, res, next) { return json(res, 200, { ok: true, id: entry.id }); } + /* ---------------- 公开:上报 OPC 创业伙伴调研 ---------------- */ + if (resName === 'survey-logs' && method === 'POST' && !id) { + const body = (await readBody(req)) || {}; + if (!body.answers || typeof body.answers !== 'object') { + return json(res, 400, { ok: false, error: '缺少调研答案' }); + } + const entry = { + id: genId('S'), + createdAt: new Date().toISOString(), + username: String(body.username || '').trim(), + source: String(body.source || '').trim() || 'web', + answers: body.answers + }; + add('surveyLogs', entry); + return json(res, 200, { ok: true, id: entry.id, createdAt: entry.createdAt }); + } + + /* ---------------- 用户端:微信登录 / 我的 / 绑定手机 ---------------- */ + // POST /api/auth/wx-login { code, nickName, avatarUrl } → 微信一键登录 + // 演示:未接微信 appid/secret,用 code 哈希作伪 openid(真实环境换成 code→openid 换号) + if (resName === 'auth' && sub === 'wx-login' && method === 'POST') { + const body = (await readBody(req)) || {}; + const code = String(body.code || ''); + if (!code) return json(res, 400, { ok: false, error: '缺少微信登录凭证' }); + const wxId = 'wx_' + hash(code + '::wx').slice(0, 24); + let acct = loadAll('accounts').find((a) => a.wxId === wxId); + if (!acct) { + const name = String(body.nickName || '').trim() || '微信用户'; + acct = { + id: genId('U'), username: wxId, wxId, phone: '', name, avatar: String(body.avatarUrl || ''), + phoneBound: false, identities: ['wx'], createdAt: new Date().toISOString() + }; + add('accounts', acct); + } + return json(res, 200, { + ok: true, token: makeToken(acct.username), username: acct.username, + name: acct.name || '微信用户', avatar: acct.avatar || '', phoneBound: !!acct.phoneBound + }); + } + // GET /api/auth/me { auth } → 当前账号信息 + if (resName === 'auth' && sub === 'me' && method === 'GET') { + const payload = requireAuth(req, res); if (!payload) return; + const acct = loadAll('accounts').find((a) => a.username === payload.username); + if (!acct) return json(res, 404, { ok: false, error: '账号不存在' }); + return json(res, 200, { + ok: true, + user: { username: acct.username, name: acct.name || acct.username, avatar: acct.avatar || '', phone: acct.phone || '', phoneBound: !!acct.phoneBound } + }); + } + // POST /api/auth/bind-phone { phone, code } { auth } → 绑定手机 + if (resName === 'auth' && sub === 'bind-phone' && method === 'POST') { + const payload = requireAuth(req, res); if (!payload) return; + const body = (await readBody(req)) || {}; + const phone = String(body.phone || '').trim(); + const code = String(body.code || '').trim(); + if (!PHONE_RE.test(phone)) return json(res, 400, { ok: false, error: '请输入正确的 11 位手机号' }); + const rec = smsCodes.get(phone); + if (!rec || rec.code !== code || Date.now() > rec.exp) return json(res, 401, { ok: false, error: '验证码错误或已过期' }); + smsCodes.delete(phone); + const acct = loadAll('accounts').find((a) => a.username === payload.username); + if (!acct) return json(res, 404, { ok: false, error: '账号不存在' }); + update('accounts', acct.id, { phone, phoneBound: true }); + return json(res, 200, { ok: true, phoneBound: true, phone }); + } + + /* ---------------- 用户端:我的报名 / 签到(需登录) ---------------- */ + if (resName === 'bookings' && sub === 'mine' && method === 'GET') { + const payload = requireAuth(req, res); if (!payload) return; + const acct = loadAll('accounts').find((a) => a.username === payload.username); + // 匹配:微信账号本身 + 绑定手机号(两者都可能产生报名) + const ids = new Set([payload.username]); + if (acct && acct.phone) ids.add(acct.phone); + const list = loadAll('bookings') + .filter((b) => ids.has(b.username) || ids.has(b.contact || '')) + .sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); + return json(res, 200, { ok: true, list }); + } + if (resName === 'checkins' && method === 'POST' && !id) { + const payload = requireAuth(req, res); if (!payload) return; + const body = (await readBody(req)) || {}; + const acct = loadAll('accounts').find((a) => a.username === payload.username); + const ids = new Set([payload.username]); + if (acct && acct.phone) ids.add(acct.phone); + const b = loadAll('bookings').find((x) => x.id === body.bookingId); + if (!b) return json(res, 404, { ok: false, error: '报名记录不存在' }); + if (!ids.has(b.username) && !ids.has(b.contact || '')) return json(res, 403, { ok: false, error: '无权操作该记录' }); + if (b.checkinAt) return json(res, 400, { ok: false, error: '该场次已签到' }); + const updated = update('bookings', b.id, { checkinAt: new Date().toISOString() }); + return json(res, 200, { ok: true, entry: updated }); + } + /* ================ 以下为管理端点(需登录) ================ */ const auth = requireAuth(req, res); if (!auth) return; @@ -370,6 +476,7 @@ export async function mockApi(req, res, next) { const tests = loadAll('tests'); const policyLogs = loadAll('policyLogs'); const planLogs = loadAll('planLogs'); + const surveyLogs = loadAll('surveyLogs'); const now = Date.now(); return json(res, 200, { ok: true, @@ -385,7 +492,8 @@ export async function mockApi(req, res, next) { salon: events.filter((e) => e.type === 'salon' && new Date(e.startAt).getTime() >= now).length, tests: tests.length, policyLogs: policyLogs.length, - planLogs: planLogs.length + planLogs: planLogs.length, + surveyLogs: surveyLogs.length } }); } @@ -418,13 +526,17 @@ export async function mockApi(req, res, next) { const entry = { id: genId(body.type === 'salon' ? 'E-S' : 'E-F'), type: body.type === 'salon' ? 'salon' : 'free', + mode: body.mode === 'online' ? 'online' : 'offline', title: String(body.title).trim(), subtitle: body.subtitle || '', desc: body.desc || '', location: body.location || '', + host: String(body.host || '').trim(), + image: String(body.image || '').trim(), link: body.link || '', startAt: body.startAt, durationMin: Number(body.durationMin) || 90, + capacity: Number(body.capacity) || 0, status: body.status || 'open' }; add('events', entry); @@ -433,11 +545,13 @@ export async function mockApi(req, res, next) { if (resName === 'events' && method === 'PUT' && id) { const body = (await readBody(req)) || {}; const patch = {}; - for (const k of ['title', 'subtitle', 'desc', 'location', 'link', 'startAt', 'status']) { + for (const k of ['title', 'subtitle', 'desc', 'location', 'link', 'startAt', 'status', 'host', 'image']) { if (body[k] !== undefined) patch[k] = body[k]; } if (body.type === 'salon' || body.type === 'free') patch.type = body.type; + if (body.mode === 'online' || body.mode === 'offline') patch.mode = body.mode; if (body.durationMin !== undefined) patch.durationMin = Number(body.durationMin); + if (body.capacity !== undefined) patch.capacity = Number(body.capacity); const entry = update('events', id, patch); if (!entry) return json(res, 404, { ok: false, error: '排期不存在' }); return json(res, 200, { ok: true, entry }); @@ -465,5 +579,11 @@ export async function mockApi(req, res, next) { return json(res, 200, { ok: true, list }); } + /* ---- 调研记录 ---- */ + if (resName === 'survey-logs' && method === 'GET' && !id) { + const list = loadAll('surveyLogs').slice().sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); + return json(res, 200, { ok: true, list }); + } + return json(res, 404, { ok: false, error: '接口不存在' }); } diff --git a/培训计划/课程体系0.1/website/server/planLogs.json b/培训计划/课程体系0.1/website/server/planLogs.json index 2cf23e3..7831266 100644 --- a/培训计划/课程体系0.1/website/server/planLogs.json +++ b/培训计划/课程体系0.1/website/server/planLogs.json @@ -18,5 +18,15 @@ "needPark": true, "hasStaff": false, "stepsCount": 6 + }, + { + "id": "LMT2TZFUR5", + "createdAt": "2026-08-21T10:53:12.579Z", + "username": "", + "region": "昆明", + "status": "none", + "needPark": true, + "hasStaff": true, + "stepsCount": 7 } ] \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/server/store.mjs b/培训计划/课程体系0.1/website/server/store.mjs index a6a45d3..a0f74c4 100644 --- a/培训计划/课程体系0.1/website/server/store.mjs +++ b/培训计划/课程体系0.1/website/server/store.mjs @@ -20,7 +20,8 @@ const FILES = { events: path.join(DIR, 'events.json'), tests: path.join(DIR, 'tests.json'), policyLogs: path.join(DIR, 'policyLogs.json'), - planLogs: path.join(DIR, 'planLogs.json') + planLogs: path.join(DIR, 'planLogs.json'), + surveyLogs: path.join(DIR, 'surveyLogs.json') }; const CACHE = {}; diff --git a/培训计划/课程体系0.1/website/server/surveyLogs.json b/培训计划/课程体系0.1/website/server/surveyLogs.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/培训计划/课程体系0.1/website/server/surveyLogs.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/培训计划/课程体系0.1/website/src/App.jsx b/培训计划/课程体系0.1/website/src/App.jsx index 2dc9a1c..8bdfed5 100644 --- a/培训计划/课程体系0.1/website/src/App.jsx +++ b/培训计划/课程体系0.1/website/src/App.jsx @@ -6,9 +6,11 @@ import Schedule from './platform/Schedule'; import Cards from './platform/Cards'; import Tools from './platform/Tools'; import OPCTest from './user/OPCTest'; -import Booking from './user/Booking'; +import Events from './user/Events'; +import EventDetail from './user/EventDetail'; import PolicyTest from './user/PolicyTest'; import StartPlan from './user/StartPlan'; +import OPCSurvey from './user/OPCSurvey'; import PineHome from './platform/PineHome'; import PineOps from './platform/PineOps'; import PineBookings from './platform/PineBookings'; @@ -26,10 +28,12 @@ import { isAuthed } from './services/auth'; /* 公开路由(无需登录) */ const PUBLIC_ROUTES = [ { path: '', Page: Home }, - { path: 'booking', Page: Booking }, + { path: 'events', Page: Events }, + { path: 'event-detail', Page: EventDetail }, { path: 'opc-test', Page: OPCTest }, { path: 'policy-test', Page: PolicyTest }, - { path: 'start-plan', Page: StartPlan } + { path: 'start-plan', Page: StartPlan }, + { path: 'survey', Page: OPCSurvey } ]; /* 内部路由(/pine,需登录) */ @@ -55,7 +59,7 @@ const ALL_ROUTES = [...PUBLIC_ROUTES, ...PINE_ROUTES]; const isPine = (p) => p === 'pine' || p.startsWith('pine/'); function parseHash() { - return window.location.hash.replace(/^#\/?/, '').trim(); + return window.location.hash.replace(/^#\/?/, '').split('?')[0].trim(); } export default function App() { diff --git a/培训计划/课程体系0.1/website/src/components/atoms/Icon.jsx b/培训计划/课程体系0.1/website/src/components/atoms/Icon.jsx new file mode 100644 index 0000000..cf79c77 --- /dev/null +++ b/培训计划/课程体系0.1/website/src/components/atoms/Icon.jsx @@ -0,0 +1,67 @@ +/** + * Icon —— 内联 SVG 图标(Appica / Tabler 线稿风格) + * 统一:viewBox 24、stroke=currentColor、stroke-width 1.5、圆头圆角、fill=none、aria-hidden。 + * 用法:;className 追加。 + * 装饰性图标默认 aria-hidden;独立可交互图标请外层给 aria-label。 + */ +import React from 'react'; + +/* 线稿路径(1.5 线宽下清晰) */ +const ICONS = { + 'arrow-right': <>, + 'arrow-left': <>, + 'chevron-down': , + 'chevron-right': , + 'close': , + 'check': , + 'check-circle': <>, + 'plus': , + 'calendar': <>, + 'clock': <>, + 'map-pin': <>, + 'user': <>, + 'users': <>, + 'download': <>, + 'upload': <>, + 'search': <>, + 'star': , + 'sparkles': <>, + 'home': <>, + 'phone': , + 'link': <>, + 'route': <>, + 'users-check': <>, + 'layers': <>, + 'trending-up': <>, + 'book': <>, + 'file': <>, + 'shield': <>, + 'flask': <>, + 'compass': <>, + 'tools': <>, + 'sliders': <>, + 'trash': <>, +}; + +export function Icon({ name, size, className = '', ...rest }) { + const glyph = ICONS[name] || null; + if (!glyph) return null; + const cls = ['icon', size ? `icon--${size}` : '', className].filter(Boolean).join(' '); + return ( + + ); +} + +export default Icon; diff --git a/培训计划/课程体系0.1/website/src/components/atoms/index.jsx b/培训计划/课程体系0.1/website/src/components/atoms/index.jsx index 0588803..12c40e1 100644 --- a/培训计划/课程体系0.1/website/src/components/atoms/index.jsx +++ b/培训计划/课程体系0.1/website/src/components/atoms/index.jsx @@ -129,3 +129,6 @@ export function FieldCheck({ label, options = [], value = [], onChange }) { ); } + +/* ---------- 原子:Icon(内联 SVG,Appica/Tabler 线稿风格) ---------- */ +export { Icon, default as IconDefault } from './Icon.jsx'; diff --git a/培训计划/课程体系0.1/website/src/components/organisms/index.jsx b/培训计划/课程体系0.1/website/src/components/organisms/index.jsx index a71de89..297ff18 100644 --- a/培训计划/课程体系0.1/website/src/components/organisms/index.jsx +++ b/培训计划/课程体系0.1/website/src/components/organisms/index.jsx @@ -32,7 +32,7 @@ export function Header({ active }) { ) : ( <> {user && {user.name}} - 预约报名 + 活动 )} + + +
+ + + + {sList.map((s) => { + const a = s.answers || {}; + return ( + + + + + + + + + + + ); + })} + {sList.length === 0 && } + +
时间来源状态行业真实AI赋能最需要政府支持最看重平台服务愿参加
{fmtDate(s.createdAt)}{s.source || 'web'}{surveyLabel('s1', a.s1)}{surveyLabel('s6', a.s6)}{surveyLabel('s21', a.s21)}{surveyLabel('s30', a.s30)}{surveyLabel('s36', a.s36)}{surveyLabel('s31', a.s31)}
暂无调研记录
+
+
+ ); } diff --git a/培训计划/课程体系0.1/website/src/services/auth.js b/培训计划/课程体系0.1/website/src/services/auth.js index eeb9c83..96cbae5 100644 --- a/培训计划/课程体系0.1/website/src/services/auth.js +++ b/培训计划/课程体系0.1/website/src/services/auth.js @@ -8,7 +8,7 @@ * POST /api/auth/login * 迁移真实后端:只改 API_BASE 与保持 /api/auth/* 契约即可。 */ -const API_BASE = ''; // 迁移点:真实 API 地址,如 'https://api.example.com' +const API_BASE = 'http://192.168.1.9:8091'; // 云超服 FastAPI 后端 const TOKEN_KEY = 'pine_token'; const USER_KEY = 'pine_user'; diff --git a/培训计划/课程体系0.1/website/src/services/booking.js b/培训计划/课程体系0.1/website/src/services/booking.js index b06e6e7..e7e8ba5 100644 --- a/培训计划/课程体系0.1/website/src/services/booking.js +++ b/培训计划/课程体系0.1/website/src/services/booking.js @@ -6,9 +6,33 @@ * 后端会校验手机号 + 验证码 → 自动注册或登录 → 报名落库 → 返回 { id, token, username, name, isNew }。 * 兜底:无后端环境 → localStorage 保存,避免用户提交无反馈。 */ -const API_BASE = ''; // 迁移点:真实 API 地址 +const API_BASE = 'http://192.168.1.9:8091'; // 云超服 FastAPI 后端 const LOCAL_KEY = 'pine_bookings'; +/** 活动详情 */ +export async function getEventDetail(id) { + try { + const res = await fetch(`${API_BASE}/api/events/${encodeURIComponent(id)}`); + const data = await res.json().catch(() => ({})); + if (!res.ok || !data.ok) return null; + return data.event || null; + } catch { + return null; + } +} + +/** 获取可报名场次(公益课/沙龙,均线下) */ +export async function getBookableEvents() { + try { + const res = await fetch(`${API_BASE}/api/events?bookable=1`); + const data = await res.json().catch(() => ({})); + if (!res.ok || !data.ok) return []; + return data.list || []; + } catch { + return []; + } +} + export async function submitBooking(data) { try { const res = await fetch(`${API_BASE}/api/bookings`, { diff --git a/培训计划/课程体系0.1/website/src/services/ops.js b/培训计划/课程体系0.1/website/src/services/ops.js index 71028ee..23ec51a 100644 --- a/培训计划/课程体系0.1/website/src/services/ops.js +++ b/培训计划/课程体系0.1/website/src/services/ops.js @@ -4,7 +4,7 @@ * 管理端点(/pine 后台)需要登录 token;公开端点(当期排期)无需。 * 对接 server/mock-api.mjs。 */ -const API_BASE = ''; // 迁移点:真实 API 地址 +const API_BASE = 'http://192.168.1.9:8091'; // 云超服 FastAPI 后端 const TOKEN_KEY = 'pine_token'; function authHeaders() { @@ -28,14 +28,17 @@ export const ops = { stats: () => api('GET', '/api/ops/stats'), bookings: () => api('GET', '/api/bookings'), updateBooking: (id, status) => api('PATCH', `/api/bookings/${id}`, { status }), + updateBookingAudit: (id, auditStatus) => api('PATCH', `/api/bookings/${id}`, { auditStatus }), deleteBooking: (id) => api('DELETE', `/api/bookings/${id}`), + bookAudit: (audit) => api('GET', `/api/bookings?audit=${audit}`), events: () => api('GET', '/api/events'), createEvent: (data) => api('POST', '/api/events', data), updateEvent: (id, data) => api('PUT', `/api/events/${id}`, data), deleteEvent: (id) => api('DELETE', `/api/events/${id}`), tests: () => api('GET', '/api/tests'), policyLogs: () => api('GET', '/api/policy-logs'), - planLogs: () => api('GET', '/api/plan-logs') + planLogs: () => api('GET', '/api/plan-logs'), + surveyLogs: () => api('GET', '/api/survey-logs') }; /* ---------- 公开:上报政策测评 / 启动流程结果(失败不影响用户) ---------- */ @@ -45,6 +48,14 @@ export async function reportPolicyLog(data) { export async function reportPlanLog(data) { try { await api('POST', '/api/plan-logs', data); } catch { /* noop */ } } +/* 公开:上报 OPC 创业伙伴调研(匿名可提交;失败不影响用户) */ +export async function reportSurveyLog(data) { + try { await api('POST', '/api/survey-logs', data); } catch { /* noop */ } +} +/* 管理端:查看调研记录 */ +export async function getSurveyLogs() { + return api('GET', '/api/survey-logs'); +} /* ---------- 公开:当期排期(无后端时返回 null,前端降级静态排期) ---------- */ export async function getCurrentEvents() { @@ -57,3 +68,42 @@ export async function getCurrentEvents() { return null; } } + +/* ---------- 图像上传(管理端,multipart) ---------- */ +export async function uploadImage(file) { + const token = localStorage.getItem(TOKEN_KEY); + const fd = new FormData(); + fd.append('file', file); + const res = await fetch(`${API_BASE}/api/upload`, { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: fd + }); + const data = await res.json().catch(() => ({})); + if (!res.ok || !data.ok) throw new Error(data.error || '上传失败'); + return data; // { ok, url } +} + +/* ---------- 公开:政策测评(题目下发 + 结果生成,后端驱动) ---------- */ +export async function getPolicyQuestions() { + try { const r = await api('GET', '/api/policy/questions'); return r.questions || []; } catch { return []; } +} +export async function calcPolicy(answers) { + try { const r = await api('POST', '/api/policy/calculate', { answers }); return r.result; } catch { return null; } +} + +/* ---------- 公开:启动流程(配置 + 生成,后端驱动) ---------- */ +export async function getPlanConfig() { + try { const r = await api('GET', '/api/plan/config'); return r; } catch { return { regions: [], status: [] }; } +} +export async function genPlan(opt) { + try { const r = await api('POST', '/api/plan/generate', opt); return r.plan || []; } catch { return []; } +} + +/* ---------- 公开:调研(题目下发 + 提交,后端驱动) ---------- */ +export async function getSurveyQuestions() { + try { const r = await api('GET', '/api/survey/questions'); return r; } catch { return null; } +} +export async function submitSurvey(data) { + try { return await api('POST', '/api/survey/submit', data); } catch { return null; } +} diff --git a/培训计划/课程体系0.1/website/src/styles/booking.css b/培训计划/课程体系0.1/website/src/styles/booking.css index 849498b..7435b64 100644 --- a/培训计划/课程体系0.1/website/src/styles/booking.css +++ b/培训计划/课程体系0.1/website/src/styles/booking.css @@ -42,3 +42,83 @@ .bk-form .form-card { padding: 18px 16px; } .bk-success { padding: 44px 20px; } } + +/* ---------- 场次选择 ---------- */ +.bk-events { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; } +.bk-ev { + text-align: left; cursor: pointer; background: var(--panel-2); border: 1px solid var(--line); + border-radius: 14px; padding: 16px 18px; transition: all .2s ease; +} +.bk-ev:hover { border-color: rgba(255,255,255,.4); } +.bk-ev.sel { + border-color: #a8c4ff; background: rgba(160,180,255,.08); + box-shadow: 0 0 0 1px rgba(160,180,255,.5), 0 0 22px rgba(160,180,255,.14); +} +.bk-ev-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } +.bk-ev-tag { font-size: 12px; font-weight: 700; color: #000; background: #a8c4ff; border-radius: 999px; padding: 3px 12px; } +.bk-ev-tag.alt { background: #5b8cff; color: #fff; } +.bk-ev-check { font-size: 12.5px; color: #a8c4ff; } +.bk-ev-title { font-size: 15px; font-weight: 700; color: #fff; line-height: 1.45; } +.bk-ev-sub { font-size: 12.5px; color: #8e8e8e; margin-top: 4px; } +.bk-ev-meta { font-size: 12.5px; color: #c4c2c3; margin-top: 10px; line-height: 1.5; } +.bk-empty { font-size: 13.5px; color: #8e8e8e; padding: 12px 0; } + +/* ---------- 活动列表(网页) ---------- */ +.ev-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; } +.bk-ev-card { + background: linear-gradient(180deg, #141417, #0e0e12); border: 1px solid var(--line); + border-radius: 18px; padding: 22px 22px 18px; display: flex; flex-direction: column; gap: 8px; +} +.bk-ev-tags { display: flex; gap: 8px; } +.bk-ev-tag { font-size: 12px; font-weight: 700; color: #000; background: #a8c4ff; border-radius: 999px; padding: 3px 12px; } +.bk-ev-tag.alt { background: #5b8cff; color: #fff; } +.bk-ev-tag.mode { background: rgba(255,255,255,0.12); color: #c4c2c3; } +.bk-ev-tag.mode.online { background: rgba(140,200,255,0.16); color: #a8dcff; } +.bk-ev-card .bk-ev-title { font-size: 18px; font-weight: 700; color: #fff; line-height: 1.45; } +.bk-ev-card .bk-ev-sub { font-size: 13px; color: #8e8e8e; } +.bk-ev-card .bk-ev-meta { font-size: 13px; color: #c4c2c3; line-height: 1.6; display: flex; flex-direction: column; gap: 3px; } +.bk-ev-cta { margin-top: 10px; } +.bk-empty { font-size: 14px; color: #8e8e8e; padding: 20px 0; } + +/* ---------- 活动详情(网页) ---------- */ +.ev-detail-img { border-radius: 20px; overflow: hidden; } +.ev-detail-hero { width: 100%; max-height: 380px; object-fit: cover; border-radius: 20px; display: block; } +.ev-detail-img.placeholder { + background: linear-gradient(135deg, #1b2a5e, #241b4a 55%, #3a1e5e); + border: 1px solid rgba(255,255,255,0.18); border-radius: 20px; padding: 40px 32px; + display: flex; flex-direction: column; align-items: flex-start; gap: 14px; +} +.ev-detail-img.placeholder h2 { font-size: 30px; color: #fff; margin: 0; } +.ev-info { background: var(--panel); border: 1px solid var(--line); border-radius: 16px; padding: 6px 22px; } +.ev-info-line { display: flex; gap: 22px; padding: 14px 0; border-bottom: 1px solid rgba(255,255,255,0.06); } +.ev-info-line:last-child { border-bottom: none; } +.ev-info-line .k { flex-shrink: 0; width: 60px; font-size: 13.5px; color: #8e8e8e; } +.ev-info-line .v { flex: 1; font-size: 14px; color: #fff; line-height: 1.5; } +.ev-desc { font-size: 14px; color: #c4c2c3; line-height: 1.8; margin-top: 22px; } + +/* 图标行(时钟/地点/主办) */ +.bk-ev-line { display: flex; align-items: center; gap: 7px; } +.bk-ev-line .icon { color: #a8c4ff; } +.bk-info-title { display: flex; align-items: center; gap: 8px; } +.bk-info-title .icon { color: #a8c4ff; } +.mk-row-arrow { display: inline-flex; align-items: center; } +.mk-row-arrow .icon { color: #6f6f6f; } +.btn .icon { margin-left: 2px; } + +/* ---------- 活动卡片:海报 + 简介 + 状态(web) ---------- */ +.bk-ev-poster { position: relative; height: 150px; border-radius: 14px; overflow: hidden; margin-bottom: 12px; } +.bk-ev-img { width: 100%; height: 100%; object-fit: cover; display: block; } +.bk-ev-img.ph { display: flex; align-items: flex-end; padding: 16px; box-sizing: border-box; color: #fff; font-weight: 700; background: linear-gradient(150deg, #1b2a5e, #3a1e5e); } +.bk-ev-tags { position: absolute; top: 10px; left: 10px; display: flex; gap: 6px; } +.bk-ev-tag.mode { background: rgba(0,0,0,0.5); color: #fff; } +.bk-ev-body { display: flex; flex-direction: column; } +.bk-ev-card .bk-ev-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.bk-ev-card .bk-ev-sub { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; } +.bk-ev-card .bk-ev-meta { display: flex; justify-content: space-between; gap: 8px; } +.bk-ev-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; } +.bk-ev-price { font-size: 14px; font-weight: 700; color: #3fb68b; } +.bk-ev-status { font-size: 12px; padding: 3px 12px; border-radius: 999px; color: #3fb68b; background: rgba(63,182,139,0.14); border: 1px solid rgba(63,182,139,0.4); } +.bk-ev-status.full { color: #f5c451; background: rgba(245,196,81,0.12); border-color: rgba(245,196,81,0.4); } +.bk-ev-status.done { color: #9a9a9a; background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.18); } +.bk-ev-status.pending { color: #8e8e8e; background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.18); } +.bk-ev-status.invite { color: #a8c4ff; background: rgba(168,196,255,0.12); border-color: rgba(168,196,255,0.4); } diff --git a/培训计划/课程体系0.1/website/src/styles/opcSurvey.css b/培训计划/课程体系0.1/website/src/styles/opcSurvey.css new file mode 100644 index 0000000..bce8f36 --- /dev/null +++ b/培训计划/课程体系0.1/website/src/styles/opcSurvey.css @@ -0,0 +1,91 @@ +/* ============================================================ + OPC 创业伙伴调研 · 样式 + 延续暗色令牌:面板卡片 + 选项胶囊 + 量表按钮(与政策测评同风格) + ============================================================ */ + +/* ---------- 顶部提示条 ---------- */ +.sv-banner { + background: rgba(255, 210, 138, .08); + border: 1px solid rgba(255, 210, 138, .25); + border-radius: var(--radius-card); + padding: 12px 16px; + font-size: 13px; + color: #f5d9a0; + margin-bottom: 4px; +} + +/* ---------- 问题 ---------- */ +.sv-questions { display: grid; gap: 14px; } +.sv-q { + background: var(--panel); + border: 1px solid var(--line); + border-radius: var(--radius-card); + padding: 18px 20px; +} +.sv-q-label { + font-size: 14px; font-weight: 600; color: #fff; + margin-bottom: 12px; line-height: 1.55; +} +.sv-req { color: #f0b8b8; margin-left: 2px; } +.sv-hint { font-size: 12px; font-weight: 400; color: #8e8e8e; margin-left: 8px; } + +/* 选项胶囊(单选 / 多选) */ +.sv-opts { display: flex; flex-wrap: wrap; gap: 8px; } +.sv-opt { + border: 1px solid var(--line); background: var(--panel-2); color: #c4c2c3; + border-radius: 999px; padding: 9px 15px; font-size: 13px; cursor: pointer; transition: all .2s ease; +} +.sv-opt:hover { border-color: rgba(255,255,255,.4); color: #fff; } +.sv-opt.sel { background: #fff; color: #000; border-color: #fff; font-weight: 600; } + +/* 量表(Likert 1–5) */ +.sv-likert { display: flex; flex-wrap: wrap; gap: 8px; } +.sv-lk { + border: 1px solid var(--line); background: var(--panel-2); color: #c4c2c3; + border-radius: 10px; padding: 9px 14px; font-size: 13px; cursor: pointer; transition: all .2s ease; +} +.sv-lk:hover { border-color: rgba(255,255,255,.4); color: #fff; } +.sv-lk.sel { background: #fff; color: #000; border-color: #fff; font-weight: 600; } + +/* 开放填空 */ +.sv-textarea { + width: 100%; box-sizing: border-box; + background: var(--panel-2); color: #fff; + border: 1px solid var(--line); border-radius: 10px; + padding: 10px 12px; font-size: 13px; line-height: 1.6; resize: vertical; + font-family: inherit; +} +.sv-textarea::placeholder { color: #7a7a7a; } +.sv-textarea:focus { outline: none; border-color: rgba(255,255,255,.5); } + +/* ---------- 提交 ---------- */ +.sv-submit { text-align: center; padding: 8px 0 4px; } +.sv-submit-note { font-size: 12px; color: #8e8e8e; margin-top: 10px; } +.sv-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; } + +/* ---------- 提交成功 ---------- */ +.sv-thanks { + background: linear-gradient(135deg, #161618, #28282a); + border: 1px solid rgba(255,255,255,.22); + border-radius: 16px; padding: 20px 22px; + font-size: 14px; color: #cfcfcf; line-height: 1.8; +} +.sv-thanks p { margin: 0 0 8px; } + +/* ---------- 政策速览(手风琴) ---------- */ +.sv-accordion { + width: 100%; text-align: left; + background: var(--panel); border: 1px solid var(--line); + border-radius: var(--radius-card); padding: 14px 18px; + font-size: 13.5px; color: #fff; cursor: pointer; + display: flex; justify-content: space-between; align-items: center; +} +.sv-accordion span { color: #8e8e8e; font-size: 12px; } +.sv-policy { margin-top: 12px; display: grid; gap: 10px; } +.sv-policy-row { + background: var(--panel); border: 1px solid var(--line); border-left: 3px solid #fff; + border-radius: 12px; padding: 14px 16px; +} +.sv-policy-name { font-size: 14px; font-weight: 600; color: #fff; margin-bottom: 5px; } +.sv-policy-note { font-size: 13px; color: #a9a9a9; line-height: 1.65; } +.sv-policy-tip { font-size: 12.5px; color: #f5d9a0; line-height: 1.6; margin-top: 4px; } diff --git a/培训计划/课程体系0.1/website/src/styles/tokens.css b/培训计划/课程体系0.1/website/src/styles/tokens.css index 233cc30..c3a6403 100644 --- a/培训计划/课程体系0.1/website/src/styles/tokens.css +++ b/培训计划/课程体系0.1/website/src/styles/tokens.css @@ -1,5 +1,6 @@ /* ============================================================ - 设计令牌(原子层基础)—— 源自 design.md + 设计令牌(原子层基础)—— 源自 design.md,融合 Appica UI 风格 + (统一语义色阶 / 层级阴影 / 焦点环 / 圆角 / 字重) ============================================================ */ :root { --bg: #000000; @@ -19,11 +20,63 @@ --font-display: "BubbledotICG-FinePos", monospace; --ease: cubic-bezier(0.22, 1, 0.36, 1); + /* ---- 语义色(Appica 风格:暗色基底 + 蓝紫科技主色) ---- */ + --primary: #5b8cff; + --primary-strong: #9d6bff; + --primary-gradient: linear-gradient(135deg, #5b8cff 0%, #9d6bff 100%); + --primary-soft: rgba(120, 130, 255, 0.14); + --accent: #a8c4ff; + --accent-cyan: #7fe0ff; + --success: #3fb68b; + --success-soft: rgba(63, 182, 139, 0.14); + --warning: #f5c451; + --warning-soft: rgba(245, 196, 81, 0.14); + --danger: #f07575; + --danger-soft: rgba(240, 117, 117, 0.14); + --ring: rgba(168, 196, 255, 0.55); + + /* ---- 层级阴影(Appica:elevation 阶梯) ---- */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.32); + --shadow-md: 0 8px 24px rgba(0, 0, 0, 0.42); + --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5); + --shadow-glow: 0 0 0 1px rgba(168, 196, 255, 0.4), 0 0 24px rgba(120, 130, 255, 0.18); + + /* ---- 圆角(Appica:统一阶梯) ---- */ + --radius-xs: 6px; + --radius-sm: 10px; --radius-card: 16px; + --radius-lg: 22px; --radius-pill: 999px; + + /* ---- 间距 / 字重 ---- */ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 20px; --space-5: 32px; + --weight-normal: 400; + --weight-medium: 500; + --weight-semibold: 600; + --weight-bold: 700; } + +/* 全局可见焦点环(Appica 风格) */ +:focus-visible { + outline: 2px solid var(--ring); + outline-offset: 2px; + border-radius: var(--radius-sm); +} + +/* 图标基础(Appica:24 尺寸、1.5 线宽、圆头) */ +.icon { + width: 1.35em; + height: 1.35em; + flex-shrink: 0; + vertical-align: -0.2em; + color: inherit; +} +.icon--xs { width: 1em; height: 1em; } +.icon--sm { width: 1.1em; height: 1.1em; } +.icon--lg { width: 1.7em; height: 1.7em; } +.icon--xl { width: 2.2em; height: 2.2em; } diff --git a/培训计划/课程体系0.1/website/src/user/Booking.jsx b/培训计划/课程体系0.1/website/src/user/Booking.jsx index 99e34ad..4b85f2d 100644 --- a/培训计划/课程体系0.1/website/src/user/Booking.jsx +++ b/培训计划/课程体系0.1/website/src/user/Booking.jsx @@ -1,23 +1,34 @@ import React from 'react'; import { ContentTemplate } from '@/components/templates'; -import { FieldText, FieldTextarea, FieldSelect, FieldRadio, FieldCheck, Button, SectionHead } from '@/components/atoms'; -import { submitBooking } from '@/services/booking'; +import { FieldText, FieldTextarea, FieldSelect, FieldRadio, FieldCheck, Button, SectionHead, Icon } from '@/components/atoms'; +import { submitBooking, getBookableEvents } from '@/services/booking'; import { sendCode, saveSession, getUser } from '@/services/auth'; -import { BK_STATUS_OPTIONS, BK_WANT_OPTIONS, BK_TOPIC_OPTIONS, BK_SOURCE_OPTIONS } from '@/data/booking'; +import { BK_STATUS_OPTIONS, BK_TOPIC_OPTIONS, BK_SOURCE_OPTIONS } from '@/data/booking'; import '@/styles/booking.css'; -const EMPTY = { phone: '', code: '', name: '', status: '', want: '公益课', topics: [], question: '', source: '' }; +const EMPTY = { phone: '', code: '', name: '', status: '', topics: [], question: '', source: '' }; +const fmtEvt = (iso) => { + if (!iso) return ''; + const d = new Date(iso); + const p = (n) => String(n).padStart(2, '0'); + const week = ['日', '一', '二', '三', '四', '五', '六'][d.getDay()]; + return `${d.getMonth() + 1}月${d.getDate()}日 周${week} ${p(d.getHours())}:${p(d.getMinutes())}`; +}; export default function Booking() { const [form, setForm] = React.useState(EMPTY); + const [events, setEvents] = React.useState([]); + const [eventId, setEventId] = React.useState(''); const [busy, setBusy] = React.useState(false); const [err, setErr] = React.useState(''); const [debug, setDebug] = React.useState(''); const [cd, setCd] = React.useState(0); const [done, setDone] = React.useState(null); + React.useEffect(() => { getBookableEvents().then((l) => setEvents(l)); }, []); + const set = (key) => (v) => setForm((f) => ({ ...f, [key]: v })); - const valid = /^1\d{10}$/.test(form.phone) && form.code.trim() && form.name.trim(); + const valid = !!eventId && /^1\d{10}$/.test(form.phone) && form.code.trim() && form.name.trim(); const user = getUser(); const send = async () => { @@ -39,18 +50,22 @@ export default function Booking() { const submit = async (e) => { e.preventDefault(); setErr(''); + if (!eventId) { setErr('请先选择要报名的场次'); return; } if (!valid) { setErr('请填写手机号、验证码与姓名'); return; } setBusy(true); + const ev = events.find((x) => x.id === eventId) || {}; try { const r = await submitBooking({ phone: form.phone.trim(), code: form.code.trim(), name: form.name.trim(), status: form.status, - want: form.want, topics: form.topics, question: form.question, - source: form.source + source: form.source, + eventId, + eventTitle: ev.title || '', + eventStart: ev.startAt || '' }); // 报名成功即登录:后端返回 token(未注册已自动注册) if (r && r.token) saveSession({ token: r.token, username: r.username, name: r.name }); @@ -66,12 +81,12 @@ export default function Booking() { {done ? (
-
+

报名成功

预约编号:{done.id}

@@ -89,16 +104,16 @@ export default function Booking() {

- +
+
+ +
+ {events.length === 0 &&
暂无可报名场次,请稍后再来。
} + {events.map((e) => { + const sel = eventId === e.id; + return ( + + ); + })} +
+
@@ -134,7 +177,6 @@ export default function Booking() {
- { + if (!iso) return ''; + const d = new Date(iso); + const p = (n) => String(n).padStart(2, '0'); + const week = ['日', '一', '二', '三', '四', '五', '六'][d.getDay()]; + return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())} 周${week}`; +}; +const getId = () => new URLSearchParams((window.location.hash.split('?')[1] || '')).get('id'); + +export default function EventDetail() { + const [ev, setEv] = React.useState(null); + const [err, setErr] = React.useState(''); + const [form, setForm] = React.useState(EMPTY); + const [busy, setBusy] = React.useState(false); + const [debug, setDebug] = React.useState(''); + const [cd, setCd] = React.useState(0); + const [done, setDone] = React.useState(null); + + React.useEffect(() => { + const id = getId(); + if (!id) { setErr('缺少活动参数'); return; } + getEventDetail(id).then((e) => setEv(e)); + }, []); + + const set = (key) => (v) => setForm((f) => ({ ...f, [key]: v })); + const valid = /^1\d{10}$/.test(form.phone) && form.code.trim() && form.name.trim(); + const user = getUser(); + + const send = async () => { + if (!/^1\d{10}$/.test(form.phone)) { setErr('请输入正确的 11 位手机号'); return; } + setErr(''); setBusy(true); + try { + const r = await sendCode(form.phone.trim()); + setDebug(`验证码已发送${r.debugCode ? ',演示验证码:' + r.debugCode : ''}(5 分钟内有效)`); + setCd(60); + const t = setInterval(() => setCd((v) => { if (v <= 1) { clearInterval(t); return 0; } return v - 1; }), 1000); + } catch (ex) { setErr(ex && ex.message ? ex.message : '发送失败,请重试'); } + finally { setBusy(false); } + }; + + const submit = async (e) => { + e.preventDefault(); + setErr(''); + if (!valid) { setErr('请填写手机号、验证码与姓名'); return; } + setBusy(true); + try { + const r = await submitBooking({ + phone: form.phone.trim(), code: form.code.trim(), name: form.name.trim(), + status: form.status, topics: form.topics, question: form.question, source: form.source, + eventId: ev.id, eventTitle: ev.title, eventStart: ev.startAt + }); + if (r && r.token) saveSession({ token: r.token, username: r.username, name: r.name }); + setDone(r); + } catch (ex) { setErr(ex && ex.message ? ex.message : '报名失败,请稍后重试'); } + finally { setBusy(false); } + }; + + if (done) { + return ( + +
+
+

{ev ? ev.title : '报名成功'}

+

{ev ? `${ev.mode === 'online' ? '线上' : '线下'} · ${ev.location}` : ''}

+

预约编号:{done.id}

+

{done.local ? '当前为本地记录,请通过公众号 / 现场与我们确认到场。' : `已用手机号 ${form.phone} 报名${done.isNew ? ',账号已自动注册' : ',账号已登录'}。活动前我们会短信提醒。`}

+
+ + +
+
+
+ ); + } + + if (!ev && !err) return
加载中…
; + if (!ev) return
{err}
; + + return ( + + {/* 宣传图 */} + {ev.image ? ( +
+ {ev.title} +
+ ) : ( +
+ {ev.type === 'salon' ? '沙龙' : '公益课'} · {ev.mode === 'online' ? '线上' : '线下'} +

{ev.title}

+
+ )} + + {/* 基本信息 */} +
+
+
时间{fmtEvt(ev.startAt)}
+
{ev.mode === 'online' ? '入口' : '地点'}{ev.location}
+ {ev.host &&
主办{ev.host}
} + {ev.capacity > 0 &&
人数限 {ev.capacity} 人
} +
+ {ev.desc &&

{ev.desc}

} +
+ + {/* 报名表单 */} +
+ + +
+ +
+ +
+ set('code')(e.target.value)} inputMode="numeric" maxLength={6} placeholder="6 位验证码" style={{ flex: 1 }} autoComplete="one-time-code" /> + +
+
+
+ + + + + + {debug &&
{debug}
} + {err &&
{err}
} +
+ +
+ +
+
+ ); +} diff --git a/培训计划/课程体系0.1/website/src/user/Events.jsx b/培训计划/课程体系0.1/website/src/user/Events.jsx new file mode 100644 index 0000000..273d6c0 --- /dev/null +++ b/培训计划/课程体系0.1/website/src/user/Events.jsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { ContentTemplate } from '@/components/templates'; +import { SectionHead, Button, Icon } from '@/components/atoms'; +import { Reveal } from '@/components/organisms'; +import { getBookableEvents } from '@/services/booking'; +import '@/styles/booking.css'; + +const fmtEvt = (iso) => { + if (!iso) return ''; + const d = new Date(iso); + const p = (n) => String(n).padStart(2, '0'); + const week = ['日', '一', '二', '三', '四', '五', '六'][d.getDay()]; + return `${d.getMonth() + 1}月${d.getDate()}日 周${week} ${p(d.getHours())}:${p(d.getMinutes())}`; +}; + +export default function Events() { + const [list, setList] = React.useState([]); + React.useEffect(() => { getBookableEvents().then((l) => setList(l)); }, []); + + return ( + +
+ {list.map((e) => { + const STATUS_TEXT = { open: '报名中', full: '已满员', done: '已结束', pending: '待开放', invite: '邀请中' }; + const ST_CLS = { full: ' full', done: ' done', pending: ' pending', invite: ' invite' }; + const status = STATUS_TEXT[e.status] || '报名中'; + const st = ST_CLS[e.status] || ''; + return ( + +
+ {e.image ? {e.title} :
{e.title}
} +
+ {e.type === 'salon' ? '沙龙' : '公益课'} + {e.mode === 'online' ? '线上' : '线下'} +
+
+
+
{e.title}
+
{e.subtitle || e.desc}
+
+
{fmtEvt(e.startAt)}
+
{e.location}
+
+
+ 免费 + {status} +
+
+
+ +
+
+ ); + })} + {list.length === 0 &&
暂无可报名活动,请稍后再来。
} +
+
+ ); +} diff --git a/培训计划/课程体系0.1/website/src/user/Home.jsx b/培训计划/课程体系0.1/website/src/user/Home.jsx index 1517fb5..a3b5a9d 100644 --- a/培训计划/课程体系0.1/website/src/user/Home.jsx +++ b/培训计划/课程体系0.1/website/src/user/Home.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Header, SiteFooter, Reveal } from '@/components/organisms'; -import { SectionHead, Button } from '@/components/atoms'; +import { SectionHead, Button, Icon } from '@/components/atoms'; import { StatItem } from '@/components/molecules'; import { MK_HERO, MK_TRUST, MK_PRINCIPLE, MK_PRODUCTS, @@ -44,7 +44,7 @@ function EventCard({ e, tag, hot }) {
{fmtEvt(e.startAt)} {e.location}

{e.desc || e.subtitle}

  • {e.subtitle}
-
+
); } @@ -67,7 +67,7 @@ function CurrentEvents() {
{r.item}
{r.desc}
- + ))} @@ -121,7 +121,7 @@ export default function Home() {

{MK_HERO.subhead}

- +
@@ -201,6 +201,20 @@ export default function Home() { + {/* 8.5 · OPC 创业伙伴调研入口 */} + +
+
+
调研
+

云南 OPC 创业伙伴调研

+

5–8 分钟匿名问卷,聊聊你在云南做的行业、遇到的难题、AI 赋能与政策诉求——用于云南 OPC 创业生态与政策研究。

+
+
+ +
+
+
+ {/* 9 · 报名 CTA */}
diff --git a/培训计划/课程体系0.1/website/src/user/OPCSurvey.jsx b/培训计划/课程体系0.1/website/src/user/OPCSurvey.jsx new file mode 100644 index 0000000..64307df --- /dev/null +++ b/培训计划/课程体系0.1/website/src/user/OPCSurvey.jsx @@ -0,0 +1,213 @@ +import React from 'react'; +import { ContentTemplate } from '@/components/templates'; +import { SectionHead, Button, Icon } from '@/components/atoms'; +import { Reveal } from '@/components/organisms'; +import { getSurveyQuestions, submitSurvey } from '@/services/ops'; +import { getUser } from '@/services/auth'; +import '@/styles/opcSurvey.css'; + +/* 调研题目 / Likert 选项 / 分区(由后端 /api/survey/questions 下发填充) */ +let SV_QUESTIONS = []; +let SV_SECTIONS = []; +let LIKE_OPTS = []; + +/* ---------- 云南 OPC 政策速览(附加内容,供受访者参考;以官方为准) ---------- */ +const POLICY_ONE_PAGER = [ + { name: '云岭创业贷', note: '试点昆明/普洱;个人信用贷最高 50 万、抵押担保最高 1000 万;政府性融资担保增信,需银行风控审批。' }, + { name: '一次性创业补贴', note: 'OPC 经营主体同等享受 5000 元一次性创业补贴,另有社保补贴、就业见习补贴。' }, + { name: '贷免扶补', note: '10 类重点群体个人最高 20 万、合伙最高 110 万、3 年期财政贴息、可免反担保。' }, + { name: 'OPC 创业社区', note: '全省创业园区设 OPC 专区,免费拎包工位、补贴场地水电物业;玉溪红塔区、昆明西山庾园社区已落地。' }, + { name: 'OPC 创业赛事', note: '"创赢未来"2026 人工智能+OPC 专项赛、春城创业荟 OPC 组,晋级进入重点创业项目库。' }, + { name: '政策入口', note: '以云南省人社厅官网为准;落地细节各地不同,申报前可拨 12333 咨询当地公共就业服务机构。' } +]; + +function PolicySection({ open, setOpen }) { + return ( + + + + {open && ( +
+ {POLICY_ONE_PAGER.map((p, i) => ( +
+
{p.name}
+
{p.note}
+
+ ))} +

+ 政策条款 / 补贴金额 / 申报入口可能动态调整,请以云南省人力资源和社会保障厅官网最新文件为准。 +

+
+ )} +
+ ); +} + +function Success({ onReset, source }) { + const [open, setOpen] = React.useState(false); + return ( + <> + + +
+

你的回答已匿名记录,将用于云南 OPC 创业生态建设与政策研究,不会对外泄露个人信息。

+

我们正在组织云南 OPC 伙伴社群与调研回访,欢迎继续参与。

+
+
+ + +
+
+ + + ); +} + +function Question({ q, value, onChange }) { + if (q.type === 'text') { + return ( +