eli-video-interview 1.6.5 → 1.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/components/Charts/ReportPie.js +5 -5
- package/esm/modules/ai-report/components/ScoreReport/styled.d.ts +1 -1
- package/esm/modules/ai-report-v2/components/ScoreReport/styled.d.ts +1 -1
- package/esm/modules/ai-report-v3/Root.js +3 -3
- package/esm/modules/ai-report-v3/components/AIEvaluate/Evaluate.js +67 -12
- package/esm/modules/ai-report-v3/components/AIEvaluate/Graph.d.ts +1 -1
- package/esm/modules/ai-report-v3/components/AIEvaluate/Graph.js +198 -66
- package/esm/modules/ai-report-v3/components/AIEvaluate/index.js +2 -2
- package/esm/modules/ai-report-v3/components/CheatRisk/CheatRisk.js +77 -26
- package/esm/modules/ai-report-v3/components/Form/Form.js +1 -1
- package/esm/modules/ai-report-v3/components/ModuleTitle.d.ts +3 -1
- package/esm/modules/ai-report-v3/components/ModuleTitle.js +19 -8
- package/esm/modules/ai-report-v3/components/ScoreReport/styled.d.ts +1 -1
- package/esm/modules/ai-report-v3/components/SectionTabs/SectionTabs.js +1 -1
- package/esm/modules/ai-report-v3/components/V3Header/V3Header.d.ts +2 -1
- package/esm/modules/ai-report-v3/components/V3Header/V3Header.js +18 -49
- package/esm/modules/ai-report-v3/components/VideoQuestion/QuestionItem.js +50 -18
- package/esm/modules/ai-report-v3/components/VideoQuestion/index.js +4 -3
- package/esm/modules/ai-report-v3/interface.d.ts +4 -0
- package/esm/modules/ai-report-v3/useAiReport.d.ts +1 -0
- package/esm/modules/ai-template/components/TemplateList/styled.d.ts +1 -1
- package/esm/utils/interceptor.js +35 -0
- package/lib/components/Charts/ReportPie.js +5 -5
- package/lib/modules/ai-report/components/ScoreReport/styled.d.ts +1 -1
- package/lib/modules/ai-report-v2/components/ScoreReport/styled.d.ts +1 -1
- package/lib/modules/ai-report-v3/Root.js +3 -3
- package/lib/modules/ai-report-v3/components/AIEvaluate/Evaluate.js +65 -10
- package/lib/modules/ai-report-v3/components/AIEvaluate/Graph.d.ts +1 -1
- package/lib/modules/ai-report-v3/components/AIEvaluate/Graph.js +198 -66
- package/lib/modules/ai-report-v3/components/AIEvaluate/index.js +1 -1
- package/lib/modules/ai-report-v3/components/CheatRisk/CheatRisk.js +76 -25
- package/lib/modules/ai-report-v3/components/Form/Form.js +1 -1
- package/lib/modules/ai-report-v3/components/ModuleTitle.d.ts +3 -1
- package/lib/modules/ai-report-v3/components/ModuleTitle.js +19 -8
- package/lib/modules/ai-report-v3/components/ScoreReport/styled.d.ts +1 -1
- package/lib/modules/ai-report-v3/components/SectionTabs/SectionTabs.js +1 -1
- package/lib/modules/ai-report-v3/components/V3Header/V3Header.d.ts +2 -1
- package/lib/modules/ai-report-v3/components/V3Header/V3Header.js +18 -49
- package/lib/modules/ai-report-v3/components/VideoQuestion/QuestionItem.js +50 -18
- package/lib/modules/ai-report-v3/components/VideoQuestion/index.js +4 -3
- package/lib/modules/ai-report-v3/interface.d.ts +4 -0
- package/lib/modules/ai-report-v3/useAiReport.d.ts +1 -0
- package/lib/modules/ai-template/components/TemplateList/styled.d.ts +1 -1
- package/lib/utils/interceptor.js +35 -0
- package/package.json +1 -1
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
1
12
|
var __read = (this && this.__read) || function (o, n) {
|
|
2
13
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
14
|
if (!m) return o;
|
|
@@ -30,46 +41,75 @@ function setupCanvas(canvas) {
|
|
|
30
41
|
// Good: Array<number>;
|
|
31
42
|
// Best: Array<number>;
|
|
32
43
|
// }
|
|
33
|
-
var MAX_WIDTH =
|
|
34
|
-
var MAX_HEIGHT =
|
|
44
|
+
var MAX_WIDTH = 354;
|
|
45
|
+
var MAX_HEIGHT = 18;
|
|
46
|
+
// 底部"更多考核维度"提示胶囊(设计稿「容器 14851」,画进 canvas 而非 HTML)
|
|
47
|
+
var CAPTION_TEXT = '更多考核维度请展开上方综合评价查看详情';
|
|
48
|
+
var CAPTION_HEIGHT = 20;
|
|
49
|
+
// 粗略估算文本像素宽(与下方绘制所用 sans-serif 接近;中文宽、拉丁/数字窄)
|
|
50
|
+
var estimateTextWidth = function (s, cjkW, latinW) {
|
|
51
|
+
var e_1, _a;
|
|
52
|
+
if (cjkW === void 0) { cjkW = 14; }
|
|
53
|
+
if (latinW === void 0) { latinW = 7.5; }
|
|
54
|
+
var w = 0;
|
|
55
|
+
try {
|
|
56
|
+
for (var s_1 = __values(s), s_1_1 = s_1.next(); !s_1_1.done; s_1_1 = s_1.next()) {
|
|
57
|
+
var ch = s_1_1.value;
|
|
58
|
+
w += /[ -鿿-]/.test(ch) ? cjkW : latinW;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
62
|
+
finally {
|
|
63
|
+
try {
|
|
64
|
+
if (s_1_1 && !s_1_1.done && (_a = s_1.return)) _a.call(s_1);
|
|
65
|
+
}
|
|
66
|
+
finally { if (e_1) throw e_1.error; }
|
|
67
|
+
}
|
|
68
|
+
return w;
|
|
69
|
+
};
|
|
35
70
|
var levelOrder = ['Bad', 'Good', 'Best'];
|
|
36
|
-
|
|
71
|
+
// 表头三段宽度(设计稿 176:89:89,铺满轨道 MAX_WIDTH)
|
|
72
|
+
var LEVEL_WIDTHS = {
|
|
73
|
+
Bad: (MAX_WIDTH * (176 / 354)) | 0,
|
|
74
|
+
Good: (MAX_WIDTH * (89 / 354)) | 0,
|
|
75
|
+
Best: MAX_WIDTH - ((MAX_WIDTH * (176 / 354)) | 0) - ((MAX_WIDTH * (89 / 354)) | 0),
|
|
76
|
+
};
|
|
37
77
|
var levelConf = {
|
|
38
78
|
Bad: {
|
|
39
79
|
label: '欠佳',
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
color: [229, 115, 115],
|
|
80
|
+
fontColor: '#FFFFFF',
|
|
81
|
+
color: [98, 156, 255],
|
|
43
82
|
gradient: ['#629CFF', 'rgba(75,141,255,0.08)'],
|
|
44
83
|
scoreGradient: ['#4B87F0', '#D2E2FF'],
|
|
45
84
|
backgroundColor: 'rgba(98,156,255,0.15)',
|
|
46
|
-
shadowColor: 'rgba(98,
|
|
85
|
+
shadowColor: 'rgba(98,156,255,0.4)',
|
|
86
|
+
textColor: '#2E6ED8',
|
|
47
87
|
endScore: 60,
|
|
48
|
-
pointColor: ['RGB(
|
|
88
|
+
pointColor: ['RGB(98, 156, 255)', 'RGB(98, 156, 255)'],
|
|
49
89
|
},
|
|
50
90
|
Good: {
|
|
51
91
|
label: '适中',
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
color: [255, 183, 77],
|
|
92
|
+
fontColor: '#ffffff',
|
|
93
|
+
color: [0, 217, 157],
|
|
55
94
|
gradient: ['#00D99D', '#CBFFF1'],
|
|
56
95
|
scoreGradient: ['#0ACB96', '#65FFD4'],
|
|
57
96
|
backgroundColor: 'rgba(0,217,157,0.15)',
|
|
58
|
-
shadowColor: 'rgba(0,
|
|
97
|
+
shadowColor: 'rgba(0,217,157,0.4)',
|
|
98
|
+
textColor: '#0A9E71',
|
|
59
99
|
endScore: 80,
|
|
60
|
-
pointColor: ['RGB(
|
|
100
|
+
pointColor: ['RGB(0, 217, 157)', 'RGB(0, 217, 157)'],
|
|
61
101
|
},
|
|
62
102
|
Best: {
|
|
63
103
|
label: '优秀',
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
color: [0, 217, 157],
|
|
104
|
+
fontColor: '#ffffff',
|
|
105
|
+
color: [255, 153, 3],
|
|
67
106
|
gradient: ['#FF9903', 'rgba(255,218,165,0.29)'],
|
|
68
107
|
scoreGradient: ['#FF9903', '#FFDF9D'],
|
|
69
|
-
shadowColor: 'rgba(255, 153, 3, 0.40)',
|
|
70
108
|
backgroundColor: 'rgba(255,183,77,0.15)',
|
|
109
|
+
shadowColor: 'rgba(255,153,3,0.4)',
|
|
110
|
+
textColor: '#E07E00',
|
|
71
111
|
endScore: 100,
|
|
72
|
-
pointColor: ['RGB(
|
|
112
|
+
pointColor: ['RGB(255, 153, 3)', 'RGB(255, 153, 3)'],
|
|
73
113
|
},
|
|
74
114
|
};
|
|
75
115
|
var tipEl = document.createElement('div');
|
|
@@ -87,34 +127,28 @@ function isInPath(x, y, rect, ctx) {
|
|
|
87
127
|
}
|
|
88
128
|
var drawTop = function (layout, ctx) {
|
|
89
129
|
// 设置全局样式
|
|
90
|
-
var leftLableWidth = layout.leftLableWidth,
|
|
130
|
+
var leftLableWidth = layout.leftLableWidth, shiftY = layout.shiftY, dashEndY = layout.dashEndY;
|
|
131
|
+
ctx.font = '14px sans-serif';
|
|
91
132
|
var offset = leftLableWidth;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
var gradientFill = ctx.createLinearGradient(0, 0, 0, 25);
|
|
133
|
+
levelOrder.forEach(function (level) {
|
|
134
|
+
var width = LEVEL_WIDTHS[level];
|
|
135
|
+
var _a = levelConf[level], gradient = _a.gradient, label = _a.label, fontColor = _a.fontColor;
|
|
136
|
+
// 绘制渐变背景(设计稿 180deg:上=主色,下=淡色过渡)
|
|
137
|
+
var gradientFill = ctx.createLinearGradient(0, shiftY, 0, shiftY + 25);
|
|
98
138
|
gradientFill.addColorStop(0, gradient[0]);
|
|
99
139
|
gradientFill.addColorStop(1, gradient[1]);
|
|
100
140
|
ctx.fillStyle = gradientFill;
|
|
101
|
-
ctx.fillRect(offset,
|
|
102
|
-
//
|
|
141
|
+
ctx.fillRect(offset, shiftY, width, 25);
|
|
142
|
+
// 绘制标签文本(置于色带中上,避开底部透明渐变区)
|
|
103
143
|
var labelWidth = measureTextWidth(ctx, label);
|
|
104
144
|
ctx.fillStyle = fontColor;
|
|
105
|
-
ctx.fillText(label, offset + width / 2 - labelWidth / 2,
|
|
106
|
-
//
|
|
107
|
-
drawVerticalDashedLine(ctx, offset - 1,
|
|
108
|
-
|
|
109
|
-
ctx.fillStyle = '#4CAF50';
|
|
110
|
-
ctx.fillText("".concat(levelOrderScore[i]), offset - (i === 0 ? 5 : 9), scoreTextY);
|
|
111
|
-
offset += width + 1;
|
|
112
|
-
// 绘制结束的虚线和文本 '100'
|
|
113
|
-
if (i === levelOrder.length - 1) {
|
|
114
|
-
drawVerticalDashedLine(ctx, offset - 2, 0, lineEndY, 2, 2);
|
|
115
|
-
ctx.fillText('100', offset - 2 - 24, scoreTextY);
|
|
116
|
-
}
|
|
145
|
+
ctx.fillText(label, offset + width / 2 - labelWidth / 2, shiftY + 16);
|
|
146
|
+
// 绘制垂直虚线(色带分隔 → 末条底部下方 dashEndY)
|
|
147
|
+
drawVerticalDashedLine(ctx, offset - 1, shiftY + 25, dashEndY, 2, 2);
|
|
148
|
+
offset += width;
|
|
117
149
|
});
|
|
150
|
+
// 右端收口虚线
|
|
151
|
+
drawVerticalDashedLine(ctx, offset - 1, shiftY + 25, dashEndY, 2, 2);
|
|
118
152
|
};
|
|
119
153
|
var truncateString = function (str) { return (str.length > 7 ? "".concat(str.slice(0, 6), "...") : str); };
|
|
120
154
|
var drawLable = function (lable, x, y, ctx) {
|
|
@@ -125,7 +159,7 @@ function drawVerticalDashedLine(ctx, x, startY, endY, dashLength, gapLength) {
|
|
|
125
159
|
if (dashLength === void 0) { dashLength = 2; }
|
|
126
160
|
if (gapLength === void 0) { gapLength = 1; }
|
|
127
161
|
ctx.lineWidth = 1;
|
|
128
|
-
ctx.strokeStyle = 'rgba(
|
|
162
|
+
ctx.strokeStyle = 'rgba(153, 153, 153, 0.35)';
|
|
129
163
|
ctx.beginPath();
|
|
130
164
|
ctx.setLineDash([dashLength, gapLength]);
|
|
131
165
|
ctx.moveTo(x, startY);
|
|
@@ -161,35 +195,43 @@ export function getLevel(score) {
|
|
|
161
195
|
}
|
|
162
196
|
}
|
|
163
197
|
var drawScore = function (layout, ctx, config, rect, score) {
|
|
164
|
-
var
|
|
198
|
+
var text = "".concat(score);
|
|
199
|
+
ctx.save();
|
|
200
|
+
// 渐变数据条(设计稿 90deg:左=强色 0% → 右=淡色 100%),圆角胶囊
|
|
201
|
+
var gradient = ctx.createLinearGradient(rect.x, 0, rect.x + rect.width, 0);
|
|
165
202
|
gradient.addColorStop(0, config.scoreGradient[0]);
|
|
166
203
|
gradient.addColorStop(1, config.scoreGradient[1]);
|
|
167
204
|
ctx.fillStyle = gradient;
|
|
168
|
-
// // 设置阴影
|
|
169
205
|
ctx.shadowOffsetX = 0;
|
|
170
206
|
ctx.shadowOffsetY = 4;
|
|
171
207
|
ctx.shadowBlur = 6;
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
ctx.
|
|
208
|
+
ctx.shadowColor = config.shadowColor;
|
|
209
|
+
var barRadius = rect.height / 2;
|
|
210
|
+
drawRoundedRect(rect.x, rect.y, rect.width, rect.height, barRadius, true, false, ctx);
|
|
211
|
+
ctx.restore();
|
|
212
|
+
// 分数数字直接放在条末端右侧(无圆形背景,颜色取该档主色加深保证可读)
|
|
213
|
+
ctx.save();
|
|
214
|
+
ctx.font = 'bold 13px sans-serif';
|
|
215
|
+
var textW = measureTextWidth(ctx, text);
|
|
216
|
+
ctx.fillStyle = config.textColor || '#333';
|
|
217
|
+
ctx.textAlign = 'left';
|
|
218
|
+
ctx.textBaseline = 'middle';
|
|
219
|
+
ctx.fillText(text, rect.x + rect.width + 6, rect.y + rect.height / 2 + 1);
|
|
220
|
+
ctx.restore();
|
|
221
|
+
return textW;
|
|
179
222
|
};
|
|
180
223
|
var draw = function (layout, dimensions, pathRef, ctx) {
|
|
181
224
|
ctx.font = '14px sans-serif';
|
|
182
225
|
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
|
226
|
+
var shiftY = layout.shiftY;
|
|
183
227
|
dimensions.forEach(function (v, i) {
|
|
184
228
|
var config = getLevel(v.score);
|
|
185
|
-
// 绘制圆角矩形
|
|
186
|
-
var borderRadius = 12;
|
|
187
229
|
var x = layout.leftLableWidth;
|
|
188
|
-
var y =
|
|
189
|
-
//
|
|
230
|
+
var y = shiftY + 46 + layout.itemSpacing * i;
|
|
231
|
+
// 轨道胶囊背景(设计稿「条状图*条背景」:本档淡色 + 全圆角)
|
|
190
232
|
ctx.fillStyle = config.backgroundColor;
|
|
191
|
-
drawRoundedRect(x, y, MAX_WIDTH, MAX_HEIGHT,
|
|
192
|
-
var endPointY =
|
|
233
|
+
drawRoundedRect(x, y, MAX_WIDTH, MAX_HEIGHT, MAX_HEIGHT / 2, true, false, ctx);
|
|
234
|
+
var endPointY = shiftY + 46 + 14 + layout.itemSpacing * i; // TOP_OFFSET是顶部偏移,14是文字相对矩形的偏移
|
|
193
235
|
drawLable(v.name, 0, endPointY, ctx);
|
|
194
236
|
pathRef.push({ x: 0, y: y, width: layout.leftLableWidth, height: 22, tips: "".concat(v.name, ": ").concat(v.score) });
|
|
195
237
|
var score = v.score === 0 ? 0 : Math.max(v.score, 4);
|
|
@@ -202,21 +244,91 @@ var draw = function (layout, dimensions, pathRef, ctx) {
|
|
|
202
244
|
});
|
|
203
245
|
drawTop(layout, ctx);
|
|
204
246
|
};
|
|
247
|
+
// 底部提示胶囊:浅绿圆角胶囊(#EBFCF7, 淡青描边) + 居中青色(#0087B4)文字(y 为胶囊顶)
|
|
248
|
+
var drawCaption = function (ctx, canvasWidth, y) {
|
|
249
|
+
var width = Math.min(440, canvasWidth - 24);
|
|
250
|
+
var height = CAPTION_HEIGHT;
|
|
251
|
+
var x = (canvasWidth - width) / 2;
|
|
252
|
+
ctx.save();
|
|
253
|
+
ctx.fillStyle = '#EBFCF7';
|
|
254
|
+
ctx.strokeStyle = 'rgba(0,135,180,0.1)';
|
|
255
|
+
ctx.lineWidth = 1;
|
|
256
|
+
drawRoundedRect(x, y, width, height, height / 2, true, true, ctx);
|
|
257
|
+
ctx.font = '12px sans-serif';
|
|
258
|
+
ctx.textAlign = 'center';
|
|
259
|
+
ctx.textBaseline = 'middle';
|
|
260
|
+
ctx.fillStyle = '#0087B4';
|
|
261
|
+
ctx.fillText(CAPTION_TEXT, canvasWidth / 2, y + height / 2);
|
|
262
|
+
ctx.restore();
|
|
263
|
+
};
|
|
264
|
+
// 刻度值:欠佳|适中 分界=60、适中|优秀 分界=80、优秀满格(右端线)=100
|
|
265
|
+
var drawScaleTicks = function (ctx, opts) {
|
|
266
|
+
var y = opts.y, x60 = opts.x60, x80 = opts.x80, xRight = opts.xRight;
|
|
267
|
+
ctx.save();
|
|
268
|
+
ctx.font = '11px sans-serif';
|
|
269
|
+
ctx.textBaseline = 'middle';
|
|
270
|
+
ctx.fillStyle = 'rgba(102,102,102,0.78)';
|
|
271
|
+
ctx.textAlign = 'center';
|
|
272
|
+
ctx.fillText('60', x60, y);
|
|
273
|
+
ctx.fillText('80', x80, y);
|
|
274
|
+
ctx.textAlign = 'right';
|
|
275
|
+
ctx.fillText('100', xRight - 3, y); // 右端线:右对齐向内收,避免出画布
|
|
276
|
+
ctx.restore();
|
|
277
|
+
};
|
|
205
278
|
var Graph = function (_a) {
|
|
206
279
|
var _b = _a.items, items = _b === void 0 ? [] : _b;
|
|
207
280
|
var ref = useRef(null);
|
|
208
281
|
var pathRef = useRef([]);
|
|
209
282
|
var _c = __read(useState(), 2), ctx = _c[0], setCtx = _c[1];
|
|
210
|
-
//
|
|
211
|
-
var ITEM_SPACING =
|
|
212
|
-
var TOP_OFFSET =
|
|
213
|
-
var
|
|
214
|
-
var
|
|
215
|
-
var
|
|
283
|
+
// ---- 垂直布局常量(条图 → 刻度 → 胶囊 的紧凑垂直流)----
|
|
284
|
+
var ITEM_SPACING = 28; // 相邻条间距
|
|
285
|
+
var TOP_OFFSET = 46; // 条顶相对内容顶 shiftY 的偏移
|
|
286
|
+
var CANVAS_HEIGHT = 300; // 与右侧饼图等高(内容不足时保持,超出按流增高)
|
|
287
|
+
var DASH_TAIL = 8; // 刻度虚线超出最后一条条底的长度
|
|
288
|
+
var TICK_LINE = 14; // 刻度数值行高
|
|
289
|
+
var GAP_CAPTION = 8; // 刻度数 → 提示胶囊间距
|
|
290
|
+
var CAPTION_PAD_BOTTOM = 12; // 胶囊下方留白
|
|
291
|
+
// 条形区域高度(shiftY 内容顶 → 最后一条条底)
|
|
292
|
+
var contentHeight = useMemo(function () {
|
|
293
|
+
if (items.length === 0)
|
|
294
|
+
return 0;
|
|
295
|
+
return TOP_OFFSET + (items.length - 1) * ITEM_SPACING + MAX_HEIGHT;
|
|
296
|
+
}, [items]);
|
|
297
|
+
// 可见内容块高度(条图 → 刻度 → 胶囊),不含外留白
|
|
298
|
+
var bodyHeight = contentHeight + DASH_TAIL + TICK_LINE + GAP_CAPTION + CAPTION_HEIGHT;
|
|
299
|
+
// 画布高:≥300,且内容上下各保留 ≥CAPTION_PAD_BOTTOM 的对称留白
|
|
300
|
+
var canvasHeight = useMemo(function () { return Math.max(CANVAS_HEIGHT, bodyHeight + 2 * CAPTION_PAD_BOTTOM); }, [bodyHeight]);
|
|
301
|
+
// 内容块在画布内垂直居中 → 上留白 = 下留白
|
|
302
|
+
var shiftY = useMemo(function () {
|
|
303
|
+
if (bodyHeight <= 0)
|
|
304
|
+
return 0;
|
|
305
|
+
return Math.max(0, Math.round((canvasHeight - bodyHeight) / 2));
|
|
306
|
+
}, [bodyHeight, canvasHeight]);
|
|
307
|
+
var dashEndY = shiftY + contentHeight + DASH_TAIL; // 虚线终点 = 末条条底 + DASH_TAIL
|
|
308
|
+
var tickMidY = shiftY + contentHeight + DASH_TAIL + Math.round(TICK_LINE / 2);
|
|
309
|
+
var captionY = shiftY + contentHeight + DASH_TAIL + TICK_LINE + GAP_CAPTION; // 胶囊顶
|
|
310
|
+
// 左标签列宽度贴合最长维度名,压缩文字与条形之间留白
|
|
311
|
+
var leftLabelWidth = useMemo(function () {
|
|
216
312
|
if (items.length === 0)
|
|
217
313
|
return 0;
|
|
218
|
-
|
|
314
|
+
var mx = 0;
|
|
315
|
+
items.forEach(function (it) { return (mx = Math.max(mx, estimateTextWidth(truncateString(it.name)))); });
|
|
316
|
+
return Math.min(Math.round(mx) + 18, 210);
|
|
219
317
|
}, [items]);
|
|
318
|
+
// 右边界:默认=色带/轨道右端(leftLabelWidth+MAX_WIDTH)。仅当某条高分条形末端的分数字(条尾+6px+数字宽)超出轨道时顺延,避免满格数字被裁。
|
|
319
|
+
var rightmostX = useMemo(function () {
|
|
320
|
+
var end = leftLabelWidth + MAX_WIDTH;
|
|
321
|
+
items.forEach(function (it) {
|
|
322
|
+
var s = it.score || 0;
|
|
323
|
+
var barWidth = s === 0 ? 0 : (MAX_WIDTH * Math.min(Math.max(s, 4), 100)) / 100;
|
|
324
|
+
var numEnd = leftLabelWidth + barWidth + 6 + estimateTextWidth("".concat(s));
|
|
325
|
+
if (numEnd > end)
|
|
326
|
+
end = numEnd;
|
|
327
|
+
});
|
|
328
|
+
return end;
|
|
329
|
+
}, [items, leftLabelWidth]);
|
|
330
|
+
// 画布宽紧贴内容,只留 6px 尾余(替代原固定 +48px 右留白)
|
|
331
|
+
var canvasWidth = Math.round(rightmostX + 6);
|
|
220
332
|
useEffect(function () {
|
|
221
333
|
if (items.length === 0)
|
|
222
334
|
return;
|
|
@@ -241,15 +353,35 @@ var Graph = function (_a) {
|
|
|
241
353
|
useEffect(function () {
|
|
242
354
|
if (ctx) {
|
|
243
355
|
var layout = {
|
|
244
|
-
leftLableWidth:
|
|
356
|
+
leftLableWidth: leftLabelWidth,
|
|
245
357
|
topLableHeight: 40,
|
|
246
358
|
itemSpacing: ITEM_SPACING,
|
|
247
|
-
height:
|
|
359
|
+
height: contentHeight,
|
|
360
|
+
shiftY: shiftY,
|
|
361
|
+
dashEndY: dashEndY,
|
|
248
362
|
};
|
|
249
363
|
pathRef.current = [];
|
|
250
364
|
draw(layout, items, pathRef.current, ctx);
|
|
365
|
+
drawScaleTicks(ctx, {
|
|
366
|
+
y: tickMidY,
|
|
367
|
+
x60: leftLabelWidth + LEVEL_WIDTHS.Bad,
|
|
368
|
+
x80: leftLabelWidth + LEVEL_WIDTHS.Bad + LEVEL_WIDTHS.Good,
|
|
369
|
+
xRight: leftLabelWidth + MAX_WIDTH,
|
|
370
|
+
});
|
|
371
|
+
drawCaption(ctx, canvasWidth, captionY);
|
|
251
372
|
}
|
|
252
|
-
}, [
|
|
373
|
+
}, [
|
|
374
|
+
ctx,
|
|
375
|
+
items,
|
|
376
|
+
contentHeight,
|
|
377
|
+
shiftY,
|
|
378
|
+
leftLabelWidth,
|
|
379
|
+
canvasWidth,
|
|
380
|
+
ITEM_SPACING,
|
|
381
|
+
dashEndY,
|
|
382
|
+
tickMidY,
|
|
383
|
+
captionY,
|
|
384
|
+
]);
|
|
253
385
|
var handleMouseMove = useCallback(function (e) {
|
|
254
386
|
if (ctx) {
|
|
255
387
|
var p = pathRef.current.find(function (p) { return isInPath(e.nativeEvent.offsetX, e.nativeEvent.offsetY, p, ctx); });
|
|
@@ -264,6 +396,6 @@ var Graph = function (_a) {
|
|
|
264
396
|
}
|
|
265
397
|
}
|
|
266
398
|
}, [ctx, pathRef]);
|
|
267
|
-
return _jsx("canvas", { ref: ref, onMouseOut: function () { return (tipEl.style.display = 'none'); }, onMouseMove: handleMouseMove, style: { width:
|
|
399
|
+
return (_jsx("canvas", { ref: ref, onMouseOut: function () { return (tipEl.style.display = 'none'); }, onMouseMove: handleMouseMove, style: { width: canvasWidth, height: canvasHeight } }));
|
|
268
400
|
};
|
|
269
401
|
export default memo(Graph);
|
|
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
13
|
import Report from '../ScoreReport/Report';
|
|
14
14
|
import Evaluate from './Evaluate';
|
|
15
15
|
import Graph from './Graph';
|
|
@@ -27,6 +27,6 @@ var Index = function () {
|
|
|
27
27
|
}, [collection]);
|
|
28
28
|
if (!showAiDimension)
|
|
29
29
|
return null;
|
|
30
|
-
return (_jsx(Box, __assign({ id: "report-evaluate", sx: { px: 2, mt:
|
|
30
|
+
return (_jsx(Box, __assign({ id: "report-evaluate", sx: { px: 2, mt: 1.5 } }, { children: _jsx(Box, __assign({ component: Paper, elevation: 0, bgcolor: "transparent", mb: 3 }, { children: _jsxs(Stack, { children: [workplaceEvaluation && (_jsx(Evaluate, { orderToken: orderToken, canEdit: canEditAiDimension, evaluation: workplaceEvaluation, title: "\u7EFC\u5408\u8BC4\u4EF7", mode: "show" })), collection.length > 0 && (_jsx(_Fragment, { children: _jsxs(Stack, __assign({ direction: "row", alignItems: "center", justifyContent: "space-between" }, { children: [_jsx(Box, __assign({ flex: 1, minWidth: 0, sx: { display: 'flex', alignItems: 'center', justifyContent: 'center' } }, { children: _jsx(Box, __assign({ sx: { display: 'inline-flex', flexDirection: 'column', alignItems: 'center' } }, { children: _jsx(Graph, { items: items }) })) })), _jsx(Report, {})] })) }))] }) })) })));
|
|
31
31
|
};
|
|
32
32
|
export default memo(Index);
|
|
@@ -9,34 +9,85 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
-
if (!m) return o;
|
|
15
|
-
var i = m.call(o), r, ar = [], e;
|
|
16
|
-
try {
|
|
17
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
-
}
|
|
19
|
-
catch (error) { e = { error: error }; }
|
|
20
|
-
finally {
|
|
21
|
-
try {
|
|
22
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
-
}
|
|
24
|
-
finally { if (e) throw e.error; }
|
|
25
|
-
}
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
29
13
|
import { Box, Stack } from 'fbm-ui/lib/mui';
|
|
30
14
|
import { Typography } from 'fbm-ui';
|
|
31
|
-
import {
|
|
32
|
-
//
|
|
15
|
+
import { useAiReportStore } from "../../../../store/ai-report/global-store";
|
|
16
|
+
// 报告头部与"作弊风险"章节共用的风险标签名(命中其一即视为存在面试过程风险)
|
|
17
|
+
var RISK_TAG_NAMES = ['疑似读稿', '疑似作弊', '面试切屏'];
|
|
18
|
+
// 作弊检测详情表(仅命中风险时展示;"有风险"文案取自蓝湖,未命中的行第三列统一"暂无风险")
|
|
19
|
+
var CHEAT_ROWS = [
|
|
20
|
+
{
|
|
21
|
+
name: '疑似读稿',
|
|
22
|
+
detail: '根据候选人面试回答过程的眼神表现,以及回答内容,候选人有读背稿的嫌疑,也有可能候选人的眼神变化只是在思考。',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: '面试切屏',
|
|
26
|
+
detail: '候选人面试答题过程中有切屏的动作,可能是去查阅资料,也有可能是系统其他应用弹窗导致。',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: '疑似作弊',
|
|
30
|
+
detail: '面试过程眼神、回答内容、面试行为综合诊断,候选人可能有作弊的嫌疑。',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
// 单个风险标签胶囊(橙色警示样式,紧凑小号)
|
|
34
|
+
var RiskPill = function (_a) {
|
|
35
|
+
var name = _a.name;
|
|
36
|
+
return (_jsxs(Box, __assign({ sx: {
|
|
37
|
+
display: 'inline-flex',
|
|
38
|
+
alignItems: 'center',
|
|
39
|
+
gap: 0.5,
|
|
40
|
+
bgcolor: '#FFF7E6',
|
|
41
|
+
color: '#FA8C16',
|
|
42
|
+
border: '1px solid #FFD591',
|
|
43
|
+
borderRadius: '999px',
|
|
44
|
+
height: 20,
|
|
45
|
+
px: '8px',
|
|
46
|
+
fontSize: 12,
|
|
47
|
+
lineHeight: 1,
|
|
48
|
+
whiteSpace: 'nowrap',
|
|
49
|
+
} }, { children: [_jsxs("svg", __assign({ width: "12", height: "12", viewBox: "0 0 24 24", fill: "none" }, { children: [_jsx("path", { d: "M12 3 1.5 21h21L12 3Z", fill: "#FA8C16" }), _jsx("rect", { x: "11", y: "9", width: "2", height: "5", rx: "1", fill: "#fff" }), _jsx("rect", { x: "11", y: "15.5", width: "2", height: "2", rx: "1", fill: "#fff" })] })), name] })));
|
|
50
|
+
};
|
|
51
|
+
// 表格里的风险评估徽标
|
|
52
|
+
var RiskBadge = function (_a) {
|
|
53
|
+
var has = _a.has;
|
|
54
|
+
return (_jsx(Box, __assign({ sx: __assign({ display: 'inline-flex', alignItems: 'center', px: 1, py: 0.25, borderRadius: '999px', fontSize: 12, fontWeight: 500, whiteSpace: 'nowrap' }, (has
|
|
55
|
+
? { color: '#FA8C16', bgcolor: '#FFF7E6', border: '1px solid #FFD591' }
|
|
56
|
+
: { color: '#52C41A', bgcolor: '#EAFBEA', border: '1px solid #B7EB8F' })) }, { children: has ? '有风险' : '无风险' })));
|
|
57
|
+
};
|
|
58
|
+
// 作弊检测详情表(不带头标题行,仅表格)
|
|
59
|
+
var COL_W1 = 118; // 检测项目列宽
|
|
60
|
+
var COL_W2 = 130; // 风险评估列宽
|
|
61
|
+
var TEXT_COLOR = 'rgba(0,0,0,0.85)'; // 表格文字:比 0.6 深、不纯黑
|
|
62
|
+
var CheatDetailTable = function (_a) {
|
|
63
|
+
var hitNames = _a.hitNames;
|
|
64
|
+
return (_jsxs(Box, __assign({ sx: { mt: 2, borderRadius: 2, overflow: 'hidden', border: '1px solid rgba(0,191,255,0.05)', bgcolor: '#fff' } }, { children: [_jsxs(Stack, __assign({ direction: "row", sx: { background: 'rgba(0,191,255,0.04)', px: 1.5, py: 0.75, alignItems: 'center' } }, { children: [_jsx(Typography, __assign({ sx: { width: COL_W1, flexShrink: 0, textAlign: 'center', color: TEXT_COLOR, fontSize: 12, fontWeight: 600 } }, { children: "\u68C0\u6D4B\u9879\u76EE" })), _jsx(Typography, __assign({ sx: { width: COL_W2, flexShrink: 0, textAlign: 'center', color: TEXT_COLOR, fontSize: 12, fontWeight: 600 } }, { children: "\u98CE\u9669\u8BC4\u4F30" })), _jsx(Typography, __assign({ sx: { flex: 1, textAlign: 'center', color: TEXT_COLOR, fontSize: 12, fontWeight: 600 } }, { children: "\u8BE6\u60C5\u8BF4\u660E" }))] })), CHEAT_ROWS.map(function (row, i) {
|
|
65
|
+
var hit = hitNames.has(row.name);
|
|
66
|
+
return (_jsxs(Stack, __assign({ direction: "row", sx: {
|
|
67
|
+
px: 1.5,
|
|
68
|
+
py: 0.75,
|
|
69
|
+
alignItems: 'center',
|
|
70
|
+
borderTop: '1px solid #F2F4F6',
|
|
71
|
+
bgcolor: i % 2 ? '#FAFCFE' : '#fff',
|
|
72
|
+
} }, { children: [_jsx(Typography, __assign({ sx: { width: COL_W1, flexShrink: 0, textAlign: 'center', color: TEXT_COLOR, fontSize: 12 } }, { children: row.name })), _jsx(Box, __assign({ sx: { width: COL_W2, flexShrink: 0, display: 'flex', justifyContent: 'center' } }, { children: _jsx(RiskBadge, { has: hit }) })), _jsx(Typography, __assign({ sx: { flex: 1, textAlign: 'center', color: TEXT_COLOR, fontSize: 12, lineHeight: '20px' } }, { children: hit ? row.detail : '暂无风险' }))] }), row.name));
|
|
73
|
+
})] })));
|
|
74
|
+
};
|
|
33
75
|
var CheatRisk = function () {
|
|
34
|
-
var _a
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
76
|
+
var _a;
|
|
77
|
+
var store = useAiReportStore();
|
|
78
|
+
var v3AssetBase = store.v3AssetBase || '';
|
|
79
|
+
var reportResult = store.reportResult || {};
|
|
80
|
+
var interviewCheat = store.interviewCheat;
|
|
81
|
+
var _b = reportResult.screenSwitchCount, screenSwitchCount = _b === void 0 ? 0 : _b, _c = reportResult.candidateInfo, candidateInfo = _c === void 0 ? {} : _c, _d = reportResult.tags, reportTags = _d === void 0 ? [] : _d;
|
|
82
|
+
// 与报告头部同源取标签:候选人信息卡标签优先,兜底报告级标签
|
|
83
|
+
var tagList = ((_a = candidateInfo === null || candidateInfo === void 0 ? void 0 : candidateInfo.tags) === null || _a === void 0 ? void 0 : _a.length) ? candidateInfo.tags : reportTags;
|
|
84
|
+
var hitNames = new Set((tagList || []).map(function (t) { return t === null || t === void 0 ? void 0 : t.name; }).filter(function (n) { return Boolean(n); }));
|
|
85
|
+
var riskTags = (tagList || []).filter(function (t) { return RISK_TAG_NAMES.includes(t === null || t === void 0 ? void 0 : t.name); });
|
|
86
|
+
// 命中风险标签 或 旧字段(isCheat/切屏次数) 均视为有风险
|
|
87
|
+
var hasRisk = riskTags.length > 0 || !!(interviewCheat === null || interviewCheat === void 0 ? void 0 : interviewCheat.isCheat) || screenSwitchCount > 0;
|
|
88
|
+
var fallbackInfo = (interviewCheat === null || interviewCheat === void 0 ? void 0 : interviewCheat.info) || '面试过程中可能存在作弊行为,请结合面试视频核对。';
|
|
89
|
+
return (_jsxs(Box, __assign({ id: "report-risk", px: 2, mt: 3 }, { children: [_jsx(Box, __assign({ sx: { display: 'flex', alignItems: 'center' } }, { children: v3AssetBase && _jsx("img", { src: "".concat(v3AssetBase, "/risk_title.png"), alt: "\u4F5C\u5F0A\u98CE\u9669", width: 94, height: 28, style: { flexShrink: 0 } }) })), hasRisk ? (_jsxs(_Fragment, { children: [_jsx(Box, __assign({ sx: { bgcolor: 'rgba(0,191,255,0.03)', borderRadius: 2, p: 2, mt: 2 } }, { children: riskTags.length > 0 ? (_jsxs(Stack, __assign({ direction: "row", alignItems: "center", flexWrap: "wrap", gap: 1 }, { children: [_jsx(Typography, __assign({ sx: { color: '#1890FF', fontSize: 14, fontWeight: 600 } }, { children: "\u9762\u8BD5\u8FC7\u7A0B\u98CE\u9669" })), riskTags.map(function (t) { return (_jsx(RiskPill, { name: t.name }, t.token || t.name)); })] }))) : (_jsx(Typography, __assign({ sx: { color: 'rgba(0,0,0,0.6)', fontSize: 14 } }, { children: fallbackInfo }))) })), _jsx(CheatDetailTable, { hitNames: hitNames })] })) : (
|
|
90
|
+
/* 无风险(蓝湖「AI面试报告 v16」定义):作弊风险评估 + 无风险(不显示表格) */
|
|
91
|
+
_jsxs(Box, __assign({ sx: { bgcolor: '#F0F8FB', borderRadius: 2, p: 2, mt: 2 } }, { children: [_jsxs(Typography, __assign({ sx: { color: '#1890FF', fontSize: 14, fontWeight: 600 } }, { children: ["\u4F5C\u5F0A\u98CE\u9669\u8BC4\u4F30\uFF1A", _jsx("span", __assign({ style: { color: '#52C41A', fontWeight: 600 } }, { children: "\u65E0\u98CE\u9669" }))] })), _jsx(Typography, __assign({ sx: { color: 'rgba(0,0,0,0.6)', fontSize: 14, mt: 1 } }, { children: "\u672A\u53D1\u73B0\u660E\u786E\u4F5C\u5F0A\u98CE\u9669\uFF0C\u8BF7\u7ED3\u5408\u9762\u8BD5\u89C6\u9891\u7EE7\u7EED\u6838\u5BF9\u3002" }))] })))] })));
|
|
41
92
|
};
|
|
42
93
|
export default CheatRisk;
|
|
@@ -59,7 +59,7 @@ var template = (_a = {},
|
|
|
59
59
|
_a);
|
|
60
60
|
var Form = function (_a) {
|
|
61
61
|
var answers = _a.answers, _b = _a.customProcessName, customProcessName = _b === void 0 ? '资料收集' : _b;
|
|
62
|
-
return (_jsxs(Box, __assign({ px: 2, mt: 3 }, { children: [_jsx(ModuleTitle, { title: customProcessName }), _jsxs(Box, __assign({ mt: 1.5, border: "1px solid #E7F4EC", borderRadius: 2, overflow: "hidden" }, { children: [_jsxs(Stack, __assign({ direction: "row", sx: { background: '#EBFCF7' } }, { children: [_jsx(Box, __assign({ width: 52, flexShrink: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u5E8F\u53F7" })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u9898\u76EE" })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u56DE\u7B54" })) }))] })), answers === null || answers === void 0 ? void 0 : answers.map(function (answer, index) {
|
|
62
|
+
return (_jsxs(Box, __assign({ px: 2, mt: 3 }, { children: [_jsx(ModuleTitle, { title: customProcessName, iconVariant: "person" }), _jsxs(Box, __assign({ mt: 1.5, border: "1px solid #E7F4EC", borderRadius: 2, overflow: "hidden" }, { children: [_jsxs(Stack, __assign({ direction: "row", sx: { background: '#EBFCF7' } }, { children: [_jsx(Box, __assign({ width: 52, flexShrink: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u5E8F\u53F7" })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u9898\u76EE" })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, py: 1, px: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", fontWeight: 700, sx: { color: '#00996B', fontSize: 14, lineHeight: '22px' } }, { children: "\u56DE\u7B54" })) }))] })), answers === null || answers === void 0 ? void 0 : answers.map(function (answer, index) {
|
|
63
63
|
var _a;
|
|
64
64
|
return (_jsxs(Stack, __assign({ direction: "row", borderTop: "1px solid #F0F6F2" }, { children: [_jsx(Box, __assign({ width: 52, flexShrink: 0, p: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", sx: { color: 'rgba(0,0,0,0.6)', fontSize: 14 } }, { children: index + 1 })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, p: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", sx: { color: 'rgba(0,0,0,0.6)', fontSize: 14 } }, { children: answer.formTypeKey })) })), _jsx(Box, __assign({ flex: 1, minWidth: 0, p: 1.5 }, { children: _jsx(Typography, __assign({ variant: "body2", sx: { color: 'rgba(0,0,0,0.6)', fontSize: 14 } }, { children: (_a = template[answer.formTypeId]) === null || _a === void 0 ? void 0 : _a.call(template, answer) })) }))] }), index));
|
|
65
65
|
})] }))] })));
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare const ModuleTitle: ({ title, action }: {
|
|
2
|
+
export declare const ModuleTitle: ({ title, action, icon, iconVariant, }: {
|
|
3
3
|
title: React.ReactNode;
|
|
4
4
|
action?: React.ReactNode;
|
|
5
|
+
icon?: string | undefined;
|
|
6
|
+
iconVariant?: "doc" | "person" | "shield" | undefined;
|
|
5
7
|
}) => JSX.Element;
|
|
@@ -12,13 +12,24 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { Box, Typography } from 'fbm-ui';
|
|
14
14
|
import { Stack } from 'fbm-ui/lib/mui';
|
|
15
|
+
// 章节标题:绿色圆角图标盒(设计稿切片 icon 或默认绿色盒) + 加粗标题
|
|
16
|
+
// 设计稿章节头 = 绿色圆角方块图标 + 深色加粗标题,无下划线(避免牛客风)
|
|
15
17
|
export var ModuleTitle = function (_a) {
|
|
16
|
-
var title = _a.title, action = _a.action;
|
|
17
|
-
return (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
var title = _a.title, action = _a.action, icon = _a.icon, iconVariant = _a.iconVariant;
|
|
19
|
+
return (_jsx(Box, { children: _jsxs(Box, __assign({ sx: { position: 'relative' } }, { children: [_jsxs(Stack, __assign({ direction: "row", alignItems: "center", spacing: 1 }, { children: [icon ? (_jsx("img", { src: icon, alt: "", width: 24, height: 24, style: { flexShrink: 0 } })) : (_jsx(Box, __assign({ sx: {
|
|
20
|
+
width: 26,
|
|
21
|
+
height: 26,
|
|
22
|
+
borderRadius: '7px',
|
|
23
|
+
flexShrink: 0,
|
|
24
|
+
background: 'linear-gradient(158deg, #5EE2B8 2.38%, #41C446 97.38%)',
|
|
25
|
+
display: 'flex',
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
justifyContent: 'center',
|
|
28
|
+
} }, { children: iconVariant === 'person' ? (
|
|
29
|
+
// 资料收集:人形剪影
|
|
30
|
+
_jsxs("svg", __assign({ width: "16", height: "16", viewBox: "0 0 24 24", fill: "none" }, { children: [_jsx("circle", { cx: "12", cy: "8", r: "3.6", fill: "#fff" }), _jsx("path", { d: "M4 20c.8-4 4-6 8-6s7.2 2 8 6", stroke: "#fff", strokeWidth: "2", strokeLinecap: "round" })] }))) : iconVariant === 'shield' ? (
|
|
31
|
+
// 作弊风险:盾牌 + 感叹号
|
|
32
|
+
_jsxs("svg", __assign({ width: "16", height: "16", viewBox: "0 0 24 24", fill: "none" }, { children: [_jsx("path", { d: "M12 2.5 5 5v6c0 4.5 3 8 7 9.5 4-1.5 7-5 7-9.5V5l-7-2.5Z", fill: "#fff" }), _jsx("rect", { x: "11", y: "6.6", width: "2", height: "5.4", rx: "1", fill: "#41C446" }), _jsx("rect", { x: "11", y: "13.6", width: "2", height: "2.4", rx: "1", fill: "#41C446" })] }))) : (
|
|
33
|
+
// 默认/面试详情:文档 + 双横线
|
|
34
|
+
_jsxs("svg", __assign({ width: "16", height: "16", viewBox: "0 0 24 24", fill: "none" }, { children: [_jsx("rect", { x: "5", y: "3", width: "14", height: "18", rx: "2.5", fill: "#fff" }), _jsx("rect", { x: "8.5", y: "7", width: "7", height: "1.8", rx: "0.9", fill: "#41C446" }), _jsx("rect", { x: "8.5", y: "11", width: "7", height: "1.8", rx: "0.9", fill: "#41C446" }), _jsx("rect", { x: "8.5", y: "15", width: "4.5", height: "1.8", rx: "0.9", fill: "#41C446" })] }))) }))), _jsx(Typography, __assign({ fontWeight: 700, sx: { color: 'rgba(0,0,0,0.86)', fontSize: 18, lineHeight: '24px' } }, { children: title }))] })), action && _jsx(Box, __assign({ sx: { position: 'absolute', top: 0, right: 0 } }, { children: action }))] })) }));
|
|
24
35
|
};
|