|
|
@@ -12,16 +12,21 @@
|
|
|
</a-tooltip>
|
|
|
</a-space>
|
|
|
</div>
|
|
|
- <div class="card-category" v-if="cardType" >
|
|
|
+ <div class="card-category" v-if="cardType" @click="openChangeCardType" >
|
|
|
<a-space>
|
|
|
<div class="category"> 卡片类别:</div>
|
|
|
<div class="title" >{{CardController.cardType.toMap('value', 'title').get(cardType)}}</div>
|
|
|
+ <a-tooltip placement="bottom" >
|
|
|
+ <template #title>
|
|
|
+ <span>点击可以修改卡片类别</span>
|
|
|
+ </template>
|
|
|
+ <InfoCircleOutlined />
|
|
|
+ </a-tooltip>
|
|
|
</a-space>
|
|
|
</div>
|
|
|
<a-space>
|
|
|
<a-button v-if="Number(cardType) === 5" @click="openDefaultConfig(5)">基础配置</a-button>
|
|
|
<a-button v-if="Number(cardType) === 21" @click="openDefaultConfig(21)">基础配置</a-button>
|
|
|
- <a-button v-if="Number(cardType) === 5" @click="openState.configButtonOpen = true">按钮配置</a-button>
|
|
|
<a-button v-if="Number(cardType) === 5" type="primary" @click="openConfigCard(5)">打开配置板</a-button>
|
|
|
<a-button v-if="Number(cardType) === 21" type="primary" @click="openConfigCard(21)">打开配置板</a-button>
|
|
|
</a-space>
|
|
|
@@ -46,7 +51,7 @@
|
|
|
|
|
|
<!-- 右侧配置区域 -->
|
|
|
<a-drawer
|
|
|
- :width="500"
|
|
|
+ :width="600"
|
|
|
title="卡片配置"
|
|
|
placement="right"
|
|
|
:open="openState.configCardOpen"
|
|
|
@@ -54,6 +59,7 @@
|
|
|
@close="onClose"
|
|
|
:keyboard="false"
|
|
|
:mask="false"
|
|
|
+ className="drawer-warapper"
|
|
|
>
|
|
|
<template #extra>
|
|
|
<a-space>
|
|
|
@@ -61,7 +67,8 @@
|
|
|
<a-button type="primary" @click="saveConfigCard">保存</a-button>
|
|
|
</a-space>
|
|
|
</template>
|
|
|
- <!-- <ConfigButton ref="configButtonDom" :config="cardJson" /> -->
|
|
|
+ <ConfigButton ref="configButtonDom" :config="cardJson" />
|
|
|
+ <div style="height: 12px;"></div>
|
|
|
<ConfigCard
|
|
|
:config="cardJson"
|
|
|
@verify="value => handleVerify('cardIsValid', value)"
|
|
|
@@ -78,7 +85,7 @@
|
|
|
@confirm="saveDefaultConfig"
|
|
|
:mask="false"
|
|
|
|
|
|
- styles="position: fixed;top: 60px;right: 90px; pointer-events: none;"
|
|
|
+ styles="position: fixed;top: 60px;left: 90px; pointer-events: none;"
|
|
|
>
|
|
|
<CardDefault ref="cardDefaultDom" :config="cardJson" />
|
|
|
|
|
|
@@ -105,25 +112,16 @@
|
|
|
/>
|
|
|
<!-- catetype = 21 时 的 游戏配置 -->
|
|
|
|
|
|
- <modal-pro
|
|
|
- label="按钮配置"
|
|
|
- :open='openState.configButtonOpen'
|
|
|
- @close="openState.configButtonOpen = false"
|
|
|
- @confirm="saveButtonConfig"
|
|
|
- @verify="value => handleVerify('buttonIsValid', value)"
|
|
|
- :mask="false"
|
|
|
- styles="position: fixed;top: 60px;right: 90px; pointer-events: none;"
|
|
|
- >
|
|
|
- <ConfigButton ref="configButtonDom" :config="cardJson" />
|
|
|
- </modal-pro>
|
|
|
-
|
|
|
<!-- 卡片类型选择 -->
|
|
|
<a-modal
|
|
|
:visible="openState.cardTypeOpen"
|
|
|
@cancel="openState.cardTypeOpen = false"
|
|
|
:footer="null"
|
|
|
title="选择卡片类型"
|
|
|
- :mask="false"
|
|
|
+ :mask="true"
|
|
|
+ :maskClosable="false"
|
|
|
+ :keyboard="false"
|
|
|
+ :closable="false"
|
|
|
width="500px"
|
|
|
>
|
|
|
<div class="card-type-selection">
|
|
|
@@ -139,7 +137,7 @@
|
|
|
<path d="M19 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.89 21 5 21H19C20.11 21 21 20.11 21 19V5C21 3.89 20.11 3 19 3ZM19 19H5V5H19V19ZM12 8C10.34 8 9 9.34 9 11C9 12.66 10.34 14 12 14C13.66 14 15 12.66 15 11C15 9.34 13.66 8 12 8Z" />
|
|
|
</svg>
|
|
|
</div>
|
|
|
- <div class="card-type-title">推钮</div>
|
|
|
+ <div class="card-type-title">推钮卡</div>
|
|
|
<div class="card-type-desc">推动按钮类型的题卡</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -153,7 +151,7 @@
|
|
|
<path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5V11.24C15.21 11.9 16 13.18 16 14.5C16 16.43 14.43 18 12.5 18S9 16.43 9 14.5C9 13.18 9.79 11.9 11 11.24ZM13 7.5C13 6.67 12.33 6 11.5 6S10 6.67 10 7.5V10.97C10.32 10.84 10.66 10.75 11 10.71V8H12V10.71C12.34 10.75 12.68 10.84 13 10.97V7.5Z" />
|
|
|
</svg>
|
|
|
</div>
|
|
|
- <div class="card-type-title">触摸</div>
|
|
|
+ <div class="card-type-title">点触卡</div>
|
|
|
<div class="card-type-desc">点击题卡回答问题</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -173,7 +171,7 @@ import ConfigCard from './components/config-card.vue'
|
|
|
import CardDefault from './components/card-default.vue'
|
|
|
import CardDefault21 from './components/card-default-21.vue'
|
|
|
import ConfigButton from './components/config-button.vue'
|
|
|
-import { useRoute } from 'vue-router'
|
|
|
+import { useRoute, useRouter } from 'vue-router'
|
|
|
import { CardController } from '@/controller'
|
|
|
import { message } from 'ant-design-vue'
|
|
|
import ConfigGame from './components/config-game.vue'
|
|
|
@@ -186,6 +184,8 @@ const operationTip = `
|
|
|
|
|
|
const cardInfo = useRoute().query as unknown as API.Card
|
|
|
|
|
|
+const router = useRouter()
|
|
|
+
|
|
|
const cardType = ref<5 | 21>(5)
|
|
|
const selectedCardType = ref<5 | 21>(5)
|
|
|
|
|
|
@@ -194,7 +194,6 @@ const openState = reactive({
|
|
|
configGameOpen: false,
|
|
|
defaultConfigOpen: false,
|
|
|
defaultConfig21Open: false,
|
|
|
- configButtonOpen: false,
|
|
|
cardTypeOpen: false
|
|
|
})
|
|
|
|
|
|
@@ -237,86 +236,72 @@ const handleVerify = (verifyKey: 'buttonIsValid' | 'cardIsValid', value: boolean
|
|
|
isValids[verifyKey] = value
|
|
|
}
|
|
|
|
|
|
-const onSave = async () => {
|
|
|
- // 每次保存对默认、touch_key、侧边按钮进行校验,是否提交过
|
|
|
- // console.log('configButtonDom.value:', configButtonDom.value)
|
|
|
+const onSave = async (cardJsonDefault: API.CardJsonDefault | null = null) => {
|
|
|
+ console.log('cardJsonDefault:', cardJsonDefault)
|
|
|
|
|
|
- // const { data: defaultJson } = await CardController.getDefaultJson()
|
|
|
- // const defaultConfigVaild = Object.keys(defaultJson).filter(x => !!defaultJson[x]).findIndex(key => !defaultJson[key].music_name) !== -1
|
|
|
- // && defaultConfigVaild
|
|
|
- console.log('isValids:', isValids)
|
|
|
- if (isValids.cardIsValid && isValids.buttonIsValid) {
|
|
|
+ let header
|
|
|
+ if (cardJsonDefault == null) {
|
|
|
const { data } = await CardController.getDefaultJson()
|
|
|
- console.log({
|
|
|
- ...cardJson,
|
|
|
- header: {
|
|
|
- ...data,
|
|
|
- ...cardJson.header,
|
|
|
- title: data != null
|
|
|
- ? { music_name: data[0].music_name, is_break: 1, page: cardJson.header.title.page }
|
|
|
- : {
|
|
|
- music_name: '', is_break: 1, page: cardJson.header.title.page
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- await CardController.add({
|
|
|
- ...cardJson,
|
|
|
- header: {
|
|
|
- ...data,
|
|
|
- ...cardJson.header,
|
|
|
- title: data != null
|
|
|
- ? { music_name: data[0].music_name, is_break: 1, page: cardJson.header.title.page }
|
|
|
- : {
|
|
|
- music_name: '', is_break: 1, page: cardJson.header.title.page
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- message.success('卡片配置成功')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (isValids.cardIsValid) {
|
|
|
- message.success('按钮配置已保存')
|
|
|
+ header = data
|
|
|
+ header.title = cardJson.header.title
|
|
|
+ } else {
|
|
|
+ header = { ...cardJsonDefault }
|
|
|
}
|
|
|
- if (isValids.buttonIsValid) message.success('推钮配置已经保存')
|
|
|
+ console.log('cardInfo', header.title, cardInfo)
|
|
|
+
|
|
|
+ header.title.page = cardInfo.page
|
|
|
+ header.title.category = 1
|
|
|
+ header.title.id = 1
|
|
|
+ header.title.sub_id = 1
|
|
|
+ header.card_type = cardType.value
|
|
|
+ header.grade = 1
|
|
|
+ await CardController.add({
|
|
|
+ ...cardJson,
|
|
|
+ header: header
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
const saveConfigCard = async () => {
|
|
|
+ const { result: buttonResult, verify: buttonVerify } = configButtonDom.value.generateButtonJson()
|
|
|
const { data: configCardJson, verify } = await cardConfigDom.value.generateConfigfCardJson()
|
|
|
cardJson.touch_key = configCardJson
|
|
|
+ cardJson.slide_knob = buttonResult
|
|
|
isValids.cardIsValid = verify
|
|
|
- verify && onSave()
|
|
|
+ buttonVerify && verify && onSave()
|
|
|
}
|
|
|
|
|
|
const saveDefaultConfig = async () => {
|
|
|
const obj = {} as API.CardJsonDefault
|
|
|
- console.log('cardDefaultDom.value:', cardDefaultDom.value)
|
|
|
|
|
|
const { data } = await cardDefaultDom.value.generateDefaultJson()
|
|
|
console.log('生成的默认配置:', data)
|
|
|
data.forEach(item => obj[item.keyName] = { music_name: item.music_name, is_break: item.is_break })
|
|
|
+ obj.title = {
|
|
|
+ ...cardJson.header.title,
|
|
|
+ ...obj.title
|
|
|
+ }
|
|
|
CardController.addDefaulJson(obj)
|
|
|
- onSave()
|
|
|
+ console.log('saveDefaultConfig:', obj)
|
|
|
+ onSave(obj)
|
|
|
}
|
|
|
|
|
|
const saveDefault21Config = async () => {
|
|
|
- const { data, code } = await cardDefaultDom21.value.generateDefaultJson()
|
|
|
+ const { data, status } = await cardDefaultDom21.value.generateDefaultJson()
|
|
|
|
|
|
data.forEach(item => cardJson21.header[item.keyName] = { music_name: item.music_name, is_break: item.is_break })
|
|
|
|
|
|
- if (code === 200) {
|
|
|
+ if (status === 200) {
|
|
|
openState.defaultConfig21Open = false
|
|
|
+ await CardController.add({
|
|
|
+ header: {
|
|
|
+ ...cardJson21.header,
|
|
|
+ title: { ...cardJson21.header.title, page: Number(cardInfo.page) }
|
|
|
+ },
|
|
|
+ game_list: cardJson21.game_list
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const saveButtonConfig = () => {
|
|
|
- const { result, verify } = configButtonDom.value.generateButtonJson()
|
|
|
- cardJson.slide_knob = result
|
|
|
- isValids.buttonIsValid = verify
|
|
|
- verify && onSave()
|
|
|
-}
|
|
|
-
|
|
|
const openConfigCard = (type: 5 | 21) => {
|
|
|
type === 5 ? openState.configCardOpen = true : openState.configGameOpen = true
|
|
|
}
|
|
|
@@ -357,9 +342,17 @@ const handleOperation = ({ ids }: {ids: number[]}) => {
|
|
|
}
|
|
|
|
|
|
const handleCardTypeSelect = () => {
|
|
|
+ // 相等就不清除数据
|
|
|
+
|
|
|
+ if (changeCardType.value && cardType.value === selectedCardType.value) {
|
|
|
+ // 相等就不清除数据
|
|
|
+ changeCardType.value = false
|
|
|
+ openState.cardTypeOpen = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
cardType.value = selectedCardType.value
|
|
|
openState.cardTypeOpen = false
|
|
|
- console.log('selectedCardType.value:', cardInfo)
|
|
|
|
|
|
// 根据选择的卡片类型初始化对应的数据模板
|
|
|
if (cardType.value === 5) {
|
|
|
@@ -374,7 +367,21 @@ const handleCardTypeSelect = () => {
|
|
|
cardJson21.header = CardController.generateCard21Json().header
|
|
|
cardJson21.header.title.page = Number(cardInfo.page)
|
|
|
cardJson21.game_list = CardController.generateCard21Json().game_list
|
|
|
- console.log(cardJson21)
|
|
|
+ }
|
|
|
+ openState.configGameOpen = false
|
|
|
+ openState.configCardOpen = false
|
|
|
+ openState.defaultConfigOpen = false
|
|
|
+ openState.defaultConfig21Open = false
|
|
|
+ changeCardType.value = false
|
|
|
+}
|
|
|
+
|
|
|
+const changeCardType = ref(false)
|
|
|
+const openChangeCardType = () => {
|
|
|
+ changeCardType.value = true
|
|
|
+ openState.cardTypeOpen = true
|
|
|
+
|
|
|
+ if (changeCardType.value) {
|
|
|
+ message.warning('修改卡片类型需要重新设置题卡数据')
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -416,7 +423,7 @@ const getCardJsonById = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function onBack () { window.history.back() }
|
|
|
+function onBack () { router.back() }
|
|
|
|
|
|
onMounted(() => {
|
|
|
getCardJsonById()
|
|
|
@@ -538,6 +545,13 @@ onMounted(() => {
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
+.drawer-warapper {
|
|
|
+ top: 60px;
|
|
|
+}
|
|
|
+
|
|
|
+ :deep( .ant-drawer-right>.ant-drawer-content-wrapper) {
|
|
|
+ top: 60px;
|
|
|
+}
|
|
|
// .ant-modal-root .ant-modal-wrap {
|
|
|
// pointer-events: none !important;
|
|
|
// }
|