提交 7651caa9 authored 作者: lihuihui's avatar lihuihui

update

上级 f514e5e7
...@@ -38,103 +38,20 @@ export function addQuestion(data) { ...@@ -38,103 +38,20 @@ export function addQuestion(data) {
} }
/** /**
* 获取应用详情 * 删除试题
*/ */
export function getApp(id, params) { export function deleteQuestion(data) {
return httpRequest.get(`/api/permissions/admin/v1/${id}/application`, { params }) return httpRequest.post('/api/qbs/admin/v1/question/batch-delete', data)
} }
/** /**
* 创建应用 * 更新试题
*/ */
export function createApp(data) { export function updateQuestion(id, data) {
return httpRequest.post('/api/permissions/admin/v1/application', data) return httpRequest.put(`/api/qbs/admin/v1/question/${id}`, data)
} }
/** /**
* 更新应用 * 试题详情
*/
export function updateApp(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/${id}/application`, data)
}
/**
* 删除应用
*/
export function deleteApp(id, data) {
return httpRequest.delete(`/api/permissions/admin/v1/${id}/application`, data)
}
/**
* 更新应用签名秘钥
*/
export function updateAppSecretKey(id, data) {
return httpRequest.patch(`/api/permissions/admin/v1/${id}/application/secret-key`, data)
}
/**
* 获取应用管理员
*/
export function getAppAdminUsers(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/application/assign/app-users`, { params })
}
/**
* 删除应用管理员
*/
export function deleteAppAdminUsers(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/assign/remove-app-users`, data)
}
/**
* 创建成员
*/
export function createUser(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/user`, data)
}
/**
* 创建应用管理员
*/
export function createAppAdminUsers(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/application/assign/users-to-app`, data)
}
/**
* 获取事件列表
*/
export function getEventList(params) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/events`, { params })
}
/**
* 创建事件
*/
export function createEvent(appid, data) {
return httpRequest.post(`/api/permissions/admin/v1/${appid}/event/create`, data)
}
/**
* 更新事件
*/
export function updateEvent(id, data) {
return httpRequest.put(`/api/permissions/admin/v1/event/${id}/update`, data)
}
/**
* 删除事件
*/
export function deleteEvents(data) {
return httpRequest.post('/api/permissions/admin/v1/event/batch-delete', data)
}
/**
* 获取事件详情
*/
export function getEvent(params) {
return httpRequest.get(`/api/permissions/admin/v1/event/${params.id}/detail`, { params })
}
/**
* 刷新事件token
*/
export function refreshEventToken(params) {
return httpRequest.patch(`/api/permissions/admin/v1/event/${params.id}/refresh-token`, { params })
}
/**
* 获取获取事件回调记录列表
*/ */
export function getEventRecordList(params) { export function questionDetail(id) {
return httpRequest.get(`/api/permissions/admin/v1/${params.app_id}/event/records`, { params }) return httpRequest.get(`/api/qbs/admin/v1/question/${id}`)
} }
...@@ -9,12 +9,19 @@ ...@@ -9,12 +9,19 @@
<template v-if="source == 1"> <template v-if="source == 1">
<div class="radio-box"> <div class="radio-box">
<div class="tips-tit index">请选择题库:</div> <div class="tips-tit index">请选择题库:</div>
<el-radio v-model="questionBank" label="1">我的题库</el-radio> <el-radio @change="radioChange" v-model="questionBank" label="1">我的题库</el-radio>
<el-radio v-model="questionBank" label="2" style="text-indent: 1.5em">公共题库</el-radio> <el-radio @change="radioChange" v-model="questionBank" label="2" style="text-indent: 1.5em">公共题库</el-radio>
</div> </div>
<app-list v-bind="tableOptions" ref="list" class="app-list"></app-list> <app-list v-bind="tableOptions" ref="list" class="app-list" @selection-change="handleSelectionChange">
<template v-slot:input-filter>
<div class="filter-input">
<el-input v-model="filterInput" placeholder="请选择"></el-input>
<div class="pop" @click="dialogVisible = true"></div>
</div>
</template>
</app-list>
<div class="btn-box"> <div class="btn-box">
<el-button type="primary">&nbsp;&nbsp;&nbsp;&nbsp;确定&nbsp;&nbsp;&nbsp;&nbsp;</el-button> <el-button type="primary" @click="$emit('haveQuestion', checkedList)">&nbsp;&nbsp;&nbsp;&nbsp;确定&nbsp;&nbsp;&nbsp;&nbsp;</el-button>
</div> </div>
</template> </template>
<template v-else> <template v-else>
...@@ -29,65 +36,157 @@ ...@@ -29,65 +36,157 @@
<el-button type="primary" @click="addQuestionConfirm">&nbsp;&nbsp;&nbsp;&nbsp;确定&nbsp;&nbsp;&nbsp;&nbsp;</el-button> <el-button type="primary" @click="addQuestionConfirm">&nbsp;&nbsp;&nbsp;&nbsp;确定&nbsp;&nbsp;&nbsp;&nbsp;</el-button>
</div> </div>
</template> </template>
<el-dialog title="提示" :visible="dialogVisible" width="30%" :before-close="handleClose">
<el-tree
:data="treeList"
:props="defaultProps"
@node-click="handleNodeClick"
:expand-on-click-node="false"
></el-tree>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="dialogConfirm">确 定</el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { getAppList } from '../api' import { getAppList, getQuestionCategory } from '../api'
export default { export default {
data() { data() {
return { return {
dialogVisible: false,
filterInput: '',
source: '1', source: '1',
questionBank: '1', questionBank: '1',
type: '1' type: '1',
visible: false,
treeList: [],
defaultProps: '',
treeValue: {
name: '',
id: ''
},
checkedList: []
} }
}, },
computed: { computed: {
tableOptions() { tableOptions() {
return { return {
limit: 10,
filters: [ filters: [
{ {
type: 'select', type: 'select',
label: '题目类型:' label: '题目类型:',
prop: 'question_type',
options: [
{ label: '单选题', value: 1 },
{ label: '多选题', value: 2 },
{ label: '问答题', value: 3 },
{ label: '案例题', value: 5 },
{ label: '判断题', value: 6 },
{ label: '实操题', value: 7 },
{ label: '情景题', value: 8 }
]
}, },
{ {
type: 'select', prop: 'question_title',
label: '等级难度:' type: 'input',
label: '题目标题:'
}, },
{ {
type: 'select', prop: 'question_content',
label: '试题分类:' type: 'input',
label: '题干内容:'
}, },
{ {
type: 'input', prop: 'question_difficulty',
label: '题目标题:' type: 'select',
label: '难度等级:',
options: [
{ label: '易', value: '1' },
{ label: '中', value: '2' },
{ label: '难', value: '3' }
]
}, },
{ {
slots: 'input-filter',
prop: 'question_category',
type: 'input', type: 'input',
label: '题干内容:' label: '试题分类:'
}, },
{ {
type: 'input', type: 'input',
label: '知识点:' prop: 'question_tag',
label: '知识点/标签:'
} }
], ],
remote: { httpRequest: getAppList }, remote: {
httpRequest: getAppList,
params: {
permission: this.questionBank,
project_prefix: 'x1',
question_category: this.treeValue.id
},
callback(data) {
const questionType = {
1: '单选题',
2: '多选题',
3: '问答题',
6: '判断题'
}
const questionDifficulty = {
1: '易',
2: '中',
3: '难'
}
return data.data.reduce((a, b) => {
const type = b.question_type
b.question_type = questionType[b.question_type]
b.question_difficulty = questionDifficulty[b.question_difficulty]
if (type !== 5 && type !== 7 && type !== 8) a.push(b)
return a
}, [])
}
},
columns: [ columns: [
{ type: 'selection', minWidth: '50px', fixed: 'left' }, { type: 'selection', minWidth: '50px', fixed: 'left' },
{ label: '序号', prop: 'order' }, { label: '序号', prop: 'question_order' },
{ label: '题目类型', prop: 'type' }, { label: '题目类型', prop: 'question_type' },
{ label: '试题分类', prop: 'sort' }, { label: '试题分类', prop: 'question_category.category_name' },
{ label: '题目目标', prop: 'title' }, { label: '题目标题', prop: 'question_title' },
{ label: '知识点', prop: 'points' }, { label: '知识点', prop: 'knowledge_point.title' },
{ label: '等级难度', prop: 'grade' }, { label: '等级难度', prop: 'question_difficulty' },
{ label: '更新人', prop: 'update_people' } { label: '更新人', prop: 'operator.nickname' },
{ label: '更新时间', prop: 'updated_at' },
{ label: '操作', slots: 'table-x', align: 'right' }
] ]
} }
} }
}, },
mounted() {
this.getTreeList()
},
methods: { methods: {
handleSelectionChange(data) {
this.checkedList = data.reduce((a, b) => {
const data = {}
console.log(typeof b.child_question_type)
data.question_title = b.question_title
data.child_question_type = b.child_question_type || '1'
data.question_content = b.question_content
data.question_analysis = b.question_analysis
if (this.type !== '3') data.question_options = b.question_options
a.push(data)
return a
}, [])
},
radioChange() {
this.$refs.list.refetch()
},
addQuestionConfirm() { addQuestionConfirm() {
const params = { const data = {
question_title: '', question_title: '',
child_question_type: this.type, child_question_type: this.type,
question_content: '', question_content: '',
...@@ -107,15 +206,59 @@ export default { ...@@ -107,15 +206,59 @@ export default {
{ option: '错误', checked: false } { option: '错误', checked: false }
] ]
} }
params.question_options = options data.question_options = options
}
this.$emit('questionList', data)
},
handleNodeClick(data) {
this.treeValue.name = data.label
this.treeValue.id = data.id
},
handleClose() {
this.treeValue.name = ''
this.treeValue.id = ''
this.dialogVisible = false
},
dialogConfirm() {
this.dialogVisible = false
this.filterInput = this.treeValue.name
this.$refs.list.refetch()
},
// 获取tree列表
getTreeList() {
getQuestionCategory('x1').then(res => {
if (Array.isArray(res.data)) {
this.initTree(res.data)
}
})
},
// 过滤数据 变成tree组件需要的数据
initTree(data) {
this.treeList = data.reduce((a, b) => {
b.label = b.category_name
if (b.children.length) {
setData(b.children)
}
a.push(b)
return a
}, [])
function setData(item) {
return item.map(element => {
if (element.children.length) {
setData(element.children)
element.label = element.category_name
} else {
element.label = element.category_name
}
return element
})
} }
this.$emit('questionList', params)
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss">
.add-chidren { .add-chidren {
padding: 0 20px; padding: 0 20px;
.radio-tips { .radio-tips {
...@@ -141,6 +284,10 @@ export default { ...@@ -141,6 +284,10 @@ export default {
.btn-box { .btn-box {
display: flex; display: flex;
justify-content: center; justify-content: center;
padding-bottom: 30px;
} }
} }
.v-modal{
z-index: 10 !important;
}
</style> </style>
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
</el-form-item> </el-form-item>
<el-form-item label="选项" prop="question_options" v-if="ruleForm.question_type != 3"> <el-form-item label="选项" prop="question_options" v-if="ruleForm.question_type != 3">
<!-- 单选题 --> <!-- 单选题 -->
<radio ref="options" v-if="ruleForm.question_type == 1"></radio> <radio ref="options" :option="ruleForm.question_options" v-if="ruleForm.question_type == 1"></radio>
<!-- 多选题 --> <!-- 多选题 -->
<checkbox ref="options" v-if="ruleForm.question_type == 2"></checkbox> <checkbox ref="options" :option="ruleForm.question_options" v-if="ruleForm.question_type == 2"></checkbox>
<!-- 判断题 --> <!-- 判断题 -->
<judgment ref="options" v-if="ruleForm.question_type == 6"></judgment> <judgment ref="options" :option="ruleForm.question_options" v-if="ruleForm.question_type == 6"></judgment>
</el-form-item> </el-form-item>
<el-form-item label="标签" prop="question_tag"> <el-form-item label="标签" prop="question_tag">
<el-input v-model="ruleForm.question_tag"></el-input> <el-input v-model="ruleForm.question_tag"></el-input>
...@@ -59,7 +59,12 @@ ...@@ -59,7 +59,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button> <template v-if="$route.query.id">
<el-button v-if="$route.query.type == 'edit'" type="primary" @click="submitForm('ruleForm')">确认修改</el-button>
</template>
<template v-else>
<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
</template>
<!-- <el-button @click="resetForm('ruleForm')">重置</el-button> --> <!-- <el-button @click="resetForm('ruleForm')">重置</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -82,9 +87,14 @@ import VEditor from '@/components/tinymce/Index.vue' ...@@ -82,9 +87,14 @@ import VEditor from '@/components/tinymce/Index.vue'
import Radio from '../components/QTypeRadio.vue' import Radio from '../components/QTypeRadio.vue'
import Checkbox from '../components/QTypeCheckbox.vue' import Checkbox from '../components/QTypeCheckbox.vue'
import Judgment from '../components/QTypeJudgment.vue' import Judgment from '../components/QTypeJudgment.vue'
import { getQuestionCategory, searchTag, addQuestion } from '../api' import { getQuestionCategory, searchTag, addQuestion, updateQuestion } from '../api'
export default { export default {
components: { VEditor, Radio, Checkbox, Judgment }, components: { VEditor, Radio, Checkbox, Judgment },
props: {
detailData: {
type: Object
}
},
data() { data() {
return { return {
pointOptions: [], pointOptions: [],
...@@ -130,25 +140,34 @@ export default { ...@@ -130,25 +140,34 @@ export default {
} }
}, },
mounted() { mounted() {
if (this.detailData) {
this.ruleForm = this.detailData
}
this.getTreeList() this.getTreeList()
}, },
methods: { methods: {
submitForm(formName) { submitForm(formName) {
if (parseInt(this.ruleForm.question_type) !== 3) { if (parseInt(this.ruleForm.question_type) !== 3) {
console.log(this.$refs.options.datas, '123')
const isValue = this.$refs.options.datas.find(item => item.option === '') const isValue = this.$refs.options.datas.find(item => item.option === '')
if (!isValue) this.ruleForm.question_options = this.$refs.options.datas if (!isValue) this.ruleForm.question_options = this.$refs.options.datas
} }
console.log(this.ruleForm, 'form')
this.$refs[formName].validate(valid => { this.$refs[formName].validate(valid => {
if (valid) { if (valid) {
// alert('submit!') // console.log(JSON.stringify(this.ruleForm))
addQuestion(this.ruleForm).then(res => { if (this.$router.query.id) {
if (res.code === 0) { updateQuestion(this.ruleForm).then(res => {
this.$router.push({
path: '/question/list'
})
})
} else {
addQuestion(this.ruleForm).then(res => {
this.$router.push({ this.$router.push({
path: '/question/list' path: '/question/list'
}) })
} })
}) }
} else { } else {
console.log('error submit!!') console.log('error submit!!')
return false return false
......
<template> <template>
<div class="radio-box"> <div class="radio-box">
<template v-for="(item, index) in datas"> <template v-for="(item, index) in option || datas">
<div class="opt" :key="index"> <div class="opt" :key="index">
<el-checkbox v-model="checkboxValue" :label="index" @change="checkboxChange"> <el-checkbox v-model="checkboxValue" :label="index" @change="checkboxChange">
<el-tag>{{ A_Z()[index] }}</el-tag> <el-tag>{{ A_Z()[index] }}</el-tag>
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
<script> <script>
export default { export default {
props: {
option: {
type: Array
}
},
data() { data() {
return { return {
checkboxValue: [0], checkboxValue: [0],
...@@ -38,6 +43,9 @@ export default { ...@@ -38,6 +43,9 @@ export default {
] ]
} }
}, },
mounted() {
if (this.option) this.datas = this.option
},
methods: { methods: {
add() { add() {
this.datas.push({ option: '', checked: false }) this.datas.push({ option: '', checked: false })
......
...@@ -7,6 +7,11 @@ ...@@ -7,6 +7,11 @@
<script> <script>
export default { export default {
props: {
option: {
type: Array
}
},
data() { data() {
return { return {
radio: '0', radio: '0',
...@@ -22,6 +27,9 @@ export default { ...@@ -22,6 +27,9 @@ export default {
] ]
} }
}, },
mounted() {
if (this.option) this.datas = this.option
},
methods: { methods: {
radioChange() { radioChange() {
this.datas.map(item => { this.datas.map(item => {
...@@ -29,7 +37,6 @@ export default { ...@@ -29,7 +37,6 @@ export default {
this.datas[this.radio].checked = true this.datas[this.radio].checked = true
return item return item
}) })
console.log(this.datas, 'datas')
} }
} }
} }
......
<template> <template>
<div class="radio-box"> <div class="radio-box">
<template v-for="(item, index) in datas"> <template v-for="(item, index) in option || datas">
<div class="opt" :key="index"> <div class="opt" :key="index">
<el-radio v-model="radioValue" :label="index" @change="radioChange"> <el-radio v-model="radioValue" :label="index" @change="radioChange">
<el-tag>{{ A_Z()[index] }}</el-tag> <el-tag>{{ A_Z()[index] }}</el-tag>
...@@ -10,12 +10,16 @@ ...@@ -10,12 +10,16 @@
<i class="el-icon-circle-plus-outline icon-style" v-else @click="add"></i> <i class="el-icon-circle-plus-outline icon-style" v-else @click="add"></i>
</div> </div>
</template> </template>
<!-- <el-radio v-model="radio" label="1"></el-radio> -->
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props: {
option: {
type: Array
}
},
data() { data() {
return { return {
radioValue: 0, radioValue: 0,
...@@ -36,6 +40,9 @@ export default { ...@@ -36,6 +40,9 @@ export default {
ruleForm: '' ruleForm: ''
} }
}, },
mounted() {
if (this.option) this.datas = this.option
},
methods: { methods: {
add() { add() {
this.datas.push({ option: '', checked: false }) this.datas.push({ option: '', checked: false })
......
<template> <template>
<div> <div>
<div class="tool-btn"> <div class="tool-btn">
<el-button type="primary" @click="submitForm('ruleForm')">添加子题目</el-button> <el-button type="primary" @click="drawer = true">添加子题目</el-button>
<el-button type="primary" @click="resetForm('ruleForm')">保存主题目</el-button> <el-button type="primary" @click="resetForm('ruleForm')">保存主题目</el-button>
</div> </div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="题库范围" prop="permission">
<el-radio v-model="ruleForm.permission" label="1">我的题库</el-radio>
<el-radio v-model="ruleForm.permission" label="2">公共题库</el-radio>
</el-form-item>
<el-form-item label="题目类型" prop="question_type"> <el-form-item label="题目类型" prop="question_type">
<el-select @change="questionTypeChange" v-model="ruleForm.question_type" placeholder="请选择活题目类型"> <el-select @change="questionTypeChange" v-model="ruleForm.question_type" placeholder="请选择活题目类型">
<el-option v-for="(item, index) in qType" :label="item.label" :value="item.value" :key="index"></el-option> <el-option v-for="(item, index) in qType" :label="item.label" :value="item.value" :key="index"></el-option>
...@@ -60,24 +64,14 @@ ...@@ -60,24 +64,14 @@
<el-option v-for="item in pointOptions" :key="item.id" :label="item.title" :value="item.id"> </el-option> <el-option v-for="item in pointOptions" :key="item.id" :label="item.title" :value="item.id"> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button> -->
<!-- <el-button @click="resetForm('ruleForm')">重置</el-button> -->
<!-- </el-form-item> -->
</el-form> </el-form>
<!-- <questions-chidren
v-for="(item, index) in chidrenList"
:key="index"
:data="item"
:chidrenList="chidrenList"
@addChidren="drawer = true"
@removeChidren="removeChidren"
></questions-chidren> -->
<questions-chidren <questions-chidren
:chidrenList="chidrenList" :chidrenList="chidrenList"
@submitForm="submitForm"
@addChidren="drawer = true" @addChidren="drawer = true"
></questions-chidren> ></questions-chidren>
<el-drawer size="90%" title="新建试题" :visible.sync="drawer" direction="rtl" :before-close="handleClose"> <el-drawer size="90%" title="新建试题" :visible.sync="drawer" direction="rtl" :before-close="handleCloseDrawer">
<add-chidren @questionList="questionList" :dataForm="ruleForm"></add-chidren> <add-chidren @haveQuestion="haveQuestion" @questionList="questionList" :dataForm="ruleForm"></add-chidren>
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
...@@ -85,7 +79,7 @@ ...@@ -85,7 +79,7 @@
import QuestionsChidren from './QuestionsChidren.vue' import QuestionsChidren from './QuestionsChidren.vue'
import VEditor from '@/components/tinymce/Index.vue' import VEditor from '@/components/tinymce/Index.vue'
import AddChidren from './AddChidren.vue' import AddChidren from './AddChidren.vue'
import { getQuestionCategory, searchTag } from '../api' import { getQuestionCategory, searchTag, addQuestion } from '../api'
export default { export default {
components: { AddChidren, VEditor, QuestionsChidren }, components: { AddChidren, VEditor, QuestionsChidren },
props: { props: {
...@@ -109,14 +103,16 @@ export default { ...@@ -109,14 +103,16 @@ export default {
ruleForm: { ruleForm: {
permission: '1', permission: '1',
question_type: 1, question_type: 1,
question_title: '1', question_title: '',
common_content: '1', common_content: '',
question_category: '', question_category: '',
question_tag: '', question_tag: '',
knowledge_point: '', knowledge_point: '',
question_difficulty: '' question_difficulty: '',
children: []
}, },
rules: { rules: {
permission: [{ required: true, message: '请选择', trigger: 'change' }],
question_type: [{ required: true, message: '请选择', trigger: 'change' }], question_type: [{ required: true, message: '请选择', trigger: 'change' }],
question_difficulty: [{ required: true, message: '请选择难度等级', trigger: 'change' }], question_difficulty: [{ required: true, message: '请选择难度等级', trigger: 'change' }],
question_title: [{ required: true, message: '请填写题目标题', trigger: 'blur' }], question_title: [{ required: true, message: '请填写题目标题', trigger: 'blur' }],
...@@ -140,19 +136,19 @@ export default { ...@@ -140,19 +136,19 @@ export default {
this.getTreeList() this.getTreeList()
}, },
methods: { methods: {
handleCloseDrawer() {
this.drawer = false
},
submitForm(formName) { submitForm(formName) {
this.drawer = true this.ruleForm.children = this.chidrenList
this.$refs[formName].validate(valid => { addQuestion(this.ruleForm).then(res => {
if (valid) { // 11
// alert('submit!') this.$router.push({
} else { path: '/question/list'
console.log('error submit!!') })
return false
}
}) })
}, },
resetForm(formName) { resetForm(formName) {
// this.$refs[formName].resetFields()
this.$refs[formName].validate(valid => { this.$refs[formName].validate(valid => {
if (valid) { if (valid) {
console.log(this.chidrenList) console.log(this.chidrenList)
...@@ -221,6 +217,12 @@ export default { ...@@ -221,6 +217,12 @@ export default {
this.chidrenList.push(data) this.chidrenList.push(data)
this.drawer = false this.drawer = false
console.log(this.chidrenList, 'list') console.log(this.chidrenList, 'list')
},
haveQuestion(data) {
data.forEach(item => {
this.chidrenList.push(item)
})
this.drawer = false
} }
} }
} }
......
<template> <template>
<div> <div>
<!-- <template v-for="(ruleForm, index) in dataList"> --> <el-form :model="data" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form :model="data" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <div v-for="(ruleForm, index) in dataList" :key="index">
<div v-for="(ruleForm, index) in dataList" :key="index"> <el-divider content-position="center" class="divider">子题目{{ index + 1 }}</el-divider>
<el-divider content-position="center" class="divider">子题目{{ index + 1 }}</el-divider> <el-form-item style="text-align: right;">
<el-form-item style="text-align: right;"> <el-button type="primary" @click="$emit('addChidren')">添加子题目</el-button>
<el-button type="primary" @click="$emit('addChidren')">添加子题目</el-button> <el-button type="primary" @click="removeChidren(index)">删除子题目</el-button>
<el-button type="primary" @click="removeChidren(index)">删除子题目</el-button> </el-form-item>
</el-form-item> <el-form-item label="子题目类型" prop="child_question_type">
<el-form-item label="子题目类型" prop="child_question_type"> <el-select v-model="ruleForm.child_question_type" disabled placeholder="请选择活动区域">
<el-select v-model="ruleForm.child_question_type" placeholder="请选择活动区域"> <el-option label="单选题" value="1"></el-option>
<el-option label="单选题" value="1"></el-option> <el-option label="多选题" value="2"></el-option>
<el-option label="多选题" value="2"></el-option> <el-option label="判断题" value="6"></el-option>
<el-option label="判断题" value="6"></el-option> <el-option label="问答题" value="3"></el-option>
<el-option label="问答题" value="3"></el-option> </el-select>
</el-select> </el-form-item>
</el-form-item> <el-form-item label="子题目标题" prop="question_title">
<el-form-item label="子题目标题" prop="question_title"> <el-input v-model="ruleForm.question_title"></el-input>
<el-input v-model="ruleForm.question_title"></el-input> </el-form-item>
</el-form-item> <el-form-item label="子题目内容" prop="question_content">
<el-form-item label="子题目内容" prop="question_content"> <v-editor v-model="ruleForm.question_content"></v-editor>
<v-editor v-model="ruleForm.question_content"></v-editor> </el-form-item>
</el-form-item> <el-form-item label="选项" prop="question_options" v-if="ruleForm.child_question_type != 3">
<el-form-item label="选项" prop="question_options" v-if="ruleForm.child_question_type != 3"> <!-- 单选题 -->
<!-- 单选题 --> <radio ref="options" :option="ruleForm.question_options" v-if="ruleForm.child_question_type == 1"></radio>
<radio ref="options" v-if="ruleForm.child_question_type == 1"></radio> <!-- 多选题 -->
<!-- 多选题 --> <checkbox ref="options" :option="ruleForm.question_options" v-if="ruleForm.child_question_type == 2"></checkbox>
<checkbox ref="options" v-if="ruleForm.child_question_type == 2"></checkbox> <!-- 判断题 -->
<!-- 判断题 --> <judgment ref="options" :option="ruleForm.question_options" v-if="ruleForm.child_question_type == 6"></judgment>
<judgment ref="options" v-if="ruleForm.child_question_type == 6"></judgment> </el-form-item>
</el-form-item> <el-form-item label="子题目解析" prop="question_analysis">
<el-form-item label="子题目解析" prop="question_analysis"> <v-editor v-model="ruleForm.question_analysis"></v-editor>
<v-editor v-model="ruleForm.question_analysis"></v-editor> </el-form-item>
</el-form-item> <el-form-item style="text-align: center;" v-if="index + 1 == dataList.length">
<el-form-item style="text-align: center;" v-if="index + 1 == dataList.length"> <el-button type="primary" @click="submitForm">保存</el-button>
<el-button type="primary" @click="submitForm()">保存</el-button> </el-form-item>
</el-form-item> </div>
</div> </el-form>
</el-form>
<!-- </template> -->
</div> </div>
</template> </template>
...@@ -73,21 +71,14 @@ export default { ...@@ -73,21 +71,14 @@ export default {
}, },
mounted() { mounted() {
this.dataList = this.chidrenList this.dataList = this.chidrenList
console.log(this.chidrenList)
}, },
methods: { methods: {
removeChidren(n) { removeChidren(n) {
this.dataList.splice(n, 1) this.dataList.splice(n, 1)
}, },
submitForm() { submitForm() {
console.log(111, '111') this.$emit('submitForm')
this.$refs.ruleForm.validate(valid => {
if (valid) {
console.log('11')
} else {
console.log(111, '111')
return false
}
})
} }
} }
} }
......
<template> <template>
<app-card> <app-card>
<detail @questionType="questionType" v-if="[1, 2, 3, 6].includes(questionTypeNum)"></detail> <template v-if="[1, 2, 3, 6].includes(questionTypeNum)">
<situation-question :questionTypeNumber="questionTypeNum" @questionType="questionType" v-else></situation-question> <template v-if="$route.query.id">
<detail v-if="Object.keys(detailData).length" :detailData="detailData" @questionType="questionType"></detail>
</template>
<detail v-else @questionType="questionType"></detail>
</template>
<template v-else>
<template v-if="$route.query.id">
<situation-question v-if="$route.query.id && Object.keys(detailData).length" :detailData="detailData" :questionTypeNumber="questionTypeNum" @questionType="questionType"></situation-question>
</template>
<situation-question v-else :questionTypeNumber="questionTypeNum" @questionType="questionType"></situation-question>
</template>
</app-card> </app-card>
</template> </template>
<script> <script>
import Detail from '../components/Detail.vue' import Detail from '../components/Detail.vue'
import SituationQuestion from '../components/QTypeSituation.vue' import SituationQuestion from '../components/QTypeSituation.vue'
// import VEditor from '@/components/tinymce/Index.vue' import { questionDetail } from '../api'
// import Checkbox from '../components/QTypeCheckbox.vue'
// import Judgment from '../components/QTypeJudgment.vue'
export default { export default {
components: { Detail, SituationQuestion }, components: { Detail, SituationQuestion },
// components: { Detail },
data() { data() {
return { return {
questionTypeNum: 1 questionTypeNum: 1,
detailData: {}
}
},
mounted() {
if (this.$route.query.id) {
questionDetail(this.$route.query.id).then(res => {
this.questionTypeNum = res.data.question_type
res.data.permission = res.data.permission.toString()
res.data.question_difficulty = res.data.question_difficulty.toString()
res.data.question_category = res.data.question_category.category_name
this.detailData = res.data
console.log(this.detailData)
})
} }
}, },
methods: { methods: {
questionType(n) { questionType(n) {
console.log(typeof n, '123')
this.questionTypeNum = n this.questionTypeNum = n
} }
} }
......
<template> <template>
<app-card> <app-card>
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list" @selection-change="handleSelectionChange">
<template v-slot:radio-filter> <template v-slot:radio-filter>
<el-radio v-model="radio" label="1">我的题库</el-radio> <el-radio @change="radioChange" v-model="radio" label="1">我的题库</el-radio>
<el-radio v-model="radio" label="2">公共题库</el-radio> <el-radio @change="radioChange" v-model="radio" label="2">公共题库</el-radio>
</template> </template>
<template v-slot:input-filter> <template v-slot:input-filter>
<div class="filter-input"> <div class="filter-input">
...@@ -16,12 +16,12 @@ ...@@ -16,12 +16,12 @@
>新建试题</el-button >新建试题</el-button
> >
<el-button type="primary" icon="el-icon-plus" @click="visible = true">批量导入试题</el-button> <el-button type="primary" icon="el-icon-plus" @click="visible = true">批量导入试题</el-button>
<el-button type="primary" icon="el-icon-plus" @click="visible = true">批量删除</el-button> <el-button type="primary" icon="el-icon-plus" @click="deleteQuestion()">批量删除</el-button>
</div> </div>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<el-button type="text" @click="handleView(row)">编辑</el-button> <el-button type="text" @click="handleSettings(row)">编辑</el-button>
<el-button type="text" @click="handleSettings(row)">查看详情</el-button> <el-button type="text" @click="handleView(row)">查看详情</el-button>
<el-button type="text" @click="handleSettings(row)">删除</el-button> <el-button type="text" @click="handleDelete(row.id)">删除</el-button>
</template> </template>
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose"> <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
<el-tree <el-tree
...@@ -40,11 +40,12 @@ ...@@ -40,11 +40,12 @@
</template> </template>
<script> <script>
import { getAppList, getQuestionCategory } from '../api' import { getAppList, getQuestionCategory, deleteQuestion } from '../api'
export default { export default {
data() { data() {
return { return {
deleteQuestions: [],
dialogVisible: false, dialogVisible: false,
visible: false, visible: false,
radio: '1', radio: '1',
...@@ -60,6 +61,7 @@ export default { ...@@ -60,6 +61,7 @@ export default {
computed: { computed: {
tableOptions() { tableOptions() {
return { return {
limit: 10,
filters: [ filters: [
{ {
slots: 'radio-filter', slots: 'radio-filter',
...@@ -161,6 +163,22 @@ export default { ...@@ -161,6 +163,22 @@ export default {
this.getTreeList() this.getTreeList()
}, },
methods: { methods: {
// 列表选择
handleSelectionChange(data) {
this.deleteQuestions = data.reduce((a, b) => a.push(b.id) && a, [])
},
// 删除试题
handleDelete(id) {
console.log(id)
const ids = id ? [id] : this.deleteQuestions
deleteQuestion({ ids: ids }).then(res => {
this.$message({
message: '删除成功',
type: 'success'
})
this.$refs.list.refetch()
})
},
// 获取tree列表 // 获取tree列表
getTreeList() { getTreeList() {
getQuestionCategory('x1').then(res => { getQuestionCategory('x1').then(res => {
...@@ -201,7 +219,7 @@ export default { ...@@ -201,7 +219,7 @@ export default {
}, },
handleSettings(row) { handleSettings(row) {
// tan ~~~~~ // tan ~~~~~
this.$router.push({ path: '/settings/users', query: { appid: row.id } }) this.$router.push({ path: '/question/create', query: { id: row.id, type: 'edit' } })
}, },
handleNodeClick(data) { handleNodeClick(data) {
this.treeValue.name = data.label this.treeValue.name = data.label
...@@ -216,13 +234,9 @@ export default { ...@@ -216,13 +234,9 @@ export default {
this.dialogVisible = false this.dialogVisible = false
this.filterInput = this.treeValue.name this.filterInput = this.treeValue.name
this.$refs.list.refetch() this.$refs.list.refetch()
} },
}, radioChange() {
watch: { this.$refs.list.refetch()
radio: {
handler() {
this.$refs.list.refetch()
}
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论