Commit dce56a75 authored by hanshaozhuang's avatar hanshaozhuang

Merge remote-tracking branch 'origin/develop' into dev-hanshaozhuang

parents 20545427 f69ffa7e
...@@ -29,6 +29,7 @@ module.exports = { ...@@ -29,6 +29,7 @@ module.exports = {
"vue/multiline-html-element-content-newline":"off", "vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"], "vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off", "vue/no-v-html": "off",
"vue/no-v-for-template-key": "off",
'accessor-pairs': 2, 'accessor-pairs': 2,
'arrow-spacing': [2, { 'arrow-spacing': [2, {
'before': true, 'before': true,
......
...@@ -17,6 +17,14 @@ export function reviewTaskDetail(data) { ...@@ -17,6 +17,14 @@ export function reviewTaskDetail(data) {
}) })
} }
//确认细则变更
export function reviewDetailsConfirm(data) {
return request({
url: '/review/task/inbox/confirm',
method: 'post',
data
})
}
/** /**
* 细则提交 * 细则提交
* @param {*} data * @param {*} data
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
@import './btn.scss'; @import './btn.scss';
@import './process.scss'; @import './process.scss';
@import url(//at.alicdn.com/t/c/font_4370984_m7nz5mfgt6.css); @import url(//at.alicdn.com/t/c/font_4370984_hp4hi2sk2a6.css);
body { body {
height: 100%; height: 100%;
......
...@@ -25,3 +25,69 @@ ...@@ -25,3 +25,69 @@
margin-bottom: 50px; margin-bottom: 50px;
/* 调整按钮距离底部的距离 */ /* 调整按钮距离底部的距离 */
} }
/* 任务编号,名称,单位样式 */
.task {
margin-top: 20px;
margin-bottom: 40px;
.task-label {
font-weight: bold;
color: rgb(153, 153, 153);
font-size: 18px;
}
.task-content {
color: rgb(153, 153, 153);
font-size: 18px;
}
}
.standard-box {
display: flex;
justify-content: flex-start;
align-items: center;
.standard {
color: #2b85e4;
margin: 0 10px;
}
}
.message-list {
display: flex;
flex-wrap: wrap;
display: -webkit-flex; /* Safari */
padding: 1.5rem 4rem 1rem 4rem;
.message-box {
flex: 1;
display: flex;
//
align-items: center;
justify-content: flex-start;
.icon {
font-size: 60px;
}
.message-detail {
display: flex;
margin-left: 10px;
align-items: flex-start;
justify-content: flex-start;
flex-flow: column;
}
}
}
.app-container {
padding: 20px;
}
.custom-card {
::v-deep.el-card__header {
background-color: #f9f9f9;
}
}
.back-btn {
margin-left: 10px;
float: right;
}
.main-content-style {
padding: 0rem 2rem 0rem 2rem;
}
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="350px" height="30px" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="M 12 0 C 12 0 8.99999999999999 0.128571428571429 8.99999999999999 0.128571428571429 C 8.99999999999999 0.128571428571429 0 15 0 15 C 0 15 8.99999999999999 29.8714285714286 8.99999999999999 29.8714285714286 C 8.99999999999999 29.8714285714286 12 30 12 30 C 12 30 350 30 350 30 C 350 30 350 0 350 0 C 350 0 12 0 12 0 Z " fill-rule="nonzero" fill="#fec03d" stroke="none" />
</g>
</svg>
\ No newline at end of file
<template>
<div
class="el-collapse-item"
:class="{ 'is-active': isActive, 'is-disabled': disabled }"
>
<div
role="tab"
:aria-expanded="isActive"
:aria-controls="`el-collapse-content-${id}`"
:aria-describedby="`el-collapse-content-${id}`"
>
<div
class="el-collapse-item__header"
@click="handleHeaderClick"
role="button"
:id="`el-collapse-head-${id}`"
:tabindex="disabled ? undefined : 0"
@keyup.space.enter.stop="handleEnterClick"
:class="{
focusing: focusing,
'is-active': isActive
}"
@focus="handleFocus"
@blur="focusing = false"
>
<i
class="iconfont"
:class="isActive ? 'icon-xiangxiazhankai-xianxingyuankuang' : 'icon-xiangshangshouqi-xianxingyuankuang'"
>
</i>
<slot name="title"></slot>
</div>
</div>
<collapse-transition>
<div
class="el-collapse-item__wrap"
v-show="isActive"
role="tabpanel"
:aria-hidden="!isActive"
:aria-labelledby="`el-collapse-head-${id}`"
:id="`el-collapse-content-${id}`"
>
<div class="el-collapse-item__content">
<slot></slot>
</div>
</div>
</collapse-transition>
</div>
</template>
<script>
import CollapseTransition from './collapse-transition'
import Emitter from './emitter'
export default {
name: 'CollapseItem',
componentName: 'CollapseItem',
mixins: [Emitter],
components: { CollapseTransition },
data() {
return {
contentWrapStyle: {
height: 'auto',
display: 'block'
},
contentHeight: 0,
focusing: false,
isClick: false,
id: Math.floor(Math.random() * 10000)
}
},
inject: ['collapse'],
props: {
title: String,
name: {
type: [String, Number],
default() {
return this._uid
}
},
disabled: Boolean
},
computed: {
isActive() {
return this.collapse.activeNames.indexOf(this.name) > -1
}
},
methods: {
handleFocus() {
setTimeout(() => {
if (!this.isClick) {
this.focusing = true
} else {
this.isClick = false
}
}, 50)
},
handleHeaderClick() {
if (this.disabled) return
this.dispatch('Collapse', 'item-click', this)
this.focusing = false
this.isClick = true
},
handleEnterClick() {
this.dispatch('Collapse', 'item-click', this)
}
}
}
</script>
<style scoped>
.el-collapse-item__header{
background-color: #f0f7ff !important;
padding: 0 15px !important;
}
.el-collapse-item__content{
padding-left: 40px !important;
}
</style>
/* istanbul ignore next */
function addClass(el, cls) {
if (!el) return;
var curClass = el.className;
var classes = (cls || '').split(' ');
for (var i = 0, j = classes.length; i < j; i++) {
var clsName = classes[i];
if (!clsName) continue;
if (el.classList) {
el.classList.add(clsName);
} else if (!hasClass(el, clsName)) {
curClass += ' ' + clsName;
}
}
if (!el.classList) {
el.setAttribute('class', curClass);
}
};
/* istanbul ignore next */
function removeClass(el, cls) {
if (!el || !cls) return;
var classes = cls.split(' ');
var curClass = ' ' + el.className + ' ';
for (var i = 0, j = classes.length; i < j; i++) {
var clsName = classes[i];
if (!clsName) continue;
if (el.classList) {
el.classList.remove(clsName);
} else if (hasClass(el, clsName)) {
curClass = curClass.replace(' ' + clsName + ' ', ' ');
}
}
if (!el.classList) {
el.setAttribute('class', trim(curClass));
}
};
class Transition {
beforeEnter(el) {
addClass(el, 'collapse-transition');
if (!el.dataset) el.dataset = {};
el.dataset.oldPaddingTop = el.style.paddingTop;
el.dataset.oldPaddingBottom = el.style.paddingBottom;
el.style.height = '0';
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
}
enter(el) {
el.dataset.oldOverflow = el.style.overflow;
if (el.scrollHeight !== 0) {
el.style.height = el.scrollHeight + 'px';
el.style.paddingTop = el.dataset.oldPaddingTop;
el.style.paddingBottom = el.dataset.oldPaddingBottom;
} else {
el.style.height = '';
el.style.paddingTop = el.dataset.oldPaddingTop;
el.style.paddingBottom = el.dataset.oldPaddingBottom;
}
el.style.overflow = 'hidden';
}
afterEnter(el) {
// for safari: remove class then reset height is necessary
removeClass(el, 'collapse-transition');
el.style.height = '';
el.style.overflow = el.dataset.oldOverflow;
}
beforeLeave(el) {
if (!el.dataset) el.dataset = {};
el.dataset.oldPaddingTop = el.style.paddingTop;
el.dataset.oldPaddingBottom = el.style.paddingBottom;
el.dataset.oldOverflow = el.style.overflow;
el.style.height = el.scrollHeight + 'px';
el.style.overflow = 'hidden';
}
leave(el) {
if (el.scrollHeight !== 0) {
// for safari: add class after set height, or it will jump to zero height suddenly, weired
addClass(el, 'collapse-transition');
el.style.height = 0;
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
}
}
afterLeave(el) {
removeClass(el, 'collapse-transition');
el.style.height = '';
el.style.overflow = el.dataset.oldOverflow;
el.style.paddingTop = el.dataset.oldPaddingTop;
el.style.paddingBottom = el.dataset.oldPaddingBottom;
}
}
export default {
name: 'ElCollapseTransition',
functional: true,
render(h, { children }) {
const data = {
on: new Transition()
};
return h('transition', data, children);
}
};
<template>
<div class="el-collapse" role="tablist" aria-multiselectable="true">
<slot></slot>
</div>
</template>
<script>
export default {
name: 'Collapse',
componentName: 'Collapse',
props: {
accordion: Boolean,
value: {
type: [Array, String, Number],
default() {
return [];
}
}
},
data() {
return {
activeNames: [].concat(this.value)
};
},
provide() {
return {
collapse: this
};
},
watch: {
value(value) {
this.activeNames = [].concat(value);
}
},
methods: {
setActiveNames(activeNames) {
activeNames = [].concat(activeNames);
let value = this.accordion ? activeNames[0] : activeNames;
this.activeNames = activeNames;
this.$emit('input', value);
this.$emit('change', value);
},
handleItemClick(item) {
if (this.accordion) {
this.setActiveNames(
(this.activeNames[0] || this.activeNames[0] === 0) &&
this.activeNames[0] === item.name
? '' : item.name
);
} else {
let activeNames = this.activeNames.slice(0);
let index = activeNames.indexOf(item.name);
if (index > -1) {
activeNames.splice(index, 1);
} else {
activeNames.push(item.name);
}
this.setActiveNames(activeNames);
}
}
},
created() {
this.$on('item-click', this.handleItemClick);
}
};
</script>
\ No newline at end of file
function broadcast(componentName, eventName, params) {
this.$children.forEach(child => {
var name = child.$options.componentName;
if (name === componentName) {
child.$emit.apply(child, [eventName].concat(params));
} else {
broadcast.apply(child, [componentName, eventName].concat([params]));
}
});
}
export default {
methods: {
dispatch(componentName, eventName, params) {
var parent = this.$parent || this.$root;
var name = parent.$options.componentName;
while (parent && (!name || name !== componentName)) {
parent = parent.$parent;
if (parent) {
name = parent.$options.componentName;
}
}
if (parent) {
parent.$emit.apply(parent, [eventName].concat(params));
}
},
broadcast(componentName, eventName, params) {
broadcast.call(this, componentName, eventName, params);
}
}
};
<template>
<page-standard>
<el-form
v-show="showSearch"
ref="queryForm"
:model="queryParams"
size="small"
:inline="true"
>
<el-form-item label="检验依据">
<el-select
v-model="queryParams.ask"
clearable
style="width: 100%"
@change="loadData"
>
<el-option
key="1"
value="1"
label="汽车整车信息安全技术要求"
></el-option>
<el-option key="2" value="2" label="xxxxx软件升级要求"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="status" label="任务编号">
<el-input
v-model="queryParams.deptName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item prop="status" label="任务名称">
<el-input
v-model="queryParams.deptName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item prop="status" label="车辆型号">
<el-input
v-model="queryParams.deptName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item prop="status" label="检验项目">
<el-select
v-model="queryParams.taskStatus"
placeholder="请选择"
clearable
>
<el-option
v-for="dict in dict.type.system_task_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
重置
</el-button>
</el-form-item>
</el-form>
<el-card v-for="(item, index) in tableData" :key="index" class="box-card">
<div class="inspection-standard">
检验依据:GB XXXXX《汽车整车信息安全技术要求》
</div>
<div class="card-cell">
<div class="cell-lable">任务编号</div>
<div class="cell-value">
{{ item.taskNo ? item.taskNo : '---' }}
</div>
</div>
<div class="card-cell">
<div class="cell-lable">任务名称</div>
<div class="cell-value">
<el-link
type="primary"
@click="goNext('/task/task-detail?id=' + item.id)"
>
{{ item.taskName ? item.taskName : '---' }}
</el-link>
</div>
</div>
<div class="card-cell">
<div class="cell-lable">车辆型号</div>
<div class="cell-value" :title="item.taskName ? item.taskName : '---'">
{{ item.taskName ? item.taskName : '---' }}
</div>
</div>
<div class="card-cell" style="width: 300px">
<div class="cell-lable">
<i class="el-icon-timer"></i>
任务周期
</div>
<div class="cell-value">
{{
parseTime(item.taskBeginTime) + ' - ' + parseTime(item.taskEndTime)
}}
</div>
</div>
<div class="card-cell">
<div class="cell-lable">任务组长</div>
<div class="cell-value">
<div>
<i class="el-icon-user"></i>
{{ item.leader ? item.leader : '---' }}
</div>
</div>
</div>
<div class="card-cell">
<div class="cell-lable">归档状态</div>
<div v-if="item.costTime === 0" class="cell-value">未归档</div>
<div v-else class="cell-value green">● 已归档</div>
</div>
<div class="card-buttons">
<el-button
v-if="item.reviewStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="
goNext(
'/processing/systemReview/source-record?id=' +
item.systemReviewTaskId
)
"
>体系审查原始记录</el-button
>
<el-button
v-if="item.carReviewStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="
goNext(
'/processing/carReview/source-record?id=' + item.carReviewTaskId
)
"
>车型审查原始记录</el-button
>
<el-button
v-if="item.carTestStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="
goNext(
'/processing/carReview/source-record?id=' + item.carReviewTaskId
)
"
>车型试验原始记录</el-button
>
<el-button
v-if="item.reviewStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="goNext(item.id)"
>检查报告</el-button
>
<el-button
type="success"
plain
size="mini"
@click="goNext('/processing/retention-file?id=' + item.id)"
>企业留档文件</el-button
>
<el-button
type="success"
plain
size="mini"
@click="goNext('/processing/fileLibrary?id=' + item.id)"
>车企文件库</el-button
>
</div>
</el-card>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.page"
:limit.sync="queryParams.size"
@pagination="loadData"
>
</pagination>
</page-standard>
</template>
<script>
import page from '@/mixins/page'
export default {
dicts: ['system_task_status', 'sys_scene_type', 'task_type'],
mixins: [page],
data() {
return {
listUrl: '/task/findFinish',
showSearch: true,
tableData: []
}
},
watch: {},
methods: {
/* 跳转到问卷详情*/
goNext(url) {
this.$router.push({ path: url })
}
}
}
</script>
<style lang="scss" scoped>
.card-cell {
display: flex;
justify-content: center;
align-items: flex-start;
height: 140px;
color: rgb(153 153 153);
flex-direction: column;
flex-wrap: nowrap;
width: 140px;
}
.card-buttons {
width: 380px;
height: 80px;
margin-top: 20px;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
.el-button {
margin: 0px;
margin-bottom: 5px;
margin-right: 5px;
width: 120px;
}
}
.box-card {
margin-bottom: 15px;
font-size: 14px;
position: relative;
height: 150px;
.inspection-standard {
position: absolute;
top: 0px;
left: 0px;
background-image: url('~@/assets/svg/standard.svg');
line-height: 30px;
background-repeat: no-repeat;
color: white;
padding-left: 15px;
}
::v-deep .el-card__body {
display: flex;
justify-content: space-between;
}
::v-deep .el-link.is-underline::after {
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 0;
border-bottom: 1px solid #1890ff;
content: '';
}
.cell-progress {
width: 200px;
}
.cell-lable {
color: #515a6e;
font-size: 13px;
height: 20px;
// margin-bottom: 10px;
}
.cell-value {
display: flex;
flex-flow: column;
align-items: flex-start;
justify-content: center;
min-height: 40px;
}
.cell-value.green {
color: #19be6b;
}
}
</style>
...@@ -11,6 +11,26 @@ ...@@ -11,6 +11,26 @@
</div> </div>
</div> </div>
<div class="main-content"> <div class="main-content">
<el-row :gutter="60" class="task">
<el-col :span="8">
<span class="task-label">任务编号:</span>
<span class="task-content">
{{ model.carReviewTask.taskNo }}
</span>
</el-col>
<el-col :span="8">
<span class="task-label">任务名称:</span>
<span class="task-content">
{{ model.carReviewTask.name }}
</span>
</el-col>
<el-col :span="8">
<span class="task-label">委托单位:</span>
<span class="task-content">
{{ model.carReviewTask.taskInitiatorDep }}
</span>
</el-col>
</el-row>
<div class="prompt-message"> <div class="prompt-message">
<span <span
>问卷填写情况:共{{ model.detailsList.length }}条审查细则,已完成{{ >问卷填写情况:共{{ model.detailsList.length }}条审查细则,已完成{{
...@@ -123,7 +143,11 @@ ...@@ -123,7 +143,11 @@
<span class="del-scene"> (删除) </span> <span class="del-scene"> (删除) </span>
</template> </template>
</div> </div>
<el-button class="confirm-button" type="primary" plain <el-button
class="confirm-button"
type="primary"
plain
@click="confirmDetailChange(taskModel.id)"
>已处理</el-button >已处理</el-button
> >
</div> </div>
...@@ -193,7 +217,8 @@ ...@@ -193,7 +217,8 @@
import { import {
checkTaskDetail, checkTaskDetail,
reviewDetailsSubmit, reviewDetailsSubmit,
carReviewTaskConfirm carReviewTaskConfirm,
reviewDetailsConfirm
} from '@/api/task/task' } from '@/api/task/task'
import sceneView from './components/sceneView.vue' import sceneView from './components/sceneView.vue'
import companyFile from './components/companyFile.vue' import companyFile from './components/companyFile.vue'
...@@ -512,6 +537,9 @@ export default { ...@@ -512,6 +537,9 @@ export default {
path: 'processing/unprocessed-review' path: 'processing/unprocessed-review'
}) })
}) })
},
confirmDetailChange() {
reviewDetailsConfirm({ detailsId: 0, reviewTaskId: 0 })
} }
} }
} }
......
<template> <template>
<page-standard> <page-standard>
<div slot="tab">车企文件库</div> <div slot="tab">车企文件库管理</div>
<el-form ref="queryForm" :model="queryParams" size="small" :inline="true"> <el-form ref="queryForm" :model="queryParams" size="small" :inline="true">
<el-form-item prop="status"> <el-form-item prop="status">
<el-input <el-input
......
<template> <template>
<page-standard> <page-standard>
<div slot="tab">
<el-form <el-form
v-show="showSearch"
ref="queryForm" ref="queryForm"
class="tab-form"
:model="queryParams" :model="queryParams"
size="small" size="small"
:inline="true" :inline="true"
> >
<el-form-item label="对应标准"> <el-form-item label="检验依据">
<el-select <el-select
v-model="queryParams.ask" v-model="queryParams.ask"
clearable clearable
...@@ -23,37 +22,34 @@ ...@@ -23,37 +22,34 @@
<el-option key="2" value="2" label="xxxxx软件升级要求"></el-option> <el-option key="2" value="2" label="xxxxx软件升级要求"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> <el-form-item prop="status" label="任务编号">
</div>
<el-form
v-show="showSearch"
ref="queryForm"
:model="queryParams"
size="small"
:inline="true"
>
<el-form-item prop="status">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
placeholder="输入搜索关键词" placeholder="请输入"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="status"> <el-form-item prop="status" label="任务名称">
<el-date-picker <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
type="daterange" placeholder="请输入"
range-separator="至" clearable
start-placeholder="开始日期" @keyup.enter.native="handleQuery"
end-placeholder="结束日期" />
>
</el-date-picker>
</el-form-item> </el-form-item>
<el-form-item prop="status"> <el-form-item prop="status" label="车辆型号">
<el-input
v-model="queryParams.deptName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item prop="status" label="检验项目">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.taskStatus"
placeholder="请选择任务状态" placeholder="请选择"
clearable clearable
> >
<el-option <el-option
...@@ -78,32 +74,51 @@ ...@@ -78,32 +74,51 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-card v-for="(item, index) in tableData" :key="index" class="box-card"> <el-card v-for="(item, index) in tableData" :key="index" class="box-card">
<div class="card-cell"> <div class="inspection-standard">
<div class="cell-lable"> 检验依据:GB XXXXX《汽车整车信息安全技术要求》
<i class="el-icon-timer"></i>
任务周期
</div> </div>
<div class="card-cell">
<div class="cell-lable">任务编号</div>
<div class="cell-value"> <div class="cell-value">
{{ item.startTime ? item.startTime + '-' + item.startTime : '---' }} {{ item.taskNo ? item.taskNo : '---' }}
</div> </div>
</div> </div>
<div class="card-cell"> <div class="card-cell">
<div class="cell-lable">任务编号</div> <div class="cell-lable">任务名称</div>
<div class="cell-value"> <div class="cell-value">
{{ item.missionNo ? item.missionNo : '---' }} <el-link
type="primary"
@click="goNext('/task/task-detail?id=' + item.id)"
>
{{ item.taskName ? item.taskName : '---' }}
</el-link>
</div> </div>
</div> </div>
<div class="card-cell"> <div class="card-cell">
<div class="cell-lable">任务名称</div> <div class="cell-lable">车辆型号</div>
<div class="cell-value" :title="item.taskName ? item.taskName : '---'">
{{ item.taskName ? item.taskName : '---' }}
</div>
</div>
<div class="card-cell" style="width: 300px">
<div class="cell-lable">
<i class="el-icon-timer"></i>
任务周期
</div>
<div class="cell-value"> <div class="cell-value">
<el-link type="primary">{{ item.tit ? item.tit : '---' }}</el-link> {{
parseTime(item.taskBeginTime) + ' - ' + parseTime(item.taskEndTime)
}}
</div> </div>
</div> </div>
<div class="card-cell"> <div class="card-cell">
<div class="cell-lable">任务组长</div> <div class="cell-lable">任务组长</div>
<div class="cell-value"> <div class="cell-value">
<div>
<i class="el-icon-user"></i> <i class="el-icon-user"></i>
{{ item.owener ? item.owener : '---' }} {{ item.leader ? item.leader : '---' }}
</div>
</div> </div>
</div> </div>
<div class="card-cell"> <div class="card-cell">
...@@ -111,26 +126,66 @@ ...@@ -111,26 +126,66 @@
<div v-if="item.costTime === 0" class="cell-value">未归档</div> <div v-if="item.costTime === 0" class="cell-value">未归档</div>
<div v-else class="cell-value green">● 已归档</div> <div v-else class="cell-value green">● 已归档</div>
</div> </div>
<div class="card-cell"> <div class="card-buttons">
<div class="cell-lable"></div> <el-button
<div class="cell-value"> v-if="item.reviewStatus !== 'NONE'"
<el-button type="success" @click="handleDetail()" type="success"
>查看审查记录</el-button plain
size="mini"
@click="
goNext(
'/processing/systemReview/source-record?id=' +
item.systemReviewTaskId
)
"
>体系审查原始记录</el-button
> >
<el-button type="success" @click="goReport()">查看审查报告</el-button> <el-button
<el-button type="success" @click="handleViewRetentionFile" v-if="item.carReviewStatus !== 'NONE'"
>查看企业留档文件</el-button type="success"
plain
size="mini"
@click="
goNext(
'/processing/carReview/source-record?id=' + item.carReviewTaskId
)
"
>车型审查原始记录</el-button
> >
<el-button type="success" @click="handleViewFileLibrary" <el-button
>查看车企文件库</el-button v-if="item.carTestStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="
goNext(
'/processing/carReview/source-record?id=' + item.carReviewTaskId
)
"
>车型试验原始记录</el-button
> >
<el-button v-if="!isSysReview" type="success" <el-button
>查看车型检验记录</el-button v-if="item.reviewStatus !== 'NONE'"
type="success"
plain
size="mini"
@click="goNext(item.id)"
>检查报告</el-button
> >
<el-button v-if="!isSysReview" type="success" @click="goReport" <el-button
>查看车型评测报告</el-button type="success"
plain
size="mini"
@click="goNext('/processing/retention-file?id=' + item.id)"
>企业留档文件</el-button
>
<el-button
type="success"
plain
size="mini"
@click="goNext('/processing/fileLibrary?id=' + item.id)"
>车企文件库</el-button
> >
</div>
</div> </div>
</el-card> </el-card>
...@@ -151,73 +206,100 @@ export default { ...@@ -151,73 +206,100 @@ export default {
mixins: [page], mixins: [page],
data() { data() {
return { return {
pageType: '1',
listUrl: '/task/findFinish', listUrl: '/task/findFinish',
showSearch: true, showSearch: true,
tableData: [] tableData: []
} }
}, },
computed: {
isSysReview() {
console.log(this.pageType)
return this.pageType === '1'
}
},
watch: {}, watch: {},
methods: { methods: {
/* 跳转到问卷详情*/ /* 跳转到问卷详情*/
handleDetail() { goNext(url) {
this.$router.push({ path: '/processing/review-questionnaire' }) this.$router.push({ path: url })
},
goReport() {
this.$router.push({ path: '/processing/vehicleEvaluation' })
},
handleViewRetentionFile() {
this.$router.push({ path: '/processing/viewRetentionFile' })
},
handleViewFileLibrary() {
this.$router.push({ path: '/processing/viewFileLibrary' })
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.card-cell { .card-cell {
color: rgb(153, 153, 153);
height: 80px;
display: flex; display: flex;
justify-content: center;
align-items: flex-start;
height: 140px;
color: rgb(153 153 153);
flex-direction: column; flex-direction: column;
flex-wrap: nowrap; flex-wrap: nowrap;
align-items: flex-start; width: 140px;
justify-content: space-around; }
.card-buttons {
width: 380px;
height: 80px;
margin-top: 20px;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
.el-button {
margin: 0px;
margin-bottom: 5px;
margin-right: 5px;
width: 120px;
}
} }
.box-card { .box-card {
margin-bottom: 15px; margin-bottom: 15px;
font-size: 14px; font-size: 14px;
position: relative;
height: 150px;
.inspection-standard {
position: absolute;
top: 0px;
left: 0px;
background-image: url('~@/assets/svg/standard.svg');
line-height: 30px;
background-repeat: no-repeat;
color: white;
padding-left: 15px;
}
::v-deep .el-card__body { ::v-deep .el-card__body {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
::v-deep .el-link.is-underline:after {
content: ''; ::v-deep .el-link.is-underline::after {
position: absolute; position: absolute;
left: 0;
right: 0; right: 0;
height: 0;
bottom: 0; bottom: 0;
left: 0;
height: 0;
border-bottom: 1px solid #1890ff; border-bottom: 1px solid #1890ff;
content: '';
} }
.cell-progress { .cell-progress {
width: 200px; width: 200px;
} }
.cell-lable { .cell-lable {
color: #515a6e; color: #515a6e;
font-size: 13px; font-size: 13px;
height: 20px;
// margin-bottom: 10px;
} }
.cell-value { .cell-value {
font-size: 14px; display: flex;
color: #606266; flex-flow: column;
align-items: flex-start;
justify-content: center;
min-height: 40px;
} }
.cell-value.green { .cell-value.green {
color: #19be6b; color: #19be6b;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<el-card class="custom-card"> <el-card class="custom-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>填写检查表单(所属任务:{{ model.systemReviewTask.name }})</span> <span>填写体系审查表单</span>
<div class="back-btn"> <div class="back-btn">
<el-button type="primary" plain @click="handlePreview"> <el-button type="primary" plain @click="handlePreview">
预览表单 预览表单
...@@ -11,7 +11,27 @@ ...@@ -11,7 +11,27 @@
</div> </div>
</div> </div>
<div class="main-content"> <div class="main-content">
<div class="prompt-message"> <el-row :gutter="60" class="task">
<el-col :span="8">
<span class="task-label">任务编号:</span>
<span class="task-content">
{{ model.systemReviewTask.taskNo }}
</span>
</el-col>
<el-col :span="8">
<span class="task-label">任务名称:</span>
<span class="task-content">
{{ model.systemReviewTask.name }}
</span>
</el-col>
<el-col :span="8">
<span class="task-label">委托单位:</span>
<span class="task-content">
{{ model.systemReviewTask.taskInitiatorDep }}
</span>
</el-col>
</el-row>
<div class="prompt-message mt10">
<span <span
>问卷填写情况:共{{ model.detailsList.length }}条审查细则,已完成{{ >问卷填写情况:共{{ model.detailsList.length }}条审查细则,已完成{{
readNumber readNumber
...@@ -515,24 +535,16 @@ export default { ...@@ -515,24 +535,16 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.app-container { .back-btn {
padding: 20px;
.custom-card {
::v-deep.el-card__header {
background-color: #f9f9f9;
}
.back-btn {
margin-left: 10px; margin-left: 10px;
float: right; float: right;
} }
.other-btn { .other-btn {
float: right; float: right;
} }
.main-content { .main-content {
min-height: 550px; min-height: 550px;
.prompt-message { .prompt-message {
...@@ -649,13 +661,11 @@ export default { ...@@ -649,13 +661,11 @@ export default {
} }
} }
} }
} }
.bottom-btn { .bottom-btn {
display: flex; display: flex;
justify-content: center; justify-content: center;
}
}
} }
.label-btn { .label-btn {
......
<template> <template>
<page-standard> <page-standard>
<div slot="tab">
<el-form <el-form
v-show="showSearch"
ref="queryForm" ref="queryForm"
class="tab-form"
:model="queryParams" :model="queryParams"
size="small" size="small"
:inline="true" :inline="true"
> >
<el-form-item label="对应标准"> <el-form-item label="检验依据">
<el-select <el-select
v-model="queryParams.ask" v-model="queryParams.ask"
clearable clearable
...@@ -23,36 +22,34 @@ ...@@ -23,36 +22,34 @@
<el-option key="2" value="2" label="xxxxx软件升级要求"></el-option> <el-option key="2" value="2" label="xxxxx软件升级要求"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> <el-form-item prop="status" label="任务编号">
</div>
<el-form
v-show="showSearch"
ref="queryForm"
:model="queryParams"
size="small"
:inline="true"
>
<el-form-item prop="status">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
placeholder="输入任务编号或名称关键词" placeholder="请输入"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="time"> <el-form-item prop="status" label="任务名称">
<el-date-picker <el-input
v-model="queryParams.taskBeginTime" v-model="queryParams.deptName"
type="datetime" placeholder="请输入"
value-format="yyyy-MM-dd HH:mm:ss" clearable
placeholder="任务开始时间" @keyup.enter.native="handleQuery"
> />
</el-date-picker> </el-form-item>
<el-form-item prop="status" label="车辆型号">
<el-input
v-model="queryParams.deptName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item prop="taskStatus"> <el-form-item prop="status" label="检验项目">
<el-select <el-select
v-model="queryParams.taskStatus" v-model="queryParams.taskStatus"
placeholder="子任务状态" placeholder="请选择"
clearable clearable
> >
<el-option <el-option
...@@ -77,6 +74,10 @@ ...@@ -77,6 +74,10 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-card v-for="(item, index) in tableData" :key="index" class="box-card"> <el-card v-for="(item, index) in tableData" :key="index" class="box-card">
<div class="inspection-standard">
检验依据:GB XXXXX《汽车整车信息安全技术要求》
</div>
<div class="card-cell"> <div class="card-cell">
<div class="cell-lable"> <div class="cell-lable">
<i class="el-icon-timer"></i> <i class="el-icon-timer"></i>
...@@ -94,8 +95,11 @@ ...@@ -94,8 +95,11 @@
</div> </div>
<div class="card-cell"> <div class="card-cell">
<div class="cell-lable">任务名称</div> <div class="cell-lable">任务名称</div>
<div class="cell-value" :title="item.taskName ? item.taskName : '---'"> <div class="cell-value" :title="item.taskName ? item.taskName : '---'">
<el-link type="primary" @click="goNext()">
{{ item.taskName ? item.taskName : '---' }} {{ item.taskName ? item.taskName : '---' }}
</el-link>
</div> </div>
</div> </div>
<div class="card-cell"> <div class="card-cell">
...@@ -290,14 +294,14 @@ ...@@ -290,14 +294,14 @@
title="任务详情" title="任务详情"
@click="goDetail(item.id)" @click="goDetail(item.id)"
></el-button> ></el-button>
<el-button <!-- <el-button
type="warning" type="warning"
icon="el-icon-s-promotion" icon="el-icon-s-promotion"
size="mini" size="mini"
circle circle
title="移交任务" title="移交任务"
@click="openTaskDialog" @click="openTaskDialog"
></el-button> ></el-button> -->
<!-- <el-button <!-- <el-button
type="success" type="success"
icon="el-icon-s-management" icon="el-icon-s-management"
...@@ -407,6 +411,30 @@ export default { ...@@ -407,6 +411,30 @@ export default {
...mapGetters(['userId']) ...mapGetters(['userId'])
}, },
methods: { methods: {
// loadData() {
// this.loading = true
// request({
// url: this.listUrl,
// method: 'post',
// data: this.queryParams
// })
// .then(res => {
// if (res.code === 200) {
// console.log(res.rows)
// res.rows[0].carReviewStatus = 'FINISH'
// res.rows[0].reviewStatus = 'FINISH'
// this.tableData = res.rows
// this.total = res.total
// }
// this.loading = false
// })
// .catch(error => {
// if (error.msg) {
// this.$message.error(error.msg)
// }
// this.loading = false
// })
// },
/** /**
* 企业留档文件 * 企业留档文件
* @param item 对象 * @param item 对象
...@@ -633,13 +661,14 @@ export default { ...@@ -633,13 +661,14 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.card-cell { .card-cell {
display: flex; display: flex;
justify-content: space-around; justify-content: center;
align-items: flex-start; align-items: flex-start;
height: 140px; height: 140px;
color: rgb(153 153 153); color: rgb(153 153 153);
flex-direction: column; flex-direction: column;
flex-wrap: nowrap; flex-wrap: nowrap;
width: 140px; width: 140px;
// padding-top: 30px;
} }
.cell-option { .cell-option {
...@@ -660,6 +689,19 @@ export default { ...@@ -660,6 +689,19 @@ export default {
.box-card { .box-card {
margin-bottom: 15px; margin-bottom: 15px;
font-size: 14px; font-size: 14px;
position: relative;
height: 150px;
.inspection-standard {
position: absolute;
top: 0px;
left: 0px;
background-image: url('~@/assets/svg/standard.svg');
line-height: 30px;
background-repeat: no-repeat;
color: white;
padding-left: 15px;
}
::v-deep .el-card__body { ::v-deep .el-card__body {
display: flex; display: flex;
...@@ -684,14 +726,15 @@ export default { ...@@ -684,14 +726,15 @@ export default {
color: #515a6e; color: #515a6e;
font-size: 13px; font-size: 13px;
height: 20px; height: 20px;
// margin-bottom: 10px;
} }
.cell-value { .cell-value {
height: 80px;
display: flex; display: flex;
flex-flow: column; flex-flow: column;
align-items: flex-start; align-items: flex-start;
justify-content: center; justify-content: center;
min-height: 40px;
} }
.cell-status { .cell-status {
...@@ -701,7 +744,7 @@ export default { ...@@ -701,7 +744,7 @@ export default {
.cell-item { .cell-item {
height: 25px; height: 25px;
margin: 8px 0; margin-top: 8px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: flex-start; align-items: flex-start;
......
...@@ -44,17 +44,17 @@ ...@@ -44,17 +44,17 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb10"> <el-row :gutter="10" class="mb10">
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
v-hasPermi="['setting:scene:add']" <!-- v-hasPermi="['setting:scene:add']"-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
icon="el-icon-plus" <!-- icon="el-icon-plus"-->
size="mini" <!-- size="mini"-->
@click="handleAdd" <!-- @click="handleAdd"-->
>新增</el-button <!-- >新增</el-button-->
> <!-- >-->
</el-col> <!-- </el-col>-->
<right-toolbar <right-toolbar
:show-search.sync="showSearch" :show-search.sync="showSearch"
@queryTable="loadData" @queryTable="loadData"
......
<template>
<el-dialog
:visible.sync="dialogManger.dialogVisible"
:title="modelTitle"
width="1200"
append-to-body
destroy-on-close
:before-close="handleClose"
>
<el-table
v-loading="loading"
style="width: 100%; min-height: 50vh"
border
:scroll-x="'1500px'"
:default-sort="{ prop: 'createTime', order: 'descending' }"
:data="tableData"
>
<el-table-column type="index" width="60" label="序号" align="center">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
prop="section"
label="测试场景"
min-width="200"
align="center"
>
</el-table-column>
<el-table-column
prop="require"
label="测试类型"
min-width="200"
align="center"
>
</el-table-column>
<el-table-column
prop="test"
label="用例编号"
min-width="200"
align="center"
>
</el-table-column>
<el-table-column
prop="test"
label="用例名称"
min-width="200"
align="center"
>
</el-table-column>
</el-table>
</el-dialog>
</template>
<script>
import page from '@/mixins/page'
export default {
mixins: [page],
props: {
dialogManger: {
type: Object,
default: () => {
return {
dialogVisible: false,
source: {}
}
}
}
},
data() {
return {
tableData: []
}
},
computed: {
modelTitle: function () {
return '检验内容'
}
},
created() {},
methods: {
handleClose() {
this.dialogManger.dialogVisible = false
}
}
}
</script>
<style scoped></style>
...@@ -87,14 +87,8 @@ ...@@ -87,14 +87,8 @@
></right-toolbar> ></right-toolbar>
</el-row> </el-row>
<div v-if="refreshTable && Number(queryParams.type) === 1">
{{ '体系审查' }}
</div>
<div v-if="refreshTable && Number(queryParams.type) === 2">
{{ '车型审查' }}
</div>
<el-table <el-table
v-if="refreshTable && Number(queryParams.type) === 3" v-if="refreshTable && Number(queryParams.type) !== 3"
v-loading="loading" v-loading="loading"
style="width: 100%; min-height: 50vh" style="width: 100%; min-height: 50vh"
border border
...@@ -122,24 +116,74 @@ ...@@ -122,24 +116,74 @@
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="test" prop="resultNO"
label="检验结果描述(符合)" label="更新时间"
min-width="200" min-width="200"
align="center" align="center"
> >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="check" label="操作"
label="检验结果描述(不符合)"
min-width="200"
align="left" align="left"
min-width="160"
fixed="right"
class-name="fixed-width"
>
<template slot-scope="scope">
<el-button
v-hasPermi="['setting:standard:update']"
plain
size="mini"
type="text"
@click="handleUpdate(scope.row)"
>检验内容</el-button
>
</template>
</el-table-column>
</el-table>
<el-table
v-if="refreshTable && Number(queryParams.type) === 3"
v-loading="loading"
style="width: 100%; min-height: 50vh"
border
:scroll-x="'1500px'"
:default-sort="{ prop: 'createTime', order: 'descending' }"
:data="tableData"
>
<el-table-column type="index" width="60" label="序号" align="center">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
prop="section"
label="标准章节"
min-width="200"
align="center"
>
</el-table-column>
<el-table-column
prop="require"
label="标准要求"
min-width="200"
align="center"
>
</el-table-column>
<el-table-column
prop="test"
label="标准测试方法"
min-width="200"
align="center"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="resultNO" prop="resultNO"
label="更新时间" label="更新时间"
min-width="200" min-width="200"
align="left" align="center"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
...@@ -158,15 +202,13 @@ ...@@ -158,15 +202,13 @@
plain plain
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit" @click="handleUpdate(3, scope.row)"
@click="handleUpdate(scope.row)" >检验内容</el-button
>修改</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-if="queryParams.type > 1"
v-show="total > 0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.page" :page.sync="queryParams.page"
...@@ -174,13 +216,21 @@ ...@@ -174,13 +216,21 @@
@pagination="loadData" @pagination="loadData"
> >
</pagination> </pagination>
<vehiclemodel-dialog
:dialog-manger="vehicleModelDialogManger"
@close="vehicleModelDialogManger.dialogVisible = false"
>
</vehiclemodel-dialog>
</page-standard-option> </page-standard-option>
</template> </template>
<script> <script>
import page from '@/mixins/page' import page from '@/mixins/page'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import vehicleModelDialog from './components/vehicleModelDialog'
export default { export default {
components: {}, components: {
'vehiclemodel-dialog': vehicleModelDialog
},
dicts: ['sys_scene_type'], dicts: ['sys_scene_type'],
mixins: [page], mixins: [page],
data() { data() {
...@@ -196,12 +246,17 @@ export default { ...@@ -196,12 +246,17 @@ export default {
ask: '2', ask: '2',
type: '3' type: '3'
}, },
vehicleModelDialogManger: {
dialogVisible: false,
refreshList: false,
source: {}
},
refreshList: false refreshList: false
} }
}, },
computed: { // computed: {
...mapGetters(['standard']) // ...mapGetters(['standard'])
}, // },
watch: { watch: {
refreshList(val) { refreshList(val) {
if (val) { if (val) {
...@@ -209,15 +264,27 @@ export default { ...@@ -209,15 +264,27 @@ export default {
this.refreshList = false this.refreshList = false
} }
}, },
standard(val) { 'vehicleModelDialogManger.refreshList'(val) {
if (val) { if (val) {
console.log(val) this.loadData()
this.vehicleModelDialogManger.refreshList = false
} }
} }
// standard(val) {
// if (val) {
// console.log(val)
// }
// }
}, },
methods: { methods: {
handlePointUpdate() {}, handleUpdate(id, row) {
handleUpdate() {} switch (id) {
case 3:
this.vehicleModelDialogManger.dialogVisible = true
this.vehicleModelDialogManger.dialogEditId = row
break
}
}
} }
} }
</script> </script>
......
<template> <template>
<page-standard> <page-standard-option>
<div slot="tab"> <div slot="tab">
<el-form <!-- <el-form-->
ref="queryForm" <!-- ref="queryForm"-->
:model="screen" <!-- :model="screen"-->
size="small" <!-- size="small"-->
:inline="true" <!-- :inline="true"-->
class="tab-form" <!-- class="tab-form"-->
> <!-- >-->
<el-form-item label="对应标准"> <!-- <el-form-item label="对应标准">-->
<el-select v-model="screen.ask" clearable style="width: 100%"> <!-- <el-select v-model="screen.ask" clearable style="width: 100%">-->
<el-option <!-- <el-option-->
key="1" <!-- key="1"-->
value="1" <!-- value="1"-->
label="汽车整车信息安全技术要求" <!-- label="汽车整车信息安全技术要求"-->
></el-option> <!-- ></el-option>-->
<el-option key="2" value="2" label="xxxxx软件升级要求"></el-option> <!-- <el-option key="2" value="2" label="xxxxx软件升级要求"></el-option>-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
</el-form> <!-- </el-form>-->
</div> </div>
<el-table <el-table
v-loading="loading" v-loading="loading"
...@@ -31,21 +31,26 @@ ...@@ -31,21 +31,26 @@
<span>{{ scope.$index + 1 }}</span> <span>{{ scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="报告模板分类" sortable prop="type" align="left"> <el-table-column label="模板分类" sortable prop="type" align="left">
</el-table-column> </el-table-column>
<el-table-column label="报告模板编号" sortable prop="num" align="left"> <el-table-column label="模板编号" sortable prop="num" align="left">
</el-table-column> </el-table-column>
<el-table-column label="报告模板名称" sortable prop="name" align="left"> <el-table-column label="模板名称" sortable prop="name" align="left">
</el-table-column> <template slot-scope="scope">
<el-table-column label="报告模板文件" prop="file" align="left"> <span class="span-color" @click="viewTemplate">{{
</el-table-column> scope.row.name
<el-table-column }}</span>
label="检验结论" </template>
prop="conclusion"
width="400"
align="left"
>
</el-table-column> </el-table-column>
<!-- <el-table-column label="报告模板文件" prop="file" align="left">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- label="检验结论"-->
<!-- prop="conclusion"-->
<!-- width="400"-->
<!-- align="left"-->
<!-- >-->
<!-- </el-table-column>-->
<el-table-column label="更新时间" align="left" sortable prop="createTime"> <el-table-column label="更新时间" align="left" sortable prop="createTime">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
...@@ -59,22 +64,21 @@ ...@@ -59,22 +64,21 @@
v-hasPermi="['setting:template:update']" v-hasPermi="['setting:template:update']"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit"
plain plain
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
> >
修改</el-button 上传新文件</el-button
>
<el-button
v-hasPermi="['setting:template:view']"
size="mini"
type="text"
plain
icon="el-icon-arrow-right"
@click="viewTemplate(scope.row)"
>
查看模板</el-button
> >
<!-- <el-button-->
<!-- v-hasPermi="['setting:template:view']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- plain-->
<!-- icon="el-icon-arrow-right"-->
<!-- @click="viewTemplate(scope.row)"-->
<!-- >-->
<!-- 查看模板</el-button-->
<!-- >-->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -120,9 +124,10 @@ ...@@ -120,9 +124,10 @@
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
</page-standard> </page-standard-option>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
export default { export default {
data() { data() {
return { return {
...@@ -173,6 +178,16 @@ export default { ...@@ -173,6 +178,16 @@ export default {
] ]
} }
}, },
computed: {
...mapGetters(['standard'])
},
watch: {
standard(val) {
if (val) {
console.log(val)
}
}
},
methods: { methods: {
getList() {}, getList() {},
handleUpdate(row) { handleUpdate(row) {
...@@ -221,3 +236,10 @@ export default { ...@@ -221,3 +236,10 @@ export default {
} }
} }
</script> </script>
<style scoped>
.span-color {
color: #1890ff;
text-decoration: underline;
cursor: pointer;
}
</style>
<template>
<page-standard>
<el-table
height="calc(100vh - 300px)"
:data="tableData"
border
@cell-mouse-enter="cellMouseEnter"
@cell-mouse-leave="cellMouseLeave"
@cell-click="cellClick"
>
<template v-for="(item, index) in echartsTabled">
<el-table-column
:key="index"
:width="item.width ? item.width : ''"
:fixed="item.width ? true : false"
:label="item.tableNmae"
align="center"
>
<template slot-scope="scope" height="calc(100vh - 350px)">
<span v-if="index === 0">{{ scope.row[item.tableCode] }}</span>
<div
v-if="scope.row[item.tableCode].status === '1'"
class="table-span-style"
@click="viewDetail(scope.row[item.tableCode])"
>
{{ '√' }}
</div>
</template>
</el-table-column>
</template>
</el-table>
</page-standard>
</template>
<script>
export default {
name: 'Index',
data() {
return {
// 表头信息
echartsTabled: [
{
tableNmae: '测试场景\\测试类型',
tableCode: 'test'
},
{
tableNmae: '文件审核',
tableCode: 'file'
},
{
tableNmae: '系统服务漏扫',
tableCode: 'missedScan'
},
{
tableNmae: '固件代码漏扫',
tableCode: 'codeScan'
},
{
tableNmae: '端口扫描',
tableCode: 'portScanning'
}
],
// 表格内容
tableData: [
{
test: 'TBOX-蜂窝以太网接口',
file: {
id: 0,
status: '1'
},
missedScan: {
id: 0,
status: '1'
},
codeScan: {
id: 0,
status: '1'
},
portScanning: {
id: 0,
status: '1'
}
},
{
test: 'WiFi AP接口',
file: {
id: 1,
status: '1'
},
missedScan: {
id: 1,
status: '1'
},
codeScan: {
id: 1,
status: '1'
},
portScanning: {
id: 1,
status: '1'
}
},
{
test: 'WiFi Client接口',
file: {
id: 2,
status: ''
},
missedScan: {
id: 2,
status: ''
},
codeScan: {
id: 2,
status: ''
},
portScanning: {
id: 2,
status: ''
}
},
{
test: '充电以太网接口',
file: {
id: 3,
status: '1'
},
missedScan: {
id: 3,
status: '1'
},
codeScan: {
id: 3,
status: '1'
},
portScanning: {
id: 3,
status: '1'
}
}
],
formConfig: {
isNoHoverColor: ''
}
}
},
methods: {
viewDetail(row) {
console.log('viewDetailrow', row)
},
cellClick(row, column, cell, event) {
// console.log('row', row)
// console.log('column', column)
// console.log('cell', cell)
// console.log('event', event)
},
/** 鼠标悬浮时的操作 */
cellMouseEnter(e, row, cell, column) {
var selrange = document.getElementsByClassName(row.id)
// console.log('row', row)
// console.log('cell', cell)
// console.log('selrange', selrange)
if (this.formConfig.isNoHoverColor) {
cell.style.backgroundColor = ''
for (var i = 0; i < selrange.length; i++) {
selrange[i].style.backgroundColor = ''
}
} else {
cell.style.backgroundColor = '#fec171'
for (var i = 0; i < selrange.length; i++) {
selrange[i].style.backgroundColor = '#fec171'
}
}
},
/** 鼠标离开时的操作 */
cellMouseLeave(e, row, cell) {
var selrange = document.getElementsByClassName(row.id)
for (var i = 0; i < selrange.length; i++) {
selrange[i].style.backgroundColor = '#FFFFFF'
}
}
}
}
</script>
<style scoped>
::v-deep .el-table__body tr:hover > td {
background-color: #fec171 !important;
}
.table-span-style {
text-align: center;
color: #1890ff;
cursor: pointer;
}
</style>
...@@ -421,6 +421,7 @@ export default { ...@@ -421,6 +421,7 @@ export default {
], ],
data() { data() {
return { return {
websock: null,
name: '', name: '',
formType: '1', formType: '1',
showTestScenario: false, showTestScenario: false,
...@@ -561,13 +562,47 @@ export default { ...@@ -561,13 +562,47 @@ export default {
} }
}, },
created() { created() {
this.initWebSocket()
this.getManufacturer() this.getManufacturer()
this.$nextTick(() => { this.$nextTick(() => {
this.leaderTop() this.leaderTop()
this.rowDrop() this.rowDrop()
}) })
}, },
destroyed() {
this.websock.close() // 离开路由之后断开websocket连接
},
methods: { methods: {
initWebSocket() {
// 初始化weosocket
const wsuri = 'ws://49.232.167.247:22032/websocket/1'
this.websock = new WebSocket(wsuri)
this.websock.onmessage = this.websocketonmessage
// this.websock.onopen = this.websocketonopen
this.websock.onerror = this.websocketonerror
this.websock.onclose = this.websocketclose
},
// websocketonopen() {
// // 连接建立之后执行send方法发送数据
// const actions = { test: '12345' }
// this.websocketsend(JSON.stringify(actions))
// },
websocketonerror() {
// 连接建立失败重连
this.initWebSocket()
},
websocketonmessage(e) {
// 数据接收
console.log('后端返回数据', e)
},
// websocketsend(Data) {
// // 数据发送
// this.websock.send(Data)
// },
websocketclose(e) {
// 关闭
console.log('断开连接', e)
},
/** 组长角色置顶逻辑 */ /** 组长角色置顶逻辑 */
leaderTop() { leaderTop() {
if (this.tableData.length !== 0) { if (this.tableData.length !== 0) {
......
This diff is collapsed.
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