Ver Fonte

添加填空及部分功能

yangg há 2 semanas atrás
pai
commit
3ee9ccd305

+ 19 - 0
package-lock.json

@@ -63,6 +63,7 @@
 				"vue-grid-layout": "^3.0.0-beta1",
 				"vue-i18n": "^9.14.0",
 				"vue-router": "^4.4.3",
+				"vuedraggable": "^4.1.0",
 				"vxe-table": "^4.6.18",
 				"xe-utils": "^3.5.30"
 			},
@@ -10506,6 +10507,18 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/vuedraggable": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz",
+			"integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
+			"license": "MIT",
+			"dependencies": {
+				"sortablejs": "1.14.0"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.1"
+			}
+		},
 		"node_modules/vuedraggable-es": {
 			"version": "4.1.1",
 			"resolved": "https://registry.npmmirror.com/vuedraggable-es/-/vuedraggable-es-4.1.1.tgz",
@@ -10522,6 +10535,12 @@
 			"resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz",
 			"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
 		},
+		"node_modules/vuedraggable/node_modules/sortablejs": {
+			"version": "1.14.0",
+			"resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz",
+			"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==",
+			"license": "MIT"
+		},
 		"node_modules/vxe-pc-ui": {
 			"version": "4.3.83",
 			"resolved": "https://registry.npmmirror.com/vxe-pc-ui/-/vxe-pc-ui-4.3.83.tgz",

+ 1 - 0
package.json

@@ -64,6 +64,7 @@
 		"vue-grid-layout": "^3.0.0-beta1",
 		"vue-i18n": "^9.14.0",
 		"vue-router": "^4.4.3",
+		"vuedraggable": "^4.1.0",
 		"vxe-table": "^4.6.18",
 		"xe-utils": "^3.5.30"
 	},

+ 1 - 1
src/theme/element.scss

@@ -206,7 +206,7 @@
 	}
 }
 .layout-container .layout-aside .el-scrollbar__view{
-	margin-top: 33px;
+	/* margin-top: 33px; */
 }
 
 /* Tabs 标签页

+ 84 - 0
src/views/position/detail/api.ts

@@ -0,0 +1,84 @@
+import { request } from '/@/utils/service';
+import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq,PageQuery } from '@fast-crud/fast-crud';
+
+/* 获取胜任力标签 */
+export function GetCompetencyList(query: UserPageQuery) {
+	return request({
+		url: '/api/system/competency/list',
+		method: 'get',
+		params: {...query,tenant_id:1},
+	});
+}
+/* 获取题库列表 */
+export function GetQuestionList(query: PageQuery) {
+	return request({
+		url: '/api/system/interview_question/list',
+		method: 'get',
+		params: {...query,tenant_id:1},/* :Session.get('tenant_id').tenant_id || ,tenant_id:'1' */
+	});
+}
+/* 根据职位及胜任力标签生成题目 */
+
+export function GenerateQuestions(obj: AddReq) {
+	return request({
+		url: '/api/admin/interview/questions/generate',
+		method: 'post',
+		data: {...obj,tenant_id:1},
+        timeout: 0
+	});
+}
+/* 获取生成题目的列表 */
+export function GetDraftList(obj: EditReq) {
+	return request({
+		url: `/api/system/interview_question/draft_list?tenant_id=${obj.tenant_id}&position_id=${obj.position_id}`,
+		method: 'get',
+	});
+}
+
+/* 暂存生成的题目 */
+export function SaveDraft(obj: EditReq) {
+	return request({
+		url: `/api/system/interview_question/confirm_draft`,
+		method: 'post',
+		data: {...obj,tenant_id:1},
+	});
+}
+/* 获取数字人列表 */
+export function GetDigitalList(obj: EditReq) {
+	return request({
+		url: `/api/system/digital_human/`,
+		method: 'get',
+		params: {...obj,tenant_id:1},
+	});
+}
+
+export function DelObj(data:any) {
+	return request({
+		url:`/api/system/competency/delete`,
+		method: 'post',
+		data: {...data,tenant_id:1},
+	});
+}
+export function GetPermission(query: UserPageQuery) {
+    return request({
+        url: '/api/system/competency/list',
+        method: 'get',
+        params: {...query,tenant_id:1},
+    });
+}
+
+export function GetcategoryList(query: UserPageQuery) {
+	return request({
+		url: '/api/system/question_category/list',
+		method: 'get',
+		params: {...query,tenant_id:1},
+	});
+}
+
+export function GetPositionList(query: UserPageQuery) {
+	return request({
+		url: '/api/system/job/list',
+		method: 'get',
+		params: {...query,tenant_id:1},
+	});
+}

+ 1627 - 0
src/views/position/detail/index.css

@@ -0,0 +1,1627 @@
+.position-detail-container {
+  padding: 20px;
+  width: 88% !important;
+  margin: 0 0 0 170px;
+}
+
+.header-container {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+}
+
+.header-actions {
+  display: flex;
+  gap: 10px;
+}
+
+.detail-content {
+  display: flex;
+  gap: 20px;
+}
+
+.detail-card {
+  flex: 2;
+}
+
+.status-cards {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+
+.section-title {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+  font-weight: bold;
+  color: #333;
+  position: relative;
+}
+
+.section-line {
+  width: 4px;
+  height: 16px;
+  background-color: #67C23A;
+  margin-right: 8px;
+}
+
+.edit-btn {
+  position: absolute;
+  right: 0;
+  color: #67C23A;
+}
+
+.detail-item {
+  display: flex;
+  margin-bottom: 20px;
+  line-height: 1.5;
+}
+
+.detail-label {
+  width: 120px;
+  color: #606266;
+  font-weight: 500;
+}
+
+.detail-value {
+  flex: 1;
+  color: #303133;
+}
+
+.html-content {
+  max-height: 300px;
+  overflow-y: auto;
+  padding: 10px;
+ /*  background-color: #f9f9f9; */
+  border-radius: 4px;
+}
+
+.benefit-tag {
+  margin-right: 8px;
+  margin-bottom: 8px;
+}
+
+.status-switch {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+}
+
+.status-text {
+  font-size: 14px;
+  color: #303133;
+}
+
+.usage-content {
+  display: flex;
+  align-items: center;
+  margin-top: 10px;
+}
+
+.usage-label {
+  width: 80px;
+  color: #606266;
+}
+
+.usage-value {
+  color: #303133;
+  font-weight: 500;
+}
+
+.process-steps {
+  margin-top: 20px;
+}
+
+.process-step {
+  display: flex;
+  align-items: flex-start;
+  margin-bottom: 15px;
+}
+
+.step-number {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+  background-color: #67C23A;
+  color: white;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-right: 10px;
+  font-size: 14px;
+}
+
+.step-content {
+  flex: 1;
+}
+
+.step-title {
+  font-weight: 500;
+  color: #303133;
+  margin-bottom: 4px;
+}
+
+.step-desc {
+  font-size: 12px;
+  color: #909399;
+}
+
+.process-step.disabled .step-number {
+  background-color: #909399;
+}
+
+.process-step.disabled .step-title,
+.process-step.disabled .step-desc {
+  color: #C0C4CC;
+}
+
+/* 招聘流程编辑对话框样式 */
+.process-dialog-content {
+  max-height: 400px;
+  overflow-y: auto;
+}
+
+.process-edit-item {
+  display: flex;
+  align-items: center;
+  padding: 15px;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  background-color: #f5f7fa;
+  position: relative;
+}
+
+.process-edit-item.highlight {
+  background-color: #f0f9eb;
+  border: 1px solid #e1f3d8;
+}
+
+.process-number {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+  background-color: #67C23A;
+  color: white;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-right: 15px;
+}
+
+.process-edit-content {
+  flex: 1;
+}
+
+.process-edit-desc {
+  font-size: 12px;
+  color: #909399;
+  margin-top: 4px;
+}
+.process-edit-btn{
+
+  display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.delete-btn {
+  position: absolute;
+  right: 10px;
+  top: 50%;
+  transform: translateY(-50%);
+}
+
+/* 添加在每个步骤上方的加号按钮样式 */
+.add-process-btn-top {
+  display: flex;
+  justify-content: center;
+  margin-bottom: 5px;
+}
+
+.add-process-btn-top .el-button {
+  color: #67C23A;
+  padding: 5px;
+}
+
+/* 确保原有的底部加号按钮样式保持不变 */
+.add-process-btn {
+  display: flex;
+  justify-content: center;
+  margin-top: 15px;
+}
+
+.add-process-btn .el-button {
+  color: #67C23A;
+}
+
+/* 流程步骤选项菜单 */
+.process-options-menu {
+  position: absolute;
+  background-color: white;
+  border-radius: 4px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  padding: 8px 0;
+  z-index: 2000;
+  max-height: 300px;
+  overflow-y: auto;
+  width: 150px;
+}
+
+.process-option-item {
+  padding: 8px 16px;
+  cursor: pointer;
+  font-size: 14px;
+  color: #606266;
+}
+
+.process-option-item:hover {
+  background-color: #f5f7fa;
+  color: #67C23A;
+}
+
+/* AI视频抽屉样式 */
+.ai-video-drawer {
+  --el-drawer-padding-primary: 0;
+}
+
+.ai-video-steps {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 20px 0;
+  border-bottom: 1px solid #e4e7ed;
+  background-color: #fff;
+}
+
+.step-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  color: #909399;
+  position: relative;
+  z-index: 1;
+  cursor: pointer;
+  transition: all 0.3s;
+}
+
+.step-item:hover {
+  color: #67C23A;
+}
+
+.step-item:hover .step-number {
+  border-color: #67C23A;
+}
+
+.step-number {
+  width: 30px;
+  height: 30px;
+  border-radius: 50%;
+  background-color: #f5f7fa;
+  color: #909399;
+  border: 1px solid #dcdfe6;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 8px;
+  font-weight: bold;
+}
+
+.step-item.active .step-number {
+  background-color: #67C23A;
+  color: white;
+  border-color: #67C23A;
+}
+
+.step-line {
+  width: 100px;
+  height: 1px;
+  background-color: #e4e7ed;
+  margin: 0 15px;
+  position: relative;
+  top: -15px;
+}
+
+.step-line.active-line {
+  background-color: #67C23A;
+}
+
+.step-title {
+  font-size: 14px;
+}
+
+.ai-video-content {
+  padding: 20px;
+  height: calc(100% - 120px); /* 减去header和footer高度 */
+  overflow-y: auto;
+}
+
+.drawer-footer {
+  padding: 10px 20px;
+  text-align: right;
+  border-top: 1px solid #e4e7ed;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  background-color: white;
+}
+
+/* 步骤1:考察能力样式 */
+.option-tip {
+  margin-bottom: 15px;
+  color: #606266;
+}
+
+.new-feature-tip {
+  background-color: #f0f9eb;
+  padding: 10px;
+  border-radius: 4px;
+  margin-bottom: 20px;
+  font-size: 14px;
+  color: #606266;
+  line-height: 1.5;
+}
+
+.new-tag {
+  display: inline-block;
+  background-color: #f56c6c;
+  color: white;
+  padding: 2px 6px;
+  border-radius: 4px;
+  font-size: 12px;
+  margin-right: 5px;
+}
+
+.ability-options {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 15px;
+}
+
+.ability-label {
+  font-size: 14px;
+  color: #606266;
+}
+
+/* 步骤2:面试题目样式 */
+.interview-settings {
+  width: 100%;
+}
+
+.interview-header {
+  display: flex;
+    align-items: flex-start;
+    margin-bottom: 20px;
+    flex-direction: column;
+}
+.interview-content{
+  display: flex;
+  justify-content: space-around;
+}
+
+.interview-duration {
+  display: flex;
+  align-items: center;
+}
+
+.duration-value {
+  font-weight: bold;
+  margin: 0 10px;
+}
+
+.duration-tip {
+  color: #909399;
+  font-size: 12px;
+}
+
+.interview-mode {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+}
+
+.mode-value {
+  font-weight: bold;
+  margin: 0 10px;
+}
+
+.interview-questions-container {
+  width: 85%;
+  min-height: 200px;
+  /* border: 1px dashed #dcdfe6; */
+  border-radius: 4px;
+  margin-bottom: 20px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.no-questions {
+  text-align: center;
+  color: #909399;
+}
+
+.ai-tip {
+  font-size: 12px;
+  color: #c0c4cc;
+  margin: 5px 0;
+}
+
+.auto-generate-btn {
+  margin-top: 15px;
+}
+
+.multi-dimension-questions {
+  width: 30%;
+  margin-top: 30px;
+}
+
+.dimension-title {
+  font-weight: bold;
+  margin-bottom: 15px;
+}
+
+.dimension-list {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+}
+
+.dimension-item {
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+}
+
+.dimension-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.expand-icon {
+  cursor: pointer;
+}
+
+/* 步骤3:系统设置样式 */
+.system-settings {
+  width: 100%;
+  .setting-item{
+    border: 1px solid #ebeef5;
+    border-radius: 30px;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+  }
+}
+
+.setting-section {
+  padding: 20px;
+  
+  .section-header {
+    font-size: 16px;
+    font-weight: 500;
+    margin-bottom: 20px;
+    color: #333;
+  }
+
+  .interviewer-avatars {
+    display: flex;
+    gap: 20px;
+    margin-bottom: 30px;
+
+    .avatar-item {
+      cursor: pointer;
+      text-align: center;
+      
+      .avatar-wrapper {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        gap: 8px;
+      }
+
+      .avatar-circle {
+        width: 60px;
+        height: 60px;
+        border-radius: 50%;
+        border: 2px solid transparent;
+        overflow: hidden;
+        transition: all 0.3s ease;
+
+        &.selected {
+          border-color: #0052D9;
+        }
+
+        img {
+          width: 100%;
+          height: 100%;
+          object-fit: cover;
+        }
+      }
+
+      .avatar-name {
+        font-size: 14px;
+        color: #666;
+      }
+
+      &:hover {
+        .avatar-circle {
+          border-color: #0052D9;
+          opacity: 0.8;
+        }
+      }
+    }
+  }
+}
+
+.rank-settings {
+  display: flex;
+  align-items: center;
+  margin-bottom: 15px;
+}
+
+.rank-range {
+  display: flex;
+  align-items: center;
+  margin-right: 30px;
+}
+
+.range-inputs {
+  display: flex;
+  align-items: center;
+  margin-left: 10px;
+}
+
+.percent-input {
+  width: 80px;
+}
+
+.score-display {
+  display: flex;
+  align-items: center;
+}
+
+.score-range {
+  margin-left: 10px;
+  color: #67C23A;
+}
+
+.add-rank-btn {
+  margin-top: 10px;
+}
+
+.validity-setting {
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+}
+
+.validity-label {
+  margin-left: 10px;
+}
+
+.validity-tip {
+  font-size: 12px;
+  color: #909399;
+  margin-top: 5px;
+}
+
+.model-select {
+  width: 200px;
+}
+
+@media (max-width: 768px) {
+  .ability-options {
+    grid-template-columns: repeat(2, 1fr);
+  }
+  
+  .step-line {
+    width: 50px;
+  }
+}
+
+@media (max-width: 480px) {
+  .ability-options {
+    grid-template-columns: 1fr;
+  }
+  
+  .interview-header {
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  
+  .interview-actions {
+    margin-top: 10px;
+  }
+  
+  .rank-settings {
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  
+  .rank-range {
+    margin-bottom: 10px;
+  }
+}
+
+/* 视频宣讲弹窗样式 */
+.video-lecture-form {
+  padding: 20px 0;
+}
+
+.form-item {
+  margin-bottom: 20px;
+}
+
+.form-label {
+  font-weight: 500;
+  margin-bottom: 8px;
+  color: #606266;
+}
+
+.video-uploader {
+  width: 100%;
+}
+
+.upload-area {
+  width: 100%;
+  height: 120px;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  cursor: pointer;
+  transition: border-color 0.3s;
+}
+
+.upload-area:hover {
+  border-color: #67C23A;
+}
+
+.upload-text {
+  color: #909399;
+  font-size: 12px;
+  margin-top: 8px;
+}
+
+.el-icon {
+  font-size: 24px;
+  color: #909399;
+}
+
+/* AI实时对话抽屉样式 */
+.ai-chat-drawer {
+  --el-drawer-padding-primary: 0;
+}
+
+.ai-chat-content {
+  padding: 20px;
+  height: calc(100% - 120px);
+  overflow-y: auto;
+}
+
+.chat-settings {
+  margin-bottom: 30px;
+}
+
+.chat-actions {
+  display: flex;
+  gap: 10px;
+  margin: 20px 0;
+}
+
+.chat-questions {
+  margin-top: 20px;
+  min-height: 200px;
+  border: 1px dashed #dcdfe6;
+  border-radius: 4px;
+}
+
+.empty-questions {
+  height: 200px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  color: #909399;
+}
+
+.tip-text {
+  font-size: 12px;
+  color: #c0c4cc;
+  margin-top: 8px;
+}
+
+.question-list {
+  padding: 16px;
+ /*  background: #f5f7fa; */
+  border-radius: 8px;
+  min-height: 200px;
+}
+
+.question-card {
+  background: #fff;
+  border-radius: 8px;
+  padding: 20px;
+  margin-bottom: 16px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+}
+
+.question-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+  flex-wrap: wrap;
+  gap: 10px;
+}
+
+.question-title {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+}
+
+.question-number {
+  color: #333;
+  font-weight: 500;
+}
+
+.question-actions {
+  display: flex;
+  align-items: center;
+  gap: 20px;
+}
+
+.weight-control, .answer-limit {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+
+.weight-label, .answer-label {
+  color: #606266;
+  font-size: 14px;
+  white-space: nowrap;
+}
+
+:deep(.el-input-number) {
+  width: 100px;
+}
+
+:deep(.el-select) {
+  width: 120px;
+}
+
+.question-info {
+    border-bottom: 1px solid #e4e7ed;
+/*   background: #f8f9fa; */
+  padding: 15px;
+  border-radius: 4px;
+}
+.question-info .info-item{
+   
+    color: #a6a6a6;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.info-item {
+  margin-bottom: 12px;
+  line-height: 1.6;
+}
+
+.info-item:last-child {
+  margin-bottom: 0;
+}
+
+.info-label {
+  color: #909399;
+  margin-right: 8px;
+  font-weight: 500;
+}
+
+/* 问题编辑弹框样式 */
+.question-form {
+  padding: 20px 0;
+}
+
+.form-item {
+  margin-bottom: 20px;
+}
+
+.form-label {
+  font-weight: 500;
+  margin-bottom: 8px;
+  color: #606266;
+  display: flex;
+  align-items: center;
+}
+
+.required {
+  color: #f56c6c;
+  margin-left: 4px;
+}
+
+.full-width {
+  width: 100%;
+}
+
+:deep(.el-input__count) {
+  background: transparent;
+}
+
+:deep(.el-textarea__count) {
+  background: transparent;
+}
+
+/* 资料收集对话框样式 */
+.data-collection-form {
+  padding: 20px;
+}
+
+/* 表单项样式 */
+.form-item {
+  margin-bottom: 24px;
+}
+
+/* 表单标签样式 */
+.form-label {
+  font-size: 14px;
+  color: #333;
+  font-weight: 500;
+  margin-bottom: 12px;
+  display: flex;
+  align-items: center;
+}
+
+/* 必填星号样式 */
+.required {
+  color: #ff4d4f;
+  margin-left: 4px;
+  font-size: 14px;
+}
+
+/* 开关样式 */
+:deep(.el-switch) {
+  margin-top: 8px;
+}
+
+/* 问题列表容器样式 */
+.question-list {
+    width: 800px;
+    height: 550px;
+    overflow-y: scroll;
+  margin-top: 12px;
+ /*  border: 1px solid #e4e7ed; */
+  border-radius: 4px;
+  padding: 16px;
+/*   background-color: #f8f9fa; */
+}
+
+/* 问题项样式 */
+.question-item {
+  margin-bottom: 16px;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+}
+
+/* 复选框组样式 */
+:deep(.el-checkbox-group) {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+/* 复选框样式 */
+:deep(.el-checkbox) {
+  margin-right: 0;
+  height: auto;
+}
+
+/* 复选框标签样式 */
+:deep(.el-checkbox__label) {
+  font-size: 14px;
+  color: #606266;
+}
+
+.data-collection-dialog {
+  .data-collection-form {
+    padding: 0;
+  }
+
+  .question-list {
+    padding: 0;
+  }
+
+  .question-item {
+    border: 1px solid #DCDFE6;
+    border-radius: 4px;
+    margin-bottom: 16px;
+    overflow: hidden;
+  }
+
+  .question-header {
+    background: #F5F7FA;
+    padding: 12px 16px;
+    border-bottom: 1px solid #DCDFE6;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+
+  .question-title {
+    font-size: 14px;
+    color: #303133;
+  }
+
+  .question-type {
+    display: flex;
+    align-items: center;
+    gap: 4px;
+    color: #909399;
+    font-size: 14px;
+    cursor: pointer;
+
+    .el-icon {
+      font-size: 12px;
+    }
+  }
+
+  .question-content {
+    padding: 16px;
+  }
+
+  .user-answer {
+    color: #909399;
+    font-size: 14px;
+    margin-bottom: 16px;
+  }
+
+  .question-actions {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 16px;
+    padding-bottom: 16px;
+    border-bottom: 1px solid #EBEEF5;
+  }
+
+  .action-left {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+
+    .action-text {
+      font-size: 14px;
+      color: #606266;
+    }
+  }
+
+  .action-right {
+    display: flex;
+    gap: 16px;
+
+    .action-icon {
+      font-size: 16px;
+      color: #909399;
+      cursor: pointer;
+
+      &:hover {
+        color: #409EFF;
+      }
+    }
+  }
+
+  .question-settings {
+    display: flex;
+    gap: 24px;
+  }
+
+  .setting-item {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    
+    span {
+      font-size: 14px;
+      color: #606266;
+    }
+  }
+
+  .add-question {
+    margin-top: 24px;
+    text-align: center;
+  }
+}
+
+/* 简历收集对话框样式 */
+.resume-collection-dialog {
+  .resume-collection-form {
+    padding: 20px 0;
+  }
+
+  .switch-label {
+    margin-left: 10px;
+    font-size: 14px;
+    color: #606266;
+  }
+
+  .resume-preview {
+    margin-top: 20px;
+    border: 1px solid #e4e7ed;
+    border-radius: 4px;
+  }
+
+  .preview-title {
+    padding: 10px 15px;
+    background-color: #f5f7fa;
+    border-bottom: 1px solid #e4e7ed;
+    font-weight: 500;
+    color: #606266;
+  }
+
+  .preview-content {
+    padding: 15px;
+  }
+
+  .preview-item {
+    display: flex;
+    align-items: center;
+    margin-bottom: 15px;
+  }
+
+  .item-label {
+    width: 80px;
+    color: #606266;
+  }
+
+  .item-input {
+    flex: 1;
+    height: 32px;
+    background-color: #f5f7fa;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+  }
+
+  .item-upload {
+    flex: 1;
+    height: 60px;
+    background-color: #f5f7fa;
+    border: 1px dashed #dcdfe6;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+  .item-required {
+    color: #f56c6c;
+    margin-left: 5px;
+  }
+}
+
+/* 添加代码测试对话框样式 */
+.code-test-dialog {
+  .code-test-form {
+    padding: 20px 0;
+  }
+
+  .switch-label {
+    margin-left: 10px;
+    font-size: 14px;
+    color: #606266;
+  }
+
+  .test-paper-selector {
+    margin-top: 10px;
+  }
+
+  .empty-paper {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 30px;
+    border: 1px dashed #dcdfe6;
+    border-radius: 4px;
+    background-color: #f8f9fa;
+  }
+
+  .tip-text {
+    margin-top: 10px;
+    font-size: 12px;
+    color: #909399;
+  }
+
+  .selected-paper {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 15px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #f8f9fa;
+  }
+
+  .paper-info {
+    flex: 1;
+  }
+
+  .paper-title {
+    font-weight: 500;
+    color: #303133;
+    margin-bottom: 5px;
+  }
+
+  .paper-meta {
+    display: flex;
+    gap: 15px;
+    font-size: 12px;
+    color: #909399;
+  }
+
+  .paper-actions {
+    display: flex;
+    gap: 10px;
+  }
+}
+
+/* 添加打字测试对话框样式 */
+.typing-test-dialog {
+  .typing-test-form {
+    padding: 20px;
+  }
+
+  .form-item {
+    margin-bottom: 24px;
+    position: relative;
+  }
+
+  .form-label {
+    font-weight: 500;
+    margin-bottom: 12px;
+    color: #606266;
+    font-size: 14px;
+  }
+
+  .article-selection {
+    margin-top: 10px;
+  }
+
+  .add-article-btn {
+    display: flex;
+    align-items: center;
+    gap: 5px;
+    font-size: 13px;
+  }
+
+  .time-input-container {
+    display: flex;
+    align-items: center;
+  }
+
+  .time-input {
+    width: 120px;
+  }
+
+  .time-unit {
+    margin-left: 10px;
+    color: #606266;
+  }
+
+  .preview-uploader {
+    width: 100px;
+  }
+
+  .upload-area {
+    width: 100px;
+    height: 100px;
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+    transition: border-color 0.3s;
+  }
+
+  .upload-area:hover {
+    border-color: #67C23A;
+  }
+
+  .upload-text {
+    color: #909399;
+    font-size: 12px;
+    margin-top: 8px;
+  }
+
+  .notes-counter {
+    position: absolute;
+    right: 10px;
+    bottom: -20px;
+    font-size: 12px;
+    color: #909399;
+  }
+
+  .criteria-options {
+    display: flex;
+    gap: 20px;
+  }
+  
+  /* 添加以下新样式 */
+  :deep(.el-radio) {
+    margin-right: 30px;
+  }
+  
+  :deep(.el-radio__label) {
+    font-size: 14px;
+  }
+  
+  :deep(.el-textarea) {
+    margin-bottom: 5px;
+  }
+  
+  :deep(.el-checkbox__label) {
+    font-size: 14px;
+  }
+  
+  :deep(.el-input) {
+    width: auto;
+  }
+}
+
+.title-edit-container {
+  display: flex;
+  align-items: flex-start;
+    gap: 10px;
+    flex-direction: column;
+}
+
+.edit-title-btn {
+  color: #67C23A;
+}
+
+/* 职位名称编辑相关样式 */
+.edit-title-btn {
+  margin-left: 10px;
+  font-size: 14px;
+  color: #409EFF;
+}
+
+.title-edit-container {
+  flex: 1;
+}
+
+.title-edit-actions {
+  display: flex;
+  justify-content: flex-end;
+  margin-top: 10px;
+  gap: 10px;
+}
+
+/* 确保在编辑模式下输入框有足够的宽度 */
+.title-edit-container :deep(.el-input) {
+  width: 100%;
+}
+
+.competency-tag {
+  margin-right: 8px;
+  margin-bottom: 8px;
+}
+
+.info-icon {
+  margin-left: 4px;
+  font-size: 14px;
+  color: #909399;
+  float: right;
+}
+
+:deep(.el-checkbox-group) {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 12px;
+}
+
+:deep(.el-checkbox) {
+  margin-right: 0;
+}
+
+.recommended-dimensions,
+.optional-dimensions,
+.custom-dimensions {
+  background: #fff;
+  border-radius: 8px;
+  padding: 20px;
+  margin-bottom: 24px;
+}
+
+.recommended-dimensions h3,
+.optional-dimensions h3,
+.custom-dimensions h3 {
+  font-size: 16px;
+  color: #333;
+  margin-bottom: 16px;
+  font-weight: 500;
+}
+
+.dimension-grid {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
+  gap: 16px;
+}
+
+.ability-label {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+.ability-label .sheng{
+  position: absolute;
+  right: 0;
+  bottom:0;
+  width: 30px;
+  height: 30px;
+}
+.ability-label span {
+  font-size: 14px;
+  color: #333;
+}
+
+.ability-label .el-icon {
+  color: #909399;
+  font-size: 16px;
+  cursor: help;
+}
+
+.custom-dimension-input {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+.custom-dimension-input .el-input {
+  width: 100%;
+}
+
+.custom-dimension-input .el-textarea {
+  margin-top: 8px;
+}
+
+.el-checkbox {
+  margin-right: 0;
+  margin-bottom: 0;
+  padding: 12px;
+  border: 1px solid #EBEEF5;
+  border-radius: 4px;
+  transition: all 0.3s;
+}
+
+.el-checkbox:hover {
+  background: #F5F7FA;
+}
+
+.el-checkbox.is-checked {
+/*   background: #F0F9FF;
+  border-color: #409EFF; */
+}
+.el-checkbox.is-checked.el-checkbox__inner{
+  background-color: #0017ab;
+}
+
+.new-feature-tip {
+  background: #FFF7E6;
+  border-radius: 4px;
+  padding: 12px;
+  margin-bottom: 20px;
+  display: flex;
+  align-items: center;
+}
+
+.new-tag {
+  background: #FF9800;
+  color: white;
+  padding: 2px 6px;
+  border-radius: 4px;
+  font-size: 12px;
+  margin-right: 8px;
+}
+
+.dimension-form {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+.dimension-row {
+  display: flex;
+  gap: 16px;
+}
+
+.dimension-input {
+  display: flex;
+  align-items: center;
+ /*  flex: 1; */
+}
+
+.dimension-actions {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.input-label {
+  width: 80px;
+  font-weight: 500;
+  color: #606266;
+}
+
+.multi-dimension-questions {
+  padding: 10px;
+  background-color: #f2f2f2;
+  border-radius: 10px;
+  .dimension-title {
+    font-size: 16px;
+    font-weight: 500;
+    margin-bottom: 16px;
+  }
+
+  .dimension-list {
+    .dimension-item {
+      display: flex;
+    justify-content: space-between;
+    align-items: center;
+      background: #fff;
+      border-radius: 4px;
+      margin-bottom: 12px;
+      position: relative;
+      .sheng{
+        position: absolute;
+        right: 0;
+        bottom:0;
+        width: 30px;
+        height: 30px;
+      }
+
+      .dimension-header {
+        padding: 12px 16px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        cursor: pointer;
+
+        .dimension-info {
+          display: flex;
+          align-items: center;
+          gap: 8px;
+
+          .ability-name {
+            font-weight: 500;
+          }
+
+          .new-tag {
+            background: #e6f7ff;
+            color: #1890ff;
+            padding: 2px 6px;
+            border-radius: 2px;
+            font-size: 12px;
+          }
+        }
+
+        .dimension-level {
+          display: flex;
+          align-items: center;
+          gap: 4px;
+
+          .level-label {
+            color: #606266;
+            font-size: 14px;
+          }
+
+          .level-value {
+            color: #303133;
+            font-weight: 500;
+          }
+        }
+
+        .expand-icon {
+          font-size: 16px;
+          color: #909399;
+          transition: transform 0.3s;
+          
+          &.expanded {
+            transform: rotate(180deg);
+          }
+        }
+      }
+
+      .dimension-content {
+        padding: 0 16px 16px;
+        width: 30px;
+        .ability-description {
+          color: #606266;
+          font-size: 14px;
+          line-height: 1.5;
+        }
+      }
+    }
+  }
+}
+
+.interviewer-avatars {
+  display: flex;
+  gap: 20px;
+  margin: 20px 0;
+}
+
+.avatar-item {
+  text-align: center;
+  cursor: pointer;
+}
+
+.avatar-item.selected {
+  position: relative;
+}
+
+.avatar-item.selected::after {
+  content: '';
+  position: absolute;
+  bottom: -5px;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 6px;
+  height: 6px;
+  background-color: #0066FF;
+  border-radius: 50%;
+}
+
+.avatar-image {
+  width: 80px;
+  height: 80px;
+  border-radius: 50%;
+  overflow: hidden;
+  margin-bottom: 8px;
+}
+
+.avatar-image img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+
+.avatar-name {
+  font-size: 14px;
+  color: #333;
+}
+
+.interview-settings {
+  margin-top: 30px;
+}
+
+.setting-item {
+  margin-bottom: 20px;
+}
+
+.setting-label {
+  font-weight: 500;
+  margin-bottom: 10px;
+}
+
+.setting-desc {
+  font-size: 12px;
+  color: #666;
+  margin-top: 5px;
+}
+
+.setting-options {
+  display: flex;
+  gap: 20px;
+}

+ 540 - 1741
src/views/position/detail/index.vue

@@ -452,46 +452,16 @@
           <!-- 推荐的考核维度 -->
           <div class="recommended-dimensions">
             <h3>推荐考核维度</h3>
-            <div class="dimension-grid">
-              <el-checkbox v-model="aiVideoOptions.positionMatch" label="岗位匹配度">
-                <div class="ability-label">
-                  <span>岗位匹配度</span>
-                 <img src="../../../assets/sheng.png"  alt="" class="sheng">
-                </div>
-              </el-checkbox>
-              
-              <el-checkbox v-model="aiVideoOptions.proactiveness" label="主动热情">
-                <div class="ability-label">
-                  <span>主动热情</span>
-                  <img src="../../../assets/sheng.png"  alt=""class="sheng">
-                </div>
-              </el-checkbox>
-              
-              <el-checkbox v-model="aiVideoOptions.basicAbility" label="基础综合能力">
-                <div class="ability-label">
-                  <span>基础综合能力</span>
-                  <img src="../../../assets/sheng.png"  alt=""class="sheng">
-                </div>
-              </el-checkbox>
-              
-              <el-checkbox v-model="aiVideoOptions.teamwork" label="团队协作">
-                <div class="ability-label">
-                  <span>团队协作</span>
-                  <img src="../../../assets/sheng.png"  alt=""class="sheng">
-                </div>
-              </el-checkbox>
-              
-              <el-checkbox v-model="aiVideoOptions.communication" label="沟通表达">
-                <div class="ability-label">
-                  <span>沟通表达</span>
-                  <img src="../../../assets/sheng.png"  alt=""class="sheng">
-                </div>
-              </el-checkbox>
-              
-              <el-checkbox v-model="aiVideoOptions.serviceAwareness" label="服务意识">
+            <div class="dimension-grid" >
+              <el-checkbox 
+                v-for="item in competencyTags" 
+                :key="item.id" 
+                v-model="item.selected"
+                @change="(val) => handleCompetencyChange(item, val)"
+              >
                 <div class="ability-label">
-                  <span>服务意识</span>
-                  <img src="../../../assets/sheng.png"  alt=""class="sheng">
+                  <span>{{ item.name }}</span>
+                  <img src="../../../assets/sheng.png" alt="" class="sheng">
                 </div>
               </el-checkbox>
             </div>
@@ -541,11 +511,11 @@
         <div class="interview-settings">
           <div class="interview-header">
              <div class="interview-actions">
-              <el-button type="primary" plain class="import-btn">
+              <el-button type="primary" plain class="import-btn" >
                 <el-icon><Document /></el-icon>
                 导入题目
               </el-button>
-              <el-button type="success" plain class="custom-btn">
+              <el-button type="success" plain class="custom-btn" @click="handleImportQuestion"><!-- @click="handleAddQuestion" -->
                 <el-icon><Plus /></el-icon>
                 自定义题目
               </el-button>
@@ -564,66 +534,84 @@
           </div> -->
             <div class="interview-content">
                <div class="interview-questions-container">
-            <div class="no-questions">
+            <div class="no-questions" v-if="chatQuestions.length === 0">
               <p>暂无题目</p>
               <p class="ai-tip">点击"AI自动组题"按钮</p>
               <p class="ai-tip">可根据您选择的能力类型一键组题</p>
-              <el-button type="success" class="auto-generate-btn">AI自动组题</el-button>
+              <el-button type="success" class="auto-generate-btn" @click="handleAutoGenerate">AI自动组题</el-button>
             </div>
             
-            <div class="question-list">
-              <div v-for="(question, index) in chatQuestions" :key="index" class="question-card">
-                <div class="question-header">
-                  <div class="question-title">
-                    <span class="question-number">题目{{ index + 1 }}</span>
-                    <span>{{ question.title }}</span>
-                  </div>
-                  <div class="question-actions">
-                    <div class="weight-control">
-                      <span class="weight-label">权重占比:</span>
-                      <el-input-number 
-                        v-model="question.weight" 
-                        :min="0" 
-                        :max="100"
-                        :step="1"
-                        size="small"
-                        controls-position="right"
-                      >
-                        <template #suffix>%</template>
-                      </el-input-number>
+            <div class="question-list" v-else>
+              <draggable 
+                v-model="chatQuestions"
+                :component-data="{
+                  tag: 'transition-group',
+                  name: !drag ? 'flip-list' : null
+                }"
+                item-key="id"
+                handle=".drag-handle"
+                
+                @start="drag = true"
+                @end="drag = false"
+              >
+                <template #item="{ element }">
+                  <div class="question-card">
+                    <div class="question-header">
+                      <div class="question-title">
+                        <span class="question-number">题目{{ chatQuestions.indexOf(element) + 1 }}</span>
+                        <span><span style="color: #0017ab;">{{ '「'+element.question_form_name +'」'}}</span>{{ element.title }}</span>
+                      </div>
+                      <div>
+                      <el-button type="text" @click="editQuestion(chatQuestions.indexOf(element))">
+                          <el-icon><Edit /></el-icon>
+                        </el-button>
+                        <el-button type="text" @click="deleteQuestion(chatQuestions.indexOf(element))">
+                          <el-icon><Delete /></el-icon>
+                        </el-button>
+                      </div>
                     </div>
-                    <div class="answer-limit">
-                      <span class="answer-label">最多回答次数</span>
-                      <el-select v-model="question.maxAnswers" size="small" placeholder="请选择">
-                        <el-option label="1次" :value="1" />
-                        <el-option label="2次" :value="2" />
-                        <el-option label="3次" :value="3" />
-                      </el-select>
+                    
+                    <div class="question-info">
+                      <div class="info-item">
+                        <!-- <span class="info-label">考察能力:</span> -->
+                        <span>{{ element.scoring_reference }}</span>
+                      </div>
+                      <!-- <div class="info-item">
+                        <span class="info-label">面试内容:</span>
+                        <span>{{ element.content }}</span>
+                      </div>
+                      <div class="info-item">
+                        <span class="info-label">对话目标:</span>
+                        <span>{{ element.target }}</span>
+                      </div> -->
                     </div>
-                    <el-button type="text" @click="editQuestion(index)">
-                      <el-icon><Edit /></el-icon>
-                    </el-button>
-                    <el-button type="text" @click="deleteQuestion(index)">
-                      <el-icon><Delete /></el-icon>
-                    </el-button>
-                  </div>
-                </div>
-                
-                <div class="question-info">
-                  <div class="info-item">
-                    <span class="info-label">考察能力:</span>
-                    <span>{{ question.ability }}</span>
-                  </div>
-                  <div class="info-item">
-                    <span class="info-label">面试内容:</span>
-                    <span>{{ question.content }}</span>
-                  </div>
-                  <div class="info-item">
-                    <span class="info-label">对话目标:</span>
-                    <span>{{ question.target }}</span>
+                    <div class="question-actions" v-if="element.question_form==0">
+                        <!-- <div class="weight-control">
+                          <span class="weight-label">权重占比:</span>
+                          <el-input-number 
+                            v-model="element.weight" 
+                            :min="0" 
+                            :max="100"
+                            :step="1"
+                            size="small"
+                            controls-position="right"
+                          >
+                            <template #suffix>%</template>
+                          </el-input-number>
+                        </div> -->
+                        <div class="answer-limit">
+                          <span class="answer-label">最多回答次数</span>
+                          <el-select v-model="element.maxAnswers" size="small" placeholder="请选择">
+                            <el-option label="1次" :value="1" />
+                            <el-option label="2次" :value="2" />
+                            <el-option label="3次" :value="3" />
+                          </el-select>
+                        </div>
+                       
+                      </div>
                   </div>
-                </div>
-              </div>
+                </template>
+              </draggable>
             </div>
               </div>
               
@@ -653,26 +641,35 @@
           <!-- 面试官形象设置 -->
           <div class="setting-section">
             <div class="section-header">请选择面试官形象</div>
-            <div class="interviewer-avatars">
-              <div
-                v-for="avatar in interviewerAvatars"
-                :key="avatar.id"
-                class="avatar-item"
-                :class="{ active: selectedInterviewer.id === avatar.id }"
-                @click="selectedInterviewer = avatar"
-              >
-                <div class="avatar-wrapper">
-                  <div class="avatar-circle" :class="{ selected: selectedInterviewer.id === avatar.id }">
-                    <img :src="avatar.image" :alt="avatar.name" />
+            <div style="    display: flex;align-items: flex-start;">
+              <div style="width: 100px;height: 170px;background-color: #f2f2f2; margin-right: 30px;border-radius: 10px;">
+                
+              </div>
+              <div>
+                 <div class="interviewer-avatars">
+                  <div
+                    v-for="avatar in interviewerAvatars"
+                    :key="avatar.id"
+                    class="avatar-item"
+                    :class="{ active: selectedInterviewer.id === avatar.id }"
+                    @click="selectedInterviewer = avatar"
+                  >
+                    <div class="avatar-wrapper">
+                      <div class="avatar-circle" :class="{ selected: selectedInterviewer.id === avatar.id }">
+                        <img :src="avatar.avatar_url" :alt="avatar.name" />
+                      </div>
+                      <div class="avatar-name">{{ avatar.name }}</div>
+                    </div>
                   </div>
-                  <div class="avatar-name">{{ avatar.name }}</div>
                 </div>
+                <div>追问风格:  <el-select v-model="settings.interruptionMode" placeholder="请选择">
+                    <el-option label="从上一问重新作答" value="previous" />
+                    <el-option label="从当前问题作答" value="current" />
+                  </el-select></div>
               </div>
-            </div>
-            <div>追问风格:  <el-select v-model="settings.interruptionMode" placeholder="请选择">
-                <el-option label="从上一问重新作答" value="previous" />
-                <el-option label="从当前问题作答" value="current" />
-              </el-select></div>
+              </div>
+               
+           
 
             <!-- 面试设置选项 -->
             <div class="interview-settings">
@@ -812,58 +809,63 @@
               <p class="tip-text">点击"添加问题"或"导入问题"添加面试问题</p>
             </div>
             <div v-else class="question-list">
-              <div v-for="(question, index) in chatQuestions" :key="index" class="question-card">
-                <div class="question-header">
-                  <div class="question-title">
-                    <span class="question-number">题目{{ index + 1 }}</span>
-                    <span>{{ question.title }}</span>
-                  </div>
-                  <div class="question-actions">
-                    <div class="weight-control">
-                      <span class="weight-label">权重占比:</span>
-                      <el-input-number 
-                        v-model="question.weight" 
-                        :min="0" 
-                        :max="100"
-                        :step="1"
-                        size="small"
-                        controls-position="right"
-                      >
-                        <template #suffix>%</template>
-                      </el-input-number>
+              <draggable v-model="chatQuestions" item-key="id" handle=".drag-handle">
+                <template #item="{ element, index }">
+                  {{ element }}
+                  <div class="question-card">
+                    <div class="question-header">
+                      <div class="question-title">
+                        <span class="question-number">题目{{ index + 1 }}</span>
+                        <span>{{ element.question }}</span>
+                      </div>
+                      <div class="question-actions">
+                        <div class="weight-control">
+                          <span class="weight-label">权重占比:</span>
+                          <el-input-number 
+                            v-model="element.weight" 
+                            :min="0" 
+                            :max="100"
+                            :step="1"
+                            size="small"
+                            controls-position="right"
+                          >
+                            <template #suffix>%</template>
+                          </el-input-number>
+                        </div>
+                        <div class="answer-limit">
+                          <span class="answer-label">最多回答次数</span>
+                          <el-select v-model="element.maxAnswers" size="small" placeholder="请选择">
+                            <el-option label="1次" :value="1" />
+                            <el-option label="2次" :value="2" />
+                            <el-option label="3次" :value="3" />
+                          </el-select>
+                        </div>
+                        <el-button type="text" @click="editQuestion(index)">
+                          <el-icon><Edit /></el-icon>
+                        </el-button>
+                        <el-button type="text" @click="deleteQuestion(index)">
+                          <el-icon><Delete /></el-icon>
+                        </el-button>
+                      </div>
                     </div>
-                    <div class="answer-limit">
-                      <span class="answer-label">最多回答次数</span>
-                      <el-select v-model="question.maxAnswers" size="small" placeholder="请选择">
-                        <el-option label="1次" :value="1" />
-                        <el-option label="2次" :value="2" />
-                        <el-option label="3次" :value="3" />
-                      </el-select>
+                    
+                    <div class="question-info">
+                      <div class="info-item">
+                        <span class="info-label">考察能力:</span>
+                        <span>{{ element.ability }}</span>
+                      </div>
+                      <div class="info-item">
+                        <span class="info-label">面试内容:</span>
+                        <span>{{ element.content }}</span>
+                      </div>
+                      <div class="info-item">
+                        <span class="info-label">对话目标:</span>
+                        <span>{{ element.target }}</span>
+                      </div>
                     </div>
-                    <el-button type="text" @click="editQuestion(index)">
-                      <el-icon><Edit /></el-icon>
-                    </el-button>
-                    <el-button type="text" @click="deleteQuestion(index)">
-                      <el-icon><Delete /></el-icon>
-                    </el-button>
-                  </div>
-                </div>
-                
-                <div class="question-info">
-                  <div class="info-item">
-                    <span class="info-label">考察能力:</span>
-                    <span>{{ question.ability }}</span>
-                  </div>
-                  <div class="info-item">
-                    <span class="info-label">面试内容:</span>
-                    <span>{{ question.content }}</span>
-                  </div>
-                  <div class="info-item">
-                    <span class="info-label">对话目标:</span>
-                    <span>{{ question.target }}</span>
                   </div>
-                </div>
-              </div>
+                </template>
+              </draggable>
             </div>
           </div>
         </div>
@@ -949,6 +951,82 @@
       </template>
     </el-dialog>
 
+    <!-- 添加题目选择对话框 -->
+    <el-dialog
+      title="选择题目"
+      v-model="showQuestionSelectDialog"
+      width="70%"
+      :close-on-click-modal="false"
+      class="question-select-dialog"
+    >
+      <div class="question-select-content">
+        <!-- 搜索栏 -->
+        <div class="search-bar">
+          <div class="search-inputs">
+            <el-input
+              v-model="questionSearchKeyword"
+              placeholder="请输入关键词搜索题目"
+              clearable
+              @clear="handleQuestionSearch"
+              @keyup.enter="handleQuestionSearch"
+              style="width: 300px; margin-right: 10px;"
+            >
+              <template #append>
+                <el-button @click="handleQuestionSearch">
+                  <el-icon><Search /></el-icon>
+                </el-button>
+              </template>
+            </el-input>
+            <el-select 
+              v-model="questionListQuery.question_form" 
+              placeholder="题目类型"
+              clearable
+              @change="handleQuestionSearch"
+              style="width: 120px;"
+            >
+              <el-option label="开放问题" :value="0" />
+              <el-option label="单选题" :value="1" />
+            </el-select>
+          </div>
+        </div>
+
+        <!-- 题目列表 -->
+        <div class="question-lists">
+          <el-table
+            :data="questionList"
+            style="width: 100%"
+            @selection-change="handleQuestionSelectionChange"
+          >
+            <el-table-column type="selection" width="55" />
+            <el-table-column prop="question" label="题目标题" />
+            <el-table-column prop="question_form_name" label="题目类型" width="100"/>
+            <!-- <el-table-column prop="content" label="面试内容" show-overflow-tooltip />
+            <el-table-column prop="target" label="对话目标" show-overflow-tooltip /> -->
+          </el-table>
+
+          <!-- 分页 -->
+          <div class="pagination-container">
+            <el-pagination
+              v-model:current-page="questionListQuery.page"
+              v-model:page-size="questionListQuery.pageSize"
+              :total="totalQuestions"
+              :page-sizes="[10, 20, 50, 100]"
+              layout="total, sizes, prev, pager, next"
+              @size-change="handleQuestionSizeChange"
+              @current-change="handleQuestionPageChange"
+            />
+          </div>
+        </div>
+      </div>
+      
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="cancelQuestionSelect">取消</el-button>
+          <el-button type="primary" @click="confirmQuestionSelect">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+
     <!-- 修改资料收集对话框模板 -->
     <el-dialog
       title="资料收集"
@@ -1244,9 +1322,10 @@ import { ref, reactive, onMounted, computed } from 'vue';
 import { useRouter, useRoute } from 'vue-router';
 import { ElMessage, ElMessageBox, ElDrawer } from 'element-plus';
 import * as api from '../list/api';
-import { Plus, Document, ArrowDown, Edit, Delete, InfoFilled, QuestionFilled } from '@element-plus/icons-vue';
+import { Plus, Document, ArrowDown, Edit, Delete, InfoFilled, QuestionFilled, Search, Rank } from '@element-plus/icons-vue';
 import { GetList } from '../../questionBank/classList/api';
-import { GetCompetencyList } from '../list/api';
+import { GetCompetencyList,GetQuestionList,GenerateQuestions,GetDraftList,SaveDraft,GetDigitalList } from './api';
+import draggable from 'vuedraggable';
 
 // 添加 ChatQuestion 接口定义
 interface ChatQuestion {
@@ -1279,6 +1358,7 @@ const router = useRouter();
 const route = useRoute();
 const positionId = ref(route.params.id as string);
 const positionStatus = ref(false);
+const drag = ref(false); // 添加拖拽状态变量
 
 // 职位数据
 const positionData = reactive({
@@ -1370,7 +1450,7 @@ const selectedAbilities = ref([
   }
 ]);
 
-const toggleAbilityExpand = (ability) => {
+const toggleAbilityExpand = (ability:any) => {
   ability.expanded = !ability.expanded;
 };
 
@@ -1418,6 +1498,7 @@ const rankSettings = reactive({
   maxScore: 0.00
 });
 
+
 // AI模型版本
 const aiModelVersion = ref('standard');
 
@@ -1771,12 +1852,40 @@ const addSelectedStepType = (type: string, label: string) => {
 };
 
 // 下一步
-const nextStep = () => {
+const nextStep = async () => {
   if (currentStep.value < 3) {
-    currentStep.value++;
+    // 如果从第一步进入第二步,更新已选维度到 selectedAbilities
+    if (currentStep.value === 1) {
+      selectedAbilities.value = selectedDimensions.value.map(dimension => ({
+        label: dimension.name,
+        value: dimension.name.toLowerCase().replace(/\s+/g, '_'),
+        description: dimension.description,
+        level: 'CC', // 默认等级
+        expanded: false,
+        isNew: true
+      }));
+    }
+    // 如果从第二步进入第三步,调用SaveDraft接口保存暂存题目
+    if (currentStep.value === 2) {
+     try{
+        // 调用SaveDraft接口保存暂存题目
+        await SaveDraft({
+          draft_ids: chatQuestions.value.map((draft: any) => draft.id)
+        });
+
+
+       
+      } catch (error) {
+        console.error('保存暂存题目失败:', error);
+        ElMessage.error('保存暂存题目失败');
+        return; // 如果保存失败,不进入下一步
+      }
+    }
+     currentStep.value++; 
   } else {
     finishConfig();
   }
+
 };
 
 // 上一步
@@ -1943,7 +2052,8 @@ const confirmAddQuestion = () => {
 
 // 导入问题处理方法
 const handleImportQuestion = () => {
-  ElMessage.info('导入问题功能开发中');
+  showQuestionSelectDialog.value = true;
+  fetchQuestionList(); // 打开对话框时获取题目列表
 };
 
 // 在 script setup 中添加
@@ -2020,6 +2130,7 @@ const confirmDataCollection = () => {
 onMounted(() => {
   getPositionDetail();
   getCompetencyList();
+  getDigitalList()
 });
 
 // 添加代码测试相关的状态和方法
@@ -2490,9 +2601,13 @@ const selectedCompetencies = ref([]);
 // 获取能力标签列表
 const getCompetencyList = async () => {
   try {
-    const response = await api.GetCompetencyList({page:1,pageSize:1000});
+    const response = await GetCompetencyList({page:1,pageSize:1000});
     if (response && response.data) {
-      competencyTags.value = response.data.items;
+      // 为每个标签添加选中状态属性
+      competencyTags.value = response.data.items.map((item:any) => ({
+        ...item,
+        selected: false
+      }));
     }
   } catch (error) {
     console.error('获取能力标签列表失败:', error);
@@ -2502,7 +2617,7 @@ const getCompetencyList = async () => {
 
 // 开始编辑能力标签
 const startEditCompetency = () => {
-  selectedCompetencies.value = positionData.competency_tags?.map(tag => tag.id) || [];
+  selectedCompetencies.value = positionData.competency_tags?.map((tag:any) => tag.id) || [];
   isEditingCompetency.value = true;
 };
 
@@ -2618,1620 +2733,304 @@ const interviewerAvatars = ref([
 
 const selectedInterviewer = ref(interviewerAvatars.value[0]);
 
-</script>
+/* 获取数字人列表 */
+const getDigitalList = async () => {
+  const response = await GetDigitalList({page:1,pageSize:1000});
+  if (response && response.data) {
+    interviewerAvatars.value = response.data;
+  }
+};
 
-<style scoped>
-.position-detail-container {
-  padding: 20px;
-  width: 88% !important;
-  margin: 0 0 0 170px;
-}
+const handleCompetencyChange = (item: any, val: boolean) => {
+  if (val) {
+    // 当选中时,添加到已选维度列表
+    selectedDimensions.value.push({
+      name: item.name,
+      description: item.description || '暂无描述' // 如果没有描述则显示默认值
+    });
+  } else {
+    // 当取消选中时,从已选维度列表中移除
+    selectedDimensions.value = selectedDimensions.value.filter(
+      dimension => dimension.name !== item.name
+    );
+  }
+};
 
-.header-container {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
-}
+// 在 script setup 部分添加以下代码
+const selectedDimensions = ref<Array<{name: string, description: string}>>([]);
 
-.header-actions {
-  display: flex;
-  gap: 10px;
-}
+// 在 script setup 中添加以下内容
+// 题目选择相关的响应式变量
+const showQuestionSelectDialog = ref(false);
+const questionSearchKeyword = ref('');
+const questionList = ref([]);
+const selectedQuestions = ref([]);
+const totalQuestions = ref(0);
+const questionListQuery = reactive({
+  page: 1,
+  pageSize: 10,
+  keyword: '',
+  question_form: null as number | null
+});
 
-.detail-content {
-  display: flex;
-  gap: 20px;
-}
+// 获取题目列表
+const fetchQuestionList = async () => {
+  try {
+    const params = {
+      ...questionListQuery,
+      keyword: questionSearchKeyword.value,
+      // 只有当选择了题目类型时才传递该参数
+      ...(questionListQuery.question_form !== null && { question_form: questionListQuery.question_form })
+    };
+    const response = await GetQuestionList(params);
+    if (response && response.data) {
+      questionList.value = response.data.items;
+      totalQuestions.value = response.data.total;
+    }
+  } catch (error) {
+    console.error('获取题目列表失败:', error);
+    ElMessage.error('获取题目列表失败');
+  }
+};
 
-.detail-card {
-  flex: 2;
-}
+// 处理题目搜索
+const handleQuestionSearch = () => {
+  questionListQuery.page = 1;
+  fetchQuestionList();
+};
 
-.status-cards {
-  flex: 1;
-  display: flex;
-  flex-direction: column;
-  gap: 20px;
-}
+// 处理分页大小变化
+const handleQuestionSizeChange = (val: number) => {
+  questionListQuery.pageSize = val;
+  fetchQuestionList();
+};
 
-.section-title {
-  display: flex;
-  align-items: center;
-  margin-bottom: 20px;
-  font-weight: bold;
-  color: #333;
-  position: relative;
-}
+// 处理页码变化
+const handleQuestionPageChange = (val: number) => {
+  questionListQuery.page = val;
+  fetchQuestionList();
+};
 
-.section-line {
-  width: 4px;
-  height: 16px;
-  background-color: #67C23A;
-  margin-right: 8px;
-}
+// 处理题目选择变化
+const handleQuestionSelectionChange = (selection: any[]) => {
+  selectedQuestions.value = selection;
+};
 
-.edit-btn {
-  position: absolute;
-  right: 0;
-  color: #67C23A;
-}
+// 取消选择题目
+const cancelQuestionSelect = () => {
+  showQuestionSelectDialog.value = false;
+  selectedQuestions.value = [];
+  questionSearchKeyword.value = '';
+};
 
-.detail-item {
-  display: flex;
-  margin-bottom: 20px;
-  line-height: 1.5;
-}
+// 确认选择题目
+const confirmQuestionSelect = () => {
+  if (selectedQuestions.value.length === 0) {
+    ElMessage.warning('请至少选择一个题目');
+    return;
+  }
+console.log(selectedQuestions.value);
+  // 将选中的题目转换为正确的数据结构后添加到chatQuestions列表中
+  const formattedQuestions = selectedQuestions.value.map((question:any) => ({
+    id: question.id || Date.now(), // 确保有唯一ID
+    title: question.question || question.title,
+    ability: question.ability || '未设置',
+    content: question.content || question.question,
+    target: question.target || '未设置',
+    competency_tags: question.competency_tags || [],
+    question_form_name: question.question_form_name,
+    scoring_reference: question.scoring_reference,
+    question_form: question.question_form,
+    weight: 100, // 默认权重
+    maxAnswers: 1 // 默认最多回答次数
+  }));
+  
+  chatQuestions.value.push(...formattedQuestions);
+  
+  // 关闭对话框并重置状态
+  showQuestionSelectDialog.value = false;
+  selectedQuestions.value = [];
+  questionSearchKeyword.value = '';
+  
+  ElMessage.success(`已添加${selectedQuestions.value.length}个题目`);
+};
 
-.detail-label {
-  width: 120px;
-  color: #606266;
-  font-weight: 500;
-}
+/* AI自动组题 */
+const handleAutoGenerate = async () => {
+  console.log('AI自动组题');
+  try {
+    // 从已选择的能力标签中获取ID列表
+    const competencyTagIds = selectedDimensions.value.map(dimension => {
+      const tag = competencyTags.value.find(tag => tag.name === dimension.name);
+      return tag ? tag.id : null;
+    }).filter(id => id !== null);
+
+    if (competencyTagIds.length === 0) {
+      ElMessage.warning('请至少选择一个能力标签');
+      return;
+    }
 
-.detail-value {
-  flex: 1;
-  color: #303133;
-}
+    const params = {
+      position_id: route.query.id,
+      competency_tag_ids: competencyTagIds,
+      open_questions_count: 2, // 开放题数量,默认2个
+      choice_questions_count: 2, // 选择题数量,默认2个
+      auto_save: true, // 自动保存到数据库
+      tenant_id: 1 // 租户ID,这里写死为1,实际应该从系统配置或用户信息中获取
+    };
+
+    // 调用生成题目的接口
+    const response = await GenerateQuestions(params);
+    
+    if (response && response.data) {
+      // 生成成功后,调用 GetDraftList 获取最新生成的题目
+      const draftResponse = await GetDraftList({
+        tenant_id: 1,
+        position_id: route.query.id as string
+      });
+console.log(draftResponse);
+      if (draftResponse && draftResponse.data) {
+        // 将获取到的题目格式化并添加到 chatQuestions 列表中
+        const formattedQuestions = draftResponse.data.dataList.map((question: any) => ({
+          id: question.id || Date.now(),
+          title: question.question || question.title,
+          ability: question.ability || '未设置',
+          content: question.content || question.question,
+          target: question.target || '未设置',
+          competency_tags: question.competency_tags || [],
+          question_form_name: question.question_form_name,
+          scoring_reference: question.scoring_reference,
+          question_form: question.question_form,
+          weight: 100,
+          maxAnswers: 1
+        }));
+        
+        // 清空现有题目并添加新生成的题目
+        chatQuestions.value = formattedQuestions;
+        ElMessage.success(`已成功生成${formattedQuestions.length}个面试题目`);
+      }
+    }
+  } catch (error) {
+    console.error('AI自动组题失败:', error);
+    ElMessage.error('AI自动组题失败,请重试');
+  }
+};
 
-.html-content {
-  max-height: 300px;
-  overflow-y: auto;
-  padding: 10px;
- /*  background-color: #f9f9f9; */
-  border-radius: 4px;
-}
+</script>
 
-.benefit-tag {
-  margin-right: 8px;
-  margin-bottom: 8px;
-}
+<style scoped>
+@import './index.css';
 
-.status-switch {
-  display: flex;
-  align-items: center;
-  gap: 10px;
+/* 添加题目选择对话框样式 */
+.question-select-dialog {
+  :deep(.el-dialog__body) {
+    padding: 20px;
+  }
 }
 
-.status-text {
-  font-size: 14px;
-  color: #303133;
-}
+.question-select-content {
+  .search-bar {
+    margin-bottom: 20px;
+    
+    .search-inputs {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+    }
+  }
 
-.usage-content {
-  display: flex;
-  align-items: center;
-  margin-top: 10px;
-}
+  .question-list {
+    margin-top: 20px;
+  }
 
-.usage-label {
-  width: 80px;
-  color: #606266;
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 }
 
-.usage-value {
-  color: #303133;
-  font-weight: 500;
-}
+/* 添加拖拽相关样式 */
+.question-card {
+  position: relative;
+  border: 1px solid #e4e7ed;
+  border-radius: 4px;
+  padding: 16px;
+  margin-bottom: 12px;
+  background: #fff;
+  transition: all 0.3s;
 
-.process-steps {
-  margin-top: 20px;
-}
+  &:hover {
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  }
 
-.process-step {
-  display: flex;
-  align-items: flex-start;
-  margin-bottom: 15px;
+  .drag-handle {
+    position: absolute;
+    left: -20px;
+    top: 50%;
+    transform: translateY(-50%);
+    cursor: move;
+    color: #909399;
+    padding: 4px;
+    
+    &:hover {
+      color: #409EFF;
+    }
+  }
 }
 
-.step-number {
-  width: 24px;
-  height: 24px;
-  border-radius: 50%;
-  background-color: #67C23A;
-  color: white;
+.question-header {
   display: flex;
+  justify-content: space-between;
   align-items: center;
-  justify-content: center;
-  margin-right: 10px;
-  font-size: 14px;
-}
-
-.step-content {
-  flex: 1;
+  margin-bottom: 12px;
 }
 
-.step-title {
+.question-title {
   font-weight: 500;
-  color: #303133;
-  margin-bottom: 4px;
-}
-
-.step-desc {
-  font-size: 12px;
-  color: #909399;
-}
-
-.process-step.disabled .step-number {
-  background-color: #909399;
-}
-
-.process-step.disabled .step-title,
-.process-step.disabled .step-desc {
-  color: #C0C4CC;
-}
-
-/* 招聘流程编辑对话框样式 */
-.process-dialog-content {
-  max-height: 400px;
-  overflow-y: auto;
-}
-
-.process-edit-item {
-  display: flex;
-  align-items: center;
-  padding: 15px;
-  border-radius: 4px;
-  margin-bottom: 10px;
-  background-color: #f5f7fa;
-  position: relative;
-}
-
-.process-edit-item.highlight {
-  background-color: #f0f9eb;
-  border: 1px solid #e1f3d8;
-}
-
-.process-number {
-  width: 24px;
-  height: 24px;
-  border-radius: 50%;
-  background-color: #67C23A;
-  color: white;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin-right: 15px;
-}
-
-.process-edit-content {
-  flex: 1;
-}
-
-.process-edit-desc {
-  font-size: 12px;
-  color: #909399;
-  margin-top: 4px;
-}
-.process-edit-btn{
-
   display: flex;
+    align-items: flex-start;
+    gap: 10px;
     flex-direction: column;
-    align-items: center;
-}
-
-.delete-btn {
-  position: absolute;
-  right: 10px;
-  top: 50%;
-  transform: translateY(-50%);
+  .question-number {
+    color: #909399;
+    margin-right: 8px;
+  }
 }
 
-/* 添加在每个步骤上方的加号按钮样式 */
-.add-process-btn-top {
+.question-actions {
   display: flex;
-  justify-content: center;
-  margin-bottom: 5px;
-}
+  align-items: center;
+  gap: 16px;
+  justify-content: flex-end;
+  margin-top: 10px;
 
-.add-process-btn-top .el-button {
-  color: #67C23A;
-  padding: 5px;
 }
 
-/* 确保原有的底部加号按钮样式保持不变 */
-.add-process-btn {
-  display: flex;
-  justify-content: center;
-  margin-top: 15px;
+.question-info {
+  .info-item {
+    margin-bottom: 8px;
+    
+    &:last-child {
+      margin-bottom: 0;
+    }
+    
+    .info-label {
+      color: #909399;
+      margin-right: 8px;
+    }
+  }
 }
 
-.add-process-btn .el-button {
-  color: #67C23A;
+/* 拖拽时的样式 */
+.sortable-ghost {
+  opacity: 0.5;
+  background: #f4f4f5;
 }
 
-/* 流程步骤选项菜单 */
-.process-options-menu {
-  position: absolute;
-  background-color: white;
-  border-radius: 4px;
+.sortable-drag {
+  opacity: 0.8;
+  background: #fff;
   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-  padding: 8px 0;
-  z-index: 2000;
-  max-height: 300px;
-  overflow-y: auto;
-  width: 150px;
-}
-
-.process-option-item {
-  padding: 8px 16px;
-  cursor: pointer;
-  font-size: 14px;
-  color: #606266;
-}
-
-.process-option-item:hover {
-  background-color: #f5f7fa;
-  color: #67C23A;
-}
-
-/* AI视频抽屉样式 */
-.ai-video-drawer {
-  --el-drawer-padding-primary: 0;
-}
-
-.ai-video-steps {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 20px 0;
-  border-bottom: 1px solid #e4e7ed;
-  background-color: #fff;
-}
-
-.step-item {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  color: #909399;
-  position: relative;
-  z-index: 1;
-  cursor: pointer;
-  transition: all 0.3s;
-}
-
-.step-item:hover {
-  color: #67C23A;
-}
-
-.step-item:hover .step-number {
-  border-color: #67C23A;
-}
-
-.step-number {
-  width: 30px;
-  height: 30px;
-  border-radius: 50%;
-  background-color: #f5f7fa;
-  color: #909399;
-  border: 1px solid #dcdfe6;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin-bottom: 8px;
-  font-weight: bold;
-}
-
-.step-item.active .step-number {
-  background-color: #67C23A;
-  color: white;
-  border-color: #67C23A;
-}
-
-.step-line {
-  width: 100px;
-  height: 1px;
-  background-color: #e4e7ed;
-  margin: 0 15px;
-  position: relative;
-  top: -15px;
-}
-
-.step-line.active-line {
-  background-color: #67C23A;
-}
-
-.step-title {
-  font-size: 14px;
-}
-
-.ai-video-content {
-  padding: 20px;
-  height: calc(100% - 120px); /* 减去header和footer高度 */
-  overflow-y: auto;
-}
-
-.drawer-footer {
-  padding: 10px 20px;
-  text-align: right;
-  border-top: 1px solid #e4e7ed;
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  background-color: white;
-}
-
-/* 步骤1:考察能力样式 */
-.option-tip {
-  margin-bottom: 15px;
-  color: #606266;
-}
-
-.new-feature-tip {
-  background-color: #f0f9eb;
-  padding: 10px;
-  border-radius: 4px;
-  margin-bottom: 20px;
-  font-size: 14px;
-  color: #606266;
-  line-height: 1.5;
-}
-
-.new-tag {
-  display: inline-block;
-  background-color: #f56c6c;
-  color: white;
-  padding: 2px 6px;
-  border-radius: 4px;
-  font-size: 12px;
-  margin-right: 5px;
-}
-
-.ability-options {
-  display: grid;
-  grid-template-columns: repeat(3, 1fr);
-  gap: 15px;
-}
-
-.ability-label {
-  font-size: 14px;
-  color: #606266;
-}
-
-/* 步骤2:面试题目样式 */
-.interview-settings {
-  width: 100%;
-}
-
-.interview-header {
-  display: flex;
-    align-items: flex-start;
-    margin-bottom: 20px;
-    flex-direction: column;
-}
-.interview-content{
-  display: flex;
-  justify-content: space-around;
-}
-
-.interview-duration {
-  display: flex;
-  align-items: center;
-}
-
-.duration-value {
-  font-weight: bold;
-  margin: 0 10px;
-}
-
-.duration-tip {
-  color: #909399;
-  font-size: 12px;
-}
-
-.interview-mode {
-  display: flex;
-  align-items: center;
-  margin-bottom: 20px;
-}
-
-.mode-value {
-  font-weight: bold;
-  margin: 0 10px;
-}
-
-.interview-questions-container {
-  width: 85%;
-  min-height: 200px;
-  /* border: 1px dashed #dcdfe6; */
-  border-radius: 4px;
-  margin-bottom: 20px;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.no-questions {
-  text-align: center;
-  color: #909399;
-}
-
-.ai-tip {
-  font-size: 12px;
-  color: #c0c4cc;
-  margin: 5px 0;
-}
-
-.auto-generate-btn {
-  margin-top: 15px;
-}
-
-.multi-dimension-questions {
-  width: 30%;
-  margin-top: 30px;
-}
-
-.dimension-title {
-  font-weight: bold;
-  margin-bottom: 15px;
-}
-
-.dimension-list {
-  display: flex;
-  flex-direction: column;
-  gap: 10px;
-}
-
-.dimension-item {
-  border: 1px solid #dcdfe6;
-  border-radius: 4px;
-}
-
-.dimension-header {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-
-.expand-icon {
-  cursor: pointer;
-}
-
-/* 步骤3:系统设置样式 */
-.system-settings {
-  width: 100%;
-  .setting-item{
-    border: 1px solid #ebeef5;
-    border-radius: 30px;
-    display: flex;
-    justify-content: space-around;
-    align-items: center;
-  }
-}
-
-.setting-section {
-  padding: 20px;
-  
-  .section-header {
-    font-size: 16px;
-    font-weight: 500;
-    margin-bottom: 20px;
-    color: #333;
-  }
-
-  .interviewer-avatars {
-    display: flex;
-    gap: 20px;
-    margin-bottom: 30px;
-
-    .avatar-item {
-      cursor: pointer;
-      text-align: center;
-      
-      .avatar-wrapper {
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        gap: 8px;
-      }
-
-      .avatar-circle {
-        width: 60px;
-        height: 60px;
-        border-radius: 50%;
-        border: 2px solid transparent;
-        overflow: hidden;
-        transition: all 0.3s ease;
-
-        &.selected {
-          border-color: #0052D9;
-        }
-
-        img {
-          width: 100%;
-          height: 100%;
-          object-fit: cover;
-        }
-      }
-
-      .avatar-name {
-        font-size: 14px;
-        color: #666;
-      }
-
-      &:hover {
-        .avatar-circle {
-          border-color: #0052D9;
-          opacity: 0.8;
-        }
-      }
-    }
-  }
-}
-
-.rank-settings {
-  display: flex;
-  align-items: center;
-  margin-bottom: 15px;
-}
-
-.rank-range {
-  display: flex;
-  align-items: center;
-  margin-right: 30px;
-}
-
-.range-inputs {
-  display: flex;
-  align-items: center;
-  margin-left: 10px;
-}
-
-.percent-input {
-  width: 80px;
-}
-
-.score-display {
-  display: flex;
-  align-items: center;
-}
-
-.score-range {
-  margin-left: 10px;
-  color: #67C23A;
-}
-
-.add-rank-btn {
-  margin-top: 10px;
-}
-
-.validity-setting {
-  display: flex;
-  align-items: center;
-  margin-bottom: 10px;
-}
-
-.validity-label {
-  margin-left: 10px;
-}
-
-.validity-tip {
-  font-size: 12px;
-  color: #909399;
-  margin-top: 5px;
-}
-
-.model-select {
-  width: 200px;
-}
-
-@media (max-width: 768px) {
-  .ability-options {
-    grid-template-columns: repeat(2, 1fr);
-  }
-  
-  .step-line {
-    width: 50px;
-  }
-}
-
-@media (max-width: 480px) {
-  .ability-options {
-    grid-template-columns: 1fr;
-  }
-  
-  .interview-header {
-    flex-direction: column;
-    align-items: flex-start;
-  }
-  
-  .interview-actions {
-    margin-top: 10px;
-  }
-  
-  .rank-settings {
-    flex-direction: column;
-    align-items: flex-start;
-  }
-  
-  .rank-range {
-    margin-bottom: 10px;
-  }
-}
-
-/* 视频宣讲弹窗样式 */
-.video-lecture-form {
-  padding: 20px 0;
-}
-
-.form-item {
-  margin-bottom: 20px;
-}
-
-.form-label {
-  font-weight: 500;
-  margin-bottom: 8px;
-  color: #606266;
-}
-
-.video-uploader {
-  width: 100%;
-}
-
-.upload-area {
-  width: 100%;
-  height: 120px;
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  cursor: pointer;
-  transition: border-color 0.3s;
-}
-
-.upload-area:hover {
-  border-color: #67C23A;
-}
-
-.upload-text {
-  color: #909399;
-  font-size: 12px;
-  margin-top: 8px;
-}
-
-.el-icon {
-  font-size: 24px;
-  color: #909399;
-}
-
-/* AI实时对话抽屉样式 */
-.ai-chat-drawer {
-  --el-drawer-padding-primary: 0;
-}
-
-.ai-chat-content {
-  padding: 20px;
-  height: calc(100% - 120px);
-  overflow-y: auto;
-}
-
-.chat-settings {
-  margin-bottom: 30px;
-}
-
-.chat-actions {
-  display: flex;
-  gap: 10px;
-  margin: 20px 0;
-}
-
-.chat-questions {
-  margin-top: 20px;
-  min-height: 200px;
-  border: 1px dashed #dcdfe6;
-  border-radius: 4px;
-}
-
-.empty-questions {
-  height: 200px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  color: #909399;
-}
-
-.tip-text {
-  font-size: 12px;
-  color: #c0c4cc;
-  margin-top: 8px;
-}
-
-.question-list {
-  padding: 16px;
- /*  background: #f5f7fa; */
-  border-radius: 8px;
-  min-height: 200px;
-}
-
-.question-card {
-  background: #fff;
-  border-radius: 8px;
-  padding: 20px;
-  margin-bottom: 16px;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
-}
-
-.question-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
-  flex-wrap: wrap;
-  gap: 10px;
-}
-
-.question-title {
-  display: flex;
-  align-items: center;
-  gap: 10px;
-}
-
-.question-number {
-  color: #333;
-  font-weight: 500;
-}
-
-.question-actions {
-  display: flex;
-  align-items: center;
-  gap: 20px;
-}
-
-.weight-control, .answer-limit {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.weight-label, .answer-label {
-  color: #606266;
-  font-size: 14px;
-  white-space: nowrap;
-}
-
-:deep(.el-input-number) {
-  width: 100px;
-}
-
-:deep(.el-select) {
-  width: 120px;
-}
-
-.question-info {
-  background: #f8f9fa;
-  padding: 15px;
-  border-radius: 4px;
-}
-
-.info-item {
-  margin-bottom: 12px;
-  line-height: 1.6;
-}
-
-.info-item:last-child {
-  margin-bottom: 0;
-}
-
-.info-label {
-  color: #909399;
-  margin-right: 8px;
-  font-weight: 500;
-}
-
-/* 问题编辑弹框样式 */
-.question-form {
-  padding: 20px 0;
-}
-
-.form-item {
-  margin-bottom: 20px;
-}
-
-.form-label {
-  font-weight: 500;
-  margin-bottom: 8px;
-  color: #606266;
-  display: flex;
-  align-items: center;
-}
-
-.required {
-  color: #f56c6c;
-  margin-left: 4px;
-}
-
-.full-width {
-  width: 100%;
-}
-
-:deep(.el-input__count) {
-  background: transparent;
-}
-
-:deep(.el-textarea__count) {
-  background: transparent;
-}
-
-/* 资料收集对话框样式 */
-.data-collection-form {
-  padding: 20px;
-}
-
-/* 表单项样式 */
-.form-item {
-  margin-bottom: 24px;
-}
-
-/* 表单标签样式 */
-.form-label {
-  font-size: 14px;
-  color: #333;
-  font-weight: 500;
-  margin-bottom: 12px;
-  display: flex;
-  align-items: center;
-}
-
-/* 必填星号样式 */
-.required {
-  color: #ff4d4f;
-  margin-left: 4px;
-  font-size: 14px;
-}
-
-/* 开关样式 */
-:deep(.el-switch) {
-  margin-top: 8px;
-}
-
-/* 问题列表容器样式 */
-.question-list {
-  margin-top: 12px;
- /*  border: 1px solid #e4e7ed; */
-  border-radius: 4px;
-  padding: 16px;
-/*   background-color: #f8f9fa; */
-}
-
-/* 问题项样式 */
-.question-item {
-  margin-bottom: 16px;
-  display: flex;
-  align-items: center;
-  flex-direction: column;
-}
-
-/* 复选框组样式 */
-:deep(.el-checkbox-group) {
-  display: flex;
-  flex-direction: column;
-  gap: 16px;
-}
-
-/* 复选框样式 */
-:deep(.el-checkbox) {
-  margin-right: 0;
-  height: auto;
-}
-
-/* 复选框标签样式 */
-:deep(.el-checkbox__label) {
-  font-size: 14px;
-  color: #606266;
-}
-
-.data-collection-dialog {
-  .data-collection-form {
-    padding: 0;
-  }
-
-  .question-list {
-    padding: 0;
-  }
-
-  .question-item {
-    border: 1px solid #DCDFE6;
-    border-radius: 4px;
-    margin-bottom: 16px;
-    overflow: hidden;
-  }
-
-  .question-header {
-    background: #F5F7FA;
-    padding: 12px 16px;
-    border-bottom: 1px solid #DCDFE6;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-
-  .question-title {
-    font-size: 14px;
-    color: #303133;
-  }
-
-  .question-type {
-    display: flex;
-    align-items: center;
-    gap: 4px;
-    color: #909399;
-    font-size: 14px;
-    cursor: pointer;
-
-    .el-icon {
-      font-size: 12px;
-    }
-  }
-
-  .question-content {
-    padding: 16px;
-  }
-
-  .user-answer {
-    color: #909399;
-    font-size: 14px;
-    margin-bottom: 16px;
-  }
-
-  .question-actions {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 16px;
-    padding-bottom: 16px;
-    border-bottom: 1px solid #EBEEF5;
-  }
-
-  .action-left {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-
-    .action-text {
-      font-size: 14px;
-      color: #606266;
-    }
-  }
-
-  .action-right {
-    display: flex;
-    gap: 16px;
-
-    .action-icon {
-      font-size: 16px;
-      color: #909399;
-      cursor: pointer;
-
-      &:hover {
-        color: #409EFF;
-      }
-    }
-  }
-
-  .question-settings {
-    display: flex;
-    gap: 24px;
-  }
-
-  .setting-item {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-    
-    span {
-      font-size: 14px;
-      color: #606266;
-    }
-  }
-
-  .add-question {
-    margin-top: 24px;
-    text-align: center;
-  }
-}
-
-/* 简历收集对话框样式 */
-.resume-collection-dialog {
-  .resume-collection-form {
-    padding: 20px 0;
-  }
-
-  .switch-label {
-    margin-left: 10px;
-    font-size: 14px;
-    color: #606266;
-  }
-
-  .resume-preview {
-    margin-top: 20px;
-    border: 1px solid #e4e7ed;
-    border-radius: 4px;
-  }
-
-  .preview-title {
-    padding: 10px 15px;
-    background-color: #f5f7fa;
-    border-bottom: 1px solid #e4e7ed;
-    font-weight: 500;
-    color: #606266;
-  }
-
-  .preview-content {
-    padding: 15px;
-  }
-
-  .preview-item {
-    display: flex;
-    align-items: center;
-    margin-bottom: 15px;
-  }
-
-  .item-label {
-    width: 80px;
-    color: #606266;
-  }
-
-  .item-input {
-    flex: 1;
-    height: 32px;
-    background-color: #f5f7fa;
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-  }
-
-  .item-upload {
-    flex: 1;
-    height: 60px;
-    background-color: #f5f7fa;
-    border: 1px dashed #dcdfe6;
-    border-radius: 4px;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-  }
-
-  .item-required {
-    color: #f56c6c;
-    margin-left: 5px;
-  }
-}
-
-/* 添加代码测试对话框样式 */
-.code-test-dialog {
-  .code-test-form {
-    padding: 20px 0;
-  }
-
-  .switch-label {
-    margin-left: 10px;
-    font-size: 14px;
-    color: #606266;
-  }
-
-  .test-paper-selector {
-    margin-top: 10px;
-  }
-
-  .empty-paper {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    padding: 30px;
-    border: 1px dashed #dcdfe6;
-    border-radius: 4px;
-    background-color: #f8f9fa;
-  }
-
-  .tip-text {
-    margin-top: 10px;
-    font-size: 12px;
-    color: #909399;
-  }
-
-  .selected-paper {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 15px;
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    background-color: #f8f9fa;
-  }
-
-  .paper-info {
-    flex: 1;
-  }
-
-  .paper-title {
-    font-weight: 500;
-    color: #303133;
-    margin-bottom: 5px;
-  }
-
-  .paper-meta {
-    display: flex;
-    gap: 15px;
-    font-size: 12px;
-    color: #909399;
-  }
-
-  .paper-actions {
-    display: flex;
-    gap: 10px;
-  }
-}
-
-/* 添加打字测试对话框样式 */
-.typing-test-dialog {
-  .typing-test-form {
-    padding: 20px;
-  }
-
-  .form-item {
-    margin-bottom: 24px;
-    position: relative;
-  }
-
-  .form-label {
-    font-weight: 500;
-    margin-bottom: 12px;
-    color: #606266;
-    font-size: 14px;
-  }
-
-  .article-selection {
-    margin-top: 10px;
-  }
-
-  .add-article-btn {
-    display: flex;
-    align-items: center;
-    gap: 5px;
-    font-size: 13px;
-  }
-
-  .time-input-container {
-    display: flex;
-    align-items: center;
-  }
-
-  .time-input {
-    width: 120px;
-  }
-
-  .time-unit {
-    margin-left: 10px;
-    color: #606266;
-  }
-
-  .preview-uploader {
-    width: 100px;
-  }
-
-  .upload-area {
-    width: 100px;
-    height: 100px;
-    border: 1px dashed #d9d9d9;
-    border-radius: 6px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    cursor: pointer;
-    transition: border-color 0.3s;
-  }
-
-  .upload-area:hover {
-    border-color: #67C23A;
-  }
-
-  .upload-text {
-    color: #909399;
-    font-size: 12px;
-    margin-top: 8px;
-  }
-
-  .notes-counter {
-    position: absolute;
-    right: 10px;
-    bottom: -20px;
-    font-size: 12px;
-    color: #909399;
-  }
-
-  .criteria-options {
-    display: flex;
-    gap: 20px;
-  }
-  
-  /* 添加以下新样式 */
-  :deep(.el-radio) {
-    margin-right: 30px;
-  }
-  
-  :deep(.el-radio__label) {
-    font-size: 14px;
-  }
-  
-  :deep(.el-textarea) {
-    margin-bottom: 5px;
-  }
-  
-  :deep(.el-checkbox__label) {
-    font-size: 14px;
-  }
-  
-  :deep(.el-input) {
-    width: auto;
-  }
-}
-
-.title-edit-container {
-  display: flex;
-  align-items: flex-start;
-    gap: 10px;
-    flex-direction: column;
-}
-
-.edit-title-btn {
-  color: #67C23A;
-}
-
-/* 职位名称编辑相关样式 */
-.edit-title-btn {
-  margin-left: 10px;
-  font-size: 14px;
-  color: #409EFF;
-}
-
-.title-edit-container {
-  flex: 1;
-}
-
-.title-edit-actions {
-  display: flex;
-  justify-content: flex-end;
-  margin-top: 10px;
-  gap: 10px;
-}
-
-/* 确保在编辑模式下输入框有足够的宽度 */
-.title-edit-container :deep(.el-input) {
-  width: 100%;
-}
-
-.competency-tag {
-  margin-right: 8px;
-  margin-bottom: 8px;
-}
-
-.info-icon {
-  margin-left: 4px;
-  font-size: 14px;
-  color: #909399;
-  float: right;
-}
-
-:deep(.el-checkbox-group) {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 12px;
-}
-
-:deep(.el-checkbox) {
-  margin-right: 0;
-}
-
-.recommended-dimensions,
-.optional-dimensions,
-.custom-dimensions {
-  background: #fff;
-  border-radius: 8px;
-  padding: 20px;
-  margin-bottom: 24px;
-}
-
-.recommended-dimensions h3,
-.optional-dimensions h3,
-.custom-dimensions h3 {
-  font-size: 16px;
-  color: #333;
-  margin-bottom: 16px;
-  font-weight: 500;
-}
-
-.dimension-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
-  gap: 16px;
-}
-
-.ability-label {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-.ability-label .sheng{
-  position: absolute;
-  right: 0;
-  bottom:0;
-  width: 30px;
-  height: 30px;
-}
-.ability-label span {
-  font-size: 14px;
-  color: #333;
-}
-
-.ability-label .el-icon {
-  color: #909399;
-  font-size: 16px;
-  cursor: help;
-}
-
-.custom-dimension-input {
-  display: flex;
-  flex-direction: column;
-  gap: 16px;
-}
-
-.custom-dimension-input .el-input {
-  width: 100%;
-}
-
-.custom-dimension-input .el-textarea {
-  margin-top: 8px;
-}
-
-.el-checkbox {
-  margin-right: 0;
-  margin-bottom: 0;
-  padding: 12px;
-  border: 1px solid #EBEEF5;
-  border-radius: 4px;
-  transition: all 0.3s;
-}
-
-.el-checkbox:hover {
-  background: #F5F7FA;
-}
-
-.el-checkbox.is-checked {
-  background: #F0F9FF;
-  border-color: #409EFF;
-}
-
-.new-feature-tip {
-  background: #FFF7E6;
-  border-radius: 4px;
-  padding: 12px;
-  margin-bottom: 20px;
-  display: flex;
-  align-items: center;
-}
-
-.new-tag {
-  background: #FF9800;
-  color: white;
-  padding: 2px 6px;
-  border-radius: 4px;
-  font-size: 12px;
-  margin-right: 8px;
-}
-
-.dimension-form {
-  display: flex;
-  flex-direction: column;
-  gap: 16px;
-}
-
-.dimension-row {
-  display: flex;
-  gap: 16px;
-}
-
-.dimension-input {
-  display: flex;
-  align-items: center;
- /*  flex: 1; */
-}
-
-.dimension-actions {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-.input-label {
-  width: 80px;
-  font-weight: 500;
-  color: #606266;
-}
-
-.multi-dimension-questions {
-  padding: 10px;
-  background-color: #f2f2f2;
-  border-radius: 10px;
-  .dimension-title {
-    font-size: 16px;
-    font-weight: 500;
-    margin-bottom: 16px;
-  }
-
-  .dimension-list {
-    .dimension-item {
-      display: flex;
-    justify-content: space-between;
-    align-items: center;
-      background: #fff;
-      border-radius: 4px;
-      margin-bottom: 12px;
-      position: relative;
-      .sheng{
-        position: absolute;
-        right: 0;
-        bottom:0;
-        width: 30px;
-        height: 30px;
-      }
-
-      .dimension-header {
-        padding: 12px 16px;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        cursor: pointer;
-
-        .dimension-info {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-
-          .ability-name {
-            font-weight: 500;
-          }
-
-          .new-tag {
-            background: #e6f7ff;
-            color: #1890ff;
-            padding: 2px 6px;
-            border-radius: 2px;
-            font-size: 12px;
-          }
-        }
-
-        .dimension-level {
-          display: flex;
-          align-items: center;
-          gap: 4px;
-
-          .level-label {
-            color: #606266;
-            font-size: 14px;
-          }
-
-          .level-value {
-            color: #303133;
-            font-weight: 500;
-          }
-        }
-
-        .expand-icon {
-          font-size: 16px;
-          color: #909399;
-          transition: transform 0.3s;
-          
-          &.expanded {
-            transform: rotate(180deg);
-          }
-        }
-      }
-
-      .dimension-content {
-        padding: 0 16px 16px;
-        width: 30px;
-        .ability-description {
-          color: #606266;
-          font-size: 14px;
-          line-height: 1.5;
-        }
-      }
-    }
-  }
-}
-
-.interviewer-avatars {
-  display: flex;
-  gap: 20px;
-  margin: 20px 0;
-}
-
-.avatar-item {
-  text-align: center;
-  cursor: pointer;
-}
-
-.avatar-item.selected {
-  position: relative;
-}
-
-.avatar-item.selected::after {
-  content: '';
-  position: absolute;
-  bottom: -5px;
-  left: 50%;
-  transform: translateX(-50%);
-  width: 6px;
-  height: 6px;
-  background-color: #0066FF;
-  border-radius: 50%;
-}
-
-.avatar-image {
-  width: 80px;
-  height: 80px;
-  border-radius: 50%;
-  overflow: hidden;
-  margin-bottom: 8px;
-}
-
-.avatar-image img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
-
-.avatar-name {
-  font-size: 14px;
-  color: #333;
-}
-
-.interview-settings {
-  margin-top: 30px;
-}
-
-.setting-item {
-  margin-bottom: 20px;
-}
-
-.setting-label {
-  font-weight: 500;
-  margin-bottom: 10px;
-}
-
-.setting-desc {
-  font-size: 12px;
-  color: #666;
-  margin-top: 5px;
-}
-
-.setting-options {
-  display: flex;
-  gap: 20px;
 }
-</style> 
+</style>

+ 11 - 0
src/views/questionBank/list/api.ts

@@ -117,3 +117,14 @@ export function GetCompetencyList(params: any) {
 	});
 }
 
+
+
+/* 添加填空题 */
+export function AddFillQuestion(data:any) {
+	return request({
+	  url: '/api/system/interview_question/blank/create',
+	  method: 'post',
+	  data
+	});
+  }
+  

+ 74 - 2
src/views/questionBank/list/crud.tsx

@@ -809,7 +809,6 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					},
 					type: 'dict-select',
 					column: {
-						
 						minWidth: 120,
 					},
 					dict: dict({
@@ -847,13 +846,22 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 									if (!form.scoring_reference) {
 										form.scoring_reference = '该评分反映了症状表现的频率与严重程度。';
 									}
+								} else if (form.question_form === 6) {
+									// 填空题
+									form.blank_answer_template = [
+										{ blank_index: 1, correct_answer: '', score: 5 }
+									];
+									// 初始化评分说明
+									if (!form.scoring_reference) {
+										form.scoring_reference = '根据答案的准确性评分';
+									}
 								} else {
 									// 开放问题
 									form.options = [];
 								}
 							}
 						},
-						helper: '选择题目的形式:开放问题、单选题、多选题、色盲题或追加型开放问题',
+						helper: '选择题目的形式:开放问题、单选题、多选题、填空题、色盲题或追加型开放问题',
 					},
 				},
 				position_types: {
@@ -1385,6 +1393,70 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					form: {
 						show: false // 在表单中不显示此字段,通常由系统自动生成
 					}
+				},
+				blank_answer_template: {
+					title: '填空答案模板',
+					search: { show: false },
+					column: { show: false },
+					form: {
+						show: compute(({ form }) => {
+							return form && form.question_form === 6;
+						}),
+						component: {
+							name: 'el-card',
+							children: {
+								default: ({ form }: { form: any }) => {
+									// 确保blank_answer_template数组已初始化
+									if (!form.blank_answer_template) {
+										form.blank_answer_template = [{ blank_index: 1, correct_answer: '', score: 5 }];
+									}
+
+									// 计算题目中的填空数量
+									const blankCount = (form.question || '').split('___').length - 1;
+
+									// 如果填空数量变化,更新模板
+									if (blankCount > 0 && form.blank_answer_template.length !== blankCount) {
+										form.blank_answer_template = Array.from({ length: blankCount }, (_, i) => ({
+											blank_index: i + 1,
+											correct_answer: '',
+											score: 5
+										}));
+									}
+
+									return (
+										<div>
+											<div class="blank-header" style="display: flex; margin-bottom: 10px; font-weight: bold;">
+												<span style="width: 80px;">填空序号</span>
+												<span style="flex: 1;">正确答案</span>
+												<span style="width: 120px; text-align: center;">分值</span>
+											</div>
+											{form.blank_answer_template.map((blank: any, index: number) => (
+												<div class="blank-item" key={index} style="display: flex; align-items: center; margin-bottom: 10px;">
+													<span style="width: 80px;">{blank.blank_index}</span>
+													<el-input 
+														v-model={blank.correct_answer} 
+														placeholder="请输入正确答案" 
+														style="flex: 1; margin: 0 10px;"
+													/>
+													<el-input-number
+														v-model={blank.score}
+														min={0}
+														max={100}
+														style="width: 120px;"
+														placeholder="分值"
+													/>
+												</div>
+											))}
+											<div style="color: #666; font-size: 12px; margin-top: 10px;">
+												提示:在题目中使用"___"(三个下划线)表示填空位置,系统会自动识别填空数量
+											</div>
+										</div>
+									);
+								}
+							}
+						},
+						helper: '设置每个填空的正确答案和分值'
+					}
 				}
 				
 			},

+ 4 - 1
src/views/system/home/index.vue

@@ -5,7 +5,7 @@
 			<el-col :span="18">
 				<el-row :gutter="12" class="home-card-one mb15">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<div class="home-card-one-title">上午好,刘老师。这是今日的人才情况动态。</div>
+						<div class="home-card-one-title">上午好,{{}}。这是今日的人才情况动态。</div>
 					</el-col>
 				</el-row>
 				<el-row :gutter="10" class="home-card-two mb15">
@@ -125,6 +125,7 @@ import { useThemeConfig } from '/@/stores/themeConfig';
 import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
 import { GetList } from './api';
 import { useRouter } from 'vue-router';
+import { Session } from '/@/utils/storage';
 
 // 定义API数据接口
 interface ApiData {
@@ -553,6 +554,8 @@ export default defineComponent({
 		onMounted(() => {
 			fetchApiData();
 			initEchartsResize();
+			
+			console.log(Session.get('userInfo'));
 		});
 		// 由于页面缓存原因,keep-alive
 		onActivated(() => {