Compare commits

6 Commits

Author SHA1 Message Date
rjl
2fad025496 feat(admin): 新增品牌logo资源并优化用户界面组件
- 新增重庆、树人、文字logo资源(PNG和WebP格式)
- 新增用户界面背景图片资源(内容背景、对框、主页背景等)
- 优化ActionButton组件样式(自适应宽度、禁用状态样式)
- 更新CompetitionLayout组件header布局,集成新logo资源
- 优化TianZiGe组件功能和交互体验
- 更新竞赛相关页面组件(QuestionConfig、draw、QuestionRenderer等)
- 更新排名列表页面样式和功能
- 更新诗词常识题库数据
- 完善Competition类型定义
2026-03-18 16:58:13 +08:00
rjl
02b4720b34 feat(admin): 优化用户界面组件并新增自定义按钮样式
- 新增按钮背景图片资源(btn-bg.png、progress-title.png、title-bg3.png、title-bg4.png)
- 扩展 ActionButton 组件支持自定义按钮类型,新增 custom 类型用于背景图片驱动的按钮
- 添加 btnBg 和 fontSize 属性到 ActionButton,支持动态背景和字体大小配置
- 重构 ActionButton 样式结构,分离 standard-btn 和 custom-btn 两种按钮样式
- 优化按钮禁用状态的样式处理和交互反馈
- 更新 CompetitionLayout 组件支持新的标题背景类型(titleBg3、titleBg4)
- 新增 titleTextColor 和 fontSize 属性到 CompetitionLayout,增强标题和按钮的定制化能力
- 更新所有用户页面组件(cover、draw、game、groups、rules、teams)以适配新的按钮和布局配置
2026-03-17 17:51:12 +08:00
rjl
8964fcdea7 feat(admin): 优化用户界面资源并更新题库数据
- 添加首页背景图片资源 (home-bg.webp)
- 更新用户头像资源文件 (ydzx.png)
- 优化竞赛布局组件交互体验
- 改进题目渲染器显示效果
- 更新题库数据:新增诗词常识题库
- 移除联想对对碰题库
- 更新汉字听写、诗词理解选择题、逆向接诗句等题库内容
- 调整VSCode配置并禁用MCP代理功能
2026-03-17 15:28:11 +08:00
rjl
771fb807eb feat(admin): 新增题目类型、优化题目库管理并添加拼音助手
- 新增6种题目类型枚举:逆向接诗句、场景猜诗句、联想对对碰、字词飞花令、诗词常识、换字组成语
- 新增QuestionDrawer组件,支持富文本编辑和拼音转换功能
- 优化CategoryTree组件,增加分类选择本地存储和自动填充题目类型
- 更新question API接口,简化新增和更新题目库的参数传递
- 扩展QuestionRenderer组件,支持新增的题目类型渲染
- 添加多个题目库JSON文件,包含成语、诗词常识、字词飞花令等题目数据
- 调整环境配置,更新开发环境API地址
2026-03-16 17:59:49 +08:00
rjl
782c61a38c chore(admin): 优化PWA配置并更新资源文件
- 增强PWA开发环境支持,添加devOptions配置以便调试
- 优化Workbox缓存策略,排除大型SVG文件预缓存
- 添加运行时缓存规则支持SVG、图片等资源的CacheFirst策略
- 更新PWA manifest图标路径,使用public文件夹中的新图标资源
- 添加Service Worker注册文件和Workbox库文件
- 替换favicon.svg为favicon.ico,新增多种尺寸的PWA图标
- 生成PWA构建报告文件
- 优化manifest描述信息
2026-03-16 10:55:53 +08:00
rjl
40a6850c3f chore(admin): 优化构建配置并升级资源格式
- 新增构建插件:打包分析、压缩、自动部署、图片优化和PWA支持
- 将SVG资源转换为WebP格式以提升加载性能
- 添加新的背景图片资源用于用户界面优化
- 更新环境配置:调整基础URL和服务地址
- 优化用户界面组件以适配新的资源格式
- 更新package.json依赖以支持新的构建功能
- 改进构建流程以支持自动部署和性能监控
2026-03-13 17:52:13 +08:00
104 changed files with 10013 additions and 3466 deletions

View File

@ -41,5 +41,6 @@
"activityinfo",
"Echarts",
"Typeit"
] // `
],
"kiroAgent.configureMCP": "Disabled" // `
}

View File

@ -1,6 +1,6 @@
# 应用的基础URL默认为 "/"
# 如果使用子目录,必须以 "/" 结尾,例如 "/admin/" 而不是 "/admin"
# VITE_BASE_URL='/admin'
VITE_BASE_URL='/'
# VITE_BASE_URL="https://api.qyzhjy.com"

View File

@ -3,9 +3,9 @@
# VITE_SERVICE_BASE_URL=http://192.168.5.140:9999
# VITE_SERVICE_BASE_URL=https://api.qyzhjy.com
# VITE_SERVICE_BASE_URL=http://api.ydzx.qyzhjy.com
VITE_SERVICE_BASE_URL=http://api.ydzx.qyzhjy.com
VITE_SERVICE_BASE_URL=http://172.16.10.130:5000
VITE_OTHER_SERVICE_BASE_URL= `{
"demo": "http://localhost:9528"

View File

@ -0,0 +1,11 @@
import type { PluginOption } from 'vite'
import { visualizer } from 'rollup-plugin-visualizer'
export function setupAnalyzer() {
return visualizer({
open: true,
gzipSize: true,
brotliSize: true,
filename: 'report.html',
}) as PluginOption
}

View File

@ -0,0 +1,11 @@
import viteCompression from 'vite-plugin-compression'
export function setupCompression() {
return viteCompression({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'gzip',
ext: '.gz',
})
}

View File

@ -0,0 +1,21 @@
import { viteAutoDeployPlugin } from 'vite-auto-deploy'
import { name } from '../../package.json'
export function setupDeploy(isBuild: boolean) {
return viteAutoDeployPlugin({
/** 上传地址 */
uploadUrl: 'http://47.109.17.238:8200/api/upload/code/deploy',
/** 项目名称 (如果多个项目都是用的同上传地址时,服务端可用此字段区分是哪一个项目) */
projectKey: name,
/** 上传完成后,是否保留压缩包到本地 */
saveLocalZip: true,
/** 是否开启自动部署 */
autoDeploy: isBuild,
headers: {
'Custom-Timestamp': new Date().getTime().toString(),
'Custom-Run-Platform': 'app',
'Custom-Device-Id': Math.random().toString(36).substring(2),
'Custom-Os-Name': 'windows',
},
})
}

View File

@ -0,0 +1,51 @@
import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'
export function setupImageOptimizer() {
return ViteImageOptimizer({
logStats: true,
// SVG 优化配置
svg: {
multipass: true,
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false,
cleanupIds: false,
},
},
},
'sortAttrs',
],
},
// PNG 高质量压缩
png: {
quality: 90,
compressionLevel: 9,
},
// JPEG 优化
jpeg: {
quality: 85,
mozjpeg: true,
},
jpg: {
quality: 85,
mozjpeg: true,
},
// WebP 转换
webp: {
quality: 80,
lossless: false,
force: true,
},
includePublic: true,
cache: true,
cacheLocation: 'node_modules/.cache/image-optimizer',
})
}

View File

@ -2,14 +2,20 @@ import type { PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import progress from 'vite-plugin-progress'
import { setupAnalyzer } from './analyzer'
import { setupCompression } from './compression'
import { setupDeploy } from './deploy'
import { setupDevtoolsPlugin } from './devtools'
import { setupHtmlPlugin } from './html'
import { setupImageOptimizer } from './image-optimizer'
import { setupPWA } from './pwa'
import { setupElegantRouter } from './router'
import { setupUnocss } from './unocss'
import { setupUnplugin } from './unplugin'
export function setupVitePlugins(viteEnv: Env.ImportMeta, buildTime: string) {
export function setupVitePlugins(viteEnv: Env.ImportMeta, buildTime: string, isBuild: boolean) {
const plugins: PluginOption = [
// 基础插件
vue(),
vueJsx(),
setupDevtoolsPlugin(viteEnv),
@ -18,7 +24,18 @@ export function setupVitePlugins(viteEnv: Env.ImportMeta, buildTime: string) {
...setupUnplugin(viteEnv),
progress(),
setupHtmlPlugin(buildTime),
// 优化插件
setupImageOptimizer(),
setupCompression(),
setupPWA(),
setupDeploy(isBuild),
]
// 构建时添加打包分析插件
if (isBuild) {
plugins.push(setupAnalyzer())
}
return plugins
}

View File

@ -0,0 +1,76 @@
import type { PluginOption } from 'vite'
import { VitePWA } from 'vite-plugin-pwa'
export function setupPWA(): PluginOption {
return VitePWA({
registerType: 'autoUpdate',
// 添加 devOptions 以便在开发环境调试
devOptions: {
enabled: false, // 开发环境启用
type: 'module',
},
workbox: {
// 排除大型 SVG 文件,避免预缓存
globIgnores: [
'**/team-title-bg*.svg',
'**/cover-bg-active*.svg',
'**/*-bg-animation*.svg',
],
globPatterns: ['**/*.{js,css,html,ico,png,webp,jpg,jpeg}', '**/*.svg'],
runtimeCaching: [
// 字体缓存
{
urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
handler: 'CacheFirst',
options: {
cacheName: 'google-fonts-cache',
expiration: {
maxEntries: 10,
maxAgeSeconds: 60 * 60 * 24 * 365, // 1 year
},
},
},
// 大型 SVG 文件运行时缓存
{
urlPattern: /.*\.(svg)$/,
handler: 'CacheFirst',
options: {
cacheName: 'svg-cache',
expiration: {
maxEntries: 50,
maxAgeSeconds: 60 * 60 * 24 * 30, // 30 days
},
},
},
// 图片资源缓存
{
urlPattern: /.*\.(png|jpg|jpeg|webp|gif)$/,
handler: 'CacheFirst',
options: {
cacheName: 'images-cache',
expiration: {
maxEntries: 100,
maxAgeSeconds: 60 * 60 * 24 * 30, // 30 days
},
},
},
],
},
includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'masked-icon.svg'],
manifest: {
name: '阅读之星竞赛系统',
short_name: '阅读之星',
description: '树人研究院阅读之星竞赛系统',
theme_color: '#ffffff',
background_color: '#ffffff',
display: 'standalone',
orientation: 'landscape',
icons: [
{ src: 'images/pwa_logo_192.png', sizes: '192x192', type: 'image/png' },
{ src: 'images/pwa_logo_512.png', sizes: '512x512', type: 'image/png' },
{ src: 'images/pwa_logo_512.png', sizes: '512x512', type: 'image/png', purpose: 'any' },
{ src: 'images/pwa_logo_512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' },
],
},
})
}

View File

@ -2,7 +2,7 @@
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.svg" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="color-scheme" content="light dark" />
<title>%VITE_APP_TITLE%</title>

View File

@ -16,7 +16,7 @@
"dev": "vite --mode dev",
"dev:prod": "vite --mode prod",
"gen-route": "sa gen-route",
"lint": "eslint . --fix",
"lint": "eslint src --fix",
"prepare": "simple-git-hooks",
"preview": "vite preview",
"release": "sa release",
@ -82,6 +82,7 @@
"eslint": "9.39.2",
"eslint-plugin-vue": "10.6.2",
"kolorist": "1.8.0",
"rollup-plugin-visualizer": "^7.0.1",
"sass": "1.97.1",
"simple-git-hooks": "2.13.1",
"tsx": "4.21.0",
@ -90,7 +91,10 @@
"unplugin-vue-components": "30.0.0",
"vite": "7.3.0",
"vite-auto-deploy": "^2.0.34",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-image-optimizer": "^2.0.3",
"vite-plugin-progress": "0.0.7",
"vite-plugin-pwa": "^1.2.0",
"vite-plugin-svg-icons": "2.0.1",
"vite-plugin-vue-devtools": "8.0.5",
"vue-eslint-parser": "10.2.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,60 +0,0 @@
<svg width="100%" height="100%" version="1.1" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<path
d="M 200,866 C 100,866 50,779.4 100,692.8 L 200,519.6 C 220,485 240,490 265,499.6 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866"
fill="url(#LinearGradient)" fill-rule="nonzero" opacity="1" stroke="none" />
<path
d="M 420,866 C 455,861 478,846 500,827 C 614,696 615,597 500,517 C 394,444 333,374 380,207.82 L 260,415.67 C 240.22,450 254.37,465.1 275.28,481.79 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866"
fill="url(#LinearGradient_2)" fill-rule="nonzero" opacity="1" stroke="none" />
<path d="M 500,517 C 394,444 333,374 380,207.82 L 400,173.2 C 367,295 421,350 603,428 C 572,440 524,474 500,517"
fill="url(#LinearGradient_3)" fill-rule="nonzero" opacity="1" stroke="none" />
<path d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 572,440 524,474 500,517 C 615,597 614,696 500,827"
fill="url(#LinearGradient_4)" fill-rule="nonzero" opacity="1" stroke="none" />
<path d="M 400,173.2 C 367,295 421,350 603,428 C 690,389, 750,445 788,500 L 600,173.2 C 550,86.6 450,86.6 400,173.2"
fill="url(#LinearGradient_5)" fill-rule="nonzero" opacity="1" stroke="none" />
<path
d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 690,389, 750,445 788,500 C 816,554 797,606 750,640 L 500,827"
fill="url(#LinearGradient_6)" fill-rule="nonzero" opacity="1" stroke="none" />
<path
d="M 788,500 C 816,554 797,606 750,640 L 500,827 C 497,851 513,862 540,866 L 800,866 C 900,866 950,779.4 900,692.8 L 788,500"
fill="url(#LinearGradient_7)" fill-rule="nonzero" opacity="1" stroke="none" />
</g>
<defs>
<linearGradient gradientTransform="matrix(104.391 -73.3432 73.3432 104.391 277.441 710.122)"
gradientUnits="userSpaceOnUse" id="LinearGradient" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#373ebf" />
<stop offset="1" stop-color="#5058e6" />
</linearGradient>
<linearGradient gradientTransform="matrix(-173.747 557.324 -557.324 -173.747 508.829 258.172)"
gradientUnits="userSpaceOnUse" id="LinearGradient_2" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#c2d6ff" />
<stop offset="1" stop-color="#646cff" />
</linearGradient>
<linearGradient gradientTransform="matrix(157.951 295.666 -295.666 157.951 382.944 193.642)"
gradientUnits="userSpaceOnUse" id="LinearGradient_3" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#5058e6" />
<stop offset="1" stop-color="#373ebf" />
</linearGradient>
<linearGradient gradientTransform="matrix(-44.3023 219.578 -219.578 -44.3023 619.69 469.652)"
gradientUnits="userSpaceOnUse" id="LinearGradient_4" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#91a7ff" />
<stop offset="1" stop-color="#5058e6" />
</linearGradient>
<linearGradient gradientTransform="matrix(125.52 334.256 -334.256 125.52 539.723 235.139)"
gradientUnits="userSpaceOnUse" id="LinearGradient_5" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#646cff" />
<stop offset="1" stop-color="#c2d6ff" />
</linearGradient>
<linearGradient gradientTransform="matrix(-241.23 357.206 -357.206 -241.23 754.054 449.312)"
gradientUnits="userSpaceOnUse" id="LinearGradient_6" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#c2d6ff" />
<stop offset="1" stop-color="#646cff" />
</linearGradient>
<linearGradient gradientTransform="matrix(125.978 210.065 -210.065 125.978 596.433 613.665)"
gradientUnits="userSpaceOnUse" id="LinearGradient_7" x1="0" x2="1" y1="0" y2="0">
<stop offset="0" stop-color="#373ebf" />
<stop offset="1" stop-color="#5058e6" />
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

4950
apps/admin/report.html Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 16 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

View File

Before

Width:  |  Height:  |  Size: 468 KiB

After

Width:  |  Height:  |  Size: 468 KiB

View File

@ -1,5 +1,6 @@
<script setup lang="ts">
// import { defineProps, defineEmits } from 'vue';
import { computed } from 'vue'
import defaultBtnBg from '@/assets/imgs/user/btn-bg.png'
const props = defineProps({
text: {
@ -15,13 +16,25 @@ const props = defineProps({
default: 'primary',
},
type: {
type: String as () => 'button' | 'text',
type: String as () => 'button' | 'text' | 'custom',
default: 'button',
},
btnBg: {
type: String,
default: defaultBtnBg,
},
fontSize: {
type: Number,
default: 30,
},
})
const emits = defineEmits(['click'])
const isCustom = computed(() => props.type === 'custom')
const customBg = computed(() => `url(${props.btnBg}) no-repeat center / 100% 100%`)
function handleClick() {
if (!props.disabled) {
emits('click')
@ -32,33 +45,52 @@ function handleClick() {
<template>
<button
class="action-btn"
:class="[theme, { 'is-disabled': disabled, 'text-btn': type === 'text' }]"
:class="[
isCustom ? 'custom-btn' : 'standard-btn',
theme,
type,
{ 'is-disabled': disabled },
]"
@click="handleClick"
>
<span v-if="type === 'text'" class="btn-text">{{ text }}</span>
<span v-if="type === 'text' || type === 'custom'" class="btn-text">{{ text }}</span>
<slot v-else />
</button>
</template>
<style lang="scss" scoped>
.action-btn {
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
color: white;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s ease;
border: none;
outline: none;
font-family: inherit;
&.is-disabled {
cursor: not-allowed;
filter: grayscale(1);
opacity: 0.7;
&:hover,
&:active {
transform: none !important;
box-shadow: inherit !important;
}
}
}
// standard: type="button" | type="text"
.standard-btn {
width: 50px;
height: 50px;
border-radius: 50%;
color: white;
background: #eb5e55;
box-shadow: 0 8px 0 #fcc64f;
.arrow-icon {
font-size: 32px;
}
&:hover {
transform: translateY(-2px);
filter: brightness(1.05);
@ -70,7 +102,17 @@ function handleClick() {
box-shadow: 0 2px 0 #fcc64f;
}
&.text-btn {
&.light {
background: white;
color: #eb5e55;
border: 2px solid #eb5e55;
&:hover {
background-color: #fff;
}
}
&.text {
width: auto;
min-width: 180px;
padding: 0 30px;
@ -82,35 +124,38 @@ function handleClick() {
letter-spacing: 2px;
}
}
&.is-disabled {
cursor: not-allowed;
&:hover {
transform: none;
}
&:active {
transform: none;
}
}
}
.light {
background: white;
color: #eb5e55;
border: 2px solid #eb5e55;
box-shadow: 0 8px 0 #fcc64f;
// custom: type="custom",背景完全由 btnBg 决定
.custom-btn {
background: v-bind(customBg);
background-color: transparent;
min-width: 210px;
width: auto;
height: 60px;
padding: 0 20px;
box-shadow: none;
color: rgb(0, 94, 174);
.btn-text {
font-size: v-bind('`${fontSize}px`');
font-weight: bold;
letter-spacing: 2px;
margin-bottom: 7px;
}
&.is-disabled {
color: #eb5e55;
filter: none;
opacity: 1;
}
&:hover {
background-color: #fff;
transform: translateY(-3px);
box-shadow: 0 10px 0 #fcc64f;
transform: scale(1.05);
}
&:active {
transform: translateY(4px);
box-shadow: 0 2px 0 #fcc64f;
transform: scale(0.95);
}
}
</style>

View File

@ -1,9 +1,15 @@
<!-- eslint-disable unused-imports/no-unused-vars -->
<script lang="ts" setup>
import VScaleScreen from 'v-scale-screen'
import { computed, onMounted, ref } from 'vue'
import _defaultBg from '@/assets/imgs/user/home-bg.svg'
import titleBg2 from '@/assets/imgs/user/title-bg2.svg'
import _defaultTitleBg from '@/assets/imgs/user/title-bg.svg'
import { computed, onMounted, ref, watch } from 'vue'
import cqLogo from '@/assets/imgs/logo/cq-logo.webp'
import srLogo from '@/assets/imgs/logo/qw-logo.webp'
import qwLogo from '@/assets/imgs/logo/text-logo.webp'
import _defaultBg from '@/assets/imgs/user/home-bg1.webp'
import titleBg2 from '@/assets/imgs/user/title-bg2.webp'
import titleBg3 from '@/assets/imgs/user/title-bg3.png'
import titleBg4 from '@/assets/imgs/user/title-bg4.png'
import _defaultTitleBg from '@/assets/imgs/user/title-bg.webp'
import { useRouterPush } from '@/hooks/common/router'
import ActionButton from './ActionButton.vue'
@ -29,12 +35,16 @@ interface Props {
btnTheme?: 'primary' | 'light'
/** 是否禁用下一步按钮 */
nextDisabled?: boolean
/** 标题区域背景图片URL不传则使用默认 title-bg.svg */
/** 标题区域背景图片URL不传则使用默认 title-bg.webp */
titleBgType?: number
/** 是否显示第二个下一步按钮 */
showNextBtn2?: boolean
/** 第二个按钮的文本 */
nextBtnText2?: string
/** title 颜色 */
titleTextColor?: string
/* 按钮字体大小 */
fontSize?: number
}
const props = withDefaults(defineProps<Props>(), {
@ -51,6 +61,8 @@ const props = withDefaults(defineProps<Props>(), {
titleBgType: 1,
showNextBtn2: false,
nextBtnText2: undefined,
titleTextColor: '#000000',
fontSize: 30,
})
const emit = defineEmits<{
@ -62,11 +74,16 @@ const emit = defineEmits<{
const titleBgUrlMapping: Record<number, string> = {
1: _defaultTitleBg,
2: titleBg2,
3: titleBg3,
4: titleBg4,
}
const { routerPushByKey } = useRouterPush()
const titleBgUrl = computed(() => titleBgUrlMapping[props.titleBgType] || _defaultBg)
const titleBgLoaded = ref(false)
const currentTitleBg = ref('')
const imageLoadStatus = ref<Record<string, boolean>>({})
// const router = useRouter()
const innerBgUrl = ref(_defaultBg)
@ -110,10 +127,62 @@ function handleBackHome() {
}
onMounted(() => {
fetchSystemConfig()
setTimeout(() => {
showContent.value = true
}, 100)
// 预加载所有标题背景图,并跟踪加载状态
const preloadAllImages = () => {
const promises = Object.entries(titleBgUrlMapping).map(([_key, url]) => {
return new Promise((resolve) => {
const img = new Image()
img.onload = () => {
imageLoadStatus.value[url] = true
resolve(true)
}
img.onerror = () => {
imageLoadStatus.value[url] = false
resolve(false)
}
img.src = url
})
})
// 也预加载默认背景
const defaultBgPromise = new Promise((resolve) => {
const img = new Image()
img.onload = () => {
imageLoadStatus.value[_defaultBg] = true
resolve(true)
}
img.onerror = () => {
imageLoadStatus.value[_defaultBg] = false
resolve(false)
}
img.src = _defaultBg
})
return Promise.all([...promises, defaultBgPromise])
}
// 开始预加载
preloadAllImages()
.then(() => {
// 所有图片预加载完成后,设置当前背景
currentTitleBg.value = titleBgUrl.value
titleBgLoaded.value = true
fetchSystemConfig()
setTimeout(() => {
showContent.value = true
}, 100)
})
.catch(() => {
// 即使预加载失败也继续
currentTitleBg.value = titleBgUrl.value
titleBgLoaded.value = true
fetchSystemConfig()
setTimeout(() => {
showContent.value = true
}, 100)
})
// 延迟显示内容,等待标题卷轴展开
const delay = props.showTitle ? 500 : 100
@ -126,6 +195,28 @@ onMounted(() => {
showButton.value = true
}, delay + 500)
})
// 监听 titleBgUrl 变化,确保图片切换平滑
watch(titleBgUrl, (newUrl) => {
if (newUrl && imageLoadStatus.value[newUrl]) {
// 如果图片已经加载过,直接切换
currentTitleBg.value = newUrl
}
else if (newUrl) {
// 如果图片还没加载,预加载它
const img = new Image()
img.onload = () => {
imageLoadStatus.value[newUrl] = true
currentTitleBg.value = newUrl
}
img.onerror = () => {
imageLoadStatus.value[newUrl] = false
// 加载失败时使用默认背景
currentTitleBg.value = _defaultBg
}
img.src = newUrl
}
})
</script>
<template>
@ -133,12 +224,24 @@ onMounted(() => {
<!-- Background Layer (Outside Scale to cover full screen) -->
<div class="fixed-bg" :style="innerBgUrl ? { backgroundImage: `url(${innerBgUrl})` } : {}" />
<VScaleScreen width="1920" height="1080">
<VScaleScreen width="2048" height="1080">
<div class="competition-layout">
<!-- Header -->
<header class="page-header text-[30px] text-[#333333] font-bold">
<span class="org-name" @click="handleBackHome">教育学会</span>
<span class="org-name">树人研究院</span>
<header class="page-header flex items-center px-8 text-[30px] text-[#333333] font-bold">
<!-- 左侧logo -->
<div class="flex cursor-pointer items-center" @click="handleBackHome">
<img :src="cqLogo" alt="重庆logo" class="h-20 w-auto">
</div>
<!-- 中间文字 -->
<div class="flex flex-1 justify-center">
<img :src="qwLogo" alt="重庆logo" class="h-14 w-auto">
</div>
<!-- 右侧logo组 -->
<div class="flex items-center justify-end gap-4">
<img :src="srLogo" alt="树人logo" class="h-19 w-auto">
</div>
</header>
<div class="glass-overlay">
@ -146,9 +249,17 @@ onMounted(() => {
<section v-if="showTitle" class="title-section">
<Transition name="scroll-unfold" appear>
<div v-if="showContent" class="title-wrapper">
<div class="scroll-bg" :style="{ backgroundImage: `url(${titleBgUrl})` }">
<div class="scroll-bg">
<!-- 预渲染所有背景图 opacity 切换避免加载抖动 -->
<img
v-for="(url, _key) in titleBgUrlMapping" :key="_key" :src="url" class="scroll-bg-img" :class="{
active: titleBgUrl === url && imageLoadStatus[url] !== false,
loading: imageLoadStatus[url] === undefined,
}" :style="{ visibility: imageLoadStatus[url] === false ? 'hidden' : 'visible' }" aria-hidden="true"
@load="imageLoadStatus[url] = true" @error="imageLoadStatus[url] = false"
>
<Transition name="fade-in-delay" appear>
<h1 v-if="showContent" class="main-title">
<h1 v-if="showContent" class="main-title" :style="{ color: titleTextColor }">
{{ title }}
</h1>
</Transition>
@ -166,14 +277,13 @@ onMounted(() => {
<!-- Footer Action -->
<footer
v-if="showButton"
class="page-footer w-full flex items-center justify-between px-20"
v-if="showButton" class="page-footer w-full flex items-center justify-between px-20"
:class="[actionPosition, btnTheme]"
>
<div class="left">
<ActionButton
class="back-btn" :style="{ visibility: showBack ? 'visible' : 'hidden' }"
:type="backBtnText ? 'text' : 'button'" :text="backBtnText || ''" :theme="btnTheme" @click="handleBack"
class="back-btn" :style="{ visibility: showBack ? 'visible' : 'hidden' }" type="custom"
:text="backBtnText || ''" :theme="btnTheme" :font-size="fontSize" @click="handleBack"
>
<SvgIcon v-if="!backBtnText" icon="mdi:arrow-left" size="40" class="arrow-icon" />
</ActionButton>
@ -181,8 +291,8 @@ onMounted(() => {
<div class="right">
<ActionButton
v-if="showNext" :type="nextBtnText ? 'text' : 'button'" :text="nextBtnText || '下一步'"
:theme="btnTheme" :disabled="nextDisabled" @click="handleNext"
v-if="showNext" type="custom" :text="nextBtnText || '下一步'" :theme="btnTheme"
:disabled="nextDisabled" :font-size="fontSize" @click="handleNext"
>
<SvgIcon v-if="!nextBtnText" icon="mdi:arrow-right" class="arrow-icon" size="40" />
</ActionButton>
@ -207,27 +317,50 @@ onMounted(() => {
width: 412px;
height: 165px;
display: flex;
justify-content: center; /* Ensure wrapper stays centered during expansion */
justify-content: center;
/* Ensure wrapper stays centered during expansion */
.title-wrapper {
width: 100%;
height: 100%;
overflow: hidden;
display: flex;
justify-content: center; /* Keep the background image centered */
justify-content: center;
/* Keep the background image centered */
}
.scroll-bg {
width: 412px !important; /* Fixed width to prevent squishing during animation */
height: 165px !important;
width: 400px !important;
/* Fixed width to prevent squishing during animation */
height: 155px !important;
position: relative;
background: no-repeat center center;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
padding-bottom: 10px;
flex-shrink: 0; /* Prevent shrinking */
flex-shrink: 0;
/* Prevent shrinking */
.scroll-bg-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: contain;
opacity: 0;
transition: opacity 0.5s ease;
pointer-events: none;
&.active {
opacity: 1;
}
&.loading {
opacity: 0;
filter: blur(2px);
}
}
.main-title {
font-size: 2.5rem;
@ -235,7 +368,10 @@ onMounted(() => {
margin: 0;
letter-spacing: 4px;
text-align: center;
white-space: nowrap; /* Prevent text wrapping */
white-space: nowrap;
/* Prevent text wrapping */
position: relative;
z-index: 1;
}
}
}
@ -271,9 +407,11 @@ onMounted(() => {
overflow: hidden;
position: relative;
font-family: 'Noto Serif SC', serif;
z-index: 1; // 确保内容在背景之上
z-index: 2; // 确保内容在背景之上
// margin: 10px auto;
margin-top: 28px;
// Default background decoration (Bottom Wave)
// 底部波浪背景
&::before {
content: '';
position: absolute;
@ -292,7 +430,7 @@ onMounted(() => {
.glass-overlay {
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.5);
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(2px);
border-radius: 30px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.1);
@ -306,7 +444,7 @@ onMounted(() => {
.page-header {
position: absolute;
top: 0;
top: -20px;
left: 0;
width: 100%;
display: flex;
@ -360,7 +498,8 @@ onMounted(() => {
.fade-in-delay-enter-active {
transition: opacity 0.8s ease;
transition-delay: 1s; /* Wait for scroll to unfold */
transition-delay: 1s;
/* Wait for scroll to unfold */
}
.fade-in-delay-enter-from {

View File

@ -43,6 +43,3 @@ const _props = withDefaults(defineProps<Props>(), {
<slot />
</div>
</template>
<style scoped>
</style>

View File

@ -21,11 +21,17 @@ export enum QuestionType {
}
export enum QuestionCategoryEnum {
ChineseCharacterDictation1 = 'ChineseCharacterDictation1', // 汉字听写-提示 (jiu表示小鸟的叫声)
ChineseCharacterDictation2 = 'ChineseCharacterDictation2', // 根据拼音写汉字-提示 (tang)
CharacterRadicalAddition = 'CharacterRadicalAddition', // 汉字加一加 (车)
WordDictation = 'WordDictation', // 词语听写 (zhi re)
IdiomWriting1 = 'IdiomWriting1', // 成语-文字要求 (反义字)
IdiomWriting2 = 'IdiomWriting2', // 成语-文字要求 (看图写成语)
PoetryComprehension = 'PoetryComprehension', // 诗词理解-选择题
ChineseCharacterDictation1 = 'ChineseCharacterDictation1', // 1. 汉字听写-提示 (jiu表示小鸟的叫声)
ChineseCharacterDictation2 = 'ChineseCharacterDictation2', // 2. 根据拼音写汉字-提示 (tang)
CharacterRadicalAddition = 'CharacterRadicalAddition', // 3. 汉字加一加 (车)
WordDictation = 'WordDictation', // 4. 词语听写 (zhi re)
IdiomWriting1 = 'IdiomWriting1', // 5. 成语-文字要求
IdiomWriting2 = 'IdiomWriting2', // 6. 成语-文字要求 (看图写成语)
PoetryComprehension = 'PoetryComprehension', // 7. 诗词理解-选择题
ReversePoemMatching = 'ReversePoemMatching', // 8. 逆向接诗句
SceneBasedPoemGuessing = 'SceneBasedPoemGuessing', // 9. 场景猜诗句
AssociationMatching = 'AssociationMatching', // 10. 联想对对碰
CharacterWordFlowerDrinkingGame = 'CharacterWordFlowerDrinkingGame', // 11. 字词飞花令
PoetryCommonKnowledge = 'PoetryCommonKnowledge', // 12. 诗词常识
ChangeWords = 'ChangeWords', // 13. 换字组成语
}

View File

@ -49,31 +49,11 @@ export function fetchGetQuestionLibraryListAll(params: Api.Question.GetQuestionL
}
/** 新增一条问题库 */
export function fetchAddQuestionLibrary(params: Api.Question.AddQuestionLibraryParams, file?: File | null) {
const formData = new FormData()
if (file) {
formData.append('Image', file)
}
export function fetchAddQuestionLibrary(params: Api.Question.AddQuestionLibraryParams) {
return request<Api.Question.CommonRecord>({
url: '/Base/ActivityMain/AddQuestionListDetail',
method: 'post',
// params: {
// QuestionId: params.questionId,
// Name: params.name,
// Answer: params.answer,
// Type: params.type,
// IsGood: params.IsGood,
// ImageUrl: params.imageUrl,
// },
data: {
QuestionId: params.questionId,
Name: params.name,
Answer: params.answer,
Type: params.type,
IsGood: params.IsGood,
ImageUrl: params.imageUrl,
IsDisabled: params.IsDisabled,
},
data: params,
})
}
@ -87,33 +67,11 @@ export function fetchDisableQuestionLibrary(params: Api.Question.DisableQuestion
}
/** 更新一条问题库 */
export function fetchUpdateQuestionLibrary(params: Api.Question.AddQuestionLibraryParams, file?: File | null) {
const formData = new FormData()
if (file) {
formData.append('Image', file)
}
export function fetchUpdateQuestionLibrary(params: Api.Question.UpdateQuestionLibraryParams) {
return request<Api.Question.CommonRecord>({
url: '/Base/ActivityMain/UpdateQuestionListDetail',
method: 'post',
// params: {
// Id: params.id,
// QuestionId: params.questionId,
// Name: params.name,
// Answer: params.answer,
// Type: params.type,
// IsGood: params.IsGood,
// ImageUrl: params.imageUrl,
// },
data: {
Id: params.id,
QuestionId: params.questionId,
Name: params.name,
Answer: params.answer,
Type: params.type,
IsGood: params.IsGood,
ImageUrl: params.imageUrl,
IsDisabled: params.IsDisabled,
},
data: params,
})
}

View File

@ -106,6 +106,8 @@ declare namespace Api {
Image: string
ImageUrl: string
Answer: string
KeyWordsIndex?: number
KeyWord?: string
}
/** get current question params */

View File

@ -65,11 +65,21 @@ declare namespace Api {
/** question library image url */
imageUrl: string
/** question library type */
type: QuestionScoreType
// type?: QuestionScoreType
/** is priority 0: no 1: yes */
IsGood: number
/** is disabled */
IsDisabled: boolean
/** keyword */
KeyWord: string
/** keyword index */
KeyWordsIndex: number
}
/** update question library params */
interface UpdateQuestionLibraryParams extends AddQuestionLibraryParams {
/** question library id */
id: number
}
/** common search params of table */

View File

@ -1,6 +1,6 @@
<script setup lang="ts">
import { NButton, NForm, NFormItem, NInputNumber, NModal, NSelect, type SelectOption } from 'naive-ui'
import { onMounted, ref, watch } from 'vue'
import { computed, onMounted, ref, watch } from 'vue'
import { VueDraggable } from 'vue-draggable-plus'
import { useDict } from '@/hooks/business/useDict'
import { fetchGetQuestionListAll } from '@/service/api/question'
@ -29,7 +29,10 @@ const props = defineProps<{
const { options: roundTypeOptions } = useDict('round_type')
const { options: scoreTypeOptions } = useDict('score_type')
const { options: timeOptions } = useDict('time_out')
const { options: timeOptionsRaw } = useDict('time_out')
const timeOptions = computed(() =>
[...timeOptionsRaw.value].sort((a, b) => Number(a.value) - Number(b.value)),
)
// const { options: uiTypeOptions } = useDict('ui_type', 'string')
const { options: uiTypeOptions } = useDict('question_category_name', 'string')

View File

@ -23,7 +23,6 @@ function handleAdd() {
}
async function handleCopy(item: Api.Competition.CompetitionItem) {
// TODO: 实现复制逻辑
try {
const { error } = await fetchCopyActivity(item.Id)
if (error) {
@ -163,7 +162,3 @@ onMounted(() => fetchActivityList())
<CompetitionAddModal v-model:show="showAddModal" @success="fetchActivityList" />
</NSpace>
</template>
<style scoped>
/* 针对不同屏幕微调间距 */
</style>

View File

@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref } from 'vue'
import { onMounted, ref } from 'vue'
import CategoryTree from './modules/CategoryTree.vue'
import QuestionList from './modules/QuestionList.vue'
@ -8,7 +8,8 @@ defineOptions({ name: 'QuestionStore' })
const currentCategory = ref<any>(null)
// Resize logic
const siderWidth = ref(450)
const siderWidth = ref(525)
const LOCAL_STORAGE_KEY = 'question-store-sider-width'
const minWidth = 300
const maxWidth = 800
const isDragging = ref(false)
@ -43,7 +44,15 @@ function onMouseUp() {
document.removeEventListener('mouseup', onMouseUp)
document.body.style.userSelect = ''
document.body.style.cursor = ''
localStorage.setItem(LOCAL_STORAGE_KEY, siderWidth.value.toString())
}
onMounted(() => {
const savedWidth = localStorage.getItem(LOCAL_STORAGE_KEY)
if (savedWidth) {
siderWidth.value = Number(savedWidth)
}
})
</script>
<template>

View File

@ -6,6 +6,7 @@ import {
NInput,
NModal,
NSelect,
type SelectOption,
useDialog,
useMessage,
} from 'naive-ui'
@ -20,9 +21,10 @@ const emit = defineEmits<{
(e: 'dragStart', event: MouseEvent): void
}>()
const { options: questionTypeOptions } = useDict('question_type', 'string')
const { options: categoryOptions } = useDict('question_category_name', 'string')
const LOCAL_STORAGE_KEY = 'question-store-selected-category-id'
const message = useMessage()
const dialog = useDialog()
@ -46,6 +48,7 @@ const currentOperationNode = ref<CategoryItem | null>(null)
watch(selectedKey, (newKey) => {
if (!newKey) {
emit('update:category', null)
localStorage.removeItem(LOCAL_STORAGE_KEY)
return
}
const node = categoryList.value.find(item => item.Id === newKey)
@ -53,9 +56,11 @@ watch(selectedKey, (newKey) => {
emit('update:category', {
...node,
})
localStorage.setItem(LOCAL_STORAGE_KEY, newKey.toString())
}
else {
emit('update:category', null)
localStorage.removeItem(LOCAL_STORAGE_KEY)
}
})
@ -63,6 +68,16 @@ function handleSelect(key: number) {
selectedKey.value = key
}
/**
* 分类名称选择更新
* @param _value
* @param option
*/
function handleCategoryNameChange(_value: string, option: SelectOption) {
if (option)
categoryForm.value.questionType = option.value as QuestionType
}
function handleAddCategory() {
categoryOperation.value = 'add'
categoryForm.value.questionContent = ''
@ -100,7 +115,7 @@ function handleDeleteCategory(item: CategoryItem) {
selectedKey.value = null
}
// 获取最新分类列表
await fetchCategoryList()
await loadAndSelectCategory()
message.success('删除成功')
}
},
@ -128,7 +143,7 @@ async function submitCategory() {
message.error('添加分类失败')
return
}
await fetchCategoryList()
await loadAndSelectCategory()
message.success('分类添加成功')
}
else if (categoryOperation.value === 'edit' && currentOperationNode.value) {
@ -144,7 +159,7 @@ async function submitCategory() {
}
currentOperationNode.value.QuestionContent = categoryForm.value.questionContent
message.success('分类修改成功')
await fetchCategoryList()
await loadAndSelectCategory()
// 更新选中分类的信息
if (selectedKey.value === currentOperationNode.value.Id) {
const node = currentOperationNode.value
@ -160,21 +175,35 @@ async function submitCategory() {
}
/**
* 获取分类列表
* 获取并选择分类列表
*/
async function fetchCategoryList() {
async function loadAndSelectCategory() {
try {
const { data } = await fetchGetQuestionListAll()
categoryList.value = data?.data || []
// Ensure Id is always a number to prevent type mismatch issues
categoryList.value = (data?.data || []).map((c: any) => ({ ...c, Id: Number(c.Id) }))
const savedKeyRaw = localStorage.getItem(LOCAL_STORAGE_KEY)
const savedKey = savedKeyRaw ? Number(savedKeyRaw) : null
const savedCategoryExists = savedKey ? categoryList.value.some(c => c.Id === savedKey) : false
if (savedKey && savedCategoryExists) {
selectedKey.value = savedKey
}
else if (categoryList.value.length > 0) {
selectedKey.value = categoryList.value[0].Id
}
else {
selectedKey.value = null
}
}
// eslint-disable-next-line unused-imports/no-unused-vars
catch (error) {
message.error('获取分类列表失败')
catch (error: any) {
message.error(error.message || '获取分类列表失败')
}
}
onMounted(() => {
fetchCategoryList()
loadAndSelectCategory()
})
</script>
@ -243,11 +272,12 @@ onMounted(() => {
:options="categoryOptions"
value-field="label"
placeholder="请选择分类名称"
@update:value="handleCategoryNameChange"
/>
</NFormItem>
<!-- 题目类型 -->
<NFormItem label="题目类型">
<NSelect v-model:value="categoryForm.questionType" :options="questionTypeOptions" placeholder="请选择题目类型" />
<NInput v-model:value="categoryForm.questionType" placeholder="请选择分类名称自动带出" :readonly="true" />
</NFormItem>
<!-- 分类描述 -->
<NFormItem label="分类描述">

View File

@ -0,0 +1,282 @@
<script setup lang="ts">
import type { FormInst, FormItemRule } from 'naive-ui'
import Clipboard from 'clipboard'
import {
NButton,
NCard,
NDrawer,
NDrawerContent,
NForm,
NFormItem,
NInput,
NInputNumber,
NRadio,
NRadioGroup,
} from 'naive-ui'
import { pinyin } from 'pinyin-pro'
import { computed, onUnmounted, ref, watch } from 'vue'
import OssImageUpload from '@/components/common/oss-image-upload/index.vue'
import WangEditor from '@/components/common/wang-editor.vue'
import { QuestionCategoryEnum, QuestionType } from '@/enum/business'
import { fetchAddQuestionLibrary, fetchUpdateQuestionLibrary } from '@/service/api/question'
const props = defineProps<{
show: boolean
operation: 'add' | 'edit'
questionData?: any
currentCategory: any
}>()
const emit = defineEmits<{
(e: 'update:show', value: boolean): void
(e: 'success'): void
}>()
const showQuestionModal = computed({
get: () => props.show,
set: val => emit('update:show', val),
})
// 拼音转换工具
const pinyinTool = ref({
input: '',
output: '',
})
// 监听输入变化自动转换
watch(() => pinyinTool.value.input, (val) => {
if (val) {
pinyinTool.value.output = pinyin(val)
}
else {
pinyinTool.value.output = ''
}
})
// 复制拼音
const copyBtnRef = ref<any>(null)
let clipboard: Clipboard | null = null
watch(copyBtnRef, (inst) => {
if (clipboard) {
clipboard.destroy()
clipboard = null
}
if (inst) {
const domEl = inst.$el || inst
clipboard = new Clipboard(domEl)
clipboard.on('success', () => {
window?.$message?.success('拼音已复制到剪贴板')
})
clipboard.on('error', () => {
window?.$message?.error('复制失败,请手动复制')
})
}
})
onUnmounted(() => {
clipboard?.destroy()
})
const questionForm = ref({
name: '',
answer: '',
type: QuestionCategoryEnum.ChineseCharacterDictation1 as QuestionCategoryEnum | number,
imageUrl: '',
IsGood: 0,
IsDisabled: false,
KeyWord: '',
KeyWordsIndex: 0,
})
const questionFormRef = ref<FormInst | null>(null)
const rules = computed(() => {
const dynamicRules: any = {
answer: [{ required: true, message: '请输入题目答案', trigger: ['blur'] }],
type: [{ required: true, message: '请选择题目类型', trigger: ['change'] }],
}
// 题目正文内容和图片至少要有一个
if (!questionForm.value.imageUrl) {
dynamicRules.name = [{ required: true, message: '请输入题目正文内容或上传图片', trigger: ['blur'] }]
}
// 只有“联想对对碰”类型才需要关键词
if (questionForm.value.type === QuestionCategoryEnum.AssociationMatching) {
dynamicRules.KeyWord = [{ required: true, message: '请输入关键词', trigger: ['blur'] }]
dynamicRules.KeyWordsIndex = [
{
required: true,
validator: (_rule: FormItemRule, value: number) => {
return typeof value === 'number'
},
message: '请输入关键词索引',
trigger: ['blur', 'change'],
},
]
}
return dynamicRules
})
watch(() => props.show, (val) => {
if (val) {
if (props.operation === 'add') {
questionForm.value = {
name: '',
answer: '',
type: props.currentCategory?.QuestionType || QuestionType.SingleChoice,
imageUrl: '',
IsGood: 0,
IsDisabled: false,
KeyWord: '',
KeyWordsIndex: 0,
}
pinyinTool.value.input = ''
pinyinTool.value.output = ''
}
else if (props.operation === 'edit' && props.questionData) {
const question = props.questionData
questionForm.value = {
name: question.Name,
answer: question.Answer,
type: Number(question.Type),
KeyWord: question.KeyWord || '',
KeyWordsIndex: question.KeyWordsIndex || 0,
imageUrl: question.ImageUrl || '',
IsGood: question.IsPriority || 0,
IsDisabled: !!question.IsDisabled,
}
pinyinTool.value.input = ''
pinyinTool.value.output = ''
}
}
})
async function submitQuestion() {
const valid = await questionFormRef.value?.validate()
if (!valid) {
window?.$message?.error('请填写完整信息')
return
}
const params = {
...questionForm.value,
questionId: props.currentCategory.Id,
// type: String(questionForm.value.type) as Api.Question.QuestionScoreType,
}
if (questionForm.value.type !== QuestionCategoryEnum.AssociationMatching) {
params.KeyWord = ''
params.KeyWordsIndex = 0
}
if (props.operation === 'add') {
const { error } = await fetchAddQuestionLibrary({ ...params, id: 0 })
if (!error) {
window?.$message?.success('题目添加成功')
emit('success')
}
else {
window?.$message?.error('添加失败')
}
}
else if (props.operation === 'edit' && props.questionData) {
const { error } = await fetchUpdateQuestionLibrary({ ...params, id: props.questionData.Id })
if (!error) {
window?.$message?.success('题目修改成功')
emit('success')
}
else {
window?.$message?.error('修改失败')
}
}
}
</script>
<template>
<NDrawer v-model:show="showQuestionModal" :width="800">
<NDrawerContent :title="props.operation === 'edit' ? '编辑题目详情' : '新增题目详情'">
<div class="mb-4">
<NCard size="small" title="🛠️ 拼音助手 (输入汉字获取带音标拼音)" class="bg-gray-50/50">
<div class="flex gap-2">
<NInput v-model:value="pinyinTool.input" placeholder="输入汉字..." class="flex-1" />
<div class="flex flex-1 items-center justify-between border border-gray-200 rounded bg-white px-3 py-1">
<span class="text-gray-600">{{ pinyinTool.output || '拼音结果将显示在这里' }}</span>
<textarea id="pinyinCopyTarget" v-model="pinyinTool.output" class="absolute opacity-0 -z-1" />
<div v-if="pinyinTool.output" ref="copyBtnRef" data-clipboard-target="#pinyinCopyTarget">
<NButton size="tiny" type="primary" secondary>
复制
</NButton>
</div>
</div>
</div>
</NCard>
</div>
<NForm ref="questionFormRef" label-placement="top" :rules="rules" :model="questionForm" size="small">
<NFormItem label="题目正文内容" path="name">
<div
v-if="[QuestionCategoryEnum.PoetryComprehension, QuestionCategoryEnum.PoetryCommonKnowledge, QuestionCategoryEnum.ReversePoemMatching, QuestionCategoryEnum.ChineseCharacterDictation1].includes(props.currentCategory?.QuestionType)"
class="w-full overflow-hidden border border-gray-200 rounded-lg"
>
<WangEditor
v-model="questionForm.name" placeholder="请输入题目内容..." height="300px"
:exclude-keys="['header1', 'fontSize', 'fontFamily', 'lineHeight', 'justifyLeft', 'justifyRight', 'justifyCenter', 'justifyJustify', 'group-image', 'group-video', 'insertTable', 'headerSelect']"
/>
</div>
<NInput v-else v-model:value="questionForm.name" type="textarea" placeholder="请输入题目内容" :rows="3" />
</NFormItem>
<NFormItem label="是否优先使用" path="IsGood">
<NRadioGroup v-model:value="questionForm.IsGood">
<NRadio :value="0">
</NRadio>
<NRadio :value="1">
</NRadio>
</NRadioGroup>
</NFormItem>
<NFormItem label="是否禁用" path="IsDisabled">
<NRadioGroup v-model:value="questionForm.IsDisabled">
<NRadio :value="false">
</NRadio>
<NRadio :value="true">
</NRadio>
</NRadioGroup>
</NFormItem>
<NFormItem label="上传图片">
<OssImageUpload v-model="questionForm.imageUrl" />
</NFormItem>
<template v-if="currentCategory?.QuestionType === QuestionCategoryEnum.AssociationMatching">
<NFormItem label="关键词" path="KeyWord">
<NInput v-model:value="questionForm.KeyWord" placeholder="请输入关键词" />
</NFormItem>
<NFormItem label="关键词索引" path="KeyWordsIndex">
<NInputNumber v-model:value="questionForm.KeyWordsIndex" placeholder="请输入关键词索引" />
</NFormItem>
</template>
<NFormItem label="参考标准答案" path="answer">
<NInput v-model:value="questionForm.answer" placeholder="正确答案" />
</NFormItem>
</NForm>
<template #footer>
<div class="flex justify-end gap-3">
<NButton @click="showQuestionModal = false">
取消并返回
</NButton>
<NButton type="primary" @click="submitQuestion">
保存并入库
</NButton>
</div>
</template>
</NDrawerContent>
</NDrawer>
</template>

View File

@ -1,84 +1,25 @@
<script setup lang="ts">
import type { FormInst, UploadCustomRequestOptions, UploadFileInfo } from 'naive-ui'
import Clipboard from 'clipboard'
import {
NBreadcrumb,
NBreadcrumbItem,
NButton,
NCard,
NCheckbox,
NDrawer,
NDrawerContent,
NEmpty,
NForm,
NFormItem,
NImage,
NInput,
NPagination,
NRadio,
NRadioGroup,
NTag,
NUpload,
} from 'naive-ui'
import { pinyin } from 'pinyin-pro'
import { computed, onUnmounted, ref, watch } from 'vue'
import WangEditor from '@/components/common/wang-editor.vue'
import { computed, ref, watch } from 'vue'
import SvgIcon from '@/components/custom/svg-icon.vue'
import { QuestionCategoryEnum, QuestionType } from '@/enum/business'
import { fetchAddQuestionLibrary, fetchDeleteQuestionLibrary, fetchDisableQuestionLibrary, fetchGetQuestionLibraryListAll, fetchUpdateQuestionLibrary } from '@/service/api/question'
/**
* 为了user端题目展示的效果以及布局可控指定规则
* 1.普通类型 =》用存文字存 ['汉字加一加','词语听写''汉字听写','成语写一写']
* 2.复杂样式 =》用富文本 ['诗词理解']
*
*/
import { fetchDeleteQuestionLibrary, fetchDisableQuestionLibrary, fetchGetQuestionLibraryListAll } from '@/service/api/question'
import QuestionDrawer from './QuestionDrawer.vue'
const props = defineProps<{
currentCategory: any
}>()
// 拼音转换工具
const pinyinTool = ref({
input: '',
output: '',
})
// 监听输入变化自动转换
watch(() => pinyinTool.value.input, (val) => {
if (val) {
pinyinTool.value.output = pinyin(val)
}
else {
pinyinTool.value.output = ''
}
})
// 复制拼音
const copyBtnRef = ref<any>(null)
let clipboard: Clipboard | null = null
watch(copyBtnRef, (inst) => {
if (clipboard) {
clipboard.destroy()
clipboard = null
}
if (inst) {
const domEl = inst.$el || inst
clipboard = new Clipboard(domEl)
clipboard.on('success', () => {
window?.$message?.success('拼音已复制到剪贴板')
})
clipboard.on('error', () => {
window?.$message?.error('复制失败,请手动复制')
})
}
})
onUnmounted(() => {
clipboard?.destroy()
})
// 题目列表数据
const questionList = ref<any[]>([])
const loading = ref(false)
@ -106,19 +47,7 @@ const pagination = ref({
const searchText = ref('')
const showQuestionModal = ref(false)
const questionOperation = ref<'add' | 'edit'>('add')
const currentQuestionId = ref<number | null>(null)
const questionForm = ref({
name: '',
answer: '',
type: QuestionType.SingleChoice as QuestionType | number, // 题目类型
imageUrl: '',
IsGood: 0,
IsDisabled: false,
})
const fileList = ref<UploadFileInfo[]>([])
const questionFormRef = ref<FormInst | null>(null)
const currentQuestion = ref<any>(null)
// 批量选择
const selectedQuestionIds = ref<number[]>([])
@ -203,12 +132,6 @@ async function handleBatchDisable(disabled: boolean) {
}
}
const rules = {
name: [{ required: true, message: '请输入题目正文内容', trigger: ['blur'] }],
answer: [{ required: true, message: '请输入题目答案', trigger: ['blur'] }],
type: [{ required: true, message: '请选择题目类型', trigger: ['change'] }],
}
const hasCategory = computed(() => {
return !!props.currentCategory
})
@ -224,14 +147,6 @@ watch(() => props.currentCategory, (newVal) => {
}
}, { immediate: true })
function customRequest({ onFinish }: UploadCustomRequestOptions) {
onFinish()
}
function handleUploadChange(data: { fileList: UploadFileInfo[] }) {
fileList.value = data.fileList
}
async function fetchData(id: number) {
loading.value = true
const { data, error } = await fetchGetQuestionLibraryListAll({
@ -260,49 +175,15 @@ function handleAddQuestion() {
return
}
questionOperation.value = 'add'
currentQuestionId.value = null
questionForm.value = {
name: '',
answer: '',
type: props.currentCategory?.QuestionType || QuestionType.SingleChoice,
imageUrl: '',
IsGood: 0,
IsDisabled: false,
}
fileList.value = []
currentQuestion.value = null
showQuestionModal.value = true
pinyinTool.value.input = ''
pinyinTool.value.output = ''
}
/**
* 处理编辑题目
* @param id 题目ID
*/
function handleEditQuestion(id: number) {
pinyinTool.value.input = ''
pinyinTool.value.output = ''
const question = questionList.value.find(q => q.Id === id)
if (question) {
questionOperation.value = 'edit'
currentQuestionId.value = id
questionForm.value = {
name: question.Name,
answer: question.Answer,
type: question.Type,
imageUrl: question.ImageUrl || '',
IsGood: question.IsPriority || 0,
IsDisabled: !!question.IsDisabled,
}
fileList.value = []
if (question.ImageUrl) {
fileList.value = [{
id: 'existing',
name: 'Existing Image',
status: 'finished',
url: question.ImageUrl,
}]
}
currentQuestion.value = question
showQuestionModal.value = true
}
}
@ -328,69 +209,10 @@ function handleDeleteQuestion(id: number) {
})
}
async function submitQuestion() {
const valid = await questionFormRef.value?.validate()
if (!questionForm.value.name) {
if (!valid) {
window?.$message?.error('请填写完整信息')
return
}
}
const commonParams = {
name: questionForm.value.name,
answer: questionForm.value.answer,
imageUrl: '',
type: questionForm.value.type as any,
questionId: props.currentCategory.Id,
IsGood: questionForm.value.IsGood,
// 传给后端为 boolean
IsDisabled: questionForm.value.IsDisabled,
}
let fileToUpload: File | null = null
if (questionForm.value.type === QuestionType.Image) { // 图片类型
if (fileList.value.length > 0 && fileList.value[0].file) {
fileToUpload = fileList.value[0].file
}
// else if (questionOperation.value === 'add' && fileList.value.length === 0) {
// window?.$message?.error('请上传图片')
// return
// }
// else if (questionOperation.value === 'edit' && fileList.value.length === 0) {
// window?.$message?.error('请上传图片')
// return
// }
}
if (questionOperation.value === 'add') {
const { error } = await fetchAddQuestionLibrary({
...commonParams,
id: 0,
}, fileToUpload)
if (!error) {
window?.$message?.success('题目添加成功')
showQuestionModal.value = false
fetchData(props.currentCategory.Id)
}
else {
window?.$message?.error('添加失败')
}
}
else if (questionOperation.value === 'edit' && currentQuestionId.value) {
const { error } = await fetchUpdateQuestionLibrary({
...commonParams,
id: currentQuestionId.value,
}, fileToUpload)
if (!error) {
window?.$message?.success('题目修改成功')
showQuestionModal.value = false
fetchData(props.currentCategory.Id)
}
else {
window?.$message?.error('修改失败')
}
function onDrawerSuccess() {
showQuestionModal.value = false
if (props.currentCategory?.Id) {
fetchData(props.currentCategory.Id)
}
}
</script>
@ -556,102 +378,13 @@ async function submitQuestion() {
</template>
</div>
<!-- Add Question Drawer -->
<NDrawer v-model:show="showQuestionModal" :width="800">
<NDrawerContent :title="questionOperation === 'edit' ? '编辑题目详情' : '新增题目详情'">
<div class="mb-4">
<NCard size="small" title="🛠️ 拼音助手 (输入汉字获取带音标拼音)" class="bg-gray-50/50">
<div class="flex gap-2">
<NInput v-model:value="pinyinTool.input" placeholder="输入汉字..." class="flex-1" />
<div class="flex flex-1 items-center justify-between border border-gray-200 rounded bg-white px-3 py-1">
<span class="text-gray-600">{{ pinyinTool.output || '拼音结果将显示在这里' }}</span>
<textarea id="pinyinCopyTarget" v-model="pinyinTool.output" class="absolute opacity-0 -z-1" />
<div v-if="pinyinTool.output" ref="copyBtnRef" data-clipboard-target="#pinyinCopyTarget">
<NButton size="tiny" type="primary" secondary>
复制
</NButton>
</div>
</div>
</div>
</NCard>
</div>
<NForm ref="questionFormRef" label-placement="top" :rules="rules" :model="questionForm" size="small">
<NFormItem label="题目正文内容" path="name">
<div
v-if="[QuestionCategoryEnum.PoetryComprehension].includes(props.currentCategory?.QuestionType)"
class="w-full overflow-hidden border border-gray-200 rounded-lg"
>
<WangEditor
v-model="questionForm.name" placeholder="请输入题目内容..." height="300px"
:exclude-keys="['header1', 'fontSize', 'fontFamily', 'lineHeight', 'justifyLeft', 'justifyRight', 'justifyCenter', 'justifyJustify', 'group-image', 'group-video', 'insertTable', 'headerSelect']"
/>
</div>
<NInput v-else v-model:value="questionForm.name" type="textarea" placeholder="请输入题目内容" :rows="3" />
</NFormItem>
<!-- <div class="grid grid-cols-2 gap-4">
<NFormItem label="参考分值 (Pts)">
<NInputNumber v-model:value="questionForm.score" class="w-full" :min="1" />
</NFormItem>
<NFormItem label="限时 (S)">
<NInputNumber v-model:value="questionForm.time" class="w-full" :min="1" />
</NFormItem>
</div> -->
<!-- 类型 -->
<!-- <NFormItem label="类型" path="type">
<NSelect v-model:value="questionForm.type" class="w-full" :options="questionTypeOptionsDict" />
</NFormItem> -->
<!-- 是否优先使用 -->
<NFormItem label="是否优先使用" path="IsGood">
<NRadioGroup v-model:value="questionForm.IsGood">
<NRadio :value="0">
</NRadio>
<NRadio :value="1">
</NRadio>
</NRadioGroup>
</NFormItem>
<!-- 是否禁用 -->
<NFormItem label="是否禁用" path="IsDisabled">
<NRadioGroup v-model:value="questionForm.IsDisabled">
<NRadio :value="false">
</NRadio>
<NRadio :value="true">
</NRadio>
</NRadioGroup>
</NFormItem>
<!-- 上传图片 -->
<NFormItem v-if="questionForm.type === QuestionType.Image" label="上传图片">
<NUpload
v-model:file-list="fileList" accept="image/*" :max="1" list-type="image-card"
:custom-request="customRequest" @change="handleUploadChange"
>
点击上传
</NUpload>
</NFormItem>
<NFormItem label="参考标准答案" path="answer">
<NInput v-model:value="questionForm.answer" placeholder="正确答案" />
</NFormItem>
</NForm>
<template #footer>
<div class="flex justify-end gap-3">
<NButton @click="showQuestionModal = false">
取消并返回
</NButton>
<NButton type="primary" @click="submitQuestion">
保存并入库
</NButton>
</div>
</template>
</NDrawerContent>
</NDrawer>
<QuestionDrawer
v-model:show="showQuestionModal"
:operation="questionOperation"
:question-data="currentQuestion"
:current-category="currentCategory"
@success="onDrawerSuccess"
/>
</div>
</template>

View File

@ -151,7 +151,7 @@ function edit(item: any) {
<template #header>
<div class="flex items-center justify-between">
<div class="mid-title">
<div class="text-16px font-bold">
<div class="text-2xl font-bold">
{{ rankTitle }}
</div>
<div class="mt-4px text-12px text-gray-500">

View File

@ -241,9 +241,9 @@ async function fetchQuestions() {
}
/**
* 获取当前正在比赛的题目
* 获取当前正在比赛的题目(不触发同步选中逻辑)
*/
async function fetchCurrentQuestion() {
async function fetchCurrentQuestion(shouldSync = true) {
if (!roomId.value)
return
try {
@ -254,8 +254,10 @@ async function fetchCurrentQuestion() {
}
currentQuestion.value = data?.data || {}
console.warn('current question', currentQuestion.value)
// 拉取当前题目信息后尝试同步选中题
syncCurrentQuestionSelection()
// 只在初始化时同步选中题,轮询时不同步
if (shouldSync) {
syncCurrentQuestionSelection()
}
}
catch (error: any) {
message.error(error.message || '获取当前题目失败')
@ -467,8 +469,8 @@ async function handleNexCurrentQuestion() {
function handlePublish() {
const endTimeStr = (currentQuestion.value as any)?.EndTime
if (endTimeStr && Date.now() < new Date(endTimeStr).getTime()) {
window.$message?.warning('倒计时未结束,暂不能发布')
if (endTimeStr && Date.now() < new Date(endTimeStr).getTime() + 5000) {
window.$message?.warning('倒计时未结束需等待5秒延迟,暂不能发布')
return
}
if (currentQuestion.value?.TeamGroupQuestionID) {
@ -583,7 +585,8 @@ const canPublish = computed(() => {
const endTime = (currentQuestion.value as any)?.EndTime
if (!endTime)
return true
const end = new Date(endTime).getTime()
// 结束时间 + 5秒延迟才能发布
const end = new Date(endTime).getTime() + 5000
return nowTs.value >= end
})
@ -593,7 +596,7 @@ function startPolling() {
// 检查是否已经结束
const endTime = (currentQuestion.value as any)?.EndTime
if (endTime) {
// 增加 8s 缓冲时间
// 增加 12s 缓冲时间
const end = new Date(endTime).getTime() + 12000
const now = new Date().getTime()
if (now > end) {
@ -616,7 +619,7 @@ function startPolling() {
// 每次轮询前再次检查是否过期
const currentEndTime = (currentQuestion.value as any)?.EndTime
if (currentEndTime) {
// 增加 8s 缓冲时间
// 增加 12s 缓冲时间
const endTs = new Date(currentEndTime).getTime() + 12000
if (Date.now() > endTs) {
console.log('题目时间已到含12s缓冲停止轮询', currentEndTime)
@ -625,6 +628,9 @@ function startPolling() {
}
}
nowTs.value = Date.now()
// 轮询时同时更新当前题目信息(获取最新的 EndTime但不触发同步
fetchCurrentQuestion(false)
fetchAnswerData()
}, 3000)
}
@ -681,7 +687,7 @@ watch(() => currentQuestionDetailID.value, (newVal) => {
onMounted(async () => {
// 并行拉取分组、题目与当前题目,完成后做一次同步
await Promise.all([fetchGroups(), fetchQuestions(), fetchCurrentQuestion()])
await Promise.all([fetchGroups(), fetchQuestions(), fetchCurrentQuestion(true)])
syncCurrentQuestionSelection()
startPolling()
})

View File

@ -196,7 +196,8 @@ onMounted(async () => {
<template>
<CompetitionLayout
:show-back="true" :show-next="showNextButton" next-btn-text="下一步" :title="activityName"
:title-bg-type="2" @back="handleBack" @next="handleNext"
:title-bg-type="2" back-btn-text="返回" @back="handleBack"
@next="handleNext"
>
<div class="h-screen w-full overflow-y-auto font-sans">
<div class="relative z-10 min-h-full w-full">
@ -344,7 +345,7 @@ onMounted(async () => {
.card-back-design {
width: 100%;
height: 100%;
background: url('@/assets/imgs/user/cover-back.svg') no-repeat center center; // 背景面
background: url('@/assets/imgs/user/cover-back.webp') no-repeat center center; // 背景面
background-size: contain; // 保持比例
border-radius: 20px;
display: flex;

View File

@ -1,7 +1,7 @@
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
import drawImg from '@/assets/imgs/user/draw.svg'
import drawImg from '@/assets/imgs/user/draw.webp'
import CompetitionLayout from '@/components/custom/user/CompetitionLayout.vue'
import { useRouterPush } from '@/hooks/common/router'
import { fetchGetCurrentQuestion } from '@/service/api/game'
@ -132,16 +132,19 @@ function handleBack() {
const questionMainTitle = computed(() => question.value?.QuestionList?.Name || '')
const questionTitle = computed(() => question.value?.QuestionList?.QuestionContent || question.value?.QuestionList?.Name || '')
const titleBgTypeNum = computed(() => RoundType.value === 0 ? 3 : 4)
</script>
<template>
<CompetitionLayout
:show-back="true" :show-next="true" :title="questionMainTitle || '抽题'" next-btn-text="开始抽题"
:show-back="true" :show-next="true" back-btn-text="返回" :title="questionMainTitle || '抽题'" next-btn-text="开始抽题"
:title-bg-type="titleBgTypeNum || 3" title-text-color="#ffffff"
@next="handleCardClick(question as Api.Competition.CurrentQuestionResponse)" @back="handleBack"
>
<div class="h-full w-full flex flex-col items-center pt-10 font-sans">
<div v-if="question" class="mb-10 max-w-4xl text-center">
<div class="text-2xl text-gray-800 font-medium leading-relaxed tracking-wide">
<div class="text-4xl text-gray-800 font-medium leading-relaxed tracking-wide">
{{ questionTitle || '' }}
</div>
</div>
@ -169,7 +172,10 @@ const questionTitle = computed(() => question.value?.QuestionList?.QuestionConte
}}</span>
</div> -->
<!-- 禁用放大 -->
<NImage :src="drawImg" class="h-full w-full object-cover" :preview-disabled="true" />
<NImage
:src="drawImg" class="h-full w-full object-cover" width="300" height="300"
:preview-disabled="true"
/>
</div>
</div>
</div>

View File

@ -20,6 +20,7 @@ const { activityId, groupId, activityInfo, teamId, teamIds } = storeToRefs(activ
const currentQuestionInfo = computed(() => store.currentQuestionInfo)
const currentQuestionDetail = computed(() => store.currentQuestionDetail)
const currentQuestionMainInfo = computed(() => store.currentQuestionMainInfo)
const RoundType = computed(() => store.currentQuestionMainInfo?.Activity_Question?.RoundType)
const loading = ref(false)
@ -228,7 +229,16 @@ async function fetchGetGameStatisticsData(_params: Api.Competition.QuestionAddPa
correct: item.Points || 0, // 预估得分 (使用外层 Points)
})
})
chartData.value = Array.from(teamMap.values())
const newChartData = Array.from(teamMap.values())
// 只有数据真正变化时才更新
const currentDataStr = JSON.stringify(chartData.value)
const newDataStr = JSON.stringify(newChartData)
if (currentDataStr !== newDataStr) {
chartData.value = newChartData
}
}
}
catch (error) {
@ -237,13 +247,16 @@ async function fetchGetGameStatisticsData(_params: Api.Competition.QuestionAddPa
}
}
}
const titleBgTypeNum = computed(() => RoundType.value === 0 ? 3 : 4) || 3
</script>
<template>
<CompetitionLayout
action-position="top" :show-back="false" :show-next="true" :title="mainTitle || ''"
back-btn-text="返回" :next-btn-text="isStarted ? formattedTime : '开始答题'" :next-disabled="isStarted" btn-theme="light"
@back="handleBack" @next="handleNext"
:title-bg-type="titleBgTypeNum" title-text-color="#ffffff" back-btn-text="返回"
:next-btn-text="isStarted ? formattedTime : '开始答题'" :next-disabled="isStarted" btn-theme="light" @back="handleBack"
@next="handleNext"
>
<div class="relative h-full w-full flex flex-col items-center overflow-hidden px-12 font-sans">
<!-- 题目说明 -->

View File

@ -1,6 +1,6 @@
<script setup lang="ts">
import * as echarts from 'echarts/core'
import { watch } from 'vue'
import { ref, watch } from 'vue'
import { type ECOption, useEcharts } from '@/hooks/common/echarts'
@ -15,6 +15,21 @@ const props = defineProps<{
height?: number
}>()
// 缓存上一次的数据,用于深度比较
const lastDataCache = ref<string>('')
/**
* 深度比较数据是否发生变化
*/
function isDataChanged(newData: BarDatum[]): boolean {
const newDataStr = JSON.stringify(newData)
if (newDataStr === lastDataCache.value) {
return false
}
lastDataCache.value = newDataStr
return true
}
/**
* 构建柱状图配置
* 说明:根据传入的数据生成双系列柱状图(答题数量/正确数量)
@ -25,6 +40,8 @@ function buildOption(list: BarDatum[]): ECOption {
const correct = list.map(i => i.correct)
return {
// 禁用动画,避免频繁刷新时的抖动
animation: false,
tooltip: {
trigger: 'axis',
axisPointer: { type: 'shadow' },
@ -113,12 +130,15 @@ const { domRef, updateOptions } = useEcharts<ECOption>(() => buildOption(props.d
/**
* 监听数据变化并更新图表
* 说明:当父组件 chartData 更新时,动态刷新柱状图
* 说明:只有当数据真正发生变化时才更新图表,避免不必要的重绘
*/
watch(
() => props.data,
(val) => {
updateOptions(() => buildOption(val || []))
(newData) => {
// 只有数据真正变化时才更新
if (isDataChanged(newData || [])) {
updateOptions(() => buildOption(newData || []))
}
},
{ deep: true },
)

View File

@ -3,7 +3,7 @@ import { computed, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
import groupType1 from '@/assets/imgs/user/group-type-1.svg'
import groupType2 from '@/assets/imgs/user/group-type-2.svg'
import startIcon from '@/assets/imgs/user/star-icon.svg'
import startIcon from '@/assets/imgs/user/star-icon.webp'
import CompetitionLayout from '@/components/custom/user/CompetitionLayout.vue'
import { useRouterPush } from '@/hooks/common/router'
import { fetchGetGroupListByActivityID } from '@/service/api/game'
@ -83,7 +83,7 @@ onMounted(() => {
<template>
<CompetitionLayout
:show-back="true" :show-next="isAllEnd" next-btn-text="查看常规赛结果" next-btn-text2="查看加时赛结果"
:show-back="true" back-btn-text="返回" :show-next="isAllEnd" next-btn-text="查看常规赛结果" font-size="22" next-btn-text2="查看加时赛结果"
:show-next-btn2="hasExtraTime && isAllEnd" :title-bg-type="2" title="展示组别" @back="handleBack" @next="handleNext"
@next2="handleNext2"
>

View File

@ -1,7 +1,7 @@
<script lang="ts" setup>
import { NCarousel, NImage } from 'naive-ui'
import { computed, onMounted, ref } from 'vue'
import beacon from '@/assets/imgs/user/event-card-bg-icon.svg'
import beacon from '@/assets/imgs/user/event-card-bg-icon.webp'
import CompetitionLayout from '@/components/custom/user/CompetitionLayout.vue'
import { PublishStatus } from '@/enum/business'
import { useRouterPush } from '@/hooks/common/router'
@ -156,7 +156,7 @@ onMounted(() => {
.event-card {
width: 340px;
height: 480px;
background: url('@/assets/imgs/user/event-card-bg.svg') no-repeat center center;
background: url('@/assets/imgs/user/event-card-bg.webp') no-repeat center center;
background-size: 100% 100%;
border-radius: 8px 8px 40px 40px;
position: relative;

View File

@ -1,77 +1,65 @@
<script setup lang="ts">
import { computed, watch } from 'vue'
import TianZiGe from '@/components/custom/user/TianZiGe.vue'
import { QuestionCategoryEnum } from '@/enum/business'
import { useCompetitionStore } from '@/store/modules/competition'
const store = useCompetitionStore()
const currentQuestionMainInfo = computed(() => store.currentQuestionMainInfo)
const currentQuestionDetail = computed(() => store.currentQuestionDetail)
// console.log(currentQuestionMainInfo.value, 'currentQuestionMainInfo')
// 题目
const title = computed(() => currentQuestionMainInfo.value?.QuestionList?.QuestionContent)
// 题目内容
const content = computed(() => currentQuestionDetail.value.Name)
// 图片
const ImageUrl = computed(() => currentQuestionDetail.value.ImageUrl)
// 模版类型
const template = computed(() => currentQuestionMainInfo.value?.Activity_Question?.UIType)
/**
* 组合后的标题(用于汉字加一加模板)
* 将 content 插入到 title 的引号中,并拆分以支持不同样式
*/
const parsedComponentAddTitle = computed(() => {
const t = title.value || ''
const c = content.value || ''
// 尝试替换全角空引号
if (t.includes('“”')) {
const [prefix, suffix] = t.split('“”')
return {
type: 'quote_full',
prefix,
content: c,
suffix,
}
}
// 尝试替换半角空引号
if (t.includes('""')) {
const [prefix, suffix] = t.split('""')
return {
type: 'quote_half',
prefix,
content: c,
suffix,
}
}
// 如果没有找到空引号,直接追加
return {
type: 'normal',
prefix: t,
content: c,
suffix: '',
}
})
/** 获取富文本里面的text */
const pinyinChars = computed(() => {
// 汉字听写1按 # 分割内容
const dictationParts = computed(() => {
if (content.value) {
// 创建临时元素提取HTML文本内容
const div = document.createElement('div')
div.innerHTML = content.value
const text = div.textContent || ''
return text.trim().split(/\s+/).filter(Boolean)
return content.value.split('#').filter(Boolean)
}
return []
})
// 联想对对碰:上方词组
const associationWords = computed(() => {
const name = currentQuestionDetail.value?.Name || ''
return name.split(/[,,、]/).filter(Boolean)
})
// 联想对对碰:答案按逗号分行,只保留汉字
const answerLines = computed(() => {
const answer = currentQuestionDetail.value?.Answer || ''
return answer.split(/[,]/)
.map(line => line.split('').filter(char => /[\u4E00-\u9FA5]/.test(char)))
.filter(line => line.length > 0)
})
// 联想对对碰:关键词索引和文字
const keywordInfo = computed(() => ({
index: currentQuestionDetail.value?.KeyWordsIndex ?? -1,
word: currentQuestionDetail.value?.KeyWord || '',
}))
// 计算全局字符索引(用于匹配 KeyWordsIndex
function getGlobalCharIndex(lineIndex: number, charIndex: number) {
let globalIndex = 0
for (let i = 0; i < lineIndex; i++) {
globalIndex += answerLines.value[i].length
}
return globalIndex + charIndex
}
watch(
() => [currentQuestionMainInfo, currentQuestionDetail],
() => {
// eslint-disable-next-line no-console
console.log('Current currentQuestionMainInfo:', currentQuestionMainInfo.value)
// eslint-disable-next-line no-console
console.log('Current currentQuestionMainInfo:', currentQuestionMainInfo)
console.log('Current currentQuestionDetail:', currentQuestionDetail.value)
},
{ deep: true, immediate: true },
)
@ -81,70 +69,138 @@ watch(
<div class="w-full flex p-6">
<!-- <p>template:{{ template }}</p> -->
<!-- 模板A: 汉字听写1-提示 (拼音+提示) -->
<div v-if="template === QuestionCategoryEnum.ChineseCharacterDictation1 || template === QuestionCategoryEnum.ChineseCharacterDictation2" class="text-center">
<div v-if="template === QuestionCategoryEnum.ChineseCharacterDictation1" class="text-center">
<div class="mb-6 inline-block text-5xl font-bold leading-none">
<div class="ptions-container1 mb-2 text-center text-2xl">
{{ title }}
<div class="flex items-center justify-center gap-4">
<div
v-for="(part, index) in dictationParts" :key="`part-${index}`"
class="text-4xl"
:class="index === 0 ? 'short-content-bg' : 'content-with-bg'"
>
{{ part }}
</div>
</div>
<div class="rich-content ml-3 mt-4 flex gap-1 color-red-600">
<!-- <TianZiGe v-for="(char, index) in pinyinChars" :key="index" :char="char" /> -->
</div>
</div>
<!-- 模板D: 汉字听写 2 词语听写 -->
<div
v-else-if="template === QuestionCategoryEnum.ChineseCharacterDictation2 || template === QuestionCategoryEnum.WordDictation"
class="flex flex-col items-center"
>
<div class="mb-1 text-3xl text-gray-800 font-bold leading-relaxed">
<div class="rich-content content-with-bg ml-3 mt-4 flex text-6xl !px-16 !py-10 !tracking-[0.1em]">
{{ content }}
</div>
</div>
</div>
<!-- 模板B: 汉字听写-同音字 (大字) -->
<!-- 暂时未匹配到枚举保持原样或删除 -->
<!-- <div v-else-if="template === 'TEMPLATE_DICTATION_HOMOPHONE'" class="text-center"> -->
<!-- 模板C: 汉字加一加 (提示+部件) -->
<div v-else-if="template === QuestionCategoryEnum.CharacterRadicalAddition" class="text-center">
<div class="text-[50px] font-bold">
<template v-if="parsedComponentAddTitle.type === 'quote_full'">
<span class="text-black">{{ parsedComponentAddTitle.prefix }}</span>
<span class="text-red-600">{{ parsedComponentAddTitle.content }}</span>
<span class="text-black">{{ parsedComponentAddTitle.suffix }}</span>
</template>
<template v-else-if="parsedComponentAddTitle.type === 'quote_half'">
<span class="text-black">{{ parsedComponentAddTitle.prefix }}"</span>
<span class="text-red-600">{{ parsedComponentAddTitle.content }}</span>
<span class="text-black">"{{ parsedComponentAddTitle.suffix }}</span>
</template>
<template v-else>
<span class="text-black">{{ parsedComponentAddTitle.prefix }}</span>
<span class="ml-4 text-red-600">{{ parsedComponentAddTitle.content }}</span>
</template>
<div class="mb-6 inline-block text-5xl font-bold leading-none">
<div class="rich-content ml-3 mt-4 flex gap-1 text-5xl tracking-[0.1em]">
请写出含有 <span class="text-color-red !text-6xl">{{ content }}</span>的汉字书写时间为60秒
</div>
</div>
</div>
<!-- 模板D: 词语听写 (拼音+提示) -->
<div v-else-if="template === QuestionCategoryEnum.WordDictation" class="flex flex-col items-center">
<div class="mb-8 flex flex-wrap justify-center gap-6">
<TianZiGe v-for="(char, index) in pinyinChars" :key="index" :char="char" />
<!-- 模板D: 成语写一写1 (拼音+提示) -->
<div v-else-if="template === QuestionCategoryEnum.IdiomWriting1" class="flex flex-col items-center">
<div class="mb-1 text-gray-800 font-bold leading-relaxed">
<div class="rich-content ml-3 mt-4 flex gap-1 text-4xl">
{{ content }}
</div>
</div>
</div>
<!-- 模板E: 成语-文字要求 -->
<div v-else-if="template === QuestionCategoryEnum.IdiomWriting1 || template === QuestionCategoryEnum.IdiomWriting2" class="text-center">
<div v-else-if="template === QuestionCategoryEnum.IdiomWriting2" class="text-center">
<div class="mb-8 text-4xl text-gray-800 font-bold">
<!-- {{ content }} -->
<div class="rich-content" v-html="content" />
<NImage :src="ImageUrl" preview-disabled width="300" object-fit="contain" />
</div>
</div>
<!-- 模板G: 诗词理解-选择题 (通用选择题模板) -->
<div v-else-if="template === QuestionCategoryEnum.PoetryComprehension" class="w-full flex flex-col items-center">
<div class="options-container text-2xl">
{{ title }}
</div>
<div class="mb-1 text-3xl text-gray-800 font-bold leading-relaxed">
<div class="rich-content" v-html="content" />
</div>
</div>
<!-- 模板ChangeWords: 换字组成语 -->
<div v-else-if="template === QuestionCategoryEnum.ChangeWords" class="w-full flex flex-col items-center">
<div class="content-with-bg mb-1 mt-10 p-6 text-6xl text-gray-800 font-bold !px-16 !py-8">
{{ content }}
</div>
</div>
<!-- 模板: 场景猜诗句 -->
<div v-else-if="template === QuestionCategoryEnum.SceneBasedPoemGuessing" class="w-full flex flex-col items-center">
<div class="mb-1 p-16 text-3xl text-gray-800 font-bold leading-relaxed line-height-20">
<div class="rich-content" v-html="content" />
</div>
</div>
<!-- 模板: 联想对对碰 -->
<div
v-else-if="template === QuestionCategoryEnum.AssociationMatching"
class="w-full flex flex-col items-center gap-8"
>
<!-- 上方词组 -->
<div class="flex flex-wrap justify-center gap-4">
<div v-for="(word, index) in associationWords" :key="`word-${index}`" class="association-word text-bold">
{{ word }}
</div>
</div>
<!-- 下方答案字符按逗号分行 -->
<div class="flex flex-col items-center gap-3">
<div v-for="(line, lineIndex) in answerLines" :key="`line-${lineIndex}`" class="flex gap-4">
<div
v-for="(char, charIndex) in line" :key="`char-${lineIndex}-${charIndex}`"
class="association-char text-5xl"
>
<span v-if="getGlobalCharIndex(lineIndex, charIndex) === keywordInfo.index">
{{ keywordInfo.word }}
</span>
</div>
</div>
</div>
</div>
<!-- 模板: 字词飞花令 -->
<div
v-else-if="template === QuestionCategoryEnum.CharacterWordFlowerDrinkingGame"
class="w-full flex flex-col items-center"
>
<div class="options-container text-5xl">
请回答带有{{ content }}的诗词
</div>
</div>
<!-- 模板: 诗词常识 -->
<div v-else-if="template === QuestionCategoryEnum.PoetryCommonKnowledge" class="w-full flex flex-col items-center">
<div class="mb-1 p-16 text-3xl text-gray-800 font-bold leading-relaxed line-height-20">
<div class="rich-content" v-html="content" />
</div>
</div>
<!-- 模板: 逆向接诗句 -->
<div v-else-if="template === QuestionCategoryEnum.ReversePoemMatching" class="w-full flex flex-col items-center">
<div class="mb-1 mt-20 text-5xl text-gray-800 font-bold leading-relaxed">
<div class="rich-content" v-html="content" />
</div>
</div>
<div v-else class="text-red-500">
<div class="mb-6 inline-block text-5xl font-bold leading-none">
<div class="ptions-container1 mb-2 text-center text-2xl">
{{ title }}
</div>
<div class="rich-content ml-3 mt-4 flex gap-1">
{{ content }}
</div>
</div>
未知的题目模板: {{ template }}
</div>
</div>
@ -348,5 +404,53 @@ watch(
margin: 0 auto;
vertical-align: middle;
}
:deep(p),
:deep(span),
:deep(div) {
font-size: 2rem; /* text-5xl */
}
}
.content-with-bg {
background: url('@/assets/imgs/user/content-bg.png') no-repeat center;
background-size: 100% 100%;
border-radius: 12px;
padding: 20px 30px;
letter-spacing: 0.4em;
}
.short-content-bg {
background: url('@/assets/imgs/user/short-content-bg.png') no-repeat center;
background-size: 100% 100%;
border-radius: 12px;
padding: 20px 30px;
letter-spacing: 0.1em;
}
.association-word {
background: url('@/assets/imgs/user/dui-kuang.png') no-repeat center;
background-size: 100% 100%;
min-width: 160px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
font-size: 32px;
font-weight: bold;
color: white;
padding: 0 20px;
}
.association-char {
background: url('@/assets/imgs/user/dui-text-bg.png') no-repeat center;
background-size: 100% 100%;
width: 100px;
height: 100px;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
color: white;
}
</style>

View File

@ -83,13 +83,13 @@ async function getUserRankList() {
render(row: TeamData) {
const rank = row.rank
if (rank === 1) {
return <NTag type="warning" size="large" round>🏆</NTag>
return <NTag type="warning" size="large" class="!py-6 !text-3xl" round>🏆</NTag>
}
if (rank === 2) {
return <NTag type="info" size="large" round>🥈</NTag>
return <NTag type="info" size="large" class="!py-6 !text-3xl" round>🥈</NTag>
}
if (rank === 3) {
return <NTag type="success" size="large" round>🥉</NTag>
return <NTag type="success" size="large" class="!py-6 !text-3xl" round>🥉</NTag>
}
return <span>{rank}</span>
},
@ -140,14 +140,17 @@ function rowClassName(row: TeamData) {
<div class="leaderboard-container">
<div class="leaderboard-header">
<NImage :src="title" alt="logo" preview-disabled class="mt--60px" object-fit="contain" />
<p class="mt--20px text-center text-sm text-#6b778d">
<p class="mt--20px text-center text-lg text-#6b778d">
"勤学如春起之苗,不见其增,日有所长"
</p>
<ActionButton v-if="hasExtraTimeBtn" class="position-absolute bottom-20px right-20px" type="text" text="加时赛" @click="handleAddTime" />
<ActionButton
v-if="hasExtraTimeBtn" class="position-absolute bottom-20px right-20px" type="text" text="加时赛"
@click="handleAddTime"
/>
</div>
<div class="leaderboard-content">
<NDataTable
:columns="columns" :data="tableData" :bordered="false" :bottom-bordered="false"
:columns="columns" :data="tableData" :bordered="false" :bottom-bordered="false" size="large"
:row-class-name="rowClassName" class="rank-table"
/>
</div>
@ -177,7 +180,7 @@ function rowClassName(row: TeamData) {
align-items: center;
justify-content: center;
background: url('@/assets/imgs/user/team-bg.svg') no-repeat center center;
background: url('@/assets/imgs/user/team-bg.webp') no-repeat center center;
background-size: 100% 100%;
transform-origin: center;
padding: 40px 20px;

View File

@ -49,8 +49,8 @@ function handleNext() {
<template>
<CompetitionLayout
:show-back="true" :show-next="true" :title="activityName" next-btn-text="下一步" @back="handleBack"
@next="handleNext"
:show-back="true" back-btn-text="返回" :show-next="true" :title="activityName" next-btn-text="下一步"
@back="handleBack" @next="handleNext"
>
<div class="items-flex-start h-full w-full flex justify-center font-sans">
<div class="rules-content-wrapper">

View File

@ -87,7 +87,7 @@ onMounted(() => {
</script>
<template>
<CompetitionLayout :show-back="true" :show-next="true" next-btn-text="下一步" :show-title="false" @next="handleNext" @back="handleBack">
<CompetitionLayout :show-back="true" back-btn-text="返回" :show-next="true" next-btn-text="下一步" :show-title="false" @next="handleNext" @back="handleBack">
<!-- Scroll Content -->
<div class="scroll-container">
<!-- 卷轴背景动画容器 -->
@ -111,7 +111,7 @@ onMounted(() => {
:style="{ '--delay': `${index * 0.4}s` }" @click="selectTeam(item.id)"
>
<div class="icon-wrapper">
<img src="@/assets/imgs/user/team-title-icon.svg" alt="team-icon" class="h-full w-full object-cover">
<img src="@/assets/imgs/user/team-title-icon.webp" alt="team-icon" class="h-full w-full object-cover">
</div>
<div class="team-name">
{{ item.name }}
@ -175,10 +175,21 @@ onMounted(() => {
}
}
// 浮动动画关键帧
@keyframes float {
0%,
100% {
transform: translateY(0px);
}
50% {
transform: translateY(-15px);
}
}
.title-section {
position: absolute;
top: 18%; // 使用百分比定位,适应不同比例
left: 7%; // 微调位置,根据 1920x1080 下的视觉效果调整
top: 130px; // 使用固定像素值,确保在卷轴内部
left: 40px; // 距离左边缘的固定距离
z-index: 10;
.scroll-bg {
@ -193,6 +204,38 @@ onMounted(() => {
}
}
// 添加响应式适配
@media (max-width: 1920px) {
.title-section {
top: 70px;
left: 50px;
}
}
@media (max-width: 1440px) {
.title-section {
top: 60px;
left: 40px;
.scroll-bg .main-title {
font-size: 2.5rem;
letter-spacing: 15px;
}
}
}
@media (max-width: 1024px) {
.title-section {
top: 50px;
left: 30px;
.scroll-bg .main-title {
font-size: 2rem;
letter-spacing: 10px;
}
}
}
.competition-layout :deep(.main-content) {
display: flex;
align-items: center;
@ -217,10 +260,12 @@ onMounted(() => {
display: flex;
align-items: center;
justify-content: center;
background: url('@/assets/imgs/user/team-bg-animation.svg') no-repeat center center;
background: url('@/assets/imgs/user/team-bg-animation.webp') no-repeat center center;
background-size: 100% 100%;
transform-origin: center; // 确保从中心展开
will-change: clip-path; // 优化性能
will-change: clip-path, transform; // 优化性能
animation: float 3s ease-in-out infinite; // 添加浮动动画
padding: 60px 80px; // 添加内边距,确保内容在卷轴内部
&::before {
left: -15px;
@ -232,11 +277,12 @@ onMounted(() => {
}
.scroll-content {
width: 80%;
height: 80%;
width: 80%; // 减小宽度,为标题留出空间
height: 70%; // 调整高度
display: flex;
align-items: center;
justify-content: center;
// margin-left: 120px; // 为左侧标题留出空间
}
.teams-grid {

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@ export default defineConfig((configEnv) => {
},
},
},
plugins: setupVitePlugins(viteEnv, buildTime),
plugins: setupVitePlugins(viteEnv, buildTime, configEnv.command === 'build'),
define: {
BUILD_TIME: JSON.stringify(buildTime),
},

View File

@ -1,468 +0,0 @@
{
"question_bank": [
{
"QuestionId": 27,
"Name": "jiū 表示小鸟的叫声",
"Answer": "啾",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"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": ""
}
]
}

View File

@ -0,0 +1,100 @@
{
"question_bank": [
{
"QuestionId": 34,
"Name": "<p>诗人袁枚写的与<strong>美食</strong>有关的书是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.《食经》&nbsp; &nbsp; B.《食珍录》&nbsp; &nbsp; C.《红楼梦》&nbsp; &nbsp; D.《随园食单》</strong></p>",
"Answer": "D",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“我家洗砚池头树”引用了一位<strong>书法家</strong>的典故,这位书法家是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.王献之&nbsp; &nbsp; B.王羲之&nbsp; &nbsp; C.王冕&nbsp; &nbsp; D.柳公权</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“诗中有画,画中有诗”评价的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.杜牧的诗画风格</strong></p><p><strong>&nbsp; &nbsp;B.刘禹锡的诗画风格</strong></p><p><strong>&nbsp; &nbsp;C.苏轼的诗画风格</strong></p><p><strong>&nbsp; &nbsp;D.王维的诗画风格</strong></p>",
"Answer": "D",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>被闻一多称为“<strong>诗中的诗</strong>,顶峰上的顶峰”的诗歌作品是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.刘希夷的《代悲白头翁》</strong></p><p><strong>&nbsp; &nbsp;B.杨广的《春江花月夜》</strong></p><p><strong>&nbsp; &nbsp;C.张若虚的《春江花月夜》</strong></p><p><strong>&nbsp; &nbsp;D.李白的《蜀道难》</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“<strong>梅妻鹤子</strong>”指的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.林逋&nbsp; &nbsp; B.梅尧臣&nbsp; &nbsp; C.苏舜钦&nbsp; &nbsp; D.王安石</strong></p>",
"Answer": "A",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“一门父子三词客,千古文章八大家。”这副对联中提到的“<strong>三父子</strong>”是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.曹操、曹丕、曹植</strong></p><p><strong>&nbsp; &nbsp;B.苏洵、苏轼、苏辙</strong></p><p><strong>&nbsp; &nbsp;C.班彪、班固、班超</strong></p><p><strong>&nbsp; &nbsp;D.阮瑀、阮籍、阮咸</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>诗人刘禹锡被<strong>称</strong>为(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“诗鬼”&nbsp; &nbsp; B.“诗豪”&nbsp; &nbsp; C.“诗圣”&nbsp; &nbsp; D.“诗仙”</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>有关诗人卢钺的信息,<strong>不正确</strong>的一项是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.别号梅坡</strong></p><p><strong>&nbsp; &nbsp;B.代表作《雪梅》</strong></p><p><strong>&nbsp; &nbsp;C.与辛派词人陈亮是好友</strong></p><p><strong>&nbsp; &nbsp;D.宋朝人</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>诗人王昌龄被<strong>称</strong>为(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“五言圣手”&nbsp; &nbsp; B.“七绝圣手”&nbsp; &nbsp; C.“七言圣手”&nbsp; &nbsp; D.“七绝诗人”</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>李商隐与杜牧<strong>合称</strong>&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“李杜”&nbsp; &nbsp; B.“杜李”&nbsp; &nbsp; C.“小李杜”&nbsp; &nbsp; D.“唐诗双杰”</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“南朝四百八十寺”中,“<strong>南朝</strong>”指的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.在南方建都的王朝</strong></p><p><strong>&nbsp; &nbsp;B.宋、齐、魏、陈四个朝代的总称</strong></p><p><strong>&nbsp; &nbsp;C.宋、齐、梁、陈四个朝代的总称</strong></p><p><strong>&nbsp; &nbsp;D.在南京建都的王朝</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“<strong>初唐四杰</strong>”是指(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.张若虚、张旭、孔融和贺知章</strong></p><p><strong>&nbsp; &nbsp;B.王勃、杨炯、卢照邻和骆宾王</strong></p><p><strong>&nbsp; &nbsp;C.高适、王昌龄、岑参和王之涣</strong></p><p><strong>&nbsp; &nbsp;D.贺知章、张若虚、张旭和包融</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -38,6 +38,9 @@ interface Question {
Type: string
IsGood: number
ImageUrl: string
IsDisabled: boolean
KeyWord: string
KeyWordsIndex: number
}
async function importQuestions() {
@ -88,6 +91,9 @@ async function importQuestions() {
Type: question.Type,
IsGood: question.IsGood,
ImageUrl: question.ImageUrl || '',
IsDisabled: question.IsDisabled || false,
KeyWord: question.KeyWord || '',
KeyWordsIndex: question.KeyWordsIndex || 0,
}
// 发送请求

View File

@ -0,0 +1,244 @@
{
"question_bank": [
{
"QuestionId": 33,
"Name": "年",
"Answer": "年年岁岁花相似,岁岁年年人不同。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "梅",
"Answer": "墙角数枝梅,凌寒独自开。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "竹",
"Answer": "咬定青山不放松,立根原在破岩中。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "柳",
"Answer": "碧玉妆成一树高,万条垂下绿丝绦。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "飞",
"Answer": "飞流直下三千尺,疑是银河落九天。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "雨",
"Answer": "清明时节雨纷纷,路上行人欲断魂。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "春",
"Answer": "春色满园关不住,一枝红杏出墙来。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "一",
"Answer": "一道残阳铺水中,半江瑟瑟半江红。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "三",
"Answer": "故人西辞黄鹤楼,烟花三月下扬州。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "小",
"Answer": "小荷才露尖尖角,早有蜻蜓立上头。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "月",
"Answer": "床前明月光,疑是地上霜。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "天",
"Answer": "天苍苍,野茫茫,风吹草低见牛羊。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "水",
"Answer": "问渠那得清如许?为有源头活水来。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "人",
"Answer": "桃花潭水深千尺,不及汪伦送我情。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "花",
"Answer": "待到重阳日,还来就菊花。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "红",
"Answer": "接天莲叶无穷碧,映日荷花别样红。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "白",
"Answer": "一行白鹭上青天。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "山",
"Answer": "横看成岭侧成峰,远近高低各不同。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "河",
"Answer": "三万里河东入海,五千仞岳上摩天。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "秋",
"Answer": "自古逢秋悲寂寥,我言秋日胜春朝。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "千里",
"Answer": "欲穷千里目,更上一层楼。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "黄河",
"Answer": "黄河之水天上来,奔流到海不复回。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "洛阳",
"Answer": "洛阳亲友如相问,一片冰心在玉壶。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "东风",
"Answer": "等闲识得东风面,万紫千红总是春。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "桃花",
"Answer": "西塞山前白鹭飞,桃花流水鳜鱼肥。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "黄鹂",
"Answer": "两个黄鹂鸣翠柳,一行白鹭上青天。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "相思",
"Answer": "红豆生南国,春来发几枝?愿君多采撷,此物最相思。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "江南",
"Answer": "春风又绿江南岸,明月何时照我还。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "燕子",
"Answer": "旧时王谢堂前燕,飞入寻常百姓家。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 33,
"Name": "牧童",
"Answer": "借问酒家何处有?牧童遥指杏花村。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -0,0 +1,204 @@
{
"question_bank": [
{
"QuestionId": 31,
"Name": "小明和家人去西湖旅游。晴朗时,湖面波光粼粼,美极了;细雨中,湖面雾气蒙蒙,也别有一番韵味。他看着这迷人的湖光山色,心想:",
"Answer": "水光潋滟晴方好,山色空蒙雨亦奇。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "春天,你和姐姐在路上看到一棵很大的柳树,翠绿又茂密的枝条在风中轻轻摇摆,就像一条条绿丝带在随风舞蹈。姐姐正想拍照,你脱口而出一句诗:",
"Answer": "碧玉妆成一树高,万条垂下绿丝绦。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "晚上,你和爸爸在湖边餐厅吃饭。窗外月光如水,湖中央那座翠绿的小岛,远远望去,就像一只精巧的青螺放在白银盘子里。这让你想到了一句诗:",
"Answer": "遥望洞庭山水翠,白银盘里一青螺。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "大年初一一早,阳光温暖,家家户户都在贴春联。你帮爸爸撕下旧春联,贴上红彤彤的新春联。爸爸笑着说:“旧的去了,新的来了,新的一年我们要红红火火!”看着贴好的春联,你想到了那句诗:",
"Answer": "千门万户曈曈日,总把新桃换旧符。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "深秋的公园里,一池荷叶已经枯萎凋谢。秋霜中,路边的菊花虽然花瓣落了,它却依然挺立着枝干。看着这一幕,你想到了哪句诗?",
"Answer": "荷尽已无擎雨盖,菊残犹有傲霜枝。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "中秋夜,全家在阳台赏月,妈妈端来月饼,给大家讲了嫦娥因为偷吃仙丹奔月的故事。你托着下巴看着天上又圆又亮的月亮,突然想到嫦娥会不会很孤单,转而想到了一句诗:",
"Answer": "嫦娥应悔偷灵药,碧海青天夜夜心。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "你和小伙伴去爬山。你们发现,从正面看山峦连绵起伏,从侧面看却成了高耸的山峰。原来站的位置不同,看到的景色也全然不同。这让你想到了苏轼的著名诗句:",
"Answer": "横看成岭侧成峰,远近高低各不同。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "夏季的一天,你和家人正在湖上泛舟,天色突然变得漆黑,像打翻的墨汁,豆大的雨点噼里啪啦地砸下来,像无数颗珍珠一样,在小船周围的水面上跳跃、飞溅,溅起的水花打湿了船身。这样的情况让你想到了苏轼的一句诗:",
"Answer": "黑云翻墨未遮山,白雨跳珠乱入船。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "你的好朋友因为父母工作调动,要转学去其他地方。送别时,他有点担心到了一个陌生的环境会感到孤单。你拍拍他的肩膀,很肯定地说:“放心吧,你这么优秀又开朗,走到哪里都会有人跟你玩的!正如那句诗所说……”",
"Answer": "莫愁前路无知己,天下谁人不识君?",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "夕阳的余晖铺在水上,江水一半呈现出碧绿色,另一半则是殷红色,交织在一起美极了。这时你脑海中浮现出一句诗:",
"Answer": "一道残阳铺水中,半江瑟瑟半江红。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "冬天来了,你看着窗外洁白的梅花和纷纷扬扬飘落的雪花。妈妈在一旁说道:“雪花真好看,洁白晶莹。”姐姐说:“梅花才好看,而且它是真正的花,有香味。”她们的争论让你想到了一句诗:",
"Answer": "梅须逊雪三分白,雪却输梅一段香。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "劳动课去果园,你看到梅子变得金黄,杏子也长得圆滚滚的。旁边的田野里,荞麦花雪白一片,油菜花却已经有些稀疏了。这初夏时节的乡村景象,让你忍不住背出一句诗:",
"Answer": "梅子金黄杏子肥,麦花雪白菜花稀。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "四月,你和家人去山里玩,发现山下的花都谢了,不禁有点失望。爬到半山腰时,你们忽然看见了一座小寺庙,寺庙旁几棵桃树开得正艳,粉嘟嘟的花瓣在风里轻轻摇晃。这让你想到了一句诗:",
"Answer": "人间四月芳菲尽,山寺桃花始盛开。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "你去参观农耕展览馆,看到左边展区有农民白天锄地的雕塑,右边展区是夜晚农妇纺线的场景。讲解员说:“古代农村是全家分工,昼夜忙碌。”你立刻想到一句诗:",
"Answer": "昼出耘田夜绩麻,村庄儿女各当家。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "夏天,小明蹲在池塘边玩,看到池水清澈见底,连水底的小石子都看得一清二楚。于是他顺着水流往上游走,发现原来是有活水在源源不断地流进来。他顿时想到了一句诗:",
"Answer": "问渠那得清如许?为有源头活水来。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "小明家有一个特别干净的小院子,爷爷奶奶每天都会把院子打扫得一尘不染,一点青苔都没有。院子里还有爷爷奶奶亲手种下并且精心打理的各种各样的花,有月季、茉莉、菊花等。你去他家玩时,想到了一句诗:",
"Answer": "茅檐长扫净无苔,花木成畦手自栽。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "美术课上,小明只用水墨画了一幅梅花。虽然没有鲜艳的颜色,但他觉得这梅花自有清气,不需要别人赞赏它的颜色好不好看。这正是那句诗所描写的意境:",
"Answer": "不要人夸好颜色,只留清气满乾坤。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "春天,你和朋友去公园写生。樱花、桃花、迎春花等都在春风的吹拂下摇动起来。你将眼前的一幕画了下来,还在画纸角落题了一句朱熹的诗:",
"Answer": "等闲识得东风面,万紫千红总是春。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "早春的上学路上,天正下着蒙蒙细雨,让空气都变得湿润起来。远远望去,地上像铺了一层绿毯,可走近仔细一看,草芽太小,绿色反而看不清了。这奇妙的景象让你想到了:",
"Answer": "天街小雨润如酥,草色遥看近却无。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "春天的时候,你和小伙伴们在一条小巷里散步。突然,你抬头看到一面院墙上探出了几朵娇艳的红花,红得那么鲜亮,把整个墙头都点亮了!大家不禁猜测院墙内会是一幅怎样的景象。这时,你想到了一句能表现此情此景的诗:",
"Answer": "春色满园关不住,一枝红杏出墙来。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "爷爷年轻时就离开家乡工作,现在年纪大了才回到老家。虽然他说话的口音没变,可头发已经花白了。你看着他,想到了一句诗:",
"Answer": "少小离家老大回,乡音无改鬓毛衰。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "地理课上,老师播放视频:黄河水从西向东奔流,最后注入大海;华山高耸入云,山峰直插云霄,好像天都要被戳破了。你看着这壮丽的画面,心潮澎湃,想到了一句诗:",
"Answer": "三万里河东入海,五千仞岳上摩天。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "暑假,乐乐和好朋友去江边玩。他们坐在岸边,看远处的小船慢慢驶向远方,船越来越小,最后消失不见,眼前只剩下宽阔的江水,缓缓流向天边。看到这样的画面,乐乐想到了一句诗:",
"Answer": "孤帆远影碧空尽,唯见长江天际流。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "小明在学校花园里观察到,一根竹子被冬雪压弯了腰,被大风吹得东倒西歪,它却怎么也不肯倒下。这让小明想到了一句诗:",
"Answer": "千磨万击还坚劲,任尔东西南北风。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 31,
"Name": "夏日的西湖,阳光洒满湖面。你在湖边放眼望去,满湖翠绿的荷叶仿佛要延伸到天际,点缀其间的荷花在阳光下红得格外娇艳。看到此情此景,你想到了哪句诗?",
"Answer": "接天莲叶无穷碧,映日荷花别样红。",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -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": ""
}
]
}

View File

@ -0,0 +1,108 @@
{
"question_bank": [
{
"QuestionId": 5,
"Name": "表示团结的四字成语",
"Answer": "万众一心、众志成城、精诚团结、风雨同舟、患难与共、群策群力、和衷共济、同舟共济、齐心协力、守望相助……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“足”的四字成语",
"Answer": "美中不足、捷足先登、足不出户、酒足饭饱、无足轻重、心满意足、画蛇添足、手足无措、足智多谋、不足挂齿……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“语”和“言”两个字的四字成语",
"Answer": "不言不语、只言片语、三言两语、千言万语、豪言壮语、少言寡语、自言自语、甜言蜜语、花言巧语、风言风语……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "表示关系好的四字成语",
"Answer": "形影不离、情同手足、亲密无间、莫逆之交、刎颈之交、肝胆照照、八拜之交、情深似海、如胶似漆、深情厚谊……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“马”的四字成语",
"Answer": "害群之马、车水马龙、万马齐喑、兵荒马乱、马马虎虎、人仰马翻、走马观花、马到成功、千军万马、单枪匹马……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“安”的四字成语",
"Answer": "随遇而安、安居乐业、安身立命、一路平安、国泰民安、惴惴不安、局促不安、坐卧不安、忐忑不安、安然无恙……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "表示学习刻苦的四字成语",
"Answer": "废寝忘食、勤学苦练、闻鸡起舞、牛角挂书、凿壁偷光、焚膏继晷、囊萤映雪、韦编三绝、孜孜不倦、悬梁刺股……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "表示看的四字成语",
"Answer": "东张西望、察言观色、走马观花、左顾右盼、侧目而视、目不转睛、极目远眺、目不暇接、一目十行、探头探脑……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有两种颜色的四字成语",
"Answer": "姹紫嫣红、万紫千红、金碧辉煌、桃红柳绿、黑白分明、青山绿水、唇红齿白、青出于蓝、青黄不接、白纸黑字……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "表示珍贵的四字成语",
"Answer": "无价之宝、奇珍异宝、凤毛麟角、绝无仅有、价值连城、和璧隋珠、金玉良言、沧海遗珠、千金难买、吉光片羽……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“星”的四字成语",
"Answer": "星星点点、众星拱月、月明星稀、吉星高照、披星戴月、星光灿烂、星罗棋布、星月交辉、斗转星移、大步流星……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "含有“风”和“雨”两个字的四字成语",
"Answer": "风雨同舟、春风化雨、和风细雨、呼风唤雨、狂风暴雨、血雨腥风、凄风苦雨、风雨无阻、风雨交加、风吹雨打……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 5,
"Name": "表示不安的四字成语",
"Answer": "心惊肉跳、忐忑不安、坐立不安、惊慌失措、胆战心惊、诚惶诚恐、惊弓之鸟、七上八下、如坐针毡、提心吊胆……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -0,0 +1,44 @@
{
"question_bank": [
{
"QuestionId": 35,
"Name": "不足为奇",
"Answer": "不足为怪、不足为虑、不足为凭、不足为训、不以为奇、不足为据",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 35,
"Name": "不以为然",
"Answer": "不以为耻、不以为意、不以为怪、不以为奇、不以为异、信以为然",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 35,
"Name": "一无所长",
"Answer": "一无所获、一无所成、一无所得、一无所好、一无所见、一无所求、一无所能、一无所取、一无所有、一无所知、别无所长",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 35,
"Name": "舍己为人",
"Answer": "舍己为公、舍己成人、舍己从人、舍己救人、舍己耘人",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 35,
"Name": "百无一是",
"Answer": "百无一失、百无一用、百无一漏、百无一能、百无一误",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -2,8 +2,16 @@
"question_bank": [
{
"QuestionId": 2,
"Name": "",
"Answer": "辆、轼、转、软、轮、辐、输、轨、轩、轻、轺、辐、轴、轷、轱、辊、辎、轺、轸、辋、轳、轼、辘、辔、斩、连、阵、军、轰、库、辗、载、辈、晕、轳",
"Name": "",
"Answer": "时、间、最、早、晨、易、显、阳、香、晚、星、竟、春、景、莫、旧、暗、晓、替、暖……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "王",
"Answer": "玉、瑶、瑞、玩、球、玲、珀、珍、环、理、珊、瑚、班、现、瑰、玻、璃、玫、琳、琐……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
@ -11,95 +19,23 @@
{
"QuestionId": 2,
"Name": "木",
"Answer": "林、森、树、枝、柱、板、柜、桌、椅、楼、桥、村、材、松、柏、杨、柳、梅、李、杏、桃、梨、棋、格、栋、梁、架、根、植、森、杉、枯、朽、荣、荣、相、查、样、标、校、核、桃、根、株、椅、架、械、植、棚、橙",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "水",
"Answer": "冰、泉、泵、尿、沓、沝、淼、氼、沝、沯、沝、沯、沀、汆、氽、汞、沗、沓、汖、沯、沊、沝、沯、氼、沝、沓、沯、泵、沓、沗、沯、氼、沝、沓、沯、氼、沝、沓、沯、氼、沝、沓",
"Answer": "本、相、样、机、林、极、李、根、格、术、集、查、树、权、案、模、采、楼、标、板……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "炎、焱、燚、灭、灰、灯、灶、灿、灼、灾、灵、灸、炒、炊、炕、炉、炖、炙、炬、炮、炸、烤、烧、烟、烫、烽、焰、焚、煤、煌、煲、熨、燎、燃、燥、爆、烁、炉、炊、炕、灶",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "口",
"Answer": "品、吕、回、日、田、申、甲、由、电、里、困、围、囚、图、圆、国、固、因、团、园、图、园、困、圆、囡、因、围、囟、囝、回、囧、囹、固、图、囿、圃、圄、圉、圈、圜、圆、园、围、困、图、国、园",
"Name": "",
"Answer": "在、地、至、场、城、社、块、境、基、堂、坚、压、坏、增、庄、幸、圣、坛、墙、塞……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "日",
"Answer": "旦、早、旭、旮、旯、时、旷、旺、昨、昭、映、昧、是、显、星、春、昧、晓、晃、晌、晷、晨、晚、晾、晴、晶、晸、暑、暄、暗、暖、暇、暝、暴、暮、暾、曛、曜、曝、曦、曩、日",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "月",
"Answer": "朋、明、阴、朝、朗、期、朦、胧、肤、肥、服、胡、有、背、胃、胆、肝、肚、肠、肺、肢、肿、胀、腰、脚、腿、膀、臂、膝、脑、胖、脸、脐、胜、脉、胸、脊、育、背、胡",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "心",
"Answer": "必、志、忍、忌、忘、闷、忐、忑、忠、念、忽、思、怠、怎、怨、急、总、恶、恩、息、恳、恁、恋、恐、恕、悲、慈、意、感、想、愈、愿、慧、慰、憋、憨、憩、懋、懿、忒、忐、忑",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "手",
"Answer": "拜、掰、拿、拳、掌、掰、掱、摩、摹、擎、攀、挚、挛、挚、挲、撵、撅、撷、撺、擀、擘、擂、擞、攒、攉、攫、攥、攴、攵、收、改、攻、放、政、故、效、敏、救、教、败、敌、救",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "人",
"Answer": "从、众、今、介、以、令、全、会、合、企、余、伞、命、舍、拿、盒、盆、盒、拿、龛、介、仓、个、仄、以、令、全、会、企、众、从、介、以、令、全、会、合、企、余、伞、命",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "言",
"Answer": "信、誓、警、誉、詹、計、討、訓、記、訪、評、註、証、詠、試、詩、話、誠、誼、誤、說、読、課、調、談、請、論、諭、諦、諮、諸、諾、謀、謁、謂、謄、謎、謙、講、謝、謠、謬、謹、識、譜、議、護、譽、變",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "金",
"Answer": "鑫、针、钉、钏、钓、钒、钗、钙、钚、钛、钝、钞、钟、钢、钤、钥、钦、钧、钩、钫、钬、钯、钮、钰、钱、钳、钻、钿、钾、铀、铁、铂、铃、铅、铆、铊、铋、铌、铍、铎、铐、铑、铒、铕、铗、铘、铙、铚、铛",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "石",
"Answer": "岩、矿、码、砂、研、砖、砌、砍、泵、硬、破、砸、础、硅、硕、确、碑、碗、碟、碾、磕、磁、磅、磨、磷、磺、礁、础、碣、碲、碴、碹、碳、碣、磬、磲、磴、磷、磺、礁",
"Answer": "码、砍、硬、磅、研、硕、岩、破、碗、碧、碰、碌、砸、矿、砖、碟、砚、确、磨、碎……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
@ -107,63 +43,15 @@
{
"QuestionId": 2,
"Name": "山",
"Answer": "岁、岭、岩、岳、岸、峰、峡、峻、崇、崎、崖、岗、崩、崭、嵌、嵘、崽、巅、巍、岚、岔、岖、岈、岘、岙、岑、岔、岗、岵、岷、岽、岿、峁、峄、峋、峥、峦、峙、峡、峤、峦",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "土",
"Answer": "圭、垚、尘、地、场、址、块、坐、垃、坡、坦、坤、坻、坯、坪、坳、坷、坩、坫、坭、坳、垆、垌、垍、垓、垠、垩、垭、垯、垲、垴、垸、埂、埋、城、埔、域、埏、埕、埘、埙、埚、埝、埤、埭、埯、埸、培、基",
"Answer": "岁、岸、峭、峰、峡、岭、巅、崇、岳、崛、峦、崩、崭、岗、炭、崎、岖、峨、崖、峻……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "冯、驭、驮、驯、驰、驱、驳、驴、驶、驷、驸、驹、驻、驼、驿、驽、驾、骂、骁、骄、骆、骇、骈、骊、骋、验、骏、骐、骑、骒、骓、骖、骗、骚、骛、骜、骝、骞、骟、骠、骡、骢、骣、骤、骥、骧、骊",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "鸟",
"Answer": "鸡、鸣、鸥、鸦、鸭、鸯、鸳、鸽、鸾、鸿、鹃、鹅、鹑、鹉、鹊、鹋、鹛、鹜、鹞、鹣、鹤、鹦、鹬、鹰、鹭、鹳、鹬、鸤、鸧、鸨、鸩、鸪、鸫、鸬、鸭、鸮、鸯、鸰、鸱、鸲、鸴、鸵、鸶、鸷、鸸、鸹、鸺、鸼、鸽",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "鱼",
"Answer": "鱻、渔、鲁、鲂、鲅、鲍、鲈、鲇、鲋、鲎、鲐、鲑、鲒、鲔、鲕、鲚、鲛、鲜、鲞、鲟、鲠、鲤、鲥、鲦、鲧、鲨、鲩、鲫、鲭、鲮、鲰、鲱、鲲、鲳、鲵、鲶、鲷、鲺、鲻、鲽、鲾、鳀、鳁、鳂、鳃、鳄、鳅、鳆、鳇",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "虫",
"Answer": "虬、虮、虱、虹、虾、蚁、蚂、蚕、蛊、蛄、蛆、蛇、蛉、蛋、蛎、蛏、蛐、蛑、蛓、蛔、蛙、蛛、蛞、蛟、蛩、蛭、蛮、蛱、蛲、蛳、蛴、蛸、蛹、蛺、蛾、蜂、蜃、蜇、蜈、蜉、蜊、蜍、蜒、蜓、蜕、蜗、蜘、蜜",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "竹",
"Answer": "竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜、箐、箓",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "禾",
"Answer": "利、秃、秀、私、秉、秆、秄、秈、秕、种、科、秒、秭、秣、秤、秦、秧、秩、租、秫、秸、秽、移、税、稚、稠、稂、稃、程、稆、稍、稔、稗、稞、稟、稠、稳、稷、稻、稼、稽、稿、穆、穑、穗、穰、穸、穻",
"Name": "",
"Answer": "空、究、突、穿、窗、穷、窝、窃、帘、窄、窜、窟、窥、窍、窘、窑、窖、穹、窈、窕……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
@ -171,127 +59,23 @@
{
"QuestionId": 2,
"Name": "米",
"Answer": "类、籽、粉、粒、粕、粗、粘、粟、粜、粝、粞、粳、粢、粤、粥、粲、粱、粮、粹、精、粽、糊、糁、糅、糕、糖、糙、糜、糗、糟、糠、糯、糨、糁、糇、糈、糌、糍、糈、糍、糌、糍",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "纟",
"Answer": "纠、红、纤、纡、约、级、纨、纪、纫、纬、纭、纯、纰、纱、纲、纳、纵、纶、纷、纸、纹、纺、纻、纽、纾、线、绀、绁、绂、练、组、绅、细、织、终、绉、绊、绋、绌、绍、绎、经、绐、绑、绒、结、绔、绕",
"Answer": "精、断、类、粪、料、继、迷、糊、粗、奥、粉、粮、粒、糟、糖、粘、糕、粹、鞠、粥……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "贞、负、贡、财、责、贤、败、账、货、质、贩、贪、贫、贬、购、贮、贯、贰、贱、贲、贵、贶、贷、贸、费、贺、贻、贼、贽、贾、贿、贳、赁、赂、赃、资、赅、赆、赇、赈、赉、赊、赋、赌、赎、赏、赐、赑、赒",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "王",
"Answer": "玉、全、主、弄、玌、玎、玑、玕、玖、玛、玟、玢、环、玩、玮、玲、玳、玷、玻、珊、珍、珑、珈、珉、玻、珠、珐、珙、珞、珥、珧、珩、珲、珺、琀、琊、琏、琐、琚、琛、琨、琬、琮、琰、琯、琳、琴、琵",
"Name": "",
"Answer": "蜜、蜂、蚯、蚓、蝴、蝶、蜻、蜓、虽、独、蝌、蚪、蜘、蛛、虾、蚊、蛇、蚕、蜀、虹……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "赴、赵、赶、起、趁、趋、超、越、趄、趔、趑、趣、趟、趠、趡、趤、趦、趪、趫、趬、趭、趮、趯、趱、赶、起、越、超、趋、趁、趣、趟、趔、趑、趠、趡、趤、趦、趪、趫、趬、趭、趮、趯、趱",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "足",
"Answer": "趴、趵、趸、趿、跃、跄、跆、跋、跌、跎、跑、跖、跚、跛、距、跣、跨、跪、路、跳、践、跶、跷、跸、跹、跺、跻、跽、踅、踉、踊、踌、踏、踔、踝、踞、踟、踣、踦、踧、踱、踵、踶、踹、踺、踽、蹀、蹁",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "页",
"Answer": "顶、顷、顸、项、顺、须、顼、顽、顾、顿、颁、颂、颃、预、颅、领、颈、颉、颊、颋、颌、颍、颎、颏、颐、频、颓、颔、颖、颗、题、颙、颚、颛、颜、额、颞、颟、颠、颡、颢、颤、颥、颦、颧、顸、项",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "酉",
"Answer": "酒、配、酊、酋、酌、酎、酏、酐、酑、酒、酓、酕、酖、酗、酙、酚、酝、酞、酡、酢、酣、酤、酥、酬、酪、酮、酯、酰、酱、酲、酴、酵、酶、酷、酸、酹、酺、酽、酾、酿、醁、醅、醇、醉、醋、醌、醍、醐",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "艹",
"Answer": "艺、艾、节、芋、芍、芒、芝、芄、芑、芗、芎、芋、芌、芏、芐、芑、芊、芕、芗、芘、芙、芜、芝、芟、芡、芣、芤、芥、芦、芩、芪、芫、芬、芭、芮、芯、芰、花、芳、芷、芸、芹、芺、芽、苇、苋、苌、苍",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "宀",
"Answer": "字、安、宋、完、宏、牢、灾、宝、宗、定、宕、宠、宜、审、官、宛、实、宓、宣、宦、室、宫、宪、客、害、宽、家、宵、宴、宾、宰、案、容、宿、寂、寄、密、寇、富、寐、寒、寓、寞、寝、寤、寥、察、寡、寮",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "阝(左)",
"Answer": "队、阡、阪、阮、阱、防、阳、阴、阶、阻、阿、陀、陂、附、际、陆、陇、陈、陉、陕、降、限、陡、院、除、险、陪、陵、陶、陷、隍、隘、隙、障、隧、隗、隰、隳、陇、陈、陂、陉、陕、陇、陔、陖、陗、陘、陙",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "阝(右)",
"Answer": "邓、邗、邛、邝、邡、邢、邬、邰、邱、邳、邴、邵、邶、邸、邹、邺、邻、郏、郅、郇、郓、郕、郗、郜、郝、郡、郢、郦、郫、郭、郯、郴、郸、都、郾、郿、鄄、鄅、鄌、鄑、鄗、鄘、鄚、鄢、鄣、鄯、鄱、鄹",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "⻊",
"Answer": "路、跑、跳、踏、踩、踢、跪、跟、跨、蹦、蹈、蹭、踮、蹲、跃、跚、踉、跷、踌、踝、踞、踣、踧、踱、踵、踶、踹、踺、蹀、蹁、蹂、蹄、蹅、蹇、蹈、蹊、蹉、蹋、蹑、蹒、蹓、蹔、蹕、蹙、蹟、蹠、蹡、蹢",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "彳",
"Answer": "行、往、征、彼、径、待、徂、徉、很、徇、徕、徒、徐、得、徘、徙、徜、徨、循、微、徳、徴、徯、徭、微、徼、徽、彷、役、彻、佛、征、徂、徉、徊、律、後、徐、徒、得、徘、徙、徕、循、徨、微、徳、徵",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "犭",
"Answer": "犯、犰、犴、犷、犸、犹、狈、狂、狄、狁、狉、狎、狐、狝、狗、狙、狞、狟、狠、狡、狩、独、狭、狮、狯、狰、狱、狲、狳、狴、狺、狼、猁、狻、猃、猇、猓、猕、猖、猗、猘、猛、猜、猝、猞、猡、猢、猥",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "⺮",
"Answer": "竹、竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜",
"Name": "",
"Answer": "自、着、看、相、算、眼、省、睡、睛、冒、眉、瞧、睁、盼、瞬、眠、盯、瞪、盲、眨……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
@ -299,170 +83,26 @@
{
"QuestionId": 2,
"Name": "女",
"Answer": "奶、奴、奸、她、好、如、妃、妄、妆、妇、妈、妍、妩、妓、妪、妒、妨、妞、妯、妲、妹、妻、妾、姆、始、姓、委、姗、妮、妯、妲、妹、妻、妾、姆、始、姓、委、姗、妮、姚、姜、姝、姣、姨、姻、姿、威",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "子",
"Answer": "孔、孕、存、孙、孜、孝、孟、季、孤、孢、孩、孺、孛、孥、学、孨、孪、孬、孭、孮、孯、孰、孱、孳、孵、孶、孷、孹、孻、孼、孽、孾、孿、孔、孕、存、孙、孜、孝、孟、季、孤、孢、孩、孺、孛、孥",
"Answer": "要、好、如、安、她、始、委、奶、妇、姐、姓、姑、妈、妹、妙、姿、娜、姜、妨、娇……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "边、辽、达、过、迈、迁、迅、迄、巡、进、远、违、连、迟、迢、迤、迥、迦、迨、迪、迭、迮、述、迳、迫、迺、追、逅、适、逃、逄、逈、逋、通、逛、逝、逞、速、造、透、逐、逑、递、逖、逗、逦、逡、週",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "⺮",
"Answer": "竹、竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜",
"Name": "",
"Answer": "明、服、望、期、朝、脸、脚、背、脑、胡、胜、朋、脱、股、阴、肩、胆、胸、腿、腾……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "",
"Answer": "扎、打、扑、扒、扔、扛、扣、托、执、扩、扫、扬、扶、抚、技、抠、扰、扼、拒、找、批、扯、抄、折、抓、扳、抡、扮、抢、抑、抛、投、抗、抖、护、扭、把、报、拟、抒、抻、抵、抹、抻、押、抽、抿、拂",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "氵",
"Answer": "汁、汀、汇、汉、污、江、汛、池、汤、汪、沛、沤、沥、沦、汹、沧、沨、沟、没、沏、沔、沙、汽、沃、沂、汹、泛、沧、沩、沪、沉、沈、沁、泐、沫、浅、法、沽、河、沾、泪、沮、油、泱、泳、泞、泻、泼",
"Name": "",
"Answer": "思、备、界、留、细、男、雷、略、鱼、累、番、奋、鼻、畔、苗、兽、畏、畜、亩、胃……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "忄",
"Answer": "忆、忙、忖、忏、忉、忧、忋、快、忓、忔、忕、忡、忤、忪、怅、怆、怊、怍、怏、怑、怗、怙、怛、怕、怫、怦、性、怩、怪、怫、怿、恁、恂、恃、恬、恌、恑、恒、恢、恍、恓、恘、恚、恝、恟、恠、恡、恫",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "灬",
"Answer": "点、烈、热、烹、焦、然、煎、照、熙、熊、熏、熟、熹、熬、热、熏、熈、熟、熹、熏、燮、爇、爢、爣、爤、爥、爦、爧、爨、爩、点、烈、热、烹、焦、然、煎、照、熙、熊、熏、熟、熹、熬、热、熏",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "刂",
"Answer": "刊、刑、划、刈、刍、创、刚、列、刘、则、删、判、别、刭、刮、到、刳、制、刷、刹、刺、刻、刽、刿、剀、剁、剂、剃、削、剌、前、剐、剑、剔、剖、剥、剧、剩、割、剡、剞、剟、剡、剣、剥、剧、剩、割",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "礻",
"Answer": "礼、社、祀、祁、祃、祅、祆、祇、祈、祉、祊、祋、祌、祍、祎、祏、祐、祑、祒、祓、祔、祕、祖、祗、祚、祛、祜、祝、神、祟、祠、祢、祥、祷、祸、祺、祼、祾、禄、禅、禊、禋、福、禔、禕、禖、禘、禚",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "钅",
"Answer": "针、钉、钌、钋、钊、钏、钒、钓、钗、钙、钚、钛、钝、钞、钟、钠、钡、钢、钤、钥、钦、钧、钨、钩、钪、钫、钬、钭、钮、钯、钰、钱、钲、钳、钴、钵、钶、钷、钸、钹、钺、钻、钼、钽、钾、钿、铀、铁",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "冫",
"Answer": "冰、冯、冮、冲、决、冴、冻、况、冷、冶、冹、冺、净、冽、冾、冿、净、凂、凃、凄、凅、准、凇、凉、凊、凋、凌、凍、凓、凔、凕、凖、凗、凘、凚、凛、凝、凞、凟、冰、冯、冮、冲、决、冴、冻、况",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "疒",
"Answer": "疗、疖、疟、疠、疡、疣、疤、疥、疫、疰、疱、疲、疳、疴、疵、疸、疹、疼、疽、疾、痂、痃、痄、病、症、痈、痉、痒、痔、痕、痖、痘、痛、痞、痤、痦、痧、痪、痫、痬、痭、痮、痯、痰、痱、痴、痹、瘁",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "衤",
"Answer": "补、衩、衫、衬、衱、衲、衽、衿、袂、袄、袆、袈、袋、袍、袢、袜、袤、被、袪、袷、袺、裆、裈、裉、裎、裒、裓、裕、裨、裰、裱、裳、裴、裸、裹、裼、製、裾、褂、褊、褐、褓、褙、褛、褥、褪、褫、褰",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "饣",
"Answer": "饥、饦、饧、饨、饭、饮、饫、饪、饬、饲、饯、饰、饱、饴、饵、饶、饷、饸、饹、饺、饻、饼、饽、饾、饿、馀、馁、馃、馄、馅、馆、馇、馈、馉、馊、馋、馌、馍、馏、馐、馑、馒、馓、馔、馕、饥、饦",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "⻏",
"Answer": "邦、邪、邨、邬、邴、邵、邰、邳、邱、邶、邸、邹、邺、邻、郏、郅、郇、郓、郕、郗、郜、郝、郢、郦、郫、郭、郯、郴、郸、都、郾、郿、鄄、鄅、鄌、鄑、鄗、鄘、鄚、鄢、鄣、鄯、鄱、鄹、邛、邝",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "纟",
"Answer": "纠、红、纤、纡、约、级、纨、纪、纫、纬、纭、纯、纰、纱、纲、纳、纵、纶、纷、纸、纹、纺、纻、纽、纾、线、绀、绁、绂、练、组、绅、细、织、终、绉、绊、绋、绌、绍、绎、经、绐、绑、绒、结、绔、绕",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "罒",
"Answer": "罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥、罦、罨、罭、罯、罱、罳、罴、罶、罽、罾、罿、羁、羂、羃、羅、羆、羇、羈、羉、罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "虍",
"Answer": "虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪、虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪、虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "辶",
"Answer": "边、辽、达、过、迈、迁、迅、迄、巡、进、远、违、连、迟、迢、迤、迥、迦、迨、迪、迭、迮、述、迳、迫、迺、追、逅、适、逃、逄、逈、逋、通、逛、逝、逞、速、造、透、逐、逑、递、逖、逗、逦、逡、週",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 2,
"Name": "罒",
"Answer": "罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥、罦、罨、罭、罯、罱、罳、罴、罶、罽、罾、罿、羁、羂、羃、羅、羆、羇、羈、羉、罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
}
]
}

View File

@ -1,458 +1,204 @@
[
{
"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": ""
}
]
{
"question_bank": [
{
"QuestionId": 27,
"Name": "rǎng#意思:喊叫。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "gē#意思:古代的一种兵器。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "zhèng#意思:发愣,发呆。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "jiāng#意思:边界。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "jì#意思:留下的印子。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "záo#意思:打孔,挖掘。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "lǎn#意思:不勤奋。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "chí#意思:舀液体或粉末状物体的小勺。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "chàn#意思:发抖。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "yōng#意思:平凡。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "chóng#意思:重视,尊敬。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "pǔ#意思:种蔬菜、花草的园子或园地。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "chéng#意思:处罚。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "āi#意思:悲伤,悲痛。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "jiàn#意思:山间流水的沟。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "dǎi#意思:捉。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "lǜ#意思:思考。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "fǔ#意思:古代的炊事用具,相当于现在的锅。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "chǒu#意思:看。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "xiè#意思:碎末。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "hàn#意思:广大。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "huò#意思:开阔,通达。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "bāng#意思:小河。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "dǐng#意思:古代煮东西用的器物。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 27,
"Name": "dī#意思:沿河、沿湖或沿海的防水构筑物,多用土石等筑成。",
"Answer": "",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

View File

@ -2,451 +2,203 @@
"question_bank": [
{
"QuestionId": 4,
"Name": "",
"Answer": "巨、且、句、讵、郏、苣、姖、岠、局、拒、拠、洰、汩、车、具、冣、莒、弆、呿、駶、狙、岨、居、拘、拀、淗、湨、澽、忂、炬、柜、歫、昛、歫、举、佝、茮、柩、罝、珇、秬、矩、剧、陱、俱、伹、伿、挶、栨、椇、椐、椈、歫、毩、毱、疽、痀、眗、砠、租、窭、筥、篓、簴、籧、粔、罝、耟、聥、腒、艍、苴、莒、蒟、蘮、虡、蜛、螶、袓、襷、詎、諊、豦、貗、趄、跔、跙、踘、躆、躹、輂、邭、鄓、郹、鄅、鉅、鋸、鐻、閰、陱、雎、颶、駏、駒、駶、驧、髃、鴂、鴃、鵙、鵴、鶋、鼁、鼳",
"Name": "",
"Answer": "夕、汐、矽、穸、兮、西、茜、恓、栖、牺、硒、舾、粞、吸、希、俙、郗、唏、浠、悕、晞、欷、烯、睎、稀、豨、昔、惜、焟、腊、析、菥、淅、晰、皙、蜥、奚、溪、傒、徯、磎、蹊、豀、鼷、息、熄、蒠、瘜、螅、悉、犀、樨、膝、锡、裼、熙、僖、嘻、嬉、熹、暿、熺、羲、曦、爔、窸、蟋、肸、饻、娭、翕、噏、歙、熻、嶲、釐、醯、巇、酅、蠵、觿……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuē",
"Answer": "薛、靴、削、噱、学、穴、乴、峃、嶨、斈、泶、澩、燢、膤、茓、袕、觷、辥、辪、鞾、鳕、鷽、鸴、踅、謔、噱、燢、谑、疶、疨、蒆、辥、鞾、髇、髐、魈、嚻、噰、斅、斆、燢、爚、狘、瞲、籱、蠦、蠸、觷、諔、譃、谑、谔、谻、豰、貜、趞、踅、躞、遯、遪、郺、鄏、鄻、酄、鍌、鎑、鐍、闅、隟、雤、鞾、韕、顨、饇、騔、驜、鱊、鱮、鷍、鷢、鸙、麧、龤",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuè",
"Answer": "月、悦、阅、越、岳、跃、粤、钺、栎、樾、刖、哕、妜、岄、恱、悅、戉、抈、捳、曱、枂、櫟、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、説、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
"Name": "",
"Answer": "其、淇、萁、骐、琪、棋、祺、蜞、旗、鲯、綦、麒、奇、埼、䓫、崎、骑、琦、锜、齐、荠、脐、蛴、歧、岐、跂、圻、祈、旂、芪、祇、疧、畦、亓、祁、俟、耆、愭、鳍、颀、蕲、禥……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "",
"Answer": "区、曲、屈、趋、驱、躯、蛆、祛、麴、诎、岖、阹、憈、敺、斪、欋、氍、焌、煀、璖、癯、磲、筁、籧、粬、紶、翑、胠、臞、菃、蕖、蘧、蛐、蠷、衐、袪、覰、覷、詘、趨、躣、軀、軥、迲、遽、釻、鐻、阹、駆、駈、騶、驅、鰸、鱋、麯、麴、鼩、齲",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuó",
"Answer": "着、卓、灼、浊、琢、酌、啄、斫、茁、倬、诼、禚、浞、涿、濯、焯、禚、窡、籗、籱、缴、罬、蠗、諑、謶、趠、踔、蹠、躅、鉵、鐯、鐲、鵫、鷟、鸐、斀、斲、斵、晫、椓、槕、櫡、汋、淖、灂、炪、灼、烵、犳、琸、矠",
"Name": "",
"Answer": "孛、勃、浡、脖、葧、鹁、渤、伯、泊、柏、铂、舶、鲌、箔、驳、帛、博、搏、馎、膊、镈、薄、髆、欂、礴、瓝、钹、亳、袯、艴、踣、馞、襮、僰",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Cuì",
"Answer": "翠、脆、粹、萃、悴、淬、毳、瘁、粹、竁、粋、紣、綷、翆、脃、膵、臎、襊、鏙、隹、顇、伜、倅、啐、崒、崪、忰、慛、椊、焠、璲、疩、皠、磪、竁、粋、縗、紣、翆、脺、膬、臎、襊、趡、鏙、顇、鷻",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Juàn",
"Answer": "卷、倦、眷、绢、隽、桊、狷、鄄、绢、睠、絭、縳、罥、羂、讂、踡、錈、鎸、鐫、韏、飬、餋、鵑、鷢、奆、姢、帣、悁、惓、慻、捲、梋、棬、泫、淃、焆、獧、瓹",
"Name": "bì",
"Answer": "币、必、毕、坒、庇、芘、哔、毙、筚、陛、狴、梐、跸、闭、佖、邲、诐、苾、咇、泌、珌、柲、毖、铋、秘、馝、辟、碧、璧、壁、避、薜、嬖、臂、襞、躄、敝、蔽、弊、婢、萆、庳、裨、髀、畀、箅、痹、愎、湢、愊、腷、煏、贲、皕、赑、弼、蓖、滗、篦、濞、奰、髲、觱……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuǎn",
"Answer": "选、宣、悬、旋、玄、绚、轩、喧、渲、璇、煊、谖、萱、暄、儇、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhàn",
"Answer": "战、站、占、绽、栈、湛、蘸、颤、佔、偡、嶘、战、戰、搌、栈、棧、椾、榐、橏、欃、湔、湛、澶、灒、琖、皽、碊、站、綻、菚、蘸、虥、袒、襢、覱、詀、謙、譧、譫、趈、蹍、躔、輚、轏、邅、醆、鉆、鋑、鏨、饘、驏、驙、鱣、鸇",
"Name": "",
"Answer": "与、玉、驭、芋、吁、谷、峪、浴、欲、裕、预、滪、域、阈、棫、蜮、雨、郁、育、堉、淯、狱、语、谕、喻、愈、遇、寓、御、誉、豫、菀、聿、茟、昱、煜、饫、妪、彧、钰、悆、尉、蔚、熨、鹆、粥、矞、潏、遹、燏、鹬、毓、隩、薁、燠、鬻、蓣、罭……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Niè",
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Suì",
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
"Name": "jīng",
"Answer": "茎、京、泾、经、荆、菁、猄、旌、惊、晶、腈、睛、粳、兢、精、鲸、麖、鼱、䴖……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuān",
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Chuò",
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
"Name": "shì",
"Answer": "士、仕、氏、舐、示、世、市、式、试、拭、栻、轼、弑、似、势、事、侍、峙、恃、饰、柿、铈、筮、噬、澨、视、是、昰、𬤊、适、室、逝、释、谥、嗜、誓、媞、莳、䏡、螫、贳、奭、襫……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "",
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xùn",
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
"Name": "",
"Answer": "夫、扶、芙、蚨、畉、颫、弗、拂、佛、刜、茀、怫、绋、氟、砩、艴、伏、袱、茯、洑、栿、孚、俘、浮、郛、垺、莩、桴、罦、琈、蜉、服、菔、箙、幅、辐、福、蝠、符、苻、匐、涪、巿、芾、绂、韨、祓、凫、芣、罘、宓、枹、榑、幞、襆、黻……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuì",
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Cuàn",
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
"Name": "yì",
"Answer": "弋、杙、𬬩、乂、刈、苅、艾、义、议、艺、呓、易、忆、亿、仡、屹、亦、弈、奕、㑊、衣、异、抑、意、薏、癔、臆、镱、𫄷、抑、佚、轶、昳、泆、役、译、驿、峄、怿、绎、邑、挹、唈、悒、浥、益、嗌、溢、缢、镒、鹢、螠、翼、翊、翌、羿、熠、翳、裔、谊、逸、蜴、埸、晹、疫、诣、毅、肄、食、燚、㹭、廙、潩、殪、曀、儗、劓、嫕、鹝、瘗、勚、枻、枍、佾、寱、懿、裛、蓺……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Juē",
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuè",
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
"Name": "huì",
"Answer": "卉、汇、会、荟、浍、绘、桧、烩、彗、蔧、嘒、慧、槥、𬭬、讳、哕、秽、诲、晦、贿、惠、僡、蕙、潓、憓、橞、蟪、𬤝、喙、翙、阓、溃、缋、㱮、恚、硊……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuān",
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Qióng",
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
"Name": "",
"Answer": "力、朸、珕、荔、历、呖、坜、枥、沥、疬、苈、𫵷、雳、厉、励、砺、粝、蛎、栃、立、笠、莅、粒、吏、丽、郦、俪、利、莉、俐、猁、浰、痢、栗、傈、凓、溧、篥、例、戾、唳、䓞、隶、砾、栎、轹、跞、𬍛、鬲、疠、沴、詈、鬁、盭……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuè",
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Chuàng",
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
"Name": "",
"Answer": "句、巨、拒、炬、距、苣、讵、岠、钜、秬、粔、据、剧、锯、踞、倨、具、俱、惧、犋、飓、遽、澽、醵、屦、窭、虡、聚、沮、菹……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuān",
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuì",
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
"Name": "",
"Answer": "末、抹、茉、沫、妺、眜、秣、靺、没、殁、陌、貊、脉、莫、漠、寞、镆、瘼、貘、蓦、磨、礳、耱、冒、万、默、嘿、墨、𬙊、眽、貉……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Niè",
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Suì",
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
"Name": "",
"Answer": "陆、录、菉、㟤、渌、绿、琭、禄、碌、睩、箓、醁、逯、𫘧、鹿、麓、漉、辘、䍡、簏、辂、赂、路、蕗、潞、璐、鹭、稑、蓼、僇、勠、戮、露、甪……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuān",
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Chuò",
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
"Name": "wèi",
"Answer": "卫、胃、渭、煟、猬、谓、未、味、为、位、味、畏、喂、碨、尉、蔚、慰、罻、霨、鳚、螱、魏、遗、硙、𬭬……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "",
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xùn",
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
"Name": "",
"Answer": "抇、囫、和、狐、弧、胡、壶、核、斛、搰、葫、鹄、猢、湖、瑚、煳、鹕、嘝、鹘、槲、蝴、糊、縠、醐、觳",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuì",
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Cuàn",
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
"Name": "zhì",
"Answer": "质、锧、踬、志、梽、痣、至、致、晊、桎、厔、铚、郅、轾、蛭、窒、膣、螲、智、滞、治、识、帜、秩、帙、稚、雉、痔、峙、庤、畤、跱、贽、挚、鸷、掷、制、炙、置、忮、陟、栉、狾、豸、滍、骘、彘、疐、瘈、觯、擿……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Juē",
"Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuè",
"Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
"Name": "jié",
"Answer": "孑、节、劫、蜐、劼、诘、洁、结、桔、袺、颉、鲒、拮、杰、疌、捷、婕、睫、倢、寁、竭、偈、楬、碣、羯、截、桀、榤、岊、讦、絜、㛃……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuān",
"Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Qióng",
"Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
"Name": "líng",
"Answer": "令、伶、坽、苓、囹、泠、姈、玲、柃、昤、瓴、铃、鸰、聆、蛉、零、龄、澪、笭、舲、翎、羚、凌、陵、菱、㥄、绫、棱、祾、鲮、灵、棂、〇、酃、醽……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuè",
"Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Chuàng",
"Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
"Name": "",
"Answer": "计、记、纪、忌、跽、技、妓、芰、伎、齐、济、剂、哜、荠、霁、鲚、系、际、季、悸、迹、既、堲、穊、暨、塈、𬶨、觊、继、祭、漈、穄、𬶭、徛、寄、寂、绩、鲫、冀、骥、蓟、稷、髻、垍、洎、𪟝、偈、惎、檵、罽、瀱……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xuān",
"Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuì",
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
"Name": "jué",
"Answer": "孓、决、诀、抉、玦、砄、觖、角、桷、珏、觉、绝、倔、掘、崛、脚、厥、劂、蕨、獗、㵐、橛、蹶、镢、谲、噱、爵、矍、玃、攫、蠼、嚼、爝……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Niè",
"Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Suì",
"Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
"Name": "jiāo",
"Answer": "艽、交、郊、茭、峧、浇、娇、姣、骄、胶、教、椒、蛟、焦、跤、僬、鲛、蕉、嶕、燋、礁、鹪……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Yuān",
"Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Chuò",
"Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
"Name": "jiàn",
"Answer": "见、舰、剑、件、箭、间、涧、锏、饯、贱、践、溅、建、健、键、踺、楗、腱、荐、监、槛、渐、谏、毽、鉴、牮、僭……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "",
"Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Xùn",
"Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
"Name": "",
"Answer": "禾、和、合、郃、饸、颌、𬌗、何、河、荷、菏、纥、龁、核、劾、阂、曷、鹖、鞨、盒、盍、盉、涸、阖、翮、貉、龢……",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Zhuì",
"Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
"Type": "text",
"IsGood": 1,
"ImageUrl": ""
},
{
"QuestionId": 4,
"Name": "Cuàn",
"Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
"Name": "yà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": ""
}
]
}

View File

@ -0,0 +1,254 @@
{
"question_bank": [
{
"name": "重阳、习俗、思念",
"answer": "遥知兄弟登高处,遍插茱萸少一人。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "处",
"KeyWordsIndex": 6,
"questionId": 32
},
{
"name": "边塞、征战、思乡",
"answer": "秦时明月汉时关,万里长征人未还。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "关",
"KeyWordsIndex": 6,
"questionId": 32
},
{
"name": "军中、饮酒、欢快",
"answer": "葡萄美酒夜光杯,欲饮琵琶马上催。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "催",
"KeyWordsIndex": 13,
"questionId": 32
},
{
"name": "初夏、田园、蔬果",
"answer": "梅子金黄杏子肥,麦花雪白菜花稀。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "肥",
"KeyWordsIndex": 6,
"questionId": 32
},
{
"name": "童趣、追跑、田野",
"answer": "儿童急走追黄蝶,飞入菜花无处寻。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "蝶",
"KeyWordsIndex": 6,
"questionId": 32
},
{
"name": "送别、赤诚、朋友",
"answer": "洛阳亲友如相问,一片冰心在玉壶。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "心",
"KeyWordsIndex": 10,
"questionId": 32
},
{
"name": "梅花、香气、傲骨",
"answer": "不要人夸好颜色,只留清气满乾坤。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "好",
"KeyWordsIndex": 4,
"questionId": 32
},
{
"name": "遗愿、爱国、失地",
"answer": "死去元知万事空,但悲不见九州同。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "悲",
"KeyWordsIndex": 8,
"questionId": 32
},
{
"name": "水滨、笙乐、忧愁",
"answer": "山外青山楼外楼,西湖歌舞几时休?",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "休",
"KeyWordsIndex": 13,
"questionId": 32
},
{
"name": "祈求、变革、贤能",
"answer": "我劝天公重抖擞,不拘一格降人材。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "公",
"KeyWordsIndex": 3,
"questionId": 32
},
{
"name": "深夜、羁客、寒冷",
"answer": "月落乌啼霜满天,江枫渔火对愁眠。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "愁",
"KeyWordsIndex": 12,
"questionId": 32
},
{
"name": "登科、飞驰、盛景",
"answer": "春风得意马蹄疾,一日看尽长安花。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "花",
"KeyWordsIndex": 13,
"questionId": 32
},
{
"name": "耕地、纺织、协作",
"answer": "昼出耘田夜绩麻,村庄儿女各当家。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "村",
"KeyWordsIndex": 7,
"questionId": 32
},
{
"name": "悠闲、放牧、吹奏",
"answer": "牧童归去横牛背,短笛无腔信口吹。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "背",
"KeyWordsIndex": 6,
"questionId": 32
},
{
"name": "童趣、玩耍、敲击",
"answer": "稚子金盆脱晓冰,彩丝穿取当银钲。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "脱",
"KeyWordsIndex": 4,
"questionId": 32
},
{
"name": "欣喜、回家、畅饮",
"answer": "白日放歌须纵酒,青春作伴好还乡。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "须",
"KeyWordsIndex": 4,
"questionId": 32
},
{
"name": "雄师、豪迈、跋涉",
"answer": "红军不怕远征难,万水千山只等闲。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "怕",
"KeyWordsIndex": 3,
"questionId": 32
},
{
"name": "中秋、怀人、月亮",
"answer": "今夜月明人尽望,不知秋思落谁家。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "思",
"KeyWordsIndex": 10,
"questionId": 32
},
{
"name": "无畏、高尚、咏物",
"answer": "粉骨碎身浑不怕,要留清白在人间。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "浑",
"KeyWordsIndex": 4,
"questionId": 32
},
{
"name": "坚韧、勇气、咏物",
"answer": "咬定青山不放松,立根原在破岩中。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "根",
"KeyWordsIndex": 8,
"questionId": 32
},
{
"name": "送别、边塞、畅饮",
"answer": "劝君更尽一杯酒,西出阳关无故人。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "关",
"KeyWordsIndex": 10,
"questionId": 32
},
{
"name": "细雨、嫩绿、朦胧",
"answer": "天街小雨润如酥,草色遥看近却无。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "街",
"KeyWordsIndex": 1,
"questionId": 32
},
{
"name": "哭泣、沦陷、期盼",
"answer": "遗民泪尽胡尘里,南望王师又一年。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "师",
"KeyWordsIndex": 10,
"questionId": 32
},
{
"name": "酒菜、好客、乡村",
"answer": "莫笑农家腊酒浑,丰年留客足鸡豚。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "足",
"KeyWordsIndex": 11,
"questionId": 32
},
{
"name": "初夏、喧闹、江南",
"answer": "黄梅时节家家雨,青草池塘处处蛙。",
"imageUrl": "",
"IsGood": 0,
"IsDisabled": false,
"KeyWord": "池",
"KeyWordsIndex": 9,
"questionId": 32
}
]
}

View File

@ -2,424 +2,200 @@
"question_bank": [
{
"QuestionId": 3,
"Name": "chì rè",
"Answer": "炽热",
"Name": "shùn jiān",
"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": "蓬勃",
"Name": "kuì jiù",
"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": "优雅",
"Name": "guàn gài",
"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": "婉转",
"Name": "mà zha",
"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": "喧闹",
"Name": "zhèng tuō",
"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": "雕琢",
"Name": "shòu xuē",
"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": "萧瑟",
"Name": "zhì xù",
"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": "马路边",
"Name": "diān fù",
"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": "水晶球",
"Name": "qǐ pàn",
"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": "小鸟叫",
"Name": "lián mǐn",
"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": "月亮弯",
"Name": "qīng miè",
"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": "青蛙跳",
"Name": "gān gà",
"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": "一本正经",
"Name": "hú lún",
"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": "七上八下",
"Name": "diǎn zhuì",
"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": "花红柳绿",
"Name": "kuò chuò",
"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": "春暖花开",
"Name": "dàng yàng",
"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": "冬暖夏凉",
"Name": "bǐ shǒu",
"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": "风和日丽",
"Name": "áo xiáng",
"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": "浅显",
"Name": "fǔ xiǔ",
"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": "塑像",
"Name": "wēi é",
"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": "黑板笔",
"Name": "qiáo chǔ",
"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": "游泳池",
"Name": "juān kè",
"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": "电影院",
"Name": "kēng qiāng",
"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": "万紫千红",
"Name": "páo xiào",
"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": "万里长城",
"Name": "pāi shè",
"Answer": "拍摄",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""

View File

@ -0,0 +1,100 @@
{
"question_bank": [
{
"QuestionId": 34,
"Name": "<p>诗人袁枚写的与<strong>美食</strong>有关的书是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.《食经》&nbsp; &nbsp; B.《食珍录》&nbsp; &nbsp; C.《红楼梦》&nbsp; &nbsp; D.《随园食单》</strong></p>",
"Answer": "D",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“我家洗砚池头树”引用了一位<strong>书法家</strong>的典故,这位书法家是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.王献之&nbsp; &nbsp; B.王羲之&nbsp; &nbsp; C.王冕&nbsp; &nbsp; D.柳公权</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“诗中有画,画中有诗”评价的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.杜牧的诗画风格</strong></p><p><strong>&nbsp; &nbsp;B.刘禹锡的诗画风格</strong></p><p><strong>&nbsp; &nbsp;C.苏轼的诗画风格</strong></p><p><strong>&nbsp; &nbsp;D.王维的诗画风格</strong></p>",
"Answer": "D",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>被闻一多称为“<strong>诗中的诗</strong>,顶峰上的顶峰”的诗歌作品是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.刘希夷的《代悲白头翁》</strong></p><p><strong>&nbsp; &nbsp;B.杨广的《春江花月夜》</strong></p><p><strong>&nbsp; &nbsp;C.张若虚的《春江花月夜》</strong></p><p><strong>&nbsp; &nbsp;D.李白的《蜀道难》</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“<strong>梅妻鹤子</strong>”指的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.林逋&nbsp; &nbsp; B.梅尧臣&nbsp; &nbsp; C.苏舜钦&nbsp; &nbsp; D.王安石</strong></p>",
"Answer": "A",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“一门父子三词客,千古文章八大家。”这副对联中提到的“<strong>三父子</strong>”是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.曹操、曹丕、曹植</strong></p><p><strong>&nbsp; &nbsp;B.苏洵、苏轼、苏辙</strong></p><p><strong>&nbsp; &nbsp;C.班彪、班固、班超</strong></p><p><strong>&nbsp; &nbsp;D.阮瑀、阮籍、阮咸</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>诗人刘禹锡被<strong>称</strong>为(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“诗鬼”&nbsp; &nbsp; B.“诗豪”&nbsp; &nbsp; C.“诗圣”&nbsp; &nbsp; D.“诗仙”</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>有关诗人卢钺的信息,<strong>不正确</strong>的一项是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.别号梅坡</strong></p><p><strong>&nbsp; &nbsp;B.代表作《雪梅》</strong></p><p><strong>&nbsp; &nbsp;C.与辛派词人陈亮是好友</strong></p><p><strong>&nbsp; &nbsp;D.宋朝人</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>诗人王昌龄被<strong>称</strong>为(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“五言圣手”&nbsp; &nbsp; B.“七绝圣手”&nbsp; &nbsp; C.“七言圣手”&nbsp; &nbsp; D.“七绝诗人”</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>李商隐与杜牧<strong>合称</strong>&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.“李杜”&nbsp; &nbsp; B.“杜李”&nbsp; &nbsp; C.“小李杜”&nbsp; &nbsp; D.“唐诗双杰”</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“南朝四百八十寺”中,“<strong>南朝</strong>”指的是(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.在南方建都的王朝</strong></p><p><strong>&nbsp; &nbsp;B.宋、齐、魏、陈四个朝代的总称</strong></p><p><strong>&nbsp; &nbsp;C.宋、齐、梁、陈四个朝代的总称</strong></p><p><strong>&nbsp; &nbsp;D.在南京建都的王朝</strong></p>",
"Answer": "C",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
},
{
"QuestionId": 34,
"Name": "<p>“<strong>初唐四杰</strong>”是指(&nbsp; &nbsp;)。</p><p><strong>&nbsp; &nbsp;A.张若虚、张旭、孔融和贺知章</strong></p><p><strong>&nbsp; &nbsp;B.王勃、杨炯、卢照邻和骆宾王</strong></p><p><strong>&nbsp; &nbsp;C.高适、王昌龄、岑参和王之涣</strong></p><p><strong>&nbsp; &nbsp;D.贺知章、张若虚、张旭和包融</strong></p>",
"Answer": "B",
"Type": "text",
"IsGood": 0,
"ImageUrl": ""
}
]
}

Some files were not shown because too many files have changed in this diff Show More