Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
web
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
中汽测评-信息安全测评系统
web
Commits
b2064b35
Commit
b2064b35
authored
Mar 15, 2024
by
盖献康
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
http://gitlab.91isoft.com:90/car-test/web
into developer/gaixiankang
parents
5001a864
bbf1f10d
Changes
35
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
1383 additions
and
173 deletions
+1383
-173
custom-words.txt
.cspell/custom-words.txt
+1
-0
client.graphql
src/api/graphql/client.graphql
+66
-16
sample.js
src/api/system/sample.js
+8
-0
task.js
src/api/task/task.js
+12
-0
process.scss
src/assets/styles/process.scss
+8
-0
index.vue
src/components/ImageUpload/index.vue
+58
-35
main.js
src/main.js
+4
-0
standardClassification.vue
src/views/echartHome/standardClassification.vue
+76
-0
index.vue
src/views/index.vue
+141
-1
documentReviewDialog.vue
...ase/viewStandardTerms/components/documentReviewDialog.vue
+3
-0
vehicleModelDialog.vue
...nBase/viewStandardTerms/components/vehicleModelDialog.vue
+21
-0
index.vue
src/views/informationBase/viewStandardTerms/index.vue
+1
-1
index.vue
src/views/informationBase/viewUseCaseLibrary/index.vue
+18
-13
login.vue
src/views/login.vue
+1
-0
index.vue
src/views/processing/archivedTask/index.vue
+43
-1
companyFile.vue
...ing/carReview/write-check-form/components/companyFile.vue
+5
-6
index.vue
src/views/processing/carReview/write-check-form/index.vue
+41
-15
index.vue
src/views/processing/carTest/confirmation-test/index.vue
+349
-0
index.vue
src/views/processing/carTest/execution-test-plan/index.vue
+36
-0
index.vue
src/views/processing/carTest/review-form/index.vue
+216
-0
index.vue
src/views/processing/checkFileLibrary/index.vue
+5
-5
index.vue
src/views/processing/processed-review/index.vue
+43
-1
index.vue
src/views/processing/retention-file/index.vue
+17
-4
companyFile.vue
.../systemReview/write-check-form/components/companyFile.vue
+5
-6
index.vue
src/views/processing/systemReview/write-check-form/index.vue
+41
-15
index.vue
src/views/processing/unprocessed-review/index.vue
+13
-5
dialog.vue
src/views/setting/company/components/dialog.vue
+1
-1
index.vue
src/views/setting/sample/index.vue
+52
-12
index.vue
src/views/setting/sample/taskDetails/index.vue
+18
-4
index.vue
src/views/setting/standardTerms/index.vue
+1
-1
index.vue
src/views/setting/testMatrix/index.vue
+2
-1
index.vue
src/views/setting/testMatrix/useCaseDetails/index.vue
+19
-9
index.vue
src/views/setting/useCaseLibrary/index.vue
+12
-12
index.vue
src/views/system/user/index.vue
+2
-2
index.vue
src/views/task/on/index.vue
+44
-7
No files found.
.cspell/custom-words.txt
View file @
b2064b35
...
...
@@ -77,6 +77,7 @@ tsno
tuijian
unmatch
userinfo
varibles
vnode
vnodes
vuedraggable
...
...
src/api/graphql/client.graphql
View file @
b2064b35
query
GetSuiteList
(
$offset
:
Int
=
0
,
$limit
:
Int
=
20
,
$search
:
String
=
""
)
{
suiteList
:
getUserCustomCaseSuiteList
(
fragment
CaseListItem
on
CaseCustomItemRep
{
count
list
:
resultList
{
id
serialNumber
name
description
:
caseDesc
remediation
submitUserName
submitTime
canModify
needDevice
:
isBind
classifyName
operatingSystemName
riskLevelName
testMethodName
}
}
# 查询用例列表
query
GetCaseList
(
$suiteId
:
ID
$offset
:
Int
=
0
$limit
:
Int
=
50
$search
:
String
=
""
)
{
caseList
:
getAllCaseList
(
teamId
:
"team_items;1"
search
:
{
offset
:
{
offset
:
$offset
,
limit
:
$limit
},
searchField
:
"name"
,
search
:
$search
}
suiteId
:
$suiteId
offset
:
{
offset
:
$offset
,
limit
:
$limit
}
search
:
{
retrieveData
:
[{
RetrieveColumn
:
"allName"
,
RetrieveValue
:
$search
}]
sortData
:
[{
SortColumn
:
"serialNumber"
,
SortOrder
:
ASC
}]
}
)
{
count
list
:
resultList
{
id
name
lawType
:
layType
style
descriptionInfo
canModify
caseCount
updateTime
createTime
createUser
createUserId
...
CaseListItem
}
}
fragment
ProjectBasicObject
on
Project
{
id
name
description
status
}
# 新建文件检测项目
mutation
NewFileTestProject
(
$name
:
String
!
$lawId
:
ID
!
$principalUserId
:
ID
!
$systemTypeId
:
ID
!
$systemTypeName
:
String
!
$systemId
:
ID
!
$fileList
:
[
ID
!]!
)
{
projectMutation
:
teamProject
(
id
:
"team_items;1"
)
{
project
:
createProject
(
input
:
{
testMethod
:
File
name
:
$name
lawId
:
$lawId
principalUserId
:
$principalUserId
autoPartsId
:
$systemTypeId
systemId
:
$systemId
systemType
:
$systemTypeName
fileList
:
$fileList
}
)
{
...
ProjectBasicObject
}
}
}
src/api/system/sample.js
View file @
b2064b35
...
...
@@ -66,3 +66,11 @@ export function selectDataStatistics(data){
data
:
data
})
}
export
function
componentSelect
(
data
){
return
request
({
url
:
'/system/enterprise/list'
,
method
:
'post'
,
data
:
data
})
}
src/api/task/task.js
View file @
b2064b35
...
...
@@ -197,3 +197,15 @@ export function getBySubtaskId(data) {
data
})
}
/**
* 下载pdf
*/
export
function
pdfDownload
(
data
)
{
return
request
({
url
:
'/pdf/download'
,
method
:
'post'
,
data
})
}
src/assets/styles/process.scss
View file @
b2064b35
...
...
@@ -709,3 +709,11 @@
width
:
120px
!
important
;
// text-align: center !important;
}
.passed
{
.el-form-item__label
{
margin-left
:
-10px
;
}
}
.el-progress
{
display
:
flex
;
}
src/components/ImageUpload/index.vue
View file @
b2064b35
...
...
@@ -2,6 +2,7 @@
<div
class=
"component-upload-image"
>
<el-upload
multiple
:auto-upload=
"true"
:action=
"uploadImgUrl"
list-type=
"picture-card"
:on-success=
"handleUploadSuccess"
...
...
@@ -42,7 +43,7 @@
<
template
v-if=
"fileSize"
>
且不得超过
{{
fileSize
}}
MB
</
template
>
</div>
<el-dialog
:visible
.
sync=
"dialogVisible"
width=
"800"
append-to-body
>
<el-dialog
:visible
.
sync=
"dialogVisible"
width=
"800"
append-to-body
:close-on-click-modal=
"false"
>
<img
:src=
"dialogImageUrl"
style=
"display: block; max-width: 100%; margin: 0 auto"
...
...
@@ -128,36 +129,45 @@ export default {
methods
:
{
// 上传前loading加载
handleBeforeUpload
(
file
)
{
let
isImg
=
false
if
(
this
.
fileType
.
length
)
{
let
fileExtension
=
''
if
(
file
.
name
.
lastIndexOf
(
'.'
)
>
-
1
)
{
fileExtension
=
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
'.'
)
+
1
)
}
isImg
=
this
.
fileType
.
some
(
type
=>
{
if
(
file
.
type
.
indexOf
(
type
)
>
-
1
)
return
true
if
(
fileExtension
&&
fileExtension
.
indexOf
(
type
)
>
-
1
)
return
true
return
false
})
}
else
{
isImg
=
file
.
type
.
indexOf
(
'image'
)
>
-
1
}
if
(
file
.
name
)
{
const
regex
=
/
[\s
~`!@#$%^&*()
\-
_=+[
\]
{}|;:'",<>
/
?
]
/
const
result
=
regex
.
test
(
file
.
name
)
if
(
result
===
true
)
{
this
.
fileList
=
[]
this
.
$modal
.
msgError
(
'文件名称不正确,请上传不包含特殊字符名称的图片'
)
}
else
if
(
result
===
false
)
{
let
isImg
=
false
if
(
this
.
fileType
.
length
)
{
let
fileExtension
=
''
if
(
file
.
name
.
lastIndexOf
(
'.'
)
>
-
1
)
{
fileExtension
=
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
'.'
)
+
1
)
}
isImg
=
this
.
fileType
.
some
(
type
=>
{
if
(
file
.
type
.
indexOf
(
type
)
>
-
1
)
return
true
if
(
fileExtension
&&
fileExtension
.
indexOf
(
type
)
>
-
1
)
return
true
return
false
})
}
else
{
isImg
=
file
.
type
.
indexOf
(
'image'
)
>
-
1
}
if
(
!
isImg
)
{
this
.
$modal
.
msgError
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
'/'
)}
图片格式文件!`
)
return
false
}
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
if
(
!
isLt
)
{
this
.
$modal
.
msgError
(
`上传图片大小不能超过
${
this
.
fileSize
}
MB!`
)
return
false
if
(
!
isImg
)
{
this
.
$modal
.
msgError
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
'/'
)}
图片格式文件!`
)
return
false
}
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
if
(
!
isLt
)
{
this
.
$modal
.
msgError
(
`上传图片大小不能超过
${
this
.
fileSize
}
MB!`
)
return
false
}
}
this
.
$modal
.
loading
(
'正在上传图片,请稍候...'
)
this
.
number
++
}
}
this
.
$modal
.
loading
(
'正在上传图片,请稍候...'
)
this
.
number
++
},
// 文件个数超出
handleExceed
()
{
...
...
@@ -168,6 +178,7 @@ export default {
if
(
res
.
code
===
200
)
{
// const Image = process.env.VUE_APP_IMAGE_API + res.url
this
.
uploadList
.
push
({
name
:
res
.
originalFilename
,
url
:
res
.
url
})
console
.
log
(
this
.
uploadList
);
this
.
uploadedSuccessfully
()
}
else
{
this
.
number
--
...
...
@@ -247,14 +258,26 @@ export default {
::v-deep
.el-dialog
{
background
:
none
;
width
:
100%
;
box-shadow
:
none
;
}
::v-deep
.el-dialog__headerbtn
{
top
:
8px
!
important
;
background
:
url('../../assets/icons/svg/guanbi.pn
g')
left
no-repeat
;
background-size
:
cover
;
}
//
::v-deep .el-dialog__headerbtn {
//
top: 8px !important;
// background: url('../../assets/icons/svg/guanbi.sv
g') left no-repeat;
//
background-size: cover;
//
}
::v-deep
.el-dialog__headerbtn
i
{
font-size
:
25px
;
visibility
:
hidden
;
font-size
:
35px
;
color
:
white
;
//visibility: hidden;
}
// Dialog悬停样式
::v-deep
.el-dialog__headerbtn
:focus
.el-dialog__close
,
::v-deep
.el-dialog__headerbtn
:hover
.el-dialog__close
{
color
:
white
!
important
;
}
// MessageBox悬停样式
::v-deep
.el-message-box__headerbtn
:focus
.el-message-box__close
,
::v-deep
.el-message-box__headerbtn
:hover
.el-message-box__close
{
color
:
white
!
important
;
}
</
style
>
src/main.js
View file @
b2064b35
...
...
@@ -129,6 +129,10 @@ import VueApollo from 'vue-apollo'
// 全局使用
Vue
.
use
(
VueApollo
);
// 全局导入Echarts
import
*
as
echarts
from
'echarts'
Vue
.
prototype
.
$echarts
=
echarts
// 请求graphql使用的apollo API
const
apolloClient
=
new
ApolloClient
({
// 服务端Url
...
...
src/views/echartHome/standardClassification.vue
0 → 100644
View file @
b2064b35
<
template
>
<div
ref=
"chart"
style=
"width: 100%; height: 300px; display: flex; justify-content: center"
></div>
</
template
>
<
script
>
export
default
{
name
:
'StandardClassification'
,
data
()
{
return
{
chart
:
null
}
},
mounted
()
{
this
.
init
()
},
methods
:
{
init
()
{
// 2.初始化
this
.
chart
=
this
.
$echarts
.
init
(
this
.
$refs
.
chart
)
// 3.配置数据
const
option
=
{
title
:
{
text
:
'标准分类占比'
,
left
:
10
,
top
:
10
,
textStyle
:
{
color
:
'#606266'
,
fontWeight
:
700
,
fontSize
:
16
}
},
legend
:
{
top
:
'bottom'
},
color
:
[
'#F6B24B'
,
'#1A6FD7'
,
'#13BE24'
],
series
:
[
{
name
:
'Nightingale Chart'
,
type
:
'pie'
,
radius
:
[
'30%'
,
'40%'
],
roseType
:
'area'
,
itemStyle
:
{
borderRadius
:
10
},
label
:
{
formatter
:
`{b|{b}}\n\n{d}%`
,
// 自定义lable处展示那些数据及其格式
fontSize
:
14
,
// 字体大小
rich
:
{
b
:
{
color
:
' #606266'
,
fontSize
:
14
}
},
color
:
'inherit'
},
labelLine
:
{
length
:
25
,
// 挨着图例的直线的长度
length2
:
10
// 挨着文字的直线的长度
},
data
:
[
{
value
:
40
,
name
:
'rose 1'
},
{
value
:
38
,
name
:
'rose 2'
},
{
value
:
32
,
name
:
'rose 3'
}
]
}
]
}
// 4.传入数据
this
.
chart
.
setOption
(
option
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/views/index.vue
View file @
b2064b35
<
template
>
<div>
HomePage
</div>
<page-standard>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<div
class=
"cardOne"
>
<div
class=
"left"
>
<ul>
<li
style=
"color: #278ce9"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
支持标准数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #f96f21"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
任务数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #13be24"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
检验员数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #e88069"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
整车样品数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #7f69e8"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
测试类型数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
</ul>
</div>
<div
class=
"right"
>
<ul>
<li
style=
"color: #12cdaa"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
测试用例数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #f9a221"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
检验报告数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #e55868"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
车企数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #278ce9"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
零部件样品数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
<li
style=
"color: #41d1ff"
>
<div
class=
"textLayout"
>
<span
class=
"cardOneTitle"
>
测试场景数量
</span
><span
class=
"cardOneNumber"
>
319
</span>
</div>
</li>
</ul>
</div>
</div>
</el-col>
<el-col
:span=
"5"
>
<div
class=
"cardStyle"
>
<StandardClassification></StandardClassification>
</div>
</el-col>
<el-col
:span=
"6"
>
<div>
3
</div>
</el-col>
<el-col
:span=
"5"
>
<div>
4
</div>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"14"
>
<div>
5
</div>
</el-col>
<el-col
:span=
"10"
>
<el-row>
<el-col
:span=
"24"
>
<div>
6
</div>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"24"
>
<div>
7
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</page-standard>
</
template
>
<
script
>
import
StandardClassification
from
'./echartHome/standardClassification.vue'
export
default
{
name
:
'HomePage'
,
components
:
{
StandardClassification
},
data
()
{
return
{}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.cardStyle
{
border
:
1px
solid
#dcdfe3
;
border-radius
:
4px
;
}
.cardOne
{
height
:
300px
;
display
:
flex
;
justify-content
:
space-between
;
padding
:
20px
30px
;
border
:
1px
solid
#dcdfe3
;
border-radius
:
4px
;
.left
{
}
.right
{
}
}
.cardOneTitle
{
font-size
:
14px
;
font-weight
:
400
;
color
:
#606266
;
}
.cardOneNumber
{
font-size
:
18px
;
font-weight
:
400
;
color
:
#303133
;
}
.textLayout
{
width
:
180px
;
display
:
flex
;
justify-content
:
space-between
;
margin
:
20px
0
;
}
</
style
>
src/views/informationBase/viewStandardTerms/components/documentReviewDialog.vue
View file @
b2064b35
...
...
@@ -94,4 +94,7 @@ export default {
.el-table
{
width
:
auto
;
}
/
deep
/
.el-drawer__header
{
margin-bottom
:
0px
!important
;
}
</
style
>
src/views/informationBase/viewStandardTerms/components/vehicleModelDialog.vue
View file @
b2064b35
...
...
@@ -98,4 +98,25 @@ export default {
.table
{
width
:
auto
;
}
.table
thead
{
background
:
none
;
}
.table
th
{
color
:
#303133
;
font-size
:
14px
;
font-weight
:
700
;
}
.table
td
{
color
:
#606266
;
font-size
:
14px
;
font-weight
:
400
;
}
.custom_title
{
color
:
#303133
!important
;
font-size
:
18px
;
font-weight
:
400
;
}
/
deep
/
.el-drawer__header
{
margin-bottom
:
0px
!important
;
}
</
style
>
src/views/informationBase/viewStandardTerms/index.vue
View file @
b2064b35
...
...
@@ -100,7 +100,7 @@
<
template
slot-scope=
"scope"
>
<div
class=
"button-bar"
>
<page-button
v-hasPermi=
"['setting:standard
:update
']"
v-hasPermi=
"['setting:standard
Terms:content
']"
icon=
"doc-search"
title=
"检验内容"
@
click
.
native=
"handleUpdate(scope.row)"
...
...
src/views/informationBase/viewUseCaseLibrary/index.vue
View file @
b2064b35
...
...
@@ -74,24 +74,29 @@
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"测试场景"
align=
"left"
prop=
"testScenario"
/>
<el-table-column
label=
"测试类型"
align=
"left"
prop=
"testType"
/>
<el-table-column
label=
"测试场景"
align=
"left"
sortable
prop=
"testScenario"
/>
<el-table-column
label=
"测试类型"
align=
"left"
sortable
prop=
"testType"
/>
<el-table-column
label=
"用例编号"
align=
"left"
prop=
"usecaseNo"
/>
<el-table-column
label=
"用例名称"
align=
"left"
prop=
"name"
/>
<el-table-column
label=
"工具"
align=
"left"
prop=
"tools"
/>
<el-table-column
label=
"对应输入"
align=
"left"
prop=
"input"
/>
<el-table-column
label=
"用例描述"
align=
"left"
prop=
"description"
/>
<
el-table-column
label=
"更新人员"
align=
"left"
prop=
"updateBy"
/
>
<
el-table-column
label=
"更新时间"
align=
"center"
prop=
"updateTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
updateTime
,
'{y
}
-{m
}
-{d
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
!-- <el-table-column label="更新人员" align="left" prop="updateBy" />--
>
<
!-- <el-table-column-->
<!-- label="更新时间"-->
<!-- align="center"-->
<!-- prop="updateTime"-->
<!-- width="180"-->
<!-- >--
>
<!-- <template slot-scope="scope">--
>
<!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>--
>
<!-- </template>--
>
<
!-- </el-table-column>--
>
</el-table>
<pagination
v-show=
"total > 0"
...
...
src/views/login.vue
View file @
b2064b35
...
...
@@ -26,6 +26,7 @@
type=
"password"
auto-complete=
"off"
placeholder=
"密码"
maxlength=
"20"
@
keyup
.
enter
.
native=
"handleLogin"
>
<iconpark-icon
slot=
"prefix"
name=
"lock"
size=
"20"
></iconpark-icon>
...
...
src/views/processing/archivedTask/index.vue
View file @
b2064b35
...
...
@@ -185,7 +185,7 @@
type=
"primary"
plain
size=
"mini"
@
click=
"
goNext
(item.id)"
@
click=
"
downloadPdf
(item.id)"
>
检查报告
</el-button
>
<el-button
...
...
@@ -249,6 +249,7 @@
</template>
<
script
>
import
page
from
'@/mixins/page'
import
{
pdfDownload
}
from
'@/api/task/task'
import
{
mapGetters
}
from
'vuex'
export
default
{
dicts
:
[
'sys_scene_type'
,
'task_type'
,
'inspection_item'
],
...
...
@@ -270,6 +271,47 @@ export default {
this
.
$store
.
dispatch
(
'standard/setStandardList'
)
},
methods
:
{
/**
* 检验报告
*/
downloadPdf
(
id
)
{
pdfDownload
({
taskId
:
id
,
type
:
0
}).
then
(
res
=>
{
const
fileUrl
=
process
.
env
.
VUE_APP_IMAGE_API
+
'/vehicle-quality-review-oss/'
+
res
.
data
this
.
download
(
fileUrl
)
})
},
/**
* 下载pdf
*/
download
(
fileUrl
)
{
// 根据pdf文件地址下载
// window.location.href = this.fileUrl
const
xhr
=
new
XMLHttpRequest
()
xhr
.
open
(
'GET'
,
fileUrl
,
true
)
xhr
.
responseType
=
'blob'
xhr
.
onload
=
()
=>
{
if
(
xhr
.
status
===
200
)
{
const
blob
=
new
Blob
([
xhr
.
response
],
{
type
:
'application/pdf'
})
const
url
=
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'a'
)
link
.
href
=
url
link
.
download
=
'检查报告.pdf'
link
.
click
()
URL
.
revokeObjectURL
(
url
)
}
}
xhr
.
send
()
},
/* 跳转到问卷详情*/
goNext
(
url
)
{
this
.
$router
.
push
({
path
:
url
})
...
...
src/views/processing/carReview/write-check-form/components/companyFile.vue
View file @
b2064b35
...
...
@@ -155,6 +155,8 @@ export default {
watch
:
{
fileName
(
newValue
)
{
this
.
model
.
fileName
=
newValue
this
.
model
.
enterpriseName
=
this
.
enterpriseName
this
.
model
.
taskId
=
this
.
$route
.
query
.
taskId
},
'dialogManger.dialogEditId'
(
newValue
)
{
this
.
model
.
fetch
(
...
...
@@ -165,12 +167,6 @@ export default {
)
}
},
mounted
()
{
this
.
model
.
enterpriseName
=
this
.
enterpriseName
},
created
()
{
this
.
model
.
taskId
=
this
.
$route
.
query
.
taskId
},
methods
:
{
handleUpdateFile
(
newValue
)
{
this
.
$emit
(
'fileNameUpdate'
,
newValue
)
...
...
@@ -201,6 +197,9 @@ export default {
})
this
.
$emit
(
'handleSave'
,
res
.
data
)
this
.
$modal
.
msgSuccess
(
'提交文件成功'
)
this
.
$nextTick
(()
=>
{
this
.
$refs
.
fileRef
.
clearValidate
()
})
},
errors
=>
{}
)
...
...
src/views/processing/carReview/write-check-form/index.vue
View file @
b2064b35
...
...
@@ -198,7 +198,7 @@
</div>
</el-form-item>
<el-form-item
class=
"right-content-item"
class=
"right-content-item
passed
"
label=
"审查结果"
prop=
"passed"
>
...
...
@@ -211,23 +211,33 @@
<el-row>
<el-col
:span=
"8"
>
<div>
文件名称
<el-autocomplete
v-model=
"form.fileName"
style=
"width: 100%"
:fetch-suggestions=
"querySearch"
placeholder=
"请输入文件名称"
@
select=
"querySelect"
></el-autocomplete>
<el-form-item
prop=
"fileName"
label-suffix=
" "
label=
"文件名称"
>
<el-autocomplete
v-model=
"form.fileName"
style=
"width: 100%"
:fetch-suggestions=
"querySearch"
placeholder=
"请输入文件名称"
@
select=
"querySelect"
></el-autocomplete>
</el-form-item>
</div>
</el-col>
<el-col
:span=
"8"
:offset=
"1"
>
<div>
章节条目或范围
<el-input
v-model=
"form.catalogue"
placeholder=
"请输入具体章节条目或范围"
/>
<el-form-item
prop=
"catalogue"
label-suffix=
" "
label=
"章节条目或范围"
>
<el-input
v-model=
"form.catalogue"
placeholder=
"请输入具体章节条目或范围"
/>
</el-form-item>
</div>
</el-col>
</el-row>
...
...
@@ -340,7 +350,23 @@ export default {
checked
:
false
,
detailsList
:
[],
rules
:
{
passed
:
[{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}]
passed
:
[
{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}
],
fileName
:
[
{
required
:
true
,
message
:
'请输入文件名称'
,
trigger
:
[
'change'
]
}
],
catalogue
:
[
{
required
:
true
,
message
:
'请输入具体章节条目或范围'
,
trigger
:
'blur'
}
]
},
changeTask
:
[],
changeTaskDetails
:
[],
...
...
src/views/processing/carTest/confirmation-test/index.vue
0 → 100644
View file @
b2064b35
This diff is collapsed.
Click to expand it.
src/views/processing/carTest/execution-test-plan/index.vue
0 → 100644
View file @
b2064b35
<!-- 测试用例详情 -->
<
template
>
<page-standard>
<div
class=
"web-page"
>
<iframe
:src=
"url"
frameborder=
"0"
style=
"width: 100%; height: 100%"
></iframe>
</div>
</page-standard>
</
template
>
<
script
>
import
{
NewFileTestProject
}
from
'@/api/graphql/client.graphql'
export
default
{
name
:
'Index'
,
data
()
{
return
{
id
:
this
.
$route
.
query
,
url
:
''
}
},
mounted
()
{
const
id
=
this
.
$route
.
query
.
id
this
.
url
=
`http://10.12.48.78:8090/car/complianceTestingCenter/projectOverView/project_items;
${
id
}
`
},
methods
:
{}
}
</
script
>
<
style
scoped
>
.web-page
{
height
:
90vh
;
}
</
style
>
src/views/processing/carTest/review-form/index.vue
0 → 100644
View file @
b2064b35
<
template
>
<!--查看试验方案页面-->
<task-standard
v-loading=
"loading"
>
<div
slot=
"header-right"
>
<header-button
icon=
"arrow-left"
class=
"back-btn"
type=
"no-line"
@
click=
"goBack"
>
返回
</header-button>
</div>
<!--2-统计值-->
<div
class=
"main-content-style"
>
<!--任务编号,名称,单位-->
<div
class=
"task"
>
<div
class=
"task-item"
>
<span
class=
"task-label"
>
任务编号:
</span>
<span
class=
"task-content"
>
{{
model
.
systemReviewTask
.
taskNo
}}
</span>
</div>
<div
class=
"task-item"
>
<span
class=
"task-label"
>
任务名称:
</span>
<span
class=
"task-content"
>
{{
task
.
taskName
}}
</span>
</div>
<div
class=
"task-item"
>
<span
class=
"task-label"
>
委托单位:
</span>
<span
class=
"task-content"
>
{{
task
.
entrustedUnit
}}
</span>
</div>
<div
class=
"task-item"
>
<span
class=
"task-label"
>
任务状态:
</span>
<span
class=
"task-content"
>
{{
getDictData
(
dict
.
type
.
task_test_status
,
model
.
systemReviewTask
.
taskStatus
)
}}
</span>
</div>
</div>
<!--查看试验方案列表-->
<div>
<div
class=
"form-review-questionnaire"
>
<!--查看试验方案列表-->
<table
class=
"table"
>
<col
style=
"width: 100px"
/>
<thead>
<tr>
<th>
章节号
</th>
<th>
标准技术要求
</th>
<th>
标准测试方法
</th>
<th>
测试场景
</th>
<th>
测试类型
</th>
<th>
用例编号
</th>
<th>
用例名称
</th>
<th>
工具
</th>
<th>
对应输入
</th>
<th>
测试用例
</th>
</tr>
</thead>
<tbody>
<!-- 循环遍历 keyPointList -->
<template
v-for=
"(i, PointIndex) in tableData.keyPointList"
>
<tr
:key=
"'PointIndex1' + PointIndex"
>
<td
align=
"center"
:rowspan=
"getRows(i)"
>
{{
'7.1.1'
}}
</td>
<td
align=
"center"
:rowspan=
"getRows(i)"
>
{{
i
.
text
}}
</td>
<td
align=
"center"
:rowspan=
"getRows(i)"
>
{{
i
.
text
}}
</td>
</tr>
<!-- 循环遍历 reviewDetailsList -->
<template
v-for=
"(v, reviewDetailIndex) in i.reviewDetailsList"
>
<tr
:key=
"'reviewDetailIndex' + PointIndex + reviewDetailIndex"
>
<td
align=
"center"
>
{{
'测试场景'
}}
</td>
<td
align=
"center"
>
{{
'测试类型'
}}
</td>
<td
align=
"center"
>
{{
'用例编号'
}}
</td>
<td
align=
"center"
>
{{
'用例名称'
}}
</td>
<td
align=
"center"
>
{{
'工具'
}}
</td>
<td
align=
"center"
>
{{
v
.
text
}}
</td>
<td
align=
"center"
>
<template
v-for=
"(a, reviewSceneIndex) in v.reviewSceneList"
>
<div
:key=
"
'reviewSceneIndex' +
PointIndex +
reviewDetailIndex +
reviewSceneIndex
"
>
<span>
{{
reviewSceneIndex
+
1
+
'、'
+
a
.
text
}}
</span>
<br
/>
</div>
</
template
>
</td>
</tr>
</template>
</template>
</tbody>
</table>
</div>
<!--返回按钮-->
<div
class=
"bottom-btn"
>
<footer-button
type=
"default"
icon=
"arrow-left"
@
click=
"$router.go(-1)"
>
返回
</footer-button>
<!-- <el-button type="primary" @click="goToProcessedReview">
确认提交
</el-button> -->
</div>
</div>
</div>
</task-standard>
</template>
<!--js逻辑-->
<
script
>
import
{
getRows
,
getRows2
}
from
'../../../../utils/reviewDetailsTable'
import
routerMixins
from
'@/mixins/router'
import
{
listInspection
}
from
'../../../../api/setting/standardTerms'
export
default
{
name
:
'Index'
,
mixins
:
[
routerMixins
],
dicts
:
[
'task_test_status'
],
data
()
{
return
{
tableData
:
[],
model
:
{
systemReviewTask
:
{},
reviewSceneChangeTasks
:
{},
detailsList
:
[]
},
task
:
{},
taskId
:
''
,
loading
:
false
}
},
mounted
()
{
this
.
init
()
},
methods
:
{
/**
* 获取任务详情
*/
async
getTest
()
{
// this.loading = true
// const res = await reviewTaskDetail({
// taskId: '1767377960098127873'
// })
// this.loading = false
// if (res.code === 200) {
// await this.getTaskDetail()
// this.model = res.data
// } else {
// this.$modal.msgError(res.msg)
// }
},
// async getTaskDetail() {
// const result = await getBySubtaskId({
// id: '1767377960098127873'
// })
// if (result.code === 200) {
// this.task = result.data
// }
// }
getRows
,
getRows2
,
/** 获取体系审查、车型审查检验内容 */
init
()
{
this
.
loading
=
true
listInspection
({
id
:
'1744181159757221888'
}).
then
(
res
=>
{
this
.
tableData
=
res
.
data
this
.
loading
=
false
})
}
}
}
</
script
>
<
style
scoped
>
.table
th
{
background-color
:
#f2f2f2
!important
;
}
</
style
>
src/views/processing/checkFileLibrary/index.vue
View file @
b2064b35
...
...
@@ -138,12 +138,12 @@
align
=
"left"
>
<
template
slot
-
scope
=
"scope"
>
<
img
<
el
-
image
style
=
"width: 36px; height: 36px"
:
src
=
"baseUrl + scope.row.photo"
alt
=
"文件照片"
width
=
"36"
height
=
"36"
/>
:
preview
-
src
-
list
=
"[baseUrl + scope.row.photo]"
>
<
/el-image
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
...
...
src/views/processing/processed-review/index.vue
View file @
b2064b35
...
...
@@ -183,7 +183,7 @@
type=
"primary"
plain
size=
"mini"
@
click=
"
goNext
(item.id)"
@
click=
"
downloadPdf
(item.id)"
>
检查报告
</el-button
>
<el-button
...
...
@@ -220,6 +220,7 @@
<
script
>
import
page
from
'@/mixins/page'
import
{
mapGetters
}
from
'vuex'
import
{
pdfDownload
}
from
'@/api/task/task'
export
default
{
mixins
:
[
page
],
dicts
:
[
'inspection_item'
],
...
...
@@ -237,6 +238,47 @@ export default {
this
.
$store
.
dispatch
(
'standard/setStandardList'
)
},
methods
:
{
/**
* 检验报告
*/
downloadPdf
(
id
)
{
pdfDownload
({
taskId
:
id
,
type
:
0
}).
then
(
res
=>
{
const
fileUrl
=
process
.
env
.
VUE_APP_IMAGE_API
+
'/vehicle-quality-review-oss/'
+
res
.
data
this
.
download
(
fileUrl
)
})
},
/**
* 下载pdf
*/
download
(
fileUrl
)
{
// 根据pdf文件地址下载
// window.location.href = this.fileUrl
const
xhr
=
new
XMLHttpRequest
()
xhr
.
open
(
'GET'
,
fileUrl
,
true
)
xhr
.
responseType
=
'blob'
xhr
.
onload
=
()
=>
{
if
(
xhr
.
status
===
200
)
{
const
blob
=
new
Blob
([
xhr
.
response
],
{
type
:
'application/pdf'
})
const
url
=
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'a'
)
link
.
href
=
url
link
.
download
=
'检查报告.pdf'
link
.
click
()
URL
.
revokeObjectURL
(
url
)
}
}
xhr
.
send
()
},
/* 跳转到问卷详情*/
goNext
(
url
)
{
this
.
$router
.
push
({
path
:
url
})
...
...
src/views/processing/retention-file/index.vue
View file @
b2064b35
...
...
@@ -41,6 +41,7 @@
<!-- table部分 -->
<div
class=
"pdf-box"
>
<iframe
v-loading=
"loading"
:src=
"fileUrl"
frameborder=
"0"
style=
"width: 100%; height: 100%"
...
...
@@ -50,7 +51,7 @@
</
template
>
<
script
>
import
{
getTaskById
}
from
'@/api/task/task'
import
{
getTaskById
,
pdfDownload
}
from
'@/api/task/task'
import
routerMixins
from
'@/mixins/router'
export
default
{
mixins
:
[
routerMixins
],
...
...
@@ -59,14 +60,26 @@ export default {
task
:
{},
taskId
:
1
,
view
:
''
,
fileUrl
:
'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf'
fileUrl
:
''
,
loading
:
false
}
},
async
mounted
()
{
this
.
loading
=
true
if
(
this
.
$route
.
query
.
id
)
{
this
.
taskId
=
this
.
$route
.
query
.
id
this
.
getTaskDetail
()
await
this
.
getTaskDetail
()
pdfDownload
({
taskId
:
this
.
$route
.
query
.
id
,
type
:
1
}).
then
(
res
=>
{
this
.
fileUrl
=
process
.
env
.
VUE_APP_IMAGE_API
+
'/vehicle-quality-review-oss/'
+
res
.
data
this
.
loading
=
false
})
}
this
.
view
=
this
.
$route
.
query
.
view
},
...
...
src/views/processing/systemReview/write-check-form/components/companyFile.vue
View file @
b2064b35
...
...
@@ -155,6 +155,8 @@ export default {
watch
:
{
fileName
(
newValue
)
{
this
.
model
.
fileName
=
newValue
this
.
model
.
enterpriseName
=
this
.
enterpriseName
this
.
model
.
taskId
=
this
.
$route
.
query
.
taskId
},
'dialogManger.dialogEditId'
(
newValue
)
{
this
.
model
.
fetch
(
...
...
@@ -165,12 +167,6 @@ export default {
)
}
},
mounted
()
{
this
.
model
.
enterpriseName
=
this
.
enterpriseName
},
created
()
{
this
.
model
.
taskId
=
this
.
$route
.
query
.
taskId
},
methods
:
{
handleUpdateFile
(
newValue
)
{
this
.
$emit
(
'fileNameUpdate'
,
newValue
)
...
...
@@ -201,6 +197,9 @@ export default {
})
this
.
$emit
(
'handleSave'
,
res
.
data
)
this
.
$modal
.
msgSuccess
(
'提交文件成功'
)
this
.
$nextTick
(()
=>
{
this
.
$refs
.
fileRef
.
clearValidate
()
})
},
errors
=>
{}
)
...
...
src/views/processing/systemReview/write-check-form/index.vue
View file @
b2064b35
...
...
@@ -208,7 +208,7 @@
</div>
</el-form-item>
<el-form-item
class=
"right-content-item"
class=
"right-content-item
passed
"
label=
"审查结果"
prop=
"passed"
>
...
...
@@ -221,23 +221,33 @@
<el-row>
<el-col
:span=
"8"
>
<div>
文件名称
<el-autocomplete
v-model=
"form.fileName"
style=
"width: 100%"
:fetch-suggestions=
"querySearch"
placeholder=
"请输入文件名称"
@
select=
"querySelect"
></el-autocomplete>
<el-form-item
prop=
"fileName"
label-suffix=
" "
label=
"文件名称"
>
<el-autocomplete
v-model=
"form.fileName"
style=
"width: 100%"
:fetch-suggestions=
"querySearch"
placeholder=
"请输入文件名称"
@
select=
"querySelect"
></el-autocomplete>
</el-form-item>
</div>
</el-col>
<el-col
:span=
"8"
:offset=
"1"
>
<div>
章节条目或范围
<el-input
v-model=
"form.catalogue"
placeholder=
"请输入具体章节条目或范围"
/>
<el-form-item
prop=
"catalogue"
label-suffix=
" "
label=
"章节条目或范围"
>
<el-input
v-model=
"form.catalogue"
placeholder=
"请输入具体章节条目或范围"
/>
</el-form-item>
</div>
</el-col>
</el-row>
...
...
@@ -350,7 +360,23 @@ export default {
checked
:
false
,
detailsList
:
[],
rules
:
{
passed
:
[{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}]
passed
:
[
{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}
],
fileName
:
[
{
required
:
true
,
message
:
'请输入文件名称'
,
trigger
:
[
'change'
]
}
],
catalogue
:
[
{
required
:
true
,
message
:
'请输入具体章节条目或范围'
,
trigger
:
'blur'
}
]
},
// TODO 删除
checkedTwo
:
false
,
...
...
src/views/processing/unprocessed-review/index.vue
View file @
b2064b35
...
...
@@ -189,7 +189,11 @@
type=
"primary"
:underline=
"false"
@
click=
"
handleCarTypeTestTaskContent(item.carTestStatus, item.id)
handleCarTypeTestTaskContent(
item.carTestStatus,
item.carTestTaskId,
item.id
)
"
>
{{
...
...
@@ -534,26 +538,30 @@ export default {
}
},
// 车型测试
handleCarTypeTestTaskContent
(
status
,
id
)
{
handleCarTypeTestTaskContent
(
status
,
id
,
taskId
)
{
switch
(
status
)
{
// 查看试验方案
case
'NEW'
:
this
.
$router
.
push
({
path
:
'/processing/review-form?type=3&id='
+
id
path
:
`/processing/carTest/review-form?id=
${
id
}
`
})
break
// 执行试验方案
case
'PENDING'
:
this
.
$router
.
push
({
path
:
'/processing/vehicle-type'
path
:
`/processing/carTest/execution-test-plan?id=
${
id
}
&taskId=
${
taskId
}
`
})
break
// 确认测试结果
case
'SIGNED'
:
this
.
$router
.
push
({
path
:
'/processing/vehicle-type'
ath
:
`/processing/carTest/confirmation-test??id=
${
id
}
`
})
break
case
'FINISH'
:
this
.
$router
.
push
({
path
:
'/processing/carTest/source-record?id='
+
id
})
}
},
/* 跳转到问卷详情*/
...
...
src/views/setting/company/components/dialog.vue
View file @
b2064b35
...
...
@@ -140,7 +140,7 @@ export default {
this
.
handleClose
()
},
errors
=>
{
this
.
handleClose
()
//
this.handleClose()
}
)
}
else
{
...
...
src/views/setting/sample/index.vue
View file @
b2064b35
...
...
@@ -133,11 +133,15 @@
min-width=
"150"
/>
<el-table-column
prop=
"
manufacturingEnterpris
e"
prop=
"
enterpriseNam
e"
label=
"生产企业"
show-overflow-tooltip
min-width=
"200"
/>
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
enterpriseName
?
scope
.
row
.
enterpriseName
:
'--'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"相关任务"
width=
"300"
:resizable=
"false"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.taskSampleRelation.length > 0"
>
...
...
@@ -274,14 +278,21 @@
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"生产企业"
prop=
"manufacturingEnterprise"
>
<el-input
v-model=
"editParamsForm.manufacturingEnterprise"
placeholder=
"请输入生产企业"
clearable
maxlength=
"50"
<el-form-item
label=
"生产企业"
prop=
"manufacturingEnterpriseId"
>
<el-select
v-model=
"editParamsForm.manufacturingEnterpriseId"
placeholder=
"请选择"
style=
"width: 90%"
/>
@
change=
"selectComponent"
>
<el-option
v-for=
"item in componentSelect"
:key=
"item.id"
:label=
"item.enterpriseName"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"商标"
prop=
"trademark"
>
<image-upload
...
...
@@ -390,6 +401,7 @@ import {
import
MaterialLibrary
from
'@/views/setting/materialLibrary/index.vue'
import
materialLibrary
from
'@/views/setting/materialLibrary/index.vue'
import
{
isExternal
}
from
'@/utils/validate'
import
{
componentSelect
}
from
'../../../api/system/sample'
export
default
{
components
:
{
MaterialLibrary
},
...
...
@@ -425,8 +437,8 @@ export default {
manufactureDate
:
[
{
required
:
true
,
message
:
'请选择生产日期'
,
trigger
:
'change'
}
],
manufacturingEnterprise
:
[
{
required
:
true
,
message
:
'请
输入生产企业'
,
trigger
:
'blur
'
}
manufacturingEnterprise
Id
:
[
{
required
:
true
,
message
:
'请
选择生产企业'
,
trigger
:
'change
'
}
]
},
editParamsForm
:
{
...
...
@@ -454,7 +466,8 @@ export default {
dialogVisible
:
false
,
trademarkDisplay
:
true
,
dialogTitle
:
'新建'
,
samplePhotosDisplay
:
true
samplePhotosDisplay
:
true
,
componentSelect
:
[]
}
},
computed
:
{
...
...
@@ -484,8 +497,25 @@ export default {
},
created
()
{
this
.
getList
()
this
.
getComponentSelect
()
},
methods
:
{
selectComponent
(
val
)
{
const
obj
=
this
.
componentSelect
.
find
(
item
=>
item
.
id
===
val
)
this
.
editParamsForm
.
manufacturingEnterprise
=
obj
.
enterpriseName
console
.
log
(
obj
)
},
getComponentSelect
()
{
componentSelect
({
pageNum
:
1
,
pageSize
:
9999
,
isAsc
:
'desc'
,
orderByColumn
:
'createTime'
}).
then
(
res
=>
{
this
.
componentSelect
=
res
.
rows
console
.
log
(
'res'
,
res
)
})
},
closeMaterial
(
data
)
{
this
.
materialShow
=
data
},
...
...
@@ -635,8 +665,18 @@ export default {
}
selectSampleInfo
({
id
:
id
}).
then
(
res
=>
{
this
.
editParamsForm
=
res
.
data
const
foundObject
=
this
.
componentSelect
.
find
(
item
=>
item
.
id
===
this
.
editParamsForm
.
manufacturingEnterpriseId
)
if
(
foundObject
)
{
this
.
editParamsForm
.
manufacturingEnterpriseId
=
res
.
data
.
manufacturingEnterpriseId
}
else
{
this
.
editParamsForm
.
manufacturingEnterpriseId
=
''
}
this
.
dialogVisible
=
true
})
this
.
$refs
.
editForm
.
resetFields
()
},
handleDelete
(
id
)
{
this
.
$confirm
(
'是否确定删除该条数据?'
,
'提示'
,
{
...
...
src/views/setting/sample/taskDetails/index.vue
View file @
b2064b35
...
...
@@ -21,7 +21,9 @@
<el-row
:gutter=
"41"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"检验依据:"
>
<sapn
class=
"card-contnet"
>
{{
taskForm
.
name
}}
</sapn>
<sapn
class=
"card-contnet"
>
{{
taskForm
.
standardNo
+
' '
+
taskForm
.
name
}}
</sapn>
</el-form-item>
</el-col>
<el-col
:span=
"8"
class=
"card-title"
>
...
...
@@ -53,10 +55,10 @@
</el-col>
<el-col
:span=
"8"
class=
"card-title"
>
<el-form-item
label=
"小组成员:"
>
<sapn
class=
"card-contnet"
>
{{
taskForm
.
leader
?
taskForm
.
leader
+
'(组长)、'
:
''
}}
<sapn
class=
"card-contnet"
>
<div
v-for=
"(item, index) in taskForm.auditors"
:key=
"index"
>
{{
item
.
name
}}
<span
v-show=
"index === 0"
>
(组长)
</span>
<span
v-show=
"index + 1 != taskForm.auditors.length"
>
、
</span>
...
...
@@ -834,7 +836,7 @@ import { selectDataStatistics, selectTaskInfo } from '@/api/system/sample'
import
dict
from
'@/utils/dict'
export
default
{
dicts
:
[
'system_task_status'
,
'confidentiality_level'
],
dicts
:
[
'system_task_status'
,
'confidentiality_level'
,
'inspection_item'
],
data
()
{
return
{
taskList
:
[],
...
...
@@ -853,6 +855,15 @@ export default {
},
methods
:
{
dict
,
dictValueReturn
(
item
)
{
if
(
item
===
'sraifv'
)
{
return
'汽车信息安全管理体系要求'
}
else
if
(
item
===
'grfis'
)
{
return
'汽车信息安全一般要求'
}
else
{
return
'汽车信息安全技术要求'
}
},
getDataStatistics
()
{
selectDataStatistics
({
id
:
this
.
taskId
}).
then
(
res
=>
{
this
.
dataStatistic
=
res
.
data
...
...
@@ -864,6 +875,9 @@ export default {
this
.
taskForm
=
res
.
data
if
(
res
.
data
.
taskList
)
{
this
.
taskList
=
this
.
taskForm
.
taskList
.
split
(
','
)
this
.
taskList
.
forEach
((
item
,
index
)
=>
{
this
.
taskList
[
index
]
=
this
.
dictValueReturn
(
item
)
})
}
console
.
log
(
'任务详情'
,
res
)
})
...
...
src/views/setting/standardTerms/index.vue
View file @
b2064b35
...
...
@@ -99,7 +99,7 @@
<
template
slot-scope=
"scope"
>
<div
class=
"button-bar"
>
<page-button
v-hasPermi=
"['setting:standard
:update
']"
v-hasPermi=
"['setting:standard
Terms:content
']"
icon=
"doc-search"
title=
"检验内容"
@
click
.
native=
"handleUpdate(scope.row)"
...
...
src/views/setting/testMatrix/index.vue
View file @
b2064b35
...
...
@@ -183,7 +183,8 @@ export default {
},
/** 点击跳转详情 */
viewDetail
(
row
)
{
this
.
$message
(
row
)
console
.
log
(
row
)
// this.$message(row)
this
.
$router
.
push
({
path
:
'/setting/useCaseDetails'
,
query
:
{
id
:
row
}
...
...
src/views/setting/testMatrix/useCaseDetails/index.vue
View file @
b2064b35
...
...
@@ -6,32 +6,42 @@
:src=
"url"
frameborder=
"0"
style=
"width: 100%; height: 100%"
></iframe
>
Ï
></iframe
>
<el-button
@
click=
"newFileTest"
>
新建任务
</el-button>
</div>
</page-standard>
</
template
>
<
script
>
import
{
GetSuiteLis
t
}
from
'@/api/graphql/client.graphql'
import
{
NewFileTestProjec
t
}
from
'@/api/graphql/client.graphql'
export
default
{
name
:
'Index'
,
data
()
{
return
{
id
:
this
.
$route
.
query
,
url
:
'
http://10.12.48.78:8090/car/caseManage/case/casePublishDetail/case_items;375
'
url
:
''
// http://10.12.48.80:1234/car/caseManage/case/casePublishDetail/case_items;375
}
},
mounted
()
{
this
.
getSuiteList
()
const
id
=
this
.
$route
.
query
.
id
this
.
url
=
`http://10.12.48.78:8090/car/caseManage/case/casePublishDetail/case_items;
${
id
}
`
},
methods
:
{
getSuiteLi
st
()
{
newFileTe
st
()
{
this
.
$apollo
.
query
({
fetchPolicy
:
'no-cache'
,
query
:
GetSuiteList
.
mutate
({
// fetchPolicy: 'no-cache',
mutation
:
NewFileTestProject
,
variables
:
{
name
:
'test106'
,
lawId
:
'law_items;106'
,
principalUserId
:
'user_items;2'
,
systemTypeId
:
'autoParts;1'
,
systemTypeName
:
'Linux'
,
systemId
:
'system;1'
,
fileList
:
[
'file_management_items;2'
]
}
})
.
then
(
res
=>
{
console
.
log
(
res
)
...
...
src/views/setting/useCaseLibrary/index.vue
View file @
b2064b35
...
...
@@ -85,18 +85,18 @@
<el-table-column
label=
"工具"
align=
"left"
prop=
"tools"
/>
<el-table-column
label=
"对应输入"
align=
"left"
prop=
"input"
/>
<el-table-column
label=
"用例描述"
align=
"left"
prop=
"description"
/>
<
el-table-column
label=
"更新人员"
align=
"left"
prop=
"updateBy"
/
>
<
el-table-column
label=
"更新时间"
sortable
align=
"left"
prop=
"updateTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
updateTime
,
'{y
}
-{m
}
-{d
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
!-- <el-table-column label="更新人员" align="left" prop="updateBy" />--
>
<
!-- <el-table-column-->
<!-- label="更新时间"-->
<!-- sortable-->
<!-- align="left"-->
<!-- prop="updateTime"-->
<!-- width="180"-->
<!-- >--
>
<!-- <template slot-scope="scope">--
>
<!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>--
>
<!-- </template>--
>
<
!-- </el-table-column>--
>
</el-table>
<pagination
v-show=
"total > 0"
...
...
src/views/system/user/index.vue
View file @
b2064b35
...
...
@@ -598,9 +598,9 @@ export default {
password
:
[
{
required
:
true
,
message
:
'用户密码不能为空'
,
trigger
:
'blur'
},
{
min
:
5
,
min
:
6
,
max
:
20
,
message
:
'用户密码长度必须介于
5
和 20 之间'
,
message
:
'用户密码长度必须介于
6
和 20 之间'
,
trigger
:
'blur'
}
],
...
...
src/views/task/on/index.vue
View file @
b2064b35
...
...
@@ -24,7 +24,7 @@
v-for=
"(item, key) in standardList"
:key=
"key"
:value=
"item.id"
:label=
"item.standardNo + item.name"
:label=
"item.standardNo +
' ' +
item.name"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -448,7 +448,7 @@
type=
"primary"
plain
size=
"mini"
@
click=
"
goNext
(item.id)"
@
click=
"
downloadPdf
(item.id)"
>
检查报告
</el-button
>
<el-button
...
...
@@ -486,11 +486,7 @@
import
page
from
'@/mixins/page'
import
{
getHourDiff
}
from
'@/utils/diff'
import
{
mapGetters
}
from
'vuex'
import
{
reviewTaskStart
,
reviewCarTaskStart
,
removeTask
}
from
'@/api/task/task'
import
{
reviewTaskStart
,
pdfDownload
,
removeTask
}
from
'@/api/task/task'
import
request
from
'@/utils/request'
export
default
{
dicts
:
[
...
...
@@ -545,6 +541,47 @@ export default {
this
.
$store
.
dispatch
(
'standard/setStandardList'
)
},
methods
:
{
/**
* 检验报告
*/
downloadPdf
(
id
)
{
pdfDownload
({
taskId
:
id
,
type
:
0
}).
then
(
res
=>
{
const
fileUrl
=
process
.
env
.
VUE_APP_IMAGE_API
+
'/vehicle-quality-review-oss/'
+
res
.
data
this
.
download
(
fileUrl
)
})
},
/**
* 下载pdf
*/
download
(
fileUrl
)
{
// 根据pdf文件地址下载
// window.location.href = this.fileUrl
const
xhr
=
new
XMLHttpRequest
()
xhr
.
open
(
'GET'
,
fileUrl
,
true
)
xhr
.
responseType
=
'blob'
xhr
.
onload
=
()
=>
{
if
(
xhr
.
status
===
200
)
{
const
blob
=
new
Blob
([
xhr
.
response
],
{
type
:
'application/pdf'
})
const
url
=
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'a'
)
link
.
href
=
url
link
.
download
=
'检查报告.pdf'
link
.
click
()
URL
.
revokeObjectURL
(
url
)
}
}
xhr
.
send
()
},
loadData
()
{
this
.
loading
=
true
if
(
this
.
active
===
'0'
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment