feat: complete aihr mvp mobile workflow

This commit is contained in:
2026-07-03 16:43:37 +08:00
parent 0126b0c661
commit f869d66c90
46 changed files with 5879 additions and 219 deletions
+29
View File
@@ -3,6 +3,7 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
FRONTEND_URL="${FRONTEND_URL:-http://127.0.0.1:5173}"
MOBILE_URL="${MOBILE_URL:-http://127.0.0.1:5174}"
cd "$ROOT_DIR"
@@ -33,6 +34,7 @@ check_url() {
need curl
check_url "frontend" "$FRONTEND_URL/"
check_url "mobile" "$MOBILE_URL/h5/user"
tenant_payload="$(curl -fsS "$FRONTEND_URL/dev-api/auth/tenant/list")"
[[ "$tenant_payload" == *'"tenantId":"000000"'* ]] || fail "tenant list missing tenant 000000"
@@ -48,6 +50,20 @@ contains frontend/src/router/index.ts "/knowledge/cases"
contains frontend/src/router/index.ts "/knowledge/sop"
contains frontend/src/router/index.ts "/system/model"
contains mobile/src/App.vue "早上好,王敏"
contains mobile/src/App.vue "AI结构化面试"
contains mobile/src/App.vue "团队今日概况"
contains mobile/src/App.vue "sendSmsCode"
contains mobile/src/App.vue "/dev-api/resource/sms/code"
contains mobile/src/App.vue "/dev-api/auth/mobile/sms-login"
contains mobile/src/App.vue "fetchMobileHome"
contains mobile/src/App.vue "/dev-api/api/aihr/mobile/home/"
contains mobile/src/App.vue "startMobilePractice"
contains mobile/src/App.vue "/dev-api/api/train/practice/start"
contains mobile/src/App.vue "训练完成,主管端待复盘已更新"
contains mobile/src/App.vue "/dev-api/api/aihr/mobile/practice/history"
contains mobile/src/App.vue "competencyProfile"
contains mobile/package.json "aihr-mobile"
contains frontend/src/views/recruit/interview.vue "建议复试"
contains frontend/src/views/train/practice.vue "导师改写"
contains frontend/src/views/knowledge/cases.vue "seed入库"
@@ -57,6 +73,12 @@ contains frontend/src/api/aihr/interview.ts "/api/recruit/interview/start"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrInterviewController.java "/api/recruit/interview"
contains frontend/src/api/aihr/practice.ts "/api/train/practice/start"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrPracticeController.java "/api/train/practice"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java "mobileCompletedCount"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java "aihr_practice_session"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrMobileSeedService.java "待复盘对练"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java "/practice/reviews"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java "/practice/reviews/{id}/reviewed"
contains mobile/src/App.vue "标记已复盘"
contains frontend/src/api/aihr/case.ts "/api/knowledge/case/upload"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrCaseController.java "/api/knowledge/case"
contains frontend/src/api/aihr/sop.ts "/api/knowledge/search"
@@ -72,6 +94,8 @@ contains docs/RUOYI_AI_INCREMENTAL_MIGRATION.md "ruoyi-ai"
contains docs/RUOYI_AI_INCREMENTAL_MIGRATION.md "POST /api/knowledge/doc/upload"
contains backend/script/sql/aihr_knowledge_mysql8.sql "aihr_knowledge_fragment"
contains backend/script/sql/aihr_model_mysql8.sql "aihr_model_config"
contains backend/script/sql/aihr_practice_mysql8.sql "aihr_practice_session"
contains backend/script/sql/aihr_practice_mysql8.sql "dialogue_json"
contains backend/script/sql/aihr_model_mysql8.sql "api_key"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrModelController.java "/api/aihr/model"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrModelController.java "/providers/{providerCode}"
@@ -81,6 +105,10 @@ contains frontend/src/api/aihr/model.ts "/api/aihr/model/providers"
contains frontend/src/api/aihr/model.ts "/api/aihr/model/configs"
contains frontend/src/views/system/model/index.vue "submitProvider"
contains frontend/src/views/system/model/index.vue "submitModel"
contains backend/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java "/mobile/sms-login"
contains backend/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java "aihr.sms.login-template-id"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java "/api/aihr/mobile"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrMobileSeedService.java "candidateHome"
echo "OK: demo routes and seed markers"
echo "OK: AI interview API markers"
@@ -90,4 +118,5 @@ echo "OK: AI SOP API markers"
echo "OK: ruoyi-ai incremental migration markers"
echo "OK: AI model migration markers"
echo "OK: AI model config page markers"
echo "OK: AI mobile role home markers"
echo "PASS: demo preflight"
+7
View File
@@ -3,6 +3,13 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
if [[ -f "$ROOT_DIR/.env.local" ]]; then
set -a
# shellcheck disable=SC1091
source "$ROOT_DIR/.env.local"
set +a
fi
cd "$ROOT_DIR/backend"
mkdir -p "$ROOT_DIR/.data/import"
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR/mobile"
if [[ ! -d node_modules ]]; then
npm install --registry=https://registry.npmmirror.com
fi
exec npm run dev -- --host 127.0.0.1 --port 5174 --strictPort
+10 -3
View File
@@ -8,7 +8,7 @@ usage() {
cat <<'EOF'
Usage: ./scripts/dev.sh [start|stop|restart|status|--reset]
Starts MySQL, Redis, MinIO, Qdrant, backend and frontend.
Starts MySQL, Redis, MinIO, Qdrant, backend, admin frontend and mobile frontend.
start start local demo services
stop stop backend and frontend dev processes
restart stop backend and frontend, then start again
@@ -78,12 +78,14 @@ stop_port() {
stop_dev() {
stop_port 8080
stop_port 5173
stop_port 5174
}
status() {
docker compose -f docker-compose.dev.yml ps
lsof -nP -iTCP:8080 -sTCP:LISTEN || true
lsof -nP -iTCP:5173 -sTCP:LISTEN || true
lsof -nP -iTCP:5174 -sTCP:LISTEN || true
}
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
@@ -125,6 +127,7 @@ cd "$ROOT_DIR"
ensure_docker
ensure_port_free 8080
ensure_port_free 5173
ensure_port_free 5174
if [[ "$RESET" == true ]]; then
./scripts/reset-dev-db.sh
@@ -140,10 +143,14 @@ PIDS+=("$!")
./scripts/dev-frontend.sh &
PIDS+=("$!")
./scripts/dev-mobile.sh &
PIDS+=("$!")
echo "Backend: http://127.0.0.1:8080/"
echo "Frontend: http://127.0.0.1:5173/"
echo "Admin: http://127.0.0.1:5173/"
echo "Mobile: http://127.0.0.1:5174/h5/user"
echo "Qdrant: http://127.0.0.1:6333/"
echo "Press Ctrl+C to stop backend and frontend."
echo "Press Ctrl+C to stop backend, admin frontend and mobile frontend."
while :; do
for pid in "${PIDS[@]}"; do
+1
View File
@@ -21,6 +21,7 @@ docker exec -i wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry
docker exec -i wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry-vue < "$ROOT_DIR/backend/script/sql/ry_workflow.sql"
docker exec -i wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry-vue < "$ROOT_DIR/backend/script/sql/aihr_knowledge_mysql8.sql"
docker exec -i wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry-vue < "$ROOT_DIR/backend/script/sql/aihr_model_mysql8.sql"
docker exec -i wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry-vue < "$ROOT_DIR/backend/script/sql/aihr_practice_mysql8.sql"
docker exec wygj-mysql mysql -uroot -proot --default-character-set=utf8mb4 ry-vue \
-e "select count(*) as tables_count from information_schema.tables where table_schema = 'ry-vue';"