feat: 添加排行榜分数编辑和题目详情展示功能
- 在排行榜详情页中,添加队伍题目分数编辑功能,支持批量保存 - 新增打字机组件用于题目答案的动态展示 - 优化游戏页面的答题数量统计逻辑,使用 UserAnswerFont 解析 - 更新题目导入工具,支持更多 JSON 格式 - 调整游戏倒计时逻辑,优先使用题目详情中的时间 - 移除排行榜中的部分冗余列,优化界面显示
This commit is contained in:
@ -52,6 +52,7 @@
|
||||
"pinyin-pro": "^3.28.0",
|
||||
"quill-toolbar-tip": "^0.1.0",
|
||||
"tailwind-merge": "3.4.0",
|
||||
"typeit": "^8.8.7",
|
||||
"v-scale-screen": "^2.3.0",
|
||||
"vue": "3.5.26",
|
||||
"vue-draggable-plus": "0.6.0",
|
||||
|
||||
45
apps/admin/src/components/custom/typeit/index.vue
Normal file
45
apps/admin/src/components/custom/typeit/index.vue
Normal file
@ -0,0 +1,45 @@
|
||||
<script lang="ts" setup>
|
||||
import type { Options } from 'typeit'
|
||||
import type { El } from 'typeit/dist/types'
|
||||
import TypeIt from 'typeit'
|
||||
import { onMounted, shallowRef } from 'vue'
|
||||
|
||||
const textRef = shallowRef<El>()
|
||||
|
||||
function init() {
|
||||
if (!textRef.value)
|
||||
return
|
||||
|
||||
const options: Options = {
|
||||
strings: 'SoybeanAdmin是一个清新优雅、高颜值且功能强大的后台管理模板',
|
||||
lifeLike: true,
|
||||
speed: 120,
|
||||
loop: true,
|
||||
}
|
||||
|
||||
const initTypeIt = new TypeIt(textRef.value, options)
|
||||
|
||||
initTypeIt.go()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<NCard title="打字机 插件" :bordered="false" class="h-full card-wrapper">
|
||||
<NSpace :vertical="true">
|
||||
<GithubLink link="https://github.com/alexmacarthur/typeit" />
|
||||
<WebSiteLink label="文档地址:" link="https://www.typeitjs.com/docs/vanilla/usage/" />
|
||||
</NSpace>
|
||||
<NDivider title-placement="left">
|
||||
基本示例
|
||||
</NDivider>
|
||||
<span ref="textRef" class="text-18px" />
|
||||
</NCard>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
@ -95,3 +95,11 @@ export function fetchGetCurrentQuestionByRoomID(RoomID: number) {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/** 根据QuestionDetaiID查询题目详情 */
|
||||
export function fetchGetQuestionDetailByID(QuestionDetailID: number) {
|
||||
return request<App.Service.Response<Api.Competition.QuestionListDetailRound>>({
|
||||
url: `/Base/ActivityMain/GetQuestionListDetailByID/?QuestionID=${QuestionDetailID}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,10 +1,25 @@
|
||||
import { request } from '../request'
|
||||
|
||||
/** get user list */
|
||||
export function fetchRankList(data?: Api.Rank.UserSearchParams) {
|
||||
export function fetchRankList(MainID: number, RoundType = 0) {
|
||||
return request<Api.Rank.CommonRecord>({
|
||||
url: '/admin/v1/class/pagelist',
|
||||
method: 'post',
|
||||
data: data || {},
|
||||
url: `/Base/ActivityMain/GetTeamsTotal/list?MainID=${MainID}&RoundType=${RoundType}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/** 获取队伍排名详情 */
|
||||
export function fetchRankDetail(MainID: number, RoundType = 0) {
|
||||
return request<Api.Rank.CommonRecord>({
|
||||
url: `/Base/ActivityMain/GetTeamsTotal?MainID=${MainID}&RoundType=${RoundType}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/** 根据队伍 id获取具体的题目分数 */
|
||||
export function fetchTeamQuestionScore(TeamID: number) {
|
||||
return request<Api.Rank.CommonRecord>({
|
||||
url: `/Base/ActivityMain/GetTeamQuestionUseByTeamID?TeamID=${TeamID}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
@ -10,19 +10,10 @@ export function updateCurrentQuestionUse(TeamGroupID: number) {
|
||||
}
|
||||
|
||||
/** 评委对其进行打分 */
|
||||
export function updateScore(Id: number, ResultPotins: number) {
|
||||
export function updateScore(data: { Id: number, ResultPotins: number, QuestionDetailID: number, QuestionId: number }[]) {
|
||||
return request<App.Service.Response>({
|
||||
url: `/Base/ActivityMain/UpdateTeamQuestionUseOne?Id=${Id}&ResultPotins=${ResultPotins}`,
|
||||
url: `/Base/ActivityMain/UpdateTeamQuestionResultList`,
|
||||
method: 'post',
|
||||
data: { Id, ResultPotins },
|
||||
})
|
||||
}
|
||||
|
||||
/** 评委更新状态 (Correct/Wrong) */
|
||||
export function updateScoreStatus(Id: number, Status: number) {
|
||||
return request<App.Service.Response>({
|
||||
url: `/Base/ActivityMain/UpdateTeamQuestionUseOneStatus?Id=${Id}&Status=${Status}`,
|
||||
method: 'post',
|
||||
data: { Id, Status },
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
8
apps/admin/src/typings/api/Competition.d.ts
vendored
8
apps/admin/src/typings/api/Competition.d.ts
vendored
@ -105,6 +105,7 @@ declare namespace Api {
|
||||
IsGood: number
|
||||
Image: string
|
||||
ImageUrl: string
|
||||
Answer: string
|
||||
}
|
||||
|
||||
/** get current question params */
|
||||
@ -203,6 +204,7 @@ declare namespace Api {
|
||||
Point: number
|
||||
/** 题目详情 id */
|
||||
QuestionDetailID: number
|
||||
QuestionDetaiID: number
|
||||
/** 题目 id */
|
||||
QuestionID: number
|
||||
/** 题目规则 */
|
||||
@ -219,6 +221,8 @@ declare namespace Api {
|
||||
TeamList: any[]
|
||||
/** 宽度 */
|
||||
Width: number
|
||||
ActivityID: number
|
||||
Answer: string
|
||||
}
|
||||
|
||||
/** update room request */
|
||||
@ -299,6 +303,10 @@ declare namespace Api {
|
||||
Points: number
|
||||
ResultPotins: number
|
||||
Status: number
|
||||
// 兼容字段(用于兜底)
|
||||
AnswerValuePicture?: string
|
||||
Guid?: string
|
||||
QuestionDetaiID: number | null
|
||||
}
|
||||
|
||||
interface QuestionListRecord {
|
||||
|
||||
6
apps/admin/src/typings/components.d.ts
vendored
6
apps/admin/src/typings/components.d.ts
vendored
@ -28,6 +28,7 @@ declare module 'vue' {
|
||||
'IconIc:baselineArrowRightAlt': typeof import('~icons/ic/baseline-arrow-right-alt')['default']
|
||||
'IconIc:baselineDeleteForever': typeof import('~icons/ic/baseline-delete-forever')['default']
|
||||
'IconIc:roundPublish': typeof import('~icons/ic/round-publish')['default']
|
||||
'IconIc:twotoneRule': typeof import('~icons/ic/twotone-rule')['default']
|
||||
IconIcBaselineAdd: typeof import('~icons/ic/baseline-add')['default']
|
||||
IconIcBaselineAddPlus: typeof import('~icons/ic/baseline-add-plus')['default']
|
||||
IconIcBaselineArrowBack: typeof import('~icons/ic/baseline-arrow-back')['default']
|
||||
@ -48,6 +49,7 @@ declare module 'vue' {
|
||||
IconIcBaselineSettingsBackupRestore: typeof import('~icons/ic/baseline-settings-backup-restore')['default']
|
||||
IconIcBaselineUpload: typeof import('~icons/ic/baseline-upload')['default']
|
||||
IconIcBaselineUploadFile: typeof import('~icons/ic/baseline-upload-file')['default']
|
||||
IconIcCarbonUserAvatarFilledAlt: typeof import('~icons/ic/carbon-user-avatar-filled-alt')['default']
|
||||
IconIcOutlineAccessTime: typeof import('~icons/ic/outline-access-time')['default']
|
||||
IconIcOutlineAddToPhotos: typeof import('~icons/ic/outline-add-to-photos')['default']
|
||||
IconIcOutlineArchive: typeof import('~icons/ic/outline-archive')['default']
|
||||
@ -174,6 +176,7 @@ declare module 'vue' {
|
||||
TableHeaderOperation: typeof import('./../components/advanced/table-header-operation.vue')['default']
|
||||
ThemeSchemaSwitch: typeof import('./../components/common/theme-schema-switch.vue')['default']
|
||||
TianZiGe: typeof import('./../components/custom/user/TianZiGe.vue')['default']
|
||||
Typeit: typeof import('./../components/custom/typeit/index.vue')['default']
|
||||
UpFileDialog: typeof import('./../components/common/rest-basic-editor/components/up-file-dialog.vue')['default']
|
||||
WangEditor: typeof import('./../components/common/wang-editor.vue')['default']
|
||||
WaveBg: typeof import('./../components/custom/wave-bg.vue')['default']
|
||||
@ -198,6 +201,7 @@ declare global {
|
||||
const 'IconIc:baselineArrowRightAlt': typeof import('~icons/ic/baseline-arrow-right-alt')['default']
|
||||
const 'IconIc:baselineDeleteForever': typeof import('~icons/ic/baseline-delete-forever')['default']
|
||||
const 'IconIc:roundPublish': typeof import('~icons/ic/round-publish')['default']
|
||||
const 'IconIc:twotoneRule': typeof import('~icons/ic/twotone-rule')['default']
|
||||
const IconIcBaselineAdd: typeof import('~icons/ic/baseline-add')['default']
|
||||
const IconIcBaselineAddPlus: typeof import('~icons/ic/baseline-add-plus')['default']
|
||||
const IconIcBaselineArrowBack: typeof import('~icons/ic/baseline-arrow-back')['default']
|
||||
@ -218,6 +222,7 @@ declare global {
|
||||
const IconIcBaselineSettingsBackupRestore: typeof import('~icons/ic/baseline-settings-backup-restore')['default']
|
||||
const IconIcBaselineUpload: typeof import('~icons/ic/baseline-upload')['default']
|
||||
const IconIcBaselineUploadFile: typeof import('~icons/ic/baseline-upload-file')['default']
|
||||
const IconIcCarbonUserAvatarFilledAlt: typeof import('~icons/ic/carbon-user-avatar-filled-alt')['default']
|
||||
const IconIcOutlineAccessTime: typeof import('~icons/ic/outline-access-time')['default']
|
||||
const IconIcOutlineAddToPhotos: typeof import('~icons/ic/outline-add-to-photos')['default']
|
||||
const IconIcOutlineArchive: typeof import('~icons/ic/outline-archive')['default']
|
||||
@ -344,6 +349,7 @@ declare global {
|
||||
const TableHeaderOperation: typeof import('./../components/advanced/table-header-operation.vue')['default']
|
||||
const ThemeSchemaSwitch: typeof import('./../components/common/theme-schema-switch.vue')['default']
|
||||
const TianZiGe: typeof import('./../components/custom/user/TianZiGe.vue')['default']
|
||||
const Typeit: typeof import('./../components/custom/typeit/index.vue')['default']
|
||||
const UpFileDialog: typeof import('./../components/common/rest-basic-editor/components/up-file-dialog.vue')['default']
|
||||
const WangEditor: typeof import('./../components/common/wang-editor.vue')['default']
|
||||
const WaveBg: typeof import('./../components/custom/wave-bg.vue')['default']
|
||||
|
||||
@ -61,7 +61,7 @@ watch(() => props.visible, (val) => {
|
||||
const columns: DataTableColumns<any> = [
|
||||
{ title: 'ID', key: 'ID', width: 80 },
|
||||
{ title: '键 (Key)', key: 'UI_Key' },
|
||||
{ title: '值 (Value)', key: 'UI_Value' },
|
||||
{ title: '值 (Value)', key: 'UI_Value', width: 100 },
|
||||
{ title: '备注', key: 'BakValue' },
|
||||
{
|
||||
title: '操作',
|
||||
|
||||
@ -1,14 +1,22 @@
|
||||
<script setup lang="tsx">
|
||||
import { NCard, NDivider } from 'naive-ui'
|
||||
import { ref } from 'vue'
|
||||
import { NCard, NDivider, useMessage } from 'naive-ui'
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { fetchRankDetail, fetchTeamQuestionScore } from '@/service/api/rank'
|
||||
import { updateScore as updateScoreApi } from '@/service/api/result'
|
||||
import RankHeader from './modules/rank-header.vue'
|
||||
import TeamItem from './modules/team-item.vue'
|
||||
|
||||
import TeamListHeader from './modules/team-list-header.vue'
|
||||
|
||||
const competitionInfo = {
|
||||
const route = useRoute()
|
||||
const message = useMessage()
|
||||
const activityId = route.query.activityId as string
|
||||
|
||||
const competitionInfo = ref({
|
||||
name: '阅读之星-辞海遨游环节 (2026)',
|
||||
date: '2026.01.12',
|
||||
}
|
||||
})
|
||||
|
||||
interface TeamData {
|
||||
id: number
|
||||
@ -19,88 +27,138 @@ interface TeamData {
|
||||
totalScore: number
|
||||
updateTime: string
|
||||
isExpanded: boolean
|
||||
scores: Record<string, number>
|
||||
scores: Record<string, { score: number, questionId: number, teamQuestionUseId: number, questionDetailId: number }>
|
||||
}
|
||||
|
||||
const teamList = ref<TeamData[]>([
|
||||
{
|
||||
id: 1,
|
||||
rank: 1,
|
||||
name: '清华学霸团',
|
||||
group: '第一组',
|
||||
correctCount: '15 / 15',
|
||||
totalScore: 150,
|
||||
updateTime: '2026-01-22 16:28:55',
|
||||
isExpanded: true,
|
||||
scores: {
|
||||
q1: 10,
|
||||
q2: 10,
|
||||
q3: 10,
|
||||
q4: 10,
|
||||
q5: 10,
|
||||
q6: 10,
|
||||
q7: 10,
|
||||
q8: 5,
|
||||
q9: 10,
|
||||
q10: 10,
|
||||
q11: 15,
|
||||
q12: 10,
|
||||
q13: 15,
|
||||
q14: 10,
|
||||
q15: 5,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
rank: 2,
|
||||
name: '无敌先锋队',
|
||||
group: '第一组',
|
||||
correctCount: '13 / 15',
|
||||
totalScore: 145,
|
||||
updateTime: '2026-01-22 16:30:12',
|
||||
isExpanded: false,
|
||||
scores: {},
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
rank: 3,
|
||||
name: '明日之星社',
|
||||
group: '第二组',
|
||||
correctCount: '13 / 15',
|
||||
totalScore: 130,
|
||||
updateTime: '2026-01-22 16:25:22',
|
||||
isExpanded: false,
|
||||
scores: {},
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
rank: 4,
|
||||
name: '火箭竞技团',
|
||||
group: '第一组',
|
||||
correctCount: '13 / 15',
|
||||
totalScore: 125,
|
||||
updateTime: '2026-01-22 16:22:10',
|
||||
isExpanded: false,
|
||||
scores: {},
|
||||
},
|
||||
])
|
||||
const teamList = ref<TeamData[]>([])
|
||||
|
||||
function toggleExpand(team: TeamData) {
|
||||
// Collapse others if needed, or allow multiple. Screenshot shows one.
|
||||
// Let's toggle.
|
||||
team.isExpanded = !team.isExpanded
|
||||
|
||||
// If expanding, maybe populate scores if empty (mock logic)
|
||||
if (team.isExpanded && Object.keys(team.scores).length === 0) {
|
||||
for (let i = 1; i <= 15; i++) {
|
||||
team.scores[`q${i}`] = 10
|
||||
/** 获取排行榜详情 */
|
||||
async function getRankDetail() {
|
||||
if (!activityId)
|
||||
return
|
||||
try {
|
||||
const { data, error } = await fetchRankDetail(Number(activityId))
|
||||
if (error) {
|
||||
message.error(error.message)
|
||||
return
|
||||
}
|
||||
// 假设后端返回的数据结构需要映射
|
||||
teamList.value = (data?.data || []).map((item: any, index: number) => ({
|
||||
id: item.TeamID,
|
||||
rank: index + 1,
|
||||
name: item.Name,
|
||||
group: '默认组', // 接口没有组名,暂时用默认
|
||||
correctCount: '0 / 0',
|
||||
totalScore: item.Point || 0,
|
||||
updateTime: new Date().toLocaleString(), // 暂时用当前时间
|
||||
isExpanded: false,
|
||||
scores: {},
|
||||
}))
|
||||
}
|
||||
catch (err: any) {
|
||||
message.error(err.message || '获取排行榜详情失败')
|
||||
}
|
||||
}
|
||||
|
||||
function saveScores(team: TeamData) {
|
||||
window.$message?.success(`已保存 ${team.name} 的分数变动`)
|
||||
team.isExpanded = false
|
||||
/** 获取队伍具体的题目分数 */
|
||||
async function getTeamQuestionScore(team: TeamData) {
|
||||
try {
|
||||
const { data, error } = await fetchTeamQuestionScore(team.id)
|
||||
|
||||
if (error) {
|
||||
message.error(error.message)
|
||||
return
|
||||
}
|
||||
|
||||
// 映射接口数据到 scores
|
||||
// 接口返回的是一个数组,每个元素对应一个题目
|
||||
// 我们使用 QuestionId 或者 index 作为 key
|
||||
const scores: Record<string, { score: number, questionId: number, teamQuestionUseId: number, questionDetailId: number }> = {}
|
||||
let totalScore = 0
|
||||
let correctCount = 0
|
||||
let questionCount = 0
|
||||
|
||||
const list = data?.data || []
|
||||
|
||||
list.forEach((item: any, index: number) => {
|
||||
// 使用 q + (index + 1) 作为 key,例如 q1, q2...
|
||||
const key = `q${index + 1}`
|
||||
// ResultPotins 是最终得分
|
||||
const score = item.ResultPotins || 0
|
||||
scores[key] = {
|
||||
score,
|
||||
questionId: item.QuestionId || 0,
|
||||
teamQuestionUseId: item.Id || 0, // 使用接口返回的 Id 作为 TeamQuestionUseID
|
||||
questionDetailId: item.QuestionDetaiID || 0, // 注意后端字段拼写 QuestionDetaiID
|
||||
}
|
||||
totalScore += score
|
||||
|
||||
// 统计正确数:如果分数 > 0 视为正确,或者根据 Status 判断
|
||||
// 这里暂时以分数 > 0 为准,或者 ResultPotins === Points (满分)
|
||||
// 根据示例数据,Points是题目分值,ResultPotins是得分。
|
||||
// 只要得分 > 0 就算对?或者得分 == Points?
|
||||
// 简单起见,得分 > 0 算对
|
||||
if (score > 0) {
|
||||
correctCount++
|
||||
}
|
||||
questionCount++
|
||||
})
|
||||
|
||||
team.scores = scores
|
||||
team.totalScore = totalScore
|
||||
team.correctCount = `${correctCount} / ${questionCount}`
|
||||
}
|
||||
catch (err: any) {
|
||||
message.error(err.message || '获取队伍题目分数失败')
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getRankDetail()
|
||||
})
|
||||
|
||||
async function toggleExpand(team: TeamData) {
|
||||
team.isExpanded = !team.isExpanded
|
||||
|
||||
if (team.isExpanded && Object.keys(team.scores).length === 0) {
|
||||
await getTeamQuestionScore(team)
|
||||
}
|
||||
}
|
||||
|
||||
async function saveScores(team: TeamData) {
|
||||
// window.$message?.success(`已保存 ${team.name} 的分数变动`)
|
||||
// console.log(team.scores, 'team.scores');
|
||||
|
||||
// 构建提交数据
|
||||
// 我们只提交有 teamQuestionUseId 的分数
|
||||
// 假设所有分数都需要提交,或者可以只提交变化的分数(如果能追踪变化)
|
||||
// 这里简单起见,提交该队伍所有题目的当前分数
|
||||
const scoreList = Object.values(team.scores)
|
||||
.filter(item => item.teamQuestionUseId)
|
||||
.map(item => ({
|
||||
Id: item.teamQuestionUseId,
|
||||
ResultPotins: item.score,
|
||||
QuestionDetailID: item.questionDetailId,
|
||||
QuestionId: item.questionId,
|
||||
}))
|
||||
|
||||
if (scoreList.length === 0) {
|
||||
message.warning('没有可保存的分数')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const { error } = await updateScoreApi(scoreList)
|
||||
if (error) {
|
||||
message.error(error.message || '保存分数失败')
|
||||
return
|
||||
}
|
||||
message.success(`已保存 ${team.name} 的分数变动`)
|
||||
team.isExpanded = false
|
||||
}
|
||||
catch (e: any) {
|
||||
message.error(e.message || '保存分数失败')
|
||||
}
|
||||
}
|
||||
|
||||
function handlePublish() {
|
||||
@ -109,7 +167,32 @@ function handlePublish() {
|
||||
|
||||
function updateScore(team: TeamData, key: string, value: number | null) {
|
||||
if (value !== null) {
|
||||
team.scores[key] = value
|
||||
if (team.scores[key]) {
|
||||
team.scores[key].score = value
|
||||
}
|
||||
else {
|
||||
// 这是一个新key的情况,应该不太可能发生,但为了类型安全
|
||||
// 这里我们无法得知 questionId,所以暂时设为 0 或者需要修改逻辑传递 questionId
|
||||
// 实际上 updateScore 是由 UI 触发的,UI 遍历的是现有的 keys
|
||||
team.scores[key] = { score: value, questionId: 0, teamQuestionUseId: 0, questionDetailId: 0 }
|
||||
}
|
||||
|
||||
// 重新计算总分和正确题数
|
||||
let totalScore = 0
|
||||
let correctCount = 0
|
||||
const keys = Object.keys(team.scores)
|
||||
const questionCount = keys.length
|
||||
|
||||
keys.forEach((k) => {
|
||||
const s = team.scores[k].score
|
||||
totalScore += s
|
||||
if (s > 0) {
|
||||
correctCount++
|
||||
}
|
||||
})
|
||||
|
||||
team.totalScore = totalScore
|
||||
team.correctCount = `${correctCount} / ${questionCount}`
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -118,11 +201,7 @@ function updateScore(team: TeamData, key: string, value: number | null) {
|
||||
<div class="flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto">
|
||||
<NCard :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden">
|
||||
<!-- Header -->
|
||||
<RankHeader
|
||||
:title="competitionInfo.name"
|
||||
:date="competitionInfo.date"
|
||||
@publish="handlePublish"
|
||||
/>
|
||||
<RankHeader :title="competitionInfo.name" :date="competitionInfo.date" @publish="handlePublish" />
|
||||
|
||||
<NDivider />
|
||||
|
||||
@ -133,12 +212,8 @@ function updateScore(team: TeamData, key: string, value: number | null) {
|
||||
<div class="flex flex-col gap-4">
|
||||
<!-- Data Rows -->
|
||||
<TeamItem
|
||||
v-for="team in teamList"
|
||||
:key="team.id"
|
||||
:team="team"
|
||||
@toggle-expand="toggleExpand"
|
||||
@save-scores="saveScores"
|
||||
@update-score="updateScore"
|
||||
v-for="team in teamList" :key="team.id" :team="team" @toggle-expand="toggleExpand"
|
||||
@save-scores="saveScores" @update-score="updateScore"
|
||||
/>
|
||||
</div>
|
||||
</NCard>
|
||||
|
||||
@ -11,7 +11,7 @@ interface TeamData {
|
||||
totalScore: number
|
||||
updateTime: string
|
||||
isExpanded: boolean
|
||||
scores: Record<string, number>
|
||||
scores: Record<string, { score: number, questionId: number, teamQuestionUseId: number, questionDetailId: number }>
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
@ -59,14 +59,14 @@ const rankStyle = computed(() => {
|
||||
</div>
|
||||
|
||||
<!-- Group -->
|
||||
<div class="text-gray-500">
|
||||
<!-- <div class="text-gray-500">
|
||||
{{ team.group }}
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!-- Correct Count -->
|
||||
<div class="font-bold font-mono">
|
||||
<!-- <div class="font-bold font-mono">
|
||||
{{ team.correctCount }}
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!-- Score -->
|
||||
<div class="text-16px text-primary font-bold">
|
||||
@ -96,16 +96,16 @@ const rankStyle = computed(() => {
|
||||
</div>
|
||||
|
||||
<NGrid :x-gap="16" :y-gap="16" :cols="5">
|
||||
<NGridItem v-for="i in 15" :key="i">
|
||||
<NGridItem v-for="(item, key, index) in team.scores" :key="key">
|
||||
<div class="border rounded bg-white p-3">
|
||||
<div class="mb-2 flex justify-between text-12px text-gray-400">
|
||||
<span>Q{{ i }} SCORE</span>
|
||||
<span>/ 10</span>
|
||||
<span>{{ item.questionId }}-Q{{ index + 1 }} SCORE</span>
|
||||
<span />
|
||||
</div>
|
||||
<NInputNumber
|
||||
:value="team.scores[`q${i}`]" :min="0" :max="10" button-placement="both"
|
||||
:value="item.score" :min="0" :max="10" button-placement="both"
|
||||
class="text-center text-primary font-bold"
|
||||
@update:value="(val) => emit('updateScore', team, `q${i}`, val)"
|
||||
@update:value="(val) => emit('updateScore', team, String(key), val)"
|
||||
/>
|
||||
</div>
|
||||
</NGridItem>
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
<script setup lang="ts">
|
||||
import { NTooltip } from 'naive-ui'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -19,7 +18,7 @@ import { NTooltip } from 'naive-ui'
|
||||
>
|
||||
<div>排名</div>
|
||||
<div>队伍名称</div>
|
||||
<div>所属小组</div>
|
||||
<!-- <div>所属小组</div>
|
||||
<div class="flex items-center">
|
||||
正确题数
|
||||
<NTooltip placement="top" trigger="hover">
|
||||
@ -30,7 +29,7 @@ import { NTooltip } from 'naive-ui'
|
||||
</template>
|
||||
做题数量因加时赛可能有所不同
|
||||
</NTooltip>
|
||||
</div>
|
||||
</div> -->
|
||||
<div>总积分 (Total)</div>
|
||||
<div>更新时间</div>
|
||||
<div class="text-right">
|
||||
|
||||
@ -7,12 +7,15 @@ import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { QuestionCategoryEnum } from '@/enum/business'
|
||||
import { fetchGetQuestionList } from '@/service/api/competition'
|
||||
import { fetchGetCurrentQuestionByRoomID, fetchGetGameStatistics, fetchGetGroupListByActivityID } from '@/service/api/game'
|
||||
import { fetchGetCurrentQuestionByRoomID, fetchGetGameStatistics, fetchGetGroupListByActivityID, fetchGetQuestionDetailByID } from '@/service/api/game'
|
||||
import { updateCurrentQuestionUse, updateScore } from '@/service/api/result'
|
||||
import GroupTabs, { type GroupItem } from './modules/GroupTabs.vue'
|
||||
import Typewriter from './modules/Typewriter.vue'
|
||||
|
||||
// 本地持久化存储手动修改的状态 (key: roomId-questionId-guid)
|
||||
// 本地存储手动修改的状态 (key: roomId-questionId-teamId-guid, value: status)
|
||||
const manualStatusStorage = useStorage<Record<string, number>>('read-star-manual-status', {})
|
||||
// 本地存储手动修改的分数 (key: roomId-questionId-teamId-guid, value: score)
|
||||
const manualScoreStorage = useStorage<Record<string, number>>('read-star-manual-score', {})
|
||||
|
||||
const route = useRoute()
|
||||
const message = useMessage()
|
||||
@ -20,20 +23,39 @@ const activityId = computed(() => route.query?.activityId as string)
|
||||
const roomId = computed(() => route.query?.roomId as string)
|
||||
|
||||
const currentGroupId = ref<number | string>('') // 当前选中的组别 ID
|
||||
const currentQuestionId = ref<number | string>('') // 当前选中的题目 ID
|
||||
const currentQuestionId = ref<number | string>('') // 当前选中的题目大纲 ID
|
||||
const currentQuestionType = ref<string>('') // 当前选中的题目类型
|
||||
|
||||
const groups = ref<GroupItem[]>([])
|
||||
const questionList = ref<(GroupItem & { type: string })[]>([])
|
||||
const currentQuestion = ref<Api.Competition.GetCurrentQuestionInfo>() // 当前正在参赛的题目
|
||||
const questionInfo = ref<Api.Competition.QuestionListDetailRound>() // 题目详情
|
||||
const currentQuestionDetailID = ref<number | string>('') // 当前选中的题目详情 ID
|
||||
|
||||
// 判断当前activityId是正在比赛的活动
|
||||
const isActiveActivityId = computed(() => {
|
||||
if (!currentQuestion.value)
|
||||
return false
|
||||
const qActivityId = (currentQuestion.value as any).MainID || (currentQuestion.value as any).ActivityID
|
||||
return Number(activityId.value) === Number(qActivityId)
|
||||
})
|
||||
|
||||
// 计算当前题目类型对应的布局
|
||||
const currentLayout = computed(() => {
|
||||
// 只有 汉字加一加 (CharacterRadicalAddition) 需要人工评分 (列表布局 - 分屏视图)
|
||||
// 其他所有题型 (汉字听写、诗词、词语听写、成语) 都使用长框展示 (网格布局 - 带切换的大图)
|
||||
if (currentQuestionType.value === QuestionCategoryEnum.CharacterRadicalAddition) {
|
||||
// 修正需求:scoringTypes 包含 CharacterRadicalAddition, IdiomWriting1, ChineseCharacterDictation2
|
||||
// 这些题型使用 'list' 布局,其他使用 'grid'
|
||||
// 补充:当 scoringTypes 为 grid 时候,只有对错和正确,提交给接口分数规则是:如果评委觉得是正确的,就取 currentQuestion 里面的 Point 字段,反之错的就是 0
|
||||
const scoringTypes = [
|
||||
QuestionCategoryEnum.CharacterRadicalAddition,
|
||||
QuestionCategoryEnum.IdiomWriting1,
|
||||
QuestionCategoryEnum.ChineseCharacterDictation2,
|
||||
]
|
||||
if (scoringTypes.includes(currentQuestionType.value as any)) {
|
||||
return 'list'
|
||||
}
|
||||
// 其他题型 (汉字听写、诗词、词语听写、成语看图等) 使用 'grid' 布局 (网格布局 - 带切换的大图)
|
||||
return 'grid'
|
||||
})
|
||||
|
||||
@ -60,11 +82,37 @@ async function setStatus(team: TeamResult, item: any, status: number) {
|
||||
}
|
||||
}
|
||||
|
||||
/** 根据 QuestionDetailID 查询题目详情 */
|
||||
async function fetchQuestionDetail(QuestionDetailID: number) {
|
||||
try {
|
||||
const { data } = await fetchGetQuestionDetailByID(QuestionDetailID)
|
||||
if (data?.data) {
|
||||
questionInfo.value = data.data
|
||||
console.log(questionInfo.value, 'questionInfo')
|
||||
}
|
||||
}
|
||||
catch (error: any) {
|
||||
message.error(error.message || '查询题目详情失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function handleManualScoreUpdate(item: any, newScore: number) {
|
||||
item.Score = newScore
|
||||
item._isManual = true
|
||||
|
||||
// 保存分数到本地存储
|
||||
if (roomId.value && currentQuestionId.value && item.Guid && item.TeamId) {
|
||||
const key = `${roomId.value}-${currentQuestionId.value}-${item.TeamId}-${item.Guid}`
|
||||
manualScoreStorage.value[key] = newScore
|
||||
}
|
||||
|
||||
try {
|
||||
await updateScore(item.TeamQuestionUseID, newScore)
|
||||
await updateScore([{
|
||||
Id: item.TeamQuestionUseID,
|
||||
ResultPotins: newScore,
|
||||
QuestionDetailID: item.QuestionDetailID || 0,
|
||||
QuestionId: item.QuestionId || 0,
|
||||
}])
|
||||
message.success('分数已更新')
|
||||
}
|
||||
catch (e: any) {
|
||||
@ -86,22 +134,46 @@ function handleNext() {
|
||||
|
||||
/**
|
||||
* 根据房间当前题目,自动同步选中题目和当前正在比赛的组
|
||||
* 逻辑:
|
||||
* - 如果后端返回了当前题目的 QuestionID,并且题目列表已加载,则将 currentQuestionId 设为该题
|
||||
* - 同时同步 currentQuestionType,便于切换布局
|
||||
* - 若找不到匹配项,则维持现状(由首次加载保持为第一题)
|
||||
*/
|
||||
function syncCurrentQuestionSelection() {
|
||||
const qid = currentQuestion.value?.QuestionID
|
||||
const gid = currentQuestion.value?.TeamGroupID
|
||||
if (!qid || questionList.value.length === 0)
|
||||
// 1. 如果不是当前正在进行的活动,默认选中第一组第一题
|
||||
if (!isActiveActivityId.value) {
|
||||
console.log('当前活动不是正在进行的活动,默认选中第一组第一题')
|
||||
if (groups.value.length > 0) {
|
||||
currentGroupId.value = groups.value[0].id
|
||||
}
|
||||
if (questionList.value.length > 0) {
|
||||
currentQuestionId.value = questionList.value[0].id
|
||||
currentQuestionType.value = questionList.value[0].type
|
||||
}
|
||||
return
|
||||
const hit = questionList.value.find(q => Number(q.id) === Number(qid))
|
||||
if (gid)
|
||||
}
|
||||
|
||||
// 2. 如果是当前正在进行的活动,同步选中当前正在进行的题目和组
|
||||
const currentQ = currentQuestion.value
|
||||
const qid = currentQ?.QuestionID
|
||||
const gid = currentQ?.TeamGroupID
|
||||
|
||||
// 尝试匹配题目
|
||||
if (qid) {
|
||||
const hit = questionList.value.find(q => Number(q.id) === Number(qid))
|
||||
if (hit) {
|
||||
currentQuestionId.value = hit.id
|
||||
currentQuestionType.value = (hit as any).type || ''
|
||||
}
|
||||
}
|
||||
// 尝试匹配组
|
||||
if (gid) {
|
||||
currentGroupId.value = gid
|
||||
if (hit) {
|
||||
currentQuestionId.value = hit.id
|
||||
currentQuestionType.value = (hit as any).type || ''
|
||||
}
|
||||
|
||||
// 兜底:如果同步失败(例如当前题目不在列表中),默认选中第一个
|
||||
if (!currentQuestionId.value && questionList.value.length > 0) {
|
||||
currentQuestionId.value = questionList.value[0].id
|
||||
currentQuestionType.value = questionList.value[0].type
|
||||
}
|
||||
if (!currentGroupId.value && groups.value.length > 0) {
|
||||
currentGroupId.value = groups.value[0].id
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,7 +266,7 @@ async function fetchCurrentQuestion() {
|
||||
* 获取答题卡数据
|
||||
*/
|
||||
async function fetchAnswerData() {
|
||||
if (!currentGroupId.value || !currentQuestionId.value || !currentQuestion.value?.QuestionDetailID)
|
||||
if (!currentGroupId.value || !currentQuestionId.value)
|
||||
return
|
||||
try {
|
||||
const params = {
|
||||
@ -212,6 +284,20 @@ async function fetchAnswerData() {
|
||||
const result = data?.data || []
|
||||
console.log('接口返回的游戏统计数据:', result)
|
||||
|
||||
// 获取题目详情 ID
|
||||
let detailId = 0
|
||||
// 1. 尝试从答题卡数据中获取当前比赛的题目详情 ID (优先)
|
||||
if (result.length > 0) {
|
||||
const item = result[0]
|
||||
if (item) {
|
||||
detailId = item?.QuestionDetaiID || 0
|
||||
}
|
||||
}
|
||||
// 如果获取到了新的 detailId,更新 currentQuestionDetailID (会触发 watch 调用 fetchQuestionDetail)
|
||||
if (detailId && detailId !== Number(currentQuestionDetailID.value)) {
|
||||
currentQuestionDetailID.value = detailId
|
||||
}
|
||||
|
||||
result.forEach((item) => {
|
||||
const UserAnswerFont = JSON.parse(item.UserAnswerFont)
|
||||
console.log('解析后的 UserAnswerFont:', UserAnswerFont)
|
||||
@ -225,7 +311,8 @@ async function fetchAnswerData() {
|
||||
if (t.Answers) {
|
||||
t.Answers.forEach((a: any) => {
|
||||
if (a.Guid) {
|
||||
oldMap.set(a.Guid, a)
|
||||
// 使用 TeamId + Guid 作为 key,确保唯一性
|
||||
oldMap.set(`${t.TeamId}-${a.Guid}`, a)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -238,52 +325,119 @@ async function fetchAnswerData() {
|
||||
if (answerData.UserAnswerFont) {
|
||||
const parsedFonts = JSON.parse(answerData.UserAnswerFont)
|
||||
parsedAnswers = Array.isArray(parsedFonts) ? parsedFonts : []
|
||||
console.warn('parsed fonts', parsedFonts)
|
||||
// console.warn('parsed fonts', parsedFonts)
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error('解析 UserAnswerFont 失败', e)
|
||||
}
|
||||
// 如果 UserAnswerFont 为空,尝试使用根对象的数据构建答案(适用于选择题等没有切图的题型)
|
||||
if (parsedAnswers.length === 0 && (answerData.UserAnswerPicture || answerData.AnswerValuePicture)) {
|
||||
parsedAnswers = [{
|
||||
Guid: answerData.Guid || `${answerData.QuestionId}-${answerData.TeamId}`,
|
||||
TeamQuestionUseID: answerData.Id, // 确保有 TeamQuestionUseID 用于后续更新分数
|
||||
AnswerText: '查看原图', // 默认提示文案
|
||||
AnswerValuePicture: answerData.AnswerValuePicture || answerData.UserAnswerPicture,
|
||||
Status: answerData.Status,
|
||||
Score: answerData.Points, // 使用根节点的 Points
|
||||
}]
|
||||
}
|
||||
|
||||
// 将新答案与旧的手动编辑合并
|
||||
const mergedAnswers = parsedAnswers.map((ans: any) => {
|
||||
const oldAns = oldMap.get(ans.Guid)
|
||||
// 使用 TeamId + Guid 获取旧状态,确保不同队伍之间不冲突
|
||||
const oldAns = oldMap.get(`${answerData.TeamId}-${ans.Guid}`)
|
||||
|
||||
// 检查本地存储是否有手动修改记录
|
||||
const storageKey = `${roomId.value}-${currentQuestionId.value}-${answerData.TeamId}-${ans.Guid}`
|
||||
const storedStatus = manualStatusStorage.value[storageKey]
|
||||
const storedScore = manualScoreStorage.value[storageKey]
|
||||
const hasStoredStatus = storedStatus !== undefined
|
||||
const hasStoredScore = storedScore !== undefined
|
||||
|
||||
// 记录 AI 的原始推荐值(如果后端返回了)
|
||||
const aiStatus = ans.Status
|
||||
const aiScore = ans.Score
|
||||
// _aiScore 专门用于存储 AI 的推荐分数(优先取外层 Points,如果没有则尝试内层)
|
||||
const aiScore = answerData.Points ?? ans.Score ?? ans.Point
|
||||
|
||||
if ((oldAns && oldAns._isManual) || hasStoredStatus) {
|
||||
// 强制更新图片 URL,防止缓存
|
||||
// 优先使用 ans 中的图片,如果没有则回退到 answerData 中的图片
|
||||
const imageUrl = ans.AnswerValuePicture || (parsedAnswers.length === 1 && parsedAnswers[0] === ans ? answerData.UserAnswerPicture : '')
|
||||
let finalImageUrl = imageUrl
|
||||
let cleanBaseUrl = ''
|
||||
let timestamp = new Date().getTime()
|
||||
|
||||
if (imageUrl) {
|
||||
// 清理 URL 中的反引号、引号和空格
|
||||
cleanBaseUrl = imageUrl.replace(/[`'"]/g, '').trim()
|
||||
|
||||
// 尝试复用旧的时间戳以防止闪烁
|
||||
// 只有当 URL 发生变化,或者 AI 状态/分数发生变化时才更新时间戳
|
||||
// 注意:如果 ans.AnswerValuePicture 发生了变化(即使只是参数变化),cleanBaseUrl 会变
|
||||
if (oldAns && oldAns._baseImgUrl === cleanBaseUrl && oldAns._aiStatus === aiStatus && oldAns._aiScore === aiScore && oldAns._t) {
|
||||
timestamp = oldAns._t
|
||||
}
|
||||
|
||||
// 强制刷新:每次都添加新的时间戳
|
||||
const separator = cleanBaseUrl.includes('?') ? '&' : '?'
|
||||
finalImageUrl = `${cleanBaseUrl}${separator}_t=${timestamp}`
|
||||
}
|
||||
|
||||
// 判断是否手动干预:
|
||||
// 1. 本地存储有状态 (hasStoredStatus) 或有分数 (hasStoredScore)
|
||||
// 2. 内存中有手动标记 (oldAns._isManual)
|
||||
const isManual = hasStoredStatus || hasStoredScore || (oldAns && oldAns._isManual)
|
||||
|
||||
if (isManual) {
|
||||
// 优先使用本地存储的状态,其次是内存中的手动编辑状态
|
||||
const finalStatus = hasStoredStatus ? storedStatus : (oldAns ? oldAns.Status : ans.Status)
|
||||
const finalScore = oldAns ? oldAns.Score : ans.Score // 分数目前只在内存保留,也可以加 localStorage
|
||||
|
||||
return {
|
||||
// 分数逻辑:
|
||||
// 1. 优先使用本地存储的分数 (hasStoredScore)
|
||||
// 2. 其次使用内存中的手动分数 (oldAns.Score)
|
||||
// 3. 如果都没有 (可能是只改了状态没改分数),则默认 null
|
||||
let finalScore: number | null = null
|
||||
if (hasStoredScore) {
|
||||
finalScore = storedScore
|
||||
}
|
||||
else if (oldAns && oldAns.Score !== undefined && oldAns.Score !== null) {
|
||||
finalScore = oldAns.Score
|
||||
}
|
||||
|
||||
// 修正:在返回的对象中注入 TeamId,以便 handleManualScoreUpdate 使用
|
||||
const resultItem = {
|
||||
...ans,
|
||||
TeamId: answerData.TeamId, // [新增] 注入 TeamId
|
||||
QuestionId: answerData.QuestionId, // [新增]
|
||||
QuestionDetailID: answerData.QuestionDetaiID, // [新增] 注意后端字段拼写
|
||||
AnswerText: ans.AnswerText,
|
||||
AnswerValuePicture: finalImageUrl,
|
||||
_baseImgUrl: cleanBaseUrl,
|
||||
_t: timestamp, // 保存时间戳
|
||||
Score: finalScore,
|
||||
Status: finalStatus,
|
||||
_isManual: true,
|
||||
_aiStatus: aiStatus, // 保存 AI 的最新状态供参考
|
||||
_aiStatus: aiStatus,
|
||||
_aiScore: aiScore,
|
||||
}
|
||||
return resultItem
|
||||
}
|
||||
// 如果没有手动编辑,不要自动应用 AI 的状态,保持“未评”状态
|
||||
// 用 _isManual = false 来表示 "未人工介入",此时 Status 仍然跟随 AI (ans.Status),
|
||||
// 但 UI 上会显示 "AI 推荐: Correct/Wrong",而不是 "已人工校准"。
|
||||
// 只有当用户点击后,_isManual = true,才显示 "已人工校准"。
|
||||
// 并且 Status = ans.Status (AI 的值)。
|
||||
|
||||
// 如果没有手动编辑
|
||||
return {
|
||||
...ans,
|
||||
Status: ans.Status, // 默认跟随 AI,但 UI 会标记为 "AI 推荐"
|
||||
TeamId: answerData.TeamId, // [新增] 注入 TeamId
|
||||
QuestionId: answerData.QuestionId, // [新增]
|
||||
QuestionDetailID: answerData.QuestionDetaiID, // [新增] 注意后端字段拼写
|
||||
AnswerText: ans.AnswerText,
|
||||
AnswerValuePicture: finalImageUrl,
|
||||
_baseImgUrl: cleanBaseUrl,
|
||||
_t: timestamp, // 保存时间戳
|
||||
Status: ans.Status,
|
||||
_aiStatus: aiStatus,
|
||||
_aiScore: aiScore,
|
||||
_isManual: false, // 明确标记为非手动
|
||||
Score: null, // 默认 null
|
||||
_isManual: false,
|
||||
}
|
||||
})
|
||||
|
||||
@ -311,6 +465,13 @@ async function fetchAnswerData() {
|
||||
*/
|
||||
async function handleNexCurrentQuestion() {
|
||||
await fetchCurrentQuestion()
|
||||
|
||||
// 校验 ActivityID 是否一致
|
||||
if (!isActiveActivityId.value) {
|
||||
window.$message?.warning('当前房间正在进行的不是本场活动,无法跳转到当前题目')
|
||||
return
|
||||
}
|
||||
|
||||
if (currentQuestionId.value && currentGroupId.value) {
|
||||
currentQuestionId.value = currentQuestion.value?.QuestionID || currentQuestionId.value
|
||||
currentGroupId.value = currentQuestion.value?.TeamGroupID || currentGroupId.value
|
||||
@ -343,28 +504,64 @@ function handlePublish() {
|
||||
negativeText: '再次检查',
|
||||
onPositiveClick: async () => {
|
||||
// 在发布前,将所有手动修改的分数/状态提交一次
|
||||
const updatePromises: Promise<any>[] = []
|
||||
// 注意:现在 updateScore 接口支持批量提交,我们需要收集所有需要提交的数据
|
||||
const scoreList: { Id: number, ResultPotins: number, QuestionDetailID: number, QuestionId: number }[] = []
|
||||
let isValid = true
|
||||
|
||||
teamResults.value.forEach((team) => {
|
||||
if (!isValid)
|
||||
return
|
||||
|
||||
if (team.Answers) {
|
||||
team.Answers.forEach((item: any) => {
|
||||
if (item._isManual) {
|
||||
// 调用 updateScore 接口提交分数
|
||||
// 对于客观题,如果 Status=1 (Correct),Score=1;Status=0 (Wrong),Score=0
|
||||
// 假设客观题满分是 1 分 (或者根据业务逻辑调整)
|
||||
// 无论是手动还是 AI 推荐,最终都需要提交分数
|
||||
// 如果是 grid 布局(客观题),Status=1 -> 1分,Status=0 -> 0分
|
||||
// 如果是 list 布局(主观题),直接用 Score 分数
|
||||
// 必须有 TeamQuestionUseID (Id) 才能提交
|
||||
if (item.TeamQuestionUseID) {
|
||||
let scoreToSubmit = item.Score
|
||||
if (currentLayout.value === 'grid') {
|
||||
scoreToSubmit = item.Status === 1 ? 1 : 0
|
||||
|
||||
// 校验:对于 list 布局(主观题),分数不能为 null
|
||||
if (currentLayout.value === 'list' && (scoreToSubmit === null || scoreToSubmit === undefined)) {
|
||||
window.$message?.error(`队伍 "${team.TeamName}" 存在未打分的题目,请检查`)
|
||||
isValid = false
|
||||
return
|
||||
}
|
||||
|
||||
updatePromises.push(updateScore(item.TeamQuestionUseID, scoreToSubmit))
|
||||
if (currentLayout.value === 'grid') {
|
||||
// Grid 布局(客观题):只有对错
|
||||
// 规则:如果评委认为是正确 (Status=1),则使用当前题目的总分 (currentQuestion.Point)
|
||||
// 否则(错误),分数为 0
|
||||
// 注意:currentQuestion 可能没有 Point 字段,需要确认类型,如果没有则尝试从 item._aiScore 获取或者默认 1?
|
||||
// 根据需求:"就取currentQuestion里面的Point字段"
|
||||
// 查看 typings,currentQuestion 是 GetCurrentQuestionInfo 类型,可能没有 Point。
|
||||
// 假设 GetCurrentQuestionInfo 有 Point 字段 (或者 Points / Score)
|
||||
// 如果 currentQuestion 没有,回退到 item._aiScore (AI 认为正确的那个分数) 还是默认 1?
|
||||
// 通常客观题分数是固定的。这里假设 currentQuestion 有 Point。
|
||||
// 修正:currentQuestion.value 可能是 undefined。
|
||||
const maxPoint = (currentQuestion.value as any)?.Point || (currentQuestion.value as any)?.Score || 1
|
||||
scoreToSubmit = item.Status === 1 ? maxPoint : 0
|
||||
}
|
||||
|
||||
// 确保分数为数字
|
||||
scoreList.push({
|
||||
Id: item.TeamQuestionUseID,
|
||||
ResultPotins: Number(scoreToSubmit || 0),
|
||||
QuestionDetailID: item.QuestionDetailID || 0,
|
||||
QuestionId: item.QuestionId || 0,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
if (!isValid)
|
||||
return
|
||||
|
||||
try {
|
||||
await Promise.all(updatePromises)
|
||||
if (scoreList.length > 0) {
|
||||
await updateScore(scoreList)
|
||||
}
|
||||
await fetchUpdateCurrentQuestionUse(currentQuestion.value?.TeamGroupQuestionID || 0)
|
||||
// 发布成功后,清理本地存储
|
||||
const prefix = `${roomId.value}-${currentQuestionId.value}-`
|
||||
@ -372,6 +569,10 @@ function handlePublish() {
|
||||
if (k.startsWith(prefix))
|
||||
delete manualStatusStorage.value[k]
|
||||
})
|
||||
Object.keys(manualScoreStorage.value).forEach((k) => {
|
||||
if (k.startsWith(prefix))
|
||||
delete manualScoreStorage.value[k]
|
||||
})
|
||||
}
|
||||
catch (error: any) {
|
||||
window.$message?.error(error.message || '提交分数或发布失败,请重试')
|
||||
@ -387,10 +588,41 @@ function handlePublish() {
|
||||
const pollingTimer = ref<NodeJS.Timeout | null>(null)
|
||||
|
||||
function startPolling() {
|
||||
if (pollingTimer.value)
|
||||
stopPolling()
|
||||
|
||||
// 检查是否已经结束
|
||||
const endTime = (currentQuestion.value as any)?.EndTime
|
||||
if (endTime) {
|
||||
// 增加 8s 缓冲时间
|
||||
const end = new Date(endTime).getTime() + 12000
|
||||
const now = new Date().getTime()
|
||||
if (now > end) {
|
||||
console.log('当前题目已结束(含12s缓冲),仅获取一次最终结果,不启动轮询', endTime)
|
||||
fetchAnswerData()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 如果不是当前正在进行的活动,仅获取一次数据,不启动轮询
|
||||
if (!isActiveActivityId.value) {
|
||||
console.log('当前活动 ID 不是正在比赛的活动,仅获取一次数据', activityId.value, currentQuestion.value?.ActivityID)
|
||||
fetchAnswerData()
|
||||
return
|
||||
}
|
||||
|
||||
fetchAnswerData() // 立即获取
|
||||
pollingTimer.value = setInterval(() => {
|
||||
// 每次轮询前再次检查是否过期
|
||||
const currentEndTime = (currentQuestion.value as any)?.EndTime
|
||||
if (currentEndTime) {
|
||||
// 增加 8s 缓冲时间
|
||||
const endTs = new Date(currentEndTime).getTime() + 12000
|
||||
if (Date.now() > endTs) {
|
||||
console.log('题目时间已到(含12s缓冲),停止轮询', currentEndTime)
|
||||
stopPolling()
|
||||
return
|
||||
}
|
||||
}
|
||||
fetchAnswerData()
|
||||
}, 3000)
|
||||
}
|
||||
@ -437,6 +669,14 @@ watch([currentGroupId, currentQuestionId], () => {
|
||||
}
|
||||
})
|
||||
|
||||
watch(() => currentQuestionDetailID.value, (newVal) => {
|
||||
console.log(newVal)
|
||||
|
||||
if (newVal) {
|
||||
fetchQuestionDetail(Number(newVal))
|
||||
}
|
||||
}, { immediate: true })
|
||||
|
||||
onMounted(async () => {
|
||||
// 并行拉取分组、题目与当前题目,完成后做一次同步
|
||||
await Promise.all([fetchGroups(), fetchQuestions(), fetchCurrentQuestion()])
|
||||
@ -498,12 +738,12 @@ onUnmounted(() => {
|
||||
</div>
|
||||
|
||||
<!-- 参考答案展示(如果有) -->
|
||||
<div v-if="currentQuestion?.Answer" class="border border-green-200 rounded-lg bg-green-50 p-4">
|
||||
<div v-if="questionInfo?.Answer" class="border border-green-200 rounded-lg bg-green-50 p-4">
|
||||
<div class="mb-2 text-sm text-green-800 font-bold tracking-wider uppercase">
|
||||
参考答案
|
||||
</div>
|
||||
<div class="text-base text-green-900 font-medium leading-relaxed">
|
||||
{{ currentQuestion.Answer }}
|
||||
{{ questionInfo.Answer }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -536,26 +776,28 @@ onUnmounted(() => {
|
||||
!item._isManual ? 'border-gray-300 bg-gray-50/30' : (item.Status === 1 ? 'border-green-500 bg-green-50/30' : 'border-red-500 bg-red-50/30'),
|
||||
]"
|
||||
>
|
||||
<!-- 图片上方的标签 -->
|
||||
<div class="mb-2 text-center text-lg text-gray-700 font-bold">
|
||||
{{ item.AnswerText || '答案' }}
|
||||
<div v-if="item.AnswerText" class="text-lg text-gray-800 font-bold">
|
||||
<span> 由 ai识别出的答题文本:</span>
|
||||
<Typewriter :text="item.AnswerText" />
|
||||
</div>
|
||||
|
||||
<!-- AI Suggestion Indicator -->
|
||||
<div
|
||||
v-if="!item._isManual"
|
||||
class="mb-2 flex items-center justify-center gap-1 text-xs text-orange-500 font-bold"
|
||||
>
|
||||
<div class="i-carbon-ai-status" />
|
||||
AI 推荐: {{ item.Status === 1 ? '正确' : '错误' }}
|
||||
</div>
|
||||
<!-- Manual Calibration Indicator -->
|
||||
<div
|
||||
v-else
|
||||
class="mb-2 flex items-center justify-center gap-1 text-xs text-green-600 font-bold"
|
||||
>
|
||||
<div class="i-carbon-user-avatar-filled-alt" />
|
||||
已人工校准: {{ item.Status === 1 ? '正确' : '错误' }}
|
||||
<div class="mb-2 flex items-center justify-center gap-2 text-xs font-bold">
|
||||
<!-- AI 推荐 -->
|
||||
<div class="flex items-center gap-1 text-orange-500">
|
||||
<div class="i-carbon-ai-status" />
|
||||
<span>AI: {{ item._aiScore }}分 ({{ item._aiStatus === 1 ? '对' : '错' }})</span>
|
||||
</div>
|
||||
<!-- 分隔符 -->
|
||||
<div class="h-3 w-[1px] bg-gray-300" />
|
||||
<!-- 当前状态 -->
|
||||
<div v-if="!item._isManual" class="text-gray-400">
|
||||
跟随 AI
|
||||
</div>
|
||||
<div v-else class="flex items-center gap-1 text-green-600">
|
||||
<div class="i-carbon-user-avatar-filled-alt" />
|
||||
<span>人工: {{ item.Status === 1 ? '对' : '错' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 图片展示 -->
|
||||
<div class="flex items-center justify-center">
|
||||
@ -571,10 +813,16 @@ onUnmounted(() => {
|
||||
>
|
||||
<!-- 如果未校准,显示两个按钮 -->
|
||||
<template v-if="!item._isManual">
|
||||
<NButton strong secondary round size="medium" type="success" class="shadow-xl" @click="setStatus(team, item, 1)">
|
||||
<NButton
|
||||
strong secondary round size="medium" type="success" class="shadow-xl"
|
||||
@click="setStatus(team, item, 1)"
|
||||
>
|
||||
确认正确 (绿)
|
||||
</NButton>
|
||||
<NButton strong secondary round size="medium" type="error" class="shadow-xl" @click="setStatus(team, item, 0)">
|
||||
<NButton
|
||||
strong secondary round size="medium" type="error" class="shadow-xl"
|
||||
@click="setStatus(team, item, 0)"
|
||||
>
|
||||
确认错误 (红)
|
||||
</NButton>
|
||||
</template>
|
||||
@ -603,8 +851,8 @@ onUnmounted(() => {
|
||||
<div
|
||||
class="flex items-center gap-1 border border-green-200 rounded bg-green-50 px-2 py-1 text-xs text-green-600"
|
||||
>
|
||||
<div class="i-carbon-checkmark" />
|
||||
已人工校准
|
||||
<icon-ic:twotone-rule class="text-icon" />
|
||||
<span> 已人工校准</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -613,12 +861,13 @@ onUnmounted(() => {
|
||||
<!-- List Layout: 主观题 -> Split View (Image Left, Scoring Right) -->
|
||||
<div v-else class="w-full flex flex-col gap-6">
|
||||
<div
|
||||
v-for="(item, idx) in team.Answers" :key="item.Guid"
|
||||
v-for="item in team.Answers" :key="item.Guid"
|
||||
class="flex flex-col gap-6 border border-gray-100 rounded-xl bg-white p-6 shadow-sm"
|
||||
>
|
||||
<!-- Title -->
|
||||
<div class="text-lg text-gray-800 font-bold">
|
||||
{{ idx + 1 }}. {{ item.AnswerText || '题目' }} (汉字加一加)
|
||||
<span> 由 ai识别出的答题文本:</span>
|
||||
<Typewriter :text="item.AnswerText || '题目'" />
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col gap-6 lg:flex-row">
|
||||
@ -630,6 +879,7 @@ onUnmounted(() => {
|
||||
<div class="i-carbon-image" />
|
||||
主观题原图展示区
|
||||
</div>
|
||||
|
||||
<div class="h-full flex items-center justify-center">
|
||||
<NImage
|
||||
v-if="item.AnswerValuePicture || item.imageUrl"
|
||||
@ -651,25 +901,56 @@ onUnmounted(() => {
|
||||
<div class="mt-1 text-sm text-gray-500">
|
||||
请根据对的字数进行打分
|
||||
</div>
|
||||
<div v-if="!item._isManual" class="mt-2 flex items-center gap-2 rounded bg-orange-50 px-2 py-1 text-xs text-orange-600">
|
||||
<div class="i-carbon-ai-status" />
|
||||
AI 推荐: {{ item.Score }} 分
|
||||
</div>
|
||||
<div v-else class="mt-2 flex items-center gap-2 rounded bg-green-50 px-2 py-1 text-xs text-green-600">
|
||||
<div class="i-carbon-user-avatar-filled-alt" />
|
||||
已人工校准: {{ item.Score }} 分
|
||||
<!-- 评分状态展示区域:明确区分 AI 推荐和人工干预状态 -->
|
||||
<div class="mt-2 flex flex-col gap-2">
|
||||
<!-- AI 推荐信息 (始终显示,作为参考) -->
|
||||
<div
|
||||
class="flex items-center justify-between border border-gray-100 rounded bg-gray-50 px-3 py-2"
|
||||
>
|
||||
<div class="flex items-center gap-1.5">
|
||||
<div class="i-carbon-ai-status text-orange-500" />
|
||||
<span class="text-xs text-gray-600 font-medium">AI 推荐</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<span class="text-sm text-gray-800 font-bold">{{ item._aiScore }} 分</span>
|
||||
<span
|
||||
class="rounded px-1.5 py-0.5 text-[10px]"
|
||||
:class="item._aiStatus === 1 ? 'bg-green-100 text-green-700' : 'bg-red-100 text-red-700'"
|
||||
>
|
||||
{{ item._aiStatus === 1 ? '判对' : '判错' }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 当前生效状态提示 -->
|
||||
<div
|
||||
v-if="item._isManual"
|
||||
class="flex items-center gap-1 border border-green-200 rounded bg-green-50 px-2 py-1 text-xs text-green-600"
|
||||
>
|
||||
<!-- <div class="i-carbon-user-avatar-filled-alt" /> -->
|
||||
<icon-ic:twotone-rule class="text-icon" />
|
||||
<span> 已人工校准</span>
|
||||
</div>
|
||||
|
||||
<div v-else class="flex items-center gap-1.5 px-1 text-xs text-gray-400">
|
||||
<div class="i-carbon-arrows-horizontal" />
|
||||
<span>当前跟随 AI 推荐结果</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Score Input -->
|
||||
<div class="flex flex-col gap-2">
|
||||
<div class="text-sm text-gray-600 font-medium">
|
||||
最终得分
|
||||
最终得分 (人工)
|
||||
</div>
|
||||
<div class="flex items-center border border-blue-100 rounded-xl bg-white px-4 py-3 shadow-sm">
|
||||
<!-- <NInputNumber v-model:value="item.Score" :min="0" :max="100" :show-button="false"
|
||||
class="flex-1 text-center text-3xl font-bold !border-none" placeholder="0" /> -->
|
||||
<NInputNumber v-model:value="item.Score" button-placement="both" :min="0" :max="100" @update:value="(val) => handleManualScoreUpdate(item, val || 0)">
|
||||
<NInputNumber
|
||||
v-model:value="item.Score" button-placement="both" :min="0" :max="100"
|
||||
@update:value="(val) => handleManualScoreUpdate(item, val || 0)"
|
||||
>
|
||||
<template #suffix>
|
||||
分
|
||||
</template>
|
||||
@ -682,13 +963,13 @@ onUnmounted(() => {
|
||||
<div class="text-sm text-gray-600 font-medium">
|
||||
快捷打分
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-3">
|
||||
<div class="grid grid-cols-4 gap-2">
|
||||
<NButton
|
||||
v-for="score in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" :key="score" secondary strong
|
||||
:type="item.Score === score ? 'primary' : 'default'" class="h-10"
|
||||
:type="item.Score === score ? 'primary' : 'default'" class="h-10 w-full"
|
||||
@click="() => handleManualScoreUpdate(item, score)"
|
||||
>
|
||||
{{ score }} 分
|
||||
{{ score }}
|
||||
</NButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
<script lang="ts" setup>
|
||||
import type { Options } from 'typeit'
|
||||
import TypeIt from 'typeit'
|
||||
import { onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
text?: string
|
||||
}>()
|
||||
|
||||
const textRef = ref<HTMLElement>()
|
||||
let typeItInstance: any = null
|
||||
|
||||
function init() {
|
||||
if (!textRef.value)
|
||||
return
|
||||
if (typeItInstance) {
|
||||
typeItInstance.destroy()
|
||||
}
|
||||
|
||||
const options: Options = {
|
||||
strings: props.text || '',
|
||||
lifeLike: true,
|
||||
speed: 100,
|
||||
loop: false,
|
||||
cursor: false,
|
||||
}
|
||||
|
||||
typeItInstance = new TypeIt(textRef.value, options).go()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
|
||||
watch(() => props.text, () => {
|
||||
init()
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (typeItInstance) {
|
||||
typeItInstance.destroy()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<span ref="textRef" class="text-lg text-gray-800 font-bold" />
|
||||
</template>
|
||||
@ -20,7 +20,7 @@ const currentQuestionDetail = computed(() => store.currentQuestionDetail)
|
||||
|
||||
const TeamGroup_QuestionID = computed(() => currentQuestionMainInfo.value?.TeamGroup_QuestionID || 0)
|
||||
const QuestionID = computed(() => currentQuestionMainInfo.value?.Activity_Question.ID || 0)
|
||||
const QuestionDetaiID = computed(() => currentQuestionDetail.value?.Id || 0)
|
||||
const QuestionDetailID = computed(() => currentQuestionDetail.value?.Id || 0)
|
||||
|
||||
const zoomedImage = ref<string | null>(null)
|
||||
const isCompleted = ref(false)
|
||||
@ -123,7 +123,7 @@ async function fetchGetGameStatisticsData() {
|
||||
const _params = {
|
||||
TeamGroupID: Number(groupsId.value),
|
||||
QuestionID: Number(QuestionID.value),
|
||||
QuestionDetaiID: Number(QuestionDetaiID.value),
|
||||
QuestionDetaiID: Number(QuestionDetailID.value),
|
||||
}
|
||||
const { data } = await fetchGetGameStatistics(_params)
|
||||
teams.value = (data?.data as any[]) || []
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref, watch } from 'vue'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import CompetitionLayout from '@/components/custom/user/CompetitionLayout.vue'
|
||||
import { useRouterPush } from '@/hooks/common/router'
|
||||
@ -28,10 +28,12 @@ const activityName = computed(() => activityInfo.value?.ActivityTitle || '星·
|
||||
const flippedCards = ref<Set<number>>(new Set())
|
||||
|
||||
// 计算是否所有卡片都已翻转 (当前显示4张卡片)
|
||||
// eslint-disable-next-line unused-imports/no-unused-vars
|
||||
const isAllFlipped = computed(() => flippedCards.value.size === questions.value.length)
|
||||
|
||||
// 控制下一步按钮的显示(带延迟)
|
||||
const showNextButton = ref(false)
|
||||
const showNextButton = ref(true)
|
||||
// eslint-disable-next-line prefer-const, unused-imports/no-unused-vars
|
||||
let timer: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
// 获取路由参数
|
||||
@ -70,22 +72,22 @@ async function getQuestions() {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
// 测试先注释掉
|
||||
// watch(isAllFlipped, (val) => {
|
||||
// if (timer) {
|
||||
// clearTimeout(timer)
|
||||
// timer = null
|
||||
// }
|
||||
|
||||
watch(isAllFlipped, (val) => {
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
timer = null
|
||||
}
|
||||
|
||||
if (val) {
|
||||
timer = setTimeout(() => {
|
||||
showNextButton.value = true
|
||||
}, 1500)
|
||||
}
|
||||
else {
|
||||
showNextButton.value = false
|
||||
}
|
||||
})
|
||||
// if (val) {
|
||||
// timer = setTimeout(() => {
|
||||
// showNextButton.value = true
|
||||
// }, 1500)
|
||||
// }
|
||||
// else {
|
||||
// showNextButton.value = false
|
||||
// }
|
||||
// })
|
||||
|
||||
function handleBack() {
|
||||
routerBack()
|
||||
|
||||
@ -130,7 +130,15 @@ async function handleNext() {
|
||||
// 点击开始答题
|
||||
if (!isStarted.value) {
|
||||
isStarted.value = true
|
||||
store.startTimer(store.currentQuestionInfo?.QuestionTime || 10)
|
||||
|
||||
// 获取题目时间,优先从 currentQuestionInfo 获取,兼容大小写
|
||||
// 并在获取失败时尝试从 detail 获取(如果后端在详情接口也返回了时间)
|
||||
const infoTime = store.currentQuestionInfo?.QuestionTime || (store.currentQuestionInfo as any)?.questionTime
|
||||
const detailTime = (store.currentQuestionDetail as any)?.QuestionTime || (store.currentQuestionDetail as any)?.questionTime
|
||||
const duration = Number(infoTime || detailTime || 120) // 默认值改为 120s 或者保持 10s,用户说是 120s
|
||||
|
||||
console.log('开始倒计时,时长:', duration, 'InfoTime:', infoTime, 'DetailTime:', detailTime)
|
||||
store.startTimer(duration)
|
||||
|
||||
// 提交题目使用记录
|
||||
try {
|
||||
@ -207,10 +215,34 @@ async function fetchGetGameStatisticsData(_params: Api.Competition.QuestionAddPa
|
||||
// 使用 Map 去重,以 TeamId 为准,保留最新的状态
|
||||
const teamMap = new Map()
|
||||
list.forEach((item) => {
|
||||
let answerCount = 0
|
||||
try {
|
||||
if (item.UserAnswerFont) {
|
||||
const parsed = JSON.parse(item.UserAnswerFont)
|
||||
if (Array.isArray(parsed) && parsed.length > 0) {
|
||||
// 如果 AnswerText 存在,取其长度;否则(如选择题)如果对象存在则算 1 个
|
||||
// 逻辑:如果是填空/听写类,AnswerText 是字符串,取长度?
|
||||
// 根据需求:答题数量用 UserAnswerFont 里面 AnswerText 字段的 length 长度
|
||||
// 注意:AnswerText 可能是 "B" (选择题) 或 "汉字" (听写)
|
||||
// 如果是数组,是否需要累加所有项的 AnswerText 长度?
|
||||
// 假设 UserAnswerFont 是一个数组 [{"AnswerText": "..."}]
|
||||
// 这里我们遍历数组累加长度
|
||||
parsed.forEach((p: any) => {
|
||||
if (p.AnswerText) {
|
||||
answerCount += String(p.AnswerText).length
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error('解析 UserAnswerFont 失败', e)
|
||||
}
|
||||
|
||||
teamMap.set(item.TeamName, {
|
||||
group: item.TeamName || '未知队伍',
|
||||
total: item.Points || 0,
|
||||
correct: item.ResultPotins || 0,
|
||||
total: answerCount, // 答题数量
|
||||
correct: item.Points || 0, // 预估得分 (使用外层 Points)
|
||||
})
|
||||
})
|
||||
chartData.value = Array.from(teamMap.values())
|
||||
|
||||
@ -30,7 +30,7 @@ function buildOption(list: BarDatum[]): ECOption {
|
||||
axisPointer: { type: 'shadow' },
|
||||
},
|
||||
legend: {
|
||||
data: ['答题数量', '正确数量'],
|
||||
data: ['答题数量', '预估得分'],
|
||||
top: 0,
|
||||
right: 0,
|
||||
icon: 'circle',
|
||||
|
||||
@ -1,9 +1,17 @@
|
||||
{
|
||||
"question_bank": [
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "jiū 表示小鸟的叫声",
|
||||
"Answer": "啾",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "liú 表示姓名",
|
||||
"Answer": "刘,牛",
|
||||
"Answer": "刘",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -11,7 +19,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "zhāng 表示姓氏",
|
||||
"Answer": "张,章",
|
||||
"Answer": "张",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -27,7 +35,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "lǐ 表示姓氏",
|
||||
"Answer": "李,里",
|
||||
"Answer": "李",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -35,7 +43,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "chén 表示姓氏",
|
||||
"Answer": "陈,晨",
|
||||
"Answer": "陈",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -43,7 +51,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yáng 表示动物",
|
||||
"Answer": "羊,杨",
|
||||
"Answer": "羊",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -51,7 +59,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mǎ 表示动物",
|
||||
"Answer": "马,码",
|
||||
"Answer": "马",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -67,7 +75,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yú 表示动物",
|
||||
"Answer": "鱼,于",
|
||||
"Answer": "鱼",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -83,7 +91,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "huā 表示植物",
|
||||
"Answer": "花,华",
|
||||
"Answer": "花",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -91,7 +99,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shù 表示植物",
|
||||
"Answer": "树,数",
|
||||
"Answer": "树",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -99,7 +107,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "cǎo 表示植物",
|
||||
"Answer": "草,操",
|
||||
"Answer": "草",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -115,7 +123,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yè 表示植物",
|
||||
"Answer": "叶,页",
|
||||
"Answer": "叶",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -147,7 +155,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "jīn 表示自然元素",
|
||||
"Answer": "金,今",
|
||||
"Answer": "金",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -155,7 +163,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mù 表示自然元素",
|
||||
"Answer": "木,目",
|
||||
"Answer": "木",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -163,7 +171,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "tiān 表示自然",
|
||||
"Answer": "天,田",
|
||||
"Answer": "天",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -171,7 +179,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "dì 表示自然",
|
||||
"Answer": "地,第",
|
||||
"Answer": "地",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -179,7 +187,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shān 表示自然",
|
||||
"Answer": "山,杉",
|
||||
"Answer": "山",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -187,7 +195,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "chuān 表示自然",
|
||||
"Answer": "川,穿",
|
||||
"Answer": "川",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -195,7 +203,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "hé 表示自然",
|
||||
"Answer": "河,和",
|
||||
"Answer": "河",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -203,7 +211,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "rén 表示人类",
|
||||
"Answer": "人,仁",
|
||||
"Answer": "人",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -219,7 +227,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shǒu 表示身体",
|
||||
"Answer": "手,首",
|
||||
"Answer": "手",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -227,7 +235,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "zú 表示身体",
|
||||
"Answer": "足,族",
|
||||
"Answer": "足",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -235,7 +243,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mù 表示身体",
|
||||
"Answer": "目,木",
|
||||
"Answer": "目",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -243,15 +251,15 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "ěr 表示身体",
|
||||
"Answer": "耳,尔",
|
||||
"Answer": "耳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "bǐ 表示身体",
|
||||
"Answer": "鼻,比",
|
||||
"Name": "bí 表示身体",
|
||||
"Answer": "鼻",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -267,7 +275,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yá 表示身体",
|
||||
"Answer": "牙,芽",
|
||||
"Answer": "牙",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -275,7 +283,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "xīn 表示身体",
|
||||
"Answer": "心,新",
|
||||
"Answer": "心",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -283,7 +291,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "gān 表示身体",
|
||||
"Answer": "肝,干",
|
||||
"Answer": "肝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
@ -371,7 +379,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "huà 表示动作",
|
||||
"Answer": "画,话",
|
||||
"Answer": "画",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -451,7 +459,7 @@
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shí 表示数字",
|
||||
"Answer": "十,石",
|
||||
"Answer": "十",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
@ -40,10 +40,6 @@ interface Question {
|
||||
ImageUrl: string
|
||||
}
|
||||
|
||||
interface QuestionBank {
|
||||
question_bank: Question[]
|
||||
}
|
||||
|
||||
async function importQuestions() {
|
||||
try {
|
||||
// 检查资源目录是否存在
|
||||
@ -64,11 +60,17 @@ async function importQuestions() {
|
||||
const filePath = path.join(ASSET_DIR, file)
|
||||
console.log(`\nStarting import for file: ${file}`)
|
||||
|
||||
const data: QuestionBank = await fs.readJSON(filePath)
|
||||
const questions = data.question_bank
|
||||
const data: any = await fs.readJSON(filePath)
|
||||
let questions: Question[] = []
|
||||
|
||||
if (!questions || !Array.isArray(questions)) {
|
||||
console.error(`Invalid JSON format in ${file}: question_bank array not found.`)
|
||||
if (Array.isArray(data)) {
|
||||
questions = data
|
||||
}
|
||||
else if (data.question_bank && Array.isArray(data.question_bank)) {
|
||||
questions = data.question_bank
|
||||
}
|
||||
else {
|
||||
console.error(`Invalid JSON format in ${file}: question_bank array not found or data is not an array.`)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@ -1,340 +0,0 @@
|
||||
{
|
||||
"question_bank": [
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 5,
|
||||
"Name": "请写出含有反义词的四字成语。",
|
||||
"Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,428 +0,0 @@
|
||||
{
|
||||
"question_bank": [
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "chì rè",
|
||||
"Answer": "炽热、赤热",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "hào hàn",
|
||||
"Answer": "浩瀚、皓瀚",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "péng bó",
|
||||
"Answer": "蓬勃、彭勃",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "cuǐ càn",
|
||||
"Answer": "璀璨、璀粲",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yōu yǎ",
|
||||
"Answer": "优雅、幽雅",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "xuàn lì",
|
||||
"Answer": "绚丽、炫丽",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "wǎn zhuǎn",
|
||||
"Answer": "婉转、宛转",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "páng bó",
|
||||
"Answer": "磅礴、旁礴",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "xuān nào",
|
||||
"Answer": "喧闹、暄闹",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yùn lǜ",
|
||||
"Answer": "韵律、韵侓",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "diāo zhuó",
|
||||
"Answer": "雕琢、雕斫",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qīng cuì",
|
||||
"Answer": "清脆、青翠",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "xiāo sè",
|
||||
"Answer": "萧瑟、萧索",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "pú táo jiǔ",
|
||||
"Answer": "葡萄酒",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "mǎ lù biān",
|
||||
"Answer": "马路边",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "hú dié jié",
|
||||
"Answer": "蝴蝶结",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "shuǐ jīng qiú",
|
||||
"Answer": "水晶球",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "chūn tiān dào",
|
||||
"Answer": "春天到",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "xiǎo niǎo jiào",
|
||||
"Answer": "小鸟叫",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "huā ér xiāng",
|
||||
"Answer": "花儿香",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yuè liàng wān",
|
||||
"Answer": "月亮弯",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "xīng xing shǎn",
|
||||
"Answer": "星星闪",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qīng wā tiào",
|
||||
"Answer": "青蛙跳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "zhī zhū wǎng",
|
||||
"Answer": "蜘蛛网",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yī bēn zhèng jīng",
|
||||
"Answer": "一本正经",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "wǔ guāng shí sè",
|
||||
"Answer": "五光十色",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qī shàng bā xià",
|
||||
"Answer": "七上八下",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "shǒu máng jiǎo luàn",
|
||||
"Answer": "手忙脚乱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "huā hóng liǔ lǜ",
|
||||
"Answer": "花红柳绿",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "shān qīng shuǐ xiù",
|
||||
"Answer": "山清水秀",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "chūn nuǎn huā kāi",
|
||||
"Answer": "春暖花开",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qiū gāo qì shuǎng",
|
||||
"Answer": "秋高气爽",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "dōng nuǎn xià liáng",
|
||||
"Answer": "冬暖夏凉",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yuè míng xīng xī",
|
||||
"Answer": "月明星稀",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "fēng hé rì lì",
|
||||
"Answer": "风和日丽",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "shǔ yì",
|
||||
"Answer": "鼠疫、署意",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qiǎn xiǎn",
|
||||
"Answer": "浅显、浅险",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "zhì nèn",
|
||||
"Answer": "稚嫩、质嫩",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "sù xiàng",
|
||||
"Answer": "塑像、素像",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yōu xián",
|
||||
"Answer": "悠闲、幽闲",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "hēi bǎn bǐ",
|
||||
"Answer": "黑板笔",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "lán qiú chǎng",
|
||||
"Answer": "篮球场",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "yóu yǒng chí",
|
||||
"Answer": "游泳池",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "tú shū guǎn",
|
||||
"Answer": "图书馆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "diàn yǐng yuàn",
|
||||
"Answer": "电影院",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "rén shān rén hǎi",
|
||||
"Answer": "人山人海",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "wàn zǐ qiān hóng",
|
||||
"Answer": "万紫千红",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qiān biàn wàn huà",
|
||||
"Answer": "千变万化",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "wú biān wú jì",
|
||||
"Answer": "无边无际",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "bǎi huā qí fàng",
|
||||
"Answer": "百花齐放",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "bǎi nián shù rén",
|
||||
"Answer": "百年树人",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "qiān chuí bǎi liàn",
|
||||
"Answer": "千锤百炼",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 3,
|
||||
"Name": "wàn lǐ cháng chéng",
|
||||
"Answer": "万里长城",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
458
apps/question-importer/store/汉字听写 1.json
Normal file
458
apps/question-importer/store/汉字听写 1.json
Normal file
@ -0,0 +1,458 @@
|
||||
[
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "liú 表示姓名",
|
||||
"Answer": "刘",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "zhāng 表示姓氏",
|
||||
"Answer": "张",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "wáng 表示姓氏",
|
||||
"Answer": "王",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "lǐ 表示姓氏",
|
||||
"Answer": "李",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "chén 表示姓氏",
|
||||
"Answer": "陈",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yáng 表示动物",
|
||||
"Answer": "羊",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mǎ 表示动物",
|
||||
"Answer": "马",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "niǎo 表示动物",
|
||||
"Answer": "鸟",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yú 表示动物",
|
||||
"Answer": "鱼",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "gǒu 表示动物",
|
||||
"Answer": "狗",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "huā 表示植物",
|
||||
"Answer": "花",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shù 表示植物",
|
||||
"Answer": "树",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "cǎo 表示植物",
|
||||
"Answer": "草",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "guǒ 表示植物",
|
||||
"Answer": "果",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yè 表示植物",
|
||||
"Answer": "叶",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shuǐ 表示自然元素",
|
||||
"Answer": "水",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "huǒ 表示自然元素",
|
||||
"Answer": "火",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "tǔ 表示自然元素",
|
||||
"Answer": "土",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "jīn 表示自然元素",
|
||||
"Answer": "金",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mù 表示自然元素",
|
||||
"Answer": "木",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "tiān 表示自然",
|
||||
"Answer": "天",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "dì 表示自然",
|
||||
"Answer": "地",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shān 表示自然",
|
||||
"Answer": "山",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "chuān 表示自然",
|
||||
"Answer": "川",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "hé 表示自然",
|
||||
"Answer": "河",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "rén 表示人类",
|
||||
"Answer": "人",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "kǒu 表示身体",
|
||||
"Answer": "口",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shǒu 表示身体",
|
||||
"Answer": "手",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "zú 表示身体",
|
||||
"Answer": "足",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "mù 表示身体",
|
||||
"Answer": "目",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "ěr 表示身体",
|
||||
"Answer": "耳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "bí 表示身体",
|
||||
"Answer": "鼻",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shé 表示身体",
|
||||
"Answer": "舌",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yá 表示身体",
|
||||
"Answer": "牙",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "xīn 表示身体",
|
||||
"Answer": "心",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "gān 表示身体",
|
||||
"Answer": "肝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "chī 表示动作",
|
||||
"Answer": "吃",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "hē 表示动作",
|
||||
"Answer": "喝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "zǒu 表示动作",
|
||||
"Answer": "走",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "pǎo 表示动作",
|
||||
"Answer": "跑",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "tiào 表示动作",
|
||||
"Answer": "跳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "kàn 表示动作",
|
||||
"Answer": "看",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "tīng 表示动作",
|
||||
"Answer": "听",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shuō 表示动作",
|
||||
"Answer": "说",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "dú 表示动作",
|
||||
"Answer": "读",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "xiě 表示动作",
|
||||
"Answer": "写",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "huà 表示动作",
|
||||
"Answer": "画",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "yī 表示数字",
|
||||
"Answer": "一",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "èr 表示数字",
|
||||
"Answer": "二",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "sān 表示数字",
|
||||
"Answer": "三",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "sì 表示数字",
|
||||
"Answer": "四",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "wǔ 表示数字",
|
||||
"Answer": "五",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "liù 表示数字",
|
||||
"Answer": "六",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "qī 表示数字",
|
||||
"Answer": "七",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "bā 表示数字",
|
||||
"Answer": "八",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "jiǔ 表示数字",
|
||||
"Answer": "九",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 27,
|
||||
"Name": "shí 表示数字",
|
||||
"Answer": "十",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
}
|
||||
]
|
||||
452
apps/question-importer/store/汉字听写 2.json
Normal file
452
apps/question-importer/store/汉字听写 2.json
Normal file
@ -0,0 +1,452 @@
|
||||
{
|
||||
"question_bank": [
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Jú",
|
||||
"Answer": "巨、且、句、讵、郏、苣、姖、岠、局、拒、拠、洰、汩、车、具、冣、莒、弆、呿、駶、狙、岨、居、拘、拀、淗、湨、澽、忂、炬、柜、歫、昛、歫、举、佝、茮、柩、罝、珇、秬、矩、剧、陱、俱、伹、伿、挶、栨、椇、椐、椈、歫、毩、毱、疽、痀、眗、砠、租、窭、筥、篓、簴、籧、粔、罝、耟、聥、腒、艍、苴、莒、蒟、蘮、虡、蜛、螶、袓、襷、詎、諊、豦、貗、趄、跔、跙、踘、躆、躹、輂、邭、鄓、郹、鄅、鉅、鋸、鐻、閰、陱、雎、颶、駏、駒、駶、驧、髃、鴂、鴃、鵙、鵴、鶋、鼁、鼳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuē",
|
||||
"Answer": "薛、靴、削、噱、学、穴、乴、峃、嶨、斈、泶、澩、燢、膤、茓、袕、觷、辥、辪、鞾、鳕、鷽、鸴、踅、謔、噱、燢、谑、疶、疨、蒆、辥、鞾、髇、髐、魈、嚻、噰、斅、斆、燢、爚、狘、瞲、籱、蠦、蠸、觷、諔、譃、谑、谔、谻、豰、貜、趞、踅、躞、遯、遪、郺、鄏、鄻、酄、鍌、鎑、鐍、闅、隟、雤、鞾、韕、顨、饇、騔、驜、鱊、鱮、鷍、鷢、鸙、麧、龤",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、悦、阅、越、岳、跃、粤、钺、栎、樾、刖、哕、妜、岄、恱、悅、戉、抈、捳、曱、枂、櫟、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、説、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qū",
|
||||
"Answer": "区、曲、屈、趋、驱、躯、蛆、祛、麴、诎、岖、阹、憈、敺、斪、欋、氍、焌、煀、璖、癯、磲、筁、籧、粬、紶、翑、胠、臞、菃、蕖、蘧、蛐、蠷、衐、袪、覰、覷、詘、趨、躣、軀、軥、迲、遽、釻、鐻、阹、駆、駈、騶、驅、鰸、鱋、麯、麴、鼩、齲",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuó",
|
||||
"Answer": "着、卓、灼、浊、琢、酌、啄、斫、茁、倬、诼、禚、浞、涿、濯、焯、禚、窡、籗、籱、缴、罬、蠗、諑、謶、趠、踔、蹠、躅、鉵、鐯、鐲、鵫、鷟、鸐、斀、斲、斵、晫、椓、槕、櫡、汋、淖、灂、炪、灼、烵、犳、琸、矠",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuì",
|
||||
"Answer": "翠、脆、粹、萃、悴、淬、毳、瘁、粹、竁、粋、紣、綷、翆、脃、膵、臎、襊、鏙、隹、顇、伜、倅、啐、崒、崪、忰、慛、椊、焠、璲、疩、皠、磪、竁、粋、縗、紣、翆、脺、膬、臎、襊、趡、鏙、顇、鷻",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juàn",
|
||||
"Answer": "卷、倦、眷、绢、隽、桊、狷、鄄、绢、睠、絭、縳、罥、羂、讂、踡、錈、鎸、鐫、韏、飬、餋、鵑、鷢、奆、姢、帣、悁、惓、慻、捲、梋、棬、泫、淃、焆、獧、瓹",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuǎn",
|
||||
"Answer": "选、宣、悬、旋、玄、绚、轩、喧、渲、璇、煊、谖、萱、暄、儇、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhàn",
|
||||
"Answer": "战、站、占、绽、栈、湛、蘸、颤、佔、偡、嶘、战、戰、搌、栈、棧、椾、榐、橏、欃、湔、湛、澶、灒、琖、皽、碊、站、綻、菚、蘸、虥、袒、襢、覱、詀、謙、譧、譫、趈、蹍、躔、輚、轏、邅、醆、鉆、鋑、鏨、饘、驏、驙、鱣、鸇",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,452 +1,428 @@
|
||||
{
|
||||
"question_bank": [
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Jú",
|
||||
"Answer": "巨、且、句、讵、郏、苣、姖、岠、局、拒、拠、洰、汩、车、具、冣、莒、弆、呿、駶、狙、岨、居、拘、拀、淗、湨、澽、忂、炬、柜、歫、昛、歫、举、佝、茮、柩、罝、珇、秬、矩、剧、陱、俱、伹、伿、挶、栨、椇、椐、椈、歫、毩、毱、疽、痀、眗、砠、租、窭、筥、篓、簴、籧、粔、罝、耟、聥、腒、艍、苴、莒、蒟、蘮、虡、蜛、螶、袓、襷、詎、諊、豦、貗、趄、跔、跙、踘、躆、躹、輂、邭、鄓、郹、鄅、鉅、鋸、鐻、閰、陱、雎、颶、駏、駒、駶、驧、髃、鴂、鴃、鵙、鵴、鶋、鼁、鼳",
|
||||
"QuestionId": 3,
|
||||
"Name": "chì rè",
|
||||
"Answer": "炽热",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuē",
|
||||
"Answer": "薛、靴、削、噱、学、穴、乴、峃、嶨、斈、泶、澩、燢、膤、茓、袕、觷、辥、辪、鞾、鳕、鷽、鸴、踅、謔、噱、燢、谑、疶、疨、蒆、辥、鞾、髇、髐、魈、嚻、噰、斅、斆、燢、爚、狘、瞲、籱、蠦、蠸、觷、諔、譃、谑、谔、谻、豰、貜、趞、踅、躞、遯、遪、郺、鄏、鄻、酄、鍌、鎑、鐍、闅、隟、雤、鞾、韕、顨、饇、騔、驜、鱊、鱮、鷍、鷢、鸙、麧、龤",
|
||||
"QuestionId": 3,
|
||||
"Name": "hào hàn",
|
||||
"Answer": "浩瀚",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、悦、阅、越、岳、跃、粤、钺、栎、樾、刖、哕、妜、岄、恱、悅、戉、抈、捳、曱、枂、櫟、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、説、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"QuestionId": 3,
|
||||
"Name": "péng bó",
|
||||
"Answer": "蓬勃",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qū",
|
||||
"Answer": "区、曲、屈、趋、驱、躯、蛆、祛、麴、诎、岖、阹、憈、敺、斪、欋、氍、焌、煀、璖、癯、磲、筁、籧、粬、紶、翑、胠、臞、菃、蕖、蘧、蛐、蠷、衐、袪、覰、覷、詘、趨、躣、軀、軥、迲、遽、釻、鐻、阹、駆、駈、騶、驅、鰸、鱋、麯、麴、鼩、齲",
|
||||
"QuestionId": 3,
|
||||
"Name": "cuǐ càn",
|
||||
"Answer": "璀璨",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuó",
|
||||
"Answer": "着、卓、灼、浊、琢、酌、啄、斫、茁、倬、诼、禚、浞、涿、濯、焯、禚、窡、籗、籱、缴、罬、蠗、諑、謶、趠、踔、蹠、躅、鉵、鐯、鐲、鵫、鷟、鸐、斀、斲、斵、晫、椓、槕、櫡、汋、淖、灂、炪、灼、烵、犳、琸、矠",
|
||||
"QuestionId": 3,
|
||||
"Name": "yōu yǎ",
|
||||
"Answer": "优雅",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuì",
|
||||
"Answer": "翠、脆、粹、萃、悴、淬、毳、瘁、粹、竁、粋、紣、綷、翆、脃、膵、臎、襊、鏙、隹、顇、伜、倅、啐、崒、崪、忰、慛、椊、焠、璲、疩、皠、磪、竁、粋、縗、紣、翆、脺、膬、臎、襊、趡、鏙、顇、鷻",
|
||||
"QuestionId": 3,
|
||||
"Name": "xuàn lì",
|
||||
"Answer": "绚丽",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juàn",
|
||||
"Answer": "卷、倦、眷、绢、隽、桊、狷、鄄、绢、睠、絭、縳、罥、羂、讂、踡、錈、鎸、鐫、韏、飬、餋、鵑、鷢、奆、姢、帣、悁、惓、慻、捲、梋、棬、泫、淃、焆、獧、瓹",
|
||||
"QuestionId": 3,
|
||||
"Name": "wǎn zhuǎn",
|
||||
"Answer": "婉转",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuǎn",
|
||||
"Answer": "选、宣、悬、旋、玄、绚、轩、喧、渲、璇、煊、谖、萱、暄、儇、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"QuestionId": 3,
|
||||
"Name": "páng bó",
|
||||
"Answer": "磅礴",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhàn",
|
||||
"Answer": "战、站、占、绽、栈、湛、蘸、颤、佔、偡、嶘、战、戰、搌、栈、棧、椾、榐、橏、欃、湔、湛、澶、灒、琖、皽、碊、站、綻、菚、蘸、虥、袒、襢、覱、詀、謙、譧、譫、趈、蹍、躔、輚、轏、邅、醆、鉆、鋑、鏨、饘、驏、驙、鱣、鸇",
|
||||
"QuestionId": 3,
|
||||
"Name": "xuān nào",
|
||||
"Answer": "喧闹",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"QuestionId": 3,
|
||||
"Name": "yùn lǜ",
|
||||
"Answer": "韵律",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"QuestionId": 3,
|
||||
"Name": "diāo zhuó",
|
||||
"Answer": "雕琢",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"QuestionId": 3,
|
||||
"Name": "qīng cuì",
|
||||
"Answer": "清脆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"QuestionId": 3,
|
||||
"Name": "xiāo sè",
|
||||
"Answer": "萧瑟",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"QuestionId": 3,
|
||||
"Name": "pú táo jiǔ",
|
||||
"Answer": "葡萄酒",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"QuestionId": 3,
|
||||
"Name": "mǎ lù biān",
|
||||
"Answer": "马路边",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"QuestionId": 3,
|
||||
"Name": "hú dié jié",
|
||||
"Answer": "蝴蝶结",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"QuestionId": 3,
|
||||
"Name": "shuǐ jīng qiú",
|
||||
"Answer": "水晶球",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"QuestionId": 3,
|
||||
"Name": "chūn tiān dào",
|
||||
"Answer": "春天到",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"QuestionId": 3,
|
||||
"Name": "xiǎo niǎo jiào",
|
||||
"Answer": "小鸟叫",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"QuestionId": 3,
|
||||
"Name": "huā ér xiāng",
|
||||
"Answer": "花儿香",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"QuestionId": 3,
|
||||
"Name": "yuè liàng wān",
|
||||
"Answer": "月亮弯",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"QuestionId": 3,
|
||||
"Name": "xīng xing shǎn",
|
||||
"Answer": "星星闪",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"QuestionId": 3,
|
||||
"Name": "qīng wā tiào",
|
||||
"Answer": "青蛙跳",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"QuestionId": 3,
|
||||
"Name": "zhī zhū wǎng",
|
||||
"Answer": "蜘蛛网",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
|
||||
"QuestionId": 3,
|
||||
"Name": "yī bēn zhèng jīng",
|
||||
"Answer": "一本正经",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"QuestionId": 3,
|
||||
"Name": "wǔ guāng shí sè",
|
||||
"Answer": "五光十色",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"QuestionId": 3,
|
||||
"Name": "qī shàng bā xià",
|
||||
"Answer": "七上八下",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"QuestionId": 3,
|
||||
"Name": "shǒu máng jiǎo luàn",
|
||||
"Answer": "手忙脚乱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"QuestionId": 3,
|
||||
"Name": "huā hóng liǔ lǜ",
|
||||
"Answer": "花红柳绿",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"QuestionId": 3,
|
||||
"Name": "shān qīng shuǐ xiù",
|
||||
"Answer": "山清水秀",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"QuestionId": 3,
|
||||
"Name": "chūn nuǎn huā kāi",
|
||||
"Answer": "春暖花开",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"QuestionId": 3,
|
||||
"Name": "qiū gāo qì shuǎng",
|
||||
"Answer": "秋高气爽",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"QuestionId": 3,
|
||||
"Name": "dōng nuǎn xià liáng",
|
||||
"Answer": "冬暖夏凉",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"QuestionId": 3,
|
||||
"Name": "yuè míng xīng xī",
|
||||
"Answer": "月明星稀",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"QuestionId": 3,
|
||||
"Name": "fēng hé rì lì",
|
||||
"Answer": "风和日丽",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"QuestionId": 3,
|
||||
"Name": "shǔ yì",
|
||||
"Answer": "鼠疫",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"QuestionId": 3,
|
||||
"Name": "qiǎn xiǎn",
|
||||
"Answer": "浅显",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"QuestionId": 3,
|
||||
"Name": "zhì nèn",
|
||||
"Answer": "稚嫩",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"QuestionId": 3,
|
||||
"Name": "sù xiàng",
|
||||
"Answer": "塑像",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"QuestionId": 3,
|
||||
"Name": "yōu xián",
|
||||
"Answer": "悠闲",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
|
||||
"QuestionId": 3,
|
||||
"Name": "hēi bǎn bǐ",
|
||||
"Answer": "黑板笔",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Niè",
|
||||
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
|
||||
"QuestionId": 3,
|
||||
"Name": "lán qiú chǎng",
|
||||
"Answer": "篮球场",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Suì",
|
||||
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
|
||||
"QuestionId": 3,
|
||||
"Name": "yóu yǒng chí",
|
||||
"Answer": "游泳池",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuān",
|
||||
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
|
||||
"QuestionId": 3,
|
||||
"Name": "tú shū guǎn",
|
||||
"Answer": "图书馆",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuò",
|
||||
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
|
||||
"QuestionId": 3,
|
||||
"Name": "diàn yǐng yuàn",
|
||||
"Answer": "电影院",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qì",
|
||||
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
|
||||
"QuestionId": 3,
|
||||
"Name": "rén shān rén hǎi",
|
||||
"Answer": "人山人海",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xùn",
|
||||
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
|
||||
"QuestionId": 3,
|
||||
"Name": "wàn zǐ qiān hóng",
|
||||
"Answer": "万紫千红",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuì",
|
||||
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
|
||||
"QuestionId": 3,
|
||||
"Name": "qiān biàn wàn huà",
|
||||
"Answer": "千变万化",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Cuàn",
|
||||
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
|
||||
"QuestionId": 3,
|
||||
"Name": "wú biān wú jì",
|
||||
"Answer": "无边无际",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Juē",
|
||||
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
|
||||
"QuestionId": 3,
|
||||
"Name": "bǎi huā qí fàng",
|
||||
"Answer": "百花齐放",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuè",
|
||||
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
|
||||
"QuestionId": 3,
|
||||
"Name": "bǎi nián shù rén",
|
||||
"Answer": "百年树人",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Zhuān",
|
||||
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
|
||||
"QuestionId": 3,
|
||||
"Name": "qiān chuí bǎi liàn",
|
||||
"Answer": "千锤百炼",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Qióng",
|
||||
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
|
||||
"QuestionId": 3,
|
||||
"Name": "wàn lǐ cháng chéng",
|
||||
"Answer": "万里长城",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Yuè",
|
||||
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Chuàng",
|
||||
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
|
||||
"Type": "text",
|
||||
"IsGood": 0,
|
||||
"ImageUrl": ""
|
||||
},
|
||||
{
|
||||
"QuestionId": 4,
|
||||
"Name": "Xuān",
|
||||
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
|
||||
"Type": "text",
|
||||
"IsGood": 1,
|
||||
"ImageUrl": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@read-star/eslint-config": "workspace:*",
|
||||
"eslint": "latest",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-plugin-format": "^1.3.1",
|
||||
"lint-staged": "latest",
|
||||
"simple-git-hooks": "latest",
|
||||
|
||||
50
pnpm-lock.yaml
generated
50
pnpm-lock.yaml
generated
@ -16,14 +16,14 @@ importers:
|
||||
specifier: workspace:*
|
||||
version: link:packages/eslint-config
|
||||
eslint:
|
||||
specifier: latest
|
||||
specifier: ^9.39.2
|
||||
version: 9.39.2(jiti@2.6.1)
|
||||
eslint-plugin-format:
|
||||
specifier: ^1.3.1
|
||||
version: 1.3.1(eslint@9.39.2(jiti@2.6.1))
|
||||
lint-staged:
|
||||
specifier: latest
|
||||
version: 16.2.7
|
||||
version: 16.3.2
|
||||
simple-git-hooks:
|
||||
specifier: latest
|
||||
version: 2.13.1
|
||||
@ -117,6 +117,9 @@ importers:
|
||||
tailwind-merge:
|
||||
specifier: 3.4.0
|
||||
version: 3.4.0
|
||||
typeit:
|
||||
specifier: ^8.8.7
|
||||
version: 8.8.7
|
||||
v-scale-screen:
|
||||
specifier: ^2.3.0
|
||||
version: 2.3.0(vue@3.5.26(typescript@5.9.3))
|
||||
@ -1496,6 +1499,9 @@ packages:
|
||||
'@types/unist@3.0.3':
|
||||
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
||||
|
||||
'@types/web-animations-js@2.2.16':
|
||||
resolution: {integrity: sha512-ATELeWMFwj8eQiH0KmvsCl1V2lu/qx/CjOBmv4ADSZS5u8r4reMyjCXtxG7khqyiwH3IOMNdrON/Ugn94OUcRA==}
|
||||
|
||||
'@types/web-bluetooth@0.0.21':
|
||||
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
|
||||
|
||||
@ -2363,8 +2369,8 @@ packages:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
commander@14.0.2:
|
||||
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
|
||||
commander@14.0.3:
|
||||
resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
commander@7.2.0:
|
||||
@ -3299,6 +3305,7 @@ packages:
|
||||
|
||||
glob@10.5.0:
|
||||
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
|
||||
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
|
||||
hasBin: true
|
||||
|
||||
glob@13.0.0:
|
||||
@ -3846,8 +3853,8 @@ packages:
|
||||
lines-and-columns@1.2.4:
|
||||
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
|
||||
|
||||
lint-staged@16.2.7:
|
||||
resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==}
|
||||
lint-staged@16.3.2:
|
||||
resolution: {integrity: sha512-xKqhC2AeXLwiAHXguxBjuChoTTWFC6Pees0SHPwOpwlvI3BH7ZADFPddAdN3pgo3aiKgPUx/bxE78JfUnxQnlg==}
|
||||
engines: {node: '>=20.17'}
|
||||
hasBin: true
|
||||
|
||||
@ -4202,10 +4209,6 @@ packages:
|
||||
namespace-emitter@2.0.1:
|
||||
resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
|
||||
|
||||
nano-spawn@2.0.0:
|
||||
resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==}
|
||||
engines: {node: '>=20.17'}
|
||||
|
||||
nanoid@3.3.11:
|
||||
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
@ -4464,11 +4467,6 @@ packages:
|
||||
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
pidtree@0.6.0:
|
||||
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
|
||||
engines: {node: '>=0.10'}
|
||||
hasBin: true
|
||||
|
||||
pinia-plugin-persistedstate@4.7.1:
|
||||
resolution: {integrity: sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ==}
|
||||
peerDependencies:
|
||||
@ -5352,6 +5350,9 @@ packages:
|
||||
resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
typeit@8.8.7:
|
||||
resolution: {integrity: sha512-sSVpy+cjeFP6Z+fZqiHzUSShg5yYFeJEt/Qut/bX945+Axyq+Yq+GPOuuk+sofoccSv8nNX/ibOOHkbki2mEpg==}
|
||||
|
||||
typescript@5.9.3:
|
||||
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||
engines: {node: '>=14.17'}
|
||||
@ -6817,6 +6818,8 @@ snapshots:
|
||||
|
||||
'@types/unist@3.0.3': {}
|
||||
|
||||
'@types/web-animations-js@2.2.16': {}
|
||||
|
||||
'@types/web-bluetooth@0.0.21': {}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
|
||||
@ -7906,7 +7909,7 @@ snapshots:
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
|
||||
commander@14.0.2: {}
|
||||
commander@14.0.3: {}
|
||||
|
||||
commander@7.2.0: {}
|
||||
|
||||
@ -9512,14 +9515,13 @@ snapshots:
|
||||
|
||||
lines-and-columns@1.2.4: {}
|
||||
|
||||
lint-staged@16.2.7:
|
||||
lint-staged@16.3.2:
|
||||
dependencies:
|
||||
commander: 14.0.2
|
||||
commander: 14.0.3
|
||||
listr2: 9.0.5
|
||||
micromatch: 4.0.8
|
||||
nano-spawn: 2.0.0
|
||||
pidtree: 0.6.0
|
||||
string-argv: 0.3.2
|
||||
tinyexec: 1.0.2
|
||||
yaml: 2.8.2
|
||||
|
||||
listr2@9.0.5:
|
||||
@ -10071,8 +10073,6 @@ snapshots:
|
||||
|
||||
namespace-emitter@2.0.1: {}
|
||||
|
||||
nano-spawn@2.0.0: {}
|
||||
|
||||
nanoid@3.3.11: {}
|
||||
|
||||
nanoid@5.1.6: {}
|
||||
@ -10315,8 +10315,6 @@ snapshots:
|
||||
|
||||
picomatch@4.0.3: {}
|
||||
|
||||
pidtree@0.6.0: {}
|
||||
|
||||
pinia-plugin-persistedstate@4.7.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))):
|
||||
dependencies:
|
||||
defu: 6.1.4
|
||||
@ -11322,6 +11320,10 @@ snapshots:
|
||||
typed-array-buffer: 1.0.3
|
||||
typed-array-byte-offset: 1.0.4
|
||||
|
||||
typeit@8.8.7:
|
||||
dependencies:
|
||||
'@types/web-animations-js': 2.2.16
|
||||
|
||||
typescript@5.9.3: {}
|
||||
|
||||
ufo@1.6.1: {}
|
||||
|
||||
Reference in New Issue
Block a user