From 0fc9ad797168bfd20c65b506cb90092177e4bc85 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Fri, 27 Mar 2026 13:36:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=92=8C=E8=81=8C=E4=BD=8D=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E6=8A=A5=E9=94=99=EF=BC=8C=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复超管编辑用户时password必填导致报错,改为更新时可选 - 修复单位管理员发布职位时organization_id必填校验失败 - 首页"一键进入"按钮跳转到公司列表页 - 成员单位卡片点击跳转到首页对应公司的职位列表 - 管理后台侧边栏新增"返回首页"入口 Co-Authored-By: Claude Opus 4.6 --- offer_backend/apps/accounts/serializers.py | 16 +++- offer_backend/apps/jobs/serializers.py | 3 +- offer_frontend/src/layouts/AdminLayout.vue | 77 ++++++++++++++++--- offer_frontend/src/views/SplashView.vue | 4 +- .../src/views/admin/JobManageView.vue | 9 ++- .../src/views/portal/CompanyListView.vue | 4 +- offer_frontend/src/views/portal/HomeView.vue | 15 +++- 7 files changed, 107 insertions(+), 21 deletions(-) diff --git a/offer_backend/apps/accounts/serializers.py b/offer_backend/apps/accounts/serializers.py index d672208..f6202e9 100644 --- a/offer_backend/apps/accounts/serializers.py +++ b/offer_backend/apps/accounts/serializers.py @@ -45,12 +45,17 @@ class UserSerializer(serializers.ModelSerializer): class AdminUserSerializer(serializers.ModelSerializer): """超管用于创建/管理公司管理员账号""" - password = serializers.CharField(write_only=True, min_length=6) + password = serializers.CharField(write_only=True, min_length=6, required=False) class Meta: model = User fields = ['id', 'username', 'email', 'phone', 'role', 'organization', 'password', 'is_active'] + def validate(self, attrs): + if not self.instance and not attrs.get('password'): + raise serializers.ValidationError({'password': '创建用户时密码为必填项'}) + return attrs + def create(self, validated_data): password = validated_data.pop('password') user = User(**validated_data) @@ -58,6 +63,15 @@ class AdminUserSerializer(serializers.ModelSerializer): user.save() return user + def update(self, instance, validated_data): + password = validated_data.pop('password', None) + for attr, value in validated_data.items(): + setattr(instance, attr, value) + if password: + instance.set_password(password) + instance.save() + return instance + class SendCodeSerializer(serializers.Serializer): """发送验证码 serializer""" diff --git a/offer_backend/apps/jobs/serializers.py b/offer_backend/apps/jobs/serializers.py index 596cad3..a91aedf 100644 --- a/offer_backend/apps/jobs/serializers.py +++ b/offer_backend/apps/jobs/serializers.py @@ -18,7 +18,8 @@ class JobDetailSerializer(serializers.ModelSerializer): organization_id = serializers.PrimaryKeyRelatedField( source='organization', queryset=Organization.objects.all(), - write_only=True + write_only=True, + required=False ) class Meta: diff --git a/offer_frontend/src/layouts/AdminLayout.vue b/offer_frontend/src/layouts/AdminLayout.vue index 807a1bd..9e6b520 100644 --- a/offer_frontend/src/layouts/AdminLayout.vue +++ b/offer_frontend/src/layouts/AdminLayout.vue @@ -1,9 +1,9 @@ - - - -
菜单
+ +
+ +
+ +
+
+ + diff --git a/offer_frontend/src/views/SplashView.vue b/offer_frontend/src/views/SplashView.vue index b7497e9..f815b2b 100644 --- a/offer_frontend/src/views/SplashView.vue +++ b/offer_frontend/src/views/SplashView.vue @@ -45,8 +45,8 @@

人才创造美好未来

与优秀的人一起,做有价值的事

-