From 81643c61aee4178ba518a3494f1ddca96370a5a8 Mon Sep 17 00:00:00 2001 From: rjl <98n9@163.com> Date: Mon, 2 Mar 2026 09:53:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=95=8C=E9=9D=A2=E4=BA=A4=E4=BA=92=E4=B8=8E=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在队伍选择页面增加卷轴展开动画,优化视觉体验 - 为游戏页面添加实时统计图表,使用 ECharts 展示各队答题进度 - 调整题目渲染器中图片的最大宽度为 200px - 在路由配置中隐藏 results_results-detail-copy 菜单项 - 修复 API 函数命名和参数类型,更新接口返回类型定义 - 移动拼音听写题目数据文件到 store 目录 - 更新 VSCode 拼写检查配置,添加 ECharts 单词 --- .vscode/settings.json | 3 +- .../custom/user/CompetitionLayout.vue | 2 +- apps/admin/src/router/elegant/routes.ts | 3 +- apps/admin/src/service/api/game.ts | 10 +- apps/admin/src/service/api/result.ts | 2 +- apps/admin/src/typings/api/Competition.d.ts | 46 +++ .../views/results/results-detail/index.vue | 203 ++++++----- .../results-detail/modules/GroupTabs.vue | 4 +- apps/admin/src/views/user/cover/index.vue | 54 ++- apps/admin/src/views/user/game/index.vue | 104 +++--- .../views/user/game/modules/LineCharts.vue | 136 +++++++ .../views/user/modules/QuestionRenderer.vue | 4 +- apps/admin/src/views/user/teams/index.vue | 156 +++++--- apps/question-importer/src/index.ts | 2 +- apps/question-importer/store/反义词.json | 340 ++++++++++++++++++ .../{asset => store}/拼音听写.json | 0 .../{asset => store}/拼音听写2.json | 0 .../{asset => store}/根据偏旁写汉字.json | 0 .../{asset => store}/词语听写.json | 0 .../{asset => store}/诗词听写.json | 0 20 files changed, 866 insertions(+), 203 deletions(-) create mode 100644 apps/admin/src/views/user/game/modules/LineCharts.vue create mode 100644 apps/question-importer/store/反义词.json rename apps/question-importer/{asset => store}/拼音听写.json (100%) rename apps/question-importer/{asset => store}/拼音听写2.json (100%) rename apps/question-importer/{asset => store}/根据偏旁写汉字.json (100%) rename apps/question-importer/{asset => store}/词语听写.json (100%) rename apps/question-importer/{asset => store}/诗词听写.json (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8a63266..e764788 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -38,6 +38,7 @@ ], "totvsLanguageServer.welcomePage": false, "cSpell.words": [ - "activityinfo" + "activityinfo", + "Echarts" ] // ` } diff --git a/apps/admin/src/components/custom/user/CompetitionLayout.vue b/apps/admin/src/components/custom/user/CompetitionLayout.vue index b3cb8af..858b8d4 100644 --- a/apps/admin/src/components/custom/user/CompetitionLayout.vue +++ b/apps/admin/src/components/custom/user/CompetitionLayout.vue @@ -273,7 +273,7 @@ onMounted(() => { justify-content: center; // 让内容决定位置,通常是 margin-top // margin: 40px auto; z-index: 10; - padding-bottom: 60px; + padding-bottom: 20px; width: 100%; // 确保内容宽度 } diff --git a/apps/admin/src/router/elegant/routes.ts b/apps/admin/src/router/elegant/routes.ts index ec175cf..cfc16fa 100644 --- a/apps/admin/src/router/elegant/routes.ts +++ b/apps/admin/src/router/elegant/routes.ts @@ -203,7 +203,8 @@ export const generatedRoutes: GeneratedRoute[] = [ component: 'view.results_results-detail-copy', meta: { title: 'results_results-detail-copy', - i18nKey: 'route.results_results-detail-copy' + i18nKey: 'route.results_results-detail-copy', + hideInMenu: true } }, { diff --git a/apps/admin/src/service/api/game.ts b/apps/admin/src/service/api/game.ts index 0a72407..a4cd105 100644 --- a/apps/admin/src/service/api/game.ts +++ b/apps/admin/src/service/api/game.ts @@ -42,16 +42,16 @@ export function fetchGetQuestionDetail(ActivityID: string, questionID: number) { /** 提交抽题结果 */ export function fetchSubmitQuestionResult(data: Api.Competition.QuestionAddParams) { return request>({ - url: `/Base/ActivityMain/AddActivity_TeamQuestionUse/?RoomID=${data.RoomID}&MainID=${data.MainID}&TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}&QuestionDetaiID=${data.QuestionDetaiID}`, + url: `/Base/ActivityMain/AddActivity_TeamQuestionUse/?RoomID=${data.RoomID}&MainID=${data.MainID}&TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}&QuestionDetaiID=${data.QuestionDetaiID}&TeamGroupQuestionID=${data.TeamGroupQuestionID}`, method: 'post', data, }) } /** 获取游戏现场统计结果 */ -export function fetchGetGameStatistics(data: { TeamGroupID: number, QuestionID: number, QuestionDetaiID: number }) { - return request({ - url: `/Base/ActivityMain/GetTeamQuestionUseByTeamGroupIDAndQuestionID/?TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}&QuestionDetaiID=${data.QuestionDetaiID}`, +export function fetchGetGameStatistics(data: { TeamGroupID: number, QuestionID: number }) { + return request>({ + url: `/Base/ActivityMain/GetTeamQuestionUseByTeamGroupIDAndQuestionID/?TeamGroupID=${data.TeamGroupID}&QuestionID=${data.QuestionID}`, method: 'post', data, }) @@ -87,7 +87,7 @@ export function fetchGetQuestionTableByActivityID(ActivityID: string) { /** 根据 roomid查询当前正在比赛的题目 */ export function fetchGetCurrentQuestionByRoomID(RoomID: number) { - return request>({ + return request>({ url: `/Base/ActivityMain/SelectTask?RoomID=${RoomID}`, method: 'post', data: { diff --git a/apps/admin/src/service/api/result.ts b/apps/admin/src/service/api/result.ts index d1f5ff2..9833e34 100644 --- a/apps/admin/src/service/api/result.ts +++ b/apps/admin/src/service/api/result.ts @@ -1,7 +1,7 @@ import { request } from '../request' /** 评委消费题目,表示用了该题目 */ -export function fetchUpdateCurrentQuestionUse(TeamGroupID: string) { +export function updateCurrentQuestionUse(TeamGroupID: number) { return request({ url: `/Base/ActivityMain/UpdateCurrentQuestionUse?TeamGroupID=${TeamGroupID}`, method: 'post', diff --git a/apps/admin/src/typings/api/Competition.d.ts b/apps/admin/src/typings/api/Competition.d.ts index 8ddba17..4fbcc57 100644 --- a/apps/admin/src/typings/api/Competition.d.ts +++ b/apps/admin/src/typings/api/Competition.d.ts @@ -92,6 +92,7 @@ declare namespace Api { TeamGroupID: number QuestionID: number QuestionDetaiID: number + TeamGroupQuestionID: number } interface QuestionListDetailRound { /** 题目 id */ @@ -188,6 +189,36 @@ declare namespace Api { IsCompleted: boolean } + /** 获取当前正在比赛的信息 */ + interface GetCurrentQuestionInfo { + /** 答案 */ + Answer: string + /** 结束时间 */ + EndTime: string + /** 高度 */ + Height: number + /** 分值 */ + Point: number + /** 题目详情 id */ + QuestionDetailID: number + /** 题目 id */ + QuestionID: number + /** 题目规则 */ + QuestionRule: number + /** 开始时间 */ + StartTime: string + /** 任务模板列表 */ + TaskTemplete: any[] + /** 队伍分组 id */ + TeamGroupID: number + /** 队伍分组题目 id */ + TeamGroupQuestionID: number + /** 队伍列表 */ + TeamList: any[] + /** 宽度 */ + Width: number + } + /** update room request */ interface UpdateRoomRequest { /** 活动 id */ @@ -253,6 +284,21 @@ declare namespace Api { HeadImg?: string } + interface TeamAnswerData { + Id: number + MainId: number + TeamGroupId: number + TeamId: number + QuestionId: number + QuestionDetailId: number | null + UserAnswerPicture: string + UserAnswerFont: string // JSON string + TeamName: string + Points: number + ResultPotins: number + Status: number + } + interface QuestionListRecord { /** 活动题目名称 */ ActitvityQuestionName: string diff --git a/apps/admin/src/views/results/results-detail/index.vue b/apps/admin/src/views/results/results-detail/index.vue index 00960d9..8bd6104 100644 --- a/apps/admin/src/views/results/results-detail/index.vue +++ b/apps/admin/src/views/results/results-detail/index.vue @@ -6,6 +6,7 @@ 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 { updateCurrentQuestionUse } from '@/service/api/result' import GroupTabs, { type GroupItem } from './modules/GroupTabs.vue' const route = useRoute() @@ -19,7 +20,7 @@ const currentQuestionType = ref('') // 当前选中的题目类型 const groups = ref([]) const questionList = ref<(GroupItem & { type: string })[]>([]) -const currentQuestion = ref() // 当前正在参赛的题目 +const currentQuestion = ref() // 当前正在参赛的题目 // 计算当前题目类型对应的布局 const currentLayout = computed(() => { @@ -36,34 +37,10 @@ const currentLayout = computed(() => { return gridTypes.includes(currentQuestionType.value as QuestionCategoryEnum) ? 'grid' : 'list' }) -interface AnswerItem { - id: number - label?: string - imageUrl: string - status: 'correct' | 'wrong' - TeamQuestionUseID: number - Guid: string -} - -interface TeamAnswerData { - Id: number - MainId: number - TeamGroupId: number - TeamId: number - QuestionId: number - QuestionDetailId: number | null - UserAnswerPicture: string - UserAnswerFont: string // JSON string - TeamName: string - Points: number - ResultPotins: number - Status: number -} - interface TeamResult { TeamName: string UserAnswerPicture: string - Answers: AnswerItem[] + Answers: any[] Points: number TeamId: number } @@ -72,8 +49,8 @@ interface TeamResult { const teamResults = ref([]) // 切换状态逻辑:点击后 Correct <-> Wrong -function toggleStatus(team: TeamResult, item: AnswerItem) { - item.status = item.status === 'correct' ? 'wrong' : 'correct' +function toggleStatus(team: TeamResult, item: any) { + item.Status = item.Status === 1 ? 0 : 1 } function handleNext() { @@ -88,9 +65,25 @@ function handleNext() { } } -function handlePublish() { - // 发布结果逻辑 - message.success('结果已发布') +/** + * 根据房间当前题目,自动同步选中题目和当前正在比赛的组 + * 逻辑: + * - 如果后端返回了当前题目的 QuestionID,并且题目列表已加载,则将 currentQuestionId 设为该题 + * - 同时同步 currentQuestionType,便于切换布局 + * - 若找不到匹配项,则维持现状(由首次加载保持为第一题) + */ +function syncCurrentQuestionSelection() { + const qid = currentQuestion.value?.QuestionID + const gid = currentQuestion.value?.TeamGroupID + if (!qid || questionList.value.length === 0) + return + const hit = questionList.value.find(q => Number(q.id) === Number(qid)) + if (gid) + currentGroupId.value = gid + if (hit) { + currentQuestionId.value = hit.id + currentQuestionType.value = (hit as any).type || '' + } } // Mock 数据生成器 @@ -148,15 +141,12 @@ function generateMockData() { UserAnswerPicture: 'https://placehold.co/800x400?text=Original+Answer+Sheet', Points: 0, Answers: Array.from({ length: answerCount }).map((__, j) => ({ - id: j + 1, - label: answerCount > 1 ? `${j + 1}.` : '', // 只有多个答案时才显示序号 - // Grid 类型用方形图,List 类型用长方形图 - imageUrl: answerCount > 1 + AnswerValuePicture: answerCount > 1 ? `https://placehold.co/100x100?text=Answer+${j + 1}` : `https://placehold.co/400x100?text=Long+Answer`, - status: Math.random() > 0.5 ? 'correct' : 'wrong', + Status: Math.random() > 0.5 ? 1 : 0, TeamQuestionUseID: 123, - Guid: `mock-guid-${j}`, + Guid: `mock-guid-${i}-${j}`, })), } }) @@ -179,7 +169,7 @@ async function fetchGroups() { const list = data?.data || [] groups.value = list.map((item: any) => ({ id: item.Id, - name: item.Name, + name: item.Id, })) // 默认选中第一个分组 if (groups.value.length > 0 && !currentGroupId.value) { @@ -204,16 +194,20 @@ async function fetchQuestions() { return } const list = data?.data || [] - questionList.value = list.map((item: any) => ({ - id: item.ID, // 注意大小写,根据接口返回调整 - name: item.Name || `题目 ${item.ID}`, - type: item.Type || '', // 假设接口返回 Type + console.warn('question list', list) + + questionList.value = list.map((item, idx) => ({ + id: item.ID, + name: item.ID || `题目 ${idx + 1}`, + type: item.UIType || '', })) // 默认选中第一个题目 if (questionList.value.length > 0 && !currentQuestionId.value) { currentQuestionId.value = questionList.value[0].id currentQuestionType.value = questionList.value[0].type } + // 题目加载完成后尝试同步到“当前进行中的题目” + syncCurrentQuestionSelection() } catch (error: any) { message.error(error.message || '获取题目失败') @@ -234,6 +228,9 @@ async function fetchCurrentQuestion() { return } currentQuestion.value = data?.data || {} + console.warn('current question', currentQuestion.value) + // 拉取当前题目信息后尝试同步选中题 + syncCurrentQuestionSelection() } catch (error: any) { message.error(error.message || '获取当前题目失败') @@ -244,7 +241,7 @@ async function fetchCurrentQuestion() { * 获取答题卡数据 */ async function fetchAnswerData() { - if (!currentGroupId.value || !currentQuestionId.value) + if (!currentGroupId.value || !currentQuestionId.value || !currentQuestion.value?.QuestionDetailID) return // 如果是 Mock 环境,重新生成一下随机答案 @@ -267,14 +264,12 @@ async function fetchAnswerData() { UserAnswerPicture: 'https://placehold.co/800x400?text=Original+Answer+Sheet', Points: 0, Answers: Array.from({ length: answerCount }).map((__, j) => ({ - id: j + 1, - label: answerCount > 1 ? `${j + 1}.` : '', - imageUrl: answerCount > 1 + AnswerValuePicture: answerCount > 1 ? `https://placehold.co/100x100?text=Answer+${j + 1}` : `https://placehold.co/400x100?text=Long+Answer`, - status: Math.random() > 0.5 ? 'correct' : 'wrong', + Status: Math.random() > 0.5 ? 1 : 0, TeamQuestionUseID: 123, - Guid: `mock-guid-${j}`, + Guid: `mock-guid-${i}-${j}`, })), } }) @@ -288,7 +283,7 @@ async function fetchAnswerData() { const params = { TeamGroupID: Number(currentGroupId.value), QuestionID: Number(currentQuestionId.value), - QuestionDetaiID: 0, // 暂时传0,如果有详情ID需补充 + // QuestionDetaiID: currentQuestion.value?.QuestionDetailID || 0, } const { data, error } = await fetchGetGameStatistics(params) @@ -298,24 +293,16 @@ async function fetchAnswerData() { } // 假设返回的数据结构是数组,取第一条或者根据逻辑取特定的一条 - // 根据需求描述,返回的是一个对象结构 - const result = data?.data as unknown as TeamAnswerData[] - // 注意:fetchGetGameStatistics 返回类型是 App.Service.Response,data.data 类型未知,这里强制转换以便演示 - // 实际接口可能返回数组,取第一个有数据的 + const result = data?.data || [] + console.warn('game statistics result', result) if (result && result.length > 0) { teamResults.value = result.map((answerData) => { - let parsedAnswers: AnswerItem[] = [] + let parsedAnswers: any[] = [] try { const parsedFonts = JSON.parse(answerData.UserAnswerFont) - parsedAnswers = parsedFonts.map((item: any, index: number) => ({ - id: index + 1, - label: `${index + 1}.`, - imageUrl: item.AnswerValuePicture, // 注意去除可能存在的反斜杠转义 - status: item.Status === 1 ? 'correct' : 'wrong', // 假设 1 是正确,0 是错误,根据实际调整 - TeamQuestionUseID: item.TeamQuestionUseID, - Guid: item.Guid, - })) + parsedAnswers = parsedFonts + console.warn('parsed fonts', parsedFonts) } catch (e) { console.error('解析 UserAnswerFont 失败', e) @@ -340,6 +327,47 @@ async function fetchAnswerData() { } } +/** + * 调转到当前题目 + */ +async function handleNexCurrentQuestion() { + await fetchCurrentQuestion() + if (currentQuestionId.value && currentGroupId.value) { + currentQuestionId.value = currentQuestion.value?.QuestionID || currentQuestionId.value + currentGroupId.value = currentQuestion.value?.TeamGroupID || currentGroupId.value + } +} + +function handlePublish() { + if (currentQuestion.value?.TeamGroupQuestionID) { + window.$dialog?.info({ + title: '发布确认', + content: '确定要发布当前题目吗?', + positiveText: '发布', + negativeText: '取消', + onPositiveClick: async () => { + await fetchUpdateCurrentQuestionUse(currentQuestion.value?.TeamGroupQuestionID || 0) + }, + }) + } +} + +/** + * 消费并发布当前题目 + */ +async function fetchUpdateCurrentQuestionUse(TeamGroupQuestionID: number) { + try { + const { data, error } = await updateCurrentQuestionUse(TeamGroupQuestionID) + console.warn('updateCurrentQuestionUse result', data) + if (!error) { + window?.$message?.success('结果已发布') + } + } + catch (error: any) { + window?.$message?.error(error.message) + } +} + // 监听分组和题目的变化,重新获取答题数据 watch([currentGroupId, currentQuestionId], () => { if (currentGroupId.value && currentQuestionId.value) { @@ -352,9 +380,10 @@ watch([currentGroupId, currentQuestionId], () => { }) onMounted(async () => { - await fetchCurrentQuestion() await fetchGroups() - await fetchQuestions() + // 并行拉取题目与当前题目,完成后做一次同步 + await Promise.all([fetchQuestions(), fetchCurrentQuestion()]) + syncCurrentQuestionSelection() // generateMockData() }) @@ -378,10 +407,13 @@ onMounted(async () => {
当前进度 {{ questionList.findIndex(q => q.id === currentQuestionId) + 1 }}/{{ questionList.length }}
+ + 当前题目 + 下一题 - + 发布结果 @@ -398,11 +430,11 @@ onMounted(async () => { v-for="team in teamResults" :key="team.TeamId" :title="team.TeamName ? `${team.TeamName}` : '队伍信息'" hoverable > -
+
{
- - + +
+ {{ item.AnswerText }} +
-
- +
+
-
- {{ item.label }} +
+ {{ idx + 1 }}.
@@ -450,25 +481,25 @@ onMounted(async () => {
- {{ item.label }} + {{ idx + 1 }}.
- +
- +
diff --git a/apps/admin/src/views/results/results-detail/modules/GroupTabs.vue b/apps/admin/src/views/results/results-detail/modules/GroupTabs.vue index 22bc25a..a0a5517 100644 --- a/apps/admin/src/views/results/results-detail/modules/GroupTabs.vue +++ b/apps/admin/src/views/results/results-detail/modules/GroupTabs.vue @@ -3,12 +3,12 @@ import { NButton } from 'naive-ui' export interface GroupItem { id: number | string - name: string + name: string | number } export interface QuestionListItem { id: number | string - name: string + name: string | number } defineProps<{ diff --git a/apps/admin/src/views/user/cover/index.vue b/apps/admin/src/views/user/cover/index.vue index d06c92d..f758fa4 100644 --- a/apps/admin/src/views/user/cover/index.vue +++ b/apps/admin/src/views/user/cover/index.vue @@ -126,9 +126,15 @@ async function initSyncRouteParams() { } } +const showCards = ref(false) + onMounted(async () => { await initSyncRouteParams() await getQuestions() + // 页面加载 300ms 后显示卡片,开始动画 + setTimeout(() => { + showCards.value = true + }, 500) }) @@ -142,9 +148,16 @@ onMounted(async () => {
-
+
@@ -174,7 +187,7 @@ onMounted(async () => {
-
+
@@ -182,6 +195,41 @@ onMounted(async () => { diff --git a/apps/admin/src/views/user/modules/QuestionRenderer.vue b/apps/admin/src/views/user/modules/QuestionRenderer.vue index af72f41..48e583a 100644 --- a/apps/admin/src/views/user/modules/QuestionRenderer.vue +++ b/apps/admin/src/views/user/modules/QuestionRenderer.vue @@ -9,8 +9,6 @@ const currentQuestionDetail = computed(() => store.currentQuestionDetail) // console.log(currentQuestionMainInfo.value, 'currentQuestionMainInfo') // 题目 const title = computed(() => currentQuestionMainInfo.value?.QuestionList?.QuestionContent) -// 归属大纲 -// const mainTitle = computed(() => currentQuestionMainInfo.value?.QuestionList?.Name) // 题目内容 const content = computed(() => currentQuestionDetail.value.Name) // 模版类型 @@ -380,7 +378,7 @@ watch( .rich-content { :deep(img) { - max-width: 50%; + max-width: 200px; height: auto; object-fit: contain; margin: 0 auto; diff --git a/apps/admin/src/views/user/teams/index.vue b/apps/admin/src/views/user/teams/index.vue index 37bf5bd..5f04f51 100644 --- a/apps/admin/src/views/user/teams/index.vue +++ b/apps/admin/src/views/user/teams/index.vue @@ -46,7 +46,9 @@ async function getTeams() { } } -const showContent = ref(false) +const showBackground = ref(false) +const showTitle = ref(false) +const showList = ref(false) function handleBack() { routerBack() @@ -63,10 +65,21 @@ function selectTeam(_id: number) { } onMounted(() => { + getTeams() + // 1. 背景卷轴展开 - 稍微慢一点开始,给人一种准备的感觉 setTimeout(() => { - showContent.value = true - getTeams() - }, 100) + showBackground.value = true + }, 300) + + // 2. 标题浮现 - 等卷轴展开一大半再出来 (卷轴动画约 1.5s,这里设为 1200ms) + setTimeout(() => { + showTitle.value = true + }, 1200) + + // 3. 列表出现 - 等卷轴完全展开并定住后再出 (卷轴动画结束需 1.5s,这里给 1600ms) + setTimeout(() => { + showList.value = true + }, 1600) }) @@ -74,40 +87,90 @@ onMounted(() => {
-
- - -
-
- - 队伍名单 - + + +
+ + +
+
+ + 队伍名单 + +
-
-
+ -
- -
-
- team-icon +
+ +
+
+ team-icon +
+
+ {{ item.name }} +
-
- {{ item.name }} -
-
- + +
+
-
-
+
diff --git a/apps/question-importer/src/index.ts b/apps/question-importer/src/index.ts index 84aeb93..b27de09 100644 --- a/apps/question-importer/src/index.ts +++ b/apps/question-importer/src/index.ts @@ -6,7 +6,7 @@ import express from 'express' import fs from 'fs-extra' const app = express() -const PORT = 3001 // 避免与前端端口冲突(通常是 3000 或 9527) +const PORT = 3001 console.log('Script started') console.log('Arguments:', process.argv) diff --git a/apps/question-importer/store/反义词.json b/apps/question-importer/store/反义词.json new file mode 100644 index 0000000..37e4831 --- /dev/null +++ b/apps/question-importer/store/反义词.json @@ -0,0 +1,340 @@ +{ + "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": "" + } + ] +} diff --git a/apps/question-importer/asset/拼音听写.json b/apps/question-importer/store/拼音听写.json similarity index 100% rename from apps/question-importer/asset/拼音听写.json rename to apps/question-importer/store/拼音听写.json diff --git a/apps/question-importer/asset/拼音听写2.json b/apps/question-importer/store/拼音听写2.json similarity index 100% rename from apps/question-importer/asset/拼音听写2.json rename to apps/question-importer/store/拼音听写2.json diff --git a/apps/question-importer/asset/根据偏旁写汉字.json b/apps/question-importer/store/根据偏旁写汉字.json similarity index 100% rename from apps/question-importer/asset/根据偏旁写汉字.json rename to apps/question-importer/store/根据偏旁写汉字.json diff --git a/apps/question-importer/asset/词语听写.json b/apps/question-importer/store/词语听写.json similarity index 100% rename from apps/question-importer/asset/词语听写.json rename to apps/question-importer/store/词语听写.json diff --git a/apps/question-importer/asset/诗词听写.json b/apps/question-importer/store/诗词听写.json similarity index 100% rename from apps/question-importer/asset/诗词听写.json rename to apps/question-importer/store/诗词听写.json