<template>
|
<GlobalWindow
|
:title="title"
|
:visible.sync="visible"
|
:confirm-working="isWorking"
|
width="690px"
|
@confirm="confirm"
|
>
|
<el-form :model="form" ref="form" :rules="rules">
|
<el-form-item label="售后建议:" prop="symptomId">
|
<div style="width: 600px;">
|
<el-select v-model="form.symptomId" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in problemLsit"
|
:key="item.id"
|
:label="item.title"
|
:value="item.id"
|
></el-option>
|
</el-select>
|
</div>
|
</el-form-item>
|
<div v-for="(item, index) in symptomOptDTOList" :key="index">
|
<el-form-item :label='`${index}.${item.title}`'>
|
<div v-if="!item.hasChild" class="option-list">
|
<div
|
v-for="(option, i) in item.opts"
|
:key="i"
|
class="option"
|
@click="option.hasSelect=!option.hasSelect"
|
:class="option.hasSelect ? 'option-sel':''"
|
>{{ option.name }}</div>
|
</div>
|
<div v-else>
|
<div v-for="(subItem, j) in item.childQuestionVOS" :key="j" style="display: flex;margin-bottom: 5px;">
|
<div>{{ subItem.title }}:</div>
|
<div class="option-list">
|
<div
|
v-for="(option, i) in subItem.opts"
|
:key="i"
|
class="option"
|
@click="option.hasSelect=!option.hasSelect"
|
:class="option.hasSelect ? 'option-sel':''"
|
>{{ option.name }}</div>
|
</div>
|
</div>
|
</div>
|
</el-form-item>
|
</div>
|
|
</el-form>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import BaseOpera from '@/components/base/BaseOpera'
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
|
import FileLink from '@/components/common/FileLink.vue'
|
import { findAllListByType } from '@/api/business/symptom'
|
import { numRule } from '@/utils/form'
|
export default {
|
name: 'OperaSuggestValueDetailWindow',
|
extends: BaseOpera,
|
components: { GlobalWindow, UploadAvatarImage, FileLink },
|
data () {
|
return {
|
// 表单数据
|
form: {
|
id: null,
|
symptomId: '',
|
aliDiagnosisId: '',
|
},
|
symptomOptDTOList: [],
|
problemLsit: [],
|
// 验证规则
|
rules: {
|
symptomId: [
|
{ required: true, validator: numRule, message: '请选择售后建议', tigger: 'change' }
|
],
|
}
|
}
|
},
|
created () {
|
this.config({
|
api: '/business/symptomMatch',
|
'field.id': 'id'
|
})
|
findAllListByType({type: 1})
|
.then(res => {
|
this.problemLsit = res
|
})
|
|
},
|
methods: {
|
open (title, target, symptomOptDTOList) {
|
this.title = title
|
this.visible = true
|
this.symptomOptDTOList = JSON.parse(JSON.stringify(symptomOptDTOList))
|
// 新建
|
if (target == null) {
|
this.$nextTick(() => {
|
this.$refs.form.resetFields()
|
this.form[this.configData['field.id']] = null
|
})
|
return
|
}
|
// 编辑
|
this.$nextTick(() => {
|
for (const key in this.form) {
|
this.form[key] = target[key]
|
}
|
this.symptomOptDTOList = target.symptomQuestionVO
|
this.symptomOptDTOList.forEach(item => {
|
item.symptomOpt = item.symptomOpt||[]
|
item.opts = item.opts||[]
|
if (item.hasChild) {
|
item.childQuestionVOS.forEach(element => {
|
console.log(element);
|
element.opts && element.opts.forEach(e => {
|
e.hasSelect = element.symptomOpt.indexOf(e.id) != -1
|
})
|
})
|
} else {
|
item.opts.forEach(e => {
|
e.hasSelect = item.symptomOpt.indexOf(e.id) != -1
|
})
|
}
|
})
|
})
|
},
|
// 确认新建
|
__confirmCreate () {
|
this.$refs.form.validate((valid) => {
|
// debugger
|
if (!valid) {
|
return
|
}
|
// 调用新建接口
|
this.isWorking = true
|
let symptomOptDTOList = this.setOption()
|
this.api.create({...this.form, symptomOptDTOList, type: 1 })
|
.then(() => {
|
this.visible = false
|
this.$tip.apiSuccess('新建成功')
|
this.$emit('success')
|
})
|
.catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking = false
|
})
|
})
|
},
|
// 确认修改
|
__confirmEdit () {
|
this.$refs.form.validate((valid) => {
|
if (!valid) {
|
return
|
}
|
// 调用新建接口
|
this.isWorking = true
|
let symptomOptDTOList = this.setOption()
|
this.api.updateById({...this.form, symptomOptDTOList, type: 1 })
|
.then(() => {
|
this.visible = false
|
this.$tip.apiSuccess('修改成功')
|
this.$emit('success')
|
})
|
.catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking = false
|
})
|
})
|
},
|
setOption() {
|
let symptomOptDTOList = []
|
this.symptomOptDTOList.forEach(item => {
|
if (item.hasChild) {
|
item.childQuestionVOS.forEach(element => {
|
// element.map(element1 => {
|
let opts = element.opts.filter(a => a.hasSelect)
|
.map(e => e.id)
|
// debugger
|
// if (opts.length) {
|
// }
|
symptomOptDTOList.push(
|
{
|
// id: item.oldId,
|
questionId: element.id,
|
optIds: opts.join(','),
|
}
|
)
|
// })
|
});
|
} else {
|
let opts = item.opts.filter(a => a.hasSelect)
|
.map(e => e.id)
|
// debugger
|
// if (opts.length) {
|
// }
|
symptomOptDTOList.push(
|
{
|
// id: item.oldId,
|
questionId: item.id,
|
optIds: opts.join(',')
|
}
|
)
|
}
|
})
|
return symptomOptDTOList
|
}
|
}
|
}
|
/**
|
*
|
*/
|
</script>
|
|
<style lang="scss" scoped>
|
// @import "@/assets/style/alertstyle.scss";
|
::v-deep .el-input__inner {
|
width: 600px;
|
}
|
::v-deep .el-textarea__inner {
|
width: 600px;
|
}
|
.option-list {
|
display: flex;
|
flex-wrap: wrap;
|
.option {
|
box-sizing: border-box;
|
border: 1px solid #999;
|
min-width: 60px;
|
height: 30px;
|
line-height: 20px;
|
padding: 5px;
|
border-radius: 4px;
|
color: #111;
|
text-align: center;
|
margin-right: 5px;
|
cursor: pointer;
|
}
|
.option-sel {
|
border: 1px solid #216EEE;
|
background-color: #216EEE;
|
color: white;
|
}
|
}
|
</style>
|