曲靖
This commit is contained in:
		
							
								
								
									
										70
									
								
								project/qujing/app/AppQuestionBank/AppQuestionBank.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								project/qujing/app/AppQuestionBank/AppQuestionBank.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppQuestionBank"> | ||||||
|  |     <keep-alive :include="['List']"> | ||||||
|  |       <component ref="component" :is="component" @change="onChange" :params="params" :instance="instance" :dict="dict"></component> | ||||||
|  |     </keep-alive> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import Add from './components/Add' | ||||||
|  |   import List from './components/List' | ||||||
|  |   import Detail from './components/Detail' | ||||||
|  |  | ||||||
|  |   export default { | ||||||
|  |     name: 'AppQuestionBank', | ||||||
|  |     label: '试题库', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         component: 'List', | ||||||
|  |         params: {}, | ||||||
|  |         include: [] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     components: { | ||||||
|  |       Add, | ||||||
|  |       List, | ||||||
|  |       Detail | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       onChange (data) { | ||||||
|  |         if (data.type === 'Add') { | ||||||
|  |           this.component = 'Add' | ||||||
|  |           this.params = data.params | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (data.type === 'Detail') { | ||||||
|  |           this.component = 'Detail' | ||||||
|  |           this.params = data.params | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (data.type === 'List') { | ||||||
|  |           this.component = 'List' | ||||||
|  |           this.params = data.params | ||||||
|  |  | ||||||
|  |           this.$nextTick(() => { | ||||||
|  |             if (data.isRefresh) { | ||||||
|  |               this.$refs.component.getList() | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  |   .AppQuestionBank { | ||||||
|  |     height: 100%; | ||||||
|  |     background: #F3F6F9; | ||||||
|  |     overflow: auto; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
							
								
								
									
										109
									
								
								project/qujing/app/AppQuestionBank/components/Add.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								project/qujing/app/AppQuestionBank/components/Add.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-detail class="AppQuestionBank-add" v-loading="isLoading"> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title :title="params.id ? '编辑' + '试题库' : '添加' + '试题库'" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <ai-card title="基本信息"> | ||||||
|  |         <template #content> | ||||||
|  |           <el-form class="ai-form" :model="form" label-width="120px" ref="form"> | ||||||
|  |             <el-form-item label="标题" style="width: 100%;" prop="title" :rules="[{required: true, message: '请输入标题', trigger: 'blur'}]"> | ||||||
|  |               <el-input size="small" v-model="form.title" clearable placeholder="请输入..." :maxlength="50" :show-word-limit="true"></el-input> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item prop="showIndex" label="排序" :rules="[{required: true, message: '请选择文章类型', trigger: 'change'}]"> | ||||||
|  |               <el-input-number size="small" v-model="form.showIndex" :min="0"></el-input-number> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="正文" prop="content" style="width: 100%;" :rules="[{required: true, message: '请输入内容', trigger: 'change'}]"> | ||||||
|  |               <ai-editor v-model="form.content" :instance="instance"/> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-form> | ||||||
|  |         </template> | ||||||
|  |       </ai-card> | ||||||
|  |     </template> | ||||||
|  |     <template #footer> | ||||||
|  |       <el-button @click="cancel">取消</el-button> | ||||||
|  |       <el-button type="primary" :loading="isLoading" @click="confirm">提交</el-button> | ||||||
|  |     </template> | ||||||
|  |   </ai-detail> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import { mapState } from 'vuex' | ||||||
|  |   export default { | ||||||
|  |     name: 'Add', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object, | ||||||
|  |       params: Object, | ||||||
|  |       areaId: String | ||||||
|  |     }, | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         info: {}, | ||||||
|  |         form: { | ||||||
|  |           title: '', | ||||||
|  |           content: '', | ||||||
|  |           showIndex: '' | ||||||
|  |         }, | ||||||
|  |         isLoading: false, | ||||||
|  |         id: '' | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     computed: { | ||||||
|  |       ...mapState(['user']) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created () { | ||||||
|  |       if (this.params && this.params.id) { | ||||||
|  |         this.id = this.params.id | ||||||
|  |         this.getInfo(this.params.id) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getInfo (id) { | ||||||
|  |         this.instance.post(`/app/appcontentinfo/queryDetailById?id=${id}`).then(res => { | ||||||
|  |           if (res.code === 0) { | ||||||
|  |             this.form = res.data | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       confirm () { | ||||||
|  |         this.$refs.form.validate((valid) => { | ||||||
|  |           if (valid) { | ||||||
|  |             this.isLoading = true | ||||||
|  |             this.instance.post(`/app/appcontentinfo/addOrUpdate`, { | ||||||
|  |               ...this.form | ||||||
|  |             }).then(res => { | ||||||
|  |               if (res.code == 0) { | ||||||
|  |                 this.$message.success('提交成功') | ||||||
|  |                 setTimeout(() => { | ||||||
|  |                   this.cancel(true) | ||||||
|  |                 }, 600) | ||||||
|  |               } else { | ||||||
|  |                 this.isLoading = false | ||||||
|  |               } | ||||||
|  |             }).catch(() => { | ||||||
|  |               this.isLoading = false | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       cancel (isRefresh) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'List', | ||||||
|  |           isRefresh: !!isRefresh | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  |   .AppQuestionBank-add { | ||||||
|  |   } | ||||||
|  | </style> | ||||||
							
								
								
									
										92
									
								
								project/qujing/app/AppQuestionBank/components/Detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								project/qujing/app/AppQuestionBank/components/Detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-detail> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="课程详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"> | ||||||
|  |       </ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <ai-card title="基本信息"> | ||||||
|  |         <template #content> | ||||||
|  |           <ai-wrapper | ||||||
|  |             label-width="120px"> | ||||||
|  |             <ai-info-item label="标题" isLine :value="info.title"></ai-info-item> | ||||||
|  |             <ai-info-item label="发布地区" isLine :value="info.areaName"></ai-info-item> | ||||||
|  |             <ai-info-item label="文章类型" isLine :value="info.contentType === '0' ? '图文' : '视频'"></ai-info-item> | ||||||
|  |             <ai-info-item label="正文" v-if="info.contentType === '0'" isLine> | ||||||
|  |               <AiArticle :value="info.content"></AiArticle> | ||||||
|  |             </ai-info-item> | ||||||
|  |             <ai-info-item v-if="info.contentType === '0'" isLine label="封面图片"> | ||||||
|  |               <ai-uploader | ||||||
|  |                 :instance="instance" | ||||||
|  |                 disabled | ||||||
|  |                 v-model="info.files" | ||||||
|  |                 :limit="9"> | ||||||
|  |               </ai-uploader> | ||||||
|  |             </ai-info-item> | ||||||
|  |             <ai-info-item v-if="info.contentType === '1'" isLine label="封面图片"> | ||||||
|  |               <video style="width:100%; height:100%; object-fit: fill;" :src="info.files[0].url" controls></video> | ||||||
|  |             </ai-info-item> | ||||||
|  |             <ai-info-item v-if="info.contentType === '1'" isLine label="视频封面"> | ||||||
|  |               <ai-uploader | ||||||
|  |                 :instance="instance" | ||||||
|  |                 disabled | ||||||
|  |                 v-model="info.pictureUrl" | ||||||
|  |                 :limit="1"> | ||||||
|  |               </ai-uploader> | ||||||
|  |             </ai-info-item> | ||||||
|  |           </ai-wrapper> | ||||||
|  |         </template> | ||||||
|  |       </ai-card> | ||||||
|  |     </template> | ||||||
|  |   </ai-detail> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'Detail', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object, | ||||||
|  |       params: Object, | ||||||
|  |       moduleId: String | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         info: {}, | ||||||
|  |         id: '' | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created () { | ||||||
|  |       if (this.params && this.params.id) { | ||||||
|  |         this.id = this.params.id | ||||||
|  |         this.getInfo(this.params.id) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getInfo (id) { | ||||||
|  |         this.instance.post(`/app/appcontentinfo/queryDetailById?id=${id}`).then(res => { | ||||||
|  |           if (res.code === 0) { | ||||||
|  |             this.info = res.data | ||||||
|  |             this.info.pictureUrl = res.data.pictureUrl ? [{ | ||||||
|  |               url: res.data.pictureUrl | ||||||
|  |             }] : [] | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       cancel (isRefresh) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'List', | ||||||
|  |           isRefresh: !!isRefresh | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | </style> | ||||||
							
								
								
									
										123
									
								
								project/qujing/app/AppQuestionBank/components/List.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								project/qujing/app/AppQuestionBank/components/List.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,123 @@ | |||||||
|  | <template> | ||||||
|  |   <ai-list class="notice"> | ||||||
|  |     <template slot="title"> | ||||||
|  |       <ai-title title="试题库" isShowBottomBorder></ai-title> | ||||||
|  |     </template> | ||||||
|  |     <template slot="content"> | ||||||
|  |       <ai-search-bar class="search-bar"> | ||||||
|  |         <template #left> | ||||||
|  |           <el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button> | ||||||
|  |         </template> | ||||||
|  |         <template #right> | ||||||
|  |           <el-input | ||||||
|  |             v-model="search.title" | ||||||
|  |             class="search-input" | ||||||
|  |             size="small" | ||||||
|  |             v-throttle="() => {search.current = 1, getList()}" | ||||||
|  |             placeholder="请输入标题" | ||||||
|  |             clearable | ||||||
|  |             @clear="search.current = 1, getList()" | ||||||
|  |             suffix-icon="iconfont iconSearch"> | ||||||
|  |           </el-input> | ||||||
|  |         </template> | ||||||
|  |       </ai-search-bar> | ||||||
|  |       <ai-table | ||||||
|  |         :tableData="tableData" | ||||||
|  |         :col-configs="colConfigs" | ||||||
|  |         :total="total" | ||||||
|  |         style="margin-top: 6px;" | ||||||
|  |         :current.sync="search.current" | ||||||
|  |         :size.sync="search.size" | ||||||
|  |         @getList="getList"> | ||||||
|  |         <el-table-column slot="options" width="120px" fixed="right" label="操作" align="center"> | ||||||
|  |           <template slot-scope="{ row }"> | ||||||
|  |             <div class="table-options"> | ||||||
|  |               <el-button type="text" @click="toAdd(row.id)">编辑</el-button> | ||||||
|  |               <el-button type="text" @click="toDetail(row.id)">详情</el-button> | ||||||
|  |               <el-button type="text" @click="remove(row.id)">删除</el-button> | ||||||
|  |             </div> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </ai-table> | ||||||
|  |     </template> | ||||||
|  |   </ai-list> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   export default { | ||||||
|  |     name: 'List', | ||||||
|  |  | ||||||
|  |     props: { | ||||||
|  |       instance: Function, | ||||||
|  |       dict: Object | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     data () { | ||||||
|  |       return { | ||||||
|  |         search: { | ||||||
|  |           current: 1, | ||||||
|  |           size: 10, | ||||||
|  |           title: '', | ||||||
|  |           status: '' | ||||||
|  |         }, | ||||||
|  |         total: 10, | ||||||
|  |         colConfigs: [ | ||||||
|  |           { prop: 'title',  label: '题目', align: 'left' }, | ||||||
|  |           { prop: 'createUserName',  label: '题目类型', align: 'center' } | ||||||
|  |         ], | ||||||
|  |         tableData: [] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     created() { | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     methods: { | ||||||
|  |       getList() { | ||||||
|  |         this.instance.post(`/app/appmarketingactivityinfo/list`, null, { | ||||||
|  |           params: { | ||||||
|  |             ...this.search | ||||||
|  |           } | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.tableData = res.data.records | ||||||
|  |             this.total = res.data.total | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       remove (id) { | ||||||
|  |         this.$confirm('确定删除该活动?').then(() => { | ||||||
|  |           this.instance.post(`/app/appmarketingactivityinfo/delete?id=${id}`).then(res => { | ||||||
|  |             if (res.code == 0) { | ||||||
|  |               this.$message.success('删除成功!') | ||||||
|  |               this.getList() | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       toDetail (id) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'Detail', | ||||||
|  |           params: { | ||||||
|  |             id: id || '' | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       toAdd(id) { | ||||||
|  |         this.$emit('change', { | ||||||
|  |           type: 'Add', | ||||||
|  |           params: { | ||||||
|  |             id: id || '' | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | </style> | ||||||
		Reference in New Issue
	
	Block a user