|
@@ -12,12 +12,12 @@
|
|
|
</el-col>
|
|
|
<el-col :span="24" class="form">
|
|
|
<el-col :span="24" class="list" v-for="(item, index) in info.questions" :key="index">
|
|
|
- <el-col :span="24" class="name"> {{ index + 1 }}-{{ item.name }} </el-col>
|
|
|
+ <el-col :span="24" class="name"> {{ index + 1 }}-{{ item.title }} </el-col>
|
|
|
<el-col :span="24" class="radios" v-if="item.type == '0'">
|
|
|
- <el-radio v-model="info.radio" :label="item.num" v-for="(item, index) in item.select" :key="index">{{ item.name }}</el-radio>
|
|
|
+ <el-radio v-model="info.radio" :label="item.num" v-for="(item, index) in item.selects" :key="index">{{ item.num }}-{{ item.name }}</el-radio>
|
|
|
</el-col>
|
|
|
<el-col :span="24" class="checkbox" v-else-if="item.type == '1'">
|
|
|
- <el-checkbox v-for="(item, index) in item.select" :key="index">{{ item.name }}</el-checkbox>
|
|
|
+ <el-checkbox v-for="(item, index) in item.selects" :key="index">{{ item.num }}-{{ item.name }}</el-checkbox>
|
|
|
</el-col>
|
|
|
<el-col :span="24" class="content" v-else-if="item.type == '2'">
|
|
|
<el-input v-model="item.content" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" placeholder="请输入简答" disabled> </el-input>
|
|
@@ -29,23 +29,35 @@
|
|
|
</el-row>
|
|
|
<el-dialog title="添加题目" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
|
|
|
<el-form ref="form" :model="form" label-width="80px">
|
|
|
- <el-form-item label="题目类型">
|
|
|
- <el-radio-group v-model="form.type">
|
|
|
- <el-radio label="0">单选</el-radio>
|
|
|
- <el-radio label="1">多选</el-radio>
|
|
|
- <el-radio label="2">简答</el-radio>
|
|
|
+ <el-form-item label="添加方式">
|
|
|
+ <el-radio-group v-model="form.addType">
|
|
|
+ <el-radio label="0">添加题目</el-radio>
|
|
|
+ <el-radio label="1">选择题目</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="题目标题">
|
|
|
- <el-input v-model="form.name"></el-input>
|
|
|
- </el-form-item>
|
|
|
- <span v-if="form.type == '0'">
|
|
|
- <el-form-item label="单选选项">
|
|
|
+ <span v-if="form.addType == '0'">
|
|
|
+ <el-form-item label="题目类型">
|
|
|
+ <el-radio-group v-model="form.type">
|
|
|
+ <el-radio label="0">单选</el-radio>
|
|
|
+ <el-radio label="1">多选</el-radio>
|
|
|
+ <el-radio label="2">简答</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="题目标题">
|
|
|
+ <el-input v-model="form.title"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="单选选项" v-if="form.type == '0'">
|
|
|
<el-col :span="24" class="radio">
|
|
|
<el-col :span="20" class="left">
|
|
|
- <el-col :span="8" class="list" v-for="(item, index) in form.select" :key="index">
|
|
|
- 选项:<span>{{ item.num }}</span> 答案:<span>{{ item.name }}</span
|
|
|
- >;
|
|
|
+ <el-col :span="8" class="list" v-for="(item, index) in form.selects" :key="index">
|
|
|
+ <el-col :span="24" class="num">
|
|
|
+ <p>{{ item.num }}</p>
|
|
|
+ <p>{{ item.name }}</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24" class="btn">
|
|
|
+ <el-button type="primary" size="mini" @click="selectsEdit(item)">编辑</el-button>
|
|
|
+ <el-button type="danger" size="mini" @click="selectsDel(index)">删除</el-button>
|
|
|
+ </el-col>
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
<el-col :span="4" class="right">
|
|
@@ -53,14 +65,18 @@
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
</el-form-item>
|
|
|
- </span>
|
|
|
- <span v-else-if="form.type == '1'">
|
|
|
- <el-form-item label="多选选项">
|
|
|
+ <el-form-item label="多选选项" v-else-if="form.type == '1'">
|
|
|
<el-col :span="24" class="radio">
|
|
|
<el-col :span="20" class="left">
|
|
|
- <el-col :span="8" class="list" v-for="(item, index) in form.select" :key="index">
|
|
|
- 选项:<span>{{ item.num }}</span> 答案:<span>{{ item.name }}</span
|
|
|
- >;
|
|
|
+ <el-col :span="8" class="list" v-for="(item, index) in form.selects" :key="index">
|
|
|
+ <el-col :span="24" class="num">
|
|
|
+ <p>{{ item.num }}</p>
|
|
|
+ <p>{{ item.name }}</p>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24" class="btn">
|
|
|
+ <el-button type="primary" size="mini" @click="selectsEdit(item)">编辑</el-button>
|
|
|
+ <el-button type="danger" size="mini" @click="selectsDel(index)">删除</el-button>
|
|
|
+ </el-col>
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
<el-col :span="4" class="right">
|
|
@@ -68,12 +84,20 @@
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
</el-form-item>
|
|
|
- </span>
|
|
|
- <span v-else-if="form.type == '2'">
|
|
|
- <el-form-item label="简答">
|
|
|
+ <el-form-item label="简答" v-else-if="form.type == '2'">
|
|
|
<el-input v-model="form.content" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" placeholder="请输入简答" disabled> </el-input>
|
|
|
</el-form-item>
|
|
|
</span>
|
|
|
+ <span v-if="form.addType == '1'">
|
|
|
+ <el-form-item label="选择题目">
|
|
|
+ <el-select v-model="form.questions" multiple filterable placeholder="请选择" style="width:100%">
|
|
|
+ <el-option v-for="item in questionsList" :key="item.id" :label="item.title" :value="item.id">
|
|
|
+ <span style="float: left">{{ item.title }}</span>
|
|
|
+ <span style="float: right; color: #8492a6; font-size: 13px">{{ item.type == '0' ? '单选' : item.type == '1' ? '多选' : '简答' }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </span>
|
|
|
<el-form-item>
|
|
|
<el-button type="primary" size="mini" @click="onSubmit">保存</el-button>
|
|
|
</el-form-item>
|
|
@@ -98,6 +122,7 @@
|
|
|
<script>
|
|
|
import { mapState, createNamespacedHelpers } from 'vuex';
|
|
|
const { mapActions: questionnaire } = createNamespacedHelpers('questionnaire');
|
|
|
+const { mapActions: question } = createNamespacedHelpers('question');
|
|
|
export default {
|
|
|
name: 'setQuestion',
|
|
|
props: {},
|
|
@@ -108,18 +133,22 @@ export default {
|
|
|
// 添加题目
|
|
|
dialog: false,
|
|
|
form: {
|
|
|
- select: [],
|
|
|
+ selects: [],
|
|
|
},
|
|
|
// 选项
|
|
|
selectDialog: false,
|
|
|
selectForm: {},
|
|
|
+ // 题目列表
|
|
|
+ questionsList: [],
|
|
|
};
|
|
|
},
|
|
|
async created() {
|
|
|
await this.search();
|
|
|
+ await this.searchOther();
|
|
|
},
|
|
|
methods: {
|
|
|
...questionnaire(['query', 'fetch', 'create', 'update', 'delete']),
|
|
|
+ ...question({ queQuery: 'query' }),
|
|
|
async search() {
|
|
|
if (this.id) {
|
|
|
let res = await this.fetch(this.id);
|
|
@@ -133,42 +162,31 @@ export default {
|
|
|
},
|
|
|
// 添加题目
|
|
|
add() {
|
|
|
- // let data = {
|
|
|
- // name: '您对本人的工作岗位感到满意?',
|
|
|
- // type: '1',
|
|
|
- // select: [
|
|
|
- // {
|
|
|
- // name: '很满意',
|
|
|
- // num: 'A',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // name: '满意',
|
|
|
- // num: 'B',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // name: '一般',
|
|
|
- // num: 'C',
|
|
|
- // },
|
|
|
- // ],
|
|
|
- // };
|
|
|
- // this.$set(this, `form`, data);
|
|
|
this.dialog = true;
|
|
|
},
|
|
|
// 保存
|
|
|
async onSubmit() {
|
|
|
let data = {};
|
|
|
+ data.id = this.id;
|
|
|
let questions = _.cloneDeep(this.info.questions);
|
|
|
- questions.push(this.form);
|
|
|
+ if (this.form.addType == '0') {
|
|
|
+ questions.push(this.form);
|
|
|
+ } else {
|
|
|
+ questions.push(...this.form.questions);
|
|
|
+ }
|
|
|
data.questions = questions;
|
|
|
- data.id = this.id;
|
|
|
let res = await this.update(data);
|
|
|
if (this.$checkRes(res)) {
|
|
|
+ this.$message({
|
|
|
+ message: '添加题目成功',
|
|
|
+ type: 'success',
|
|
|
+ });
|
|
|
this.handleClose();
|
|
|
}
|
|
|
},
|
|
|
// 取消保存
|
|
|
handleClose() {
|
|
|
- this.form = { select: [] };
|
|
|
+ this.form = { selects: [] };
|
|
|
this.dialog = false;
|
|
|
this.search();
|
|
|
},
|
|
@@ -176,15 +194,39 @@ export default {
|
|
|
// 保存选项
|
|
|
selectSubmit() {
|
|
|
let data = this.selectForm;
|
|
|
- this.form.select.push(data);
|
|
|
+ let oldData = this.form.selects.find(i => i.num == data.num);
|
|
|
+ let index = this.form.selects.findIndex(i => i.num == data.num);
|
|
|
+ if (oldData) {
|
|
|
+ oldData.NUM = data.num;
|
|
|
+ oldData.name = data.name;
|
|
|
+ this.form.selects.splice(index, 1, oldData);
|
|
|
+ } else {
|
|
|
+ this.form.selects.push(data);
|
|
|
+ }
|
|
|
this.selectClose();
|
|
|
},
|
|
|
+ // 修改
|
|
|
+ selectsEdit(data) {
|
|
|
+ this.$set(this, `selectForm`, data);
|
|
|
+ this.selectDialog = true;
|
|
|
+ },
|
|
|
+ // 删除选项
|
|
|
+ selectsDel(index) {
|
|
|
+ this.form.selects.splice(index, 1);
|
|
|
+ },
|
|
|
// 取消保存选项
|
|
|
selectClose() {
|
|
|
this.selectForm = {};
|
|
|
this.selectDialog = false;
|
|
|
this.search();
|
|
|
},
|
|
|
+ // 查询题目列表
|
|
|
+ async searchOther() {
|
|
|
+ let res = await this.queQuery();
|
|
|
+ if (this.$checkRes(res)) {
|
|
|
+ this.$set(this, `questionsList`, res.data);
|
|
|
+ }
|
|
|
+ },
|
|
|
},
|
|
|
computed: {
|
|
|
...mapState(['user']),
|
|
@@ -240,15 +282,31 @@ export default {
|
|
|
.radio {
|
|
|
.left {
|
|
|
.list {
|
|
|
- color: #666;
|
|
|
- font-size: 16px;
|
|
|
- line-height: 25px;
|
|
|
- span {
|
|
|
- font-weight: bold;
|
|
|
- padding: 0 0 0 6px;
|
|
|
+ text-align: center;
|
|
|
+ padding: 5px 0;
|
|
|
+ // border-bottom: 1px solid #ccc;
|
|
|
+ .num {
|
|
|
+ height: 65px;
|
|
|
+ overflow: hidden;
|
|
|
+ p {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ line-height: 20px;
|
|
|
+ }
|
|
|
+ p:nth-child(2) {
|
|
|
+ color: #ff0000;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 20px;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ -webkit-line-clamp: 2;
|
|
|
+ word-break: break-all;
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+ }
|
|
|
}
|
|
|
- span:nth-child(2) {
|
|
|
- color: #ff0000;
|
|
|
+ .btn {
|
|
|
+ margin: 5px 0 0 0;
|
|
|
}
|
|
|
}
|
|
|
}
|