|
@@ -32,7 +32,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
-import { submitProblemSurvey } from '../../utils/api.js'
|
|
|
|
|
|
|
+import { submitProblemSurvey, getProblemSurveyQuestions } from '../../utils/api.js'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
data() {
|
|
data() {
|
|
@@ -53,24 +53,31 @@ export default {
|
|
|
methods: {
|
|
methods: {
|
|
|
getQKey: function(qi) { return 'q' + qi },
|
|
getQKey: function(qi) { return 'q' + qi },
|
|
|
getOptKey: function(qi, oi) { return 'o' + qi + '_' + oi },
|
|
getOptKey: function(qi, oi) { return 'o' + qi + '_' + oi },
|
|
|
|
|
+ getOptId: function(q, oi) {
|
|
|
|
|
+ var opt = q.options && q.options[oi]
|
|
|
|
|
+ return opt ? (opt.id != null ? opt.id : oi) : oi
|
|
|
|
|
+ },
|
|
|
isSelected(qi, oi) {
|
|
isSelected(qi, oi) {
|
|
|
var ans = this.answers[qi]
|
|
var ans = this.answers[qi]
|
|
|
- return ans && ans.indexOf(oi) !== -1
|
|
|
|
|
|
|
+ if (!ans) return false
|
|
|
|
|
+ var q = this.questions[qi]
|
|
|
|
|
+ return ans.indexOf(this.getOptId(q, oi)) !== -1
|
|
|
},
|
|
},
|
|
|
toggleOpt(qi, oi, q) {
|
|
toggleOpt(qi, oi, q) {
|
|
|
|
|
+ var optId = this.getOptId(q, oi)
|
|
|
var isMulti = q.multi !== false
|
|
var isMulti = q.multi !== false
|
|
|
if (!this.answers[qi]) {
|
|
if (!this.answers[qi]) {
|
|
|
this.answers[qi] = []
|
|
this.answers[qi] = []
|
|
|
}
|
|
}
|
|
|
var arr = this.answers[qi]
|
|
var arr = this.answers[qi]
|
|
|
- var idx = arr.indexOf(oi)
|
|
|
|
|
|
|
+ var idx = arr.indexOf(optId)
|
|
|
if (idx !== -1) {
|
|
if (idx !== -1) {
|
|
|
arr.splice(idx, 1)
|
|
arr.splice(idx, 1)
|
|
|
} else {
|
|
} else {
|
|
|
if (isMulti) {
|
|
if (isMulti) {
|
|
|
- arr.push(oi)
|
|
|
|
|
|
|
+ arr.push(optId)
|
|
|
} else {
|
|
} else {
|
|
|
- this.answers[qi] = [oi]
|
|
|
|
|
|
|
+ this.answers[qi] = [optId]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
this.$forceUpdate()
|
|
this.$forceUpdate()
|
|
@@ -79,30 +86,15 @@ export default {
|
|
|
var self = this
|
|
var self = this
|
|
|
self.loading = true
|
|
self.loading = true
|
|
|
uni.showLoading({ title: '加载中...', mask: true })
|
|
uni.showLoading({ title: '加载中...', mask: true })
|
|
|
- // 从模板ID加载问卷,或通过问题域获取模板
|
|
|
|
|
- var api = require('../../utils/api.js')
|
|
|
|
|
- // 尝试加载模板列表找到匹配的
|
|
|
|
|
- var getSurveyTemplates = api.getSurveyTemplateList || api.getActiveTemplates
|
|
|
|
|
- if (getSurveyTemplates && self.templateId) {
|
|
|
|
|
- getSurveyTemplates().then(function(res) {
|
|
|
|
|
|
|
+ // 优先按问题域 code 拉取问卷(后端未绑定模板时返回内置默认问卷)
|
|
|
|
|
+ if (self.code) {
|
|
|
|
|
+ getProblemSurveyQuestions(self.code).then(function(res) {
|
|
|
uni.hideLoading()
|
|
uni.hideLoading()
|
|
|
self.loading = false
|
|
self.loading = false
|
|
|
- var list = res && res.data
|
|
|
|
|
- if (Array.isArray(list)) {
|
|
|
|
|
- var found = null
|
|
|
|
|
- for (var i = 0; i < list.length; i++) {
|
|
|
|
|
- var item = list[i]
|
|
|
|
|
- if (item.id == self.templateId || item.id === self.templateId) {
|
|
|
|
|
- found = item
|
|
|
|
|
- break
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if (found && found.questionsJson) {
|
|
|
|
|
- var parsed = typeof found.questionsJson === 'string' ? JSON.parse(found.questionsJson) : found.questionsJson
|
|
|
|
|
- self.questions = Array.isArray(parsed) ? parsed : []
|
|
|
|
|
- } else {
|
|
|
|
|
- self.questions = self.getFallbackQuestions()
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ var data = res && res.data
|
|
|
|
|
+ if (data && Array.isArray(data.questions) && data.questions.length > 0) {
|
|
|
|
|
+ self.questions = data.questions
|
|
|
|
|
+ if (data.templateId) self.templateId = data.templateId
|
|
|
} else {
|
|
} else {
|
|
|
self.questions = self.getFallbackQuestions()
|
|
self.questions = self.getFallbackQuestions()
|
|
|
}
|
|
}
|
|
@@ -119,8 +111,8 @@ export default {
|
|
|
},
|
|
},
|
|
|
getFallbackQuestions() {
|
|
getFallbackQuestions() {
|
|
|
return [
|
|
return [
|
|
|
- { text: '请简单描述你的情况', options: [{ text: '了解中' }, { text: '已有初步了解' }], multi: false },
|
|
|
|
|
- { text: '你希望获得什么帮助?', options: [{ text: '了解方案' }, { text: '购买产品' }, { text: '咨询专家' }], multi: true }
|
|
|
|
|
|
|
+ { id: 'q1', text: '请简单描述你的情况', multi: false, options: [{ id: 'o1', text: '了解中' }, { id: 'o2', text: '已有初步了解' }] },
|
|
|
|
|
+ { id: 'q2', text: '你希望获得什么帮助?', multi: true, options: [{ id: 'o1', text: '了解方案' }, { id: 'o2', text: '购买产品' }, { id: 'o3', text: '咨询专家' }] }
|
|
|
]
|
|
]
|
|
|
},
|
|
},
|
|
|
submitSurvey() {
|
|
submitSurvey() {
|
|
@@ -141,28 +133,22 @@ export default {
|
|
|
self.submitting = true
|
|
self.submitting = true
|
|
|
uni.showLoading({ title: '提交中...', mask: true })
|
|
uni.showLoading({ title: '提交中...', mask: true })
|
|
|
|
|
|
|
|
|
|
+ // 统一契约: [{questionId, optionIds}]
|
|
|
var answerList = []
|
|
var answerList = []
|
|
|
for (var qi = 0; qi < this.questions.length; qi++) {
|
|
for (var qi = 0; qi < this.questions.length; qi++) {
|
|
|
var q = this.questions[qi]
|
|
var q = this.questions[qi]
|
|
|
var selected = this.answers[qi] || []
|
|
var selected = this.answers[qi] || []
|
|
|
if (selected.length > 0) {
|
|
if (selected.length > 0) {
|
|
|
- var texts = []
|
|
|
|
|
- for (var si = 0; si < selected.length; si++) {
|
|
|
|
|
- var opt = q.options[selected[si]]
|
|
|
|
|
- if (opt) {
|
|
|
|
|
- texts.push(opt.text)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
answerList.push({
|
|
answerList.push({
|
|
|
- questionText: q.text,
|
|
|
|
|
- optionTexts: texts
|
|
|
|
|
|
|
+ questionId: q.id != null ? q.id : ('q' + (qi + 1)),
|
|
|
|
|
+ optionIds: selected
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
submitProblemSurvey({
|
|
submitProblemSurvey({
|
|
|
problemDomainCode: self.code,
|
|
problemDomainCode: self.code,
|
|
|
- templateId: self.templateId || undefined,
|
|
|
|
|
|
|
+ surveyTemplateId: self.templateId || undefined,
|
|
|
answers: answerList
|
|
answers: answerList
|
|
|
}).then(function(res) {
|
|
}).then(function(res) {
|
|
|
uni.hideLoading()
|
|
uni.hideLoading()
|