소스 검색

游戏模块v1.2

李志伟 3 년 전
부모
커밋
097c14e803

+ 3
- 0
src/App.vue 파일 보기

@@ -20,4 +20,7 @@ export default {
20 20
 .body {
21 21
   padding: 20px;
22 22
 }
23
+.el-form-item__content .el-input-group{
24
+  vertical-align: middle;
25
+}
23 26
 </style>

+ 0
- 46
src/api/appApi.js 파일 보기

@@ -1,46 +0,0 @@
1
-import request from '@/utils/request'
2
-
3
-/**
4
-* 保存应用
5
-* @param {*} data
6
-* @returns
7
-*/
8
-export const saveApp = (data) => request({
9
-  url: '/admin/App',
10
-  method: 'post',
11
-  data
12
-})
13
-
14
-/**
15
- * 应用列表
16
- * @param {*} params
17
- * @returns
18
- */
19
-export const getAppList = (params) => request({
20
-  url: '/admin/App', params
21
-})
22
-
23
-/**
24
- * 删除应用
25
- * @param {*} data
26
- * @returns
27
- */
28
-export const deleteApp = (id) => request({
29
-  url: `/admin/App/${id}`, method: 'delete'
30
-})
31
-/**
32
- * 更新应用
33
- * @param {*} data
34
- * @returns
35
- */
36
-export const UpdateApp = (data, id) => request({
37
-  url: `/admin/App/${id}`, method: 'put', data
38
-})
39
-/**
40
- * 查询应用详情
41
- * @param {*} params
42
- * @returns
43
- */
44
-export const getAppDetail = (id) => request({
45
-  url: `/admin/App/${id}`
46
-})

+ 31
- 33
src/components/GameCharacter/edit.vue 파일 보기

@@ -3,8 +3,8 @@
3 3
     <h2 style="text-align: center">
4 4
       特征实例{{ characterId ? "编辑" : "添加" }}
5 5
     </h2>
6
-    <el-form ref="form" :model="form" label-width="150px" size="mini">
7
-      <el-form-item label="实例名称:">
6
+    <el-form ref="form" :model="form" :rules="rules" label-width="150px" size="mini">
7
+      <el-form-item label="实例名称:" prop="name">
8 8
         <el-input
9 9
           v-model="form.name"
10 10
           placeholder="请输入实例名(必填)"
@@ -17,7 +17,7 @@
17 17
         <el-input v-model="form.desc" type="textarea" />
18 18
       </el-form-item>
19 19
       <el-form-item>
20
-        <el-button type="primary" @click="onSubmit">确定</el-button>
20
+        <el-button type="primary" @click="onSubmit('form')">确定</el-button>
21 21
         <el-button @click="$router.go(-1)">返回</el-button>
22 22
       </el-form-item>
23 23
     </el-form>
@@ -42,6 +42,9 @@ export default {
42 42
         thumb: undefined,
43 43
         desc: undefined,
44 44
         characterId: undefined
45
+      },
46
+      rules: {
47
+        name: [{ required: true, message: '请输入特征名称', trigger: 'blur' }]
45 48
       }
46 49
     }
47 50
   },
@@ -59,42 +62,37 @@ export default {
59 62
           characterId: undefined
60 63
         }
61 64
       }
62
-      if (this.gameId) {
63
-        this.form.gameId = this.gameId
64
-      }
65
-    },
66
-    gameId: function() {
67
-      if (this.gameId) {
68
-        this.form.gameId = this.gameId
69
-      }
70 65
     }
71 66
   },
72 67
   methods: {
73
-    onSubmit() {
74
-      const data = { ...this.form }
75
-      data.characterId = this.characterId
76
-      if (data.name) {
77
-        if (this.characterId) {
78
-          if (!data.thumb) {
79
-            data.thumb = ''
68
+    onSubmit(form) {
69
+      this.$refs[form].validate((valid) => {
70
+        if (valid) {
71
+          const data = { ...this.form }
72
+          data.gameId = this.gameId
73
+          if (this.characterId) {
74
+            data.characterId = this.characterId
75
+            if (!data.thumb) {
76
+              data.thumb = ''
77
+            }
78
+            UpdateGameCharacter(data, this.characterId).then((res) => {
79
+              this.$message('修改实例成功')
80
+              // 告诉父页面实例表需要刷新
81
+              this.$emit('handleRefreshGameCharacter', true)
82
+            })
83
+          } else {
84
+            saveGameCharacter(data).then((res) => {
85
+              this.$message('添加实例成功')
86
+              // 告诉父页面实例表需要刷新
87
+              this.$emit('handleRefreshGameCharacter', true)
88
+              // 把当前页改为编辑页面
89
+              this.$emit('handleEditGameCharacter', res.data.characterId)
90
+            })
80 91
           }
81
-          UpdateGameCharacter(data, this.characterId).then((res) => {
82
-            this.$message('修改实例成功')
83
-            // 告诉父页面实例表需要刷新
84
-            this.$emit('handleRefreshGameCharacter', true)
85
-          })
86 92
         } else {
87
-          saveGameCharacter(data).then((res) => {
88
-            this.$message('添加实例成功')
89
-            // 告诉父页面实例表需要刷新
90
-            this.$emit('handleRefreshGameCharacter', true)
91
-            // 把当前页改为编辑页面
92
-            this.$emit('handleEditGameCharacter', res.data.characterId)
93
-          })
93
+          return false
94 94
         }
95
-      } else {
96
-        this.$message('请输入实例名')
97
-      }
95
+      })
98 96
     },
99 97
     handleChange(val) {
100 98
       this.form.thumb = val

+ 47
- 37
src/components/Question/drawer.vue 파일 보기

@@ -9,8 +9,8 @@
9 9
       custom-class="demo-drawer"
10 10
     >
11 11
       <div class="demo-drawer__content">
12
-        <el-form :model="form" style="margin:20px">
13
-          <el-form-item label="选项:" :label-width="formLabelWidth">
12
+        <el-form ref="form" :model="form" :rules="rules" style="margin:20px">
13
+          <el-form-item label="答案:" prop="content" :label-width="formLabelWidth">
14 14
             <el-input v-model="form.content" size="mini" placeholder="请输入答案(必填)">
15 15
               <el-select slot="prepend" v-model="form.option" filterable allow-create default-first-option size="mini" style="width:100px" placeholder="请选择">
16 16
                 <el-option
@@ -22,7 +22,7 @@
22 22
               </el-select>
23 23
             </el-input>
24 24
           </el-form-item>
25
-          <el-form-item label="匹配特征:" :label-width="formLabelWidth">
25
+          <el-form-item v-if="resultMode === 'character_matched'" label="匹配特征:" :label-width="formLabelWidth">
26 26
             <el-select
27 27
               v-model="form.characterList"
28 28
               size="mini"
@@ -42,7 +42,7 @@
42 42
           </el-form-item>
43 43
           <el-form-item style="text-align:center">
44 44
             <el-button size="mini" @click="handleClose">取 消</el-button>
45
-            <el-button type="primary" size="mini" @click="onSubmit">确 定</el-button>
45
+            <el-button type="primary" size="mini" @click="onSubmit('form')">确 定</el-button>
46 46
           </el-form-item>
47 47
         </el-form>
48 48
       </div>
@@ -56,10 +56,14 @@ export default {
56 56
     dialog: Boolean,
57 57
     questionId: String,
58 58
     answerId: String,
59
-    gameId: String
59
+    gameId: String,
60
+    resultMode: String
60 61
   },
61 62
   data() {
62 63
     return {
64
+      rules: {
65
+        content: [{ required: true, message: '请输入答案内容', trigger: 'blur' }]
66
+      },
63 67
       form: {
64 68
         option: undefined,
65 69
         content: undefined,
@@ -116,41 +120,47 @@ export default {
116 120
     }
117 121
   },
118 122
   methods: {
119
-    onSubmit() {
120
-      if (this.form.option && this.form.content) {
121
-        const list = this.wordList.filter(item => this.form.characterList.includes(item.characterId))
122
-        const data = { ...this.form }
123
-        if (list) {
124
-          list.map(item => {
125
-            item.gameId = this.gameId
126
-          })
127
-          data.characterList = list
128
-        }
129
-        data.questionId = this.questionId
130
-        if (this.answerId) {
131
-          UpdateAnswer(data, this.answerId).then((res) => {
132
-            this.$message('修改成功')
133
-            this.$emit('handleEditDrawer', true)
134
-            this.form = {
135
-              option: undefined,
136
-              content: undefined,
137
-              characterList: []
123
+    onSubmit(form) {
124
+      this.$refs[form].validate((valid) => {
125
+        if (valid) {
126
+          if (this.form.option) {
127
+            const list = this.wordList.filter(item => this.form.characterList.includes(item.characterId))
128
+            const data = { ...this.form }
129
+            if (list) {
130
+              list.map(item => {
131
+                item.gameId = this.gameId
132
+              })
133
+              data.characterList = list
138 134
             }
139
-          })
140
-        } else {
141
-          saveAnswer(data).then((res) => {
142
-            this.$message('添加成功')
143
-            this.$emit('handleEditDrawer', true)
144
-            this.form = {
145
-              option: undefined,
146
-              content: undefined,
147
-              characterList: []
135
+            data.questionId = this.questionId
136
+            if (this.answerId) {
137
+              UpdateAnswer(data, this.answerId).then((res) => {
138
+                this.$message('修改成功')
139
+                this.$emit('handleEditDrawer', true)
140
+                this.form = {
141
+                  option: undefined,
142
+                  content: undefined,
143
+                  characterList: []
144
+                }
145
+              })
146
+            } else {
147
+              saveAnswer(data).then((res) => {
148
+                this.$message('添加成功')
149
+                this.$emit('handleEditDrawer', true)
150
+                this.form = {
151
+                  option: undefined,
152
+                  content: undefined,
153
+                  characterList: []
154
+                }
155
+              })
148 156
             }
149
-          })
157
+          } else {
158
+            this.$message('请在灰色下来菜单中添加选项')
159
+          }
160
+        } else {
161
+          return false
150 162
         }
151
-      } else {
152
-        this.$message('请添加选项和内容')
153
-      }
163
+      })
154 164
     },
155 165
     handleClose() {
156 166
       this.$emit('handleCloseDrawer', true)

+ 45
- 35
src/components/Question/edit.vue 파일 보기

@@ -3,8 +3,8 @@
3 3
     <h2 style="text-align: center">
4 4
       游戏题目{{ questionId ? "编辑" : "添加" }}
5 5
     </h2>
6
-    <el-form ref="form" :model="form" label-width="90px" size="mini">
7
-      <el-form-item label="题目:">
6
+    <el-form ref="form" :rules="rules" :model="form" label-width="90px" size="mini">
7
+      <el-form-item label="题目:" prop="title">
8 8
         <el-input v-model="form.title" placeholder="请输入实例名(必填)">
9 9
           <el-select slot="prepend" v-model="form.optType" style="width:100px" placeholder="请选择">
10 10
             <el-option label="单选题" value="1" />
@@ -13,7 +13,7 @@
13 13
           </el-select>
14 14
         </el-input>
15 15
       </el-form-item>
16
-      <el-form-item v-if="questionId!==undefined" label="正确选项:">
16
+      <el-form-item v-if="questionId!==undefined && resultMode === 'examination'" label="正确选项:">
17 17
         <!-- <el-input v-model="form.option"></el-input> -->
18 18
         <!-- filterable可搜索 multiple可多选 default-first-option回车可选-->
19 19
         <el-select
@@ -33,7 +33,7 @@
33 33
         </el-select>
34 34
       </el-form-item>
35 35
       <el-form-item style="text-align:center">
36
-        <el-button type="primary" @click="onSubmit">确定</el-button>
36
+        <el-button type="primary" @click="onSubmit('form')">确定</el-button>
37 37
         <el-button @click="$router.go(-1)">返回</el-button>
38 38
       </el-form-item>
39 39
       <el-form-item v-if="questionId!==undefined" label="答案:">
@@ -58,7 +58,15 @@
58 58
         </el-popconfirm>
59 59
       </li>
60 60
     </ul>
61
-    <QuestionDrawer :dialog="dialog" :question-id="questionId" :answer-id="answerId" :game-id="gameId" @handleCloseDrawer="handleCloseDrawer" @handleEditDrawer="handleEditDrawer" />
61
+    <QuestionDrawer
62
+      :dialog="dialog"
63
+      :question-id="questionId"
64
+      :answer-id="answerId"
65
+      :game-id="gameId"
66
+      :resultMode="resultMode"
67
+      @handleCloseDrawer="handleCloseDrawer"
68
+      @handleEditDrawer="handleEditDrawer"
69
+    />
62 70
   </div>
63 71
 </template>
64 72
 <script>
@@ -73,10 +81,14 @@ export default {
73 81
   },
74 82
   props: {
75 83
     gameId: String,
76
-    questionId: String
84
+    questionId: String,
85
+    resultMode: String
77 86
   },
78 87
   data() {
79 88
     return {
89
+      rules: {
90
+        title: [{ required: true, message: '请输入游戏名称', trigger: 'blur' }]
91
+      },
80 92
       form: {
81 93
         title: undefined,
82 94
         optType: undefined,
@@ -95,9 +107,6 @@ export default {
95 107
   watch: {
96 108
     // 用于点击左边改变右边的页面
97 109
     questionId: function() {
98
-      if (this.gameId) {
99
-        this.form.gameId = this.gameId
100
-      }
101 110
       if (this.questionId) {
102 111
         this.rightList = []
103 112
         getQuestionDetail(this.questionId).then((res) => {
@@ -116,11 +125,6 @@ export default {
116 125
         this.answerList = []
117 126
         this.rightList = []
118 127
       }
119
-    },
120
-    gameId() {
121
-      if (this.gameId) {
122
-        this.form.gameId = this.gameId
123
-      }
124 128
     }
125 129
   },
126 130
   methods: {
@@ -171,30 +175,36 @@ export default {
171 175
       })
172 176
       return nameList.toString()
173 177
     },
174
-    onSubmit() {
175
-      if (this.form.title && this.form.optType) {
176
-        const data = { ...this.form }
177
-        data.gameId = this.gameId
178
-        if (this.questionId) {
179
-          if (data.rightAnswer) {
180
-            data.rightAnswer = data.rightAnswer.toString()
178
+    onSubmit(form) {
179
+      this.$refs[form].validate((valid) => {
180
+        if (valid) {
181
+          if (this.form.optType) {
182
+            const data = { ...this.form }
183
+            data.gameId = this.gameId
184
+            if (this.questionId) {
185
+              if (data.rightAnswer) {
186
+                data.rightAnswer = data.rightAnswer.toString()
187
+              }
188
+              UpdateQuestion(data, this.questionId).then((res) => {
189
+                this.$message('修改问题成功')
190
+                // 告诉父页面实例表需要刷新并且关闭当前组件
191
+                this.$emit('handleRefreshQuestion', true)
192
+              })
193
+            } else {
194
+              saveQuestion(data).then((res) => {
195
+                this.$message('添加问题成功')
196
+                // 告诉父页面实例表需要刷新并且关闭当前组件
197
+                this.$emit('handleRefreshQuestion', true)
198
+                this.$emit('handleEditQuestion', res.data.questionId)
199
+              })
200
+            }
201
+          } else {
202
+            this.$message('请选择题型')
181 203
           }
182
-          UpdateQuestion(data, this.questionId).then((res) => {
183
-            this.$message('修改问题成功')
184
-            // 告诉父页面实例表需要刷新并且关闭当前组件
185
-            this.$emit('handleRefreshQuestion', true)
186
-          })
187 204
         } else {
188
-          saveQuestion(data).then((res) => {
189
-            this.$message('添加问题成功')
190
-            // 告诉父页面实例表需要刷新并且关闭当前组件
191
-            this.$emit('handleRefreshQuestion', true)
192
-            this.$emit('handleEditQuestion', res.data.questionId)
193
-          })
205
+          return false
194 206
         }
195
-      } else {
196
-        this.$message('请输入问题名称和题型')
197
-      }
207
+      })
198 208
     }
199 209
   }
200 210
 }

+ 0
- 28
src/router/index.js 파일 보기

@@ -64,34 +64,6 @@ export const constantRoutes = [
64 64
       }
65 65
     ]
66 66
   },
67
-  {
68
-    path: '/appManage',
69
-    component: Layout,
70
-    name: '应用管理',
71
-    meta: { title: '应用管理', icon: 'form' },
72
-    children: [
73
-      {
74
-        path: 'appManage',
75
-        name: '应用列表',
76
-        component: () => import('@/views/appManage/index'),
77
-        meta: { title: '应用列表', icon: 'app' }
78
-      },
79
-      {
80
-        hidden: true,
81
-        path: 'appManage/add',
82
-        name: '新增应用',
83
-        component: () => import('@/views/appManage/add'),
84
-        meta: { title: '新增应用', icon: 'form' }
85
-      },
86
-      {
87
-        hidden: true,
88
-        path: 'appManage/edit',
89
-        name: '编辑应用',
90
-        component: () => import('@/views/appManage/edit'),
91
-        meta: { title: '编辑应用', icon: 'form' }
92
-      }
93
-    ]
94
-  },
95 67
 
96 68
   // 微信配置
97 69
 

+ 2
- 2
src/views/WeChatConfig/Edit.vue 파일 보기

@@ -17,7 +17,7 @@
17 17
               width="150"
18 18
               alt="二维码"
19 19
               src="https://cdn4.buysellads.net/uu/1/41334/1550855401-cc_light.png"
20
-            />
20
+            >
21 21
           </el-form-item>
22 22
           <el-form-item label="类型" prop="appType">
23 23
             <el-select v-model="ruleForm.appType" placeholder="请选择类型">
@@ -149,7 +149,7 @@ export default {
149 149
     submitForm(formName) {
150 150
       this.$refs[formName].validate((valid) => {
151 151
         if (valid) {
152
-          if (this.configId == '') {
152
+          if (this.configId === '') {
153 153
             saveConfig(this.ruleForm)
154 154
               .then((e) => {
155 155
                 this.$message.success('配置保存成功')

+ 0
- 45
src/views/appManage/add.vue 파일 보기

@@ -1,45 +0,0 @@
1
-<template>
2
-  <div class="body_edit">
3
-    <h2 style="text-align: center">应用新增</h2>
4
-        <el-form
5
-          ref="form"
6
-          :model="appForm"
7
-          label-width="150px"
8
-          size="mini"
9
-        >
10
-          <el-form-item label="应用名称:">
11
-            <el-input v-model="appForm.appName"></el-input>
12
-          </el-form-item>
13
-          <el-form-item class="editBottomItem">
14
-            <el-button type="primary" @click="onSubmit">添加</el-button>
15
-            <el-button @click="onCancel">取消</el-button>
16
-          </el-form-item>
17
-        </el-form>
18
-  </div>
19
-</template>
20
-<script>
21
-import { saveApp } from "@/api/appApi";
22
-export default {
23
-  data() {
24
-    return {
25
-      appForm: {
26
-        appName: undefined,
27
-      },
28
-    };
29
-  },
30
-
31
-  methods: {
32
-    onCancel() {
33
-      this.$router.go(-1);
34
-    },
35
-    onSubmit() {
36
-      saveApp(this.appForm).then((res) => {
37
-        this.$message("保存成功");
38
-        this.onCancel();
39
-      });
40
-    },
41
-  },
42
-};
43
-</script>
44
-<style>
45
-</style>

+ 0
- 53
src/views/appManage/edit.vue 파일 보기

@@ -1,53 +0,0 @@
1
-<template>
2
-  <div style="padding: 20px">
3
-    <el-form ref="form" :model="appForm" label-width="150px" size="mini">
4
-      <el-form-item label="特征库名称:">
5
-        <el-input v-model="appForm.appName"></el-input>
6
-      </el-form-item>
7
-      <el-form-item class="editBottomItem">
8
-        <el-button type="primary" @click="onEdit">修改</el-button>
9
-        <el-button @click="onCancel">取消</el-button>
10
-      </el-form-item>
11
-    </el-form>
12
-  </div>
13
-</template>
14
-<script>
15
-import { UpdateApp, getAppDetail } from "@/api/appApi";
16
-
17
-export default {
18
-  data() {
19
-    return {
20
-      appForm: {
21
-        appId: undefined,
22
-        appName: undefined,
23
-      },
24
-    };
25
-  },
26
-
27
-  methods: {
28
-    //上方实例库的方法
29
-    onCancel() {
30
-      this.$router.go(-1);
31
-    },
32
-    onEdit() {
33
-      UpdateApp(this.appForm, this.appForm.appId).then((res) => {
34
-        this.$message("修改成功");
35
-      });
36
-    },
37
-  },
38
-  //进入页面执行的方法
39
-  mounted: function () {
40
-    if (this.$route?.query.id) {
41
-      getAppDetail(this.$route.query.id).then((res) => {
42
-        this.appForm = res.data;
43
-      });
44
-    }
45
-  },
46
-};
47
-</script>
48
-<style>
49
-.editBottomItem > div {
50
-  margin: 0 !important;
51
-  text-align: center;
52
-}
53
-</style>

+ 0
- 104
src/views/appManage/index.vue 파일 보기

@@ -1,104 +0,0 @@
1
-<template>
2
-  <div class="body">
3
-    <el-card class="box-card">
4
-      应用名称:<el-input
5
-        v-model="appName"
6
-        size="medium"
7
-        style="width: 200px; margin-right: 20px"
8
-      />
9
-      创建时间:
10
-      <el-date-picker
11
-        v-model="daterange"
12
-        type="daterange"
13
-        range-separator="至"
14
-        start-placeholder="开始日期"
15
-        end-placeholder="结束日期"
16
-        value-format="yyyy-MM-dd"
17
-        @change="dateChange"
18
-        style="margin-right: 20px"
19
-      >
20
-      </el-date-picker>
21
-
22
-      <el-button type="primary" @click="onSearch">查询</el-button>
23
-      <el-button @click="onReset">重置</el-button>
24
-      <el-button type="primary" @click="handleAdd">添加应用</el-button>
25
-    </el-card>
26
-    <el-table stripe :data="tableData" border style="width: 100%">
27
-      <el-table-column prop="appName" label="应用名称" />
28
-      <el-table-column prop="createDate" label="创建时间">
29
-        <template slot-scope="scope">{{
30
-          scope.row.createDate.substr(0, 10)
31
-        }}</template>
32
-      </el-table-column>
33
-      <el-table-column fixed="right" label="操作">
34
-        <template slot-scope="scope">
35
-          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
36
-          <el-popconfirm
37
-            icon="el-icon-info"
38
-            icon-color="red"
39
-            title="这个应用确定删除吗?"
40
-            @onConfirm="handleDelete(scope.row)"
41
-          >
42
-            <el-button type="text" slot="reference">删除</el-button>
43
-          </el-popconfirm>
44
-        </template>
45
-      </el-table-column>
46
-    </el-table>
47
-  </div>
48
-</template>
49
-<script>
50
-import { getAppList, deleteApp } from "@/api/appApi";
51
-
52
-export default {
53
-  data() {
54
-    return {
55
-      appName: undefined,
56
-      daterange: "",
57
-      tableData: [],
58
-      endDate: undefined,
59
-      startDate: undefined,
60
-    };
61
-  },
62
-  methods: {
63
-    handleAdd() {
64
-      this.$router.push({ path: "appManage/add" });
65
-    },
66
-    handleEdit(row) {
67
-      this.$router.push({
68
-        path: "appManage/edit",
69
-        query: { id: row.appId },
70
-      });
71
-    },
72
-    handleDelete(row) {
73
-      deleteApp(row.appId).then(() => {
74
-        this.onSearch();
75
-      });
76
-    },
77
-    onSearch() {
78
-      getAppList({
79
-        appName: this.appName,
80
-        startDate: this.startDate,
81
-        endDate: this.endDate,
82
-      }).then((res) => {
83
-        this.tableData = res.data.records;
84
-      });
85
-    },
86
-    onReset() {
87
-      this.appName = "";
88
-      this.daterange = "";
89
-      this.startDate = "";
90
-      this.endDate = "";
91
-      this.onSearch();
92
-    },
93
-    dateChange(val) {
94
-      this.startDate = this.daterange[0];
95
-      this.endDate = this.daterange[1];
96
-    },
97
-  },
98
-  mounted() {
99
-    this.onSearch();
100
-  },
101
-};
102
-</script>
103
-<style>
104
-</style>

+ 49
- 29
src/views/gameManage/edit.vue 파일 보기

@@ -3,14 +3,14 @@
3 3
     <el-tabs v-model="activeName">
4 4
       <el-tab-pane label="游戏详情" name="game">
5 5
         <h2 style="text-align: center">游戏{{ gameId ? "编辑" : "新增" }}</h2>
6
-        <el-form ref="form" class="gameForm" :model="gameForm" label-width="150px" size="mini">
7
-          <el-form-item label="游戏名称:">
6
+        <el-form ref="form" :rules="rules" class="gameForm" :model="gameForm" label-width="150px" size="mini">
7
+          <el-form-item label="游戏名称:" prop="title">
8 8
             <el-input v-model="gameForm.title" />
9 9
           </el-form-item>
10 10
           <el-form-item label="游戏图标:">
11 11
             <UploadImage :icon="gameForm.gameImage" @handleChange="handleChange" @handleDeleteIcon="handleDeleteIcon" />
12 12
           </el-form-item>
13
-          <el-form-item label="游戏类型:">
13
+          <el-form-item label="游戏类型:" prop="resultMode">
14 14
             <el-select
15 15
               v-model="gameForm.resultMode"
16 16
               filterable
@@ -27,7 +27,7 @@
27 27
             </el-select>
28 28
           </el-form-item>
29 29
           <el-form-item class="editBottomItem">
30
-            <el-button type="primary" @click="onSubmit">保存</el-button>
30
+            <el-button type="primary" @click="onSubmit('form')">保存</el-button>
31 31
             <el-button @click="onCancel">取消</el-button>
32 32
           </el-form-item>
33 33
         </el-form>
@@ -42,13 +42,18 @@
42 42
             <GameCharacter
43 43
               ref="GameCharacter"
44 44
               :gameId='gameId'
45
-              @handleAddGameCharacter='characterId = undefined'
46
-              @handleCloseGameCharacter='characterId = undefined'
47
-              @handleEditGameCharacter='handleEditGameCharacter'
45
+              @handleAddGameCharacter="characterId = undefined"
46
+              @handleCloseGameCharacter="characterId = undefined"
47
+              @handleEditGameCharacter="handleEditGameCharacter"
48 48
             />
49 49
           </el-col>
50 50
           <el-col :span="12">
51
-            <GameCharacterEdit :characterId='characterId' :gameId='gameId' @handleRefreshGameCharacter='handleRefreshGameCharacter' @handleEditGameCharacter='handleEditGameCharacter' />
51
+            <GameCharacterEdit
52
+              :characterId='characterId'
53
+              :gameId='gameId'
54
+              @handleRefreshGameCharacter="handleRefreshGameCharacter"
55
+              @handleEditGameCharacter="handleEditGameCharacter"
56
+            />
52 57
           </el-col>
53 58
         </el-row>
54 59
       </el-tab-pane>
@@ -68,7 +73,14 @@
68 73
             />
69 74
           </el-col>
70 75
           <el-col :span="12">
71
-            <QuestionEdit ref="QuestionEdit" :questionId='questionId' :gameId='gameId' @handleRefreshQuestion='handleRefreshQuestion' @handleEditQuestion='handleEditQuestion' />
76
+            <QuestionEdit
77
+              ref="QuestionEdit"
78
+              :questionId='questionId'
79
+              :gameId='gameId'
80
+              :resultMode='gameForm.resultMode'
81
+              @handleRefreshQuestion="handleRefreshQuestion"
82
+              @handleEditQuestion="handleEditQuestion"
83
+            />
72 84
           </el-col>
73 85
         </el-row>
74 86
       </el-tab-pane>
@@ -92,6 +104,12 @@ export default {
92 104
   },
93 105
   data() {
94 106
     return {
107
+      rules: {
108
+        title: [
109
+          { required: true, message: '请输入游戏名称', trigger: 'blur' }
110
+        ],
111
+        resultMode: [{ required: true, message: '请选择游戏类型', trigger: 'blur' }]
112
+      },
95 113
       gameForm: {
96 114
         title: undefined,
97 115
         gameImage: undefined,
@@ -130,29 +148,31 @@ export default {
130 148
     onCancel() {
131 149
       this.$router.go(-1)
132 150
     },
133
-    onSubmit() {
134
-      if (this.gameForm.title && this.gameForm.resultMode) {
135
-        if (this.gameId) {
136
-          const data = { ...this.gameForm }
137
-          if (!data.gameImage) {
138
-            data.gameImage = ''
151
+    onSubmit(form) {
152
+      this.$refs[form].validate((valid) => {
153
+        if (valid) {
154
+          if (this.gameId) {
155
+            const data = { ...this.gameForm }
156
+            if (!data.gameImage) {
157
+              data.gameImage = ''
158
+            }
159
+            UpdateGame(data, this.gameId).then((res) => {
160
+              this.$message('修改成功')
161
+              this.$router.go(-1)
162
+            })
163
+          } else {
164
+            saveGame(this.gameForm).then((res) => {
165
+              this.$message('保存成功')
166
+              this.$router.replace({
167
+                name: 'gameEdit',
168
+                query: { id: res.data.gameId }
169
+              })
170
+            })
139 171
           }
140
-          UpdateGame(data, this.gameId).then((res) => {
141
-            this.$message('修改成功')
142
-            this.$router.go(-1)
143
-          })
144 172
         } else {
145
-          saveGame(this.gameForm).then((res) => {
146
-            this.$message('保存成功')
147
-            this.$router.replace({
148
-              name: 'gameEdit',
149
-              query: { id: res.data.gameId }
150
-            })
151
-          })
173
+          return false
152 174
         }
153
-      } else {
154
-        this.$message('请输入游戏名称和游戏类型')
155
-      }
175
+      })
156 176
     },
157 177
     handleChange(val) {
158 178
       this.gameForm.gameImage = val