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
6e94a8bc
Commit
6e94a8bc
authored
Jan 18, 2024
by
jiaxu.yan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(体系审查页面): 场景部分 答题展示 场景变更显示 未答题展示 修改
parent
cd436e41
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1403 additions
and
339 deletions
+1403
-339
task.js
src/api/task/task.js
+26
-1
index.scss
src/assets/styles/index.scss
+2
-0
process.scss
src/assets/styles/process.scss
+16
-0
page.js
src/mixins/page.js
+2
-2
ModelDataSource.js
src/utils/ModelDataSource.js
+2
-2
diff.js
src/utils/diff.js
+18
-0
senceDialog.vue
...ews/processing/type-check-form/components/senceDialog.vue
+0
-0
index.vue
src/views/processing/type-check-form/index.vue
+603
-0
index.vue
src/views/processing/unprocessed-review/index.vue
+192
-117
companyFile.vue
...ws/processing/write-check-form/components/companyFile.vue
+160
-0
sceneDialog.vue
...ws/processing/write-check-form/components/sceneDialog.vue
+132
-0
sceneView.vue
...iews/processing/write-check-form/components/sceneView.vue
+65
-0
index.vue
src/views/processing/write-check-form/index.vue
+180
-217
index.vue
src/views/setting/company/index.vue
+5
-0
No files found.
src/api/task/task.js
View file @
6e94a8bc
...
...
@@ -21,7 +21,7 @@ export function reviewDetailsSubmit(data) {
data
})
}
// 提交审查问卷
// 提交
体系
审查问卷
export
function
taskSubmit
(
data
)
{
return
request
({
url
:
'/system/review/task/submit'
,
...
...
@@ -29,3 +29,28 @@ export function taskSubmit(data) {
data
})
}
// 启动车辆问卷审查任务
export
function
startReview
(
data
)
{
return
request
({
url
:
'/car/review/task/startReview'
,
method
:
'post'
,
data
})
}
// 提交车辆问卷审查任务
export
function
submitReview
(
data
)
{
return
request
({
url
:
'/car/review/task/submitReview'
,
method
:
'post'
,
data
})
}
// 查看车辆问卷审查任务详情
export
function
checkTaskDetail
(
data
)
{
return
request
({
url
:
'/car/review/task/view'
,
method
:
'post'
,
data
})
}
\ No newline at end of file
src/assets/styles/index.scss
View file @
6e94a8bc
...
...
@@ -4,6 +4,8 @@
@import
'./element-ui.scss'
;
@import
'./sidebar.scss'
;
@import
'./btn.scss'
;
@import
'./process.scss'
;
@import
url(//at.alicdn.com/t/c/font_4370984_m7nz5mfgt6.css)
;
body
{
...
...
src/assets/styles/process.scss
0 → 100644
View file @
6e94a8bc
.file-prompt
{
margin
:
10px
0
10px
0
;
background-color
:
#ebf5ff
;
padding
:
10px
;
div
{
padding-left
:
10px
;
i
{
color
:
#409eff
;
margin-right
:
10px
;
}
}
}
.scene-error
{
color
:
red
;
}
src/mixins/page.js
View file @
6e94a8bc
...
...
@@ -33,8 +33,8 @@ export default {
resetQuery
()
{
// this.refs.queryForm.restForm() this.resetForm("queryForm");
this
.
queryParams
=
{
page
:
this
.
queryParams
.
pageNum
,
s
ize
:
this
.
queryParams
.
pageSize
page
Num
:
this
.
queryParams
.
pageNum
,
pageS
ize
:
this
.
queryParams
.
pageSize
}
},
handleQuery
()
{
...
...
src/utils/ModelDataSource.js
View file @
6e94a8bc
...
...
@@ -3,7 +3,6 @@
* 用于 单条记录的增删查改
*/
import
request
from
'@/utils/request'
;
import
d
from
'highlight.js/lib/languages/d'
;
(
function
(
root
,
factory
)
{
// CommonJS
if
(
typeof
exports
===
'object'
)
{
...
...
@@ -103,10 +102,11 @@ import request from '@/utils/request'
let
url
=
''
if
(
self
.
uuid
==
0
)
{
url
=
self
.
settings
.
url
+
'/add'
delete
self
.
id
}
else
{
url
=
self
.
settings
.
url
+
'/edit'
}
delete
self
.
id
request
({
url
,
method
:
'post'
,
...
...
src/utils/diff.js
0 → 100644
View file @
6e94a8bc
/**
* 获取传入时间额当前时间的小时差
* @param {*} time
* @returns
*/
export
function
getHourDiff
(
time
)
{
// 获取当前时间
var
now
=
new
Date
()
// 设置目标时间(这里为2021年9月30日)
var
targetTime
=
new
Date
(
time
)
// 注意月份从0开始计数,所以8表示九月
// 计算时间差(单位为毫秒)
var
timeDiff
=
Math
.
abs
(
targetTime
-
now
)
// 将时间差转换成小时
return
Math
.
floor
(
timeDiff
/
(
60
*
60
*
1000
))
}
\ No newline at end of file
src/views/processing/
writ
e-check-form/components/senceDialog.vue
→
src/views/processing/
typ
e-check-form/components/senceDialog.vue
View file @
6e94a8bc
File moved
src/views/processing/type-check-form/index.vue
0 → 100644
View file @
6e94a8bc
<
template
>
<div
class=
"app-container"
>
<el-card
class=
"custom-card"
>
<div
slot=
"header"
class=
"clearfix"
>
<span>
填写检查表单(所属任务:
{{
model
.
systemReviewTask
.
name
}}
)
</span>
<el-button
icon=
"el-icon-back"
class=
"back-btn"
@
click=
"handleBack"
>
返回
</el-button>
<el-button
class=
"back-btn"
>
意见表
</el-button>
</div>
<div
class=
"main-content"
>
<div
class=
"prompt-message"
>
<span
>
问卷填写情况:共
{{
model
.
detailsList
.
length
}}
条审查细则,已完成
{{
readNumber
}}
条,未完成
{{
model
.
detailsList
.
length
-
readNumber
}}
条
</span
>
<!--
<span
class=
"center-text"
>
有 3 条场景变更待处理
</span>
-->
<el-checkbox
v-model=
"checked"
>
仅显示未完成页面
</el-checkbox>
</div>
<el-row>
<!-- 步骤条 -->
<el-col
:span=
"2"
>
<div
class=
"left-content"
style=
"height: 300px; width: 110px"
>
<div
v-for=
"(item, index) in model.detailsList"
:key=
"index"
>
<div
:class=
"
{
'exclamation-point': true,
'no-exclamation-point': false
}"
>
<div
v-show=
"true"
class=
"exclamation"
>
!
</div>
</div>
<div
class=
"no-select-circle"
:class=
"
{
'select-circle': index === activeModel
}"
@click="handleCircle(index)"
>
<span
class=
"inner-text"
>
{{
index
+
1
}}
</span>
</div>
<span
v-show=
"item.result && item.result.passed !== null"
class=
"tick-class"
>
<i
class=
"el-icon-check"
/>
</span>
</div>
</div>
</el-col>
<!-- 内容 -->
<el-col
:span=
"22"
>
<el-form
ref=
"form"
class=
"right-content"
:model=
"form"
:rules=
"rules"
label-width=
"90px"
>
<el-form-item
label=
"标准章节"
>
<span>
{{
taskModel
.
chapter
}}
</span>
</el-form-item>
<el-form-item
label=
"标准要求"
>
<span>
{{
taskModel
.
standardText
}}
</span>
</el-form-item>
<el-form-item
label=
"审查要点"
>
<span>
{{
taskModel
.
reviewKeypointText
}}
</span>
</el-form-item>
<el-form-item
label=
"审查细则"
>
<span>
{{
taskModel
.
text
}}
</span>
</el-form-item>
<el-form-item
:label=
"'符合场景'"
>
<template
slot=
"label"
>
<span>
符合场景
</span>
<el-button
class=
"label-btn"
size=
"mini"
type=
"warning"
@
click=
"handleAddScene"
>
<span>
新增场景
</span>
</el-button>
</
template
>
<div
class=
"match-scene"
>
<div
v-for=
"(scene, key) in taskModel.reviewSceneList"
:key=
"key"
>
{{ scene.text }}
</div>
</div>
</el-form-item>
<el-form-item
label=
"审查结果"
prop=
"passed"
>
<el-radio-group
v-model=
"form.passed"
>
<el-radio
:label=
"1"
>
符合
</el-radio>
<el-radio
:label=
"0"
>
不符合
</el-radio>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="相关记录">
<el-row>
<el-col :span="8">
<div>
文件名称
<el-input
v-model="addData.fileName"
placeholder="请输入文件名称"
/>
</div>
</el-col>
<el-col :span="8" :offset="1">
<div>
章节条目或范围
<el-input
v-model="addData.chapterEntry"
placeholder="请输入具体章节条目或范围"
/>
</div>
</el-col>
</el-row>
//文件第一次提示
<div class="file-prompt">
<div>
<i class="el-icon-info"></i
>该文件第一次出现,请维护如下相关信息
</div>
</div>
//车企文件信息
<el-card>
<div slot="header" class="clearfix">
<span>车企文件信息</span>
</div>
<el-form
ref="fileRef"
:model="fileData"
label-width="100px"
class="file-form-class"
:rules="fileRules"
>
<el-row>
<el-col :span="12">
<el-form-item label="企业名称" prop="enterpriseName">
<el-input
v-model="fileData.enterpriseName"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文件名称" prop="fileName">
<el-input
v-model="fileData.fileName"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="文件版本" prop="fileVersion">
<el-input
v-model="fileData.fileVersion"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布日期" prop="releaseDate">
<el-date-picker
v-model="fileData.releaseDate"
type="date"
placeholder="选择日期"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="文件状态" prop="fileStatus">
<el-select
v-model="fileData.fileStatus"
placeholder="请选择"
style="width: 100%"
>
<el-option
v-for="item in dict.type.file_status"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="存储位置" prop="storageLocation">
<el-input
v-model="fileData.storageLocation"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="文件识别号"
prop="fileIdentification"
>
<el-input
v-model="fileData.fileIdentification"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文件照片" prop="filePicture">
<ImageUpload
v-model="fileData.filePicture"
:limit="1"
></ImageUpload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button
type="primary"
icon="el-icon-folder-add"
@click="handleSaveFile"
>保存车企文件</el-button
>
</el-card>
</el-form-item> -->
<el-form-item
label=
"条目填写人"
>
<span>
{{ name }}
</span>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
<div
class=
"bottom-btn"
>
<el-button
type=
"warning"
@
click=
"submitQuestionnaire(1)"
>
保存当前边界
</el-button>
<el-button
type=
"primary"
@
click=
"submitQuestionnaire(2)"
>
提交表格
</el-button
>
</div>
</el-card>
<!-- 新增场景对话框 -->
<sence-dialog
:dialog-manger=
"senceManger"
></sence-dialog>
</div>
</template>
<
script
>
import
{
checkTaskDetail
,
reviewDetailsSubmit
}
from
'@/api/task/task'
import
senceDialog
from
'./components/senceDialog.vue'
import
{
mapGetters
}
from
'vuex'
export
default
{
dicts
:
[
'file_status'
],
components
:
{
'sence-dialog'
:
senceDialog
},
data
()
{
return
{
senceManger
:
{
dialogVisible
:
false
},
form
:
{
passed
:
null
},
model
:
{
systemReviewTask
:
{},
reviewSceneChangeTasks
:
{},
detailsList
:
[]
},
taskModel
:
{},
activeModel
:
0
,
checked
:
false
,
rules
:
{
passed
:
[{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}]
},
fileRules
:
{
enterpriseName
:
[
{
required
:
true
,
message
:
'请输入企业名称'
,
trigger
:
'blur'
}
],
fileName
:
[
{
required
:
true
,
message
:
'请输入文件名称'
,
trigger
:
'blur'
}
],
fileVersion
:
[
{
required
:
true
,
message
:
'请输入文件版本'
,
trigger
:
'blur'
}
],
releaseDate
:
[
{
required
:
true
,
message
:
'请选择发布日期'
,
trigger
:
'change'
}
],
fileStatus
:
[
{
required
:
true
,
message
:
'请选择文件状态'
,
trigger
:
'change'
}
],
storageLocation
:
[
{
required
:
true
,
message
:
'请输入存储位置'
,
trigger
:
'blur'
}
],
fileIdentification
:
[
{
required
:
true
,
message
:
'请输入文件识别号'
,
trigger
:
'blur'
}
],
filePicture
:
[
{
required
:
true
,
message
:
'请选择文件照片'
,
trigger
:
'change'
}
]
},
// TODO 删除
checkedTwo
:
false
,
checkedThree
:
false
,
radio
:
1
,
addData
:
{
fileName
:
''
,
chapterEntry
:
''
},
fileData
:
{
enterpriseName
:
''
,
fileStatus
:
''
,
filePicture
:
''
,
storageLocation
:
''
},
value1
:
''
,
taskId
:
''
}
},
computed
:
{
readNumber
()
{
let
num
=
0
this
.
model
.
detailsList
.
map
(
i
=>
{
if
(
i
.
result
&&
i
.
result
.
passed
!==
null
)
{
num
++
}
})
return
num
},
...
mapGetters
([
'name'
])
},
mounted
()
{
this
.
taskId
=
this
.
$route
.
query
.
id
this
.
getTask
()
},
methods
:
{
getTask
()
{
checkTaskDetail
({
taskId
:
this
.
taskId
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
this
.
model
=
res
.
data
this
.
handleCircle
(
0
)
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
)
}
})
},
/**
* 点击左侧圆圈触发的回调函数
* @param item 圆圈对象
*/
handleCircle
(
index
)
{
this
.
activeModel
=
index
this
.
taskModel
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
model
.
detailsList
[
index
]))
if
(
this
.
taskModel
.
result
)
{
this
.
form
=
{
passed
:
this
.
taskModel
.
result
.
passed
,
reviewDetailsId
:
this
.
taskModel
.
id
,
taskId
:
this
.
taskId
}
}
else
{
this
.
form
=
{
passed
:
null
,
reviewDetailsId
:
this
.
taskModel
.
id
,
taskId
:
this
.
taskId
}
}
},
// 返回
handleBack
()
{
this
.
$router
.
go
(
-
1
)
},
// 新增场景
handleAddScene
()
{
this
.
senceManger
.
dialogVisible
=
true
},
// 保存当前条目
submitQuestionnaire
(
type
)
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
reviewDetailsSubmit
(
this
.
form
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
if
(
!
this
.
model
.
detailsList
[
this
.
activeModel
].
result
)
{
this
.
model
.
detailsList
[
this
.
activeModel
].
result
=
{
passed
:
0
}
}
this
.
model
.
detailsList
[
this
.
activeModel
].
result
.
passed
=
this
.
form
.
passed
this
.
$modal
.
msgSuccess
(
'提交表格成功'
)
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
)
}
})
}
})
},
handleSaveFile
()
{
// vue表单校验
this
.
$refs
.
fileRef
.
validate
(
valid
=>
{
if
(
valid
)
{
console
.
log
(
'ddd'
)
}
})
}
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.app-container
{
padding
:
20px
;
.custom-card
{
::v-deep
.el-card__header
{
background-color
:
#f9f9f9
;
}
.back-btn
{
margin-left
:
10px
;
float
:
right
;
}
.other-btn
{
float
:
right
;
}
.main-content
{
min-height
:
550px
;
.prompt-message
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
40px
;
.center-text
{
color
:
#f56c6c
;
}
}
.left-content
{
.tick-class
{
float
:
right
;
position
:
relative
;
top
:
-1
.8em
;
left
:
-1em
;
i
{
color
:
#25c173
;
}
}
.no-exclamation-point
{
float
:
left
;
width
:
1px
;
height
:
1px
;
padding-left
:
30px
;
}
.exclamation-point
{
float
:
left
;
margin-top
:
6px
;
margin-right
:
10px
;
position
:
relative
;
width
:
20px
;
height
:
20px
;
border
:
2px
solid
#f56c6c
;
border-radius
:
50%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
font-size
:
24px
;
font-weight
:
bold
;
margin-bottom
:
5px
;
.exclamation
{
position
:
absolute
;
font-size
:
12px
;
color
:
#f56c6c
;
font-weight
:
bold
;
}
}
.no-select-circle
{
cursor
:
pointer
;
width
:
35px
;
height
:
35px
;
border
:
3px
solid
#c0c0c0
;
border-radius
:
50%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
font-size
:
24px
;
font-weight
:
bold
;
position
:
relative
;
margin-bottom
:
5px
;
.inner-text
{
position
:
absolute
;
font-size
:
16px
;
z-index
:
1
;
color
:
#c0c0c0
;
}
}
.select-circle
{
cursor
:
pointer
;
width
:
35px
;
height
:
35px
;
border
:
3px
solid
#6ab3ff
;
border-radius
:
50%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
font-size
:
24px
;
font-weight
:
bold
;
position
:
relative
;
margin-bottom
:
5px
;
.inner-text
{
position
:
absolute
;
font-size
:
16px
;
z-index
:
1
;
color
:
#6ab3ff
;
}
}
}
.right-content
{
.file-form-class
{
::v-deep
.el-form-item
{
margin-bottom
:
20px
;
}
}
.match-scene
{
display
:
flex
;
flex-direction
:
column
;
background-color
:
#fafafa
;
padding
:
5px
;
}
.file-prompt
{
margin
:
10px
0
10px
0
;
background-color
:
#ebf5ff
;
div
{
padding-left
:
10px
;
i
{
color
:
#409eff
;
margin-right
:
10px
;
}
}
}
}
}
.bottom-btn
{
display
:
flex
;
justify-content
:
center
;
}
}
}
.file-prompt
{
margin
:
0
0
10px
0
;
padding
:
10px
;
background-color
:
#ebf5ff
;
div
{
font-size
:
12px
;
padding-left
:
10px
;
i
{
color
:
#409eff
;
margin-right
:
10px
;
}
}
}
.label-btn
{
width
:
60px
;
span
{
font-size
:
12px
;
position
:
relative
;
right
:
9px
;
}
}
</
style
>
src/views/processing/unprocessed-review/index.vue
View file @
6e94a8bc
<
template
>
<page-standard>
<div
slot=
"tab"
>
<el-radio-group
v-model=
"pageType"
>
<el-radio-button
v-for=
"dict in dict.type.task_type"
:key=
"dict.value"
:label=
"dict.value"
>
{{
dict
.
label
}}
</el-radio-button>
</el-radio-group>
</div>
<el-form
v-show=
"showSearch"
ref=
"queryForm"
...
...
@@ -92,51 +81,113 @@
{{
item
.
leader
?
item
.
leader
:
'---'
}}
</div>
</div>
<div
v-if=
"!isSysReview"
class=
"card-cell"
>
<div
class=
"card-cell"
>
<div
class=
"cell-lable"
>
子任务内容
</div>
<div
class=
"cell-value"
>
<div>
<el-link
type=
"primary"
>
{{
linkMap
[
item
.
docTypeOne
]
}}
</el-link>
</div>
<div>
<el-link
v-if=
"item.docTypeTwo"
type=
"primary"
@
click=
"handleTaskContent(linkMap[item.docTypeTwo]
)"
@
click=
"handleSystemReviewTestContent('PENDING', item.id
)"
>
{{
linkMap
[
item
.
docTypeTwo
]
}}
体系审查填写审查问卷
</el-link>
<template
v-if=
"item.status !== 'NONE'"
>
<el-link
type=
"primary"
@
click=
"handleSystemReviewTestContent(item.status, item.id)"
>
{{
getDictData
(
dict
.
type
.
system_review_test_btn
,
item
.
status
)
}}
</el-link>
<br
/>
</
template
>
<
template
v-if=
"item.reviewStatus !== 'NONE'"
>
<el-link
type=
"primary"
@
click=
"
handleCarTypeReviewTaskContent(item.reviewStatus, item.id)
"
>
{{
getDictData
(
dict
.
type
.
test_cartype_task_btn
,
item
.
reviewStatus
)
}}
</el-link>
<br
/>
</
template
>
<
template
v-if=
"item.testStatus !== 'NONE'"
>
<el-link
type=
"primary"
@
click=
"handleCarTypeTestTaskContent(item.testStatus, item.id)"
>
{{
getDictData
(
dict
.
type
.
test_cartype_type_btn
,
item
.
testStatus
)
}}
</el-link>
<br
/>
</
template
>
</div>
</div>
</div>
<div
v-if=
"!isSysReview"
class=
"card-cell status-multiple-cell"
>
<div
class=
"card-cell status-multiple-cell"
>
<div
class=
"cell-lable"
>
子任务状态
</div>
<div
class=
"cell-value"
>
<
div
v-if=
"item.costTimeOne === 0"
class=
"cell-value"
>
● 未开始
</div
>
<
template
v-if=
"item.status !== 'NONE'"
>
<div
v-else
:class=
"[
'cell-value',
item.progressOne
=== 100 ? 'green' : 'yellow'
item.progressTwo
=== 100 ? 'green' : 'yellow'
]"
>
●
{{
item
.
progressOne
===
100
?
'已完成(共耗时'
:
'已耗时('
}}{{
item
.
costTimeOne
}}
小时)
<span
class=
"cell-value"
>
●
{{
getDictData
(
dict
.
type
.
system_review_test
,
item
.
status
)
}}
</span
>
<span
>
{{
true
?
'(共耗时'
:
'已耗时('
}}{{
item
.
costTimeOne
}}
小时)
</span
>
</div>
<div
v-if=
"item.costTimeTwo === 0"
class=
"cell-value"
>
● 未开始
</div>
</
template
>
<
template
v-if=
"item.reviewStatus !== 'NONE'"
>
<div
v-if=
"item.costTimeTwo && item.costTimeTwo !== 0"
:class=
"[
'cell-value',
item.progressTwo === 100 ? 'green' : 'yellow'
]"
>
●
{{
item
.
progressTwo
===
100
?
'已完成(共耗时'
:
'已耗时('
}}{{
item
.
costTimeTwo
}}
小时)
<span
class=
"cell-value"
>
●
{{
getDictData
(
dict
.
type
.
test_cartype_task
,
item
.
reviewStatus
)
}}
</span
>
<span
>
{{
true
?
'(共耗时'
:
'已耗时('
}}{{
item
.
costTimeOne
}}
小时)
</span
>
</div>
</
template
>
<
template
v-if=
"item.testStatus !== 'NONE'"
>
<div
:class=
"[
'cell-value',
item.progressTwo === 100 ? 'green' : 'yellow'
]"
>
<span
class=
"cell-value"
>
●
{{
getDictData
(
dict
.
type
.
test_cartype_type
,
item
.
testStatus
)
}}
</span
>
<span
>
{{
true
?
'(共耗时'
:
'已耗时('
}}{{
item
.
costTimeOne
}}
小时)
</span
>
</div>
</
template
>
</div>
</div>
<div
v-if=
"!isSysReview"
class=
"card-cell"
>
<div
class=
"card-cell"
>
<div
class=
"cell-lable"
>
子任务完成进度
</div>
<el-progress
class=
"cell-progress"
...
...
@@ -152,38 +203,6 @@
:percentage=
"item.progressTwo"
></el-progress>
</div>
<div
v-if=
"isSysReview"
class=
"card-cell"
>
<div
class=
"cell-lable"
>
任务状态
</div>
<div
v-if=
"item.taskStatus === 'NEW'"
class=
"cell-value"
>
● 未开始
</div>
<div
v-if=
"item.taskStatus === 'PENDING'"
class=
"cell-value yellow"
>
● 已耗时(
{{
getHourDiff
(
item
.
taskBeginTime
)
}}
小时)
</div>
</div>
<div
v-if=
"isSysReview"
class=
"card-cell"
>
<div
class=
"cell-lable"
>
审查问卷
</div>
<div
class=
"cell-value"
>
<el-link
v-if=
"item.progress === 0"
type=
"primary"
@
click=
"handleReviewForm(item.id)"
>
查看检查表单
</el-link
><br
/>
<el-link
type=
"primary"
@
click=
"handleReviewQuestionnaire(item.id)"
>
填写检查表单
</el-link
><br
/>
<el-link
type=
"primary"
@
click=
"handleConfirmFindings(item.id)"
>
确认审查结果
</el-link
>
</div>
</div>
<div
v-if=
"isSysReview"
class=
"card-cell"
>
<div
class=
"cell-lable"
>
完成进度
</div>
<el-progress
class=
"cell-progress"
:stroke-width=
"12"
:percentage=
"item.progress"
></el-progress>
</div>
<div
class=
"card-cell option-cell"
>
<div
class=
"cell-lable"
></div>
<div
class=
"cell-value"
>
...
...
@@ -255,22 +274,22 @@
import
page
from
'@/mixins/page'
import
taskDialog
from
'./components/dialog'
import
request
from
'@/utils/request'
import
{
getHourDiff
}
from
'@/utils/diff'
export
default
{
dicts
:
[
'sys_job_status'
,
'sys_scene_type'
,
'task_type'
],
dicts
:
[
'sys_job_status'
,
'system_review_test_btn'
,
'test_cartype_type_btn'
,
'test_cartype_task_btn'
,
'system_review_test'
,
'test_cartype_type'
,
'test_cartype_task'
],
components
:
{
taskDialog
},
mixins
:
[
page
],
data
()
{
return
{
// 子任务内容跳转文字map
linkMap
:
{
1
:
'查看车型审查问卷'
,
2
:
'查看车型检验方案'
,
3
:
'填写车型审查问卷'
,
4
:
'确认车型审查结果'
,
5
:
'查看车型审查记录'
,
6
:
'执行车型检验方案'
,
7
:
'确认车型检验结果'
},
dialogVisible
:
false
,
pageType
:
'1'
,
// 代办任务类型 1-体系审查 其他-车型测评
listUrl
:
'/system/review/task/findInProcess'
,
...
...
@@ -286,8 +305,12 @@ export default {
},
watch
:
{
pageType
(
newValue
)
{
this
.
listUrl
=
newValue
===
'1'
?
'/tasklist'
:
'/taskCarType'
this
.
loadData
()
this
.
listUrl
=
newValue
===
'1'
?
'/system/review/task/findInProces'
:
'/car/review/task/findPending'
this
.
resetQuery
()
this
.
handleQuery
()
}
},
methods
:
{
...
...
@@ -338,47 +361,99 @@ export default {
path
:
'/processing/reviewReport'
})
},
handleReviewQuestionnaire
(
id
)
{
this
.
$router
.
push
({
path
:
'/processing/write-check-form?id='
+
id
})
},
handleReviewForm
()
{
this
.
$router
.
push
({
path
:
'/processing/review-form'
,
query
:
{
flag
:
'检查表单'
}
})
},
// 查看文档检查表单跳转
handleCheckForm
()
{
handleConfirmFindings
(
id
)
{
this
.
$router
.
push
({
path
:
'/processing/
review-form'
path
:
'/processing/
confirm-result?id='
+
id
})
},
handleConfirmFindings
(
id
)
{
// 体系审查
handleSystemReviewTestContent
(
status
,
id
)
{
switch
(
status
)
{
// 查看体系审查检查表单
case
'NEW'
:
this
.
$router
.
push
({
path
:
'/processing/confirm-result?id='
+
id
path
:
'/processing/review-form?type=1&id='
+
id
})
break
// 体系审查填写审查问卷
case
'PENDING'
:
this
.
$router
.
push
({
path
:
'/processing/write-check-form?id='
+
id
})
break
// 确认体系审查检查表单
case
'CONFIRM'
:
this
.
$router
.
push
({
path
:
'/processing/confirm-result?type=1&id='
+
id
})
break
}
},
handleTaskContent
(
msg
)
{
if
(
msg
===
'确认车型检验结果'
)
{
// 车型测试
handleCarTypeTestTaskContent
(
status
,
id
)
{
switch
(
status
)
{
// 查看试验方案
case
'NEW'
:
this
.
$router
.
push
({
path
:
'/processing/review-form?type=3&id='
+
id
})
break
// 执行试验方案
case
'PENDING'
:
this
.
$router
.
push
({
path
:
'/processing/vehicle-type'
})
break
// 确认测试结果
case
'CONFIRM'
:
this
.
$router
.
push
({
path
:
'/processing/vehicle-type'
})
break
}
},
getHourDiff
(
time
)
{
// 获取当前时间
var
now
=
new
Date
()
// 设置目标时间(这里为2021年9月30日)
var
targetTime
=
new
Date
(
time
)
// 注意月份从0开始计数,所以8表示九月
// 计算时间差(单位为毫秒)
var
timeDiff
=
Math
.
abs
(
targetTime
-
now
)
// 将时间差转换成小时
return
Math
.
floor
(
timeDiff
/
(
60
*
60
*
1000
))
// 车型检验
handleCarTypeReviewTaskContent
(
status
,
id
)
{
switch
(
status
)
{
// 查看车型检查表单
case
'NEW'
:
this
.
$router
.
push
({
path
:
'/processing/review-form?type=2&id='
+
id
})
break
// 填写车型检查表单
case
'PENDING'
:
this
.
$router
.
push
({
path
:
'/processing/type-check-form?id='
+
id
})
break
// 确认车型检验结果
case
'CONFIRM'
:
this
.
$router
.
push
({
path
:
'/processing/confirm-result?type=2&id='
+
id
})
break
// 查看车型审查记录
case
'FINISH'
:
this
.
$router
.
push
({
path
:
'/processing/vehicle-type'
})
}
},
getHourDiff
,
getDictData
(
options
,
value
)
{
const
item
=
options
.
filter
(
v
=>
v
.
value
===
value
)
if
(
item
.
length
>
0
)
{
return
item
[
0
].
label
}
else
{
return
null
}
}
}
}
...
...
@@ -392,7 +467,7 @@ export default {
color
:
rgb
(
153
153
153
);
flex-direction
:
column
;
flex-wrap
:
nowrap
;
min-width
:
1
11
px
;
min-width
:
1
20
px
;
}
.status-multiple-cell
{
...
...
src/views/processing/write-check-form/components/companyFile.vue
0 → 100644
View file @
6e94a8bc
<
template
>
<el-card>
<div
slot=
"header"
class=
"clearfix"
>
<span>
车企文件信息
</span>
</div>
<el-form
ref=
"fileRef"
:model=
"fileData"
label-width=
"100px"
class=
"file-form-class"
:rules=
"fileRules"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"企业名称"
prop=
"enterpriseName"
>
<el-input
v-model=
"fileData.enterpriseName"
placeholder=
"请输入"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"文件名称"
prop=
"fileName"
>
<el-input
v-model=
"fileData.fileName"
placeholder=
"请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"文件版本"
prop=
"fileVersion"
>
<el-input
v-model=
"fileData.fileVersion"
placeholder=
"请输入"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"发布日期"
prop=
"releaseDate"
>
<el-date-picker
v-model=
"fileData.releaseDate"
type=
"date"
placeholder=
"选择日期"
style=
"width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"文件状态"
prop=
"fileStatus"
>
<el-select
v-model=
"fileData.fileStatus"
placeholder=
"请选择"
style=
"width: 100%"
>
<el-option
v-for=
"item in dict.type.file_status"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"存储位置"
prop=
"storageLocation"
>
<el-input
v-model=
"fileData.storageLocation"
placeholder=
"请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"文件识别号"
prop=
"fileIdentification"
>
<el-input
v-model=
"fileData.fileIdentification"
placeholder=
"请输入"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"文件照片"
prop=
"filePicture"
>
<ImageUpload
v-model=
"fileData.filePicture"
:limit=
"1"
></ImageUpload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button
type=
"primary"
icon=
"el-icon-folder-add"
@
click=
"handleSaveFile"
>
保存车企文件
</el-button
>
</el-card>
</
template
>
<
script
>
export
default
{
dicts
:
[
'file_status'
],
data
()
{
return
{
fileRules
:
{
enterpriseName
:
[
{
required
:
true
,
message
:
'请输入企业名称'
,
trigger
:
'blur'
}
],
fileName
:
[
{
required
:
true
,
message
:
'请输入文件名称'
,
trigger
:
'blur'
}
],
fileVersion
:
[
{
required
:
true
,
message
:
'请输入文件版本'
,
trigger
:
'blur'
}
],
releaseDate
:
[
{
required
:
true
,
message
:
'请选择发布日期'
,
trigger
:
'change'
}
],
fileStatus
:
[
{
required
:
true
,
message
:
'请选择文件状态'
,
trigger
:
'change'
}
],
storageLocation
:
[
{
required
:
true
,
message
:
'请输入存储位置'
,
trigger
:
'blur'
}
],
fileIdentification
:
[
{
required
:
true
,
message
:
'请输入文件识别号'
,
trigger
:
'blur'
}
],
filePicture
:
[
{
required
:
true
,
message
:
'请选择文件照片'
,
trigger
:
'change'
}
]
},
fileData
:
{
enterpriseName
:
''
,
fileStatus
:
''
,
filePicture
:
''
,
storageLocation
:
''
}
}
},
methods
:
{
handleSaveFile
()
{
// vue表单校验
this
.
$refs
.
fileRef
.
validate
(
valid
=>
{
if
(
valid
)
{
console
.
log
(
'ddd'
)
}
})
}
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.file-form-class
{
::v-deep
.el-form-item
{
margin-bottom
:
20px
;
}
}
</
style
>
src/views/processing/write-check-form/components/sceneDialog.vue
0 → 100644
View file @
6e94a8bc
<
template
>
<el-dialog
title=
"新增场景对话框"
:visible
.
sync=
"dialogManger.dialogVisible"
width=
"35%"
append-to-body
:close-on-click-modal=
"false"
:close-on-press-escape=
"false"
:before-close=
"handleSceneClose"
>
<div
class=
"file-prompt"
>
<div>
<i
class=
"el-icon-info"
/>
新增场景,需要组织评审,评审通过后新增场景自动进入场景库。
</div>
</div>
<el-form
ref=
"sceneForm"
:model=
"sceneForm"
:rules=
"sceneRules"
label-width=
"80px"
class=
"scene-form"
>
<el-form-item
label=
"评审类型"
prop=
"reviewType"
>
<!-- 下拉框 -->
<el-select
v-model=
"sceneForm.reviewType"
placeholder=
"请选择评审类型"
style=
"width: 100%"
>
<el-option
v-for=
"item in reviewTypeOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"场景分类"
prop=
"sceneClassification"
>
<el-select
v-model=
"sceneForm.sceneClassification"
placeholder=
"请选择评审类型"
style=
"width: 100%"
>
<el-option
v-for=
"item in reviewTypeOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"场景内容"
prop=
"sceneContent"
>
<el-input
v-model=
"sceneForm.sceneContent"
maxlength=
"100"
show-word-limit
type=
"textarea"
/>
</el-form-item>
<el-form-item
label=
"评审人员"
prop=
"assessor"
>
<div>
组长-xxx
</div>
<div>
组员-xxx、xxx、xxx
</div>
</el-form-item>
<el-form-item
label=
"备注信息"
prop=
"remark"
>
<el-input
v-model=
"sceneForm.remark"
maxlength=
"100"
show-word-limit
type=
"textarea"
/>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"handleSceneClose()"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"handleSaveNewScene()"
>
确 定
</el-button>
</span>
</el-dialog>
</
template
>
<
script
>
export
default
{
dicts
:
[
'file_status'
],
props
:
{
dialogManger
:
{
type
:
Object
,
default
()
{
return
{
dialogVisible
:
false
}
}
}
},
data
()
{
return
{
sceneForm
:
{},
sceneRules
:
{
reviewType
:
[
{
required
:
true
,
message
:
'请选择评审类型'
,
trigger
:
'change'
}
],
sceneClassification
:
[
{
required
:
true
,
message
:
'请选择场景分类'
,
trigger
:
'change'
}
],
sceneContent
:
[
{
required
:
true
,
message
:
'请输入场景内容'
,
trigger
:
'blur'
}
]
},
reviewTypeOptions
:
[]
}
},
methods
:
{
// 新增场景对话框关闭时触发的回调函数
handleSceneClose
()
{
this
.
dialogManger
.
dialogVisible
=
false
this
.
$refs
.
sceneForm
.
resetFields
()
},
/**
* 保存新场景
*/
handleSaveNewScene
()
{
// vue表单校验vue表单校验
this
.
$refs
.
sceneForm
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
handleSceneClose
()
}
})
}
}
}
</
script
>
src/views/processing/write-check-form/components/sceneView.vue
0 → 100644
View file @
6e94a8bc
<
template
>
<el-dialog
title=
"符合场景"
:visible
.
sync=
"dialogManger.dialogVisible"
width=
"45%"
append-to-body
:close-on-click-modal=
"false"
:close-on-press-escape=
"false"
:before-close=
"handleSceneClose"
>
<div
class=
"match-scene"
>
<div
v-for=
"(scene, key) in dialogManger.data"
:key=
"key"
>
{{
scene
.
text
}}
<template
v-if=
"scene.operation"
>
{{
scene
.
operation
}}
</
template
>
</div>
</div>
<el-button
class=
"label-btn mt10"
size=
"mini"
type=
"warning"
@
click=
"handleAddScene"
>
<span>
新增场景
</span>
</el-button>
<!-- 新增场景对话框 -->
<scene-dialog
:dialog-manger=
"sceneManger"
></scene-dialog
></el-dialog>
</template>
<
script
>
import
sceneDialog
from
'./sceneDialog.vue'
export
default
{
components
:
{
'scene-dialog'
:
sceneDialog
},
props
:
{
dialogManger
:
{
type
:
Object
,
default
()
{
return
{
dialogVisible
:
false
,
data
:
{}
}
}
}
},
data
()
{
return
{
sceneManger
:
{
dialogVisible
:
false
}
}
},
methods
:
{
// 新增场景
handleAddScene
()
{
this
.
sceneManger
.
dialogVisible
=
true
},
handleSceneClose
()
{
this
.
dialogManger
.
dialogVisible
=
false
}
}
}
</
script
>
src/views/processing/write-check-form/index.vue
View file @
6e94a8bc
...
...
@@ -6,7 +6,6 @@
<el-button
icon=
"el-icon-back"
class=
"back-btn"
@
click=
"handleBack"
>
返回
</el-button>
<el-button
class=
"back-btn"
>
意见表
</el-button>
</div>
<div
class=
"main-content"
>
<div
class=
"prompt-message"
>
...
...
@@ -15,6 +14,10 @@
readNumber
}}
条,未完成
{{
model
.
detailsList
.
length
-
readNumber
}}
条
</span
>
<span
v-if=
"taskModel.warnTasks"
class=
"scene-error"
><i
class=
"el-icon-warning-outline"
></i>
有
{{
taskModel
.
warnTasks
.
length
}}
条场景变更待处理
</span
>
<!--
<span
class=
"center-text"
>
有 3 条场景变更待处理
</span>
-->
<el-checkbox
v-model=
"checked"
>
仅显示未完成页面
</el-checkbox>
</div>
...
...
@@ -22,14 +25,14 @@
<!-- 步骤条 -->
<el-col
:span=
"2"
>
<div
class=
"left-content"
style=
"height: 300px; width: 110px"
>
<div
v-for=
"(item, index) in
model.
detailsList"
:key=
"index"
>
<div
v-for=
"(item, index) in detailsList"
:key=
"index"
>
<div
:class=
"
{
'exclamation-point':
true
,
'no-exclamation-point':
false
'exclamation-point':
item.warn
,
'no-exclamation-point':
!item.warn
}"
>
<div
v-show=
"
true
"
class=
"exclamation"
>
!
</div>
<div
v-show=
"
item.warn
"
class=
"exclamation"
>
!
</div>
</div>
<div
class=
"no-select-circle"
...
...
@@ -68,9 +71,15 @@
<span>
{{
taskModel
.
reviewKeypointText
}}
</span>
</el-form-item>
<el-form-item
label=
"审查细则"
>
<i
v-if=
"!taskModel.warn"
class=
"scene-button"
@
click=
"sceneView(taskModel.reviewSceneList)"
>
场
</i
>
<span>
{{
taskModel
.
text
}}
</span>
</el-form-item>
<el-form-item
:label=
"'符合场景'"
>
<el-form-item
v-if=
"taskModel.warn"
:label=
"'符合场景'"
>
<template
slot=
"label"
>
<span>
符合场景
</span>
<el-button
...
...
@@ -87,8 +96,31 @@
v-for=
"(scene, key) in taskModel.reviewSceneList"
:key=
"key"
>
<
template
v-if=
"scene.operation && scene.operation === 'DELETE'"
>
<del>
{{
scene
.
text
}}
</del>
</
template
>
<
template
v-else
>
{{
scene
.
text
}}
</
template
>
<
template
v-if=
"scene.operation && scene.operation === 'ADD'"
>
<span
class=
"add-scene"
>
(新增)
</span>
</
template
>
<
template
v-if=
"scene.operation && scene.operation === 'DELETE'"
>
<span
class=
"del-scene"
>
(删除)
</span>
</
template
>
</div>
<el-button
class=
"confirm-button"
type=
"primary"
plain=
""
>
已处理
</el-button
>
</div>
</el-form-item>
<el-form-item
label=
"审查结果"
prop=
"passed"
>
...
...
@@ -97,15 +129,27 @@
<el-radio
:label=
"0"
>
不符合
</el-radio>
</el-radio-group>
</el-form-item>
<
!-- <
el-form-item label="相关记录">
<el-form-item
label=
"相关记录"
>
<el-row>
<el-col
:span=
"8"
>
<div>
文件名称
<el-
inpu
t
<el-
selec
t
v-model=
"addData.fileName"
filterable
allow-create
default-first-option
placeholder=
"请输入文件名称"
/>
@
change=
"fileNameChange"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
</el-col>
<el-col
:span=
"8"
:offset=
"1"
>
...
...
@@ -118,121 +162,16 @@
</div>
</el-col>
</el-row>
//文件第一次提示
<div class="file-prompt">
<!-- //文件第一次提示 -->
<div
class=
"file-prompt
mt10
"
>
<div>
<i
class=
"el-icon-info"
></i
>
该文件第一次出现,请维护如下相关信息
</div>
</div>
//车企文件信息
<el-card>
<div slot="header" class="clearfix">
<span>车企文件信息</span>
</div>
<el-form
ref="fileRef"
:model="fileData"
label-width="100px"
class="file-form-class"
:rules="fileRules"
>
<el-row>
<el-col :span="12">
<el-form-item label="企业名称" prop="enterpriseName">
<el-input
v-model="fileData.enterpriseName"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文件名称" prop="fileName">
<el-input
v-model="fileData.fileName"
placeholder="请输入"
></el-input>
<!-- //车企文件信息 -->
<company-file></company-file>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="文件版本" prop="fileVersion">
<el-input
v-model="fileData.fileVersion"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布日期" prop="releaseDate">
<el-date-picker
v-model="fileData.releaseDate"
type="date"
placeholder="选择日期"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="文件状态" prop="fileStatus">
<el-select
v-model="fileData.fileStatus"
placeholder="请选择"
style="width: 100%"
>
<el-option
v-for="item in dict.type.file_status"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="存储位置" prop="storageLocation">
<el-input
v-model="fileData.storageLocation"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="文件识别号"
prop="fileIdentification"
>
<el-input
v-model="fileData.fileIdentification"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文件照片" prop="filePicture">
<ImageUpload
v-model="fileData.filePicture"
:limit="1"
></ImageUpload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button
type="primary"
icon="el-icon-folder-add"
@click="handleSaveFile"
>保存车企文件</el-button
>
</el-card>
</el-form-item> -->
<el-form-item
label=
"条目填写人"
>
<span>
{{ name }}
</span>
</el-form-item>
...
...
@@ -241,33 +180,42 @@
</el-row>
</div>
<div
class=
"bottom-btn"
>
<el-button
type=
"
warning"
@
click=
"submitQuestionnaire(1)"
>
保存当前
边界
<el-button
type=
"
primary"
plain
@
click=
"submitQuestionnaire(1)"
>
保存当前
条目
</el-button>
<el-button
type=
"primary"
@
click=
"submitQuestionnaire(2)"
>
提交表格
</el-button
>
</div>
</el-card>
<!-- 场景查看对话框 -->
<scene-view
:dialog-manger=
"sceneViewManger"
></scene-view>
<!-- 新增场景对话框 -->
<s
ence-dialog
:dialog-manger=
"senceManger"
></senc
e-dialog>
<s
cene-dialog
:dialog-manger=
"sceneManger"
></scen
e-dialog>
</div>
</template>
<
script
>
import
{
taskDetail
,
reviewDetailsSubmit
}
from
'@/api/task/task'
import
senceDialog
from
'./components/senceDialog.vue'
import
sceneView
from
'./components/sceneView.vue'
import
companyFile
from
'./components/companyFile.vue'
import
{
mapGetters
}
from
'vuex'
import
sceneDialog
from
'./components/sceneDialog.vue'
export
default
{
dicts
:
[
'file_status'
],
components
:
{
'sence-dialog'
:
senceDialog
'scene-dialog'
:
sceneDialog
,
'scene-view'
:
sceneView
,
'company-file'
:
companyFile
},
data
()
{
return
{
s
enc
eManger
:
{
s
cen
eManger
:
{
dialogVisible
:
false
},
sceneViewManger
:
{
dialogVisible
:
false
,
data
:
{}
},
form
:
{
passed
:
null
},
...
...
@@ -279,35 +227,10 @@ export default {
taskModel
:
{},
activeModel
:
0
,
checked
:
false
,
detailsList
:
[],
rules
:
{
passed
:
[{
required
:
true
,
message
:
'请选择审查结果'
,
trigger
:
'blur'
}]
},
fileRules
:
{
enterpriseName
:
[
{
required
:
true
,
message
:
'请输入企业名称'
,
trigger
:
'blur'
}
],
fileName
:
[
{
required
:
true
,
message
:
'请输入文件名称'
,
trigger
:
'blur'
}
],
fileVersion
:
[
{
required
:
true
,
message
:
'请输入文件版本'
,
trigger
:
'blur'
}
],
releaseDate
:
[
{
required
:
true
,
message
:
'请选择发布日期'
,
trigger
:
'change'
}
],
fileStatus
:
[
{
required
:
true
,
message
:
'请选择文件状态'
,
trigger
:
'change'
}
],
storageLocation
:
[
{
required
:
true
,
message
:
'请输入存储位置'
,
trigger
:
'blur'
}
],
fileIdentification
:
[
{
required
:
true
,
message
:
'请输入文件识别号'
,
trigger
:
'blur'
}
],
filePicture
:
[
{
required
:
true
,
message
:
'请选择文件照片'
,
trigger
:
'change'
}
]
},
// TODO 删除
checkedTwo
:
false
,
checkedThree
:
false
,
...
...
@@ -316,14 +239,11 @@ export default {
fileName
:
''
,
chapterEntry
:
''
},
fileData
:
{
enterpriseName
:
''
,
fileStatus
:
''
,
filePicture
:
''
,
storageLocation
:
''
},
changeTask
:
[],
changeTaskDetails
:
[],
value1
:
''
,
taskId
:
''
taskId
:
''
,
options
:
[]
}
},
...
...
@@ -340,30 +260,94 @@ export default {
},
...
mapGetters
([
'name'
])
},
watch
:
{
checked
(
newV
)
{
if
(
newV
)
{
this
.
detailsList
=
this
.
model
.
detailsList
.
filter
(
item
=>
{
return
!
item
.
result
||
item
.
result
.
passed
===
null
})
}
else
{
this
.
detailsList
=
this
.
model
.
detailsList
}
this
.
handleCircle
(
0
)
}
},
mounted
()
{
this
.
taskId
=
this
.
$route
.
query
.
id
this
.
getTask
()
},
methods
:
{
fileNameChange
(
value
)
{
console
.
log
(
value
)
},
getTask
()
{
taskDetail
({
taskId
:
this
.
taskId
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
this
.
model
=
res
.
data
if
(
this
.
model
.
reviewSceneChangeTasks
&&
this
.
model
.
reviewSceneChangeTasks
.
length
)
{
this
.
sceneChange
(
this
.
model
.
reviewSceneChangeTasks
)
}
this
.
detailsList
=
this
.
model
.
detailsList
this
.
handleCircle
(
0
)
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
)
}
})
},
/**
* 场景变更任务处理
*/
sceneChange
(
tasks
)
{
this
.
changeTask
=
[]
this
.
changeTaskDetails
=
[]
tasks
.
map
(
task
=>
{
this
.
changeTask
.
push
(
task
.
detailsId
)
this
.
changeTaskDetails
.
push
(
task
)
})
this
.
model
.
detailsList
.
map
(
item
=>
{
const
index
=
this
.
changeTask
.
indexOf
(
item
.
id
)
if
(
index
!==
-
1
)
{
item
.
warn
=
true
item
.
warnTasks
=
[]
item
.
warnTasks
.
push
(
this
.
changeTaskDetails
[
index
])
const
warnTask
=
this
.
changeTaskDetails
[
index
]
item
.
reviewSceneList
.
map
(
scene
=>
{
if
(
scene
.
id
===
warnTask
.
reviewSceneId
)
{
scene
.
operation
=
warnTask
.
operation
===
'ADD'
?
'ADD'
:
'DELETE'
}
})
}
else
{
item
.
warn
=
false
}
})
},
/**
* 新增场景
*/
handleAddScene
()
{
this
.
sceneManger
.
dialogVisible
=
true
},
/**
* 查看场景
* @param {*} data
*/
sceneView
(
data
)
{
this
.
sceneViewManger
.
dialogVisible
=
true
this
.
sceneViewManger
.
data
=
data
},
/**
* 点击左侧圆圈触发的回调函数
* @param item 圆圈对象
*/
handleCircle
(
index
)
{
this
.
activeModel
=
index
this
.
taskModel
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
model
.
detailsList
[
index
]))
if
(
this
.
detailsList
.
length
)
{
this
.
taskModel
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
detailsList
[
index
]))
if
(
this
.
taskModel
.
result
)
{
this
.
form
=
{
...
...
@@ -378,15 +362,14 @@ export default {
taskId
:
this
.
taskId
}
}
}
else
{
this
.
taskModel
=
{}
}
},
// 返回
handleBack
()
{
this
.
$router
.
go
(
-
1
)
},
// 新增场景
handleAddScene
()
{
this
.
senceManger
.
dialogVisible
=
true
},
// 保存当前条目
submitQuestionnaire
(
type
)
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
...
...
@@ -405,14 +388,6 @@ export default {
})
}
})
},
handleSaveFile
()
{
// vue表单校验
this
.
$refs
.
fileRef
.
validate
(
valid
=>
{
if
(
valid
)
{
console
.
log
(
'ddd'
)
}
})
}
}
}
...
...
@@ -539,30 +514,17 @@ export default {
}
.right-content
{
.file-form-class
{
::v-deep
.el-form-item
{
margin-bottom
:
20px
;
}
}
.match-scene
{
display
:
flex
;
position
:
relative
;
flex-direction
:
column
;
background-color
:
#fafafa
;
padding
:
5px
;
}
.file-prompt
{
margin
:
10px
0
10px
0
;
background-color
:
#ebf5ff
;
div
{
padding-left
:
10px
;
i
{
color
:
#409eff
;
margin-right
:
10px
;
}
.confirm-button
{
position
:
absolute
;
bottom
:
10px
;
right
:
10px
;
}
}
}
...
...
@@ -575,22 +537,6 @@ export default {
}
}
.file-prompt
{
margin
:
0
0
10px
0
;
padding
:
10px
;
background-color
:
#ebf5ff
;
div
{
font-size
:
12px
;
padding-left
:
10px
;
i
{
color
:
#409eff
;
margin-right
:
10px
;
}
}
}
.label-btn
{
width
:
60px
;
...
...
@@ -600,4 +546,21 @@ export default {
right
:
9px
;
}
}
.scene-button
{
background-color
:
rgba
(
87
,
208
,
146
);
color
:
white
;
border-radius
:
100%
;
padding
:
5px
;
cursor
:
pointer
;
margin-right
:
10px
;
}
.add-scene
{
color
:
red
;
}
.del-scene
{
color
:
#1891ff
;
}
</
style
>
src/views/setting/company/index.vue
View file @
6e94a8bc
...
...
@@ -136,6 +136,7 @@
>
</el-table-column>
<el-table-column
v-if=
"view == 1"
label=
"操作"
align=
"left"
min-width=
"160"
...
...
@@ -192,6 +193,7 @@ export default {
return
{
listUrl
:
'/system/enterprise/list'
,
showSearch
:
true
,
view
:
''
,
tableData
:
[],
dialogManger
:
{
dialogVisible
:
false
,
...
...
@@ -215,6 +217,9 @@ export default {
}
}
},
created
()
{
this
.
view
=
this
.
$route
.
query
.
view
},
methods
:
{
handleDelete
(
id
)
{
this
.
$modal
...
...
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