Commit 78e23eaf authored by zhang's avatar zhang

(检测内容/实施细则): 测试用例库并入实施细则,逻辑更新。

parent 2f0a1d41
import request from '@/utils/request'
import { method } from 'lodash'
//获取标准库分页
export function getStandardList(data) {
......@@ -16,3 +17,10 @@ export function getReviewStandardList(data){
data
})
}
export function getStandardListNew(){
return request({
url:'/standard/getStandardListNew',
method: 'post'
})
}
\ No newline at end of file
......@@ -34,21 +34,30 @@ empty
</template> -->
<el-tree
ref="tree"
class="tree"
class="tree"
v-loading="loading"
:data="tableData"
:props="defaultProps"
:default-expanded-keys="defaultExpandIds"
:data="tableData"
:props="defaultProps"
:default-expanded-keys="defaultExpends"
node-key="key"
bordered
@node-click="handleNodeClick"
@node-expand="handleNodeExpand"
@node-collapse="handleNodeCollapse"
@node-expand="handleNodeExpand"
@node-collapse="handleNodeCollapse"
>
<span
:class="{ clickChange: node.isCurrent }"
style="
display: flex;
justify-content: center;
align-items: center;
"
slot-scope="{ node, data }"
>
<span :class="{'clickChange':node.isCurrent}" style="display: flex; justify-content:center;align-items: center;" slot-scope="{ node,data }" >
<span >{{data.label}}</span>
<span>{{
data.label || data.type || data.chapter || data.standardNo
}}</span>
</span>
</el-tree>
</ul>
</div>
......@@ -73,9 +82,10 @@ empty
// import request from '@/utils/request'
import { mapGetters } from 'vuex'
import request from '@/utils/request'
import {getReviewStandardList} from '@/api/standard/standard.js'
import { forEach } from 'lodash';
import standard from '../../store/modules/standard';
import { getReviewStandardList } from '@/api/standard/standard.js'
import { forEach } from 'lodash'
import { getStandardListNew } from '@/api/standard/standard.js'
import standard from '../../store/modules/standard'
export default {
name: 'standardOption',
props: {
......@@ -84,223 +94,254 @@ export default {
data() {
return {
//listUrl: '/review/standard/list',
queryParams: {
pageNum: 1,
pageSize: 99,
chapter: '',
standardId: this.$store.getters.standard,
type: 'system'
},
tableData:[],
loading:false,
expandedList:[],
clickChange:false,
tableData: [],
loading: false,
expandedList: [],
clickChange: false,
defaultExpandIds: [],
// reviewTypeList: [ // 类型列表
// {
// label: '体系审查',
// type:'system'
// },
// {
// label: '车型审查',
// type:'car'
// },
// {
// label: '车型试验',
// type:'test'
// }
// ],
defaultProps: { // node格式设置
children: 'children',
label: 'label',
defaultProps: {
// node格式设置
children: 'children',
label: 'label'
// isLeaf: (data, node) => {
// if (node.level === 2 || data.length == 1) {
// return true
// }
// }
},
count:0
},
checkedkeys: [],
defaultExpends: [],
standard: {}
}
},
created() {
this.$store.dispatch('standard/setStandardList')
if (this.standardList.length > 0) {
this.selectStandard(this.standardList[0])
}
this.loadData()
},
computed: {
...mapGetters(['standard', 'standardList'])
...mapGetters(['standardObj'])
},
watch: {
'$store.getters.standard': {
'$store.getters.initStandard': {
handler(newVal, oldVal) {
this.queryParams.standardId = newVal
this.count++
if(this.count<=1){
if (newVal.id != this.standard.id) {
this.loadData()
}
}
},
'$store.getters.standard_type': {
handler(newVal, oldVal) {
this.queryParams.type = newVal
}
},
'$store.getters.standard_chapter':{
handler(newVal, oldVal) {
this.queryParams.chapter = newVal
}
},
deep: true
}
},
methods: {
search() {
this.queryParams.pageNum = 1
this.$store.dispatch('standard/setStandardList', this.queryParams.name)
},
selectStandard(value) {
this.$store.dispatch('standard/setStandard',value)
this.loadData()
},
handleNodeClick(node,data){
if(data.isCurrent){
node.isCurrent = true
}
if(data.isLeaf){
this.queryParams.chapter = node.chapter
this.queryParams.type = node.type
let standard = {
id:node.id,
name:node.label,
type:node.type,
chapter: data.level == 1 ? ' ' : node.label
}
this.$store.dispatch('standard/setStandard', standard)
}
if(data.level == 2){
this.queryParams.type = node.type
let standard = {
id:node.id,
name:node.label,
type:node.type,
chapter: ''
}
this.$store.dispatch('standard/setStandard', standard)
}
handleNodeClick(node, data) {
if (data.isCurrent) {
node.isCurrent = true
}
if (data.isLeaf) {
let standard = {
id: data.data.standardId,
standardNo: data.parent.parent.data.standardNo,
name: data.parent.parent.data.name,
type: data.parent.data.value,
chapter: node.chapter
}
this.$store.dispatch('standard/setStandardObj', standard)
}
if (data.level == 2) {
let standard = {
id: data.parent.data.id,
standardNo: data.parent.data.standardNo,
name: data.parent.data.name,
type: node.value,
chapter: ''
}
this.$store.dispatch('standard/setStandardObj', standard)
}
document.documentElement.scrollTop = 0
//this.$store.dispatch('standard/setStandard', standard)
},
handleNodeExpand(node){
handleNodeExpand(node) {
let flag = false
this.defaultExpandIds.some(item => {
if (item === node.key) { // 判断当前节点是否存在, 存在不做处理
flag = true
return true
}
if (item === node.key) {
// 判断当前节点是否存在, 存在不做处理
flag = true
return true
}
})
if (!flag) { // 不存在则存到数组里
this.defaultExpandIds.push(node.key)
if (!flag) {
// 不存在则存到数组里
this.defaultExpandIds.push(node.key)
}
},
handleNodeCollapse(node) {
// 删除当前关闭的节点
this.defaultExpandIds.some((item, i) => {
if (item === node.key) {
this.defaultExpandIds.splice(i, 1)
}
if (item === node.key) {
this.defaultExpandIds.splice(i, 1)
}
})
this.removeChildrenIds(node) // 这里主要针对多级树状结构,当关闭父节点时,递归删除父节点下的所有子节点
},
},
removeChildrenIds(data) {
const ts = this
if (data.children) {
data.children.forEach(function(item) {
removeChildrenIds(data) {
const ts = this
if (data.children) {
data.children.forEach(function (item) {
const index = ts.defaultExpandIds.indexOf(item.key)
if (index > 0) {
ts.defaultExpandIds.splice(index, 1)
ts.defaultExpandIds.splice(index, 1)
}
ts.removeChildrenIds(item)
})
}
},
async loadData(){
this.loading = true
this.tableData = []
console.log(this.standardList)
for(let i = 0; i < this.standardList.length ; i++ ){
let data = {
standardId: this.standardList[i].id,
standardNo: this.standardList[i].standardNo
}
await getReviewStandardList(data).then(res=>{
if(res.code === 200){
let typeList = res.data.typeList
forEach(typeList,(item,index)=>{
item.isCurrent = false,
item.id = this.standardList[i].id
item.children = item.reviewStandardChapterListResponses
forEach(item.children,(c)=>{
c.label = c.chapter
})
let cache = []
forEach(item.children,(p)=>{// 去重
if(cache.find(c=>c.label == p.label)){
}else{
item.length = 1
cache.push({
label:p.label,
chapter:p.label,
isCurrent:false,
id:this.standardList[i].id,
type:item.type
})
}
})
item.children = cache
switch(item.type){
case 'system':
item.label='体系审查'
break;
case 'car':
item.label='车型审查'
break;
case 'test':
item.label='车型实验'
break;
}
})
let obj = {
id:this.standardList[i].id,
label:this.standardList[i].standardNo,
children:typeList,
isCurrent:false
}
this.tableData.push(obj)
//let chapters = res.rows
// obj.children.forEach(t=>{
// if(t.type == this.queryParams.type){
// t.children = cache
// }
// })
normalizeTreeData(data) {
return data.map(node => {
if (node.typeList) {
node.children = this.normalizeTreeData(node.typeList)
delete node.typeList
}
if (node.reviewStandardChapterListResponses) {
node.children = this.normalizeTreeData(
node.reviewStandardChapterListResponses
)
delete node.reviewStandardChapterListResponses
}
return node
})
},
/**
* 任务:
* 1.chapter去重
* 2.将类型映射位中文可渲染形式
*/
async loadData() {
this.loading = true
// page.push(obj)
// this.tableData = page
// console.log(this.standardList)
// this.loading = false
getStandardListNew().then(res => {
this.tableData = res.data
this.tableData = this.normalizeTreeData(this.tableData)
forEach(this.tableData, (t1, index) => {
t1.key = index + '_' + t1.id
forEach(t1.children, (t2, index) => {
t2.key = index + '_' + t1.id + '_' + t2.type
switch (t2.type) {
case 'system':
t2.type = '体系审查'
t2.value = 'system'
break
case 'car':
t2.type = '车型审查'
t2.value = 'car'
break
case 'test':
t2.type = '车型实验'
t2.value = 'test'
break
}
let cache = []
forEach(t2.children, (p, index) => {
// 去重
if (cache.find(c => c.chapter == p.chapter)) {
} else {
cache.push({
standardId: t1.id,
chapter: p.chapter,
key: index + '_' + t1.id + '_' + t2.type + '_' + p.chapter
})
}
})
t2.children = cache
})
})
this.$nextTick(function () {
this.defaultExpends.push(this.tableData[0].key)
this.$refs.tree.setCurrentKey(this.tableData[0].children[0].key)
let standard = {
id: this.tableData[0].id,
type: this.tableData[0].children[0].value
}
let standardObj = {
id: this.tableData[0].id,
type: this.tableData[0].children[0].value,
name:'',
chapter: '',
standardNo: ''
}
this.$store.dispatch('standard/setInitStandard', standard)
this.$store.dispatch('standard/setStandardObj', standardObj)
this.standard = standard
})
}
this.loading = false
})
//console.log(this.standardList)
// for(let i = 0; i < this.standardList.length ; i++ ){
// let data = {
// standardId: this.standardList[i].id,
// standardNo: this.standardList[i].standardNo
// }
// await getReviewStandardList(data).then(res=>{
// if(res.code === 200){
// let typeList = res.data.typeList
// forEach(typeList,(item,index)=>{
// item.isCurrent = false,
// item.id = this.standardList[i].id
// item.children = item.reviewStandardChapterListResponses
// forEach(item.children,(c)=>{
// c.label = c.chapter
// })
// let cache = []
// forEach(item.children,(p)=>{// 去重
// if(cache.find(c=>c.label == p.label)){
// }else{
// item.length = 1
// cache.push({
// label:p.label,
// chapter:p.label,
// isCurrent:false,
// id:this.standardList[i].id,
// type:item.type
// })
// }
// })
// item.children = cache
// switch(item.type){
// case 'system':
// item.label='体系审查'
// break;
// case 'car':
// item.label='车型审查'
// break;
// case 'test':
// item.label='车型实验'
// break;
// }
// })
// let obj = {
// id:this.standardList[i].id,
// label:this.standardList[i].standardNo,
// children:typeList,
// isCurrent:false
// }
// //this.tableData.push(obj)
// //let chapters = res.rows
// // obj.children.forEach(t=>{
// // if(t.type == this.queryParams.type){
// // t.children = cache
// // }
// // })
// // page.push(obj)
// // this.tableData = page
// // console.log(this.standardList)
// // this.loading = false
// }
// })
// }
this.loading = false
}
}
}
......@@ -363,59 +404,72 @@ export default {
font-weight: bold;
}
.tree {
padding: 10px 10px;
::v-deep .el-tree-node {
// 节点样式
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.tree {
padding: 10px 10px;
::v-deep .el-tree-node{ // 节点样式
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
::v-deep .is-leaf::before{ // 叶子节点箭头样式设置:不显示
opacity: 0;
}
::v-deep .el-tree-node__content { // 节点内容样式设置
width: 100%;
height: 30px;
//display: flex;
//justify-content: space-between;
margin-top: 5px;
color:black;
font-size: 13px;
border-radius: 5px;
}
::v-deep .el-tree-node__content:hover { // 节点内容样式设置
background-color: #f0f7ff;
}
::v-deep .el-tree-node__content .el-tree-node__expand-icon { // 节点箭头样式设置
color: black;
}
::v-deep .el-tree-node__children{ // 子节点样式设置
transition: all 0.5s;
}
::v-deep .el-tree-node__children .el-tree-node__content{// 子节点内容样式设置
width: 200px;
background-color: white;
}
::v-deep .el-tree-node__children .el-tree-node__content:hover{// 子节点内容样式设置
background-color: #f0f7ff;
}
::v-deep .el-tree-node__children .el-tree-node__children .el-tree-node__content .el-tree-node__expand-icon{
opacity: 0;
}
::v-deep .el-tree-label{ // 树中显示标题(label)设置
text-align: center;
font-size: 13px;
font-weight: bold;
}
::v-deep .el-tree-content{ // 树中显示内容(content)设置
font-size: 13px;
}
::v-deep .clickChange{
color:blue;
::v-deep .is-leaf::before {
// 叶子节点箭头样式设置:不显示
opacity: 0;
}
::v-deep .el-tree-node__content {
// 节点内容样式设置
width: 100%;
height: 30px;
//display: flex;
//justify-content: space-between;
margin-top: 5px;
color: black;
font-size: 13px;
border-radius: 5px;
}
::v-deep .el-tree-node__content:hover {
// 节点内容样式设置
background-color: #f0f7ff;
}
::v-deep .el-tree-node__content .el-tree-node__expand-icon {
// 节点箭头样式设置
color: black;
}
::v-deep .el-tree-node__children {
// 子节点样式设置
transition: all 0.5s;
}
::v-deep .el-tree-node__children .el-tree-node__content {
// 子节点内容样式设置
width: 200px;
background-color: white;
}
::v-deep .el-tree-node__children .el-tree-node__content:hover {
// 子节点内容样式设置
background-color: #f0f7ff;
}
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content
.el-tree-node__expand-icon {
opacity: 0;
}
::v-deep .el-tree-label {
// 树中显示标题(label)设置
text-align: center;
font-size: 13px;
font-weight: bold;
}
::v-deep .el-tree-content {
// 树中显示内容(content)设置
font-size: 13px;
}
::v-deep .clickChange {
color: blue;
}
}
}
}
</style>
import standard from "./modules/standard"
const getters = {
sidebar: state => state.app.sidebar,
size: state => state.app.size,
......@@ -21,6 +23,8 @@ const getters = {
standard_type: state => state.standard.standard_type,
standard_chapter: state => state.standard.standard_chapter,
standard_name: state => state.standard.standard_name,
standardObj: state=>state.standard.standardObj,
initStandard: state=>state.standard.initStandard,
standardList: state => state.standard.standardList,
testScenarioList: state => state.testScenario.testScenarioList,
dept: state => state.user.dept
......
......@@ -6,6 +6,17 @@ const standard = {
standard_name: '',
standard_type:'',
standard_chapter:'',
standardObj:{
id:'',
name: '',
type:'',
chapter:'',
standardNo: ''
},
initStandard:{
id:'',
type:'',
},
standardList: []
},
......@@ -24,6 +35,12 @@ const standard = {
},
SET_STANDARDCHAPTER: (state,chapter) => {
state.standard_chapter = chapter
},
SET_STANDARD_OBJ: (state,standardObj)=>{
state.standardObj = standardObj
},
SET_INITSTANDARD: (state,initStandard)=>{
state.initStandard = initStandard
}
},
......@@ -34,6 +51,12 @@ const standard = {
commit('SET_STANDARDTYPE', standard.type)
commit('SET_STANDARDCHAPTER', standard.chapter)
},
setStandardObj({commit},standardObj){
commit('SET_STANDARD_OBJ',standardObj)
},
setInitStandard({commit},initStandard){
commit('SET_INITSTANDARD',initStandard)
},
setStandardList({ commit }, name) {
getStandardList({
keyWord: name ? name : '',
......
......@@ -275,7 +275,6 @@
downPdf(row,name) {
console.log('row', row)
if(name=='name'){
console.log(process.env.VUE_APP_IMAGE_API + row.file)
window.open(process.env.VUE_APP_IMAGE_API + row.file)
}else if(name=='keypointname'){
window.open(process.env.VUE_APP_IMAGE_API + row.keypointFile)
......
<template>
<el-dialog
title="检验内容"
:visible.sync="dialogManger.dialogVisible"
width="60%"
>
<el-form class="form" :model="dialogManger" :inline="true">
<el-form-item class="title">
<span style="width: 500px">标准信息</span>
</el-form-item>
<el-form-item label="标准号" :label-width="formLabelWidth">
<el-input
class="input"
disabled
v-model="dialogManger.source.standard.standardNo"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item label="标准名称" :label-width="formLabelWidth">
<el-input
class="input"
disabled
v-model="dialogManger.source.standard.name"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item label="标准章节" :label-width="formLabelWidth">
<el-input
class="input"
disabled
v-model="dialogManger.source.standard.chapter"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item label="审查类型" :label-width="formLabelWidth">
<el-input
class="input"
disabled
v-model="dialogManger.source.standard.type"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item label="标准要求" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
v-model="dialogManger.source.standard.text"
autocomplete="off"
></el-input>
</el-form-item>
</el-form>
<el-dialog title="检验内容" :visible.sync="dialogManger.dialogVisible" width="60%">
<el-form class="form" :model="dialogManger" :inline="true">
<el-form-item class="title">
<span style="width: 500px;">标准信息</span>
</el-form-item>
<el-form-item label="标准号" :label-width="formLabelWidth">
<el-input class="input" disabled v-model="dialogManger.source.standard.standard.standardNo" autocomplete="off" :title="dialogManger.source.standard.standard.standardNo"></el-input>
</el-form-item>
<el-form-item label="标准名称" :label-width="formLabelWidth">
<el-input class="input" disabled v-model="dialogManger.source.standard.standard.name" autocomplete="off" :title="dialogManger.source.standard.standard.name"></el-input>
</el-form-item>
<el-form-item label="标准章节" :label-width="formLabelWidth">
<el-input class="input" disabled v-model="dialogManger.source.standard.chapter" autocomplete="off" :title="dialogManger.source.standard.chapter"></el-input>
</el-form-item>
<el-form-item label="审查类型" :label-width="formLabelWidth">
<el-input class="input" disabled v-model="dialogManger.source.standard.type" autocomplete="off" :title="dialogManger.source.standard.type"></el-input>
</el-form-item>
<el-form-item label="标准要求" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{minRows:4,maxRows:6}"
type="textarea"
v-model="dialogManger.source.standard.text"
:title="dialogManger.source.standard.text"
autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-form class="form" :model="dialogManger" title="'审查信息'" style="margin-top: 10px;">
<el-form-item class="title">
<span style="width: 500px;">审查信息</span>
</el-form-item>
<el-form-item label="审查要点" :label-width="formLabelWidth">
<el-input class="textarea"
disabled
resize="none"
:autosize="{minRows:1,maxRows:6}"
type="textarea"
v-model="dialogManger.source.judge.content"
autocomplete="off"
:title="dialogManger.source.judge.content">
</el-input>
</el-form-item>
<div v-for="(item,index) in dialogManger.source.judge.reviewDetailsList" >
<el-form-item label="审查细则" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{minRows:1,maxRows:6}"
type="textarea"
v-model="item.text"
autocomplete="off"
:title="item.text">
</el-input>
</el-form-item>
<el-form-item label="关联场景" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{minRows:4,maxRows:6}"
type="textarea"
v-model="item.reviewSceneList"
:title="item.reviewSceneList"
autocomplete="off"></el-input>
</el-form-item>
<el-form
class="form"
:model="dialogManger"
title="'审查信息'"
style="margin-top: 10px"
>
<el-form-item class="title">
<span style="width: 500px">审查信息</span>
</el-form-item>
<el-form-item label="审查要点" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{ minRows: 1, maxRows: 6 }"
type="textarea"
v-model="dialogManger.source.judge.content"
autocomplete="off"
>
</el-input>
</el-form-item>
<div v-for="(item, index) in dialogManger.source.judge.reviewDetailsList">
<el-form-item label="审查细则" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{ minRows: 1, maxRows: 6 }"
type="textarea"
v-model="item.text"
autocomplete="off"
>
</el-input>
</el-form-item>
<el-form-item label="关联场景" :label-width="formLabelWidth">
<el-input
class="textarea"
disabled
resize="none"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
v-model="item.reviewSceneList"
autocomplete="off"
></el-input>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogManger.dialogVisible = false"
>确 定</el-button
>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogManger.dialogVisible = false">确 定</el-button>
</div>
</el-dialog>
</el-dialog>
</template>
<script>
export default {
name:'',
data(){
name: '',
data() {
return {
titleWidth:'500px',
formLabelWidth: '120px'
titleWidth: '500px',
formLabelWidth: '120px'
}
},
props: {
},
props: {
dialogManger: {
type: Object,
default: () => {
return {
dialogVisible: false,
refreshList: false,
source: {},
source: {
standard: {
name: '',
standardNo:'',
chapter: '',
type:'',
text:'',
},
judge:{
content:'',
reviewDetailsList:[]
}
},
dialogEditId: undefined
}
}
}
},
methods:{
cancel(){
this.dialogManger.dialogVisible = false
}
methods: {
cancel() {
this.dialogManger.dialogVisible = false
}
}
}
</script>
<style lang="scss" scoped>
.form .title{
<style lang="scss" scoped>
.form .title {
width: 600px;
margin-right: 50px;
color: blue;
......@@ -118,21 +158,21 @@ data(){
border-left: blue solid 6px;
padding-left: 10px;
}
.form .input{
.form .input {
width: 250px;
}
.form .textarea{
.form .textarea {
width: 630px;
}
::v-deep .el-dialog__body{
height: 70vh;
overflow: auto;
}
.input ::v-deep .el-input__inner {
::v-deep .el-dialog__body {
height: 70vh;
overflow: auto;
}
.input ::v-deep .el-input__inner {
color: black;
}
.textarea ::v-deep .el-textarea__inner {
color: black;
}
</style>
\ No newline at end of file
</style>
......@@ -9,7 +9,7 @@
size="small"
:inline="true"
>
<!-- <el-form-item prop="status">
<!-- <el-form-item prop="status">
<el-input
v-model="queryParams.name"
placeholder="请输入标准名称"
......@@ -17,7 +17,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item> -->
<!-- <el-form-item prop="status">
<!-- <el-form-item prop="status">
<el-select v-model="queryParams.standardId" placeholder="请选择标准号">
<el-option
v-for="item in standardList"
......@@ -37,7 +37,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!--标准要求输入:input-->
<!--标准要求输入:input-->
<el-form-item prop="status">
<el-input
v-model="searchQueryParams.text"
......@@ -60,6 +60,7 @@
type="primary"
icon="el-icon-search"
size="mini"
:disabled=" buttonDisibled"
@click="handleQuery"
>查询</el-button
>
......@@ -68,9 +69,16 @@
type="default"
icon="el-icon-refresh"
size="mini"
:disabled=" buttonDisibled"
@click="reset"
>重置</el-button
>
<el-button
type="text"
:icon=" this.expandAll ? 'el-icon-caret-bottom' : 'el-icon-caret-top' "
@click="onShrinkUnfold"
>{{ this.expandAll ? '收缩' : '展开' }}</el-button
>
</el-form-item>
</el-form>
</div>
......@@ -144,36 +152,47 @@
(5) @node-click: 点击node时执行handleNodeClick函数
-->
<el-tree
ref="tree"
class="tree"
v-loading="loading"
:data="tableData"
:props="defaultProps"
bordered
@node-click="handleNodeClick"
ref="tree"
class="tree"
v-loading="loading"
:data="tableData"
:props="defaultProps"
bordered
@node-click="handleNodeClick"
:default-checked-keys="checkedkeys"
>
<!-- node:节点信息(由defaultProps定义) data: 当前节点包含的数据对象 -->
<span slot-scope="{ node,data }" style="display: flex;width: 1100px;;justify-content: space-between">
<div>
<span class="el-tree-label">{{ node.label | ellipsis }}</span>
<!-- 多个空格 -->
<span v-html="'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'"></span>
<span v-if="data.chapter" class="el-tree-content"> {{ data.chapter+"\u00a0"+data.content | ellipsis }}</span>
<span v-else class="el-tree-content"> {{ data.content | ellipsis }}</span>
</div>
<!-- 当三级树为审查要点时将详情图标向左移动20px -->
<span v-if="data.label == '审查要点' " style="margin-right: 30px;" >
<!-- node:节点信息(由defaultProps定义) data: 当前节点包含的数据对象 -->
<span
slot-scope="{ node, data }"
style="display: flex; width: 1100px; justify-content: space-between"
>
<div>
<span v-if="node.level == 1" class="el-tree-label">标准要求</span>
<span v-else class="el-tree-label">审查要点</span>
<!-- 多个空格 -->
<span
v-html="'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'"
></span>
<span v-if="data.chapter" class="el-tree-content">
{{ (data.chapter + '\u00a0' + data.text) | ellipsis }}</span
>
<span v-else class="el-tree-content">
{{ data.text | ellipsis }}</span
>
</div>
<!-- 当二级树为审查要点时将详情图标向左移动20px -->
<span v-if="node.level == 2" style="margin-right: 30px">
<page-button
v-hasPermi="['setting:standardTerms:content']"
icon="doc-search"
title="检验内容"
@click.native="handleUpdate(data)"
></page-button>
</span>
</span>
v-hasPermi="['setting:standardTerms:content']"
icon="doc-search"
title="检验内容"
@click.native="handleUpdate(data, node)"
></page-button>
</span>
</span>
</el-tree>
<pagination
style="height: 50px;"
style="height: 50px"
v-show="total > 0"
:total="total"
:background="false"
......@@ -222,21 +241,23 @@ import { listInspection } from '../../../api/setting/standardTerms'
import detailModel from './components/detailModel.vue'
import standard from '../../../store/modules/standard'
import { parse } from 'postcss'
import stan from 'highlight.js/lib/languages/stan'
export default {
// 绑定组件
components: {
'vehiclemodel-dialog': vehicleModelDialog,
'document-review-dialog': documentReviewDialog,
'detail-model':detailModel
'detail-model': detailModel
},
dicts: ['sys_scene_type'],
mixins: [page],
data() {
return {
listUrl: '/review/standard/list', // 获取章节数据信息路径
modelData:[], // 储存原始获取的数据
chapterOptions:[], // 储存章节选项
reviewTypeList: [ // 类型列表
modelData: [], // 储存原始获取的数据
chapterOptions: [], // 储存章节选项
reviewTypeList: [
// 类型列表
{
label: '体系审查',
value: 'system'
......@@ -250,83 +271,99 @@ export default {
value: 'test'
}
],
defaultProps: { // node格式设置
children: 'children',
label: 'label',
isLeaf: (data, node) => {
defaultProps: {
// node格式设置
children: 'children',
label: 'label',
isLeaf: (data, node) => {
if (node.level === 2 || data.length == 1) {
return true
}
return true
}
}
},
listNewUrl:'/review/standard/listNew',
},
listNewUrl: '/review/standard/listNew',
showSearch: true, // 是否显示搜索框
tableData: [], // 储存最终处理后的数据信息
queryParams: { // 条件参数,储存用于搜索的条件
chapter: this.$store.getters.standard_chapter,
queryParams: {
// 条件参数,储存用于搜索的条件
chapter: this.$store.getters.standardObj.chapter,
text: '',
name:'',
standardNo:'',
pageNum:1,
pageSize:10,
standardId: this.$store.getters.standard,
type:this.$store.getters.standard_type || 'system'
name: '',
standardNo: '',
pageNum: 1,
pageSize: 10,
standardId: this.$store.getters.standardObj.id || '',
type: this.$store.getters.standardObj.type || ''
},
searchQueryParams:{
chapter:'',
text:''
searchQueryParams: {
chapter: '',
text: ''
},
detailModelManager:{ // 传递参数,储存传递给弹窗的信息
dialogVisible:false, // 弹窗是否显现
detailModelManager: {
// 传递参数,储存传递给弹窗的信息
dialogVisible: false, // 弹窗是否显现
refreshList: false,
source: { // 数据源
judge:{}, // 标准信息
standard:{ // 审查信息
standard:{
standardNo:'4869'
source: {
standard: {
name: '',
standardNo:'',
chapter: '',
type:'',
text:'',
},
judge:{
content:'',
reviewDetailsList:[]
}
}
},
},
dialogEditId: ''
},
vehicleModelDialogManger: {
dialogVisible: false,
refreshList: false,
source: {},
dialogEditId: ''
},
documentReviewDialogManger: {
dialogVisible: false,
refreshList: false,
source: {},
dialogEditId: ''
},
refreshList: false,
count:0
// vehicleModelDialogManger: {
// dialogVisible: false,
// refreshList: false,
// source: {},
// dialogEditId: ''
// },
// documentReviewDialogManger: {
// dialogVisible: false,
// refreshList: false,
// source: {},
// dialogEditId: ''
// },
checkedkeys:[],
buttonDisibled: false,
expandAll:false,
handleClick: null,
refreshList: false
}
},
created () {
this.loadData()
},
watch: {
// 公共组件左侧标准全局变量选中
'$store.getters.standard': {
handler(newVal, oldVal) {
this.queryParams.standardId = newVal
console.log(newVal)
this.loadData()
}
},
'$store.getters.standard_type': {
'$store.getters.standardObj': {
handler(newVal, oldVal) {
this.queryParams.type = newVal
this.loadData()
}
},
'$store.getters.standard_chapter': {
handler(newVal, oldVal) {
this.queryParams.chapter = newVal
this.loadData()
}
if(newVal.id == oldVal.id && newVal.type == oldVal.type && newVal.chapter == oldVal.chapter && newVal.name == oldVal.name){
console.log(true)
}else{
this.queryParams.standardId = newVal.id
this.queryParams.type = newVal.type
this.queryParams.chapter = newVal.chapter
this.queryParams.name = newVal.name
this.loadData()
}
// console.log(newVal)
// if(newVal){
// this.queryParams.chapter = newVal.chapter || '5.1'
// this.queryParams.standardId = newVal.id || ''
// this.queryParams.type = newVal.type || 'system'
// this.queryParams.standardNo = 'GB 44495-2024'
// this.loadData()
// }
},
deep: true
},
refreshList(val) {
if (val) {
......@@ -336,188 +373,237 @@ export default {
},
'vehicleModelDialogManger.refreshList'(val) {
if (val) {
this.loadData()
//this.loadData()
this.vehicleModelDialogManger.refreshList = false
}
}
},
filters: { // 过滤器:当字符串超过64位时,之后的字符用...代替
ellipsis (value) {
filters: {
// 过滤器:当字符串超过64位时,之后的字符用...代替
ellipsis(value) {
if (!value) return ''
if (value.length > 55) {
return value.slice(0, 55) + '...'
if (value.length > 60) {
return value.slice(0, 60) + '...'
}
return value
}
},
computed: { // 获取store储存数据
...mapGetters(['standard', 'standardList','standard_type'])
},
created () { // 进入页面时获取数据
this.loadData()
computed: {
// 获取store储存数据
...mapGetters(['standard', 'standardList', 'standardObj'])
},
methods: {
printNode(node){
printNode(node) {
console.log(node)
},
handleNodeClick(data) {
console.log(data);
},
async loadData() {
console.log(this.queryParams)
this.loading = true
await request({
url: this.listUrl,
method: 'post',
data: this.queryParams
})
.then(async res => {
if (res.code === 200) {
this.modelData = res.rows // 储存原始数据
// res.rows[0].carReviewStatus = 'FINISH'
// res.rows[0].reviewStatus = 'SIGNED'
// res.rows[0].carReviewStatus = 'FINISH'
if(res.rows=='' || !res.rows){
this.tableData = []
this.loading = false
}else{
this.loading = true // 开始执行加载动画
this.tableData = [] // 初始化结果数据容器
let page = [] // 临时结果容器
let tempData = res.rows // 临时数据
// for(let i = 0 ; i < tempData.length ; i++){ // 处理数据,将临时数据的每条数据处理为模板对象,之后放入临时结果容器中
// // 模板对象格式
// let obj = {
// label:tempData[i].chapter,// 章节信息
// content:' ',// 章节内容(当章节下只有一个标准要求时用到)
// length:0,// 章节所包含的标准要求的数量
// children:[] // 章节所包含的具体的标准要求信息
// }
// page.push(obj)
// }
let cache = [] // 去重后结果容器
let tempOptions = [] // 临时章节选项容器
handleNodeClick() {
console.log(123)
},
normalizeTreeData(data){
return data.map(node =>{
if(node.keyPointList){
node.children = this.normalizeTreeData(node.keyPointList)
delete node.keyPointList
}
return node
})
},
async loadData() {
this.loading = true
await request({
url:this.listNewUrl,
method: 'post',
data: this.queryParams
}).then(res=>{
this.tableData = res.rows
this.tableData = this.normalizeTreeData(this.tableData)
this.total = res.total
})
this.loading = false
// await request({
// url: this.listUrl,
// method: 'post',
// data: this.queryParams
// })
// .then(async res => {
// if (res.code === 200) {
// this.modelData = res.rows // 储存原始数据
// console.log(res.rows)
// if(res.rows=='' || !res.rows){
// this.tableData = []
// this.loading = false
// }else{
// this.loading = true // 开始执行加载动画
// this.tableData = [] // 初始化结果数据容器
// let page = [] // 临时结果容器
// let tempData = res.rows // 临时数据
// // for(let i = 0 ; i < tempData.length ; i++){ // 处理数据,将临时数据的每条数据处理为模板对象,之后放入临时结果容器中
// // // 模板对象格式
// // let obj = {
// // label:tempData[i].chapter,// 章节信息
// // content:' ',// 章节内容(当章节下只有一个标准要求时用到)
// // length:0,// 章节所包含的标准要求的数量
// // children:[] // 章节所包含的具体的标准要求信息
// // }
// // page.push(obj)
// // }
// let cache = [] // 去重后结果容器
// let tempOptions = [] // 临时章节选项容器
// if(this.chapterOptions.length < tempOptions.length || this.chapterOptions.length == 0){
// this.chapterOptions = tempOptions
// }
if(this.chapterOptions.length < tempOptions.length || this.chapterOptions.length == 0){
this.chapterOptions = tempOptions
}
// let count = 0
// // 继续加工数据,对page容器中的每条数据pageItem处理
// forEach(tempData,async (tempDataItem)=>{ // 对临时数据tempData中每条数据tempDataItem处理
// // 当pageItem和tempDataItem章节属性匹配时,将tempDataItem数据进行模板化并储存到page容器中
// count++
// let obj = {
// index:count,
// id:tempDataItem.id,
// label:'标准要求',
// chapter:tempDataItem.chapter,
// content:tempDataItem.text,
// children:[]
// }
let count = 0
// 继续加工数据,对page容器中的每条数据pageItem处理
forEach(tempData,async (tempDataItem)=>{ // 对临时数据tempData中每条数据tempDataItem处理
// 当pageItem和tempDataItem章节属性匹配时,将tempDataItem数据进行模板化并储存到page容器中
count++
let obj = {
index:count,
id:tempDataItem.id,
label:'标准要求',
chapter:tempDataItem.chapter,
content:tempDataItem.text,
children:[]
}
// // 异步处理
// await listInspection({id:tempDataItem.id}).then(res=>{// 根据tempDataItem的id搜索详细数据
// if(res.code == 200){
// let temp = res.data
// forEach(temp,(pointItem)=>{
// forEach(pointItem,(pointDeepItem)=>{
// pointDeepItem.label = '审查要点'
// pointDeepItem.content = pointDeepItem.text
// pointDeepItem.quireId = tempDataItem.id
// pointDeepItem.type = tempDataItem.type
// pointDeepItem.name = tempDataItem.name
// pointDeepItem.standardNo = tempDataItem.standardNo
// obj.children.push(pointDeepItem)
// })
// })
// this.loading = false // 加载动画结束
// }
// page.push(obj)
// page = page.sort(function(a,b){
// return a.index - b.index
// })
// })
// 异步处理
await listInspection({id:tempDataItem.id}).then(res=>{// 根据tempDataItem的id搜索详细数据
if(res.code == 200){
let temp = res.data
forEach(temp,(pointItem)=>{
forEach(pointItem,(pointDeepItem)=>{
pointDeepItem.label = '审查要点'
pointDeepItem.content = pointDeepItem.text
pointDeepItem.quireId = tempDataItem.id
pointDeepItem.type = tempDataItem.type
obj.children.push(pointDeepItem)
})
})
this.loading = false // 加载动画结束
}
page.push(obj)
page = page.sort(function(a,b){
return a.index - b.index
})
})
// page=page.sort(function(a,b){
// return a.index - b.index
// })
})
// // page=page.sort(function(a,b){
// // return a.index - b.index
// // })
// })
this.tableData = page // 将临时数据容器赋给结果数据容器
//this.tableData = res.rows
this.total = res.total
}
// this.tableData = page // 将临时数据容器赋给结果数据容器
// console.log(page)
// //this.tableData = res.rows
// this.total = res.total
// }
}
})
.catch(error => {
if (error.msg) {
this.$message.error(error.msg)
}
this.loading = false
})
// }
// })
// .catch(error => {
// if (error.msg) {
// this.$message.error(error.msg)
// }
// this.loading = false
// })
},
reset() {
this.$store.dispatch('standard/setStandard','')
this.searchQueryParams.chapter = ''
this.buttonDisibled = true
setTimeout(()=>{
this.buttonDisibled = false
},2000)
this.searchQueryParams.text = ''
this.searchQueryParams.chapter = ''
this.queryParams.type = this.$store.getters.initStandard.type
this.queryParams.standardId = this.$store.getters.initStandard.id
this.queryParams.text = ''
this.queryParams.chapter = ''
this.queryParams.standard = ''
this.queryParams.testMethod = ''
this.queryParams.name = ''
this.queryParams.standardNo = ''
this.queryParams.type = ''
this.loadData()
},
handleQuery(){
this.$store.dispatch('standard/setStandard','')
this.queryParams.chapter = this.searchQueryParams.chapter
this.queryParams.standard = ''
this.queryParams.testMethod = ''
this.queryParams.name = ''
this.queryParams.standardNo = ''
this.queryParams.type = ''
let standard = {
type:''
}
this.$store.dispatch('standard/setInitStandard', standard)
//this.loadData()
},
handleQuery() {
this.buttonDisibled = true
setTimeout(()=>{
this.buttonDisibled = false
},2000)
this.queryParams.text = this.searchQueryParams.text
this.loadData()
let obj = {
id:this.$store.getters.standardObj.id,
type: this.$store.getters.standardObj.type,
chapter: this.searchQueryParams.chapter
}
this.$store.dispatch('standard/setStandardObj', obj)
},
async onShrinkUnfold() {
this.expandAll = !this.expandAll
this.changeTreeNodeStatus(this.$refs.tree.store.root)
},
handleUpdate(node) { // 查看检验内容 data:标准信息 node:审查信息
let data = this.modelData.find((item)=>item.id === node.quireId) // 获取当前审查信息
let standard = this.standardList.find((item)=>item.id == this.standard)// 获取当前审查信息的standard信息
if(standard){
data.standard = standard
}else{
data.standard = '--'
}
let review = this.reviewTypeList.find((item)=>item.value == node.type)
if(review){
data.type = review.label
}else{
data.type = ''
changeTreeNodeStatus (node) {
node.expanded = this.expandAll
for (let i = 0; i < node.childNodes.length; i++) {
// 改变节点的自身expanded状态
node.expanded = this.expandAll
// 遍历子节点
if (node.childNodes[i].childNodes.length > 0) {
this.changeTreeNodeStatus(node.childNodes[i])
}
}
},
async handleUpdate(node, Ddata) {
// 查看检验内容 data:标准信息 node:审查信息
await request({
url:'/review/standard/getDetailsAll',
method: 'post',
data:{
keypointId: node.id
}
}).then(res=>{
let temp = res.data
let parent = Ddata.parent.data
let standard = {
name: parent.name,
standardNo: parent.standardNo,
chapter: parent.chapter,
type:parent.type == 'system' ? '体系审查' : parent.type == 'car' ? '车型审查' : parent.type == 'test' ? '车型实验' : '' ,
text:parent.text
}
// 获取当前审查信息的类型
node.content = node.content.trim() // 去空格
this.detailModelManager.source.standard = data // 赋值传递弹窗
this.detailModelManager.source.judge = node
// 当点击审查信息时,将审查信息中的关联场景拼接为字符串,如果已经为字符串了则不做更改,当关联场景没有数据时以"--"代替
forEach(node.reviewDetailsList,(detail)=>{
if(typeof detail.reviewSceneList != 'string'){
forEach(temp.reviewDetailsList, detail => {
if (typeof detail.reviewSceneList != 'string') {
let str = ''
forEach(detail.reviewSceneList,(scene)=>{
str = str + scene.text + '\n'
})
if(str=='' || !str){
str = '--'
forEach(detail.reviewSceneList, scene => {
str = str + scene.text + '\n'
})
if (str == '' || !str) {
str = '--'
}
detail.reviewSceneList = str
}
detail.reviewSceneList = str
})
let data={
content:temp.text,
reviewDetailsList: temp.reviewDetailsList
}
// 获取当前审查信息的类型
this.detailModelManager.source.standard = standard // 赋值传递弹窗
this.detailModelManager.source.judge = data
this.detailModelManager.dialogVisible = true
})
//当点击审查信息时,将审查信息中的关联场景拼接为字符串,如果已经为字符串了则不做更改,当关联场景没有数据时以"--"代替
// if (this.queryParams.type === 'test') {
// this.documentReviewDialogManger.dialogVisible = true
// this.documentReviewDialogManger.dialogEditId = row.id
......@@ -528,7 +614,7 @@ export default {
// this.$refs.vehicleModelDialog.init()
// }
// console.log('dialogEditId', this.vehicleModelDialogManger.dialogEditId)
this.detailModelManager.dialogVisible = true
}
// handleQuery(){
// this.$store.dispatch('standard/setStandard', this.standardList.find((item)=>item.id == this.queryParams.standardId))
......@@ -537,7 +623,7 @@ export default {
}
}
</script>
<style scoped lang="scss">
<style scoped lang="scss">
.item-box {
flex: 1;
display: flex;
......@@ -563,48 +649,60 @@ export default {
height: 50px;
}
// el-tree的样式设置
.tree {
.tree {
padding: 10px 20px;
::v-deep .el-tree-node{ // 节点样式
position: relative;
::v-deep .el-tree-node {
// 节点样式
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
::v-deep .is-leaf::before{ // 叶子节点箭头样式设置:不显示
::v-deep .is-leaf::before {
// 叶子节点箭头样式设置:不显示
opacity: 0;
}
::v-deep .el-tree-node__content { // 节点内容样式设置
::v-deep .el-tree-node__content {
// 节点内容样式设置
width: 100%;
height: 40px;
//display: flex;
//justify-content: space-between;
margin-top: 10px;
color:black;
color: black;
font-size: large;
border-radius: 5px;
background-color: #f0f7ff;
}
::v-deep .el-tree-node__content .el-tree-node__expand-icon { // 节点箭头样式设置
::v-deep .el-tree-node__content .el-tree-node__expand-icon {
// 节点箭头样式设置
color: black;
}
::v-deep .el-tree-node__children{ // 子节点样式设置
::v-deep .el-tree-node__children {
// 子节点样式设置
transition: all 0.5s;
}
::v-deep .el-tree-node__children .el-tree-node__content{// 子节点内容样式设置
::v-deep .el-tree-node__children .el-tree-node__content {
// 子节点内容样式设置
height: 30px;
margin: 5px 0;
background-color: white;
}
::v-deep .el-tree-node__children .el-tree-node__children .el-tree-node__content .el-tree-node__expand-icon{
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content
.el-tree-node__expand-icon {
opacity: 0;
}
::v-deep .el-tree-label{ // 树中显示标题(label)设置
::v-deep .el-tree-label {
// 树中显示标题(label)设置
text-align: center;
font-size: 13px;
font-weight: bold;
}
::v-deep .el-tree-content{ // 树中显示内容(content)设置
::v-deep .el-tree-content {
// 树中显示内容(content)设置
font-size: 14px;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment