diff --git a/.env.example b/.env.example index 0208415..5cfb2e5 100644 --- a/.env.example +++ b/.env.example @@ -73,6 +73,10 @@ ARXIV_MIN_INTERVAL=4 # 天地图浏览器端 Key(管理后台地图 + 小程序 web-view 雷达页,与 slake-school-web 的 VITE_TIANDITU_TK 一致) TIANDITU_TK=cc3f61fa6cafe2f0ad440018d0f07b13 +# 小程序 web-view 业务域名校验(微信公众平台下载校验文件后填写) +# WECHAT_MP_WEBVIEW_VERIFY_FILE=xxxxxxxx.txt +# WECHAT_MP_WEBVIEW_VERIFY_CONTENT=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + # Sanctum SPA 本地域名(管理后台 Vite 5173 需包含) SANCTUM_STATEFUL_DOMAINS=localhost,localhost:5173,127.0.0.1,127.0.0.1:8000 diff --git a/app/Http/Controllers/Admin/MiniappUserController.php b/app/Http/Controllers/Admin/MiniappUserController.php index 5a483c4..8bedb3c 100644 --- a/app/Http/Controllers/Admin/MiniappUserController.php +++ b/app/Http/Controllers/Admin/MiniappUserController.php @@ -13,6 +13,7 @@ use App\Models\Teacher; use App\Services\GridMemberScopeService; use App\Services\TeacherFollowPlanService; use App\Support\ApiResponse; +use App\Support\Miniapp\MiniappUserPermission; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -52,6 +53,15 @@ class MiniappUserController extends Controller $query->whereNull('teacher_id'); } + if ($request->filled('identity_type')) { + $identityType = (string) $request->query('identity_type'); + if ($identityType === 'none') { + $query->whereNull('identity_type'); + } elseif (in_array($identityType, ['incubation', 'partner'], true)) { + $query->where('identity_type', $identityType); + } + } + $paginator = $query ->orderByDesc('id') ->paginate((int) $request->query('page_size', 20)) @@ -80,18 +90,21 @@ class MiniappUserController extends Controller $data = $request->validate([ 'admin_user_id' => ['nullable', 'integer', 'exists:admin_users,id'], + 'identity_type' => ['nullable', 'string', Rule::in(['incubation', 'partner'])], ]); $adminUserId = $data['admin_user_id'] ?? null; + $identityType = $data['identity_type'] ?? null; + if ($adminUserId) { - $admin = AdminUser::query()->with('roles:id,code')->findOrFail($adminUserId); - $codes = $admin->roles->pluck('code')->all(); - if (! in_array('super_admin', $codes, true) && ! in_array('grid_member', $codes, true)) { - return $this->fail('仅可绑定管理员或网格员账号', 422); + $admin = AdminUser::query()->with('roles:id,code,name')->findOrFail($adminUserId); + if ((int) $admin->status !== 1) { + return $this->fail('该后台账号已停用,无法绑定', 422); } } $model->admin_user_id = $adminUserId; + $model->identity_type = $identityType; $model->save(); $model->load([ @@ -99,7 +112,7 @@ class MiniappUserController extends Controller 'adminUser.roles:id,code,name', ]); - return $this->ok($this->serializeDetail($model), $adminUserId ? '已绑定后台账号' : '已解除绑定'); + return $this->ok($this->serializeDetail($model), '已保存'); } public function convertToTeacher(Request $request, int $miniappUser): JsonResponse @@ -304,6 +317,8 @@ class MiniappUserController extends Controller 'teacher_name' => $u->teacher?->name, 'admin_user_id' => $u->admin_user_id, 'admin_user_name' => $u->adminUser?->real_name ?: $u->adminUser?->username, + 'identity_type' => $u->identity_type, + 'identity_label' => MiniappUserPermission::identityTypeLabel($u->identity_type), 'staff_role_label' => $this->staffRoleLabel($u), 'converted_at' => $u->converted_at?->toIso8601String(), 'course_titles' => $enrollments['course_titles'], @@ -334,15 +349,19 @@ class MiniappUserController extends Controller return null; } - $codes = $u->adminUser->roles->pluck('code')->all(); - if (in_array('super_admin', $codes, true)) { + $roles = $u->adminUser->roles; + if ($roles->isEmpty()) { + return '后台账号'; + } + + if ($roles->contains(fn ($role) => $role->code === 'super_admin')) { return '管理员'; } - if (in_array('grid_member', $codes, true)) { + if ($roles->contains(fn ($role) => $role->code === 'grid_member')) { return '网格员'; } - return null; + return $roles->pluck('name')->filter()->unique()->implode('、') ?: '后台账号'; } protected function loadEnrollments(MiniappUser $u, bool $detailed = false): array diff --git a/app/Http/Controllers/Admin/PastReviewController.php b/app/Http/Controllers/Admin/PastReviewController.php new file mode 100644 index 0000000..20b4d73 --- /dev/null +++ b/app/Http/Controllers/Admin/PastReviewController.php @@ -0,0 +1,97 @@ +filled('status')) { + $query->where('status', (int) $request->query('status')); + } + if ($kw = $request->query('keyword')) { + $query->where('title', 'like', "%{$kw}%"); + } + + $paginator = $query + ->orderBy('sort') + ->orderByDesc('id') + ->paginate((int) $request->query('page_size', 20)) + ->withQueryString(); + + $paginator->getCollection()->transform(fn (PastReview $row) => $this->serialize($row)); + + return $this->paginated($paginator); + } + + public function show(int $pastReview): JsonResponse + { + $model = PastReview::query()->findOrFail($pastReview); + + return $this->ok($this->serialize($model)); + } + + public function store(Request $request): JsonResponse + { + $data = $this->validated($request); + $row = PastReview::query()->create($data); + + return $this->ok(['id' => $row->id], '已创建'); + } + + public function update(Request $request, int $pastReview): JsonResponse + { + $model = PastReview::query()->findOrFail($pastReview); + $data = $this->validated($request, $model); + $model->fill($data); + $model->save(); + + return $this->ok($this->serialize($model->fresh()), '已保存'); + } + + public function destroy(int $pastReview): JsonResponse + { + PastReview::query()->findOrFail($pastReview)->delete(); + + return $this->ok(null, '已删除'); + } + + /** + * @return array + */ + protected function validated(Request $request, ?PastReview $existing = null): array + { + return $request->validate([ + 'title' => [$existing ? 'sometimes' : 'required', 'string', 'max:255'], + 'cover_url' => ['nullable', 'string', 'max:512'], + 'sort' => [$existing ? 'sometimes' : 'required', 'integer', 'min:0'], + 'status' => ['sometimes', 'integer', 'in:0,1'], + ]); + } + + /** + * @return array + */ + protected function serialize(PastReview $row): array + { + return [ + 'id' => $row->id, + 'title' => $row->title, + 'cover_url' => $row->cover_url, + 'sort' => $row->sort, + 'status' => $row->status, + 'created_at' => $row->created_at?->toIso8601String(), + 'updated_at' => $row->updated_at?->toIso8601String(), + ]; + } +} diff --git a/app/Http/Controllers/Admin/RadarMapController.php b/app/Http/Controllers/Admin/RadarMapController.php index e798d26..48c55d4 100644 --- a/app/Http/Controllers/Admin/RadarMapController.php +++ b/app/Http/Controllers/Admin/RadarMapController.php @@ -30,6 +30,26 @@ class RadarMapController extends Controller $bounds = $this->resolveBounds($universities); $schools = $universities->map(function (University $u) use ($bounds) { + $teachers = $u->teachers->map(fn ($t) => [ + 'id' => $t->id, + 'name' => $t->name, + 'department' => $t->department, + 'bio' => $t->bio, + 'title' => $t->title, + 'research_direction' => $t->researchDirections->pluck('name')->join('、') ?: null, + 'research_directions' => $t->researchDirections->map(fn ($d) => [ + 'id' => $d->id, + 'name' => $d->name, + ])->values()->all(), + 'star_level_item' => $t->starLevelItem ? [ + 'id' => $t->starLevelItem->id, + 'label' => $t->starLevelItem->label, + 'value' => $t->starLevelItem->value, + ] : null, + ])->values(); + + $colleges = $this->buildColleges($teachers); + return [ 'id' => $u->id, 'name' => $u->name, @@ -39,23 +59,8 @@ class RadarMapController extends Controller 'left_percent' => $this->toPercent($u->longitude, $bounds['min_lng'], $bounds['max_lng']), 'top_percent' => $this->toPercentInverted($u->latitude, $bounds['min_lat'], $bounds['max_lat']), 'teachers_count' => $u->teachers->count(), - 'teachers' => $u->teachers->map(fn ($t) => [ - 'id' => $t->id, - 'name' => $t->name, - 'department' => $t->department, - 'bio' => $t->bio, - 'title' => $t->title, - 'research_direction' => $t->researchDirections->pluck('name')->join('、') ?: null, - 'research_directions' => $t->researchDirections->map(fn ($d) => [ - 'id' => $d->id, - 'name' => $d->name, - ])->values()->all(), - 'star_level_item' => $t->starLevelItem ? [ - 'id' => $t->starLevelItem->id, - 'label' => $t->starLevelItem->label, - 'value' => $t->starLevelItem->value, - ] : null, - ])->values(), + 'colleges' => $colleges, + 'teachers' => $teachers, ]; })->values(); @@ -261,4 +266,47 @@ class RadarMapController extends Controller return round(10 + $ratio * 80, 2); } + + /** + * @param \Illuminate\Support\Collection> $teachers + * @return list>}> + */ + protected function buildColleges($teachers): array + { + $groups = []; + foreach ($teachers as $teacher) { + $department = trim((string) ($teacher['department'] ?? '')); + $key = $department !== '' ? $department : '__none__'; + if (! isset($groups[$key])) { + $groups[$key] = [ + 'key' => $key, + 'name' => $department !== '' ? $department : '暂无学院归属', + 'teachers' => collect(), + ]; + } + $groups[$key]['teachers']->push($teacher); + } + + $colleges = collect($groups) + ->map(fn ($group) => [ + 'key' => $group['key'], + 'name' => $group['name'], + 'teachers_count' => $group['teachers']->count(), + 'teachers' => $group['teachers']->values(), + ]) + ->sort(function ($a, $b) { + if ($a['key'] === '__none__') { + return 1; + } + if ($b['key'] === '__none__') { + return -1; + } + + return $b['teachers_count'] <=> $a['teachers_count']; + }) + ->values() + ->all(); + + return $colleges; + } } diff --git a/app/Http/Controllers/Miniapp/CrawlAddressController.php b/app/Http/Controllers/Miniapp/CrawlAddressController.php index 7fe0bcb..4cc26d5 100644 --- a/app/Http/Controllers/Miniapp/CrawlAddressController.php +++ b/app/Http/Controllers/Miniapp/CrawlAddressController.php @@ -32,7 +32,7 @@ class CrawlAddressController extends BaseController } $payload = MiniappPresenter::userPayload($user); - if (! ($payload['is_admin'] || $payload['is_grid_member'])) { + if (! ($payload['can_use_crawler'] ?? false)) { abort(403, '无权使用数据爬虫'); } diff --git a/app/Http/Controllers/Miniapp/CrawlJobController.php b/app/Http/Controllers/Miniapp/CrawlJobController.php index 2c96685..2731f84 100644 --- a/app/Http/Controllers/Miniapp/CrawlJobController.php +++ b/app/Http/Controllers/Miniapp/CrawlJobController.php @@ -51,7 +51,7 @@ class CrawlJobController extends BaseController } $payload = MiniappPresenter::userPayload($user); - if (! ($payload['is_admin'] || $payload['is_grid_member'])) { + if (! ($payload['can_use_crawler'] ?? false)) { abort(403, '无权使用数据爬虫'); } diff --git a/app/Http/Controllers/Miniapp/DemandController.php b/app/Http/Controllers/Miniapp/DemandController.php index b63edd2..7701474 100644 --- a/app/Http/Controllers/Miniapp/DemandController.php +++ b/app/Http/Controllers/Miniapp/DemandController.php @@ -8,6 +8,7 @@ use App\Models\DictItem; use App\Models\DictType; use App\Models\MiniappUser; use App\Support\ApiResponse; +use App\Support\Miniapp\MiniappUserPermission; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\Rule; @@ -20,6 +21,11 @@ class DemandController extends Controller { /** @var MiniappUser $user */ $user = $request->user(); + $permissions = MiniappUserPermission::resolve($user); + + if (! ($permissions['can_access_demands'] ?? false)) { + return $this->fail('暂无相关权限', 403); + } $items = Demand::query() ->with(['typeItem', 'statusItem']) @@ -38,6 +44,11 @@ class DemandController extends Controller { /** @var MiniappUser $user */ $user = $request->user(); + $permissions = MiniappUserPermission::resolve($user); + + if (! ($permissions['can_access_demands'] ?? false)) { + return $this->fail('暂无相关权限', 403); + } $typeDictId = DictType::query()->where('code', 'demand_type')->where('status', 1)->value('id'); $statusDictId = DictType::query()->where('code', 'demand_status')->where('status', 1)->value('id'); diff --git a/app/Http/Controllers/Miniapp/NewsController.php b/app/Http/Controllers/Miniapp/NewsController.php index 5738a57..ff696f4 100644 --- a/app/Http/Controllers/Miniapp/NewsController.php +++ b/app/Http/Controllers/Miniapp/NewsController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\News; use App\Support\ApiResponse; use App\Support\Miniapp\MiniappPresenter; +use App\Support\News\UniversityNewsCategory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -22,6 +23,10 @@ class NewsController extends Controller if ($request->filled('category_dict_item_id')) { $query->where('category_dict_item_id', (int) $request->query('category_dict_item_id')); + } elseif ($request->boolean('university_news_only')) { + UniversityNewsCategory::applyUniversityNewsOnly($query); + } elseif ($request->boolean('exclude_university_news')) { + UniversityNewsCategory::applyExcludeUniversityNews($query); } $paginator = $query diff --git a/app/Http/Controllers/Miniapp/PastReviewController.php b/app/Http/Controllers/Miniapp/PastReviewController.php new file mode 100644 index 0000000..978c9b8 --- /dev/null +++ b/app/Http/Controllers/Miniapp/PastReviewController.php @@ -0,0 +1,35 @@ +query('page_size', 10))); + + $items = PastReview::query() + ->where('status', 1) + ->orderBy('sort') + ->orderByDesc('id') + ->limit($pageSize) + ->get() + ->map(fn (PastReview $row) => [ + 'id' => $row->id, + 'title' => $row->title, + 'cover_url' => $row->cover_url, + ]) + ->values() + ->all(); + + return $this->ok(['items' => $items]); + } +} diff --git a/app/Models/MiniappUser.php b/app/Models/MiniappUser.php index 26a46b7..297260b 100644 --- a/app/Models/MiniappUser.php +++ b/app/Models/MiniappUser.php @@ -25,6 +25,7 @@ class MiniappUser extends Authenticatable 'job_title', 'teacher_id', 'admin_user_id', + 'identity_type', 'converted_at', 'status', ]; diff --git a/app/Models/PastReview.php b/app/Models/PastReview.php new file mode 100644 index 0000000..8e26f8d --- /dev/null +++ b/app/Models/PastReview.php @@ -0,0 +1,23 @@ + 'integer', + 'status' => 'integer', + ]; +} diff --git a/app/Support/Miniapp/MiniappPresenter.php b/app/Support/Miniapp/MiniappPresenter.php index 0c6eeb1..a3d277e 100644 --- a/app/Support/Miniapp/MiniappPresenter.php +++ b/app/Support/Miniapp/MiniappPresenter.php @@ -481,18 +481,14 @@ class MiniappPresenter ]); $directions = $user->researchDirections; - $isPartner = (bool) ($user->teacher?->is_partner ?? false); - $isAdmin = false; + $permissions = MiniappUserPermission::resolve($user); $isGridMember = false; - if ($user->adminUser) { + if ($user->adminUser && (int) $user->adminUser->status === 1) { $roleCodes = $user->adminUser->roles->pluck('code')->all(); - $isAdmin = in_array('super_admin', $roleCodes, true); $isGridMember = in_array('grid_member', $roleCodes, true); } - $canSeePrivileged = $isAdmin || $isGridMember || $isPartner; - return [ 'id' => $user->id, 'nickname' => $user->nickname, @@ -503,11 +499,18 @@ class MiniappPresenter 'job_title' => $user->job_title, 'research_direction' => $directions->pluck('name')->implode('、') ?: null, 'research_direction_ids' => $directions->pluck('id')->values()->all(), - 'is_partner' => $isPartner, - 'is_admin' => $isAdmin, + 'identity_type' => $user->identity_type, + 'role' => $permissions['role'], + 'role_label' => $permissions['role_label'], + 'is_partner' => $permissions['is_partner'], + 'is_incubation' => $permissions['is_incubation'], + 'is_admin' => $permissions['is_admin'], 'is_grid_member' => $isGridMember, - 'can_see_radar' => $canSeePrivileged, - 'can_see_papers' => $canSeePrivileged, + 'is_staff' => $permissions['can_use_crawler'], + 'can_see_radar' => $permissions['can_see_radar'], + 'can_see_papers' => $permissions['can_see_papers'], + 'can_access_demands' => $permissions['can_access_demands'], + 'can_use_crawler' => $permissions['can_use_crawler'], 'admin_user_id' => $user->admin_user_id, 'teacher_id' => $user->teacher_id, ]; diff --git a/app/Support/Miniapp/MiniappUserPermission.php b/app/Support/Miniapp/MiniappUserPermission.php new file mode 100644 index 0000000..6787aff --- /dev/null +++ b/app/Support/Miniapp/MiniappUserPermission.php @@ -0,0 +1,83 @@ +loadMissing([ + 'teacher:id,is_partner,name', + 'adminUser.roles:id,code', + ]); + + $isAdmin = $user->adminUser && (int) $user->adminUser->status === 1; + + $teacherPartner = (bool) ($user->teacher?->is_partner ?? false); + $identityType = $user->identity_type; + + if ($isAdmin) { + $role = self::ROLE_ADMIN; + } elseif ($identityType === self::ROLE_PARTNER || $teacherPartner) { + $role = self::ROLE_PARTNER; + } elseif ($identityType === self::ROLE_INCUBATION) { + $role = self::ROLE_INCUBATION; + } else { + $role = self::ROLE_NORMAL; + } + + return [ + 'role' => $role, + 'role_label' => self::roleLabel($role), + 'is_admin' => $isAdmin, + 'is_partner' => $role === self::ROLE_PARTNER, + 'is_incubation' => $role === self::ROLE_INCUBATION, + 'can_see_radar' => in_array($role, [self::ROLE_ADMIN, self::ROLE_PARTNER], true), + 'can_see_papers' => in_array($role, [self::ROLE_ADMIN, self::ROLE_PARTNER], true), + 'can_access_demands' => in_array($role, [self::ROLE_ADMIN, self::ROLE_PARTNER, self::ROLE_INCUBATION], true), + 'can_use_crawler' => $role === self::ROLE_ADMIN, + ]; + } + + public static function roleLabel(string $role): string + { + return match ($role) { + self::ROLE_ADMIN => '管理员', + self::ROLE_PARTNER => '合作伙伴', + self::ROLE_INCUBATION => '入孵用户', + default => '普通用户', + }; + } + + public static function identityTypeLabel(?string $identityType): ?string + { + return match ($identityType) { + self::ROLE_INCUBATION => '入孵用户', + self::ROLE_PARTNER => '合作伙伴', + default => null, + }; + } +} diff --git a/app/Support/News/UniversityNewsCategory.php b/app/Support/News/UniversityNewsCategory.php new file mode 100644 index 0000000..9584ad1 --- /dev/null +++ b/app/Support/News/UniversityNewsCategory.php @@ -0,0 +1,169 @@ +where('code', 'news_category')->where('status', 1)->value('id'); + if (! $typeId) { + return null; + } + + $items = DictItem::query() + ->where('dict_type_id', $typeId) + ->where(function ($q) { + $q->where('value', self::VALUE) + ->orWhere('label', self::LABEL); + }) + ->orderBy('id') + ->get(); + + if ($items->isEmpty()) { + return null; + } + + if ($items->count() === 1) { + $item = $items->first(); + $item->fill(['label' => self::LABEL, 'value' => self::VALUE, 'status' => 1]); + $item->save(); + + return (int) $item->id; + } + + $keeper = $items->sort(function (DictItem $a, DictItem $b) { + $countA = self::referenceCount((int) $a->id); + $countB = self::referenceCount((int) $b->id); + if ($countA !== $countB) { + return $countB <=> $countA; + } + + return $a->id <=> $b->id; + })->first(); + + if (! $keeper) { + return null; + } + + return DB::transaction(function () use ($items, $keeper) { + $keeperId = (int) $keeper->id; + + foreach ($items as $item) { + if ((int) $item->id === $keeperId) { + continue; + } + + News::query() + ->where('category_dict_item_id', $item->id) + ->update(['category_dict_item_id' => $keeperId]); + + CrawlAddress::query() + ->where('category_dict_item_id', $item->id) + ->update(['category_dict_item_id' => $keeperId]); + + $item->delete(); + } + + $keeper->fill([ + 'label' => self::LABEL, + 'value' => self::VALUE, + 'status' => 1, + ]); + $keeper->save(); + + return $keeperId; + }); + } + + public static function canonicalId(): ?int + { + $typeId = DictType::query()->where('code', 'news_category')->where('status', 1)->value('id'); + if (! $typeId) { + return null; + } + + $item = DictItem::query() + ->where('dict_type_id', $typeId) + ->where('status', 1) + ->where('value', self::VALUE) + ->orderBy('id') + ->first(); + + if ($item) { + return (int) $item->id; + } + + $item = DictItem::query() + ->where('dict_type_id', $typeId) + ->where('status', 1) + ->where('label', self::LABEL) + ->orderBy('id') + ->first(); + + return $item ? (int) $item->id : null; + } + + /** + * @return list + */ + public static function categoryIds(): array + { + $id = self::canonicalId(); + + return $id ? [$id] : []; + } + + public static function applyUniversityNewsOnly(Builder $query): Builder + { + $id = self::canonicalId(); + + return $query->where('category_dict_item_id', $id ?? -1); + } + + public static function applyExcludeUniversityNews(Builder $query): Builder + { + $id = self::canonicalId(); + if (! $id) { + return $query; + } + + return $query->where(function ($q) use ($id) { + $q->whereNull('category_dict_item_id') + ->orWhere('category_dict_item_id', '!=', $id); + }); + } + + public static function isUniversityNewsCategory(?DictItem $item): bool + { + if (! $item) { + return false; + } + + $canonicalId = self::canonicalId(); + + return $canonicalId + ? (int) $item->id === $canonicalId + : ($item->value === self::VALUE || $item->label === self::LABEL); + } + + protected static function referenceCount(int $dictItemId): int + { + return News::query()->where('category_dict_item_id', $dictItemId)->count() + + CrawlAddress::query()->where('category_dict_item_id', $dictItemId)->count(); + } +} diff --git a/config/services.php b/config/services.php index cb92e42..39b65e2 100644 --- a/config/services.php +++ b/config/services.php @@ -37,6 +37,9 @@ return [ 'secret' => env('WX_SECRET'), 'env_version' => env('WX_MINIPROGRAM_ENV_VERSION', 'develop'), 'checkin_page' => 'subpkg/checkin/index', + // 小程序 web-view 业务域名校验文件(微信公众平台 → 开发设置 → 业务域名) + 'webview_verify_file' => env('WECHAT_MP_WEBVIEW_VERIFY_FILE'), + 'webview_verify_content' => env('WECHAT_MP_WEBVIEW_VERIFY_CONTENT'), ], ], diff --git a/database/migrations/2026_06_23_000001_create_past_reviews_table.php b/database/migrations/2026_06_23_000001_create_past_reviews_table.php new file mode 100644 index 0000000..7ba902a --- /dev/null +++ b/database/migrations/2026_06_23_000001_create_past_reviews_table.php @@ -0,0 +1,26 @@ +id(); + $table->string('title'); + $table->string('cover_url', 512)->nullable(); + $table->unsignedInteger('sort')->default(0); + $table->tinyInteger('status')->default(1)->comment('1=显示 0=隐藏'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + public function down(): void + { + Schema::dropIfExists('past_reviews'); + } +}; diff --git a/database/migrations/2026_06_23_000002_add_identity_type_to_miniapp_users.php b/database/migrations/2026_06_23_000002_add_identity_type_to_miniapp_users.php new file mode 100644 index 0000000..4bdf048 --- /dev/null +++ b/database/migrations/2026_06_23_000002_add_identity_type_to_miniapp_users.php @@ -0,0 +1,22 @@ +string('identity_type', 32)->nullable()->after('admin_user_id')->comment('incubation=入孵用户 partner=合作伙伴'); + }); + } + + public function down(): void + { + Schema::table('miniapp_users', function (Blueprint $table) { + $table->dropColumn('identity_type'); + }); + } +}; diff --git a/database/migrations/2026_06_23_000003_dedupe_university_news_category.php b/database/migrations/2026_06_23_000003_dedupe_university_news_category.php new file mode 100644 index 0000000..48cc722 --- /dev/null +++ b/database/migrations/2026_06_23_000003_dedupe_university_news_category.php @@ -0,0 +1,17 @@ + $row['label'], 'sort' => $row['sort'], 'status' => 1] ); } + + // 先合并历史重复项,再按 value 唯一维护「高校要闻」(爬虫地址绑定沿用原 ID) + UniversityNewsCategory::consolidateDuplicates(); + + DictItem::query()->updateOrCreate( + ['dict_type_id' => $type->id, 'value' => UniversityNewsCategory::VALUE], + [ + 'label' => UniversityNewsCategory::LABEL, + 'sort' => 40, + 'status' => 1, + ] + ); + + UniversityNewsCategory::consolidateDuplicates(); } } diff --git a/database/seeders/OperationsMenusSeeder.php b/database/seeders/OperationsMenusSeeder.php index 69e4679..bed4cf3 100644 --- a/database/seeders/OperationsMenusSeeder.php +++ b/database/seeders/OperationsMenusSeeder.php @@ -39,6 +39,7 @@ class OperationsMenusSeeder extends Seeder $opsChildren = [ ['/courses', 'OperationsCourses', '课程管理', 'operations/courses/index', 10, 'Notebook'], ['/activities', 'OperationsActivities', '活动管理', 'operations/activities/index', 20, 'Calendar'], + ['/past-reviews', 'OperationsPastReviews', '往期回顾', 'operations/past-reviews/index', 25, 'Picture'], ['/news', 'OperationsNews', '资讯管理', 'operations/news/index', 30, 'Reading'], ]; diff --git a/database/seeders/PastReviewMenusSeeder.php b/database/seeders/PastReviewMenusSeeder.php new file mode 100644 index 0000000..1d691c5 --- /dev/null +++ b/database/seeders/PastReviewMenusSeeder.php @@ -0,0 +1,45 @@ +where('code', 'super_admin')->first(); + if (! $role) { + $this->command?->warn('未找到 super_admin 角色,已跳过往期回顾菜单。'); + + return; + } + + $opsRoot = Menu::query()->where('path', '/operations')->whereNull('parent_id')->first(); + if (! $opsRoot) { + $this->command?->warn('未找到运营管理菜单,已跳过往期回顾菜单。'); + + return; + } + + $menu = Menu::query()->firstOrCreate( + ['path' => '/past-reviews', 'parent_id' => $opsRoot->id], + [ + 'name' => 'OperationsPastReviews', + 'title' => '往期回顾', + 'component' => 'operations/past-reviews/index', + 'icon' => 'Picture', + 'sort' => 25, + 'visible' => 1, + 'keep_alive' => 0, + 'permission_code' => null, + 'status' => 1, + ] + ); + + $role->menus()->syncWithoutDetaching([$opsRoot->id, $menu->id]); + $this->command?->info('往期回顾菜单已挂载到运营管理。'); + } +} diff --git a/database/seeders/TeacherDictionarySeeder.php b/database/seeders/TeacherDictionarySeeder.php index f1363be..acdef21 100644 --- a/database/seeders/TeacherDictionarySeeder.php +++ b/database/seeders/TeacherDictionarySeeder.php @@ -24,7 +24,7 @@ class TeacherDictionarySeeder extends Seeder ); $status = DictType::query()->updateOrCreate( ['code' => 'teacher_status'], - ['name' => '老师跟进状态', 'remark' => '伙伴/持续跟进/暂停跟进', 'status' => 1, 'sort' => 52] + ['name' => '老师跟进状态', 'remark' => '入孵用户/持续跟进/暂停跟进', 'status' => 1, 'sort' => 52] ); $method = DictType::query()->updateOrCreate( ['code' => 'follow_method'], @@ -97,7 +97,7 @@ class TeacherDictionarySeeder extends Seeder } foreach ([ - ['label' => '伙伴', 'value' => 'partner', 'sort' => 10], + ['label' => '入孵用户', 'value' => 'partner', 'sort' => 10], ['label' => '持续跟进', 'value' => 'active', 'sort' => 20], ['label' => '暂停跟进', 'value' => 'paused', 'sort' => 30], ] as $row) { diff --git a/public/admin/assets/AdminLayout-BJlk0I2v.js b/public/admin/assets/AdminLayout-BJlk0I2v.js new file mode 100644 index 0000000..0656088 --- /dev/null +++ b/public/admin/assets/AdminLayout-BJlk0I2v.js @@ -0,0 +1 @@ +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,Y as s,Z as c,at as l,b as u,f as d,h as f,ht as p,m,q as h,tn as g,x as _,y as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as y,d as b,h as x,l as S,n as C,o as w,s as T,t as E,v as D}from"./index-CPrkFf57.js";var O={class:`user-link`},k=T(n({__name:`AdminLayout`,setup(n){let T=y(),k=w(),A=E(),j=v(()=>T.path),M=p(!1),N=p(!1),P=p({password:``,password_confirmation:``}),F=v(()=>A.user?.username||`—`);function I(e){return e&&x[e]||D}function L(e){e&&e!==T.path&&k.push(e)}async function R(e){e===`out`&&(await A.logout(),await k.replace({name:`login`})),e===`pwd`&&(P.value={password:``,password_confirmation:``},M.value=!0)}async function z(){N.value=!0;try{await C(P.value),S.success(`密码已更新`),M.value=!1}finally{N.value=!1}}return(n,p)=>{let v=s(`el-icon`),y=s(`el-dropdown-item`),x=s(`el-dropdown-menu`),S=s(`el-dropdown`),C=s(`el-header`),w=s(`el-menu-item`),E=s(`el-sub-menu`),D=s(`el-menu`),k=s(`el-aside`),B=s(`router-view`),V=s(`el-main`),H=s(`el-container`),U=s(`el-input`),W=s(`el-form-item`),G=s(`el-form`),K=s(`el-button`),q=s(`el-dialog`);return i(),e(m,null,[r(H,{class:`admin-layout`,direction:`vertical`},{default:l(()=>[r(C,{class:`layout-topbar`,height:`52px`},{default:l(()=>[p[7]||=u(`div`,{class:`brand`},`S-lake先进技术发展中心`,-1),p[8]||=u(`div`,{class:`spacer`},null,-1),r(S,{class:`topbar-user`,trigger:`click`,onCommand:R},{dropdown:l(()=>[r(x,null,{default:l(()=>[r(y,{command:`pwd`},{default:l(()=>[...p[5]||=[o(`修改密码`,-1)]]),_:1}),r(y,{command:`out`,divided:``,class:`dropdown-logout`},{default:l(()=>[...p[6]||=[o(` 退出登录 `,-1)]]),_:1})]),_:1})]),default:l(()=>[u(`span`,O,[o(g(t(A).user?.real_name||t(A).user?.username)+` `,1),r(v,{class:`el-icon--right`},{default:l(()=>[r(t(b))]),_:1})])]),_:1})]),_:1}),r(H,{class:`layout-body`},{default:l(()=>[r(k,{width:`260px`,class:`aside`},{default:l(()=>[r(D,{"default-active":j.value,class:`menu slake-menu`,"background-color":`#ffffff`,"text-color":`#495057`,"active-text-color":`#ffffff`},{default:l(()=>[(i(!0),e(m,null,h(t(A).menus,t=>(i(),e(m,{key:t.id},[t.children?.length?(i(),_(E,{key:0,index:String(t.id)},{title:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),default:l(()=>[(i(!0),e(m,null,h(t.children,e=>(i(),_(w,{key:e.id,index:e.path,onClick:t=>L(e.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(e.icon))))]),_:2},1024),u(`span`,null,g(e.title),1)]),_:2},1032,[`index`,`onClick`]))),128))]),_:2},1032,[`index`])):(i(),_(w,{key:1,index:t.path,onClick:e=>L(t.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),_:2},1032,[`index`,`onClick`]))],64))),128))]),_:1},8,[`default-active`])]),_:1}),r(V,{class:`main`},{default:l(()=>[r(B,null,{default:l(({Component:e})=>[(i(),_(f,null,[t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)],1024)),!t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),r(q,{modelValue:M.value,"onUpdate:modelValue":p[3]||=e=>M.value=e,class:`pwd-dialog`,title:`修改密码`,width:`480px`,"append-to-body":``,"destroy-on-close":``,onClosed:p[4]||=e=>P.value={password:``,password_confirmation:``}},{footer:l(()=>[r(K,{onClick:p[2]||=e=>M.value=!1},{default:l(()=>[...p[9]||=[o(`取消`,-1)]]),_:1}),r(K,{type:`primary`,loading:N.value,onClick:z},{default:l(()=>[...p[10]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(G,{class:`pwd-dialog-form`,"label-width":`100px`,onSubmit:d(z,[`prevent`])},{default:l(()=>[r(W,{label:`账号`},{default:l(()=>[r(U,{"model-value":F.value,readonly:``},null,8,[`model-value`])]),_:1}),r(W,{label:`新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password,"onUpdate:modelValue":p[0]||=e=>P.value.password=e,type:`password`,"show-password":``,placeholder:`至少 6 位`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1}),r(W,{label:`确认新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password_confirmation,"onUpdate:modelValue":p[1]||=e=>P.value.password_confirmation=e,type:`password`,"show-password":``,placeholder:`再次输入新密码`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-a06bbc42`]]);export{k as default}; \ No newline at end of file diff --git a/public/admin/assets/AdminLayout-36MHwY55.css b/public/admin/assets/AdminLayout-BiGa4y1e.css similarity index 56% rename from public/admin/assets/AdminLayout-36MHwY55.css rename to public/admin/assets/AdminLayout-BiGa4y1e.css index 9b78aac..27a4a61 100644 --- a/public/admin/assets/AdminLayout-36MHwY55.css +++ b/public/admin/assets/AdminLayout-BiGa4y1e.css @@ -1 +1 @@ -.admin-layout[data-v-54fb5ddb]{height:100vh}.admin-layout[data-v-54fb5ddb] .layout-body{flex:1;min-height:0;overflow:hidden}.admin-layout[data-v-54fb5ddb] .layout-topbar.el-header{--el-header-height:52px;--el-header-padding:0 16px;--topbar-title-font-size:1rem;border-bottom:1px solid var(--slake-border);box-sizing:border-box;background:#fff;align-items:center;height:52px;padding:0 16px;display:flex}.brand[data-v-54fb5ddb]{font-weight:600;font-size:var(--topbar-title-font-size);color:#212529;letter-spacing:.02em;flex-shrink:0;line-height:1}.aside[data-v-54fb5ddb]{border-right:1px solid var(--slake-border);background:#fff;flex-direction:column;height:100%;display:flex;overflow:hidden}.menu[data-v-54fb5ddb]{border-right:none;flex:1;min-height:0;overflow-y:auto}.slake-menu[data-v-54fb5ddb] .el-menu-item{border-radius:6px;width:calc(100% - 16px);margin:0 8px 4px}.slake-menu[data-v-54fb5ddb] .el-sub-menu__title{border-radius:6px;margin:0 8px 4px}.slake-menu[data-v-54fb5ddb] .el-menu-item:hover,.slake-menu[data-v-54fb5ddb] .el-sub-menu__title:hover{color:var(--slake-brand)!important;background:#b11e230f!important}.slake-menu[data-v-54fb5ddb] .el-menu-item.is-active{color:#fff!important;background:var(--slake-brand)!important}.slake-menu[data-v-54fb5ddb] .el-sub-menu.is-active>.el-sub-menu__title{color:var(--slake-brand)!important}.spacer[data-v-54fb5ddb]{flex:1}.topbar-user[data-v-54fb5ddb] .user-link{cursor:pointer;font-size:var(--topbar-title-font-size);color:#212529;outline:none;align-items:center;gap:6px;font-weight:500;line-height:1;display:inline-flex}.topbar-user[data-v-54fb5ddb] .user-link:hover,.topbar-user[data-v-54fb5ddb] .user-link:focus{color:var(--slake-brand)}.topbar-user[data-v-54fb5ddb] .el-icon{font-size:var(--topbar-title-font-size)}.main[data-v-54fb5ddb]{background:var(--slake-bg-page);box-sizing:border-box;height:100%;padding:16px;overflow:auto}.admin-layout .layout-topbar .topbar-user .user-link{font-size:var(--topbar-title-font-size)!important;line-height:1!important}.el-overlay-dialog:has(.el-dialog.pwd-dialog){align-items:center}.el-overlay-dialog .el-dialog.pwd-dialog{flex-direction:column;align-self:center;width:480px;max-width:calc(100vw - 32px);display:flex;height:auto!important;max-height:none!important;margin:12vh auto 24px!important}.pwd-dialog .el-dialog__header{flex:none}.pwd-dialog .el-dialog__body{padding:12px 20px 4px;flex:none!important;min-height:0!important;overflow:visible!important}.pwd-dialog .el-dialog__footer{flex:none;padding:12px 20px 16px}.pwd-dialog-form .el-form-item{margin-bottom:14px}.pwd-dialog-form .el-form-item:last-child{margin-bottom:0}.pwd-dialog-form .el-form-item__label{white-space:nowrap;line-height:32px}.el-dropdown-menu__item.dropdown-logout{color:var(--slake-brand)!important} +.admin-layout[data-v-a06bbc42]{height:100vh}.admin-layout[data-v-a06bbc42] .layout-body{flex:1;min-height:0;overflow:hidden}.admin-layout[data-v-a06bbc42] .layout-topbar.el-header{--el-header-height:52px;--el-header-padding:0 16px;--topbar-title-font-size:1rem;border-bottom:1px solid var(--slake-border);box-sizing:border-box;background:#fff;align-items:center;height:52px;padding:0 16px;display:flex}.brand[data-v-a06bbc42]{font-weight:600;font-size:var(--topbar-title-font-size);color:#212529;letter-spacing:.02em;flex-shrink:0;line-height:1}.aside[data-v-a06bbc42]{border-right:1px solid var(--slake-border);background:#fff;flex-direction:column;height:100%;display:flex;overflow:hidden}.menu[data-v-a06bbc42]{border-right:none;flex:1;min-height:0;overflow-y:auto}.slake-menu[data-v-a06bbc42] .el-menu-item{border-radius:6px;width:calc(100% - 16px);margin:0 8px 4px}.slake-menu[data-v-a06bbc42] .el-sub-menu__title{border-radius:6px;margin:0 8px 4px}.slake-menu[data-v-a06bbc42] .el-menu-item:hover,.slake-menu[data-v-a06bbc42] .el-sub-menu__title:hover{color:var(--slake-brand)!important;background:#b11e230f!important}.slake-menu[data-v-a06bbc42] .el-menu-item.is-active{color:#fff!important;background:var(--slake-brand)!important}.slake-menu[data-v-a06bbc42] .el-sub-menu.is-active>.el-sub-menu__title{color:var(--slake-brand)!important}.spacer[data-v-a06bbc42]{flex:1}.topbar-user[data-v-a06bbc42] .user-link{cursor:pointer;font-size:var(--topbar-title-font-size);color:#212529;outline:none;align-items:center;gap:6px;font-weight:500;line-height:1;display:inline-flex}.topbar-user[data-v-a06bbc42] .user-link:hover,.topbar-user[data-v-a06bbc42] .user-link:focus{color:var(--slake-brand)}.topbar-user[data-v-a06bbc42] .el-icon{font-size:var(--topbar-title-font-size)}.main[data-v-a06bbc42]{background:var(--slake-bg-page);box-sizing:border-box;height:100%;padding:16px;overflow:auto}.admin-layout .layout-topbar .topbar-user .user-link{font-size:var(--topbar-title-font-size)!important;line-height:1!important}.el-overlay-dialog:has(.el-dialog.pwd-dialog){align-items:center}.el-overlay-dialog .el-dialog.pwd-dialog{flex-direction:column;align-self:center;width:480px;max-width:calc(100vw - 32px);display:flex;height:auto!important;max-height:none!important;margin:12vh auto 24px!important}.pwd-dialog .el-dialog__header{flex:none}.pwd-dialog .el-dialog__body{padding:12px 20px 4px;flex:none!important;min-height:0!important;overflow:visible!important}.pwd-dialog .el-dialog__footer{flex:none;padding:12px 20px 16px}.pwd-dialog-form .el-form-item{margin-bottom:14px}.pwd-dialog-form .el-form-item:last-child{margin-bottom:0}.pwd-dialog-form .el-form-item__label{white-space:nowrap;line-height:32px}.el-dropdown-menu__item.dropdown-logout{color:var(--slake-brand)!important} diff --git a/public/admin/assets/AdminLayout-rkGKMvAb.js b/public/admin/assets/AdminLayout-rkGKMvAb.js deleted file mode 100644 index 0082bbe..0000000 --- a/public/admin/assets/AdminLayout-rkGKMvAb.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,Y as s,Z as c,at as l,b as u,f as d,h as f,ht as p,m,q as h,tn as g,x as _,y as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as y,d as b,h as x,l as S,n as C,o as w,s as T,t as E,v as D}from"./index-DHoSHxJa.js";var O={class:`user-link`},k=T(n({__name:`AdminLayout`,setup(n){let T=y(),k=w(),A=E(),j=v(()=>T.path),M=p(!1),N=p(!1),P=p({password:``,password_confirmation:``}),F=v(()=>A.user?.username||`—`);function I(e){return e&&x[e]||D}function L(e){e&&e!==T.path&&k.push(e)}async function R(e){e===`out`&&(await A.logout(),await k.replace({name:`login`})),e===`pwd`&&(P.value={password:``,password_confirmation:``},M.value=!0)}async function z(){N.value=!0;try{await C(P.value),S.success(`密码已更新`),M.value=!1}finally{N.value=!1}}return(n,p)=>{let v=s(`el-icon`),y=s(`el-dropdown-item`),x=s(`el-dropdown-menu`),S=s(`el-dropdown`),C=s(`el-header`),w=s(`el-menu-item`),E=s(`el-sub-menu`),D=s(`el-menu`),k=s(`el-aside`),B=s(`router-view`),V=s(`el-main`),H=s(`el-container`),U=s(`el-input`),W=s(`el-form-item`),G=s(`el-form`),K=s(`el-button`),q=s(`el-dialog`);return i(),e(m,null,[r(H,{class:`admin-layout`,direction:`vertical`},{default:l(()=>[r(C,{class:`layout-topbar`,height:`52px`},{default:l(()=>[p[7]||=u(`div`,{class:`brand`},`S-lake高校雷达网`,-1),p[8]||=u(`div`,{class:`spacer`},null,-1),r(S,{class:`topbar-user`,trigger:`click`,onCommand:R},{dropdown:l(()=>[r(x,null,{default:l(()=>[r(y,{command:`pwd`},{default:l(()=>[...p[5]||=[o(`修改密码`,-1)]]),_:1}),r(y,{command:`out`,divided:``,class:`dropdown-logout`},{default:l(()=>[...p[6]||=[o(` 退出登录 `,-1)]]),_:1})]),_:1})]),default:l(()=>[u(`span`,O,[o(g(t(A).user?.real_name||t(A).user?.username)+` `,1),r(v,{class:`el-icon--right`},{default:l(()=>[r(t(b))]),_:1})])]),_:1})]),_:1}),r(H,{class:`layout-body`},{default:l(()=>[r(k,{width:`260px`,class:`aside`},{default:l(()=>[r(D,{"default-active":j.value,class:`menu slake-menu`,"background-color":`#ffffff`,"text-color":`#495057`,"active-text-color":`#ffffff`},{default:l(()=>[(i(!0),e(m,null,h(t(A).menus,t=>(i(),e(m,{key:t.id},[t.children?.length?(i(),_(E,{key:0,index:String(t.id)},{title:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),default:l(()=>[(i(!0),e(m,null,h(t.children,e=>(i(),_(w,{key:e.id,index:e.path,onClick:t=>L(e.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(e.icon))))]),_:2},1024),u(`span`,null,g(e.title),1)]),_:2},1032,[`index`,`onClick`]))),128))]),_:2},1032,[`index`])):(i(),_(w,{key:1,index:t.path,onClick:e=>L(t.path)},{default:l(()=>[r(v,null,{default:l(()=>[(i(),_(c(I(t.icon))))]),_:2},1024),u(`span`,null,g(t.title),1)]),_:2},1032,[`index`,`onClick`]))],64))),128))]),_:1},8,[`default-active`])]),_:1}),r(V,{class:`main`},{default:l(()=>[r(B,null,{default:l(({Component:e})=>[(i(),_(f,null,[t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)],1024)),!t(T).meta.keepAlive&&e?(i(),_(c(e),{key:t(T).fullPath})):a(``,!0)]),_:1})]),_:1})]),_:1})]),_:1}),r(q,{modelValue:M.value,"onUpdate:modelValue":p[3]||=e=>M.value=e,class:`pwd-dialog`,title:`修改密码`,width:`480px`,"append-to-body":``,"destroy-on-close":``,onClosed:p[4]||=e=>P.value={password:``,password_confirmation:``}},{footer:l(()=>[r(K,{onClick:p[2]||=e=>M.value=!1},{default:l(()=>[...p[9]||=[o(`取消`,-1)]]),_:1}),r(K,{type:`primary`,loading:N.value,onClick:z},{default:l(()=>[...p[10]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(G,{class:`pwd-dialog-form`,"label-width":`100px`,onSubmit:d(z,[`prevent`])},{default:l(()=>[r(W,{label:`账号`},{default:l(()=>[r(U,{"model-value":F.value,readonly:``},null,8,[`model-value`])]),_:1}),r(W,{label:`新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password,"onUpdate:modelValue":p[0]||=e=>P.value.password=e,type:`password`,"show-password":``,placeholder:`至少 6 位`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1}),r(W,{label:`确认新密码`,required:``},{default:l(()=>[r(U,{modelValue:P.value.password_confirmation,"onUpdate:modelValue":p[1]||=e=>P.value.password_confirmation=e,type:`password`,"show-password":``,placeholder:`再次输入新密码`,autocomplete:`new-password`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-54fb5ddb`]]);export{k as default}; \ No newline at end of file diff --git a/public/admin/assets/HomeView-YwfjTZ3h.js b/public/admin/assets/HomeView-Bq5Pmq0E.js similarity index 94% rename from public/admin/assets/HomeView-YwfjTZ3h.js rename to public/admin/assets/HomeView-Bq5Pmq0E.js index 8165c7e..0231270 100644 --- a/public/admin/assets/HomeView-YwfjTZ3h.js +++ b/public/admin/assets/HomeView-Bq5Pmq0E.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,T as a,Y as o,at as s,b as c,tn as l,y as u}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{g as d,s as f}from"./index-DHoSHxJa.js";var p={class:`page`},m={class:`card-head`},h=f(n({__name:`HomeView`,setup(n){let f=u(()=>`/api`);return(n,u)=>{let h=o(`el-icon`),g=o(`el-descriptions-item`),_=o(`el-descriptions`),v=o(`el-card`);return i(),e(`div`,p,[r(v,{class:`card`,shadow:`hover`},{header:s(()=>[c(`div`,m,[r(h,{size:22},{default:s(()=>[r(t(d))]),_:1}),u[0]||=c(`span`,null,`高校雷达网 · 管理后台`,-1)])]),default:s(()=>[u[2]||=c(`p`,{class:`desc`},[a(`技术栈:Vue 3、Vite、TypeScript、Element Plus。本地已配置对接 `),c(`code`,null,`slake-school-service`),a(` 的 API 代理。`)],-1),r(_,{column:1,border:``},{default:s(()=>[r(g,{label:`VITE_API_BASE_URL`},{default:s(()=>[c(`code`,null,l(f.value),1)]),_:1}),r(g,{label:`说明`},{default:s(()=>[...u[1]||=[a(` 开发时请求 `,-1),c(`code`,null,`/api/*`,-1),a(` 由 Vite 转发至 `,-1),c(`code`,null,`VITE_PROXY_TARGET`,-1),a(`(默认 `,-1),c(`code`,null,`http://127.0.0.1:8000`,-1),a(`),与 Laravel 的 `,-1),c(`code`,null,`/api`,-1),a(` 前缀一致。 `,-1)]]),_:1})]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-436e6398`]]);export{h as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,T as a,Y as o,at as s,b as c,tn as l,y as u}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{g as d,s as f}from"./index-CPrkFf57.js";var p={class:`page`},m={class:`card-head`},h=f(n({__name:`HomeView`,setup(n){let f=u(()=>`/api`);return(n,u)=>{let h=o(`el-icon`),g=o(`el-descriptions-item`),_=o(`el-descriptions`),v=o(`el-card`);return i(),e(`div`,p,[r(v,{class:`card`,shadow:`hover`},{header:s(()=>[c(`div`,m,[r(h,{size:22},{default:s(()=>[r(t(d))]),_:1}),u[0]||=c(`span`,null,`高校雷达网 · 管理后台`,-1)])]),default:s(()=>[u[2]||=c(`p`,{class:`desc`},[a(`技术栈:Vue 3、Vite、TypeScript、Element Plus。本地已配置对接 `),c(`code`,null,`slake-school-service`),a(` 的 API 代理。`)],-1),r(_,{column:1,border:``},{default:s(()=>[r(g,{label:`VITE_API_BASE_URL`},{default:s(()=>[c(`code`,null,l(f.value),1)]),_:1}),r(g,{label:`说明`},{default:s(()=>[...u[1]||=[a(` 开发时请求 `,-1),c(`code`,null,`/api/*`,-1),a(` 由 Vite 转发至 `,-1),c(`code`,null,`VITE_PROXY_TARGET`,-1),a(`(默认 `,-1),c(`code`,null,`http://127.0.0.1:8000`,-1),a(`),与 Laravel 的 `,-1),c(`code`,null,`/api`,-1),a(` 前缀一致。 `,-1)]]),_:1})]),_:1})]),_:1})])}}}),[[`__scopeId`,`data-v-436e6398`]]);export{h as default}; \ No newline at end of file diff --git a/public/admin/assets/RichTextEditor-B2PNXVgT.js b/public/admin/assets/RichTextEditor-Rtwkj953.js similarity index 96% rename from public/admin/assets/RichTextEditor-B2PNXVgT.js rename to public/admin/assets/RichTextEditor-Rtwkj953.js index cf12306..59e7d0b 100644 --- a/public/admin/assets/RichTextEditor-B2PNXVgT.js +++ b/public/admin/assets/RichTextEditor-Rtwkj953.js @@ -1,4 +1,4 @@ -import{a as e,t}from"./rolldown-runtime-BYbx6iT9.js";import{A as n,C as r,Ct as i,D as a,E as o,G as s,H as c,I as l,P as u,Qt as d,et as f,ht as p,rt as m,z as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as g,r as _,s as v}from"./index-DHoSHxJa.js";var y=t(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.Quill=r():n.Quill=r()})(typeof self<`u`?self:e,function(){return(function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=109)})([(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=n(17),i=n(18),a=n(19),o=n(45),s=n(46),c=n(47),l=n(48),u=n(49),d=n(12),f=n(32),p=n(33),m=n(31),h=n(1);t.default={Scope:h.Scope,create:h.create,find:h.find,query:h.query,register:h.register,Container:r.default,Format:i.default,Leaf:a.default,Embed:l.default,Scroll:o.default,Block:c.default,Inline:s.default,Text:u.default,Attributor:{Attribute:d.default,Class:f.default,Style:p.default,Store:m.default}}}),(function(e,t,n){var r=this&&this.__extends||(function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})();Object.defineProperty(t,`__esModule`,{value:!0});var i=function(e){r(t,e);function t(t){var n=this;return t=`[Parchment] `+t,n=e.call(this,t)||this,n.message=t,n.name=n.constructor.name,n}return t}(Error);t.ParchmentError=i;var a={},o={},s={},c={};t.DATA_KEY=`__blot`;var l;(function(e){e[e.TYPE=3]=`TYPE`,e[e.LEVEL=12]=`LEVEL`,e[e.ATTRIBUTE=13]=`ATTRIBUTE`,e[e.BLOT=14]=`BLOT`,e[e.INLINE=7]=`INLINE`,e[e.BLOCK=11]=`BLOCK`,e[e.BLOCK_BLOT=10]=`BLOCK_BLOT`,e[e.INLINE_BLOT=6]=`INLINE_BLOT`,e[e.BLOCK_ATTRIBUTE=9]=`BLOCK_ATTRIBUTE`,e[e.INLINE_ATTRIBUTE=5]=`INLINE_ATTRIBUTE`,e[e.ANY=15]=`ANY`})(l=t.Scope||={});function u(e,t){var n=f(e);if(n==null)throw new i(`Unable to create `+e+` blot`);var r=n;return new r(e instanceof Node||e.nodeType===Node.TEXT_NODE?e:r.create(t),t)}t.create=u;function d(e,n){return n===void 0&&(n=!1),e==null?null:e[t.DATA_KEY]==null?n?d(e.parentNode,n):null:e[t.DATA_KEY].blot}t.find=d;function f(e,t){t===void 0&&(t=l.ANY);var n;if(typeof e==`string`)n=c[e]||a[e];else if(e instanceof Text||e.nodeType===Node.TEXT_NODE)n=c.text;else if(typeof e==`number`)e&l.LEVEL&l.BLOCK?n=c.block:e&l.LEVEL&l.INLINE&&(n=c.inline);else if(e instanceof HTMLElement){var r=(e.getAttribute(`class`)||``).split(/\s+/);for(var i in r)if(n=o[r[i]],n)break;n||=s[e.tagName]}return n==null?null:t&l.LEVEL&n.scope&&t&l.TYPE&n.scope?n:null}t.query=f;function p(){var e=[...arguments];if(e.length>1)return e.map(function(e){return p(e)});var t=e[0];if(typeof t.blotName!=`string`&&typeof t.attrName!=`string`)throw new i(`Invalid definition`);if(t.blotName===`abstract`)throw new i(`Cannot register abstract class`);return c[t.blotName||t.attrName]=t,typeof t.keyName==`string`?a[t.keyName]=t:(t.className!=null&&(o[t.className]=t),t.tagName!=null&&(Array.isArray(t.tagName)?t.tagName=t.tagName.map(function(e){return e.toUpperCase()}):t.tagName=t.tagName.toUpperCase(),(Array.isArray(t.tagName)?t.tagName:[t.tagName]).forEach(function(e){(s[e]==null||t.className==null)&&(s[e]=t)}))),t}t.register=p}),(function(e,t,n){var r=n(51),i=n(11),a=n(3),o=n(20),s=`\0`,c=function(e){Array.isArray(e)?this.ops=e:e!=null&&Array.isArray(e.ops)?this.ops=e.ops:this.ops=[]};c.prototype.insert=function(e,t){var n={};return e.length===0?this:(n.insert=e,typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n))},c.prototype.delete=function(e){return e<=0?this:this.push({delete:e})},c.prototype.retain=function(e,t){if(e<=0)return this;var n={retain:e};return typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n)},c.prototype.push=function(e){var t=this.ops.length,n=this.ops[t-1];if(e=a(!0,{},e),typeof n==`object`){if(typeof e.delete==`number`&&typeof n.delete==`number`)return this.ops[t-1]={delete:n.delete+e.delete},this;if(typeof n.delete==`number`&&e.insert!=null&&(--t,n=this.ops[t-1],typeof n!=`object`))return this.ops.unshift(e),this;if(i(e.attributes,n.attributes)){if(typeof e.insert==`string`&&typeof n.insert==`string`)return this.ops[t-1]={insert:n.insert+e.insert},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this;if(typeof e.retain==`number`&&typeof n.retain==`number`)return this.ops[t-1]={retain:n.retain+e.retain},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this}}return t===this.ops.length?this.ops.push(e):this.ops.splice(t,0,e),this},c.prototype.chop=function(){var e=this.ops[this.ops.length-1];return e&&e.retain&&!e.attributes&&this.ops.pop(),this},c.prototype.filter=function(e){return this.ops.filter(e)},c.prototype.forEach=function(e){this.ops.forEach(e)},c.prototype.map=function(e){return this.ops.map(e)},c.prototype.partition=function(e){var t=[],n=[];return this.forEach(function(r){(e(r)?t:n).push(r)}),[t,n]},c.prototype.reduce=function(e,t){return this.ops.reduce(e,t)},c.prototype.changeLength=function(){return this.reduce(function(e,t){return t.insert?e+o.length(t):t.delete?e-t.delete:e},0)},c.prototype.length=function(){return this.reduce(function(e,t){return e+o.length(t)},0)},c.prototype.slice=function(e,t){e||=0,typeof t!=`number`&&(t=1/0);for(var n=[],r=o.iterator(this.ops),i=0;i0&&n.next(a.retain-s)}for(var l=new c(r);t.hasNext()||n.hasNext();)if(n.peekType()===`insert`)l.push(n.next());else if(t.peekType()===`delete`)l.push(t.next());else{var u=Math.min(t.peekLength(),n.peekLength()),d=t.next(u),f=n.next(u);if(typeof f.retain==`number`){var p={};typeof d.retain==`number`?p.retain=u:p.insert=d.insert;var m=o.attributes.compose(d.attributes,f.attributes,typeof d.retain==`number`);if(m&&(p.attributes=m),l.push(p),!n.hasNext()&&i(l.ops[l.ops.length-1],p)){var h=new c(t.rest());return l.concat(h).chop()}}else typeof f.delete==`number`&&typeof d.retain==`number`&&l.push(f)}return l.chop()},c.prototype.concat=function(e){var t=new c(this.ops.slice());return e.ops.length>0&&(t.push(e.ops[0]),t.ops=t.ops.concat(e.ops.slice(1))),t},c.prototype.diff=function(e,t){if(this.ops===e.ops)return new c;var n=[this,e].map(function(t){return t.map(function(n){if(n.insert!=null)return typeof n.insert==`string`?n.insert:s;throw Error(`diff() called `+(t===e?`on`:`with`)+` non-document`)}).join(``)}),a=new c,l=r(n[0],n[1],t),u=o.iterator(this.ops),d=o.iterator(e.ops);return l.forEach(function(e){for(var t=e[1].length;t>0;){var n=0;switch(e[0]){case r.INSERT:n=Math.min(d.peekLength(),t),a.push(d.next(n));break;case r.DELETE:n=Math.min(t,u.peekLength()),u.next(n),a.delete(n);break;case r.EQUAL:n=Math.min(u.peekLength(),d.peekLength(),t);var s=u.next(n),c=d.next(n);i(s.insert,c.insert)?a.retain(n,o.attributes.diff(s.attributes,c.attributes)):a.push(c).delete(n);break}t-=n}}),a.chop()},c.prototype.eachLine=function(e,t){t||=` +import{a as e,t}from"./rolldown-runtime-BYbx6iT9.js";import{A as n,C as r,Ct as i,D as a,E as o,G as s,H as c,I as l,P as u,Qt as d,et as f,ht as p,rt as m,z as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as g,s as _}from"./index-CPrkFf57.js";import{r as v}from"./upload-qqZxNm7U.js";var y=t(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.Quill=r():n.Quill=r()})(typeof self<`u`?self:e,function(){return(function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=109)})([(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=n(17),i=n(18),a=n(19),o=n(45),s=n(46),c=n(47),l=n(48),u=n(49),d=n(12),f=n(32),p=n(33),m=n(31),h=n(1);t.default={Scope:h.Scope,create:h.create,find:h.find,query:h.query,register:h.register,Container:r.default,Format:i.default,Leaf:a.default,Embed:l.default,Scroll:o.default,Block:c.default,Inline:s.default,Text:u.default,Attributor:{Attribute:d.default,Class:f.default,Style:p.default,Store:m.default}}}),(function(e,t,n){var r=this&&this.__extends||(function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})();Object.defineProperty(t,`__esModule`,{value:!0});var i=function(e){r(t,e);function t(t){var n=this;return t=`[Parchment] `+t,n=e.call(this,t)||this,n.message=t,n.name=n.constructor.name,n}return t}(Error);t.ParchmentError=i;var a={},o={},s={},c={};t.DATA_KEY=`__blot`;var l;(function(e){e[e.TYPE=3]=`TYPE`,e[e.LEVEL=12]=`LEVEL`,e[e.ATTRIBUTE=13]=`ATTRIBUTE`,e[e.BLOT=14]=`BLOT`,e[e.INLINE=7]=`INLINE`,e[e.BLOCK=11]=`BLOCK`,e[e.BLOCK_BLOT=10]=`BLOCK_BLOT`,e[e.INLINE_BLOT=6]=`INLINE_BLOT`,e[e.BLOCK_ATTRIBUTE=9]=`BLOCK_ATTRIBUTE`,e[e.INLINE_ATTRIBUTE=5]=`INLINE_ATTRIBUTE`,e[e.ANY=15]=`ANY`})(l=t.Scope||={});function u(e,t){var n=f(e);if(n==null)throw new i(`Unable to create `+e+` blot`);var r=n;return new r(e instanceof Node||e.nodeType===Node.TEXT_NODE?e:r.create(t),t)}t.create=u;function d(e,n){return n===void 0&&(n=!1),e==null?null:e[t.DATA_KEY]==null?n?d(e.parentNode,n):null:e[t.DATA_KEY].blot}t.find=d;function f(e,t){t===void 0&&(t=l.ANY);var n;if(typeof e==`string`)n=c[e]||a[e];else if(e instanceof Text||e.nodeType===Node.TEXT_NODE)n=c.text;else if(typeof e==`number`)e&l.LEVEL&l.BLOCK?n=c.block:e&l.LEVEL&l.INLINE&&(n=c.inline);else if(e instanceof HTMLElement){var r=(e.getAttribute(`class`)||``).split(/\s+/);for(var i in r)if(n=o[r[i]],n)break;n||=s[e.tagName]}return n==null?null:t&l.LEVEL&n.scope&&t&l.TYPE&n.scope?n:null}t.query=f;function p(){var e=[...arguments];if(e.length>1)return e.map(function(e){return p(e)});var t=e[0];if(typeof t.blotName!=`string`&&typeof t.attrName!=`string`)throw new i(`Invalid definition`);if(t.blotName===`abstract`)throw new i(`Cannot register abstract class`);return c[t.blotName||t.attrName]=t,typeof t.keyName==`string`?a[t.keyName]=t:(t.className!=null&&(o[t.className]=t),t.tagName!=null&&(Array.isArray(t.tagName)?t.tagName=t.tagName.map(function(e){return e.toUpperCase()}):t.tagName=t.tagName.toUpperCase(),(Array.isArray(t.tagName)?t.tagName:[t.tagName]).forEach(function(e){(s[e]==null||t.className==null)&&(s[e]=t)}))),t}t.register=p}),(function(e,t,n){var r=n(51),i=n(11),a=n(3),o=n(20),s=`\0`,c=function(e){Array.isArray(e)?this.ops=e:e!=null&&Array.isArray(e.ops)?this.ops=e.ops:this.ops=[]};c.prototype.insert=function(e,t){var n={};return e.length===0?this:(n.insert=e,typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n))},c.prototype.delete=function(e){return e<=0?this:this.push({delete:e})},c.prototype.retain=function(e,t){if(e<=0)return this;var n={retain:e};return typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n)},c.prototype.push=function(e){var t=this.ops.length,n=this.ops[t-1];if(e=a(!0,{},e),typeof n==`object`){if(typeof e.delete==`number`&&typeof n.delete==`number`)return this.ops[t-1]={delete:n.delete+e.delete},this;if(typeof n.delete==`number`&&e.insert!=null&&(--t,n=this.ops[t-1],typeof n!=`object`))return this.ops.unshift(e),this;if(i(e.attributes,n.attributes)){if(typeof e.insert==`string`&&typeof n.insert==`string`)return this.ops[t-1]={insert:n.insert+e.insert},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this;if(typeof e.retain==`number`&&typeof n.retain==`number`)return this.ops[t-1]={retain:n.retain+e.retain},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this}}return t===this.ops.length?this.ops.push(e):this.ops.splice(t,0,e),this},c.prototype.chop=function(){var e=this.ops[this.ops.length-1];return e&&e.retain&&!e.attributes&&this.ops.pop(),this},c.prototype.filter=function(e){return this.ops.filter(e)},c.prototype.forEach=function(e){this.ops.forEach(e)},c.prototype.map=function(e){return this.ops.map(e)},c.prototype.partition=function(e){var t=[],n=[];return this.forEach(function(r){(e(r)?t:n).push(r)}),[t,n]},c.prototype.reduce=function(e,t){return this.ops.reduce(e,t)},c.prototype.changeLength=function(){return this.reduce(function(e,t){return t.insert?e+o.length(t):t.delete?e-t.delete:e},0)},c.prototype.length=function(){return this.reduce(function(e,t){return e+o.length(t)},0)},c.prototype.slice=function(e,t){e||=0,typeof t!=`number`&&(t=1/0);for(var n=[],r=o.iterator(this.ops),i=0;i0&&n.next(a.retain-s)}for(var l=new c(r);t.hasNext()||n.hasNext();)if(n.peekType()===`insert`)l.push(n.next());else if(t.peekType()===`delete`)l.push(t.next());else{var u=Math.min(t.peekLength(),n.peekLength()),d=t.next(u),f=n.next(u);if(typeof f.retain==`number`){var p={};typeof d.retain==`number`?p.retain=u:p.insert=d.insert;var m=o.attributes.compose(d.attributes,f.attributes,typeof d.retain==`number`);if(m&&(p.attributes=m),l.push(p),!n.hasNext()&&i(l.ops[l.ops.length-1],p)){var h=new c(t.rest());return l.concat(h).chop()}}else typeof f.delete==`number`&&typeof d.retain==`number`&&l.push(f)}return l.chop()},c.prototype.concat=function(e){var t=new c(this.ops.slice());return e.ops.length>0&&(t.push(e.ops[0]),t.ops=t.ops.concat(e.ops.slice(1))),t},c.prototype.diff=function(e,t){if(this.ops===e.ops)return new c;var n=[this,e].map(function(t){return t.map(function(n){if(n.insert!=null)return typeof n.insert==`string`?n.insert:s;throw Error(`diff() called `+(t===e?`on`:`with`)+` non-document`)}).join(``)}),a=new c,l=r(n[0],n[1],t),u=o.iterator(this.ops),d=o.iterator(e.ops);return l.forEach(function(e){for(var t=e[1].length;t>0;){var n=0;switch(e[0]){case r.INSERT:n=Math.min(d.peekLength(),t),a.push(d.next(n));break;case r.DELETE:n=Math.min(t,u.peekLength()),u.next(n),a.delete(n);break;case r.EQUAL:n=Math.min(u.peekLength(),d.peekLength(),t);var s=u.next(n),c=d.next(n);i(s.insert,c.insert)?a.retain(n,o.attributes.diff(s.attributes,c.attributes)):a.push(c).delete(n);break}t-=n}}),a.chop()},c.prototype.eachLine=function(e,t){t||=` `;for(var n=o.iterator(this.ops),r=new c,i=0;n.hasNext();){if(n.peekType()!==`insert`)return;var a=n.peek(),s=o.length(a)-n.peekLength(),l=typeof a.insert==`string`?a.insert.indexOf(t,s)-s:-1;if(l<0)r.push(n.next());else if(l>0)r.push(n.next(l));else{if(e(r,n.next(1).attributes||{},i)===!1)return;i+=1,r=new c}}r.length()>0&&e(r,{},i)},c.prototype.transform=function(e,t){if(t=!!t,typeof e==`number`)return this.transformPosition(e,t);for(var n=o.iterator(this.ops),r=o.iterator(e.ops),i=new c;n.hasNext()||r.hasNext();)if(n.peekType()===`insert`&&(t||r.peekType()!==`insert`))i.retain(o.length(n.next()));else if(r.peekType()===`insert`)i.push(r.next());else{var a=Math.min(n.peekLength(),r.peekLength()),s=n.next(a),l=r.next(a);if(s.delete)continue;l.delete?i.push(l):i.retain(a,o.attributes.transform(s.attributes,l.attributes,t))}return i.chop()},c.prototype.transformPosition=function(e,t){t=!!t;for(var n=o.iterator(this.ops),r=0;n.hasNext()&&r<=e;){var i=n.peekLength(),a=n.peekType();if(n.next(),a===`delete`){e-=Math.min(i,e-r);continue}else a===`insert`&&(r=700)&&(n.bold=!0),Object.keys(n).length>0&&(t=A(t,n)),parseFloat(r.textIndent||0)>0&&(t=new s.default().insert(` `).concat(t)),t}function R(e,t){var n=e.data;if(e.parentNode.tagName===`O:P`)return t.insert(n.trim());if(n.trim().length===0&&e.parentNode.classList.contains(`ql-clipboard`))return t;if(!j(e.parentNode).whiteSpace.startsWith(`pre`)){var r=function(e,t){return t=t.replace(/[^\u00a0]/g,``),t.length<1&&e?` `:t};n=n.replace(/\r\n/g,` `).replace(/\n/g,` `),n=n.replace(/\s\s+/g,r.bind(r,!0)),(e.previousSibling==null&&N(e.parentNode)||e.previousSibling!=null&&N(e.previousSibling))&&(n=n.replace(/^\s+/,r.bind(r,!1))),(e.nextSibling==null&&N(e.parentNode)||e.nextSibling!=null&&N(e.nextSibling))&&(n=n.replace(/\s+$/,r.bind(r,!1)))}return t.insert(n)}t.default=k,t.matchAttributor=F,t.matchBlot=te,t.matchNewline=L,t.matchSpacing=ie,t.matchText=R}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=function(){function e(e,t){for(var n=0;n `}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=function(){function e(e,t){for(var n=0;nr.right&&(a=r.right-i.right,this.root.style.left=t+a+`px`),i.leftr.bottom){var o=i.bottom-i.top,s=e.bottom-e.top+o;this.root.style.top=n-s+`px`,this.root.classList.add(`ql-flip`)}return a}},{key:`show`,value:function(){this.root.classList.remove(`ql-editing`),this.root.classList.remove(`ql-hidden`)}}]),e}()}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o=e[Symbol.iterator](),s;!(r=(s=o.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(e){i=!0,a=e}finally{try{!r&&o.return&&o.return()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw TypeError(`Invalid attempt to destructure non-iterable instance`)}}(),i=function e(t,n,r){t===null&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(i===void 0){var a=Object.getPrototypeOf(t);return a===null?void 0:e(a,n,r)}else if(`value`in i)return i.value;else{var o=i.get;return o===void 0?void 0:o.call(r)}},a=function(){function e(e,t){for(var n=0;n`,``,``,``].join(``),t.default=v}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=P(n(29)),i=n(36),a=n(38),o=n(64),s=P(n(65)),c=P(n(66)),l=n(67),u=P(l),d=n(37),f=n(26),p=n(39),m=n(40),h=P(n(56)),g=P(n(68)),_=P(n(27)),v=P(n(69)),y=P(n(70)),b=P(n(71)),x=P(n(72)),S=P(n(73)),C=n(13),w=P(C),T=P(n(74)),E=P(n(75)),D=P(n(57)),O=P(n(41)),k=P(n(28)),A=P(n(59)),j=P(n(60)),M=P(n(61)),N=P(n(108)),ee=P(n(62));function P(e){return e&&e.__esModule?e:{default:e}}r.default.register({"attributors/attribute/direction":a.DirectionAttribute,"attributors/class/align":i.AlignClass,"attributors/class/background":d.BackgroundClass,"attributors/class/color":f.ColorClass,"attributors/class/direction":a.DirectionClass,"attributors/class/font":p.FontClass,"attributors/class/size":m.SizeClass,"attributors/style/align":i.AlignStyle,"attributors/style/background":d.BackgroundStyle,"attributors/style/color":f.ColorStyle,"attributors/style/direction":a.DirectionStyle,"attributors/style/font":p.FontStyle,"attributors/style/size":m.SizeStyle},!0),r.default.register({"formats/align":i.AlignClass,"formats/direction":a.DirectionClass,"formats/indent":o.IndentClass,"formats/background":d.BackgroundStyle,"formats/color":f.ColorStyle,"formats/font":p.FontClass,"formats/size":m.SizeClass,"formats/blockquote":s.default,"formats/code-block":w.default,"formats/header":c.default,"formats/list":u.default,"formats/bold":h.default,"formats/code":C.Code,"formats/italic":g.default,"formats/link":_.default,"formats/script":v.default,"formats/strike":y.default,"formats/underline":b.default,"formats/image":x.default,"formats/video":S.default,"formats/list/item":l.ListItem,"modules/formula":T.default,"modules/syntax":E.default,"modules/toolbar":D.default,"themes/bubble":N.default,"themes/snow":ee.default,"ui/icons":O.default,"ui/picker":k.default,"ui/icon-picker":j.default,"ui/color-picker":A.default,"ui/tooltip":M.default},!0),t.default=r.default}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0}),t.IndentClass=void 0;var r=function(){function e(e,t){for(var n=0;n0&&this.children.tail.format(e,t)}},{key:`formats`,value:function(){return l({},this.statics.blotName,this.statics.formats(this.domNode))}},{key:`insertBefore`,value:function(e,n){if(e instanceof p)i(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`insertBefore`,this).call(this,e,n);else{var r=n==null?this.length():n.offset(this),a=this.split(r);a.parent.insertBefore(e,a)}}},{key:`optimize`,value:function(e){i(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`optimize`,this).call(this,e);var n=this.next;n!=null&&n.prev===this&&n.statics.blotName===this.statics.blotName&&n.domNode.tagName===this.domNode.tagName&&n.domNode.getAttribute(`data-checked`)===this.domNode.getAttribute(`data-checked`)&&(n.moveChildren(this),n.remove())}},{key:`replace`,value:function(e){if(e.statics.blotName!==this.statics.blotName){var n=a.default.create(this.statics.defaultChild);e.moveChildren(n),this.appendChild(n)}i(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`replace`,this).call(this,e)}}]),t}(s.default);m.blotName=`list`,m.scope=a.default.Scope.BLOCK_BLOT,m.tagName=[`OL`,`UL`],m.defaultChild=`list-item`,m.allowedChildren=[p],t.ListItem=p,t.default=m}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=i(n(56));function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function o(e,t){if(!e)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return t&&(typeof t==`object`||typeof t==`function`)?t:e}function s(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function, not `+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var c=function(e){s(t,e);function t(){return a(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return t}(r.default);c.blotName=`italic`,c.tagName=[`EM`,`I`],t.default=c}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=function(){function e(e,t){for(var n=0;n-1?n?this.domNode.setAttribute(e,n):this.domNode.removeAttribute(e):i(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`format`,this).call(this,e,n)}}],[{key:`create`,value:function(e){var n=i(t.__proto__||Object.getPrototypeOf(t),`create`,this).call(this,e);return typeof e==`string`&&n.setAttribute(`src`,this.sanitize(e)),n}},{key:`formats`,value:function(e){return d.reduce(function(t,n){return e.hasAttribute(n)&&(t[n]=e.getAttribute(n)),t},{})}},{key:`match`,value:function(e){return/\.(jpe?g|gif|png)$/.test(e)||/^data:image\/.+;base64/.test(e)}},{key:`sanitize`,value:function(e){return(0,o.sanitize)(e,[`http`,`https`,`data`])?e:`//:0`}},{key:`value`,value:function(e){return e.getAttribute(`src`)}}]),t}(a.default.Embed);f.blotName=`image`,f.tagName=`IMG`,t.default=f}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0});var r=function(){function e(e,t){for(var n=0;n-1?n?this.domNode.setAttribute(e,n):this.domNode.removeAttribute(e):i(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`format`,this).call(this,e,n)}}],[{key:`create`,value:function(e){var n=i(t.__proto__||Object.getPrototypeOf(t),`create`,this).call(this,e);return n.setAttribute(`frameborder`,`0`),n.setAttribute(`allowfullscreen`,!0),n.setAttribute(`src`,this.sanitize(e)),n}},{key:`formats`,value:function(e){return d.reduce(function(t,n){return e.hasAttribute(n)&&(t[n]=e.getAttribute(n)),t},{})}},{key:`sanitize`,value:function(e){return o.default.sanitize(e)}},{key:`value`,value:function(e){return e.getAttribute(`src`)}}]),t}(a.BlockEmbed);f.blotName=`video`,f.className=`ql-video`,f.tagName=`IFRAME`,t.default=f}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0}),t.default=t.FormulaBlot=void 0;var r=function(){function e(e,t){for(var n=0;n0||this.cachedText==null)&&(this.domNode.innerHTML=e(t),this.domNode.normalize(),this.attach()),this.cachedText=t)}}]),t}(c.default);p.className=`ql-syntax`;var m=new a.default.Attributor.Class(`token`,`hljs`,{scope:a.default.Scope.INLINE}),h=function(e){f(t,e),r(t,null,[{key:`register`,value:function(){o.default.register(m,!0),o.default.register(p,!0)}}]);function t(e,n){u(this,t);var r=d(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));if(typeof r.options.highlight!=`function`)throw Error(`Syntax module requires highlight.js. Please include the library on the page before Quill.`);var i=null;return r.quill.on(o.default.events.SCROLL_OPTIMIZE,function(){clearTimeout(i),i=setTimeout(function(){r.highlight(),i=null},r.options.interval)}),r.highlight(),r}return r(t,[{key:`highlight`,value:function(){var e=this;if(!this.quill.selection.composing){this.quill.update(o.default.sources.USER);var t=this.quill.getSelection();this.quill.scroll.descendants(p).forEach(function(t){t.highlight(e.options.highlight)}),this.quill.update(o.default.sources.SILENT),t!=null&&this.quill.setSelection(t,o.default.sources.SILENT)}}}]),t}(s.default);h.DEFAULTS={highlight:function(){return window.hljs==null?null:function(e){return window.hljs.highlightAuto(e).value}}(),interval:1e3},t.CodeBlock=p,t.CodeToken=m,t.default=h}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t){e.exports=` `}),(function(e,t,n){Object.defineProperty(t,`__esModule`,{value:!0}),t.default=t.BubbleTooltip=void 0;var r=function e(t,n,r){t===null&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(i===void 0){var a=Object.getPrototypeOf(t);return a===null?void 0:e(a,n,r)}else if(`value`in i)return i.value;else{var o=i.get;return o===void 0?void 0:o.call(r)}},i=function(){function e(e,t){for(var n=0;n0&&i===o.default.sources.USER){r.show(),r.root.style.left=`0px`,r.root.style.width=``,r.root.style.width=r.root.offsetWidth+`px`;var a=r.quill.getLines(t.index,t.length);if(a.length===1)r.position(r.quill.getBounds(t));else{var s=a[a.length-1],c=r.quill.getIndex(s),u=Math.min(s.length()-1,t.index+t.length-c),d=r.quill.getBounds(new l.Range(c,u));r.position(d)}}else document.activeElement!==r.textbox&&r.quill.hasFocus()&&r.hide()}),r}return i(t,[{key:`listen`,value:function(){var e=this;r(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`listen`,this).call(this),this.root.querySelector(`.ql-close`).addEventListener(`click`,function(){e.root.classList.remove(`ql-editing`)}),this.quill.on(o.default.events.SCROLL_OPTIMIZE,function(){setTimeout(function(){if(!e.root.classList.contains(`ql-hidden`)){var t=e.quill.getSelection();t!=null&&e.position(e.quill.getBounds(t))}},1)})}},{key:`cancel`,value:function(){this.show()}},{key:`position`,value:function(e){var n=r(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),`position`,this).call(this,e),i=this.root.querySelector(`.ql-tooltip-arrow`);if(i.style.marginLeft=``,n===0)return n;i.style.marginLeft=-1*n-i.offsetWidth/2+`px`}}]),t}(s.BaseTooltip);_.TEMPLATE=[``,`
`,``,``,`
`].join(``),t.BubbleTooltip=_,t.default=g}),(function(e,t,n){e.exports=n(63)})]).default})})),b=t(((e,t)=>{var n=-1,r=1,i=0;function a(e,t,n,r){if(e===t)return e?[[i,e]]:[];if(n!=null){var a=y(e,t,n);if(a)return a}var s=l(e,t),c=e.substring(0,s);e=e.substring(s),t=t.substring(s),s=u(e,t);var d=e.substring(e.length-s);e=e.substring(0,e.length-s),t=t.substring(0,t.length-s);var p=o(e,t);return c&&p.unshift([i,c]),d&&p.push([i,d]),f(p,r),p}function o(e,t){var o;if(!e)return[[r,t]];if(!t)return[[n,e]];var c=e.length>t.length?e:t,l=e.length>t.length?t:e,u=c.indexOf(l);if(u!==-1)return o=[[r,c.substring(0,u)],[i,l],[r,c.substring(u+l.length)]],e.length>t.length&&(o[0][0]=o[2][0]=n),o;if(l.length===1)return[[n,e],[r,t]];var f=d(e,t);if(f){var p=f[0],m=f[1],h=f[2],g=f[3],_=f[4],v=a(p,h),y=a(m,g);return v.concat([[i,_]],y)}return s(e,t)}function s(e,t){for(var i=e.length,a=t.length,o=Math.ceil((i+a)/2),s=o,l=2*o,u=Array(l),d=Array(l),f=0;fi)g+=2;else if(C>a)h+=2;else if(m){var w=s+p-b;if(w>=0&&w=T)return c(e,t,S,C)}}}for(var E=-y+_;E<=y-v;E+=2){for(var w=s+E,T=E===-y||E!==y&&d[w-1]i)v+=2;else if(D>a)_+=2;else if(!m){var x=s+p-E;if(x>=0&&x=T)return c(e,t,S,C)}}}}return[[n,e],[r,t]]}function c(e,t,n,r){var i=e.substring(0,n),o=t.substring(0,r),s=e.substring(n),c=t.substring(r),l=a(i,o),u=a(s,c);return l.concat(u)}function l(e,t){if(!e||!t||e.charAt(0)!==t.charAt(0))return 0;for(var n=0,r=Math.min(e.length,t.length),i=r,a=0;nt.length?e:t,r=e.length>t.length?t:e;if(n.length<4||r.length*2=e.length?[o,s,c,d,a]:null}var a=i(n,r,Math.ceil(n.length/4)),o=i(n,r,Math.ceil(n.length/2)),s;if(!a&&!o)return null;s=o?a&&a[4].length>o[4].length?a:o:a;var c,d,f,p;e.length>t.length?(c=s[0],d=s[1],f=s[2],p=s[3]):(f=s[0],p=s[1],c=s[2],d=s[3]);var m=s[4];return[c,d,f,p,m]}function f(e,t){e.push([i,``]);for(var a=0,o=0,s=0,c=``,d=``,p;a=0&&g(e[m][1])){var _=e[m][1].slice(-1);if(e[m][1]=e[m][1].slice(0,-1),c=_+c,d=_+d,!e[m][1]){e.splice(m,1),a--;var v=m-1;e[v]&&e[v][0]===r&&(s++,d=e[v][1]+d,v--),e[v]&&e[v][0]===n&&(o++,c=e[v][1]+c,v--),m=v}}if(h(e[a][1])){var _=e[a][1].charAt(0);e[a][1]=e[a][1].slice(1),c+=_,d+=_}}if(a0||d.length>0){c.length>0&&d.length>0&&(p=l(d,c),p!==0&&(m>=0?e[m][1]+=d.substring(0,p):(e.splice(0,0,[i,d.substring(0,p)]),a++),d=d.substring(p),c=c.substring(p)),p=u(d,c),p!==0&&(e[a][1]=d.substring(d.length-p)+e[a][1],d=d.substring(0,d.length-p),c=c.substring(0,c.length-p)));var y=s+o;c.length===0&&d.length===0?(e.splice(a-y,y),a-=y):c.length===0?(e.splice(a-y,y,[r,d]),a=a-y+1):d.length===0?(e.splice(a-y,y,[n,c]),a=a-y+1):(e.splice(a-y,y,[n,c],[r,d]),a=a-y+2)}a!==0&&e[a-1][0]===i?(e[a-1][1]+=e[a][1],e.splice(a,1)):a++,s=0,o=0,c=``,d=``;break}}e[e.length-1][1]===``&&e.pop();var b=!1;for(a=1;a=55296&&e<=56319}function m(e){return e>=56320&&e<=57343}function h(e){return m(e.charCodeAt(0))}function g(e){return p(e.charCodeAt(e.length-1))}function _(e){for(var t=[],n=0;n0&&t.push(e[n]);return t}function v(e,t,a,o){return g(e)||h(o)?null:_([[i,e],[n,t],[r,a],[i,o]])}function y(e,t,n){var r=typeof n==`number`?{index:n,length:0}:n.oldRange,i=typeof n==`number`?null:n.newRange,a=e.length,o=t.length;if(r.length===0&&(i===null||i.length===0)){var s=r.index,c=e.slice(0,s),l=e.slice(s),u=i?i.index:null;editBefore:{var d=s+o-a;if(u!==null&&u!==d||d<0||d>o)break editBefore;var f=t.slice(0,d),p=t.slice(d);if(p!==l)break editBefore;var m=Math.min(s,d),h=c.slice(0,m),g=f.slice(0,m);if(h!==g)break editBefore;var _=c.slice(m),y=f.slice(m);return v(h,_,y,l)}editAfter:{if(u!==null&&u!==s)break editAfter;var b=s,f=t.slice(0,b),p=t.slice(b);if(f!==c)break editAfter;var x=Math.min(a-b,o-b),S=l.slice(l.length-x),C=p.slice(p.length-x);if(S!==C)break editAfter;var _=l.slice(0,l.length-x),y=p.slice(0,p.length-x);return v(c,_,y,S)}}if(r.length>0&&i&&i.length===0)replaceRange:{var h=e.slice(0,r.index),S=e.slice(r.index+r.length),m=h.length,x=S.length;if(o{var n=200,r=`__lodash_hash_undefined__`,i=9007199254740991,a=`[object Arguments]`,o=`[object Array]`,s=`[object Boolean]`,c=`[object Date]`,l=`[object Error]`,u=`[object Function]`,d=`[object GeneratorFunction]`,f=`[object Map]`,p=`[object Number]`,m=`[object Object]`,h=`[object Promise]`,g=`[object RegExp]`,_=`[object Set]`,v=`[object String]`,y=`[object Symbol]`,b=`[object WeakMap]`,x=`[object ArrayBuffer]`,S=`[object DataView]`,C=`[object Float32Array]`,w=`[object Float64Array]`,T=`[object Int8Array]`,E=`[object Int16Array]`,D=`[object Int32Array]`,O=`[object Uint8Array]`,k=`[object Uint8ClampedArray]`,A=`[object Uint16Array]`,j=`[object Uint32Array]`,M=/[\\^$.*+?()[\]{}|]/g,N=/\w*$/,ee=/^\[object .+?Constructor\]$/,P=/^(?:0|[1-9]\d*)$/,F={};F[a]=F[o]=F[x]=F[S]=F[s]=F[c]=F[C]=F[w]=F[T]=F[E]=F[D]=F[f]=F[p]=F[m]=F[g]=F[_]=F[v]=F[y]=F[O]=F[k]=F[A]=F[j]=!0,F[l]=F[u]=F[b]=!1;var te=typeof global==`object`&&global&&global.Object===Object&&global,ne=typeof self==`object`&&self&&self.Object===Object&&self,I=te||ne||Function(`return this`)(),re=typeof e==`object`&&e&&!e.nodeType&&e,L=re&&typeof t==`object`&&t&&!t.nodeType&&t,ie=L&&L.exports===re;function ae(e,t){return e.set(t[0],t[1]),e}function R(e,t){return e.add(t),e}function oe(e,t){for(var n=-1,r=e?e.length:0;++n-1}function Qe(e,t){var n=this.__data__,r=dt(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}W.prototype.clear=Je,W.prototype.delete=Ye,W.prototype.get=Xe,W.prototype.has=Ze,W.prototype.set=Qe;function G(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=i}function $(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function Kt(e){return!!e&&typeof e==`object`}function qt(e){return Vt(e)?lt(e):_t(e)}function Jt(){return[]}function Yt(){return!1}t.exports=Lt})),S=t(((e,t)=>{var n=200,r=`__lodash_hash_undefined__`,i=1,a=2,o=9007199254740991,s=`[object Arguments]`,c=`[object Array]`,l=`[object AsyncFunction]`,u=`[object Boolean]`,d=`[object Date]`,f=`[object Error]`,p=`[object Function]`,m=`[object GeneratorFunction]`,h=`[object Map]`,g=`[object Number]`,_=`[object Null]`,v=`[object Object]`,y=`[object Promise]`,b=`[object Proxy]`,x=`[object RegExp]`,S=`[object Set]`,C=`[object String]`,w=`[object Symbol]`,T=`[object Undefined]`,E=`[object WeakMap]`,D=`[object ArrayBuffer]`,O=`[object DataView]`,k=`[object Float32Array]`,A=`[object Float64Array]`,j=`[object Int8Array]`,M=`[object Int16Array]`,N=`[object Int32Array]`,ee=`[object Uint8Array]`,P=`[object Uint8ClampedArray]`,F=`[object Uint16Array]`,te=`[object Uint32Array]`,ne=/[\\^$.*+?()[\]{}|]/g,I=/^\[object .+?Constructor\]$/,re=/^(?:0|[1-9]\d*)$/,L={};L[k]=L[A]=L[j]=L[M]=L[N]=L[ee]=L[P]=L[F]=L[te]=!0,L[s]=L[c]=L[D]=L[u]=L[O]=L[d]=L[f]=L[p]=L[h]=L[g]=L[v]=L[x]=L[S]=L[C]=L[E]=!1;var ie=typeof global==`object`&&global&&global.Object===Object&&global,ae=typeof self==`object`&&self&&self.Object===Object&&self,R=ie||ae||Function(`return this`)(),oe=typeof e==`object`&&e&&!e.nodeType&&e,se=oe&&typeof t==`object`&&t&&!t.nodeType&&t,ce=se&&se.exports===oe,le=ce&&ie.process,ue=function(){try{return le&&le.binding&&le.binding(`util`)}catch{}}(),de=ue&&ue.isTypedArray;function fe(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n-1}function rt(e,t){var n=this.__data__,r=vt(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}G.prototype.clear=$e,G.prototype.delete=et,G.prototype.get=tt,G.prototype.has=nt,G.prototype.set=rt;function K(e){var t=-1,n=e==null?0:e.length;for(this.clear();++tl))return!1;var d=s.get(e);if(d&&s.get(t))return d==t;var f=-1,p=!0,m=n&a?new lt:void 0;for(s.set(e,t),s.set(t,e);++f-1&&e%1==0&&e-1&&e%1==0&&e<=o}function Gt(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}function $(e){return typeof e==`object`&&!!e}var Kt=de?ge(de):Tt;function qt(e){return Bt(e)?_t(e):Et(e)}function Jt(){return[]}function Yt(){return!1}t.exports=Ht})),C=t((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,`__esModule`,{value:!0});var n=t(x()),r=t(S()),i;(function(e){function t(e,t,r){e===void 0&&(e={}),t===void 0&&(t={}),typeof e!=`object`&&(e={}),typeof t!=`object`&&(t={});var i=n.default(t);for(var a in r||(i=Object.keys(i).reduce(function(e,t){return i[t]!=null&&(e[t]=i[t]),e},{})),e)e[a]!==void 0&&t[a]===void 0&&(i[a]=e[a]);return Object.keys(i).length>0?i:void 0}e.compose=t;function i(e,t){e===void 0&&(e={}),t===void 0&&(t={}),typeof e!=`object`&&(e={}),typeof t!=`object`&&(t={});var n=Object.keys(e).concat(Object.keys(t)).reduce(function(n,i){return r.default(e[i],t[i])||(n[i]=t[i]===void 0?null:t[i]),n},{});return Object.keys(n).length>0?n:void 0}e.diff=i;function a(e,t){e===void 0&&(e={}),t===void 0&&(t={}),e||={};var n=Object.keys(t).reduce(function(n,r){return t[r]!==e[r]&&e[r]!==void 0&&(n[r]=t[r]),n},{});return Object.keys(e).reduce(function(n,r){return e[r]!==t[r]&&t[r]===void 0&&(n[r]=null),n},n)}e.invert=a;function o(e,t,n){if(n===void 0&&(n=!1),typeof e!=`object`)return t;if(typeof t==`object`){if(!n)return t;var r=Object.keys(t).reduce(function(n,r){return e[r]===void 0&&(n[r]=t[r]),n},{});return Object.keys(r).length>0?r:void 0}}e.transform=o})(i||={}),e.default=i})),w=t((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,`__esModule`,{value:!0});var n=t(T());e.default=function(){function e(e){this.ops=e,this.index=0,this.offset=0}return e.prototype.hasNext=function(){return this.peekLength()<1/0},e.prototype.next=function(e){e||=1/0;var t=this.ops[this.index];if(t){var r=this.offset,i=n.default.length(t);if(e>=i-r?(e=i-r,this.index+=1,this.offset=0):this.offset+=e,typeof t.delete==`number`)return{delete:e};var a={};return t.attributes&&(a.attributes=t.attributes),typeof t.retain==`number`?a.retain=e:typeof t.insert==`string`?a.insert=t.insert.substr(r,e):a.insert=t.insert,a}else return{retain:1/0}},e.prototype.peek=function(){return this.ops[this.index]},e.prototype.peekLength=function(){return this.ops[this.index]?n.default.length(this.ops[this.index])-this.offset:1/0},e.prototype.peekType=function(){return this.ops[this.index]?typeof this.ops[this.index].delete==`number`?`delete`:typeof this.ops[this.index].retain==`number`?`retain`:`insert`:`retain`},e.prototype.rest=function(){if(!this.hasNext())return[];if(this.offset===0)return this.ops.slice(this.index);var e=this.offset,t=this.index,n=this.next(),r=this.ops.slice(this.index);return this.offset=e,this.index=t,[n].concat(r)},e}()})),T=t((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,`__esModule`,{value:!0});var n=t(w()),r;(function(e){function t(e){return new n.default(e)}e.iterator=t;function r(e){return typeof e.delete==`number`?e.delete:typeof e.retain==`number`?e.retain:typeof e.insert==`string`?e.insert.length:1}e.length=r})(r||={}),e.default=r})),E=t(((e,t)=>{var n=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},r=n(b()),i=n(x()),a=n(S()),o=n(C()),s=n(T()),c=`\0`;t.exports=function(){function e(e){Array.isArray(e)?this.ops=e:e!=null&&Array.isArray(e.ops)?this.ops=e.ops:this.ops=[]}return e.prototype.insert=function(e,t){var n={};return typeof e==`string`&&e.length===0?this:(n.insert=e,typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n))},e.prototype.delete=function(e){return e<=0?this:this.push({delete:e})},e.prototype.retain=function(e,t){if(e<=0)return this;var n={retain:e};return typeof t==`object`&&t&&Object.keys(t).length>0&&(n.attributes=t),this.push(n)},e.prototype.push=function(e){var t=this.ops.length,n=this.ops[t-1];if(e=i.default(e),typeof n==`object`){if(typeof e.delete==`number`&&typeof n.delete==`number`)return this.ops[t-1]={delete:n.delete+e.delete},this;if(typeof n.delete==`number`&&e.insert!=null&&(--t,n=this.ops[t-1],typeof n!=`object`))return this.ops.unshift(e),this;if(a.default(e.attributes,n.attributes)){if(typeof e.insert==`string`&&typeof n.insert==`string`)return this.ops[t-1]={insert:n.insert+e.insert},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this;if(typeof e.retain==`number`&&typeof n.retain==`number`)return this.ops[t-1]={retain:n.retain+e.retain},typeof e.attributes==`object`&&(this.ops[t-1].attributes=e.attributes),this}}return t===this.ops.length?this.ops.push(e):this.ops.splice(t,0,e),this},e.prototype.chop=function(){var e=this.ops[this.ops.length-1];return e&&e.retain&&!e.attributes&&this.ops.pop(),this},e.prototype.filter=function(e){return this.ops.filter(e)},e.prototype.forEach=function(e){this.ops.forEach(e)},e.prototype.map=function(e){return this.ops.map(e)},e.prototype.partition=function(e){var t=[],n=[];return this.forEach(function(r){(e(r)?t:n).push(r)}),[t,n]},e.prototype.reduce=function(e,t){return this.ops.reduce(e,t)},e.prototype.changeLength=function(){return this.reduce(function(e,t){return t.insert?e+s.default.length(t):t.delete?e-t.delete:e},0)},e.prototype.length=function(){return this.reduce(function(e,t){return e+s.default.length(t)},0)},e.prototype.slice=function(t,n){t===void 0&&(t=0),n===void 0&&(n=1/0);for(var r=[],i=s.default.iterator(this.ops),a=0;a0&&r.next(c.retain-l)}for(var u=new e(i);n.hasNext()||r.hasNext();)if(r.peekType()===`insert`)u.push(r.next());else if(n.peekType()===`delete`)u.push(n.next());else{var d=Math.min(n.peekLength(),r.peekLength()),f=n.next(d),p=r.next(d);if(typeof p.retain==`number`){var m={};typeof f.retain==`number`?m.retain=d:m.insert=f.insert;var h=o.default.compose(f.attributes,p.attributes,typeof f.retain==`number`);if(h&&(m.attributes=h),u.push(m),!r.hasNext()&&a.default(u.ops[u.ops.length-1],m)){var g=new e(n.rest());return u.concat(g).chop()}}else typeof p.delete==`number`&&typeof f.retain==`number`&&u.push(p)}return u.chop()},e.prototype.concat=function(t){var n=new e(this.ops.slice());return t.ops.length>0&&(n.push(t.ops[0]),n.ops=n.ops.concat(t.ops.slice(1))),n},e.prototype.diff=function(t,n){if(this.ops===t.ops)return new e;var i=[this,t].map(function(e){return e.map(function(n){if(n.insert!=null)return typeof n.insert==`string`?n.insert:c;throw Error(`diff() called `+(e===t?`on`:`with`)+` non-document`)}).join(``)}),l=new e,u=r.default(i[0],i[1],n),d=s.default.iterator(this.ops),f=s.default.iterator(t.ops);return u.forEach(function(e){for(var t=e[1].length;t>0;){var n=0;switch(e[0]){case r.default.INSERT:n=Math.min(f.peekLength(),t),l.push(f.next(n));break;case r.default.DELETE:n=Math.min(t,d.peekLength()),d.next(n),l.delete(n);break;case r.default.EQUAL:n=Math.min(d.peekLength(),f.peekLength(),t);var i=d.next(n),s=f.next(n);a.default(i.insert,s.insert)?l.retain(n,o.default.diff(i.attributes,s.attributes)):l.push(s).delete(n);break}t-=n}}),l.chop()},e.prototype.eachLine=function(t,n){n===void 0&&(n=` `);for(var r=s.default.iterator(this.ops),i=new e,a=0;r.hasNext();){if(r.peekType()!==`insert`)return;var o=r.peek(),c=s.default.length(o)-r.peekLength(),l=typeof o.insert==`string`?o.insert.indexOf(n,c)-c:-1;if(l<0)i.push(r.next());else if(l>0)i.push(r.next(l));else{if(t(i,r.next(1).attributes||{},a)===!1)return;a+=1,i=new e}}i.length()>0&&t(i,{},a)},e.prototype.invert=function(t){var n=new e;return this.reduce(function(e,r){if(r.insert)n.delete(s.default.length(r));else if(r.retain&&r.attributes==null)return n.retain(r.retain),e+r.retain;else if(r.delete||r.retain&&r.attributes){var i=r.delete||r.retain;return t.slice(e,e+i).forEach(function(e){r.delete?n.push(e):r.retain&&r.attributes&&n.retain(s.default.length(e),o.default.invert(r.attributes,e.attributes))}),e+i}return e},0),n.chop()},e.prototype.transform=function(t,n){if(n===void 0&&(n=!1),n=!!n,typeof t==`number`)return this.transformPosition(t,n);for(var r=t,i=s.default.iterator(this.ops),a=s.default.iterator(r.ops),c=new e;i.hasNext()||a.hasNext();)if(i.peekType()===`insert`&&(n||a.peekType()!==`insert`))c.retain(s.default.length(i.next()));else if(a.peekType()===`insert`)c.push(a.next());else{var l=Math.min(i.peekLength(),a.peekLength()),u=i.next(l),d=a.next(l);if(u.delete)continue;d.delete?c.push(d):c.retain(l,o.default.transform(u.attributes,d.attributes,n))}return c.chop()},e.prototype.transformPosition=function(e,t){t===void 0&&(t=!1),t=!!t;for(var n=s.default.iterator(this.ops),r=0;n.hasNext()&&r<=e;){var i=n.peekLength(),a=n.peekType();if(n.next(),a===`delete`){e-=Math.min(i,e-r);continue}else a===`insert`&&(r[`delta`,`html`,`text`].includes(e)},enable:{type:Boolean,default:!0},readOnly:{type:Boolean,default:!1},placeholder:{type:String,required:!1},theme:{type:String,default:`snow`,validator:e=>[`snow`,`bubble`,``].includes(e)},toolbar:{type:[String,Array,Object],required:!1,validator:e=>typeof e==`string`&&e!==``?e.charAt(0)===`#`?!0:Object.keys(k).indexOf(e)!==-1:!0},modules:{type:Object,required:!1},options:{type:Object,required:!1},globalOptions:{type:Object,required:!1}},emits:[`textChange`,`selectionChange`,`editorChange`,`update:content`,`focus`,`blur`,`ready`],setup:(e,t)=>{c(()=>{a()}),h(()=>{n=null});let n,r,i=p(),a=()=>{var a;if(i.value){if(r=o(),e.modules)if(Array.isArray(e.modules))for(let t of e.modules)D.default.register(`modules/${t.name}`,t.module);else D.default.register(`modules/${e.modules.name}`,e.modules.module);n=new D.default(i.value,r),w(e.content),n.on(`text-change`,g),n.on(`selection-change`,v),n.on(`editor-change`,y),e.theme!==`bubble`&&i.value.classList.remove(`ql-bubble`),e.theme!==`snow`&&i.value.classList.remove(`ql-snow`),(a=n.getModule(`toolbar`))==null||a.container.addEventListener(`mousedown`,e=>{e.preventDefault()}),t.emit(`ready`,n)}},o=()=>{let t={};if(e.theme!==``&&(t.theme=e.theme),e.readOnly&&(t.readOnly=e.readOnly),e.placeholder&&(t.placeholder=e.placeholder),e.toolbar&&e.toolbar!==``&&(t.modules={toolbar:(()=>{if(typeof e.toolbar==`object`)return e.toolbar;if(typeof e.toolbar==`string`)return e.toolbar.charAt(0)===`#`?e.toolbar:k[e.toolbar]})()}),e.modules){let n=(()=>{let t={};if(Array.isArray(e.modules))for(let n of e.modules)t[n.name]=n.options??{};else t[e.modules.name]=e.modules.options??{};return t})();t.modules=Object.assign({},t.modules,n)}return Object.assign({},e.globalOptions,e.options,t)},s=e=>typeof e==`object`&&e?e.slice():e,u=e=>Object.values(e.ops).some(e=>!e.retain||Object.keys(e).length!==1),d,f=e=>{if(typeof d==typeof e){if(e===d)return!0;if(typeof e==`object`&&e&&typeof d==`object`&&d)return!u(d.diff(e))}return!1},g=(n,r,i)=>{d=s(C()),f(e.content)||t.emit(`update:content`,d),t.emit(`textChange`,{delta:n,oldContents:r,source:i})},_=p(),v=(e,r,i)=>{_.value=!!n?.hasFocus(),t.emit(`selectionChange`,{range:e,oldRange:r,source:i})};m(_,e=>{e?t.emit(`focus`,i):t.emit(`blur`,i)});let y=(...e)=>{e[0]===`text-change`&&t.emit(`editorChange`,{name:e[0],delta:e[1],oldContents:e[2],source:e[3]}),e[0]===`selection-change`&&t.emit(`editorChange`,{name:e[0],range:e[1],oldRange:e[2],source:e[3]})},b=()=>i.value,x=()=>n?.getModule(`toolbar`)?.container,S=()=>{if(n)return n;throw`The quill editor hasn't been instantiated yet, make sure to call this method when the editor ready - or use v-on:ready="onReady(quill)" event instead.`},C=(t,r)=>e.contentType===`html`?A():e.contentType===`text`?T(t,r):n?.getContents(t,r),w=(t,r=`api`)=>{let i=t||(e.contentType===`delta`?new O.default:``);e.contentType===`html`?j(i):e.contentType===`text`?E(i,r):n?.setContents(i,r),d=s(i)},T=(e,t)=>n?.getText(e,t)??``,E=(e,t=`api`)=>{n?.setText(e,t)},A=()=>n?.root.innerHTML??``,j=e=>{n&&(n.root.innerHTML=e)};return m(()=>e.content,e=>{if(!n||!e||f(e))return;let t=n.getSelection();t&&l(()=>n?.setSelection(t)),w(e)},{deep:!0}),m(()=>e.enable,e=>{n&&n.enable(e)}),{editor:i,getEditor:b,getToolbar:x,getQuill:S,getContents:C,setContents:w,getHTML:A,setHTML:j,pasteHTML:(e,t=`api`)=>{let r=n?.clipboard.convert(e);r&&n?.setContents(r,t)},focus:()=>{n?.focus()},getText:T,setText:E,reinit:()=>{l(()=>{var e;!t.slots.toolbar&&n&&((e=n.getModule(`toolbar`))==null||e.container.remove()),a()})}}},render(){var e;return[(e=this.$slots).toolbar?.call(e),n(`div`,{ref:`editor`,...this.$attrs})]}});async function j(e,t){let n=new FormData;n.append(`file`,e),n.append(`subdir`,t);let{data:r}=await _.post(`/admin/v1/uploads/course-asset`,n);return r.data}async function M(e){let t=new FormData;t.append(`file`,e);let{data:n}=await _.post(`/admin/v1/uploads/news-cover`,t);return n.data}async function N(e){let t=new FormData;t.append(`file`,e);let{data:n}=await _.post(`/admin/v1/uploads/banner-cover`,t);return n.data}async function ee(e,t=`common`){let n=new FormData;n.append(`file`,e),n.append(`scope`,t);let{data:r}=await _.post(`/admin/v1/uploads/editor-image`,n);return r.data}var P=v(a({__name:`RichTextEditor`,props:u({height:{default:260},scope:{default:`common`}},{modelValue:{default:``},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=f(e,`modelValue`),a=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`,`image`],[`clean`]];function c(e){let n=document.createElement(`input`);n.type=`file`,n.accept=`image/*`,n.onchange=async()=>{let r=n.files?.[0];if(r)try{let n=await ee(r,t.scope);if(!n.url){g.error(`图片上传失败`);return}let i=e.getSelection(!0)?.index??Math.max(0,e.getLength()-1);e.insertEmbed(i,`image`,n.url),e.setSelection(i+1)}catch(e){let t=e?.response?.data?.message||`图片上传失败`;g.error(typeof t==`string`?t:`图片上传失败`)}},n.click()}function l(e){e.getModule(`toolbar`).addHandler(`image`,()=>c(e))}return(t,c)=>(s(),r(`div`,{class:`rich-text-editor`,style:d({height:`${e.height}px`})},[o(i(A),{content:n.value,"onUpdate:content":c[0]||=e=>n.value=e,"content-type":`html`,theme:`snow`,toolbar:a,onReady:l},null,8,[`content`])],4))}}),[[`__scopeId`,`data-v-f46336b8`]]);export{M as i,N as n,j as r,P as t}; \ No newline at end of file + or use v-on:ready="onReady(quill)" event instead.`},C=(t,r)=>e.contentType===`html`?A():e.contentType===`text`?T(t,r):n?.getContents(t,r),w=(t,r=`api`)=>{let i=t||(e.contentType===`delta`?new O.default:``);e.contentType===`html`?j(i):e.contentType===`text`?E(i,r):n?.setContents(i,r),d=s(i)},T=(e,t)=>n?.getText(e,t)??``,E=(e,t=`api`)=>{n?.setText(e,t)},A=()=>n?.root.innerHTML??``,j=e=>{n&&(n.root.innerHTML=e)};return m(()=>e.content,e=>{if(!n||!e||f(e))return;let t=n.getSelection();t&&l(()=>n?.setSelection(t)),w(e)},{deep:!0}),m(()=>e.enable,e=>{n&&n.enable(e)}),{editor:i,getEditor:b,getToolbar:x,getQuill:S,getContents:C,setContents:w,getHTML:A,setHTML:j,pasteHTML:(e,t=`api`)=>{let r=n?.clipboard.convert(e);r&&n?.setContents(r,t)},focus:()=>{n?.focus()},getText:T,setText:E,reinit:()=>{l(()=>{var e;!t.slots.toolbar&&n&&((e=n.getModule(`toolbar`))==null||e.container.remove()),a()})}}},render(){var e;return[(e=this.$slots).toolbar?.call(e),n(`div`,{ref:`editor`,...this.$attrs})]}}),j=_(a({__name:`RichTextEditor`,props:u({height:{default:260},scope:{default:`common`}},{modelValue:{default:``},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=f(e,`modelValue`),a=[[`bold`,`italic`,`underline`],[{header:[2,3,!1]}],[{list:`ordered`},{list:`bullet`}],[`link`,`image`],[`clean`]];function c(e){let n=document.createElement(`input`);n.type=`file`,n.accept=`image/*`,n.onchange=async()=>{let r=n.files?.[0];if(r)try{let n=await v(r,t.scope);if(!n.url){g.error(`图片上传失败`);return}let i=e.getSelection(!0)?.index??Math.max(0,e.getLength()-1);e.insertEmbed(i,`image`,n.url),e.setSelection(i+1)}catch(e){let t=e?.response?.data?.message||`图片上传失败`;g.error(typeof t==`string`?t:`图片上传失败`)}},n.click()}function l(e){e.getModule(`toolbar`).addHandler(`image`,()=>c(e))}return(t,c)=>(s(),r(`div`,{class:`rich-text-editor`,style:d({height:`${e.height}px`})},[o(i(A),{content:n.value,"onUpdate:content":c[0]||=e=>n.value=e,"content-type":`html`,theme:`snow`,toolbar:a,onReady:l},null,8,[`content`])],4))}}),[[`__scopeId`,`data-v-f46336b8`]]);export{j as t}; \ No newline at end of file diff --git a/public/admin/assets/TeacherDetailDialog-Df17GCYR.js b/public/admin/assets/TeacherDetailDialog-BwE7UVMD.js similarity index 98% rename from public/admin/assets/TeacherDetailDialog-Df17GCYR.js rename to public/admin/assets/TeacherDetailDialog-BwE7UVMD.js index 2ff5ca0..1d70f55 100644 --- a/public/admin/assets/TeacherDetailDialog-Df17GCYR.js +++ b/public/admin/assets/TeacherDetailDialog-BwE7UVMD.js @@ -1 +1 @@ -import{r as e}from"./rolldown-runtime-BYbx6iT9.js";import{C as t,Ct as n,D as r,E as i,G as a,P as o,S as s,T as c,X as ee,Y as l,at as u,b as d,d as te,et as f,ht as p,m,ot as ne,q as h,rt as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S,t as C}from"./index-DHoSHxJa.js";import{c as w}from"./assets-hAC2p2Vo.js";import{a as T}from"./dict-D30aLydL.js";import{a as E,c as D,h as O,i as k,m as A,o as j,p as M,s as N,u as P}from"./teachers-DsTLUxF9.js";import{i as F,o as I,s as L}from"./demands-DG70Ky1b.js";import{a as R,n as z,o as re}from"./teacherStar-DhP_EdY6.js";var B={class:`library-toolbar`},V={key:1,class:`text-mute`},H={key:0,class:`library-pager`},ie=S(r({__name:`TeacherPaperDialog`,props:o({teacherId:{},defaultAuthors:{},defaultSchoolName:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:o([`saved`],[`update:modelValue`]),setup(e,{emit:n}){let r=f(e,`modelValue`),o=e,m=n,h=p(`manual`),y=p(!1),b=p({title:``,authors:``,school_name:``,published_at:``,url:``,summary:``}),S=p(``),C=p(!1),T=p([]),E=p(1),D=p({current_page:1,per_page:10,total:0}),O=p([]),j=p();function M(){b.value={title:``,authors:o.defaultAuthors||``,school_name:o.defaultSchoolName||``,published_at:``,url:``,summary:``}}async function N(){o.teacherId&&(O.value=(await P(o.teacherId)).map(e=>e.id))}async function F(e=E.value){C.value=!0;try{let t=await w({page:e,page_size:D.value.per_page,keyword:S.value.trim()||void 0});T.value=t.items,D.value=t.meta,E.value=t.meta.current_page,j.value&&!t.items.some(e=>e.id===j.value)&&(j.value=void 0)}finally{C.value=!1}}function I(){E.value=1,F(1)}function L(e){O.value.includes(e.id)||(j.value=e.id)}async function R(){if(o.teacherId){if(!b.value.title.trim()||!b.value.authors.trim()){x.warning(`请填写标题与作者`);return}if(!b.value.published_at){x.warning(`请选择发表时间`);return}y.value=!0;try{await k(o.teacherId,{...b.value}),x.success(`已添加论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function z(){if(o.teacherId){if(!j.value){x.warning(`请选择要关联的论文`);return}if(O.value.includes(j.value)){x.warning(`该论文已关联此老师`);return}y.value=!0;try{await A(o.teacherId,j.value),x.success(`已关联论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function re(){h.value===`manual`?await R():await z()}return g(()=>[r.value,o.teacherId],([e])=>{e&&o.teacherId&&(h.value=`manual`,j.value=void 0,S.value=``,E.value=1,M(),N(),F(1))}),g(h,e=>{e===`library`&&r.value&&o.teacherId&&F(E.value)}),(e,n)=>{let o=l(`el-input`),f=l(`el-form-item`),p=l(`el-col`),m=l(`el-date-picker`),g=l(`el-row`),x=l(`el-form`),w=l(`el-tab-pane`),k=l(`el-button`),A=l(`el-table-column`),j=l(`el-tag`),M=l(`el-table`),N=l(`el-pagination`),P=l(`el-tabs`),R=l(`el-dialog`),z=ee(`loading`);return a(),v(R,{modelValue:r.value,"onUpdate:modelValue":n[10]||=e=>r.value=e,title:`论文`,width:`720px`,"destroy-on-close":``,"append-to-body":``},{footer:u(()=>[i(k,{onClick:n[9]||=e=>r.value=!1},{default:u(()=>[...n[13]||=[c(`取消`,-1)]]),_:1}),i(k,{type:`primary`,loading:y.value,onClick:re},{default:u(()=>[c(_(h.value===`manual`?`保存`:`确认关联`),1)]),_:1},8,[`loading`])]),default:u(()=>[i(P,{modelValue:h.value,"onUpdate:modelValue":n[8]||=e=>h.value=e},{default:u(()=>[i(w,{label:`手动录入`,name:`manual`},{default:u(()=>[i(x,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(f,{label:`标题`,required:``},{default:u(()=>[i(o,{modelValue:b.value.title,"onUpdate:modelValue":n[0]||=e=>b.value.title=e,placeholder:`请输入论文标题`},null,8,[`modelValue`])]),_:1}),i(g,{gutter:12},{default:u(()=>[i(p,{span:12},{default:u(()=>[i(f,{label:`作者`,required:``},{default:u(()=>[i(o,{modelValue:b.value.authors,"onUpdate:modelValue":n[1]||=e=>b.value.authors=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`学校`},{default:u(()=>[i(o,{modelValue:b.value.school_name,"onUpdate:modelValue":n[2]||=e=>b.value.school_name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`发表时间`,required:``},{default:u(()=>[i(m,{modelValue:b.value.published_at,"onUpdate:modelValue":n[3]||=e=>b.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`链接`},{default:u(()=>[i(o,{modelValue:b.value.url,"onUpdate:modelValue":n[4]||=e=>b.value.url=e,placeholder:`https://example.com/paper`},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:24},{default:u(()=>[i(f,{label:`摘要`},{default:u(()=>[i(o,{modelValue:b.value.summary,"onUpdate:modelValue":n[5]||=e=>b.value.summary=e,type:`textarea`,rows:4,placeholder:`请输入论文摘要`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),i(w,{label:`从论文库选择`,name:`library`},{default:u(()=>[d(`div`,B,[i(o,{modelValue:S.value,"onUpdate:modelValue":n[6]||=e=>S.value=e,clearable:``,placeholder:`搜索标题、作者、学校…`,style:{width:`260px`},onKeyup:te(I,[`enter`])},null,8,[`modelValue`]),i(k,{type:`primary`,onClick:I},{default:u(()=>[...n[11]||=[c(`搜索`,-1)]]),_:1})]),ne((a(),v(M,{data:T.value,size:`small`,"highlight-current-row":``,class:`library-table`,"row-class-name":({row:e})=>O.value.includes(e.id)?`is-linked-row`:``,onRowClick:L,onCurrentChange:n[7]||=e=>{e&&L(e)}},{default:u(()=>[i(A,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(A,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),i(A,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``}),i(A,{label:`状态`,width:`80`,align:`center`},{default:u(({row:e})=>[O.value.includes(e.id)?(a(),v(j,{key:0,size:`small`,type:`info`},{default:u(()=>[...n[12]||=[c(`已关联`,-1)]]),_:1})):(a(),t(`span`,V,`—`))]),_:1})]),_:1},8,[`data`,`row-class-name`])),[[z,C.value]]),D.value.total>0?(a(),t(`div`,H,[i(N,{layout:`total, prev, pager, next`,total:D.value.total,"page-size":D.value.per_page,"current-page":E.value,onCurrentChange:F},null,8,[`total`,`page-size`,`current-page`])])):s(``,!0)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-d91269f1`]]),ae={class:`detail-body`},oe={key:0,class:`basic-info-block`},se={key:1,class:`basic-info-block`},ce={key:0,class:`crawl-uni-hint`},le={class:`uni-row`},ue={class:`star-preview`},de={key:0,class:`star-follow-rule`},fe={class:`section`},pe={class:`section-head`},me={class:`muted`},he={class:`section`},ge={class:`section-head`},_e={class:`muted`},ve={class:`summary-body`},ye={class:`follow-summary`},be={class:`log-head`},U=r({__name:`TeacherDetailDialog`,props:{modelValue:{type:Boolean},teacherId:{},readonly:{type:Boolean}},emits:[`update:modelValue`,`saved`],setup(e,{emit:r}){let o=C(),te=y(()=>o.isGridMember),f=e,S=y(()=>f.readonly===!0),w=y(()=>{let e=H.value?.name;return S.value?e?`查看 · ${e}`:`老师详情`:e?`编辑 · ${e}`:`编辑老师`});function k(e){return e.university_name?e.university_name:e.university_text?`${e.university_text}(未关联高校库)`:`—`}function A(e){return e.research_direction?e.research_direction:e.research_directions?.map(e=>e.name).join(`、`)||`—`}let B=r,V=p(!1),H=p(null),U=p(null),W=y(()=>R(q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.value)),G=p([]),K=p([]),q=p([]),xe=p([]),J=p([]),Y=p([]);function Se(e){let t=[],n=[];for(let r of e){if(typeof r==`number`){t.push(r);continue}let e=String(r).trim();e&&n.push(e)}return{ids:t,names:n}}let X=p({name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),Z=p(!1),Q=p(!1),$=p({name:``,city:``,province:``,longitude:``,latitude:``}),Ce=p(!1),we=p(!1),Te=p(``),Ee=p(!1),De=p(``),Oe=p([]);async function ke(){let e=await M({page:1,page_size:200}),t=o.user?.grid_scope?.university_ids;J.value=t?.length?e.items.filter(e=>t.includes(e.id)):e.items}async function Ae(){let e=await D(),t=o.user?.grid_scope?.research_direction_ids;Y.value=t?.length?e.research_directions.filter(e=>t.includes(e.id)):e.research_directions}function je(e){let t=new Set(Y.value.map(e=>e.id));for(let n of e.research_directions||[])t.has(n.id)||(Y.value.push({id:n.id,name:n.name}),t.add(n.id))}function Me(){$.value={name:``,city:X.value.city||``,province:``,longitude:``,latitude:``},Z.value=!0}async function Ne(){let e=$.value;if(!e.name.trim()){x.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){x.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){x.warning(`经纬度须为有效数字`);return}Q.value=!0;try{let r=await E({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});J.value.some(e=>e.id===r.id)||J.value.push(r),X.value.university_id=r.id,r.city&&(X.value.city=r.city),Z.value=!1,x.success(`高校已创建`)}finally{Q.value=!1}}async function Pe(){if(f.teacherId){V.value=!0;try{let e=await N(f.teacherId);H.value=e,U.value=e.star_level_dict_item_id??null,je(e),X.value={name:e.name||``,university_id:e.university_id??void 0,research_direction_values:e.research_direction_ids?.length?[...e.research_direction_ids]:e.research_directions?.map(e=>e.id)||[],city:e.city||``,title:e.title||``,department:e.department||``,bio:e.bio||``,phone:e.phone||``,email:e.email||``,star_level_dict_item_id:e.star_level_dict_item_id??void 0,status_dict_item_id:e.status_dict_item_id??void 0,next_follow_date:e.next_follow_date||``};let[t,n]=await Promise.all([P(f.teacherId),L({teacher_id:f.teacherId,page:1,page_size:50})]);G.value=t,K.value=n.items}finally{V.value=!1}}}function Fe(){let e=X.value;if(!e.name.trim())return x.warning(`请填写姓名`),!1;if(!e.university_id)return x.warning(`请选择高校,或点击「新建高校」`),!1;if(!e.city.trim())return x.warning(`请填写城市`),!1;if(!e.title.trim())return x.warning(`请填写职称`),!1;let t=Se(e.research_direction_values);return!t.ids.length&&!t.names.length?(x.warning(`请至少选择一个或新增研究方向`),!1):e.status_dict_item_id?!0:(x.warning(`请选择状态`),!1)}async function Ie(){if(!f.teacherId||!H.value||!Fe())return;let e=(X.value.star_level_dict_item_id??null)!==U.value,t=Se(X.value.research_direction_values);await O(f.teacherId,{name:X.value.name.trim(),university_id:X.value.university_id,city:X.value.city.trim(),title:X.value.title.trim(),department:X.value.department.trim()||null,bio:X.value.bio.trim()||null,research_direction_ids:t.ids,new_research_directions:t.names,phone:X.value.phone||null,email:X.value.email||null,star_level_dict_item_id:X.value.star_level_dict_item_id??null,status_dict_item_id:X.value.status_dict_item_id,...e?{recalc_next_follow_date:!0}:{next_follow_date:X.value.next_follow_date||null,recalc_next_follow_date:!1}}),x.success(`已保存`),B(`saved`),B(`update:modelValue`,!1)}function Le(){let e=q.value.find(e=>e.id===X.value.star_level_dict_item_id);X.value.next_follow_date=re(e?.value)||``}function Re(e){if(!e)return;let t=J.value.find(t=>t.id===e);t?.city&&!X.value.city&&(X.value.city=t.city)}function ze(){Ce.value=!0}async function Be(){f.teacherId&&(G.value=await P(f.teacherId))}async function Ve(e){await b.confirm(`确定删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await j(f.teacherId,e.id),G.value=await P(f.teacherId)}function He(e){Te.value=e.summary||`暂无摘要`,we.value=!0}async function Ue(e){De.value=e.title,Oe.value=await I(e.id),Ee.value=!0}return g(()=>[f.modelValue,f.teacherId],async([e,t])=>{if(e&&t){if(!q.value.length){let[e,t]=await Promise.all([T(`teacher_level`),T(`teacher_status`)]);q.value=e.items,xe.value=t.items,await ke()}await Ae(),await Pe()}}),g(()=>X.value.university_id,e=>Re(e)),(r,o)=>{let f=l(`el-descriptions-item`),p=l(`el-descriptions`),g=l(`el-input`),y=l(`el-form-item`),b=l(`el-col`),x=l(`el-option`),C=l(`el-select`),T=l(`el-button`),E=l(`el-date-picker`),D=l(`el-row`),O=l(`el-form`),j=l(`el-table-column`),M=l(`el-link`),N=l(`el-table`),P=l(`el-tag`),I=l(`el-empty`),L=l(`el-dialog`),R=ee(`loading`);return a(),v(L,{"model-value":e.modelValue,title:w.value,width:`960px`,top:`4vh`,"destroy-on-close":``,"onUpdate:modelValue":o[23]||=e=>B(`update:modelValue`,e)},{footer:u(()=>[i(T,{onClick:o[12]||=e=>B(`update:modelValue`,!1)},{default:u(()=>[...o[33]||=[c(`关闭`,-1)]]),_:1}),S.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,class:`teachers-primary-btn`,onClick:Ie},{default:u(()=>[...o[34]||=[c(` 保存 `,-1)]]),_:1}))]),default:u(()=>[ne((a(),t(`div`,ae,[S.value&&H.value?(a(),t(`div`,oe,[o[24]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(p,{column:3,border:``,size:`small`,class:`view-desc`},{default:u(()=>[i(f,{label:`姓名`},{default:u(()=>[c(_(H.value.name),1)]),_:1}),i(f,{label:`高校`},{default:u(()=>[c(_(k(H.value)),1)]),_:1}),i(f,{label:`城市`},{default:u(()=>[c(_(H.value.city||`—`),1)]),_:1}),i(f,{label:`职称`},{default:u(()=>[c(_(H.value.title||`—`),1)]),_:1}),i(f,{label:`研究方向`,span:2},{default:u(()=>[c(_(A(H.value)),1)]),_:1}),i(f,{label:`电话`},{default:u(()=>[c(_(H.value.phone||`—`),1)]),_:1}),i(f,{label:`邮箱`},{default:u(()=>[c(_(H.value.email||`—`),1)]),_:1}),i(f,{label:`星级`},{default:u(()=>[c(_(n(z)(H.value.star_level_item?.value,H.value.star_level_item?.label)),1)]),_:1}),i(f,{label:`状态`},{default:u(()=>[c(_(H.value.status_item?.label||`—`),1)]),_:1}),i(f,{label:`下次跟进日期`},{default:u(()=>[c(_(H.value.next_follow_date||`—`),1)]),_:1}),H.value.source_item?.label?(a(),v(f,{key:0,label:`来源`},{default:u(()=>[c(_(H.value.source_item.label),1)]),_:1})):s(``,!0)]),_:1})])):(a(),t(`div`,se,[o[26]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(O,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(D,{gutter:12},{default:u(()=>[i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`姓名`,required:``},{default:u(()=>[i(g,{modelValue:X.value.name,"onUpdate:modelValue":o[0]||=e=>X.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`高校`,required:``},{default:u(()=>[H.value?.university_text&&!X.value.university_id?(a(),t(`p`,ce,` 论文抓取高校:`+_(H.value.university_text)+`(请在下拉中选择或新建以关联) `,1)):s(``,!0),d(`div`,le,[i(C,{modelValue:X.value.university_id,"onUpdate:modelValue":o[1]||=e=>X.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:u(()=>[(a(!0),t(m,null,h(J.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),te.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Me},{default:u(()=>[...o[25]||=[c(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`城市`,required:``},{default:u(()=>[i(g,{modelValue:X.value.city,"onUpdate:modelValue":o[2]||=e=>X.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`职称`,required:``},{default:u(()=>[i(g,{modelValue:X.value.title,"onUpdate:modelValue":o[3]||=e=>X.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`所属学院`},{default:u(()=>[i(g,{modelValue:X.value.department,"onUpdate:modelValue":o[4]||=e=>X.value.department=e,placeholder:`如:计算机科学与技术学院`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:16},{default:u(()=>[i(y,{label:`个人简介`},{default:u(()=>[i(g,{modelValue:X.value.bio,"onUpdate:modelValue":o[5]||=e=>X.value.bio=e,type:`textarea`,rows:3,placeholder:`老师个人简介`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`研究方向`,required:``},{default:u(()=>[i(C,{modelValue:X.value.research_direction_values,"onUpdate:modelValue":o[6]||=e=>X.value.research_direction_values=e,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择或输入研究方向`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(Y.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`电话`},{default:u(()=>[i(g,{modelValue:X.value.phone,"onUpdate:modelValue":o[7]||=e=>X.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`邮箱`},{default:u(()=>[i(g,{modelValue:X.value.email,"onUpdate:modelValue":o[8]||=e=>X.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`星级`},{default:u(()=>[i(C,{modelValue:X.value.star_level_dict_item_id,"onUpdate:modelValue":o[9]||=e=>X.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:Le},{default:u(()=>[(a(!0),t(m,null,h(q.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),d(`span`,ue,_(n(z)(q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.value,q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`状态`,required:``},{default:u(()=>[i(C,{modelValue:X.value.status_dict_item_id,"onUpdate:modelValue":o[10]||=e=>X.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(xe.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`下次跟进日期`},{default:u(()=>[i(E,{modelValue:X.value.next_follow_date,"onUpdate:modelValue":o[11]||=e=>X.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`]),W.value?(a(),t(`p`,de,_(W.value),1)):s(``,!0)]),_:1})]),_:1})]),_:1})]),_:1})])),d(`div`,fe,[d(`div`,pe,[o[28]||=d(`h3`,null,`论文列表`,-1),d(`span`,me,`共 `+_(G.value.length)+` 篇`,1),S.value?s(``,!0):(a(),v(T,{key:0,size:`small`,type:`primary`,plain:``,onClick:ze},{default:u(()=>[...o[27]||=[c(` 添加论文 `,-1)]]),_:1}))]),i(N,{data:G.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(j,{prop:`authors`,label:`作者`,width:`140`}),i(j,{prop:`school_name`,label:`学校`,width:`120`}),i(j,{prop:`published_at`,label:`发表时间`,width:`110`}),i(j,{label:`链接`,width:`70`},{default:u(({row:e})=>[e.url?(a(),v(M,{key:0,href:e.url,target:`_blank`},{default:u(()=>[...o[29]||=[c(`查看`,-1)]]),_:1},8,[`href`])):s(``,!0)]),_:1}),i(j,{label:`操作`,width:S.value?70:120},{default:u(({row:e})=>[i(T,{link:``,type:`primary`,onClick:t=>He(e)},{default:u(()=>[...o[30]||=[c(`摘要`,-1)]]),_:1},8,[`onClick`]),S.value?s(``,!0):(a(),v(T,{key:0,link:``,type:`danger`,onClick:t=>Ve(e)},{default:u(()=>[...o[31]||=[c(`删除`,-1)]]),_:1},8,[`onClick`]))]),_:1},8,[`width`])]),_:1},8,[`data`])]),d(`div`,he,[d(`div`,ge,[o[32]||=d(`h3`,null,`需求列表`,-1),d(`span`,_e,`共 `+_(K.value.length)+` 条`,1)]),i(N,{data:K.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{label:`类型`,width:`100`},{default:u(({row:e})=>[i(P,{size:`small`,effect:`dark`},{default:u(()=>[c(_(e.type_item?.label),1)]),_:2},1024)]),_:1}),i(j,{prop:`title`,label:`标题`,"min-width":`180`,"show-overflow-tooltip":``}),i(j,{prop:`submitted_at`,label:`时间`,width:`110`}),i(j,{label:`处理状态`,width:`100`},{default:u(({row:e})=>[i(P,{type:n(F)(e.status_item?.value),size:`small`,effect:`dark`},{default:u(()=>[c(_(e.status_item?.label),1)]),_:2},1032,[`type`])]),_:1}),i(j,{label:`跟进记录`,width:`100`},{default:u(({row:e})=>[i(T,{size:`small`,onClick:t=>Ue(e)},{default:u(()=>[c(_(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1})]),_:1},8,[`data`]),K.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无关联需求`,"image-size":64}))])])),[[R,V.value]]),i(L,{modelValue:Z.value,"onUpdate:modelValue":o[19]||=e=>Z.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:u(()=>[i(T,{onClick:o[18]||=e=>Z.value=!1},{default:u(()=>[...o[35]||=[c(`取消`,-1)]]),_:1}),i(T,{type:`primary`,class:`teachers-primary-btn`,loading:Q.value,onClick:Ne},{default:u(()=>[...o[36]||=[c(` 保存 `,-1)]]),_:1},8,[`loading`])]),default:u(()=>[i(O,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(y,{label:`高校名称`,required:``},{default:u(()=>[i(g,{modelValue:$.value.name,"onUpdate:modelValue":o[13]||=e=>$.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`经度`,required:``},{default:u(()=>[i(g,{modelValue:$.value.longitude,"onUpdate:modelValue":o[14]||=e=>$.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`纬度`,required:``},{default:u(()=>[i(g,{modelValue:$.value.latitude,"onUpdate:modelValue":o[15]||=e=>$.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`省份`},{default:u(()=>[i(g,{modelValue:$.value.province,"onUpdate:modelValue":o[16]||=e=>$.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`城市`},{default:u(()=>[i(g,{modelValue:$.value.city,"onUpdate:modelValue":o[17]||=e=>$.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),i(L,{modelValue:we.value,"onUpdate:modelValue":o[20]||=e=>we.value=e,title:`论文摘要`,width:`520px`,"append-to-body":``},{default:u(()=>[d(`p`,ve,_(Te.value),1)]),_:1},8,[`modelValue`]),i(ie,{modelValue:Ce.value,"onUpdate:modelValue":o[21]||=e=>Ce.value=e,"teacher-id":e.teacherId,"default-authors":H.value?.name||X.value.name,"default-school-name":J.value.find(e=>e.id===X.value.university_id)?.name||H.value?.university_name||``,onSaved:Be},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),i(L,{modelValue:Ee.value,"onUpdate:modelValue":o[22]||=e=>Ee.value=e,title:`需求跟进记录`,width:`640px`,"append-to-body":``},{default:u(()=>[d(`p`,ye,_(De.value),1),(a(!0),t(m,null,h(Oe.value,e=>(a(),t(`div`,{key:e.id,class:`log-card`},[d(`div`,be,[d(`strong`,null,_(e.operator_name),1),d(`span`,null,_(e.handled_at),1),e.status_item?(a(),v(P,{key:0,size:`small`,type:n(F)(e.status_item.value)},{default:u(()=>[c(_(e.status_item.label),1)]),_:2},1032,[`type`])):s(``,!0)]),d(`p`,null,_(e.content),1)]))),128)),Oe.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无记录`}))]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`])}}}),W=e({default:()=>G}),G=S(U,[[`__scopeId`,`data-v-39f9904d`]]);export{W as n,ie as r,G as t}; \ No newline at end of file +import{r as e}from"./rolldown-runtime-BYbx6iT9.js";import{C as t,Ct as n,D as r,E as i,G as a,P as o,S as s,T as c,X as ee,Y as l,at as u,b as d,d as te,et as f,ht as p,m,ot as ne,q as h,rt as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S,t as C}from"./index-CPrkFf57.js";import{c as w}from"./assets-DlFfPb4n.js";import{a as T}from"./dict-D-xskQUn.js";import{a as E,c as D,h as O,i as k,m as A,o as j,p as M,s as N,u as P}from"./teachers-BWvhNkqR.js";import{i as F,o as I,s as L}from"./demands-DeUMyXK9.js";import{a as R,n as z,o as re}from"./teacherStar-CbiOJu8v.js";var B={class:`library-toolbar`},V={key:1,class:`text-mute`},H={key:0,class:`library-pager`},ie=S(r({__name:`TeacherPaperDialog`,props:o({teacherId:{},defaultAuthors:{},defaultSchoolName:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:o([`saved`],[`update:modelValue`]),setup(e,{emit:n}){let r=f(e,`modelValue`),o=e,m=n,h=p(`manual`),y=p(!1),b=p({title:``,authors:``,school_name:``,published_at:``,url:``,summary:``}),S=p(``),C=p(!1),T=p([]),E=p(1),D=p({current_page:1,per_page:10,total:0}),O=p([]),j=p();function M(){b.value={title:``,authors:o.defaultAuthors||``,school_name:o.defaultSchoolName||``,published_at:``,url:``,summary:``}}async function N(){o.teacherId&&(O.value=(await P(o.teacherId)).map(e=>e.id))}async function F(e=E.value){C.value=!0;try{let t=await w({page:e,page_size:D.value.per_page,keyword:S.value.trim()||void 0});T.value=t.items,D.value=t.meta,E.value=t.meta.current_page,j.value&&!t.items.some(e=>e.id===j.value)&&(j.value=void 0)}finally{C.value=!1}}function I(){E.value=1,F(1)}function L(e){O.value.includes(e.id)||(j.value=e.id)}async function R(){if(o.teacherId){if(!b.value.title.trim()||!b.value.authors.trim()){x.warning(`请填写标题与作者`);return}if(!b.value.published_at){x.warning(`请选择发表时间`);return}y.value=!0;try{await k(o.teacherId,{...b.value}),x.success(`已添加论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function z(){if(o.teacherId){if(!j.value){x.warning(`请选择要关联的论文`);return}if(O.value.includes(j.value)){x.warning(`该论文已关联此老师`);return}y.value=!0;try{await A(o.teacherId,j.value),x.success(`已关联论文`),r.value=!1,m(`saved`)}finally{y.value=!1}}}async function re(){h.value===`manual`?await R():await z()}return g(()=>[r.value,o.teacherId],([e])=>{e&&o.teacherId&&(h.value=`manual`,j.value=void 0,S.value=``,E.value=1,M(),N(),F(1))}),g(h,e=>{e===`library`&&r.value&&o.teacherId&&F(E.value)}),(e,n)=>{let o=l(`el-input`),f=l(`el-form-item`),p=l(`el-col`),m=l(`el-date-picker`),g=l(`el-row`),x=l(`el-form`),w=l(`el-tab-pane`),k=l(`el-button`),A=l(`el-table-column`),j=l(`el-tag`),M=l(`el-table`),N=l(`el-pagination`),P=l(`el-tabs`),R=l(`el-dialog`),z=ee(`loading`);return a(),v(R,{modelValue:r.value,"onUpdate:modelValue":n[10]||=e=>r.value=e,title:`论文`,width:`720px`,"destroy-on-close":``,"append-to-body":``},{footer:u(()=>[i(k,{onClick:n[9]||=e=>r.value=!1},{default:u(()=>[...n[13]||=[c(`取消`,-1)]]),_:1}),i(k,{type:`primary`,loading:y.value,onClick:re},{default:u(()=>[c(_(h.value===`manual`?`保存`:`确认关联`),1)]),_:1},8,[`loading`])]),default:u(()=>[i(P,{modelValue:h.value,"onUpdate:modelValue":n[8]||=e=>h.value=e},{default:u(()=>[i(w,{label:`手动录入`,name:`manual`},{default:u(()=>[i(x,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(f,{label:`标题`,required:``},{default:u(()=>[i(o,{modelValue:b.value.title,"onUpdate:modelValue":n[0]||=e=>b.value.title=e,placeholder:`请输入论文标题`},null,8,[`modelValue`])]),_:1}),i(g,{gutter:12},{default:u(()=>[i(p,{span:12},{default:u(()=>[i(f,{label:`作者`,required:``},{default:u(()=>[i(o,{modelValue:b.value.authors,"onUpdate:modelValue":n[1]||=e=>b.value.authors=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`学校`},{default:u(()=>[i(o,{modelValue:b.value.school_name,"onUpdate:modelValue":n[2]||=e=>b.value.school_name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`发表时间`,required:``},{default:u(()=>[i(m,{modelValue:b.value.published_at,"onUpdate:modelValue":n[3]||=e=>b.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:12},{default:u(()=>[i(f,{label:`链接`},{default:u(()=>[i(o,{modelValue:b.value.url,"onUpdate:modelValue":n[4]||=e=>b.value.url=e,placeholder:`https://example.com/paper`},null,8,[`modelValue`])]),_:1})]),_:1}),i(p,{span:24},{default:u(()=>[i(f,{label:`摘要`},{default:u(()=>[i(o,{modelValue:b.value.summary,"onUpdate:modelValue":n[5]||=e=>b.value.summary=e,type:`textarea`,rows:4,placeholder:`请输入论文摘要`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),i(w,{label:`从论文库选择`,name:`library`},{default:u(()=>[d(`div`,B,[i(o,{modelValue:S.value,"onUpdate:modelValue":n[6]||=e=>S.value=e,clearable:``,placeholder:`搜索标题、作者、学校…`,style:{width:`260px`},onKeyup:te(I,[`enter`])},null,8,[`modelValue`]),i(k,{type:`primary`,onClick:I},{default:u(()=>[...n[11]||=[c(`搜索`,-1)]]),_:1})]),ne((a(),v(M,{data:T.value,size:`small`,"highlight-current-row":``,class:`library-table`,"row-class-name":({row:e})=>O.value.includes(e.id)?`is-linked-row`:``,onRowClick:L,onCurrentChange:n[7]||=e=>{e&&L(e)}},{default:u(()=>[i(A,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(A,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),i(A,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``}),i(A,{label:`状态`,width:`80`,align:`center`},{default:u(({row:e})=>[O.value.includes(e.id)?(a(),v(j,{key:0,size:`small`,type:`info`},{default:u(()=>[...n[12]||=[c(`已关联`,-1)]]),_:1})):(a(),t(`span`,V,`—`))]),_:1})]),_:1},8,[`data`,`row-class-name`])),[[z,C.value]]),D.value.total>0?(a(),t(`div`,H,[i(N,{layout:`total, prev, pager, next`,total:D.value.total,"page-size":D.value.per_page,"current-page":E.value,onCurrentChange:F},null,8,[`total`,`page-size`,`current-page`])])):s(``,!0)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-d91269f1`]]),ae={class:`detail-body`},oe={key:0,class:`basic-info-block`},se={key:1,class:`basic-info-block`},ce={key:0,class:`crawl-uni-hint`},le={class:`uni-row`},ue={class:`star-preview`},de={key:0,class:`star-follow-rule`},fe={class:`section`},pe={class:`section-head`},me={class:`muted`},he={class:`section`},ge={class:`section-head`},_e={class:`muted`},ve={class:`summary-body`},ye={class:`follow-summary`},be={class:`log-head`},U=r({__name:`TeacherDetailDialog`,props:{modelValue:{type:Boolean},teacherId:{},readonly:{type:Boolean}},emits:[`update:modelValue`,`saved`],setup(e,{emit:r}){let o=C(),te=y(()=>o.isGridMember),f=e,S=y(()=>f.readonly===!0),w=y(()=>{let e=H.value?.name;return S.value?e?`查看 · ${e}`:`老师详情`:e?`编辑 · ${e}`:`编辑老师`});function k(e){return e.university_name?e.university_name:e.university_text?`${e.university_text}(未关联高校库)`:`—`}function A(e){return e.research_direction?e.research_direction:e.research_directions?.map(e=>e.name).join(`、`)||`—`}let B=r,V=p(!1),H=p(null),U=p(null),W=y(()=>R(q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.value)),G=p([]),K=p([]),q=p([]),xe=p([]),J=p([]),Y=p([]);function Se(e){let t=[],n=[];for(let r of e){if(typeof r==`number`){t.push(r);continue}let e=String(r).trim();e&&n.push(e)}return{ids:t,names:n}}let X=p({name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),Z=p(!1),Q=p(!1),$=p({name:``,city:``,province:``,longitude:``,latitude:``}),Ce=p(!1),we=p(!1),Te=p(``),Ee=p(!1),De=p(``),Oe=p([]);async function ke(){let e=await M({page:1,page_size:200}),t=o.user?.grid_scope?.university_ids;J.value=t?.length?e.items.filter(e=>t.includes(e.id)):e.items}async function Ae(){let e=await D(),t=o.user?.grid_scope?.research_direction_ids;Y.value=t?.length?e.research_directions.filter(e=>t.includes(e.id)):e.research_directions}function je(e){let t=new Set(Y.value.map(e=>e.id));for(let n of e.research_directions||[])t.has(n.id)||(Y.value.push({id:n.id,name:n.name}),t.add(n.id))}function Me(){$.value={name:``,city:X.value.city||``,province:``,longitude:``,latitude:``},Z.value=!0}async function Ne(){let e=$.value;if(!e.name.trim()){x.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){x.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){x.warning(`经纬度须为有效数字`);return}Q.value=!0;try{let r=await E({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});J.value.some(e=>e.id===r.id)||J.value.push(r),X.value.university_id=r.id,r.city&&(X.value.city=r.city),Z.value=!1,x.success(`高校已创建`)}finally{Q.value=!1}}async function Pe(){if(f.teacherId){V.value=!0;try{let e=await N(f.teacherId);H.value=e,U.value=e.star_level_dict_item_id??null,je(e),X.value={name:e.name||``,university_id:e.university_id??void 0,research_direction_values:e.research_direction_ids?.length?[...e.research_direction_ids]:e.research_directions?.map(e=>e.id)||[],city:e.city||``,title:e.title||``,department:e.department||``,bio:e.bio||``,phone:e.phone||``,email:e.email||``,star_level_dict_item_id:e.star_level_dict_item_id??void 0,status_dict_item_id:e.status_dict_item_id??void 0,next_follow_date:e.next_follow_date||``};let[t,n]=await Promise.all([P(f.teacherId),L({teacher_id:f.teacherId,page:1,page_size:50})]);G.value=t,K.value=n.items}finally{V.value=!1}}}function Fe(){let e=X.value;if(!e.name.trim())return x.warning(`请填写姓名`),!1;if(!e.university_id)return x.warning(`请选择高校,或点击「新建高校」`),!1;if(!e.city.trim())return x.warning(`请填写城市`),!1;if(!e.title.trim())return x.warning(`请填写职称`),!1;let t=Se(e.research_direction_values);return!t.ids.length&&!t.names.length?(x.warning(`请至少选择一个或新增研究方向`),!1):e.status_dict_item_id?!0:(x.warning(`请选择状态`),!1)}async function Ie(){if(!f.teacherId||!H.value||!Fe())return;let e=(X.value.star_level_dict_item_id??null)!==U.value,t=Se(X.value.research_direction_values);await O(f.teacherId,{name:X.value.name.trim(),university_id:X.value.university_id,city:X.value.city.trim(),title:X.value.title.trim(),department:X.value.department.trim()||null,bio:X.value.bio.trim()||null,research_direction_ids:t.ids,new_research_directions:t.names,phone:X.value.phone||null,email:X.value.email||null,star_level_dict_item_id:X.value.star_level_dict_item_id??null,status_dict_item_id:X.value.status_dict_item_id,...e?{recalc_next_follow_date:!0}:{next_follow_date:X.value.next_follow_date||null,recalc_next_follow_date:!1}}),x.success(`已保存`),B(`saved`),B(`update:modelValue`,!1)}function Le(){let e=q.value.find(e=>e.id===X.value.star_level_dict_item_id);X.value.next_follow_date=re(e?.value)||``}function Re(e){if(!e)return;let t=J.value.find(t=>t.id===e);t?.city&&!X.value.city&&(X.value.city=t.city)}function ze(){Ce.value=!0}async function Be(){f.teacherId&&(G.value=await P(f.teacherId))}async function Ve(e){await b.confirm(`确定删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await j(f.teacherId,e.id),G.value=await P(f.teacherId)}function He(e){Te.value=e.summary||`暂无摘要`,we.value=!0}async function Ue(e){De.value=e.title,Oe.value=await I(e.id),Ee.value=!0}return g(()=>[f.modelValue,f.teacherId],async([e,t])=>{if(e&&t){if(!q.value.length){let[e,t]=await Promise.all([T(`teacher_level`),T(`teacher_status`)]);q.value=e.items,xe.value=t.items,await ke()}await Ae(),await Pe()}}),g(()=>X.value.university_id,e=>Re(e)),(r,o)=>{let f=l(`el-descriptions-item`),p=l(`el-descriptions`),g=l(`el-input`),y=l(`el-form-item`),b=l(`el-col`),x=l(`el-option`),C=l(`el-select`),T=l(`el-button`),E=l(`el-date-picker`),D=l(`el-row`),O=l(`el-form`),j=l(`el-table-column`),M=l(`el-link`),N=l(`el-table`),P=l(`el-tag`),I=l(`el-empty`),L=l(`el-dialog`),R=ee(`loading`);return a(),v(L,{"model-value":e.modelValue,title:w.value,width:`960px`,top:`4vh`,"destroy-on-close":``,"onUpdate:modelValue":o[23]||=e=>B(`update:modelValue`,e)},{footer:u(()=>[i(T,{onClick:o[12]||=e=>B(`update:modelValue`,!1)},{default:u(()=>[...o[33]||=[c(`关闭`,-1)]]),_:1}),S.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,class:`teachers-primary-btn`,onClick:Ie},{default:u(()=>[...o[34]||=[c(` 保存 `,-1)]]),_:1}))]),default:u(()=>[ne((a(),t(`div`,ae,[S.value&&H.value?(a(),t(`div`,oe,[o[24]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(p,{column:3,border:``,size:`small`,class:`view-desc`},{default:u(()=>[i(f,{label:`姓名`},{default:u(()=>[c(_(H.value.name),1)]),_:1}),i(f,{label:`高校`},{default:u(()=>[c(_(k(H.value)),1)]),_:1}),i(f,{label:`城市`},{default:u(()=>[c(_(H.value.city||`—`),1)]),_:1}),i(f,{label:`职称`},{default:u(()=>[c(_(H.value.title||`—`),1)]),_:1}),i(f,{label:`研究方向`,span:2},{default:u(()=>[c(_(A(H.value)),1)]),_:1}),i(f,{label:`电话`},{default:u(()=>[c(_(H.value.phone||`—`),1)]),_:1}),i(f,{label:`邮箱`},{default:u(()=>[c(_(H.value.email||`—`),1)]),_:1}),i(f,{label:`星级`},{default:u(()=>[c(_(n(z)(H.value.star_level_item?.value,H.value.star_level_item?.label)),1)]),_:1}),i(f,{label:`状态`},{default:u(()=>[c(_(H.value.status_item?.label||`—`),1)]),_:1}),i(f,{label:`下次跟进日期`},{default:u(()=>[c(_(H.value.next_follow_date||`—`),1)]),_:1}),H.value.source_item?.label?(a(),v(f,{key:0,label:`来源`},{default:u(()=>[c(_(H.value.source_item.label),1)]),_:1})):s(``,!0)]),_:1})])):(a(),t(`div`,se,[o[26]||=d(`h3`,{class:`basic-info-title`},`基本信息`,-1),i(O,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(D,{gutter:12},{default:u(()=>[i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`姓名`,required:``},{default:u(()=>[i(g,{modelValue:X.value.name,"onUpdate:modelValue":o[0]||=e=>X.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`高校`,required:``},{default:u(()=>[H.value?.university_text&&!X.value.university_id?(a(),t(`p`,ce,` 论文抓取高校:`+_(H.value.university_text)+`(请在下拉中选择或新建以关联) `,1)):s(``,!0),d(`div`,le,[i(C,{modelValue:X.value.university_id,"onUpdate:modelValue":o[1]||=e=>X.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:u(()=>[(a(!0),t(m,null,h(J.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),te.value?s(``,!0):(a(),v(T,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Me},{default:u(()=>[...o[25]||=[c(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`城市`,required:``},{default:u(()=>[i(g,{modelValue:X.value.city,"onUpdate:modelValue":o[2]||=e=>X.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`职称`,required:``},{default:u(()=>[i(g,{modelValue:X.value.title,"onUpdate:modelValue":o[3]||=e=>X.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`所属学院`},{default:u(()=>[i(g,{modelValue:X.value.department,"onUpdate:modelValue":o[4]||=e=>X.value.department=e,placeholder:`如:计算机科学与技术学院`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:16},{default:u(()=>[i(y,{label:`个人简介`},{default:u(()=>[i(g,{modelValue:X.value.bio,"onUpdate:modelValue":o[5]||=e=>X.value.bio=e,type:`textarea`,rows:3,placeholder:`老师个人简介`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:8},{default:u(()=>[i(y,{label:`研究方向`,required:``},{default:u(()=>[i(C,{modelValue:X.value.research_direction_values,"onUpdate:modelValue":o[6]||=e=>X.value.research_direction_values=e,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择或输入研究方向`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(Y.value,e=>(a(),v(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`电话`},{default:u(()=>[i(g,{modelValue:X.value.phone,"onUpdate:modelValue":o[7]||=e=>X.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`邮箱`},{default:u(()=>[i(g,{modelValue:X.value.email,"onUpdate:modelValue":o[8]||=e=>X.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:4},{default:u(()=>[i(y,{label:`星级`},{default:u(()=>[i(C,{modelValue:X.value.star_level_dict_item_id,"onUpdate:modelValue":o[9]||=e=>X.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:Le},{default:u(()=>[(a(!0),t(m,null,h(q.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),d(`span`,ue,_(n(z)(q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.value,q.value.find(e=>e.id===X.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`状态`,required:``},{default:u(()=>[i(C,{modelValue:X.value.status_dict_item_id,"onUpdate:modelValue":o[10]||=e=>X.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:u(()=>[(a(!0),t(m,null,h(xe.value,e=>(a(),v(x,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),i(b,{xs:24,md:6},{default:u(()=>[i(y,{label:`下次跟进日期`},{default:u(()=>[i(E,{modelValue:X.value.next_follow_date,"onUpdate:modelValue":o[11]||=e=>X.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`]),W.value?(a(),t(`p`,de,_(W.value),1)):s(``,!0)]),_:1})]),_:1})]),_:1})]),_:1})])),d(`div`,fe,[d(`div`,pe,[o[28]||=d(`h3`,null,`论文列表`,-1),d(`span`,me,`共 `+_(G.value.length)+` 篇`,1),S.value?s(``,!0):(a(),v(T,{key:0,size:`small`,type:`primary`,plain:``,onClick:ze},{default:u(()=>[...o[27]||=[c(` 添加论文 `,-1)]]),_:1}))]),i(N,{data:G.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),i(j,{prop:`authors`,label:`作者`,width:`140`}),i(j,{prop:`school_name`,label:`学校`,width:`120`}),i(j,{prop:`published_at`,label:`发表时间`,width:`110`}),i(j,{label:`链接`,width:`70`},{default:u(({row:e})=>[e.url?(a(),v(M,{key:0,href:e.url,target:`_blank`},{default:u(()=>[...o[29]||=[c(`查看`,-1)]]),_:1},8,[`href`])):s(``,!0)]),_:1}),i(j,{label:`操作`,width:S.value?70:120},{default:u(({row:e})=>[i(T,{link:``,type:`primary`,onClick:t=>He(e)},{default:u(()=>[...o[30]||=[c(`摘要`,-1)]]),_:1},8,[`onClick`]),S.value?s(``,!0):(a(),v(T,{key:0,link:``,type:`danger`,onClick:t=>Ve(e)},{default:u(()=>[...o[31]||=[c(`删除`,-1)]]),_:1},8,[`onClick`]))]),_:1},8,[`width`])]),_:1},8,[`data`])]),d(`div`,he,[d(`div`,ge,[o[32]||=d(`h3`,null,`需求列表`,-1),d(`span`,_e,`共 `+_(K.value.length)+` 条`,1)]),i(N,{data:K.value,size:`small`,"row-key":`id`},{default:u(()=>[i(j,{label:`类型`,width:`100`},{default:u(({row:e})=>[i(P,{size:`small`,effect:`dark`},{default:u(()=>[c(_(e.type_item?.label),1)]),_:2},1024)]),_:1}),i(j,{prop:`title`,label:`标题`,"min-width":`180`,"show-overflow-tooltip":``}),i(j,{prop:`submitted_at`,label:`时间`,width:`110`}),i(j,{label:`处理状态`,width:`100`},{default:u(({row:e})=>[i(P,{type:n(F)(e.status_item?.value),size:`small`,effect:`dark`},{default:u(()=>[c(_(e.status_item?.label),1)]),_:2},1032,[`type`])]),_:1}),i(j,{label:`跟进记录`,width:`100`},{default:u(({row:e})=>[i(T,{size:`small`,onClick:t=>Ue(e)},{default:u(()=>[c(_(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1})]),_:1},8,[`data`]),K.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无关联需求`,"image-size":64}))])])),[[R,V.value]]),i(L,{modelValue:Z.value,"onUpdate:modelValue":o[19]||=e=>Z.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:u(()=>[i(T,{onClick:o[18]||=e=>Z.value=!1},{default:u(()=>[...o[35]||=[c(`取消`,-1)]]),_:1}),i(T,{type:`primary`,class:`teachers-primary-btn`,loading:Q.value,onClick:Ne},{default:u(()=>[...o[36]||=[c(` 保存 `,-1)]]),_:1},8,[`loading`])]),default:u(()=>[i(O,{"label-position":`top`,class:`form-small`},{default:u(()=>[i(y,{label:`高校名称`,required:``},{default:u(()=>[i(g,{modelValue:$.value.name,"onUpdate:modelValue":o[13]||=e=>$.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`经度`,required:``},{default:u(()=>[i(g,{modelValue:$.value.longitude,"onUpdate:modelValue":o[14]||=e=>$.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`纬度`,required:``},{default:u(()=>[i(g,{modelValue:$.value.latitude,"onUpdate:modelValue":o[15]||=e=>$.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),i(D,{gutter:12},{default:u(()=>[i(b,{span:12},{default:u(()=>[i(y,{label:`省份`},{default:u(()=>[i(g,{modelValue:$.value.province,"onUpdate:modelValue":o[16]||=e=>$.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),i(b,{span:12},{default:u(()=>[i(y,{label:`城市`},{default:u(()=>[i(g,{modelValue:$.value.city,"onUpdate:modelValue":o[17]||=e=>$.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),i(L,{modelValue:we.value,"onUpdate:modelValue":o[20]||=e=>we.value=e,title:`论文摘要`,width:`520px`,"append-to-body":``},{default:u(()=>[d(`p`,ve,_(Te.value),1)]),_:1},8,[`modelValue`]),i(ie,{modelValue:Ce.value,"onUpdate:modelValue":o[21]||=e=>Ce.value=e,"teacher-id":e.teacherId,"default-authors":H.value?.name||X.value.name,"default-school-name":J.value.find(e=>e.id===X.value.university_id)?.name||H.value?.university_name||``,onSaved:Be},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),i(L,{modelValue:Ee.value,"onUpdate:modelValue":o[22]||=e=>Ee.value=e,title:`需求跟进记录`,width:`640px`,"append-to-body":``},{default:u(()=>[d(`p`,ye,_(De.value),1),(a(!0),t(m,null,h(Oe.value,e=>(a(),t(`div`,{key:e.id,class:`log-card`},[d(`div`,be,[d(`strong`,null,_(e.operator_name),1),d(`span`,null,_(e.handled_at),1),e.status_item?(a(),v(P,{key:0,size:`small`,type:n(F)(e.status_item.value)},{default:u(()=>[c(_(e.status_item.label),1)]),_:2},1032,[`type`])):s(``,!0)]),d(`p`,null,_(e.content),1)]))),128)),Oe.value.length?s(``,!0):(a(),v(I,{key:0,description:`暂无记录`}))]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`])}}}),W=e({default:()=>G}),G=S(U,[[`__scopeId`,`data-v-39f9904d`]]);export{W as n,ie as r,G as t}; \ No newline at end of file diff --git a/public/admin/assets/activities-khLGM69i.js b/public/admin/assets/activities-3eo24xB0.js similarity index 91% rename from public/admin/assets/activities-khLGM69i.js rename to public/admin/assets/activities-3eo24xB0.js index 5a433dc..36be3fd 100644 --- a/public/admin/assets/activities-khLGM69i.js +++ b/public/admin/assets/activities-3eo24xB0.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/activities`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/activities/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/activities`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/activities/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/activities/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/activities/${t}/sessions`);return n.data.items}async function s(t,n){let{data:r}=await e.post(`/admin/v1/activities/${t}/sessions`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/activities/${t}/sessions/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/sessions/${n}`);return r}async function u(t,n){let{data:r}=await e.get(`/admin/v1/activities/${t}/signups`,{params:n});return r.data}async function d(e,t={}){let n=1,r=[];for(;;){let i=await u(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function f(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/signups/${n}`);return r}async function p(t,n,r){let{data:i}=await e.post(`/admin/v1/activities/${t}/signups/${n}/checkin`,r);return i}export{l as a,n as c,d,i as f,a as i,o as l,r as n,f as o,c as p,s as r,t as s,p as t,u}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/activities`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/activities/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/activities`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/activities/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/activities/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/activities/${t}/sessions`);return n.data.items}async function s(t,n){let{data:r}=await e.post(`/admin/v1/activities/${t}/sessions`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/activities/${t}/sessions/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/sessions/${n}`);return r}async function u(t,n){let{data:r}=await e.get(`/admin/v1/activities/${t}/signups`,{params:n});return r.data}async function d(e,t={}){let n=1,r=[];for(;;){let i=await u(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function f(t,n){let{data:r}=await e.delete(`/admin/v1/activities/${t}/signups/${n}`);return r}async function p(t,n,r){let{data:i}=await e.post(`/admin/v1/activities/${t}/signups/${n}/checkin`,r);return i}export{l as a,n as c,d,i as f,a as i,o as l,r as n,f as o,c as p,s as r,t as s,p as t,u}; \ No newline at end of file diff --git a/public/admin/assets/activities-CMrLWqB9.js b/public/admin/assets/activities-BlfllI2o.js similarity index 97% rename from public/admin/assets/activities-CMrLWqB9.js rename to public/admin/assets/activities-BlfllI2o.js index 97cb648..9852ef6 100644 --- a/public/admin/assets/activities-CMrLWqB9.js +++ b/public/admin/assets/activities-BlfllI2o.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as te,Y as s,at as c,b as l,d as ne,ht as u,m as d,ot as re,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g,s as _}from"./index-DHoSHxJa.js";import{n as ie,t as v}from"./usePageLoad-C9PEZ_Tm.js";import{t as ae}from"./RichTextEditor-B2PNXVgT.js";import{a as y,c as b,d as x,f as oe,i as se,l as S,n as C,o as w,p as ce,r as le,s as ue,t as T,u as de}from"./activities-khLGM69i.js";import{a as fe,i as pe,o as me,s as he}from"./admin-list-DjncsyJC.js";import{a as E}from"./dict-D30aLydL.js";import{a as ge,i as _e,n as D,r as O,t as ve}from"./csv-export-CMyUqpMf.js";function ye(e,t){return D([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function be(e,t,n){return D([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.session_checked_in_at?`已签到`:`未签到`:``,t?n(e.session_checked_in_at):``]))}var xe={class:`list-page`},Se={class:`page-header`},Ce={class:`list-filter-bar`},we={class:`table-row-actions`},Te={class:`list-pager`},Ee={class:`date-range`},De={class:`date-range`},Oe={class:`session-label-row`},ke={class:`sessions-block`},Ae={class:`dialog-footer-inner`},je={class:`signup-head`},Me={class:`signup-head-row`},Ne={key:0,class:`session-tabs`},Pe={key:1,class:`text-mute`},Fe={class:`sub-toolbar signup-filter-bar`},Ie={class:`list-pager`},k=_(n({__name:`index`,setup(n){let _=u(!1),D=u(!1),k=u([]),A=u({current_page:1,per_page:20,total:0}),j=u(1),M=u(``),N=u(``),P=u(``),F=u(``),I=u([]),L=u(!1),R=u(null),z=u({title:``,activity_type_dict_item_id:void 0,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``}),B=u([]),Le=u(!1),V=u(null),H=u([]),Re=u([]),U=u({current_page:1,per_page:20,total:0}),W=u(1),G=u(``),K=u(``),q=u(``),J=u(!1),ze=u(!1),Be=u([]),Ve=u(!1),He=u(null),Ue=u(``);async function We(){try{I.value=(await E(`activity_type`)).items}catch{g.warning(`活动类型字典加载失败,请执行 ActivityDictionarySeeder 或在字典中维护 activity_type`)}}async function Y(){_.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value!==``&&(e.activity_type_dict_item_id=N.value),P.value!==``&&(e.progress_status=P.value),F.value!==``&&(e.published=F.value);let t=await ue(e);k.value=t.items,A.value=t.meta}finally{_.value=!1}}function Ge(){j.value=1,Y()}function Ke(){M.value=``,N.value=``,P.value=``,F.value=``,j.value=1,Y()}function qe(){B.value.push({title:``,starts_at:``,ends_at:``,venue:``,capacity:void 0})}function Je(e){B.value.splice(e,1)}function Ye(){R.value=null,z.value={title:``,activity_type_dict_item_id:I.value[0]?.id,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``},B.value=[],L.value=!0}async function Xe(e){R.value=e;let t=await b(e.id);z.value={title:t.title,activity_type_dict_item_id:t.activity_type_dict_item_id??void 0,event_start_date:t.event_start_date||``,event_end_date:t.event_end_date||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,location:t.location||``,intro_html:t.intro_html||``},B.value=(await S(e.id)).map(e=>({id:e.id,title:e.title||``,starts_at:e.starts_at?e.starts_at.slice(0,16).replace(`T`,` `):``,ends_at:e.ends_at?e.ends_at.slice(0,16).replace(`T`,` `):``,venue:e.venue||``,capacity:e.capacity??void 0})),L.value=!0}function Ze(){return z.value.title?.trim()?z.value.activity_type_dict_item_id?!z.value.event_start_date||!z.value.event_end_date?(g.warning(`请填写活动日期`),!1):z.value.event_start_date>z.value.event_end_date?(g.warning(`活动结束日期不能早于开始日期`),!1):!z.value.signup_start_date||!z.value.signup_end_date?(g.warning(`请填写报名起止日期`),!1):z.value.signup_start_date>z.value.signup_end_date?(g.warning(`报名结束日期不能早于开始日期`),!1):!0:(g.warning(`请选择活动类型`),!1):(g.warning(`请填写活动名称`),!1)}function Qe(e){return e.slice(0,10)}function $e(e){let t=z.value.event_start_date,n=z.value.event_end_date;return!t||!n?!0:e.starts_at&&Qe(e.starts_at)n?(g.warning(`场次「${e.title}」结束时间不能晚于活动结束日期`),!1):!0}function et(e){let t=z.value.event_start_date,n=z.value.event_end_date;if(!t||!n)return!1;let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`;return rn}function tt(){let e=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let t of e){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))return g.warning(`场次信息不完整:标题、开始时间、结束时间、名额均为必填,且名额须大于 0`),!1;if(t.starts_at>t.ends_at)return g.warning(`场次「${t.title}」结束时间不能早于开始时间`),!1;if(!$e(t))return!1}return B.value.filter(e=>e.title?.trim()&&e.starts_at&&e.ends_at&&(e.capacity??0)>0).length?!0:(g.warning(`保存并发布前须至少添加一个完整场次(标题、开始/结束时间、名额均必填且名额大于 0)`),!1)}async function nt(e){let t=R.value?await S(e):[],n=new Set;for(let t of B.value){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))continue;if(!$e(t))throw Error(`session_range_invalid`);let r={title:t.title.trim(),starts_at:`${t.starts_at}:00`,ends_at:`${t.ends_at}:00`,venue:t.venue||null,capacity:t.capacity};if(t.id)await ce(e,t.id,r),n.add(t.id);else{let t=await le(e,r);n.add(t.id)}}for(let r of t)n.has(r.id)||await y(e,r.id)}async function rt(e){if(!Ze()||e===1&&!tt())return;let t=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let e of t)if((e.starts_at||e.ends_at)&&!$e(e))return;let n={title:z.value.title.trim(),activity_type_dict_item_id:z.value.activity_type_dict_item_id,event_start_date:z.value.event_start_date,event_end_date:z.value.event_end_date,signup_start_date:z.value.signup_start_date,signup_end_date:z.value.signup_end_date,location:z.value.location||null,intro_html:z.value.intro_html||null,published:e};D.value=!0;try{let t;R.value?(await oe(R.value.id,n),t=R.value.id):t=(await C(n)).id,await nt(t),g.success(e===1?`已保存并发布`:`已暂存草稿`),L.value=!1,await Y()}catch(e){if(e instanceof Error&&e.message===`session_range_invalid`)return;throw e}finally{D.value=!1}}async function it(e){await h.confirm(`确定删除活动「${e.title}」?`,`提示`,{type:`warning`}),await se(e.id),g.success(`已删除`),await Y()}function X(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Z(e){return e.title?e.title:e.starts_at?e.starts_at.slice(0,10).replace(/-/g,`.`):`场次 #${e.id}`}function at(e){return e?.starts_at?new Date(e.starts_at)<=new Date:!0}let ot=()=>H.value.find(e=>e.id===q.value),Q=()=>at(ot());async function $(){if(!V.value)return;let e={page:W.value,page_size:U.value.per_page};G.value.trim()&&(e.keyword=G.value.trim()),q.value!==``&&(e.activity_session_id=q.value),K.value!==``&&(e.checkin_status=K.value);let t=await de(V.value.id,e);Re.value=t.items,U.value=t.meta}async function st(e){V.value=e,Le.value=!0,W.value=1,G.value=``,K.value=``,H.value=await S(e.id),q.value=H.value[0]?.id??``,await $()}async function ct(e){q.value=e,W.value=1,await $()}function lt(){W.value=1,$()}function ut(){G.value=``,K.value=``,W.value=1,$()}async function dt(e){V.value&&(await h.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await w(V.value.id,e.id),await $(),await Y())}async function ft(e){!V.value||q.value===``||(await T(V.value.id,e.id,{activity_session_id:q.value}),g.success(`已完成手动补签`),await $())}function pt(e){He.value=e,Ue.value=ge(e),Ve.value=!0}async function mt(){if(V.value){J.value=!0,ze.value=!0,Be.value=[];try{let e=V.value.id,t=await x(e);Be.value=await Promise.all(H.value.map(async n=>{let r=await x(e,{activity_session_id:n.id}),i=at(n)?r.filter(e=>e.session_checked_in_at).length:0,a=t.filter(e=>e.activity_session_id===n.id);return{session:n,signup_count:a.length,checked_in_count:i,signupRows:a,signinRows:r}}))}catch{g.error(`导出数据加载失败`)}finally{ze.value=!1}}}function ht(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ye(e.signupRows,X);ve(`${t}_${n}_报名.csv`,r)}function gt(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=be(e.signinRows,at(e.session),X);ve(`${t}_${n}_签到.csv`,r)}return v(async()=>{await We(),await Y()}),(n,u)=>{let h=s(`el-button`),g=s(`el-input`),v=s(`el-option`),y=s(`el-select`),b=s(`el-table-column`),x=s(`el-table`),oe=s(`el-pagination`),se=s(`el-card`),S=s(`el-form-item`),C=s(`el-col`),w=s(`el-date-picker`),ce=s(`el-input-number`),le=s(`el-row`),ue=s(`el-form`),T=s(`el-dialog`),de=s(`el-tag`),E=ee(`loading`);return i(),e(d,null,[l(`div`,xe,[l(`div`,Se,[r(ie),r(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:Ye},{default:c(()=>[...u[24]||=[o(`新建活动`,-1)]]),_:1})]),r(se,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,Ce,[r(g,{modelValue:M.value,"onUpdate:modelValue":u[0]||=e=>M.value=e,placeholder:`搜索活动名称`,clearable:``,class:`filter-search`,onKeyup:ne(Ge,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:N.value,"onUpdate:modelValue":u[1]||=e=>N.value=e,clearable:``,placeholder:`活动类型`,class:`filter-select`,filterable:``},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:P.value,"onUpdate:modelValue":u[2]||=e=>P.value=e,clearable:``,placeholder:`活动状态`,class:`filter-select`},{default:c(()=>[r(v,{label:`未开始`,value:1}),r(v,{label:`进行中`,value:2}),r(v,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),r(y,{modelValue:F.value,"onUpdate:modelValue":u[3]||=e=>F.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:c(()=>[r(v,{label:`已发布`,value:1}),r(v,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:Ge},{default:c(()=>[...u[25]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:Ke},{default:c(()=>[...u[26]||=[o(`重置`,-1)]]),_:1})]),re((i(),m(x,{data:k.value,"row-key":`id`},{default:c(()=>[r(b,{prop:`title`,label:`活动名称`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{label:`活动类型`,width:`100`},{default:c(({row:e})=>[o(p(e.activity_type_item?.label??`—`),1)]),_:1}),r(b,{label:`场次`,width:`72`,align:`center`},{default:c(({row:e})=>[o(p(e.sessions_count??0),1)]),_:1}),r(b,{label:`活动日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(pe)(e.event_start_date,e.event_end_date)),1)]),_:1}),r(b,{label:`报名起止日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(pe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),r(b,{prop:`location`,label:`活动地点`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{label:`活动状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(me)(e.progress_status)])},p(t(fe)(e.progress_status)),3)]),_:1}),r(b,{label:`发布状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(he)(e.published)])},p(e.published===1?`已发布`:`未发布`),3)]),_:1}),r(b,{label:`操作`,width:`280`,fixed:`right`},{default:c(({row:e})=>[l(`div`,we,[r(h,{class:`btn-action-brand`,onClick:t=>st(e)},{default:c(()=>[...u[27]||=[o(`报名与签到`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>pt(e)},{default:c(()=>[...u[28]||=[o(`签到码`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>Xe(e)},{default:c(()=>[...u[29]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-brand`,onClick:t=>it(e)},{default:c(()=>[...u[30]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[E,_.value]]),l(`div`,Te,[r(oe,{"current-page":j.value,"onUpdate:currentPage":u[4]||=e=>j.value=e,layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(T,{modelValue:L.value,"onUpdate:modelValue":u[16]||=e=>L.value=e,title:R.value?`编辑活动`:`新建活动`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`activity-dialog`},{footer:c(()=>[l(`div`,Ae,[r(h,{onClick:u[13]||=e=>L.value=!1},{default:c(()=>[...u[36]||=[o(`取消`,-1)]]),_:1}),r(h,{loading:D.value,onClick:u[14]||=e=>rt(0)},{default:c(()=>[...u[37]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(h,{type:`primary`,loading:D.value,onClick:u[15]||=e=>rt(1)},{default:c(()=>[...u[38]||=[o(`保存并发布`,-1)]]),_:1},8,[`loading`])])]),default:c(()=>[r(ue,{"label-position":`top`,class:`activity-form`},{default:c(()=>[r(le,{gutter:16},{default:c(()=>[r(C,{span:8},{default:c(()=>[r(S,{label:`活动名称`,required:``},{default:c(()=>[r(g,{modelValue:z.value.title,"onUpdate:modelValue":u[5]||=e=>z.value.title=e,placeholder:`请输入活动名称`},null,8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动类型`,required:``},{default:c(()=>[r(y,{modelValue:z.value.activity_type_dict_item_id,"onUpdate:modelValue":u[6]||=e=>z.value.activity_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动日期`,required:``},{default:c(()=>[l(`div`,Ee,[r(w,{modelValue:z.value.event_start_date,"onUpdate:modelValue":u[7]||=e=>z.value.event_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[31]||=l(`span`,{class:`range-sep`},`至`,-1),r(w,{modelValue:z.value.event_end_date,"onUpdate:modelValue":u[8]||=e=>z.value.event_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`报名起止日期`,required:``},{default:c(()=>[l(`div`,De,[r(w,{modelValue:z.value.signup_start_date,"onUpdate:modelValue":u[9]||=e=>z.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[32]||=l(`span`,{class:`range-sep`},`至`,-1),r(w,{modelValue:z.value.signup_end_date,"onUpdate:modelValue":u[10]||=e=>z.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动地点`},{default:c(()=>[r(g,{modelValue:z.value.location,"onUpdate:modelValue":u[11]||=e=>z.value.location=e,placeholder:`请输入活动地点`},null,8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:24},{default:c(()=>[r(S,{class:`session-form-item`},{label:c(()=>[l(`div`,Oe,[u[34]||=l(`span`,null,`活动场次`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:qe},{default:c(()=>[...u[33]||=[o(` 添加场次 `,-1)]]),_:1})])]),default:c(()=>[l(`div`,ke,[(i(!0),e(d,null,f(B.value,(t,n)=>(i(),e(`div`,{key:n,class:`session-row`},[r(g,{modelValue:t.title,"onUpdate:modelValue":e=>t.title=e,placeholder:`场次标题,如:上午场`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(w,{modelValue:t.starts_at,"onUpdate:modelValue":e=>t.starts_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`开始时间`,"disabled-date":et,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(w,{modelValue:t.ends_at,"onUpdate:modelValue":e=>t.ends_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`结束时间`,"disabled-date":et,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(g,{modelValue:t.venue,"onUpdate:modelValue":e=>t.venue=e,placeholder:`地点(可选)`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(ce,{modelValue:t.capacity,"onUpdate:modelValue":e=>t.capacity=e,min:1,placeholder:`名额`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(h,{type:`danger`,plain:``,size:`small`,class:`session-row-delete`,onClick:e=>Je(n)},{default:c(()=>[...u[35]||=[o(` 删除 `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),r(C,{span:24},{default:c(()=>[r(S,{label:`活动简介`,class:`intro-form-item`},{default:c(()=>[r(ae,{modelValue:z.value.intro_html,"onUpdate:modelValue":u[12]||=e=>z.value.intro_html=e,scope:`activities`,height:260},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r(_e,{modelValue:Ve.value,"onUpdate:modelValue":u[17]||=e=>Ve.value=e,"course-name":He.value?.title||``,"signin-code":Ue.value},null,8,[`modelValue`,`course-name`,`signin-code`]),r(T,{modelValue:Le.value,"onUpdate:modelValue":u[21]||=e=>Le.value=e,title:`活动报名与签到:${V.value?.title||``}`,width:`960px`,top:`5vh`,class:`signup-dialog`},{default:c(()=>[l(`div`,je,[l(`div`,Me,[H.value.length?(i(),e(`div`,Ne,[(i(!0),e(d,null,f(H.value,e=>(i(),m(h,{key:e.id,size:`small`,type:q.value===e.id?`primary`:`default`,onClick:t=>ct(e.id)},{default:c(()=>[o(p(Z(e)),1)]),_:2},1032,[`type`,`onClick`]))),128))])):(i(),e(`div`,Pe,`暂无场次,请先在活动中添加场次`)),r(h,{disabled:!H.value.length,onClick:mt},{default:c(()=>[...u[39]||=[o(`导出`,-1)]]),_:1},8,[`disabled`])])]),l(`div`,Fe,[r(g,{modelValue:G.value,"onUpdate:modelValue":u[18]||=e=>G.value=e,clearable:``,placeholder:`搜索姓名、手机、公司…`,style:{width:`220px`},onKeyup:ne(lt,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:K.value,"onUpdate:modelValue":u[19]||=e=>K.value=e,clearable:``,placeholder:`签到状态`,style:{width:`120px`}},{default:c(()=>[r(v,{label:`已签到`,value:1}),r(v,{label:`未签到`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:lt},{default:c(()=>[...u[40]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:ut},{default:c(()=>[...u[41]||=[o(`重置`,-1)]]),_:1})]),r(x,{data:Re.value,size:`small`,style:{"margin-top":`12px`}},{default:c(()=>[r(b,{prop:`name`,label:`姓名`,width:`100`}),r(b,{prop:`mobile`,label:`手机`,width:`130`}),r(b,{prop:`company`,label:`公司`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{label:`报名时间`,width:`170`},{default:c(({row:e})=>[o(p(X(e.signed_up_at)),1)]),_:1}),r(b,{label:`签到状态`,width:`100`},{default:c(({row:t})=>[Q()?(i(),e(d,{key:0},[t.session_checked_in_at?(i(),m(de,{key:0,type:`success`,size:`small`},{default:c(()=>[...u[42]||=[o(`已签到`,-1)]]),_:1})):(i(),m(de,{key:1,type:`info`,size:`small`},{default:c(()=>[...u[43]||=[o(`未签到`,-1)]]),_:1}))],64)):a(``,!0)]),_:1}),r(b,{label:`签到时间`,width:`170`},{default:c(({row:e})=>[o(p(Q()?X(e.session_checked_in_at):``),1)]),_:1}),r(b,{label:`操作`,width:`120`,fixed:`right`},{default:c(({row:e})=>[Q()&&!e.session_checked_in_at?(i(),m(h,{key:0,type:`primary`,link:``,onClick:t=>ft(e)},{default:c(()=>[...u[44]||=[o(` 手动补签 `,-1)]]),_:1},8,[`onClick`])):Q()&&e.session_checked_in_at?(i(),m(h,{key:1,type:`info`,link:``,disabled:``},{default:c(()=>[...u[45]||=[o(` 已完成 `,-1)]]),_:1})):a(``,!0),r(h,{type:`danger`,link:``,onClick:t=>dt(e)},{default:c(()=>[...u[46]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,Ie,[r(oe,{"current-page":W.value,"onUpdate:currentPage":u[20]||=e=>W.value=e,layout:`total, prev, pager, next`,total:U.value.total,"page-size":U.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`,`title`]),r(T,{modelValue:J.value,"onUpdate:modelValue":u[23]||=e=>J.value=e,title:`${V.value?.title||``}报名表导出`,width:`720px`,"append-to-body":``},{footer:c(()=>[r(h,{onClick:u[22]||=e=>J.value=!1},{default:c(()=>[...u[49]||=[o(`关闭`,-1)]]),_:1})]),default:c(()=>[re((i(),m(x,{data:Be.value,size:`small`},{default:c(()=>[r(b,{label:`场次`,"min-width":`140`},{default:c(({row:e})=>[o(p(Z(e.session)),1)]),_:1}),r(b,{prop:`signup_count`,label:`报名人数`,width:`100`}),r(b,{prop:`checked_in_count`,label:`已签到`,width:`90`}),r(b,{label:`报名导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>ht(e)},{default:c(()=>[...u[47]||=[o(`导出报名`,-1)]]),_:1},8,[`onClick`])]),_:1}),r(b,{label:`签到导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>gt(e)},{default:c(()=>[...u[48]||=[o(`导出签到`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[E,ze.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-e56a3c1e`]]);export{k as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as te,Y as s,at as c,b as l,d as ne,ht as u,m as d,ot as re,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g,s as _}from"./index-CPrkFf57.js";import{n as ie,t as v}from"./usePageLoad-B1L6ImD-.js";import{t as ae}from"./RichTextEditor-Rtwkj953.js";import{a as y,c as b,d as x,f as oe,i as se,l as S,n as C,o as w,p as ce,r as le,s as ue,t as T,u as de}from"./activities-3eo24xB0.js";import{a as fe,i as pe,o as me,s as he}from"./admin-list-dnDAubDa.js";import{a as E}from"./dict-D-xskQUn.js";import{a as ge,i as _e,n as D,r as O,t as ve}from"./csv-export-Cl9Lwtz8.js";function ye(e,t){return D([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function be(e,t,n){return D([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.session_checked_in_at?`已签到`:`未签到`:``,t?n(e.session_checked_in_at):``]))}var xe={class:`list-page`},Se={class:`page-header`},Ce={class:`list-filter-bar`},we={class:`table-row-actions`},Te={class:`list-pager`},Ee={class:`date-range`},De={class:`date-range`},Oe={class:`session-label-row`},ke={class:`sessions-block`},Ae={class:`dialog-footer-inner`},je={class:`signup-head`},Me={class:`signup-head-row`},Ne={key:0,class:`session-tabs`},Pe={key:1,class:`text-mute`},Fe={class:`sub-toolbar signup-filter-bar`},Ie={class:`list-pager`},k=_(n({__name:`index`,setup(n){let _=u(!1),D=u(!1),k=u([]),A=u({current_page:1,per_page:20,total:0}),j=u(1),M=u(``),N=u(``),P=u(``),F=u(``),I=u([]),L=u(!1),R=u(null),z=u({title:``,activity_type_dict_item_id:void 0,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``}),B=u([]),Le=u(!1),V=u(null),H=u([]),Re=u([]),U=u({current_page:1,per_page:20,total:0}),W=u(1),G=u(``),K=u(``),q=u(``),J=u(!1),ze=u(!1),Be=u([]),Ve=u(!1),He=u(null),Ue=u(``);async function We(){try{I.value=(await E(`activity_type`)).items}catch{g.warning(`活动类型字典加载失败,请执行 ActivityDictionarySeeder 或在字典中维护 activity_type`)}}async function Y(){_.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value!==``&&(e.activity_type_dict_item_id=N.value),P.value!==``&&(e.progress_status=P.value),F.value!==``&&(e.published=F.value);let t=await ue(e);k.value=t.items,A.value=t.meta}finally{_.value=!1}}function Ge(){j.value=1,Y()}function Ke(){M.value=``,N.value=``,P.value=``,F.value=``,j.value=1,Y()}function qe(){B.value.push({title:``,starts_at:``,ends_at:``,venue:``,capacity:void 0})}function Je(e){B.value.splice(e,1)}function Ye(){R.value=null,z.value={title:``,activity_type_dict_item_id:I.value[0]?.id,event_start_date:``,event_end_date:``,signup_start_date:``,signup_end_date:``,location:``,intro_html:``},B.value=[],L.value=!0}async function Xe(e){R.value=e;let t=await b(e.id);z.value={title:t.title,activity_type_dict_item_id:t.activity_type_dict_item_id??void 0,event_start_date:t.event_start_date||``,event_end_date:t.event_end_date||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,location:t.location||``,intro_html:t.intro_html||``},B.value=(await S(e.id)).map(e=>({id:e.id,title:e.title||``,starts_at:e.starts_at?e.starts_at.slice(0,16).replace(`T`,` `):``,ends_at:e.ends_at?e.ends_at.slice(0,16).replace(`T`,` `):``,venue:e.venue||``,capacity:e.capacity??void 0})),L.value=!0}function Ze(){return z.value.title?.trim()?z.value.activity_type_dict_item_id?!z.value.event_start_date||!z.value.event_end_date?(g.warning(`请填写活动日期`),!1):z.value.event_start_date>z.value.event_end_date?(g.warning(`活动结束日期不能早于开始日期`),!1):!z.value.signup_start_date||!z.value.signup_end_date?(g.warning(`请填写报名起止日期`),!1):z.value.signup_start_date>z.value.signup_end_date?(g.warning(`报名结束日期不能早于开始日期`),!1):!0:(g.warning(`请选择活动类型`),!1):(g.warning(`请填写活动名称`),!1)}function Qe(e){return e.slice(0,10)}function $e(e){let t=z.value.event_start_date,n=z.value.event_end_date;return!t||!n?!0:e.starts_at&&Qe(e.starts_at)n?(g.warning(`场次「${e.title}」结束时间不能晚于活动结束日期`),!1):!0}function et(e){let t=z.value.event_start_date,n=z.value.event_end_date;if(!t||!n)return!1;let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`;return rn}function tt(){let e=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let t of e){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))return g.warning(`场次信息不完整:标题、开始时间、结束时间、名额均为必填,且名额须大于 0`),!1;if(t.starts_at>t.ends_at)return g.warning(`场次「${t.title}」结束时间不能早于开始时间`),!1;if(!$e(t))return!1}return B.value.filter(e=>e.title?.trim()&&e.starts_at&&e.ends_at&&(e.capacity??0)>0).length?!0:(g.warning(`保存并发布前须至少添加一个完整场次(标题、开始/结束时间、名额均必填且名额大于 0)`),!1)}async function nt(e){let t=R.value?await S(e):[],n=new Set;for(let t of B.value){if(!t.title?.trim()||!t.starts_at||!t.ends_at||!(t.capacity&&t.capacity>0))continue;if(!$e(t))throw Error(`session_range_invalid`);let r={title:t.title.trim(),starts_at:`${t.starts_at}:00`,ends_at:`${t.ends_at}:00`,venue:t.venue||null,capacity:t.capacity};if(t.id)await ce(e,t.id,r),n.add(t.id);else{let t=await le(e,r);n.add(t.id)}}for(let r of t)n.has(r.id)||await y(e,r.id)}async function rt(e){if(!Ze()||e===1&&!tt())return;let t=B.value.filter(e=>e.title?.trim()||e.starts_at||e.ends_at||e.venue||e.capacity);for(let e of t)if((e.starts_at||e.ends_at)&&!$e(e))return;let n={title:z.value.title.trim(),activity_type_dict_item_id:z.value.activity_type_dict_item_id,event_start_date:z.value.event_start_date,event_end_date:z.value.event_end_date,signup_start_date:z.value.signup_start_date,signup_end_date:z.value.signup_end_date,location:z.value.location||null,intro_html:z.value.intro_html||null,published:e};D.value=!0;try{let t;R.value?(await oe(R.value.id,n),t=R.value.id):t=(await C(n)).id,await nt(t),g.success(e===1?`已保存并发布`:`已暂存草稿`),L.value=!1,await Y()}catch(e){if(e instanceof Error&&e.message===`session_range_invalid`)return;throw e}finally{D.value=!1}}async function it(e){await h.confirm(`确定删除活动「${e.title}」?`,`提示`,{type:`warning`}),await se(e.id),g.success(`已删除`),await Y()}function X(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Z(e){return e.title?e.title:e.starts_at?e.starts_at.slice(0,10).replace(/-/g,`.`):`场次 #${e.id}`}function at(e){return e?.starts_at?new Date(e.starts_at)<=new Date:!0}let ot=()=>H.value.find(e=>e.id===q.value),Q=()=>at(ot());async function $(){if(!V.value)return;let e={page:W.value,page_size:U.value.per_page};G.value.trim()&&(e.keyword=G.value.trim()),q.value!==``&&(e.activity_session_id=q.value),K.value!==``&&(e.checkin_status=K.value);let t=await de(V.value.id,e);Re.value=t.items,U.value=t.meta}async function st(e){V.value=e,Le.value=!0,W.value=1,G.value=``,K.value=``,H.value=await S(e.id),q.value=H.value[0]?.id??``,await $()}async function ct(e){q.value=e,W.value=1,await $()}function lt(){W.value=1,$()}function ut(){G.value=``,K.value=``,W.value=1,$()}async function dt(e){V.value&&(await h.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await w(V.value.id,e.id),await $(),await Y())}async function ft(e){!V.value||q.value===``||(await T(V.value.id,e.id,{activity_session_id:q.value}),g.success(`已完成手动补签`),await $())}function pt(e){He.value=e,Ue.value=ge(e),Ve.value=!0}async function mt(){if(V.value){J.value=!0,ze.value=!0,Be.value=[];try{let e=V.value.id,t=await x(e);Be.value=await Promise.all(H.value.map(async n=>{let r=await x(e,{activity_session_id:n.id}),i=at(n)?r.filter(e=>e.session_checked_in_at).length:0,a=t.filter(e=>e.activity_session_id===n.id);return{session:n,signup_count:a.length,checked_in_count:i,signupRows:a,signinRows:r}}))}catch{g.error(`导出数据加载失败`)}finally{ze.value=!1}}}function ht(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=ye(e.signupRows,X);ve(`${t}_${n}_报名.csv`,r)}function gt(e){if(!V.value)return;let t=O(V.value.title||`活动`),n=O(Z(e.session)),r=be(e.signinRows,at(e.session),X);ve(`${t}_${n}_签到.csv`,r)}return v(async()=>{await We(),await Y()}),(n,u)=>{let h=s(`el-button`),g=s(`el-input`),v=s(`el-option`),y=s(`el-select`),b=s(`el-table-column`),x=s(`el-table`),oe=s(`el-pagination`),se=s(`el-card`),S=s(`el-form-item`),C=s(`el-col`),w=s(`el-date-picker`),ce=s(`el-input-number`),le=s(`el-row`),ue=s(`el-form`),T=s(`el-dialog`),de=s(`el-tag`),E=ee(`loading`);return i(),e(d,null,[l(`div`,xe,[l(`div`,Se,[r(ie),r(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:Ye},{default:c(()=>[...u[24]||=[o(`新建活动`,-1)]]),_:1})]),r(se,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,Ce,[r(g,{modelValue:M.value,"onUpdate:modelValue":u[0]||=e=>M.value=e,placeholder:`搜索活动名称`,clearable:``,class:`filter-search`,onKeyup:ne(Ge,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:N.value,"onUpdate:modelValue":u[1]||=e=>N.value=e,clearable:``,placeholder:`活动类型`,class:`filter-select`,filterable:``},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:P.value,"onUpdate:modelValue":u[2]||=e=>P.value=e,clearable:``,placeholder:`活动状态`,class:`filter-select`},{default:c(()=>[r(v,{label:`未开始`,value:1}),r(v,{label:`进行中`,value:2}),r(v,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),r(y,{modelValue:F.value,"onUpdate:modelValue":u[3]||=e=>F.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:c(()=>[r(v,{label:`已发布`,value:1}),r(v,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:Ge},{default:c(()=>[...u[25]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:Ke},{default:c(()=>[...u[26]||=[o(`重置`,-1)]]),_:1})]),re((i(),m(x,{data:k.value,"row-key":`id`},{default:c(()=>[r(b,{prop:`title`,label:`活动名称`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{label:`活动类型`,width:`100`},{default:c(({row:e})=>[o(p(e.activity_type_item?.label??`—`),1)]),_:1}),r(b,{label:`场次`,width:`72`,align:`center`},{default:c(({row:e})=>[o(p(e.sessions_count??0),1)]),_:1}),r(b,{label:`活动日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(pe)(e.event_start_date,e.event_end_date)),1)]),_:1}),r(b,{label:`报名起止日期`,"min-width":`150`},{default:c(({row:e})=>[o(p(t(pe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),r(b,{prop:`location`,label:`活动地点`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{label:`活动状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(me)(e.progress_status)])},p(t(fe)(e.progress_status)),3)]),_:1}),r(b,{label:`发布状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(he)(e.published)])},p(e.published===1?`已发布`:`未发布`),3)]),_:1}),r(b,{label:`操作`,width:`280`,fixed:`right`},{default:c(({row:e})=>[l(`div`,we,[r(h,{class:`btn-action-brand`,onClick:t=>st(e)},{default:c(()=>[...u[27]||=[o(`报名与签到`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>pt(e)},{default:c(()=>[...u[28]||=[o(`签到码`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-primary`,onClick:t=>Xe(e)},{default:c(()=>[...u[29]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(h,{class:`btn-action-brand`,onClick:t=>it(e)},{default:c(()=>[...u[30]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[E,_.value]]),l(`div`,Te,[r(oe,{"current-page":j.value,"onUpdate:currentPage":u[4]||=e=>j.value=e,layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,onCurrentChange:Y},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(T,{modelValue:L.value,"onUpdate:modelValue":u[16]||=e=>L.value=e,title:R.value?`编辑活动`:`新建活动`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`activity-dialog`},{footer:c(()=>[l(`div`,Ae,[r(h,{onClick:u[13]||=e=>L.value=!1},{default:c(()=>[...u[36]||=[o(`取消`,-1)]]),_:1}),r(h,{loading:D.value,onClick:u[14]||=e=>rt(0)},{default:c(()=>[...u[37]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(h,{type:`primary`,loading:D.value,onClick:u[15]||=e=>rt(1)},{default:c(()=>[...u[38]||=[o(`保存并发布`,-1)]]),_:1},8,[`loading`])])]),default:c(()=>[r(ue,{"label-position":`top`,class:`activity-form`},{default:c(()=>[r(le,{gutter:16},{default:c(()=>[r(C,{span:8},{default:c(()=>[r(S,{label:`活动名称`,required:``},{default:c(()=>[r(g,{modelValue:z.value.title,"onUpdate:modelValue":u[5]||=e=>z.value.title=e,placeholder:`请输入活动名称`},null,8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动类型`,required:``},{default:c(()=>[r(y,{modelValue:z.value.activity_type_dict_item_id,"onUpdate:modelValue":u[6]||=e=>z.value.activity_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),m(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动日期`,required:``},{default:c(()=>[l(`div`,Ee,[r(w,{modelValue:z.value.event_start_date,"onUpdate:modelValue":u[7]||=e=>z.value.event_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[31]||=l(`span`,{class:`range-sep`},`至`,-1),r(w,{modelValue:z.value.event_end_date,"onUpdate:modelValue":u[8]||=e=>z.value.event_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`报名起止日期`,required:``},{default:c(()=>[l(`div`,De,[r(w,{modelValue:z.value.signup_start_date,"onUpdate:modelValue":u[9]||=e=>z.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),u[32]||=l(`span`,{class:`range-sep`},`至`,-1),r(w,{modelValue:z.value.signup_end_date,"onUpdate:modelValue":u[10]||=e=>z.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),r(C,{span:8},{default:c(()=>[r(S,{label:`活动地点`},{default:c(()=>[r(g,{modelValue:z.value.location,"onUpdate:modelValue":u[11]||=e=>z.value.location=e,placeholder:`请输入活动地点`},null,8,[`modelValue`])]),_:1})]),_:1}),r(C,{span:24},{default:c(()=>[r(S,{class:`session-form-item`},{label:c(()=>[l(`div`,Oe,[u[34]||=l(`span`,null,`活动场次`,-1),r(h,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:qe},{default:c(()=>[...u[33]||=[o(` 添加场次 `,-1)]]),_:1})])]),default:c(()=>[l(`div`,ke,[(i(!0),e(d,null,f(B.value,(t,n)=>(i(),e(`div`,{key:n,class:`session-row`},[r(g,{modelValue:t.title,"onUpdate:modelValue":e=>t.title=e,placeholder:`场次标题,如:上午场`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(w,{modelValue:t.starts_at,"onUpdate:modelValue":e=>t.starts_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`开始时间`,"disabled-date":et,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(w,{modelValue:t.ends_at,"onUpdate:modelValue":e=>t.ends_at=e,type:`datetime`,"value-format":`YYYY-MM-DD HH:mm`,format:`YYYY-MM-DD HH:mm`,placeholder:`结束时间`,"disabled-date":et,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(g,{modelValue:t.venue,"onUpdate:modelValue":e=>t.venue=e,placeholder:`地点(可选)`},null,8,[`modelValue`,`onUpdate:modelValue`]),r(ce,{modelValue:t.capacity,"onUpdate:modelValue":e=>t.capacity=e,min:1,placeholder:`名额`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`]),r(h,{type:`danger`,plain:``,size:`small`,class:`session-row-delete`,onClick:e=>Je(n)},{default:c(()=>[...u[35]||=[o(` 删除 `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),r(C,{span:24},{default:c(()=>[r(S,{label:`活动简介`,class:`intro-form-item`},{default:c(()=>[r(ae,{modelValue:z.value.intro_html,"onUpdate:modelValue":u[12]||=e=>z.value.intro_html=e,scope:`activities`,height:260},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r(_e,{modelValue:Ve.value,"onUpdate:modelValue":u[17]||=e=>Ve.value=e,"course-name":He.value?.title||``,"signin-code":Ue.value},null,8,[`modelValue`,`course-name`,`signin-code`]),r(T,{modelValue:Le.value,"onUpdate:modelValue":u[21]||=e=>Le.value=e,title:`活动报名与签到:${V.value?.title||``}`,width:`960px`,top:`5vh`,class:`signup-dialog`},{default:c(()=>[l(`div`,je,[l(`div`,Me,[H.value.length?(i(),e(`div`,Ne,[(i(!0),e(d,null,f(H.value,e=>(i(),m(h,{key:e.id,size:`small`,type:q.value===e.id?`primary`:`default`,onClick:t=>ct(e.id)},{default:c(()=>[o(p(Z(e)),1)]),_:2},1032,[`type`,`onClick`]))),128))])):(i(),e(`div`,Pe,`暂无场次,请先在活动中添加场次`)),r(h,{disabled:!H.value.length,onClick:mt},{default:c(()=>[...u[39]||=[o(`导出`,-1)]]),_:1},8,[`disabled`])])]),l(`div`,Fe,[r(g,{modelValue:G.value,"onUpdate:modelValue":u[18]||=e=>G.value=e,clearable:``,placeholder:`搜索姓名、手机、公司…`,style:{width:`220px`},onKeyup:ne(lt,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:K.value,"onUpdate:modelValue":u[19]||=e=>K.value=e,clearable:``,placeholder:`签到状态`,style:{width:`120px`}},{default:c(()=>[r(v,{label:`已签到`,value:1}),r(v,{label:`未签到`,value:0})]),_:1},8,[`modelValue`]),r(h,{type:`primary`,onClick:lt},{default:c(()=>[...u[40]||=[o(`搜索`,-1)]]),_:1}),r(h,{onClick:ut},{default:c(()=>[...u[41]||=[o(`重置`,-1)]]),_:1})]),r(x,{data:Re.value,size:`small`,style:{"margin-top":`12px`}},{default:c(()=>[r(b,{prop:`name`,label:`姓名`,width:`100`}),r(b,{prop:`mobile`,label:`手机`,width:`130`}),r(b,{prop:`company`,label:`公司`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{label:`报名时间`,width:`170`},{default:c(({row:e})=>[o(p(X(e.signed_up_at)),1)]),_:1}),r(b,{label:`签到状态`,width:`100`},{default:c(({row:t})=>[Q()?(i(),e(d,{key:0},[t.session_checked_in_at?(i(),m(de,{key:0,type:`success`,size:`small`},{default:c(()=>[...u[42]||=[o(`已签到`,-1)]]),_:1})):(i(),m(de,{key:1,type:`info`,size:`small`},{default:c(()=>[...u[43]||=[o(`未签到`,-1)]]),_:1}))],64)):a(``,!0)]),_:1}),r(b,{label:`签到时间`,width:`170`},{default:c(({row:e})=>[o(p(Q()?X(e.session_checked_in_at):``),1)]),_:1}),r(b,{label:`操作`,width:`120`,fixed:`right`},{default:c(({row:e})=>[Q()&&!e.session_checked_in_at?(i(),m(h,{key:0,type:`primary`,link:``,onClick:t=>ft(e)},{default:c(()=>[...u[44]||=[o(` 手动补签 `,-1)]]),_:1},8,[`onClick`])):Q()&&e.session_checked_in_at?(i(),m(h,{key:1,type:`info`,link:``,disabled:``},{default:c(()=>[...u[45]||=[o(` 已完成 `,-1)]]),_:1})):a(``,!0),r(h,{type:`danger`,link:``,onClick:t=>dt(e)},{default:c(()=>[...u[46]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,Ie,[r(oe,{"current-page":W.value,"onUpdate:currentPage":u[20]||=e=>W.value=e,layout:`total, prev, pager, next`,total:U.value.total,"page-size":U.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`,`title`]),r(T,{modelValue:J.value,"onUpdate:modelValue":u[23]||=e=>J.value=e,title:`${V.value?.title||``}报名表导出`,width:`720px`,"append-to-body":``},{footer:c(()=>[r(h,{onClick:u[22]||=e=>J.value=!1},{default:c(()=>[...u[49]||=[o(`关闭`,-1)]]),_:1})]),default:c(()=>[re((i(),m(x,{data:Be.value,size:`small`},{default:c(()=>[r(b,{label:`场次`,"min-width":`140`},{default:c(({row:e})=>[o(p(Z(e.session)),1)]),_:1}),r(b,{prop:`signup_count`,label:`报名人数`,width:`100`}),r(b,{prop:`checked_in_count`,label:`已签到`,width:`90`}),r(b,{label:`报名导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>ht(e)},{default:c(()=>[...u[47]||=[o(`导出报名`,-1)]]),_:1},8,[`onClick`])]),_:1}),r(b,{label:`签到导出`,width:`100`},{default:c(({row:e})=>[r(h,{type:`primary`,link:``,onClick:t=>gt(e)},{default:c(()=>[...u[48]||=[o(`导出签到`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[E,ze.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-e56a3c1e`]]);export{k as default}; \ No newline at end of file diff --git a/public/admin/assets/admin-list-DjncsyJC.js b/public/admin/assets/admin-list-dnDAubDa.js similarity index 100% rename from public/admin/assets/admin-list-DjncsyJC.js rename to public/admin/assets/admin-list-dnDAubDa.js diff --git a/public/admin/assets/assets-hAC2p2Vo.js b/public/admin/assets/assets-DlFfPb4n.js similarity index 95% rename from public/admin/assets/assets-hAC2p2Vo.js rename to public/admin/assets/assets-DlFfPb4n.js index bd582f7..c7a334c 100644 --- a/public/admin/assets/assets-hAC2p2Vo.js +++ b/public/admin/assets/assets-DlFfPb4n.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/universities/${t}`,n);return r.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/universities/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/papers`,{params:t});return n.data}async function o(){let{data:t}=await e.get(`/admin/v1/papers/filter-options`);return t.data}async function s(t){let{data:n}=await e.get(`/admin/v1/papers/${t}`);return n.data}async function c(t){let{data:n}=await e.delete(`/admin/v1/papers/${t}`);return n}async function l(t,n){let{data:r}=await e.post(`/admin/v1/papers/${t}/teachers`,{teacher_ids:n});return r}async function u(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs/resolve-url`,t);return n.data}async function d(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs`,t,{timeout:3e5});return n.data}async function f(t,n){let{data:r}=await e.get(`/admin/v1/crawl-jobs/${t}/items`,{params:n});return r.data}async function p(e,t){let n=[],r=1;for(;;){let i=await f(e,{...t,page:r,page_size:200});if(n.push(...i.items),r>=i.meta.last_page||i.items.length===0)break;r+=1}return n}async function m(){let{data:t}=await e.get(`/admin/v1/radar-map`);return t.data}async function h(t){let{data:n}=await e.get(`/admin/v1/weekly-briefs`,{params:t});return n.data}async function g(t){let{data:n}=await e.get(`/admin/v1/weekly-briefs/${t}`);return n.data}async function _(t={}){let{data:n}=await e.post(`/admin/v1/weekly-briefs/generate`,t);return n.data}export{p as a,a as c,g as d,h as f,r as g,d as h,i,m as l,u as m,n,s as o,_ as p,c as r,o as s,l as t,t as u}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/universities/${t}`,n);return r.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/universities/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/papers`,{params:t});return n.data}async function o(){let{data:t}=await e.get(`/admin/v1/papers/filter-options`);return t.data}async function s(t){let{data:n}=await e.get(`/admin/v1/papers/${t}`);return n.data}async function c(t){let{data:n}=await e.delete(`/admin/v1/papers/${t}`);return n}async function l(t,n){let{data:r}=await e.post(`/admin/v1/papers/${t}/teachers`,{teacher_ids:n});return r}async function u(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs/resolve-url`,t);return n.data}async function d(t){let{data:n}=await e.post(`/admin/v1/crawl-jobs`,t,{timeout:3e5});return n.data}async function f(t,n){let{data:r}=await e.get(`/admin/v1/crawl-jobs/${t}/items`,{params:n});return r.data}async function p(e,t){let n=[],r=1;for(;;){let i=await f(e,{...t,page:r,page_size:200});if(n.push(...i.items),r>=i.meta.last_page||i.items.length===0)break;r+=1}return n}async function m(){let{data:t}=await e.get(`/admin/v1/radar-map`);return t.data}async function h(t){let{data:n}=await e.get(`/admin/v1/weekly-briefs`,{params:t});return n.data}async function g(t){let{data:n}=await e.get(`/admin/v1/weekly-briefs/${t}`);return n.data}async function _(t={}){let{data:n}=await e.post(`/admin/v1/weekly-briefs/generate`,t);return n.data}export{p as a,a as c,g as d,h as f,r as g,d as h,i,m as l,u as m,n,s as o,_ as p,c as r,o as s,l as t,t as u}; \ No newline at end of file diff --git a/public/admin/assets/audit-logs-BknMxI6A.js b/public/admin/assets/audit-logs-CcZSWGNE.js similarity index 93% rename from public/admin/assets/audit-logs-BknMxI6A.js rename to public/admin/assets/audit-logs-CcZSWGNE.js index d407bd5..f5582d6 100644 --- a/public/admin/assets/audit-logs-BknMxI6A.js +++ b/public/admin/assets/audit-logs-CcZSWGNE.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,d as l,ht as u,ot as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{r as p}from"./index-DHoSHxJa.js";import{n as m,t as h}from"./usePageLoad-C9PEZ_Tm.js";async function g(e){let{data:t}=await p.get(`/admin/v1/operation-logs`,{params:e});return t.data}var _={class:`list-page`},v={class:`page-header`},y={class:`list-filter-bar`},b={class:`list-pager`},x=t({__name:`index`,setup(t){let p=u(!1),x=u([]),S=u({current_page:1,per_page:20,total:0}),C=u(1),w=u(``),T=u(``),E=u(``);async function D(){p.value=!0;try{let e=await g({page:C.value,page_size:S.value.per_page,keyword:w.value||void 0,from:T.value||void 0,to:E.value||void 0});x.value=e.items,S.value=e.meta}finally{p.value=!1}}function O(){C.value=1,D()}function k(){w.value=``,T.value=``,E.value=``,C.value=1,D()}return h(D),(t,u)=>{let h=o(`el-input`),g=o(`el-date-picker`),A=o(`el-button`),j=o(`el-table-column`),M=o(`el-table`),N=o(`el-pagination`),P=o(`el-card`),F=a(`loading`);return r(),e(`div`,_,[c(`div`,v,[n(m)]),n(P,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,y,[n(h,{modelValue:w.value,"onUpdate:modelValue":u[0]||=e=>w.value=e,placeholder:`接口路径/操作人`,clearable:``,class:`filter-search`,onKeyup:l(O,[`enter`])},null,8,[`modelValue`]),n(g,{modelValue:T.value,"onUpdate:modelValue":u[1]||=e=>T.value=e,type:`datetime`,placeholder:`开始时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(g,{modelValue:E.value,"onUpdate:modelValue":u[2]||=e=>E.value=e,type:`datetime`,placeholder:`结束时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(A,{type:`primary`,onClick:O},{default:s(()=>[...u[4]||=[i(`搜索`,-1)]]),_:1}),n(A,{onClick:k},{default:s(()=>[...u[5]||=[i(`重置`,-1)]]),_:1})]),d((r(),f(M,{data:x.value,"row-key":`id`},{default:s(()=>[n(j,{prop:`operated_at`,label:`操作时间`,width:`180`}),n(j,{prop:`operator_name`,label:`操作人`,width:`120`}),n(j,{prop:`http_method`,label:`方法`,width:`80`}),n(j,{prop:`api_path`,label:`接口`,"min-width":`220`,"show-overflow-tooltip":``}),n(j,{prop:`action_label`,label:`操作项`,"min-width":`160`,"show-overflow-tooltip":``}),n(j,{prop:`ip`,label:`IP`,width:`140`}),n(j,{prop:`response_code`,label:`状态码`,width:`90`,align:`center`}),n(j,{prop:`duration_ms`,label:`耗时ms`,width:`90`,align:`center`})]),_:1},8,[`data`])),[[F,p.value]]),c(`div`,b,[n(N,{"current-page":C.value,"onUpdate:currentPage":u[3]||=e=>C.value=e,layout:`total, prev, pager, next`,total:S.value.total,"page-size":S.value.per_page,onCurrentChange:D},null,8,[`current-page`,`total`,`page-size`])])]),_:1})])}}});export{x as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,d as l,ht as u,ot as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{r as p}from"./index-CPrkFf57.js";import{n as m,t as h}from"./usePageLoad-B1L6ImD-.js";async function g(e){let{data:t}=await p.get(`/admin/v1/operation-logs`,{params:e});return t.data}var _={class:`list-page`},v={class:`page-header`},y={class:`list-filter-bar`},b={class:`list-pager`},x=t({__name:`index`,setup(t){let p=u(!1),x=u([]),S=u({current_page:1,per_page:20,total:0}),C=u(1),w=u(``),T=u(``),E=u(``);async function D(){p.value=!0;try{let e=await g({page:C.value,page_size:S.value.per_page,keyword:w.value||void 0,from:T.value||void 0,to:E.value||void 0});x.value=e.items,S.value=e.meta}finally{p.value=!1}}function O(){C.value=1,D()}function k(){w.value=``,T.value=``,E.value=``,C.value=1,D()}return h(D),(t,u)=>{let h=o(`el-input`),g=o(`el-date-picker`),A=o(`el-button`),j=o(`el-table-column`),M=o(`el-table`),N=o(`el-pagination`),P=o(`el-card`),F=a(`loading`);return r(),e(`div`,_,[c(`div`,v,[n(m)]),n(P,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,y,[n(h,{modelValue:w.value,"onUpdate:modelValue":u[0]||=e=>w.value=e,placeholder:`接口路径/操作人`,clearable:``,class:`filter-search`,onKeyup:l(O,[`enter`])},null,8,[`modelValue`]),n(g,{modelValue:T.value,"onUpdate:modelValue":u[1]||=e=>T.value=e,type:`datetime`,placeholder:`开始时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(g,{modelValue:E.value,"onUpdate:modelValue":u[2]||=e=>E.value=e,type:`datetime`,placeholder:`结束时间`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`190px`}},null,8,[`modelValue`]),n(A,{type:`primary`,onClick:O},{default:s(()=>[...u[4]||=[i(`搜索`,-1)]]),_:1}),n(A,{onClick:k},{default:s(()=>[...u[5]||=[i(`重置`,-1)]]),_:1})]),d((r(),f(M,{data:x.value,"row-key":`id`},{default:s(()=>[n(j,{prop:`operated_at`,label:`操作时间`,width:`180`}),n(j,{prop:`operator_name`,label:`操作人`,width:`120`}),n(j,{prop:`http_method`,label:`方法`,width:`80`}),n(j,{prop:`api_path`,label:`接口`,"min-width":`220`,"show-overflow-tooltip":``}),n(j,{prop:`action_label`,label:`操作项`,"min-width":`160`,"show-overflow-tooltip":``}),n(j,{prop:`ip`,label:`IP`,width:`140`}),n(j,{prop:`response_code`,label:`状态码`,width:`90`,align:`center`}),n(j,{prop:`duration_ms`,label:`耗时ms`,width:`90`,align:`center`})]),_:1},8,[`data`])),[[F,p.value]]),c(`div`,b,[n(N,{"current-page":C.value,"onUpdate:currentPage":u[3]||=e=>C.value=e,layout:`total, prev, pager, next`,total:S.value.total,"page-size":S.value.per_page,onCurrentChange:D},null,8,[`current-page`,`total`,`page-size`])])]),_:1})])}}});export{x as default}; \ No newline at end of file diff --git a/public/admin/assets/banners-B2EbjTBF.js b/public/admin/assets/banners-B2EbjTBF.js deleted file mode 100644 index 77a0b37..0000000 --- a/public/admin/assets/banners-B2EbjTBF.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,f as p,ht as m,m as h,ot as g,q as _,rt as v,tn as y,w as b,x}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as S,l as C,r as w,s as T}from"./index-DHoSHxJa.js";import{n as E,t as D}from"./usePageLoad-C9PEZ_Tm.js";import{n as O,t as ee}from"./RichTextEditor-B2PNXVgT.js";import{s as k}from"./activities-khLGM69i.js";import{l as A}from"./courses-ayi38cX4.js";import{a as j}from"./news-Dji71J9m.js";import{r as te}from"./admin-list-DjncsyJC.js";var M=T(n({__name:`RemotePagedSelect`,props:{modelValue:{},placeholder:{default:`请搜索选择`},pageSize:{default:20},initialOption:{default:null},fetchPage:{}},emits:[`update:modelValue`],setup(t,{expose:n,emit:a}){let o=t,s=a,c=m(!1),f=m([]),g=m(``),y=m(1),S=m(0);function C(e){let t=o.initialOption;return!t||e.some(e=>e.id===t.id)?e:[t,...e]}async function w(e=1,t=g.value){c.value=!0;try{let n=await o.fetchPage({keyword:t,page:e,pageSize:o.pageSize});f.value=C(n.items),S.value=n.total,y.value=e,g.value=t}finally{c.value=!1}}function T(e){w(1,e)}function E(e){w(e,g.value)}function D(e){e&&w(1,g.value)}return v(()=>o.initialOption,()=>{f.value=C(f.value)}),n({reload:()=>w(1,g.value)}),(n,a)=>{let o=l(`el-option`),m=l(`el-pagination`),g=l(`el-select`);return i(),x(g,{"model-value":t.modelValue,filterable:``,remote:``,"reserve-keyword":``,placeholder:t.placeholder,"remote-method":T,loading:c.value,style:{width:`100%`},"onUpdate:modelValue":a[2]||=e=>s(`update:modelValue`,e),onVisibleChange:D},b({default:u(()=>[(i(!0),e(h,null,_(f.value,e=>(i(),x(o,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:2},[S.value>t.pageSize?{name:`footer`,fn:u(()=>[d(`div`,{class:`remote-paged-select-footer`,onClick:a[0]||=p(()=>{},[`stop`]),onMousedown:a[1]||=p(()=>{},[`stop`])},[r(m,{small:``,layout:`total, prev, pager, next`,total:S.value,"page-size":t.pageSize,"current-page":y.value,onCurrentChange:E},null,8,[`total`,`page-size`,`current-page`])],32)]),key:`0`}:void 0]),1032,[`model-value`,`placeholder`,`loading`])}}}),[[`__scopeId`,`data-v-6c878f54`]]);async function N(e){let{data:t}=await w.get(`/admin/v1/banners`,{params:e});return t.data}async function P(e){let{data:t}=await w.get(`/admin/v1/banners/${e}`);return t.data}async function F(e){let{data:t}=await w.post(`/admin/v1/banners`,e);return t.data}async function I(e,t){let{data:n}=await w.put(`/admin/v1/banners/${e}`,t);return n.data}async function L(e){let{data:t}=await w.delete(`/admin/v1/banners/${e}`);return t}var ne={class:`list-page`},re={class:`page-header`},ie={class:`list-filter-bar`},ae={key:1,class:`text-mute`},oe={class:`table-row-actions`},se={class:`list-pager`},ce={class:`upload-row`},le={key:0,class:`thumb-preview`},ue=[`src`],R=20,z=T(n({__name:`index`,setup(n){let p=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`news`,label:`资讯`},{value:`custom`,label:`自定义`}],v=m(!1),b=m(!1),w=m([]),T=m({current_page:1,per_page:20,total:0}),z=m(1),B=m(``),V=m(``),H=m(``),U=m(!1),W=m(null),G=m({type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),K=m(null),q=m(null),J=m(null),Y=m(0);async function X(){v.value=!0;try{let e={page:z.value,page_size:T.value.per_page};B.value&&(e.keyword=B.value),V.value&&(e.type=V.value),H.value!==``&&(e.status=H.value);let t=await N(e);w.value=t.items,T.value=t.meta}finally{v.value=!1}}function Z(){z.value=1,X()}function de(){B.value=``,V.value=``,H.value=``,z.value=1,X()}async function fe({keyword:e,page:t,pageSize:n}){let r=await A({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function pe({keyword:e,page:t,pageSize:n}){let r=await k({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function me({keyword:e,page:t,pageSize:n}){let r=await j({keyword:e||void 0,page:t,page_size:n,status:1});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}function Q(){K.value=null,q.value=null,J.value=null,Y.value+=1}function he(){G.value.course_id=void 0,G.value.activity_id=void 0,G.value.news_id=void 0,G.value.title=``,G.value.cover_url=``,G.value.content_html=``,Q()}function ge(){W.value=null,G.value={type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1},Q(),U.value=!0}async function _e(e){W.value=e;let t=await P(e.id);G.value={type:t.type,course_id:t.course_id??void 0,activity_id:t.activity_id??void 0,news_id:t.news_id??void 0,title:t.title||``,cover_url:t.cover_url||``,content_html:t.content_html||``,sort:t.sort,status:t.status},K.value=t.type===`course`&&t.course_id?{id:t.course_id,label:t.course_title||`#${t.course_id}`}:null,q.value=t.type===`activity`&&t.activity_id?{id:t.activity_id,label:t.activity_title||`#${t.activity_id}`}:null,J.value=t.type===`news`&&t.news_id?{id:t.news_id,label:t.news_title||`#${t.news_id}`}:null,Y.value+=1,U.value=!0}function $(){if(G.value.type===`course`&&!G.value.course_id)return C.warning(`请选择课程`),!1;if(G.value.type===`activity`&&!G.value.activity_id)return C.warning(`请选择活动`),!1;if(G.value.type===`news`&&!G.value.news_id)return C.warning(`请选择资讯`),!1;if(G.value.type===`custom`){if(!G.value.title.trim())return C.warning(`请填写标题`),!1;if(!G.value.cover_url)return C.warning(`请上传封面图`),!1}return!0}async function ve(){if(!$())return;let e={type:G.value.type,sort:G.value.sort,status:G.value.status,course_id:G.value.type===`course`?G.value.course_id:null,activity_id:G.value.type===`activity`?G.value.activity_id:null,news_id:G.value.type===`news`?G.value.news_id:null,title:G.value.type===`custom`?G.value.title.trim():null,cover_url:G.value.type===`custom`?G.value.cover_url:null,content_html:G.value.type===`custom`&&G.value.content_html?.replace(/<[^>]+>/g,``).trim()?G.value.content_html:null};b.value=!0;try{W.value?await I(W.value.id,e):await F(e),C.success(`已保存`),U.value=!1,await X()}finally{b.value=!1}}async function ye(e){await S.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await L(e.id),C.success(`已删除`),await X()}async function be(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await O(n);G.value.cover_url=t.url,C.success(`封面上传成功`),e.onSuccess?.({})}catch{C.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return D(X),(n,m)=>{let S=l(`el-button`),C=l(`el-input`),D=l(`el-option`),O=l(`el-select`),k=l(`el-table-column`),A=l(`el-image`),j=l(`el-table`),N=l(`el-pagination`),P=l(`el-card`),F=l(`el-form-item`),I=l(`el-col`),L=l(`el-input-number`),Q=l(`el-switch`),$=l(`el-row`),xe=l(`el-upload`),Se=l(`el-form`),Ce=l(`el-dialog`),we=s(`loading`);return i(),e(h,null,[d(`div`,ne,[d(`div`,re,[r(E),r(S,{type:`primary`,size:`small`,class:`btn-create`,onClick:ge},{default:u(()=>[...m[15]||=[o(`新增 Banner`,-1)]]),_:1})]),r(P,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,ie,[r(C,{modelValue:B.value,"onUpdate:modelValue":m[0]||=e=>B.value=e,placeholder:`搜索标题、课程、活动、资讯…`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(O,{modelValue:V.value,"onUpdate:modelValue":m[1]||=e=>V.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(O,{modelValue:H.value,"onUpdate:modelValue":m[2]||=e=>H.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:u(()=>[r(D,{label:`启用`,value:1}),r(D,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(S,{type:`primary`,onClick:Z},{default:u(()=>[...m[16]||=[o(`搜索`,-1)]]),_:1}),r(S,{onClick:de},{default:u(()=>[...m[17]||=[o(`重置`,-1)]]),_:1})]),g((i(),x(j,{data:w.value,"row-key":`id`},{default:u(()=>[r(k,{prop:`type_label`,label:`类型`,width:`90`}),r(k,{prop:`summary`,label:`展示内容`,"min-width":`200`,"show-overflow-tooltip":``}),r(k,{label:`封面`,width:`100`,align:`center`},{default:u(({row:t})=>[t.type===`custom`&&t.cover_url?(i(),x(A,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ae,`—`))]),_:1}),r(k,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(k,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(te)(e.status)])},y(e.status===1?`启用`:`停用`),3)]),_:1}),r(k,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,oe,[r(S,{class:`btn-action-primary`,onClick:t=>_e(e)},{default:u(()=>[...m[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(S,{class:`btn-action-brand`,onClick:t=>ye(e)},{default:u(()=>[...m[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[we,v.value]]),d(`div`,se,[r(N,{"current-page":z.value,"onUpdate:currentPage":m[3]||=e=>z.value=e,layout:`total, prev, pager, next`,total:T.value.total,"page-size":T.value.per_page,onCurrentChange:X},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(Ce,{modelValue:U.value,"onUpdate:modelValue":m[14]||=e=>U.value=e,title:W.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:u(()=>[r(S,{onClick:m[13]||=e=>U.value=!1},{default:u(()=>[...m[22]||=[o(`取消`,-1)]]),_:1}),r(S,{type:`primary`,loading:b.value,onClick:ve},{default:u(()=>[...m[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(Se,{"label-position":`top`,class:`banner-form`},{default:u(()=>[r($,{gutter:16},{default:u(()=>[r(I,{span:8},{default:u(()=>[r(F,{label:`类型`,required:``},{default:u(()=>[r(O,{modelValue:G.value.type,"onUpdate:modelValue":m[4]||=e=>G.value.type=e,style:{width:`100%`},onChange:he},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`排序`,required:``},{default:u(()=>[r(L,{modelValue:G.value.sort,"onUpdate:modelValue":m[5]||=e=>G.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`状态`},{default:u(()=>[r(Q,{modelValue:G.value.status,"onUpdate:modelValue":m[6]||=e=>G.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),G.value.type===`course`?(i(),x(F,{key:0,label:`选择课程`,required:``},{default:u(()=>[(i(),x(M,{key:`course-${Y.value}`,modelValue:G.value.course_id,"onUpdate:modelValue":m[7]||=e=>G.value.course_id=e,placeholder:`搜索课程名称或编号`,"page-size":R,"initial-option":K.value,"fetch-page":fe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`activity`?(i(),x(F,{key:1,label:`选择活动`,required:``},{default:u(()=>[(i(),x(M,{key:`activity-${Y.value}`,modelValue:G.value.activity_id,"onUpdate:modelValue":m[8]||=e=>G.value.activity_id=e,placeholder:`搜索活动名称`,"page-size":R,"initial-option":q.value,"fetch-page":pe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`news`?(i(),x(F,{key:2,label:`选择资讯`,required:``},{default:u(()=>[(i(),x(M,{key:`news-${Y.value}`,modelValue:G.value.news_id,"onUpdate:modelValue":m[9]||=e=>G.value.news_id=e,placeholder:`搜索已发布资讯标题`,"page-size":R,"initial-option":J.value,"fetch-page":me},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`custom`?(i(),e(h,{key:3},[r(F,{label:`标题`,required:``},{default:u(()=>[r(C,{modelValue:G.value.title,"onUpdate:modelValue":m[10]||=e=>G.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(F,{label:`封面图`,required:``},{default:u(()=>[d(`div`,ce,[r(xe,{"show-file-list":!1,accept:`image/*`,"http-request":be},{default:u(()=>[r(S,{type:`primary`,plain:``,size:`small`},{default:u(()=>[...m[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),G.value.cover_url?(i(),x(S,{key:0,size:`small`,onClick:m[11]||=e=>G.value.cover_url=``},{default:u(()=>[...m[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),G.value.cover_url?(i(),e(`div`,le,[d(`img`,{src:G.value.cover_url,alt:`封面`},null,8,ue)])):a(``,!0)]),_:1}),r(F,{label:`内容`,class:`intro-form-item`},{default:u(()=>[r(ee,{modelValue:G.value.content_html,"onUpdate:modelValue":m[12]||=e=>G.value.content_html=e,scope:`banners`,height:320},null,8,[`modelValue`])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-17c72380`]]);export{z as default}; \ No newline at end of file diff --git a/public/admin/assets/banners-CG4qXWZW.js b/public/admin/assets/banners-CG4qXWZW.js new file mode 100644 index 0000000..09701ac --- /dev/null +++ b/public/admin/assets/banners-CG4qXWZW.js @@ -0,0 +1 @@ +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,f as p,ht as m,m as h,ot as g,q as _,rt as v,tn as y,w as b,x}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as S,l as C,r as w,s as T}from"./index-CPrkFf57.js";import{n as E,t as D}from"./usePageLoad-B1L6ImD-.js";import{t as ee}from"./RichTextEditor-Rtwkj953.js";import{t as O}from"./upload-qqZxNm7U.js";import{s as k}from"./activities-3eo24xB0.js";import{l as A}from"./courses-DPJyM0Kj.js";import{a as j}from"./news-CsIxVVGt.js";import{r as te}from"./admin-list-dnDAubDa.js";var M=T(n({__name:`RemotePagedSelect`,props:{modelValue:{},placeholder:{default:`请搜索选择`},pageSize:{default:20},initialOption:{default:null},fetchPage:{}},emits:[`update:modelValue`],setup(t,{expose:n,emit:a}){let o=t,s=a,c=m(!1),f=m([]),g=m(``),y=m(1),S=m(0);function C(e){let t=o.initialOption;return!t||e.some(e=>e.id===t.id)?e:[t,...e]}async function w(e=1,t=g.value){c.value=!0;try{let n=await o.fetchPage({keyword:t,page:e,pageSize:o.pageSize});f.value=C(n.items),S.value=n.total,y.value=e,g.value=t}finally{c.value=!1}}function T(e){w(1,e)}function E(e){w(e,g.value)}function D(e){e&&w(1,g.value)}return v(()=>o.initialOption,()=>{f.value=C(f.value)}),n({reload:()=>w(1,g.value)}),(n,a)=>{let o=l(`el-option`),m=l(`el-pagination`),g=l(`el-select`);return i(),x(g,{"model-value":t.modelValue,filterable:``,remote:``,"reserve-keyword":``,placeholder:t.placeholder,"remote-method":T,loading:c.value,style:{width:`100%`},"onUpdate:modelValue":a[2]||=e=>s(`update:modelValue`,e),onVisibleChange:D},b({default:u(()=>[(i(!0),e(h,null,_(f.value,e=>(i(),x(o,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:2},[S.value>t.pageSize?{name:`footer`,fn:u(()=>[d(`div`,{class:`remote-paged-select-footer`,onClick:a[0]||=p(()=>{},[`stop`]),onMousedown:a[1]||=p(()=>{},[`stop`])},[r(m,{small:``,layout:`total, prev, pager, next`,total:S.value,"page-size":t.pageSize,"current-page":y.value,onCurrentChange:E},null,8,[`total`,`page-size`,`current-page`])],32)]),key:`0`}:void 0]),1032,[`model-value`,`placeholder`,`loading`])}}}),[[`__scopeId`,`data-v-6c878f54`]]);async function N(e){let{data:t}=await w.get(`/admin/v1/banners`,{params:e});return t.data}async function P(e){let{data:t}=await w.get(`/admin/v1/banners/${e}`);return t.data}async function F(e){let{data:t}=await w.post(`/admin/v1/banners`,e);return t.data}async function I(e,t){let{data:n}=await w.put(`/admin/v1/banners/${e}`,t);return n.data}async function L(e){let{data:t}=await w.delete(`/admin/v1/banners/${e}`);return t}var ne={class:`list-page`},re={class:`page-header`},ie={class:`list-filter-bar`},ae={key:1,class:`text-mute`},oe={class:`table-row-actions`},se={class:`list-pager`},ce={class:`upload-row`},le={key:0,class:`thumb-preview`},ue=[`src`],R=20,z=T(n({__name:`index`,setup(n){let p=[{value:`course`,label:`课程`},{value:`activity`,label:`活动`},{value:`news`,label:`资讯`},{value:`custom`,label:`自定义`}],v=m(!1),b=m(!1),w=m([]),T=m({current_page:1,per_page:20,total:0}),z=m(1),B=m(``),V=m(``),H=m(``),U=m(!1),W=m(null),G=m({type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1}),K=m(null),q=m(null),J=m(null),Y=m(0);async function X(){v.value=!0;try{let e={page:z.value,page_size:T.value.per_page};B.value&&(e.keyword=B.value),V.value&&(e.type=V.value),H.value!==``&&(e.status=H.value);let t=await N(e);w.value=t.items,T.value=t.meta}finally{v.value=!1}}function Z(){z.value=1,X()}function de(){B.value=``,V.value=``,H.value=``,z.value=1,X()}async function fe({keyword:e,page:t,pageSize:n}){let r=await A({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function pe({keyword:e,page:t,pageSize:n}){let r=await k({keyword:e||void 0,page:t,page_size:n});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}async function me({keyword:e,page:t,pageSize:n}){let r=await j({keyword:e||void 0,page:t,page_size:n,status:1});return{items:r.items.map(e=>({id:e.id,label:e.title})),total:r.meta.total}}function Q(){K.value=null,q.value=null,J.value=null,Y.value+=1}function he(){G.value.course_id=void 0,G.value.activity_id=void 0,G.value.news_id=void 0,G.value.title=``,G.value.cover_url=``,G.value.content_html=``,Q()}function ge(){W.value=null,G.value={type:`course`,course_id:void 0,activity_id:void 0,news_id:void 0,title:``,cover_url:``,content_html:``,sort:0,status:1},Q(),U.value=!0}async function _e(e){W.value=e;let t=await P(e.id);G.value={type:t.type,course_id:t.course_id??void 0,activity_id:t.activity_id??void 0,news_id:t.news_id??void 0,title:t.title||``,cover_url:t.cover_url||``,content_html:t.content_html||``,sort:t.sort,status:t.status},K.value=t.type===`course`&&t.course_id?{id:t.course_id,label:t.course_title||`#${t.course_id}`}:null,q.value=t.type===`activity`&&t.activity_id?{id:t.activity_id,label:t.activity_title||`#${t.activity_id}`}:null,J.value=t.type===`news`&&t.news_id?{id:t.news_id,label:t.news_title||`#${t.news_id}`}:null,Y.value+=1,U.value=!0}function $(){if(G.value.type===`course`&&!G.value.course_id)return C.warning(`请选择课程`),!1;if(G.value.type===`activity`&&!G.value.activity_id)return C.warning(`请选择活动`),!1;if(G.value.type===`news`&&!G.value.news_id)return C.warning(`请选择资讯`),!1;if(G.value.type===`custom`){if(!G.value.title.trim())return C.warning(`请填写标题`),!1;if(!G.value.cover_url)return C.warning(`请上传封面图`),!1}return!0}async function ve(){if(!$())return;let e={type:G.value.type,sort:G.value.sort,status:G.value.status,course_id:G.value.type===`course`?G.value.course_id:null,activity_id:G.value.type===`activity`?G.value.activity_id:null,news_id:G.value.type===`news`?G.value.news_id:null,title:G.value.type===`custom`?G.value.title.trim():null,cover_url:G.value.type===`custom`?G.value.cover_url:null,content_html:G.value.type===`custom`&&G.value.content_html?.replace(/<[^>]+>/g,``).trim()?G.value.content_html:null};b.value=!0;try{W.value?await I(W.value.id,e):await F(e),C.success(`已保存`),U.value=!1,await X()}finally{b.value=!1}}async function ye(e){await S.confirm(`确定删除 Banner「${e.summary||e.id}」?`,`提示`,{type:`warning`}),await L(e.id),C.success(`已删除`),await X()}async function be(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await O(n);G.value.cover_url=t.url,C.success(`封面上传成功`),e.onSuccess?.({})}catch{C.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return D(X),(n,m)=>{let S=l(`el-button`),C=l(`el-input`),D=l(`el-option`),O=l(`el-select`),k=l(`el-table-column`),A=l(`el-image`),j=l(`el-table`),N=l(`el-pagination`),P=l(`el-card`),F=l(`el-form-item`),I=l(`el-col`),L=l(`el-input-number`),Q=l(`el-switch`),$=l(`el-row`),xe=l(`el-upload`),Se=l(`el-form`),Ce=l(`el-dialog`),we=s(`loading`);return i(),e(h,null,[d(`div`,ne,[d(`div`,re,[r(E),r(S,{type:`primary`,size:`small`,class:`btn-create`,onClick:ge},{default:u(()=>[...m[15]||=[o(`新增 Banner`,-1)]]),_:1})]),r(P,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,ie,[r(C,{modelValue:B.value,"onUpdate:modelValue":m[0]||=e=>B.value=e,placeholder:`搜索标题、课程、活动、资讯…`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(O,{modelValue:V.value,"onUpdate:modelValue":m[1]||=e=>V.value=e,clearable:``,placeholder:`类型`,class:`filter-select`},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(O,{modelValue:H.value,"onUpdate:modelValue":m[2]||=e=>H.value=e,clearable:``,placeholder:`状态`,class:`filter-select`},{default:u(()=>[r(D,{label:`启用`,value:1}),r(D,{label:`停用`,value:0})]),_:1},8,[`modelValue`]),r(S,{type:`primary`,onClick:Z},{default:u(()=>[...m[16]||=[o(`搜索`,-1)]]),_:1}),r(S,{onClick:de},{default:u(()=>[...m[17]||=[o(`重置`,-1)]]),_:1})]),g((i(),x(j,{data:w.value,"row-key":`id`},{default:u(()=>[r(k,{prop:`type_label`,label:`类型`,width:`90`}),r(k,{prop:`summary`,label:`展示内容`,"min-width":`200`,"show-overflow-tooltip":``}),r(k,{label:`封面`,width:`100`,align:`center`},{default:u(({row:t})=>[t.type===`custom`&&t.cover_url?(i(),x(A,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ae,`—`))]),_:1}),r(k,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(k,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(te)(e.status)])},y(e.status===1?`启用`:`停用`),3)]),_:1}),r(k,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,oe,[r(S,{class:`btn-action-primary`,onClick:t=>_e(e)},{default:u(()=>[...m[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(S,{class:`btn-action-brand`,onClick:t=>ye(e)},{default:u(()=>[...m[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[we,v.value]]),d(`div`,se,[r(N,{"current-page":z.value,"onUpdate:currentPage":m[3]||=e=>z.value=e,layout:`total, prev, pager, next`,total:T.value.total,"page-size":T.value.per_page,onCurrentChange:X},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(Ce,{modelValue:U.value,"onUpdate:modelValue":m[14]||=e=>U.value=e,title:W.value?`编辑 Banner`:`新增 Banner`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`banner-dialog`},{footer:u(()=>[r(S,{onClick:m[13]||=e=>U.value=!1},{default:u(()=>[...m[22]||=[o(`取消`,-1)]]),_:1}),r(S,{type:`primary`,loading:b.value,onClick:ve},{default:u(()=>[...m[23]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(Se,{"label-position":`top`,class:`banner-form`},{default:u(()=>[r($,{gutter:16},{default:u(()=>[r(I,{span:8},{default:u(()=>[r(F,{label:`类型`,required:``},{default:u(()=>[r(O,{modelValue:G.value.type,"onUpdate:modelValue":m[4]||=e=>G.value.type=e,style:{width:`100%`},onChange:he},{default:u(()=>[(i(),e(h,null,_(p,e=>r(D,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`排序`,required:``},{default:u(()=>[r(L,{modelValue:G.value.sort,"onUpdate:modelValue":m[5]||=e=>G.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(I,{span:8},{default:u(()=>[r(F,{label:`状态`},{default:u(()=>[r(Q,{modelValue:G.value.status,"onUpdate:modelValue":m[6]||=e=>G.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),G.value.type===`course`?(i(),x(F,{key:0,label:`选择课程`,required:``},{default:u(()=>[(i(),x(M,{key:`course-${Y.value}`,modelValue:G.value.course_id,"onUpdate:modelValue":m[7]||=e=>G.value.course_id=e,placeholder:`搜索课程名称或编号`,"page-size":R,"initial-option":K.value,"fetch-page":fe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`activity`?(i(),x(F,{key:1,label:`选择活动`,required:``},{default:u(()=>[(i(),x(M,{key:`activity-${Y.value}`,modelValue:G.value.activity_id,"onUpdate:modelValue":m[8]||=e=>G.value.activity_id=e,placeholder:`搜索活动名称`,"page-size":R,"initial-option":q.value,"fetch-page":pe},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`news`?(i(),x(F,{key:2,label:`选择资讯`,required:``},{default:u(()=>[(i(),x(M,{key:`news-${Y.value}`,modelValue:G.value.news_id,"onUpdate:modelValue":m[9]||=e=>G.value.news_id=e,placeholder:`搜索已发布资讯标题`,"page-size":R,"initial-option":J.value,"fetch-page":me},null,8,[`modelValue`,`initial-option`]))]),_:1})):a(``,!0),G.value.type===`custom`?(i(),e(h,{key:3},[r(F,{label:`标题`,required:``},{default:u(()=>[r(C,{modelValue:G.value.title,"onUpdate:modelValue":m[10]||=e=>G.value.title=e,placeholder:`请输入 Banner 标题`},null,8,[`modelValue`])]),_:1}),r(F,{label:`封面图`,required:``},{default:u(()=>[d(`div`,ce,[r(xe,{"show-file-list":!1,accept:`image/*`,"http-request":be},{default:u(()=>[r(S,{type:`primary`,plain:``,size:`small`},{default:u(()=>[...m[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),G.value.cover_url?(i(),x(S,{key:0,size:`small`,onClick:m[11]||=e=>G.value.cover_url=``},{default:u(()=>[...m[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),G.value.cover_url?(i(),e(`div`,le,[d(`img`,{src:G.value.cover_url,alt:`封面`},null,8,ue)])):a(``,!0)]),_:1}),r(F,{label:`内容`,class:`intro-form-item`},{default:u(()=>[r(ee,{modelValue:G.value.content_html,"onUpdate:modelValue":m[12]||=e=>G.value.content_html=e,scope:`banners`,height:320},null,8,[`modelValue`])]),_:1})],64)):a(``,!0)]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-17c72380`]]);export{z as default}; \ No newline at end of file diff --git a/public/admin/assets/courses-BEPRXk7p.js b/public/admin/assets/courses-BDy8J_6B.js similarity index 98% rename from public/admin/assets/courses-BEPRXk7p.js rename to public/admin/assets/courses-BDy8J_6B.js index a68c2d2..eb60d1f 100644 --- a/public/admin/assets/courses-BEPRXk7p.js +++ b/public/admin/assets/courses-BDy8J_6B.js @@ -1,4 +1,4 @@ -import{a as e,i as t,n,r,t as i}from"./rolldown-runtime-BYbx6iT9.js";import{$t as a,At as o,Bt as s,C as c,Ct as l,D as u,Dt as d,E as f,Et as p,Ft as m,G as h,Gt as g,Jt as _,Kt as v,Nt as y,Ot as b,Pt as x,Rt as S,S as C,T as w,Tt as T,Vt as E,Wt as ee,X as D,Xt as te,Y as O,Yt as k,at as A,b as j,d as ne,en as re,f as ie,ht as M,i as ae,kt as N,m as oe,nn as se,o as ce,ot as le,q as ue,qt as de,rt as fe,tn as P,u as pe,wt as me,x as F,y as he,zt as ge}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as I,l as L,r as _e,s as ve}from"./index-DHoSHxJa.js";import{n as ye,t as be}from"./usePageLoad-C9PEZ_Tm.js";import{r as xe,t as Se}from"./RichTextEditor-B2PNXVgT.js";import{a as Ce,c as we,i as Te,l as Ee,n as De,o as Oe,r as ke,s as Ae,t as je,u as Me}from"./courses-ayi38cX4.js";import{a as Ne}from"./news-Dji71J9m.js";import{a as Pe,i as Fe,o as Ie,s as Le}from"./admin-list-DjncsyJC.js";import{a as Re,s as ze}from"./dict-D30aLydL.js";import{f as Be}from"./teachers-DsTLUxF9.js";import{i as Ve,n as He,o as Ue,r as We,t as Ge}from"./csv-export-CMyUqpMf.js";function Ke(e){Object.getOwnPropertySymbols(e).forEach(t=>{gi[t]=e[t]})}function qe(e,t=``){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:xi}}function R(e,t,n,r,i,a,o,s=!1,c=!1,l=!1,u=xi){return e&&(s?(e.helper(Ir),e.helper(ct(e.inSSR,l))):e.helper(st(e.inSSR,l)),o&&e.helper(Jr)),{type:13,tag:t,props:n,children:r,patchFlag:i,dynamicProps:a,directives:o,isBlock:s,disableTracking:c,isComponent:l,loc:u}}function Je(e,t=xi){return{type:17,loc:t,elements:e}}function Ye(e,t=xi){return{type:15,loc:t,properties:e}}function z(e,t){return{type:16,loc:xi,key:v(e)?B(e,!0):e,value:t}}function B(e,t=!1,n=xi,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Xe(e,t){return{type:5,loc:t,content:v(e)?B(e,!1,t):e}}function Ze(e,t=xi){return{type:8,loc:t,children:e}}function V(e,t=[],n=xi){return{type:14,loc:n,callee:e,arguments:t}}function Qe(e,t=void 0,n=!1,r=!1,i=xi){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:i}}function $e(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:xi}}function et(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:xi}}function tt(e){return{type:21,body:e,loc:xi}}function nt(e){return{type:22,elements:e,loc:xi}}function rt(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:xi}}function it(e,t){return{type:24,left:e,right:t,loc:xi}}function at(e){return{type:25,expressions:e,loc:xi}}function ot(e){return{type:26,returns:e,loc:xi}}function st(e,t){return e||t?zr:Br}function ct(e,t){return e||t?Lr:Rr}function lt(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(st(r,e.isComponent)),t(Ir),t(ct(r,e.isComponent)))}function ut(e){return e>=97&&e<=122||e>=65&&e<=90}function dt(e){return e===32||e===10||e===9||e===12||e===13}function ft(e){return e===47||e===62||dt(e)}function pt(e){let t=new Uint8Array(e.length);for(let n=0;n{gi[t]=e[t]})}function qe(e,t=``){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:xi}}function R(e,t,n,r,i,a,o,s=!1,c=!1,l=!1,u=xi){return e&&(s?(e.helper(Ir),e.helper(ct(e.inSSR,l))):e.helper(st(e.inSSR,l)),o&&e.helper(Jr)),{type:13,tag:t,props:n,children:r,patchFlag:i,dynamicProps:a,directives:o,isBlock:s,disableTracking:c,isComponent:l,loc:u}}function Je(e,t=xi){return{type:17,loc:t,elements:e}}function Ye(e,t=xi){return{type:15,loc:t,properties:e}}function z(e,t){return{type:16,loc:xi,key:v(e)?B(e,!0):e,value:t}}function B(e,t=!1,n=xi,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Xe(e,t){return{type:5,loc:t,content:v(e)?B(e,!1,t):e}}function Ze(e,t=xi){return{type:8,loc:t,children:e}}function V(e,t=[],n=xi){return{type:14,loc:n,callee:e,arguments:t}}function Qe(e,t=void 0,n=!1,r=!1,i=xi){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:i}}function $e(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:xi}}function et(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:xi}}function tt(e){return{type:21,body:e,loc:xi}}function nt(e){return{type:22,elements:e,loc:xi}}function rt(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:xi}}function it(e,t){return{type:24,left:e,right:t,loc:xi}}function at(e){return{type:25,expressions:e,loc:xi}}function ot(e){return{type:26,returns:e,loc:xi}}function st(e,t){return e||t?zr:Br}function ct(e,t){return e||t?Lr:Rr}function lt(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(st(r,e.isComponent)),t(Ir),t(ct(r,e.isComponent)))}function ut(e){return e>=97&&e<=122||e>=65&&e<=90}function dt(e){return e===32||e===10||e===9||e===12||e===13}function ft(e){return e===47||e===62||dt(e)}function pt(e){let t=new Uint8Array(e.length);for(let n=0;n{e&&kt(e,t)});break;case`RestElement`:kt(e.argument,t);break;case`AssignmentPattern`:kt(e.left,t);break}return t}function At(e){return Ni.includes(e.type)?At(e.expression):e}function jt(e){switch(e){case`Teleport`:case`teleport`:return Mr;case`Suspense`:case`suspense`:return Nr;case`KeepAlive`:case`keep-alive`:return Pr;case`BaseTransition`:case`base-transition`:return Fr}}function Mt(e,t,n=t.length){return Nt({offset:e.offset,line:e.line,column:e.column},t,n)}function Nt(e,t,n=t.length){let r=0,i=-1;for(let e=0;ee.type===7&&e.name===`bind`&&(!e.arg||e.arg.type!==4||!e.arg.isStatic))}function zt(e){return e.type===5||e.type===2}function Bt(e){return e.type===7&&e.name===`pre`}function Vt(e){return e.type===7&&e.name===`slot`}function Ht(e){return e.type===1&&e.tagType===3}function Ut(e){return e.type===1&&e.tagType===2}function Wt(e,t=[]){if(e&&!v(e)&&e.type===14){let n=e.callee;if(!v(n)&&Ji.has(n))return Wt(e.arguments[0],t.concat(e))}return[e,t]}function Gt(e,t,n){let r,i=e.type===13?e.props:e.arguments[2],a=[],o;if(i&&!v(i)&&i.type===14){let e=Wt(i);i=e[0],a=e[1],o=a[a.length-1]}if(i==null||v(i))r=Ye([t]);else if(i.type===14){let e=i.arguments[0];!v(e)&&e.type===15?Kt(t,e)||e.properties.unshift(t):i.callee===ii?r=V(n.helper($r),[Ye([t]),i]):i.arguments.unshift(Ye([t])),!r&&(r=i)}else i.type===15?(Kt(t,i)||i.properties.unshift(t),r=i):(r=V(n.helper($r),[Ye([t]),i]),o&&o.callee===ri&&(o=a[a.length-2]));e.type===13?o?o.arguments[0]=r:e.props=r:o?o.arguments[0]=r:e.arguments[2]=r}function Kt(e,t){let n=!1;if(e.key.type===4){let r=e.key.content;n=t.properties.some(e=>e.key.type===4&&e.key.content===r)}return n}function qt(e,t){return`_${t}_${e.replace(/[^\w]/g,(t,n)=>t===`-`?`_`:e.charCodeAt(n).toString())}`}function Jt(e,t){if(!e||Object.keys(t).length===0)return!1;switch(e.type){case 1:for(let n=0;nJt(e,t));case 11:return Jt(e.source,t)?!0:e.children.some(e=>Jt(e,t));case 9:return e.branches.some(e=>Jt(e,t));case 10:return Jt(e.condition,t)?!0:e.children.some(e=>Jt(e,t));case 4:return!e.isStatic&&Ii(e.content)&&!!t[e.content];case 8:return e.children.some(e=>s(e)&&Jt(e,t));case 5:case 12:return Jt(e.content,t);case 2:case 3:case 20:return!1;default:return!1}}function Yt(e){return e.type===14&&e.callee===mi?e.arguments[1].returns:e}function Xt(e){for(let t=0;t{let i=t.start.offset+n;return vn(e,!1,mn(i,i+e.length),0,+!!r)},s={source:o(a.trim(),n.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1},c=i.trim().replace(ca,``).trim(),l=i.indexOf(c),u=c.match(sa);if(u){c=c.replace(sa,``).trim();let e=u[1].trim(),t;if(e&&(t=n.indexOf(e,l+c.length),s.key=o(e,t,!0)),u[2]){let r=u[2].trim();r&&(s.index=o(r,n.indexOf(r,s.key?t+e.length:l+c.length),!0))}}return c&&(s.value=o(c,l,!0)),s}function en(e,t){return Qi.slice(e,t)}function tn(e){oa.inSFCRoot&&($i.innerLoc=mn(e+1,e+1)),pn($i);let{tag:t,ns:n}=$i;n===0&&U.isPreTag(t)&&ra++,U.isVoidTag(t)?rn($i,e):(G.unshift($i),(n===1||n===2)&&(oa.inXML=!0)),$i=null}function nn(e,t,n){{let t=G[0]&&G[0].tag;t!==`script`&&t!==`style`&&e.includes(`&`)&&(e=U.decodeEntities(e,!1))}let r=G[0]||Zi,i=r.children[r.children.length-1];i&&i.type===2?(i.content+=e,gn(i.loc,n)):r.children.push({type:2,content:e,loc:mn(t,n)})}function rn(e,t,n=!1){n?gn(e.loc,on(t,60)):gn(e.loc,an(t,62)+1),oa.inSFCRoot&&(e.children.length?e.innerLoc.end=N({},e.children[e.children.length-1].loc.end):e.innerLoc.end=N({},e.innerLoc.start),e.innerLoc.source=en(e.innerLoc.start.offset,e.innerLoc.end.offset));let{tag:r,ns:i,children:a}=e;if(ia||(r===`slot`?e.tagType=2:sn(e)?e.tagType=3:cn(e)&&(e.tagType=1)),oa.inRCDATA||(e.children=un(a)),i===0&&U.isIgnoreNewlineTag(r)){let e=a[0];e&&e.type===2&&(e.content=e.content.replace(/^\r?\n/,``))}i===0&&U.isPreTag(r)&&ra--,aa===e&&(ia=oa.inVPre=!1,aa=null),oa.inXML&&(G[0]?G[0].ns:U.ns)===0&&(oa.inXML=!1);{let t=e.props;if(!oa.inSFCRoot&&ht(`COMPILER_NATIVE_TEMPLATE`,U)&&e.tag===`template`&&!sn(e)){let t=G[0]||Zi,n=t.children.indexOf(e);t.children.splice(n,1,...e.children)}let n=t.find(e=>e.type===6&&e.name===`inline-template`);n&>(`COMPILER_INLINE_TEMPLATE`,U,n.loc)&&e.children.length&&(n.value={type:2,content:en(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:n.loc})}}function an(e,t){let n=e;for(;Qi.charCodeAt(n)!==t&&n=0;)n--;return n}function sn({tag:e,props:t}){if(e===`template`){for(let e=0;e64&&e<91}function un(e){let t=U.whitespace!==`preserve`,n=!1;for(let r=0;re.type!==3);return t.length===1&&t[0].type===1&&!Ut(t[0])?t[0]:null}function wn(e,t,n,r=!1,i=!1){let{children:a}=e,o=[];for(let t=0;t0){if(e>=2){s.codegenNode.patchFlag=-1,o.push(s);continue}}else{let e=s.codegenNode;if(e.type===13){let t=e.patchFlag;if((t===void 0||t===512||t===1)&&Dn(s,n)>=2){let t=On(s);t&&(e.props=n.hoist(t))}e.dynamicProps&&=n.hoist(e.dynamicProps)}}}else if(s.type===12&&(r?0:Tn(s,n))>=2){s.codegenNode.type===14&&s.codegenNode.arguments.length>0&&s.codegenNode.arguments.push(`-1`),o.push(s);continue}if(s.type===1){let t=s.tagType===1;t&&n.scopes.vSlot++,wn(s,e,n,!1,i),t&&n.scopes.vSlot--}else if(s.type===11)wn(s,e,n,s.children.length===1,!0);else if(s.type===9)for(let t=0;te.key===t||e.key.content===t);return n&&n.value}}o.length&&n.transformHoist&&n.transformHoist(a,n,e)}function Tn(e,t){let{constantCache:n}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;let r=n.get(e);if(r!==void 0)return r;let i=e.codegenNode;if(i.type!==13||i.isBlock&&e.tag!==`svg`&&e.tag!==`foreignObject`&&e.tag!==`math`)return 0;if(i.patchFlag===void 0){let r=3,a=Dn(e,t);if(a===0)return n.set(e,0),0;a1)for(let i=0;in&&(D.childIndex--,D.onNodeRemoved()),D.parent.children.splice(n,1)},onNodeRemoved:p,addIdentifiers(e){},removeIdentifiers(e){},hoist(e){v(e)&&(e=B(e)),D.hoists.push(e);let t=B(`_hoisted_${D.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache(e,t=!1,n=!1){let r=et(D.cached.length,e,t,n);return D.cached.push(r),r}};return D.filters=new Set,D}function An(e,t){let n=kn(e,t);Nn(e,n),t.hoistStatic&&Sn(e,n),t.ssr||jn(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0,e.filters=[...n.filters]}function jn(e,t){let{helper:n}=t,{children:r}=e;if(r.length===1){let n=Cn(e);if(n&&n.codegenNode){let r=n.codegenNode;r.type===13&<(r,t),e.codegenNode=r}else e.codegenNode=r[0]}else r.length>1&&(e.codegenNode=R(t,n(jr),void 0,e.children,64,void 0,void 0,!0,void 0,!1))}function Mn(e,t){let n=0,r=()=>{n--};for(;nt===e:t=>e.test(t);return(e,r)=>{if(e.type===1){let{props:i}=e;if(e.tagType===3&&i.some(Vt))return;let a=[];for(let o=0;o0,p=!a&&r!==`module`;if(Ln(e,n),i(`function ${u?`ssrRender`:`render`}(${(u?[`_ctx`,`_push`,`_parent`,`_attrs`]:[`_ctx`,`_cache`]).join(`, `)}) {`),o(),p&&(i(`with (_ctx) {`),o(),f&&(i(`const { ${d.map(pa).join(`, `)} } = _Vue @@ -12,5 +12,5 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function m(e,t){return l(e)||u(e,t)||f(e,t)||p()}function h(e){if(Array.isArray(e))return d(e)}function g(e){if(typeof Symbol<`u`&&Symbol.iterator in Object(e))return Array.from(e)}function _(){throw TypeError(`Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function v(e){return h(e)||g(e)||f(e)||_()}var y=n(`a352`),b=n.n(y);function x(e){e.parentElement!==null&&e.parentElement.removeChild(e)}function S(e,t,n){var r=n===0?e.children[0]:e.children[n-1].nextSibling;e.insertBefore(t,r)}var C=n(`dbf1`);n(`13d5`),n(`4fad`),n(`ac1f`),n(`5319`);function w(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var T=/-(\w)/g,E=w(function(e){return e.replace(T,function(e,t){return t.toUpperCase()})});n(`5db7`),n(`73d9`);var ee=[`Start`,`Add`,`Remove`,`Update`,`End`],D=[`Choose`,`Unchoose`,`Sort`,`Filter`,`Clone`],te=[`Move`],O=[te,ee,D].flatMap(function(e){return e}).map(function(e){return`on${e}`}),k={manage:te,manageAndEmit:ee,emit:D};function A(e){return O.indexOf(e)!==-1}n(`caad`),n(`2ca0`);var j=`a.abbr.address.area.article.aside.audio.b.base.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.data.datalist.dd.del.details.dfn.dialog.div.dl.dt.em.embed.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.link.main.map.mark.math.menu.menuitem.meta.meter.nav.noscript.object.ol.optgroup.option.output.p.param.picture.pre.progress.q.rb.rp.rt.rtc.ruby.s.samp.script.section.select.slot.small.source.span.strong.style.sub.summary.sup.svg.table.tbody.td.template.textarea.tfoot.th.thead.time.title.tr.track.u.ul.var.video.wbr`.split(`.`);function ne(e){return j.includes(e)}function re(e){return[`transition-group`,`TransitionGroup`].includes(e)}function ie(e){return[`id`,`class`,`role`,`style`].includes(e)||e.startsWith(`data-`)||e.startsWith(`aria-`)||e.startsWith(`on`)}function M(e){return e.reduce(function(e,t){var n=m(t,2),r=n[0];return e[r]=n[1],e},{})}function ae(e){var t=e.$attrs,n=e.componentData,r=n===void 0?{}:n;return c(c({},M(Object.entries(t).filter(function(e){var t=m(e,2),n=t[0];return t[1],ie(n)}))),r)}function N(e){var t=e.$attrs,n=e.callBackBuilder,r=M(oe(t));Object.entries(n).forEach(function(e){var t=m(e,2),n=t[0],i=t[1];k[n].forEach(function(e){r[`on${e}`]=i(e)})});var i=`[data-draggable]${r.draggable||``}`;return c(c({},r),{},{draggable:i})}function oe(e){return Object.entries(e).filter(function(e){var t=m(e,2),n=t[0];return t[1],!ie(n)}).map(function(e){var t=m(e,2),n=t[0],r=t[1];return[E(n),r]}).filter(function(e){var t=m(e,2),n=t[0];return t[1],!A(n)})}n(`c740`);function se(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function ce(e,t){for(var n=0;ne.trim()).filter(Boolean).map((e,t)=>{let n=e.split(`|`).map(e=>e.trim()),r=n[0]||`opt_${t+1}`,i=n[1]||n[0]||`选项${t+1}`;return{key:r,label:i,value:n[2]??i}})}function ml(e){return e.map(e=>`${e.key}|${e.label}|${e.value}`).join(` `)}function hl(e){return e.map(e=>({key:String(e.id),label:e.label,value:e.value}))}function gl(){let e=0,t=()=>(e+=1,`f_new_${e}`),n=e=>({id:t(),help_text:``,rows:4,file_multiple:!0,file_limit:5,options_source_type:`static`,dict_code:``,table_name:``,static_options_text:``,...e});return[n({type:`text`,label:`姓名`,key:`username`,sort:1,rule:`required`,help_text:`请输入姓名`}),n({type:`select`,label:`性别`,key:`gender`,sort:2,rule:`required`,options_source_type:`dict`,dict_code:`signup_gender`}),n({type:`date`,label:`出生年月`,key:`birthday`,sort:3,rule:`required`}),n({type:`text`,label:`联系方式`,key:`mobile`,sort:4,rule:`required`}),n({type:`text`,label:`邮箱`,key:`email`,sort:5,rule:`email`}),n({type:`select`,label:`最高学历`,key:`education`,sort:6,rule:`required`,options_source_type:`dict`,dict_code:`signup_education`}),n({type:`text`,label:`最高学历毕业院校`,key:`school`,sort:7,rule:`required`}),n({type:`text`,label:`最高学历专业`,key:`major`,sort:8,rule:`required`})]}function _l(e){return!Array.isArray(e)||e.length===0?gl():e.map((e,t)=>{let n=e,r=n.type||`text`,i=n.options_source,a=`static`,o=``,s=``,c=``;if(i&&typeof i==`object`){let e=String(i.type??`static`);e===`dict`?(a=`dict`,o=String(i.dict_code??``)):e===`table`?(a=`table`,s=String(i.table??i.table_name??``)):a=`static`}else Array.isArray(n.options)&&(a=`static`);return a===`static`&&Array.isArray(n.options)&&(c=ml(n.options.map((e,t)=>{if(e&&typeof e==`object`){let n=e,r=String(n.key??n.value??`opt_${t+1}`),i=String(n.label??r);return{key:r,label:i,value:String(n.value??i)}}let n=String(e);return{key:n,label:n,value:n}}))),{id:String(n.id??`f_${t}`),type:r===`textarea`||r===`radio`||r===`checkbox`||r===`select`||r===`date`||r===`datetime`||r===`file`?r:`text`,label:String(n.label??``),key:String(n.key??n.name??`field_${t}`),help_text:String(n.help_text??``),sort:Number(n.sort??t+1),rule:String(n.rule??n.validation??``),rows:Number(n.rows??4),file_multiple:n.file_multiple!==!1,file_limit:Number(n.file_limit??5),options_source_type:a,dict_code:o,table_name:s,static_options_text:c}})}function vl(e,t){return{id:`f_${Date.now()}_${t}`,type:e.type,label:e.defaultLabel,key:`${e.defaultKey}_${t}`,help_text:``,sort:0,rule:``,rows:4,file_multiple:!0,file_limit:5,options_source_type:`static`,dict_code:``,table_name:``,static_options_text:fl(e.type)?`opt_1|选项1|opt_1 -opt_2|选项2|opt_2`:``}}function yl(e,t){if(!fl(e.type))return[];if(e.options_source_type===`dict`&&e.dict_code){let n=t[e.dict_code];return n?.length?n:[{key:`_`,label:`字典 ${e.dict_code}`,value:`_`}]}if(e.options_source_type===`table`&&e.table_name)return[{key:`_`,label:`表 ${e.table_name}(预留)`,value:`_`}];let n=pl(e.static_options_text);return n.length?n:[{key:`opt_1`,label:`选项1`,value:`opt_1`}]}function bl(e,t){return e.type===`textarea`?{tag:`textarea`,rows:Math.min(e.rows||3,6)}:e.type===`radio`||e.type===`checkbox`||e.type===`select`?{tag:e.type,options:yl(e,t)}:e.type===`date`?{tag:`date`}:e.type===`datetime`?{tag:`datetime`}:e.type===`file`?{tag:`file`}:{tag:`text`}}function xl(e,t){return He([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function Sl(e,t,n){return He([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.day_checked_in_at?`已签到`:`未签到`:``,t?n(e.day_checked_in_at):``]))}var Cl={class:`list-page`},wl={class:`page-header`},Tl={class:`page-header-actions`},El={class:`list-filter-bar`},Dl={class:`table-row-actions`},Ol={class:`list-pager`},kl={class:`step-panel`},Al={class:`date-range`},jl={class:`date-range`},Ml={class:`upload-row`},Nl={key:0,class:`thumb-preview thumb-preview--cover`},Pl=[`src`],Fl={class:`upload-row`},Il={key:0,class:`thumb-preview thumb-preview--promo`},Ll=[`src`],Rl={class:`multi-field-label`},zl={class:`multi-input-list`},Bl={class:`multi-field-label`},Vl={key:0,class:`text-mute`},Hl={class:`speaker-block-head`},Ul={class:`speaker-block-actions`},Wl={class:`step-panel builder-step`},Gl={class:`builder-shell`},Kl={class:`builder-side builder-palette`},ql={class:`palette-item`},Jl={class:`builder-center`},Yl={class:`builder-canvas-head`},Xl=[`onClick`],Zl={class:`canvas-field-head`},Ql={key:0,class:`req`},$l={key:0,class:`canvas-empty`},eu={class:`builder-side builder-props`},tu={key:0,class:`opts-hint`},nu={key:1,class:`props-empty`},ru={class:`dialog-footer-inner`},iu={class:`sub-toolbar signup-filter-bar`},au={class:`pager`},ou={class:`signup-head`},su={class:`signup-head-row`},cu={key:0,class:`checkin-day-tabs`},lu={key:1,class:`text-mute`},uu={class:`sub-toolbar signup-filter-bar`},du={class:`pager`},fu=!1,pu=ve(u({__name:`index`,setup(e){let t=[{type:`text`,title:`小文本框`,defaultLabel:`小文本`,defaultKey:`short_text`},{type:`textarea`,title:`中文本框`,defaultLabel:`多行文本`,defaultKey:`medium_text`},{type:`radio`,title:`单选框`,defaultLabel:`单选`,defaultKey:`radio_field`},{type:`checkbox`,title:`复选框`,defaultLabel:`多选`,defaultKey:`checkbox_field`},{type:`select`,title:`下拉框`,defaultLabel:`下拉`,defaultKey:`select_field`},{type:`date`,title:`日期`,defaultLabel:`日期`,defaultKey:`date_field`},{type:`datetime`,title:`日期时间`,defaultLabel:`日期时间`,defaultKey:`datetime_field`},{type:`file`,title:`多文件上传`,defaultLabel:`附件`,defaultKey:`files`}],n=0;function r(e){return n+=1,vl(e,n)}function i(){Xe.value.forEach((e,t)=>{e.sort=t+1})}let a=M({}),o=M([]),s=new Set;async function u(e){if(e&&!Object.prototype.hasOwnProperty.call(a.value,e)&&!s.has(e)){if(!o.value.some(t=>t.code===e)){a.value={...a.value,[e]:[]};return}s.add(e);try{let t=await Re(e);a.value={...a.value,[e]:hl(t.items)}}catch{a.value={...a.value,[e]:[]}}finally{s.delete(e)}}}async function d(){try{o.value=(await ze({page:1,page_size:200,status:1})).items.map(e=>({id:e.id,code:e.code,name:e.name}))}catch{o.value=[]}}function p(e){return bl(e,a.value)}let m=M(!1),g=M(!1),_=M([]),v=M({current_page:1,per_page:20,total:0}),y=M(1),b=M(``),x=M(``),S=M(``),T=M(``),E=M(``),ee=M([]),k=M([]),re=M([``]),ae=M([]),N=he({get(){return R.value.teach_start_time&&R.value.teach_end_time?[R.value.teach_start_time,R.value.teach_end_time]:null},set(e){R.value.teach_start_time=e?.[0]||``,R.value.teach_end_time=e?.[1]||``}}),se=M(!1),ce=M(-1),de=M(``),me=M([]),ge=M(!1);function _e(){y.value=1,Ft()}function ve(){b.value=``,x.value=``,S.value=``,T.value=``,E.value=``,y.value=1,Ft()}let He=M(!1),Ke=M(0),qe=M(null),R=M({title:``,course_system_dict_item_id:void 0,course_type_dict_item_id:void 0,teach_start_date:``,teach_end_date:``,teach_start_time:``,teach_end_time:``,location:``,signup_start_date:``,signup_end_date:``,capacity:0,news_id:void 0,intro_html:``}),Je=M([]),Ye=M(!1),z=M(null),B=M(null),Xe=M([]),Ze=M(null),V=he(()=>Xe.value.find(e=>e.id===Ze.value));fe(V,e=>{!He.value||Ke.value!==1||e?.options_source_type===`dict`&&e.dict_code&&u(e.dict_code)});let Qe=M([...t]),$e=M(!1),et=M(null),tt=M([]),nt=M({current_page:1,per_page:20,total:0}),rt=M(1),it=M(``),at=M(``),ot=M([]),st=M(``),ct=M(!1),lt=M(!1),ut=M([]),dt=M(!1),ft=M(null),pt=M(!1),mt=M(!1),ht=M([]),gt=M({current_page:1,per_page:10,total:0,last_page:1}),_t=M(1),vt=M(``),yt=M(null),H=M(!1),bt=he(()=>Ue(ft.value)),xt=he(()=>Ct(st.value));function St(e){return e.replace(/-/g,`.`)}function Ct(e){if(!e)return!1;let t=new Date;return t.setHours(0,0,0,0),new Date(`${e}T00:00:00`)<=t}function wt(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}async function Tt(){try{let[e,t]=await Promise.all([Re(`course_system`),Re(`course_type`)]);ee.value=e.items,k.value=t.items}catch{L.warning(`课程字典加载失败,请确认已执行 CourseDictionarySeeder 或在字典中维护 course_system / course_type`)}}function Et(e){let t=(e||[]).map(e=>e.trim()).filter(Boolean);re.value=t.length?t:[``]}function Dt(e){ae.value=(e||[]).map(e=>({teacher_id:e.teacher_id??null,name:e.name||``,title:e.title||``,university:e.university||``,remark:e.remark||``}))}function Ot(){re.value.push(``)}function kt(e){if(re.value.length<=1){re.value[0]=``;return}re.value.splice(e,1)}function At(){ae.value.push({teacher_id:null,name:``,title:``,university:``,remark:``})}function jt(e){ae.value.splice(e,1)}function Mt(e){ce.value=e,de.value=``,me.value=[],se.value=!0,Nt()}async function Nt(e=``){ge.value=!0;try{me.value=(await Be({page:1,page_size:30,keyword:e||void 0})).items}finally{ge.value=!1}}function Pt(e){let t=ce.value;t<0||(ae.value[t]={teacher_id:e.id,name:e.name,title:e.title||``,university:e.university_name||``,remark:e.research_direction||``},se.value=!1)}async function Ft(){m.value=!0;try{let e={page:y.value,page_size:v.value.per_page};b.value&&(e.keyword=b.value),x.value!==``&&(e.course_system_dict_item_id=x.value),S.value!==``&&(e.course_type_dict_item_id=S.value),T.value!==``&&(e.progress_status=T.value),E.value!==``&&(e.published=E.value);let t=await Ee(e);_.value=t.items,v.value=t.meta}finally{m.value=!1}}function It(e){u(e)}async function Lt(e=``){Ye.value=!0;try{Je.value=(await Ne({keyword:e,page:1,page_size:30})).items}finally{Ye.value=!1}}function Rt(){Ke.value=0,Ze.value=null,Xe.value=[],z.value=null,B.value=null}function zt(){Xe.value=gl()}function Bt(e,t){if(!t?.trim())return;let n=t.trim();return e.find(e=>e.label===n||e.value===n)?.id}function Vt(e,t){return!e&&!t?`—`:e&&t?`${e} 至 ${t}`:e||t||`—`}async function Ht(){mt.value=!0;try{let e=await ll({page:_t.value,page_size:gt.value.per_page,keyword:vt.value.trim()||void 0});ht.value=e.items,gt.value=e.meta}catch(e){let t=e instanceof Error?e.message:`加载商学院课程失败`;L.error(t),ht.value=[]}finally{mt.value=!1}}function Ut(){yt.value=null,_t.value=1,vt.value=``,pt.value=!0,Ht()}function Wt(){_t.value=1,Ht()}function Gt(e){yt.value=e}function Kt(e){return e.publicize?.find(e=>e.url)?.url}async function qt(e){let t=Kt(e);if(!t)return null;try{return await ul(t)}catch{return L.warning(`课程宣传页下载失败,请手动上传`),null}}async function Jt(e){qe.value=null;let t=Bt(ee.value,e.type_detail?.name);R.value={title:e.name||``,course_system_dict_item_id:t??ee.value[0]?.id,course_type_dict_item_id:Bt(k.value,e.is_fee===1?`付费`:`公益`)??k.value[0]?.id,teach_start_date:e.start_date||``,teach_end_date:e.end_date||``,teach_start_time:``,teach_end_time:``,location:e.address_detail||``,signup_start_date:e.sign_start_date||``,signup_end_date:e.sign_end_date||``,capacity:Number(e.total)>0?Number(e.total):60,news_id:void 0,intro_html:e.content||``},Et(),Dt(),Je.value=[],z.value=null,B.value=await qt(e),Ke.value=0,Ze.value=null,zt(),Lt(),pt.value=!1,He.value=!0,e.type_detail?.name&&!t?L.warning(`商学院课程体系「${e.type_detail.name}」未在本系统字典中找到,请手动选择课程体系`):L.success(`已带入商学院课程信息,请核对后保存`)}function Yt(){if(!yt.value){L.warning(`请先选择一条课程`);return}H.value=!0,Jt(yt.value).finally(()=>{H.value=!1})}function Xt(){qe.value=null,R.value={title:``,course_system_dict_item_id:ee.value[0]?.id,course_type_dict_item_id:k.value[0]?.id,teach_start_date:``,teach_end_date:``,teach_start_time:``,teach_end_time:``,location:``,signup_start_date:``,signup_end_date:``,capacity:60,news_id:void 0,intro_html:``},Et(),Dt(),Je.value=[],z.value=null,B.value=null,Ke.value=0,Ze.value=null,zt(),Lt(),He.value=!0}async function Zt(e){qe.value=e;let t=await Oe(e.id);R.value={title:t.title,course_system_dict_item_id:t.course_system_dict_item_id??void 0,course_type_dict_item_id:t.course_type_dict_item_id??void 0,teach_start_date:t.teach_start_date||``,teach_end_date:t.teach_end_date||``,teach_start_time:t.teach_start_time||``,teach_end_time:t.teach_end_time||``,location:t.location||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,capacity:t.capacity,news_id:t.news_id??void 0,intro_html:t.intro_html||``},Et(t.recruit_targets),Dt(t.main_speakers),Je.value=t.news?[{id:t.news.id,title:t.news.title,status:t.news.status}]:[],z.value=t.cover??null,B.value=t.promo??null,Xe.value=_l(t.signup_form_schema??null),Ke.value=0,Ze.value=null,Lt(),He.value=!0}function Qt(){return!R.value.course_system_dict_item_id||!R.value.course_type_dict_item_id?(L.warning(`请选择课程体系与课程类型`),!1):R.value.title?.trim()?!R.value.teach_start_date||!R.value.teach_end_date?(L.warning(`请填写开课日期`),!1):R.value.teach_start_date>R.value.teach_end_date?(L.warning(`开课结束日期不能早于开始日期`),!1):!R.value.signup_start_date||!R.value.signup_end_date?(L.warning(`请填写报名起止日期`),!1):R.value.signup_start_date>R.value.signup_end_date?(L.warning(`报名结束日期不能早于开始日期`),!1):!0:(L.warning(`请填写课程名称`),!1)}async function $t(e){if(!Qt())return;let t={title:R.value.title,course_system_dict_item_id:R.value.course_system_dict_item_id,course_type_dict_item_id:R.value.course_type_dict_item_id,teach_start_date:R.value.teach_start_date||null,teach_end_date:R.value.teach_end_date||null,teach_start_time:R.value.teach_start_time||null,teach_end_time:R.value.teach_end_time||null,location:R.value.location?.trim()||null,recruit_targets:re.value.map(e=>e.trim()).filter(Boolean),main_speakers:ae.value.filter(e=>e.name.trim()).map(e=>({teacher_id:e.teacher_id??null,name:e.name.trim(),title:e.title?.trim()||null,university:e.university?.trim()||null,remark:e.remark?.trim()||null})),signup_start_date:R.value.signup_start_date||null,signup_end_date:R.value.signup_end_date||null,capacity:R.value.capacity,cover_media_id:z.value?.id??null,promo_media_id:B.value?.id??null,news_id:R.value.news_id??null,intro_html:R.value.intro_html||null,signup_form_schema:null,published:e};g.value=!0;try{qe.value?await Me(qe.value.id,t):await De(t),L.success(e===1?`已保存并发布`:`已保存`),He.value=!1,await Ft()}finally{g.value=!1}}async function en(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{z.value=await xe(n,`covers`),L.success(`封面上传成功`),e.onSuccess?.({})}catch{L.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}async function tn(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{B.value=await xe(n,`promos`),L.success(`宣传页上传成功`),e.onSuccess?.({})}catch{L.error(`宣传页上传失败`),e.onError?.(Error(`upload failed`))}}function nn(){z.value=null}function rn(){B.value=null}function an(e){Ze.value=e}function on(){let e=Ze.value;if(!e)return;let t=Xe.value.findIndex(t=>t.id===e);t>=0&&Xe.value.splice(t,1),Ze.value=null}function sn(){Xe.value=[],Ze.value=null}function cn(){L.success(`字段已更新`)}async function ln(e){await I.confirm(`确定删除课程「${e.title}」?`,`提示`,{type:`warning`}),await ke(e.id),L.success(`已删除`),await Ft()}async function un(){if(!et.value)return;let e={page:rt.value,page_size:nt.value.per_page};it.value.trim()&&(e.keyword=it.value.trim()),st.value&&(e.checkin_date=st.value),at.value!==``&&(e.checkin_status=at.value);let t=await we(et.value.id,e);tt.value=t.items,nt.value=t.meta}async function dn(e){et.value=e,$e.value=!0,rt.value=1,it.value=``,at.value=``,ot.value=await Ae(e.id),st.value=ot.value[0]?.teach_date??``,await un()}async function fn(e){st.value=e,rt.value=1,await un()}function pn(){rt.value=1,un()}function mn(){it.value=``,at.value=``,rt.value=1,un()}async function hn(e){et.value&&(await I.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await Te(et.value.id,e.id),await un(),await Ft())}async function gn(e){!et.value||!st.value||(await je(et.value.id,e.id,{checkin_date:st.value}),L.success(`已完成手动补签`),await un())}function _n(e){ft.value=e,dt.value=!0}async function vn(){if(et.value){ct.value=!0,lt.value=!0,ut.value=[];try{let e=et.value.id,t=await Ce(e);ut.value=await Promise.all(ot.value.map(async n=>{let r=await Ce(e,{checkin_date:n.teach_date}),i=Ct(n.teach_date)?r.filter(e=>e.day_checked_in_at).length:0;return{teach_date:n.teach_date,signup_count:t.length,checked_in_count:i,signupRows:t,signinRows:r}}))}catch{L.error(`导出数据加载失败`)}finally{lt.value=!1}}}function yn(e){if(!et.value)return;let t=We(et.value.title||`课程`),n=St(e.teach_date),r=xl(e.signupRows,wt);Ge(`${t}_${n}_报名.csv`,r)}function bn(e){if(!et.value)return;let t=We(et.value.title||`课程`),n=St(e.teach_date),r=Sl(e.signinRows,Ct(e.teach_date),wt);Ge(`${t}_${n}_签到.csv`,r)}return be(async()=>{await Tt(),await d(),await Ft()}),(e,t)=>{let n=O(`el-button`),s=O(`el-input`),u=O(`el-option`),d=O(`el-select`),M=O(`el-table-column`),ce=O(`el-table`),fe=O(`el-pagination`),he=O(`el-card`);O(`el-step`),O(`el-steps`);let I=O(`el-form-item`),L=O(`el-col`),be=O(`el-input-number`),xe=O(`el-date-picker`),Ce=O(`el-time-picker`),we=O(`el-upload`),Te=O(`el-row`),Ee=O(`el-form`),De=O(`el-radio`),Oe=O(`el-radio-group`),ke=O(`el-checkbox`),Ae=O(`el-checkbox-group`),je=O(`el-switch`),Me=O(`el-dialog`),Ne=O(`el-tag`),Re=D(`loading`);return h(),c(oe,null,[j(`div`,Cl,[j(`div`,wl,[f(ye),j(`div`,Tl,[f(n,{type:`primary`,plain:``,size:`small`,onClick:Ut},{default:A(()=>[...t[55]||=[w(`从商学院导入`,-1)]]),_:1}),f(n,{type:`primary`,size:`small`,class:`btn-create`,onClick:Xt},{default:A(()=>[...t[56]||=[w(`新建课程`,-1)]]),_:1})])]),f(he,{shadow:`never`,class:`admin-list-card`},{default:A(()=>[j(`div`,El,[f(s,{modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,placeholder:`搜索课程名称`,clearable:``,class:`filter-search`,onKeyup:ne(_e,[`enter`])},null,8,[`modelValue`]),f(d,{modelValue:x.value,"onUpdate:modelValue":t[1]||=e=>x.value=e,clearable:``,placeholder:`课程体系`,class:`filter-select`,filterable:``},{default:A(()=>[(h(!0),c(oe,null,ue(ee.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),f(d,{modelValue:S.value,"onUpdate:modelValue":t[2]||=e=>S.value=e,clearable:``,placeholder:`课程类型`,class:`filter-select`,filterable:``},{default:A(()=>[(h(!0),c(oe,null,ue(k.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),f(d,{modelValue:T.value,"onUpdate:modelValue":t[3]||=e=>T.value=e,clearable:``,placeholder:`课程状态`,class:`filter-select`},{default:A(()=>[f(u,{label:`未开始`,value:1}),f(u,{label:`进行中`,value:2}),f(u,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),f(d,{modelValue:E.value,"onUpdate:modelValue":t[4]||=e=>E.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:A(()=>[f(u,{label:`已发布`,value:1}),f(u,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),f(n,{type:`primary`,onClick:_e},{default:A(()=>[...t[57]||=[w(`搜索`,-1)]]),_:1}),f(n,{onClick:ve},{default:A(()=>[...t[58]||=[w(`重置`,-1)]]),_:1})]),le((h(),F(ce,{data:_.value,"row-key":`id`},{default:A(()=>[f(M,{label:`课程体系`,width:`100`},{default:A(({row:e})=>[w(P(e.course_system_item?.label??`—`),1)]),_:1}),f(M,{prop:`title`,label:`课程名称`,"min-width":`160`,"show-overflow-tooltip":``}),f(M,{label:`课程类型`,width:`90`},{default:A(({row:e})=>[w(P(e.course_type_item?.label??`—`),1)]),_:1}),f(M,{label:`开课日期`,"min-width":`150`},{default:A(({row:e})=>[w(P(l(Fe)(e.teach_start_date,e.teach_end_date)),1)]),_:1}),f(M,{label:`报名起止日期`,"min-width":`150`},{default:A(({row:e})=>[w(P(l(Fe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),f(M,{prop:`capacity`,label:`开课人数`,width:`90`,align:`center`}),f(M,{label:`课程状态`,width:`90`,align:`center`},{default:A(({row:e})=>[j(`span`,{class:te([`status-badge`,l(Ie)(e.progress_status)])},P(l(Pe)(e.progress_status)),3)]),_:1}),f(M,{label:`发布状态`,width:`90`,align:`center`},{default:A(({row:e})=>[j(`span`,{class:te([`status-badge`,l(Le)(e.published)])},P(e.published===1?`已发布`:`未发布`),3)]),_:1}),f(M,{label:`操作`,width:`280`,fixed:`right`},{default:A(({row:e})=>[j(`div`,Dl,[f(n,{class:`btn-action-brand`,onClick:t=>dn(e)},{default:A(()=>[...t[59]||=[w(`报名与签到`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-primary`,onClick:t=>_n(e)},{default:A(()=>[...t[60]||=[w(`签到码`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-primary`,onClick:t=>Zt(e)},{default:A(()=>[...t[61]||=[w(`编辑`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-brand`,onClick:t=>ln(e)},{default:A(()=>[...t[62]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Re,m.value]]),j(`div`,Ol,[f(fe,{"current-page":y.value,"onUpdate:currentPage":t[5]||=e=>y.value=e,layout:`total, prev, pager, next`,total:v.value.total,"page-size":v.value.per_page,onCurrentChange:Ft},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),f(Me,{modelValue:He.value,"onUpdate:modelValue":t[37]||=e=>He.value=e,title:qe.value?`编辑课程`:`新建课程`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`course-dialog`,onClosed:Rt},{footer:A(()=>[j(`div`,ru,[(h(),c(oe,{key:0},[f(n,{onClick:t[32]||=e=>He.value=!1},{default:A(()=>[...t[83]||=[w(`取消`,-1)]]),_:1}),f(n,{loading:g.value,onClick:t[33]||=e=>$t(0)},{default:A(()=>[...t[84]||=[w(`保存待发布`,-1)]]),_:1},8,[`loading`]),(h(),F(n,{key:1,type:`primary`,loading:g.value,onClick:t[34]||=e=>$t(1)},{default:A(()=>[...t[86]||=[w(`保存并发布`,-1)]]),_:1},8,[`loading`]))],64))])]),default:A(()=>[C(``,!0),le(j(`div`,kl,[f(Ee,{"label-position":`top`,class:`course-form`},{default:A(()=>[f(Te,{gutter:16},{default:A(()=>[f(L,{span:8},{default:A(()=>[f(I,{label:`课程体系`,required:``},{default:A(()=>[f(d,{modelValue:R.value.course_system_dict_item_id,"onUpdate:modelValue":t[6]||=e=>R.value.course_system_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(ee.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程名称`,required:``},{default:A(()=>[f(s,{modelValue:R.value.title,"onUpdate:modelValue":t[7]||=e=>R.value.title=e,placeholder:`请输入课程名称`},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程类型`,required:``},{default:A(()=>[f(d,{modelValue:R.value.course_type_dict_item_id,"onUpdate:modelValue":t[8]||=e=>R.value.course_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(k.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课人数`},{default:A(()=>[f(be,{modelValue:R.value.capacity,"onUpdate:modelValue":t[9]||=e=>R.value.capacity=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课日期`,required:``},{default:A(()=>[j(`div`,Al,[f(xe,{modelValue:R.value.teach_start_date,"onUpdate:modelValue":t[10]||=e=>R.value.teach_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),t[63]||=j(`span`,{class:`range-sep`},`至`,-1),f(xe,{modelValue:R.value.teach_end_date,"onUpdate:modelValue":t[11]||=e=>R.value.teach_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课时间`},{default:A(()=>[f(Ce,{modelValue:N.value,"onUpdate:modelValue":t[12]||=e=>N.value=e,"is-range":``,format:`HH:mm`,"value-format":`HH:mm`,"range-separator":`至`,"start-placeholder":`开始`,"end-placeholder":`结束`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`报名起止`,required:``},{default:A(()=>[j(`div`,jl,[f(xe,{modelValue:R.value.signup_start_date,"onUpdate:modelValue":t[13]||=e=>R.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),t[64]||=j(`span`,{class:`range-sep`},`至`,-1),f(xe,{modelValue:R.value.signup_end_date,"onUpdate:modelValue":t[14]||=e=>R.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`地点`},{default:A(()=>[f(s,{modelValue:R.value.location,"onUpdate:modelValue":t[15]||=e=>R.value.location=e,placeholder:`请输入上课地点`},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`关联资讯`},{default:A(()=>[f(d,{modelValue:R.value.news_id,"onUpdate:modelValue":t[16]||=e=>R.value.news_id=e,clearable:``,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索并选择资讯`,"remote-method":Lt,loading:Ye.value,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(Je.value,e=>(h(),F(u,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程封面(690×400)`},{default:A(()=>[j(`div`,Ml,[f(we,{"show-file-list":!1,accept:`image/*`,"http-request":en},{default:A(()=>[f(n,{type:`primary`,plain:``,size:`small`},{default:A(()=>[...t[65]||=[w(`上传图片`,-1)]]),_:1})]),_:1}),z.value?.url?(h(),F(n,{key:0,size:`small`,onClick:nn},{default:A(()=>[...t[66]||=[w(`移除`,-1)]]),_:1})):C(``,!0)]),z.value?.url?(h(),c(`div`,Nl,[j(`img`,{src:z.value.url,alt:`封面`},null,8,Pl)])):C(``,!0)]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程宣传页(宽 750)`},{default:A(()=>[j(`div`,Fl,[f(we,{"show-file-list":!1,accept:`image/*`,"http-request":tn},{default:A(()=>[f(n,{type:`primary`,plain:``,size:`small`},{default:A(()=>[...t[67]||=[w(`上传图片`,-1)]]),_:1})]),_:1}),B.value?.url?(h(),F(n,{key:0,size:`small`,onClick:rn},{default:A(()=>[...t[68]||=[w(`移除`,-1)]]),_:1})):C(``,!0)]),B.value?.url?(h(),c(`div`,Il,[j(`img`,{src:B.value.url,alt:`宣传页`},null,8,Ll)])):C(``,!0)]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{class:`recruit-form-item`},{label:A(()=>[j(`div`,Rl,[t[70]||=j(`span`,null,`招生对象`,-1),f(n,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:Ot},{default:A(()=>[...t[69]||=[w(` 添加 `,-1)]]),_:1})])]),default:A(()=>[j(`div`,zl,[(h(!0),c(oe,null,ue(re.value,(e,r)=>(h(),c(`div`,{key:r,class:`multi-input-row`},[f(s,{modelValue:re.value[r],"onUpdate:modelValue":e=>re.value[r]=e,placeholder:`请输入招生对象`},null,8,[`modelValue`,`onUpdate:modelValue`]),f(n,{type:`danger`,plain:``,size:`small`,onClick:e=>kt(r)},{default:A(()=>[...t[71]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{class:`speaker-form-item`},{label:A(()=>[j(`div`,Bl,[t[73]||=j(`span`,null,`主讲师资`,-1),f(n,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:At},{default:A(()=>[...t[72]||=[w(` 添加 `,-1)]]),_:1})])]),default:A(()=>[ae.value.length?C(``,!0):(h(),c(`div`,Vl,`点击「添加」录入主讲师资,或从老师库选择`)),(h(!0),c(oe,null,ue(ae.value,(e,r)=>(h(),c(`div`,{key:r,class:`speaker-block`},[j(`div`,Hl,[j(`span`,null,`师资 `+P(r+1),1),j(`div`,Ul,[f(n,{size:`small`,onClick:e=>Mt(r)},{default:A(()=>[...t[74]||=[w(`从老师库选择`,-1)]]),_:1},8,[`onClick`]),f(n,{type:`danger`,plain:``,size:`small`,onClick:e=>jt(r)},{default:A(()=>[...t[75]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])])]),f(Te,{gutter:12,class:`speaker-field-row`},{default:A(()=>[f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.name,"onUpdate:modelValue":t=>e.name=t,placeholder:`姓名`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.title,"onUpdate:modelValue":t=>e.title=t,placeholder:`职称`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.university,"onUpdate:modelValue":t=>e.university=t,placeholder:`高校`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.remark,"onUpdate:modelValue":t=>e.remark=t,placeholder:`备注(选老师时默认填研究方向)`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024)]),_:2},1024)]))),128))]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{label:`课程简介`,class:`intro-form-item`},{default:A(()=>[f(Se,{modelValue:R.value.intro_html,"onUpdate:modelValue":t[17]||=e=>R.value.intro_html=e,scope:`courses`,height:260},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})],512),[[pe,!0]]),le(j(`div`,Wl,[j(`div`,Gl,[j(`aside`,Kl,[t[76]||=j(`div`,{class:`builder-side-title`},`字段组件`,-1),f(l(cl.default),{list:Qe.value,"item-key":`type`,class:`palette-list`,group:{name:`courseFields`,pull:`clone`,put:!1},sort:!1,clone:r},{item:A(({element:e})=>[j(`div`,ql,P(e.title),1)]),_:1},8,[`list`])]),j(`main`,Jl,[j(`div`,Yl,[t[78]||=j(`strong`,null,`表单字段`,-1),f(n,{size:`small`,onClick:sn},{default:A(()=>[...t[77]||=[w(`清空字段`,-1)]]),_:1})]),f(l(cl.default),{modelValue:Xe.value,"onUpdate:modelValue":t[19]||=e=>Xe.value=e,"item-key":`id`,class:`builder-canvas-grid`,group:{name:`courseFields`},"ghost-class":`field-ghost`,onAdd:i,onEnd:i},{item:A(({element:e})=>[j(`div`,{class:te([`canvas-field`,{active:Ze.value===e.id}]),onClick:ie(t=>an(e.id),[`stop`])},[j(`div`,Zl,[e.rule===`required`?(h(),c(`span`,Ql,`*`)):C(``,!0),w(` `+P(e.label||`未命名字段`),1)]),j(`div`,{class:`canvas-field-body`,onClick:t[18]||=ie(()=>{},[`stop`])},[p(e).tag===`text`?(h(),F(s,{key:0,size:`small`,placeholder:`请输入`,disabled:``})):p(e).tag===`textarea`?(h(),F(s,{key:1,type:`textarea`,rows:p(e).rows,disabled:``},null,8,[`rows`])):p(e).tag===`select`?(h(),F(d,{key:2,size:`small`,placeholder:`请选择`,disabled:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(u,{key:e.key,label:e.label,value:e.key},null,8,[`label`,`value`]))),128))]),_:2},1024)):p(e).tag===`radio`?(h(),F(Oe,{key:3,size:`small`,disabled:``},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(De,{key:e.key,label:e.key},{default:A(()=>[w(P(e.label),1)]),_:2},1032,[`label`]))),128))]),_:2},1024)):p(e).tag===`checkbox`?(h(),F(Ae,{key:4,size:`small`,disabled:``},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(ke,{key:e.key,label:e.key},{default:A(()=>[w(P(e.label),1)]),_:2},1032,[`label`]))),128))]),_:2},1024)):p(e).tag===`date`?(h(),F(xe,{key:5,type:`date`,size:`small`,disabled:``,style:{width:`100%`}})):p(e).tag===`datetime`?(h(),F(xe,{key:6,type:`datetime`,size:`small`,disabled:``,style:{width:`100%`}})):p(e).tag===`file`?(h(),F(n,{key:7,size:`small`,disabled:``},{default:A(()=>[...t[79]||=[w(`选择文件`,-1)]]),_:1})):C(``,!0)])],10,Xl)]),_:1},8,[`modelValue`]),Xe.value.length===0?(h(),c(`div`,$l,`从左侧拖拽组件到此处`)):C(``,!0)]),j(`aside`,eu,[t[82]||=j(`div`,{class:`builder-side-title`},`字段设置`,-1),V.value?(h(),F(Ee,{key:0,"label-position":`top`,size:`small`},{default:A(()=>[f(I,{label:`字段名称`},{default:A(()=>[f(s,{modelValue:V.value.label,"onUpdate:modelValue":t[20]||=e=>V.value.label=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`字段标识`},{default:A(()=>[f(s,{modelValue:V.value.key,"onUpdate:modelValue":t[21]||=e=>V.value.key=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`帮助文字`},{default:A(()=>[f(s,{modelValue:V.value.help_text,"onUpdate:modelValue":t[22]||=e=>V.value.help_text=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`排序`},{default:A(()=>[f(be,{modelValue:V.value.sort,"onUpdate:modelValue":t[23]||=e=>V.value.sort=e,min:1,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),f(I,{label:`校验规则`},{default:A(()=>[f(d,{modelValue:V.value.rule,"onUpdate:modelValue":t[24]||=e=>V.value.rule=e,clearable:``,placeholder:`可选`,style:{width:`100%`}},{default:A(()=>[f(u,{label:`必填`,value:`required`}),f(u,{label:`手机号`,value:`phone`}),f(u,{label:`邮箱`,value:`email`})]),_:1},8,[`modelValue`])]),_:1}),V.value.type===`textarea`?(h(),F(I,{key:0,label:`行数`},{default:A(()=>[f(be,{modelValue:V.value.rows,"onUpdate:modelValue":t[25]||=e=>V.value.rows=e,min:2,max:20,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})):C(``,!0),l(fl)(V.value.type)?(h(),c(oe,{key:1},[f(I,{label:`选项来源`},{default:A(()=>[f(d,{modelValue:V.value.options_source_type,"onUpdate:modelValue":t[26]||=e=>V.value.options_source_type=e,style:{width:`100%`}},{default:A(()=>[f(u,{label:`静态配置`,value:`static`}),f(u,{label:`数据字典`,value:`dict`}),f(u,{label:`业务表(预留)`,value:`table`,disabled:``})]),_:1},8,[`modelValue`])]),_:1}),V.value.options_source_type===`dict`?(h(),F(I,{key:0,label:`字典类型`},{default:A(()=>[f(d,{modelValue:V.value.dict_code,"onUpdate:modelValue":t[27]||=e=>V.value.dict_code=e,filterable:``,placeholder:`选择字典编码`,style:{width:`100%`},onChange:It},{default:A(()=>[(h(!0),c(oe,null,ue(o.value,e=>(h(),F(u,{key:e.code,label:`${e.name}(${e.code})`,value:e.code},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),V.value.dict_code&&a.value[V.value.dict_code]?.length?(h(),c(`div`,tu,` 预览:`+P(a.value[V.value.dict_code].map(e=>`${e.label}[${e.key}]`).join(`、`)),1)):C(``,!0)]),_:1})):V.value.options_source_type===`table`?(h(),F(I,{key:1,label:`业务表名`},{default:A(()=>[f(s,{modelValue:V.value.table_name,"onUpdate:modelValue":t[28]||=e=>V.value.table_name=e,placeholder:`如 signup_channels(预留)`},null,8,[`modelValue`])]),_:1})):(h(),F(I,{key:2,label:`静态选项`},{default:A(()=>[f(s,{modelValue:V.value.static_options_text,"onUpdate:modelValue":t[29]||=e=>V.value.static_options_text=e,type:`textarea`,rows:5,placeholder:`每行:key|显示名|value(value 可省略) +opt_2|选项2|opt_2`:``}}function yl(e,t){if(!fl(e.type))return[];if(e.options_source_type===`dict`&&e.dict_code){let n=t[e.dict_code];return n?.length?n:[{key:`_`,label:`字典 ${e.dict_code}`,value:`_`}]}if(e.options_source_type===`table`&&e.table_name)return[{key:`_`,label:`表 ${e.table_name}(预留)`,value:`_`}];let n=pl(e.static_options_text);return n.length?n:[{key:`opt_1`,label:`选项1`,value:`opt_1`}]}function bl(e,t){return e.type===`textarea`?{tag:`textarea`,rows:Math.min(e.rows||3,6)}:e.type===`radio`||e.type===`checkbox`||e.type===`select`?{tag:e.type,options:yl(e,t)}:e.type===`date`?{tag:`date`}:e.type===`datetime`?{tag:`datetime`}:e.type===`file`?{tag:`file`}:{tag:`text`}}function xl(e,t){return He([`姓名`,`手机`,`公司`,`报名时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t(e.signed_up_at)]))}function Sl(e,t,n){return He([`姓名`,`手机`,`公司`,`签到状态`,`签到时间`],e.map(e=>[e.name,e.mobile,e.company??`—`,t?e.day_checked_in_at?`已签到`:`未签到`:``,t?n(e.day_checked_in_at):``]))}var Cl={class:`list-page`},wl={class:`page-header`},Tl={class:`page-header-actions`},El={class:`list-filter-bar`},Dl={class:`table-row-actions`},Ol={class:`list-pager`},kl={class:`step-panel`},Al={class:`date-range`},jl={class:`date-range`},Ml={class:`upload-row`},Nl={key:0,class:`thumb-preview thumb-preview--cover`},Pl=[`src`],Fl={class:`upload-row`},Il={key:0,class:`thumb-preview thumb-preview--promo`},Ll=[`src`],Rl={class:`multi-field-label`},zl={class:`multi-input-list`},Bl={class:`multi-field-label`},Vl={key:0,class:`text-mute`},Hl={class:`speaker-block-head`},Ul={class:`speaker-block-actions`},Wl={class:`step-panel builder-step`},Gl={class:`builder-shell`},Kl={class:`builder-side builder-palette`},ql={class:`palette-item`},Jl={class:`builder-center`},Yl={class:`builder-canvas-head`},Xl=[`onClick`],Zl={class:`canvas-field-head`},Ql={key:0,class:`req`},$l={key:0,class:`canvas-empty`},eu={class:`builder-side builder-props`},tu={key:0,class:`opts-hint`},nu={key:1,class:`props-empty`},ru={class:`dialog-footer-inner`},iu={class:`sub-toolbar signup-filter-bar`},au={class:`pager`},ou={class:`signup-head`},su={class:`signup-head-row`},cu={key:0,class:`checkin-day-tabs`},lu={key:1,class:`text-mute`},uu={class:`sub-toolbar signup-filter-bar`},du={class:`pager`},fu=!1,pu=ve(u({__name:`index`,setup(e){let t=[{type:`text`,title:`小文本框`,defaultLabel:`小文本`,defaultKey:`short_text`},{type:`textarea`,title:`中文本框`,defaultLabel:`多行文本`,defaultKey:`medium_text`},{type:`radio`,title:`单选框`,defaultLabel:`单选`,defaultKey:`radio_field`},{type:`checkbox`,title:`复选框`,defaultLabel:`多选`,defaultKey:`checkbox_field`},{type:`select`,title:`下拉框`,defaultLabel:`下拉`,defaultKey:`select_field`},{type:`date`,title:`日期`,defaultLabel:`日期`,defaultKey:`date_field`},{type:`datetime`,title:`日期时间`,defaultLabel:`日期时间`,defaultKey:`datetime_field`},{type:`file`,title:`多文件上传`,defaultLabel:`附件`,defaultKey:`files`}],n=0;function r(e){return n+=1,vl(e,n)}function i(){Xe.value.forEach((e,t)=>{e.sort=t+1})}let a=M({}),o=M([]),s=new Set;async function u(e){if(e&&!Object.prototype.hasOwnProperty.call(a.value,e)&&!s.has(e)){if(!o.value.some(t=>t.code===e)){a.value={...a.value,[e]:[]};return}s.add(e);try{let t=await Re(e);a.value={...a.value,[e]:hl(t.items)}}catch{a.value={...a.value,[e]:[]}}finally{s.delete(e)}}}async function d(){try{o.value=(await ze({page:1,page_size:200,status:1})).items.map(e=>({id:e.id,code:e.code,name:e.name}))}catch{o.value=[]}}function p(e){return bl(e,a.value)}let m=M(!1),g=M(!1),_=M([]),v=M({current_page:1,per_page:20,total:0}),y=M(1),b=M(``),x=M(``),S=M(``),T=M(``),E=M(``),ee=M([]),k=M([]),re=M([``]),ae=M([]),N=he({get(){return R.value.teach_start_time&&R.value.teach_end_time?[R.value.teach_start_time,R.value.teach_end_time]:null},set(e){R.value.teach_start_time=e?.[0]||``,R.value.teach_end_time=e?.[1]||``}}),se=M(!1),ce=M(-1),de=M(``),me=M([]),ge=M(!1);function _e(){y.value=1,Ft()}function ve(){b.value=``,x.value=``,S.value=``,T.value=``,E.value=``,y.value=1,Ft()}let He=M(!1),Ke=M(0),qe=M(null),R=M({title:``,course_system_dict_item_id:void 0,course_type_dict_item_id:void 0,teach_start_date:``,teach_end_date:``,teach_start_time:``,teach_end_time:``,location:``,signup_start_date:``,signup_end_date:``,capacity:0,news_id:void 0,intro_html:``}),Je=M([]),Ye=M(!1),z=M(null),B=M(null),Xe=M([]),Ze=M(null),V=he(()=>Xe.value.find(e=>e.id===Ze.value));fe(V,e=>{!He.value||Ke.value!==1||e?.options_source_type===`dict`&&e.dict_code&&u(e.dict_code)});let Qe=M([...t]),$e=M(!1),et=M(null),tt=M([]),nt=M({current_page:1,per_page:20,total:0}),rt=M(1),it=M(``),at=M(``),ot=M([]),st=M(``),ct=M(!1),lt=M(!1),ut=M([]),dt=M(!1),ft=M(null),pt=M(!1),mt=M(!1),ht=M([]),gt=M({current_page:1,per_page:10,total:0,last_page:1}),_t=M(1),vt=M(``),yt=M(null),H=M(!1),bt=he(()=>Ue(ft.value)),xt=he(()=>Ct(st.value));function St(e){return e.replace(/-/g,`.`)}function Ct(e){if(!e)return!1;let t=new Date;return t.setHours(0,0,0,0),new Date(`${e}T00:00:00`)<=t}function wt(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}async function Tt(){try{let[e,t]=await Promise.all([Re(`course_system`),Re(`course_type`)]);ee.value=e.items,k.value=t.items}catch{L.warning(`课程字典加载失败,请确认已执行 CourseDictionarySeeder 或在字典中维护 course_system / course_type`)}}function Et(e){let t=(e||[]).map(e=>e.trim()).filter(Boolean);re.value=t.length?t:[``]}function Dt(e){ae.value=(e||[]).map(e=>({teacher_id:e.teacher_id??null,name:e.name||``,title:e.title||``,university:e.university||``,remark:e.remark||``}))}function Ot(){re.value.push(``)}function kt(e){if(re.value.length<=1){re.value[0]=``;return}re.value.splice(e,1)}function At(){ae.value.push({teacher_id:null,name:``,title:``,university:``,remark:``})}function jt(e){ae.value.splice(e,1)}function Mt(e){ce.value=e,de.value=``,me.value=[],se.value=!0,Nt()}async function Nt(e=``){ge.value=!0;try{me.value=(await Be({page:1,page_size:30,keyword:e||void 0})).items}finally{ge.value=!1}}function Pt(e){let t=ce.value;t<0||(ae.value[t]={teacher_id:e.id,name:e.name,title:e.title||``,university:e.university_name||``,remark:e.research_direction||``},se.value=!1)}async function Ft(){m.value=!0;try{let e={page:y.value,page_size:v.value.per_page};b.value&&(e.keyword=b.value),x.value!==``&&(e.course_system_dict_item_id=x.value),S.value!==``&&(e.course_type_dict_item_id=S.value),T.value!==``&&(e.progress_status=T.value),E.value!==``&&(e.published=E.value);let t=await Ee(e);_.value=t.items,v.value=t.meta}finally{m.value=!1}}function It(e){u(e)}async function Lt(e=``){Ye.value=!0;try{Je.value=(await Ne({keyword:e,page:1,page_size:30})).items}finally{Ye.value=!1}}function Rt(){Ke.value=0,Ze.value=null,Xe.value=[],z.value=null,B.value=null}function zt(){Xe.value=gl()}function Bt(e,t){if(!t?.trim())return;let n=t.trim();return e.find(e=>e.label===n||e.value===n)?.id}function Vt(e,t){return!e&&!t?`—`:e&&t?`${e} 至 ${t}`:e||t||`—`}async function Ht(){mt.value=!0;try{let e=await ll({page:_t.value,page_size:gt.value.per_page,keyword:vt.value.trim()||void 0});ht.value=e.items,gt.value=e.meta}catch(e){let t=e instanceof Error?e.message:`加载商学院课程失败`;L.error(t),ht.value=[]}finally{mt.value=!1}}function Ut(){yt.value=null,_t.value=1,vt.value=``,pt.value=!0,Ht()}function Wt(){_t.value=1,Ht()}function Gt(e){yt.value=e}function Kt(e){return e.publicize?.find(e=>e.url)?.url}async function qt(e){let t=Kt(e);if(!t)return null;try{return await ul(t)}catch{return L.warning(`课程宣传页下载失败,请手动上传`),null}}async function Jt(e){qe.value=null;let t=Bt(ee.value,e.type_detail?.name);R.value={title:e.name||``,course_system_dict_item_id:t??ee.value[0]?.id,course_type_dict_item_id:Bt(k.value,e.is_fee===1?`付费`:`公益`)??k.value[0]?.id,teach_start_date:e.start_date||``,teach_end_date:e.end_date||``,teach_start_time:``,teach_end_time:``,location:e.address_detail||``,signup_start_date:e.sign_start_date||``,signup_end_date:e.sign_end_date||``,capacity:Number(e.total)>0?Number(e.total):60,news_id:void 0,intro_html:e.content||``},Et(),Dt(),Je.value=[],z.value=null,B.value=await qt(e),Ke.value=0,Ze.value=null,zt(),Lt(),pt.value=!1,He.value=!0,e.type_detail?.name&&!t?L.warning(`商学院课程体系「${e.type_detail.name}」未在本系统字典中找到,请手动选择课程体系`):L.success(`已带入商学院课程信息,请核对后保存`)}function Yt(){if(!yt.value){L.warning(`请先选择一条课程`);return}H.value=!0,Jt(yt.value).finally(()=>{H.value=!1})}function Xt(){qe.value=null,R.value={title:``,course_system_dict_item_id:ee.value[0]?.id,course_type_dict_item_id:k.value[0]?.id,teach_start_date:``,teach_end_date:``,teach_start_time:``,teach_end_time:``,location:``,signup_start_date:``,signup_end_date:``,capacity:60,news_id:void 0,intro_html:``},Et(),Dt(),Je.value=[],z.value=null,B.value=null,Ke.value=0,Ze.value=null,zt(),Lt(),He.value=!0}async function Zt(e){qe.value=e;let t=await Oe(e.id);R.value={title:t.title,course_system_dict_item_id:t.course_system_dict_item_id??void 0,course_type_dict_item_id:t.course_type_dict_item_id??void 0,teach_start_date:t.teach_start_date||``,teach_end_date:t.teach_end_date||``,teach_start_time:t.teach_start_time||``,teach_end_time:t.teach_end_time||``,location:t.location||``,signup_start_date:t.signup_start_date||``,signup_end_date:t.signup_end_date||``,capacity:t.capacity,news_id:t.news_id??void 0,intro_html:t.intro_html||``},Et(t.recruit_targets),Dt(t.main_speakers),Je.value=t.news?[{id:t.news.id,title:t.news.title,status:t.news.status}]:[],z.value=t.cover??null,B.value=t.promo??null,Xe.value=_l(t.signup_form_schema??null),Ke.value=0,Ze.value=null,Lt(),He.value=!0}function Qt(){return!R.value.course_system_dict_item_id||!R.value.course_type_dict_item_id?(L.warning(`请选择课程体系与课程类型`),!1):R.value.title?.trim()?!R.value.teach_start_date||!R.value.teach_end_date?(L.warning(`请填写开课日期`),!1):R.value.teach_start_date>R.value.teach_end_date?(L.warning(`开课结束日期不能早于开始日期`),!1):!R.value.signup_start_date||!R.value.signup_end_date?(L.warning(`请填写报名起止日期`),!1):R.value.signup_start_date>R.value.signup_end_date?(L.warning(`报名结束日期不能早于开始日期`),!1):!0:(L.warning(`请填写课程名称`),!1)}async function $t(e){if(!Qt())return;let t={title:R.value.title,course_system_dict_item_id:R.value.course_system_dict_item_id,course_type_dict_item_id:R.value.course_type_dict_item_id,teach_start_date:R.value.teach_start_date||null,teach_end_date:R.value.teach_end_date||null,teach_start_time:R.value.teach_start_time||null,teach_end_time:R.value.teach_end_time||null,location:R.value.location?.trim()||null,recruit_targets:re.value.map(e=>e.trim()).filter(Boolean),main_speakers:ae.value.filter(e=>e.name.trim()).map(e=>({teacher_id:e.teacher_id??null,name:e.name.trim(),title:e.title?.trim()||null,university:e.university?.trim()||null,remark:e.remark?.trim()||null})),signup_start_date:R.value.signup_start_date||null,signup_end_date:R.value.signup_end_date||null,capacity:R.value.capacity,cover_media_id:z.value?.id??null,promo_media_id:B.value?.id??null,news_id:R.value.news_id??null,intro_html:R.value.intro_html||null,signup_form_schema:null,published:e};g.value=!0;try{qe.value?await Me(qe.value.id,t):await De(t),L.success(e===1?`已保存并发布`:`已保存`),He.value=!1,await Ft()}finally{g.value=!1}}async function en(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{z.value=await Se(n,`covers`),L.success(`封面上传成功`),e.onSuccess?.({})}catch{L.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}async function tn(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{B.value=await Se(n,`promos`),L.success(`宣传页上传成功`),e.onSuccess?.({})}catch{L.error(`宣传页上传失败`),e.onError?.(Error(`upload failed`))}}function nn(){z.value=null}function rn(){B.value=null}function an(e){Ze.value=e}function on(){let e=Ze.value;if(!e)return;let t=Xe.value.findIndex(t=>t.id===e);t>=0&&Xe.value.splice(t,1),Ze.value=null}function sn(){Xe.value=[],Ze.value=null}function cn(){L.success(`字段已更新`)}async function ln(e){await I.confirm(`确定删除课程「${e.title}」?`,`提示`,{type:`warning`}),await ke(e.id),L.success(`已删除`),await Ft()}async function un(){if(!et.value)return;let e={page:rt.value,page_size:nt.value.per_page};it.value.trim()&&(e.keyword=it.value.trim()),st.value&&(e.checkin_date=st.value),at.value!==``&&(e.checkin_status=at.value);let t=await we(et.value.id,e);tt.value=t.items,nt.value=t.meta}async function dn(e){et.value=e,$e.value=!0,rt.value=1,it.value=``,at.value=``,ot.value=await Ae(e.id),st.value=ot.value[0]?.teach_date??``,await un()}async function fn(e){st.value=e,rt.value=1,await un()}function pn(){rt.value=1,un()}function mn(){it.value=``,at.value=``,rt.value=1,un()}async function hn(e){et.value&&(await I.confirm(`确定删除该报名记录?`,`提示`,{type:`warning`}),await Te(et.value.id,e.id),await un(),await Ft())}async function gn(e){!et.value||!st.value||(await je(et.value.id,e.id,{checkin_date:st.value}),L.success(`已完成手动补签`),await un())}function _n(e){ft.value=e,dt.value=!0}async function vn(){if(et.value){ct.value=!0,lt.value=!0,ut.value=[];try{let e=et.value.id,t=await Ce(e);ut.value=await Promise.all(ot.value.map(async n=>{let r=await Ce(e,{checkin_date:n.teach_date}),i=Ct(n.teach_date)?r.filter(e=>e.day_checked_in_at).length:0;return{teach_date:n.teach_date,signup_count:t.length,checked_in_count:i,signupRows:t,signinRows:r}}))}catch{L.error(`导出数据加载失败`)}finally{lt.value=!1}}}function yn(e){if(!et.value)return;let t=We(et.value.title||`课程`),n=St(e.teach_date),r=xl(e.signupRows,wt);Ge(`${t}_${n}_报名.csv`,r)}function bn(e){if(!et.value)return;let t=We(et.value.title||`课程`),n=St(e.teach_date),r=Sl(e.signinRows,Ct(e.teach_date),wt);Ge(`${t}_${n}_签到.csv`,r)}return be(async()=>{await Tt(),await d(),await Ft()}),(e,t)=>{let n=O(`el-button`),s=O(`el-input`),u=O(`el-option`),d=O(`el-select`),M=O(`el-table-column`),ce=O(`el-table`),fe=O(`el-pagination`),he=O(`el-card`);O(`el-step`),O(`el-steps`);let I=O(`el-form-item`),L=O(`el-col`),be=O(`el-input-number`),Se=O(`el-date-picker`),Ce=O(`el-time-picker`),we=O(`el-upload`),Te=O(`el-row`),Ee=O(`el-form`),De=O(`el-radio`),Oe=O(`el-radio-group`),ke=O(`el-checkbox`),Ae=O(`el-checkbox-group`),je=O(`el-switch`),Me=O(`el-dialog`),Ne=O(`el-tag`),Re=D(`loading`);return h(),c(oe,null,[j(`div`,Cl,[j(`div`,wl,[f(ye),j(`div`,Tl,[f(n,{type:`primary`,plain:``,size:`small`,onClick:Ut},{default:A(()=>[...t[55]||=[w(`从商学院导入`,-1)]]),_:1}),f(n,{type:`primary`,size:`small`,class:`btn-create`,onClick:Xt},{default:A(()=>[...t[56]||=[w(`新建课程`,-1)]]),_:1})])]),f(he,{shadow:`never`,class:`admin-list-card`},{default:A(()=>[j(`div`,El,[f(s,{modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,placeholder:`搜索课程名称`,clearable:``,class:`filter-search`,onKeyup:ne(_e,[`enter`])},null,8,[`modelValue`]),f(d,{modelValue:x.value,"onUpdate:modelValue":t[1]||=e=>x.value=e,clearable:``,placeholder:`课程体系`,class:`filter-select`,filterable:``},{default:A(()=>[(h(!0),c(oe,null,ue(ee.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),f(d,{modelValue:S.value,"onUpdate:modelValue":t[2]||=e=>S.value=e,clearable:``,placeholder:`课程类型`,class:`filter-select`,filterable:``},{default:A(()=>[(h(!0),c(oe,null,ue(k.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),f(d,{modelValue:T.value,"onUpdate:modelValue":t[3]||=e=>T.value=e,clearable:``,placeholder:`课程状态`,class:`filter-select`},{default:A(()=>[f(u,{label:`未开始`,value:1}),f(u,{label:`进行中`,value:2}),f(u,{label:`已结束`,value:3})]),_:1},8,[`modelValue`]),f(d,{modelValue:E.value,"onUpdate:modelValue":t[4]||=e=>E.value=e,clearable:``,placeholder:`发布状态`,class:`filter-select`},{default:A(()=>[f(u,{label:`已发布`,value:1}),f(u,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),f(n,{type:`primary`,onClick:_e},{default:A(()=>[...t[57]||=[w(`搜索`,-1)]]),_:1}),f(n,{onClick:ve},{default:A(()=>[...t[58]||=[w(`重置`,-1)]]),_:1})]),le((h(),F(ce,{data:_.value,"row-key":`id`},{default:A(()=>[f(M,{label:`课程体系`,width:`100`},{default:A(({row:e})=>[w(P(e.course_system_item?.label??`—`),1)]),_:1}),f(M,{prop:`title`,label:`课程名称`,"min-width":`160`,"show-overflow-tooltip":``}),f(M,{label:`课程类型`,width:`90`},{default:A(({row:e})=>[w(P(e.course_type_item?.label??`—`),1)]),_:1}),f(M,{label:`开课日期`,"min-width":`150`},{default:A(({row:e})=>[w(P(l(Fe)(e.teach_start_date,e.teach_end_date)),1)]),_:1}),f(M,{label:`报名起止日期`,"min-width":`150`},{default:A(({row:e})=>[w(P(l(Fe)(e.signup_start_date,e.signup_end_date)),1)]),_:1}),f(M,{prop:`capacity`,label:`开课人数`,width:`90`,align:`center`}),f(M,{label:`课程状态`,width:`90`,align:`center`},{default:A(({row:e})=>[j(`span`,{class:te([`status-badge`,l(Ie)(e.progress_status)])},P(l(Pe)(e.progress_status)),3)]),_:1}),f(M,{label:`发布状态`,width:`90`,align:`center`},{default:A(({row:e})=>[j(`span`,{class:te([`status-badge`,l(Le)(e.published)])},P(e.published===1?`已发布`:`未发布`),3)]),_:1}),f(M,{label:`操作`,width:`280`,fixed:`right`},{default:A(({row:e})=>[j(`div`,Dl,[f(n,{class:`btn-action-brand`,onClick:t=>dn(e)},{default:A(()=>[...t[59]||=[w(`报名与签到`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-primary`,onClick:t=>_n(e)},{default:A(()=>[...t[60]||=[w(`签到码`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-primary`,onClick:t=>Zt(e)},{default:A(()=>[...t[61]||=[w(`编辑`,-1)]]),_:1},8,[`onClick`]),f(n,{class:`btn-action-brand`,onClick:t=>ln(e)},{default:A(()=>[...t[62]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Re,m.value]]),j(`div`,Ol,[f(fe,{"current-page":y.value,"onUpdate:currentPage":t[5]||=e=>y.value=e,layout:`total, prev, pager, next`,total:v.value.total,"page-size":v.value.per_page,onCurrentChange:Ft},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),f(Me,{modelValue:He.value,"onUpdate:modelValue":t[37]||=e=>He.value=e,title:qe.value?`编辑课程`:`新建课程`,width:`1200px`,top:`4vh`,"destroy-on-close":``,class:`course-dialog`,onClosed:Rt},{footer:A(()=>[j(`div`,ru,[(h(),c(oe,{key:0},[f(n,{onClick:t[32]||=e=>He.value=!1},{default:A(()=>[...t[83]||=[w(`取消`,-1)]]),_:1}),f(n,{loading:g.value,onClick:t[33]||=e=>$t(0)},{default:A(()=>[...t[84]||=[w(`保存待发布`,-1)]]),_:1},8,[`loading`]),(h(),F(n,{key:1,type:`primary`,loading:g.value,onClick:t[34]||=e=>$t(1)},{default:A(()=>[...t[86]||=[w(`保存并发布`,-1)]]),_:1},8,[`loading`]))],64))])]),default:A(()=>[C(``,!0),le(j(`div`,kl,[f(Ee,{"label-position":`top`,class:`course-form`},{default:A(()=>[f(Te,{gutter:16},{default:A(()=>[f(L,{span:8},{default:A(()=>[f(I,{label:`课程体系`,required:``},{default:A(()=>[f(d,{modelValue:R.value.course_system_dict_item_id,"onUpdate:modelValue":t[6]||=e=>R.value.course_system_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(ee.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程名称`,required:``},{default:A(()=>[f(s,{modelValue:R.value.title,"onUpdate:modelValue":t[7]||=e=>R.value.title=e,placeholder:`请输入课程名称`},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程类型`,required:``},{default:A(()=>[f(d,{modelValue:R.value.course_type_dict_item_id,"onUpdate:modelValue":t[8]||=e=>R.value.course_type_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(k.value,e=>(h(),F(u,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课人数`},{default:A(()=>[f(be,{modelValue:R.value.capacity,"onUpdate:modelValue":t[9]||=e=>R.value.capacity=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课日期`,required:``},{default:A(()=>[j(`div`,Al,[f(Se,{modelValue:R.value.teach_start_date,"onUpdate:modelValue":t[10]||=e=>R.value.teach_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),t[63]||=j(`span`,{class:`range-sep`},`至`,-1),f(Se,{modelValue:R.value.teach_end_date,"onUpdate:modelValue":t[11]||=e=>R.value.teach_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`开课时间`},{default:A(()=>[f(Ce,{modelValue:N.value,"onUpdate:modelValue":t[12]||=e=>N.value=e,"is-range":``,format:`HH:mm`,"value-format":`HH:mm`,"range-separator":`至`,"start-placeholder":`开始`,"end-placeholder":`结束`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`报名起止`,required:``},{default:A(()=>[j(`div`,jl,[f(Se,{modelValue:R.value.signup_start_date,"onUpdate:modelValue":t[13]||=e=>R.value.signup_start_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`开始`,style:{width:`100%`}},null,8,[`modelValue`]),t[64]||=j(`span`,{class:`range-sep`},`至`,-1),f(Se,{modelValue:R.value.signup_end_date,"onUpdate:modelValue":t[14]||=e=>R.value.signup_end_date=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`结束`,style:{width:`100%`}},null,8,[`modelValue`])])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`地点`},{default:A(()=>[f(s,{modelValue:R.value.location,"onUpdate:modelValue":t[15]||=e=>R.value.location=e,placeholder:`请输入上课地点`},null,8,[`modelValue`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`关联资讯`},{default:A(()=>[f(d,{modelValue:R.value.news_id,"onUpdate:modelValue":t[16]||=e=>R.value.news_id=e,clearable:``,filterable:``,remote:``,"reserve-keyword":``,placeholder:`搜索并选择资讯`,"remote-method":Lt,loading:Ye.value,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(Je.value,e=>(h(),F(u,{key:e.id,label:e.title,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`loading`])]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程封面(690×400)`},{default:A(()=>[j(`div`,Ml,[f(we,{"show-file-list":!1,accept:`image/*`,"http-request":en},{default:A(()=>[f(n,{type:`primary`,plain:``,size:`small`},{default:A(()=>[...t[65]||=[w(`上传图片`,-1)]]),_:1})]),_:1}),z.value?.url?(h(),F(n,{key:0,size:`small`,onClick:nn},{default:A(()=>[...t[66]||=[w(`移除`,-1)]]),_:1})):C(``,!0)]),z.value?.url?(h(),c(`div`,Nl,[j(`img`,{src:z.value.url,alt:`封面`},null,8,Pl)])):C(``,!0)]),_:1})]),_:1}),f(L,{span:8},{default:A(()=>[f(I,{label:`课程宣传页(宽 750)`},{default:A(()=>[j(`div`,Fl,[f(we,{"show-file-list":!1,accept:`image/*`,"http-request":tn},{default:A(()=>[f(n,{type:`primary`,plain:``,size:`small`},{default:A(()=>[...t[67]||=[w(`上传图片`,-1)]]),_:1})]),_:1}),B.value?.url?(h(),F(n,{key:0,size:`small`,onClick:rn},{default:A(()=>[...t[68]||=[w(`移除`,-1)]]),_:1})):C(``,!0)]),B.value?.url?(h(),c(`div`,Il,[j(`img`,{src:B.value.url,alt:`宣传页`},null,8,Ll)])):C(``,!0)]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{class:`recruit-form-item`},{label:A(()=>[j(`div`,Rl,[t[70]||=j(`span`,null,`招生对象`,-1),f(n,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:Ot},{default:A(()=>[...t[69]||=[w(` 添加 `,-1)]]),_:1})])]),default:A(()=>[j(`div`,zl,[(h(!0),c(oe,null,ue(re.value,(e,r)=>(h(),c(`div`,{key:r,class:`multi-input-row`},[f(s,{modelValue:re.value[r],"onUpdate:modelValue":e=>re.value[r]=e,placeholder:`请输入招生对象`},null,8,[`modelValue`,`onUpdate:modelValue`]),f(n,{type:`danger`,plain:``,size:`small`,onClick:e=>kt(r)},{default:A(()=>[...t[71]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{class:`speaker-form-item`},{label:A(()=>[j(`div`,Bl,[t[73]||=j(`span`,null,`主讲师资`,-1),f(n,{type:`primary`,size:`small`,class:`btn-create btn-label-action`,onClick:At},{default:A(()=>[...t[72]||=[w(` 添加 `,-1)]]),_:1})])]),default:A(()=>[ae.value.length?C(``,!0):(h(),c(`div`,Vl,`点击「添加」录入主讲师资,或从老师库选择`)),(h(!0),c(oe,null,ue(ae.value,(e,r)=>(h(),c(`div`,{key:r,class:`speaker-block`},[j(`div`,Hl,[j(`span`,null,`师资 `+P(r+1),1),j(`div`,Ul,[f(n,{size:`small`,onClick:e=>Mt(r)},{default:A(()=>[...t[74]||=[w(`从老师库选择`,-1)]]),_:1},8,[`onClick`]),f(n,{type:`danger`,plain:``,size:`small`,onClick:e=>jt(r)},{default:A(()=>[...t[75]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])])]),f(Te,{gutter:12,class:`speaker-field-row`},{default:A(()=>[f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.name,"onUpdate:modelValue":t=>e.name=t,placeholder:`姓名`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.title,"onUpdate:modelValue":t=>e.title=t,placeholder:`职称`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.university,"onUpdate:modelValue":t=>e.university=t,placeholder:`高校`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),f(L,{span:6},{default:A(()=>[f(s,{modelValue:e.remark,"onUpdate:modelValue":t=>e.remark=t,placeholder:`备注(选老师时默认填研究方向)`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024)]),_:2},1024)]))),128))]),_:1})]),_:1}),f(L,{span:24},{default:A(()=>[f(I,{label:`课程简介`,class:`intro-form-item`},{default:A(()=>[f(xe,{modelValue:R.value.intro_html,"onUpdate:modelValue":t[17]||=e=>R.value.intro_html=e,scope:`courses`,height:260},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})],512),[[pe,!0]]),le(j(`div`,Wl,[j(`div`,Gl,[j(`aside`,Kl,[t[76]||=j(`div`,{class:`builder-side-title`},`字段组件`,-1),f(l(cl.default),{list:Qe.value,"item-key":`type`,class:`palette-list`,group:{name:`courseFields`,pull:`clone`,put:!1},sort:!1,clone:r},{item:A(({element:e})=>[j(`div`,ql,P(e.title),1)]),_:1},8,[`list`])]),j(`main`,Jl,[j(`div`,Yl,[t[78]||=j(`strong`,null,`表单字段`,-1),f(n,{size:`small`,onClick:sn},{default:A(()=>[...t[77]||=[w(`清空字段`,-1)]]),_:1})]),f(l(cl.default),{modelValue:Xe.value,"onUpdate:modelValue":t[19]||=e=>Xe.value=e,"item-key":`id`,class:`builder-canvas-grid`,group:{name:`courseFields`},"ghost-class":`field-ghost`,onAdd:i,onEnd:i},{item:A(({element:e})=>[j(`div`,{class:te([`canvas-field`,{active:Ze.value===e.id}]),onClick:ie(t=>an(e.id),[`stop`])},[j(`div`,Zl,[e.rule===`required`?(h(),c(`span`,Ql,`*`)):C(``,!0),w(` `+P(e.label||`未命名字段`),1)]),j(`div`,{class:`canvas-field-body`,onClick:t[18]||=ie(()=>{},[`stop`])},[p(e).tag===`text`?(h(),F(s,{key:0,size:`small`,placeholder:`请输入`,disabled:``})):p(e).tag===`textarea`?(h(),F(s,{key:1,type:`textarea`,rows:p(e).rows,disabled:``},null,8,[`rows`])):p(e).tag===`select`?(h(),F(d,{key:2,size:`small`,placeholder:`请选择`,disabled:``,style:{width:`100%`}},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(u,{key:e.key,label:e.label,value:e.key},null,8,[`label`,`value`]))),128))]),_:2},1024)):p(e).tag===`radio`?(h(),F(Oe,{key:3,size:`small`,disabled:``},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(De,{key:e.key,label:e.key},{default:A(()=>[w(P(e.label),1)]),_:2},1032,[`label`]))),128))]),_:2},1024)):p(e).tag===`checkbox`?(h(),F(Ae,{key:4,size:`small`,disabled:``},{default:A(()=>[(h(!0),c(oe,null,ue(p(e).options,e=>(h(),F(ke,{key:e.key,label:e.key},{default:A(()=>[w(P(e.label),1)]),_:2},1032,[`label`]))),128))]),_:2},1024)):p(e).tag===`date`?(h(),F(Se,{key:5,type:`date`,size:`small`,disabled:``,style:{width:`100%`}})):p(e).tag===`datetime`?(h(),F(Se,{key:6,type:`datetime`,size:`small`,disabled:``,style:{width:`100%`}})):p(e).tag===`file`?(h(),F(n,{key:7,size:`small`,disabled:``},{default:A(()=>[...t[79]||=[w(`选择文件`,-1)]]),_:1})):C(``,!0)])],10,Xl)]),_:1},8,[`modelValue`]),Xe.value.length===0?(h(),c(`div`,$l,`从左侧拖拽组件到此处`)):C(``,!0)]),j(`aside`,eu,[t[82]||=j(`div`,{class:`builder-side-title`},`字段设置`,-1),V.value?(h(),F(Ee,{key:0,"label-position":`top`,size:`small`},{default:A(()=>[f(I,{label:`字段名称`},{default:A(()=>[f(s,{modelValue:V.value.label,"onUpdate:modelValue":t[20]||=e=>V.value.label=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`字段标识`},{default:A(()=>[f(s,{modelValue:V.value.key,"onUpdate:modelValue":t[21]||=e=>V.value.key=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`帮助文字`},{default:A(()=>[f(s,{modelValue:V.value.help_text,"onUpdate:modelValue":t[22]||=e=>V.value.help_text=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`排序`},{default:A(()=>[f(be,{modelValue:V.value.sort,"onUpdate:modelValue":t[23]||=e=>V.value.sort=e,min:1,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),f(I,{label:`校验规则`},{default:A(()=>[f(d,{modelValue:V.value.rule,"onUpdate:modelValue":t[24]||=e=>V.value.rule=e,clearable:``,placeholder:`可选`,style:{width:`100%`}},{default:A(()=>[f(u,{label:`必填`,value:`required`}),f(u,{label:`手机号`,value:`phone`}),f(u,{label:`邮箱`,value:`email`})]),_:1},8,[`modelValue`])]),_:1}),V.value.type===`textarea`?(h(),F(I,{key:0,label:`行数`},{default:A(()=>[f(be,{modelValue:V.value.rows,"onUpdate:modelValue":t[25]||=e=>V.value.rows=e,min:2,max:20,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})):C(``,!0),l(fl)(V.value.type)?(h(),c(oe,{key:1},[f(I,{label:`选项来源`},{default:A(()=>[f(d,{modelValue:V.value.options_source_type,"onUpdate:modelValue":t[26]||=e=>V.value.options_source_type=e,style:{width:`100%`}},{default:A(()=>[f(u,{label:`静态配置`,value:`static`}),f(u,{label:`数据字典`,value:`dict`}),f(u,{label:`业务表(预留)`,value:`table`,disabled:``})]),_:1},8,[`modelValue`])]),_:1}),V.value.options_source_type===`dict`?(h(),F(I,{key:0,label:`字典类型`},{default:A(()=>[f(d,{modelValue:V.value.dict_code,"onUpdate:modelValue":t[27]||=e=>V.value.dict_code=e,filterable:``,placeholder:`选择字典编码`,style:{width:`100%`},onChange:It},{default:A(()=>[(h(!0),c(oe,null,ue(o.value,e=>(h(),F(u,{key:e.code,label:`${e.name}(${e.code})`,value:e.code},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),V.value.dict_code&&a.value[V.value.dict_code]?.length?(h(),c(`div`,tu,` 预览:`+P(a.value[V.value.dict_code].map(e=>`${e.label}[${e.key}]`).join(`、`)),1)):C(``,!0)]),_:1})):V.value.options_source_type===`table`?(h(),F(I,{key:1,label:`业务表名`},{default:A(()=>[f(s,{modelValue:V.value.table_name,"onUpdate:modelValue":t[28]||=e=>V.value.table_name=e,placeholder:`如 signup_channels(预留)`},null,8,[`modelValue`])]),_:1})):(h(),F(I,{key:2,label:`静态选项`},{default:A(()=>[f(s,{modelValue:V.value.static_options_text,"onUpdate:modelValue":t[29]||=e=>V.value.static_options_text=e,type:`textarea`,rows:5,placeholder:`每行:key|显示名|value(value 可省略) 例:male|男|male`},null,8,[`modelValue`])]),_:1}))],64)):C(``,!0),V.value.type===`file`?(h(),c(oe,{key:2},[f(I,{label:`支持多文件`},{default:A(()=>[f(je,{modelValue:V.value.file_multiple,"onUpdate:modelValue":t[30]||=e=>V.value.file_multiple=e},null,8,[`modelValue`])]),_:1}),f(I,{label:`最多数量`},{default:A(()=>[f(be,{modelValue:V.value.file_limit,"onUpdate:modelValue":t[31]||=e=>V.value.file_limit=e,min:1,max:50,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})],64)):C(``,!0),f(I,null,{default:A(()=>[f(n,{type:`primary`,size:`small`,onClick:cn},{default:A(()=>[...t[80]||=[w(`保存`,-1)]]),_:1}),f(n,{type:`danger`,size:`small`,plain:``,onClick:on},{default:A(()=>[...t[81]||=[w(`删除`,-1)]]),_:1})]),_:1})]),_:1})):(h(),c(`div`,nu,`点击画布中的字段以编辑`))])])],512),[[pe,fu]])]),_:1},8,[`modelValue`,`title`]),f(Me,{modelValue:se.value,"onUpdate:modelValue":t[42]||=e=>se.value=e,title:`从老师库选择`,width:`640px`,"append-to-body":``,"destroy-on-close":``},{default:A(()=>[f(s,{modelValue:de.value,"onUpdate:modelValue":t[38]||=e=>de.value=e,placeholder:`搜索姓名、高校、研究方向…`,clearable:``,class:`teacher-pick-search`,onKeyup:t[39]||=ne(e=>Nt(de.value),[`enter`])},null,8,[`modelValue`]),f(n,{type:`primary`,size:`small`,style:{margin:`8px 0`},onClick:t[40]||=e=>Nt(de.value)},{default:A(()=>[...t[90]||=[w(` 搜索 `,-1)]]),_:1}),le((h(),F(ce,{data:me.value,size:`small`,"max-height":`320`,onRowClick:t[41]||=e=>Pt(e)},{default:A(()=>[f(M,{prop:`name`,label:`姓名`,width:`100`}),f(M,{prop:`university_name`,label:`高校`,"min-width":`120`,"show-overflow-tooltip":``}),f(M,{prop:`title`,label:`职称`,width:`96`}),f(M,{prop:`research_direction`,label:`研究方向`,"min-width":`120`,"show-overflow-tooltip":``})]),_:1},8,[`data`])),[[Re,ge.value]])]),_:1},8,[`modelValue`]),f(Ve,{modelValue:dt.value,"onUpdate:modelValue":t[43]||=e=>dt.value=e,"course-name":ft.value?.title||``,"signin-code":bt.value},null,8,[`modelValue`,`course-name`,`signin-code`]),f(Me,{modelValue:pt.value,"onUpdate:modelValue":t[48]||=e=>pt.value=e,title:`从商学院选择课程`,width:`960px`,top:`6vh`,"append-to-body":``,"destroy-on-close":``,class:`sstbc-import-dialog`},{footer:A(()=>[f(n,{onClick:t[47]||=e=>pt.value=!1},{default:A(()=>[...t[92]||=[w(`取消`,-1)]]),_:1}),f(n,{type:`primary`,disabled:!yt.value,loading:H.value,onClick:Yt},{default:A(()=>[...t[93]||=[w(` 确认并新建课程 `,-1)]]),_:1},8,[`disabled`,`loading`])]),default:A(()=>[j(`div`,iu,[f(s,{modelValue:vt.value,"onUpdate:modelValue":t[44]||=e=>vt.value=e,clearable:``,placeholder:`搜索课程名称`,style:{width:`220px`},onKeyup:ne(Wt,[`enter`])},null,8,[`modelValue`]),f(n,{type:`primary`,onClick:Wt},{default:A(()=>[...t[91]||=[w(`搜索`,-1)]]),_:1})]),le((h(),F(ce,{data:ht.value,size:`small`,"highlight-current-row":``,style:{"margin-top":`12px`},"max-height":`420`,onCurrentChange:Gt,onRowDblclick:t[45]||=e=>{H.value=!0,Jt(e).finally(()=>{H.value=!1})}},{default:A(()=>[f(M,{prop:`name`,label:`课程名称`,"min-width":`180`,"show-overflow-tooltip":``}),f(M,{label:`开课日期`,width:`190`},{default:A(({row:e})=>[w(P(Vt(e.start_date,e.end_date)),1)]),_:1}),f(M,{label:`报名日期`,width:`190`},{default:A(({row:e})=>[w(P(Vt(e.sign_start_date,e.sign_end_date)),1)]),_:1}),f(M,{label:`课程体系`,width:`120`},{default:A(({row:e})=>[w(P(e.type_detail?.name??`—`),1)]),_:1}),f(M,{label:`课程状态`,width:`100`,align:`center`},{default:A(({row:e})=>[w(P(e.date_status??`—`),1)]),_:1}),f(M,{label:`发布状态`,width:`100`,align:`center`},{default:A(({row:e})=>[w(P(e.status_text??(e.status===1?`已发布`:`未发布`)),1)]),_:1}),f(M,{label:`是否统计`,width:`90`,align:`center`},{default:A(({row:e})=>[w(P(e.is_chart_text??(e.is_chart===1?`是`:`否`)),1)]),_:1})]),_:1},8,[`data`])),[[Re,mt.value]]),j(`div`,au,[f(fe,{"current-page":_t.value,"onUpdate:currentPage":t[46]||=e=>_t.value=e,layout:`total, prev, pager, next`,total:gt.value.total,"page-size":gt.value.per_page,onCurrentChange:Ht},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`]),f(Me,{modelValue:$e.value,"onUpdate:modelValue":t[52]||=e=>$e.value=e,title:`课程报名与签到:${et.value?.title||``}`,width:`960px`,top:`5vh`,class:`signup-dialog`},{default:A(()=>[j(`div`,ou,[j(`div`,su,[ot.value.length?(h(),c(`div`,cu,[(h(!0),c(oe,null,ue(ot.value,e=>(h(),F(n,{key:e.id,size:`small`,type:st.value===e.teach_date?`primary`:`default`,onClick:t=>fn(e.teach_date)},{default:A(()=>[w(P(St(e.teach_date)),1)]),_:2},1032,[`type`,`onClick`]))),128))])):(h(),c(`div`,lu,`暂无上课日,请先在课程中设置开课起止日期`)),f(n,{disabled:!ot.value.length,onClick:vn},{default:A(()=>[...t[94]||=[w(`导出`,-1)]]),_:1},8,[`disabled`])])]),j(`div`,uu,[f(s,{modelValue:it.value,"onUpdate:modelValue":t[49]||=e=>it.value=e,clearable:``,placeholder:`搜索姓名、手机、公司…`,style:{width:`220px`},onKeyup:ne(pn,[`enter`])},null,8,[`modelValue`]),f(d,{modelValue:at.value,"onUpdate:modelValue":t[50]||=e=>at.value=e,clearable:``,placeholder:`签到状态`,style:{width:`120px`}},{default:A(()=>[f(u,{label:`已签到`,value:1}),f(u,{label:`未签到`,value:0})]),_:1},8,[`modelValue`]),f(n,{type:`primary`,onClick:pn},{default:A(()=>[...t[95]||=[w(`搜索`,-1)]]),_:1}),f(n,{onClick:mn},{default:A(()=>[...t[96]||=[w(`重置`,-1)]]),_:1})]),f(ce,{data:tt.value,size:`small`,style:{"margin-top":`12px`}},{default:A(()=>[f(M,{prop:`name`,label:`姓名`,width:`100`}),f(M,{prop:`mobile`,label:`手机`,width:`130`}),f(M,{prop:`company`,label:`公司`,"min-width":`120`,"show-overflow-tooltip":``}),f(M,{label:`报名时间`,width:`170`},{default:A(({row:e})=>[w(P(wt(e.signed_up_at)),1)]),_:1}),f(M,{label:`签到状态`,width:`100`},{default:A(({row:e})=>[xt.value?(h(),c(oe,{key:0},[e.day_checked_in_at?(h(),F(Ne,{key:0,type:`success`,size:`small`},{default:A(()=>[...t[97]||=[w(`已签到`,-1)]]),_:1})):(h(),F(Ne,{key:1,type:`info`,size:`small`},{default:A(()=>[...t[98]||=[w(`未签到`,-1)]]),_:1}))],64)):C(``,!0)]),_:1}),f(M,{label:`签到时间`,width:`170`},{default:A(({row:e})=>[w(P(xt.value?wt(e.day_checked_in_at):``),1)]),_:1}),f(M,{label:`操作`,width:`120`,fixed:`right`},{default:A(({row:e})=>[xt.value&&!e.day_checked_in_at?(h(),F(n,{key:0,type:`primary`,link:``,onClick:t=>gn(e)},{default:A(()=>[...t[99]||=[w(` 手动补签 `,-1)]]),_:1},8,[`onClick`])):xt.value&&e.day_checked_in_at?(h(),F(n,{key:1,type:`info`,link:``,disabled:``},{default:A(()=>[...t[100]||=[w(` 已完成 `,-1)]]),_:1})):C(``,!0),f(n,{type:`danger`,link:``,onClick:t=>hn(e)},{default:A(()=>[...t[101]||=[w(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),j(`div`,du,[f(fe,{"current-page":rt.value,"onUpdate:currentPage":t[51]||=e=>rt.value=e,layout:`total, prev, pager, next`,total:nt.value.total,"page-size":nt.value.per_page,onCurrentChange:un},null,8,[`current-page`,`total`,`page-size`])])]),_:1},8,[`modelValue`,`title`]),f(Me,{modelValue:ct.value,"onUpdate:modelValue":t[54]||=e=>ct.value=e,title:`${et.value?.title||``}报名表导出`,width:`720px`,"append-to-body":``},{footer:A(()=>[f(n,{onClick:t[53]||=e=>ct.value=!1},{default:A(()=>[...t[104]||=[w(`关闭`,-1)]]),_:1})]),default:A(()=>[le((h(),F(ce,{data:ut.value,size:`small`},{default:A(()=>[f(M,{label:`课次日期`,width:`120`},{default:A(({row:e})=>[w(P(St(e.teach_date)),1)]),_:1}),f(M,{prop:`signup_count`,label:`报名人数`,width:`100`}),f(M,{prop:`checked_in_count`,label:`已签到`,width:`90`}),f(M,{label:`报名导出`,width:`100`},{default:A(({row:e})=>[f(n,{type:`primary`,link:``,onClick:t=>yn(e)},{default:A(()=>[...t[102]||=[w(`导出报名`,-1)]]),_:1},8,[`onClick`])]),_:1}),f(M,{label:`签到导出`,width:`100`},{default:A(({row:e})=>[f(n,{type:`primary`,link:``,onClick:t=>bn(e)},{default:A(()=>[...t[103]||=[w(`导出签到`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[Re,lt.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-84b6442e`]]);export{pu as default}; \ No newline at end of file diff --git a/public/admin/assets/courses-ayi38cX4.js b/public/admin/assets/courses-DPJyM0Kj.js similarity index 91% rename from public/admin/assets/courses-ayi38cX4.js rename to public/admin/assets/courses-DPJyM0Kj.js index df19712..6bcb304 100644 --- a/public/admin/assets/courses-ayi38cX4.js +++ b/public/admin/assets/courses-DPJyM0Kj.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/courses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/courses/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/courses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/courses/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/courses/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/courses/${t}/checkin-days`);return n.data.items}async function s(t,n){let{data:r}=await e.get(`/admin/v1/courses/${t}/signups`,{params:n});return r.data}async function c(e,t={}){let n=1,r=[];for(;;){let i=await s(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/courses/${t}/signups/${n}`);return r}async function u(t,n,r){let{data:i}=await e.post(`/admin/v1/courses/${t}/signups/${n}/checkin`,r);return i}export{c as a,s as c,l as i,t as l,r as n,n as o,a as r,o as s,u as t,i as u}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/courses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/courses/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/courses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/courses/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/courses/${t}`);return n}async function o(t){let{data:n}=await e.get(`/admin/v1/courses/${t}/checkin-days`);return n.data.items}async function s(t,n){let{data:r}=await e.get(`/admin/v1/courses/${t}/signups`,{params:n});return r.data}async function c(e,t={}){let n=1,r=[];for(;;){let i=await s(e,{...t,page:n,page_size:200});if(r.push(...i.items),n>=i.meta.last_page||i.items.length===0)break;n+=1}return r}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/courses/${t}/signups/${n}`);return r}async function u(t,n,r){let{data:i}=await e.post(`/admin/v1/courses/${t}/signups/${n}/checkin`,r);return i}export{c as a,s as c,l as i,t as l,r as n,n as o,a as r,o as s,u as t,i as u}; \ No newline at end of file diff --git a/public/admin/assets/crawl-addresses-BpBPSYbl.js b/public/admin/assets/crawl-addresses-D7PSrbmU.js similarity index 86% rename from public/admin/assets/crawl-addresses-BpBPSYbl.js rename to public/admin/assets/crawl-addresses-D7PSrbmU.js index dc7bea7..eaabe6c 100644 --- a/public/admin/assets/crawl-addresses-BpBPSYbl.js +++ b/public/admin/assets/crawl-addresses-D7PSrbmU.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/crawl-addresses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/crawl-addresses/options`,{params:t?{target_type:t}:void 0});return n.data.items}async function r(t){let{data:n}=await e.post(`/admin/v1/crawl-addresses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/crawl-addresses/${t}`,n);return r.data}async function a(t){let{data:n}=await e.delete(`/admin/v1/crawl-addresses/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/crawl-addresses`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/crawl-addresses/options`,{params:t?{target_type:t}:void 0});return n.data.items}async function r(t){let{data:n}=await e.post(`/admin/v1/crawl-addresses`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/crawl-addresses/${t}`,n);return r.data}async function a(t){let{data:n}=await e.delete(`/admin/v1/crawl-addresses/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file diff --git a/public/admin/assets/crawl-addresses-D4W6XOd-.js b/public/admin/assets/crawl-addresses-DgRZGJyd.js similarity index 96% rename from public/admin/assets/crawl-addresses-D4W6XOd-.js rename to public/admin/assets/crawl-addresses-DgRZGJyd.js index c654e6d..14bb01b 100644 --- a/public/admin/assets/crawl-addresses-D4W6XOd-.js +++ b/public/admin/assets/crawl-addresses-DgRZGJyd.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S}from"./index-DHoSHxJa.js";import{n as C,t as w}from"./usePageLoad-C9PEZ_Tm.js";import{r as T}from"./admin-list-DjncsyJC.js";import{a as E}from"./dict-D30aLydL.js";import{a as D,i as O,n as k,t as A}from"./crawl-addresses-BpBPSYbl.js";import{p as j}from"./teachers-DsTLUxF9.js";var M={class:`list-page`},N={class:`page-header`},P={class:`list-filter-bar`},ee={class:`table-row-actions`},F={class:`list-pager`},I=S(n({__name:`index`,setup(n){let S={paper:`论文 → 论文库`,industry_news:`行业资讯 → 资讯管理`,teacher:`老师库 → 老师库`},I=p(!1),L=p([]),R=p({current_page:1,per_page:20,total:0}),z=p(``),B=p(``),V=p(1),H=p([]),U=p([]),W=p(!1),G=p(null),K=p({target_type:`paper`,name:``,request_url:``,keyword:``,category_dict_item_id:null,university_id:null,department:``,sort:0,status:1}),q=y(()=>K.value.target_type===`industry_news`),J=y(()=>K.value.target_type===`teacher`);function Y(e){return S[e]||e}async function X(){if(H.value.length===0)try{H.value=(await E(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{}if(U.value.length===0)try{U.value=(await j({page:1,page_size:500,simple:1})).items.map(e=>({id:e.id,name:e.name}))}catch{}}async function Z(){I.value=!0;try{let e=await O({page:V.value,page_size:R.value.per_page,keyword:z.value||void 0,target_type:B.value||void 0});L.value=e.items,R.value=e.meta}finally{I.value=!1}}function Q(e){e!==`industry_news`&&(K.value.category_dict_item_id=null),e!==`teacher`&&(K.value.university_id=null,K.value.department=``)}function te(){G.value=null,K.value={target_type:`paper`,name:``,request_url:``,keyword:``,category_dict_item_id:null,university_id:null,department:``,sort:0,status:1},W.value=!0,X()}function ne(e){G.value=e,K.value={target_type:e.target_type,name:e.name,request_url:e.request_url,keyword:e.keyword||``,category_dict_item_id:e.category_dict_item_id??null,university_id:e.university_id??null,department:e.department||``,sort:e.sort,status:e.status},W.value=!0,X()}async function re(){if(!K.value.name.trim()){x.warning(`请填写地址名称`);return}if(!K.value.request_url.trim()){x.warning(`请填写目标地址`);return}let e={target_type:K.value.target_type,name:K.value.name.trim(),request_url:K.value.request_url.trim(),keyword:K.value.keyword.trim()||null,category_dict_item_id:q.value?K.value.category_dict_item_id:null,university_id:J.value?K.value.university_id:null,department:J.value&&K.value.department.trim()||null,sort:K.value.sort,status:K.value.status};G.value?await D(G.value.id,e):await A(e),x.success(`已保存`),W.value=!1,await Z()}async function ie(e){await b.confirm(`确定删除爬虫地址「${e.name}」?`,`提示`,{type:`warning`}),await k(e.id),x.success(`已删除`),await Z()}function $(){V.value=1,Z()}function ae(){z.value=``,B.value=``,V.value=1,Z()}function oe(e){Q(e)}return w(Z),(n,p)=>{let y=l(`el-button`),b=l(`el-option`),x=l(`el-select`),S=l(`el-input`),w=l(`el-table-column`),E=l(`el-table`),D=l(`el-pagination`),O=l(`el-card`),k=l(`el-radio`),A=l(`el-radio-group`),j=l(`el-form-item`),X=l(`el-input-number`),Q=l(`el-form`),se=l(`el-dialog`),ce=s(`loading`);return i(),e(`div`,M,[d(`div`,N,[r(C),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:te},{default:u(()=>[...p[14]||=[o(`新增`,-1)]]),_:1})]),r(O,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,P,[r(x,{modelValue:B.value,"onUpdate:modelValue":p[0]||=e=>B.value=e,clearable:``,placeholder:`入库类型`,class:`filter-select`,onChange:$},{default:u(()=>[r(b,{label:`论文 → 论文库`,value:`paper`}),r(b,{label:`行业资讯 → 资讯管理`,value:`industry_news`}),r(b,{label:`老师库 → 老师库`,value:`teacher`})]),_:1},8,[`modelValue`]),r(S,{modelValue:z.value,"onUpdate:modelValue":p[1]||=e=>z.value=e,placeholder:`名称 / 地址 / 关键词`,clearable:``,class:`filter-search`,onKeyup:f($,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:$},{default:u(()=>[...p[15]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:ae},{default:u(()=>[...p[16]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(E,{data:L.value,"row-key":`id`},{default:u(()=>[r(w,{label:`入库类型`,width:`160`},{default:u(({row:e})=>[o(_(Y(e.target_type)),1)]),_:1}),r(w,{prop:`name`,label:`地址名称`,"min-width":`140`}),r(w,{prop:`request_url`,label:`目标地址`,"min-width":`220`,"show-overflow-tooltip":``}),r(w,{prop:`keyword`,label:`关键词`,"min-width":`120`,"show-overflow-tooltip":``}),r(w,{label:`资讯分类`,width:`120`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.category_label||`—`),1)]),_:1}),r(w,{label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.university_name||`—`),1)]),_:1}),r(w,{label:`学院`,width:`160`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.department||`—`),1)]),_:1}),r(w,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(w,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(T)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(w,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,ee,[r(y,{class:`btn-action-primary`,onClick:t=>ne(e)},{default:u(()=>[...p[17]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>ie(e)},{default:u(()=>[...p[18]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ce,I.value]]),d(`div`,F,[r(D,{"current-page":V.value,"onUpdate:currentPage":p[2]||=e=>V.value=e,layout:`total, prev, pager, next`,total:R.value.total,onCurrentChange:Z},null,8,[`current-page`,`total`])])]),_:1}),r(se,{modelValue:W.value,"onUpdate:modelValue":p[13]||=e=>W.value=e,title:G.value?`编辑爬虫地址`:`新增爬虫地址`,width:`560px`},{footer:u(()=>[r(y,{onClick:p[12]||=e=>W.value=!1},{default:u(()=>[...p[24]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:re},{default:u(()=>[...p[25]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r(Q,{"label-width":`100px`},{default:u(()=>[r(j,{label:`入库类型`,required:``},{default:u(()=>[r(A,{modelValue:K.value.target_type,"onUpdate:modelValue":p[3]||=e=>K.value.target_type=e,onChange:oe},{default:u(()=>[r(k,{label:`paper`},{default:u(()=>[...p[19]||=[o(`论文`,-1)]]),_:1}),r(k,{label:`industry_news`},{default:u(()=>[...p[20]||=[o(`行业资讯`,-1)]]),_:1}),r(k,{label:`teacher`},{default:u(()=>[...p[21]||=[o(`老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),r(j,{label:`地址名称`,required:``},{default:u(()=>[r(S,{modelValue:K.value.name,"onUpdate:modelValue":p[4]||=e=>K.value.name=e,maxlength:`128`,"show-word-limit":``},null,8,[`modelValue`])]),_:1}),r(j,{label:`目标地址`,required:``},{default:u(()=>[r(S,{modelValue:K.value.request_url,"onUpdate:modelValue":p[5]||=e=>K.value.request_url=e,type:`url`,placeholder:`https://`},null,8,[`modelValue`])]),_:1}),r(j,{label:`关键词`},{default:u(()=>[r(S,{modelValue:K.value.keyword,"onUpdate:modelValue":p[6]||=e=>K.value.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),q.value?(i(),v(j,{key:0,label:`资讯分类`},{default:u(()=>[r(x,{modelValue:K.value.category_dict_item_id,"onUpdate:modelValue":p[7]||=e=>K.value.category_dict_item_id=e,clearable:``,filterable:``,placeholder:`请选择`},{default:u(()=>[(i(!0),e(m,null,g(H.value,e=>(i(),v(b,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})):a(``,!0),J.value?(i(),v(j,{key:1,label:`高校`},{default:u(()=>[r(x,{modelValue:K.value.university_id,"onUpdate:modelValue":p[8]||=e=>K.value.university_id=e,clearable:``,filterable:``,placeholder:`请选择`},{default:u(()=>[(i(!0),e(m,null,g(U.value,e=>(i(),v(b,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})):a(``,!0),J.value?(i(),v(j,{key:2,label:`学院`},{default:u(()=>[r(S,{modelValue:K.value.department,"onUpdate:modelValue":p[9]||=e=>K.value.department=e,maxlength:`128`,placeholder:`如:电子信息与电气工程学院`},null,8,[`modelValue`])]),_:1})):a(``,!0),r(j,{label:`排序`},{default:u(()=>[r(X,{modelValue:K.value.sort,"onUpdate:modelValue":p[10]||=e=>K.value.sort=e,min:0},null,8,[`modelValue`])]),_:1}),r(j,{label:`状态`},{default:u(()=>[r(A,{modelValue:K.value.status,"onUpdate:modelValue":p[11]||=e=>K.value.status=e},{default:u(()=>[r(k,{label:1},{default:u(()=>[...p[22]||=[o(`启用`,-1)]]),_:1}),r(k,{label:0},{default:u(()=>[...p[23]||=[o(`停用`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-ce20f0d3`]]);export{I as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v,y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as b,l as x,s as S}from"./index-CPrkFf57.js";import{n as C,t as w}from"./usePageLoad-B1L6ImD-.js";import{r as T}from"./admin-list-dnDAubDa.js";import{a as E}from"./dict-D-xskQUn.js";import{a as D,i as O,n as k,t as A}from"./crawl-addresses-D7PSrbmU.js";import{p as j}from"./teachers-BWvhNkqR.js";var M={class:`list-page`},N={class:`page-header`},P={class:`list-filter-bar`},ee={class:`table-row-actions`},F={class:`list-pager`},I=S(n({__name:`index`,setup(n){let S={paper:`论文 → 论文库`,industry_news:`行业资讯 → 资讯管理`,teacher:`老师库 → 老师库`},I=p(!1),L=p([]),R=p({current_page:1,per_page:20,total:0}),z=p(``),B=p(``),V=p(1),H=p([]),U=p([]),W=p(!1),G=p(null),K=p({target_type:`paper`,name:``,request_url:``,keyword:``,category_dict_item_id:null,university_id:null,department:``,sort:0,status:1}),q=y(()=>K.value.target_type===`industry_news`),J=y(()=>K.value.target_type===`teacher`);function Y(e){return S[e]||e}async function X(){if(H.value.length===0)try{H.value=(await E(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{}if(U.value.length===0)try{U.value=(await j({page:1,page_size:500,simple:1})).items.map(e=>({id:e.id,name:e.name}))}catch{}}async function Z(){I.value=!0;try{let e=await O({page:V.value,page_size:R.value.per_page,keyword:z.value||void 0,target_type:B.value||void 0});L.value=e.items,R.value=e.meta}finally{I.value=!1}}function Q(e){e!==`industry_news`&&(K.value.category_dict_item_id=null),e!==`teacher`&&(K.value.university_id=null,K.value.department=``)}function te(){G.value=null,K.value={target_type:`paper`,name:``,request_url:``,keyword:``,category_dict_item_id:null,university_id:null,department:``,sort:0,status:1},W.value=!0,X()}function ne(e){G.value=e,K.value={target_type:e.target_type,name:e.name,request_url:e.request_url,keyword:e.keyword||``,category_dict_item_id:e.category_dict_item_id??null,university_id:e.university_id??null,department:e.department||``,sort:e.sort,status:e.status},W.value=!0,X()}async function re(){if(!K.value.name.trim()){x.warning(`请填写地址名称`);return}if(!K.value.request_url.trim()){x.warning(`请填写目标地址`);return}let e={target_type:K.value.target_type,name:K.value.name.trim(),request_url:K.value.request_url.trim(),keyword:K.value.keyword.trim()||null,category_dict_item_id:q.value?K.value.category_dict_item_id:null,university_id:J.value?K.value.university_id:null,department:J.value&&K.value.department.trim()||null,sort:K.value.sort,status:K.value.status};G.value?await D(G.value.id,e):await A(e),x.success(`已保存`),W.value=!1,await Z()}async function ie(e){await b.confirm(`确定删除爬虫地址「${e.name}」?`,`提示`,{type:`warning`}),await k(e.id),x.success(`已删除`),await Z()}function $(){V.value=1,Z()}function ae(){z.value=``,B.value=``,V.value=1,Z()}function oe(e){Q(e)}return w(Z),(n,p)=>{let y=l(`el-button`),b=l(`el-option`),x=l(`el-select`),S=l(`el-input`),w=l(`el-table-column`),E=l(`el-table`),D=l(`el-pagination`),O=l(`el-card`),k=l(`el-radio`),A=l(`el-radio-group`),j=l(`el-form-item`),X=l(`el-input-number`),Q=l(`el-form`),se=l(`el-dialog`),ce=s(`loading`);return i(),e(`div`,M,[d(`div`,N,[r(C),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:te},{default:u(()=>[...p[14]||=[o(`新增`,-1)]]),_:1})]),r(O,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,P,[r(x,{modelValue:B.value,"onUpdate:modelValue":p[0]||=e=>B.value=e,clearable:``,placeholder:`入库类型`,class:`filter-select`,onChange:$},{default:u(()=>[r(b,{label:`论文 → 论文库`,value:`paper`}),r(b,{label:`行业资讯 → 资讯管理`,value:`industry_news`}),r(b,{label:`老师库 → 老师库`,value:`teacher`})]),_:1},8,[`modelValue`]),r(S,{modelValue:z.value,"onUpdate:modelValue":p[1]||=e=>z.value=e,placeholder:`名称 / 地址 / 关键词`,clearable:``,class:`filter-search`,onKeyup:f($,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:$},{default:u(()=>[...p[15]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:ae},{default:u(()=>[...p[16]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(E,{data:L.value,"row-key":`id`},{default:u(()=>[r(w,{label:`入库类型`,width:`160`},{default:u(({row:e})=>[o(_(Y(e.target_type)),1)]),_:1}),r(w,{prop:`name`,label:`地址名称`,"min-width":`140`}),r(w,{prop:`request_url`,label:`目标地址`,"min-width":`220`,"show-overflow-tooltip":``}),r(w,{prop:`keyword`,label:`关键词`,"min-width":`120`,"show-overflow-tooltip":``}),r(w,{label:`资讯分类`,width:`120`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.category_label||`—`),1)]),_:1}),r(w,{label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.university_name||`—`),1)]),_:1}),r(w,{label:`学院`,width:`160`,"show-overflow-tooltip":``},{default:u(({row:e})=>[o(_(e.department||`—`),1)]),_:1}),r(w,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(w,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(T)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(w,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,ee,[r(y,{class:`btn-action-primary`,onClick:t=>ne(e)},{default:u(()=>[...p[17]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>ie(e)},{default:u(()=>[...p[18]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ce,I.value]]),d(`div`,F,[r(D,{"current-page":V.value,"onUpdate:currentPage":p[2]||=e=>V.value=e,layout:`total, prev, pager, next`,total:R.value.total,onCurrentChange:Z},null,8,[`current-page`,`total`])])]),_:1}),r(se,{modelValue:W.value,"onUpdate:modelValue":p[13]||=e=>W.value=e,title:G.value?`编辑爬虫地址`:`新增爬虫地址`,width:`560px`},{footer:u(()=>[r(y,{onClick:p[12]||=e=>W.value=!1},{default:u(()=>[...p[24]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:re},{default:u(()=>[...p[25]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r(Q,{"label-width":`100px`},{default:u(()=>[r(j,{label:`入库类型`,required:``},{default:u(()=>[r(A,{modelValue:K.value.target_type,"onUpdate:modelValue":p[3]||=e=>K.value.target_type=e,onChange:oe},{default:u(()=>[r(k,{label:`paper`},{default:u(()=>[...p[19]||=[o(`论文`,-1)]]),_:1}),r(k,{label:`industry_news`},{default:u(()=>[...p[20]||=[o(`行业资讯`,-1)]]),_:1}),r(k,{label:`teacher`},{default:u(()=>[...p[21]||=[o(`老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),r(j,{label:`地址名称`,required:``},{default:u(()=>[r(S,{modelValue:K.value.name,"onUpdate:modelValue":p[4]||=e=>K.value.name=e,maxlength:`128`,"show-word-limit":``},null,8,[`modelValue`])]),_:1}),r(j,{label:`目标地址`,required:``},{default:u(()=>[r(S,{modelValue:K.value.request_url,"onUpdate:modelValue":p[5]||=e=>K.value.request_url=e,type:`url`,placeholder:`https://`},null,8,[`modelValue`])]),_:1}),r(j,{label:`关键词`},{default:u(()=>[r(S,{modelValue:K.value.keyword,"onUpdate:modelValue":p[6]||=e=>K.value.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),q.value?(i(),v(j,{key:0,label:`资讯分类`},{default:u(()=>[r(x,{modelValue:K.value.category_dict_item_id,"onUpdate:modelValue":p[7]||=e=>K.value.category_dict_item_id=e,clearable:``,filterable:``,placeholder:`请选择`},{default:u(()=>[(i(!0),e(m,null,g(H.value,e=>(i(),v(b,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})):a(``,!0),J.value?(i(),v(j,{key:1,label:`高校`},{default:u(()=>[r(x,{modelValue:K.value.university_id,"onUpdate:modelValue":p[8]||=e=>K.value.university_id=e,clearable:``,filterable:``,placeholder:`请选择`},{default:u(()=>[(i(!0),e(m,null,g(U.value,e=>(i(),v(b,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})):a(``,!0),J.value?(i(),v(j,{key:2,label:`学院`},{default:u(()=>[r(S,{modelValue:K.value.department,"onUpdate:modelValue":p[9]||=e=>K.value.department=e,maxlength:`128`,placeholder:`如:电子信息与电气工程学院`},null,8,[`modelValue`])]),_:1})):a(``,!0),r(j,{label:`排序`},{default:u(()=>[r(X,{modelValue:K.value.sort,"onUpdate:modelValue":p[10]||=e=>K.value.sort=e,min:0},null,8,[`modelValue`])]),_:1}),r(j,{label:`状态`},{default:u(()=>[r(A,{modelValue:K.value.status,"onUpdate:modelValue":p[11]||=e=>K.value.status=e},{default:u(()=>[r(k,{label:1},{default:u(()=>[...p[22]||=[o(`启用`,-1)]]),_:1}),r(k,{label:0},{default:u(()=>[...p[23]||=[o(`停用`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-ce20f0d3`]]);export{I as default}; \ No newline at end of file diff --git a/public/admin/assets/crawler-DA_awB1N.js b/public/admin/assets/crawler-Dn8Fhsxl.js similarity index 98% rename from public/admin/assets/crawler-DA_awB1N.js rename to public/admin/assets/crawler-Dn8Fhsxl.js index 6dea256..530dfce 100644 --- a/public/admin/assets/crawler-DA_awB1N.js +++ b/public/admin/assets/crawler-Dn8Fhsxl.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,S as i,T as a,X as ee,Y as o,at as s,b as c,f as te,ht as l,m as u,ot as d,q as f,rt as p,tn as m,x as h,y as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as _,o as ne,s as v}from"./index-DHoSHxJa.js";import{n as re,t as y}from"./usePageLoad-C9PEZ_Tm.js";import{a as b,d as ie,f as ae,h as x,m as oe,p as se}from"./assets-hAC2p2Vo.js";import{a as S}from"./dict-D30aLydL.js";import{r as C}from"./crawl-addresses-BpBPSYbl.js";var ce={class:`list-page`},le={class:`page-header`},ue={key:0,class:`crawl-resolve-hint`},de={key:1,class:`crawl-resolve-hint`},fe={key:0},pe={key:1},me={key:2},he={key:1,class:`result-actions`},ge={class:`brief-card-head`},_e={class:`brief-pager`},ve={key:0,class:`brief-dialog-meta`},ye={key:1,class:`brief-markdown`},be={key:2,class:`brief-loading`},xe=[`href`],w=v(t({__name:`index`,setup(t){let v=ne(),w=l(!1),T=l(!1),E=l(null),D=l(null),O=l(null),k=null,A=l(!1),j=l(`paper`),M=l([]),N=l([]),P=l([]),F=l(!1),I=l([]),L=l([]),R=l({}),z=l(!1),B=l(!1),V=l([]),H=l({current_page:1,per_page:10,total:0}),U=l(1),W=l(!1),G=l(null),K=l({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),q={paper:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用逗号或换行分隔,如:graph neural, AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:1,min:1,max:20,placeholder:`arXiv 按提交时间分页,每页 50 条`},{key:`max_results`,type:`number`,label:`条数上限`,default:50,min:1,max:200}],industry_news:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:5,min:1,max:50},{key:`max_results`,type:`number`,label:`条数上限`,default:30,min:1,max:50}]},J=l([]),Se=g(()=>K.value.target_type===`teacher`?P.value:j.value===`teacher_lead`?N.value:M.value),Ce=g(()=>K.value.target_type===`teacher`?J.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function we(e){return e===`paper`||e===`industry_news`?q[e]:[]}function Y(e,t=!0){let n=we(e);if(n.length===0)return;J.value=n;let r=t?{...K.value.params}:{};if(je(n),t)for(let e of n)r[e.key]!==void 0&&(K.value.params[e.key]=r[e.key])}function Te(){K.value.target_type===`teacher`&&(K.value.params.keyword===void 0&&(K.value.params.keyword=``),K.value.params.max_results===void 0&&(K.value.params.max_results=200),K.value.params.max_pages===void 0&&(K.value.params.max_pages=5))}function Ee(){K.value.target_type===`industry_news`&&(K.value.params.keyword===void 0&&(K.value.params.keyword=``),K.value.params.max_pages===void 0&&(K.value.params.max_pages=5),K.value.params.max_results===void 0&&(K.value.params.max_results=30))}function De(e){(e===`paper`||e===`industry_news`)&&(Y(e,!0),e===`industry_news`&&Ee())}function Oe(e){if(!e)return`—`;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function ke(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function Ae(e){return[...e].sort((e,t)=>{let n=ke(e);return n===ke(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function je(e){let t={};for(let n of e)n.type===`checkbox`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:n.type===`number`?t[n.key]=n.default??20:t[n.key]=n.default??``;K.value.params=t}function Me(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function X(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function Ne(e,t){let n=X(e),r=L.value.find(e=>X(e.request_url)===n);r?(t?.fillKeyword&&r.keyword&&(K.value.params.keyword=r.keyword),R.value={},r.category_dict_item_id&&(R.value.category_dict_item_id=r.category_dict_item_id),R.value.source_name=r.name,r.university_id&&(R.value.university_id=r.university_id),r.department&&(R.value.department=r.department)):R.value={}}async function Pe(e){try{L.value=await C(e)}catch{L.value=[]}}function Z(){E.value=null,A.value=!1,M.value=[],N.value=[],P.value=[]}async function Fe(){Z(),j.value=`paper`,w.value=!1,K.value={target_type:`paper`,request_url:Me(`paper`),params:{}},D.value=null,O.value=null,R.value={},J.value=[],De(`paper`),await Pe(`paper`),Q()}async function Q(){if(k)return k;k=(async()=>{if(!K.value.request_url){D.value=null,O.value=null;return}let e=X(K.value.request_url);e!==K.value.request_url&&(K.value.request_url=e);let t=K.value.target_type;(t===`paper`||t===`industry_news`)&&Y(t,!0),T.value=!0;try{D.value=await oe({request_url:K.value.request_url,target_type:t}),O.value=K.value.request_url,t===`teacher`?(J.value=D.value.param_schema?.fields??[],je(J.value),Te()):Y(t,!0)}catch{D.value=null,O.value=null,t===`teacher`?J.value=[]:Y(t,!0)}finally{T.value=!1}})();try{await k}finally{k=null}}async function Ie(){if(!K.value.request_url.trim())return _.warning(`请填写目标地址`),!1;let e=X(K.value.request_url);return e!==K.value.request_url&&(K.value.request_url=e),(!D.value||O.value!==K.value.request_url)&&await Q(),!!D.value}async function Le(){if(K.value.request_url.trim()){let e=L.value.some(e=>X(e.request_url)===X(K.value.request_url));Ne(K.value.request_url,{fillKeyword:e})}else R.value={};await Q()}p(()=>K.value.target_type,e=>{Z(),D.value=null,O.value=null,R.value={},J.value=[],K.value.request_url=Me(e),e===`teacher`?Te():(e===`paper`||e===`industry_news`)&&Y(e,!1),Pe(e),Q()});async function Re(){if(!await Ie()){_.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}w.value=!0;try{Ne(K.value.request_url);let e={target_type:K.value.target_type,request_url:K.value.request_url,params:K.value.params};if(K.value.target_type===`industry_news`&&(R.value.category_dict_item_id||R.value.source_name)&&(e.news_defaults={...R.value.category_dict_item_id?{category_dict_item_id:R.value.category_dict_item_id}:{},...R.value.source_name?{source:R.value.source_name}:{}}),K.value.target_type===`teacher`){let t={};R.value.university_id&&(t.university_id=R.value.university_id),R.value.department&&(t.department=R.value.department),Object.keys(t).length>0&&(e.teacher_defaults=t)}E.value=await x(e),_.success(E.value.result_summary||`抓取完成,已入库 ${E.value.items_imported??0} 条`)}finally{w.value=!1}}async function ze(){if(!(I.value.length>0))try{I.value=(await S(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{_.warning(`资讯分类加载失败`)}}async function Be(){if(E.value?.id){F.value=!0,A.value=!0,j.value=K.value.target_type===`teacher`?`teacher`:`paper`;try{K.value.target_type===`industry_news`&&await ze();let e=E.value.id;if(K.value.target_type===`paper`){let[t,n]=await Promise.all([b(e,{item_kind:`paper`}),b(e,{item_kind:`teacher_lead`})]);M.value=t,N.value=Ae(n)}else K.value.target_type===`teacher`?P.value=await b(e,{item_kind:`teacher`}):M.value=await b(e)}finally{F.value=!1}}}function Ve(){E.value?.id&&(K.value.target_type===`paper`?v.push({path:`/papers`,query:{crawl_job_id:String(E.value.id)}}):K.value.target_type===`teacher`?v.push({path:`/teachers`}):v.push({path:`/news`,query:{crawl_job_id:String(E.value.id)}}))}let He=()=>E.value?.status===`completed`&&(E.value.items_fetched??0)>0;function Ue(e,t){return!e||!t?`—`:`${e} 至 ${t}`}function We(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}async function $(){z.value=!0;try{let e=await ae({page:U.value,page_size:H.value.per_page});V.value=e.items,H.value=e.meta}catch{V.value=[]}finally{z.value=!1}}async function Ge(){B.value=!0;try{let e=await se();_.success(`周报已生成`),U.value=1,await $(),await Ke(e.id)}catch(e){let t=e instanceof Error?e.message:`周报生成失败`;_.error(t)}finally{B.value=!1}}async function Ke(e){W.value=!0,G.value=null;try{G.value=await ie(e)}catch{_.error(`加载周报失败`),W.value=!1}}async function qe(){if(G.value?.markdown)try{await navigator.clipboard.writeText(G.value.markdown),_.success(`已复制 Markdown`)}catch{_.error(`复制失败`)}}function Je(){if(!G.value?.markdown)return;let e=new Blob([G.value.markdown],{type:`text/markdown;charset=utf-8`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`AI科技成果简报_${G.value.week_start}_${G.value.week_end}.md`,n.click(),URL.revokeObjectURL(t)}return y(async()=>{await Fe(),await $()}),(t,l)=>{let p=o(`el-radio`),g=o(`el-radio-group`),_=o(`el-form-item`),ne=o(`el-option`),v=o(`el-select`),y=o(`el-input`),b=o(`el-input-number`),ie=o(`el-checkbox`),ae=o(`el-checkbox-group`),x=o(`el-button`),oe=o(`el-form`),se=o(`el-alert`),S=o(`el-card`),C=o(`el-table-column`),O=o(`el-table`),k=o(`el-pagination`),P=o(`el-dialog`),I=o(`el-tab-pane`),R=o(`el-tabs`),q=o(`el-tag`),J=ee(`loading`);return r(),e(`div`,ce,[c(`div`,le,[n(re)]),n(S,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(oe,{"label-position":`top`,class:`crawler-form`,onSubmit:te(Re,[`prevent`])},{default:s(()=>[n(_,{label:`入库类型`,required:``},{default:s(()=>[n(g,{modelValue:K.value.target_type,"onUpdate:modelValue":l[0]||=e=>K.value.target_type=e},{default:s(()=>[n(p,{label:`paper`},{default:s(()=>[...l[16]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(p,{label:`industry_news`},{default:s(()=>[...l[17]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(p,{label:`teacher`},{default:s(()=>[...l[18]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(_,{label:`目标地址`,required:``},{default:s(()=>[n(v,{modelValue:K.value.request_url,"onUpdate:modelValue":l[1]||=e=>K.value.request_url=e,filterable:``,"allow-create":``,"default-first-option":``,clearable:``,placeholder:`从爬虫地址选择或输入 URL`,class:`crawl-url-select`,onChange:Le},{default:s(()=>[(r(!0),e(u,null,f(L.value,e=>(r(),h(ne,{key:e.id,label:e.name,value:e.request_url},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),T.value?(r(),e(`p`,ue,`正在识别采集源…`)):D.value?.source_name?(r(),e(`p`,de,` 已识别采集源:`+m(D.value.source_name),1)):i(``,!0)]),_:1}),K.value.target_type===`paper`||K.value.target_type===`industry_news`?(r(),e(u,{key:0},[n(_,{label:`搜索关键词(选填)`},{default:s(()=>[n(y,{modelValue:K.value.params.keyword,"onUpdate:modelValue":l[2]||=e=>K.value.params.keyword=e,type:`textarea`,rows:2,placeholder:K.value.target_type===`paper`?`多个关键词用逗号或换行分隔,如:graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),K.value.target_type===`paper`?(r(),h(_,{key:0,label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[3]||=e=>K.value.params.max_pages=e,min:1,max:20},null,8,[`modelValue`]),l[19]||=c(`p`,{class:`crawl-resolve-hint`},`arXiv 按提交时间倒序,每页约 50 条;增大页数可抓取更早论文`,-1)]),_:1})):i(``,!0),K.value.target_type===`industry_news`?(r(),h(_,{key:1,label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[4]||=e=>K.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(_,{label:`条数上限`},{default:s(()=>[n(b,{modelValue:K.value.params.max_results,"onUpdate:modelValue":l[5]||=e=>K.value.params.max_results=e,min:1,max:K.value.target_type===`paper`?200:50},null,8,[`modelValue`,`max`])]),_:1})],64)):i(``,!0),K.value.target_type===`teacher`?(r(),e(u,{key:1},[n(_,{label:`搜索关键词(选填)`},{default:s(()=>[n(y,{modelValue:K.value.params.keyword,"onUpdate:modelValue":l[6]||=e=>K.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(_,{label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[7]||=e=>K.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(_,{label:`条数上限`},{default:s(()=>[n(b,{modelValue:K.value.params.max_results,"onUpdate:modelValue":l[8]||=e=>K.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(u,null,f(Ce.value,t=>(r(),h(_,{key:t.key,label:t.label,required:t.required},{default:s(()=>[t.type===`checkbox`?(r(),h(ae,{key:0,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e},{default:s(()=>[(r(!0),e(u,null,f(t.options,e=>(r(),h(ie,{key:e,value:e},{default:s(()=>[a(m(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),h(b,{key:1,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),h(y,{key:2,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),h(y,{key:3,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(x,{type:`primary`,"native-type":`submit`,loading:w.value},{default:s(()=>[...l[20]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),E.value?(r(),h(se,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:s(()=>[c(`p`,null,`地址:`+m(E.value.request_url||E.value.platform_url),1),E.value.source_name?(r(),e(`p`,fe,`采集源:`+m(E.value.source_name),1)):i(``,!0),c(`p`,null,`状态:`+m(E.value.status===`completed`?`已完成`:E.value.status),1),E.value.result_summary?(r(),e(`p`,pe,m(E.value.result_summary),1)):i(``,!0),E.value.items_imported==null?i(``,!0):(r(),e(`p`,me,`已入库 `+m(E.value.items_imported)+` 条`,1))]),_:1})):i(``,!0),E.value?(r(),e(`div`,he,[He()?(r(),h(x,{key:0,type:`primary`,onClick:Be},{default:s(()=>[a(` 查看抓取内容(`+m(E.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(x,{onClick:Ve},{default:s(()=>[...l[21]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(S,{shadow:`never`,class:`admin-list-card brief-card`},{default:s(()=>[c(`div`,ge,[l[23]||=c(`div`,null,[c(`h3`,{class:`brief-card-title`},`AI 科技成果周报`),c(`p`,{class:`brief-card-desc`},` 基于爬虫入库的论文与资讯,按周自动生成 Markdown 简报(默认统计上一自然周周一至周日)。 `)],-1),n(x,{type:`primary`,loading:B.value,onClick:Ge},{default:s(()=>[...l[22]||=[a(` 生成上周简报 `,-1)]]),_:1},8,[`loading`])]),d((r(),h(O,{data:V.value,"row-key":`id`,size:`small`},{default:s(()=>[n(C,{prop:`title`,label:`简报标题`,"min-width":`260`,"show-overflow-tooltip":``}),n(C,{label:`统计周期`,width:`200`},{default:s(({row:e})=>[a(m(Ue(e.week_start,e.week_end)),1)]),_:1}),n(C,{label:`论文`,width:`70`,align:`center`},{default:s(({row:e})=>[a(m(e.stats?.papers_count??0),1)]),_:1}),n(C,{label:`资讯`,width:`70`,align:`center`},{default:s(({row:e})=>[a(m(e.stats?.news_count??0),1)]),_:1}),n(C,{label:`生成时间`,width:`160`},{default:s(({row:e})=>[a(m(We(e.generated_at)),1)]),_:1}),n(C,{label:`操作`,width:`120`,fixed:`right`},{default:s(({row:e})=>[n(x,{type:`primary`,link:``,onClick:t=>Ke(e.id)},{default:s(()=>[...l[24]||=[a(`查看`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[J,z.value]]),c(`div`,_e,[n(k,{"current-page":U.value,"onUpdate:currentPage":l[9]||=e=>U.value=e,layout:`total, prev, pager, next`,total:H.value.total,"page-size":H.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1}),n(P,{modelValue:W.value,"onUpdate:modelValue":l[11]||=e=>W.value=e,title:G.value?.title||`AI 科技成果周报`,width:`920px`,top:`4vh`,"destroy-on-close":``,class:`brief-dialog`},{footer:s(()=>[n(x,{onClick:l[10]||=e=>W.value=!1},{default:s(()=>[...l[25]||=[a(`关闭`,-1)]]),_:1}),n(x,{disabled:!G.value,onClick:qe},{default:s(()=>[...l[26]||=[a(`复制 Markdown`,-1)]]),_:1},8,[`disabled`]),n(x,{type:`primary`,disabled:!G.value,onClick:Je},{default:s(()=>[...l[27]||=[a(`下载 .md`,-1)]]),_:1},8,[`disabled`])]),default:s(()=>[G.value?(r(),e(`div`,ve,[c(`span`,null,`统计周期:`+m(Ue(G.value.week_start,G.value.week_end)),1),c(`span`,null,`论文 `+m(G.value.stats?.papers_count??0)+` 篇`,1),c(`span`,null,`资讯 `+m(G.value.stats?.news_count??0)+` 条`,1)])):i(``,!0),G.value?(r(),e(`pre`,ye,m(G.value.markdown),1)):d((r(),e(`div`,be,null,512)),[[J,!0]])]),_:1},8,[`modelValue`,`title`]),n(P,{modelValue:A.value,"onUpdate:modelValue":l[15]||=e=>A.value=e,title:`本次抓取结果`,width:`960px`,"destroy-on-close":``},{footer:s(()=>[n(x,{type:`primary`,onClick:l[14]||=e=>A.value=!1},{default:s(()=>[...l[31]||=[a(`关闭`,-1)]]),_:1})]),default:s(()=>[K.value.target_type===`paper`?(r(),h(R,{key:0,modelValue:j.value,"onUpdate:modelValue":l[12]||=e=>j.value=e,class:`preview-tabs`},{default:s(()=>[n(I,{label:`论文(${M.value.length})`,name:`paper`},null,8,[`label`]),n(I,{label:`入库老师(${N.value.length})`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),d((r(),h(O,{data:Se.value,"row-key":`id`,size:`small`},{default:s(()=>[K.value.target_type===`paper`&&j.value===`paper`?(r(),e(u,{key:0},[n(C,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(C,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(C,{label:`发表日期`,width:`110`},{default:s(({row:e})=>[a(m(Oe(e.published_at)),1)]),_:1}),n(C,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):K.value.target_type===`paper`&&j.value===`teacher_lead`?(r(),e(u,{key:1},[n(C,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(C,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(C,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(C,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):K.value.target_type===`teacher`?(r(),e(u,{key:2},[n(C,{prop:`title`,label:`姓名`,width:`96`}),n(C,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_academic_title||`—`),1)]),_:1}),n(C,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(C,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(C,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(u,{key:3},[n(C,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(C,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(C,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.category_label||`—`),1)]),_:1}),n(C,{label:`发布时间`,width:`110`},{default:s(({row:e})=>[a(m(Oe(e.published_at)),1)]),_:1})],64)),n(C,{label:`状态`,width:`88`},{default:s(({row:e})=>[e.is_duplicate?(r(),h(q,{key:0,type:`info`,size:`small`},{default:s(()=>[...l[28]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),h(q,{key:1,type:`success`,size:`small`},{default:s(()=>[...l[29]||=[a(`已入库`,-1)]]),_:1})):(r(),h(q,{key:2,type:`warning`,size:`small`},{default:s(()=>[...l[30]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(C,{label:`链接`,width:`64`},{default:s(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:l[13]||=te(()=>{},[`stop`])},`查看`,8,xe)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[J,F.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-f0ed9aff`]]);export{w as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,S as i,T as a,X as ee,Y as o,at as s,b as c,f as te,ht as l,m as u,ot as d,q as f,rt as p,tn as m,x as h,y as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as _,o as ne,s as v}from"./index-CPrkFf57.js";import{n as re,t as y}from"./usePageLoad-B1L6ImD-.js";import{a as b,d as ie,f as ae,h as x,m as oe,p as se}from"./assets-DlFfPb4n.js";import{a as S}from"./dict-D-xskQUn.js";import{r as C}from"./crawl-addresses-D7PSrbmU.js";var ce={class:`list-page`},le={class:`page-header`},ue={key:0,class:`crawl-resolve-hint`},de={key:1,class:`crawl-resolve-hint`},fe={key:0},pe={key:1},me={key:2},he={key:1,class:`result-actions`},ge={class:`brief-card-head`},_e={class:`brief-pager`},ve={key:0,class:`brief-dialog-meta`},ye={key:1,class:`brief-markdown`},be={key:2,class:`brief-loading`},xe=[`href`],w=v(t({__name:`index`,setup(t){let v=ne(),w=l(!1),T=l(!1),E=l(null),D=l(null),O=l(null),k=null,A=l(!1),j=l(`paper`),M=l([]),N=l([]),P=l([]),F=l(!1),I=l([]),L=l([]),R=l({}),z=l(!1),B=l(!1),V=l([]),H=l({current_page:1,per_page:10,total:0}),U=l(1),W=l(!1),G=l(null),K=l({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),q={paper:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用逗号或换行分隔,如:graph neural, AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:1,min:1,max:20,placeholder:`arXiv 按提交时间分页,每页 50 条`},{key:`max_results`,type:`number`,label:`条数上限`,default:50,min:1,max:200}],industry_news:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:5,min:1,max:50},{key:`max_results`,type:`number`,label:`条数上限`,default:30,min:1,max:50}]},J=l([]),Se=g(()=>K.value.target_type===`teacher`?P.value:j.value===`teacher_lead`?N.value:M.value),Ce=g(()=>K.value.target_type===`teacher`?J.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function we(e){return e===`paper`||e===`industry_news`?q[e]:[]}function Y(e,t=!0){let n=we(e);if(n.length===0)return;J.value=n;let r=t?{...K.value.params}:{};if(je(n),t)for(let e of n)r[e.key]!==void 0&&(K.value.params[e.key]=r[e.key])}function Te(){K.value.target_type===`teacher`&&(K.value.params.keyword===void 0&&(K.value.params.keyword=``),K.value.params.max_results===void 0&&(K.value.params.max_results=200),K.value.params.max_pages===void 0&&(K.value.params.max_pages=5))}function Ee(){K.value.target_type===`industry_news`&&(K.value.params.keyword===void 0&&(K.value.params.keyword=``),K.value.params.max_pages===void 0&&(K.value.params.max_pages=5),K.value.params.max_results===void 0&&(K.value.params.max_results=30))}function De(e){(e===`paper`||e===`industry_news`)&&(Y(e,!0),e===`industry_news`&&Ee())}function Oe(e){if(!e)return`—`;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function ke(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function Ae(e){return[...e].sort((e,t)=>{let n=ke(e);return n===ke(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function je(e){let t={};for(let n of e)n.type===`checkbox`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:n.type===`number`?t[n.key]=n.default??20:t[n.key]=n.default??``;K.value.params=t}function Me(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function X(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function Ne(e,t){let n=X(e),r=L.value.find(e=>X(e.request_url)===n);r?(t?.fillKeyword&&r.keyword&&(K.value.params.keyword=r.keyword),R.value={},r.category_dict_item_id&&(R.value.category_dict_item_id=r.category_dict_item_id),R.value.source_name=r.name,r.university_id&&(R.value.university_id=r.university_id),r.department&&(R.value.department=r.department)):R.value={}}async function Pe(e){try{L.value=await C(e)}catch{L.value=[]}}function Z(){E.value=null,A.value=!1,M.value=[],N.value=[],P.value=[]}async function Fe(){Z(),j.value=`paper`,w.value=!1,K.value={target_type:`paper`,request_url:Me(`paper`),params:{}},D.value=null,O.value=null,R.value={},J.value=[],De(`paper`),await Pe(`paper`),Q()}async function Q(){if(k)return k;k=(async()=>{if(!K.value.request_url){D.value=null,O.value=null;return}let e=X(K.value.request_url);e!==K.value.request_url&&(K.value.request_url=e);let t=K.value.target_type;(t===`paper`||t===`industry_news`)&&Y(t,!0),T.value=!0;try{D.value=await oe({request_url:K.value.request_url,target_type:t}),O.value=K.value.request_url,t===`teacher`?(J.value=D.value.param_schema?.fields??[],je(J.value),Te()):Y(t,!0)}catch{D.value=null,O.value=null,t===`teacher`?J.value=[]:Y(t,!0)}finally{T.value=!1}})();try{await k}finally{k=null}}async function Ie(){if(!K.value.request_url.trim())return _.warning(`请填写目标地址`),!1;let e=X(K.value.request_url);return e!==K.value.request_url&&(K.value.request_url=e),(!D.value||O.value!==K.value.request_url)&&await Q(),!!D.value}async function Le(){if(K.value.request_url.trim()){let e=L.value.some(e=>X(e.request_url)===X(K.value.request_url));Ne(K.value.request_url,{fillKeyword:e})}else R.value={};await Q()}p(()=>K.value.target_type,e=>{Z(),D.value=null,O.value=null,R.value={},J.value=[],K.value.request_url=Me(e),e===`teacher`?Te():(e===`paper`||e===`industry_news`)&&Y(e,!1),Pe(e),Q()});async function Re(){if(!await Ie()){_.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}w.value=!0;try{Ne(K.value.request_url);let e={target_type:K.value.target_type,request_url:K.value.request_url,params:K.value.params};if(K.value.target_type===`industry_news`&&(R.value.category_dict_item_id||R.value.source_name)&&(e.news_defaults={...R.value.category_dict_item_id?{category_dict_item_id:R.value.category_dict_item_id}:{},...R.value.source_name?{source:R.value.source_name}:{}}),K.value.target_type===`teacher`){let t={};R.value.university_id&&(t.university_id=R.value.university_id),R.value.department&&(t.department=R.value.department),Object.keys(t).length>0&&(e.teacher_defaults=t)}E.value=await x(e),_.success(E.value.result_summary||`抓取完成,已入库 ${E.value.items_imported??0} 条`)}finally{w.value=!1}}async function ze(){if(!(I.value.length>0))try{I.value=(await S(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{_.warning(`资讯分类加载失败`)}}async function Be(){if(E.value?.id){F.value=!0,A.value=!0,j.value=K.value.target_type===`teacher`?`teacher`:`paper`;try{K.value.target_type===`industry_news`&&await ze();let e=E.value.id;if(K.value.target_type===`paper`){let[t,n]=await Promise.all([b(e,{item_kind:`paper`}),b(e,{item_kind:`teacher_lead`})]);M.value=t,N.value=Ae(n)}else K.value.target_type===`teacher`?P.value=await b(e,{item_kind:`teacher`}):M.value=await b(e)}finally{F.value=!1}}}function Ve(){E.value?.id&&(K.value.target_type===`paper`?v.push({path:`/papers`,query:{crawl_job_id:String(E.value.id)}}):K.value.target_type===`teacher`?v.push({path:`/teachers`}):v.push({path:`/news`,query:{crawl_job_id:String(E.value.id)}}))}let He=()=>E.value?.status===`completed`&&(E.value.items_fetched??0)>0;function Ue(e,t){return!e||!t?`—`:`${e} 至 ${t}`}function We(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}async function $(){z.value=!0;try{let e=await ae({page:U.value,page_size:H.value.per_page});V.value=e.items,H.value=e.meta}catch{V.value=[]}finally{z.value=!1}}async function Ge(){B.value=!0;try{let e=await se();_.success(`周报已生成`),U.value=1,await $(),await Ke(e.id)}catch(e){let t=e instanceof Error?e.message:`周报生成失败`;_.error(t)}finally{B.value=!1}}async function Ke(e){W.value=!0,G.value=null;try{G.value=await ie(e)}catch{_.error(`加载周报失败`),W.value=!1}}async function qe(){if(G.value?.markdown)try{await navigator.clipboard.writeText(G.value.markdown),_.success(`已复制 Markdown`)}catch{_.error(`复制失败`)}}function Je(){if(!G.value?.markdown)return;let e=new Blob([G.value.markdown],{type:`text/markdown;charset=utf-8`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`AI科技成果简报_${G.value.week_start}_${G.value.week_end}.md`,n.click(),URL.revokeObjectURL(t)}return y(async()=>{await Fe(),await $()}),(t,l)=>{let p=o(`el-radio`),g=o(`el-radio-group`),_=o(`el-form-item`),ne=o(`el-option`),v=o(`el-select`),y=o(`el-input`),b=o(`el-input-number`),ie=o(`el-checkbox`),ae=o(`el-checkbox-group`),x=o(`el-button`),oe=o(`el-form`),se=o(`el-alert`),S=o(`el-card`),C=o(`el-table-column`),O=o(`el-table`),k=o(`el-pagination`),P=o(`el-dialog`),I=o(`el-tab-pane`),R=o(`el-tabs`),q=o(`el-tag`),J=ee(`loading`);return r(),e(`div`,ce,[c(`div`,le,[n(re)]),n(S,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(oe,{"label-position":`top`,class:`crawler-form`,onSubmit:te(Re,[`prevent`])},{default:s(()=>[n(_,{label:`入库类型`,required:``},{default:s(()=>[n(g,{modelValue:K.value.target_type,"onUpdate:modelValue":l[0]||=e=>K.value.target_type=e},{default:s(()=>[n(p,{label:`paper`},{default:s(()=>[...l[16]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(p,{label:`industry_news`},{default:s(()=>[...l[17]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(p,{label:`teacher`},{default:s(()=>[...l[18]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(_,{label:`目标地址`,required:``},{default:s(()=>[n(v,{modelValue:K.value.request_url,"onUpdate:modelValue":l[1]||=e=>K.value.request_url=e,filterable:``,"allow-create":``,"default-first-option":``,clearable:``,placeholder:`从爬虫地址选择或输入 URL`,class:`crawl-url-select`,onChange:Le},{default:s(()=>[(r(!0),e(u,null,f(L.value,e=>(r(),h(ne,{key:e.id,label:e.name,value:e.request_url},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),T.value?(r(),e(`p`,ue,`正在识别采集源…`)):D.value?.source_name?(r(),e(`p`,de,` 已识别采集源:`+m(D.value.source_name),1)):i(``,!0)]),_:1}),K.value.target_type===`paper`||K.value.target_type===`industry_news`?(r(),e(u,{key:0},[n(_,{label:`搜索关键词(选填)`},{default:s(()=>[n(y,{modelValue:K.value.params.keyword,"onUpdate:modelValue":l[2]||=e=>K.value.params.keyword=e,type:`textarea`,rows:2,placeholder:K.value.target_type===`paper`?`多个关键词用逗号或换行分隔,如:graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),K.value.target_type===`paper`?(r(),h(_,{key:0,label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[3]||=e=>K.value.params.max_pages=e,min:1,max:20},null,8,[`modelValue`]),l[19]||=c(`p`,{class:`crawl-resolve-hint`},`arXiv 按提交时间倒序,每页约 50 条;增大页数可抓取更早论文`,-1)]),_:1})):i(``,!0),K.value.target_type===`industry_news`?(r(),h(_,{key:1,label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[4]||=e=>K.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(_,{label:`条数上限`},{default:s(()=>[n(b,{modelValue:K.value.params.max_results,"onUpdate:modelValue":l[5]||=e=>K.value.params.max_results=e,min:1,max:K.value.target_type===`paper`?200:50},null,8,[`modelValue`,`max`])]),_:1})],64)):i(``,!0),K.value.target_type===`teacher`?(r(),e(u,{key:1},[n(_,{label:`搜索关键词(选填)`},{default:s(()=>[n(y,{modelValue:K.value.params.keyword,"onUpdate:modelValue":l[6]||=e=>K.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(_,{label:`抓取页数`},{default:s(()=>[n(b,{modelValue:K.value.params.max_pages,"onUpdate:modelValue":l[7]||=e=>K.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(_,{label:`条数上限`},{default:s(()=>[n(b,{modelValue:K.value.params.max_results,"onUpdate:modelValue":l[8]||=e=>K.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(u,null,f(Ce.value,t=>(r(),h(_,{key:t.key,label:t.label,required:t.required},{default:s(()=>[t.type===`checkbox`?(r(),h(ae,{key:0,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e},{default:s(()=>[(r(!0),e(u,null,f(t.options,e=>(r(),h(ie,{key:e,value:e},{default:s(()=>[a(m(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),h(b,{key:1,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),h(y,{key:2,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),h(y,{key:3,modelValue:K.value.params[t.key],"onUpdate:modelValue":e=>K.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(x,{type:`primary`,"native-type":`submit`,loading:w.value},{default:s(()=>[...l[20]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),E.value?(r(),h(se,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:s(()=>[c(`p`,null,`地址:`+m(E.value.request_url||E.value.platform_url),1),E.value.source_name?(r(),e(`p`,fe,`采集源:`+m(E.value.source_name),1)):i(``,!0),c(`p`,null,`状态:`+m(E.value.status===`completed`?`已完成`:E.value.status),1),E.value.result_summary?(r(),e(`p`,pe,m(E.value.result_summary),1)):i(``,!0),E.value.items_imported==null?i(``,!0):(r(),e(`p`,me,`已入库 `+m(E.value.items_imported)+` 条`,1))]),_:1})):i(``,!0),E.value?(r(),e(`div`,he,[He()?(r(),h(x,{key:0,type:`primary`,onClick:Be},{default:s(()=>[a(` 查看抓取内容(`+m(E.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(x,{onClick:Ve},{default:s(()=>[...l[21]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(S,{shadow:`never`,class:`admin-list-card brief-card`},{default:s(()=>[c(`div`,ge,[l[23]||=c(`div`,null,[c(`h3`,{class:`brief-card-title`},`AI 科技成果周报`),c(`p`,{class:`brief-card-desc`},` 基于爬虫入库的论文与资讯,按周自动生成 Markdown 简报(默认统计上一自然周周一至周日)。 `)],-1),n(x,{type:`primary`,loading:B.value,onClick:Ge},{default:s(()=>[...l[22]||=[a(` 生成上周简报 `,-1)]]),_:1},8,[`loading`])]),d((r(),h(O,{data:V.value,"row-key":`id`,size:`small`},{default:s(()=>[n(C,{prop:`title`,label:`简报标题`,"min-width":`260`,"show-overflow-tooltip":``}),n(C,{label:`统计周期`,width:`200`},{default:s(({row:e})=>[a(m(Ue(e.week_start,e.week_end)),1)]),_:1}),n(C,{label:`论文`,width:`70`,align:`center`},{default:s(({row:e})=>[a(m(e.stats?.papers_count??0),1)]),_:1}),n(C,{label:`资讯`,width:`70`,align:`center`},{default:s(({row:e})=>[a(m(e.stats?.news_count??0),1)]),_:1}),n(C,{label:`生成时间`,width:`160`},{default:s(({row:e})=>[a(m(We(e.generated_at)),1)]),_:1}),n(C,{label:`操作`,width:`120`,fixed:`right`},{default:s(({row:e})=>[n(x,{type:`primary`,link:``,onClick:t=>Ke(e.id)},{default:s(()=>[...l[24]||=[a(`查看`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[J,z.value]]),c(`div`,_e,[n(k,{"current-page":U.value,"onUpdate:currentPage":l[9]||=e=>U.value=e,layout:`total, prev, pager, next`,total:H.value.total,"page-size":H.value.per_page,onCurrentChange:$},null,8,[`current-page`,`total`,`page-size`])])]),_:1}),n(P,{modelValue:W.value,"onUpdate:modelValue":l[11]||=e=>W.value=e,title:G.value?.title||`AI 科技成果周报`,width:`920px`,top:`4vh`,"destroy-on-close":``,class:`brief-dialog`},{footer:s(()=>[n(x,{onClick:l[10]||=e=>W.value=!1},{default:s(()=>[...l[25]||=[a(`关闭`,-1)]]),_:1}),n(x,{disabled:!G.value,onClick:qe},{default:s(()=>[...l[26]||=[a(`复制 Markdown`,-1)]]),_:1},8,[`disabled`]),n(x,{type:`primary`,disabled:!G.value,onClick:Je},{default:s(()=>[...l[27]||=[a(`下载 .md`,-1)]]),_:1},8,[`disabled`])]),default:s(()=>[G.value?(r(),e(`div`,ve,[c(`span`,null,`统计周期:`+m(Ue(G.value.week_start,G.value.week_end)),1),c(`span`,null,`论文 `+m(G.value.stats?.papers_count??0)+` 篇`,1),c(`span`,null,`资讯 `+m(G.value.stats?.news_count??0)+` 条`,1)])):i(``,!0),G.value?(r(),e(`pre`,ye,m(G.value.markdown),1)):d((r(),e(`div`,be,null,512)),[[J,!0]])]),_:1},8,[`modelValue`,`title`]),n(P,{modelValue:A.value,"onUpdate:modelValue":l[15]||=e=>A.value=e,title:`本次抓取结果`,width:`960px`,"destroy-on-close":``},{footer:s(()=>[n(x,{type:`primary`,onClick:l[14]||=e=>A.value=!1},{default:s(()=>[...l[31]||=[a(`关闭`,-1)]]),_:1})]),default:s(()=>[K.value.target_type===`paper`?(r(),h(R,{key:0,modelValue:j.value,"onUpdate:modelValue":l[12]||=e=>j.value=e,class:`preview-tabs`},{default:s(()=>[n(I,{label:`论文(${M.value.length})`,name:`paper`},null,8,[`label`]),n(I,{label:`入库老师(${N.value.length})`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),d((r(),h(O,{data:Se.value,"row-key":`id`,size:`small`},{default:s(()=>[K.value.target_type===`paper`&&j.value===`paper`?(r(),e(u,{key:0},[n(C,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(C,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(C,{label:`发表日期`,width:`110`},{default:s(({row:e})=>[a(m(Oe(e.published_at)),1)]),_:1}),n(C,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):K.value.target_type===`paper`&&j.value===`teacher_lead`?(r(),e(u,{key:1},[n(C,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(C,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(C,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(C,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):K.value.target_type===`teacher`?(r(),e(u,{key:2},[n(C,{prop:`title`,label:`姓名`,width:`96`}),n(C,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_academic_title||`—`),1)]),_:1}),n(C,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(C,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(C,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(u,{key:3},[n(C,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(C,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(C,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(m(e.category_label||`—`),1)]),_:1}),n(C,{label:`发布时间`,width:`110`},{default:s(({row:e})=>[a(m(Oe(e.published_at)),1)]),_:1})],64)),n(C,{label:`状态`,width:`88`},{default:s(({row:e})=>[e.is_duplicate?(r(),h(q,{key:0,type:`info`,size:`small`},{default:s(()=>[...l[28]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),h(q,{key:1,type:`success`,size:`small`},{default:s(()=>[...l[29]||=[a(`已入库`,-1)]]),_:1})):(r(),h(q,{key:2,type:`warning`,size:`small`},{default:s(()=>[...l[30]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(C,{label:`链接`,width:`64`},{default:s(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:l[13]||=te(()=>{},[`stop`])},`查看`,8,xe)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[J,F.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-f0ed9aff`]]);export{w as default}; \ No newline at end of file diff --git a/public/admin/assets/csv-export-CMyUqpMf.js b/public/admin/assets/csv-export-Cl9Lwtz8.js similarity index 99% rename from public/admin/assets/csv-export-CMyUqpMf.js rename to public/admin/assets/csv-export-Cl9Lwtz8.js index 76faff0..9e18666 100644 --- a/public/admin/assets/csv-export-CMyUqpMf.js +++ b/public/admin/assets/csv-export-Cl9Lwtz8.js @@ -1,4 +1,4 @@ -import{a as e,t}from"./rolldown-runtime-BYbx6iT9.js";import{C as n,D as r,E as i,G as a,S as o,T as s,Y as c,at as l,b as u,ht as d,rt as f,tn as p,x as m,z as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{i as g,r as _,s as v}from"./index-DHoSHxJa.js";async function y(e){try{let{data:t}=await _.get(`/admin/v1/signin-qrcode`,{params:{code:e},responseType:`blob`});return t}catch(e){throw g.isAxiosError(e)&&e.response?.data instanceof Blob?Error(await b(e.response.data)):e}}async function b(e){try{let t=await e.text();return JSON.parse(t).message||`生成小程序码失败`}catch{return`生成小程序码失败`}}var x=t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),S=t((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),C=t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),w=t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),T=t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),E=t((e=>{var t=S().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e{var t=S().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),O=t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t{var t=C(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),A=t((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),j=t((e=>{var t=A();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i=0;){let e=r[0];for(let i=0;i{var n=j();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),N=t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),P=t((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r +import{a as e,t}from"./rolldown-runtime-BYbx6iT9.js";import{C as n,D as r,E as i,G as a,S as o,T as s,Y as c,at as l,b as u,ht as d,rt as f,tn as p,x as m,z as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{i as g,r as _,s as v}from"./index-CPrkFf57.js";async function y(e){try{let{data:t}=await _.get(`/admin/v1/signin-qrcode`,{params:{code:e},responseType:`blob`});return t}catch(e){throw g.isAxiosError(e)&&e.response?.data instanceof Blob?Error(await b(e.response.data)):e}}async function b(e){try{let t=await e.text();return JSON.parse(t).message||`生成小程序码失败`}catch{return`生成小程序码失败`}}var x=t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),S=t((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),C=t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),w=t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),T=t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),E=t((e=>{var t=S().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e{var t=S().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),O=t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t{var t=C(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),A=t((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),j=t((e=>{var t=A();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i=0;){let e=r[0];for(let i=0;i{var n=j();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),N=t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),P=t((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r ]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^`+t+`$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),F=t((e=>{var t=N(),n=P();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),I=t((e=>{var t=S(),n=k(),r=C(),i=F(),a=N(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<{var t=S(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<{var n=F();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),L=t(((e,t)=>{var n=F(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),R=t(((e,t)=>{var n=F();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t{var n=F(),r=S();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+` Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),B=t(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),V=t((e=>{var t=F(),n=te(),r=L(),i=R(),a=z(),o=P(),s=S(),c=B();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r{var t=S(),n=C(),r=w(),i=T(),a=E(),o=D(),s=O(),c=k(),l=M(),u=I(),d=ee(),f=F(),p=V();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;ee?.trim()).filter(Boolean);return t.length?t.join(`、`):`—`}function k(e){return e.news?.title?e.news.title:e.news_link_url?e.news_link_url:`—`}function A(e){return e.starts_at?e.starts_at.replace(`T`,` `).slice(0,16):`—`}function j(e){return e.ends_at?e.ends_at.replace(`T`,` `).slice(0,16):`—`}async function M(){let e=o.event;if(e){v.value=!0,S.value=null,C.value=null,w.value=[];try{e.type===`course`?S.value=await ee(e.entity_id):(C.value=await I(e.entity_id),w.value=await L(e.entity_id))}catch{D.error(`加载详情失败`),a.value=!1}finally{v.value=!1}}}y(()=>[a.value,o.event?.entity_id,o.event?.type,o.event?.start_date],([e])=>{e&&o.event&&M()});let N=()=>o.event?o.event.type===`course`?`课程详情`:`活动详情`:`详情`;return(o,m)=>{let h=d(`el-descriptions-item`),y=d(`el-descriptions`),D=d(`el-table-column`),M=d(`el-table`),P=d(`el-empty`),F=d(`el-button`),I=d(`el-dialog`),L=l(`loading`);return i(),x(I,{modelValue:a.value,"onUpdate:modelValue":m[1]||=e=>a.value=e,title:N(),width:`960px`,top:`5vh`,"destroy-on-close":``,"append-to-body":``,class:`calendar-event-detail-dialog`},{footer:f(()=>[r(F,{onClick:m[0]||=e=>a.value=!1},{default:f(()=>[...m[9]||=[c(`关闭`,-1)]]),_:1})]),default:f(()=>[_((i(),e(`div`,ne,[n.event&&S.value&&n.event.type===`course`?(i(),e(g,{key:0},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`课程体系`},{default:f(()=>[c(b(S.value.course_system_item?.label||`—`),1)]),_:1}),r(h,{label:`课程名称`,span:2},{default:f(()=>[c(b(S.value.title),1)]),_:1}),r(h,{label:`课程类型`},{default:f(()=>[c(b(S.value.course_type_item?.label||`—`),1)]),_:1}),r(h,{label:`开课人数`},{default:f(()=>[c(b(T(S.value.capacity)),1)]),_:1}),r(h,{label:`开课日期`},{default:f(()=>[c(b(t(z)(S.value.teach_start_date,S.value.teach_end_date)),1)]),_:1}),r(h,{label:`开课时间`},{default:f(()=>[c(b(E(S.value.teach_start_time,S.value.teach_end_time)),1)]),_:1}),r(h,{label:`报名起止`,span:2},{default:f(()=>[c(b(t(z)(S.value.signup_start_date,S.value.signup_end_date)),1)]),_:1}),r(h,{label:`地点`},{default:f(()=>[c(b(T(S.value.location)),1)]),_:1}),r(h,{label:`关联资讯`,span:2},{default:f(()=>[c(b(k(S.value)),1)]),_:1}),r(h,{label:`课程状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(S.value.progress_status)])},b(t(R)(S.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(S.value.published)])},b(S.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,re,[m[2]||=p(`div`,{class:`detail-section-label`},`课程封面(690×400)`,-1),S.value.cover?.url?(i(),e(`div`,H,[p(`img`,{src:S.value.cover.url,alt:`课程封面`},null,8,U)])):(i(),e(`div`,W,`—`))]),p(`div`,G,[m[3]||=p(`div`,{class:`detail-section-label`},`课程宣传页(宽 750)`,-1),S.value.promo?.url?(i(),e(`div`,K,[p(`img`,{src:S.value.promo.url,alt:`课程宣传页`},null,8,q)])):(i(),e(`div`,J,`—`))]),p(`div`,Y,[m[4]||=p(`div`,{class:`detail-section-label`},`招生对象`,-1),p(`div`,X,b(O(S.value.recruit_targets)),1)]),p(`div`,ie,[m[5]||=p(`div`,{class:`detail-section-label`},`主讲师资`,-1),S.value.main_speakers?.length?(i(),x(M,{key:0,data:S.value.main_speakers,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{type:`index`,label:`序号`,width:`56`,index:e=>e+1},null,8,[`index`]),r(D,{prop:`name`,label:`姓名`,"min-width":`100`}),r(D,{prop:`title`,label:`职称`,"min-width":`100`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{prop:`university`,label:`高校`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.university)),1)]),_:1}),r(D,{prop:`remark`,label:`备注`,"min-width":`140`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.remark)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ae,`—`))]),p(`div`,oe,[m[6]||=p(`div`,{class:`detail-section-label`},`课程简介`,-1),S.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:S.value.intro_html},null,8,se)):(i(),e(`div`,ce,`—`))])],64)):n.event&&C.value&&n.event.type===`activity`?(i(),e(g,{key:1},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`活动名称`,span:2},{default:f(()=>[c(b(C.value.title),1)]),_:1}),r(h,{label:`活动类型`},{default:f(()=>[c(b(C.value.activity_type_item?.label||`—`),1)]),_:1}),r(h,{label:`场次`},{default:f(()=>[c(b(C.value.sessions_count??w.value.length),1)]),_:1}),r(h,{label:`活动日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.event_start_date,C.value.event_end_date)),1)]),_:1}),r(h,{label:`报名起止日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.signup_start_date,C.value.signup_end_date)),1)]),_:1}),r(h,{label:`活动地点`,span:2},{default:f(()=>[c(b(T(C.value.location)),1)]),_:1}),r(h,{label:`活动状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(C.value.progress_status)])},b(t(R)(C.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(C.value.published)])},b(C.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,le,[m[7]||=p(`div`,{class:`detail-section-label`},`活动场次`,-1),w.value.length?(i(),x(M,{key:0,data:w.value,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{label:`场次标题`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{label:`开始时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(A(e)),1)]),_:1}),r(D,{label:`结束时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(j(e)),1)]),_:1}),r(D,{label:`地点`,"min-width":`120`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.venue)),1)]),_:1}),r(D,{label:`名额`,width:`80`,align:`center`},{default:f(({row:e})=>[c(b(T(e.capacity)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ue,`—`))]),p(`div`,de,[m[8]||=p(`div`,{class:`detail-section-label`},`活动简介`,-1),C.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:C.value.intro_html},null,8,fe)):(i(),e(`div`,pe,`—`))])],64)):!v.value&&a.value?(i(),x(P,{key:2,description:`暂无详情`})):s(``,!0)])),[[L,v.value]])]),_:1},8,[`modelValue`,`title`])}}}),[[`__scopeId`,`data-v-73e6423f`]]);function Z(e,t){return e.localeCompare(t)}function he(e,t,n,r){let i=e+t-1,a=n+r-1;return!(ia)}function ge(e){let t=[];return e.slice().sort((e,t)=>e.startCol-t.startCol||t.span-e.span).map(e=>{let n=0;for(;;){if(t[n]??=[],!t[n].some(t=>he(e.startCol,e.span,t.startCol,t.endCol-t.startCol+1)))return t[n].push({startCol:e.startCol,endCol:e.startCol+e.span-1}),{...e,row:n+1};n+=1}})}function _e(e,t,n){if(!e.length)return[];let r=e[0],i=e[e.length-1],a=[];for(let o of t){if(Z(o.end_date,r)<0||Z(o.start_date,i)>0)continue;let t=Z(o.start_date,r)>0?o.start_date:r,s=Z(o.end_date,i)<0?o.end_date:i,c=e.indexOf(t),l=e.indexOf(s);c<0||l<0||a.push({id:`${o.type}-${o.entity_id}-${o.title}-${t}-${s}`,startCol:c+1,span:l-c+1,showTitle:t===o.start_date,isPast:Z(s,n)<0,event:o})}return ge(a)}function ve(e,t,n,r){let i=new Date(e,t-1,1),a=new Date(e,t,0),o=(i.getDay()+6)%7,s=[],c=new Set;for(let e of r)for(let t of ye(e.start_date,e.end_date))c.add(t);for(let r=o;r>0;--r){let i=new Date(e,t-1,1-r),a=Q(i);s.push({key:`p-${a}`,day:i.getDate(),dateStr:a,muted:!0,past:Z(a,n)<0,isToday:a===n,hasEvent:c.has(a)})}for(let r=1;r<=a.getDate();r+=1){let i=`${e}-${String(t).padStart(2,`0`)}-${String(r).padStart(2,`0`)}`;s.push({key:i,day:r,dateStr:i,muted:!1,past:Z(i,n)<0,isToday:i===n,hasEvent:c.has(i)})}for(;s.length%7!=0;){let r=s.length-(o+a.getDate()),i=new Date(e,t,r+1),l=Q(i);s.push({key:`n-${l}`,day:i.getDate(),dateStr:l,muted:!0,past:Z(l,n)<0,isToday:l===n,hasEvent:c.has(l)})}let l=[];for(let e=0;ee.dateStr),r,n);l.push({cells:t,bars:i,barRows:i.reduce((e,t)=>Math.max(e,t.row),0)})}return l}function Q(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ye(e,t){let n=[],r=new Date(`${e}T00:00:00`),i=new Date(`${t}T00:00:00`);for(;r<=i&&(n.push(Q(r)),r.setDate(r.getDate()+1),!(n.length>31)););return n}var be={class:`dashboard-page executive-dashboard dashboard-v2`},xe={class:`page-head`},Se={class:`dashboard-grid-row`},Ce={class:`dashboard-card dashboard-overview-card`},we={class:`executive-metric-grid dashboard-overview-grid-compact`},Te={class:`executive-metric`},Ee={class:`metric-head`},De={class:`metric-icon`},Oe={class:`executive-metric`},ke={class:`metric-head`},Ae={class:`metric-icon`},je={class:`executive-metric`},Me={class:`metric-head`},Ne={class:`metric-icon`},Pe={class:`executive-metric`},Fe={class:`metric-head`},Ie={class:`metric-icon`},Le={class:`dashboard-card`},Re={class:`card-head card-head-row`},ze={class:`dashboard-count-badge`},Be={class:`dashboard-todo-list`},Ve={class:`dashboard-todo-icon`},He={class:`dashboard-todo-icon`},Ue={class:`dashboard-todo-icon`},We={class:`dashboard-card`},Ge={class:`card-head card-head-row`},Ke={class:`dashboard-calendar-actions`},qe={class:`dashboard-event-list`},Je={class:`dashboard-event-row`},$={class:`event-row-icon`},Ye={class:`dashboard-event-row`},Xe={class:`event-row-icon`},Ze={class:`dashboard-event-row`},Qe={class:`event-row-icon`},$e={class:`dashboard-event-row`},et={class:`event-row-icon`},tt={class:`dashboard-calendar`},nt={class:`calendar-grid calendar-grid-heads`},rt={class:`calendar-weeks`},it={class:`calendar-day-num`},at=[`title`,`onClick`],ot={key:0,class:`calendar-event-span-text`},st=M(n({__name:`index`,setup(n){let a=k(),c=h(!1),m=h(null),y=h(!1),x=h(null),D=[`一`,`二`,`三`,`四`,`五`,`六`,`日`],j=S(()=>{if(!m.value)return[];let{year:e,month:t,today:n,events:r}=m.value.calendar;return ve(e,t,n,r)});async function M(){c.value=!0;try{m.value=await te()}finally{c.value=!1}}function I(e){a.push(e)}function L(e){x.value={start_date:e.start_date,end_date:e.end_date,type:e.type,title:e.title,entity_id:e.entity_id},y.value=!0}return F(M),(n,a)=>{let h=d(`el-icon`),S=l(`loading`);return _((i(),e(`div`,be,[p(`div`,xe,[r(P,{variant:`dashboard`})]),m.value?(i(),e(g,{key:0},[p(`div`,Se,[p(`section`,Ce,[a[10]||=p(`div`,{class:`card-head`},[p(`h2`,{class:`dashboard-section-title`},`经营总览`)],-1),p(`div`,we,[p(`div`,Te,[p(`div`,Ee,[a[6]||=p(`span`,null,`高校覆盖`,-1),p(`span`,De,[r(h,null,{default:f(()=>[r(t(w))]),_:1})])]),p(`strong`,null,b(m.value.overview.universities.total),1)]),p(`div`,Oe,[p(`div`,ke,[a[7]||=p(`span`,null,`老师资产`,-1),p(`span`,Ae,[r(h,null,{default:f(()=>[r(t(C))]),_:1})])]),p(`strong`,null,b(m.value.overview.teachers.total),1),p(`em`,null,`本月 +`+b(m.value.overview.teachers.month_new)+`,五星 `+b(m.value.overview.teachers.five_star),1)]),p(`div`,je,[p(`div`,Me,[a[8]||=p(`span`,null,`论文发现`,-1),p(`span`,Ne,[r(h,null,{default:f(()=>[r(t(E))]),_:1})])]),p(`strong`,null,b(m.value.overview.papers.total),1),p(`em`,null,`本月新增 `+b(m.value.overview.papers.month_new)+`,待关联老师 `+b(m.value.overview.papers.pending_link),1)]),p(`div`,Pe,[p(`div`,Fe,[a[9]||=p(`span`,null,`需求履约率`,-1),p(`span`,Ie,[r(h,null,{default:f(()=>[r(t(O))]),_:1})])]),p(`strong`,null,b(m.value.overview.demands.fulfillment_rate)+`%`,1),p(`em`,null,b(m.value.overview.demands.total)+` 条需求,`+b(m.value.overview.demands.done)+` 条已完成`,1)])])]),p(`section`,Le,[p(`div`,Re,[a[11]||=p(`h2`,{class:`dashboard-section-title`},`待办`,-1),p(`span`,ze,b(m.value.todos.total)+` 项`,1)]),p(`div`,Be,[p(`button`,{type:`button`,class:`dashboard-todo-card is-urgent`,onClick:a[0]||=e=>I(`/teachers`)},[p(`span`,Ve,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[12]||=p(`span`,null,[p(`b`,null,`老师跟进`),p(`em`,null,`高星老师逾期回访,需补跟进记录`)],-1),p(`strong`,null,b(m.value.todos.teacher_follow),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card is-warning`,onClick:a[1]||=e=>I(`/demands`)},[p(`span`,He,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),p(`span`,null,[a[13]||=p(`b`,null,`需求处理`,-1),p(`em`,null,b(m.value.todos.demand_overdue)+` 条需求逾期,`+b(m.value.todos.demand_waiting)+` 条等待资源匹配`,1)]),p(`strong`,null,b(m.value.todos.demand_process),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card`,onClick:a[2]||=e=>I(`/papers`)},[p(`span`,Ue,[r(h,null,{default:f(()=>[r(t(E))]),_:1})]),a[14]||=p(`span`,null,[p(`b`,null,`论文数据`),p(`em`,null,`近30天入库且未关联老师`)],-1),p(`strong`,null,b(m.value.todos.paper_data),1)])])])]),p(`section`,We,[p(`div`,Ge,[a[17]||=p(`div`,null,[p(`h2`,{class:`dashboard-section-title`},`课程、活动日历`)],-1),p(`div`,Ke,[p(`button`,{type:`button`,onClick:a[3]||=e=>I(`/courses`)},[r(h,null,{default:f(()=>[r(t(N))]),_:1}),a[15]||=p(`span`,null,`课程`,-1)]),p(`button`,{type:`button`,onClick:a[4]||=e=>I(`/activities`)},[r(h,null,{default:f(()=>[r(t(T))]),_:1}),a[16]||=p(`span`,null,`活动`,-1)])])]),p(`div`,qe,[p(`div`,Je,[p(`span`,$,[r(h,null,{default:f(()=>[r(t(N))]),_:1})]),a[18]||=p(`span`,null,`课程排期`,-1),p(`strong`,null,b(m.value.events.course_sessions),1),p(`em`,null,b(m.value.events.course_draft)+` 场待发布`,1)]),p(`div`,Ye,[p(`span`,Xe,[r(h,null,{default:f(()=>[r(t(T))]),_:1})]),a[19]||=p(`span`,null,`活动排期`,-1),p(`strong`,null,b(m.value.events.activity_sessions),1),p(`em`,null,b(m.value.events.activity_open)+` 场报名中`,1)]),p(`div`,Ze,[p(`span`,Qe,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[20]||=p(`span`,null,`报名人数`,-1),p(`strong`,null,b(m.value.events.signup_total),1),p(`em`,null,`较上月 `+b(m.value.events.signup_delta>=0?`+`:``)+b(m.value.events.signup_delta),1)]),p(`div`,$e,[p(`span`,et,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),a[21]||=p(`span`,null,`转化线索`,-1),p(`strong`,null,b(m.value.events.teacher_leads+m.value.events.demand_leads),1),p(`em`,null,`老师 `+b(m.value.events.teacher_leads)+`,需求 `+b(m.value.events.demand_leads),1)])]),p(`div`,tt,[p(`div`,nt,[(i(),e(g,null,v(D,e=>p(`div`,{key:e,class:`calendar-head`},b(e),1)),64))]),p(`div`,rt,[(i(!0),e(g,null,v(j.value,(t,n)=>(i(),e(`div`,{key:n,class:`calendar-week-grid`,style:o({"--event-lanes":t.barRows})},[(i(!0),e(g,null,v(t.cells,(t,n)=>(i(),e(`div`,{key:t.key,class:u([`calendar-cell`,{muted:t.muted,past:t.past&&!t.muted,"is-today":t.isToday,"has-event":t.hasEvent}]),style:o({gridColumn:n+1})},[p(`span`,it,b(t.day),1)],6))),128)),(i(!0),e(g,null,v(t.bars,t=>(i(),e(`button`,{key:t.id,type:`button`,class:u([`calendar-event-span`,{"is-past-event":t.isPast,"is-activity":t.event.type===`activity`,"is-continuation":!t.showTitle}]),style:o({gridColumn:`${t.startCol} / span ${t.span}`,marginTop:`calc(1.25rem + ${(t.row-1)*26}px)`}),title:t.event.title,onClick:e=>L(t.event)},[t.showTitle?(i(),e(`span`,ot,b(t.event.title),1)):s(``,!0)],14,at))),128))],4))),128))])])])],64)):s(``,!0),r(me,{modelValue:y.value,"onUpdate:modelValue":a[5]||=e=>y.value=e,event:x.value},null,8,[`modelValue`,`event`])])),[[S,c.value]])}}}),[[`__scopeId`,`data-v-ae208002`]]);export{st as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,P as a,Qt as o,S as s,T as c,X as l,Xt as u,Y as d,at as f,b as p,et as m,ht as h,m as g,ot as _,q as v,rt as y,tn as b,x,y as S}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{C,b as w,f as T,g as E,l as D,m as O,o as k,p as A,r as j,s as M,y as N}from"./index-CPrkFf57.js";import{n as P,t as F}from"./usePageLoad-B1L6ImD-.js";import{c as I,l as L}from"./activities-3eo24xB0.js";import{o as ee}from"./courses-DPJyM0Kj.js";import{a as R,i as z,o as B,s as V}from"./admin-list-dnDAubDa.js";/* empty css */async function te(){let{data:e}=await j.get(`/admin/v1/dashboard/overview`);return e.data}var ne={class:`detail-body`},re={class:`detail-section`},H={key:0,class:`detail-media-preview detail-media-cover`},U=[`src`],W={key:1,class:`detail-empty-media`},G={class:`detail-section`},K={key:0,class:`detail-media-preview detail-media-promo`},q=[`src`],J={key:1,class:`detail-empty-media`},Y={class:`detail-section`},X={class:`detail-text-block`},ie={class:`detail-section`},ae={key:1,class:`detail-empty-media`},oe={class:`detail-section`},se=[`innerHTML`],ce={key:1,class:`detail-empty-media`},le={class:`detail-section`},ue={key:1,class:`detail-empty-media`},de={class:`detail-section`},fe=[`innerHTML`],pe={key:1,class:`detail-empty-media`},me=M(n({__name:`CalendarEventDetailDialog`,props:a({event:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:[`update:modelValue`],setup(n){let a=m(n,`modelValue`),o=n,v=h(!1),S=h(null),C=h(null),w=h([]);function T(e){return e==null||e===``?`—`:String(e)}function E(e,t){return!e&&!t?`—`:e&&t?`${e} 至 ${t}`:e||t||`—`}function O(e){let t=(e??[]).map(e=>e?.trim()).filter(Boolean);return t.length?t.join(`、`):`—`}function k(e){return e.news?.title?e.news.title:e.news_link_url?e.news_link_url:`—`}function A(e){return e.starts_at?e.starts_at.replace(`T`,` `).slice(0,16):`—`}function j(e){return e.ends_at?e.ends_at.replace(`T`,` `).slice(0,16):`—`}async function M(){let e=o.event;if(e){v.value=!0,S.value=null,C.value=null,w.value=[];try{e.type===`course`?S.value=await ee(e.entity_id):(C.value=await I(e.entity_id),w.value=await L(e.entity_id))}catch{D.error(`加载详情失败`),a.value=!1}finally{v.value=!1}}}y(()=>[a.value,o.event?.entity_id,o.event?.type,o.event?.start_date],([e])=>{e&&o.event&&M()});let N=()=>o.event?o.event.type===`course`?`课程详情`:`活动详情`:`详情`;return(o,m)=>{let h=d(`el-descriptions-item`),y=d(`el-descriptions`),D=d(`el-table-column`),M=d(`el-table`),P=d(`el-empty`),F=d(`el-button`),I=d(`el-dialog`),L=l(`loading`);return i(),x(I,{modelValue:a.value,"onUpdate:modelValue":m[1]||=e=>a.value=e,title:N(),width:`960px`,top:`5vh`,"destroy-on-close":``,"append-to-body":``,class:`calendar-event-detail-dialog`},{footer:f(()=>[r(F,{onClick:m[0]||=e=>a.value=!1},{default:f(()=>[...m[9]||=[c(`关闭`,-1)]]),_:1})]),default:f(()=>[_((i(),e(`div`,ne,[n.event&&S.value&&n.event.type===`course`?(i(),e(g,{key:0},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`课程体系`},{default:f(()=>[c(b(S.value.course_system_item?.label||`—`),1)]),_:1}),r(h,{label:`课程名称`,span:2},{default:f(()=>[c(b(S.value.title),1)]),_:1}),r(h,{label:`课程类型`},{default:f(()=>[c(b(S.value.course_type_item?.label||`—`),1)]),_:1}),r(h,{label:`开课人数`},{default:f(()=>[c(b(T(S.value.capacity)),1)]),_:1}),r(h,{label:`开课日期`},{default:f(()=>[c(b(t(z)(S.value.teach_start_date,S.value.teach_end_date)),1)]),_:1}),r(h,{label:`开课时间`},{default:f(()=>[c(b(E(S.value.teach_start_time,S.value.teach_end_time)),1)]),_:1}),r(h,{label:`报名起止`,span:2},{default:f(()=>[c(b(t(z)(S.value.signup_start_date,S.value.signup_end_date)),1)]),_:1}),r(h,{label:`地点`},{default:f(()=>[c(b(T(S.value.location)),1)]),_:1}),r(h,{label:`关联资讯`,span:2},{default:f(()=>[c(b(k(S.value)),1)]),_:1}),r(h,{label:`课程状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(S.value.progress_status)])},b(t(R)(S.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(S.value.published)])},b(S.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,re,[m[2]||=p(`div`,{class:`detail-section-label`},`课程封面(690×400)`,-1),S.value.cover?.url?(i(),e(`div`,H,[p(`img`,{src:S.value.cover.url,alt:`课程封面`},null,8,U)])):(i(),e(`div`,W,`—`))]),p(`div`,G,[m[3]||=p(`div`,{class:`detail-section-label`},`课程宣传页(宽 750)`,-1),S.value.promo?.url?(i(),e(`div`,K,[p(`img`,{src:S.value.promo.url,alt:`课程宣传页`},null,8,q)])):(i(),e(`div`,J,`—`))]),p(`div`,Y,[m[4]||=p(`div`,{class:`detail-section-label`},`招生对象`,-1),p(`div`,X,b(O(S.value.recruit_targets)),1)]),p(`div`,ie,[m[5]||=p(`div`,{class:`detail-section-label`},`主讲师资`,-1),S.value.main_speakers?.length?(i(),x(M,{key:0,data:S.value.main_speakers,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{type:`index`,label:`序号`,width:`56`,index:e=>e+1},null,8,[`index`]),r(D,{prop:`name`,label:`姓名`,"min-width":`100`}),r(D,{prop:`title`,label:`职称`,"min-width":`100`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{prop:`university`,label:`高校`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.university)),1)]),_:1}),r(D,{prop:`remark`,label:`备注`,"min-width":`140`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.remark)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ae,`—`))]),p(`div`,oe,[m[6]||=p(`div`,{class:`detail-section-label`},`课程简介`,-1),S.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:S.value.intro_html},null,8,se)):(i(),e(`div`,ce,`—`))])],64)):n.event&&C.value&&n.event.type===`activity`?(i(),e(g,{key:1},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`活动名称`,span:2},{default:f(()=>[c(b(C.value.title),1)]),_:1}),r(h,{label:`活动类型`},{default:f(()=>[c(b(C.value.activity_type_item?.label||`—`),1)]),_:1}),r(h,{label:`场次`},{default:f(()=>[c(b(C.value.sessions_count??w.value.length),1)]),_:1}),r(h,{label:`活动日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.event_start_date,C.value.event_end_date)),1)]),_:1}),r(h,{label:`报名起止日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.signup_start_date,C.value.signup_end_date)),1)]),_:1}),r(h,{label:`活动地点`,span:2},{default:f(()=>[c(b(T(C.value.location)),1)]),_:1}),r(h,{label:`活动状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(C.value.progress_status)])},b(t(R)(C.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(C.value.published)])},b(C.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,le,[m[7]||=p(`div`,{class:`detail-section-label`},`活动场次`,-1),w.value.length?(i(),x(M,{key:0,data:w.value,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{label:`场次标题`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{label:`开始时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(A(e)),1)]),_:1}),r(D,{label:`结束时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(j(e)),1)]),_:1}),r(D,{label:`地点`,"min-width":`120`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.venue)),1)]),_:1}),r(D,{label:`名额`,width:`80`,align:`center`},{default:f(({row:e})=>[c(b(T(e.capacity)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ue,`—`))]),p(`div`,de,[m[8]||=p(`div`,{class:`detail-section-label`},`活动简介`,-1),C.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:C.value.intro_html},null,8,fe)):(i(),e(`div`,pe,`—`))])],64)):!v.value&&a.value?(i(),x(P,{key:2,description:`暂无详情`})):s(``,!0)])),[[L,v.value]])]),_:1},8,[`modelValue`,`title`])}}}),[[`__scopeId`,`data-v-73e6423f`]]);function Z(e,t){return e.localeCompare(t)}function he(e,t,n,r){let i=e+t-1,a=n+r-1;return!(ia)}function ge(e){let t=[];return e.slice().sort((e,t)=>e.startCol-t.startCol||t.span-e.span).map(e=>{let n=0;for(;;){if(t[n]??=[],!t[n].some(t=>he(e.startCol,e.span,t.startCol,t.endCol-t.startCol+1)))return t[n].push({startCol:e.startCol,endCol:e.startCol+e.span-1}),{...e,row:n+1};n+=1}})}function _e(e,t,n){if(!e.length)return[];let r=e[0],i=e[e.length-1],a=[];for(let o of t){if(Z(o.end_date,r)<0||Z(o.start_date,i)>0)continue;let t=Z(o.start_date,r)>0?o.start_date:r,s=Z(o.end_date,i)<0?o.end_date:i,c=e.indexOf(t),l=e.indexOf(s);c<0||l<0||a.push({id:`${o.type}-${o.entity_id}-${o.title}-${t}-${s}`,startCol:c+1,span:l-c+1,showTitle:t===o.start_date,isPast:Z(s,n)<0,event:o})}return ge(a)}function ve(e,t,n,r){let i=new Date(e,t-1,1),a=new Date(e,t,0),o=(i.getDay()+6)%7,s=[],c=new Set;for(let e of r)for(let t of ye(e.start_date,e.end_date))c.add(t);for(let r=o;r>0;--r){let i=new Date(e,t-1,1-r),a=Q(i);s.push({key:`p-${a}`,day:i.getDate(),dateStr:a,muted:!0,past:Z(a,n)<0,isToday:a===n,hasEvent:c.has(a)})}for(let r=1;r<=a.getDate();r+=1){let i=`${e}-${String(t).padStart(2,`0`)}-${String(r).padStart(2,`0`)}`;s.push({key:i,day:r,dateStr:i,muted:!1,past:Z(i,n)<0,isToday:i===n,hasEvent:c.has(i)})}for(;s.length%7!=0;){let r=s.length-(o+a.getDate()),i=new Date(e,t,r+1),l=Q(i);s.push({key:`n-${l}`,day:i.getDate(),dateStr:l,muted:!0,past:Z(l,n)<0,isToday:l===n,hasEvent:c.has(l)})}let l=[];for(let e=0;ee.dateStr),r,n);l.push({cells:t,bars:i,barRows:i.reduce((e,t)=>Math.max(e,t.row),0)})}return l}function Q(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ye(e,t){let n=[],r=new Date(`${e}T00:00:00`),i=new Date(`${t}T00:00:00`);for(;r<=i&&(n.push(Q(r)),r.setDate(r.getDate()+1),!(n.length>31)););return n}var be={class:`dashboard-page executive-dashboard dashboard-v2`},xe={class:`page-head`},Se={class:`dashboard-grid-row`},Ce={class:`dashboard-card dashboard-overview-card`},we={class:`executive-metric-grid dashboard-overview-grid-compact`},Te={class:`executive-metric`},Ee={class:`metric-head`},De={class:`metric-icon`},Oe={class:`executive-metric`},ke={class:`metric-head`},Ae={class:`metric-icon`},je={class:`executive-metric`},Me={class:`metric-head`},Ne={class:`metric-icon`},Pe={class:`executive-metric`},Fe={class:`metric-head`},Ie={class:`metric-icon`},Le={class:`dashboard-card`},Re={class:`card-head card-head-row`},ze={class:`dashboard-count-badge`},Be={class:`dashboard-todo-list`},Ve={class:`dashboard-todo-icon`},He={class:`dashboard-todo-icon`},Ue={class:`dashboard-todo-icon`},We={class:`dashboard-card`},Ge={class:`card-head card-head-row`},Ke={class:`dashboard-calendar-actions`},qe={class:`dashboard-event-list`},Je={class:`dashboard-event-row`},$={class:`event-row-icon`},Ye={class:`dashboard-event-row`},Xe={class:`event-row-icon`},Ze={class:`dashboard-event-row`},Qe={class:`event-row-icon`},$e={class:`dashboard-event-row`},et={class:`event-row-icon`},tt={class:`dashboard-calendar`},nt={class:`calendar-grid calendar-grid-heads`},rt={class:`calendar-weeks`},it={class:`calendar-day-num`},at=[`title`,`onClick`],ot={key:0,class:`calendar-event-span-text`},st=M(n({__name:`index`,setup(n){let a=k(),c=h(!1),m=h(null),y=h(!1),x=h(null),D=[`一`,`二`,`三`,`四`,`五`,`六`,`日`],j=S(()=>{if(!m.value)return[];let{year:e,month:t,today:n,events:r}=m.value.calendar;return ve(e,t,n,r)});async function M(){c.value=!0;try{m.value=await te()}finally{c.value=!1}}function I(e){a.push(e)}function L(e){x.value={start_date:e.start_date,end_date:e.end_date,type:e.type,title:e.title,entity_id:e.entity_id},y.value=!0}return F(M),(n,a)=>{let h=d(`el-icon`),S=l(`loading`);return _((i(),e(`div`,be,[p(`div`,xe,[r(P,{variant:`dashboard`})]),m.value?(i(),e(g,{key:0},[p(`div`,Se,[p(`section`,Ce,[a[10]||=p(`div`,{class:`card-head`},[p(`h2`,{class:`dashboard-section-title`},`经营总览`)],-1),p(`div`,we,[p(`div`,Te,[p(`div`,Ee,[a[6]||=p(`span`,null,`高校覆盖`,-1),p(`span`,De,[r(h,null,{default:f(()=>[r(t(w))]),_:1})])]),p(`strong`,null,b(m.value.overview.universities.total),1)]),p(`div`,Oe,[p(`div`,ke,[a[7]||=p(`span`,null,`老师资产`,-1),p(`span`,Ae,[r(h,null,{default:f(()=>[r(t(C))]),_:1})])]),p(`strong`,null,b(m.value.overview.teachers.total),1),p(`em`,null,`本月 +`+b(m.value.overview.teachers.month_new)+`,五星 `+b(m.value.overview.teachers.five_star),1)]),p(`div`,je,[p(`div`,Me,[a[8]||=p(`span`,null,`论文发现`,-1),p(`span`,Ne,[r(h,null,{default:f(()=>[r(t(E))]),_:1})])]),p(`strong`,null,b(m.value.overview.papers.total),1),p(`em`,null,`本月新增 `+b(m.value.overview.papers.month_new)+`,待关联老师 `+b(m.value.overview.papers.pending_link),1)]),p(`div`,Pe,[p(`div`,Fe,[a[9]||=p(`span`,null,`需求履约率`,-1),p(`span`,Ie,[r(h,null,{default:f(()=>[r(t(O))]),_:1})])]),p(`strong`,null,b(m.value.overview.demands.fulfillment_rate)+`%`,1),p(`em`,null,b(m.value.overview.demands.total)+` 条需求,`+b(m.value.overview.demands.done)+` 条已完成`,1)])])]),p(`section`,Le,[p(`div`,Re,[a[11]||=p(`h2`,{class:`dashboard-section-title`},`待办`,-1),p(`span`,ze,b(m.value.todos.total)+` 项`,1)]),p(`div`,Be,[p(`button`,{type:`button`,class:`dashboard-todo-card is-urgent`,onClick:a[0]||=e=>I(`/teachers`)},[p(`span`,Ve,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[12]||=p(`span`,null,[p(`b`,null,`老师跟进`),p(`em`,null,`高星老师逾期回访,需补跟进记录`)],-1),p(`strong`,null,b(m.value.todos.teacher_follow),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card is-warning`,onClick:a[1]||=e=>I(`/demands`)},[p(`span`,He,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),p(`span`,null,[a[13]||=p(`b`,null,`需求处理`,-1),p(`em`,null,b(m.value.todos.demand_overdue)+` 条需求逾期,`+b(m.value.todos.demand_waiting)+` 条等待资源匹配`,1)]),p(`strong`,null,b(m.value.todos.demand_process),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card`,onClick:a[2]||=e=>I(`/papers`)},[p(`span`,Ue,[r(h,null,{default:f(()=>[r(t(E))]),_:1})]),a[14]||=p(`span`,null,[p(`b`,null,`论文数据`),p(`em`,null,`近30天入库且未关联老师`)],-1),p(`strong`,null,b(m.value.todos.paper_data),1)])])])]),p(`section`,We,[p(`div`,Ge,[a[17]||=p(`div`,null,[p(`h2`,{class:`dashboard-section-title`},`课程、活动日历`)],-1),p(`div`,Ke,[p(`button`,{type:`button`,onClick:a[3]||=e=>I(`/courses`)},[r(h,null,{default:f(()=>[r(t(N))]),_:1}),a[15]||=p(`span`,null,`课程`,-1)]),p(`button`,{type:`button`,onClick:a[4]||=e=>I(`/activities`)},[r(h,null,{default:f(()=>[r(t(T))]),_:1}),a[16]||=p(`span`,null,`活动`,-1)])])]),p(`div`,qe,[p(`div`,Je,[p(`span`,$,[r(h,null,{default:f(()=>[r(t(N))]),_:1})]),a[18]||=p(`span`,null,`课程排期`,-1),p(`strong`,null,b(m.value.events.course_sessions),1),p(`em`,null,b(m.value.events.course_draft)+` 场待发布`,1)]),p(`div`,Ye,[p(`span`,Xe,[r(h,null,{default:f(()=>[r(t(T))]),_:1})]),a[19]||=p(`span`,null,`活动排期`,-1),p(`strong`,null,b(m.value.events.activity_sessions),1),p(`em`,null,b(m.value.events.activity_open)+` 场报名中`,1)]),p(`div`,Ze,[p(`span`,Qe,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[20]||=p(`span`,null,`报名人数`,-1),p(`strong`,null,b(m.value.events.signup_total),1),p(`em`,null,`较上月 `+b(m.value.events.signup_delta>=0?`+`:``)+b(m.value.events.signup_delta),1)]),p(`div`,$e,[p(`span`,et,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),a[21]||=p(`span`,null,`转化线索`,-1),p(`strong`,null,b(m.value.events.teacher_leads+m.value.events.demand_leads),1),p(`em`,null,`老师 `+b(m.value.events.teacher_leads)+`,需求 `+b(m.value.events.demand_leads),1)])]),p(`div`,tt,[p(`div`,nt,[(i(),e(g,null,v(D,e=>p(`div`,{key:e,class:`calendar-head`},b(e),1)),64))]),p(`div`,rt,[(i(!0),e(g,null,v(j.value,(t,n)=>(i(),e(`div`,{key:n,class:`calendar-week-grid`,style:o({"--event-lanes":t.barRows})},[(i(!0),e(g,null,v(t.cells,(t,n)=>(i(),e(`div`,{key:t.key,class:u([`calendar-cell`,{muted:t.muted,past:t.past&&!t.muted,"is-today":t.isToday,"has-event":t.hasEvent}]),style:o({gridColumn:n+1})},[p(`span`,it,b(t.day),1)],6))),128)),(i(!0),e(g,null,v(t.bars,t=>(i(),e(`button`,{key:t.id,type:`button`,class:u([`calendar-event-span`,{"is-past-event":t.isPast,"is-activity":t.event.type===`activity`,"is-continuation":!t.showTitle}]),style:o({gridColumn:`${t.startCol} / span ${t.span}`,marginTop:`calc(1.25rem + ${(t.row-1)*26}px)`}),title:t.event.title,onClick:e=>L(t.event)},[t.showTitle?(i(),e(`span`,ot,b(t.event.title),1)):s(``,!0)],14,at))),128))],4))),128))])])])],64)):s(``,!0),r(me,{modelValue:y.value,"onUpdate:modelValue":a[5]||=e=>y.value=e,event:x.value},null,8,[`modelValue`,`event`])])),[[S,c.value]])}}}),[[`__scopeId`,`data-v-ae208002`]]);export{st as default}; \ No newline at end of file diff --git a/public/admin/assets/demands-CvY88JMp.js b/public/admin/assets/demands-BIE9utJy.js similarity index 96% rename from public/admin/assets/demands-CvY88JMp.js rename to public/admin/assets/demands-BIE9utJy.js index 2a5779d..76c8743 100644 --- a/public/admin/assets/demands-CvY88JMp.js +++ b/public/admin/assets/demands-BIE9utJy.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,ht as d,m as f,ot as ne,q as p,tn as m,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as g,l as _,s as v,t as y}from"./index-DHoSHxJa.js";import{n as re,t as b}from"./usePageLoad-C9PEZ_Tm.js";import{n as ie,t as x}from"./admin-list-DjncsyJC.js";import{a as S}from"./dict-D30aLydL.js";import{a as C,n as w,o as T,r as E,s as D}from"./demands-DG70Ky1b.js";import{r as O}from"./users-U4ei8OXs.js";var k={class:`list-page demands-page`},ae={class:`page-header`},oe={class:`list-filter-bar`},se={class:`table-row-actions`},ce={class:`list-pager`},le={class:`follow-teacher-summary`},ue={class:`follow-history-list`},de={class:`follow-history-head`},fe={class:`follow-history-title`},pe={class:`follow-history-date`},me={class:`follow-history-body`},he={class:`follow-teacher-summary`},A=v(n({__name:`index`,setup(n){let v=y();function A(){let e=v.user?.id;return e!=null&&B.value.some(t=>t.id===e)?e:B.value[0]?.id}let j=d(!1),M=d([]),N=d({current_page:1,per_page:20,total:0}),P=d(1),F=d(``),I=d(``),L=d(``),R=d([]),z=d([]),B=d([]),V=d(!1),H=d(null),U=d([]),W=d(!1),G=d(``),K=d([]),q=d(!1),J=d(null),Y=d({handled_at:new Date().toISOString().slice(0,10),admin_user_id:void 0,status_dict_item_id:void 0,content:``,next_plan:``,next_follow_date:``});async function X(){let[e,t,n]=await Promise.all([S(`demand_type`),S(`demand_status`),O({page:1,page_size:200,status:1})]);R.value=e.items,z.value=t.items,B.value=n.items.map(e=>({id:e.id,label:e.real_name||e.username}))}async function Z(){j.value=!0;try{let e={page:P.value,page_size:N.value.per_page};F.value&&(e.keyword=F.value),I.value!==``&&(e.type_dict_item_id=I.value),L.value!==``&&(e.status_dict_item_id=L.value);let t=await D(e);M.value=t.items,N.value=t.meta}finally{j.value=!1}}function ge(){F.value=``,I.value=``,L.value=``,P.value=1,Z()}function Q(){P.value=1,Z()}async function _e(e){H.value=await C(e.id),U.value=await T(e.id),V.value=!0}async function ve(e){G.value=e.title,K.value=await T(e.id),W.value=!0}function $(e){J.value=e,Y.value={handled_at:new Date().toISOString().slice(0,10),admin_user_id:A(),status_dict_item_id:e.status_dict_item_id,content:``,next_plan:``,next_follow_date:``},q.value=!0}async function ye(){if(!J.value)return;let e=Y.value;if(!e.content.trim()||!e.status_dict_item_id||!e.admin_user_id){_.warning(`请填写跟进内容、处理状态与跟进人员`);return}await w(J.value.id,{...e}),_.success(`已保存跟进`),q.value=!1,await Z()}async function be(e){await g.confirm(`确定删除需求「${e.title}」?`,`确认删除`,{type:`warning`}),await E(e.id),_.success(`已删除`),await Z()}function xe(){H.value&&(V.value=!1,$(H.value))}return b(async()=>{await X(),await Z()}),(n,d)=>{let g=c(`el-input`),_=c(`el-option`),v=c(`el-select`),y=c(`el-button`),b=c(`el-table-column`),S=c(`el-table`),C=c(`el-pagination`),w=c(`el-card`),T=c(`el-col`),E=c(`el-row`),D=c(`el-dialog`),O=c(`el-empty`),A=c(`el-date-picker`),X=c(`el-form-item`),Se=c(`el-form`),Ce=ee(`loading`);return i(),e(`div`,k,[u(`div`,ae,[r(re)]),r(w,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[u(`div`,oe,[r(g,{modelValue:F.value,"onUpdate:modelValue":d[0]||=e=>F.value=e,class:`filter-search`,placeholder:`搜索标题、姓名、公司、类型…`,clearable:``,onKeyup:te(Q,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:I.value,"onUpdate:modelValue":d[1]||=e=>I.value=e,placeholder:`类型`,clearable:``,class:`filter-select-wide`},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(v,{modelValue:L.value,"onUpdate:modelValue":d[2]||=e=>L.value=e,placeholder:`处理状态`,clearable:``,class:`filter-select`},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{type:`primary`,class:`btn-create`,onClick:Q},{default:l(()=>[...d[16]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:ge},{default:l(()=>[...d[17]||=[o(`重置`,-1)]]),_:1})]),ne((i(),h(S,{data:M.value,"row-key":`id`},{default:l(()=>[r(b,{label:`类型`,width:`110`},{default:l(({row:e})=>[u(`span`,{class:s([`type-badge`,t(ie)(e.type_item?.value)])},m(e.type_item?.label),3)]),_:1}),r(b,{prop:`title`,label:`标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(b,{prop:`contact_name`,label:`姓名`,width:`100`}),r(b,{prop:`company`,label:`公司`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`submitted_at`,label:`时间`,width:`110`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{label:`跟进记录`,width:`96`,align:`center`},{default:l(({row:e})=>[r(y,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>ve(e)},{default:l(()=>[o(m(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1}),r(b,{label:`操作`,width:`220`,fixed:`right`},{default:l(({row:e})=>[u(`div`,se,[r(y,{class:`btn-action-secondary`,onClick:t=>_e(e)},{default:l(()=>[...d[18]||=[o(`详情`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>be(e)},{default:l(()=>[...d[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-info`,onClick:t=>$(e)},{default:l(()=>[...d[20]||=[o(`跟进`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Ce,j.value]]),u(`div`,ce,[r(C,{"current-page":P.value,"onUpdate:currentPage":d[3]||=e=>P.value=e,"page-size":N.value.per_page,total:N.value.total,layout:`total, prev, pager, next`,onCurrentChange:Z},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(D,{modelValue:V.value,"onUpdate:modelValue":d[5]||=e=>V.value=e,title:H.value?.title||`需求详情`,width:`800px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[4]||=e=>V.value=!1},{default:l(()=>[...d[27]||=[o(`关闭`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:xe},{default:l(()=>[...d[28]||=[o(`添加跟进`,-1)]]),_:1})]),default:l(()=>[H.value?(i(),e(f,{key:0},[r(E,{gutter:12,class:`detail-meta`},{default:l(()=>[r(T,{span:6},{default:l(()=>[d[21]||=u(`label`,{class:`field-label`},`需求类型`,-1),r(g,{"model-value":H.value.type_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[22]||=u(`label`,{class:`field-label`},`提交人`,-1),r(g,{"model-value":H.value.contact_name||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[23]||=u(`label`,{class:`field-label`},`提交时间`,-1),r(g,{"model-value":H.value.submitted_at||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[24]||=u(`label`,{class:`field-label`},`处理状态`,-1),r(g,{"model-value":H.value.status_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:24},{default:l(()=>[d[25]||=u(`label`,{class:`field-label`},`需求描述`,-1),r(g,{"model-value":H.value.content,type:`textarea`,rows:3,readonly:``},null,8,[`model-value`])]),_:1})]),_:1}),d[26]||=u(`h3`,{class:`sub-title`},`处理记录`,-1),r(S,{data:U.value,size:`small`},{default:l(()=>[r(b,{prop:`handled_at`,label:`跟进日期`,width:`110`}),r(b,{prop:`operator_name`,label:`跟进人员`,width:`100`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{prop:`content`,label:`跟进内容`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{prop:`next_plan`,label:`下次跟进计划`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`next_follow_date`,label:`下次跟进日期`,width:`120`})]),_:1},8,[`data`])],64)):a(``,!0)]),_:1},8,[`modelValue`,`title`]),r(D,{modelValue:W.value,"onUpdate:modelValue":d[7]||=e=>W.value=e,title:`跟进记录`,width:`640px`},{footer:l(()=>[r(y,{onClick:d[6]||=e=>W.value=!1},{default:l(()=>[...d[29]||=[o(`关闭`,-1)]]),_:1})]),default:l(()=>[u(`div`,le,m(G.value),1),u(`div`,ue,[(i(!0),e(f,null,p(K.value,t=>(i(),e(`div`,{key:t.id,class:`follow-history-card`},[u(`div`,de,[u(`div`,null,[u(`span`,fe,m(t.operator_name),1),u(`span`,pe,m(t.handled_at),1)])]),u(`div`,me,m(t.content),1)]))),128)),K.value.length?a(``,!0):(i(),h(O,{key:0,description:`暂无记录`}))])]),_:1},8,[`modelValue`]),r(D,{modelValue:q.value,"onUpdate:modelValue":d[15]||=e=>q.value=e,title:`需求跟进`,width:`720px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[14]||=e=>q.value=!1},{default:l(()=>[...d[30]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:ye},{default:l(()=>[...d[31]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[u(`div`,he,m(J.value?.title),1),r(Se,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:l(()=>[r(E,{gutter:12},{default:l(()=>[r(T,{span:8},{default:l(()=>[r(X,{label:`跟进日期`,required:``},{default:l(()=>[r(A,{modelValue:Y.value.handled_at,"onUpdate:modelValue":d[8]||=e=>Y.value.handled_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`跟进人员`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.admin_user_id,"onUpdate:modelValue":d[9]||=e=>Y.value.admin_user_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(B.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`处理状态`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":d[10]||=e=>Y.value.status_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:24},{default:l(()=>[r(X,{label:`跟进内容`,required:``},{default:l(()=>[r(g,{modelValue:Y.value.content,"onUpdate:modelValue":d[11]||=e=>Y.value.content=e,type:`textarea`,rows:4,placeholder:`请输入本次跟进内容`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:16},{default:l(()=>[r(X,{label:`下次跟进计划`},{default:l(()=>[r(g,{modelValue:Y.value.next_plan,"onUpdate:modelValue":d[12]||=e=>Y.value.next_plan=e,placeholder:`请输入下一步计划`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`下次跟进日期`},{default:l(()=>[r(A,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":d[13]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-55f95cba`]]);export{A as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,ht as d,m as f,ot as ne,q as p,tn as m,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as g,l as _,s as v,t as y}from"./index-CPrkFf57.js";import{n as re,t as b}from"./usePageLoad-B1L6ImD-.js";import{n as ie,t as x}from"./admin-list-dnDAubDa.js";import{a as S}from"./dict-D-xskQUn.js";import{a as C,n as w,o as T,r as E,s as D}from"./demands-DeUMyXK9.js";import{r as O}from"./users-BIXJy9ht.js";var k={class:`list-page demands-page`},ae={class:`page-header`},oe={class:`list-filter-bar`},se={class:`table-row-actions`},ce={class:`list-pager`},le={class:`follow-teacher-summary`},ue={class:`follow-history-list`},de={class:`follow-history-head`},fe={class:`follow-history-title`},pe={class:`follow-history-date`},me={class:`follow-history-body`},he={class:`follow-teacher-summary`},A=v(n({__name:`index`,setup(n){let v=y();function A(){let e=v.user?.id;return e!=null&&B.value.some(t=>t.id===e)?e:B.value[0]?.id}let j=d(!1),M=d([]),N=d({current_page:1,per_page:20,total:0}),P=d(1),F=d(``),I=d(``),L=d(``),R=d([]),z=d([]),B=d([]),V=d(!1),H=d(null),U=d([]),W=d(!1),G=d(``),K=d([]),q=d(!1),J=d(null),Y=d({handled_at:new Date().toISOString().slice(0,10),admin_user_id:void 0,status_dict_item_id:void 0,content:``,next_plan:``,next_follow_date:``});async function X(){let[e,t,n]=await Promise.all([S(`demand_type`),S(`demand_status`),O({page:1,page_size:200,status:1})]);R.value=e.items,z.value=t.items,B.value=n.items.map(e=>({id:e.id,label:e.real_name||e.username}))}async function Z(){j.value=!0;try{let e={page:P.value,page_size:N.value.per_page};F.value&&(e.keyword=F.value),I.value!==``&&(e.type_dict_item_id=I.value),L.value!==``&&(e.status_dict_item_id=L.value);let t=await D(e);M.value=t.items,N.value=t.meta}finally{j.value=!1}}function ge(){F.value=``,I.value=``,L.value=``,P.value=1,Z()}function Q(){P.value=1,Z()}async function _e(e){H.value=await C(e.id),U.value=await T(e.id),V.value=!0}async function ve(e){G.value=e.title,K.value=await T(e.id),W.value=!0}function $(e){J.value=e,Y.value={handled_at:new Date().toISOString().slice(0,10),admin_user_id:A(),status_dict_item_id:e.status_dict_item_id,content:``,next_plan:``,next_follow_date:``},q.value=!0}async function ye(){if(!J.value)return;let e=Y.value;if(!e.content.trim()||!e.status_dict_item_id||!e.admin_user_id){_.warning(`请填写跟进内容、处理状态与跟进人员`);return}await w(J.value.id,{...e}),_.success(`已保存跟进`),q.value=!1,await Z()}async function be(e){await g.confirm(`确定删除需求「${e.title}」?`,`确认删除`,{type:`warning`}),await E(e.id),_.success(`已删除`),await Z()}function xe(){H.value&&(V.value=!1,$(H.value))}return b(async()=>{await X(),await Z()}),(n,d)=>{let g=c(`el-input`),_=c(`el-option`),v=c(`el-select`),y=c(`el-button`),b=c(`el-table-column`),S=c(`el-table`),C=c(`el-pagination`),w=c(`el-card`),T=c(`el-col`),E=c(`el-row`),D=c(`el-dialog`),O=c(`el-empty`),A=c(`el-date-picker`),X=c(`el-form-item`),Se=c(`el-form`),Ce=ee(`loading`);return i(),e(`div`,k,[u(`div`,ae,[r(re)]),r(w,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[u(`div`,oe,[r(g,{modelValue:F.value,"onUpdate:modelValue":d[0]||=e=>F.value=e,class:`filter-search`,placeholder:`搜索标题、姓名、公司、类型…`,clearable:``,onKeyup:te(Q,[`enter`])},null,8,[`modelValue`]),r(v,{modelValue:I.value,"onUpdate:modelValue":d[1]||=e=>I.value=e,placeholder:`类型`,clearable:``,class:`filter-select-wide`},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(v,{modelValue:L.value,"onUpdate:modelValue":d[2]||=e=>L.value=e,placeholder:`处理状态`,clearable:``,class:`filter-select`},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{type:`primary`,class:`btn-create`,onClick:Q},{default:l(()=>[...d[16]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:ge},{default:l(()=>[...d[17]||=[o(`重置`,-1)]]),_:1})]),ne((i(),h(S,{data:M.value,"row-key":`id`},{default:l(()=>[r(b,{label:`类型`,width:`110`},{default:l(({row:e})=>[u(`span`,{class:s([`type-badge`,t(ie)(e.type_item?.value)])},m(e.type_item?.label),3)]),_:1}),r(b,{prop:`title`,label:`标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(b,{prop:`contact_name`,label:`姓名`,width:`100`}),r(b,{prop:`company`,label:`公司`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`submitted_at`,label:`时间`,width:`110`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{label:`跟进记录`,width:`96`,align:`center`},{default:l(({row:e})=>[r(y,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>ve(e)},{default:l(()=>[o(m(e.handle_logs_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1}),r(b,{label:`操作`,width:`220`,fixed:`right`},{default:l(({row:e})=>[u(`div`,se,[r(y,{class:`btn-action-secondary`,onClick:t=>_e(e)},{default:l(()=>[...d[18]||=[o(`详情`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>be(e)},{default:l(()=>[...d[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-info`,onClick:t=>$(e)},{default:l(()=>[...d[20]||=[o(`跟进`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Ce,j.value]]),u(`div`,ce,[r(C,{"current-page":P.value,"onUpdate:currentPage":d[3]||=e=>P.value=e,"page-size":N.value.per_page,total:N.value.total,layout:`total, prev, pager, next`,onCurrentChange:Z},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(D,{modelValue:V.value,"onUpdate:modelValue":d[5]||=e=>V.value=e,title:H.value?.title||`需求详情`,width:`800px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[4]||=e=>V.value=!1},{default:l(()=>[...d[27]||=[o(`关闭`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:xe},{default:l(()=>[...d[28]||=[o(`添加跟进`,-1)]]),_:1})]),default:l(()=>[H.value?(i(),e(f,{key:0},[r(E,{gutter:12,class:`detail-meta`},{default:l(()=>[r(T,{span:6},{default:l(()=>[d[21]||=u(`label`,{class:`field-label`},`需求类型`,-1),r(g,{"model-value":H.value.type_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[22]||=u(`label`,{class:`field-label`},`提交人`,-1),r(g,{"model-value":H.value.contact_name||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[23]||=u(`label`,{class:`field-label`},`提交时间`,-1),r(g,{"model-value":H.value.submitted_at||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:6},{default:l(()=>[d[24]||=u(`label`,{class:`field-label`},`处理状态`,-1),r(g,{"model-value":H.value.status_item?.label||``,readonly:``},null,8,[`model-value`])]),_:1}),r(T,{span:24},{default:l(()=>[d[25]||=u(`label`,{class:`field-label`},`需求描述`,-1),r(g,{"model-value":H.value.content,type:`textarea`,rows:3,readonly:``},null,8,[`model-value`])]),_:1})]),_:1}),d[26]||=u(`h3`,{class:`sub-title`},`处理记录`,-1),r(S,{data:U.value,size:`small`},{default:l(()=>[r(b,{prop:`handled_at`,label:`跟进日期`,width:`110`}),r(b,{prop:`operator_name`,label:`跟进人员`,width:`100`}),r(b,{label:`处理状态`,width:`100`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status_item?.value)])},m(e.status_item?.label),3)]),_:1}),r(b,{prop:`content`,label:`跟进内容`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{prop:`next_plan`,label:`下次跟进计划`,width:`140`,"show-overflow-tooltip":``}),r(b,{prop:`next_follow_date`,label:`下次跟进日期`,width:`120`})]),_:1},8,[`data`])],64)):a(``,!0)]),_:1},8,[`modelValue`,`title`]),r(D,{modelValue:W.value,"onUpdate:modelValue":d[7]||=e=>W.value=e,title:`跟进记录`,width:`640px`},{footer:l(()=>[r(y,{onClick:d[6]||=e=>W.value=!1},{default:l(()=>[...d[29]||=[o(`关闭`,-1)]]),_:1})]),default:l(()=>[u(`div`,le,m(G.value),1),u(`div`,ue,[(i(!0),e(f,null,p(K.value,t=>(i(),e(`div`,{key:t.id,class:`follow-history-card`},[u(`div`,de,[u(`div`,null,[u(`span`,fe,m(t.operator_name),1),u(`span`,pe,m(t.handled_at),1)])]),u(`div`,me,m(t.content),1)]))),128)),K.value.length?a(``,!0):(i(),h(O,{key:0,description:`暂无记录`}))])]),_:1},8,[`modelValue`]),r(D,{modelValue:q.value,"onUpdate:modelValue":d[15]||=e=>q.value=e,title:`需求跟进`,width:`720px`,"destroy-on-close":``},{footer:l(()=>[r(y,{onClick:d[14]||=e=>q.value=!1},{default:l(()=>[...d[30]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,class:`btn-create`,onClick:ye},{default:l(()=>[...d[31]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[u(`div`,he,m(J.value?.title),1),r(Se,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:l(()=>[r(E,{gutter:12},{default:l(()=>[r(T,{span:8},{default:l(()=>[r(X,{label:`跟进日期`,required:``},{default:l(()=>[r(A,{modelValue:Y.value.handled_at,"onUpdate:modelValue":d[8]||=e=>Y.value.handled_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`跟进人员`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.admin_user_id,"onUpdate:modelValue":d[9]||=e=>Y.value.admin_user_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(B.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`处理状态`,required:``},{default:l(()=>[r(v,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":d[10]||=e=>Y.value.status_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),h(_,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:24},{default:l(()=>[r(X,{label:`跟进内容`,required:``},{default:l(()=>[r(g,{modelValue:Y.value.content,"onUpdate:modelValue":d[11]||=e=>Y.value.content=e,type:`textarea`,rows:4,placeholder:`请输入本次跟进内容`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:16},{default:l(()=>[r(X,{label:`下次跟进计划`},{default:l(()=>[r(g,{modelValue:Y.value.next_plan,"onUpdate:modelValue":d[12]||=e=>Y.value.next_plan=e,placeholder:`请输入下一步计划`},null,8,[`modelValue`])]),_:1})]),_:1}),r(T,{span:8},{default:l(()=>[r(X,{label:`下次跟进日期`},{default:l(()=>[r(A,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":d[13]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-55f95cba`]]);export{A as default}; \ No newline at end of file diff --git a/public/admin/assets/demands-DG70Ky1b.js b/public/admin/assets/demands-DeUMyXK9.js similarity index 89% rename from public/admin/assets/demands-DG70Ky1b.js rename to public/admin/assets/demands-DeUMyXK9.js index 7c38afa..e4573c0 100644 --- a/public/admin/assets/demands-DG70Ky1b.js +++ b/public/admin/assets/demands-DeUMyXK9.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/demands`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/demands/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/demands`,t);return n.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/demands/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/demands/${t}/handle-logs`);return n.data.items}async function o(t,n){let{data:r}=await e.post(`/admin/v1/demands/${t}/handle-logs`,n);return r.data}function s(e){return e===`done`?`success`:e===`terminated`?`info`:`warning`}export{n as a,s as i,o as n,a as o,i as r,t as s,r as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/demands`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/demands/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/demands`,t);return n.data}async function i(t){let{data:n}=await e.delete(`/admin/v1/demands/${t}`);return n}async function a(t){let{data:n}=await e.get(`/admin/v1/demands/${t}/handle-logs`);return n.data.items}async function o(t,n){let{data:r}=await e.post(`/admin/v1/demands/${t}/handle-logs`,n);return r.data}function s(e){return e===`done`?`success`:e===`terminated`?`info`:`warning`}export{n as a,s as i,o as n,a as o,i as r,t as s,r as t}; \ No newline at end of file diff --git a/public/admin/assets/dict-D30aLydL.js b/public/admin/assets/dict-D-xskQUn.js similarity index 92% rename from public/admin/assets/dict-D30aLydL.js rename to public/admin/assets/dict-D-xskQUn.js index 4e6d1ca..eee5f62 100644 --- a/public/admin/assets/dict-D30aLydL.js +++ b/public/admin/assets/dict-D-xskQUn.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/dict-by-code/${encodeURIComponent(t)}/items`);return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/dict-types`,{params:t});return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/dict-types`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/dict-types/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/dict-types/${t}`);return n}async function o(t,n){let{data:r}=await e.get(`/admin/v1/dict-types/${t}/items`,{params:n});return r.data}async function s(t,n){let{data:r}=await e.post(`/admin/v1/dict-types/${t}/items`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/dict-types/${t}/items/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/dict-types/${t}/items/${n}`);return r}export{t as a,c,a as i,i as l,r as n,o,l as r,n as s,s as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/dict-by-code/${encodeURIComponent(t)}/items`);return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/dict-types`,{params:t});return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/dict-types`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/dict-types/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/dict-types/${t}`);return n}async function o(t,n){let{data:r}=await e.get(`/admin/v1/dict-types/${t}/items`,{params:n});return r.data}async function s(t,n){let{data:r}=await e.post(`/admin/v1/dict-types/${t}/items`,n);return r.data}async function c(t,n,r){let{data:i}=await e.put(`/admin/v1/dict-types/${t}/items/${n}`,r);return i}async function l(t,n){let{data:r}=await e.delete(`/admin/v1/dict-types/${t}/items/${n}`);return r}export{t as a,c,a as i,i as l,r as n,o,l as r,n as s,s as t}; \ No newline at end of file diff --git a/public/admin/assets/dict-UJMjDsdM.js b/public/admin/assets/dict-giEClWT-.js similarity index 96% rename from public/admin/assets/dict-UJMjDsdM.js rename to public/admin/assets/dict-giEClWT-.js index ab859f8..933a576 100644 --- a/public/admin/assets/dict-UJMjDsdM.js +++ b/public/admin/assets/dict-giEClWT-.js @@ -1 +1 @@ -import{C as e,Ct as t,D as ee,E as n,G as r,T as i,X as te,Xt as a,Y as o,at as s,b as c,d as ne,ht as l,m as re,ot as u,tn as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as p,l as m,s as h}from"./index-DHoSHxJa.js";import{n as ie,t as g}from"./usePageLoad-C9PEZ_Tm.js";import{r as _}from"./admin-list-DjncsyJC.js";import{c as v,i as y,l as b,n as x,o as S,r as C,s as w,t as T}from"./dict-D30aLydL.js";var ae={class:`list-page`},E={class:`page-header`},D={class:`list-filter-bar`},O={class:`table-row-actions`},k={class:`list-pager`},A={class:`items-toolbar`},j={class:`table-row-actions`},M=h(ee({__name:`index`,setup(ee){let h=l(!1),M=l([]),N=l({current_page:1,per_page:20,total:0}),P=l(1),F=l(``),I=l(!1),L=l(null),R=l([]),z=l(!1),B=l(!1),V=l(null),H=l({code:``,name:``,remark:``,status:1,sort:0});async function U(){h.value=!0;try{let e=await w({page:P.value,page_size:N.value.per_page,keyword:F.value||void 0});M.value=e.items,N.value=e.meta}finally{h.value=!1}}function W(){V.value=null,H.value={code:``,name:``,remark:``,status:1,sort:0},B.value=!0}function G(e){V.value=e,H.value={code:e.code,name:e.name,remark:e.remark||``,status:e.status,sort:e.sort},B.value=!0}async function K(){V.value?await b(V.value.id,H.value):await x(H.value),m.success(`已保存`),B.value=!1,await U()}async function q(e){await p.confirm(`确定删除字典类型「${e.name}」及其全部字典项?`,`提示`,{type:`warning`}),await y(e.id),m.success(`已删除`),await U()}async function oe(e){L.value=e,I.value=!0,z.value=!0;try{R.value=await S(e.id)}finally{z.value=!1}}let J=l(!1),Y=l(null),X=l({label:``,value:``,sort:0,status:1});function se(){Y.value=null,X.value={label:``,value:``,sort:0,status:1},J.value=!0}function ce(e){Y.value=e,X.value={label:e.label,value:e.value,sort:e.sort,status:e.status},J.value=!0}async function le(){L.value&&(Y.value?await v(L.value.id,Y.value.id,X.value):await T(L.value.id,X.value),m.success(`已保存`),J.value=!1,R.value=await S(L.value.id))}async function ue(e){L.value&&(await p.confirm(`删除字典项「${e.label}」?`,`提示`,{type:`warning`}),await C(L.value.id,e.id),m.success(`已删除`),R.value=await S(L.value.id))}function Z(){P.value=1,U()}function Q(){F.value=``,P.value=1,U()}return g(U),(ee,l)=>{let p=o(`el-button`),m=o(`el-input`),g=o(`el-table-column`),v=o(`el-table`),y=o(`el-pagination`),b=o(`el-card`),x=o(`el-form-item`),S=o(`el-input-number`),C=o(`el-switch`),w=o(`el-form`),T=o(`el-dialog`),$=te(`loading`);return r(),e(re,null,[c(`div`,ae,[c(`div`,E,[n(ie),n(p,{type:`primary`,size:`small`,class:`btn-create`,onClick:W},{default:s(()=>[...l[17]||=[i(`新增类型`,-1)]]),_:1})]),n(b,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,D,[n(m,{modelValue:F.value,"onUpdate:modelValue":l[0]||=e=>F.value=e,placeholder:`编码/名称`,clearable:``,class:`filter-search`,onKeyup:ne(Z,[`enter`])},null,8,[`modelValue`]),n(p,{type:`primary`,onClick:Z},{default:s(()=>[...l[18]||=[i(`搜索`,-1)]]),_:1}),n(p,{onClick:Q},{default:s(()=>[...l[19]||=[i(`重置`,-1)]]),_:1})]),u((r(),f(v,{data:M.value,"row-key":`id`},{default:s(()=>[n(g,{prop:`code`,label:`编码`,width:`160`}),n(g,{prop:`name`,label:`名称`,width:`180`}),n(g,{prop:`remark`,label:`备注`,"min-width":`200`,"show-overflow-tooltip":``}),n(g,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),n(g,{label:`状态`,width:`90`,align:`center`},{default:s(({row:e})=>[c(`span`,{class:a([`status-badge`,t(_)(e.status)])},d(e.status===1?`启用`:`停用`),3)]),_:1}),n(g,{label:`操作`,width:`240`,fixed:`right`},{default:s(({row:e})=>[c(`div`,O,[n(p,{class:`btn-action-brand`,onClick:t=>oe(e)},{default:s(()=>[...l[20]||=[i(`字典项`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-primary`,onClick:t=>G(e)},{default:s(()=>[...l[21]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>q(e)},{default:s(()=>[...l[22]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,h.value]]),c(`div`,k,[n(y,{"current-page":P.value,"onUpdate:currentPage":l[1]||=e=>P.value=e,layout:`total, prev, pager, next`,total:N.value.total,"page-size":N.value.per_page,onCurrentChange:U},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),n(T,{modelValue:B.value,"onUpdate:modelValue":l[9]||=e=>B.value=e,title:V.value?`编辑类型`:`新增类型`,width:`480px`},{footer:s(()=>[n(p,{onClick:l[8]||=e=>B.value=!1},{default:s(()=>[...l[23]||=[i(`取消`,-1)]]),_:1}),n(p,{type:`primary`,onClick:K},{default:s(()=>[...l[24]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(w,{"label-width":`88px`},{default:s(()=>[V.value?(r(),f(x,{key:1,label:`编码`},{default:s(()=>[n(m,{modelValue:H.value.code,"onUpdate:modelValue":l[3]||=e=>H.value.code=e,disabled:``},null,8,[`modelValue`])]),_:1})):(r(),f(x,{key:0,label:`编码`},{default:s(()=>[n(m,{modelValue:H.value.code,"onUpdate:modelValue":l[2]||=e=>H.value.code=e},null,8,[`modelValue`])]),_:1})),n(x,{label:`名称`},{default:s(()=>[n(m,{modelValue:H.value.name,"onUpdate:modelValue":l[4]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`备注`},{default:s(()=>[n(m,{modelValue:H.value.remark,"onUpdate:modelValue":l[5]||=e=>H.value.remark=e,type:`textarea`,rows:2},null,8,[`modelValue`])]),_:1}),n(x,{label:`排序`},{default:s(()=>[n(S,{modelValue:H.value.sort,"onUpdate:modelValue":l[6]||=e=>H.value.sort=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`状态`},{default:s(()=>[n(C,{modelValue:H.value.status,"onUpdate:modelValue":l[7]||=e=>H.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),n(T,{modelValue:I.value,"onUpdate:modelValue":l[10]||=e=>I.value=e,title:L.value?`字典项 · ${L.value.name}`:`字典项`,width:`720px`,"destroy-on-close":``},{default:s(()=>[c(`div`,A,[n(p,{type:`primary`,size:`small`,onClick:se},{default:s(()=>[...l[25]||=[i(`新增字典项`,-1)]]),_:1})]),u((r(),f(v,{data:R.value,"row-key":`id`,style:{"margin-top":`8px`}},{default:s(()=>[n(g,{prop:`label`,label:`展示`,width:`160`}),n(g,{prop:`value`,label:`值`,width:`160`}),n(g,{prop:`sort`,label:`排序`,width:`80`}),n(g,{label:`状态`,width:`90`},{default:s(({row:e})=>[c(`span`,{class:a([`status-badge`,t(_)(e.status)])},d(e.status===1?`启用`:`停用`),3)]),_:1}),n(g,{label:`操作`,width:`160`},{default:s(({row:e})=>[c(`div`,j,[n(p,{class:`btn-action-primary`,onClick:t=>ce(e)},{default:s(()=>[...l[26]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>ue(e)},{default:s(()=>[...l[27]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,z.value]])]),_:1},8,[`modelValue`,`title`]),n(T,{modelValue:J.value,"onUpdate:modelValue":l[16]||=e=>J.value=e,title:Y.value?`编辑字典项`:`新增字典项`,width:`420px`},{footer:s(()=>[n(p,{onClick:l[15]||=e=>J.value=!1},{default:s(()=>[...l[28]||=[i(`取消`,-1)]]),_:1}),n(p,{type:`primary`,onClick:le},{default:s(()=>[...l[29]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(w,{"label-width":`72px`},{default:s(()=>[n(x,{label:`展示`},{default:s(()=>[n(m,{modelValue:X.value.label,"onUpdate:modelValue":l[11]||=e=>X.value.label=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`值`},{default:s(()=>[n(m,{modelValue:X.value.value,"onUpdate:modelValue":l[12]||=e=>X.value.value=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`排序`},{default:s(()=>[n(S,{modelValue:X.value.sort,"onUpdate:modelValue":l[13]||=e=>X.value.sort=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`状态`},{default:s(()=>[n(C,{modelValue:X.value.status,"onUpdate:modelValue":l[14]||=e=>X.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-1ea9c85a`]]);export{M as default}; \ No newline at end of file +import{C as e,Ct as t,D as ee,E as n,G as r,T as i,X as te,Xt as a,Y as o,at as s,b as c,d as ne,ht as l,m as re,ot as u,tn as d,x as f}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as p,l as m,s as h}from"./index-CPrkFf57.js";import{n as ie,t as g}from"./usePageLoad-B1L6ImD-.js";import{r as _}from"./admin-list-dnDAubDa.js";import{c as v,i as y,l as b,n as x,o as S,r as C,s as w,t as T}from"./dict-D-xskQUn.js";var ae={class:`list-page`},E={class:`page-header`},D={class:`list-filter-bar`},O={class:`table-row-actions`},k={class:`list-pager`},A={class:`items-toolbar`},j={class:`table-row-actions`},M=h(ee({__name:`index`,setup(ee){let h=l(!1),M=l([]),N=l({current_page:1,per_page:20,total:0}),P=l(1),F=l(``),I=l(!1),L=l(null),R=l([]),z=l(!1),B=l(!1),V=l(null),H=l({code:``,name:``,remark:``,status:1,sort:0});async function U(){h.value=!0;try{let e=await w({page:P.value,page_size:N.value.per_page,keyword:F.value||void 0});M.value=e.items,N.value=e.meta}finally{h.value=!1}}function W(){V.value=null,H.value={code:``,name:``,remark:``,status:1,sort:0},B.value=!0}function G(e){V.value=e,H.value={code:e.code,name:e.name,remark:e.remark||``,status:e.status,sort:e.sort},B.value=!0}async function K(){V.value?await b(V.value.id,H.value):await x(H.value),m.success(`已保存`),B.value=!1,await U()}async function q(e){await p.confirm(`确定删除字典类型「${e.name}」及其全部字典项?`,`提示`,{type:`warning`}),await y(e.id),m.success(`已删除`),await U()}async function oe(e){L.value=e,I.value=!0,z.value=!0;try{R.value=await S(e.id)}finally{z.value=!1}}let J=l(!1),Y=l(null),X=l({label:``,value:``,sort:0,status:1});function se(){Y.value=null,X.value={label:``,value:``,sort:0,status:1},J.value=!0}function ce(e){Y.value=e,X.value={label:e.label,value:e.value,sort:e.sort,status:e.status},J.value=!0}async function le(){L.value&&(Y.value?await v(L.value.id,Y.value.id,X.value):await T(L.value.id,X.value),m.success(`已保存`),J.value=!1,R.value=await S(L.value.id))}async function ue(e){L.value&&(await p.confirm(`删除字典项「${e.label}」?`,`提示`,{type:`warning`}),await C(L.value.id,e.id),m.success(`已删除`),R.value=await S(L.value.id))}function Z(){P.value=1,U()}function Q(){F.value=``,P.value=1,U()}return g(U),(ee,l)=>{let p=o(`el-button`),m=o(`el-input`),g=o(`el-table-column`),v=o(`el-table`),y=o(`el-pagination`),b=o(`el-card`),x=o(`el-form-item`),S=o(`el-input-number`),C=o(`el-switch`),w=o(`el-form`),T=o(`el-dialog`),$=te(`loading`);return r(),e(re,null,[c(`div`,ae,[c(`div`,E,[n(ie),n(p,{type:`primary`,size:`small`,class:`btn-create`,onClick:W},{default:s(()=>[...l[17]||=[i(`新增类型`,-1)]]),_:1})]),n(b,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[c(`div`,D,[n(m,{modelValue:F.value,"onUpdate:modelValue":l[0]||=e=>F.value=e,placeholder:`编码/名称`,clearable:``,class:`filter-search`,onKeyup:ne(Z,[`enter`])},null,8,[`modelValue`]),n(p,{type:`primary`,onClick:Z},{default:s(()=>[...l[18]||=[i(`搜索`,-1)]]),_:1}),n(p,{onClick:Q},{default:s(()=>[...l[19]||=[i(`重置`,-1)]]),_:1})]),u((r(),f(v,{data:M.value,"row-key":`id`},{default:s(()=>[n(g,{prop:`code`,label:`编码`,width:`160`}),n(g,{prop:`name`,label:`名称`,width:`180`}),n(g,{prop:`remark`,label:`备注`,"min-width":`200`,"show-overflow-tooltip":``}),n(g,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),n(g,{label:`状态`,width:`90`,align:`center`},{default:s(({row:e})=>[c(`span`,{class:a([`status-badge`,t(_)(e.status)])},d(e.status===1?`启用`:`停用`),3)]),_:1}),n(g,{label:`操作`,width:`240`,fixed:`right`},{default:s(({row:e})=>[c(`div`,O,[n(p,{class:`btn-action-brand`,onClick:t=>oe(e)},{default:s(()=>[...l[20]||=[i(`字典项`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-primary`,onClick:t=>G(e)},{default:s(()=>[...l[21]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>q(e)},{default:s(()=>[...l[22]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,h.value]]),c(`div`,k,[n(y,{"current-page":P.value,"onUpdate:currentPage":l[1]||=e=>P.value=e,layout:`total, prev, pager, next`,total:N.value.total,"page-size":N.value.per_page,onCurrentChange:U},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),n(T,{modelValue:B.value,"onUpdate:modelValue":l[9]||=e=>B.value=e,title:V.value?`编辑类型`:`新增类型`,width:`480px`},{footer:s(()=>[n(p,{onClick:l[8]||=e=>B.value=!1},{default:s(()=>[...l[23]||=[i(`取消`,-1)]]),_:1}),n(p,{type:`primary`,onClick:K},{default:s(()=>[...l[24]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(w,{"label-width":`88px`},{default:s(()=>[V.value?(r(),f(x,{key:1,label:`编码`},{default:s(()=>[n(m,{modelValue:H.value.code,"onUpdate:modelValue":l[3]||=e=>H.value.code=e,disabled:``},null,8,[`modelValue`])]),_:1})):(r(),f(x,{key:0,label:`编码`},{default:s(()=>[n(m,{modelValue:H.value.code,"onUpdate:modelValue":l[2]||=e=>H.value.code=e},null,8,[`modelValue`])]),_:1})),n(x,{label:`名称`},{default:s(()=>[n(m,{modelValue:H.value.name,"onUpdate:modelValue":l[4]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`备注`},{default:s(()=>[n(m,{modelValue:H.value.remark,"onUpdate:modelValue":l[5]||=e=>H.value.remark=e,type:`textarea`,rows:2},null,8,[`modelValue`])]),_:1}),n(x,{label:`排序`},{default:s(()=>[n(S,{modelValue:H.value.sort,"onUpdate:modelValue":l[6]||=e=>H.value.sort=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`状态`},{default:s(()=>[n(C,{modelValue:H.value.status,"onUpdate:modelValue":l[7]||=e=>H.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),n(T,{modelValue:I.value,"onUpdate:modelValue":l[10]||=e=>I.value=e,title:L.value?`字典项 · ${L.value.name}`:`字典项`,width:`720px`,"destroy-on-close":``},{default:s(()=>[c(`div`,A,[n(p,{type:`primary`,size:`small`,onClick:se},{default:s(()=>[...l[25]||=[i(`新增字典项`,-1)]]),_:1})]),u((r(),f(v,{data:R.value,"row-key":`id`,style:{"margin-top":`8px`}},{default:s(()=>[n(g,{prop:`label`,label:`展示`,width:`160`}),n(g,{prop:`value`,label:`值`,width:`160`}),n(g,{prop:`sort`,label:`排序`,width:`80`}),n(g,{label:`状态`,width:`90`},{default:s(({row:e})=>[c(`span`,{class:a([`status-badge`,t(_)(e.status)])},d(e.status===1?`启用`:`停用`),3)]),_:1}),n(g,{label:`操作`,width:`160`},{default:s(({row:e})=>[c(`div`,j,[n(p,{class:`btn-action-primary`,onClick:t=>ce(e)},{default:s(()=>[...l[26]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>ue(e)},{default:s(()=>[...l[27]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,z.value]])]),_:1},8,[`modelValue`,`title`]),n(T,{modelValue:J.value,"onUpdate:modelValue":l[16]||=e=>J.value=e,title:Y.value?`编辑字典项`:`新增字典项`,width:`420px`},{footer:s(()=>[n(p,{onClick:l[15]||=e=>J.value=!1},{default:s(()=>[...l[28]||=[i(`取消`,-1)]]),_:1}),n(p,{type:`primary`,onClick:le},{default:s(()=>[...l[29]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(w,{"label-width":`72px`},{default:s(()=>[n(x,{label:`展示`},{default:s(()=>[n(m,{modelValue:X.value.label,"onUpdate:modelValue":l[11]||=e=>X.value.label=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`值`},{default:s(()=>[n(m,{modelValue:X.value.value,"onUpdate:modelValue":l[12]||=e=>X.value.value=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`排序`},{default:s(()=>[n(S,{modelValue:X.value.sort,"onUpdate:modelValue":l[13]||=e=>X.value.sort=e},null,8,[`modelValue`])]),_:1}),n(x,{label:`状态`},{default:s(()=>[n(C,{modelValue:X.value.status,"onUpdate:modelValue":l[14]||=e=>X.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-1ea9c85a`]]);export{M as default}; \ No newline at end of file diff --git a/public/admin/assets/grid-members-D7SAtq1u.js b/public/admin/assets/grid-members-DcRFykJ_.js similarity index 82% rename from public/admin/assets/grid-members-D7SAtq1u.js rename to public/admin/assets/grid-members-DcRFykJ_.js index ffe8579..ce15176 100644 --- a/public/admin/assets/grid-members-D7SAtq1u.js +++ b/public/admin/assets/grid-members-DcRFykJ_.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/grid-members`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/grid-members`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/grid-members/${t}`,n);return r}async function i(t,n){let{data:r}=await e.post(`/admin/v1/grid-members/${t}/password`,{password:n});return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/grid-members/${t}`);return n}export{r as a,i,a as n,t as r,n as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/grid-members`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/grid-members`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/grid-members/${t}`,n);return r}async function i(t,n){let{data:r}=await e.post(`/admin/v1/grid-members/${t}/password`,{password:n});return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/grid-members/${t}`);return n}export{r as a,i,a as n,t as r,n as t}; \ No newline at end of file diff --git a/public/admin/assets/grid-members-Brl1TJ9T.js b/public/admin/assets/grid-members-n6u-kBbI.js similarity index 94% rename from public/admin/assets/grid-members-Brl1TJ9T.js rename to public/admin/assets/grid-members-n6u-kBbI.js index f096e7e..7a20536 100644 --- a/public/admin/assets/grid-members-Brl1TJ9T.js +++ b/public/admin/assets/grid-members-n6u-kBbI.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as y,l as b}from"./index-DHoSHxJa.js";import{n as x,t as S}from"./usePageLoad-C9PEZ_Tm.js";import{r as C}from"./admin-list-DjncsyJC.js";import{p as w}from"./teachers-DsTLUxF9.js";import{a as T,i as E,n as D,r as O,t as k}from"./grid-members-D7SAtq1u.js";import{r as A}from"./research-directions-C0FNlolV.js";var j={class:`list-page`},M={class:`page-header`},N={class:`list-filter-bar`},P={class:`table-row-actions`},F={class:`list-pager`},I=n({__name:`index`,setup(n){let I=p(!1),L=p([]),R=p({current_page:1,per_page:20,total:0}),z=p(``),B=p(1),V=p([]),H=p([]),U=p(!1),W=p(null),G=p({username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]});async function K(){let[e,t]=await Promise.all([w({page:1,page_size:500,simple:1}),A()]);V.value=e.items.map(e=>({id:e.id,name:e.name})),H.value=t.map(e=>({id:e.id,name:e.name}))}async function q(){I.value=!0;try{let e=await O({page:B.value,page_size:R.value.per_page,keyword:z.value||void 0});L.value=e.items,R.value=e.meta}finally{I.value=!1}}function J(){W.value=null,G.value={username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]},U.value=!0}function Y(e){W.value=e,G.value={username:e.username,password:``,real_name:e.real_name||``,mobile:e.mobile||``,email:e.email||``,status:e.status,university_ids:e.universities?.map(e=>e.id)||[],research_direction_ids:e.research_directions?.map(e=>e.id)||[]},U.value=!0}async function X(){if(!W.value&&!G.value.password){b.warning(`请设置初始密码`);return}if(!G.value.university_ids.length){b.warning(`请至少选择一个负责高校`);return}if(!G.value.research_direction_ids.length){b.warning(`请至少选择一个研究方向`);return}let e={real_name:G.value.real_name||null,mobile:G.value.mobile||null,email:G.value.email||null,status:G.value.status,university_ids:G.value.university_ids,research_direction_ids:G.value.research_direction_ids};W.value?(await T(W.value.id,e),G.value.password&&await E(W.value.id,G.value.password)):await k({username:G.value.username,password:G.value.password,...e}),b.success(`已保存`),U.value=!1,await q()}async function Z(e){await y.confirm(`确定删除网格员「${e.username}」?`,`提示`,{type:`warning`}),await D(e.id),b.success(`已删除`),await q()}function Q(){B.value=1,q()}function $(){z.value=``,B.value=1,q()}return S(async()=>{await K(),await q()}),(n,p)=>{let y=l(`el-button`),b=l(`el-input`),S=l(`el-table-column`),w=l(`el-tag`),T=l(`el-table`),E=l(`el-pagination`),D=l(`el-card`),O=l(`el-form-item`),k=l(`el-switch`),A=l(`el-option`),K=l(`el-select`),ee=l(`el-form`),te=l(`el-dialog`),ne=s(`loading`);return i(),e(m,null,[d(`div`,j,[d(`div`,M,[r(x),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:J},{default:u(()=>[...p[12]||=[o(`新增网格员`,-1)]]),_:1})]),r(D,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,N,[r(b,{modelValue:z.value,"onUpdate:modelValue":p[0]||=e=>z.value=e,placeholder:`账号/姓名/手机`,clearable:``,class:`filter-search`,onKeyup:f(Q,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:Q},{default:u(()=>[...p[13]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:$},{default:u(()=>[...p[14]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(T,{data:L.value,"row-key":`id`},{default:u(()=>[r(S,{prop:`username`,label:`账号`,width:`130`}),r(S,{prop:`real_name`,label:`姓名`,width:`110`}),r(S,{label:`负责高校`,"min-width":`180`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.universities,e=>(i(),v(w,{key:e.id,size:`small`,style:{margin:`2px 4px 2px 0`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`研究方向`,"min-width":`180`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.research_directions,e=>(i(),v(w,{key:e.id,size:`small`,type:`info`,style:{margin:`2px 4px 2px 0`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(S,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,P,[r(y,{class:`btn-action-primary`,onClick:t=>Y(e)},{default:u(()=>[...p[15]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>Z(e)},{default:u(()=>[...p[16]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ne,I.value]]),d(`div`,F,[r(E,{"current-page":B.value,"onUpdate:currentPage":p[1]||=e=>B.value=e,layout:`total, prev, pager, next`,total:R.value.total,"page-size":R.value.per_page,onCurrentChange:q},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(te,{modelValue:U.value,"onUpdate:modelValue":p[11]||=e=>U.value=e,title:W.value?`编辑网格员`:`新增网格员`,width:`560px`},{footer:u(()=>[r(y,{onClick:p[10]||=e=>U.value=!1},{default:u(()=>[...p[17]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:X},{default:u(()=>[...p[18]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r(ee,{"label-width":`100px`},{default:u(()=>[W.value?a(``,!0):(i(),v(O,{key:0,label:`账号`},{default:u(()=>[r(b,{modelValue:G.value.username,"onUpdate:modelValue":p[2]||=e=>G.value.username=e},null,8,[`modelValue`])]),_:1})),r(O,{label:W.value?`重置密码`:`初始密码`},{default:u(()=>[r(b,{modelValue:G.value.password,"onUpdate:modelValue":p[3]||=e=>G.value.password=e,type:`password`,"show-password":``,placeholder:W.value?`可留空`:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),r(O,{label:`姓名`},{default:u(()=>[r(b,{modelValue:G.value.real_name,"onUpdate:modelValue":p[4]||=e=>G.value.real_name=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`手机`},{default:u(()=>[r(b,{modelValue:G.value.mobile,"onUpdate:modelValue":p[5]||=e=>G.value.mobile=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`邮箱`},{default:u(()=>[r(b,{modelValue:G.value.email,"onUpdate:modelValue":p[6]||=e=>G.value.email=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`状态`},{default:u(()=>[r(k,{modelValue:G.value.status,"onUpdate:modelValue":p[7]||=e=>G.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(O,{label:`负责高校`},{default:u(()=>[r(K,{modelValue:G.value.university_ids,"onUpdate:modelValue":p[8]||=e=>G.value.university_ids=e,multiple:``,filterable:``,style:{width:`100%`},placeholder:`选择高校`},{default:u(()=>[(i(!0),e(m,null,g(V.value,e=>(i(),v(A,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),r(O,{label:`研究方向`},{default:u(()=>[r(K,{modelValue:G.value.research_direction_ids,"onUpdate:modelValue":p[9]||=e=>G.value.research_direction_ids=e,multiple:``,filterable:``,style:{width:`100%`},placeholder:`选择研究方向`},{default:u(()=>[(i(!0),e(m,null,g(H.value,e=>(i(),v(A,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{I as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as y,l as b}from"./index-CPrkFf57.js";import{n as x,t as S}from"./usePageLoad-B1L6ImD-.js";import{r as C}from"./admin-list-dnDAubDa.js";import{p as w}from"./teachers-BWvhNkqR.js";import{a as T,i as E,n as D,r as O,t as k}from"./grid-members-DcRFykJ_.js";import{r as A}from"./research-directions-BOEV4y5H.js";var j={class:`list-page`},M={class:`page-header`},N={class:`list-filter-bar`},P={class:`table-row-actions`},F={class:`list-pager`},I=n({__name:`index`,setup(n){let I=p(!1),L=p([]),R=p({current_page:1,per_page:20,total:0}),z=p(``),B=p(1),V=p([]),H=p([]),U=p(!1),W=p(null),G=p({username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]});async function K(){let[e,t]=await Promise.all([w({page:1,page_size:500,simple:1}),A()]);V.value=e.items.map(e=>({id:e.id,name:e.name})),H.value=t.map(e=>({id:e.id,name:e.name}))}async function q(){I.value=!0;try{let e=await O({page:B.value,page_size:R.value.per_page,keyword:z.value||void 0});L.value=e.items,R.value=e.meta}finally{I.value=!1}}function J(){W.value=null,G.value={username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]},U.value=!0}function Y(e){W.value=e,G.value={username:e.username,password:``,real_name:e.real_name||``,mobile:e.mobile||``,email:e.email||``,status:e.status,university_ids:e.universities?.map(e=>e.id)||[],research_direction_ids:e.research_directions?.map(e=>e.id)||[]},U.value=!0}async function X(){if(!W.value&&!G.value.password){b.warning(`请设置初始密码`);return}if(!G.value.university_ids.length){b.warning(`请至少选择一个负责高校`);return}if(!G.value.research_direction_ids.length){b.warning(`请至少选择一个研究方向`);return}let e={real_name:G.value.real_name||null,mobile:G.value.mobile||null,email:G.value.email||null,status:G.value.status,university_ids:G.value.university_ids,research_direction_ids:G.value.research_direction_ids};W.value?(await T(W.value.id,e),G.value.password&&await E(W.value.id,G.value.password)):await k({username:G.value.username,password:G.value.password,...e}),b.success(`已保存`),U.value=!1,await q()}async function Z(e){await y.confirm(`确定删除网格员「${e.username}」?`,`提示`,{type:`warning`}),await D(e.id),b.success(`已删除`),await q()}function Q(){B.value=1,q()}function $(){z.value=``,B.value=1,q()}return S(async()=>{await K(),await q()}),(n,p)=>{let y=l(`el-button`),b=l(`el-input`),S=l(`el-table-column`),w=l(`el-tag`),T=l(`el-table`),E=l(`el-pagination`),D=l(`el-card`),O=l(`el-form-item`),k=l(`el-switch`),A=l(`el-option`),K=l(`el-select`),ee=l(`el-form`),te=l(`el-dialog`),ne=s(`loading`);return i(),e(m,null,[d(`div`,j,[d(`div`,M,[r(x),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:J},{default:u(()=>[...p[12]||=[o(`新增网格员`,-1)]]),_:1})]),r(D,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,N,[r(b,{modelValue:z.value,"onUpdate:modelValue":p[0]||=e=>z.value=e,placeholder:`账号/姓名/手机`,clearable:``,class:`filter-search`,onKeyup:f(Q,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:Q},{default:u(()=>[...p[13]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:$},{default:u(()=>[...p[14]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(T,{data:L.value,"row-key":`id`},{default:u(()=>[r(S,{prop:`username`,label:`账号`,width:`130`}),r(S,{prop:`real_name`,label:`姓名`,width:`110`}),r(S,{label:`负责高校`,"min-width":`180`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.universities,e=>(i(),v(w,{key:e.id,size:`small`,style:{margin:`2px 4px 2px 0`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`研究方向`,"min-width":`180`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.research_directions,e=>(i(),v(w,{key:e.id,size:`small`,type:`info`,style:{margin:`2px 4px 2px 0`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(S,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,P,[r(y,{class:`btn-action-primary`,onClick:t=>Y(e)},{default:u(()=>[...p[15]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>Z(e)},{default:u(()=>[...p[16]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ne,I.value]]),d(`div`,F,[r(E,{"current-page":B.value,"onUpdate:currentPage":p[1]||=e=>B.value=e,layout:`total, prev, pager, next`,total:R.value.total,"page-size":R.value.per_page,onCurrentChange:q},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(te,{modelValue:U.value,"onUpdate:modelValue":p[11]||=e=>U.value=e,title:W.value?`编辑网格员`:`新增网格员`,width:`560px`},{footer:u(()=>[r(y,{onClick:p[10]||=e=>U.value=!1},{default:u(()=>[...p[17]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:X},{default:u(()=>[...p[18]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r(ee,{"label-width":`100px`},{default:u(()=>[W.value?a(``,!0):(i(),v(O,{key:0,label:`账号`},{default:u(()=>[r(b,{modelValue:G.value.username,"onUpdate:modelValue":p[2]||=e=>G.value.username=e},null,8,[`modelValue`])]),_:1})),r(O,{label:W.value?`重置密码`:`初始密码`},{default:u(()=>[r(b,{modelValue:G.value.password,"onUpdate:modelValue":p[3]||=e=>G.value.password=e,type:`password`,"show-password":``,placeholder:W.value?`可留空`:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),r(O,{label:`姓名`},{default:u(()=>[r(b,{modelValue:G.value.real_name,"onUpdate:modelValue":p[4]||=e=>G.value.real_name=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`手机`},{default:u(()=>[r(b,{modelValue:G.value.mobile,"onUpdate:modelValue":p[5]||=e=>G.value.mobile=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`邮箱`},{default:u(()=>[r(b,{modelValue:G.value.email,"onUpdate:modelValue":p[6]||=e=>G.value.email=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`状态`},{default:u(()=>[r(k,{modelValue:G.value.status,"onUpdate:modelValue":p[7]||=e=>G.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(O,{label:`负责高校`},{default:u(()=>[r(K,{modelValue:G.value.university_ids,"onUpdate:modelValue":p[8]||=e=>G.value.university_ids=e,multiple:``,filterable:``,style:{width:`100%`},placeholder:`选择高校`},{default:u(()=>[(i(!0),e(m,null,g(V.value,e=>(i(),v(A,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),r(O,{label:`研究方向`},{default:u(()=>[r(K,{modelValue:G.value.research_direction_ids,"onUpdate:modelValue":p[9]||=e=>G.value.research_direction_ids=e,multiple:``,filterable:``,style:{width:`100%`},placeholder:`选择研究方向`},{default:u(()=>[(i(!0),e(m,null,g(H.value,e=>(i(),v(A,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{I as default}; \ No newline at end of file diff --git a/public/admin/assets/index-DHoSHxJa.js b/public/admin/assets/index-CPrkFf57.js similarity index 99% rename from public/admin/assets/index-DHoSHxJa.js rename to public/admin/assets/index-CPrkFf57.js index 030ed83..6bf7039 100644 --- a/public/admin/assets/index-DHoSHxJa.js +++ b/public/admin/assets/index-CPrkFf57.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-YwfjTZ3h.js","assets/vue.runtime.esm-bundler-DUiYyeqQ.js","assets/rolldown-runtime-BYbx6iT9.js","assets/HomeView-DQR8Ah5o.css","assets/banners-B2EbjTBF.js","assets/RichTextEditor-B2PNXVgT.js","assets/RichTextEditor-B7FsLORh.css","assets/activities-khLGM69i.js","assets/courses-ayi38cX4.js","assets/news-Dji71J9m.js","assets/usePageLoad-C9PEZ_Tm.js","assets/admin-list-DjncsyJC.js","assets/banners-BRAYVXjx.css","assets/crawler-DA_awB1N.js","assets/assets-hAC2p2Vo.js","assets/crawl-addresses-BpBPSYbl.js","assets/dict-D30aLydL.js","assets/crawler-DhqCdk0h.css","assets/map-at8VSzKi.js","assets/TeacherDetailDialog-Df17GCYR.js","assets/demands-DG70Ky1b.js","assets/teachers-DsTLUxF9.js","assets/teacherStar-DhP_EdY6.js","assets/TeacherDetailDialog-DoBI1gU_.css","assets/tiandituMap-B0Q-vV8c.js","assets/map-C9vbPZDv.css","assets/dashboard-page-BDVhNuHE.css","assets/papers-BJUlKbT6.js","assets/papers-BLksOcm9.css","assets/universities-BOMonfuo.js","assets/universities-Ck798x-Y.css","assets/dashboard-0tHyGURo.js","assets/dashboard-Bt0iYPFd.css","assets/demands-CvY88JMp.js","assets/users-U4ei8OXs.js","assets/demands-BD3K4_Fz.css","assets/login-ClnRBds7.js","assets/login-ULkTC2R_.css","assets/activities-CMrLWqB9.js","assets/csv-export-CMyUqpMf.js","assets/csv-export-BJBhoiZr.css","assets/activities-B57tbDtt.css","assets/courses-BEPRXk7p.js","assets/courses-6bjQLQVW.css","assets/news-DCTf0UO8.js","assets/news-B_2I2ecA.css","assets/students-DtOxgydU.js","assets/grid-members-D7SAtq1u.js","assets/students-CuiVVAUU.css","assets/audit-logs-BknMxI6A.js","assets/crawl-addresses-D4W6XOd-.js","assets/crawl-addresses-DW_TdcBM.css","assets/dict-UJMjDsdM.js","assets/dict-DHWXzQNz.css","assets/grid-members-Brl1TJ9T.js","assets/research-directions-C0FNlolV.js","assets/menus-DJ1r7fmI.js","assets/menus-BEgUBQhC.js","assets/research-directions-Cuytezev.js","assets/roles-JoCAhY96.js","assets/roles-BboDOvYZ.js","assets/roles-CdAuDaBd.css","assets/users-BFL5CvH3.js","assets/teachers-Dfwyz9ux.js","assets/teachers-pG_1bxUc.css","assets/AdminLayout-rkGKMvAb.js","assets/AdminLayout-36MHwY55.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-Bq5Pmq0E.js","assets/vue.runtime.esm-bundler-DUiYyeqQ.js","assets/rolldown-runtime-BYbx6iT9.js","assets/HomeView-DQR8Ah5o.css","assets/banners-CG4qXWZW.js","assets/RichTextEditor-Rtwkj953.js","assets/upload-qqZxNm7U.js","assets/RichTextEditor-B7FsLORh.css","assets/activities-3eo24xB0.js","assets/courses-DPJyM0Kj.js","assets/news-CsIxVVGt.js","assets/usePageLoad-B1L6ImD-.js","assets/admin-list-dnDAubDa.js","assets/banners-BRAYVXjx.css","assets/crawler-Dn8Fhsxl.js","assets/assets-DlFfPb4n.js","assets/crawl-addresses-D7PSrbmU.js","assets/dict-D-xskQUn.js","assets/crawler-DhqCdk0h.css","assets/map-b5jC9MGz.js","assets/TeacherDetailDialog-BwE7UVMD.js","assets/demands-DeUMyXK9.js","assets/teachers-BWvhNkqR.js","assets/teacherStar-CbiOJu8v.js","assets/TeacherDetailDialog-DoBI1gU_.css","assets/tiandituMap-BWmh1toR.js","assets/map-C9vbPZDv.css","assets/dashboard-page-BDVhNuHE.css","assets/papers-Bxe2o_F5.js","assets/papers-BLksOcm9.css","assets/universities-Dschxe-D.js","assets/universities-Ck798x-Y.css","assets/dashboard-DL4Rr2Er.js","assets/dashboard-Bt0iYPFd.css","assets/demands-BIE9utJy.js","assets/users-BIXJy9ht.js","assets/demands-BD3K4_Fz.css","assets/login-DZjGqMen.js","assets/login-CYuJwixp.css","assets/activities-BlfllI2o.js","assets/csv-export-Cl9Lwtz8.js","assets/csv-export-BJBhoiZr.css","assets/activities-B57tbDtt.css","assets/courses-BDy8J_6B.js","assets/courses-6bjQLQVW.css","assets/news-CkDCcGbT.js","assets/news-B_2I2ecA.css","assets/past-reviews-RwepuJlS.js","assets/past-reviews-CkSYKgQl.css","assets/students-Ck-5WNi7.js","assets/grid-members-DcRFykJ_.js","assets/students-DgIOG0sM.css","assets/audit-logs-CcZSWGNE.js","assets/crawl-addresses-DgRZGJyd.js","assets/crawl-addresses-DW_TdcBM.css","assets/dict-giEClWT-.js","assets/dict-DHWXzQNz.css","assets/grid-members-n6u-kBbI.js","assets/research-directions-BOEV4y5H.js","assets/menus-c1bak3RD.js","assets/menus-C1RorO0e.js","assets/research-directions-CW-61eRh.js","assets/roles-CUFvJuCz.js","assets/roles-CUNMD5Zg.js","assets/roles-CdAuDaBd.css","assets/users-DTRBpffL.js","assets/teachers-BtQgJP3e.js","assets/teachers-CL5Hu-Uh.css","assets/AdminLayout-BJlk0I2v.js","assets/AdminLayout-BiGa4y1e.css"])))=>i.map(i=>d[i]); import{a as e,r as t,t as n}from"./rolldown-runtime-BYbx6iT9.js";import{$ as r,A as i,B as a,Bt as o,C as s,Ct as c,D as l,Dt as u,E as d,Et as f,F as p,G as m,H as h,Ht as g,I as _,It as v,J as y,K as b,Kt as x,L as S,Lt as C,M as w,Mt as T,N as E,Nt as D,O,Ot as k,Pt as A,Q as j,Qt as M,R as N,S as P,St as F,T as I,U as ee,Ut as te,V as ne,W as re,X as ie,Xt as L,Y as R,Z as z,Zt as ae,_ as oe,_t as se,a as ce,at as B,b as V,bt as le,c as ue,ct as de,d as fe,dt as pe,f as me,ft as he,g as ge,gt as _e,ht as H,it as ve,j as ye,jt as be,k as xe,l as Se,lt as Ce,m as we,mt as Te,n as Ee,nn as De,nt as Oe,ot as ke,p as Ae,pt as je,q as Me,r as Ne,rt as U,s as Pe,st as Fe,t as Ie,tn as W,tt as Le,u as Re,ut as ze,v as Be,vt as Ve,w as He,x as G,xt as Ue,y as K,yt as We,z as Ge}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Ke=typeof window<`u`,qe,Je=e=>qe=e,Ye=Symbol();function Xe(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var Ze;(function(e){e.direct=`direct`,e.patchObject=`patch object`,e.patchFunction=`patch function`})(Ze||={});var Qe=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function $e(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function et(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){at(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function tt(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function nt(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var rt=typeof navigator==`object`?navigator:{userAgent:``},it=/Macintosh/.test(rt.userAgent)&&/AppleWebKit/.test(rt.userAgent)&&!/Safari/.test(rt.userAgent),at=Ke?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!it?ot:`msSaveOrOpenBlob`in rt?st:ct:()=>{};function ot(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?nt(r):tt(r.href)?et(e,t,n):(r.target=`_blank`,nt(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){nt(r)},0))}function st(e,t=`download`,n){if(typeof e==`string`)if(tt(e))et(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){nt(t)})}else navigator.msSaveOrOpenBlob($e(e,n),t)}function ct(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return et(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(Qe.HTMLElement))||`safari`in Qe,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||it)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:lt}=Object;function ut(){let e=Fe(!0),t=e.run(()=>H({})),n=[],r=[],i=pe({install(e){Je(i),i._a=e,e.provide(Ye,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var dt=()=>{};function ft(e,t,n,r=dt){e.add(t);let i=()=>{e.delete(t)&&r()};return!n&&de()&&he(i),i}function pt(e,...t){e.forEach(e=>{e(...t)})}var mt=e=>e(),ht=Symbol(),gt=Symbol();function _t(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!t.hasOwnProperty(n))continue;let r=t[n],i=e[n];Xe(i)&&Xe(r)&&e.hasOwnProperty(n)&&!ze(r)&&!Ce(r)?e[n]=_t(i,r):e[n]=r}return e}var vt=Symbol();function yt(e){return!Xe(e)||!Object.prototype.hasOwnProperty.call(e,vt)}var{assign:bt}=Object;function xt(e){return!!(ze(e)&&e.effect)}function St(e,t,n,r){let{state:i,actions:a,getters:o}=t,s=n.state.value[e],c;function l(){return s||(n.state.value[e]=i?i():{}),bt(le(n.state.value[e]),a,Object.keys(o||{}).reduce((t,r)=>(t[r]=pe(K(()=>{Je(n);let t=n._s.get(e);return o[r].call(t,t)})),t),{}))}return c=Ct(e,l,t,n,r,!0),c}function Ct(e,t,n={},r,i,a){let o,s=bt({actions:{}},n),c={deep:!0},l,u,d=new Set,f=new Set,p=r.state.value[e];!a&&!p&&(r.state.value[e]={}),H({});let m;function h(t){let n;l=u=!1,typeof t==`function`?(t(r.state.value[e]),n={type:Ze.patchFunction,storeId:e,events:void 0}):(_t(r.state.value[e],t),n={type:Ze.patchObject,payload:t,storeId:e,events:void 0});let i=m=Symbol();_().then(()=>{m===i&&(l=!0)}),u=!0,pt(d,n,r.state.value[e])}let g=a?function(){let{state:e}=n,t=e?e():{};this.$patch(e=>{bt(e,t)})}:dt;function v(){o.stop(),d.clear(),f.clear(),r._s.delete(e)}let y=(t,n=``)=>{if(ht in t)return t[gt]=n,t;let i=function(){Je(r);let n=Array.from(arguments),a=new Set,o=new Set;function s(e){a.add(e)}function c(e){o.add(e)}pt(f,{args:n,name:i[gt],store:b,after:s,onError:c});let l;try{l=t.apply(this&&this.$id===e?this:b,n)}catch(e){throw pt(o,e),e}return l instanceof Promise?l.then(e=>(pt(a,e),e)).catch(e=>(pt(o,e),Promise.reject(e))):(pt(a,l),l)};return i[ht]=!0,i[gt]=n,i},b=je({_p:r,$id:e,$onAction:ft.bind(null,f),$patch:h,$reset:g,$subscribe(t,n={}){let i=ft(d,t,n.detached,()=>a()),a=o.run(()=>U(()=>r.state.value[e],r=>{(n.flush===`sync`?u:l)&&t({storeId:e,type:Ze.direct,events:void 0},r)},bt({},c,n)));return i},$dispose:v});r._s.set(e,b);let x=(r._a&&r._a.runWithContext||mt)(()=>r._e.run(()=>(o=Fe()).run(()=>t({action:y}))));for(let t in x){let n=x[t];ze(n)&&!xt(n)||Ce(n)?a||(p&&yt(n)&&(ze(n)?n.value=p[t]:_t(n,p[t])),r.state.value[e][t]=n):typeof n==`function`&&(x[t]=y(n,t),s.actions[t]=n)}return bt(b,x),bt(Ve(b),x),Object.defineProperty(b,`$state`,{get:()=>r.state.value[e],set:e=>{h(t=>{bt(t,e)})}}),r._p.forEach(e=>{bt(b,o.run(()=>e({store:b,app:r._a,pinia:r,options:s})))}),p&&a&&n.hydrate&&n.hydrate(b.$state,p),l=!0,u=!0,b}function wt(e,t,n){let r,i=typeof t==`function`;r=i?n:t;function a(n,a){let o=ye();return n||=o?w(Ye,null):null,n&&Je(n),n=qe,n._s.has(e)||(i?Ct(e,t,r,n):St(e,r,n)),n._s.get(e)}return a.$id=e,a}var q={tab:`Tab`,enter:`Enter`,space:`Space`,left:`ArrowLeft`,up:`ArrowUp`,right:`ArrowRight`,down:`ArrowDown`,esc:`Escape`,delete:`Delete`,backspace:`Backspace`,numpadEnter:`NumpadEnter`,pageUp:`PageUp`,pageDown:`PageDown`,home:`Home`,end:`End`},Tt=[`left`,`center`,`right`],Et=[`year`,`years`,`month`,`months`,`date`,`dates`,`week`,`datetime`,`datetimerange`,`daterange`,`monthrange`,`yearrange`],Dt=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`],Ot=`update:modelValue`,kt=`change`,At=`input`,jt=Symbol(`INSTALLED_KEY`),Mt=[``,`default`,`small`,`large`];function Nt(e,t){let n=se();return ve(()=>{n.value=e()},{...t,flush:t?.flush??`sync`}),Te(n)}function Pt(e){return de()?(he(e),!0):!1}function Ft(e){return typeof e==`function`?e():c(e)}function It(e){return ze(e)?je(new Proxy({},{get(t,n,r){return c(Reflect.get(e.value,n,r))},set(t,n,r){return ze(e.value[n])&&!ze(r)?e.value[n].value=r:e.value[n]=r,!0},deleteProperty(t,n){return Reflect.deleteProperty(e.value,n)},has(t,n){return Reflect.has(e.value,n)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}})):je(e)}function Lt(e){return It(K(e))}var Rt=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var zt=e=>e!==void 0,Bt=e=>e!=null,Vt=Object.prototype.toString,Ht=e=>Vt.call(e)===`[object Object]`,Ut=(e,t,n)=>Math.min(n,Math.max(t,e)),Wt=()=>{},Gt=Kt();function Kt(){return Rt&&(window==null?void 0:window.navigator)?.userAgent&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||(window==null?void 0:window.navigator)?.maxTouchPoints>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function qt(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}function Jt(e,t={}){let n,r,i=Wt,a=e=>{clearTimeout(e),i(),i=Wt};return o=>{let s=Ft(e),c=Ft(t.maxWait);return n&&a(n),s<=0||c!==void 0&&c<=0?(r&&=(a(r),null),Promise.resolve(o())):new Promise((e,l)=>{i=t.rejectOnCancel?l:e,c&&!r&&(r=setTimeout(()=>{n&&a(n),r=null,e(o())},c)),n=setTimeout(()=>{r&&a(r),r=null,e(o())},s)})}}function Yt(...e){let t=0,n,r=!0,i=Wt,a,o,s,c,l;!ze(e[0])&&typeof e[0]==`object`?{delay:o,trailing:s=!0,leading:c=!0,rejectOnCancel:l=!1}=e[0]:[o,s=!0,c=!0,l=!1]=e;let u=()=>{n&&(clearTimeout(n),n=void 0,i(),i=Wt)};return e=>{let d=Ft(o),f=Date.now()-t,p=()=>a=e();return u(),d<=0?(t=Date.now(),p()):(f>d&&(c||!r)?(t=Date.now(),p()):s&&(a=new Promise((e,a)=>{i=l?a:e,n=setTimeout(()=>{t=Date.now(),r=!0,e(p()),u()},Math.max(0,d-f))})),!c&&!n&&(n=setTimeout(()=>r=!0,d)),r=!1,a)}}function Xt(e){return e||O()}function Zt(e,t=200,n={}){return qt(Jt(t,n),e)}function Qt(e,t=200,n={}){let r=H(e.value),i=Zt(()=>{r.value=e.value},t,n);return U(e,()=>i()),r}function $t(e,t=200,n=!1,r=!0,i=!1){return qt(Yt(t,n,r,i),e)}function en(e,t=!0,n){Xt()?h(e,n):t?e():_(e)}function tn(e,t,n={}){let{immediate:r=!0}=n,i=H(!1),a=null;function o(){a&&=(clearTimeout(a),null)}function s(){i.value=!1,o()}function c(...n){o(),i.value=!0,a=setTimeout(()=>{i.value=!1,a=null,e(...n)},Ft(t))}return r&&(i.value=!0,Rt&&c()),Pt(s),{isPending:Te(i),start:c,stop:s}}var nn=Rt?window:void 0,rn=Rt?window.document:void 0;Rt&&window.navigator,Rt&&window.location;function an(e){let t=Ft(e);return t?.$el??t}function on(...e){let t,n,r,i;if(typeof e[0]==`string`||Array.isArray(e[0])?([n,r,i]=e,t=nn):[t,n,r,i]=e,!t)return Wt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);let a=[],o=()=>{a.forEach(e=>e()),a.length=0},s=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),c=U(()=>[an(t),Ft(i)],([e,t])=>{if(o(),!e)return;let i=Ht(t)?{...t}:t;a.push(...n.flatMap(t=>r.map(n=>s(e,t,n,i))))},{immediate:!0,flush:`post`}),l=()=>{c(),o()};return Pt(l),l}var sn=!1;function cn(e,t,n={}){let{window:r=nn,ignore:i=[],capture:a=!0,detectIframe:o=!1}=n;if(!r)return Wt;Gt&&!sn&&(sn=!0,Array.from(r.document.body.children).forEach(e=>e.addEventListener(`click`,Wt)),r.document.documentElement.addEventListener(`click`,Wt));let s=!0,c=e=>Ft(i).some(t=>{if(typeof t==`string`)return Array.from(r.document.querySelectorAll(t)).some(t=>t===e.target||e.composedPath().includes(t));{let n=an(t);return n&&(e.target===n||e.composedPath().includes(n))}});function l(e){let t=Ft(e);return t&&t.$.subTree.shapeFlag===16}function u(e,t){let n=Ft(e),r=n.$.subTree&&n.$.subTree.children;return r==null||!Array.isArray(r)?!1:r.some(e=>e.el===t.target||t.composedPath().includes(e.el))}let d=n=>{let r=an(e);if(n.target!=null&&!(!(r instanceof Element)&&l(e)&&u(e,n))&&!(!r||r===n.target||n.composedPath().includes(r))){if(n.detail===0&&(s=!c(n)),!s){s=!0;return}t(n)}},f=!1,p=[on(r,`click`,e=>{f||(f=!0,setTimeout(()=>{f=!1},0),d(e))},{passive:!0,capture:a}),on(r,`pointerdown`,t=>{let n=an(e);s=!c(t)&&!!(n&&!t.composedPath().includes(n))},{passive:!0}),o&&on(r,`blur`,n=>{setTimeout(()=>{let i=an(e);r.document.activeElement?.tagName===`IFRAME`&&!i?.contains(r.document.activeElement)&&t(n)},0)})].filter(Boolean);return()=>p.forEach(e=>e())}function ln(){let e=H(!1),t=O();return t&&h(()=>{e.value=!0},t),e}function un(e){let t=ln();return K(()=>(t.value,!!e()))}function dn(e,t,n={}){let{window:r=nn,...i}=n,a,o=un(()=>r&&`MutationObserver`in r),s=()=>{a&&=(a.disconnect(),void 0)},c=K(()=>{let t=Ft(e),n=(Array.isArray(t)?t:[t]).map(an).filter(Bt);return new Set(n)}),l=U(()=>c.value,e=>{s(),o.value&&e.size&&(a=new MutationObserver(t),e.forEach(e=>a.observe(e,i)))},{immediate:!0,flush:`post`}),u=()=>a?.takeRecords(),d=()=>{l(),s()};return Pt(d),{isSupported:o,stop:d,takeRecords:u}}function fn(e={}){let{window:t=nn,deep:n=!0,triggerOnRemoval:r=!1}=e,i=e.document??t?.document,a=()=>{let e=i?.activeElement;if(n)for(;e?.shadowRoot;)e=e?.shadowRoot?.activeElement;return e},o=H(),s=()=>{o.value=a()};return t&&(on(t,`blur`,e=>{e.relatedTarget===null&&s()},!0),on(t,`focus`,s,!0)),r&&dn(i,e=>{e.filter(e=>e.removedNodes.length).map(e=>Array.from(e.removedNodes)).flat().forEach(e=>{e===o.value&&s()})},{childList:!0,subtree:!0}),s(),o}function pn(e,t={}){let{window:n=nn}=t,r=un(()=>n&&`matchMedia`in n&&typeof n.matchMedia==`function`),i,a=H(!1),o=e=>{a.value=e.matches},s=()=>{i&&(`removeEventListener`in i?i.removeEventListener(`change`,o):i.removeListener(o))},c=ve(()=>{r.value&&(s(),i=n.matchMedia(Ft(e)),`addEventListener`in i?i.addEventListener(`change`,o):i.addListener(o),a.value=i.matches)});return Pt(()=>{c(),s(),i=void 0}),a}function mn(e){return JSON.parse(JSON.stringify(e))}function hn(e,t,n={}){let{window:r=nn,initialValue:i,observe:a=!1}=n,o=H(i),s=K(()=>an(t)||r?.document?.documentElement);function c(){let t=Ft(e),n=Ft(s);n&&r&&t&&(o.value=r.getComputedStyle(n).getPropertyValue(t)?.trim()||i)}return a&&dn(s,c,{attributeFilter:[`style`,`class`],window:r}),U([s,()=>Ft(e)],(e,t)=>{t[0]&&t[1]&&t[0].style.removeProperty(t[1]),c()},{immediate:!0}),U(o,t=>{let n=Ft(e);s.value?.style&&n&&(t==null?s.value.style.removeProperty(n):s.value.style.setProperty(n,t))}),o}function gn(e={}){let{document:t=rn}=e;if(!t)return H(`visible`);let n=H(t.visibilityState);return on(t,`visibilitychange`,()=>{n.value=t.visibilityState}),n}function _n(e,t,n={}){let{window:r=nn,...i}=n,a,o=un(()=>r&&`ResizeObserver`in r),s=()=>{a&&=(a.disconnect(),void 0)},c=U(K(()=>{let t=Ft(e);return Array.isArray(t)?t.map(e=>an(e)):[an(t)]}),e=>{if(s(),o.value&&r){a=new ResizeObserver(t);for(let t of e)t&&a.observe(t,i)}},{immediate:!0,flush:`post`}),l=()=>{s(),c()};return Pt(l),{isSupported:o,stop:l}}function vn(e,t={}){let{reset:n=!0,windowResize:r=!0,windowScroll:i=!0,immediate:a=!0,updateTiming:o=`sync`}=t,s=H(0),c=H(0),l=H(0),u=H(0),d=H(0),f=H(0),p=H(0),m=H(0);function h(){let t=an(e);if(!t){n&&(s.value=0,c.value=0,l.value=0,u.value=0,d.value=0,f.value=0,p.value=0,m.value=0);return}let r=t.getBoundingClientRect();s.value=r.height,c.value=r.bottom,l.value=r.left,u.value=r.right,d.value=r.top,f.value=r.width,p.value=r.x,m.value=r.y}function g(){o===`sync`?h():o===`next-frame`&&requestAnimationFrame(()=>h())}return _n(e,g),U(()=>an(e),e=>!e&&g()),dn(e,g,{attributeFilter:[`style`,`class`]}),i&&on(`scroll`,g,{capture:!0,passive:!0}),r&&on(`resize`,g,{passive:!0}),en(()=>{a&&g()}),{height:s,bottom:c,left:l,right:u,top:d,width:f,x:p,y:m,update:g}}function yn(e,t={width:0,height:0},n={}){let{window:r=nn,box:i=`content-box`}=n,a=K(()=>(an(e)?.namespaceURI)?.includes(`svg`)),o=H(t.width),s=H(t.height),{stop:c}=_n(e,([t])=>{let n=i===`border-box`?t.borderBoxSize:i===`content-box`?t.contentBoxSize:t.devicePixelContentBoxSize;if(r&&a.value){let t=an(e);if(t){let e=t.getBoundingClientRect();o.value=e.width,s.value=e.height}}else if(n){let e=Array.isArray(n)?n:[n];o.value=e.reduce((e,{inlineSize:t})=>e+t,0),s.value=e.reduce((e,{blockSize:t})=>e+t,0)}else o.value=t.contentRect.width,s.value=t.contentRect.height},n);en(()=>{let n=an(e);n&&(o.value=`offsetWidth`in n?n.offsetWidth:t.width,s.value=`offsetHeight`in n?n.offsetHeight:t.height)});let l=U(()=>an(e),e=>{o.value=e?t.width:0,s.value=e?t.height:0});function u(){c(),l()}return{width:o,height:s,stop:u}}function bn(e,t,n={}){let{root:r,rootMargin:i=`0px`,threshold:a=0,window:o=nn,immediate:s=!0}=n,c=un(()=>o&&`IntersectionObserver`in o),l=K(()=>{let t=Ft(e);return(Array.isArray(t)?t:[t]).map(an).filter(Bt)}),u=Wt,d=H(s),f=c.value?U(()=>[l.value,an(r),d.value],([e,n])=>{if(u(),!d.value||!e.length)return;let r=new IntersectionObserver(t,{root:an(n),rootMargin:i,threshold:a});e.forEach(e=>e&&r.observe(e)),u=()=>{r.disconnect(),u=Wt}},{immediate:s,flush:`post`}):Wt,p=()=>{u(),f(),d.value=!1};return Pt(p),{isSupported:c,isActive:d,pause(){u(),d.value=!1},resume(){d.value=!0},stop:p}}function xn(e,t,n,r={}){let{clone:i=!1,passive:a=!1,eventName:o,deep:s=!1,defaultValue:c,shouldEmit:l}=r,u=O(),d=n||u?.emit||(u?.$emit)?.bind(u)||(u?.proxy?.$emit)?.bind(u?.proxy),f=o;t||=`modelValue`,f||=`update:${t.toString()}`;let p=e=>i?typeof i==`function`?i(e):mn(e):e,m=()=>zt(e[t])?p(e[t]):c,h=e=>{l?l(e)&&d(f,e):d(f,e)};if(a){let n=H(m()),r=!1;return U(()=>e[t],e=>{r||(r=!0,n.value=p(e),_(()=>r=!1))}),U(n,n=>{!r&&(n!==e[t]||s)&&h(n)},{deep:s}),n}else return K({get(){return m()},set(e){h(e)}})}function Sn(e={}){let{window:t=nn}=e;if(!t)return H(!1);let n=H(t.document.hasFocus());return on(t,`blur`,()=>{n.value=!1}),on(t,`focus`,()=>{n.value=!0}),n}function Cn(e={}){let{window:t=nn,initialWidth:n=1/0,initialHeight:r=1/0,listenOrientation:i=!0,includeScrollbar:a=!0,type:o=`inner`}=e,s=H(n),c=H(r),l=()=>{t&&(o===`outer`?(s.value=t.outerWidth,c.value=t.outerHeight):a?(s.value=t.innerWidth,c.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};return l(),en(l),on(`resize`,l,{passive:!0}),i&&U(pn(`(orientation: portrait)`),()=>l()),{width:s,height:c}}var wn=()=>Rt&&/firefox/i.test(window.navigator.userAgent),Tn=()=>Rt&&/android/i.test(window.navigator.userAgent),En=typeof global==`object`&&global&&global.Object===Object&&global,Dn=typeof self==`object`&&self&&self.Object===Object&&self,On=En||Dn||Function(`return this`)(),kn=On.Symbol,An=Object.prototype,jn=An.hasOwnProperty,Mn=An.toString,Nn=kn?kn.toStringTag:void 0;function Pn(e){var t=jn.call(e,Nn),n=e[Nn];try{e[Nn]=void 0;var r=!0}catch{}var i=Mn.call(e);return r&&(t?e[Nn]=n:delete e[Nn]),i}var Fn=Object.prototype.toString;function In(e){return Fn.call(e)}var Ln=`[object Null]`,Rn=`[object Undefined]`,zn=kn?kn.toStringTag:void 0;function Bn(e){return e==null?e===void 0?Rn:Ln:zn&&zn in Object(e)?Pn(e):In(e)}function Vn(e){return typeof e==`object`&&!!e}var Hn=`[object Symbol]`;function Un(e){return typeof e==`symbol`||Vn(e)&&Bn(e)==Hn}function Wn(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n0){if(++t>=Rr)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Hr(e){return function(){return e}}var Ur=function(){try{var e=jr(Object,`defineProperty`);return e({},``,{}),e}catch{}}(),Wr=Vr(Ur?function(e,t){return Ur(e,`toString`,{configurable:!0,enumerable:!1,value:Hr(t),writable:!0})}:dr);function Gr(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var Zr=9007199254740991,Qr=/^(?:0|[1-9]\d*)$/;function $r(e,t){var n=typeof e;return t??=Zr,!!t&&(n==`number`||n!=`symbol`&&Qr.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=ci}function ui(e){return e!=null&&li(e.length)&&!gr(e)}function di(e,t,n){if(!er(n))return!1;var r=typeof t;return(r==`number`?ui(n)&&$r(t,n.length):r==`string`&&t in n)?ti(n[t],e):!1}function fi(e){return si(function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(a=e.length>3&&typeof a==`function`?(i--,a):void 0,o&&di(n[0],n[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++r-1}function La(e,t){var n=this.__data__,r=Ma(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Ra(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(s)?t>1?uo(s,t-1,n,r,i):so(i,s):r||(i[i.length]=s)}return i}function fo(e){return e!=null&&e.length?uo(e,1):[]}function po(e){return Wr(oi(e,void 0,fo),e+``)}var mo=ca(Object.getPrototypeOf,Object),ho=`[object Object]`,go=Function.prototype,_o=Object.prototype,vo=go.toString,yo=_o.hasOwnProperty,bo=vo.call(Object);function xo(e){if(!Vn(e)||Bn(e)!=ho)return!1;var t=mo(e);if(t===null)return!0;var n=yo.call(t,`constructor`)&&t.constructor;return typeof n==`function`&&n instanceof n&&vo.call(n)==bo}function So(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r=t?e:t)),e}function To(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=or(n),n=n===n?n:0),t!==void 0&&(t=or(t),t=t===t?t:0),wo(or(e),t,n)}function Eo(){this.__data__=new Ra,this.size=0}function Do(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function Oo(e){return this.__data__.get(e)}function ko(e){return this.__data__.has(e)}var Ao=200;function jo(e,t){var n=this.__data__;if(n instanceof Ra){var r=n.__data__;if(!za||r.lengths))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&Bc?new Ic:void 0;for(a.set(e,t),a.set(t,e);++d=t||n<0||d&&r>=a}function _(){var e=Rl();if(g(e))return v(e);s=setTimeout(_,h(e))}function v(e){return s=void 0,f&&r?p(e):(r=i=void 0,o)}function y(){s!==void 0&&clearTimeout(s),l=0,r=c=i=s=void 0}function b(){return s===void 0?o:v(Rl())}function x(){var e=Rl(),n=g(e);if(r=arguments,i=this,c=e,n){if(s===void 0)return m(c);if(d)return clearTimeout(s),s=setTimeout(_,t),p(c)}return s===void 0&&(s=setTimeout(_,t)),o}return x.cancel=y,x.flush=b,x}function Ul(e,t,n){(n!==void 0&&!ti(e[t],n)||n===void 0&&!(t in e))&&ei(e,t,n)}function Wl(e){return Vn(e)&&ui(e)}function Gl(e,t){if(!(t===`constructor`&&typeof e[t]==`function`)&&t!=`__proto__`)return e[t]}function Kl(e){return ii(e,ga(e))}function ql(e,t,n,r,i,a,o){var s=Gl(e,n),c=Gl(t,n),l=o.get(c);if(l){Ul(e,n,l);return}var u=a?a(s,c,n+``,e,t,o):void 0,d=u===void 0;if(d){var f=Gn(c),p=!f&&Ei(c),m=!f&&!p&&aa(c);u=c,f||p||m?Gn(s)?u=s:Wl(s)?u=Lr(s):p?(d=!1,u=zo(c,!0)):m?(d=!1,u=Cs(c,!0)):u=[]:xo(c)||xi(c)?(u=s,xi(s)?u=Kl(s):(!er(s)||gr(s))&&(u=Ws(c))):d=!1}d&&(o.set(c,u),i(u,c,r,a,o),o.delete(c)),Ul(e,n,u)}function Jl(e,t,n,r,i){e!==t&&Pl(t,function(a,o){if(i||=new Mo,er(a))ql(e,t,o,n,Jl,r,i);else{var s=r?r(Gl(e,o),a,o+``,e,t,i):void 0;s===void 0&&(s=a),Ul(e,o,s)}},ga)}function Yl(e,t,n){for(var r=-1,i=e==null?0:e.length;++r1,t}),ii(e,Xo(e),n),r&&(n=kc(n,hu|gu|_u,mu));for(var i=t.length;i--;)pu(n,t[i]);return n});function yu(e,t,n,r){if(!er(e))return e;t=no(t,e);for(var i=-1,a=t.length,o=a-1,s=e;s!=null&&++i=Du){var l=t?null:Eu(e);if(l)return Uc(l);o=!1,i=Rc,c=new Ic}else c=t?[]:s;outer:for(;++re===void 0,ju=e=>typeof e==`boolean`,J=e=>typeof e==`number`,Mu=e=>!e&&e!==0||A(e)&&e.length===0||o(e)&&!Object.keys(e).length,Nu=e=>typeof Element>`u`?!1:e instanceof Element,Pu=e=>cu(e),Fu=e=>x(e)?!Number.isNaN(Number(e)):!1,Iu=e=>e===window,Lu=new Map;if(Rt){let e;document.addEventListener(`mousedown`,t=>e=t),document.addEventListener(`mouseup`,t=>{if(e){for(let n of Lu.values())for(let{documentHandler:r}of n)r(t,e);e=void 0}})}function Ru(e,t){let n=[];return A(t.arg)?n=t.arg:Nu(t.arg)&&n.push(t.arg),function(r,i){let a=t.instance.popperRef,o=r.target,s=i?.target,c=!t||!t.instance,l=!o||!s,u=e.contains(o)||e.contains(s),d=e===o,f=n.length&&n.some(e=>e?.contains(o))||n.length&&n.includes(s),p=a&&(a.contains(o)||a.contains(s));c||l||u||d||f||p||t.value(r,i)}}var zu={beforeMount(e,t){Lu.has(e)||Lu.set(e,[]),Lu.get(e).push({documentHandler:Ru(e,t),bindingFn:t.value})},updated(e,t){Lu.has(e)||Lu.set(e,[]);let n=Lu.get(e),r=n.findIndex(e=>e.bindingFn===t.oldValue),i={documentHandler:Ru(e,t),bindingFn:t.value};r>=0?n.splice(r,1,i):n.push(i)},unmounted(e){Lu.delete(e)}},Bu=`_RepeatClick`,Vu={beforeMount(e,t){let n=t.value,{interval:r=100,delay:i=600}=C(n)?{}:n,a,o,s=()=>C(n)?n():n.handler(),c=()=>{o&&=(clearTimeout(o),void 0),a&&=(clearInterval(a),void 0)},l=e=>{e.button===0&&(c(),s(),document.addEventListener(`mouseup`,c,{once:!0}),o=setTimeout(()=>{a=setInterval(()=>{s()},r)},i))};e[Bu]={start:l,clear:c},e.addEventListener(`mousedown`,l)},unmounted(e){if(!e[Bu])return;let{start:t,clear:n}=e[Bu];t&&e.removeEventListener(`mousedown`,t),n&&(n(),document.removeEventListener(`mouseup`,n)),e[Bu]=null}},Hu=`a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])`,Uu=e=>typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot,Wu=e=>typeof Element>`u`?!1:e instanceof Element,Gu=e=>getComputedStyle(e).position===`fixed`?!1:e.offsetParent!==null,Ku=e=>Array.from(e.querySelectorAll(Hu)).filter(e=>qu(e)&&Gu(e)),qu=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute(`tabIndex`)!==null)return!0;if(e.tabIndex<0||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`)return!1;switch(e.nodeName){case`A`:return!!e.href&&e.rel!==`ignore`;case`INPUT`:return!(e.type===`hidden`||e.type===`file`);case`BUTTON`:case`SELECT`:case`TEXTAREA`:return!0;default:return!1}},Ju=function(e,t,...n){let r;r=t.includes(`mouse`)||t.includes(`click`)?`MouseEvents`:t.includes(`key`)?`KeyboardEvent`:`HTMLEvents`;let i=document.createEvent(r);return i.initEvent(t,...n),e.dispatchEvent(i),e},Yu=e=>!e.getAttribute(`aria-owns`),Xu=(e,t,n)=>{let{parentNode:r}=e;if(!r)return null;let i=r.querySelectorAll(n);return i[Array.prototype.indexOf.call(i,e)+t]||null},Zu=(e,t)=>{if(!e||!e.focus)return;let n=!1;Wu(e)&&!qu(e)&&!e.getAttribute(`tabindex`)&&(e.setAttribute(`tabindex`,`-1`),n=!0),e.focus(t),Wu(e)&&n&&e.removeAttribute(`tabindex`)},Qu=e=>{e&&(Zu(e),!Yu(e)&&e.click())},$u=(e,t,{checkForDefaultPrevented:n=!0}={})=>r=>{let i=e?.(r);if(n===!1||!i)return t?.(r)},ed=e=>t=>t.pointerType===`mouse`?e(t):void 0,td=e=>{if(e.code&&e.code!==`Unidentified`)return e.code;let t=nd(e);if(t){if(Object.values(q).includes(t))return t;switch(t){case` `:return q.space;default:return``}}return``},nd=e=>{let t=e.key&&e.key!==`Unidentified`?e.key:``;if(!t&&e.type===`keyup`&&Tn()){let n=e.target;t=n.value.charAt(n.selectionStart-1)}return t},rd=`_trap-focus-children`,id=[],ad=e=>{if(id.length===0)return;let t=td(e),n=id[id.length-1][rd];if(n.length>0&&t===q.tab){if(n.length===1){e.preventDefault(),document.activeElement!==n[0]&&n[0].focus();return}let t=e.shiftKey,r=e.target===n[0],i=e.target===n[n.length-1];r&&t&&(e.preventDefault(),n[n.length-1].focus()),i&&!t&&(e.preventDefault(),n[0].focus())}},od={beforeMount(e){e[rd]=Ku(e),id.push(e),id.length<=1&&document.addEventListener(`keydown`,ad)},updated(e){_(()=>{e[rd]=Ku(e)})},unmounted(){id.shift(),id.length===0&&document.removeEventListener(`keydown`,ad)}},sd=!1,cd,ld,ud,dd,fd,pd,md,hd,gd,_d,vd,yd,bd,xd,Sd;function Cd(){if(!sd){sd=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(yd=/\b(iPhone|iP[ao]d)/.exec(e),bd=/\b(iP[ao]d)/.exec(e),_d=/Android/i.exec(e),xd=/FBAN\/\w+;/i.exec(e),Sd=/Mobile/i.exec(e),vd=!!/Win64/.exec(e),t){cd=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,cd&&document&&document.documentMode&&(cd=document.documentMode);var r=/(?:Trident\/(\d+.\d+))/.exec(e);pd=r?parseFloat(r[1])+4:cd,ld=t[2]?parseFloat(t[2]):NaN,ud=t[3]?parseFloat(t[3]):NaN,dd=t[4]?parseFloat(t[4]):NaN,dd?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),fd=t&&t[1]?parseFloat(t[1]):NaN):fd=NaN}else cd=ld=ud=fd=dd=NaN;if(n){if(n[1]){var i=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);md=i?parseFloat(i[1].replace(`_`,`.`)):!0}else md=!1;hd=!!n[2],gd=!!n[3]}else md=hd=gd=!1}}var wd={ie:function(){return Cd()||cd},ieCompatibilityMode:function(){return Cd()||pd>cd},ie64:function(){return wd.ie()&&vd},firefox:function(){return Cd()||ld},opera:function(){return Cd()||ud},webkit:function(){return Cd()||dd},safari:function(){return wd.webkit()},chrome:function(){return Cd()||fd},windows:function(){return Cd()||hd},osx:function(){return Cd()||md},linux:function(){return Cd()||gd},iphone:function(){return Cd()||yd},mobile:function(){return Cd()||yd||bd||_d||Sd},nativeApp:function(){return Cd()||xd},android:function(){return Cd()||_d},ipad:function(){return Cd()||bd}},Td=wd,Ed=!!(typeof window<`u`&&window.document&&window.document.createElement),Dd={canUseDOM:Ed,canUseWorkers:typeof Worker<`u`,canUseEventListeners:Ed&&!!(window.addEventListener||window.attachEvent),canUseViewport:Ed&&!!window.screen,isInWorker:!Ed},Od;Dd.canUseDOM&&(Od=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature(``,``)!==!0);function kd(e,t){if(!Dd.canUseDOM||t&&!(`addEventListener`in document))return!1;var n=`on`+e,r=n in document;if(!r){var i=document.createElement(`div`);i.setAttribute(n,`return;`),r=typeof i[n]==`function`}return!r&&Od&&e===`wheel`&&(r=document.implementation.hasFeature(`Events.wheel`,`3.0`)),r}var Ad=kd,jd=10,Md=40,Nd=800;function Pd(e){var t=0,n=0,r=0,i=0;return`detail`in e&&(n=e.detail),`wheelDelta`in e&&(n=-e.wheelDelta/120),`wheelDeltaY`in e&&(n=-e.wheelDeltaY/120),`wheelDeltaX`in e&&(t=-e.wheelDeltaX/120),`axis`in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),r=t*jd,i=n*jd,`deltaY`in e&&(i=e.deltaY),`deltaX`in e&&(r=e.deltaX),(r||i)&&e.deltaMode&&(e.deltaMode==1?(r*=Md,i*=Md):(r*=Nd,i*=Nd)),r&&!t&&(t=r<1?-1:1),i&&!n&&(n=i<1?-1:1),{spinX:t,spinY:n,pixelX:r,pixelY:i}}Pd.getEventType=function(){return Td.firefox()?`DOMMouseScroll`:Ad(`wheel`)?`wheel`:`mousewheel`};var Fd=Pd,Id=`_Mousewheel`,Ld=function(e,t){if(e&&e.addEventListener){Rd(e);let n=function(e){let n=Fd(e);t&&Reflect.apply(t,this,[e,n])};e[Id]={wheelHandler:n},e.addEventListener(`wheel`,n,{passive:!0})}},Rd=e=>{e._Mousewheel?.wheelHandler&&(e.removeEventListener(`wheel`,e[Id].wheelHandler),e[Id]=null)},zd={beforeMount(e,t){Ld(e,t.value)},unmounted(e){Rd(e)},updated(e,t){t.value!==t.oldValue&&Ld(e,t.value)}};D();var Bd=e=>Object.keys(e),Vd=e=>Object.entries(e),Hd=(e,t,n)=>({get value(){return oo(e,t,n)},set value(n){Cu(e,t,n)}}),Ud=`__epPropKey`,Y=e=>e,Wd=e=>o(e)&&!!e.__epPropKey,Gd=(e,t)=>{if(!o(e)||Wd(e))return e;let{values:n,required:r,default:i,type:a,validator:s}=e,c={type:a,required:!!r,validator:n||s?r=>{let a=!1,o=[];if(n&&(o=Array.from(n),be(e,`default`)&&o.push(i),a||=o.includes(r)),s&&(a||=s(r)),!a&&o.length>0){let e=[...new Set(o)].map(e=>JSON.stringify(e)).join(`, `);Oe(`Invalid prop: validation failed${t?` for prop "${t}"`:``}. Expected one of [${e}], got value ${JSON.stringify(r)}.`)}return a}:void 0,[Ud]:!0};return be(e,`default`)&&(c.default=i),c},X=e=>au(Object.entries(e).map(([e,t])=>[e,Gd(t,e)])),Kd=X({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),qd=X({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:``},offset:{type:Number,default:0},position:{type:String,values:[`top`,`bottom`],default:`top`},teleported:Boolean,appendTo:{type:Kd.to.type,default:`body`}}),Jd={scroll:({scrollTop:e,fixed:t})=>J(e)&&ju(t),[kt]:e=>ju(e)},Yd=class extends Error{constructor(e){super(e),this.name=`ElementPlusError`}};function Xd(e,t){throw new Yd(`[${e}] ${t}`)}function Zd(e,t){{let n=x(e)?new Yd(`[${e}] ${t}`):e;console.warn(n)}}var Qd=[`class`,`style`],$d=/^on[A-Z]/,ef=(e={})=>{let{excludeListeners:t=!1,excludeKeys:n}=e,r=K(()=>(n?.value||[]).concat(Qd)),i=O();return i?K(()=>au(Object.entries(i.proxy?.$attrs).filter(([e])=>!r.value.includes(e)&&!(t&&$d.test(e))))):(Zd(`use-attrs`,`getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function`),K(()=>({})))};function tf(){let e=se(),t=H(0),n=K(()=>({minWidth:`${Math.max(t.value,11)}px`}));return _n(e,()=>{t.value=e.value?.getBoundingClientRect().width??0}),{calculatorRef:e,calculatorWidth:t,inputStyle:n}}var nf=({from:e,replacement:t,scope:n,version:r,ref:i,type:a=`API`},o)=>{U(()=>c(o),o=>{o&&Zd(n,`[${a}] ${e} is about to be deprecated in version ${r}, please use ${t} instead. For more detail, please visit: ${i} `)},{immediate:!0})};D();var rf=(e=``)=>e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`),af=e=>k(e),of=`utils/dom/style`,sf=(e=``)=>e.split(` `).filter(e=>!!e.trim()),cf=(e,t)=>{if(!e||!t)return!1;if(t.includes(` `))throw Error(`className should not contain space.`);return e.classList.contains(t)},lf=(e,t)=>{!e||!t.trim()||e.classList.add(...sf(t))},uf=(e,t)=>{!e||!t.trim()||e.classList.remove(...sf(t))},df=(e,t)=>{if(!Rt||!e||!t||Uu(e))return``;let n=u(t);n===`float`&&(n=`cssFloat`);try{let t=e.style[n];if(t)return t;let r=document.defaultView?.getComputedStyle(e,``);return r?r[n]:``}catch{return e.style[n]}},ff=(e,t,n)=>{if(!(!e||!t))if(o(t))Vd(t).forEach(([t,n])=>ff(e,t,n));else{let r=u(t);e.style[r]=n}};function pf(e,t=`px`){if(!e&&e!==0)return``;if(J(e)||Fu(e))return`${e}${t}`;if(x(e))return e;Zd(of,`binding value must be a string or number`)}var mf=(e,t,n,r)=>{let i={offsetX:0,offsetY:0},a=H(!1),o=(t,n)=>{if(e.value){let{offsetX:a,offsetY:o}=i,s=e.value.getBoundingClientRect(),c=s.left,l=s.top,u=s.width,d=s.height,f=document.documentElement.clientWidth,p=document.documentElement.clientHeight,m=-c+a,h=-l+o,g=f-c-u+a,_=p-l-(d{let t=e.clientX,n=e.clientY,{offsetX:r,offsetY:s}=i,c=e=>{a.value||=!0,o(r+e.clientX-t,s+e.clientY-n)},l=()=>{a.value=!1,document.removeEventListener(`mousemove`,c),document.removeEventListener(`mouseup`,l)};document.addEventListener(`mousemove`,c),document.addEventListener(`mouseup`,l)},c=()=>{t.value&&e.value&&(t.value.addEventListener(`mousedown`,s),window.addEventListener(`resize`,d))},l=()=>{t.value&&e.value&&(t.value.removeEventListener(`mousedown`,s),window.removeEventListener(`resize`,d))},u=()=>{i.offsetX=0,i.offsetY=0,e.value&&(e.value.style.transform=``)},d=()=>{let{offsetX:e,offsetY:t}=i;o(e,t)};return h(()=>{ve(()=>{n.value?c():l()})}),Ge(()=>{l()}),{isDragging:a,resetPosition:u,updatePosition:d}},hf={name:`en`,el:{breadcrumb:{label:`Breadcrumb`},colorpicker:{confirm:`OK`,clear:`Clear`,defaultLabel:`color picker`,description:`current color is {color}. press enter to select a new color.`,alphaLabel:`pick alpha value`,alphaDescription:`alpha {alpha}, current color is {color}`,hueLabel:`pick hue value`,hueDescription:`hue {hue}, current color is {color}`,svLabel:`pick saturation and brightness value`,svDescription:`saturation {saturation}, brightness {brightness}, current color is {color}`,predefineDescription:`select {value} as the color`},datepicker:{now:`Now`,today:`Today`,cancel:`Cancel`,clear:`Clear`,confirm:`OK`,dateTablePrompt:`Use the arrow keys and enter to select the day of the month`,monthTablePrompt:`Use the arrow keys and enter to select the month`,yearTablePrompt:`Use the arrow keys and enter to select the year`,selectedDate:`Selected date`,selectDate:`Select date`,selectTime:`Select time`,startDate:`Start Date`,startTime:`Start Time`,endDate:`End Date`,endTime:`End Time`,prevYear:`Previous Year`,nextYear:`Next Year`,prevMonth:`Previous Month`,nextMonth:`Next Month`,year:``,month1:`January`,month2:`February`,month3:`March`,month4:`April`,month5:`May`,month6:`June`,month7:`July`,month8:`August`,month9:`September`,month10:`October`,month11:`November`,month12:`December`,weeks:{sun:`Sun`,mon:`Mon`,tue:`Tue`,wed:`Wed`,thu:`Thu`,fri:`Fri`,sat:`Sat`},weeksFull:{sun:`Sunday`,mon:`Monday`,tue:`Tuesday`,wed:`Wednesday`,thu:`Thursday`,fri:`Friday`,sat:`Saturday`},months:{jan:`Jan`,feb:`Feb`,mar:`Mar`,apr:`Apr`,may:`May`,jun:`Jun`,jul:`Jul`,aug:`Aug`,sep:`Sep`,oct:`Oct`,nov:`Nov`,dec:`Dec`}},inputNumber:{decrease:`decrease number`,increase:`increase number`},select:{loading:`Loading`,noMatch:`No matching data`,noData:`No data`,placeholder:`Select`},mention:{loading:`Loading`},dropdown:{toggleDropdown:`Toggle Dropdown`},cascader:{noMatch:`No matching data`,loading:`Loading`,placeholder:`Select`,noData:`No data`},pagination:{goto:`Go to`,pagesize:`/page`,total:`Total {total}`,pageClassifier:``,page:`Page`,prev:`Go to previous page`,next:`Go to next page`,currentPage:`page {pager}`,prevPages:`Previous {pager} pages`,nextPages:`Next {pager} pages`,deprecationWarning:`Deprecated usages detected, please refer to the el-pagination documentation for more details`},dialog:{close:`Close this dialog`},drawer:{close:`Close this dialog`},messagebox:{title:`Message`,confirm:`OK`,cancel:`Cancel`,error:`Illegal input`,close:`Close this dialog`},upload:{deleteTip:`press delete to remove`,delete:`Delete`,preview:`Preview`,continue:`Continue`},slider:{defaultLabel:`slider between {min} and {max}`,defaultRangeStartLabel:`pick start value`,defaultRangeEndLabel:`pick end value`},table:{emptyText:`No Data`,confirmFilter:`Confirm`,resetFilter:`Reset`,clearFilter:`All`,sumText:`Sum`,selectAllLabel:`Select all rows`,selectRowLabel:`Select this row`,expandRowLabel:`Expand this row`,collapseRowLabel:`Collapse this row`,sortLabel:`Sort by {column}`,filterLabel:`Filter by {column}`},tag:{close:`Close this tag`},tour:{next:`Next`,previous:`Previous`,finish:`Finish`,close:`Close this dialog`},tree:{emptyText:`No Data`},transfer:{noMatch:`No matching data`,noData:`No data`,titles:[`List 1`,`List 2`],filterPlaceholder:`Enter keyword`,noCheckedFormat:`{total} items`,hasCheckedFormat:`{checked}/{total} checked`},image:{error:`FAILED`},pageHeader:{title:`Back`},popconfirm:{confirmButtonText:`Yes`,cancelButtonText:`No`},carousel:{leftArrow:`Carousel arrow left`,rightArrow:`Carousel arrow right`,indicator:`Carousel switch to index {index}`}}},gf=e=>(t,n)=>_f(t,n,c(e)),_f=(e,t,n)=>oo(n,e,e).replace(/\{(\w+)\}/g,(e,n)=>`${t?.[n]??`{${n}}`}`),vf=e=>({lang:K(()=>c(e).name),locale:ze(e)?e:H(e),t:gf(e)}),yf=Symbol(`localeContextKey`),bf=e=>{let t=e||w(yf,H());return vf(K(()=>t.value||hf))},xf=`is-`,Sf=(e,t,n,r,i)=>{let a=`${e}-${t}`;return n&&(a+=`-${n}`),r&&(a+=`__${r}`),i&&(a+=`--${i}`),a},Cf=Symbol(`namespaceContextKey`),wf=e=>{let t=e||(O()?w(Cf,H(`el`)):H(`el`));return K(()=>c(t)||`el`)},Z=(e,t)=>{let n=wf(t);return{namespace:n,b:(t=``)=>Sf(n.value,e,t,``,``),e:t=>t?Sf(n.value,e,``,t,``):``,m:t=>t?Sf(n.value,e,``,``,t):``,be:(t,r)=>t&&r?Sf(n.value,e,t,r,``):``,em:(t,r)=>t&&r?Sf(n.value,e,``,t,r):``,bm:(t,r)=>t&&r?Sf(n.value,e,t,``,r):``,bem:(t,r,i)=>t&&r&&i?Sf(n.value,e,t,r,i):``,is:(e,...t)=>{let n=t.length>=1?t[0]:!0;return e&&n?`${xf}${e}`:``},cssVar:e=>{let t={};for(let r in e)e[r]&&(t[`--${n.value}-${r}`]=e[r]);return t},cssVarName:e=>`--${n.value}-${e}`,cssVarBlock:t=>{let r={};for(let i in t)t[i]&&(r[`--${n.value}-${e}-${i}`]=t[i]);return r},cssVarBlockName:t=>`--${n.value}-${e}-${t}`}};function Tf(e,t,n,r){let i=n-t;return e/=r/2,e<1?i/2*e*e*e+t:i/2*((e-=2)*e*e+2)+t}var Ef=e=>Rt?window.requestAnimationFrame(e):setTimeout(e,16),Df=e=>Rt?window.cancelAnimationFrame(e):clearTimeout(e),Of=(e,t)=>{if(!Rt)return!1;let n={undefined:`overflow`,true:`overflow-y`,false:`overflow-x`}[String(t)],r=df(e,n);return[`scroll`,`auto`,`overlay`].some(e=>r.includes(e))},kf=(e,t)=>{if(!Rt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Of(n,t))return n;n=Uu(n)?n.host:n.parentNode}return n},Af,jf=e=>{if(!Rt)return 0;if(Af!==void 0)return Af;let t=document.createElement(`div`);t.className=`${e}-scrollbar__wrap`,t.style.visibility=`hidden`,t.style.width=`100px`,t.style.position=`absolute`,t.style.top=`-9999px`,document.body.appendChild(t);let n=t.offsetWidth;t.style.overflow=`scroll`;let r=document.createElement(`div`);r.style.width=`100%`,t.appendChild(r);let i=r.offsetWidth;return t.parentNode?.removeChild(t),Af=n-i,Af};function Mf(e,t){if(!Rt)return;if(!t){e.scrollTop=0;return}let n=[],r=t.offsetParent;for(;r!==null&&e!==r&&e.contains(r);)n.push(r),r=r.offsetParent;let i=t.offsetTop+n.reduce((e,t)=>e+t.offsetTop,0),a=i+t.offsetHeight,o=e.scrollTop,s=o+e.clientHeight;is&&(e.scrollTop=a-e.clientHeight)}function Nf(e,t,n,r,i){let a=Date.now(),o,s=()=>{let c=Date.now()-a,l=Tf(c>r?r:c,t,n,r);Iu(e)?e.scrollTo(window.pageXOffset,l):e.scrollTop=l,c{o&&Df(o)}}var Pf=(e,t)=>Iu(t)?e.ownerDocument.documentElement:t,Ff=e=>Iu(e)?window.scrollY:e.scrollTop,If=(e,t={})=>{ze(e)||Xd(`[useLockscreen]`,`You need to pass a ref param to this function`);let n=t.ns||Z(`popup`),r=K(()=>n.bm(`parent`,`hidden`)),i=0,a=!1,o=`0`,s=!1,c=()=>{s||(s=!0,setTimeout(()=>{typeof document>`u`||a&&document&&(document.body.style.width=o,uf(document.body,r.value))},200))};U(e,e=>{if(!e){c();return}s=!1,a=!cf(document.body,r.value),a&&(o=document.body.style.width,lf(document.body,r.value)),i=jf(n.namespace.value);let t=document.documentElement.clientHeight0&&(t||l===`scroll`)&&a&&(document.body.style.width=`calc(100% - ${i}px)`)}),he(()=>c())},Lf=Gd({type:Y(Boolean),default:null}),Rf=Gd({type:Y(Function)}),zf=e=>{let t=`update:${e}`,n=`onUpdate:${e}`,r=[t];return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:a,shouldProceed:o,onShow:s,onHide:c})=>{let l=O(),{emit:u}=l,d=l.props,f=K(()=>C(d[n])),p=K(()=>d[e]===null),m=e=>{r.value!==!0&&(r.value=!0,i&&(i.value=e),C(s)&&s(e))},g=e=>{r.value!==!1&&(r.value=!1,i&&(i.value=e),C(c)&&c(e))},_=e=>{if(d.disabled===!0||C(o)&&!o())return;let n=f.value&&Rt;n&&u(t,!0),(p.value||!n)&&m(e)},v=e=>{if(d.disabled===!0||!Rt)return;let n=f.value&&Rt;n&&u(t,!1),(p.value||!n)&&g(e)},y=e=>{ju(e)&&(d.disabled&&e?f.value&&u(t,!1):r.value!==e&&(e?m():g()))};return U(()=>d[e],y),a&&l.appContext.config.globalProperties.$route!==void 0&&U(()=>({...l.proxy.$route}),()=>{a.value&&r.value&&v()}),h(()=>{y(d[e])}),{hide:v,show:_,toggle:()=>{r.value?v():_()},hasUpdateHandler:f}},useModelToggleProps:{[e]:Lf,[n]:Rf},useModelToggleEmits:r}},{useModelToggle:Bf,useModelToggleProps:Vf,useModelToggleEmits:Hf}=zf(`modelValue`),Uf=e=>{let t=O();return K(()=>t?.proxy?.$props?.[e])},Wf=`bottom`,Gf=`right`,Kf=`left`,qf=`auto`,Jf=[`top`,Wf,Gf,Kf],Yf=`start`,Xf=`clippingParents`,Zf=`viewport`,Qf=`popper`,$f=`reference`,ep=Jf.reduce(function(e,t){return e.concat([t+`-`+Yf,t+`-end`])},[]),tp=[].concat(Jf,[qf]).reduce(function(e,t){return e.concat([t,t+`-`+Yf,t+`-end`])},[]),np=[`beforeRead`,`read`,`afterRead`,`beforeMain`,`main`,`afterMain`,`beforeWrite`,`write`,`afterWrite`];function rp(e){return e?(e.nodeName||``).toLowerCase():null}function ip(e){if(e==null)return window;if(e.toString()!==`[object Window]`){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ap(e){return e instanceof ip(e).Element||e instanceof Element}function op(e){return e instanceof ip(e).HTMLElement||e instanceof HTMLElement}function sp(e){return typeof ShadowRoot>`u`?!1:e instanceof ip(e).ShadowRoot||e instanceof ShadowRoot}function cp(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];!op(i)||!rp(i)||(Object.assign(i.style,n),Object.keys(r).forEach(function(e){var t=r[e];t===!1?i.removeAttribute(e):i.setAttribute(e,t===!0?``:t)}))})}function lp(e){var t=e.state,n={popper:{position:t.options.strategy,left:`0`,top:`0`,margin:`0`},arrow:{position:`absolute`},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(e){var r=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce(function(e,t){return e[t]=``,e},{});!op(r)||!rp(r)||(Object.assign(r.style,a),Object.keys(i).forEach(function(e){r.removeAttribute(e)}))})}}var up={name:`applyStyles`,enabled:!0,phase:`write`,fn:cp,effect:lp,requires:[`computeStyles`]};function dp(e){return e.split(`-`)[0]}var fp=Math.max,pp=Math.min,mp=Math.round;function hp(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(e){return e.brand+`/`+e.version}).join(` `):navigator.userAgent}function gp(){return!/^((?!chrome|android).)*safari/i.test(hp())}function _p(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),i=1,a=1;t&&op(e)&&(i=e.offsetWidth>0&&mp(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&mp(r.height)/e.offsetHeight||1);var o=(ap(e)?ip(e):window).visualViewport,s=!gp()&&n,c=(r.left+(s&&o?o.offsetLeft:0))/i,l=(r.top+(s&&o?o.offsetTop:0))/a,u=r.width/i,d=r.height/a;return{width:u,height:d,top:l,right:c+u,bottom:l+d,left:c,x:c,y:l}}function vp(e){var t=_p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function yp(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&sp(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function bp(e){return ip(e).getComputedStyle(e)}function xp(e){return[`table`,`td`,`th`].indexOf(rp(e))>=0}function Sp(e){return((ap(e)?e.ownerDocument:e.document)||window.document).documentElement}function Cp(e){return rp(e)===`html`?e:e.assignedSlot||e.parentNode||(sp(e)?e.host:null)||Sp(e)}function wp(e){return!op(e)||bp(e).position===`fixed`?null:e.offsetParent}function Tp(e){var t=/firefox/i.test(hp());if(/Trident/i.test(hp())&&op(e)&&bp(e).position===`fixed`)return null;var n=Cp(e);for(sp(n)&&(n=n.host);op(n)&&[`html`,`body`].indexOf(rp(n))<0;){var r=bp(n);if(r.transform!==`none`||r.perspective!==`none`||r.contain===`paint`||[`transform`,`perspective`].indexOf(r.willChange)!==-1||t&&r.willChange===`filter`||t&&r.filter&&r.filter!==`none`)return n;n=n.parentNode}return null}function Ep(e){for(var t=ip(e),n=wp(e);n&&xp(n)&&bp(n).position===`static`;)n=wp(n);return n&&(rp(n)===`html`||rp(n)===`body`&&bp(n).position===`static`)?t:n||Tp(e)||t}function Dp(e){return[`top`,`bottom`].indexOf(e)>=0?`x`:`y`}function Op(e,t,n){return fp(e,pp(t,n))}function kp(e,t,n){var r=Op(e,t,n);return r>n?n:r}function Ap(){return{top:0,right:0,bottom:0,left:0}}function jp(e){return Object.assign({},Ap(),e)}function Mp(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})}var Np=function(e,t){return e=typeof e==`function`?e(Object.assign({},t.rects,{placement:t.placement})):e,jp(typeof e==`number`?Mp(e,Jf):e)};function Pp(e){var t,n=e.state,r=e.name,i=e.options,a=n.elements.arrow,o=n.modifiersData.popperOffsets,s=dp(n.placement),c=Dp(s),l=[`left`,`right`].indexOf(s)>=0?`height`:`width`;if(!(!a||!o)){var u=Np(i.padding,n),d=vp(a),f=c===`y`?`top`:Kf,p=c===`y`?Wf:Gf,m=n.rects.reference[l]+n.rects.reference[c]-o[c]-n.rects.popper[l],h=o[c]-n.rects.reference[c],g=Ep(a),_=g?c===`y`?g.clientHeight||0:g.clientWidth||0:0,v=m/2-h/2,y=u[f],b=_-d[l]-u[p],x=_/2-d[l]/2+v,S=Op(y,x,b),C=c;n.modifiersData[r]=(t={},t[C]=S,t.centerOffset=S-x,t)}}function Fp(e){var t=e.state,n=e.options.element,r=n===void 0?`[data-popper-arrow]`:n;r!=null&&(typeof r==`string`&&(r=t.elements.popper.querySelector(r),!r)||yp(t.elements.popper,r)&&(t.elements.arrow=r))}var Ip={name:`arrow`,enabled:!0,phase:`main`,fn:Pp,effect:Fp,requires:[`popperOffsets`],requiresIfExists:[`preventOverflow`]};function Lp(e){return e.split(`-`)[1]}var Rp={top:`auto`,right:`auto`,bottom:`auto`,left:`auto`};function zp(e,t){var n=e.x,r=e.y,i=t.devicePixelRatio||1;return{x:mp(n*i)/i||0,y:mp(r*i)/i||0}}function Bp(e){var t,n=e.popper,r=e.popperRect,i=e.placement,a=e.variation,o=e.offsets,s=e.position,c=e.gpuAcceleration,l=e.adaptive,u=e.roundOffsets,d=e.isFixed,f=o.x,p=f===void 0?0:f,m=o.y,h=m===void 0?0:m,g=typeof u==`function`?u({x:p,y:h}):{x:p,y:h};p=g.x,h=g.y;var _=o.hasOwnProperty(`x`),v=o.hasOwnProperty(`y`),y=Kf,b=`top`,x=window;if(l){var S=Ep(n),C=`clientHeight`,w=`clientWidth`;if(S===ip(n)&&(S=Sp(n),bp(S).position!==`static`&&s===`absolute`&&(C=`scrollHeight`,w=`scrollWidth`)),S=S,i===`top`||(i===`left`||i===`right`)&&a===`end`){b=Wf;var T=d&&S===x&&x.visualViewport?x.visualViewport.height:S[C];h-=T-r.height,h*=c?1:-1}if(i===`left`||(i===`top`||i===`bottom`)&&a===`end`){y=Gf;var E=d&&S===x&&x.visualViewport?x.visualViewport.width:S[w];p-=E-r.width,p*=c?1:-1}}var D=Object.assign({position:s},l&&Rp),O=u===!0?zp({x:p,y:h},ip(n)):{x:p,y:h};if(p=O.x,h=O.y,c){var k;return Object.assign({},D,(k={},k[b]=v?`0`:``,k[y]=_?`0`:``,k.transform=(x.devicePixelRatio||1)<=1?`translate(`+p+`px, `+h+`px)`:`translate3d(`+p+`px, `+h+`px, 0)`,k))}return Object.assign({},D,(t={},t[b]=v?h+`px`:``,t[y]=_?p+`px`:``,t.transform=``,t))}function Vp(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=r===void 0?!0:r,a=n.adaptive,o=a===void 0?!0:a,s=n.roundOffsets,c=s===void 0?!0:s,l={placement:dp(t.placement),variation:Lp(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy===`fixed`};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Bp(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:c})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Bp(Object.assign({},l,{offsets:t.modifiersData.arrow,position:`absolute`,adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var Hp={name:`computeStyles`,enabled:!0,phase:`beforeWrite`,fn:Vp,data:{}},Up={passive:!0};function Wp(e){var t=e.state,n=e.instance,r=e.options,i=r.scroll,a=i===void 0?!0:i,o=r.resize,s=o===void 0?!0:o,c=ip(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&l.forEach(function(e){e.addEventListener(`scroll`,n.update,Up)}),s&&c.addEventListener(`resize`,n.update,Up),function(){a&&l.forEach(function(e){e.removeEventListener(`scroll`,n.update,Up)}),s&&c.removeEventListener(`resize`,n.update,Up)}}var Gp={name:`eventListeners`,enabled:!0,phase:`write`,fn:function(){},effect:Wp,data:{}},Kp={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function qp(e){return e.replace(/left|right|bottom|top/g,function(e){return Kp[e]})}var Jp={start:`end`,end:`start`};function Yp(e){return e.replace(/start|end/g,function(e){return Jp[e]})}function Xp(e){var t=ip(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Zp(e){return _p(Sp(e)).left+Xp(e).scrollLeft}function Qp(e,t){var n=ip(e),r=Sp(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;var l=gp();(l||!l&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}return{width:a,height:o,x:s+Zp(e),y:c}}function $p(e){var t=Sp(e),n=Xp(e),r=e.ownerDocument?.body,i=fp(t.scrollWidth,t.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),a=fp(t.scrollHeight,t.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),o=-n.scrollLeft+Zp(e),s=-n.scrollTop;return bp(r||t).direction===`rtl`&&(o+=fp(t.clientWidth,r?r.clientWidth:0)-i),{width:i,height:a,x:o,y:s}}function em(e){var t=bp(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function tm(e){return[`html`,`body`,`#document`].indexOf(rp(e))>=0?e.ownerDocument.body:op(e)&&em(e)?e:tm(Cp(e))}function nm(e,t){t===void 0&&(t=[]);var n=tm(e),r=n===e.ownerDocument?.body,i=ip(n),a=r?[i].concat(i.visualViewport||[],em(n)?n:[]):n,o=t.concat(a);return r?o:o.concat(nm(Cp(a)))}function rm(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function im(e,t){var n=_p(e,!1,t===`fixed`);return n.top+=e.clientTop,n.left+=e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function am(e,t,n){return t===`viewport`?rm(Qp(e,n)):ap(t)?im(t,n):rm($p(Sp(e)))}function om(e){var t=nm(Cp(e)),n=[`absolute`,`fixed`].indexOf(bp(e).position)>=0&&op(e)?Ep(e):e;return ap(n)?t.filter(function(e){return ap(e)&&yp(e,n)&&rp(e)!==`body`}):[]}function sm(e,t,n,r){var i=t===`clippingParents`?om(e):[].concat(t),a=[].concat(i,[n]),o=a[0],s=a.reduce(function(t,n){var i=am(e,n,r);return t.top=fp(i.top,t.top),t.right=pp(i.right,t.right),t.bottom=pp(i.bottom,t.bottom),t.left=fp(i.left,t.left),t},am(e,o,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function cm(e){var t=e.reference,n=e.element,r=e.placement,i=r?dp(r):null,a=r?Lp(r):null,o=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,c;switch(i){case`top`:c={x:o,y:t.y-n.height};break;case Wf:c={x:o,y:t.y+t.height};break;case Gf:c={x:t.x+t.width,y:s};break;case Kf:c={x:t.x-n.width,y:s};break;default:c={x:t.x,y:t.y}}var l=i?Dp(i):null;if(l!=null){var u=l===`y`?`height`:`width`;switch(a){case Yf:c[l]=c[l]-(t[u]/2-n[u]/2);break;case`end`:c[l]=c[l]+(t[u]/2-n[u]/2);break}}return c}function lm(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=r===void 0?e.placement:r,a=n.strategy,o=a===void 0?e.strategy:a,s=n.boundary,c=s===void 0?Xf:s,l=n.rootBoundary,u=l===void 0?Zf:l,d=n.elementContext,f=d===void 0?Qf:d,p=n.altBoundary,m=p===void 0?!1:p,h=n.padding,g=h===void 0?0:h,_=jp(typeof g==`number`?Mp(g,Jf):g),v=f===`popper`?$f:Qf,y=e.rects.popper,b=e.elements[m?v:f],x=sm(ap(b)?b:b.contextElement||Sp(e.elements.popper),c,u,o),S=_p(e.elements.reference),C=cm({reference:S,element:y,placement:i}),w=rm(Object.assign({},y,C)),T=f===`popper`?w:S,E={top:x.top-T.top+_.top,bottom:T.bottom-x.bottom+_.bottom,left:x.left-T.left+_.left,right:T.right-x.right+_.right},D=e.modifiersData.offset;if(f===`popper`&&D){var O=D[i];Object.keys(E).forEach(function(e){var t=[`right`,`bottom`].indexOf(e)>=0?1:-1,n=[`top`,`bottom`].indexOf(e)>=0?`y`:`x`;E[e]+=O[n]*t})}return E}function um(e,t){t===void 0&&(t={});var n=t,r=n.placement,i=n.boundary,a=n.rootBoundary,o=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=c===void 0?tp:c,u=Lp(r),d=u?s?ep:ep.filter(function(e){return Lp(e)===u}):Jf,f=d.filter(function(e){return l.indexOf(e)>=0});f.length===0&&(f=d);var p=f.reduce(function(t,n){return t[n]=lm(e,{placement:n,boundary:i,rootBoundary:a,padding:o})[dp(n)],t},{});return Object.keys(p).sort(function(e,t){return p[e]-p[t]})}function dm(e){if(dp(e)===`auto`)return[];var t=qp(e);return[Yp(e),t,Yp(t)]}function fm(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!0:o,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,m=p===void 0?!0:p,h=n.allowedAutoPlacements,g=t.options.placement,_=dp(g)===g,v=c||(_||!m?[qp(g)]:dm(g)),y=[g].concat(v).reduce(function(e,n){return e.concat(dp(n)===`auto`?um(t,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:m,allowedAutoPlacements:h}):n)},[]),b=t.rects.reference,x=t.rects.popper,S=new Map,C=!0,w=y[0],T=0;T=0,A=k?`width`:`height`,j=lm(t,{placement:E,boundary:u,rootBoundary:d,altBoundary:f,padding:l}),M=k?O?Gf:Kf:O?Wf:`top`;b[A]>x[A]&&(M=qp(M));var N=qp(M),P=[];if(a&&P.push(j[D]<=0),s&&P.push(j[M]<=0,j[N]<=0),P.every(function(e){return e})){w=E,C=!1;break}S.set(E,P)}if(C)for(var F=m?3:1,I=function(e){var t=y.find(function(t){var n=S.get(t);if(n)return n.slice(0,e).every(function(e){return e})});if(t)return w=t,`break`},ee=F;ee>0&&I(ee)!==`break`;ee--);t.placement!==w&&(t.modifiersData[r]._skip=!0,t.placement=w,t.reset=!0)}}var pm={name:`flip`,enabled:!0,phase:`main`,fn:fm,requiresIfExists:[`offset`],data:{_skip:!1}};function mm(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function hm(e){return[`top`,Gf,Wf,Kf].some(function(t){return e[t]>=0})}function gm(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,a=t.modifiersData.preventOverflow,o=lm(t,{elementContext:`reference`}),s=lm(t,{altBoundary:!0}),c=mm(o,r),l=mm(s,i,a),u=hm(c),d=hm(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}var _m={name:`hide`,enabled:!0,phase:`main`,requiresIfExists:[`preventOverflow`],fn:gm};function vm(e,t,n){var r=dp(e),i=[`left`,`top`].indexOf(r)>=0?-1:1,a=typeof n==`function`?n(Object.assign({},t,{placement:e})):n,o=a[0],s=a[1];return o||=0,s=(s||0)*i,[`left`,`right`].indexOf(r)>=0?{x:s,y:o}:{x:o,y:s}}function ym(e){var t=e.state,n=e.options,r=e.name,i=n.offset,a=i===void 0?[0,0]:i,o=tp.reduce(function(e,n){return e[n]=vm(n,t.rects,a),e},{}),s=o[t.placement],c=s.x,l=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=l),t.modifiersData[r]=o}var bm={name:`offset`,enabled:!0,phase:`main`,requires:[`popperOffsets`],fn:ym};function xm(e){var t=e.state,n=e.name;t.modifiersData[n]=cm({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var Sm={name:`popperOffsets`,enabled:!0,phase:`read`,fn:xm,data:{}};function Cm(e){return e===`x`?`y`:`x`}function wm(e){var t=e.state,n=e.options,r=e.name,i=n.mainAxis,a=i===void 0?!0:i,o=n.altAxis,s=o===void 0?!1:o,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,f=n.tether,p=f===void 0?!0:f,m=n.tetherOffset,h=m===void 0?0:m,g=lm(t,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),_=dp(t.placement),v=Lp(t.placement),y=!v,b=Dp(_),x=Cm(b),S=t.modifiersData.popperOffsets,C=t.rects.reference,w=t.rects.popper,T=typeof h==`function`?h(Object.assign({},t.rects,{placement:t.placement})):h,E=typeof T==`number`?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(S){if(a){var k=b===`y`?`top`:Kf,A=b===`y`?Wf:Gf,j=b===`y`?`height`:`width`,M=S[b],N=M+g[k],P=M-g[A],F=p?-w[j]/2:0,I=v===`start`?C[j]:w[j],ee=v===`start`?-w[j]:-C[j],te=t.elements.arrow,ne=p&&te?vp(te):{width:0,height:0},re=t.modifiersData[`arrow#persistent`]?t.modifiersData[`arrow#persistent`].padding:Ap(),ie=re[k],L=re[A],R=Op(0,C[j],ne[j]),z=y?C[j]/2-F-R-ie-E.mainAxis:I-R-ie-E.mainAxis,ae=y?-C[j]/2+F+R+L+E.mainAxis:ee+R+L+E.mainAxis,oe=t.elements.arrow&&Ep(t.elements.arrow),se=oe?b===`y`?oe.clientTop||0:oe.clientLeft||0:0,ce=D?.[b]??0,B=M+z-ce-se,V=M+ae-ce,le=Op(p?pp(N,B):N,M,p?fp(P,V):P);S[b]=le,O[b]=le-M}if(s){var ue=b===`x`?`top`:Kf,de=b===`x`?Wf:Gf,fe=S[x],pe=x===`y`?`height`:`width`,me=fe+g[ue],he=fe-g[de],ge=[`top`,Kf].indexOf(_)!==-1,_e=D?.[x]??0,H=ge?me:fe-C[pe]-w[pe]-_e+E.altAxis,ve=ge?fe+C[pe]+w[pe]-_e-E.altAxis:he,ye=p&&ge?kp(H,fe,ve):Op(p?H:me,fe,p?ve:he);S[x]=ye,O[x]=ye-fe}t.modifiersData[r]=O}}var Tm={name:`preventOverflow`,enabled:!0,phase:`main`,fn:wm,requiresIfExists:[`offset`]};function Em(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Dm(e){return e===ip(e)||!op(e)?Xp(e):Em(e)}function Om(e){var t=e.getBoundingClientRect(),n=mp(t.width)/e.offsetWidth||1,r=mp(t.height)/e.offsetHeight||1;return n!==1||r!==1}function km(e,t,n){n===void 0&&(n=!1);var r=op(t),i=op(t)&&Om(t),a=Sp(t),o=_p(e,i,n),s={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(r||!r&&!n)&&((rp(t)!==`body`||em(a))&&(s=Dm(t)),op(t)?(c=_p(t,!0),c.x+=t.clientLeft,c.y+=t.clientTop):a&&(c.x=Zp(a))),{x:o.left+s.scrollLeft-c.x,y:o.top+s.scrollTop-c.y,width:o.width,height:o.height}}function Am(e){var t=new Map,n=new Set,r=[];e.forEach(function(e){t.set(e.name,e)});function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach(function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}}),r.push(e)}return e.forEach(function(e){n.has(e.name)||i(e)}),r}function jm(e){var t=Am(e);return np.reduce(function(e,n){return e.concat(t.filter(function(e){return e.phase===n}))},[])}function Mm(e){var t;return function(){return t||=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})}),t}}function Nm(e){var t=e.reduce(function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e},{});return Object.keys(t).map(function(e){return t[e]})}var Pm={placement:`bottom`,modifiers:[],strategy:`absolute`};function Fm(){return![...arguments].some(function(e){return!(e&&typeof e.getBoundingClientRect==`function`)})}function Im(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,r=n===void 0?[]:n,i=t.defaultOptions,a=i===void 0?Pm:i;return function(e,t,n){n===void 0&&(n=a);var i={placement:`bottom`,orderedModifiers:[],options:Object.assign({},Pm,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},o=[],s=!1,c={state:i,setOptions:function(n){var o=typeof n==`function`?n(i.options):n;u(),i.options=Object.assign({},a,i.options,o),i.scrollParents={reference:ap(e)?nm(e):e.contextElement?nm(e.contextElement):[],popper:nm(t)};var s=jm(Nm([].concat(r,i.options.modifiers)));return i.orderedModifiers=s.filter(function(e){return e.enabled}),l(),c.update()},forceUpdate:function(){if(!s){var e=i.elements,t=e.reference,n=e.popper;if(Fm(t,n)){i.rects={reference:km(t,Ep(n),i.options.strategy===`fixed`),popper:vp(n)},i.reset=!1,i.placement=i.options.placement,i.orderedModifiers.forEach(function(e){return i.modifiersData[e.name]=Object.assign({},e.data)});for(var r=0;r{let r={name:`updateState`,enabled:!0,phase:`write`,fn:({state:e})=>{let t=zm(e);Object.assign(o.value,t)},requires:[`computeStyles`]},i=K(()=>{let{onFirstUpdate:e,placement:t,strategy:i,modifiers:a}=c(n);return{onFirstUpdate:e,placement:t||`bottom`,strategy:i||`absolute`,modifiers:[...a||[],r,{name:`applyStyles`,enabled:!1}]}}),a=se(),o=H({styles:{popper:{position:c(i).strategy,left:`0`,top:`0`},arrow:{position:`absolute`}},attributes:{}}),s=()=>{a.value&&=(a.value.destroy(),void 0)};return U(i,e=>{let t=c(a);t&&t.setOptions(e)},{deep:!0}),U([e,t],([e,t])=>{s(),!(!e||!t)&&(a.value=Lm(e,t,c(i)))}),Ge(()=>{s()}),{state:K(()=>({...c(a)?.state||{}})),styles:K(()=>c(o).styles),attributes:K(()=>c(o).attributes),update:()=>c(a)?.update(),forceUpdate:()=>c(a)?.forceUpdate(),instanceRef:K(()=>c(a))}};function zm(e){let t=Object.keys(e.elements);return{styles:au(t.map(t=>[t,e.styles[t]||{}])),attributes:au(t.map(t=>[t,e.attributes[t]]))}}var Bm=e=>{if(!e)return{onClick:f,onMousedown:f,onMouseup:f};let t=!1,n=!1;return{onClick:r=>{t&&n&&e(r),t=n=!1},onMousedown:e=>{t=e.target===e.currentTarget},onMouseup:e=>{n=e.target===e.currentTarget}}},Vm=(e,t=0)=>{if(t===0)return e;let n=H(o(t)&&!!t.initVal),r=null,i=t=>{if(Au(t)){n.value=e.value;return}r&&clearTimeout(r),r=setTimeout(()=>{n.value=e.value},t)},a=e=>{e===`leading`?J(t)?i(t):i(t.leading):o(t)?i(t.trailing):n.value=!1};return h(()=>a(`leading`)),U(()=>e.value,e=>{a(e?`leading`:`trailing`)}),n};function Hm(){let e,t=(t,r)=>{n(),e=globalThis.setTimeout(t,r)},n=()=>{e!==void 0&&(globalThis.clearTimeout(e),e=void 0)};return Pt(()=>n()),{registerTimeout:t,cancelTimeout:n}}var Um={prefix:Math.floor(Math.random()*1e4),current:0},Wm=Symbol(`elIdInjection`),Gm=()=>O()?w(Wm,Um):Um,Km=e=>{let t=Gm();!Rt&&t===Um&&Zd(`IdInjection`,`Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed @@ -56,4 +56,4 @@ usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:r,curr `);return e===-1?``:t.stack.slice(e+1)})();try{if(!e.stack)e.stack=n;else if(n){let t=n.indexOf(` `),r=t===-1?-1:n.indexOf(` `,t+1),i=r===-1?``:n.slice(r+1);String(e.stack).endsWith(i)||(e.stack+=` -`+n)}}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=D1(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&t0.assertOptions(n,{silentJSONParsing:n0.transitional(n0.boolean),forcedJSONParsing:n0.transitional(n0.boolean),clarifyTimeoutError:n0.transitional(n0.boolean),legacyInterceptorReqResOrdering:n0.transitional(n0.boolean)},!1),r!=null&&($.isFunction(r)?t.paramsSerializer={serialize:r}:t0.assertOptions(r,{encode:n0.function,serialize:n0.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),t0.assertOptions(t,{baseUrl:n0.spelling(`baseURL`),withXsrfToken:n0.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&$.merge(i.common,i[t.method]);i&&$.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=u1.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||F$;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[X1.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new p1(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function a0(e){return function(t){return e.apply(null,t)}}function o0(e){return $.isObject(e)&&e.isAxiosError===!0}var s0={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(s0).forEach(([e,t])=>{s0[t]=e});function c0(e){let t=new r0(e),n=dQ(r0.prototype.request,t);return $.extend(n,r0.prototype,t,{allOwnKeys:!0}),$.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return c0(D1(e,t))},n}var l0=c0(X$);l0.Axios=r0,l0.CanceledError=p1,l0.CancelToken=i0,l0.isCancel=f1,l0.VERSION=Z1,l0.toFormData=O$,l0.AxiosError=S$,l0.Cancel=l0.CanceledError,l0.all=function(e){return Promise.all(e)},l0.spread=a0,l0.isAxiosError=o0,l0.mergeConfig=D1,l0.AxiosHeaders=u1,l0.formToJSON=e=>q$($.isHTMLForm(e)?new FormData(e):e),l0.getAdapter=J1.getAdapter,l0.HttpStatusCode=s0,l0.default=l0;function u0(){return`${window.location.origin}/admin/`.replace(/\/?$/,`/`)}function d0(){return new URL(`login`,u0()).pathname}function f0(){return`${u0()}#/login`}function p0(){{let e=window.location.hash.replace(/^#/,``);return e===`/login`||e.startsWith(`/login?`)}return window.location.pathname.startsWith(d0())}var m0=l0.create({baseURL:`/api`,timeout:3e4,headers:{"Content-Type":`application/json`,Accept:`application/json`}});m0.interceptors.request.use(e=>{let t=localStorage.getItem(`admin_token`);return t&&(e.headers.Authorization=`Bearer ${t}`),typeof FormData<`u`&&e.data instanceof FormData&&(e.headers&&typeof e.headers.delete==`function`?e.headers.delete(`Content-Type`):e.headers&&delete e.headers[`Content-Type`],e.transformRequest=[e=>e]),e}),m0.interceptors.response.use(e=>e,e=>(e.response?.status===401&&(localStorage.removeItem(`admin_token`),p0()||window.location.assign(f0())),Promise.reject(e)));async function h0(e){let{data:t}=await m0.post(`/admin/v1/auth/login`,e);return t.data}async function g0(){let{data:e}=await m0.post(`/admin/v1/auth/logout`);return e}async function _0(){let{data:e}=await m0.get(`/admin/v1/auth/me`);return e.data}async function v0(e){let{data:t}=await m0.post(`/admin/v1/auth/password`,e);return t}var y0=`modulepreload`,b0=function(e){return`/admin/`+e},x0={},S0=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=b0(t,n),t in x0)return;x0[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:y0,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},C0=Object.assign({"/src/views/HomeView.vue":()=>S0(()=>import(`./HomeView-YwfjTZ3h.js`),__vite__mapDeps([0,1,2,3])),"/src/views/assets/banners/index.vue":()=>S0(()=>import(`./banners-B2EbjTBF.js`),__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12])),"/src/views/assets/crawler/index.vue":()=>S0(()=>import(`./crawler-DA_awB1N.js`),__vite__mapDeps([13,1,2,14,15,16,10,17])),"/src/views/assets/map/index.vue":()=>S0(()=>import(`./map-at8VSzKi.js`),__vite__mapDeps([18,1,2,14,10,19,20,16,21,22,23,24,25,26])),"/src/views/assets/papers/index.vue":()=>S0(()=>import(`./papers-BJUlKbT6.js`),__vite__mapDeps([27,1,2,14,21,10,28])),"/src/views/assets/universities/index.vue":()=>S0(()=>import(`./universities-BOMonfuo.js`),__vite__mapDeps([29,1,2,14,10,24,30])),"/src/views/dashboard/index.vue":()=>S0(()=>import(`./dashboard-0tHyGURo.js`),__vite__mapDeps([31,1,2,7,8,10,11,32,26])),"/src/views/demands/index.vue":()=>S0(()=>import(`./demands-CvY88JMp.js`),__vite__mapDeps([33,1,2,20,16,34,10,11,35])),"/src/views/login/index.vue":()=>S0(()=>import(`./login-ClnRBds7.js`),__vite__mapDeps([36,1,2,37])),"/src/views/operations/activities/index.vue":()=>S0(()=>import(`./activities-CMrLWqB9.js`),__vite__mapDeps([38,1,2,5,6,39,40,7,16,10,11,41])),"/src/views/operations/courses/index.vue":()=>S0(()=>import(`./courses-BEPRXk7p.js`),__vite__mapDeps([42,2,1,5,6,39,40,8,16,9,21,10,11,43])),"/src/views/operations/news/index.vue":()=>S0(()=>import(`./news-DCTf0UO8.js`),__vite__mapDeps([44,1,2,5,6,16,9,10,11,45])),"/src/views/students/index.vue":()=>S0(()=>import(`./students-DtOxgydU.js`),__vite__mapDeps([46,1,2,16,47,21,34,10,22,48])),"/src/views/system/audit-logs/index.vue":()=>S0(()=>import(`./audit-logs-BknMxI6A.js`),__vite__mapDeps([49,1,2,10])),"/src/views/system/crawl-addresses/index.vue":()=>S0(()=>import(`./crawl-addresses-D4W6XOd-.js`),__vite__mapDeps([50,1,2,15,16,21,10,11,51])),"/src/views/system/dict/index.vue":()=>S0(()=>import(`./dict-UJMjDsdM.js`),__vite__mapDeps([52,1,2,16,10,11,53])),"/src/views/system/grid-members/index.vue":()=>S0(()=>import(`./grid-members-Brl1TJ9T.js`),__vite__mapDeps([54,1,2,47,55,21,10,11])),"/src/views/system/menus/index.vue":()=>S0(()=>import(`./menus-DJ1r7fmI.js`),__vite__mapDeps([56,1,2,57,10])),"/src/views/system/research-directions/index.vue":()=>S0(()=>import(`./research-directions-Cuytezev.js`),__vite__mapDeps([58,1,2,55,10,11])),"/src/views/system/roles/index.vue":()=>S0(()=>import(`./roles-JoCAhY96.js`),__vite__mapDeps([59,1,2,57,60,10,11,61])),"/src/views/system/users/index.vue":()=>S0(()=>import(`./users-BFL5CvH3.js`),__vite__mapDeps([62,1,2,60,34,10,11])),"/src/views/teachers/components/TeacherDetailDialog.vue":()=>S0(()=>import(`./TeacherDetailDialog-Df17GCYR.js`).then(e=>e.n),__vite__mapDeps([19,2,1,14,20,16,21,22,23])),"/src/views/teachers/index.vue":()=>S0(()=>import(`./teachers-Dfwyz9ux.js`),__vite__mapDeps([63,1,2,20,16,21,34,10,19,14,22,23,64]))});function w0(e){let t=e.replace(/^\//,``).replace(/\.vue$/i,``),n=Object.keys(C0).find(e=>e.endsWith(`/${t}.vue`));return n?C0[n]:(console.warn(`[resolveView] 未找到组件:`,e),()=>S0(()=>import(`./dashboard-0tHyGURo.js`),__vite__mapDeps([31,1,2,7,8,10,11,32,26])))}var T0=`admin_token`;function E0(e){let t=[],n=e=>{for(let r of e){r.children?.length&&n(r.children);let e=r.component?.trim();if(!e)continue;let i=r.path.replace(/^\//,``);t.push({path:i,name:r.name,component:w0(e),meta:{title:r.title,keepAlive:r.keep_alive===1}})}};return n(e),t}var D0=wt(`auth`,{state:()=>({token:localStorage.getItem(T0)||``,user:null,permissions:[],menus:[],routesAdded:!1}),getters:{isLoggedIn:e=>!!e.token,isGridMember:e=>e.user?.is_grid_member===!0,isSuperAdmin:e=>e.user?.is_super_admin===!0},actions:{setToken(e){this.token=e,localStorage.setItem(T0,e)},clearAuth(){this.token=``,this.user=null,this.permissions=[],this.menus=[],this.routesAdded=!1,localStorage.removeItem(T0)},async login(e,t){let n=await h0({username:e,password:t});this.setToken(n.token),this.user=n.user},async logout(){try{await g0()}finally{this.clearAuth()}},async bootstrap(e){let t=await _0();if(this.user=t.user,this.permissions=t.permissions,this.menus=t.menus,!this.routesAdded){let n=[{path:``,redirect:`/dashboard`},...E0(t.menus)];e.addRoute({path:`/`,name:`AdminShell`,component:()=>S0(()=>import(`./AdminLayout-rkGKMvAb.js`),__vite__mapDeps([65,1,2,66])),meta:{requiresAuth:!0},children:n}),this.routesAdded=!0}}}}),O0=uQ({history:kZ(`/admin/`),routes:[{path:`/login`,name:`login`,component:()=>S0(()=>import(`./login-ClnRBds7.js`),__vite__mapDeps([36,1,2,37])),meta:{public:!0,title:`登录`}}]});O0.afterEach(e=>{let t=typeof e.meta.title==`string`?e.meta.title:``;document.title=t?`${t} - S-lake高校雷达网`:`S-lake高校雷达网`}),O0.beforeEach(async(e,t,n)=>{let r=D0();if(e.meta.public)return r.token&&e.name===`login`?n({path:`/dashboard`}):n();if(!r.token)return n({name:`login`,query:{redirect:e.fullPath}});if(!r.routesAdded)try{return await r.bootstrap(O0),n({...e,replace:!0})}catch{return r.clearAuth(),n({name:`login`})}return n()});var k0=Ne(rX);k0.use(ut()),k0.use(O0),k0.use(QY,{locale:$Y}),k0.mount(`#app`);export{RS as C,cS as S,Sb as _,SX as a,ex as b,MY as c,L_ as d,ov as f,py as g,j_ as h,l0 as i,hY as l,Ev as m,v0 as n,xX as o,mv as p,m0 as r,eX as s,D0 as t,N_ as u,Mb as v,_x as x,Zb as y}; \ No newline at end of file +`+n)}}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=D1(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&t0.assertOptions(n,{silentJSONParsing:n0.transitional(n0.boolean),forcedJSONParsing:n0.transitional(n0.boolean),clarifyTimeoutError:n0.transitional(n0.boolean),legacyInterceptorReqResOrdering:n0.transitional(n0.boolean)},!1),r!=null&&($.isFunction(r)?t.paramsSerializer={serialize:r}:t0.assertOptions(r,{encode:n0.function,serialize:n0.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),t0.assertOptions(t,{baseUrl:n0.spelling(`baseURL`),withXsrfToken:n0.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&$.merge(i.common,i[t.method]);i&&$.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`common`],e=>{delete i[e]}),t.headers=u1.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||F$;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[X1.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new p1(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function a0(e){return function(t){return e.apply(null,t)}}function o0(e){return $.isObject(e)&&e.isAxiosError===!0}var s0={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(s0).forEach(([e,t])=>{s0[t]=e});function c0(e){let t=new r0(e),n=dQ(r0.prototype.request,t);return $.extend(n,r0.prototype,t,{allOwnKeys:!0}),$.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return c0(D1(e,t))},n}var l0=c0(X$);l0.Axios=r0,l0.CanceledError=p1,l0.CancelToken=i0,l0.isCancel=f1,l0.VERSION=Z1,l0.toFormData=O$,l0.AxiosError=S$,l0.Cancel=l0.CanceledError,l0.all=function(e){return Promise.all(e)},l0.spread=a0,l0.isAxiosError=o0,l0.mergeConfig=D1,l0.AxiosHeaders=u1,l0.formToJSON=e=>q$($.isHTMLForm(e)?new FormData(e):e),l0.getAdapter=J1.getAdapter,l0.HttpStatusCode=s0,l0.default=l0;function u0(){return`${window.location.origin}/admin/`.replace(/\/?$/,`/`)}function d0(){return new URL(`login`,u0()).pathname}function f0(){return`${u0()}#/login`}function p0(){{let e=window.location.hash.replace(/^#/,``);return e===`/login`||e.startsWith(`/login?`)}return window.location.pathname.startsWith(d0())}var m0=l0.create({baseURL:`/api`,timeout:3e4,headers:{"Content-Type":`application/json`,Accept:`application/json`}});m0.interceptors.request.use(e=>{let t=localStorage.getItem(`admin_token`);return t&&(e.headers.Authorization=`Bearer ${t}`),typeof FormData<`u`&&e.data instanceof FormData&&(e.headers&&typeof e.headers.delete==`function`?e.headers.delete(`Content-Type`):e.headers&&delete e.headers[`Content-Type`],e.transformRequest=[e=>e]),e}),m0.interceptors.response.use(e=>e,e=>(e.response?.status===401&&(localStorage.removeItem(`admin_token`),p0()||window.location.assign(f0())),Promise.reject(e)));async function h0(e){let{data:t}=await m0.post(`/admin/v1/auth/login`,e);return t.data}async function g0(){let{data:e}=await m0.post(`/admin/v1/auth/logout`);return e}async function _0(){let{data:e}=await m0.get(`/admin/v1/auth/me`);return e.data}async function v0(e){let{data:t}=await m0.post(`/admin/v1/auth/password`,e);return t}var y0=`modulepreload`,b0=function(e){return`/admin/`+e},x0={},S0=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=b0(t,n),t in x0)return;x0[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:y0,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},C0=Object.assign({"/src/views/HomeView.vue":()=>S0(()=>import(`./HomeView-Bq5Pmq0E.js`),__vite__mapDeps([0,1,2,3])),"/src/views/assets/banners/index.vue":()=>S0(()=>import(`./banners-CG4qXWZW.js`),__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13])),"/src/views/assets/crawler/index.vue":()=>S0(()=>import(`./crawler-Dn8Fhsxl.js`),__vite__mapDeps([14,1,2,15,16,17,11,18])),"/src/views/assets/map/index.vue":()=>S0(()=>import(`./map-b5jC9MGz.js`),__vite__mapDeps([19,1,2,15,11,20,21,17,22,23,24,25,26,27])),"/src/views/assets/papers/index.vue":()=>S0(()=>import(`./papers-Bxe2o_F5.js`),__vite__mapDeps([28,1,2,15,22,11,29])),"/src/views/assets/universities/index.vue":()=>S0(()=>import(`./universities-Dschxe-D.js`),__vite__mapDeps([30,1,2,15,11,25,31])),"/src/views/dashboard/index.vue":()=>S0(()=>import(`./dashboard-DL4Rr2Er.js`),__vite__mapDeps([32,1,2,8,9,11,12,33,27])),"/src/views/demands/index.vue":()=>S0(()=>import(`./demands-BIE9utJy.js`),__vite__mapDeps([34,1,2,21,17,35,11,12,36])),"/src/views/login/index.vue":()=>S0(()=>import(`./login-DZjGqMen.js`),__vite__mapDeps([37,1,2,38])),"/src/views/operations/activities/index.vue":()=>S0(()=>import(`./activities-BlfllI2o.js`),__vite__mapDeps([39,1,2,5,6,7,40,41,8,17,11,12,42])),"/src/views/operations/courses/index.vue":()=>S0(()=>import(`./courses-BDy8J_6B.js`),__vite__mapDeps([43,2,1,5,6,7,40,41,9,17,10,22,11,12,44])),"/src/views/operations/news/index.vue":()=>S0(()=>import(`./news-CkDCcGbT.js`),__vite__mapDeps([45,1,2,5,6,7,17,10,11,12,46])),"/src/views/operations/past-reviews/index.vue":()=>S0(()=>import(`./past-reviews-RwepuJlS.js`),__vite__mapDeps([47,1,2,6,11,12,48])),"/src/views/students/index.vue":()=>S0(()=>import(`./students-Ck-5WNi7.js`),__vite__mapDeps([49,1,2,17,50,22,35,11,23,51])),"/src/views/system/audit-logs/index.vue":()=>S0(()=>import(`./audit-logs-CcZSWGNE.js`),__vite__mapDeps([52,1,2,11])),"/src/views/system/crawl-addresses/index.vue":()=>S0(()=>import(`./crawl-addresses-DgRZGJyd.js`),__vite__mapDeps([53,1,2,16,17,22,11,12,54])),"/src/views/system/dict/index.vue":()=>S0(()=>import(`./dict-giEClWT-.js`),__vite__mapDeps([55,1,2,17,11,12,56])),"/src/views/system/grid-members/index.vue":()=>S0(()=>import(`./grid-members-n6u-kBbI.js`),__vite__mapDeps([57,1,2,50,58,22,11,12])),"/src/views/system/menus/index.vue":()=>S0(()=>import(`./menus-c1bak3RD.js`),__vite__mapDeps([59,1,2,60,11])),"/src/views/system/research-directions/index.vue":()=>S0(()=>import(`./research-directions-CW-61eRh.js`),__vite__mapDeps([61,1,2,58,11,12])),"/src/views/system/roles/index.vue":()=>S0(()=>import(`./roles-CUFvJuCz.js`),__vite__mapDeps([62,1,2,60,63,11,12,64])),"/src/views/system/users/index.vue":()=>S0(()=>import(`./users-DTRBpffL.js`),__vite__mapDeps([65,1,2,63,35,11,12])),"/src/views/teachers/components/TeacherDetailDialog.vue":()=>S0(()=>import(`./TeacherDetailDialog-BwE7UVMD.js`).then(e=>e.n),__vite__mapDeps([20,2,1,15,21,17,22,23,24])),"/src/views/teachers/index.vue":()=>S0(()=>import(`./teachers-BtQgJP3e.js`),__vite__mapDeps([66,1,2,21,17,22,35,11,20,15,23,24,67]))});function w0(e){let t=e.replace(/^\//,``).replace(/\.vue$/i,``),n=Object.keys(C0).find(e=>e.endsWith(`/${t}.vue`));return n?C0[n]:(console.warn(`[resolveView] 未找到组件:`,e),()=>S0(()=>import(`./dashboard-DL4Rr2Er.js`),__vite__mapDeps([32,1,2,8,9,11,12,33,27])))}var T0=`admin_token`;function E0(e){let t=[],n=e=>{for(let r of e){r.children?.length&&n(r.children);let e=r.component?.trim();if(!e)continue;let i=r.path.replace(/^\//,``);t.push({path:i,name:r.name,component:w0(e),meta:{title:r.title,keepAlive:r.keep_alive===1}})}};return n(e),t}var D0=wt(`auth`,{state:()=>({token:localStorage.getItem(T0)||``,user:null,permissions:[],menus:[],routesAdded:!1}),getters:{isLoggedIn:e=>!!e.token,isGridMember:e=>e.user?.is_grid_member===!0,isSuperAdmin:e=>e.user?.is_super_admin===!0},actions:{setToken(e){this.token=e,localStorage.setItem(T0,e)},clearAuth(){this.token=``,this.user=null,this.permissions=[],this.menus=[],this.routesAdded=!1,localStorage.removeItem(T0)},async login(e,t){let n=await h0({username:e,password:t});this.setToken(n.token),this.user=n.user},async logout(){try{await g0()}finally{this.clearAuth()}},async bootstrap(e){let t=await _0();if(this.user=t.user,this.permissions=t.permissions,this.menus=t.menus,!this.routesAdded){let n=[{path:``,redirect:`/dashboard`},...E0(t.menus)];e.addRoute({path:`/`,name:`AdminShell`,component:()=>S0(()=>import(`./AdminLayout-BJlk0I2v.js`),__vite__mapDeps([68,1,2,69])),meta:{requiresAuth:!0},children:n}),this.routesAdded=!0}}}}),O0=uQ({history:kZ(`/admin/`),routes:[{path:`/login`,name:`login`,component:()=>S0(()=>import(`./login-DZjGqMen.js`),__vite__mapDeps([37,1,2,38])),meta:{public:!0,title:`登录`}}]});O0.afterEach(e=>{let t=typeof e.meta.title==`string`?e.meta.title:``;document.title=t?`${t} - S-lake先进技术发展中心`:`S-lake先进技术发展中心`}),O0.beforeEach(async(e,t,n)=>{let r=D0();if(e.meta.public)return r.token&&e.name===`login`?n({path:`/dashboard`}):n();if(!r.token)return n({name:`login`,query:{redirect:e.fullPath}});if(!r.routesAdded)try{return await r.bootstrap(O0),n({...e,replace:!0})}catch{return r.clearAuth(),n({name:`login`})}return n()});var k0=Ne(rX);k0.use(ut()),k0.use(O0),k0.use(QY,{locale:$Y}),k0.mount(`#app`);export{RS as C,cS as S,Sb as _,SX as a,ex as b,MY as c,L_ as d,ov as f,py as g,j_ as h,l0 as i,hY as l,Ev as m,v0 as n,xX as o,mv as p,m0 as r,eX as s,D0 as t,N_ as u,Mb as v,_x as x,Zb as y}; \ No newline at end of file diff --git a/public/admin/assets/login-CYuJwixp.css b/public/admin/assets/login-CYuJwixp.css new file mode 100644 index 0000000..ce23230 --- /dev/null +++ b/public/admin/assets/login-CYuJwixp.css @@ -0,0 +1 @@ +.login-split[data-v-feb9d828]{background:linear-gradient(#fdf8f8 0%,#fff 45%,#faf6f6 100%);min-height:100vh}.login-main[data-v-feb9d828]{justify-content:center;align-items:center;min-height:100vh;padding:2rem 1rem;display:flex}.login-container[data-v-feb9d828]{grid-template-columns:1fr;align-items:center;gap:2.5rem;width:100%;max-width:1060px;display:grid}@media (width>=992px){.login-container[data-v-feb9d828]{grid-template-columns:1fr 1fr;gap:3rem}}.login-hero[data-v-feb9d828]{text-align:center}@media (width>=992px){.login-hero[data-v-feb9d828]{text-align:left}}.login-hero-title[data-v-feb9d828]{color:#000;margin:0 0 1rem;font-size:clamp(1.35rem,2.5vw,1.85rem);font-weight:700;line-height:1.35}.login-hero-desc[data-v-feb9d828]{color:#868e96;max-width:26rem;margin:0 auto;font-size:.95rem;line-height:1.65}@media (width>=992px){.login-hero-desc[data-v-feb9d828]{margin:0}}.login-panel-wrap[data-v-feb9d828]{justify-content:center;display:flex}@media (width>=992px){.login-panel-wrap[data-v-feb9d828]{justify-content:flex-end}}.login-panel-card[data-v-feb9d828]{background:#fff;border-radius:12px;width:100%;max-width:420px;padding:2.25rem 2.5rem;box-shadow:0 8px 32px #0000000f,0 2px 8px #0000000a}@media (width>=992px){.login-panel-card[data-v-feb9d828]{padding:2.5rem 2.75rem}}.login-panel-title[data-v-feb9d828]{text-align:center;color:#212529;margin:0 0 1.75rem;font-size:1.25rem;font-weight:700}.login-form[data-v-feb9d828] .el-form-item__label{color:#212529;font-weight:400}.login-form[data-v-feb9d828] .el-input__wrapper{padding:.65rem .85rem;box-shadow:inset 0 0 0 1px #dee2e6}.login-form[data-v-feb9d828] .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--slake-brand) inset}.login-btn[data-v-feb9d828]{width:100%;margin-top:.25rem;padding:.7rem 1rem;font-weight:600} diff --git a/public/admin/assets/login-ClnRBds7.js b/public/admin/assets/login-ClnRBds7.js deleted file mode 100644 index b38e61b..0000000 --- a/public/admin/assets/login-ClnRBds7.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,D as t,E as n,G as r,T as i,Y as a,at as o,b as s,f as c,ht as l}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as u,l as d,o as f,s as p,t as m}from"./index-DHoSHxJa.js";var h={class:`login-split`},g={class:`login-main`},_={class:`login-container`},v={class:`login-panel-wrap`},y={class:`login-panel-card`},b=p(t({__name:`index`,setup(t){let p=f(),b=u(),x=m(),S=l(!1),C=l(!0),w=l({username:``,password:``});function T(){C.value=!1}async function E(){if(!w.value.username||!w.value.password){d.warning(`请输入账号和密码`);return}S.value=!0;try{await x.login(w.value.username,w.value.password);let e=b.query.redirect||`/dashboard`;await p.replace(e)}catch(e){let t=e?.response?.data?.message||`登录失败`;d.error(typeof t==`string`?t:`登录失败`)}finally{S.value=!1}}return(t,l)=>{let u=a(`el-input`),d=a(`el-form-item`),f=a(`el-button`),p=a(`el-form`);return r(),e(`div`,h,[s(`main`,g,[s(`div`,_,[l[4]||=s(`div`,{class:`login-hero`},[s(`h1`,{class:`login-hero-title`},`S-lake先进技术发展中心高校雷达网`),s(`p`,{class:`login-hero-desc`},`加强长三角高校顶尖科研人才的发现、跟踪与服务`)],-1),s(`div`,v,[s(`div`,y,[l[3]||=s(`h2`,{class:`login-panel-title`},`欢迎登录`,-1),n(p,{class:`login-form`,"label-position":`top`,size:`large`,autocomplete:`off`,onSubmit:c(E,[`prevent`])},{default:o(()=>[n(d,{label:`账号`},{default:o(()=>[n(u,{modelValue:w.value.username,"onUpdate:modelValue":l[0]||=e=>w.value.username=e,placeholder:`请输入账号`,autocomplete:`off`,name:`login-account`,readonly:C.value,onFocus:T},null,8,[`modelValue`,`readonly`])]),_:1}),n(d,{label:`密码`},{default:o(()=>[n(u,{modelValue:w.value.password,"onUpdate:modelValue":l[1]||=e=>w.value.password=e,type:`password`,placeholder:`请输入密码`,"show-password":``,autocomplete:`new-password`,name:`login-password`,readonly:C.value,onFocus:T},null,8,[`modelValue`,`readonly`])]),_:1}),n(d,null,{default:o(()=>[n(f,{type:`primary`,class:`login-btn`,loading:S.value,"native-type":`submit`,onClick:E},{default:o(()=>[...l[2]||=[i(` 登录 `,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})])])])])])}}}),[[`__scopeId`,`data-v-bc69620b`]]);export{b as default}; \ No newline at end of file diff --git a/public/admin/assets/login-DZjGqMen.js b/public/admin/assets/login-DZjGqMen.js new file mode 100644 index 0000000..5a78b94 --- /dev/null +++ b/public/admin/assets/login-DZjGqMen.js @@ -0,0 +1 @@ +import{C as e,D as t,E as n,G as r,T as i,Y as a,at as o,b as s,f as c,ht as l}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as u,l as d,o as f,s as p,t as m}from"./index-CPrkFf57.js";var h={class:`login-split`},g={class:`login-main`},_={class:`login-container`},v={class:`login-panel-wrap`},y={class:`login-panel-card`},b=p(t({__name:`index`,setup(t){let p=f(),b=u(),x=m(),S=l(!1),C=l(!0),w=l({username:``,password:``});function T(){C.value=!1}async function E(){if(!w.value.username||!w.value.password){d.warning(`请输入账号和密码`);return}S.value=!0;try{await x.login(w.value.username,w.value.password);let e=b.query.redirect||`/dashboard`;await p.replace(e)}catch(e){let t=e?.response?.data?.message||`登录失败`;d.error(typeof t==`string`?t:`登录失败`)}finally{S.value=!1}}return(t,l)=>{let u=a(`el-input`),d=a(`el-form-item`),f=a(`el-button`),p=a(`el-form`);return r(),e(`div`,h,[s(`main`,g,[s(`div`,_,[l[4]||=s(`div`,{class:`login-hero`},[s(`h1`,{class:`login-hero-title`},`S-lake先进技术发展中心`),s(`p`,{class:`login-hero-desc`},`加强长三角高校顶尖科研人才的发现、跟踪与服务`)],-1),s(`div`,v,[s(`div`,y,[l[3]||=s(`h2`,{class:`login-panel-title`},`欢迎登录`,-1),n(p,{class:`login-form`,"label-position":`top`,size:`large`,autocomplete:`off`,onSubmit:c(E,[`prevent`])},{default:o(()=>[n(d,{label:`账号`},{default:o(()=>[n(u,{modelValue:w.value.username,"onUpdate:modelValue":l[0]||=e=>w.value.username=e,placeholder:`请输入账号`,autocomplete:`off`,name:`login-account`,readonly:C.value,onFocus:T},null,8,[`modelValue`,`readonly`])]),_:1}),n(d,{label:`密码`},{default:o(()=>[n(u,{modelValue:w.value.password,"onUpdate:modelValue":l[1]||=e=>w.value.password=e,type:`password`,placeholder:`请输入密码`,"show-password":``,autocomplete:`new-password`,name:`login-password`,readonly:C.value,onFocus:T},null,8,[`modelValue`,`readonly`])]),_:1}),n(d,null,{default:o(()=>[n(f,{type:`primary`,class:`login-btn`,loading:S.value,"native-type":`submit`,onClick:E},{default:o(()=>[...l[2]||=[i(` 登录 `,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})])])])])])}}}),[[`__scopeId`,`data-v-feb9d828`]]);export{b as default}; \ No newline at end of file diff --git a/public/admin/assets/login-ULkTC2R_.css b/public/admin/assets/login-ULkTC2R_.css deleted file mode 100644 index 2bd8f16..0000000 --- a/public/admin/assets/login-ULkTC2R_.css +++ /dev/null @@ -1 +0,0 @@ -.login-split[data-v-bc69620b]{background:linear-gradient(#fdf8f8 0%,#fff 45%,#faf6f6 100%);min-height:100vh}.login-main[data-v-bc69620b]{justify-content:center;align-items:center;min-height:100vh;padding:2rem 1rem;display:flex}.login-container[data-v-bc69620b]{grid-template-columns:1fr;align-items:center;gap:2.5rem;width:100%;max-width:1060px;display:grid}@media (width>=992px){.login-container[data-v-bc69620b]{grid-template-columns:1fr 1fr;gap:3rem}}.login-hero[data-v-bc69620b]{text-align:center}@media (width>=992px){.login-hero[data-v-bc69620b]{text-align:left}}.login-hero-title[data-v-bc69620b]{color:#000;margin:0 0 1rem;font-size:clamp(1.35rem,2.5vw,1.85rem);font-weight:700;line-height:1.35}.login-hero-desc[data-v-bc69620b]{color:#868e96;max-width:26rem;margin:0 auto;font-size:.95rem;line-height:1.65}@media (width>=992px){.login-hero-desc[data-v-bc69620b]{margin:0}}.login-panel-wrap[data-v-bc69620b]{justify-content:center;display:flex}@media (width>=992px){.login-panel-wrap[data-v-bc69620b]{justify-content:flex-end}}.login-panel-card[data-v-bc69620b]{background:#fff;border-radius:12px;width:100%;max-width:420px;padding:2.25rem 2.5rem;box-shadow:0 8px 32px #0000000f,0 2px 8px #0000000a}@media (width>=992px){.login-panel-card[data-v-bc69620b]{padding:2.5rem 2.75rem}}.login-panel-title[data-v-bc69620b]{text-align:center;color:#212529;margin:0 0 1.75rem;font-size:1.25rem;font-weight:700}.login-form[data-v-bc69620b] .el-form-item__label{color:#212529;font-weight:400}.login-form[data-v-bc69620b] .el-input__wrapper{padding:.65rem .85rem;box-shadow:inset 0 0 0 1px #dee2e6}.login-form[data-v-bc69620b] .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--slake-brand) inset}.login-btn[data-v-bc69620b]{width:100%;margin-top:.25rem;padding:.7rem 1rem;font-weight:600} diff --git a/public/admin/assets/map-at8VSzKi.js b/public/admin/assets/map-b5jC9MGz.js similarity index 95% rename from public/admin/assets/map-at8VSzKi.js rename to public/admin/assets/map-b5jC9MGz.js index 473ed5e..8a3e6cd 100644 --- a/public/admin/assets/map-at8VSzKi.js +++ b/public/admin/assets/map-b5jC9MGz.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,I as a,Qt as ee,S as o,T as s,X as te,Y as c,at as l,b as u,ht as d,m as f,ot as p,q as m,rt as h,tn as g,y as _,z as ne}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{C as v,S as re,_ as y,b as ie,s as b,u as ae,x as oe}from"./index-DHoSHxJa.js";import{n as se,t as ce}from"./usePageLoad-C9PEZ_Tm.js";import{l as le}from"./assets-hAC2p2Vo.js";import{t as ue}from"./TeacherDetailDialog-Df17GCYR.js";import{n as de}from"./teacherStar-DhP_EdY6.js";import{a as fe,c as pe,l as me,m as he,n as x,o as ge,r as _e,s as S,u as C}from"./tiandituMap-B0Q-vV8c.js";/* empty css */var w={class:`dashboard-page executive-dashboard`},T={class:`page-head`},E={key:0,class:`radar-top-grid`},D={class:`radar-kpi`},O={class:`kpi-icon`},k={class:`radar-kpi`},A={class:`kpi-icon`},j={class:`radar-kpi`},M={class:`kpi-icon`},N={class:`radar-kpi`},P={class:`kpi-icon`},F={class:`radar-map-card`},I={class:`radar-main`},ve={class:`radar-map-container-wrap`},ye={key:0,class:`radar-map-placeholder`},be={key:1,class:`radar-map-placeholder`},xe={key:2,class:`radar-map-stage`},Se={class:`radar-side`},Ce={class:`radar-side-head`},we={key:0,class:`radar-side-count`},Te={class:`radar-side-body`},Ee={key:0,class:`radar-empty-panel`},De={class:`radar-teacher-avatar`},L=[`onClick`],Oe={class:`stars`},ke={class:`radar-empty-panel`},Ae={key:0,class:`radar-view-summary`},je={class:`radar-bottom-grid`},Me={class:`radar-info-card`},Ne={class:`radar-school-list`},Pe={class:`radar-info-card`},Fe={class:`radar-field-list`},Ie={class:`radar-field-bar`},Le={key:0,class:`empty-hint`},R=b(n({__name:`index`,setup(n){let b=d(!1),R=d(!1),z=d(``),B=d(null),V=d(null),H=d(!1),U=d(null),W=d(null),G=null,K=null,q=[],J=_(()=>B.value?.summary),Re=_(()=>B.value?.quality||[]),Y=_(()=>B.value?.research_fields||[]),ze=_(()=>Math.max(...Y.value.map(e=>e.percent),1));function Be(e,t){return e?e.length>t?`${e.slice(0,t)}…`:e:``}function Ve(e){return de(e.star_level_item?.value,e.star_level_item?.label)}function X(e){U.value=e,H.value=!0}function He(e){V.value=e;for(let t of q)t.overlay.setActive?.(t.school.id===e.id)}async function Z(){b.value=!0;try{B.value=await le(),V.value&&=B.value.schools.find(e=>e.id===V.value?.id)||null,await a(),await Q()}finally{b.value=!1}}async function Q(){if(!W.value)return;if(z.value=``,!me()){z.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}let e=B.value?.schools||[];if(!e.length){$();return}R.value=!0;try{let t=await C();$();let n=W.value;n.innerHTML=``,G=pe(t,n),ge(G),fe(G,t),q=[];for(let n of e){let e=S(t,{name:n.name,longitude:n.longitude,latitude:n.latitude},V.value?.id===n.id);e.addEventListener(`click`,()=>He(n)),G.addOverLay(e),q.push({school:n,overlay:e})}x(G),K=_e(G,t),he(G);let r=()=>{G&&x(G)};G.addEventListener?.(`load`,r),window.setTimeout(r,300),window.setTimeout(r,800)}catch(e){let t=e instanceof Error?e.message:`地图初始化失败`;z.value=t.includes(`脚本`)||t.includes(`SDK`)?`${t}。若 Key 已配置域名白名单,请使用 https://slake.ali251.langye.net 访问(本地开发可在 hosts 绑定该域名后访问 http://slake.ali251.langye.net:5173)`:t,$()}finally{R.value=!1}}function $(){K?.(),K=null,G&&(G.clearOverLays?.(),G.destroy?.()),q=[],G=null}return h(()=>B.value?.schools.length,()=>{B.value&&!b.value&&a(()=>Q())}),ce(Z),ne($),(n,a)=>{let d=c(`el-icon`),h=c(`el-button`),_=te(`loading`);return p((i(),e(`div`,w,[u(`div`,T,[r(se,{variant:`radar`})]),J.value?(i(),e(`div`,E,[u(`div`,D,[u(`span`,O,[r(d,null,{default:l(()=>[r(t(ie))]),_:1})]),a[1]||=u(`span`,null,[s(`已覆盖高校`),u(`em`,null,`已配置经纬度的高校`)],-1),u(`strong`,null,g(J.value.covered_schools),1)]),u(`div`,k,[u(`span`,A,[r(d,null,{default:l(()=>[r(t(v))]),_:1})]),a[2]||=u(`span`,null,[s(`关联老师`),u(`em`,null,`地图点位老师总数`)],-1),u(`strong`,null,g(J.value.map_teachers),1)]),u(`div`,j,[u(`span`,M,[r(d,null,{default:l(()=>[r(t(re))]),_:1})]),a[3]||=u(`span`,null,[s(`五星老师`),u(`em`,null,`高价值合作对象`)],-1),u(`strong`,null,g(J.value.five_star_teachers),1)]),u(`div`,N,[u(`span`,P,[r(d,null,{default:l(()=>[r(t(y))]),_:1})]),a[4]||=u(`span`,null,[s(`待补坐标`),u(`em`,null,`高校坐标待完善`)],-1),u(`strong`,null,g(J.value.pending_coords),1)])])):o(``,!0),u(`section`,F,[a[15]||=u(`div`,{class:`radar-map-toolbar`},[u(`h2`,null,`高校分布`),u(`span`,{class:`toolbar-hint`},`以苏州为中心展示,点击圆点或学校名称查看高校详情`)],-1),u(`div`,I,[u(`div`,ve,[z.value?(i(),e(`div`,ye,[r(d,{size:24},{default:l(()=>[r(t(ae))]),_:1}),a[5]||=u(`strong`,null,`地图暂不可用`,-1),u(`span`,null,g(z.value),1)])):!B.value?.schools.length&&!R.value?(i(),e(`div`,be,[r(d,{size:24},{default:l(()=>[r(t(y))]),_:1}),a[6]||=u(`strong`,null,`暂无地图点位`,-1),a[7]||=u(`span`,null,`请先在「高校坐标库」维护经纬度。`,-1)])):p((i(),e(`div`,xe,[u(`div`,{ref_key:`mapContainerRef`,ref:W,class:`radar-map-container`},null,512)])),[[_,R.value]])]),u(`aside`,Se,[u(`div`,Ce,[u(`h3`,null,g(V.value?.name||`高校详情`),1),V.value?(i(),e(`span`,we,[r(d,null,{default:l(()=>[r(t(v))]),_:1}),s(` `+g(V.value.teachers_count)+` 位 `,1)])):o(``,!0)]),u(`div`,Te,[V.value?(i(),e(f,{key:0},[V.value.teachers.length?o(``,!0):(i(),e(`div`,Ee,[r(d,{size:20},{default:l(()=>[r(t(v))]),_:1}),a[8]||=u(`strong`,null,`暂无关联老师`,-1),a[9]||=u(`span`,null,`该校已在地图上展示,可在老师库中关联高校后在此查看老师列表。`,-1)])),(i(!0),e(f,null,m(V.value.teachers,n=>(i(),e(`div`,{key:n.id,class:`radar-teacher-card`},[u(`span`,De,[r(d,null,{default:l(()=>[r(t(v))]),_:1})]),u(`span`,null,[u(`button`,{type:`button`,class:`radar-teacher-name`,onClick:e=>X(n.id)},g(n.name),9,L),u(`em`,null,g(Be(n.research_direction,16)),1),u(`i`,Oe,g(Ve(n)),1)]),r(h,{size:`small`,plain:``,onClick:e=>X(n.id)},{default:l(()=>[...a[10]||=[s(`详情`,-1)]]),_:1},8,[`onClick`])]))),128))],64)):(i(),e(f,{key:1},[u(`div`,ke,[r(d,{size:20},{default:l(()=>[r(t(oe))]),_:1}),a[11]||=u(`strong`,null,`选择高校点位`,-1),a[12]||=u(`span`,null,`点击地图上的高校圆点,右侧会显示该校信息及关联老师列表。`,-1)]),J.value?(i(),e(`div`,Ae,[a[13]||=u(`span`,null,`当前视图点位`,-1),u(`strong`,null,g(J.value.visible_points),1),a[14]||=u(`span`,null,`最高星级老师`,-1),u(`strong`,null,g(J.value.max_star)+` 星`,1)])):o(``,!0)],64))])])])]),u(`div`,je,[u(`section`,Me,[a[16]||=u(`h2`,null,`数据质量`,-1),u(`div`,Ne,[(i(!0),e(f,null,m(Re.value,t=>(i(),e(`div`,{key:t.label,class:`radar-school-row`},[u(`span`,null,[s(g(t.label),1),u(`em`,null,g(t.detail),1)])]))),128))])]),u(`section`,Pe,[a[17]||=u(`h2`,null,`研究方向分布`,-1),u(`div`,Fe,[(i(!0),e(f,null,m(Y.value,t=>(i(),e(`div`,{key:t.label,class:`radar-field-row`},[u(`span`,null,[s(g(t.label)+` `,1),u(`em`,null,g(t.count)+` 位老师`,1),u(`div`,Ie,[u(`i`,{style:ee({width:`${Math.round(t.percent/ze.value*100)}%`})},null,4)])]),u(`strong`,null,g(t.percent)+`%`,1)]))),128)),Y.value.length?o(``,!0):(i(),e(`p`,Le,`暂无研究方向统计数据`))])])]),r(ue,{modelValue:H.value,"onUpdate:modelValue":a[0]||=e=>H.value=e,"teacher-id":U.value,readonly:``,onSaved:Z},null,8,[`modelValue`,`teacher-id`])])),[[_,b.value]])}}}),[[`__scopeId`,`data-v-23c6e84c`]]);export{R as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,I as a,Qt as ee,S as o,T as s,X as te,Y as c,at as l,b as u,ht as d,m as f,ot as p,q as m,rt as h,tn as g,y as _,z as ne}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{C as v,S as re,_ as y,b as ie,s as b,u as ae,x as oe}from"./index-CPrkFf57.js";import{n as se,t as ce}from"./usePageLoad-B1L6ImD-.js";import{l as le}from"./assets-DlFfPb4n.js";import{t as ue}from"./TeacherDetailDialog-BwE7UVMD.js";import{n as de}from"./teacherStar-CbiOJu8v.js";import{a as fe,c as pe,l as me,m as he,n as x,o as ge,r as _e,s as S,u as C}from"./tiandituMap-BWmh1toR.js";/* empty css */var w={class:`dashboard-page executive-dashboard`},T={class:`page-head`},E={key:0,class:`radar-top-grid`},D={class:`radar-kpi`},O={class:`kpi-icon`},k={class:`radar-kpi`},A={class:`kpi-icon`},j={class:`radar-kpi`},M={class:`kpi-icon`},N={class:`radar-kpi`},P={class:`kpi-icon`},F={class:`radar-map-card`},I={class:`radar-main`},ve={class:`radar-map-container-wrap`},ye={key:0,class:`radar-map-placeholder`},be={key:1,class:`radar-map-placeholder`},xe={key:2,class:`radar-map-stage`},Se={class:`radar-side`},Ce={class:`radar-side-head`},we={key:0,class:`radar-side-count`},Te={class:`radar-side-body`},Ee={key:0,class:`radar-empty-panel`},De={class:`radar-teacher-avatar`},L=[`onClick`],Oe={class:`stars`},ke={class:`radar-empty-panel`},Ae={key:0,class:`radar-view-summary`},je={class:`radar-bottom-grid`},Me={class:`radar-info-card`},Ne={class:`radar-school-list`},Pe={class:`radar-info-card`},Fe={class:`radar-field-list`},Ie={class:`radar-field-bar`},Le={key:0,class:`empty-hint`},R=b(n({__name:`index`,setup(n){let b=d(!1),R=d(!1),z=d(``),B=d(null),V=d(null),H=d(!1),U=d(null),W=d(null),G=null,K=null,q=[],J=_(()=>B.value?.summary),Re=_(()=>B.value?.quality||[]),Y=_(()=>B.value?.research_fields||[]),ze=_(()=>Math.max(...Y.value.map(e=>e.percent),1));function Be(e,t){return e?e.length>t?`${e.slice(0,t)}…`:e:``}function Ve(e){return de(e.star_level_item?.value,e.star_level_item?.label)}function X(e){U.value=e,H.value=!0}function He(e){V.value=e;for(let t of q)t.overlay.setActive?.(t.school.id===e.id)}async function Z(){b.value=!0;try{B.value=await le(),V.value&&=B.value.schools.find(e=>e.id===V.value?.id)||null,await a(),await Q()}finally{b.value=!1}}async function Q(){if(!W.value)return;if(z.value=``,!me()){z.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}let e=B.value?.schools||[];if(!e.length){$();return}R.value=!0;try{let t=await C();$();let n=W.value;n.innerHTML=``,G=pe(t,n),ge(G),fe(G,t),q=[];for(let n of e){let e=S(t,{name:n.name,longitude:n.longitude,latitude:n.latitude},V.value?.id===n.id);e.addEventListener(`click`,()=>He(n)),G.addOverLay(e),q.push({school:n,overlay:e})}x(G),K=_e(G,t),he(G);let r=()=>{G&&x(G)};G.addEventListener?.(`load`,r),window.setTimeout(r,300),window.setTimeout(r,800)}catch(e){let t=e instanceof Error?e.message:`地图初始化失败`;z.value=t.includes(`脚本`)||t.includes(`SDK`)?`${t}。若 Key 已配置域名白名单,请使用 https://slake.ali251.langye.net 访问(本地开发可在 hosts 绑定该域名后访问 http://slake.ali251.langye.net:5173)`:t,$()}finally{R.value=!1}}function $(){K?.(),K=null,G&&(G.clearOverLays?.(),G.destroy?.()),q=[],G=null}return h(()=>B.value?.schools.length,()=>{B.value&&!b.value&&a(()=>Q())}),ce(Z),ne($),(n,a)=>{let d=c(`el-icon`),h=c(`el-button`),_=te(`loading`);return p((i(),e(`div`,w,[u(`div`,T,[r(se,{variant:`radar`})]),J.value?(i(),e(`div`,E,[u(`div`,D,[u(`span`,O,[r(d,null,{default:l(()=>[r(t(ie))]),_:1})]),a[1]||=u(`span`,null,[s(`已覆盖高校`),u(`em`,null,`已配置经纬度的高校`)],-1),u(`strong`,null,g(J.value.covered_schools),1)]),u(`div`,k,[u(`span`,A,[r(d,null,{default:l(()=>[r(t(v))]),_:1})]),a[2]||=u(`span`,null,[s(`关联老师`),u(`em`,null,`地图点位老师总数`)],-1),u(`strong`,null,g(J.value.map_teachers),1)]),u(`div`,j,[u(`span`,M,[r(d,null,{default:l(()=>[r(t(re))]),_:1})]),a[3]||=u(`span`,null,[s(`五星老师`),u(`em`,null,`高价值合作对象`)],-1),u(`strong`,null,g(J.value.five_star_teachers),1)]),u(`div`,N,[u(`span`,P,[r(d,null,{default:l(()=>[r(t(y))]),_:1})]),a[4]||=u(`span`,null,[s(`待补坐标`),u(`em`,null,`高校坐标待完善`)],-1),u(`strong`,null,g(J.value.pending_coords),1)])])):o(``,!0),u(`section`,F,[a[15]||=u(`div`,{class:`radar-map-toolbar`},[u(`h2`,null,`高校分布`),u(`span`,{class:`toolbar-hint`},`以苏州为中心展示,点击圆点或学校名称查看高校详情`)],-1),u(`div`,I,[u(`div`,ve,[z.value?(i(),e(`div`,ye,[r(d,{size:24},{default:l(()=>[r(t(ae))]),_:1}),a[5]||=u(`strong`,null,`地图暂不可用`,-1),u(`span`,null,g(z.value),1)])):!B.value?.schools.length&&!R.value?(i(),e(`div`,be,[r(d,{size:24},{default:l(()=>[r(t(y))]),_:1}),a[6]||=u(`strong`,null,`暂无地图点位`,-1),a[7]||=u(`span`,null,`请先在「高校坐标库」维护经纬度。`,-1)])):p((i(),e(`div`,xe,[u(`div`,{ref_key:`mapContainerRef`,ref:W,class:`radar-map-container`},null,512)])),[[_,R.value]])]),u(`aside`,Se,[u(`div`,Ce,[u(`h3`,null,g(V.value?.name||`高校详情`),1),V.value?(i(),e(`span`,we,[r(d,null,{default:l(()=>[r(t(v))]),_:1}),s(` `+g(V.value.teachers_count)+` 位 `,1)])):o(``,!0)]),u(`div`,Te,[V.value?(i(),e(f,{key:0},[V.value.teachers.length?o(``,!0):(i(),e(`div`,Ee,[r(d,{size:20},{default:l(()=>[r(t(v))]),_:1}),a[8]||=u(`strong`,null,`暂无关联老师`,-1),a[9]||=u(`span`,null,`该校已在地图上展示,可在老师库中关联高校后在此查看老师列表。`,-1)])),(i(!0),e(f,null,m(V.value.teachers,n=>(i(),e(`div`,{key:n.id,class:`radar-teacher-card`},[u(`span`,De,[r(d,null,{default:l(()=>[r(t(v))]),_:1})]),u(`span`,null,[u(`button`,{type:`button`,class:`radar-teacher-name`,onClick:e=>X(n.id)},g(n.name),9,L),u(`em`,null,g(Be(n.research_direction,16)),1),u(`i`,Oe,g(Ve(n)),1)]),r(h,{size:`small`,plain:``,onClick:e=>X(n.id)},{default:l(()=>[...a[10]||=[s(`详情`,-1)]]),_:1},8,[`onClick`])]))),128))],64)):(i(),e(f,{key:1},[u(`div`,ke,[r(d,{size:20},{default:l(()=>[r(t(oe))]),_:1}),a[11]||=u(`strong`,null,`选择高校点位`,-1),a[12]||=u(`span`,null,`点击地图上的高校圆点,右侧会显示该校信息及关联老师列表。`,-1)]),J.value?(i(),e(`div`,Ae,[a[13]||=u(`span`,null,`当前视图点位`,-1),u(`strong`,null,g(J.value.visible_points),1),a[14]||=u(`span`,null,`最高星级老师`,-1),u(`strong`,null,g(J.value.max_star)+` 星`,1)])):o(``,!0)],64))])])])]),u(`div`,je,[u(`section`,Me,[a[16]||=u(`h2`,null,`数据质量`,-1),u(`div`,Ne,[(i(!0),e(f,null,m(Re.value,t=>(i(),e(`div`,{key:t.label,class:`radar-school-row`},[u(`span`,null,[s(g(t.label),1),u(`em`,null,g(t.detail),1)])]))),128))])]),u(`section`,Pe,[a[17]||=u(`h2`,null,`研究方向分布`,-1),u(`div`,Fe,[(i(!0),e(f,null,m(Y.value,t=>(i(),e(`div`,{key:t.label,class:`radar-field-row`},[u(`span`,null,[s(g(t.label)+` `,1),u(`em`,null,g(t.count)+` 位老师`,1),u(`div`,Ie,[u(`i`,{style:ee({width:`${Math.round(t.percent/ze.value*100)}%`})},null,4)])]),u(`strong`,null,g(t.percent)+`%`,1)]))),128)),Y.value.length?o(``,!0):(i(),e(`p`,Le,`暂无研究方向统计数据`))])])]),r(ue,{modelValue:H.value,"onUpdate:modelValue":a[0]||=e=>H.value=e,"teacher-id":U.value,readonly:``,onSaved:Z},null,8,[`modelValue`,`teacher-id`])])),[[_,b.value]])}}}),[[`__scopeId`,`data-v-23c6e84c`]]);export{R as default}; \ No newline at end of file diff --git a/public/admin/assets/menus-BEgUBQhC.js b/public/admin/assets/menus-C1RorO0e.js similarity index 81% rename from public/admin/assets/menus-BEgUBQhC.js rename to public/admin/assets/menus-C1RorO0e.js index 0c14c4a..9cd8ec8 100644 --- a/public/admin/assets/menus-BEgUBQhC.js +++ b/public/admin/assets/menus-C1RorO0e.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(){let{data:t}=await e.get(`/admin/v1/menus`);return t.data}async function n(t){let{data:n}=await e.post(`/admin/v1/menus`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/menus/${t}`,n);return r}async function i(t){let{data:n}=await e.delete(`/admin/v1/menus/${t}`);return n}export{r as i,i as n,t as r,n as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(){let{data:t}=await e.get(`/admin/v1/menus`);return t.data}async function n(t){let{data:n}=await e.post(`/admin/v1/menus`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/menus/${t}`,n);return r}async function i(t){let{data:n}=await e.delete(`/admin/v1/menus/${t}`);return n}export{r as i,i as n,t as r,n as t}; \ No newline at end of file diff --git a/public/admin/assets/menus-DJ1r7fmI.js b/public/admin/assets/menus-c1bak3RD.js similarity index 97% rename from public/admin/assets/menus-DJ1r7fmI.js rename to public/admin/assets/menus-c1bak3RD.js index 17ab7e9..b46265d 100644 --- a/public/admin/assets/menus-DJ1r7fmI.js +++ b/public/admin/assets/menus-c1bak3RD.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,ht as l,m as u,ot as d,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g}from"./index-DHoSHxJa.js";import{n as _,t as v}from"./usePageLoad-C9PEZ_Tm.js";import{i as y,n as b,r as x,t as S}from"./menus-BEgUBQhC.js";var C={class:`list-page`},w={class:`page-header`},T={class:`page-header-actions`},E={class:`table-row-actions`},D=t({__name:`index`,setup(t){let D=l(!1),O=l([]),k=l(!1),A=l({id:null,parent_id:null,path:``,name:``,title:``,component:``,icon:``,sort:0,visible:1,keep_alive:0,permission_code:``,status:1}),j=l([]);function M(e){let t=[{label:`根节点`,value:null}],n=(e,r)=>{for(let i of e)t.push({label:`${r}${i.title} (#${i.id})`,value:i.id}),i.children?.length&&n(i.children,r+` `)};return n(e,``),t}async function N(){D.value=!0;try{O.value=await x(),j.value=M(O.value)}finally{D.value=!1}}function P(e=null){A.value={id:null,parent_id:e,path:``,name:``,title:``,component:``,icon:``,sort:0,visible:1,keep_alive:0,permission_code:``,status:1},k.value=!0}function F(e){A.value={id:e.id,parent_id:e.parent_id??null,path:e.path,name:e.name,title:e.title,component:e.component||``,icon:e.icon||``,sort:e.sort,visible:e.visible,keep_alive:e.keep_alive,permission_code:e.permission_code||``,status:e.status??1},k.value=!0}async function I(){let e={parent_id:A.value.parent_id,path:A.value.path,name:A.value.name,title:A.value.title,component:A.value.component||null,icon:A.value.icon||null,sort:A.value.sort,visible:A.value.visible,keep_alive:A.value.keep_alive,permission_code:A.value.permission_code||null,status:A.value.status};A.value.id?await y(A.value.id,e):await S(e),g.success(`已保存`),k.value=!1,await N()}async function L(e){await h.confirm(`确定删除菜单「${e.title}」?`,`提示`,{type:`warning`}),await b(e.id),g.success(`已删除`),await N()}return v(N),(t,l)=>{let h=o(`el-button`),g=o(`el-table-column`),v=o(`el-table`),y=o(`el-card`),b=o(`el-option`),x=o(`el-select`),S=o(`el-form-item`),M=o(`el-input`),R=o(`el-input-number`),z=o(`el-switch`),B=o(`el-form`),V=o(`el-dialog`),H=a(`loading`);return r(),e(u,null,[c(`div`,C,[c(`div`,w,[n(_),c(`div`,T,[n(h,{onClick:N},{default:s(()=>[...l[14]||=[i(`刷新`,-1)]]),_:1}),n(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:l[0]||=e=>P(null)},{default:s(()=>[...l[15]||=[i(`新增根菜单`,-1)]]),_:1})])]),d((r(),m(y,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(v,{data:O.value,"row-key":`id`,"default-expand-all":``,"tree-props":{children:`children`}},{default:s(()=>[n(g,{prop:`title`,label:`标题`,"min-width":`160`}),n(g,{prop:`path`,label:`Path`,width:`180`}),n(g,{prop:`name`,label:`路由 name`,width:`140`}),n(g,{prop:`component`,label:`组件`,"min-width":`180`,"show-overflow-tooltip":``}),n(g,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),n(g,{label:`显示`,width:`80`,align:`center`},{default:s(({row:e})=>[i(p(e.visible?`是`:`否`),1)]),_:1}),n(g,{label:`操作`,width:`240`,fixed:`right`},{default:s(({row:e})=>[c(`div`,E,[n(h,{class:`btn-action-primary`,onClick:t=>P(e.id)},{default:s(()=>[...l[16]||=[i(`子菜单`,-1)]]),_:1},8,[`onClick`]),n(h,{class:`btn-action-primary`,onClick:t=>F(e)},{default:s(()=>[...l[17]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(h,{class:`btn-action-brand`,onClick:t=>L(e)},{default:s(()=>[...l[18]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])]),_:1})),[[H,D.value]])]),n(V,{modelValue:k.value,"onUpdate:modelValue":l[13]||=e=>k.value=e,title:A.value.id?`编辑菜单`:`新增菜单`,width:`560px`},{footer:s(()=>[n(h,{onClick:l[12]||=e=>k.value=!1},{default:s(()=>[...l[19]||=[i(`取消`,-1)]]),_:1}),n(h,{type:`primary`,onClick:I},{default:s(()=>[...l[20]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(B,{"label-width":`110px`},{default:s(()=>[n(S,{label:`父级`},{default:s(()=>[n(x,{modelValue:A.value.parent_id,"onUpdate:modelValue":l[1]||=e=>A.value.parent_id=e,clearable:``,filterable:``,placeholder:`根`,style:{width:`100%`}},{default:s(()=>[(r(!0),e(u,null,f(j.value,e=>(r(),m(b,{key:String(e.value)+e.label,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),n(S,{label:`Path`},{default:s(()=>[n(M,{modelValue:A.value.path,"onUpdate:modelValue":l[2]||=e=>A.value.path=e,placeholder:`如 /system/users`},null,8,[`modelValue`])]),_:1}),n(S,{label:`路由 name`},{default:s(()=>[n(M,{modelValue:A.value.name,"onUpdate:modelValue":l[3]||=e=>A.value.name=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`标题`},{default:s(()=>[n(M,{modelValue:A.value.title,"onUpdate:modelValue":l[4]||=e=>A.value.title=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`组件`},{default:s(()=>[n(M,{modelValue:A.value.component,"onUpdate:modelValue":l[5]||=e=>A.value.component=e,placeholder:`如 system/users/index`},null,8,[`modelValue`])]),_:1}),n(S,{label:`图标`},{default:s(()=>[n(M,{modelValue:A.value.icon,"onUpdate:modelValue":l[6]||=e=>A.value.icon=e,placeholder:`Element Plus 图标名`},null,8,[`modelValue`])]),_:1}),n(S,{label:`权限码`},{default:s(()=>[n(M,{modelValue:A.value.permission_code,"onUpdate:modelValue":l[7]||=e=>A.value.permission_code=e,placeholder:`可选,预留与后期接口权限对齐;当前不校验`},null,8,[`modelValue`])]),_:1}),n(S,{label:`排序`},{default:s(()=>[n(R,{modelValue:A.value.sort,"onUpdate:modelValue":l[8]||=e=>A.value.sort=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`侧栏显示`},{default:s(()=>[n(z,{modelValue:A.value.visible,"onUpdate:modelValue":l[9]||=e=>A.value.visible=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),n(S,{label:`KeepAlive`},{default:s(()=>[n(z,{modelValue:A.value.keep_alive,"onUpdate:modelValue":l[10]||=e=>A.value.keep_alive=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),n(S,{label:`状态`},{default:s(()=>[n(z,{modelValue:A.value.status,"onUpdate:modelValue":l[11]||=e=>A.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{D as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,T as i,X as a,Y as o,at as s,b as c,ht as l,m as u,ot as d,q as f,tn as p,x as m}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as h,l as g}from"./index-CPrkFf57.js";import{n as _,t as v}from"./usePageLoad-B1L6ImD-.js";import{i as y,n as b,r as x,t as S}from"./menus-C1RorO0e.js";var C={class:`list-page`},w={class:`page-header`},T={class:`page-header-actions`},E={class:`table-row-actions`},D=t({__name:`index`,setup(t){let D=l(!1),O=l([]),k=l(!1),A=l({id:null,parent_id:null,path:``,name:``,title:``,component:``,icon:``,sort:0,visible:1,keep_alive:0,permission_code:``,status:1}),j=l([]);function M(e){let t=[{label:`根节点`,value:null}],n=(e,r)=>{for(let i of e)t.push({label:`${r}${i.title} (#${i.id})`,value:i.id}),i.children?.length&&n(i.children,r+` `)};return n(e,``),t}async function N(){D.value=!0;try{O.value=await x(),j.value=M(O.value)}finally{D.value=!1}}function P(e=null){A.value={id:null,parent_id:e,path:``,name:``,title:``,component:``,icon:``,sort:0,visible:1,keep_alive:0,permission_code:``,status:1},k.value=!0}function F(e){A.value={id:e.id,parent_id:e.parent_id??null,path:e.path,name:e.name,title:e.title,component:e.component||``,icon:e.icon||``,sort:e.sort,visible:e.visible,keep_alive:e.keep_alive,permission_code:e.permission_code||``,status:e.status??1},k.value=!0}async function I(){let e={parent_id:A.value.parent_id,path:A.value.path,name:A.value.name,title:A.value.title,component:A.value.component||null,icon:A.value.icon||null,sort:A.value.sort,visible:A.value.visible,keep_alive:A.value.keep_alive,permission_code:A.value.permission_code||null,status:A.value.status};A.value.id?await y(A.value.id,e):await S(e),g.success(`已保存`),k.value=!1,await N()}async function L(e){await h.confirm(`确定删除菜单「${e.title}」?`,`提示`,{type:`warning`}),await b(e.id),g.success(`已删除`),await N()}return v(N),(t,l)=>{let h=o(`el-button`),g=o(`el-table-column`),v=o(`el-table`),y=o(`el-card`),b=o(`el-option`),x=o(`el-select`),S=o(`el-form-item`),M=o(`el-input`),R=o(`el-input-number`),z=o(`el-switch`),B=o(`el-form`),V=o(`el-dialog`),H=a(`loading`);return r(),e(u,null,[c(`div`,C,[c(`div`,w,[n(_),c(`div`,T,[n(h,{onClick:N},{default:s(()=>[...l[14]||=[i(`刷新`,-1)]]),_:1}),n(h,{type:`primary`,size:`small`,class:`btn-create`,onClick:l[0]||=e=>P(null)},{default:s(()=>[...l[15]||=[i(`新增根菜单`,-1)]]),_:1})])]),d((r(),m(y,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(v,{data:O.value,"row-key":`id`,"default-expand-all":``,"tree-props":{children:`children`}},{default:s(()=>[n(g,{prop:`title`,label:`标题`,"min-width":`160`}),n(g,{prop:`path`,label:`Path`,width:`180`}),n(g,{prop:`name`,label:`路由 name`,width:`140`}),n(g,{prop:`component`,label:`组件`,"min-width":`180`,"show-overflow-tooltip":``}),n(g,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),n(g,{label:`显示`,width:`80`,align:`center`},{default:s(({row:e})=>[i(p(e.visible?`是`:`否`),1)]),_:1}),n(g,{label:`操作`,width:`240`,fixed:`right`},{default:s(({row:e})=>[c(`div`,E,[n(h,{class:`btn-action-primary`,onClick:t=>P(e.id)},{default:s(()=>[...l[16]||=[i(`子菜单`,-1)]]),_:1},8,[`onClick`]),n(h,{class:`btn-action-primary`,onClick:t=>F(e)},{default:s(()=>[...l[17]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),n(h,{class:`btn-action-brand`,onClick:t=>L(e)},{default:s(()=>[...l[18]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])]),_:1})),[[H,D.value]])]),n(V,{modelValue:k.value,"onUpdate:modelValue":l[13]||=e=>k.value=e,title:A.value.id?`编辑菜单`:`新增菜单`,width:`560px`},{footer:s(()=>[n(h,{onClick:l[12]||=e=>k.value=!1},{default:s(()=>[...l[19]||=[i(`取消`,-1)]]),_:1}),n(h,{type:`primary`,onClick:I},{default:s(()=>[...l[20]||=[i(`保存`,-1)]]),_:1})]),default:s(()=>[n(B,{"label-width":`110px`},{default:s(()=>[n(S,{label:`父级`},{default:s(()=>[n(x,{modelValue:A.value.parent_id,"onUpdate:modelValue":l[1]||=e=>A.value.parent_id=e,clearable:``,filterable:``,placeholder:`根`,style:{width:`100%`}},{default:s(()=>[(r(!0),e(u,null,f(j.value,e=>(r(),m(b,{key:String(e.value)+e.label,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),n(S,{label:`Path`},{default:s(()=>[n(M,{modelValue:A.value.path,"onUpdate:modelValue":l[2]||=e=>A.value.path=e,placeholder:`如 /system/users`},null,8,[`modelValue`])]),_:1}),n(S,{label:`路由 name`},{default:s(()=>[n(M,{modelValue:A.value.name,"onUpdate:modelValue":l[3]||=e=>A.value.name=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`标题`},{default:s(()=>[n(M,{modelValue:A.value.title,"onUpdate:modelValue":l[4]||=e=>A.value.title=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`组件`},{default:s(()=>[n(M,{modelValue:A.value.component,"onUpdate:modelValue":l[5]||=e=>A.value.component=e,placeholder:`如 system/users/index`},null,8,[`modelValue`])]),_:1}),n(S,{label:`图标`},{default:s(()=>[n(M,{modelValue:A.value.icon,"onUpdate:modelValue":l[6]||=e=>A.value.icon=e,placeholder:`Element Plus 图标名`},null,8,[`modelValue`])]),_:1}),n(S,{label:`权限码`},{default:s(()=>[n(M,{modelValue:A.value.permission_code,"onUpdate:modelValue":l[7]||=e=>A.value.permission_code=e,placeholder:`可选,预留与后期接口权限对齐;当前不校验`},null,8,[`modelValue`])]),_:1}),n(S,{label:`排序`},{default:s(()=>[n(R,{modelValue:A.value.sort,"onUpdate:modelValue":l[8]||=e=>A.value.sort=e},null,8,[`modelValue`])]),_:1}),n(S,{label:`侧栏显示`},{default:s(()=>[n(z,{modelValue:A.value.visible,"onUpdate:modelValue":l[9]||=e=>A.value.visible=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),n(S,{label:`KeepAlive`},{default:s(()=>[n(z,{modelValue:A.value.keep_alive,"onUpdate:modelValue":l[10]||=e=>A.value.keep_alive=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),n(S,{label:`状态`},{default:s(()=>[n(z,{modelValue:A.value.status,"onUpdate:modelValue":l[11]||=e=>A.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{D as default}; \ No newline at end of file diff --git a/public/admin/assets/news-CkDCcGbT.js b/public/admin/assets/news-CkDCcGbT.js new file mode 100644 index 0000000..531e959 --- /dev/null +++ b/public/admin/assets/news-CkDCcGbT.js @@ -0,0 +1 @@ +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,ht as d,m as f,ot as ne,q as p,rt as m,tn as h,x as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as _,c as v,l as y,s as b}from"./index-CPrkFf57.js";import{n as re,t as x}from"./usePageLoad-B1L6ImD-.js";import{t as ie}from"./RichTextEditor-Rtwkj953.js";import{i as S}from"./upload-qqZxNm7U.js";import{a as C,i as w,n as T,o as E,r as D,t as O}from"./news-CsIxVVGt.js";import{s as k}from"./admin-list-dnDAubDa.js";import{a as A}from"./dict-D-xskQUn.js";var ae={class:`list-page`},oe={class:`page-header`},se={class:`list-filter-bar`},ce=[`href`],le={key:1,class:`text-mute`},ue={key:1,class:`text-mute`},de={class:`table-row-actions`},fe={class:`list-pager`},pe={class:`upload-row`},me={key:0,class:`thumb-preview`},he=[`src`],ge={class:`dialog-footer-inner`},j=b(n({__name:`index`,setup(n){let b=_(),j=d(null),M=d(!1),N=d(!1),P=d(!1),F=d([]),I=d([]),L=d({current_page:1,per_page:20,total:0}),R=d(1),z=d(``),B=d(``),V=d(``),H=d(``),U=d([]),W=d(!1),G=d(null),K=d({title:``,category_dict_item_id:void 0,source:``,cover_url:``,published_at:``,content_html:``});function _e(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}.${n(t.getMonth()+1)}.${n(t.getDate())}`}async function q(){try{U.value=(await A(`news_category`)).items??[]}catch{y.warning(`资讯分类字典加载失败,请执行 NewsDictionarySeeder 或在字典中维护 news_category`)}}async function J(){M.value=!0;try{let e={page:R.value,page_size:L.value.per_page};z.value&&(e.keyword=z.value),B.value!==``&&(e.category_dict_item_id=B.value),j.value&&(e.crawl_job_id=j.value),V.value!==``&&(e.status=V.value),H.value!==``&&(e.has_cover=H.value);let t=await C(e);I.value=t.items??[],L.value=t.meta??{current_page:1,per_page:20,total:0}}finally{M.value=!1}}function Y(){R.value=1,J()}function ve(){z.value=``,B.value=``,V.value=``,H.value=``,R.value=1,J()}function ye(){G.value=null,K.value={title:``,category_dict_item_id:U.value[0]?.id,source:``,cover_url:``,published_at:new Date().toISOString().slice(0,10),content_html:``},W.value=!0}async function be(e){G.value=e;let t=await w(e.id);K.value={title:t.title,category_dict_item_id:t.category_dict_item_id??void 0,source:t.source||``,cover_url:t.cover_url||``,published_at:t.published_at?t.published_at.slice(0,10):``,content_html:t.content_html||``},W.value=!0}function X(){return K.value.title?.trim()?K.value.category_dict_item_id?K.value.published_at?K.value.content_html?.replace(/<[^>]+>/g,``).trim()?!0:(y.warning(`请填写资讯正文`),!1):(y.warning(`请填写发布时间`),!1):(y.warning(`请选择资讯分类`),!1):(y.warning(`请填写资讯标题`),!1)}async function Z(e){if(!X())return;let t={title:K.value.title.trim(),category_dict_item_id:K.value.category_dict_item_id,source:K.value.source||null,cover_url:K.value.cover_url||null,published_at:K.value.published_at,content_html:K.value.content_html||null,status:e};N.value=!0;try{G.value?await E(G.value.id,t):await T(t),y.success(e===1?`已保存资讯`:`已暂存草稿`),W.value=!1,await J()}finally{N.value=!1}}async function xe(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await S(n);K.value.cover_url=t.url,y.success(`封面上传成功`),e.onSuccess?.({})}catch{y.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}function Q(){K.value.cover_url=``}async function Se(e){await v.confirm(`确定删除资讯「${e.title}」?`,`提示`,{type:`warning`}),await D(e.id),y.success(`已删除`),await J()}function Ce(e){F.value=e}async function we(){let e=F.value.filter(e=>e.status===0);if(e.length===0){y.warning(`请勾选未发布的资讯`);return}await v.confirm(`确定发布已勾选的 ${e.length} 条资讯?`,`批量发布`,{type:`info`}),P.value=!0;try{let t=await O(e.map(e=>e.id)),n=t.skipped>0?`,跳过 ${t.skipped} 条`:``;y.success(`已发布 ${t.published} 条${n}`),F.value=[],await J()}finally{P.value=!1}}function Te(){j.value=null,R.value=1,J()}async function $(){let e=b.query.crawl_job_id;j.value=e&&Number(e)||null,await q(),await J()}return x($),m(()=>b.query.crawl_job_id,()=>{$()}),(n,d)=>{let m=c(`el-button`),_=c(`el-alert`),v=c(`el-input`),y=c(`el-option`),b=c(`el-select`),x=c(`el-table-column`),S=c(`el-image`),C=c(`el-table`),w=c(`el-pagination`),T=c(`el-card`),E=c(`el-form-item`),D=c(`el-col`),O=c(`el-date-picker`),A=c(`el-upload`),q=c(`el-row`),X=c(`el-form`),$=c(`el-dialog`),Ee=ee(`loading`);return i(),e(f,null,[u(`div`,ae,[u(`div`,oe,[r(re),r(m,{type:`primary`,size:`small`,class:`btn-create`,onClick:ye},{default:l(()=>[...d[14]||=[o(`新建资讯`,-1)]]),_:1})]),r(T,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[j.value?(i(),g(_,{key:0,type:`info`,closable:!1,"show-icon":``,class:`crawl-filter-tip`},{default:l(()=>[o(` 当前仅显示爬虫任务 #`+h(j.value)+` 已入库资讯 `,1),r(m,{link:``,type:`primary`,onClick:Te},{default:l(()=>[...d[15]||=[o(`查看全部`,-1)]]),_:1})]),_:1})):a(``,!0),u(`div`,se,[r(v,{modelValue:z.value,"onUpdate:modelValue":d[0]||=e=>z.value=e,placeholder:`搜索标题、来源…`,clearable:``,class:`filter-search`,onKeyup:te(Y,[`enter`])},null,8,[`modelValue`]),r(b,{modelValue:B.value,"onUpdate:modelValue":d[1]||=e=>B.value=e,clearable:``,placeholder:`资讯分类`,class:`filter-select`,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(U.value,e=>(i(),g(y,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(b,{modelValue:H.value,"onUpdate:modelValue":d[2]||=e=>H.value=e,clearable:``,placeholder:`封面状态`,class:`filter-select-wide`},{default:l(()=>[r(y,{label:`已上传封面`,value:1}),r(y,{label:`未上传封面`,value:0})]),_:1},8,[`modelValue`]),r(b,{modelValue:V.value,"onUpdate:modelValue":d[3]||=e=>V.value=e,clearable:``,placeholder:`资讯状态`,class:`filter-select`},{default:l(()=>[r(y,{label:`已发布`,value:1}),r(y,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(m,{type:`primary`,onClick:Y},{default:l(()=>[...d[16]||=[o(`搜索`,-1)]]),_:1}),r(m,{onClick:ve},{default:l(()=>[...d[17]||=[o(`重置`,-1)]]),_:1}),r(m,{type:`success`,loading:P.value,disabled:F.value.length===0,onClick:we},{default:l(()=>[o(` 批量发布`+h(F.value.length>0?`(${F.value.length})`:``),1)]),_:1},8,[`loading`,`disabled`])]),ne((i(),g(C,{data:I.value,"row-key":`id`,onSelectionChange:Ce},{default:l(()=>[r(x,{type:`selection`,width:`48`,selectable:e=>e.status===0},null,8,[`selectable`]),r(x,{prop:`title`,label:`资讯标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(x,{label:`资讯分类`,width:`110`},{default:l(({row:e})=>[o(h(e.category_item?.label??`—`),1)]),_:1}),r(x,{label:`发布时间`,width:`120`},{default:l(({row:e})=>[o(h(_e(e.published_at)),1)]),_:1}),r(x,{prop:`source`,label:`来源`,width:`120`,"show-overflow-tooltip":``}),r(x,{label:`链接`,width:`80`,align:`center`},{default:l(({row:t})=>[t.source_url?(i(),e(`a`,{key:0,href:t.source_url,target:`_blank`,rel:`noopener`},`查看`,8,ce)):(i(),e(`span`,le,`—`))]),_:1}),r(x,{label:`封面图`,width:`100`,align:`center`},{default:l(({row:t})=>[t.cover_url?(i(),g(S,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ue,`—`))]),_:1}),r(x,{label:`资讯状态`,width:`90`,align:`center`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(k)(e.status)])},h(e.status===1?`已发布`:`未发布`),3)]),_:1}),r(x,{label:`操作`,width:`160`,fixed:`right`},{default:l(({row:e})=>[u(`div`,de,[r(m,{class:`btn-action-primary`,onClick:t=>be(e)},{default:l(()=>[...d[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(m,{class:`btn-action-brand`,onClick:t=>Se(e)},{default:l(()=>[...d[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Ee,M.value]]),u(`div`,fe,[r(w,{"current-page":R.value,"onUpdate:currentPage":d[4]||=e=>R.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:J},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r($,{modelValue:W.value,"onUpdate:modelValue":d[13]||=e=>W.value=e,title:G.value?`编辑资讯`:`新建资讯`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`news-dialog`},{footer:l(()=>[u(`div`,ge,[r(m,{onClick:d[10]||=e=>W.value=!1},{default:l(()=>[...d[22]||=[o(`取消`,-1)]]),_:1}),r(m,{loading:N.value,onClick:d[11]||=e=>Z(0)},{default:l(()=>[...d[23]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(m,{type:`primary`,loading:N.value,onClick:d[12]||=e=>Z(1)},{default:l(()=>[...d[24]||=[o(`保存资讯`,-1)]]),_:1},8,[`loading`])])]),default:l(()=>[r(X,{"label-position":`top`,class:`news-form`},{default:l(()=>[r(q,{gutter:16},{default:l(()=>[r(D,{span:12},{default:l(()=>[r(E,{label:`资讯标题`,required:``},{default:l(()=>[r(v,{modelValue:K.value.title,"onUpdate:modelValue":d[5]||=e=>K.value.title=e,placeholder:`请输入资讯标题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:l(()=>[r(E,{label:`资讯分类`,required:``},{default:l(()=>[r(b,{modelValue:K.value.category_dict_item_id,"onUpdate:modelValue":d[6]||=e=>K.value.category_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(U.value,e=>(i(),g(y,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:l(()=>[r(E,{label:`发布时间`,required:``},{default:l(()=>[r(O,{modelValue:K.value.published_at,"onUpdate:modelValue":d[7]||=e=>K.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:l(()=>[r(E,{label:`来源`},{default:l(()=>[r(v,{modelValue:K.value.source,"onUpdate:modelValue":d[8]||=e=>K.value.source=e,placeholder:`如:高校雷达网`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:l(()=>[r(E,{label:`封面图`},{default:l(()=>[u(`div`,pe,[r(A,{"show-file-list":!1,accept:`image/*`,"http-request":xe},{default:l(()=>[r(m,{type:`primary`,plain:``,size:`small`},{default:l(()=>[...d[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),K.value.cover_url?(i(),g(m,{key:0,size:`small`,onClick:Q},{default:l(()=>[...d[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),K.value.cover_url?(i(),e(`div`,me,[u(`img`,{src:K.value.cover_url,alt:`封面`},null,8,he)])):a(``,!0)]),_:1})]),_:1}),r(D,{span:24},{default:l(()=>[r(E,{label:`资讯正文`,required:``,class:`intro-form-item`},{default:l(()=>[r(ie,{modelValue:K.value.content_html,"onUpdate:modelValue":d[9]||=e=>K.value.content_html=e,scope:`news`,height:320},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-6d429015`]]);export{j as default}; \ No newline at end of file diff --git a/public/admin/assets/news-Dji71J9m.js b/public/admin/assets/news-CsIxVVGt.js similarity index 83% rename from public/admin/assets/news-Dji71J9m.js rename to public/admin/assets/news-CsIxVVGt.js index d4444b2..fb9f4bb 100644 --- a/public/admin/assets/news-Dji71J9m.js +++ b/public/admin/assets/news-CsIxVVGt.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/news`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/news/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/news`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/news/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/news/${t}`);return n}async function o(t,n){let{data:r}=await e.post(`/admin/v1/news/batch-publish`,{ids:t,published_at:n});return r.data}export{t as a,n as i,r as n,i as o,a as r,o as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/news`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/news/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/news`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/news/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/news/${t}`);return n}async function o(t,n){let{data:r}=await e.post(`/admin/v1/news/batch-publish`,{ids:t,published_at:n});return r.data}export{t as a,n as i,r as n,i as o,a as r,o as t}; \ No newline at end of file diff --git a/public/admin/assets/news-DCTf0UO8.js b/public/admin/assets/news-DCTf0UO8.js deleted file mode 100644 index 91ed797..0000000 --- a/public/admin/assets/news-DCTf0UO8.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as te,Y as s,at as c,b as l,d as ne,ht as u,m as d,ot as re,q as f,rt as p,tn as m,x as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as g,c as _,l as v,s as y}from"./index-DHoSHxJa.js";import{n as ie,t as b}from"./usePageLoad-C9PEZ_Tm.js";import{i as x,t as S}from"./RichTextEditor-B2PNXVgT.js";import{a as C,i as w,n as T,o as E,r as D,t as O}from"./news-Dji71J9m.js";import{s as k}from"./admin-list-DjncsyJC.js";import{a as A}from"./dict-D30aLydL.js";var ae={class:`list-page`},oe={class:`page-header`},se={class:`list-filter-bar`},ce=[`href`],le={key:1,class:`text-mute`},ue={key:1,class:`text-mute`},de={class:`table-row-actions`},fe={class:`list-pager`},pe={class:`upload-row`},me={key:0,class:`thumb-preview`},he=[`src`],ge={class:`dialog-footer-inner`},j=y(n({__name:`index`,setup(n){let y=g(),j=u(null),M=u(!1),N=u(!1),P=u(!1),F=u([]),I=u([]),L=u({current_page:1,per_page:20,total:0}),R=u(1),z=u(``),B=u(``),V=u(``),H=u(``),U=u([]),W=u(!1),G=u(null),K=u({title:``,category_dict_item_id:void 0,source:``,cover_url:``,published_at:``,content_html:``});function _e(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}.${n(t.getMonth()+1)}.${n(t.getDate())}`}async function q(){try{U.value=(await A(`news_category`)).items??[]}catch{v.warning(`资讯分类字典加载失败,请执行 NewsDictionarySeeder 或在字典中维护 news_category`)}}async function J(){M.value=!0;try{let e={page:R.value,page_size:L.value.per_page};z.value&&(e.keyword=z.value),B.value!==``&&(e.category_dict_item_id=B.value),j.value&&(e.crawl_job_id=j.value),V.value!==``&&(e.status=V.value),H.value!==``&&(e.has_cover=H.value);let t=await C(e);I.value=t.items??[],L.value=t.meta??{current_page:1,per_page:20,total:0}}finally{M.value=!1}}function Y(){R.value=1,J()}function ve(){z.value=``,B.value=``,V.value=``,H.value=``,R.value=1,J()}function ye(){G.value=null,K.value={title:``,category_dict_item_id:U.value[0]?.id,source:``,cover_url:``,published_at:new Date().toISOString().slice(0,10),content_html:``},W.value=!0}async function be(e){G.value=e;let t=await w(e.id);K.value={title:t.title,category_dict_item_id:t.category_dict_item_id??void 0,source:t.source||``,cover_url:t.cover_url||``,published_at:t.published_at?t.published_at.slice(0,10):``,content_html:t.content_html||``},W.value=!0}function X(){return K.value.title?.trim()?K.value.category_dict_item_id?K.value.published_at?K.value.content_html?.replace(/<[^>]+>/g,``).trim()?!0:(v.warning(`请填写资讯正文`),!1):(v.warning(`请填写发布时间`),!1):(v.warning(`请选择资讯分类`),!1):(v.warning(`请填写资讯标题`),!1)}async function Z(e){if(!X())return;let t={title:K.value.title.trim(),category_dict_item_id:K.value.category_dict_item_id,source:K.value.source||null,cover_url:K.value.cover_url||null,published_at:K.value.published_at,content_html:K.value.content_html||null,status:e};N.value=!0;try{G.value?await E(G.value.id,t):await T(t),v.success(e===1?`已保存资讯`:`已暂存草稿`),W.value=!1,await J()}finally{N.value=!1}}async function xe(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await x(n);K.value.cover_url=t.url,v.success(`封面上传成功`),e.onSuccess?.({})}catch{v.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}function Q(){K.value.cover_url=``}async function Se(e){await _.confirm(`确定删除资讯「${e.title}」?`,`提示`,{type:`warning`}),await D(e.id),v.success(`已删除`),await J()}function Ce(e){F.value=e}async function we(){let e=F.value.filter(e=>e.status===0);if(e.length===0){v.warning(`请勾选未发布的资讯`);return}await _.confirm(`确定发布已勾选的 ${e.length} 条资讯?`,`批量发布`,{type:`info`}),P.value=!0;try{let t=await O(e.map(e=>e.id)),n=t.skipped>0?`,跳过 ${t.skipped} 条`:``;v.success(`已发布 ${t.published} 条${n}`),F.value=[],await J()}finally{P.value=!1}}function Te(){j.value=null,R.value=1,J()}async function $(){let e=y.query.crawl_job_id;j.value=e&&Number(e)||null,await q(),await J()}return b($),p(()=>y.query.crawl_job_id,()=>{$()}),(n,u)=>{let p=s(`el-button`),g=s(`el-alert`),_=s(`el-input`),v=s(`el-option`),y=s(`el-select`),b=s(`el-table-column`),x=s(`el-image`),C=s(`el-table`),w=s(`el-pagination`),T=s(`el-card`),E=s(`el-form-item`),D=s(`el-col`),O=s(`el-date-picker`),A=s(`el-upload`),q=s(`el-row`),X=s(`el-form`),$=s(`el-dialog`),Ee=ee(`loading`);return i(),e(d,null,[l(`div`,ae,[l(`div`,oe,[r(ie),r(p,{type:`primary`,size:`small`,class:`btn-create`,onClick:ye},{default:c(()=>[...u[14]||=[o(`新建资讯`,-1)]]),_:1})]),r(T,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[j.value?(i(),h(g,{key:0,type:`info`,closable:!1,"show-icon":``,class:`crawl-filter-tip`},{default:c(()=>[o(` 当前仅显示爬虫任务 #`+m(j.value)+` 已入库资讯 `,1),r(p,{link:``,type:`primary`,onClick:Te},{default:c(()=>[...u[15]||=[o(`查看全部`,-1)]]),_:1})]),_:1})):a(``,!0),l(`div`,se,[r(_,{modelValue:z.value,"onUpdate:modelValue":u[0]||=e=>z.value=e,placeholder:`搜索标题、来源…`,clearable:``,class:`filter-search`,onKeyup:ne(Y,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:B.value,"onUpdate:modelValue":u[1]||=e=>B.value=e,clearable:``,placeholder:`资讯分类`,class:`filter-select`,filterable:``},{default:c(()=>[(i(!0),e(d,null,f(U.value,e=>(i(),h(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:H.value,"onUpdate:modelValue":u[2]||=e=>H.value=e,clearable:``,placeholder:`封面状态`,class:`filter-select-wide`},{default:c(()=>[r(v,{label:`已上传封面`,value:1}),r(v,{label:`未上传封面`,value:0})]),_:1},8,[`modelValue`]),r(y,{modelValue:V.value,"onUpdate:modelValue":u[3]||=e=>V.value=e,clearable:``,placeholder:`资讯状态`,class:`filter-select`},{default:c(()=>[r(v,{label:`已发布`,value:1}),r(v,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(p,{type:`primary`,onClick:Y},{default:c(()=>[...u[16]||=[o(`搜索`,-1)]]),_:1}),r(p,{onClick:ve},{default:c(()=>[...u[17]||=[o(`重置`,-1)]]),_:1}),r(p,{type:`success`,loading:P.value,disabled:F.value.length===0,onClick:we},{default:c(()=>[o(` 批量发布`+m(F.value.length>0?`(${F.value.length})`:``),1)]),_:1},8,[`loading`,`disabled`])]),re((i(),h(C,{data:I.value,"row-key":`id`,onSelectionChange:Ce},{default:c(()=>[r(b,{type:`selection`,width:`48`,selectable:e=>e.status===0},null,8,[`selectable`]),r(b,{prop:`title`,label:`资讯标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(b,{label:`资讯分类`,width:`110`},{default:c(({row:e})=>[o(m(e.category_item?.label??`—`),1)]),_:1}),r(b,{label:`发布时间`,width:`120`},{default:c(({row:e})=>[o(m(_e(e.published_at)),1)]),_:1}),r(b,{prop:`source`,label:`来源`,width:`120`,"show-overflow-tooltip":``}),r(b,{label:`链接`,width:`80`,align:`center`},{default:c(({row:t})=>[t.source_url?(i(),e(`a`,{key:0,href:t.source_url,target:`_blank`,rel:`noopener`},`查看`,8,ce)):(i(),e(`span`,le,`—`))]),_:1}),r(b,{label:`封面图`,width:`100`,align:`center`},{default:c(({row:t})=>[t.cover_url?(i(),h(x,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ue,`—`))]),_:1}),r(b,{label:`资讯状态`,width:`90`,align:`center`},{default:c(({row:e})=>[l(`span`,{class:te([`status-badge`,t(k)(e.status)])},m(e.status===1?`已发布`:`未发布`),3)]),_:1}),r(b,{label:`操作`,width:`160`,fixed:`right`},{default:c(({row:e})=>[l(`div`,de,[r(p,{class:`btn-action-primary`,onClick:t=>be(e)},{default:c(()=>[...u[18]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(p,{class:`btn-action-brand`,onClick:t=>Se(e)},{default:c(()=>[...u[19]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Ee,M.value]]),l(`div`,fe,[r(w,{"current-page":R.value,"onUpdate:currentPage":u[4]||=e=>R.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:J},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r($,{modelValue:W.value,"onUpdate:modelValue":u[13]||=e=>W.value=e,title:G.value?`编辑资讯`:`新建资讯`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`news-dialog`},{footer:c(()=>[l(`div`,ge,[r(p,{onClick:u[10]||=e=>W.value=!1},{default:c(()=>[...u[22]||=[o(`取消`,-1)]]),_:1}),r(p,{loading:N.value,onClick:u[11]||=e=>Z(0)},{default:c(()=>[...u[23]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(p,{type:`primary`,loading:N.value,onClick:u[12]||=e=>Z(1)},{default:c(()=>[...u[24]||=[o(`保存资讯`,-1)]]),_:1},8,[`loading`])])]),default:c(()=>[r(X,{"label-position":`top`,class:`news-form`},{default:c(()=>[r(q,{gutter:16},{default:c(()=>[r(D,{span:12},{default:c(()=>[r(E,{label:`资讯标题`,required:``},{default:c(()=>[r(_,{modelValue:K.value.title,"onUpdate:modelValue":u[5]||=e=>K.value.title=e,placeholder:`请输入资讯标题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:c(()=>[r(E,{label:`资讯分类`,required:``},{default:c(()=>[r(y,{modelValue:K.value.category_dict_item_id,"onUpdate:modelValue":u[6]||=e=>K.value.category_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(U.value,e=>(i(),h(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:c(()=>[r(E,{label:`发布时间`,required:``},{default:c(()=>[r(O,{modelValue:K.value.published_at,"onUpdate:modelValue":u[7]||=e=>K.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:c(()=>[r(E,{label:`来源`},{default:c(()=>[r(_,{modelValue:K.value.source,"onUpdate:modelValue":u[8]||=e=>K.value.source=e,placeholder:`如:高校雷达网`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:c(()=>[r(E,{label:`封面图`},{default:c(()=>[l(`div`,pe,[r(A,{"show-file-list":!1,accept:`image/*`,"http-request":xe},{default:c(()=>[r(p,{type:`primary`,plain:``,size:`small`},{default:c(()=>[...u[20]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),K.value.cover_url?(i(),h(p,{key:0,size:`small`,onClick:Q},{default:c(()=>[...u[21]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),K.value.cover_url?(i(),e(`div`,me,[l(`img`,{src:K.value.cover_url,alt:`封面`},null,8,he)])):a(``,!0)]),_:1})]),_:1}),r(D,{span:24},{default:c(()=>[r(E,{label:`资讯正文`,required:``,class:`intro-form-item`},{default:c(()=>[r(S,{modelValue:K.value.content_html,"onUpdate:modelValue":u[9]||=e=>K.value.content_html=e,scope:`news`,height:320},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-6d429015`]]);export{j as default}; \ No newline at end of file diff --git a/public/admin/assets/papers-BJUlKbT6.js b/public/admin/assets/papers-Bxe2o_F5.js similarity index 97% rename from public/admin/assets/papers-BJUlKbT6.js rename to public/admin/assets/papers-Bxe2o_F5.js index e299982..63ea8b4 100644 --- a/public/admin/assets/papers-BJUlKbT6.js +++ b/public/admin/assets/papers-Bxe2o_F5.js @@ -1 +1 @@ -import{C as e,D as t,E as n,G as r,P as i,S as a,T as o,X as s,Y as c,at as l,b as u,d,et as f,ht as p,m,ot as h,q as g,rt as _,tn as v,x as y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as b,c as x,l as S,s as C}from"./index-DHoSHxJa.js";import{n as w,t as T}from"./usePageLoad-C9PEZ_Tm.js";import{c as E,o as D,r as O,s as k,t as A}from"./assets-hAC2p2Vo.js";import{f as j}from"./teachers-DsTLUxF9.js";var M={key:0,class:`linked-block`},N={class:`linked-tags`},P={class:`picker-toolbar`},F={key:1,class:`text-mute`},I={key:1,class:`picker-pager`},L=C(t({__name:`PaperLinkTeachersDialog`,props:i({paperId:{},paperTitle:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:i([`saved`],[`update:modelValue`]),setup(t,{emit:i}){let b=f(t,`modelValue`),x=t,C=i,w=p(!1),T=p(!1),E=p([]),O=p(``),k=p(!1),L=p([]),R=p(1),z=p({current_page:1,per_page:10,total:0}),B=p([]),V=p(null);function H(e){return E.value.some(t=>t.id===e)}function ee(e){return!H(e.id)}async function U(){if(x.paperId){w.value=!0;try{E.value=(await D(x.paperId)).teachers||[],B.value=[],V.value?.clearSelection()}finally{w.value=!1}}}async function W(e=R.value){k.value=!0;try{let t=await j({page:e,page_size:z.value.per_page,keyword:O.value.trim()||void 0});L.value=t.items,z.value=t.meta,R.value=t.meta.current_page}finally{k.value=!1}}function G(){R.value=1,W(1)}function te(e){B.value=e.map(e=>e.id)}async function ne(){if(x.paperId){if(!B.value.length){S.warning(`请选择要关联的老师`);return}T.value=!0;try{await A(x.paperId,B.value),S.success(`已关联老师`),b.value=!1,C(`saved`)}finally{T.value=!1}}}return _(()=>[b.value,x.paperId],([e])=>{e&&x.paperId&&(O.value=``,R.value=1,U(),W(1))}),(i,f)=>{let p=c(`el-tag`),_=c(`el-input`),x=c(`el-button`),S=c(`el-table-column`),C=c(`el-table`),D=c(`el-pagination`),A=c(`el-dialog`),j=s(`loading`);return r(),y(A,{modelValue:b.value,"onUpdate:modelValue":f[2]||=e=>b.value=e,title:`关联老师:${t.paperTitle||``}`,width:`760px`,"destroy-on-close":``,"append-to-body":``},{footer:l(()=>[n(x,{onClick:f[1]||=e=>b.value=!1},{default:l(()=>[...f[6]||=[o(`取消`,-1)]]),_:1}),n(x,{type:`primary`,loading:T.value,onClick:ne},{default:l(()=>[...f[7]||=[o(`确认关联`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[h((r(),e(`div`,null,[E.value.length?(r(),e(`div`,M,[f[3]||=u(`div`,{class:`linked-label`},`已关联老师`,-1),u(`div`,N,[(r(!0),e(m,null,g(E.value,e=>(r(),y(p,{key:e.id,size:`small`,type:`info`},{default:l(()=>[o(v(e.name)+v(e.university_name?`(${e.university_name})`:``),1)]),_:2},1024))),128))])])):a(``,!0),u(`div`,P,[n(_,{modelValue:O.value,"onUpdate:modelValue":f[0]||=e=>O.value=e,clearable:``,placeholder:`搜索姓名、高校、研究方向…`,style:{width:`260px`},onKeyup:d(G,[`enter`])},null,8,[`modelValue`]),n(x,{type:`primary`,onClick:G},{default:l(()=>[...f[4]||=[o(`搜索`,-1)]]),_:1})]),h((r(),y(C,{ref_key:`tableRef`,ref:V,data:L.value,"row-key":`id`,size:`small`,class:`picker-table`,onSelectionChange:te},{default:l(()=>[n(S,{type:`selection`,width:`44`,selectable:ee}),n(S,{prop:`name`,label:`姓名`,width:`100`}),n(S,{prop:`university_name`,label:`高校`,"min-width":`140`,"show-overflow-tooltip":``}),n(S,{prop:`title`,label:`职称`,width:`100`,"show-overflow-tooltip":``}),n(S,{prop:`research_direction`,label:`研究方向`,"min-width":`120`,"show-overflow-tooltip":``}),n(S,{label:`状态`,width:`80`,align:`center`},{default:l(({row:t})=>[H(t.id)?(r(),y(p,{key:0,size:`small`,type:`info`},{default:l(()=>[...f[5]||=[o(`已关联`,-1)]]),_:1})):(r(),e(`span`,F,`—`))]),_:1})]),_:1},8,[`data`])),[[j,k.value]]),z.value.total>0?(r(),e(`div`,I,[n(D,{layout:`total, prev, pager, next`,total:z.value.total,"page-size":z.value.per_page,"current-page":R.value,onCurrentChange:W},null,8,[`total`,`page-size`,`current-page`])])):a(``,!0)])),[[j,w.value]])]),_:1},8,[`modelValue`,`title`])}}}),[[`__scopeId`,`data-v-a6c8acb0`]]),R={class:`list-page`},z={class:`page-header`},B={class:`list-filter-bar`},V={class:`paper-title-cell`},H={class:`paper-title-text`},ee=[`href`],U={key:1},W={key:1,class:`text-mute`},G={class:`table-row-actions`},te={key:1,class:`list-pager`},ne={class:`summary-body`},K=C(t({__name:`index`,setup(t){let i=b(),f=p(!1),C=p(null),D=p([]),A=p({current_page:1,per_page:20,total:0}),j=p(1),M=p(``),N=p(``),P=p(``),F=p(``),I=p([]),K=p([]),q=p(!1),J=p(``),Y=p(!1),X=p(null);async function re(){let e=await k();I.value=e.school_names||[],K.value=e.research_directions||[]}async function Z(){f.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value&&(e.school_name=N.value),P.value&&(e.research_direction=P.value),F.value===`linked`&&(e.link_status=`linked`),F.value===`unlinked`&&(e.link_status=`unlinked`),C.value&&(e.crawl_job_id=C.value);let t=await E(e);D.value=t.items,A.value=t.meta}finally{f.value=!1}}function ie(){C.value=null,j.value=1,Z()}function ae(){M.value=``,N.value=``,P.value=``,F.value=``,C.value=null,j.value=1,Z()}function Q(){j.value=1,Z()}function oe(e){J.value=e.summary||`暂无摘要`,q.value=!0}function se(e){X.value=e,Y.value=!0}async function ce(e){await x.confirm(`确定要删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await O(e.id),S.success(`已删除`),await Z()}async function $(){let e=i.query.crawl_job_id;C.value=e&&Number(e)||null,await re(),await Z()}return T($),_(()=>i.query.crawl_job_id,()=>{$()}),(t,i)=>{let p=c(`el-button`),_=c(`el-alert`),b=c(`el-input`),x=c(`el-option`),S=c(`el-select`),T=c(`el-table-column`),E=c(`el-tooltip`),O=c(`el-tag`),k=c(`el-table`),re=c(`el-pagination`),$=c(`el-card`),le=c(`el-dialog`),ue=s(`loading`);return r(),e(m,null,[u(`div`,R,[u(`div`,z,[n(w)]),n($,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[C.value?(r(),y(_,{key:0,type:`info`,closable:!1,"show-icon":``,class:`crawl-filter-tip`},{default:l(()=>[o(` 当前仅显示本次爬虫任务(#`+v(C.value)+`)抓取的论文 `,1),n(p,{link:``,type:`primary`,onClick:ie},{default:l(()=>[...i[7]||=[o(`查看全部`,-1)]]),_:1})]),_:1})):a(``,!0),u(`div`,B,[n(b,{modelValue:M.value,"onUpdate:modelValue":i[0]||=e=>M.value=e,placeholder:`搜索标题、作者、学校、摘要…`,clearable:``,class:`filter-search`,style:{width:`260px`},onKeyup:d(Q,[`enter`])},null,8,[`modelValue`]),n(S,{modelValue:N.value,"onUpdate:modelValue":i[1]||=e=>N.value=e,placeholder:`学校`,clearable:``,class:`filter-select-wide`,style:{width:`160px`}},{default:l(()=>[(r(!0),e(m,null,g(I.value,e=>(r(),y(x,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(S,{modelValue:P.value,"onUpdate:modelValue":i[2]||=e=>P.value=e,placeholder:`方向`,clearable:``,class:`filter-select-wide`,style:{width:`160px`}},{default:l(()=>[(r(!0),e(m,null,g(K.value,e=>(r(),y(x,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(S,{modelValue:F.value,"onUpdate:modelValue":i[3]||=e=>F.value=e,placeholder:`关联状态`,clearable:``,class:`filter-select-wide`},{default:l(()=>[n(x,{label:`已关联`,value:`linked`}),n(x,{label:`未关联`,value:`unlinked`})]),_:1},8,[`modelValue`]),n(p,{type:`primary`,onClick:Q},{default:l(()=>[...i[8]||=[o(`搜索`,-1)]]),_:1}),n(p,{onClick:ae},{default:l(()=>[...i[9]||=[o(`重置`,-1)]]),_:1})]),h((r(),y(k,{data:D.value,"row-key":`id`},{default:l(()=>[n(T,{type:`index`,label:`序号`,width:`60`,align:`center`}),n(T,{label:`标题`,"min-width":`280`},{default:l(({row:e})=>[u(`div`,V,[n(E,{class:`paper-title-tooltip`,content:e.title,placement:`top`,"show-after":300},{default:l(()=>[u(`span`,H,v(e.title),1)]),_:2},1032,[`content`]),e.is_new?(r(),y(O,{key:0,type:`danger`,size:`small`,class:`paper-title-tag`},{default:l(()=>[...i[10]||=[o(`新`,-1)]]),_:1})):a(``,!0)])]),_:1}),n(T,{prop:`authors`,label:`作者`,width:`140`,"show-overflow-tooltip":``}),n(T,{prop:`school_name`,label:`学校`,width:`140`,"show-overflow-tooltip":``}),n(T,{label:`发表日期`,width:`110`},{default:l(({row:e})=>[o(v(e.published_at?String(e.published_at).slice(0,10):`—`),1)]),_:1}),n(T,{prop:`imported_at`,label:`入库日期`,width:`110`,align:`center`},{default:l(({row:e})=>[o(v(e.imported_at||`—`),1)]),_:1}),n(T,{label:`链接`,width:`80`,align:`center`},{default:l(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`},`查看`,8,ee)):(r(),e(`span`,U,`—`))]),_:1}),n(T,{label:`关联老师`,width:`90`,align:`center`},{default:l(({row:t})=>[t.is_linked?(r(),y(O,{key:0,size:`small`,type:`success`},{default:l(()=>[o(v(t.teachers_count),1)]),_:2},1024)):(r(),e(`span`,W,`未关联`))]),_:1}),n(T,{label:`操作`,width:`240`,fixed:`right`},{default:l(({row:e})=>[u(`div`,G,[n(p,{class:`btn-action-primary`,onClick:t=>oe(e)},{default:l(()=>[...i[11]||=[o(`摘要`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-info`,onClick:t=>se(e)},{default:l(()=>[...i[12]||=[o(`关联老师`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>ce(e)},{default:l(()=>[...i[13]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ue,f.value]]),A.value.total>0?(r(),e(`div`,te,[n(re,{layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,"current-page":j.value,onCurrentChange:i[4]||=e=>{j.value=e,Z()}},null,8,[`total`,`page-size`,`current-page`])])):a(``,!0)]),_:1})]),n(le,{modelValue:q.value,"onUpdate:modelValue":i[5]||=e=>q.value=e,title:`论文摘要`,width:`640px`},{default:l(()=>[u(`p`,ne,v(J.value),1)]),_:1},8,[`modelValue`]),n(L,{modelValue:Y.value,"onUpdate:modelValue":i[6]||=e=>Y.value=e,"paper-id":X.value?.id??null,"paper-title":X.value?.title,onSaved:Z},null,8,[`modelValue`,`paper-id`,`paper-title`])],64)}}}),[[`__scopeId`,`data-v-3c6b2200`]]);export{K as default}; \ No newline at end of file +import{C as e,D as t,E as n,G as r,P as i,S as a,T as o,X as s,Y as c,at as l,b as u,d,et as f,ht as p,m,ot as h,q as g,rt as _,tn as v,x as y}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as b,c as x,l as S,s as C}from"./index-CPrkFf57.js";import{n as w,t as T}from"./usePageLoad-B1L6ImD-.js";import{c as E,o as D,r as O,s as k,t as A}from"./assets-DlFfPb4n.js";import{f as j}from"./teachers-BWvhNkqR.js";var M={key:0,class:`linked-block`},N={class:`linked-tags`},P={class:`picker-toolbar`},F={key:1,class:`text-mute`},I={key:1,class:`picker-pager`},L=C(t({__name:`PaperLinkTeachersDialog`,props:i({paperId:{},paperTitle:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:i([`saved`],[`update:modelValue`]),setup(t,{emit:i}){let b=f(t,`modelValue`),x=t,C=i,w=p(!1),T=p(!1),E=p([]),O=p(``),k=p(!1),L=p([]),R=p(1),z=p({current_page:1,per_page:10,total:0}),B=p([]),V=p(null);function H(e){return E.value.some(t=>t.id===e)}function ee(e){return!H(e.id)}async function U(){if(x.paperId){w.value=!0;try{E.value=(await D(x.paperId)).teachers||[],B.value=[],V.value?.clearSelection()}finally{w.value=!1}}}async function W(e=R.value){k.value=!0;try{let t=await j({page:e,page_size:z.value.per_page,keyword:O.value.trim()||void 0});L.value=t.items,z.value=t.meta,R.value=t.meta.current_page}finally{k.value=!1}}function G(){R.value=1,W(1)}function te(e){B.value=e.map(e=>e.id)}async function ne(){if(x.paperId){if(!B.value.length){S.warning(`请选择要关联的老师`);return}T.value=!0;try{await A(x.paperId,B.value),S.success(`已关联老师`),b.value=!1,C(`saved`)}finally{T.value=!1}}}return _(()=>[b.value,x.paperId],([e])=>{e&&x.paperId&&(O.value=``,R.value=1,U(),W(1))}),(i,f)=>{let p=c(`el-tag`),_=c(`el-input`),x=c(`el-button`),S=c(`el-table-column`),C=c(`el-table`),D=c(`el-pagination`),A=c(`el-dialog`),j=s(`loading`);return r(),y(A,{modelValue:b.value,"onUpdate:modelValue":f[2]||=e=>b.value=e,title:`关联老师:${t.paperTitle||``}`,width:`760px`,"destroy-on-close":``,"append-to-body":``},{footer:l(()=>[n(x,{onClick:f[1]||=e=>b.value=!1},{default:l(()=>[...f[6]||=[o(`取消`,-1)]]),_:1}),n(x,{type:`primary`,loading:T.value,onClick:ne},{default:l(()=>[...f[7]||=[o(`确认关联`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[h((r(),e(`div`,null,[E.value.length?(r(),e(`div`,M,[f[3]||=u(`div`,{class:`linked-label`},`已关联老师`,-1),u(`div`,N,[(r(!0),e(m,null,g(E.value,e=>(r(),y(p,{key:e.id,size:`small`,type:`info`},{default:l(()=>[o(v(e.name)+v(e.university_name?`(${e.university_name})`:``),1)]),_:2},1024))),128))])])):a(``,!0),u(`div`,P,[n(_,{modelValue:O.value,"onUpdate:modelValue":f[0]||=e=>O.value=e,clearable:``,placeholder:`搜索姓名、高校、研究方向…`,style:{width:`260px`},onKeyup:d(G,[`enter`])},null,8,[`modelValue`]),n(x,{type:`primary`,onClick:G},{default:l(()=>[...f[4]||=[o(`搜索`,-1)]]),_:1})]),h((r(),y(C,{ref_key:`tableRef`,ref:V,data:L.value,"row-key":`id`,size:`small`,class:`picker-table`,onSelectionChange:te},{default:l(()=>[n(S,{type:`selection`,width:`44`,selectable:ee}),n(S,{prop:`name`,label:`姓名`,width:`100`}),n(S,{prop:`university_name`,label:`高校`,"min-width":`140`,"show-overflow-tooltip":``}),n(S,{prop:`title`,label:`职称`,width:`100`,"show-overflow-tooltip":``}),n(S,{prop:`research_direction`,label:`研究方向`,"min-width":`120`,"show-overflow-tooltip":``}),n(S,{label:`状态`,width:`80`,align:`center`},{default:l(({row:t})=>[H(t.id)?(r(),y(p,{key:0,size:`small`,type:`info`},{default:l(()=>[...f[5]||=[o(`已关联`,-1)]]),_:1})):(r(),e(`span`,F,`—`))]),_:1})]),_:1},8,[`data`])),[[j,k.value]]),z.value.total>0?(r(),e(`div`,I,[n(D,{layout:`total, prev, pager, next`,total:z.value.total,"page-size":z.value.per_page,"current-page":R.value,onCurrentChange:W},null,8,[`total`,`page-size`,`current-page`])])):a(``,!0)])),[[j,w.value]])]),_:1},8,[`modelValue`,`title`])}}}),[[`__scopeId`,`data-v-a6c8acb0`]]),R={class:`list-page`},z={class:`page-header`},B={class:`list-filter-bar`},V={class:`paper-title-cell`},H={class:`paper-title-text`},ee=[`href`],U={key:1},W={key:1,class:`text-mute`},G={class:`table-row-actions`},te={key:1,class:`list-pager`},ne={class:`summary-body`},K=C(t({__name:`index`,setup(t){let i=b(),f=p(!1),C=p(null),D=p([]),A=p({current_page:1,per_page:20,total:0}),j=p(1),M=p(``),N=p(``),P=p(``),F=p(``),I=p([]),K=p([]),q=p(!1),J=p(``),Y=p(!1),X=p(null);async function re(){let e=await k();I.value=e.school_names||[],K.value=e.research_directions||[]}async function Z(){f.value=!0;try{let e={page:j.value,page_size:A.value.per_page};M.value&&(e.keyword=M.value),N.value&&(e.school_name=N.value),P.value&&(e.research_direction=P.value),F.value===`linked`&&(e.link_status=`linked`),F.value===`unlinked`&&(e.link_status=`unlinked`),C.value&&(e.crawl_job_id=C.value);let t=await E(e);D.value=t.items,A.value=t.meta}finally{f.value=!1}}function ie(){C.value=null,j.value=1,Z()}function ae(){M.value=``,N.value=``,P.value=``,F.value=``,C.value=null,j.value=1,Z()}function Q(){j.value=1,Z()}function oe(e){J.value=e.summary||`暂无摘要`,q.value=!0}function se(e){X.value=e,Y.value=!0}async function ce(e){await x.confirm(`确定要删除论文「${e.title}」?`,`确认删除`,{type:`warning`}),await O(e.id),S.success(`已删除`),await Z()}async function $(){let e=i.query.crawl_job_id;C.value=e&&Number(e)||null,await re(),await Z()}return T($),_(()=>i.query.crawl_job_id,()=>{$()}),(t,i)=>{let p=c(`el-button`),_=c(`el-alert`),b=c(`el-input`),x=c(`el-option`),S=c(`el-select`),T=c(`el-table-column`),E=c(`el-tooltip`),O=c(`el-tag`),k=c(`el-table`),re=c(`el-pagination`),$=c(`el-card`),le=c(`el-dialog`),ue=s(`loading`);return r(),e(m,null,[u(`div`,R,[u(`div`,z,[n(w)]),n($,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[C.value?(r(),y(_,{key:0,type:`info`,closable:!1,"show-icon":``,class:`crawl-filter-tip`},{default:l(()=>[o(` 当前仅显示本次爬虫任务(#`+v(C.value)+`)抓取的论文 `,1),n(p,{link:``,type:`primary`,onClick:ie},{default:l(()=>[...i[7]||=[o(`查看全部`,-1)]]),_:1})]),_:1})):a(``,!0),u(`div`,B,[n(b,{modelValue:M.value,"onUpdate:modelValue":i[0]||=e=>M.value=e,placeholder:`搜索标题、作者、学校、摘要…`,clearable:``,class:`filter-search`,style:{width:`260px`},onKeyup:d(Q,[`enter`])},null,8,[`modelValue`]),n(S,{modelValue:N.value,"onUpdate:modelValue":i[1]||=e=>N.value=e,placeholder:`学校`,clearable:``,class:`filter-select-wide`,style:{width:`160px`}},{default:l(()=>[(r(!0),e(m,null,g(I.value,e=>(r(),y(x,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(S,{modelValue:P.value,"onUpdate:modelValue":i[2]||=e=>P.value=e,placeholder:`方向`,clearable:``,class:`filter-select-wide`,style:{width:`160px`}},{default:l(()=>[(r(!0),e(m,null,g(K.value,e=>(r(),y(x,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(S,{modelValue:F.value,"onUpdate:modelValue":i[3]||=e=>F.value=e,placeholder:`关联状态`,clearable:``,class:`filter-select-wide`},{default:l(()=>[n(x,{label:`已关联`,value:`linked`}),n(x,{label:`未关联`,value:`unlinked`})]),_:1},8,[`modelValue`]),n(p,{type:`primary`,onClick:Q},{default:l(()=>[...i[8]||=[o(`搜索`,-1)]]),_:1}),n(p,{onClick:ae},{default:l(()=>[...i[9]||=[o(`重置`,-1)]]),_:1})]),h((r(),y(k,{data:D.value,"row-key":`id`},{default:l(()=>[n(T,{type:`index`,label:`序号`,width:`60`,align:`center`}),n(T,{label:`标题`,"min-width":`280`},{default:l(({row:e})=>[u(`div`,V,[n(E,{class:`paper-title-tooltip`,content:e.title,placement:`top`,"show-after":300},{default:l(()=>[u(`span`,H,v(e.title),1)]),_:2},1032,[`content`]),e.is_new?(r(),y(O,{key:0,type:`danger`,size:`small`,class:`paper-title-tag`},{default:l(()=>[...i[10]||=[o(`新`,-1)]]),_:1})):a(``,!0)])]),_:1}),n(T,{prop:`authors`,label:`作者`,width:`140`,"show-overflow-tooltip":``}),n(T,{prop:`school_name`,label:`学校`,width:`140`,"show-overflow-tooltip":``}),n(T,{label:`发表日期`,width:`110`},{default:l(({row:e})=>[o(v(e.published_at?String(e.published_at).slice(0,10):`—`),1)]),_:1}),n(T,{prop:`imported_at`,label:`入库日期`,width:`110`,align:`center`},{default:l(({row:e})=>[o(v(e.imported_at||`—`),1)]),_:1}),n(T,{label:`链接`,width:`80`,align:`center`},{default:l(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`},`查看`,8,ee)):(r(),e(`span`,U,`—`))]),_:1}),n(T,{label:`关联老师`,width:`90`,align:`center`},{default:l(({row:t})=>[t.is_linked?(r(),y(O,{key:0,size:`small`,type:`success`},{default:l(()=>[o(v(t.teachers_count),1)]),_:2},1024)):(r(),e(`span`,W,`未关联`))]),_:1}),n(T,{label:`操作`,width:`240`,fixed:`right`},{default:l(({row:e})=>[u(`div`,G,[n(p,{class:`btn-action-primary`,onClick:t=>oe(e)},{default:l(()=>[...i[11]||=[o(`摘要`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-info`,onClick:t=>se(e)},{default:l(()=>[...i[12]||=[o(`关联老师`,-1)]]),_:1},8,[`onClick`]),n(p,{class:`btn-action-brand`,onClick:t=>ce(e)},{default:l(()=>[...i[13]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[ue,f.value]]),A.value.total>0?(r(),e(`div`,te,[n(re,{layout:`total, prev, pager, next`,total:A.value.total,"page-size":A.value.per_page,"current-page":j.value,onCurrentChange:i[4]||=e=>{j.value=e,Z()}},null,8,[`total`,`page-size`,`current-page`])])):a(``,!0)]),_:1})]),n(le,{modelValue:q.value,"onUpdate:modelValue":i[5]||=e=>q.value=e,title:`论文摘要`,width:`640px`},{default:l(()=>[u(`p`,ne,v(J.value),1)]),_:1},8,[`modelValue`]),n(L,{modelValue:Y.value,"onUpdate:modelValue":i[6]||=e=>Y.value=e,"paper-id":X.value?.id??null,"paper-title":X.value?.title,onSaved:Z},null,8,[`modelValue`,`paper-id`,`paper-title`])],64)}}}),[[`__scopeId`,`data-v-3c6b2200`]]);export{K as default}; \ No newline at end of file diff --git a/public/admin/assets/past-reviews-CkSYKgQl.css b/public/admin/assets/past-reviews-CkSYKgQl.css new file mode 100644 index 0000000..14b467c --- /dev/null +++ b/public/admin/assets/past-reviews-CkSYKgQl.css @@ -0,0 +1 @@ +.cover-upload-row[data-v-e560edfb]{align-items:center;gap:12px;display:flex} diff --git a/public/admin/assets/past-reviews-RwepuJlS.js b/public/admin/assets/past-reviews-RwepuJlS.js new file mode 100644 index 0000000..ccad2c0 --- /dev/null +++ b/public/admin/assets/past-reviews-RwepuJlS.js @@ -0,0 +1 @@ +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,tn as g,x as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as v,l as y,r as b,s as x}from"./index-CPrkFf57.js";import{n as S,t as C}from"./usePageLoad-B1L6ImD-.js";import{t as w}from"./upload-qqZxNm7U.js";import{r as T}from"./admin-list-dnDAubDa.js";async function E(e){let{data:t}=await b.get(`/admin/v1/past-reviews`,{params:e});return t.data}async function D(e){let{data:t}=await b.get(`/admin/v1/past-reviews/${e}`);return t.data}async function O(e){let{data:t}=await b.post(`/admin/v1/past-reviews`,e);return t.data}async function k(e,t){let{data:n}=await b.put(`/admin/v1/past-reviews/${e}`,t);return n.data}async function A(e){let{data:t}=await b.delete(`/admin/v1/past-reviews/${e}`);return t}var j={class:`list-page`},ee={class:`page-header`},te={class:`list-filter-bar`},ne={key:1,class:`text-mute`},re={class:`table-row-actions`},M={class:`list-pager`},N={class:`cover-upload-row`},P=x(n({__name:`index`,setup(n){let b=p(!1),x=p(!1),P=p([]),F=p({current_page:1,per_page:20,total:0}),I=p(1),L=p(``),R=p(``),z=p(!1),B=p(null),V=p({title:``,cover_url:``,sort:0,status:1});async function H(){b.value=!0;try{let e={page:I.value,page_size:F.value.per_page};L.value&&(e.keyword=L.value),R.value!==``&&(e.status=R.value);let t=await E(e);P.value=t.items,F.value=t.meta}finally{b.value=!1}}function U(){I.value=1,H()}function W(){L.value=``,R.value=``,I.value=1,H()}function G(){B.value=null,V.value={title:``,cover_url:``,sort:0,status:1},z.value=!0}async function K(e){B.value=e;let t=await D(e.id);V.value={title:t.title,cover_url:t.cover_url||``,sort:t.sort,status:t.status},z.value=!0}async function q(){if(!V.value.title.trim()){y.warning(`请填写标题`);return}if(!V.value.cover_url){y.warning(`请上传封面图`);return}let e={title:V.value.title.trim(),cover_url:V.value.cover_url,sort:V.value.sort,status:V.value.status};x.value=!0;try{B.value?await k(B.value.id,e):await O(e),y.success(`已保存`),z.value=!1,await H()}finally{x.value=!1}}async function J(e){await v.confirm(`确定删除往期回顾「${e.title}」?`,`提示`,{type:`warning`}),await A(e.id),y.success(`已删除`),await H()}async function Y(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await w(n);V.value.cover_url=t.url,y.success(`封面上传成功`),e.onSuccess?.({})}catch{y.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}return C(H),(n,p)=>{let v=l(`el-button`),y=l(`el-input`),C=l(`el-option`),w=l(`el-select`),E=l(`el-table-column`),D=l(`el-image`),O=l(`el-table`),k=l(`el-pagination`),A=l(`el-card`),X=l(`el-form-item`),ie=l(`el-upload`),ae=l(`el-input-number`),Z=l(`el-col`),Q=l(`el-radio`),oe=l(`el-radio-group`),$=l(`el-row`),se=l(`el-form`),ce=l(`el-dialog`),le=s(`loading`);return i(),e(m,null,[d(`div`,j,[d(`div`,ee,[r(S),r(v,{type:`primary`,size:`small`,class:`btn-create`,onClick:G},{default:u(()=>[...p[8]||=[o(`新增往期回顾`,-1)]]),_:1})]),r(A,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,te,[r(y,{modelValue:L.value,"onUpdate:modelValue":p[0]||=e=>L.value=e,placeholder:`搜索标题`,clearable:``,class:`filter-search`,onKeyup:f(U,[`enter`])},null,8,[`modelValue`]),r(w,{modelValue:R.value,"onUpdate:modelValue":p[1]||=e=>R.value=e,clearable:``,placeholder:`是否显示`,class:`filter-select`},{default:u(()=>[r(C,{label:`显示`,value:1}),r(C,{label:`隐藏`,value:0})]),_:1},8,[`modelValue`]),r(v,{type:`primary`,onClick:U},{default:u(()=>[...p[9]||=[o(`搜索`,-1)]]),_:1}),r(v,{onClick:W},{default:u(()=>[...p[10]||=[o(`重置`,-1)]]),_:1})]),h((i(),_(O,{data:P.value,"row-key":`id`},{default:u(()=>[r(E,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),r(E,{label:`封面图`,width:`100`,align:`center`},{default:u(({row:t})=>[t.cover_url?(i(),_(D,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,ne,`—`))]),_:1}),r(E,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(E,{label:`是否显示`,width:`100`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(T)(e.status)])},g(e.status===1?`显示`:`隐藏`),3)]),_:1}),r(E,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,re,[r(v,{class:`btn-action-primary`,onClick:t=>K(e)},{default:u(()=>[...p[11]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(v,{class:`btn-action-brand`,onClick:t=>J(e)},{default:u(()=>[...p[12]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[le,b.value]]),d(`div`,M,[r(k,{"current-page":I.value,"onUpdate:currentPage":p[2]||=e=>I.value=e,layout:`total, prev, pager, next`,total:F.value.total,"page-size":F.value.per_page,onCurrentChange:H},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(ce,{modelValue:z.value,"onUpdate:modelValue":p[7]||=e=>z.value=e,title:B.value?`编辑往期回顾`:`新增往期回顾`,width:`640px`,"destroy-on-close":``},{footer:u(()=>[r(v,{onClick:p[6]||=e=>z.value=!1},{default:u(()=>[...p[16]||=[o(`取消`,-1)]]),_:1}),r(v,{type:`primary`,class:`btn-create`,loading:x.value,onClick:q},{default:u(()=>[...p[17]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:u(()=>[r(se,{"label-position":`top`},{default:u(()=>[r(X,{label:`标题`,required:``},{default:u(()=>[r(y,{modelValue:V.value.title,"onUpdate:modelValue":p[3]||=e=>V.value.title=e,placeholder:`请输入标题`},null,8,[`modelValue`])]),_:1}),r(X,{label:`封面图`,required:``},{default:u(()=>[d(`div`,N,[r(ie,{"show-file-list":!1,"http-request":Y,accept:`image/*`},{default:u(()=>[r(v,{type:`primary`,plain:``},{default:u(()=>[...p[13]||=[o(`上传封面`,-1)]]),_:1})]),_:1}),V.value.cover_url?(i(),_(D,{key:0,src:V.value.cover_url,fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``,"preview-src-list":[V.value.cover_url]},null,8,[`src`,`preview-src-list`])):a(``,!0)])]),_:1}),r($,{gutter:16},{default:u(()=>[r(Z,{span:12},{default:u(()=>[r(X,{label:`排序`,required:``},{default:u(()=>[r(ae,{modelValue:V.value.sort,"onUpdate:modelValue":p[4]||=e=>V.value.sort=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{span:12},{default:u(()=>[r(X,{label:`是否显示`},{default:u(()=>[r(oe,{modelValue:V.value.status,"onUpdate:modelValue":p[5]||=e=>V.value.status=e},{default:u(()=>[r(Q,{value:1},{default:u(()=>[...p[14]||=[o(`显示`,-1)]]),_:1}),r(Q,{value:0},{default:u(()=>[...p[15]||=[o(`隐藏`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-e560edfb`]]);export{P as default}; \ No newline at end of file diff --git a/public/admin/assets/research-directions-C0FNlolV.js b/public/admin/assets/research-directions-BOEV4y5H.js similarity index 88% rename from public/admin/assets/research-directions-C0FNlolV.js rename to public/admin/assets/research-directions-BOEV4y5H.js index 0ed3c81..67f521f 100644 --- a/public/admin/assets/research-directions-C0FNlolV.js +++ b/public/admin/assets/research-directions-BOEV4y5H.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/research-directions`,{params:t});return n.data}async function n(){let{data:t}=await e.get(`/admin/v1/research-directions/options`);return t.data.items}async function r(t){let{data:n}=await e.post(`/admin/v1/research-directions`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/research-directions/${t}`,n);return r.data}async function a(t){let{data:n}=await e.delete(`/admin/v1/research-directions/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/research-directions`,{params:t});return n.data}async function n(){let{data:t}=await e.get(`/admin/v1/research-directions/options`);return t.data.items}async function r(t){let{data:n}=await e.post(`/admin/v1/research-directions`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/research-directions/${t}`,n);return r.data}async function a(t){let{data:n}=await e.delete(`/admin/v1/research-directions/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file diff --git a/public/admin/assets/research-directions-Cuytezev.js b/public/admin/assets/research-directions-CW-61eRh.js similarity index 94% rename from public/admin/assets/research-directions-Cuytezev.js rename to public/admin/assets/research-directions-CW-61eRh.js index f8c35d9..dde28fe 100644 --- a/public/admin/assets/research-directions-Cuytezev.js +++ b/public/admin/assets/research-directions-CW-61eRh.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,T as a,X as o,Xt as s,Y as c,at as l,b as u,d,ht as f,m as p,ot as m,tn as h,x as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as _,l as v}from"./index-DHoSHxJa.js";import{n as y,t as b}from"./usePageLoad-C9PEZ_Tm.js";import{r as x}from"./admin-list-DjncsyJC.js";import{a as S,i as C,n as w,t as T}from"./research-directions-C0FNlolV.js";var E={class:`list-page`},D={class:`page-header`},O={class:`list-filter-bar`},k={class:`table-row-actions`},A={class:`list-pager`},j=n({__name:`index`,setup(n){let j=f(!1),M=f([]),N=f({current_page:1,per_page:20,total:0}),P=f(``),F=f(1),I=f(!1),L=f(null),R=f({name:``,sort:0,status:1,remark:``});async function z(){j.value=!0;try{let e=await C({page:F.value,page_size:N.value.per_page,keyword:P.value||void 0});M.value=e.items,N.value=e.meta}finally{j.value=!1}}function B(){L.value=null,R.value={name:``,sort:0,status:1,remark:``},I.value=!0}function V(e){L.value=e,R.value={name:e.name,sort:e.sort,status:e.status,remark:e.remark||``},I.value=!0}async function H(){if(!R.value.name.trim()){v.warning(`请填写研究方向名称`);return}let e={name:R.value.name.trim(),sort:R.value.sort,status:R.value.status,remark:R.value.remark||null};L.value?await S(L.value.id,e):await T(e),v.success(`已保存`),I.value=!1,await z()}async function U(e){await _.confirm(`确定删除研究方向「${e.name}」?`,`提示`,{type:`warning`}),await w(e.id),v.success(`已删除`),await z()}function W(){F.value=1,z()}function G(){P.value=``,F.value=1,z()}return b(z),(n,f)=>{let _=c(`el-button`),v=c(`el-input`),b=c(`el-table-column`),S=c(`el-table`),C=c(`el-pagination`),w=c(`el-card`),T=c(`el-form-item`),K=c(`el-input-number`),q=c(`el-switch`),J=c(`el-form`),Y=c(`el-dialog`),X=o(`loading`);return i(),e(p,null,[u(`div`,E,[u(`div`,D,[r(y),r(_,{type:`primary`,size:`small`,class:`btn-create`,onClick:B},{default:l(()=>[...f[8]||=[a(`新增`,-1)]]),_:1})]),r(w,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[u(`div`,O,[r(v,{modelValue:P.value,"onUpdate:modelValue":f[0]||=e=>P.value=e,placeholder:`研究方向名称`,clearable:``,class:`filter-search`,onKeyup:d(W,[`enter`])},null,8,[`modelValue`]),r(_,{type:`primary`,onClick:W},{default:l(()=>[...f[9]||=[a(`搜索`,-1)]]),_:1}),r(_,{onClick:G},{default:l(()=>[...f[10]||=[a(`重置`,-1)]]),_:1})]),m((i(),g(S,{data:M.value,"row-key":`id`},{default:l(()=>[r(b,{prop:`name`,label:`名称`,"min-width":`180`}),r(b,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(b,{prop:`teacher_count`,label:`关联老师数`,width:`110`,align:`center`}),r(b,{label:`状态`,width:`90`,align:`center`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status)])},h(e.status===1?`启用`:`停用`),3)]),_:1}),r(b,{prop:`remark`,label:`备注`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{label:`操作`,width:`160`,fixed:`right`},{default:l(({row:e})=>[u(`div`,k,[r(_,{class:`btn-action-primary`,onClick:t=>V(e)},{default:l(()=>[...f[11]||=[a(`编辑`,-1)]]),_:1},8,[`onClick`]),r(_,{class:`btn-action-brand`,onClick:t=>U(e)},{default:l(()=>[...f[12]||=[a(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[X,j.value]]),u(`div`,A,[r(C,{"current-page":F.value,"onUpdate:currentPage":f[1]||=e=>F.value=e,layout:`total, prev, pager, next`,total:N.value.total,"page-size":N.value.per_page,onCurrentChange:z},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(Y,{modelValue:I.value,"onUpdate:modelValue":f[7]||=e=>I.value=e,title:L.value?`编辑研究方向`:`新增研究方向`,width:`480px`},{footer:l(()=>[r(_,{onClick:f[6]||=e=>I.value=!1},{default:l(()=>[...f[13]||=[a(`取消`,-1)]]),_:1}),r(_,{type:`primary`,onClick:H},{default:l(()=>[...f[14]||=[a(`保存`,-1)]]),_:1})]),default:l(()=>[r(J,{"label-width":`88px`},{default:l(()=>[r(T,{label:`名称`},{default:l(()=>[r(v,{modelValue:R.value.name,"onUpdate:modelValue":f[2]||=e=>R.value.name=e,maxlength:`255`},null,8,[`modelValue`])]),_:1}),r(T,{label:`排序`},{default:l(()=>[r(K,{modelValue:R.value.sort,"onUpdate:modelValue":f[3]||=e=>R.value.sort=e,min:0},null,8,[`modelValue`])]),_:1}),r(T,{label:`状态`},{default:l(()=>[r(q,{modelValue:R.value.status,"onUpdate:modelValue":f[4]||=e=>R.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(T,{label:`备注`},{default:l(()=>[r(v,{modelValue:R.value.remark,"onUpdate:modelValue":f[5]||=e=>R.value.remark=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{j as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,T as a,X as o,Xt as s,Y as c,at as l,b as u,d,ht as f,m as p,ot as m,tn as h,x as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as _,l as v}from"./index-CPrkFf57.js";import{n as y,t as b}from"./usePageLoad-B1L6ImD-.js";import{r as x}from"./admin-list-dnDAubDa.js";import{a as S,i as C,n as w,t as T}from"./research-directions-BOEV4y5H.js";var E={class:`list-page`},D={class:`page-header`},O={class:`list-filter-bar`},k={class:`table-row-actions`},A={class:`list-pager`},j=n({__name:`index`,setup(n){let j=f(!1),M=f([]),N=f({current_page:1,per_page:20,total:0}),P=f(``),F=f(1),I=f(!1),L=f(null),R=f({name:``,sort:0,status:1,remark:``});async function z(){j.value=!0;try{let e=await C({page:F.value,page_size:N.value.per_page,keyword:P.value||void 0});M.value=e.items,N.value=e.meta}finally{j.value=!1}}function B(){L.value=null,R.value={name:``,sort:0,status:1,remark:``},I.value=!0}function V(e){L.value=e,R.value={name:e.name,sort:e.sort,status:e.status,remark:e.remark||``},I.value=!0}async function H(){if(!R.value.name.trim()){v.warning(`请填写研究方向名称`);return}let e={name:R.value.name.trim(),sort:R.value.sort,status:R.value.status,remark:R.value.remark||null};L.value?await S(L.value.id,e):await T(e),v.success(`已保存`),I.value=!1,await z()}async function U(e){await _.confirm(`确定删除研究方向「${e.name}」?`,`提示`,{type:`warning`}),await w(e.id),v.success(`已删除`),await z()}function W(){F.value=1,z()}function G(){P.value=``,F.value=1,z()}return b(z),(n,f)=>{let _=c(`el-button`),v=c(`el-input`),b=c(`el-table-column`),S=c(`el-table`),C=c(`el-pagination`),w=c(`el-card`),T=c(`el-form-item`),K=c(`el-input-number`),q=c(`el-switch`),J=c(`el-form`),Y=c(`el-dialog`),X=o(`loading`);return i(),e(p,null,[u(`div`,E,[u(`div`,D,[r(y),r(_,{type:`primary`,size:`small`,class:`btn-create`,onClick:B},{default:l(()=>[...f[8]||=[a(`新增`,-1)]]),_:1})]),r(w,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[u(`div`,O,[r(v,{modelValue:P.value,"onUpdate:modelValue":f[0]||=e=>P.value=e,placeholder:`研究方向名称`,clearable:``,class:`filter-search`,onKeyup:d(W,[`enter`])},null,8,[`modelValue`]),r(_,{type:`primary`,onClick:W},{default:l(()=>[...f[9]||=[a(`搜索`,-1)]]),_:1}),r(_,{onClick:G},{default:l(()=>[...f[10]||=[a(`重置`,-1)]]),_:1})]),m((i(),g(S,{data:M.value,"row-key":`id`},{default:l(()=>[r(b,{prop:`name`,label:`名称`,"min-width":`180`}),r(b,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(b,{prop:`teacher_count`,label:`关联老师数`,width:`110`,align:`center`}),r(b,{label:`状态`,width:`90`,align:`center`},{default:l(({row:e})=>[u(`span`,{class:s([`status-badge`,t(x)(e.status)])},h(e.status===1?`启用`:`停用`),3)]),_:1}),r(b,{prop:`remark`,label:`备注`,"min-width":`160`,"show-overflow-tooltip":``}),r(b,{label:`操作`,width:`160`,fixed:`right`},{default:l(({row:e})=>[u(`div`,k,[r(_,{class:`btn-action-primary`,onClick:t=>V(e)},{default:l(()=>[...f[11]||=[a(`编辑`,-1)]]),_:1},8,[`onClick`]),r(_,{class:`btn-action-brand`,onClick:t=>U(e)},{default:l(()=>[...f[12]||=[a(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[X,j.value]]),u(`div`,A,[r(C,{"current-page":F.value,"onUpdate:currentPage":f[1]||=e=>F.value=e,layout:`total, prev, pager, next`,total:N.value.total,"page-size":N.value.per_page,onCurrentChange:z},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(Y,{modelValue:I.value,"onUpdate:modelValue":f[7]||=e=>I.value=e,title:L.value?`编辑研究方向`:`新增研究方向`,width:`480px`},{footer:l(()=>[r(_,{onClick:f[6]||=e=>I.value=!1},{default:l(()=>[...f[13]||=[a(`取消`,-1)]]),_:1}),r(_,{type:`primary`,onClick:H},{default:l(()=>[...f[14]||=[a(`保存`,-1)]]),_:1})]),default:l(()=>[r(J,{"label-width":`88px`},{default:l(()=>[r(T,{label:`名称`},{default:l(()=>[r(v,{modelValue:R.value.name,"onUpdate:modelValue":f[2]||=e=>R.value.name=e,maxlength:`255`},null,8,[`modelValue`])]),_:1}),r(T,{label:`排序`},{default:l(()=>[r(K,{modelValue:R.value.sort,"onUpdate:modelValue":f[3]||=e=>R.value.sort=e,min:0},null,8,[`modelValue`])]),_:1}),r(T,{label:`状态`},{default:l(()=>[r(q,{modelValue:R.value.status,"onUpdate:modelValue":f[4]||=e=>R.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(T,{label:`备注`},{default:l(()=>[r(v,{modelValue:R.value.remark,"onUpdate:modelValue":f[5]||=e=>R.value.remark=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{j as default}; \ No newline at end of file diff --git a/public/admin/assets/roles-JoCAhY96.js b/public/admin/assets/roles-CUFvJuCz.js similarity index 95% rename from public/admin/assets/roles-JoCAhY96.js rename to public/admin/assets/roles-CUFvJuCz.js index 5189a9d..21bf518 100644 --- a/public/admin/assets/roles-JoCAhY96.js +++ b/public/admin/assets/roles-CUFvJuCz.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,I as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,tn as g,x as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as v,l as y,s as b}from"./index-DHoSHxJa.js";import{n as x,t as S}from"./usePageLoad-C9PEZ_Tm.js";import{r as C}from"./admin-list-DjncsyJC.js";import{r as w}from"./menus-BEgUBQhC.js";import{a as T,i as E,n as D,r as O,t as k}from"./roles-BboDOvYZ.js";var A={class:`list-page`},j={class:`page-header`},M={class:`list-filter-bar`},N={class:`table-row-actions`},P={class:`list-pager`},F=b(n({__name:`index`,setup(n){let b=p(!1),F=p([]),I=p({current_page:1,per_page:20,total:0}),L=p(``),R=p(1),z=p([]),B=p(!1),V=p(null),H=p({code:``,name:``,remark:``,sort:0,status:1}),U=p();function W(e){return e.map(e=>({id:e.id,label:e.title,children:e.children?.length?W(e.children):void 0}))}async function G(){b.value=!0;try{let e=await E({page:R.value,page_size:I.value.per_page,keyword:L.value||void 0});F.value=e.items,I.value=e.meta}finally{b.value=!1}}async function K(){z.value=W(await w())}async function q(){V.value=null,H.value={code:``,name:``,remark:``,sort:0,status:1},await K(),B.value=!0,await a(),U.value?.setCheckedKeys([],!1)}async function J(e){e.code===`super_admin`&&y.warning(`超级管理员角色请谨慎修改菜单分配`),V.value=e.id,await K();let t=await O(e.id);H.value={code:t.code,name:t.name,remark:t.remark||``,sort:t.sort,status:t.status},B.value=!0,await a(),U.value?.setCheckedKeys(t.menu_ids,!1)}async function Y(){let e=U.value?.getCheckedKeys(!1)||[];V.value?await T(V.value,{name:H.value.name,remark:H.value.remark||null,sort:H.value.sort,status:H.value.status,menu_ids:e}):await k({code:H.value.code,name:H.value.name,remark:H.value.remark||null,sort:H.value.sort,status:H.value.status,menu_ids:e}),y.success(`已保存`),B.value=!1,await G()}async function X(e){if(e.code===`super_admin`){y.warning(`不能删除预置超级管理员`);return}await v.confirm(`确定删除角色「${e.name}」?`,`提示`,{type:`warning`}),await D(e.id),y.success(`已删除`),await G()}function Z(){R.value=1,G()}function Q(){L.value=``,R.value=1,G()}return S(G),(n,a)=>{let p=l(`el-button`),v=l(`el-input`),y=l(`el-table-column`),S=l(`el-table`),w=l(`el-pagination`),T=l(`el-card`),E=l(`el-form-item`),D=l(`el-input-number`),O=l(`el-switch`),k=l(`el-form`),W=l(`el-tree`),K=l(`el-dialog`),$=s(`loading`);return i(),e(m,null,[d(`div`,A,[d(`div`,j,[r(x),r(p,{type:`primary`,size:`small`,class:`btn-create`,onClick:q},{default:u(()=>[...a[10]||=[o(`新增角色`,-1)]]),_:1})]),r(T,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,M,[r(v,{modelValue:L.value,"onUpdate:modelValue":a[0]||=e=>L.value=e,placeholder:`名称/编码`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(p,{type:`primary`,onClick:Z},{default:u(()=>[...a[11]||=[o(`搜索`,-1)]]),_:1}),r(p,{onClick:Q},{default:u(()=>[...a[12]||=[o(`重置`,-1)]]),_:1})]),h((i(),_(S,{data:F.value,"row-key":`id`},{default:u(()=>[r(y,{prop:`code`,label:`编码`,width:`160`}),r(y,{prop:`name`,label:`名称`,width:`160`}),r(y,{prop:`remark`,label:`备注`,"min-width":`200`,"show-overflow-tooltip":``}),r(y,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(y,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},g(e.status===1?`启用`:`停用`),3)]),_:1}),r(y,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,N,[r(p,{class:`btn-action-primary`,onClick:t=>J(e)},{default:u(()=>[...a[13]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(p,{class:`btn-action-brand`,disabled:e.code===`super_admin`,onClick:t=>X(e)},{default:u(()=>[...a[14]||=[o(` 删除 `,-1)]]),_:1},8,[`disabled`,`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,b.value]]),d(`div`,P,[r(w,{"current-page":R.value,"onUpdate:currentPage":a[1]||=e=>R.value=e,layout:`total, prev, pager, next`,total:I.value.total,"page-size":I.value.per_page,onCurrentChange:G},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(K,{modelValue:B.value,"onUpdate:modelValue":a[9]||=e=>B.value=e,title:V.value?`编辑角色`:`新增角色`,width:`520px`},{footer:u(()=>[r(p,{onClick:a[8]||=e=>B.value=!1},{default:u(()=>[...a[15]||=[o(`取消`,-1)]]),_:1}),r(p,{type:`primary`,onClick:Y},{default:u(()=>[...a[16]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[a[17]||=d(`p`,{class:`hint`},[o(`当前阶段仅按`),d(`strong`,null,`菜单`),o(`控制侧栏与页面入口;接口暂不做权限码校验。`)],-1),r(k,{"label-width":`88px`},{default:u(()=>[V.value?(i(),_(E,{key:1,label:`编码`},{default:u(()=>[r(v,{modelValue:H.value.code,"onUpdate:modelValue":a[3]||=e=>H.value.code=e,disabled:``},null,8,[`modelValue`])]),_:1})):(i(),_(E,{key:0,label:`编码`},{default:u(()=>[r(v,{modelValue:H.value.code,"onUpdate:modelValue":a[2]||=e=>H.value.code=e,placeholder:`唯一编码`},null,8,[`modelValue`])]),_:1})),r(E,{label:`名称`},{default:u(()=>[r(v,{modelValue:H.value.name,"onUpdate:modelValue":a[4]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1}),r(E,{label:`备注`},{default:u(()=>[r(v,{modelValue:H.value.remark,"onUpdate:modelValue":a[5]||=e=>H.value.remark=e,type:`textarea`,rows:2},null,8,[`modelValue`])]),_:1}),r(E,{label:`排序`},{default:u(()=>[r(D,{modelValue:H.value.sort,"onUpdate:modelValue":a[6]||=e=>H.value.sort=e},null,8,[`modelValue`])]),_:1}),r(E,{label:`状态`},{default:u(()=>[r(O,{modelValue:H.value.status,"onUpdate:modelValue":a[7]||=e=>H.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1}),a[18]||=d(`h4`,{class:`tree-title`},`菜单分配`,-1),r(W,{ref_key:`menuRef`,ref:U,data:z.value,"show-checkbox":``,"node-key":`id`,props:{label:`label`,children:`children`},"default-expand-all":``,"check-strictly":``,class:`menu-tree`},null,8,[`data`])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-d0445cd4`]]);export{F as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,I as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,tn as g,x as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as v,l as y,s as b}from"./index-CPrkFf57.js";import{n as x,t as S}from"./usePageLoad-B1L6ImD-.js";import{r as C}from"./admin-list-dnDAubDa.js";import{r as w}from"./menus-C1RorO0e.js";import{a as T,i as E,n as D,r as O,t as k}from"./roles-CUNMD5Zg.js";var A={class:`list-page`},j={class:`page-header`},M={class:`list-filter-bar`},N={class:`table-row-actions`},P={class:`list-pager`},F=b(n({__name:`index`,setup(n){let b=p(!1),F=p([]),I=p({current_page:1,per_page:20,total:0}),L=p(``),R=p(1),z=p([]),B=p(!1),V=p(null),H=p({code:``,name:``,remark:``,sort:0,status:1}),U=p();function W(e){return e.map(e=>({id:e.id,label:e.title,children:e.children?.length?W(e.children):void 0}))}async function G(){b.value=!0;try{let e=await E({page:R.value,page_size:I.value.per_page,keyword:L.value||void 0});F.value=e.items,I.value=e.meta}finally{b.value=!1}}async function K(){z.value=W(await w())}async function q(){V.value=null,H.value={code:``,name:``,remark:``,sort:0,status:1},await K(),B.value=!0,await a(),U.value?.setCheckedKeys([],!1)}async function J(e){e.code===`super_admin`&&y.warning(`超级管理员角色请谨慎修改菜单分配`),V.value=e.id,await K();let t=await O(e.id);H.value={code:t.code,name:t.name,remark:t.remark||``,sort:t.sort,status:t.status},B.value=!0,await a(),U.value?.setCheckedKeys(t.menu_ids,!1)}async function Y(){let e=U.value?.getCheckedKeys(!1)||[];V.value?await T(V.value,{name:H.value.name,remark:H.value.remark||null,sort:H.value.sort,status:H.value.status,menu_ids:e}):await k({code:H.value.code,name:H.value.name,remark:H.value.remark||null,sort:H.value.sort,status:H.value.status,menu_ids:e}),y.success(`已保存`),B.value=!1,await G()}async function X(e){if(e.code===`super_admin`){y.warning(`不能删除预置超级管理员`);return}await v.confirm(`确定删除角色「${e.name}」?`,`提示`,{type:`warning`}),await D(e.id),y.success(`已删除`),await G()}function Z(){R.value=1,G()}function Q(){L.value=``,R.value=1,G()}return S(G),(n,a)=>{let p=l(`el-button`),v=l(`el-input`),y=l(`el-table-column`),S=l(`el-table`),w=l(`el-pagination`),T=l(`el-card`),E=l(`el-form-item`),D=l(`el-input-number`),O=l(`el-switch`),k=l(`el-form`),W=l(`el-tree`),K=l(`el-dialog`),$=s(`loading`);return i(),e(m,null,[d(`div`,A,[d(`div`,j,[r(x),r(p,{type:`primary`,size:`small`,class:`btn-create`,onClick:q},{default:u(()=>[...a[10]||=[o(`新增角色`,-1)]]),_:1})]),r(T,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,M,[r(v,{modelValue:L.value,"onUpdate:modelValue":a[0]||=e=>L.value=e,placeholder:`名称/编码`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(p,{type:`primary`,onClick:Z},{default:u(()=>[...a[11]||=[o(`搜索`,-1)]]),_:1}),r(p,{onClick:Q},{default:u(()=>[...a[12]||=[o(`重置`,-1)]]),_:1})]),h((i(),_(S,{data:F.value,"row-key":`id`},{default:u(()=>[r(y,{prop:`code`,label:`编码`,width:`160`}),r(y,{prop:`name`,label:`名称`,width:`160`}),r(y,{prop:`remark`,label:`备注`,"min-width":`200`,"show-overflow-tooltip":``}),r(y,{prop:`sort`,label:`排序`,width:`80`,align:`center`}),r(y,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},g(e.status===1?`启用`:`停用`),3)]),_:1}),r(y,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,N,[r(p,{class:`btn-action-primary`,onClick:t=>J(e)},{default:u(()=>[...a[13]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(p,{class:`btn-action-brand`,disabled:e.code===`super_admin`,onClick:t=>X(e)},{default:u(()=>[...a[14]||=[o(` 删除 `,-1)]]),_:1},8,[`disabled`,`onClick`])])]),_:1})]),_:1},8,[`data`])),[[$,b.value]]),d(`div`,P,[r(w,{"current-page":R.value,"onUpdate:currentPage":a[1]||=e=>R.value=e,layout:`total, prev, pager, next`,total:I.value.total,"page-size":I.value.per_page,onCurrentChange:G},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(K,{modelValue:B.value,"onUpdate:modelValue":a[9]||=e=>B.value=e,title:V.value?`编辑角色`:`新增角色`,width:`520px`},{footer:u(()=>[r(p,{onClick:a[8]||=e=>B.value=!1},{default:u(()=>[...a[15]||=[o(`取消`,-1)]]),_:1}),r(p,{type:`primary`,onClick:Y},{default:u(()=>[...a[16]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[a[17]||=d(`p`,{class:`hint`},[o(`当前阶段仅按`),d(`strong`,null,`菜单`),o(`控制侧栏与页面入口;接口暂不做权限码校验。`)],-1),r(k,{"label-width":`88px`},{default:u(()=>[V.value?(i(),_(E,{key:1,label:`编码`},{default:u(()=>[r(v,{modelValue:H.value.code,"onUpdate:modelValue":a[3]||=e=>H.value.code=e,disabled:``},null,8,[`modelValue`])]),_:1})):(i(),_(E,{key:0,label:`编码`},{default:u(()=>[r(v,{modelValue:H.value.code,"onUpdate:modelValue":a[2]||=e=>H.value.code=e,placeholder:`唯一编码`},null,8,[`modelValue`])]),_:1})),r(E,{label:`名称`},{default:u(()=>[r(v,{modelValue:H.value.name,"onUpdate:modelValue":a[4]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1}),r(E,{label:`备注`},{default:u(()=>[r(v,{modelValue:H.value.remark,"onUpdate:modelValue":a[5]||=e=>H.value.remark=e,type:`textarea`,rows:2},null,8,[`modelValue`])]),_:1}),r(E,{label:`排序`},{default:u(()=>[r(D,{modelValue:H.value.sort,"onUpdate:modelValue":a[6]||=e=>H.value.sort=e},null,8,[`modelValue`])]),_:1}),r(E,{label:`状态`},{default:u(()=>[r(O,{modelValue:H.value.status,"onUpdate:modelValue":a[7]||=e=>H.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1})]),_:1}),a[18]||=d(`h4`,{class:`tree-title`},`菜单分配`,-1),r(W,{ref_key:`menuRef`,ref:U,data:z.value,"show-checkbox":``,"node-key":`id`,props:{label:`label`,children:`children`},"default-expand-all":``,"check-strictly":``,class:`menu-tree`},null,8,[`data`])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-d0445cd4`]]);export{F as default}; \ No newline at end of file diff --git a/public/admin/assets/roles-BboDOvYZ.js b/public/admin/assets/roles-CUNMD5Zg.js similarity index 77% rename from public/admin/assets/roles-BboDOvYZ.js rename to public/admin/assets/roles-CUNMD5Zg.js index 5da9dd9..f7c7c26 100644 --- a/public/admin/assets/roles-BboDOvYZ.js +++ b/public/admin/assets/roles-CUNMD5Zg.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/roles`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/roles/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/roles`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/roles/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/roles/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/roles`,{params:t});return n.data}async function n(t){let{data:n}=await e.get(`/admin/v1/roles/${t}`);return n.data}async function r(t){let{data:n}=await e.post(`/admin/v1/roles`,t);return n.data}async function i(t,n){let{data:r}=await e.put(`/admin/v1/roles/${t}`,n);return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/roles/${t}`);return n}export{i as a,t as i,a as n,n as r,r as t}; \ No newline at end of file diff --git a/public/admin/assets/students-Ck-5WNi7.js b/public/admin/assets/students-Ck-5WNi7.js new file mode 100644 index 0000000..6daa86d --- /dev/null +++ b/public/admin/assets/students-Ck-5WNi7.js @@ -0,0 +1 @@ +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Y as s,at as c,b as l,d as te,ht as u,m as d,ot as ne,q as f,rt as p,tn as m,x as h,y as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as _,r as v,s as y}from"./index-CPrkFf57.js";import{n as re,t as b}from"./usePageLoad-B1L6ImD-.js";import{a as x}from"./dict-D-xskQUn.js";import{c as S,p as C}from"./teachers-BWvhNkqR.js";import{n as ie,o as w}from"./teacherStar-CbiOJu8v.js";import{r as T}from"./users-BIXJy9ht.js";import{r as E}from"./grid-members-DcRFykJ_.js";async function D(e){let{data:t}=await v.get(`/admin/v1/miniapp-users`,{params:e});return t.data}async function O(e){let{data:t}=await v.get(`/admin/v1/miniapp-users/${e}`);return t.data}async function k(e,t,n){let{data:r}=await v.patch(`/admin/v1/miniapp-users/${e}/bind-staff`,{admin_user_id:t,identity_type:n??null});return r.data}async function A(e,t){let{data:n}=await v.post(`/admin/v1/miniapp-users/${e}/convert-to-teacher`,t);return n.data}var ae={class:`list-page students-page`},oe={class:`page-header`},se={class:`list-filter-bar`},ce={key:1,class:`text-muted`},le={key:1,class:`text-muted`},ue={key:0,class:`status-badge status-published`},de={key:1,class:`status-badge status-unpublished`},fe={class:`table-row-actions`},pe={class:`list-pager`},me={key:0,class:`follow-teacher-summary`},he={key:0},ge={key:0,class:`follow-teacher-summary`},_e={key:0},ve={key:1},ye={key:2},be={class:`star-preview`},j=y(n({__name:`index`,setup(n){let v=u(!1),y=u([]),j=u({current_page:1,per_page:20,total:0}),M=u(1),N=u(``),P=u(``),F=u(``),I=u([]),L=u([]),R=u([]),z=u([]),B=u(!1),V=u(null),xe=u([]),H=u(!1),U=u(null),W=u(),G=u(),K=u(!1),q=u(!1),J=u(null),Y=u(!1),X=u({name:``,university_id:void 0,city:``,title:``,research_direction_ids:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),Z=g(()=>I.value.find(e=>e.value===`pending`)?.id);function Se(e){return e?.length?e.join(`、`):`—`}async function Ce(){let[e,t]=await Promise.all([T({page:1,page_size:200,status:1}),E({page:1,page_size:200,status:1})]),n=[];for(let t of e.items){let e=t.roles?.length?t.roles.map(e=>e.name).join(`、`):`后台账号`;n.push({id:t.id,label:`${t.real_name||t.username}(${e})`,role:`admin`})}for(let e of t.items)n.some(t=>t.id===e.id)||n.push({id:e.id,label:`${e.real_name||e.username}(网格员)`,role:`grid`});xe.value=n}async function we(){let[e,t,n,r]=await Promise.all([x(`teacher_level`),x(`teacher_status`),S(),C({page:1,page_size:500})]);I.value=e.items,L.value=t.items,R.value=n.research_directions,z.value=r.items,await Ce()}async function Q(){v.value=!0;try{let e={page:M.value,page_size:j.value.per_page};N.value&&(e.keyword=N.value),P.value!==``&&(e.converted=P.value),F.value!==``&&(e.identity_type=F.value);let t=await D(e);y.value=t.items,j.value=t.meta}finally{v.value=!1}}function Te(){N.value=``,P.value=``,F.value=``,M.value=1,Q()}function Ee(){M.value=1,Q()}async function De(e){V.value=await O(e.id),B.value=!0}function Oe(e){U.value=e,W.value=e.admin_user_id??void 0,G.value=e.identity_type??void 0,H.value=!0}async function ke(){if(U.value){K.value=!0;try{await k(U.value.id,W.value??null,G.value??null),_.success(`已保存`),H.value=!1,await Q()}finally{K.value=!1}}}function Ae(e){if(e.teacher_id){_.warning(`该学员已转入老师库`);return}J.value=e,X.value={name:e.name||``,university_id:void 0,city:``,title:e.job_title||``,research_direction_ids:[...e.research_direction_ids||[]],phone:e.mobile||``,email:``,star_level_dict_item_id:Z.value,status_dict_item_id:L.value.find(e=>e.value===`active`)?.id,next_follow_date:``},q.value=!0}function je(){let e=I.value.find(e=>e.id===X.value.star_level_dict_item_id);X.value.next_follow_date=w(e?.value)||``}function $(e){if(!e)return;let t=z.value.find(t=>t.id===e);t?.city&&!X.value.city&&(X.value.city=t.city)}p(()=>X.value.university_id,e=>$(e));async function Me(){if(!J.value)return;let e=X.value;if(!e.name.trim()){_.warning(`请填写姓名`);return}if(!e.university_id){_.warning(`请选择高校`);return}if(!e.city.trim()||!e.title.trim()){_.warning(`请填写城市与职称`);return}if(!e.research_direction_ids.length){_.warning(`请选择研究方向`);return}if(!e.status_dict_item_id){_.warning(`请选择状态`);return}Y.value=!0;try{let t=await A(J.value.id,{name:e.name.trim(),university_id:e.university_id,city:e.city.trim(),title:e.title.trim(),research_direction_ids:e.research_direction_ids,phone:e.phone||null,email:e.email||null,star_level_dict_item_id:e.star_level_dict_item_id??null,status_dict_item_id:e.status_dict_item_id,next_follow_date:e.next_follow_date||null,recalc_next_follow_date:!0});_.success(`已转入老师库(老师 ID:${t.teacher_id})`),q.value=!1,await Q()}finally{Y.value=!1}}return b(async()=>{await we(),await Q()}),(n,u)=>{let p=s(`el-input`),g=s(`el-option`),_=s(`el-select`),b=s(`el-button`),x=s(`el-table-column`),S=s(`el-tag`),C=s(`el-table`),w=s(`el-pagination`),T=s(`el-card`),E=s(`el-descriptions-item`),D=s(`el-descriptions`),O=s(`el-dialog`),k=s(`el-form-item`),A=s(`el-form`),Z=s(`el-col`),Ce=s(`el-date-picker`),we=s(`el-row`),$=ee(`loading`);return i(),e(`div`,ae,[l(`div`,oe,[r(re)]),r(T,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,se,[r(p,{modelValue:N.value,"onUpdate:modelValue":u[0]||=e=>N.value=e,class:`filter-search`,placeholder:`搜索姓名、手机号、公司…`,clearable:``,onKeyup:te(Ee,[`enter`])},null,8,[`modelValue`]),r(_,{modelValue:P.value,"onUpdate:modelValue":u[1]||=e=>P.value=e,placeholder:`转入状态`,clearable:``,class:`filter-select-wide`},{default:c(()=>[r(g,{label:`未转入老师库`,value:`0`}),r(g,{label:`已转入老师库`,value:`1`})]),_:1},8,[`modelValue`]),r(_,{modelValue:F.value,"onUpdate:modelValue":u[2]||=e=>F.value=e,placeholder:`身份`,clearable:``,class:`filter-select-wide`},{default:c(()=>[r(g,{label:`未设置身份`,value:`none`}),r(g,{label:`入孵用户`,value:`incubation`}),r(g,{label:`合作伙伴`,value:`partner`})]),_:1},8,[`modelValue`]),r(b,{type:`primary`,class:`btn-create`,onClick:Ee},{default:c(()=>[...u[25]||=[o(`搜索`,-1)]]),_:1}),r(b,{onClick:Te},{default:c(()=>[...u[26]||=[o(`重置`,-1)]]),_:1})]),ne((i(),h(C,{data:y.value,"row-key":`id`},{default:c(()=>[r(x,{prop:`name`,label:`姓名`,width:`100`}),r(x,{prop:`mobile`,label:`手机号`,width:`120`}),r(x,{prop:`company`,label:`公司`,"min-width":`140`,"show-overflow-tooltip":``}),r(x,{label:`研究方向`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(e.research_direction||`—`),1)]),_:1}),r(x,{label:`报名课程`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(Se(e.course_titles)),1)]),_:1}),r(x,{label:`报名活动`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(Se(e.activity_titles)),1)]),_:1}),r(x,{label:`身份`,width:`110`,align:`center`},{default:c(({row:t})=>[t.identity_label?(i(),h(S,{key:0,type:`success`,size:`small`},{default:c(()=>[o(m(t.identity_label),1)]),_:2},1024)):(i(),e(`span`,ce,`—`))]),_:1}),r(x,{label:`绑定账号`,"min-width":`140`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(e.admin_user_name||`—`),1)]),_:1}),r(x,{label:`后台角色`,width:`120`,align:`center`},{default:c(({row:t})=>[t.staff_role_label?(i(),h(S,{key:0,type:`warning`,size:`small`},{default:c(()=>[o(m(t.staff_role_label),1)]),_:2},1024)):(i(),e(`span`,le,`—`))]),_:1}),r(x,{label:`转入状态`,width:`110`,align:`center`},{default:c(({row:t})=>[t.teacher_id?(i(),e(`span`,ue,`已转入`)):(i(),e(`span`,de,`未转入`))]),_:1}),r(x,{label:`操作`,width:`260`,fixed:`right`},{default:c(({row:e})=>[l(`div`,fe,[r(b,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>De(e)},{default:c(()=>[...u[27]||=[o(` 详情 `,-1)]]),_:1},8,[`onClick`]),r(b,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>Oe(e)},{default:c(()=>[...u[28]||=[o(` 绑定身份 `,-1)]]),_:1},8,[`onClick`]),e.teacher_id?(i(),h(b,{key:1,size:`small`,class:`btn-action-secondary table-inline-btn`,disabled:``},{default:c(()=>[...u[30]||=[o(` 已转入 `,-1)]]),_:1})):(i(),h(b,{key:0,size:`small`,class:`btn-action-brand table-inline-btn`,onClick:t=>Ae(e)},{default:c(()=>[...u[29]||=[o(` 转入老师库 `,-1)]]),_:1},8,[`onClick`]))])]),_:1})]),_:1},8,[`data`])),[[$,v.value]]),l(`div`,pe,[r(w,{"current-page":M.value,"onUpdate:currentPage":u[3]||=e=>M.value=e,"page-size":j.value.per_page,total:j.value.total,layout:`total, prev, pager, next`,onCurrentChange:Q},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(O,{modelValue:B.value,"onUpdate:modelValue":u[6]||=e=>B.value=e,title:`学员详情`,width:`720px`,"destroy-on-close":``},{footer:c(()=>[r(b,{onClick:u[4]||=e=>B.value=!1},{default:c(()=>[...u[33]||=[o(`关闭`,-1)]]),_:1}),V.value&&!V.value.teacher_id?(i(),h(b,{key:0,type:`primary`,class:`btn-create`,onClick:u[5]||=e=>{B.value=!1,Ae(V.value)}},{default:c(()=>[...u[34]||=[o(` 转入老师库 `,-1)]]),_:1})):a(``,!0)]),default:c(()=>[V.value?(i(),e(d,{key:0},[r(D,{column:2,border:``,size:`small`},{default:c(()=>[r(E,{label:`姓名`},{default:c(()=>[o(m(V.value.name),1)]),_:1}),r(E,{label:`手机号`},{default:c(()=>[o(m(V.value.mobile||`—`),1)]),_:1}),r(E,{label:`公司`,span:2},{default:c(()=>[o(m(V.value.company||`—`),1)]),_:1}),r(E,{label:`职务`},{default:c(()=>[o(m(V.value.job_title||`—`),1)]),_:1}),r(E,{label:`研究方向`},{default:c(()=>[o(m(V.value.research_direction||`—`),1)]),_:1}),r(E,{label:`微信昵称`},{default:c(()=>[o(m(V.value.nickname||`—`),1)]),_:1}),r(E,{label:`转入老师`},{default:c(()=>[o(m(V.value.teacher_name?`${V.value.teacher_name}(ID ${V.value.teacher_id})`:`未转入`),1)]),_:1}),r(E,{label:`身份`},{default:c(()=>[o(m(V.value.identity_label||`—`),1)]),_:1}),r(E,{label:`绑定账号`},{default:c(()=>[o(m(V.value.admin_user_name||`—`),1)]),_:1}),r(E,{label:`后台角色`},{default:c(()=>[o(m(V.value.staff_role_label||`—`),1)]),_:1})]),_:1}),u[31]||=l(`h3`,{class:`sub-title`},`报名课程`,-1),r(C,{data:V.value.courses,size:`small`,"empty-text":`暂无报名`},{default:c(()=>[r(x,{prop:`title`,label:`课程`,"min-width":`180`}),r(x,{prop:`signed_up_at`,label:`报名时间`,width:`110`}),r(x,{prop:`company`,label:`报名时公司`,width:`140`,"show-overflow-tooltip":``})]),_:1},8,[`data`]),u[32]||=l(`h3`,{class:`sub-title`},`报名活动`,-1),r(C,{data:V.value.activities,size:`small`,"empty-text":`暂无报名`},{default:c(()=>[r(x,{prop:`title`,label:`活动`,"min-width":`180`}),r(x,{prop:`signed_up_at`,label:`报名时间`,width:`110`}),r(x,{prop:`company`,label:`报名时公司`,width:`140`,"show-overflow-tooltip":``})]),_:1},8,[`data`])],64)):a(``,!0)]),_:1},8,[`modelValue`]),r(O,{modelValue:H.value,"onUpdate:modelValue":u[10]||=e=>H.value=e,title:`绑定身份`,width:`520px`,"destroy-on-close":``,onClosed:u[11]||=e=>U.value=null},{footer:c(()=>[r(b,{onClick:u[9]||=e=>H.value=!1},{default:c(()=>[...u[37]||=[o(`取消`,-1)]]),_:1}),r(b,{type:`primary`,class:`btn-create`,loading:K.value,onClick:ke},{default:c(()=>[...u[38]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:c(()=>[U.value?(i(),e(`div`,me,[o(` 学员:`+m(U.value.name)+` `,1),U.value.mobile?(i(),e(`span`,he,` · `+m(U.value.mobile),1)):a(``,!0)])):a(``,!0),r(A,{"label-position":`top`,style:{"margin-top":`12px`}},{default:c(()=>[r(k,{label:`绑定后台账号`},{default:c(()=>[r(_,{modelValue:W.value,"onUpdate:modelValue":u[7]||=e=>W.value=e,clearable:``,filterable:``,placeholder:`选择管理员或网格员(可选)`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(xe.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),u[35]||=l(`div`,{class:`bind-hint`},`绑定后台账号后,小程序端按管理员权限访问`,-1)]),_:1}),r(k,{label:`身份`},{default:c(()=>[r(_,{modelValue:G.value,"onUpdate:modelValue":u[8]||=e=>G.value=e,clearable:``,placeholder:`选择入孵用户或合作伙伴(可选)`,style:{width:`100%`}},{default:c(()=>[r(g,{label:`入孵用户`,value:`incubation`}),r(g,{label:`合作伙伴`,value:`partner`})]),_:1},8,[`modelValue`]),u[36]||=l(`div`,{class:`bind-hint`},`身份与后台账号独立设置,互不影响`,-1)]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(O,{modelValue:q.value,"onUpdate:modelValue":u[23]||=e=>q.value=e,title:`转入老师库`,width:`960px`,"destroy-on-close":``,onClosed:u[24]||=e=>J.value=null},{footer:c(()=>[r(b,{onClick:u[22]||=e=>q.value=!1},{default:c(()=>[...u[39]||=[o(`取消`,-1)]]),_:1}),r(b,{type:`primary`,class:`btn-create`,loading:Y.value,onClick:Me},{default:c(()=>[...u[40]||=[o(` 确认转入老师库 `,-1)]]),_:1},8,[`loading`])]),default:c(()=>[J.value?(i(),e(`div`,ge,[o(` 学员:`+m(J.value.name)+` `,1),J.value.mobile?(i(),e(`span`,_e,` · `+m(J.value.mobile),1)):a(``,!0),J.value.company?(i(),e(`span`,ve,` · `+m(J.value.company),1)):a(``,!0),J.value.research_direction?(i(),e(`span`,ye,` · 研究方向:`+m(J.value.research_direction),1)):a(``,!0)])):a(``,!0),r(A,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:c(()=>[r(we,{gutter:12},{default:c(()=>[r(Z,{xs:24,md:4},{default:c(()=>[r(k,{label:`姓名`,required:``},{default:c(()=>[r(p,{modelValue:X.value.name,"onUpdate:modelValue":u[12]||=e=>X.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:8},{default:c(()=>[r(k,{label:`高校`,required:``},{default:c(()=>[r(_,{modelValue:X.value.university_id,"onUpdate:modelValue":u[13]||=e=>X.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(z.value,e=>(i(),h(g,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:4},{default:c(()=>[r(k,{label:`城市`,required:``},{default:c(()=>[r(p,{modelValue:X.value.city,"onUpdate:modelValue":u[14]||=e=>X.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:8},{default:c(()=>[r(k,{label:`职称`,required:``},{default:c(()=>[r(p,{modelValue:X.value.title,"onUpdate:modelValue":u[15]||=e=>X.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:8},{default:c(()=>[r(k,{label:`研究方向`,required:``},{default:c(()=>[r(_,{modelValue:X.value.research_direction_ids,"onUpdate:modelValue":u[16]||=e=>X.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择研究方向(可多选)`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(R.value,e=>(i(),h(g,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:6},{default:c(()=>[r(k,{label:`电话`},{default:c(()=>[r(p,{modelValue:X.value.phone,"onUpdate:modelValue":u[17]||=e=>X.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:6},{default:c(()=>[r(k,{label:`邮箱`},{default:c(()=>[r(p,{modelValue:X.value.email,"onUpdate:modelValue":u[18]||=e=>X.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:4},{default:c(()=>[r(k,{label:`星级`},{default:c(()=>[r(_,{modelValue:X.value.star_level_dict_item_id,"onUpdate:modelValue":u[19]||=e=>X.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:je},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l(`span`,be,m(t(ie)(I.value.find(e=>e.id===X.value.star_level_dict_item_id)?.value,I.value.find(e=>e.id===X.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),r(Z,{xs:24,md:6},{default:c(()=>[r(k,{label:`状态`,required:``},{default:c(()=>[r(_,{modelValue:X.value.status_dict_item_id,"onUpdate:modelValue":u[20]||=e=>X.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(L.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(Z,{xs:24,md:6},{default:c(()=>[r(k,{label:`下次跟进日期`},{default:c(()=>[r(Ce,{modelValue:X.value.next_follow_date,"onUpdate:modelValue":u[21]||=e=>X.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-b7849066`]]);export{j as default}; \ No newline at end of file diff --git a/public/admin/assets/students-CuiVVAUU.css b/public/admin/assets/students-CuiVVAUU.css deleted file mode 100644 index 5fbd717..0000000 --- a/public/admin/assets/students-CuiVVAUU.css +++ /dev/null @@ -1 +0,0 @@ -.follow-teacher-summary[data-v-db5a27f0]{border-left:4px solid var(--brand-primary,#244e98);background:#edf2fb;border-radius:6px;padding:10px 12px;font-size:14px}.sub-title[data-v-db5a27f0]{margin:16px 0 8px;font-size:15px;font-weight:600}.star-preview[data-v-db5a27f0]{color:#e6a23c;margin-top:4px;font-size:13px;display:block}.form-small[data-v-db5a27f0] .el-form-item__label{padding-bottom:4px;font-size:13px} diff --git a/public/admin/assets/students-DgIOG0sM.css b/public/admin/assets/students-DgIOG0sM.css new file mode 100644 index 0000000..bbb0ae5 --- /dev/null +++ b/public/admin/assets/students-DgIOG0sM.css @@ -0,0 +1 @@ +.follow-teacher-summary[data-v-b7849066]{border-left:4px solid var(--brand-primary,#244e98);background:#edf2fb;border-radius:6px;padding:10px 12px;font-size:14px}.sub-title[data-v-b7849066]{margin:16px 0 8px;font-size:15px;font-weight:600}.star-preview[data-v-b7849066]{color:#e6a23c;margin-top:4px;font-size:13px;display:block}.bind-hint[data-v-b7849066]{color:#909399;margin-top:6px;font-size:12px;line-height:1.5}.form-small[data-v-b7849066] .el-form-item__label{padding-bottom:4px;font-size:13px} diff --git a/public/admin/assets/students-DtOxgydU.js b/public/admin/assets/students-DtOxgydU.js deleted file mode 100644 index 3ab868f..0000000 --- a/public/admin/assets/students-DtOxgydU.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Y as s,at as c,b as l,d as te,ht as u,m as d,ot as ne,q as f,rt as p,tn as m,x as h,y as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as _,r as v,s as y}from"./index-DHoSHxJa.js";import{n as re,t as b}from"./usePageLoad-C9PEZ_Tm.js";import{a as x}from"./dict-D30aLydL.js";import{c as S,p as C}from"./teachers-DsTLUxF9.js";import{n as ie,o as w}from"./teacherStar-DhP_EdY6.js";import{r as T}from"./users-U4ei8OXs.js";import{r as E}from"./grid-members-D7SAtq1u.js";async function D(e){let{data:t}=await v.get(`/admin/v1/miniapp-users`,{params:e});return t.data}async function O(e){let{data:t}=await v.get(`/admin/v1/miniapp-users/${e}`);return t.data}async function k(e,t){let{data:n}=await v.patch(`/admin/v1/miniapp-users/${e}/bind-staff`,{admin_user_id:t});return n.data}async function A(e,t){let{data:n}=await v.post(`/admin/v1/miniapp-users/${e}/convert-to-teacher`,t);return n.data}var ae={class:`list-page students-page`},oe={class:`page-header`},se={class:`list-filter-bar`},ce={key:1,class:`text-muted`},le={key:0,class:`status-badge status-published`},ue={key:1,class:`status-badge status-unpublished`},de={class:`table-row-actions`},fe={class:`list-pager`},pe={key:0,class:`follow-teacher-summary`},me={key:0},he={key:0,class:`follow-teacher-summary`},ge={key:0},_e={key:1},ve={key:2},ye={class:`star-preview`},j=y(n({__name:`index`,setup(n){let v=u(!1),y=u([]),j=u({current_page:1,per_page:20,total:0}),M=u(1),N=u(``),P=u(``),F=u([]),I=u([]),L=u([]),R=u([]),z=u(!1),B=u(null),V=u([]),H=u(!1),U=u(null),W=u(),G=u(!1),K=u(!1),q=u(null),J=u(!1),Y=u({name:``,university_id:void 0,city:``,title:``,research_direction_ids:[],phone:``,email:``,star_level_dict_item_id:void 0,status_dict_item_id:void 0,next_follow_date:``}),X=g(()=>F.value.find(e=>e.value===`pending`)?.id);function Z(e){return e?.length?e.join(`、`):`—`}async function be(){let[e,t]=await Promise.all([T({page:1,page_size:200,status:1}),E({page:1,page_size:200,status:1})]),n=[];for(let t of e.items)n.push({id:t.id,label:`${t.real_name||t.username}(管理员)`,role:`admin`});for(let e of t.items)n.some(t=>t.id===e.id)||n.push({id:e.id,label:`${e.real_name||e.username}(网格员)`,role:`grid`});V.value=n}async function xe(){let[e,t,n,r]=await Promise.all([x(`teacher_level`),x(`teacher_status`),S(),C({page:1,page_size:500})]);F.value=e.items,I.value=t.items,L.value=n.research_directions,R.value=r.items,await be()}async function Q(){v.value=!0;try{let e={page:M.value,page_size:j.value.per_page};N.value&&(e.keyword=N.value),P.value!==``&&(e.converted=P.value);let t=await D(e);y.value=t.items,j.value=t.meta}finally{v.value=!1}}function Se(){N.value=``,P.value=``,M.value=1,Q()}function Ce(){M.value=1,Q()}async function we(e){B.value=await O(e.id),z.value=!0}function Te(e){U.value=e,W.value=e.admin_user_id??void 0,H.value=!0}async function Ee(){if(U.value){G.value=!0;try{await k(U.value.id,W.value??null),_.success(W.value?`已绑定后台账号`:`已解除绑定`),H.value=!1,await Q()}finally{G.value=!1}}}function De(e){if(e.teacher_id){_.warning(`该学员已转入老师库`);return}q.value=e,Y.value={name:e.name||``,university_id:void 0,city:``,title:e.job_title||``,research_direction_ids:[...e.research_direction_ids||[]],phone:e.mobile||``,email:``,star_level_dict_item_id:X.value,status_dict_item_id:I.value.find(e=>e.value===`active`)?.id,next_follow_date:``},K.value=!0}function Oe(){let e=F.value.find(e=>e.id===Y.value.star_level_dict_item_id);Y.value.next_follow_date=w(e?.value)||``}function $(e){if(!e)return;let t=R.value.find(t=>t.id===e);t?.city&&!Y.value.city&&(Y.value.city=t.city)}p(()=>Y.value.university_id,e=>$(e));async function ke(){if(!q.value)return;let e=Y.value;if(!e.name.trim()){_.warning(`请填写姓名`);return}if(!e.university_id){_.warning(`请选择高校`);return}if(!e.city.trim()||!e.title.trim()){_.warning(`请填写城市与职称`);return}if(!e.research_direction_ids.length){_.warning(`请选择研究方向`);return}if(!e.status_dict_item_id){_.warning(`请选择状态`);return}J.value=!0;try{let t=await A(q.value.id,{name:e.name.trim(),university_id:e.university_id,city:e.city.trim(),title:e.title.trim(),research_direction_ids:e.research_direction_ids,phone:e.phone||null,email:e.email||null,star_level_dict_item_id:e.star_level_dict_item_id??null,status_dict_item_id:e.status_dict_item_id,next_follow_date:e.next_follow_date||null,recalc_next_follow_date:!0});_.success(`已转入老师库(老师 ID:${t.teacher_id})`),K.value=!1,await Q()}finally{J.value=!1}}return b(async()=>{await xe(),await Q()}),(n,u)=>{let p=s(`el-input`),g=s(`el-option`),_=s(`el-select`),b=s(`el-button`),x=s(`el-table-column`),S=s(`el-tag`),C=s(`el-table`),w=s(`el-pagination`),T=s(`el-card`),E=s(`el-descriptions-item`),D=s(`el-descriptions`),O=s(`el-dialog`),k=s(`el-form-item`),A=s(`el-form`),X=s(`el-col`),be=s(`el-date-picker`),xe=s(`el-row`),$=ee(`loading`);return i(),e(`div`,ae,[l(`div`,oe,[r(re)]),r(T,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[l(`div`,se,[r(p,{modelValue:N.value,"onUpdate:modelValue":u[0]||=e=>N.value=e,class:`filter-search`,placeholder:`搜索姓名、手机号、公司…`,clearable:``,onKeyup:te(Ce,[`enter`])},null,8,[`modelValue`]),r(_,{modelValue:P.value,"onUpdate:modelValue":u[1]||=e=>P.value=e,placeholder:`转入状态`,clearable:``,class:`filter-select-wide`},{default:c(()=>[r(g,{label:`未转入老师库`,value:`0`}),r(g,{label:`已转入老师库`,value:`1`})]),_:1},8,[`modelValue`]),r(b,{type:`primary`,class:`btn-create`,onClick:Ce},{default:c(()=>[...u[23]||=[o(`搜索`,-1)]]),_:1}),r(b,{onClick:Se},{default:c(()=>[...u[24]||=[o(`重置`,-1)]]),_:1})]),ne((i(),h(C,{data:y.value,"row-key":`id`},{default:c(()=>[r(x,{prop:`name`,label:`姓名`,width:`100`}),r(x,{prop:`mobile`,label:`手机号`,width:`120`}),r(x,{prop:`company`,label:`公司`,"min-width":`140`,"show-overflow-tooltip":``}),r(x,{label:`研究方向`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(e.research_direction||`—`),1)]),_:1}),r(x,{label:`报名课程`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(Z(e.course_titles)),1)]),_:1}),r(x,{label:`报名活动`,"min-width":`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[o(m(Z(e.activity_titles)),1)]),_:1}),r(x,{label:`身份绑定`,width:`120`,align:`center`},{default:c(({row:t})=>[t.staff_role_label?(i(),h(S,{key:0,type:`warning`,size:`small`},{default:c(()=>[o(m(t.staff_role_label),1)]),_:2},1024)):(i(),e(`span`,ce,`—`))]),_:1}),r(x,{label:`转入状态`,width:`110`,align:`center`},{default:c(({row:t})=>[t.teacher_id?(i(),e(`span`,le,`已转入`)):(i(),e(`span`,ue,`未转入`))]),_:1}),r(x,{label:`操作`,width:`260`,fixed:`right`},{default:c(({row:e})=>[l(`div`,de,[r(b,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>we(e)},{default:c(()=>[...u[25]||=[o(` 详情 `,-1)]]),_:1},8,[`onClick`]),r(b,{size:`small`,class:`btn-action-secondary table-inline-btn`,onClick:t=>Te(e)},{default:c(()=>[...u[26]||=[o(` 绑定身份 `,-1)]]),_:1},8,[`onClick`]),e.teacher_id?(i(),h(b,{key:1,size:`small`,class:`btn-action-secondary table-inline-btn`,disabled:``},{default:c(()=>[...u[28]||=[o(` 已转入 `,-1)]]),_:1})):(i(),h(b,{key:0,size:`small`,class:`btn-action-brand table-inline-btn`,onClick:t=>De(e)},{default:c(()=>[...u[27]||=[o(` 转入老师库 `,-1)]]),_:1},8,[`onClick`]))])]),_:1})]),_:1},8,[`data`])),[[$,v.value]]),l(`div`,fe,[r(w,{"current-page":M.value,"onUpdate:currentPage":u[2]||=e=>M.value=e,"page-size":j.value.per_page,total:j.value.total,layout:`total, prev, pager, next`,onCurrentChange:Q},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(O,{modelValue:z.value,"onUpdate:modelValue":u[5]||=e=>z.value=e,title:`学员详情`,width:`720px`,"destroy-on-close":``},{footer:c(()=>[r(b,{onClick:u[3]||=e=>z.value=!1},{default:c(()=>[...u[31]||=[o(`关闭`,-1)]]),_:1}),B.value&&!B.value.teacher_id?(i(),h(b,{key:0,type:`primary`,class:`btn-create`,onClick:u[4]||=e=>{z.value=!1,De(B.value)}},{default:c(()=>[...u[32]||=[o(` 转入老师库 `,-1)]]),_:1})):a(``,!0)]),default:c(()=>[B.value?(i(),e(d,{key:0},[r(D,{column:2,border:``,size:`small`},{default:c(()=>[r(E,{label:`姓名`},{default:c(()=>[o(m(B.value.name),1)]),_:1}),r(E,{label:`手机号`},{default:c(()=>[o(m(B.value.mobile||`—`),1)]),_:1}),r(E,{label:`公司`,span:2},{default:c(()=>[o(m(B.value.company||`—`),1)]),_:1}),r(E,{label:`职务`},{default:c(()=>[o(m(B.value.job_title||`—`),1)]),_:1}),r(E,{label:`研究方向`},{default:c(()=>[o(m(B.value.research_direction||`—`),1)]),_:1}),r(E,{label:`微信昵称`},{default:c(()=>[o(m(B.value.nickname||`—`),1)]),_:1}),r(E,{label:`转入老师`},{default:c(()=>[o(m(B.value.teacher_name?`${B.value.teacher_name}(ID ${B.value.teacher_id})`:`未转入`),1)]),_:1}),r(E,{label:`身份绑定`},{default:c(()=>[o(m(B.value.staff_role_label?`${B.value.staff_role_label}(${B.value.admin_user_name||`—`})`:`未绑定`),1)]),_:1})]),_:1}),u[29]||=l(`h3`,{class:`sub-title`},`报名课程`,-1),r(C,{data:B.value.courses,size:`small`,"empty-text":`暂无报名`},{default:c(()=>[r(x,{prop:`title`,label:`课程`,"min-width":`180`}),r(x,{prop:`signed_up_at`,label:`报名时间`,width:`110`}),r(x,{prop:`company`,label:`报名时公司`,width:`140`,"show-overflow-tooltip":``})]),_:1},8,[`data`]),u[30]||=l(`h3`,{class:`sub-title`},`报名活动`,-1),r(C,{data:B.value.activities,size:`small`,"empty-text":`暂无报名`},{default:c(()=>[r(x,{prop:`title`,label:`活动`,"min-width":`180`}),r(x,{prop:`signed_up_at`,label:`报名时间`,width:`110`}),r(x,{prop:`company`,label:`报名时公司`,width:`140`,"show-overflow-tooltip":``})]),_:1},8,[`data`])],64)):a(``,!0)]),_:1},8,[`modelValue`]),r(O,{modelValue:H.value,"onUpdate:modelValue":u[8]||=e=>H.value=e,title:`绑定管理员/网格员`,width:`520px`,"destroy-on-close":``,onClosed:u[9]||=e=>U.value=null},{footer:c(()=>[r(b,{onClick:u[7]||=e=>H.value=!1},{default:c(()=>[...u[33]||=[o(`取消`,-1)]]),_:1}),r(b,{type:`primary`,class:`btn-create`,loading:G.value,onClick:Ee},{default:c(()=>[...u[34]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:c(()=>[U.value?(i(),e(`div`,pe,[o(` 学员:`+m(U.value.name)+` `,1),U.value.mobile?(i(),e(`span`,me,` · `+m(U.value.mobile),1)):a(``,!0)])):a(``,!0),r(A,{"label-position":`top`,style:{"margin-top":`12px`}},{default:c(()=>[r(k,{label:`绑定后台账号`},{default:c(()=>[r(_,{modelValue:W.value,"onUpdate:modelValue":u[6]||=e=>W.value=e,clearable:``,filterable:``,placeholder:`选择管理员或网格员`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(V.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(O,{modelValue:K.value,"onUpdate:modelValue":u[21]||=e=>K.value=e,title:`转入老师库`,width:`960px`,"destroy-on-close":``,onClosed:u[22]||=e=>q.value=null},{footer:c(()=>[r(b,{onClick:u[20]||=e=>K.value=!1},{default:c(()=>[...u[35]||=[o(`取消`,-1)]]),_:1}),r(b,{type:`primary`,class:`btn-create`,loading:J.value,onClick:ke},{default:c(()=>[...u[36]||=[o(` 确认转入老师库 `,-1)]]),_:1},8,[`loading`])]),default:c(()=>[q.value?(i(),e(`div`,he,[o(` 学员:`+m(q.value.name)+` `,1),q.value.mobile?(i(),e(`span`,ge,` · `+m(q.value.mobile),1)):a(``,!0),q.value.company?(i(),e(`span`,_e,` · `+m(q.value.company),1)):a(``,!0),q.value.research_direction?(i(),e(`span`,ve,` · 研究方向:`+m(q.value.research_direction),1)):a(``,!0)])):a(``,!0),r(A,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:c(()=>[r(xe,{gutter:12},{default:c(()=>[r(X,{xs:24,md:4},{default:c(()=>[r(k,{label:`姓名`,required:``},{default:c(()=>[r(p,{modelValue:Y.value.name,"onUpdate:modelValue":u[10]||=e=>Y.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:8},{default:c(()=>[r(k,{label:`高校`,required:``},{default:c(()=>[r(_,{modelValue:Y.value.university_id,"onUpdate:modelValue":u[11]||=e=>Y.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(R.value,e=>(i(),h(g,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:4},{default:c(()=>[r(k,{label:`城市`,required:``},{default:c(()=>[r(p,{modelValue:Y.value.city,"onUpdate:modelValue":u[12]||=e=>Y.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:8},{default:c(()=>[r(k,{label:`职称`,required:``},{default:c(()=>[r(p,{modelValue:Y.value.title,"onUpdate:modelValue":u[13]||=e=>Y.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:8},{default:c(()=>[r(k,{label:`研究方向`,required:``},{default:c(()=>[r(_,{modelValue:Y.value.research_direction_ids,"onUpdate:modelValue":u[14]||=e=>Y.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择研究方向(可多选)`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(L.value,e=>(i(),h(g,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:6},{default:c(()=>[r(k,{label:`电话`},{default:c(()=>[r(p,{modelValue:Y.value.phone,"onUpdate:modelValue":u[15]||=e=>Y.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:6},{default:c(()=>[r(k,{label:`邮箱`},{default:c(()=>[r(p,{modelValue:Y.value.email,"onUpdate:modelValue":u[16]||=e=>Y.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:4},{default:c(()=>[r(k,{label:`星级`},{default:c(()=>[r(_,{modelValue:Y.value.star_level_dict_item_id,"onUpdate:modelValue":u[17]||=e=>Y.value.star_level_dict_item_id=e,style:{width:`100%`},onChange:Oe},{default:c(()=>[(i(!0),e(d,null,f(F.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l(`span`,ye,m(t(ie)(F.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.value,F.value.find(e=>e.id===Y.value.star_level_dict_item_id)?.label)),1)]),_:1})]),_:1}),r(X,{xs:24,md:6},{default:c(()=>[r(k,{label:`状态`,required:``},{default:c(()=>[r(_,{modelValue:Y.value.status_dict_item_id,"onUpdate:modelValue":u[18]||=e=>Y.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:c(()=>[(i(!0),e(d,null,f(I.value,e=>(i(),h(g,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(X,{xs:24,md:6},{default:c(()=>[r(k,{label:`下次跟进日期`},{default:c(()=>[r(be,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":u[19]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-db5a27f0`]]);export{j as default}; \ No newline at end of file diff --git a/public/admin/assets/teacherStar-DhP_EdY6.js b/public/admin/assets/teacherStar-CbiOJu8v.js similarity index 100% rename from public/admin/assets/teacherStar-DhP_EdY6.js rename to public/admin/assets/teacherStar-CbiOJu8v.js diff --git a/public/admin/assets/teachers-DsTLUxF9.js b/public/admin/assets/teachers-BWvhNkqR.js similarity index 94% rename from public/admin/assets/teachers-DsTLUxF9.js rename to public/admin/assets/teachers-BWvhNkqR.js index bf676a7..2d808b3 100644 --- a/public/admin/assets/teachers-DsTLUxF9.js +++ b/public/admin/assets/teachers-BWvhNkqR.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(){let{data:t}=await e.get(`/admin/v1/teachers/filter-options`);return t.data}async function n(){let{data:t}=await e.get(`/admin/v1/teachers/stats`);return t.data}async function r(t){let{data:n}=await e.get(`/admin/v1/teachers`,{params:t});return n.data}async function i(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}`);return n.data}async function a(t){let{data:n}=await e.post(`/admin/v1/teachers`,t);return n.data}async function o(t,n){let{data:r}=await e.put(`/admin/v1/teachers/${t}`,n);return r}async function s(t){let{data:n}=await e.patch(`/admin/v1/teachers/batch-star`,t);return n.data}async function c(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}/follow-records`);return n.data.items}async function l(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/follow-records`,n);return r.data}async function u(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}/papers`);return n.data.items}async function d(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/papers`,n);return r.data}async function f(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/papers/link`,{paper_id:n});return r}async function p(t,n){let{data:r}=await e.delete(`/admin/v1/teachers/${t}/papers/${n}`);return r}async function m(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function h(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}export{h as a,t as c,n as d,r as f,o as h,d as i,c as l,f as m,a as n,p as o,m as p,l as r,i as s,s as t,u}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(){let{data:t}=await e.get(`/admin/v1/teachers/filter-options`);return t.data}async function n(){let{data:t}=await e.get(`/admin/v1/teachers/stats`);return t.data}async function r(t){let{data:n}=await e.get(`/admin/v1/teachers`,{params:t});return n.data}async function i(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}`);return n.data}async function a(t){let{data:n}=await e.post(`/admin/v1/teachers`,t);return n.data}async function o(t,n){let{data:r}=await e.put(`/admin/v1/teachers/${t}`,n);return r}async function s(t){let{data:n}=await e.patch(`/admin/v1/teachers/batch-star`,t);return n.data}async function c(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}/follow-records`);return n.data.items}async function l(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/follow-records`,n);return r.data}async function u(t){let{data:n}=await e.get(`/admin/v1/teachers/${t}/papers`);return n.data.items}async function d(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/papers`,n);return r.data}async function f(t,n){let{data:r}=await e.post(`/admin/v1/teachers/${t}/papers/link`,{paper_id:n});return r}async function p(t,n){let{data:r}=await e.delete(`/admin/v1/teachers/${t}/papers/${n}`);return r}async function m(t){let{data:n}=await e.get(`/admin/v1/universities`,{params:t});return n.data}async function h(t){let{data:n}=await e.post(`/admin/v1/universities`,t);return n.data}export{h as a,t as c,n as d,r as f,o as h,d as i,c as l,f as m,a as n,p as o,m as p,l as r,i as s,s as t,u}; \ No newline at end of file diff --git a/public/admin/assets/teachers-Dfwyz9ux.js b/public/admin/assets/teachers-BtQgJP3e.js similarity index 98% rename from public/admin/assets/teachers-Dfwyz9ux.js rename to public/admin/assets/teachers-BtQgJP3e.js index 3520008..43ba371 100644 --- a/public/admin/assets/teachers-Dfwyz9ux.js +++ b/public/admin/assets/teachers-BtQgJP3e.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,f as ne,ht as d,m as f,ot as re,q as p,rt as m,tn as h,x as g,y as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as v,s as y,t as b}from"./index-DHoSHxJa.js";import{n as ie,t as x}from"./usePageLoad-C9PEZ_Tm.js";import{a as S}from"./dict-D30aLydL.js";import{a as ae,c as oe,d as C,f as w,l as T,n as E,p as D,r as se,t as ce}from"./teachers-DsTLUxF9.js";import{r as le,t as ue}from"./TeacherDetailDialog-Df17GCYR.js";import{t as de}from"./demands-DG70Ky1b.js";import{a as fe,i as pe,n as me,o as he,r as ge,t as _e}from"./teacherStar-DhP_EdY6.js";import{r as ve}from"./users-U4ei8OXs.js";var ye={class:`list-page teachers-page`},be={class:`page-header`},xe={class:`page-header-actions`},Se={class:`talent-stat-grid`},Ce={class:`talent-stat-value`},we={class:`talent-stat-value is-dark`},Te={class:`talent-stat-value is-danger`},Ee={class:`talent-stat-value is-success`},De={class:`list-filter-bar`},Oe=[`onClick`],ke={key:1,class:`text-muted`},Ae=[`title`],je={class:`table-row-actions teachers-table-actions`},Me={class:`list-pager`},Ne={class:`uni-row`},Pe={class:`follow-teacher-summary`},Fe={class:`text-brand`},Ie={key:0,class:`names-muted`},Le={class:`batch-rule`},Re={key:0,class:`follow-teacher-summary`},ze={key:0,class:`follow-date-rule`},Be={key:0,class:`follow-teacher-summary`},Ve={class:`star-text`},He={class:`follow-history-list`},Ue={class:`follow-history-head`},We={class:`follow-history-title`},Ge={class:`follow-history-date`},Ke={class:`follow-history-body`},qe={class:`follow-history-row`},Je={class:`follow-history-row`},Ye={class:`follow-history-row`},Xe={class:`follow-history-row`},Ze={class:`follow-history-footer`},Qe=y(n({__name:`index`,setup(n){let y=b(),Qe=_(()=>y.isGridMember);function $e(){let e=y.user?.id;return e!=null&<.value.some(t=>t.id===e)?e:lt.value[0]?.id}let et=d(!1),tt=d(!1),nt=d(null),rt=d([]),it=d({current_page:1,per_page:20,total:0}),O=d(1),k=d({month_pending:0,month_followed:0,overdue:0,partners:0}),A=d(``),j=d(``),M=d(``),N=d(``),P=d(``),F=d(``),I=d(``),at=d([]),L=d([]),ot=d([]),st=d([]),ct=d([]),R=d([]),z=d([]),lt=d([]),ut=d([]),B=d([]),dt=_(()=>B.value.map(e=>e.id)),ft=_(()=>B.value.map(e=>e.name).join(`、`)),V=d(!1),H=d({name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,source_dict_item_id:void 0,star_level_dict_item_id:void 0,status_dict_item_id:void 0}),U=d(!1),pt=d(!1),W=d({name:``,city:``,province:``,longitude:``,latitude:``}),G=d(!1),K=d(),mt=_(()=>fe(L.value.find(e=>e.id===K.value)?.value)),q=d(!1),J=d(null),ht=_(()=>fe(J.value?.star_level_item?.value)),Y=d({subject:``,content:``,followed_at:new Date().toISOString().slice(0,10),follow_method_dict_item_id:void 0,urgency_dict_item_id:void 0,admin_user_id:void 0,next_follow_subject:``,next_follow_date:``}),gt=d(!1),X=d(null),_t=d([]),vt=d(!1),yt=d(null),Z=d(!1),bt=d(null),Q=d({type_dict_item_id:void 0,title:``,content:``}),xt=_(()=>at.value.find(e=>e.value===`manual`)?.id),St=_(()=>L.value.find(e=>e.value===`pending`)?.id);function Ct(e){if(!e)return;let t=R.value.find(t=>t.id===e);t?.city&&!H.value.city&&(H.value.city=t.city)}m(()=>H.value.university_id,e=>Ct(e));async function wt(){let[e,t,n,r,i,a,o,ee,s]=await Promise.all([S(`teacher_source`),S(`teacher_level`),S(`teacher_status`),S(`follow_method`),S(`follow_urgency`),S(`demand_type`),D({page:1,page_size:200}),ve({page:1,page_size:200,status:1}),oe()]);at.value=e.items,L.value=t.items,ot.value=n.items,st.value=r.items,ct.value=i.items,ut.value=a.items;let c=y.user?.grid_scope?.university_ids;R.value=c?.length?o.items.filter(e=>c.includes(e.id)):o.items;let l=y.user?.grid_scope?.research_direction_ids;z.value=l?.length?s.research_directions.filter(e=>l.includes(e.id)):s.research_directions,lt.value=ee.items.map(e=>({id:e.id,label:e.real_name||e.username}))}async function Tt(){k.value=await C()}async function $(){et.value=!0;try{let e={page:O.value,page_size:it.value.per_page};A.value&&(e.keyword=A.value),j.value!==``&&(e.source_dict_item_id=j.value),M.value!==``&&(e.star_level_dict_item_id=M.value),N.value!==``&&(e.status_dict_item_id=N.value),P.value!==``&&(e.university_id=P.value),F.value!==``&&(e.research_direction_id=F.value),I.value&&(e.stat_bucket=I.value);let t=await w(e);rt.value=t.items,it.value=t.meta,B.value=[],z.value=(await oe()).research_directions}finally{et.value=!1}}function Et(){A.value=``,j.value=``,M.value=``,N.value=``,P.value=``,F.value=``,I.value=``,O.value=1,$()}function Dt(){O.value=1,$()}function Ot(e){I.value=I.value===e?``:e,O.value=1,$()}function kt(e){nt.value=e.id,tt.value=!0}async function At(){z.value=(await oe()).research_directions}function jt(){W.value={name:``,city:H.value.city||``,province:``,longitude:``,latitude:``},U.value=!0}async function Mt(){let e=W.value;if(!e.name.trim()){v.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){v.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){v.warning(`经纬度须为有效数字`);return}pt.value=!0;try{let r=await ae({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});R.value.some(e=>e.id===r.id)||R.value.push(r),H.value.university_id=r.id,r.city&&(H.value.city=r.city),U.value=!1,v.success(`高校已创建`)}finally{pt.value=!1}}function Nt(e){let t=[],n=[];for(let r of e){if(typeof r==`number`){t.push(r);continue}let e=String(r).trim();e&&n.push(e)}return{ids:t,names:n}}async function Pt(){H.value={name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,source_dict_item_id:xt.value,star_level_dict_item_id:St.value,status_dict_item_id:ot.value.find(e=>e.value===`active`)?.id},await At(),V.value=!0}async function Ft(){let e=H.value;if(!e.name.trim()){v.warning(`请填写姓名`);return}let t=Nt(e.research_direction_values);if(!t.ids.length&&!t.names.length){v.warning(`请至少选择一个或新增研究方向`);return}if(!e.city.trim()){v.warning(`请填写城市`);return}if(!e.title.trim()){v.warning(`请填写职称`);return}if(!e.status_dict_item_id){v.warning(`请选择状态`);return}if(!e.university_id){v.warning(`请选择高校,或点击「新建高校」`);return}await E({name:e.name.trim(),university_id:e.university_id,city:e.city.trim(),title:e.title.trim(),department:e.department.trim()||null,bio:e.bio.trim()||null,research_direction_ids:t.ids,new_research_directions:t.names,phone:e.phone||null,email:e.email||null,source_dict_item_id:e.source_dict_item_id??xt.value,star_level_dict_item_id:e.star_level_dict_item_id??St.value,status_dict_item_id:e.status_dict_item_id,recalc_next_follow_date:!0}),v.success(`已录入`),V.value=!1,await Promise.all([$(),Tt()])}function It(){if(!B.value.length){v.warning(`请先在列表中勾选需要改星的老师`);return}K.value=void 0,G.value=!0}async function Lt(){if(!K.value){v.warning(`请选择目标星级`);return}await ce({ids:dt.value,star_level_dict_item_id:K.value,recalc_next_follow_date:!0}),v.success(`已批量更新`),G.value=!1,await Promise.all([$(),Tt()])}function Rt(e){J.value=e,Y.value={subject:``,content:``,followed_at:new Date().toISOString().slice(0,10),follow_method_dict_item_id:st.value[0]?.id,urgency_dict_item_id:ct.value.find(e=>e.value===`normal`)?.id,admin_user_id:$e(),next_follow_subject:``,next_follow_date:he(e.star_level_item?.value)||``},q.value=!0}async function zt(){let e=Y.value;if(J.value){if(!e.subject.trim()||!e.next_follow_subject.trim()||!e.next_follow_date){v.warning(`请填写必填项`);return}if(!e.follow_method_dict_item_id||!e.urgency_dict_item_id||!e.admin_user_id){v.warning(`请填写跟进方式、紧急程度与跟进人员`);return}await se(J.value.id,{...e}),v.success(`已保存跟进`),q.value=!1,await Promise.all([$(),Tt()])}}async function Bt(e){X.value=e,_t.value=await T(e.id),gt.value=!0}function Vt(e){yt.value=e,vt.value=!0}function Ht(e){bt.value=e,Q.value={type_dict_item_id:void 0,title:``,content:``},Z.value=!0}async function Ut(){if(bt.value){if(!Q.value.type_dict_item_id||!Q.value.title.trim()||!Q.value.content.trim()){v.warning(`请填写需求类型、标题与详细描述`);return}await de({teacher_id:bt.value.id,type_dict_item_id:Q.value.type_dict_item_id,title:Q.value.title.trim(),content:Q.value.content.trim()}),v.success(`已发布需求`),Z.value=!1}}return x(async()=>{await wt(),await Promise.all([Tt(),$()])}),(n,d)=>{let m=c(`el-button`),_=c(`el-input`),v=c(`el-option`),y=c(`el-select`),b=c(`el-table-column`),x=c(`el-tag`),S=c(`el-table`),ae=c(`el-pagination`),oe=c(`el-card`),C=c(`el-form-item`),w=c(`el-col`),T=c(`el-row`),E=c(`el-form`),D=c(`el-dialog`),se=c(`el-alert`),ce=c(`el-date-picker`),de=c(`el-empty`),fe=ee(`loading`);return i(),e(`div`,ye,[u(`div`,be,[r(ie),u(`div`,xe,[r(m,{class:`btn-action-secondary`,size:`small`,onClick:It},{default:l(()=>[...d[54]||=[o(`批量改星`,-1)]]),_:1}),Qe.value?a(``,!0):(i(),g(m,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Pt},{default:l(()=>[...d[55]||=[o(` 手动录入 `,-1)]]),_:1}))])]),u(`div`,Se,[u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`month_pending`}]),onClick:d[0]||=e=>Ot(`month_pending`)},[d[56]||=u(`div`,{class:`talent-stat-label`},`本月待跟进数量`,-1),u(`div`,Ce,h(k.value.month_pending),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`month_followed`}]),onClick:d[1]||=e=>Ot(`month_followed`)},[d[57]||=u(`div`,{class:`talent-stat-label`},`本月已跟进`,-1),u(`div`,we,h(k.value.month_followed),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`overdue`}]),onClick:d[2]||=e=>Ot(`overdue`)},[d[58]||=u(`div`,{class:`talent-stat-label`},`已逾期`,-1),u(`div`,Te,h(k.value.overdue),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`partner`}]),onClick:d[3]||=e=>Ot(`partner`)},[d[59]||=u(`div`,{class:`talent-stat-label`},`转化伙伴数量`,-1),u(`div`,Ee,h(k.value.partners),1)],2)]),r(oe,{shadow:`never`,class:`admin-list-card teachers-list-card`},{default:l(()=>[u(`div`,De,[r(_,{modelValue:A.value,"onUpdate:modelValue":d[4]||=e=>A.value=e,class:`filter-search teachers-filter-search`,placeholder:`搜索姓名、高校、学院、简介、研究方向…`,clearable:``,onKeyup:te(Dt,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:j.value,"onUpdate:modelValue":d[5]||=e=>j.value=e,class:`filter-source`,placeholder:`来源`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(at.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:M.value,"onUpdate:modelValue":d[6]||=e=>M.value=e,class:`filter-stars`,placeholder:`星级`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:N.value,"onUpdate:modelValue":d[7]||=e=>N.value=e,class:`filter-status`,placeholder:`状态`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(ot.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:P.value,"onUpdate:modelValue":d[8]||=e=>P.value=e,class:`filter-school`,placeholder:`学校`,clearable:``,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:F.value,"onUpdate:modelValue":d[9]||=e=>F.value=e,class:`filter-direction`,placeholder:`研究方向`,clearable:``,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(m,{type:`primary`,onClick:Dt},{default:l(()=>[...d[60]||=[o(`搜索`,-1)]]),_:1}),r(m,{onClick:Et},{default:l(()=>[...d[61]||=[o(`重置`,-1)]]),_:1})]),re((i(),g(S,{data:rt.value,"row-key":`id`,onSelectionChange:d[10]||=e=>B.value=e},{default:l(()=>[r(b,{type:`selection`,width:`44`}),r(b,{prop:`name`,label:`姓名`,width:`108`},{default:l(({row:e})=>[u(`a`,{class:`name-link`,href:`#`,onClick:ne(t=>kt(e),[`prevent`])},h(e.name),9,Oe),e.is_overdue?(i(),g(x,{key:0,type:`danger`,size:`small`,class:`tag-overdue`},{default:l(()=>[...d[62]||=[o(`逾期`,-1)]]),_:1})):a(``,!0)]),_:1}),r(b,{prop:`university_name`,label:`高校`,"min-width":`130`}),r(b,{prop:`department`,label:`所属学院`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{prop:`title`,label:`职称`,width:`96`}),r(b,{label:`研究方向`,"min-width":`160`},{default:l(({row:t})=>[t.research_directions?.length?(i(!0),e(f,{key:0},p(t.research_directions,e=>(i(),g(x,{key:e.id,size:`small`,type:`info`,style:{margin:`2px 4px 2px 0`}},{default:l(()=>[o(h(e.name),1)]),_:2},1024))),128)):(i(),e(`span`,ke,`—`))]),_:1}),r(b,{label:`来源`,width:`108`,align:`center`},{default:l(({row:e})=>[r(x,{type:t(_e)(e.source_item?.value),size:`small`,effect:`dark`,class:s([`source-tag`,{"source-tag-manual":e.source_item?.value===`manual`}])},{default:l(()=>[o(h(e.source_item?.label||`—`),1)]),_:2},1032,[`type`,`class`])]),_:1}),r(b,{label:`星级`,width:`108`},{default:l(({row:e})=>[u(`span`,{class:`star-text`,title:e.star_level_item?.label||``},h(t(me)(e.star_level_item?.value,e.star_level_item?.label)),9,Ae)]),_:1}),r(b,{label:`状态`,width:`100`},{default:l(({row:e})=>[r(x,{type:t(ge)(e.status_item?.value),size:`small`,effect:`dark`},{default:l(()=>[o(h(e.status_item?.label||`—`),1)]),_:2},1032,[`type`])]),_:1}),r(b,{label:`跟进记录`,width:`96`,align:`center`},{default:l(({row:e})=>[r(m,{size:`small`,class:`btn-action-secondary teachers-table-btn`,onClick:t=>Bt(e)},{default:l(()=>[o(h(e.follow_records_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1}),r(b,{label:`操作`,width:`176`,fixed:`right`},{default:l(({row:e})=>[u(`div`,je,[r(m,{size:`small`,class:`btn-action-info teachers-table-btn`,onClick:t=>Rt(e)},{default:l(()=>[...d[63]||=[o(` 跟进 `,-1)]]),_:1},8,[`onClick`]),r(m,{size:`small`,class:`btn-action-primary teachers-table-btn`,onClick:t=>Vt(e)},{default:l(()=>[...d[64]||=[o(` 论文 `,-1)]]),_:1},8,[`onClick`]),e.is_partner||e.status_item?.value===`partner`?(i(),g(m,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn teachers-table-btn`,onClick:t=>Ht(e)},{default:l(()=>[...d[65]||=[o(` 需求 `,-1)]]),_:1},8,[`onClick`])):a(``,!0),r(m,{size:`small`,class:`btn-action-primary teachers-table-btn`,onClick:t=>kt(e)},{default:l(()=>[...d[66]||=[o(` 编辑 `,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[fe,et.value]]),u(`div`,Me,[r(ae,{"current-page":O.value,"onUpdate:currentPage":d[11]||=e=>O.value=e,"page-size":it.value.per_page,total:it.value.total,layout:`total, prev, pager, next`,onCurrentChange:$},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(D,{modelValue:V.value,"onUpdate:modelValue":d[24]||=e=>V.value=e,title:`手动录入老师`,width:`960px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[23]||=e=>V.value=!1},{default:l(()=>[...d[68]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:Ft},{default:l(()=>[...d[69]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`姓名`,required:``},{default:l(()=>[r(_,{modelValue:H.value.name,"onUpdate:modelValue":d[12]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`高校`,required:``},{default:l(()=>[u(`div`,Ne,[r(y,{modelValue:H.value.university_id,"onUpdate:modelValue":d[13]||=e=>H.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),Qe.value?a(``,!0):(i(),g(m,{key:0,type:`primary`,size:`small`,class:`btn-create teachers-primary-btn`,onClick:jt},{default:l(()=>[...d[67]||=[o(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`城市`,required:``},{default:l(()=>[r(_,{modelValue:H.value.city,"onUpdate:modelValue":d[14]||=e=>H.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`职称`,required:``},{default:l(()=>[r(_,{modelValue:H.value.title,"onUpdate:modelValue":d[15]||=e=>H.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`所属学院`},{default:l(()=>[r(_,{modelValue:H.value.department,"onUpdate:modelValue":d[16]||=e=>H.value.department=e,placeholder:`如:计算机科学与技术学院`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:16},{default:l(()=>[r(C,{label:`个人简介`},{default:l(()=>[r(_,{modelValue:H.value.bio,"onUpdate:modelValue":d[17]||=e=>H.value.bio=e,type:`textarea`,rows:3,placeholder:`老师个人简介`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`研究方向`,required:``},{default:l(()=>[r(y,{modelValue:H.value.research_direction_values,"onUpdate:modelValue":d[18]||=e=>H.value.research_direction_values=e,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择或输入研究方向`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`电话`},{default:l(()=>[r(_,{modelValue:H.value.phone,"onUpdate:modelValue":d[19]||=e=>H.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`邮箱`},{default:l(()=>[r(_,{modelValue:H.value.email,"onUpdate:modelValue":d[20]||=e=>H.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`星级`},{default:l(()=>[r(y,{modelValue:H.value.star_level_dict_item_id,"onUpdate:modelValue":d[21]||=e=>H.value.star_level_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`状态`,required:``},{default:l(()=>[r(y,{modelValue:H.value.status_dict_item_id,"onUpdate:modelValue":d[22]||=e=>H.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ot.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:U.value,"onUpdate:modelValue":d[31]||=e=>U.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[30]||=e=>U.value=!1},{default:l(()=>[...d[70]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,loading:pt.value,onClick:Mt},{default:l(()=>[...d[71]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(C,{label:`高校名称`,required:``},{default:l(()=>[r(_,{modelValue:W.value.name,"onUpdate:modelValue":d[25]||=e=>W.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`经度`,required:``},{default:l(()=>[r(_,{modelValue:W.value.longitude,"onUpdate:modelValue":d[26]||=e=>W.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`纬度`,required:``},{default:l(()=>[r(_,{modelValue:W.value.latitude,"onUpdate:modelValue":d[27]||=e=>W.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`省份`},{default:l(()=>[r(_,{modelValue:W.value.province,"onUpdate:modelValue":d[28]||=e=>W.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`城市`},{default:l(()=>[r(_,{modelValue:W.value.city,"onUpdate:modelValue":d[29]||=e=>W.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:G.value,"onUpdate:modelValue":d[34]||=e=>G.value=e,title:`批量修改星级`,width:`480px`},{footer:l(()=>[r(m,{onClick:d[33]||=e=>G.value=!1},{default:l(()=>[...d[74]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,disabled:!B.value.length,onClick:Lt},{default:l(()=>[...d[75]||=[o(` 保存并重算跟进日 `,-1)]]),_:1},8,[`disabled`])]),default:l(()=>[B.value.length?(i(),e(f,{key:1},[u(`div`,Pe,[d[72]||=o(` 已选择 `,-1),u(`span`,Fe,h(B.value.length),1),d[73]||=o(` 位老师 `,-1),ft.value?(i(),e(`span`,Ie,h(ft.value),1)):a(``,!0)]),r(E,{"label-position":`top`,style:{"margin-top":`12px`}},{default:l(()=>[r(C,{label:`目标星级`,required:``},{default:l(()=>[r(y,{modelValue:K.value,"onUpdate:modelValue":d[32]||=e=>K.value=e,placeholder:`请选择目标星级`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),u(`p`,Le,h(mt.value),1)]),_:1})],64)):(i(),g(se,{key:0,type:`warning`,closable:!1,title:`请先在列表中勾选需要改星的老师。`,"show-icon":``}))]),_:1},8,[`modelValue`]),r(D,{modelValue:q.value,"onUpdate:modelValue":d[44]||=e=>q.value=e,title:`新增跟进`,width:`720px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[43]||=e=>q.value=!1},{default:l(()=>[...d[76]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:zt},{default:l(()=>[...d[77]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[J.value?(i(),e(`div`,Re,h(J.value.name)+` · `+h(J.value.university_name)+` · `+h(J.value.title),1)):a(``,!0),r(E,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{span:10},{default:l(()=>[r(C,{label:`跟进主题`,required:``},{default:l(()=>[r(_,{modelValue:Y.value.subject,"onUpdate:modelValue":d[35]||=e=>Y.value.subject=e,placeholder:`请输入跟进主题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`跟进日期`,required:``},{default:l(()=>[r(ce,{modelValue:Y.value.followed_at,"onUpdate:modelValue":d[36]||=e=>Y.value.followed_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:4},{default:l(()=>[r(C,{label:`跟进方式`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.follow_method_dict_item_id,"onUpdate:modelValue":d[37]||=e=>Y.value.follow_method_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(st.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:4},{default:l(()=>[r(C,{label:`跟进人员`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.admin_user_id,"onUpdate:modelValue":d[38]||=e=>Y.value.admin_user_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(lt.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`跟进记录`},{default:l(()=>[r(_,{modelValue:Y.value.content,"onUpdate:modelValue":d[39]||=e=>Y.value.content=e,type:`textarea`,rows:4,placeholder:`请输入跟进内容`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`下次跟进主题`,required:``},{default:l(()=>[r(_,{modelValue:Y.value.next_follow_subject,"onUpdate:modelValue":d[40]||=e=>Y.value.next_follow_subject=e,placeholder:`请输入下次跟进主题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`下次跟进日期`,required:``},{default:l(()=>[r(ce,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":d[41]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`]),ht.value?(i(),e(`p`,ze,h(ht.value),1)):a(``,!0)]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`紧急程度`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.urgency_dict_item_id,"onUpdate:modelValue":d[42]||=e=>Y.value.urgency_dict_item_id=e,placeholder:`请选择紧急程度`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ct.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:gt.value,"onUpdate:modelValue":d[46]||=e=>gt.value=e,title:`跟进记录`,width:`960px`},{footer:l(()=>[r(m,{onClick:d[45]||=e=>gt.value=!1},{default:l(()=>[...d[86]||=[o(`关闭`,-1)]]),_:1})]),default:l(()=>[X.value?(i(),e(`div`,Be,[u(`span`,null,h(X.value.name),1),d[78]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,null,h(X.value.university_name),1),d[79]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,null,h(X.value.title),1),d[80]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,Ve,h(t(me)(X.value.star_level_item?.value,X.value.star_level_item?.label)),1)])):a(``,!0),u(`div`,He,[(i(!0),e(f,null,p(_t.value,n=>(i(),e(`div`,{key:n.id,class:`follow-history-card`},[u(`div`,Ue,[u(`div`,null,[u(`span`,We,h(n.subject),1),u(`span`,Ge,h(n.followed_at),1)]),n.urgency_item?(i(),g(x,{key:0,type:t(pe)(n.urgency_item.value),size:`small`},{default:l(()=>[o(h(n.urgency_item.label),1)]),_:2},1032,[`type`])):a(``,!0)]),u(`div`,Ke,[u(`div`,qe,[d[81]||=u(`span`,null,`跟进主题:`,-1),u(`div`,null,h(n.subject),1)]),u(`div`,Je,[d[82]||=u(`span`,null,`跟进方式:`,-1),u(`div`,null,h(n.follow_method_item?.label||`—`),1)]),u(`div`,Ye,[d[83]||=u(`span`,null,`跟进记录:`,-1),u(`div`,null,h(n.content||`—`),1)]),u(`div`,Xe,[d[85]||=u(`span`,null,`下次跟进:`,-1),u(`div`,null,[o(`主题:`+h(n.next_follow_subject),1),d[84]||=u(`br`,null,null,-1),o(`日期:`+h(n.next_follow_date),1)])])]),u(`div`,Ze,`跟进人:`+h(n.operator_name||`—`),1)]))),128)),_t.value.length?a(``,!0):(i(),g(de,{key:0,description:`暂无跟进记录`}))])]),_:1},8,[`modelValue`]),r(le,{modelValue:vt.value,"onUpdate:modelValue":d[47]||=e=>vt.value=e,"teacher-id":yt.value?.id??null,"default-authors":yt.value?.name,"default-school-name":yt.value?.university_name||``,onSaved:$},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),r(D,{modelValue:Z.value,"onUpdate:modelValue":d[52]||=e=>Z.value=e,title:`发布需求`,width:`640px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[51]||=e=>Z.value=!1},{default:l(()=>[...d[87]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:Ut},{default:l(()=>[...d[88]||=[o(`发布`,-1)]]),_:1})]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`关联老师`},{default:l(()=>[r(_,{"model-value":bt.value?.name||``,readonly:``},null,8,[`model-value`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`需求类型`,required:``},{default:l(()=>[r(y,{modelValue:Q.value.type_dict_item_id,"onUpdate:modelValue":d[48]||=e=>Q.value.type_dict_item_id=e,placeholder:`请选择需求类型`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ut.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`标题`,required:``},{default:l(()=>[r(_,{modelValue:Q.value.title,"onUpdate:modelValue":d[49]||=e=>Q.value.title=e,placeholder:`请输入需求标题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`详细描述`,required:``},{default:l(()=>[r(_,{modelValue:Q.value.content,"onUpdate:modelValue":d[50]||=e=>Q.value.content=e,type:`textarea`,rows:5,placeholder:`请描述需求背景、目标、期望资源或合作方式`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(ue,{modelValue:tt.value,"onUpdate:modelValue":d[53]||=e=>tt.value=e,"teacher-id":nt.value,onSaved:$},null,8,[`modelValue`,`teacher-id`])])}}}),[[`__scopeId`,`data-v-38f7d6f8`]]);export{Qe as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as ee,Xt as s,Y as c,at as l,b as u,d as te,f as ne,ht as d,m as f,ot as re,q as p,rt as m,tn as h,x as g,y as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as v,s as y,t as b}from"./index-CPrkFf57.js";import{n as ie,t as x}from"./usePageLoad-B1L6ImD-.js";import{a as S}from"./dict-D-xskQUn.js";import{a as ae,c as oe,d as C,f as w,l as T,n as E,p as D,r as se,t as ce}from"./teachers-BWvhNkqR.js";import{r as le,t as ue}from"./TeacherDetailDialog-BwE7UVMD.js";import{t as de}from"./demands-DeUMyXK9.js";import{a as fe,i as pe,n as me,o as he,r as ge,t as _e}from"./teacherStar-CbiOJu8v.js";import{r as ve}from"./users-BIXJy9ht.js";var ye={class:`list-page teachers-page`},be={class:`page-header`},xe={class:`page-header-actions`},Se={class:`talent-stat-grid`},Ce={class:`talent-stat-value`},we={class:`talent-stat-value is-dark`},Te={class:`talent-stat-value is-danger`},Ee={class:`talent-stat-value is-success`},De={class:`list-filter-bar`},Oe=[`onClick`],ke={key:1,class:`text-muted`},Ae=[`title`],je={class:`table-row-actions teachers-table-actions`},Me={class:`list-pager`},Ne={class:`uni-row`},Pe={class:`follow-teacher-summary`},Fe={class:`text-brand`},Ie={key:0,class:`names-muted`},Le={class:`batch-rule`},Re={key:0,class:`follow-teacher-summary`},ze={key:0,class:`follow-date-rule`},Be={key:0,class:`follow-teacher-summary`},Ve={class:`star-text`},He={class:`follow-history-list`},Ue={class:`follow-history-head`},We={class:`follow-history-title`},Ge={class:`follow-history-date`},Ke={class:`follow-history-body`},qe={class:`follow-history-row`},Je={class:`follow-history-row`},Ye={class:`follow-history-row`},Xe={class:`follow-history-row`},Ze={class:`follow-history-footer`},Qe=y(n({__name:`index`,setup(n){let y=b(),Qe=_(()=>y.isGridMember);function $e(){let e=y.user?.id;return e!=null&<.value.some(t=>t.id===e)?e:lt.value[0]?.id}let et=d(!1),tt=d(!1),nt=d(null),rt=d([]),it=d({current_page:1,per_page:20,total:0}),O=d(1),k=d({month_pending:0,month_followed:0,overdue:0,partners:0}),A=d(``),j=d(``),M=d(``),N=d(``),P=d(``),F=d(``),I=d(``),at=d([]),L=d([]),ot=d([]),st=d([]),ct=d([]),R=d([]),z=d([]),lt=d([]),ut=d([]),B=d([]),dt=_(()=>B.value.map(e=>e.id)),ft=_(()=>B.value.map(e=>e.name).join(`、`)),V=d(!1),H=d({name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,source_dict_item_id:void 0,star_level_dict_item_id:void 0,status_dict_item_id:void 0}),U=d(!1),pt=d(!1),W=d({name:``,city:``,province:``,longitude:``,latitude:``}),G=d(!1),K=d(),mt=_(()=>fe(L.value.find(e=>e.id===K.value)?.value)),q=d(!1),J=d(null),ht=_(()=>fe(J.value?.star_level_item?.value)),Y=d({subject:``,content:``,followed_at:new Date().toISOString().slice(0,10),follow_method_dict_item_id:void 0,urgency_dict_item_id:void 0,admin_user_id:void 0,next_follow_subject:``,next_follow_date:``}),gt=d(!1),X=d(null),_t=d([]),vt=d(!1),yt=d(null),Z=d(!1),bt=d(null),Q=d({type_dict_item_id:void 0,title:``,content:``}),xt=_(()=>at.value.find(e=>e.value===`manual`)?.id),St=_(()=>L.value.find(e=>e.value===`pending`)?.id);function Ct(e){if(!e)return;let t=R.value.find(t=>t.id===e);t?.city&&!H.value.city&&(H.value.city=t.city)}m(()=>H.value.university_id,e=>Ct(e));async function wt(){let[e,t,n,r,i,a,o,ee,s]=await Promise.all([S(`teacher_source`),S(`teacher_level`),S(`teacher_status`),S(`follow_method`),S(`follow_urgency`),S(`demand_type`),D({page:1,page_size:200}),ve({page:1,page_size:200,status:1}),oe()]);at.value=e.items,L.value=t.items,ot.value=n.items,st.value=r.items,ct.value=i.items,ut.value=a.items;let c=y.user?.grid_scope?.university_ids;R.value=c?.length?o.items.filter(e=>c.includes(e.id)):o.items;let l=y.user?.grid_scope?.research_direction_ids;z.value=l?.length?s.research_directions.filter(e=>l.includes(e.id)):s.research_directions,lt.value=ee.items.map(e=>({id:e.id,label:e.real_name||e.username}))}async function Tt(){k.value=await C()}async function $(){et.value=!0;try{let e={page:O.value,page_size:it.value.per_page};A.value&&(e.keyword=A.value),j.value!==``&&(e.source_dict_item_id=j.value),M.value!==``&&(e.star_level_dict_item_id=M.value),N.value!==``&&(e.status_dict_item_id=N.value),P.value!==``&&(e.university_id=P.value),F.value!==``&&(e.research_direction_id=F.value),I.value&&(e.stat_bucket=I.value);let t=await w(e);rt.value=t.items,it.value=t.meta,B.value=[],z.value=(await oe()).research_directions}finally{et.value=!1}}function Et(){A.value=``,j.value=``,M.value=``,N.value=``,P.value=``,F.value=``,I.value=``,O.value=1,$()}function Dt(){O.value=1,$()}function Ot(e){I.value=I.value===e?``:e,O.value=1,$()}function kt(e){nt.value=e.id,tt.value=!0}async function At(){z.value=(await oe()).research_directions}function jt(){W.value={name:``,city:H.value.city||``,province:``,longitude:``,latitude:``},U.value=!0}async function Mt(){let e=W.value;if(!e.name.trim()){v.warning(`请填写高校名称`);return}if(!e.longitude.trim()||!e.latitude.trim()){v.warning(`请填写经度与纬度`);return}let t=Number(e.longitude),n=Number(e.latitude);if(Number.isNaN(t)||Number.isNaN(n)){v.warning(`经纬度须为有效数字`);return}pt.value=!0;try{let r=await ae({name:e.name.trim(),city:e.city.trim()||null,province:e.province.trim()||null,longitude:t,latitude:n});R.value.some(e=>e.id===r.id)||R.value.push(r),H.value.university_id=r.id,r.city&&(H.value.city=r.city),U.value=!1,v.success(`高校已创建`)}finally{pt.value=!1}}function Nt(e){let t=[],n=[];for(let r of e){if(typeof r==`number`){t.push(r);continue}let e=String(r).trim();e&&n.push(e)}return{ids:t,names:n}}async function Pt(){H.value={name:``,university_id:void 0,city:``,title:``,department:``,bio:``,research_direction_values:[],phone:``,email:``,source_dict_item_id:xt.value,star_level_dict_item_id:St.value,status_dict_item_id:ot.value.find(e=>e.value===`active`)?.id},await At(),V.value=!0}async function Ft(){let e=H.value;if(!e.name.trim()){v.warning(`请填写姓名`);return}let t=Nt(e.research_direction_values);if(!t.ids.length&&!t.names.length){v.warning(`请至少选择一个或新增研究方向`);return}if(!e.city.trim()){v.warning(`请填写城市`);return}if(!e.title.trim()){v.warning(`请填写职称`);return}if(!e.status_dict_item_id){v.warning(`请选择状态`);return}if(!e.university_id){v.warning(`请选择高校,或点击「新建高校」`);return}await E({name:e.name.trim(),university_id:e.university_id,city:e.city.trim(),title:e.title.trim(),department:e.department.trim()||null,bio:e.bio.trim()||null,research_direction_ids:t.ids,new_research_directions:t.names,phone:e.phone||null,email:e.email||null,source_dict_item_id:e.source_dict_item_id??xt.value,star_level_dict_item_id:e.star_level_dict_item_id??St.value,status_dict_item_id:e.status_dict_item_id,recalc_next_follow_date:!0}),v.success(`已录入`),V.value=!1,await Promise.all([$(),Tt()])}function It(){if(!B.value.length){v.warning(`请先在列表中勾选需要改星的老师`);return}K.value=void 0,G.value=!0}async function Lt(){if(!K.value){v.warning(`请选择目标星级`);return}await ce({ids:dt.value,star_level_dict_item_id:K.value,recalc_next_follow_date:!0}),v.success(`已批量更新`),G.value=!1,await Promise.all([$(),Tt()])}function Rt(e){J.value=e,Y.value={subject:``,content:``,followed_at:new Date().toISOString().slice(0,10),follow_method_dict_item_id:st.value[0]?.id,urgency_dict_item_id:ct.value.find(e=>e.value===`normal`)?.id,admin_user_id:$e(),next_follow_subject:``,next_follow_date:he(e.star_level_item?.value)||``},q.value=!0}async function zt(){let e=Y.value;if(J.value){if(!e.subject.trim()||!e.next_follow_subject.trim()||!e.next_follow_date){v.warning(`请填写必填项`);return}if(!e.follow_method_dict_item_id||!e.urgency_dict_item_id||!e.admin_user_id){v.warning(`请填写跟进方式、紧急程度与跟进人员`);return}await se(J.value.id,{...e}),v.success(`已保存跟进`),q.value=!1,await Promise.all([$(),Tt()])}}async function Bt(e){X.value=e,_t.value=await T(e.id),gt.value=!0}function Vt(e){yt.value=e,vt.value=!0}function Ht(e){bt.value=e,Q.value={type_dict_item_id:void 0,title:``,content:``},Z.value=!0}async function Ut(){if(bt.value){if(!Q.value.type_dict_item_id||!Q.value.title.trim()||!Q.value.content.trim()){v.warning(`请填写需求类型、标题与详细描述`);return}await de({teacher_id:bt.value.id,type_dict_item_id:Q.value.type_dict_item_id,title:Q.value.title.trim(),content:Q.value.content.trim()}),v.success(`已发布需求`),Z.value=!1}}return x(async()=>{await wt(),await Promise.all([Tt(),$()])}),(n,d)=>{let m=c(`el-button`),_=c(`el-input`),v=c(`el-option`),y=c(`el-select`),b=c(`el-table-column`),x=c(`el-tag`),S=c(`el-table`),ae=c(`el-pagination`),oe=c(`el-card`),C=c(`el-form-item`),w=c(`el-col`),T=c(`el-row`),E=c(`el-form`),D=c(`el-dialog`),se=c(`el-alert`),ce=c(`el-date-picker`),de=c(`el-empty`),fe=ee(`loading`);return i(),e(`div`,ye,[u(`div`,be,[r(ie),u(`div`,xe,[r(m,{class:`btn-action-secondary`,size:`small`,onClick:It},{default:l(()=>[...d[54]||=[o(`批量改星`,-1)]]),_:1}),Qe.value?a(``,!0):(i(),g(m,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn`,onClick:Pt},{default:l(()=>[...d[55]||=[o(` 手动录入 `,-1)]]),_:1}))])]),u(`div`,Se,[u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`month_pending`}]),onClick:d[0]||=e=>Ot(`month_pending`)},[d[56]||=u(`div`,{class:`talent-stat-label`},`本月待跟进数量`,-1),u(`div`,Ce,h(k.value.month_pending),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`month_followed`}]),onClick:d[1]||=e=>Ot(`month_followed`)},[d[57]||=u(`div`,{class:`talent-stat-label`},`本月已跟进`,-1),u(`div`,we,h(k.value.month_followed),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`overdue`}]),onClick:d[2]||=e=>Ot(`overdue`)},[d[58]||=u(`div`,{class:`talent-stat-label`},`已逾期`,-1),u(`div`,Te,h(k.value.overdue),1)],2),u(`button`,{type:`button`,class:s([`talent-stat-card`,{"is-active":I.value===`partner`}]),onClick:d[3]||=e=>Ot(`partner`)},[d[59]||=u(`div`,{class:`talent-stat-label`},`入孵用户数量`,-1),u(`div`,Ee,h(k.value.partners),1)],2)]),r(oe,{shadow:`never`,class:`admin-list-card teachers-list-card`},{default:l(()=>[u(`div`,De,[r(_,{modelValue:A.value,"onUpdate:modelValue":d[4]||=e=>A.value=e,class:`filter-search teachers-filter-search`,placeholder:`搜索姓名、高校、学院、简介、研究方向…`,clearable:``,onKeyup:te(Dt,[`enter`])},null,8,[`modelValue`]),r(y,{modelValue:j.value,"onUpdate:modelValue":d[5]||=e=>j.value=e,class:`filter-source`,placeholder:`来源`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(at.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:M.value,"onUpdate:modelValue":d[6]||=e=>M.value=e,class:`filter-stars`,placeholder:`星级`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:N.value,"onUpdate:modelValue":d[7]||=e=>N.value=e,class:`filter-status`,placeholder:`状态`,clearable:``},{default:l(()=>[(i(!0),e(f,null,p(ot.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:P.value,"onUpdate:modelValue":d[8]||=e=>P.value=e,class:`filter-school`,placeholder:`学校`,clearable:``,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(y,{modelValue:F.value,"onUpdate:modelValue":d[9]||=e=>F.value=e,class:`filter-direction`,placeholder:`研究方向`,clearable:``,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(m,{type:`primary`,onClick:Dt},{default:l(()=>[...d[60]||=[o(`搜索`,-1)]]),_:1}),r(m,{onClick:Et},{default:l(()=>[...d[61]||=[o(`重置`,-1)]]),_:1})]),re((i(),g(S,{data:rt.value,"row-key":`id`,onSelectionChange:d[10]||=e=>B.value=e},{default:l(()=>[r(b,{type:`selection`,width:`44`}),r(b,{prop:`name`,label:`姓名`,width:`108`},{default:l(({row:e})=>[u(`a`,{class:`name-link`,href:`#`,onClick:ne(t=>kt(e),[`prevent`])},h(e.name),9,Oe),e.is_overdue?(i(),g(x,{key:0,type:`danger`,size:`small`,class:`tag-overdue`},{default:l(()=>[...d[62]||=[o(`逾期`,-1)]]),_:1})):a(``,!0)]),_:1}),r(b,{prop:`university_name`,label:`高校`,"min-width":`130`}),r(b,{prop:`department`,label:`所属学院`,"min-width":`120`,"show-overflow-tooltip":``}),r(b,{prop:`title`,label:`职称`,width:`96`}),r(b,{label:`研究方向`,"min-width":`160`},{default:l(({row:t})=>[t.research_directions?.length?(i(!0),e(f,{key:0},p(t.research_directions,e=>(i(),g(x,{key:e.id,size:`small`,type:`info`,style:{margin:`2px 4px 2px 0`}},{default:l(()=>[o(h(e.name),1)]),_:2},1024))),128)):(i(),e(`span`,ke,`—`))]),_:1}),r(b,{label:`来源`,width:`108`,align:`center`},{default:l(({row:e})=>[r(x,{type:t(_e)(e.source_item?.value),size:`small`,effect:`dark`,class:s([`source-tag`,{"source-tag-manual":e.source_item?.value===`manual`}])},{default:l(()=>[o(h(e.source_item?.label||`—`),1)]),_:2},1032,[`type`,`class`])]),_:1}),r(b,{label:`星级`,width:`108`},{default:l(({row:e})=>[u(`span`,{class:`star-text`,title:e.star_level_item?.label||``},h(t(me)(e.star_level_item?.value,e.star_level_item?.label)),9,Ae)]),_:1}),r(b,{label:`状态`,width:`100`},{default:l(({row:e})=>[r(x,{type:t(ge)(e.status_item?.value),size:`small`,effect:`dark`},{default:l(()=>[o(h(e.status_item?.label||`—`),1)]),_:2},1032,[`type`])]),_:1}),r(b,{label:`跟进记录`,width:`96`,align:`center`},{default:l(({row:e})=>[r(m,{size:`small`,class:`btn-action-secondary teachers-table-btn`,onClick:t=>Bt(e)},{default:l(()=>[o(h(e.follow_records_count||0)+`条记录 `,1)]),_:2},1032,[`onClick`])]),_:1}),r(b,{label:`操作`,width:`176`,fixed:`right`},{default:l(({row:e})=>[u(`div`,je,[r(m,{size:`small`,class:`btn-action-info teachers-table-btn`,onClick:t=>Rt(e)},{default:l(()=>[...d[63]||=[o(` 跟进 `,-1)]]),_:1},8,[`onClick`]),r(m,{size:`small`,class:`btn-action-primary teachers-table-btn`,onClick:t=>Vt(e)},{default:l(()=>[...d[64]||=[o(` 论文 `,-1)]]),_:1},8,[`onClick`]),e.is_partner||e.status_item?.value===`partner`?(i(),g(m,{key:0,type:`primary`,size:`small`,class:`teachers-primary-btn teachers-table-btn`,onClick:t=>Ht(e)},{default:l(()=>[...d[65]||=[o(` 需求 `,-1)]]),_:1},8,[`onClick`])):a(``,!0),r(m,{size:`small`,class:`btn-action-primary teachers-table-btn`,onClick:t=>kt(e)},{default:l(()=>[...d[66]||=[o(` 编辑 `,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[fe,et.value]]),u(`div`,Me,[r(ae,{"current-page":O.value,"onUpdate:currentPage":d[11]||=e=>O.value=e,"page-size":it.value.per_page,total:it.value.total,layout:`total, prev, pager, next`,onCurrentChange:$},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),r(D,{modelValue:V.value,"onUpdate:modelValue":d[24]||=e=>V.value=e,title:`手动录入老师`,width:`960px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[23]||=e=>V.value=!1},{default:l(()=>[...d[68]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:Ft},{default:l(()=>[...d[69]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`姓名`,required:``},{default:l(()=>[r(_,{modelValue:H.value.name,"onUpdate:modelValue":d[12]||=e=>H.value.name=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`高校`,required:``},{default:l(()=>[u(`div`,Ne,[r(y,{modelValue:H.value.university_id,"onUpdate:modelValue":d[13]||=e=>H.value.university_id=e,filterable:``,placeholder:`选择高校`,style:{flex:`1`}},{default:l(()=>[(i(!0),e(f,null,p(R.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),Qe.value?a(``,!0):(i(),g(m,{key:0,type:`primary`,size:`small`,class:`btn-create teachers-primary-btn`,onClick:jt},{default:l(()=>[...d[67]||=[o(` 新建高校 `,-1)]]),_:1}))])]),_:1})]),_:1}),r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`城市`,required:``},{default:l(()=>[r(_,{modelValue:H.value.city,"onUpdate:modelValue":d[14]||=e=>H.value.city=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`职称`,required:``},{default:l(()=>[r(_,{modelValue:H.value.title,"onUpdate:modelValue":d[15]||=e=>H.value.title=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`所属学院`},{default:l(()=>[r(_,{modelValue:H.value.department,"onUpdate:modelValue":d[16]||=e=>H.value.department=e,placeholder:`如:计算机科学与技术学院`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:16},{default:l(()=>[r(C,{label:`个人简介`},{default:l(()=>[r(_,{modelValue:H.value.bio,"onUpdate:modelValue":d[17]||=e=>H.value.bio=e,type:`textarea`,rows:3,placeholder:`老师个人简介`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:8},{default:l(()=>[r(C,{label:`研究方向`,required:``},{default:l(()=>[r(y,{modelValue:H.value.research_direction_values,"onUpdate:modelValue":d[18]||=e=>H.value.research_direction_values=e,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"collapse-tags":``,"collapse-tags-tooltip":``,placeholder:`选择或输入研究方向`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(z.value,e=>(i(),g(v,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`电话`},{default:l(()=>[r(_,{modelValue:H.value.phone,"onUpdate:modelValue":d[19]||=e=>H.value.phone=e},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`邮箱`},{default:l(()=>[r(_,{modelValue:H.value.email,"onUpdate:modelValue":d[20]||=e=>H.value.email=e,type:`email`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:4},{default:l(()=>[r(C,{label:`星级`},{default:l(()=>[r(y,{modelValue:H.value.star_level_dict_item_id,"onUpdate:modelValue":d[21]||=e=>H.value.star_level_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{xs:24,md:6},{default:l(()=>[r(C,{label:`状态`,required:``},{default:l(()=>[r(y,{modelValue:H.value.status_dict_item_id,"onUpdate:modelValue":d[22]||=e=>H.value.status_dict_item_id=e,placeholder:`请选择状态`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ot.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:U.value,"onUpdate:modelValue":d[31]||=e=>U.value=e,title:`新建高校`,width:`480px`,"append-to-body":``,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[30]||=e=>U.value=!1},{default:l(()=>[...d[70]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,loading:pt.value,onClick:Mt},{default:l(()=>[...d[71]||=[o(`保存`,-1)]]),_:1},8,[`loading`])]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(C,{label:`高校名称`,required:``},{default:l(()=>[r(_,{modelValue:W.value.name,"onUpdate:modelValue":d[25]||=e=>W.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`经度`,required:``},{default:l(()=>[r(_,{modelValue:W.value.longitude,"onUpdate:modelValue":d[26]||=e=>W.value.longitude=e,placeholder:`如:121.5031`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`纬度`,required:``},{default:l(()=>[r(_,{modelValue:W.value.latitude,"onUpdate:modelValue":d[27]||=e=>W.value.latitude=e,placeholder:`如:31.2970`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`省份`},{default:l(()=>[r(_,{modelValue:W.value.province,"onUpdate:modelValue":d[28]||=e=>W.value.province=e,placeholder:`如:上海市`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`城市`},{default:l(()=>[r(_,{modelValue:W.value.city,"onUpdate:modelValue":d[29]||=e=>W.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:G.value,"onUpdate:modelValue":d[34]||=e=>G.value=e,title:`批量修改星级`,width:`480px`},{footer:l(()=>[r(m,{onClick:d[33]||=e=>G.value=!1},{default:l(()=>[...d[74]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,disabled:!B.value.length,onClick:Lt},{default:l(()=>[...d[75]||=[o(` 保存并重算跟进日 `,-1)]]),_:1},8,[`disabled`])]),default:l(()=>[B.value.length?(i(),e(f,{key:1},[u(`div`,Pe,[d[72]||=o(` 已选择 `,-1),u(`span`,Fe,h(B.value.length),1),d[73]||=o(` 位老师 `,-1),ft.value?(i(),e(`span`,Ie,h(ft.value),1)):a(``,!0)]),r(E,{"label-position":`top`,style:{"margin-top":`12px`}},{default:l(()=>[r(C,{label:`目标星级`,required:``},{default:l(()=>[r(y,{modelValue:K.value,"onUpdate:modelValue":d[32]||=e=>K.value=e,placeholder:`请选择目标星级`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(L.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),u(`p`,Le,h(mt.value),1)]),_:1})],64)):(i(),g(se,{key:0,type:`warning`,closable:!1,title:`请先在列表中勾选需要改星的老师。`,"show-icon":``}))]),_:1},8,[`modelValue`]),r(D,{modelValue:q.value,"onUpdate:modelValue":d[44]||=e=>q.value=e,title:`新增跟进`,width:`720px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[43]||=e=>q.value=!1},{default:l(()=>[...d[76]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:zt},{default:l(()=>[...d[77]||=[o(`保存`,-1)]]),_:1})]),default:l(()=>[J.value?(i(),e(`div`,Re,h(J.value.name)+` · `+h(J.value.university_name)+` · `+h(J.value.title),1)):a(``,!0),r(E,{"label-position":`top`,class:`form-small`,style:{"margin-top":`12px`}},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{span:10},{default:l(()=>[r(C,{label:`跟进主题`,required:``},{default:l(()=>[r(_,{modelValue:Y.value.subject,"onUpdate:modelValue":d[35]||=e=>Y.value.subject=e,placeholder:`请输入跟进主题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`跟进日期`,required:``},{default:l(()=>[r(ce,{modelValue:Y.value.followed_at,"onUpdate:modelValue":d[36]||=e=>Y.value.followed_at=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:4},{default:l(()=>[r(C,{label:`跟进方式`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.follow_method_dict_item_id,"onUpdate:modelValue":d[37]||=e=>Y.value.follow_method_dict_item_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(st.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:4},{default:l(()=>[r(C,{label:`跟进人员`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.admin_user_id,"onUpdate:modelValue":d[38]||=e=>Y.value.admin_user_id=e,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(lt.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`跟进记录`},{default:l(()=>[r(_,{modelValue:Y.value.content,"onUpdate:modelValue":d[39]||=e=>Y.value.content=e,type:`textarea`,rows:4,placeholder:`请输入跟进内容`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`下次跟进主题`,required:``},{default:l(()=>[r(_,{modelValue:Y.value.next_follow_subject,"onUpdate:modelValue":d[40]||=e=>Y.value.next_follow_subject=e,placeholder:`请输入下次跟进主题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`下次跟进日期`,required:``},{default:l(()=>[r(ce,{modelValue:Y.value.next_follow_date,"onUpdate:modelValue":d[41]||=e=>Y.value.next_follow_date=e,type:`date`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`]),ht.value?(i(),e(`p`,ze,h(ht.value),1)):a(``,!0)]),_:1})]),_:1}),r(w,{span:6},{default:l(()=>[r(C,{label:`紧急程度`,required:``},{default:l(()=>[r(y,{modelValue:Y.value.urgency_dict_item_id,"onUpdate:modelValue":d[42]||=e=>Y.value.urgency_dict_item_id=e,placeholder:`请选择紧急程度`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ct.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(D,{modelValue:gt.value,"onUpdate:modelValue":d[46]||=e=>gt.value=e,title:`跟进记录`,width:`960px`},{footer:l(()=>[r(m,{onClick:d[45]||=e=>gt.value=!1},{default:l(()=>[...d[86]||=[o(`关闭`,-1)]]),_:1})]),default:l(()=>[X.value?(i(),e(`div`,Be,[u(`span`,null,h(X.value.name),1),d[78]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,null,h(X.value.university_name),1),d[79]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,null,h(X.value.title),1),d[80]||=u(`span`,{class:`dot`},`·`,-1),u(`span`,Ve,h(t(me)(X.value.star_level_item?.value,X.value.star_level_item?.label)),1)])):a(``,!0),u(`div`,He,[(i(!0),e(f,null,p(_t.value,n=>(i(),e(`div`,{key:n.id,class:`follow-history-card`},[u(`div`,Ue,[u(`div`,null,[u(`span`,We,h(n.subject),1),u(`span`,Ge,h(n.followed_at),1)]),n.urgency_item?(i(),g(x,{key:0,type:t(pe)(n.urgency_item.value),size:`small`},{default:l(()=>[o(h(n.urgency_item.label),1)]),_:2},1032,[`type`])):a(``,!0)]),u(`div`,Ke,[u(`div`,qe,[d[81]||=u(`span`,null,`跟进主题:`,-1),u(`div`,null,h(n.subject),1)]),u(`div`,Je,[d[82]||=u(`span`,null,`跟进方式:`,-1),u(`div`,null,h(n.follow_method_item?.label||`—`),1)]),u(`div`,Ye,[d[83]||=u(`span`,null,`跟进记录:`,-1),u(`div`,null,h(n.content||`—`),1)]),u(`div`,Xe,[d[85]||=u(`span`,null,`下次跟进:`,-1),u(`div`,null,[o(`主题:`+h(n.next_follow_subject),1),d[84]||=u(`br`,null,null,-1),o(`日期:`+h(n.next_follow_date),1)])])]),u(`div`,Ze,`跟进人:`+h(n.operator_name||`—`),1)]))),128)),_t.value.length?a(``,!0):(i(),g(de,{key:0,description:`暂无跟进记录`}))])]),_:1},8,[`modelValue`]),r(le,{modelValue:vt.value,"onUpdate:modelValue":d[47]||=e=>vt.value=e,"teacher-id":yt.value?.id??null,"default-authors":yt.value?.name,"default-school-name":yt.value?.university_name||``,onSaved:$},null,8,[`modelValue`,`teacher-id`,`default-authors`,`default-school-name`]),r(D,{modelValue:Z.value,"onUpdate:modelValue":d[52]||=e=>Z.value=e,title:`发布需求`,width:`640px`,"destroy-on-close":``},{footer:l(()=>[r(m,{onClick:d[51]||=e=>Z.value=!1},{default:l(()=>[...d[87]||=[o(`取消`,-1)]]),_:1}),r(m,{type:`primary`,onClick:Ut},{default:l(()=>[...d[88]||=[o(`发布`,-1)]]),_:1})]),default:l(()=>[r(E,{"label-position":`top`,class:`form-small`},{default:l(()=>[r(T,{gutter:12},{default:l(()=>[r(w,{span:12},{default:l(()=>[r(C,{label:`关联老师`},{default:l(()=>[r(_,{"model-value":bt.value?.name||``,readonly:``},null,8,[`model-value`])]),_:1})]),_:1}),r(w,{span:12},{default:l(()=>[r(C,{label:`需求类型`,required:``},{default:l(()=>[r(y,{modelValue:Q.value.type_dict_item_id,"onUpdate:modelValue":d[48]||=e=>Q.value.type_dict_item_id=e,placeholder:`请选择需求类型`,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(ut.value,e=>(i(),g(v,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`标题`,required:``},{default:l(()=>[r(_,{modelValue:Q.value.title,"onUpdate:modelValue":d[49]||=e=>Q.value.title=e,placeholder:`请输入需求标题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(w,{span:24},{default:l(()=>[r(C,{label:`详细描述`,required:``},{default:l(()=>[r(_,{modelValue:Q.value.content,"onUpdate:modelValue":d[50]||=e=>Q.value.content=e,type:`textarea`,rows:5,placeholder:`请描述需求背景、目标、期望资源或合作方式`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),r(ue,{modelValue:tt.value,"onUpdate:modelValue":d[53]||=e=>tt.value=e,"teacher-id":nt.value,onSaved:$},null,8,[`modelValue`,`teacher-id`])])}}}),[[`__scopeId`,`data-v-c16cffd4`]]);export{Qe as default}; \ No newline at end of file diff --git a/public/admin/assets/teachers-CL5Hu-Uh.css b/public/admin/assets/teachers-CL5Hu-Uh.css new file mode 100644 index 0000000..ba2200d --- /dev/null +++ b/public/admin/assets/teachers-CL5Hu-Uh.css @@ -0,0 +1 @@ +.teachers-page[data-v-c16cffd4]{--brand-primary:#244e98;--brand-primary-hover:#8b1519;--brand-bg-soft:#fdf3f3;flex-direction:column;gap:12px;display:flex}.talent-stat-grid[data-v-c16cffd4]{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.teachers-list-card[data-v-c16cffd4]{margin-top:0}.teachers-filter-search[data-v-c16cffd4]{width:180px}.talent-stat-card[data-v-c16cffd4]{text-align:left;cursor:pointer;min-height:68px;font:inherit;background:#fff;border:1px solid #d8dde4;border-radius:8px;flex-direction:column;justify-content:center;align-items:flex-start;gap:6px;padding:10px 16px;display:flex;position:relative;box-shadow:0 2px 10px #0f172a14}.talent-stat-card[data-v-c16cffd4]:hover,.talent-stat-card.is-active[data-v-c16cffd4]{border-color:var(--brand-primary)}.talent-stat-card.is-active[data-v-c16cffd4]:before{content:"";background:var(--brand-primary);width:4px;position:absolute;top:0;bottom:0;left:0}.talent-stat-label[data-v-c16cffd4]{color:#6b7280;font-size:14px}.talent-stat-value[data-v-c16cffd4]{color:var(--brand-primary);font-size:24px;font-weight:600;line-height:1.1}.talent-stat-value.is-dark[data-v-c16cffd4]{color:#111827}.talent-stat-value.is-danger[data-v-c16cffd4]{color:var(--el-color-danger)}.talent-stat-value.is-success[data-v-c16cffd4]{color:var(--el-color-success)}.filter-source[data-v-c16cffd4]{width:132px}.filter-stars[data-v-c16cffd4]{width:100px}.filter-status[data-v-c16cffd4]{width:112px}.filter-school[data-v-c16cffd4]{width:184px}.filter-direction[data-v-c16cffd4]{width:146px}.name-link[data-v-c16cffd4]{color:inherit;text-decoration:none}.name-link[data-v-c16cffd4]:hover{color:var(--brand-primary)}.tag-overdue[data-v-c16cffd4]{vertical-align:middle;margin-left:4px}.star-text[data-v-c16cffd4]{color:#e6a23c;letter-spacing:1px}.source-tag[data-v-c16cffd4]{border:none;font-weight:500}.source-tag-manual[data-v-c16cffd4]{--el-tag-bg-color:#6c757d;--el-tag-border-color:#6c757d;--el-tag-text-color:#fff}.teachers-table-actions[data-v-c16cffd4]{flex-wrap:nowrap;gap:4px}.teachers-table-btn[data-v-c16cffd4]{min-height:22px;font-size:12px;padding:2px 6px!important}.follow-teacher-summary[data-v-c16cffd4]{border-left:4px solid var(--brand-primary);background:var(--brand-bg-soft);border-radius:6px;padding:10px 12px;font-size:14px}.text-brand[data-v-c16cffd4]{color:var(--brand-primary);font-weight:600}.names-muted[data-v-c16cffd4]{color:#6b7280;margin-left:8px;font-size:13px}.batch-rule[data-v-c16cffd4]{color:#6b7280;margin:0;font-size:12px}.follow-date-rule[data-v-c16cffd4]{color:#6b7280;margin:6px 0 0;font-size:12px;line-height:1.45}.follow-history-list[data-v-c16cffd4]{gap:14px;max-height:60vh;margin-top:12px;display:grid;overflow:auto}.follow-history-card[data-v-c16cffd4]{border:1px solid #dfe4eb;border-left:4px solid var(--brand-primary);background:#fff;border-radius:6px}.follow-history-head[data-v-c16cffd4]{border-bottom:1px solid #e6eaf1;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.follow-history-title[data-v-c16cffd4]{color:var(--brand-primary);font-weight:600}.follow-history-date[data-v-c16cffd4]{color:#6b7280;margin-left:14px;font-size:13px}.follow-history-body[data-v-c16cffd4]{padding:14px;font-size:13px}.follow-history-row[data-v-c16cffd4]{grid-template-columns:96px 1fr;gap:14px;margin-bottom:10px;display:grid}.follow-history-row>span[data-v-c16cffd4]{color:#6b7280}.follow-history-footer[data-v-c16cffd4]{color:#6b7280;padding:0 14px 14px;font-size:13px}.dot[data-v-c16cffd4]{color:#9ca3af;margin:0 6px}.uni-row[data-v-c16cffd4]{align-items:center;gap:8px;width:100%;display:flex}.teachers-primary-btn.el-button--primary{--el-button-text-color:#fff;--el-button-bg-color:#244e98;--el-button-border-color:#244e98;--el-button-hover-text-color:#fff;--el-button-hover-bg-color:#8b1519;--el-button-hover-border-color:#8b1519;--el-button-active-text-color:#fff;--el-button-active-bg-color:#8b1519;--el-button-active-border-color:#8b1519}.form-small[data-v-c16cffd4] .el-form-item__label{padding-bottom:4px;font-size:13px}@media (width<=992px){.talent-stat-grid[data-v-c16cffd4]{grid-template-columns:1fr 1fr}} diff --git a/public/admin/assets/teachers-pG_1bxUc.css b/public/admin/assets/teachers-pG_1bxUc.css deleted file mode 100644 index 96f407e..0000000 --- a/public/admin/assets/teachers-pG_1bxUc.css +++ /dev/null @@ -1 +0,0 @@ -.teachers-page[data-v-38f7d6f8]{--brand-primary:#244e98;--brand-primary-hover:#8b1519;--brand-bg-soft:#fdf3f3;flex-direction:column;gap:12px;display:flex}.talent-stat-grid[data-v-38f7d6f8]{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.teachers-list-card[data-v-38f7d6f8]{margin-top:0}.teachers-filter-search[data-v-38f7d6f8]{width:180px}.talent-stat-card[data-v-38f7d6f8]{text-align:left;cursor:pointer;min-height:68px;font:inherit;background:#fff;border:1px solid #d8dde4;border-radius:8px;flex-direction:column;justify-content:center;align-items:flex-start;gap:6px;padding:10px 16px;display:flex;position:relative;box-shadow:0 2px 10px #0f172a14}.talent-stat-card[data-v-38f7d6f8]:hover,.talent-stat-card.is-active[data-v-38f7d6f8]{border-color:var(--brand-primary)}.talent-stat-card.is-active[data-v-38f7d6f8]:before{content:"";background:var(--brand-primary);width:4px;position:absolute;top:0;bottom:0;left:0}.talent-stat-label[data-v-38f7d6f8]{color:#6b7280;font-size:14px}.talent-stat-value[data-v-38f7d6f8]{color:var(--brand-primary);font-size:24px;font-weight:600;line-height:1.1}.talent-stat-value.is-dark[data-v-38f7d6f8]{color:#111827}.talent-stat-value.is-danger[data-v-38f7d6f8]{color:var(--el-color-danger)}.talent-stat-value.is-success[data-v-38f7d6f8]{color:var(--el-color-success)}.filter-source[data-v-38f7d6f8]{width:132px}.filter-stars[data-v-38f7d6f8]{width:100px}.filter-status[data-v-38f7d6f8]{width:112px}.filter-school[data-v-38f7d6f8]{width:184px}.filter-direction[data-v-38f7d6f8]{width:146px}.name-link[data-v-38f7d6f8]{color:inherit;text-decoration:none}.name-link[data-v-38f7d6f8]:hover{color:var(--brand-primary)}.tag-overdue[data-v-38f7d6f8]{vertical-align:middle;margin-left:4px}.star-text[data-v-38f7d6f8]{color:#e6a23c;letter-spacing:1px}.source-tag[data-v-38f7d6f8]{border:none;font-weight:500}.source-tag-manual[data-v-38f7d6f8]{--el-tag-bg-color:#6c757d;--el-tag-border-color:#6c757d;--el-tag-text-color:#fff}.teachers-table-actions[data-v-38f7d6f8]{flex-wrap:nowrap;gap:4px}.teachers-table-btn[data-v-38f7d6f8]{min-height:22px;font-size:12px;padding:2px 6px!important}.follow-teacher-summary[data-v-38f7d6f8]{border-left:4px solid var(--brand-primary);background:var(--brand-bg-soft);border-radius:6px;padding:10px 12px;font-size:14px}.text-brand[data-v-38f7d6f8]{color:var(--brand-primary);font-weight:600}.names-muted[data-v-38f7d6f8]{color:#6b7280;margin-left:8px;font-size:13px}.batch-rule[data-v-38f7d6f8]{color:#6b7280;margin:0;font-size:12px}.follow-date-rule[data-v-38f7d6f8]{color:#6b7280;margin:6px 0 0;font-size:12px;line-height:1.45}.follow-history-list[data-v-38f7d6f8]{gap:14px;max-height:60vh;margin-top:12px;display:grid;overflow:auto}.follow-history-card[data-v-38f7d6f8]{border:1px solid #dfe4eb;border-left:4px solid var(--brand-primary);background:#fff;border-radius:6px}.follow-history-head[data-v-38f7d6f8]{border-bottom:1px solid #e6eaf1;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.follow-history-title[data-v-38f7d6f8]{color:var(--brand-primary);font-weight:600}.follow-history-date[data-v-38f7d6f8]{color:#6b7280;margin-left:14px;font-size:13px}.follow-history-body[data-v-38f7d6f8]{padding:14px;font-size:13px}.follow-history-row[data-v-38f7d6f8]{grid-template-columns:96px 1fr;gap:14px;margin-bottom:10px;display:grid}.follow-history-row>span[data-v-38f7d6f8]{color:#6b7280}.follow-history-footer[data-v-38f7d6f8]{color:#6b7280;padding:0 14px 14px;font-size:13px}.dot[data-v-38f7d6f8]{color:#9ca3af;margin:0 6px}.uni-row[data-v-38f7d6f8]{align-items:center;gap:8px;width:100%;display:flex}.teachers-primary-btn.el-button--primary{--el-button-text-color:#fff;--el-button-bg-color:#244e98;--el-button-border-color:#244e98;--el-button-hover-text-color:#fff;--el-button-hover-bg-color:#8b1519;--el-button-hover-border-color:#8b1519;--el-button-active-text-color:#fff;--el-button-active-bg-color:#8b1519;--el-button-active-border-color:#8b1519}.form-small[data-v-38f7d6f8] .el-form-item__label{padding-bottom:4px;font-size:13px}@media (width<=992px){.talent-stat-grid[data-v-38f7d6f8]{grid-template-columns:1fr 1fr}} diff --git a/public/admin/assets/tiandituMap-B0Q-vV8c.js b/public/admin/assets/tiandituMap-BWmh1toR.js similarity index 100% rename from public/admin/assets/tiandituMap-B0Q-vV8c.js rename to public/admin/assets/tiandituMap-BWmh1toR.js diff --git a/public/admin/assets/universities-BOMonfuo.js b/public/admin/assets/universities-Dschxe-D.js similarity index 97% rename from public/admin/assets/universities-BOMonfuo.js rename to public/admin/assets/universities-Dschxe-D.js index 3fcb6d4..dbbbd6a 100644 --- a/public/admin/assets/universities-BOMonfuo.js +++ b/public/admin/assets/universities-Dschxe-D.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,H as a,I as o,P as s,Qt as c,S as l,T as u,X as d,Y as f,at as p,b as m,d as ee,et as h,ht as g,m as _,ot as v,q as te,rt as y,tn as b,x,z as S}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{_ as C,c as w,l as T,s as E}from"./index-DHoSHxJa.js";import{n as D,t as O}from"./usePageLoad-C9PEZ_Tm.js";import{g as k,i as A,n as j,u as M}from"./assets-hAC2p2Vo.js";import{c as N,d as P,f as F,h as I,i as L,l as ne,o as R,p as z,t as B,u as V}from"./tiandituMap-B0Q-vV8c.js";var re={class:`pick-map-wrap`},ie={key:0,class:`pick-search-bar`},ae={key:1,class:`pick-search-results`},oe=[`onClick`],se={key:2,class:`pick-map-error`},ce={key:3,class:`pick-map-shell`},le={key:0,class:`pick-map-loading`},H={key:4,class:`pick-hint`},U=E(n({__name:`TiandituPickMap`,props:s({height:{default:360},defaultKeyword:{default:``}},{longitude:{default:``},longitudeModifiers:{},latitude:{default:``},latitudeModifiers:{}}),emits:[`update:longitude`,`update:latitude`],setup(t){let n=t,s=h(t,`longitude`),d=h(t,`latitude`),v=`tianditu-pick-map-${Math.random().toString(36).slice(2)}`,x=g(null),C=g(``),w=g(!1),E=g(``),D=g(!1),O=g([]),k=null,A=null,j=null,M=null,U=null,W=!1;function G(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function K(){let e=G(s.value),t=G(d.value);return e!=null&&t!=null?{lng:e,lat:t,zoom:14}:{lng:B.lng,lat:B.lat,zoom:14}}function q(){if(U?.(),U=null,W=!1,k&&A)try{k.removeOverLay(A)}catch{}A=null,k?.destroy?.(),k=null,j=null,x.value&&(x.value.innerHTML=``)}function J(e,t,n=16){s.value=e.toFixed(6),d.value=t.toFixed(6),k&&M&&(z(k,M,{lng:e,lat:t},n),Y(M,e,t))}function Y(e,t,n){k&&(A&&=(k.removeOverLay(A),null),A=new e.Marker(new e.LngLat(t,n)),k.addOverLay(A))}function ue(e){!k||!e.LocalSearch||(j=new e.LocalSearch(k,{pageCapacity:10,onSearchComplete:e=>{if(D.value=!1,Number(e.getResultType())!==1){O.value=[],T.warning(`未找到相关地点,请换个关键词试试`);return}let t=P(e.getPois()).filter(e=>!!F(e));O.value=t,t.length||T.warning(`未找到有效坐标的地点,请换个关键词试试`)}}))}function X(){let e=E.value.trim();if(!e){T.warning(`请输入搜索关键词`);return}if(!j){T.warning(`地图尚未就绪,请稍后再试`);return}D.value=!0,O.value=[],j.search(e)}function Z(e){let t=F(e);if(!t){T.warning(`该地点坐标无效,请换一条结果`);return}J(t.lng,t.lat),O.value=[]}function de(){W&&(W=!1,n.defaultKeyword.trim()&&(E.value=n.defaultKeyword.trim(),X()))}function Q(){if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}async function $(){await o();let e=x.value;if(e){if(C.value=``,!ne()){C.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}w.value=!0;try{if(q(),!await I(e)){C.value=`地图容器未就绪,请关闭后重试`;return}let t=await V();M=t,e.innerHTML=``,e.id=v,e.style.width=`100%`,e.style.height=`${n.height}px`,k=N(t,v),R(k);let r=K();k.centerAndZoom(new t.LngLat(r.lng,r.lat),r.zoom);let i=G(s.value),a=G(d.value);i!=null&&a!=null?Y(t,i,a):Y(t,r.lng,r.lat),ue(t),k.addEventListener?.(`click`,e=>{let t=e?.lnglat?.lng,n=e?.lnglat?.lat;t==null||n==null||(J(t,n),O.value=[])}),k.addEventListener?.(`load`,()=>{if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom),de()}),U=L(e,()=>k),z(k,t,{lng:r.lng,lat:r.lat},r.zoom),window.setTimeout(Q,300),window.setTimeout(Q,800),window.setTimeout(Q,1500),n.defaultKeyword.trim()&&(W=!0)}catch(e){C.value=e instanceof Error?e.message:`地图加载失败`}finally{if(w.value=!1,k&&M){let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}}}}return y([s,d],async()=>{let e=G(s.value),t=G(d.value);!k||e==null||t==null||Y(await V(),e,t)}),a(()=>{$()}),S(()=>{q(),M=null}),(t,a)=>{let o=f(`el-input`),s=f(`el-button`);return i(),e(`div`,re,[C.value?l(``,!0):(i(),e(`div`,ie,[r(o,{modelValue:E.value,"onUpdate:modelValue":a[0]||=e=>E.value=e,placeholder:`搜索地点,如:复旦大学`,clearable:``,onKeyup:ee(X,[`enter`])},null,8,[`modelValue`]),r(s,{type:`primary`,loading:D.value,onClick:X},{default:p(()=>[...a[1]||=[u(`搜索`,-1)]]),_:1},8,[`loading`])])),O.value.length?(i(),e(`ul`,ae,[(i(!0),e(_,null,te(O.value,(t,n)=>(i(),e(`li`,{key:`${t.name}-${n}`},[m(`button`,{type:`button`,class:`pick-search-item`,onClick:e=>Z(t)},[m(`strong`,null,b(t.name),1),m(`span`,null,b(t.address||`—`),1)],8,oe)]))),128))])):l(``,!0),C.value?(i(),e(`div`,se,b(C.value),1)):(i(),e(`div`,ce,[w.value?(i(),e(`div`,le,`地图加载中…`)):l(``,!0),m(`div`,{ref_key:`containerRef`,ref:x,class:`pick-map`,style:c({height:`${n.height}px`})},null,4)])),C.value?l(``,!0):(i(),e(`p`,H,`可搜索地点或点击地图选点,确定后将填入经纬度`))])}}}),[[`__scopeId`,`data-v-0a469e9f`]]),W={class:`list-page`},G={class:`page-header`},K={class:`list-filter-bar`},q={class:`table-row-actions`},J={key:0,class:`list-pager`},Y={class:`coord-inline`},ue={key:0,class:`pick-coord-preview`},X=E(n({__name:`index`,setup(n){let a=g(!1),s=g([]),c=g({current_page:1,per_page:20,total:0}),h=g(1),y=g(``),S=g(``),E=g(!1),N=g(!1),P=g(!1),F=g(null),I=g({longitude:``,latitude:``}),L=g({name:``,longitude:``,latitude:``,city:``,province:``}),ne=[{label:`上海高校`,value:`上海`},{label:`苏州高校`,value:`苏州`},{label:`浙江高校`,value:`浙江`}];async function R(){a.value=!0;try{let e={page:h.value,page_size:c.value.per_page};y.value&&(e.keyword=y.value),S.value&&(e.region=S.value);let t=await M(e);s.value=t.items,c.value=t.meta}finally{a.value=!1}}function z(){y.value=``,S.value=``,h.value=1,R()}function B(){h.value=1,R()}function V(){F.value=null,L.value={name:``,longitude:``,latitude:``,city:``,province:``},E.value=!0}function re(e){F.value=e,L.value={name:e.name,longitude:e.longitude==null?``:String(e.longitude),latitude:e.latitude==null?``:String(e.latitude),city:e.city||``,province:e.province||``},E.value=!0}function ie(){I.value={longitude:L.value.longitude,latitude:L.value.latitude},P.value=!1,N.value=!0}function ae(){P.value=!1,o(()=>{window.setTimeout(()=>{P.value=!0},800)})}function oe(){P.value=!1}function se(){if(!I.value.longitude||!I.value.latitude){T.warning(`请先在地图上选点`);return}L.value.longitude=I.value.longitude,L.value.latitude=I.value.latitude,N.value=!1}async function ce(){if(!L.value.name||!L.value.longitude||!L.value.latitude){T.warning(`请填写高校名称与经纬度`);return}let e={name:L.value.name.trim(),longitude:Number(L.value.longitude),latitude:Number(L.value.latitude),city:L.value.city||null,province:L.value.province||null};F.value?await k(F.value.id,e):await j(e),T.success(`已保存`),E.value=!1,await R()}async function le(e){await w.confirm(`确定要删除高校「${e.name}」?`,`确认删除`,{type:`warning`}),await A(e.id),T.success(`已删除`),await R()}return O(R),(n,o)=>{let g=f(`el-button`),w=f(`el-input`),T=f(`el-option`),O=f(`el-select`),k=f(`el-table-column`),A=f(`el-table`),j=f(`el-pagination`),M=f(`el-card`),H=f(`el-form-item`),X=f(`el-icon`),Z=f(`el-col`),de=f(`el-row`),Q=f(`el-form`),$=f(`el-dialog`),fe=d(`loading`);return i(),e(_,null,[m(`div`,W,[m(`div`,G,[r(D),r(g,{type:`primary`,size:`small`,class:`btn-create`,onClick:V},{default:p(()=>[...o[14]||=[u(`新增高校`,-1)]]),_:1})]),r(M,{shadow:`never`,class:`admin-list-card`},{default:p(()=>[o[19]||=m(`p`,{class:`list-page-hint`},`长三角主要高校经纬度预置录入,供雷达地图映射使用。`,-1),m(`div`,K,[r(w,{modelValue:y.value,"onUpdate:modelValue":o[0]||=e=>y.value=e,placeholder:`搜索高校名称、经纬度…`,clearable:``,class:`filter-search`,onKeyup:ee(B,[`enter`])},null,8,[`modelValue`]),r(O,{modelValue:S.value,"onUpdate:modelValue":o[1]||=e=>S.value=e,placeholder:`地区`,clearable:``,class:`filter-select-wide`},{default:p(()=>[(i(),e(_,null,te(ne,e=>r(T,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(g,{type:`primary`,onClick:B},{default:p(()=>[...o[15]||=[u(`搜索`,-1)]]),_:1}),r(g,{onClick:z},{default:p(()=>[...o[16]||=[u(`重置`,-1)]]),_:1})]),v((i(),x(A,{data:s.value,"row-key":`id`},{default:p(()=>[r(k,{prop:`name`,label:`高校名称`,"min-width":`180`}),r(k,{label:`经度`,width:`120`},{default:p(({row:e})=>[u(b(e.longitude??`—`),1)]),_:1}),r(k,{label:`纬度`,width:`120`},{default:p(({row:e})=>[u(b(e.latitude??`—`),1)]),_:1}),r(k,{prop:`city`,label:`城市`,width:`100`}),r(k,{label:`操作`,width:`160`,fixed:`right`},{default:p(({row:e})=>[m(`div`,q,[r(g,{class:`btn-action-primary`,onClick:t=>re(e)},{default:p(()=>[...o[17]||=[u(`编辑`,-1)]]),_:1},8,[`onClick`]),r(g,{class:`btn-action-brand`,onClick:t=>le(e)},{default:p(()=>[...o[18]||=[u(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[fe,a.value]]),c.value.total>0?(i(),e(`div`,J,[r(j,{layout:`total, prev, pager, next`,total:c.value.total,"page-size":c.value.per_page,"current-page":h.value,onCurrentChange:o[2]||=e=>{h.value=e,R()}},null,8,[`total`,`page-size`,`current-page`])])):l(``,!0)]),_:1})]),r($,{modelValue:E.value,"onUpdate:modelValue":o[9]||=e=>E.value=e,title:F.value?`编辑高校`:`新增高校`,width:`480px`,"destroy-on-close":``},{footer:p(()=>[r(g,{onClick:o[8]||=e=>E.value=!1},{default:p(()=>[...o[21]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:ce},{default:p(()=>[...o[22]||=[u(`保存`,-1)]]),_:1})]),default:p(()=>[r(Q,{"label-position":`top`},{default:p(()=>[r(H,{label:`高校名称`,required:``},{default:p(()=>[r(w,{modelValue:L.value.name,"onUpdate:modelValue":o[3]||=e=>L.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),r(H,{label:`经纬度`,required:``},{default:p(()=>[m(`div`,Y,[r(w,{modelValue:L.value.longitude,"onUpdate:modelValue":o[4]||=e=>L.value.longitude=e,placeholder:`经度`,class:`coord-input`},null,8,[`modelValue`]),r(w,{modelValue:L.value.latitude,"onUpdate:modelValue":o[5]||=e=>L.value.latitude=e,placeholder:`纬度`,class:`coord-input`},null,8,[`modelValue`]),r(g,{class:`pick-map-btn`,onClick:ie},{default:p(()=>[r(X,null,{default:p(()=>[r(t(C))]),_:1}),o[20]||=u(` 地图选点 `,-1)]),_:1})])]),_:1}),r(de,{gutter:12},{default:p(()=>[r(Z,{span:12},{default:p(()=>[r(H,{label:`省份`},{default:p(()=>[r(w,{modelValue:L.value.province,"onUpdate:modelValue":o[6]||=e=>L.value.province=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{span:12},{default:p(()=>[r(H,{label:`城市`},{default:p(()=>[r(w,{modelValue:L.value.city,"onUpdate:modelValue":o[7]||=e=>L.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r($,{modelValue:N.value,"onUpdate:modelValue":o[13]||=e=>N.value=e,class:`map-pick-dialog`,title:`地图选点`,width:`720px`,"destroy-on-close":``,"append-to-body":``,"align-center":``,onOpened:ae,onClosed:oe},{footer:p(()=>[r(g,{onClick:o[12]||=e=>N.value=!1},{default:p(()=>[...o[23]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:se},{default:p(()=>[...o[24]||=[u(`确定`,-1)]]),_:1})]),default:p(()=>[I.value.longitude&&I.value.latitude?(i(),e(`p`,ue,` 当前选点:`+b(I.value.longitude)+`,`+b(I.value.latitude),1)):l(``,!0),N.value&&P.value?(i(),x(U,{key:1,longitude:I.value.longitude,"onUpdate:longitude":o[10]||=e=>I.value.longitude=e,latitude:I.value.latitude,"onUpdate:latitude":o[11]||=e=>I.value.latitude=e,"default-keyword":L.value.name,height:400},null,8,[`longitude`,`latitude`,`default-keyword`])):l(``,!0)]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-37a4bf6b`]]);export{X as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,H as a,I as o,P as s,Qt as c,S as l,T as u,X as d,Y as f,at as p,b as m,d as ee,et as h,ht as g,m as _,ot as v,q as te,rt as y,tn as b,x,z as S}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{_ as C,c as w,l as T,s as E}from"./index-CPrkFf57.js";import{n as D,t as O}from"./usePageLoad-B1L6ImD-.js";import{g as k,i as A,n as j,u as M}from"./assets-DlFfPb4n.js";import{c as N,d as P,f as F,h as I,i as L,l as ne,o as R,p as z,t as B,u as V}from"./tiandituMap-BWmh1toR.js";var re={class:`pick-map-wrap`},ie={key:0,class:`pick-search-bar`},ae={key:1,class:`pick-search-results`},oe=[`onClick`],se={key:2,class:`pick-map-error`},ce={key:3,class:`pick-map-shell`},le={key:0,class:`pick-map-loading`},H={key:4,class:`pick-hint`},U=E(n({__name:`TiandituPickMap`,props:s({height:{default:360},defaultKeyword:{default:``}},{longitude:{default:``},longitudeModifiers:{},latitude:{default:``},latitudeModifiers:{}}),emits:[`update:longitude`,`update:latitude`],setup(t){let n=t,s=h(t,`longitude`),d=h(t,`latitude`),v=`tianditu-pick-map-${Math.random().toString(36).slice(2)}`,x=g(null),C=g(``),w=g(!1),E=g(``),D=g(!1),O=g([]),k=null,A=null,j=null,M=null,U=null,W=!1;function G(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function K(){let e=G(s.value),t=G(d.value);return e!=null&&t!=null?{lng:e,lat:t,zoom:14}:{lng:B.lng,lat:B.lat,zoom:14}}function q(){if(U?.(),U=null,W=!1,k&&A)try{k.removeOverLay(A)}catch{}A=null,k?.destroy?.(),k=null,j=null,x.value&&(x.value.innerHTML=``)}function J(e,t,n=16){s.value=e.toFixed(6),d.value=t.toFixed(6),k&&M&&(z(k,M,{lng:e,lat:t},n),Y(M,e,t))}function Y(e,t,n){k&&(A&&=(k.removeOverLay(A),null),A=new e.Marker(new e.LngLat(t,n)),k.addOverLay(A))}function ue(e){!k||!e.LocalSearch||(j=new e.LocalSearch(k,{pageCapacity:10,onSearchComplete:e=>{if(D.value=!1,Number(e.getResultType())!==1){O.value=[],T.warning(`未找到相关地点,请换个关键词试试`);return}let t=P(e.getPois()).filter(e=>!!F(e));O.value=t,t.length||T.warning(`未找到有效坐标的地点,请换个关键词试试`)}}))}function X(){let e=E.value.trim();if(!e){T.warning(`请输入搜索关键词`);return}if(!j){T.warning(`地图尚未就绪,请稍后再试`);return}D.value=!0,O.value=[],j.search(e)}function Z(e){let t=F(e);if(!t){T.warning(`该地点坐标无效,请换一条结果`);return}J(t.lng,t.lat),O.value=[]}function de(){W&&(W=!1,n.defaultKeyword.trim()&&(E.value=n.defaultKeyword.trim(),X()))}function Q(){if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}async function $(){await o();let e=x.value;if(e){if(C.value=``,!ne()){C.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}w.value=!0;try{if(q(),!await I(e)){C.value=`地图容器未就绪,请关闭后重试`;return}let t=await V();M=t,e.innerHTML=``,e.id=v,e.style.width=`100%`,e.style.height=`${n.height}px`,k=N(t,v),R(k);let r=K();k.centerAndZoom(new t.LngLat(r.lng,r.lat),r.zoom);let i=G(s.value),a=G(d.value);i!=null&&a!=null?Y(t,i,a):Y(t,r.lng,r.lat),ue(t),k.addEventListener?.(`click`,e=>{let t=e?.lnglat?.lng,n=e?.lnglat?.lat;t==null||n==null||(J(t,n),O.value=[])}),k.addEventListener?.(`load`,()=>{if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom),de()}),U=L(e,()=>k),z(k,t,{lng:r.lng,lat:r.lat},r.zoom),window.setTimeout(Q,300),window.setTimeout(Q,800),window.setTimeout(Q,1500),n.defaultKeyword.trim()&&(W=!0)}catch(e){C.value=e instanceof Error?e.message:`地图加载失败`}finally{if(w.value=!1,k&&M){let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}}}}return y([s,d],async()=>{let e=G(s.value),t=G(d.value);!k||e==null||t==null||Y(await V(),e,t)}),a(()=>{$()}),S(()=>{q(),M=null}),(t,a)=>{let o=f(`el-input`),s=f(`el-button`);return i(),e(`div`,re,[C.value?l(``,!0):(i(),e(`div`,ie,[r(o,{modelValue:E.value,"onUpdate:modelValue":a[0]||=e=>E.value=e,placeholder:`搜索地点,如:复旦大学`,clearable:``,onKeyup:ee(X,[`enter`])},null,8,[`modelValue`]),r(s,{type:`primary`,loading:D.value,onClick:X},{default:p(()=>[...a[1]||=[u(`搜索`,-1)]]),_:1},8,[`loading`])])),O.value.length?(i(),e(`ul`,ae,[(i(!0),e(_,null,te(O.value,(t,n)=>(i(),e(`li`,{key:`${t.name}-${n}`},[m(`button`,{type:`button`,class:`pick-search-item`,onClick:e=>Z(t)},[m(`strong`,null,b(t.name),1),m(`span`,null,b(t.address||`—`),1)],8,oe)]))),128))])):l(``,!0),C.value?(i(),e(`div`,se,b(C.value),1)):(i(),e(`div`,ce,[w.value?(i(),e(`div`,le,`地图加载中…`)):l(``,!0),m(`div`,{ref_key:`containerRef`,ref:x,class:`pick-map`,style:c({height:`${n.height}px`})},null,4)])),C.value?l(``,!0):(i(),e(`p`,H,`可搜索地点或点击地图选点,确定后将填入经纬度`))])}}}),[[`__scopeId`,`data-v-0a469e9f`]]),W={class:`list-page`},G={class:`page-header`},K={class:`list-filter-bar`},q={class:`table-row-actions`},J={key:0,class:`list-pager`},Y={class:`coord-inline`},ue={key:0,class:`pick-coord-preview`},X=E(n({__name:`index`,setup(n){let a=g(!1),s=g([]),c=g({current_page:1,per_page:20,total:0}),h=g(1),y=g(``),S=g(``),E=g(!1),N=g(!1),P=g(!1),F=g(null),I=g({longitude:``,latitude:``}),L=g({name:``,longitude:``,latitude:``,city:``,province:``}),ne=[{label:`上海高校`,value:`上海`},{label:`苏州高校`,value:`苏州`},{label:`浙江高校`,value:`浙江`}];async function R(){a.value=!0;try{let e={page:h.value,page_size:c.value.per_page};y.value&&(e.keyword=y.value),S.value&&(e.region=S.value);let t=await M(e);s.value=t.items,c.value=t.meta}finally{a.value=!1}}function z(){y.value=``,S.value=``,h.value=1,R()}function B(){h.value=1,R()}function V(){F.value=null,L.value={name:``,longitude:``,latitude:``,city:``,province:``},E.value=!0}function re(e){F.value=e,L.value={name:e.name,longitude:e.longitude==null?``:String(e.longitude),latitude:e.latitude==null?``:String(e.latitude),city:e.city||``,province:e.province||``},E.value=!0}function ie(){I.value={longitude:L.value.longitude,latitude:L.value.latitude},P.value=!1,N.value=!0}function ae(){P.value=!1,o(()=>{window.setTimeout(()=>{P.value=!0},800)})}function oe(){P.value=!1}function se(){if(!I.value.longitude||!I.value.latitude){T.warning(`请先在地图上选点`);return}L.value.longitude=I.value.longitude,L.value.latitude=I.value.latitude,N.value=!1}async function ce(){if(!L.value.name||!L.value.longitude||!L.value.latitude){T.warning(`请填写高校名称与经纬度`);return}let e={name:L.value.name.trim(),longitude:Number(L.value.longitude),latitude:Number(L.value.latitude),city:L.value.city||null,province:L.value.province||null};F.value?await k(F.value.id,e):await j(e),T.success(`已保存`),E.value=!1,await R()}async function le(e){await w.confirm(`确定要删除高校「${e.name}」?`,`确认删除`,{type:`warning`}),await A(e.id),T.success(`已删除`),await R()}return O(R),(n,o)=>{let g=f(`el-button`),w=f(`el-input`),T=f(`el-option`),O=f(`el-select`),k=f(`el-table-column`),A=f(`el-table`),j=f(`el-pagination`),M=f(`el-card`),H=f(`el-form-item`),X=f(`el-icon`),Z=f(`el-col`),de=f(`el-row`),Q=f(`el-form`),$=f(`el-dialog`),fe=d(`loading`);return i(),e(_,null,[m(`div`,W,[m(`div`,G,[r(D),r(g,{type:`primary`,size:`small`,class:`btn-create`,onClick:V},{default:p(()=>[...o[14]||=[u(`新增高校`,-1)]]),_:1})]),r(M,{shadow:`never`,class:`admin-list-card`},{default:p(()=>[o[19]||=m(`p`,{class:`list-page-hint`},`长三角主要高校经纬度预置录入,供雷达地图映射使用。`,-1),m(`div`,K,[r(w,{modelValue:y.value,"onUpdate:modelValue":o[0]||=e=>y.value=e,placeholder:`搜索高校名称、经纬度…`,clearable:``,class:`filter-search`,onKeyup:ee(B,[`enter`])},null,8,[`modelValue`]),r(O,{modelValue:S.value,"onUpdate:modelValue":o[1]||=e=>S.value=e,placeholder:`地区`,clearable:``,class:`filter-select-wide`},{default:p(()=>[(i(),e(_,null,te(ne,e=>r(T,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(g,{type:`primary`,onClick:B},{default:p(()=>[...o[15]||=[u(`搜索`,-1)]]),_:1}),r(g,{onClick:z},{default:p(()=>[...o[16]||=[u(`重置`,-1)]]),_:1})]),v((i(),x(A,{data:s.value,"row-key":`id`},{default:p(()=>[r(k,{prop:`name`,label:`高校名称`,"min-width":`180`}),r(k,{label:`经度`,width:`120`},{default:p(({row:e})=>[u(b(e.longitude??`—`),1)]),_:1}),r(k,{label:`纬度`,width:`120`},{default:p(({row:e})=>[u(b(e.latitude??`—`),1)]),_:1}),r(k,{prop:`city`,label:`城市`,width:`100`}),r(k,{label:`操作`,width:`160`,fixed:`right`},{default:p(({row:e})=>[m(`div`,q,[r(g,{class:`btn-action-primary`,onClick:t=>re(e)},{default:p(()=>[...o[17]||=[u(`编辑`,-1)]]),_:1},8,[`onClick`]),r(g,{class:`btn-action-brand`,onClick:t=>le(e)},{default:p(()=>[...o[18]||=[u(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[fe,a.value]]),c.value.total>0?(i(),e(`div`,J,[r(j,{layout:`total, prev, pager, next`,total:c.value.total,"page-size":c.value.per_page,"current-page":h.value,onCurrentChange:o[2]||=e=>{h.value=e,R()}},null,8,[`total`,`page-size`,`current-page`])])):l(``,!0)]),_:1})]),r($,{modelValue:E.value,"onUpdate:modelValue":o[9]||=e=>E.value=e,title:F.value?`编辑高校`:`新增高校`,width:`480px`,"destroy-on-close":``},{footer:p(()=>[r(g,{onClick:o[8]||=e=>E.value=!1},{default:p(()=>[...o[21]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:ce},{default:p(()=>[...o[22]||=[u(`保存`,-1)]]),_:1})]),default:p(()=>[r(Q,{"label-position":`top`},{default:p(()=>[r(H,{label:`高校名称`,required:``},{default:p(()=>[r(w,{modelValue:L.value.name,"onUpdate:modelValue":o[3]||=e=>L.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),r(H,{label:`经纬度`,required:``},{default:p(()=>[m(`div`,Y,[r(w,{modelValue:L.value.longitude,"onUpdate:modelValue":o[4]||=e=>L.value.longitude=e,placeholder:`经度`,class:`coord-input`},null,8,[`modelValue`]),r(w,{modelValue:L.value.latitude,"onUpdate:modelValue":o[5]||=e=>L.value.latitude=e,placeholder:`纬度`,class:`coord-input`},null,8,[`modelValue`]),r(g,{class:`pick-map-btn`,onClick:ie},{default:p(()=>[r(X,null,{default:p(()=>[r(t(C))]),_:1}),o[20]||=u(` 地图选点 `,-1)]),_:1})])]),_:1}),r(de,{gutter:12},{default:p(()=>[r(Z,{span:12},{default:p(()=>[r(H,{label:`省份`},{default:p(()=>[r(w,{modelValue:L.value.province,"onUpdate:modelValue":o[6]||=e=>L.value.province=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1}),r(Z,{span:12},{default:p(()=>[r(H,{label:`城市`},{default:p(()=>[r(w,{modelValue:L.value.city,"onUpdate:modelValue":o[7]||=e=>L.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r($,{modelValue:N.value,"onUpdate:modelValue":o[13]||=e=>N.value=e,class:`map-pick-dialog`,title:`地图选点`,width:`720px`,"destroy-on-close":``,"append-to-body":``,"align-center":``,onOpened:ae,onClosed:oe},{footer:p(()=>[r(g,{onClick:o[12]||=e=>N.value=!1},{default:p(()=>[...o[23]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:se},{default:p(()=>[...o[24]||=[u(`确定`,-1)]]),_:1})]),default:p(()=>[I.value.longitude&&I.value.latitude?(i(),e(`p`,ue,` 当前选点:`+b(I.value.longitude)+`,`+b(I.value.latitude),1)):l(``,!0),N.value&&P.value?(i(),x(U,{key:1,longitude:I.value.longitude,"onUpdate:longitude":o[10]||=e=>I.value.longitude=e,latitude:I.value.latitude,"onUpdate:latitude":o[11]||=e=>I.value.latitude=e,"default-keyword":L.value.name,height:400},null,8,[`longitude`,`latitude`,`default-keyword`])):l(``,!0)]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-37a4bf6b`]]);export{X as default}; \ No newline at end of file diff --git a/public/admin/assets/upload-qqZxNm7U.js b/public/admin/assets/upload-qqZxNm7U.js new file mode 100644 index 0000000..c2739dd --- /dev/null +++ b/public/admin/assets/upload-qqZxNm7U.js @@ -0,0 +1 @@ +import{r as e}from"./index-CPrkFf57.js";async function t(t,n){let r=new FormData;r.append(`file`,t),r.append(`subdir`,n);let{data:i}=await e.post(`/admin/v1/uploads/course-asset`,r);return i.data}async function n(t){let n=new FormData;n.append(`file`,t);let{data:r}=await e.post(`/admin/v1/uploads/news-cover`,n);return r.data}async function r(t){let n=new FormData;n.append(`file`,t);let{data:r}=await e.post(`/admin/v1/uploads/banner-cover`,n);return r.data}async function i(t,n=`common`){let r=new FormData;r.append(`file`,t),r.append(`scope`,n);let{data:i}=await e.post(`/admin/v1/uploads/editor-image`,r);return i.data}export{n as i,t as n,i as r,r as t}; \ No newline at end of file diff --git a/public/admin/assets/usePageLoad-C9PEZ_Tm.js b/public/admin/assets/usePageLoad-B1L6ImD-.js similarity index 86% rename from public/admin/assets/usePageLoad-C9PEZ_Tm.js rename to public/admin/assets/usePageLoad-B1L6ImD-.js index 7150ad4..fbfb13d 100644 --- a/public/admin/assets/usePageLoad-C9PEZ_Tm.js +++ b/public/admin/assets/usePageLoad-B1L6ImD-.js @@ -1 +1 @@ -import{C as e,D as t,G as n,H as r,L as i,Xt as a,tn as o,y as s}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as c}from"./index-DHoSHxJa.js";var l=t({__name:`PageTitle`,props:{variant:{default:`default`}},setup(t){let r=t,i=c(),l=s(()=>String(i.meta.title||``)),u=s(()=>r.variant===`dashboard`?`dashboard-page-title`:r.variant===`radar`?`radar-page-title`:`page-title`);return(t,r)=>(n(),e(`h1`,{class:a(u.value)},o(l.value),3))}});function u(e){let t=()=>{Promise.resolve(e())};r(t),i(t)}export{l as n,u as t}; \ No newline at end of file +import{C as e,D as t,G as n,H as r,L as i,Xt as a,tn as o,y as s}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as c}from"./index-CPrkFf57.js";var l=t({__name:`PageTitle`,props:{variant:{default:`default`}},setup(t){let r=t,i=c(),l=s(()=>String(i.meta.title||``)),u=s(()=>r.variant===`dashboard`?`dashboard-page-title`:r.variant===`radar`?`radar-page-title`:`page-title`);return(t,r)=>(n(),e(`h1`,{class:a(u.value)},o(l.value),3))}});function u(e){let t=()=>{Promise.resolve(e())};r(t),i(t)}export{l as n,u as t}; \ No newline at end of file diff --git a/public/admin/assets/users-U4ei8OXs.js b/public/admin/assets/users-BIXJy9ht.js similarity index 83% rename from public/admin/assets/users-U4ei8OXs.js rename to public/admin/assets/users-BIXJy9ht.js index 52e8373..b681c02 100644 --- a/public/admin/assets/users-U4ei8OXs.js +++ b/public/admin/assets/users-BIXJy9ht.js @@ -1 +1 @@ -import{r as e}from"./index-DHoSHxJa.js";async function t(t){let{data:n}=await e.get(`/admin/v1/admin-users`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/admin-users`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/admin-users/${t}`,n);return r}async function i(t,n){let{data:r}=await e.post(`/admin/v1/admin-users/${t}/password`,{password:n});return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/admin-users/${t}`);return n}export{r as a,i,a as n,t as r,n as t}; \ No newline at end of file +import{r as e}from"./index-CPrkFf57.js";async function t(t){let{data:n}=await e.get(`/admin/v1/admin-users`,{params:t});return n.data}async function n(t){let{data:n}=await e.post(`/admin/v1/admin-users`,t);return n.data}async function r(t,n){let{data:r}=await e.put(`/admin/v1/admin-users/${t}`,n);return r}async function i(t,n){let{data:r}=await e.post(`/admin/v1/admin-users/${t}/password`,{password:n});return r}async function a(t){let{data:n}=await e.delete(`/admin/v1/admin-users/${t}`);return n}export{r as a,i,a as n,t as r,n as t}; \ No newline at end of file diff --git a/public/admin/assets/users-BFL5CvH3.js b/public/admin/assets/users-DTRBpffL.js similarity index 95% rename from public/admin/assets/users-BFL5CvH3.js rename to public/admin/assets/users-DTRBpffL.js index 939df23..b24c304 100644 --- a/public/admin/assets/users-BFL5CvH3.js +++ b/public/admin/assets/users-DTRBpffL.js @@ -1 +1 @@ -import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as y,l as b}from"./index-DHoSHxJa.js";import{n as x,t as S}from"./usePageLoad-C9PEZ_Tm.js";import{r as C}from"./admin-list-DjncsyJC.js";import{a as w,i as T,n as E,r as D,t as O}from"./users-U4ei8OXs.js";import{i as k}from"./roles-BboDOvYZ.js";var A={class:`list-page`},j={class:`page-header`},M={class:`list-filter-bar`},N={class:`table-row-actions`},P={class:`list-pager`},F=n({__name:`index`,setup(n){let F=p(!1),I=p([]),L=p({current_page:1,per_page:20,total:0}),R=p(``),z=p(1),B=p([]),V=p(!1),H=p(null),U=p({username:``,password:``,real_name:``,mobile:``,email:``,status:1,role_ids:[]});async function W(){F.value=!0;try{let e=await D({page:z.value,page_size:L.value.per_page,keyword:R.value||void 0});I.value=e.items,L.value=e.meta}finally{F.value=!1}}async function G(){B.value=(await k({page:1,page_size:200,status:1})).items.map(e=>({id:e.id,name:e.name}))}function K(){H.value=null,U.value={username:``,password:``,real_name:``,mobile:``,email:``,status:1,role_ids:[]},V.value=!0}function q(e){H.value=e,U.value={username:e.username,password:``,real_name:e.real_name||``,mobile:e.mobile||``,email:e.email||``,status:e.status,role_ids:e.roles?.map(e=>e.id)||[]},V.value=!0}async function J(){if(!H.value&&!U.value.password){b.warning(`请设置初始密码`);return}H.value?(await w(H.value.id,{real_name:U.value.real_name||null,mobile:U.value.mobile||null,email:U.value.email||null,status:U.value.status,role_ids:U.value.role_ids}),U.value.password&&await T(H.value.id,U.value.password)):await O({username:U.value.username,password:U.value.password,real_name:U.value.real_name||null,mobile:U.value.mobile||null,email:U.value.email||null,status:U.value.status,role_ids:U.value.role_ids}),b.success(`已保存`),V.value=!1,await W()}async function Y(e){await y.confirm(`确定删除管理员「${e.username}」?`,`提示`,{type:`warning`}),await E(e.id),b.success(`已删除`),await W()}function X(){z.value=1,W()}function Z(){R.value=``,z.value=1,W()}return S(async()=>{await G(),await W()}),(n,p)=>{let y=l(`el-button`),b=l(`el-input`),S=l(`el-table-column`),w=l(`el-tag`),T=l(`el-table`),E=l(`el-pagination`),D=l(`el-card`),O=l(`el-form-item`),k=l(`el-switch`),G=l(`el-option`),Q=l(`el-select`),$=l(`el-form`),ee=l(`el-dialog`),te=s(`loading`);return i(),e(m,null,[d(`div`,A,[d(`div`,j,[r(x),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:K},{default:u(()=>[...p[11]||=[o(`新增管理员`,-1)]]),_:1})]),r(D,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,M,[r(b,{modelValue:R.value,"onUpdate:modelValue":p[0]||=e=>R.value=e,placeholder:`账号/姓名/手机`,clearable:``,class:`filter-search`,onKeyup:f(X,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:X},{default:u(()=>[...p[12]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:Z},{default:u(()=>[...p[13]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(T,{data:I.value,"row-key":`id`},{default:u(()=>[r(S,{prop:`username`,label:`账号`,width:`140`}),r(S,{prop:`real_name`,label:`姓名`,width:`120`}),r(S,{prop:`mobile`,label:`手机`,width:`130`}),r(S,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(S,{prop:`last_login_at`,label:`最近登录`,"min-width":`180`}),r(S,{label:`角色`,"min-width":`160`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.roles,e=>(i(),v(w,{key:e.id,size:`small`,style:{"margin-right":`4px`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,N,[r(y,{class:`btn-action-primary`,onClick:t=>q(e)},{default:u(()=>[...p[14]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>Y(e)},{default:u(()=>[...p[15]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[te,F.value]]),d(`div`,P,[r(E,{"current-page":z.value,"onUpdate:currentPage":p[1]||=e=>z.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:W},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(ee,{modelValue:V.value,"onUpdate:modelValue":p[10]||=e=>V.value=e,title:H.value?`编辑管理员`:`新增管理员`,width:`520px`},{footer:u(()=>[r(y,{onClick:p[9]||=e=>V.value=!1},{default:u(()=>[...p[16]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:J},{default:u(()=>[...p[17]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r($,{"label-width":`88px`},{default:u(()=>[H.value?a(``,!0):(i(),v(O,{key:0,label:`账号`},{default:u(()=>[r(b,{modelValue:U.value.username,"onUpdate:modelValue":p[2]||=e=>U.value.username=e},null,8,[`modelValue`])]),_:1})),r(O,{label:H.value?`重置密码`:`初始密码`},{default:u(()=>[r(b,{modelValue:U.value.password,"onUpdate:modelValue":p[3]||=e=>U.value.password=e,type:`password`,"show-password":``,placeholder:`可留空`},null,8,[`modelValue`])]),_:1},8,[`label`]),r(O,{label:`姓名`},{default:u(()=>[r(b,{modelValue:U.value.real_name,"onUpdate:modelValue":p[4]||=e=>U.value.real_name=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`手机`},{default:u(()=>[r(b,{modelValue:U.value.mobile,"onUpdate:modelValue":p[5]||=e=>U.value.mobile=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`邮箱`},{default:u(()=>[r(b,{modelValue:U.value.email,"onUpdate:modelValue":p[6]||=e=>U.value.email=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`状态`},{default:u(()=>[r(k,{modelValue:U.value.status,"onUpdate:modelValue":p[7]||=e=>U.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(O,{label:`角色`},{default:u(()=>[r(Q,{modelValue:U.value.role_ids,"onUpdate:modelValue":p[8]||=e=>U.value.role_ids=e,multiple:``,filterable:``,style:{width:`100%`}},{default:u(()=>[(i(!0),e(m,null,g(B.value,e=>(i(),v(G,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{F as default}; \ No newline at end of file +import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as y,l as b}from"./index-CPrkFf57.js";import{n as x,t as S}from"./usePageLoad-B1L6ImD-.js";import{r as C}from"./admin-list-dnDAubDa.js";import{a as w,i as T,n as E,r as D,t as O}from"./users-BIXJy9ht.js";import{i as k}from"./roles-CUNMD5Zg.js";var A={class:`list-page`},j={class:`page-header`},M={class:`list-filter-bar`},N={class:`table-row-actions`},P={class:`list-pager`},F=n({__name:`index`,setup(n){let F=p(!1),I=p([]),L=p({current_page:1,per_page:20,total:0}),R=p(``),z=p(1),B=p([]),V=p(!1),H=p(null),U=p({username:``,password:``,real_name:``,mobile:``,email:``,status:1,role_ids:[]});async function W(){F.value=!0;try{let e=await D({page:z.value,page_size:L.value.per_page,keyword:R.value||void 0});I.value=e.items,L.value=e.meta}finally{F.value=!1}}async function G(){B.value=(await k({page:1,page_size:200,status:1})).items.map(e=>({id:e.id,name:e.name}))}function K(){H.value=null,U.value={username:``,password:``,real_name:``,mobile:``,email:``,status:1,role_ids:[]},V.value=!0}function q(e){H.value=e,U.value={username:e.username,password:``,real_name:e.real_name||``,mobile:e.mobile||``,email:e.email||``,status:e.status,role_ids:e.roles?.map(e=>e.id)||[]},V.value=!0}async function J(){if(!H.value&&!U.value.password){b.warning(`请设置初始密码`);return}H.value?(await w(H.value.id,{real_name:U.value.real_name||null,mobile:U.value.mobile||null,email:U.value.email||null,status:U.value.status,role_ids:U.value.role_ids}),U.value.password&&await T(H.value.id,U.value.password)):await O({username:U.value.username,password:U.value.password,real_name:U.value.real_name||null,mobile:U.value.mobile||null,email:U.value.email||null,status:U.value.status,role_ids:U.value.role_ids}),b.success(`已保存`),V.value=!1,await W()}async function Y(e){await y.confirm(`确定删除管理员「${e.username}」?`,`提示`,{type:`warning`}),await E(e.id),b.success(`已删除`),await W()}function X(){z.value=1,W()}function Z(){R.value=``,z.value=1,W()}return S(async()=>{await G(),await W()}),(n,p)=>{let y=l(`el-button`),b=l(`el-input`),S=l(`el-table-column`),w=l(`el-tag`),T=l(`el-table`),E=l(`el-pagination`),D=l(`el-card`),O=l(`el-form-item`),k=l(`el-switch`),G=l(`el-option`),Q=l(`el-select`),$=l(`el-form`),ee=l(`el-dialog`),te=s(`loading`);return i(),e(m,null,[d(`div`,A,[d(`div`,j,[r(x),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:K},{default:u(()=>[...p[11]||=[o(`新增管理员`,-1)]]),_:1})]),r(D,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,M,[r(b,{modelValue:R.value,"onUpdate:modelValue":p[0]||=e=>R.value=e,placeholder:`账号/姓名/手机`,clearable:``,class:`filter-search`,onKeyup:f(X,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:X},{default:u(()=>[...p[12]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:Z},{default:u(()=>[...p[13]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(T,{data:I.value,"row-key":`id`},{default:u(()=>[r(S,{prop:`username`,label:`账号`,width:`140`}),r(S,{prop:`real_name`,label:`姓名`,width:`120`}),r(S,{prop:`mobile`,label:`手机`,width:`130`}),r(S,{label:`状态`,width:`90`,align:`center`},{default:u(({row:e})=>[d(`span`,{class:c([`status-badge`,t(C)(e.status)])},_(e.status===1?`启用`:`停用`),3)]),_:1}),r(S,{prop:`last_login_at`,label:`最近登录`,"min-width":`180`}),r(S,{label:`角色`,"min-width":`160`},{default:u(({row:t})=>[(i(!0),e(m,null,g(t.roles,e=>(i(),v(w,{key:e.id,size:`small`,style:{"margin-right":`4px`}},{default:u(()=>[o(_(e.name),1)]),_:2},1024))),128))]),_:1}),r(S,{label:`操作`,width:`160`,fixed:`right`},{default:u(({row:e})=>[d(`div`,N,[r(y,{class:`btn-action-primary`,onClick:t=>q(e)},{default:u(()=>[...p[14]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(y,{class:`btn-action-brand`,onClick:t=>Y(e)},{default:u(()=>[...p[15]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[te,F.value]]),d(`div`,P,[r(E,{"current-page":z.value,"onUpdate:currentPage":p[1]||=e=>z.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:W},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r(ee,{modelValue:V.value,"onUpdate:modelValue":p[10]||=e=>V.value=e,title:H.value?`编辑管理员`:`新增管理员`,width:`520px`},{footer:u(()=>[r(y,{onClick:p[9]||=e=>V.value=!1},{default:u(()=>[...p[16]||=[o(`取消`,-1)]]),_:1}),r(y,{type:`primary`,onClick:J},{default:u(()=>[...p[17]||=[o(`保存`,-1)]]),_:1})]),default:u(()=>[r($,{"label-width":`88px`},{default:u(()=>[H.value?a(``,!0):(i(),v(O,{key:0,label:`账号`},{default:u(()=>[r(b,{modelValue:U.value.username,"onUpdate:modelValue":p[2]||=e=>U.value.username=e},null,8,[`modelValue`])]),_:1})),r(O,{label:H.value?`重置密码`:`初始密码`},{default:u(()=>[r(b,{modelValue:U.value.password,"onUpdate:modelValue":p[3]||=e=>U.value.password=e,type:`password`,"show-password":``,placeholder:`可留空`},null,8,[`modelValue`])]),_:1},8,[`label`]),r(O,{label:`姓名`},{default:u(()=>[r(b,{modelValue:U.value.real_name,"onUpdate:modelValue":p[4]||=e=>U.value.real_name=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`手机`},{default:u(()=>[r(b,{modelValue:U.value.mobile,"onUpdate:modelValue":p[5]||=e=>U.value.mobile=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`邮箱`},{default:u(()=>[r(b,{modelValue:U.value.email,"onUpdate:modelValue":p[6]||=e=>U.value.email=e},null,8,[`modelValue`])]),_:1}),r(O,{label:`状态`},{default:u(()=>[r(k,{modelValue:U.value.status,"onUpdate:modelValue":p[7]||=e=>U.value.status=e,"active-value":1,"inactive-value":0},null,8,[`modelValue`])]),_:1}),r(O,{label:`角色`},{default:u(()=>[r(Q,{modelValue:U.value.role_ids,"onUpdate:modelValue":p[8]||=e=>U.value.role_ids=e,multiple:``,filterable:``,style:{width:`100%`}},{default:u(()=>[(i(!0),e(m,null,g(B.value,e=>(i(),v(G,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}});export{F as default}; \ No newline at end of file diff --git a/public/admin/index.html b/public/admin/index.html index 8006701..ca4a0d1 100644 --- a/public/admin/index.html +++ b/public/admin/index.html @@ -10,8 +10,8 @@ href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&display=swap" rel="stylesheet" /> - S-lake高校雷达网 - + S-lake先进技术发展中心 + diff --git a/resources/views/miniapp-radar.blade.php b/resources/views/miniapp-radar.blade.php index 8668b72..d9844b4 100644 --- a/resources/views/miniapp-radar.blade.php +++ b/resources/views/miniapp-radar.blade.php @@ -30,6 +30,16 @@ .panel-title { color: #111827; font-size: 18px; font-weight: 600; } .panel-sub { margin-top: 4px; color: #6b7280; font-size: 13px; } .panel-scroll { max-height: 52vh; margin-top: 12px; overflow-y: auto; -webkit-overflow-scrolling: touch; } + .college-row { + display: flex; align-items: center; justify-content: space-between; gap: 12px; + padding: 12px 0; border-bottom: 1px solid #eef2f6; cursor: pointer; + } + .college-name { display: block; color: #111827; font-size: 15px; } + .college-count { display: block; margin-top: 4px; color: #6b7280; font-size: 12px; } + .panel-back { + display: inline-flex; align-items: center; gap: 4px; margin-bottom: 8px; + color: #244e98; font-size: 13px; cursor: pointer; + } .teacher-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 0; border-bottom: 1px solid #eef2f6; cursor: pointer; @@ -79,7 +89,7 @@ const TIANDITU_TK = @json($tiandituTk); const API_BASE = @json($apiBase); const SUZHOU_CENTER = { lng: 120.585316, lat: 31.298886 }; - const SUZHOU_ZOOM = 11; + const SUZHOU_ZOOM = 9; const params = new URLSearchParams(window.location.search); const token = params.get('token') || ''; @@ -88,6 +98,8 @@ let schoolOverlays = []; let schools = []; let activeSchool = null; + let activeCollege = null; + let panelMode = 'colleges'; let unbindDragPan = null; let schoolOverlayClass = null; @@ -241,19 +253,50 @@ function selectSchool(school) { activeSchool = school; + activeCollege = null; + panelMode = 'colleges'; schoolOverlays.forEach(({ school: s, overlay }) => overlay.setActive(s.id === school.id)); - openTeacherPanel(school); + openCollegePanel(school); } - function openTeacherPanel(school) { - document.getElementById('panelTitle').textContent = school.name || '高校老师'; + function openCollegePanel(school) { + document.getElementById('panelTitle').textContent = school.name || '高校学院'; document.getElementById('panelSub').textContent = (school.city || '') + ' · ' + (school.teachers_count || 0) + ' 位老师'; const scroll = document.getElementById('panelScroll'); - const teachers = school.teachers || []; + const colleges = school.colleges || []; + if (!colleges.length) { + scroll.innerHTML = '
该高校暂无学院数据
'; + } else { + scroll.innerHTML = colleges.map((c) => ( + '
' + + '
' + escapeHtml(c.name) + '' + + '' + (c.teachers_count || 0) + ' 位老师
' + + '
' + )).join(''); + scroll.querySelectorAll('.college-row').forEach((row) => { + row.addEventListener('click', () => { + const key = row.dataset.key; + const college = colleges.find((item) => item.key === key); + if (college) openTeacherPanel(school, college); + }); + }); + } + document.getElementById('panelMask').classList.add('visible'); + document.getElementById('teacherPanel').classList.add('visible'); + } + + function openTeacherPanel(school, college) { + activeCollege = college; + panelMode = 'teachers'; + document.getElementById('panelTitle').textContent = college.name || '学院老师'; + document.getElementById('panelSub').textContent = (school.name || '') + ' · ' + (college.teachers_count || 0) + ' 位老师'; + const scroll = document.getElementById('panelScroll'); + const teachers = college.teachers || []; + const backHtml = '
‹ 返回学院列表
'; if (!teachers.length) { - scroll.innerHTML = '
该高校暂无老师数据
'; + scroll.innerHTML = backHtml + '
该学院暂无老师数据
'; } else { - scroll.innerHTML = teachers.map((t) => ( + scroll.innerHTML = backHtml + teachers.map((t) => ( '
' + '
' + escapeHtml(t.name) + '' + '' + escapeHtml(t.research_direction || '暂无研究方向') + '
' + @@ -263,11 +306,20 @@ row.addEventListener('click', () => openTeacher(Number(row.dataset.id))); }); } - document.getElementById('panelMask').classList.add('visible'); - document.getElementById('teacherPanel').classList.add('visible'); + const backBtn = document.getElementById('panelBack'); + if (backBtn) { + backBtn.addEventListener('click', (e) => { + e.stopPropagation(); + openCollegePanel(school); + }); + } } function closeTeacherPanel() { + activeSchool = null; + activeCollege = null; + panelMode = 'colleges'; + schoolOverlays.forEach(({ overlay }) => overlay.setActive(false)); document.getElementById('panelMask').classList.remove('visible'); document.getElementById('teacherPanel').classList.remove('visible'); } diff --git a/routes/admin.php b/routes/admin.php index b202b1e..f796175 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -21,6 +21,7 @@ use App\Http\Controllers\Admin\MiniappUserController; use App\Http\Controllers\Admin\NewsController; use App\Http\Controllers\Admin\OperationLogController; use App\Http\Controllers\Admin\PaperController; +use App\Http\Controllers\Admin\PastReviewController; use App\Http\Controllers\Admin\RadarMapController; use App\Http\Controllers\Admin\GridMemberController; use App\Http\Controllers\Admin\ResearchDirectionController; @@ -139,6 +140,12 @@ Route::prefix('admin/v1')->group(function () { Route::delete('/news/{news}', [NewsController::class, 'destroy'])->name('admin.news.destroy'); Route::patch('/news/{news}/publish', [NewsController::class, 'publish'])->name('admin.news.publish'); + Route::get('/past-reviews', [PastReviewController::class, 'index'])->name('admin.past-reviews.index'); + Route::post('/past-reviews', [PastReviewController::class, 'store'])->name('admin.past-reviews.store'); + Route::get('/past-reviews/{pastReview}', [PastReviewController::class, 'show'])->name('admin.past-reviews.show'); + Route::put('/past-reviews/{pastReview}', [PastReviewController::class, 'update'])->name('admin.past-reviews.update'); + Route::delete('/past-reviews/{pastReview}', [PastReviewController::class, 'destroy'])->name('admin.past-reviews.destroy'); + Route::get('/banners', [BannerController::class, 'index'])->name('admin.banners.index'); Route::post('/banners', [BannerController::class, 'store'])->name('admin.banners.store'); Route::get('/banners/{banner}', [BannerController::class, 'show'])->name('admin.banners.show'); diff --git a/routes/miniapp.php b/routes/miniapp.php index 9cbac00..e5e90e1 100644 --- a/routes/miniapp.php +++ b/routes/miniapp.php @@ -11,6 +11,7 @@ use App\Http\Controllers\Miniapp\DemandController; use App\Http\Controllers\Miniapp\DictController; use App\Http\Controllers\Miniapp\NewsController; use App\Http\Controllers\Miniapp\PaperController; +use App\Http\Controllers\Miniapp\PastReviewController; use App\Http\Controllers\Miniapp\ProfileController; use App\Http\Controllers\Miniapp\RadarMapController; use App\Http\Controllers\Miniapp\ResearchDirectionController; @@ -24,6 +25,7 @@ Route::prefix('miniapp/v1')->group(function () { Route::get('/banners', [BannerController::class, 'index']); Route::get('/banners/{banner}', [BannerController::class, 'show'])->whereNumber('banner'); + Route::get('/past-reviews', [PastReviewController::class, 'index']); Route::get('/courses/hot', [CourseController::class, 'hot']); Route::get('/courses/latest', [CourseController::class, 'latest']); Route::get('/courses/calendar', [CourseController::class, 'calendar']); diff --git a/routes/web.php b/routes/web.php index c3169cc..ae4e74b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -19,5 +19,13 @@ Route::redirect('/', '/admin/'); Route::get('/miniapp-radar', [MiniappRadarPageController::class, 'show']); +$webviewVerifyFile = config('services.wechat.mini_program.webview_verify_file'); +$webviewVerifyContent = config('services.wechat.mini_program.webview_verify_content'); +if ($webviewVerifyFile && $webviewVerifyContent) { + Route::get('/'.$webviewVerifyFile, static fn () => response($webviewVerifyContent, 200, [ + 'Content-Type' => 'text/plain; charset=UTF-8', + ])); +} + // 管理后台 SPA:入口返回 index.html;历史深链 /admin/xxx 重定向到 /admin/#/xxx Route::get('/admin/{path?}', AdminSpaController::class)->where('path', '.*');