|
|
@@ -5,12 +5,18 @@
|
|
|
</template>
|
|
|
<ElTableColumn prop="id" label="#" width="80" />
|
|
|
<ElTableColumn prop="name" label="名称" min-width="120" />
|
|
|
- <ElTableColumn prop="status" label="状态" :formatter="statusFormatter" width="120" />
|
|
|
+ <ElTableColumn prop="status" label="状态" width="150" :formatter="statusFormatter" />
|
|
|
+ <ElTableColumn prop="running" label="运行">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <ElSwitch :model-value="row.status === 'running'" @update:model-value="onActiveChange($event, row)" />
|
|
|
+ </template>
|
|
|
+ </ElTableColumn>
|
|
|
<ElTableColumn prop="createdAt" label="创建时间" :formatter="timeFormatter" width="150" />
|
|
|
<ElTableColumn label="操作" align="center" width="350">
|
|
|
<template #default="{ row }">
|
|
|
- <ElButton @click="onPlay(row)" type="primary">进入</ElButton>
|
|
|
- <ElButton @click="onEdit(row)">编辑</ElButton>
|
|
|
+ <ElButton v-if="row.status === 'created'" @click="onEdit(row)" type="primary">编辑</ElButton>
|
|
|
+ <ElButton v-if="row.status === 'created'" @click="onInit(row)" type="primary">初始化</ElButton>
|
|
|
+ <ElButton v-if="row.status !== 'created'" @click="onPlay(row)" type="primary">详情</ElButton>
|
|
|
<ElButton @click="onDelete(row)" type="danger">删除</ElButton>
|
|
|
</template>
|
|
|
</ElTableColumn>
|
|
|
@@ -61,6 +67,27 @@
|
|
|
<ElButton @click="onAddCharactor">添加</ElButton>
|
|
|
</ElFormItem>
|
|
|
</EditDialog>
|
|
|
+ <ElDialog title="初始化" v-model="showInitDialog">
|
|
|
+ <ElForm :model="initModel" :rules="initRules" ref="initForm" label-position="right" label-width="80">
|
|
|
+ <ElFormItem label="日期" prop="date">
|
|
|
+ <ElDatePicker v-model="initModel.date" />
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem label="时间" prop="time">
|
|
|
+ <ElSelect v-model="initModel.time">
|
|
|
+ <ElOption label="上午" value="morning" />
|
|
|
+ <ElOption label="下午" value="afternoon" />
|
|
|
+ <ElOption label="晚上" value="evening" />
|
|
|
+ </ElSelect>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem label="初始剧情" prop="plot">
|
|
|
+ <ElInput v-model="initModel.plot" type="textarea" placeholder="不填则自动生成" :rows="3" />
|
|
|
+ </ElFormItem>
|
|
|
+ </ElForm>
|
|
|
+ <template #footer>
|
|
|
+ <ElButton @click="showInitDialog = false">取消</ElButton>
|
|
|
+ <ElButton type="primary" @click="init">确定</ElButton>
|
|
|
+ </template>
|
|
|
+ </ElDialog>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
import { ref } from 'vue'
|
|
|
@@ -69,13 +96,11 @@ import { useEnumFormatter, useTimeFormatter } from '@/utils/formatter'
|
|
|
import { Plus } from '@vicons/tabler'
|
|
|
import EditDialog from '@/components/EditDialog.vue'
|
|
|
import { setupEditDialog } from '@/utils/editDialog'
|
|
|
-import EnumSelect from '@/components/EnumSelect.vue'
|
|
|
-import { GameStatus } from '@/enums'
|
|
|
import { http } from '@/plugins/http'
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
-import { useClipboard } from '@vueuse/core'
|
|
|
import { useRouter } from 'vue-router'
|
|
|
-import { StreamPlatform } from '@/enums'
|
|
|
+import { ElLoading } from 'element-plus'
|
|
|
+import { GameStatus } from '@/enums'
|
|
|
|
|
|
const router = useRouter()
|
|
|
const where = ref({})
|
|
|
@@ -159,6 +184,51 @@ function onPlay(row) {
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
+const showInitDialog = ref(false)
|
|
|
+const initForm = ref(null)
|
|
|
+const initModel = ref({})
|
|
|
+const selectedRow = ref(null)
|
|
|
+const initRules = {
|
|
|
+ date: [{ required: true, message: '请选择日期', trigger: 'blur' }],
|
|
|
+ time: [{ required: true, message: '请选择时间', trigger: 'blur' }]
|
|
|
+}
|
|
|
+async function onInit(row) {
|
|
|
+ selectedRow.value = row
|
|
|
+ initModel.value = {}
|
|
|
+ initForm.value?.clearValidate()
|
|
|
+ showInitDialog.value = true
|
|
|
+}
|
|
|
+async function init() {
|
|
|
+ await initForm.value.validate()
|
|
|
+ const loadingInstance = ElLoading.service({
|
|
|
+ fullscreen: true
|
|
|
+ })
|
|
|
+ try {
|
|
|
+ await http.post(`/game/${selectedRow.value.id}/init`, initModel.value)
|
|
|
+ ElMessage.success('初始化成功')
|
|
|
+ table.value.refresh()
|
|
|
+ showInitDialog.value = false
|
|
|
+ } catch (error) {
|
|
|
+ ElMessage.error(error.message)
|
|
|
+ }
|
|
|
+ loadingInstance.close()
|
|
|
+}
|
|
|
+async function onActiveChange(e, row) {
|
|
|
+ const loadingInstance = ElLoading.service({
|
|
|
+ fullscreen: true
|
|
|
+ })
|
|
|
+ try {
|
|
|
+ if (e) {
|
|
|
+ await http.post(`/game/${row.id}/startRun`)
|
|
|
+ } else {
|
|
|
+ await http.post(`/game/${row.id}/stopRun`)
|
|
|
+ }
|
|
|
+ table.value.refresh()
|
|
|
+ } catch (error) {
|
|
|
+ ElMessage.error(error.message)
|
|
|
+ }
|
|
|
+ loadingInstance.close()
|
|
|
+}
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
.charactor-form {
|