提交 12afe8c7 authored 作者: wangyizheng's avatar wangyizheng

更新案例pdf的预览问题

上级 bd971193
<template> <template>
<div>
<div> <div>
<el-card class="box-card">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>特征管理</el-breadcrumb-item>
</el-breadcrumb>
</el-card>
</div>
<div>
<el-card class="box-card">
<div> <div>
<el-card class="box-card"> <el-input
<el-breadcrumb separator-class="el-icon-arrow-right"> placeholder="请输入案例名称"
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item> prefix-icon="el-icon-search"
<el-breadcrumb-item>特征管理</el-breadcrumb-item> v-model="searchCaseName"
</el-breadcrumb> size="mini"
</el-card> style="width: 30%"
>
</el-input>
<el-button size="mini" icon="el-icon-search" @click="list({ name: searchCaseName, page: 1, limit: limit })">搜 索</el-button>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="refresh">刷 新</el-button>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="drawer = true">创建特征</el-button>
</div> </div>
<div> </el-card>
<el-card class="box-card"> </div>
<div> <div>
<el-input <el-card class="box-card">
placeholder="请输入案例名称" <el-table
prefix-icon="el-icon-search" :data="tableData"
v-model="searchCaseName" border
size="mini" stripe
style="width: 30%" size="mini"
> style="width: 100%">
</el-input> <el-table-column fixed prop="id" label="ID" width="150px">
<el-button size="mini" icon="el-icon-search" @click="list({ name: searchCaseName, page: 1, limit: limit })">搜 索</el-button> </el-table-column>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="refresh">刷 新</el-button> <el-table-column width="150px" label="案例名称">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="drawer = true">创建特征</el-button> <template slot-scope="scope">
</div> <span>{{ scope.row.case.name }}</span>
</el-card> </template>
</el-table-column>
<el-table-column width="150px" label="特征选项配置">
<template slot-scope="scope">
<el-popover
placement="right"
width="500"
trigger="click">
<el-card :body-style="{ padding: '0px' }">
<div style="padding: 14px;" v-for="(option, optionIndex) in scope.row.options" :key="'option-' + optionIndex">
<div>
<span><strong>特征选项名称:</strong></span><span>{{ option.name }}</span>
</div>
<div class="bottom clearfix">
<span><strong>特征选项配置</strong></span>
<div v-for="(option1, optionIndex1) in option.options" :key="'option1-' + optionIndex1">
<span><el-tag effect="plain" type="" size="mini">{{ option1.option }}</el-tag></span>
<span>{{ option1.option_name }}, 分数:{{ option1.score}}, </span>
<span>
答案:
<el-icon v-if="option1.answer" class="el-icon-check"></el-icon>
<el-icon v-else class="el-icon-close"></el-icon>
,
</span>
<span>
触及红线:
<el-icon v-if="option1.warning" class="el-icon-check"></el-icon>
<el-icon v-else class="el-icon-close"></el-icon>
</span>
<br/>
</div>
</div>
<el-divider v-if="optionIndex < scope.row.options.length - 1" content-position="right"></el-divider>
</div>
</el-card>
<el-button slot="reference" size="mini">查看配置</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column width="150px" label="择算分规则">
<template slot-scope="scope">
<el-popover
placement="right"
width="500"
trigger="click">
<el-card :body-style="{ padding: '0px' }">
<div style="padding: 14px;" v-for="(rule, ruleIndex) in scope.row.rules" :key="'rule-' + ruleIndex">
<div>
<span><strong>分数范围:</strong></span>
<span>{{ rule.min }} ~ {{ rule.max }}</span>
</div>
<div>
<span><strong>得分:</strong></span>
<span>{{ rule.score }}</span>
</div>
<el-divider v-if="ruleIndex < scope.row.rules.length - 1" content-position="right"></el-divider>
</div>
</el-card>
<el-button slot="reference" size="mini">查看择算分规则</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column width="150px" label="风险等级规则">
<template slot-scope="scope">
<el-popover
placement="right"
width="500"
trigger="click">
<el-card :body-style="{ padding: '0px' }">
<div style="padding: 14px;" v-for="(level, levelIndex) in scope.row.levels" :key="'level-' + levelIndex">
<div>
<span><strong>分数范围:</strong></span>
<span>{{ level.min }} ~ {{ level.max }}</span>
</div>
<div>
<span><strong>风险等级规则:</strong></span>
<span><el-tag size="mini" type="" effect="plain">{{ getLevel(level.level) }}</el-tag></span>
</div>
<el-divider v-if="levelIndex < scope.row.levels.length - 1" content-position="right"></el-divider>
</div>
</el-card>
<el-button slot="reference" size="mini">查看风险等级规则</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作">
<template slot-scope="scope">
<el-select size="mini" :value="opera" @change="operation" placeholder="请选择">
<el-option :value="{ tag: 'detail', row: scope.row }" label="详情"></el-option>
<el-option :value="{ tag: 'edit', row: scope.row }" label="编辑"></el-option>
<el-option :value="{ tag: 'delete', row: scope.row }" label="删除"></el-option>
</el-select>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 50, 100]"
:page-size="limit"
layout="total, sizes, prev, pager, next, jumper"
:total="totalPage">
</el-pagination>
</div> </div>
<div> </el-card>
<el-card class="box-card"> </div>
<el-table <div>
:data="tableData" <el-drawer
border title="创建特征"
stripe :visible.sync="drawer"
size="mini" direction="rtl"
style="width: 100%"> :append-to-body="true"
<el-table-column fixed prop="id" label="ID" width="150px"> :withHeader="true"
</el-table-column> :before-close="handleClose"
<el-table-column width="150px" label="案例名称"> ref="drawer"
<template slot-scope="scope"> size="70%">
<span>{{ scope.row.case.name }}</span> <div class="demo-drawer__content">
</template> <el-form :model="addForm" size="mini">
</el-table-column> <el-form-item label="案例" :label-width="formLabelWidth">
<el-table-column width="150px" label="特征选项配置"> <el-select
<template slot-scope="scope"> v-model="addForm.case2_id"
<el-popover filterable
placement="right" remote
width="500" reserve-keyword
trigger="click"> placeholder="请输入案例名称"
<el-card :body-style="{ padding: '0px' }"> :remote-method="remoteMethod"
<div style="padding: 14px;" v-for="(option, optionIndex) in scope.row.options" :key="'option-' + optionIndex"> :loading="caseLoading">
<div> <el-option
<span><strong>特征选项名称:</strong></span><span>{{ option.name }}</span> v-for="casesItem in cases"
</div> :key="casesItem.value"
<div class="bottom clearfix"> :label="casesItem.name"
<span><strong>特征选项配置</strong></span> :value="casesItem.id">
<div v-for="(option1, optionIndex1) in option.options" :key="'option1-' + optionIndex1"> </el-option>
<span><el-tag effect="plain" type="" size="mini">{{ option1.option }}</el-tag></span> </el-select>
<span>{{ option1.option_name }}, 分数:{{ option1.score}}, </span> </el-form-item>
<span> <el-form-item>
答案: <el-divider content-position="left">特征选项配置</el-divider>
<el-icon v-if="option1.answer" class="el-icon-check"></el-icon> </el-form-item>
<el-icon v-else class="el-icon-close"></el-icon> <div v-for="(option, optionIndex) in addForm.options" :key="'options-' + optionIndex" style="margin-top: 3%">
, <div style="margin-left: 15%">
</span> <i class="el-icon-circle-plus-outline" @click="addOptions(optionIndex)">添加</i>
<span> <i class="el-icon-remove-outline" @click="removeOptions(optionIndex)">删除</i>
触及红线: </div>
<el-icon v-if="option1.warning" class="el-icon-check"></el-icon> <div style="margin-left: 15%">
<el-icon v-else class="el-icon-close"></el-icon> <span>
</span> <strong>选项名称:</strong>
<br/> <el-input size="mini" v-model="option.name" placeholder="请输入选项名称" style="width: 50%"></el-input>
</div> </span>
</div> </div>
<el-divider v-if="optionIndex < scope.row.options.length - 1" content-position="right"></el-divider> <div style="margin-left: 15%">
</div> <span><strong>选项配置:</strong></span>
</el-card> </div>
<el-button slot="reference" size="mini">查看配置</el-button> <div style="margin-left: 15%; margin-top: 2%" v-for="(childOption, childOptionIndex) in option.options" :key="'childOption-' + childOptionIndex">
</el-popover> <el-card class="box-card">
</template> <div>
</el-table-column> <span>
<el-table-column width="150px" label="择算分规则"> <el-tag size="mini" effect="plain">{{ childOption.option }}</el-tag>
<template slot-scope="scope"> <el-input size="mini" v-model="childOption.option_name" placeholder="请输入选项内容" style="width: 50%"></el-input>
<el-popover </span>
placement="right" <i class="el-icon-circle-plus-outline" @click="addChildOptions(optionIndex, childOptionIndex)"></i>
width="500" <i class="el-icon-remove-outline" @click="removeChildOptions(optionIndex, childOptionIndex)"></i>
trigger="click"> </div>
<el-card :body-style="{ padding: '0px' }"> <div style="margin-top: 2%">
<div style="padding: 14px;" v-for="(rule, ruleIndex) in scope.row.rules" :key="'rule-' + ruleIndex"> <span>分值:
<div> <el-input size="mini" v-model="childOption.score" placeholder="分值" style="width: 30%"></el-input>
<span><strong>分数范围:</strong></span> </span>
<span>{{ rule.min }} ~ {{ rule.max }}</span> </div>
</div> <div style="margin-top: 2%">
<div> <span>是否正确:
<span><strong>得分:</strong></span> <el-radio size="mini" v-model="childOption.answer" :label="0"></el-radio>
<span>{{ rule.score }}</span> <el-radio size="mini" v-model="childOption.answer" :label="1"></el-radio>
</div> </span>
<el-divider v-if="ruleIndex < scope.row.rules.length - 1" content-position="right"></el-divider> </div>
</div> <div style="margin-top: 2%">
</el-card> <span>是否触及红线:
<el-button slot="reference" size="mini">查看择算分规则</el-button> <el-radio size="mini" v-model="childOption.warning" :label="0"></el-radio>
</el-popover> <el-radio size="mini" v-model="childOption.warning" :label="1"></el-radio>
</template> </span>
</el-table-column> </div>
<el-table-column width="150px" label="择算分规则"> </el-card>
<template slot-scope="scope"> </div>
<el-popover </div>
placement="right" <el-form-item>
width="500" <el-divider content-position="left">择算分规则配置</el-divider>
trigger="click"> </el-form-item>
<el-card :body-style="{ padding: '0px' }"> <div v-for="(rule, ruleIndex) in addForm.rules" :key="'rules-' + ruleIndex" style="margin-top: 2%">
<div style="padding: 14px;" v-for="(rule, ruleIndex) in scope.row.rules" :key="'rule-' + ruleIndex"> <i style="margin-left: 15%" class="el-icon-circle-plus-outline" @click="addRules(ruleIndex)">添加</i>
<div> <i class="el-icon-remove-outline" @click="removeRules(ruleIndex)">删除</i>
<span><strong>分数范围:</strong></span> <el-card class="box-card" style="margin-left: 10%; margin-top: 2%">
<span>{{ rule.min }} ~ {{ rule.max }}</span> <div style="margin-top: 2%">
</div> <span>最小分区间:
<div> <el-input size="mini" v-model="rule.min" placeholder="最小分" style="width: 10%"></el-input>
<span><strong>得分:</strong></span> </span>
<span>{{ rule.score }}</span> <span style="margin-left: 2%">最大分区间:
</div> <el-input size="mini" v-model="rule.max" placeholder="最小分" style="width: 10%"></el-input>
<el-divider v-if="ruleIndex < scope.row.rules.length - 1" content-position="right"></el-divider> </span>
</div> <span style="margin-left: 2%">择算分:
</el-card> <el-input size="mini" v-model="rule.score" placeholder="择算分" style="width: 10%"></el-input>
<el-button slot="reference" size="mini">查看择算分规则</el-button> </span>
</el-popover> </div>
</template> </el-card>
</el-table-column> </div>
<el-table-column width="150px" label="风险等级规则"> <el-form-item>
<template slot-scope="scope"> <el-divider content-position="left">风险等级规则配置</el-divider>
<el-popover </el-form-item>
placement="right" <div v-for="(level, levelIndex) in addForm.levels" :key="'levels-' + levelIndex" style="margin-top: 2%">
width="500" <i style="margin-left: 15%" class="el-icon-circle-plus-outline" @click="addLevels(levelIndex)">添加</i>
trigger="click"> <i class="el-icon-remove-outline" @click="removeLevels(levelIndex)">删除</i>
<el-card :body-style="{ padding: '0px' }"> <el-card class="box-card" style="margin-left: 10%; margin-top: 2%">
<div style="padding: 14px;" v-for="(level, levelIndex) in scope.row.levels" :key="'level-' + levelIndex"> <div style="margin-top: 2%">
<div> <span>最小分区间:
<span><strong>分数范围:</strong></span> <el-input size="mini" v-model="level.min" placeholder="最小分" style="width: 20%"></el-input>
<span>{{ level.min }} ~ {{ level.max }}</span> </span>
</div> <span style="margin-left: 2%">最大分区间:
<div> <el-input size="mini" v-model="level.max" placeholder="最小分" style="width: 20%"></el-input>
<span><strong>风险等级规则:</strong></span> </span>
<span><el-tag size="mini" type="" effect="plain">{{ getLevel(level.level) }}</el-tag></span>
</div>
<el-divider v-if="levelIndex < scope.row.levels.length - 1" content-position="right"></el-divider>
</div>
</el-card>
<el-button slot="reference" size="mini">查看风险等级规则</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作">
<template slot-scope="scope">
<el-select size="mini" :value="opera" @change="operation" placeholder="请选择">
<el-option :value="{ tag: 'detail', row: scope.row }" label="详情"></el-option>
<el-option :value="{ tag: 'edit', row: scope.row }" label="编辑"></el-option>
<el-option :value="{ tag: 'delete', row: scope.row }" label="删除"></el-option>
</el-select>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 50, 100]"
:page-size="limit"
layout="total, sizes, prev, pager, next, jumper"
:total="totalPage">
</el-pagination>
</div> </div>
</el-card> <div style="margin-top: 2%">
<span>风险等级:
<el-select size="mini" v-model="level.level" placeholder="请选择风险等级等级">
<el-option label="低风险" :value="1"></el-option>
<el-option label="中风险" :value="2"></el-option>
<el-option label="高风险" :value="3"></el-option>
</el-select>
</span>
</div>
</el-card>
</div>
<el-form-item>
<el-divider content-position="left"></el-divider>
</el-form-item>
<el-form-item>
<div class="demo-drawer__footer" style="margin-left: 60%">
<el-button @click="cancelForm">取 消</el-button>
<el-button type="primary" @click="$refs.drawer.closeDrawer()" :loading="loading">{{ loading ? '提交中 ...' : '确 定' }}</el-button>
</div>
</el-form-item>
</el-form>
</div> </div>
</el-drawer>
</div> </div>
</div>
</template> </template>
<script> <script>
import * as characteristicsApi from '@/api/characteristics2' import * as characteristicsApi from '@/api/characteristics2'
import * as casesApi from '@/api/cases2'
export default { export default {
name: 'index', name: 'index',
data() { data() {
...@@ -189,13 +302,79 @@ export default { ...@@ -189,13 +302,79 @@ export default {
{ level: 1, content: '低风险' }, { level: 1, content: '低风险' },
{ level: 2, content: '中风险' }, { level: 2, content: '中风险' },
{ level: 3, content: '高风险' } { level: 3, content: '高风险' }
] ],
loading: false,
formLabelWidth: '100px',
caseLoading: false,
cases: [],
caseData: [],
getKey: 0,
getIndex: 0,
AZkey: [],
addForm: {
case2_id: '',
options: [
{
name: '',
options: [
{
option: 'A',
option_name: '',
answer: 0,
score: 0,
warning: 0
}
]
}
],
rules: [
{
min: 0,
max: 10,
score: 0
}
],
levels: [
{
min: 0,
max: 10,
level: 1
}
]
}
} }
}, },
mounted() { mounted() {
this.list({ page: this.currentPage, limit: this.limit }) this.list({ page: this.currentPage, limit: this.limit })
this.caseList({ page: 1, limit: 10 })
this.AZkey = this.A_Z()
}, },
methods: { methods: {
A_Z() {
const result = []
for (let i = 0; i < 26; i++) {
result.push(String.fromCharCode(65 + i))
}
return result
},
setKey(arr) {
arr.map((item, index) => {
item.option = this.AZkey[index]
})
},
caseList(params = {}) {
this.caseLoading = true
casesApi.case2s(params).then(res => {
if (res.code === 0) {
this.cases = res.data.data
this.caseLoading = false
return true
} else {
this.$message.error(res.message)
return false
}
})
},
handleSizeChange(val) { handleSizeChange(val) {
this.list({ page: this.currentPage, limit: val }) this.list({ page: this.currentPage, limit: val })
}, },
...@@ -253,11 +432,112 @@ export default { ...@@ -253,11 +432,112 @@ export default {
} }
} }
return detail return detail
},
cancelForm() {
this.loading = false
this.drawer = false
clearTimeout(this.timer)
},
handleClose(done) {
if (this.loading) {
return
}
this.$confirm('确定要提交表单吗?')
.then(_ => {
this.loading = true
// 提交表单
console.log(this.addForm)
characteristicsApi.createCharacteristic2(this.addForm).then(res => {
if (res.code === 0) {
this.list({ page: 1, limit: this.limit })
this.caseList({ page: 1, limit: 10 })
this.AZkey = this.A_Z()
this.$message.success(res.message)
return true
} else {
this.$message.error(res.message)
return false
}
})
this.timer = setTimeout(() => {
done()
// 动画关闭需要一定的时间
setTimeout(() => {
this.loading = false
}, 400)
}, 2000)
})
.catch(_ => {})
},
remoteMethod(query) {
this.caseList({ name: query, page: 1, limit: 10 })
},
getInitAddFormOptions() {
return {
name: '',
options: [
{
option: 'A',
option_name: '',
answer: 0,
score: 0,
warning: 0
}
]
}
},
addOptions(optionIndex) {
this.addForm.options.push(this.getInitAddFormOptions())
},
removeOptions(optionIndex) {
if (this.addForm.options.length > 1) {
this.addForm.options.splice(optionIndex, 1)
}
},
addChildOptions(optionIndex, childOptionIndex) {
if (this.addForm.options[optionIndex].options.length >= 26) {
this.$message.warning('最多输入26项')
return false
}
this.getKey = this.addForm.options[optionIndex].options[this.addForm.options[optionIndex].options.length - 1].option
this.getIndex = this.AZkey.findIndex(item => { return item === this.getKey })
this.addForm.options[optionIndex].options.push({
option: this.AZkey[this.getIndex + 1],
option_name: '',
answer: 0,
score: 0,
warning: 0
})
},
removeChildOptions(optionIndex, childOptionIndex) {
if (this.addForm.options[optionIndex].options.length > 1) {
this.addForm.options[optionIndex].options.splice(childOptionIndex, 1)
this.setKey(this.addForm.options[optionIndex].options)
}
},
addRules(ruleIndex) {
this.addForm.rules.push({ min: 0, max: 10, score: 0 })
},
removeRules(ruleIndex) {
if (this.addForm.rules.length > 1) {
this.addForm.rules.splice(ruleIndex, 1)
}
},
addLevels(levelIndex) {
this.addForm.levels.push({ min: 0, max: 10, level: 1 })
},
removeLevels(levelIndex) {
if (this.addForm.levels.length > 1) {
this.addForm.levels.splice(levelIndex, 1)
}
} }
} }
} }
</script> </script>
<style scoped> <style>
.el-drawer {
overflow: auto;
}
</style> </style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论