Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
bdc
/
bdcdj-web
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
2c693a81
authored
2022-12-28 17:56:30 +0800
by
蔡俊立
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'master' of
http://yun.pashanhoo.com:9090/bdc/bdcdj-web
2 parents
6da85cd8
5846b42b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
527 additions
and
303 deletions
src/views/workflow/components/stop.vue
src/views/workflow/components/th.vue
src/views/workflow/mixin/index.js
src/views/workflow/workFrame.vue
src/views/workflow/workFrameView.vue
src/views/ywbl/dbx/dbx.vue
src/views/workflow/components/stop.vue
View file @
2c693a8
<
template
>
<div
class=
"from-clues"
>
<div
class=
"invalid-title"
>
<i
class=
"el-icon-question invalid-icon"
></i>
<div
class=
"invalid-body"
>
您是否确定终止该业务办理?
</div>
<i
class=
"el-icon-question invalid-icon"
></i>
<div
class=
"invalid-body"
>
您是否确定终止该业务办理?
</div>
</div>
<div
class=
"invalid-reson"
>
终止原因:
</div>
<el-input
v-model=
"stopMessage"
placeholder=
"请输入终止原因"
type=
"textarea"
:rows=
"4"
></el-input>
<el-button
style=
"float:right"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
style=
"float:right"
>
退件
</el-button>
<el-input
v-model=
"stopMessage"
placeholder=
"请输入终止原因"
type=
"textarea"
:rows=
"4"
></el-input>
<el-button
style=
"float: right"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
style=
"float: right"
>
退件
</el-button
>
</div>
</
template
>
<
script
>
import
{
stopTask
}
from
"@/api/fqsq.js"
import
{
stopTask
}
from
"@/api/fqsq.js"
;
export
default
{
props
:
{
formData
:
{
type
:
Object
,
default
:
{}
}
default
:
{}
,
}
,
},
data
()
{
data
()
{
return
{
stopMessage
:
''
}
stopMessage
:
""
,
}
;
},
methods
:
{
onSubmit
()
{
onSubmit
()
{
stopTask
({
bsmSlsq
:
this
.
formData
.
bsmSlsq
,
bestepid
:
this
.
formData
.
bestepid
,
stopMessage
:
this
.
stopMessage
}).
then
(
res
=>
{
this
.
$message
.
success
(
'终止成功'
)
setTimeout
(()
=>
{
window
.
opener
.
location
.
reload
();
//刷新父窗口
window
.
close
();
this
.
$emit
(
'input'
,
false
)
},
1000
);
})
bsmSlsq
:
this
.
formData
.
bsmSlsq
,
bestepid
:
this
.
formData
.
bestepid
,
stopMessage
:
this
.
stopMessage
,
}).
then
((
res
)
=>
{
this
.
$message
.
success
(
"终止成功"
);
setTimeout
(()
=>
{
// window.opener.location.reload(); //刷新父窗口
if
(
window
.
opener
&&
window
.
opener
.
getBpageList
)
{
window
.
opener
.
getBpageList
();
}
else
{
window
.
opener
.
frames
[
0
].
getBpageList
();
}
window
.
close
();
this
.
$emit
(
"input"
,
false
);
},
1000
);
});
},
}
}
}
,
}
;
</
script
>
<
style
scoped
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
.invalid-title
{
display
:
flex
;
align-content
:
center
;
display
:
flex
;
align-content
:
center
;
.invalid-icon
{
color
:
rgb
(
254
,
148
,
0
);
font-size
:
34px
;
margin-right
:
10px
;
}
.invalid-icon
{
color
:
rgb
(
254
,
148
,
0
);
font-size
:
34px
;
margin-right
:
10px
;
}
.invalid-body
{
line-height
:
40px
;
margin-bottom
:
10px
;
}
.invalid-body
{
line-height
:
40px
;
margin-bottom
:
10px
;
}
}
.invalid-reson
{
margin-bottom
:
10px
;
margin-bottom
:
10px
;
}
.dialog-footer
{
margin-top
:
10px
;
display
:
flex
;
justify-content
:
flex-end
;
margin-top
:
10px
;
display
:
flex
;
justify-content
:
flex-end
;
}
</
style
>
...
...
src/views/workflow/components/th.vue
View file @
2c693a8
...
...
@@ -4,21 +4,37 @@
<div
class=
"from-clues-header"
>
<div
class=
"title"
>
请选择要退回到的环节:
</div>
<el-form
ref=
"queryForm"
label-width=
"90px"
>
<ul
style=
"margin-bottom:15px"
>
<li
v-for=
"(item,index) in dataList"
class=
"listDetail"
:key=
"index"
@
click=
"changeSelectItem(item)"
>
<ul
style=
"margin-bottom: 15px"
>
<li
v-for=
"(item, index) in dataList"
class=
"listDetail"
:key=
"index"
@
click=
"changeSelectItem(item)"
>
<p
class=
"icon"
>
<el-radio
v-model=
"selectActivity"
:label=
"item.activityId"
@
change=
"changeSelectItem(item)"
></el-radio>
<el-radio
v-model=
"selectActivity"
:label=
"item.activityId"
@
change=
"changeSelectItem(item)"
></el-radio>
</p>
<p>
{{
item
.
activityName
}}
</p>
<p
v-for=
"(child, childIndex) in item.userInfos"
:key=
"childIndex"
>
{{
child
.
name
}}
</p>
<p>
{{
item
.
activityName
}}
</p>
<p
v-for=
"(child,childIndex) in item.userInfos"
:key=
"childIndex"
>
{{
child
.
name
}}
</p>
</li>
</ul>
<div
class=
"title"
>
退回意见:
</div>
<el-form-item>
<el-input
class=
"textArea"
type=
"textarea"
v-model=
"outstepopinion"
placeholder=
"请输入退回意见"
></el-input>
<el-input
class=
"textArea"
type=
"textarea"
v-model=
"outstepopinion"
placeholder=
"请输入退回意见"
></el-input>
</el-form-item>
<el-form-item>
<el-button
style=
"float:right"
@
click=
"cancelBack"
>
取消
</el-button>
<el-button
style=
"float:right"
@
click=
"cancelBack"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
style=
"float:right"
>
退回
</el-button>
</el-form-item>
</el-form>
...
...
@@ -27,57 +43,65 @@
</
template
>
<
script
>
import
{
getTaskBackNode
,
sendBackTask
}
from
"@/api/fqsq.js"
import
{
popupCacel
}
from
"@/utils/popup.js"
;
export
default
{
props
:
{
formData
:
{
type
:
Object
,
default
:
{}
}
default
:
{}
,
}
,
},
data
()
{
data
()
{
return
{
selectActivity
:
''
,
selectActivity
:
""
,
dataList
:
[],
outstepopinion
:
''
,
selectItem
:
{}
}
outstepopinion
:
""
,
selectItem
:
{}
,
}
;
},
created
()
{
created
()
{
this
.
getBackNode
();
},
methods
:
{
onSubmit
()
{
onSubmit
()
{
this
.
selectItem
.
outstepopinion
=
this
.
outstepopinion
;
sendBackTask
({
bsmSlsq
:
this
.
formData
.
bsmSlsq
,
backNodeList
:
[
this
.
selectItem
]
}).
then
(
res
=>
{
this
.
$message
.
success
(
'退回成功'
)
setTimeout
(()
=>
{
window
.
opener
.
location
.
reload
();
//刷新父窗口
window
.
close
();
this
.
$emit
(
'input'
,
false
)
},
1000
);
})
backNodeList
:
[
this
.
selectItem
],
}).
then
((
res
)
=>
{
this
.
$message
.
success
(
"退回成功"
);
setTimeout
(()
=>
{
// window.opener.location.reload(); //刷新父窗口
if
(
window
.
opener
&&
window
.
opener
.
getBpageList
)
{
window
.
opener
.
getBpageList
();
}
else
{
window
.
opener
.
frames
[
0
].
getBpageList
();
}
window
.
close
();
this
.
$emit
(
"input"
,
false
);
},
1000
);
});
},
changeSelectItem
(
item
)
{
this
.
selectItem
=
item
this
.
selectActivity
=
item
.
activityId
changeSelectItem
(
item
)
{
this
.
selectItem
=
item
;
this
.
selectActivity
=
item
.
activityId
;
},
//获取可回退环节信息
getBackNode
()
{
getTaskBackNode
(
this
.
formData
).
then
(
res
=>
{
getBackNode
()
{
getTaskBackNode
(
this
.
formData
).
then
(
(
res
)
=>
{
if
(
res
.
code
==
200
)
{
this
.
dataList
=
res
.
result
if
(
res
.
result
)
{
this
.
selectActivity
=
res
.
result
[
0
].
activityId
this
.
selectItem
=
res
.
result
[
0
]
this
.
dataList
=
res
.
result
;
if
(
res
.
result
)
{
this
.
selectActivity
=
res
.
result
[
0
].
activityId
;
this
.
selectItem
=
res
.
result
[
0
]
;
}
}
})
})
;
},
cancelBack
(){
popupCacel
();
}
...
...
@@ -108,7 +132,7 @@ export default {
}
}
.title
{
.title
{
margin-bottom
:
10px
;
}
...
...
@@ -117,7 +141,7 @@ export default {
min-height
:
90px
!important
;
}
}
/
deep
/
.el-radio
.el-radio__label
{
/
deep
/
.el-radio
.el-radio__label
{
display
:
none
;
}
</
style
>
...
...
src/views/workflow/mixin/index.js
View file @
2c693a8
...
...
@@ -12,7 +12,7 @@ import {
getNextLinkInfo
,
}
from
"@/api/fqsq.js"
;
export
default
{
data
()
{
data
()
{
return
{
//是否开启材料分屏
splitScreen
:
false
,
...
...
@@ -28,13 +28,13 @@ export default {
batchButtonName
:
''
,
}
},
mounted
()
{
mounted
()
{
this
.
flowInitParam
();
this
.
loadBdcdylist
();
},
methods
:
{
//读取申请单元信息
loadBdcdylist
()
{
loadBdcdylist
()
{
var
formdata
=
new
FormData
();
formdata
.
append
(
"bsmSlsq"
,
this
.
bsmSlsq
);
formdata
.
append
(
"bestepid"
,
this
.
bestepid
);
...
...
@@ -56,7 +56,7 @@ export default {
});
},
//批量按钮判断
judgeBatchShow
()
{
judgeBatchShow
()
{
this
.
showBatch
=
false
;
if
(
this
.
unitData
.
length
>
1
)
{
let
qllx
=
this
.
$route
.
query
.
sqywbm
.
substring
(
0
,
3
);
...
...
@@ -75,7 +75,7 @@ export default {
}
},
//加载流程初始参数
flowInitParam
()
{
flowInitParam
()
{
var
formdata
=
new
FormData
();
formdata
.
append
(
"bsmSlsq"
,
this
.
bsmSlsq
);
formdata
.
append
(
"bestepid"
,
this
.
bestepid
);
...
...
@@ -87,7 +87,7 @@ export default {
});
},
//流程环节操作按钮
operation
(
item
)
{
operation
(
item
)
{
//按钮 B0:选择不动产单元 B1:流程图 B2:材料分屏 B3:材料导入 B4:登记簿 B5:证书预览 B6:打印申请书 B7:证书领取 B8:楼盘表 B9:登簿
//操作按钮 登簿:record 转件:transfer 退回:back 退出:signout
let
that
=
this
;
...
...
@@ -227,7 +227,7 @@ export default {
}
},
//发送下一个环节
sendToNext
(
obj
)
{
sendToNext
(
obj
)
{
const
h
=
this
.
$createElement
;
this
.
$msgbox
({
title
:
"您确定转出吗?1"
,
...
...
@@ -251,7 +251,12 @@ export default {
if
(
res
.
code
===
200
)
{
instance
.
confirmButtonLoading
=
false
;
this
.
$message
.
success
(
"转件成功"
);
window
.
opener
.
location
.
reload
();
//刷新父窗口
// window.opener.location.reload(); //刷新父窗口
if
(
window
.
opener
&&
window
.
opener
.
getBpageList
)
{
window
.
opener
.
getBpageList
();
}
else
{
window
.
opener
.
frames
[
0
].
getBpageList
();
}
window
.
close
();
this
.
$emit
(
"input"
,
false
);
}
else
{
...
...
@@ -271,7 +276,7 @@ export default {
});
});
},
sendToEnd
()
{
sendToEnd
()
{
let
that
=
this
const
h
=
this
.
$createElement
;
this
.
$msgbox
({
...
...
@@ -291,7 +296,12 @@ export default {
instance
.
confirmButtonLoading
=
false
;
that
.
$message
.
success
(
"转件成功"
);
localStorage
.
setItem
(
'transfer'
,
true
)
window
.
opener
.
location
.
reload
();
//刷新父窗口
// window.opener.location.reload(); //刷新父窗口
if
(
window
.
opener
&&
window
.
opener
.
getBpageList
)
{
window
.
opener
.
getBpageList
();
}
else
{
window
.
opener
.
frames
[
0
].
getBpageList
();
}
window
.
close
();
that
.
$emit
(
"input"
,
false
);
}
else
{
...
...
@@ -312,7 +322,7 @@ export default {
})
},
//批量操作
handleBatchDel
()
{
handleBatchDel
()
{
let
that
=
this
;
this
.
$popup
(
"批量删除"
,
"workflow/components/batchDel"
,
{
width
:
"50%"
,
...
...
@@ -327,7 +337,7 @@ export default {
}
})
},
handleChange
(
file
)
{
handleChange
(
file
)
{
var
formdata
=
new
FormData
();
formdata
.
append
(
"file"
,
file
.
raw
);
formdata
.
append
(
"bsmSldy"
,
this
.
currentSelectProps
.
bsmSldy
);
...
...
@@ -341,7 +351,7 @@ export default {
})
},
// 上传
beforeUpload
(
file
)
{
beforeUpload
(
file
)
{
return
true
;
},
}
...
...
src/views/workflow/workFrame.vue
View file @
2c693a8
...
...
@@ -4,14 +4,22 @@
<div
class=
"topButton"
>
<!-- 左侧业务功能按钮 -->
<ul>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in leftButtonList"
:key=
"index"
>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in leftButtonList"
:key=
"index"
>
<svg-icon
class=
"icon"
:icon-class=
"item.icon"
/>
<span
class=
"iconName"
>
{{
item
.
name
}}
</span>
</li>
</ul>
<!-- 右侧流程按钮 -->
<ul>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in rightButtonList"
:key=
"index"
>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in rightButtonList"
:key=
"index"
>
<svg-icon
class=
"icon"
:icon-class=
"item.icon"
/>
<span
class=
"iconName"
>
{{
item
.
name
}}
</span>
</li>
...
...
@@ -22,7 +30,12 @@
<div
class=
"containerFrame"
>
<!-- 左侧菜单栏 -->
<div
class=
"leftmenu"
:class=
"
{ 'animation-map-drawer': isShowdrawer }">
<el-menu
:default-active=
"activeIndex"
@
select=
"batchUnitClick"
class=
"title-batch"
v-if=
"showBatch"
>
<el-menu
:default-active=
"activeIndex"
@
select=
"batchUnitClick"
class=
"title-batch"
v-if=
"showBatch"
>
<el-menu-item
index=
"-1"
key=
"-1"
class=
"menus"
>
<div>
{{
batchButtonName
}}
</div>
</el-menu-item>
...
...
@@ -30,28 +43,50 @@
<div
v-if=
"this.isShowdrawer"
>
<div
class=
"title"
>
申请单元列表(
{{
unitData
.
length
}}
)
<el-button
type=
"text"
class=
"batchDel"
@
click=
"handleBatchDel"
v-if=
"unitData.length > 1"
>
批量删除
</el-button>
<el-button
type=
"text"
class=
"batchDel"
@
click=
"handleBatchDel"
v-if=
"unitData.length > 1"
>
批量删除
</el-button
>
</div>
<el-menu
:default-active=
"activeIndex"
@
select=
"unitClick"
>
<el-menu-item
v-for=
"(item, index) in unitData"
:index=
"index.toString()"
:key=
"index"
>
<el-menu-item
v-for=
"(item, index) in unitData"
:index=
"index.toString()"
:key=
"index"
>
<div>
<p>
{{
item
.
bdcdyh
}}
</p>
<p
class=
"title-detail"
>
{{
item
.
zl
}}
</p>
</div>
<i
class=
"el-icon-delete"
v-if=
"unitData.length > 1"
@
click
.
stop=
"handleDel(item)"
></i>
<i
class=
"el-icon-delete"
v-if=
"unitData.length > 1"
@
click
.
stop=
"handleDel(item)"
></i>
</el-menu-item>
</el-menu>
</div>
<div
class=
"map-drawer-click map-drawer"
v-if=
"!isShowdrawer"
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
">
</div>
<div
class=
"map-drawer-expand map-drawer"
v-else
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
">
</div>
<div
class=
"map-drawer-click map-drawer"
v-if=
"!isShowdrawer"
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
"
>
</div>
<div
class=
"map-drawer-expand map-drawer"
v-else
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
"
>
</div>
</div>
<div
class=
"leftCon"
>
<!-- 分屏左侧预览 -->
...
...
@@ -61,45 +96,78 @@
<!-- 表单内容区域 -->
<div
class=
"rightContainer"
>
<el-tabs
v-model=
"tabName"
:before-leave=
"beforeLeave"
>
<el-tab-pane
:label=
"item.name"
:name=
"item.value"
v-for=
"item in tabList"
:key=
"item.value"
>
<el-tab-pane
:label=
"item.name"
:name=
"item.value"
v-for=
"item in tabList"
:key=
"item.value"
>
</el-tab-pane>
</el-tabs>
<component
:key=
"fresh"
:is=
"componentTag"
v-bind=
"currentSelectProps"
/>
<component
:key=
"fresh"
:is=
"componentTag"
v-bind=
"currentSelectProps"
/>
</div>
</div>
</div>
<!-- 打印模板需要此模块 -->
<object
id=
"LODOP_OB"
classid=
"clsid:2105C259-1E0C-4534-8141-A753534CB4CA"
v-show=
"false"
>
<embed
id=
"LODOP_EM"
type=
"application/x-print-lodop"
width=
820
height=
450
pluginspage=
"install_lodop32.exe"
/>
<object
id=
"LODOP_OB"
classid=
"clsid:2105C259-1E0C-4534-8141-A753534CB4CA"
v-show=
"false"
>
<embed
id=
"LODOP_EM"
type=
"application/x-print-lodop"
width=
"820"
height=
"450"
pluginspage=
"install_lodop32.exe"
/>
</object>
<el-upload
class=
"fileUpdate"
action=
""
:show-file-list=
"false"
multiple
:auto-upload=
"false"
:on-change=
"handleChange"
:before-upload=
"beforeUpload"
>
<el-button
id=
"cldr"
icon=
"el-icon-upload"
type=
"primary"
v-show=
"false"
>
上传
</el-button>
<el-upload
class=
"fileUpdate"
action=
""
:show-file-list=
"false"
multiple
:auto-upload=
"false"
:on-change=
"handleChange"
:before-upload=
"beforeUpload"
>
<el-button
id=
"cldr"
icon=
"el-icon-upload"
type=
"primary"
v-show=
"false"
>
上传
</el-button
>
</el-upload>
<selectBdc
v-model=
"isDialog"
:djywbm=
"$route.query.sqywbm"
:isJump=
"true"
@
updateDialog=
"updateDialog"
/>
<selectBdc
v-model=
"isDialog"
:djywbm=
"$route.query.sqywbm"
:isJump=
"true"
@
updateDialog=
"updateDialog"
/>
</div>
</
template
>
<
style
scoped
lang=
'scss'
>
<
style
scoped
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"./workFrame.scss"
;
</
style
>
<
script
>
import
WorkFlow
from
"./mixin/index"
import
publicFlow
from
"./mixin/public.js"
import
WorkFlow
from
"./mixin/index"
;
import
publicFlow
from
"./mixin/public.js"
;
import
{
getStepFormInfo
}
from
"@/api/fqsq.js"
;
import
{
getForm
}
from
'./flowform'
import
NoticeBar
from
'@/components/NoticeBar/index'
import
{
getForm
}
from
"./flowform"
;
import
NoticeBar
from
"@/components/NoticeBar/index"
;
import
{
deleteFlow
,
unClaimTask
}
from
"@/api/ywbl.js"
;
import
ProcessViewer
from
'./components/processViewer.vue'
import
ProcessViewer
from
"./components/processViewer.vue"
;
import
selectBdc
from
"@/views/ywbl/ywsq/selectBdc.vue"
;
export
default
{
components
:
{
selectBdc
,
NoticeBar
,
ProcessViewer
ProcessViewer
,
},
mixins
:
[
WorkFlow
,
publicFlow
],
data
()
{
data
()
{
return
{
isDialog
:
false
,
// 折叠
...
...
@@ -131,42 +199,45 @@ export default {
//批量操作
showBatch
:
false
,
//批量操作按钮名称
batchButtonName
:
''
,
}
batchButtonName
:
""
,
}
;
},
mounted
()
{
mounted
()
{
//添加页面监听事件
window
.
addEventListener
(
'beforeunload'
,
e
=>
this
.
beforeunloadHandler
(
e
))
window
.
addEventListener
(
'unload'
,
e
=>
this
.
unloadHandler
(
e
))
window
.
addEventListener
(
"beforeunload"
,
(
e
)
=>
this
.
beforeunloadHandler
(
e
));
window
.
addEventListener
(
"unload"
,
(
e
)
=>
this
.
unloadHandler
(
e
));
},
destroyed
()
{
window
.
removeEventListener
(
'beforeunload'
,
e
=>
this
.
beforeunloadHandler
(
e
))
window
.
removeEventListener
(
'unload'
,
e
=>
this
.
unloadHandler
(
e
))
destroyed
()
{
window
.
removeEventListener
(
"beforeunload"
,
(
e
)
=>
this
.
beforeunloadHandler
(
e
)
);
window
.
removeEventListener
(
"unload"
,
(
e
)
=>
this
.
unloadHandler
(
e
));
},
methods
:
{
beforeunloadHandler
()
{
this
.
_beforeUnload_time
=
new
Date
().
getTime
()
beforeunloadHandler
()
{
this
.
_beforeUnload_time
=
new
Date
().
getTime
()
;
},
unloadHandler
(
e
)
{
this
.
_gap_time
=
new
Date
().
getTime
()
-
this
.
_beforeUnload_time
unloadHandler
(
e
)
{
this
.
_gap_time
=
new
Date
().
getTime
()
-
this
.
_beforeUnload_time
;
//判断是窗口关闭还是刷新
if
(
this
.
_gap_time
<=
10
)
{
//取消认领
unClaimTask
(
this
.
bsmSlsq
,
this
.
bestepid
)
unClaimTask
(
this
.
bsmSlsq
,
this
.
bestepid
)
;
}
},
changeLoadIndex
()
{
this
.
loadIndex
++
changeLoadIndex
()
{
this
.
loadIndex
++
;
},
closeDialog
()
{
this
.
myValue
=
false
closeDialog
()
{
this
.
myValue
=
false
;
},
// 更新列表
updateDialog
()
{
updateDialog
()
{
this
.
loadBdcdylist
();
},
// 删除左侧列表
handleDel
(
item
)
{
handleDel
(
item
)
{
this
.
$confirm
(
"确定要删除吗, 是否继续?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
...
...
@@ -193,7 +264,7 @@ export default {
});
},
//申请单元点击事件
stepForm
(
index
)
{
stepForm
(
index
)
{
getStepFormInfo
(
this
.
currentSelectProps
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
fresh
++
;
...
...
@@ -201,9 +272,9 @@ export default {
this
.
tabList
=
res
.
result
;
//默认加载第一个表单信息
this
.
tabName
=
res
.
result
[
0
].
value
;
//批量操作无分屏按钮
//批量操作无分屏按钮
if
(
index
!=
null
)
{
//处理分屏材料信息
//处理分屏材料信息
let
that
=
this
;
this
.
tabList
.
forEach
(
function
(
item
,
index
)
{
if
(
item
.
value
==
"clxx"
)
{
...
...
@@ -211,24 +282,24 @@ export default {
that
.
clxxForm
=
getForm
(
item
.
value
,
that
.
$route
.
query
.
sqywbm
);
that
.
clxxTab
=
item
;
}
})
})
;
}
}
})
})
;
},
//申请单元点击事件
unitClick
(
index
)
{
unitClick
(
index
)
{
this
.
currentSelectProps
=
this
.
unitData
[
index
];
this
.
currentSelectProps
.
batchOperation
=
false
;
this
.
activeIndex
=
index
.
toString
();
this
.
stepForm
(
index
);
},
//批量按钮点击事件
batchUnitClick
()
{
batchUnitClick
()
{
this
.
currentSelectProps
.
batchOperation
=
true
;
this
.
activeIndex
=
"-1"
;
this
.
stepForm
();
}
}
}
}
,
}
,
}
;
</
script
>
...
...
src/views/workflow/workFrameView.vue
View file @
2c693a8
...
...
@@ -4,14 +4,22 @@
<div
class=
"topButton"
>
<!-- 左侧业务功能按钮 -->
<ul>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in leftButtonList"
:key=
"index"
>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in leftButtonList"
:key=
"index"
>
<svg-icon
:icon-class=
"item.icon"
/>
<span
class=
"iconName"
>
{{
item
.
name
}}
</span>
</li>
</ul>
<!-- 右侧流程按钮 -->
<ul>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in rightButtonList"
:key=
"index"
>
<li
@
click=
"operation(item)"
v-for=
"(item, index) in rightButtonList"
:key=
"index"
>
<svg-icon
class=
"icon"
:icon-class=
"item.icon"
/>
<span
class=
"iconName"
>
{{
item
.
name
}}
</span>
</li>
...
...
@@ -25,7 +33,11 @@
<div
v-if=
"this.isShowdrawer"
>
<div
class=
"title"
>
申请单元列表(
{{
unitData
.
length
}}
)
</div>
<el-menu
:default-active=
"activeIndex"
@
select=
"unitClick"
>
<el-menu-item
v-for=
"(item, index) in unitData"
:index=
"index.toString()"
:key=
"index"
>
<el-menu-item
v-for=
"(item, index) in unitData"
:index=
"index.toString()"
:key=
"index"
>
<div>
<p>
{{
item
.
bdcdyh
}}
</p>
<p
class=
"title-detail"
>
{{
item
.
zl
}}
</p>
...
...
@@ -33,16 +45,24 @@
</el-menu-item>
</el-menu>
</div>
<div
class=
"map-drawer-click map-drawer"
v-if=
"!isShowdrawer"
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
">
</div>
<div
class=
"map-drawer-expand map-drawer"
v-else
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
">
</div>
<div
class=
"map-drawer-click map-drawer"
v-if=
"!isShowdrawer"
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
"
>
</div>
<div
class=
"map-drawer-expand map-drawer"
v-else
@
click=
"
() =>
{
this.isShowdrawer = !this.isShowdrawer;
}
"
>
</div>
</div>
<div
class=
"leftCon"
>
<!-- 分屏左侧预览 -->
...
...
@@ -52,42 +72,47 @@
<!-- 表单内容区域 -->
<div
class=
"rightContainer"
>
<el-tabs
v-model=
"tabName"
:before-leave=
"beforeLeave"
>
<el-tab-pane
:label=
"item.name"
:name=
"item.value"
v-for=
"(item, index) in tabList"
:key=
"index"
>
<el-tab-pane
:label=
"item.name"
:name=
"item.value"
v-for=
"(item, index) in tabList"
:key=
"index"
>
</el-tab-pane>
</el-tabs>
<component
:key=
"fresh"
:is=
"componentTag"
v-bind=
"currentSelectProps"
/>
<component
:key=
"fresh"
:is=
"componentTag"
v-bind=
"currentSelectProps"
/>
</div>
</div>
</div>
</div>
</
template
>
<
style
scoped
lang=
'scss'
>
<
style
scoped
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"./workFrame.scss"
;
</
style
>
<
script
>
import
{
leftMenu
,
stepExpandInfo
,
getStepFormInfo
}
from
"@/api/fqsq.js"
import
publicFlow
from
"./mixin/public.js"
import
{
leftMenu
,
stepExpandInfo
,
getStepFormInfo
}
from
"@/api/fqsq.js"
;
import
publicFlow
from
"./mixin/public.js"
;
import
{
popupDialog
}
from
"@/utils/popup.js"
;
import
NoticeBar
from
'@/components/NoticeBar/index'
import
{
getWorkFlowImage
}
from
"@/api/workflow/jsydsyqFlow.js"
import
NoticeBar
from
"@/components/NoticeBar/index"
;
import
{
getWorkFlowImage
}
from
"@/api/workflow/jsydsyqFlow.js"
;
export
default
{
mixins
:
[
publicFlow
],
components
:
{
NoticeBar
NoticeBar
,
},
data
()
{
data
()
{
return
{
// 流程图
imgSrc
:
''
,
imgSrc
:
""
,
// 折叠
isShowdrawer
:
true
,
// 默认选中
activeIndex
:
'0'
,
activeIndex
:
"0"
,
//受理申请标识码
bsmSlsq
:
this
.
$route
.
query
.
bsmSlsq
,
//当前流程所在环节
...
...
@@ -116,15 +141,16 @@ export default {
clxxIndex
:
""
,
//材料信息选项卡对象
clxxTab
:
{},
}
}
;
},
mounted
()
{
mounted
()
{
this
.
loadBdcdylist
();
this
.
flowInitParam
();
},
methods
:
{
//加载流程初始参数
flowInitParam
()
{
flowInitParam
()
{
var
formdata
=
new
FormData
();
formdata
.
append
(
"bsmSlsq"
,
this
.
bsmSlsq
);
formdata
.
append
(
"bestepid"
,
this
.
bestepid
);
...
...
@@ -134,34 +160,36 @@ export default {
this
.
leftButtonList
=
res
.
result
.
button
;
this
.
rightButtonList
=
res
.
result
.
operation
;
}
})
})
;
},
//流程环节操作按钮
operation
(
item
)
{
operation
(
item
)
{
//按钮 B1:流程图 B2:材料分屏 B3:材料导入 B4:登记簿 B5:证书预览 B6:打印申请书
//操作按钮 登簿:record 转件:transfer 退回:back 退出:signout
switch
(
item
.
value
)
{
case
"B1"
:
getWorkFlowImage
(
this
.
bsmSlsq
,
this
.
$route
.
query
.
bestepid
).
then
(
res
=>
{
let
{
result
}
=
res
popupDialog
(
"流程图"
,
"workflow/components/processViewer"
,
{
xml
:
result
.
xml
,
finishedInfo
:
{
finishedTaskSet
:
result
.
finishedTaskSet
,
unfinishedTaskSet
:
result
.
unfinishedTaskSet
,
rejectedTaskSet
:
result
.
rejectedTaskSet
,
finishedSequenceFlowSet
:
result
.
finishedSequenceFlowSet
},
allCommentList
:
result
.
historyTaskList
})
})
getWorkFlowImage
(
this
.
bsmSlsq
,
this
.
$route
.
query
.
bestepid
).
then
(
(
res
)
=>
{
let
{
result
}
=
res
;
popupDialog
(
"流程图"
,
"workflow/components/processViewer"
,
{
xml
:
result
.
xml
,
finishedInfo
:
{
finishedTaskSet
:
result
.
finishedTaskSet
,
unfinishedTaskSet
:
result
.
unfinishedTaskSet
,
rejectedTaskSet
:
result
.
rejectedTaskSet
,
finishedSequenceFlowSet
:
result
.
finishedSequenceFlowSet
,
},
allCommentList
:
result
.
historyTaskList
,
});
}
);
break
;
case
"B5"
:
this
.
zsylFlag
=
true
;
break
;
case
"B2"
:
//材料分屏按钮
this
.
splitScreen
=
this
.
splitScreen
?
false
:
true
;
this
.
$store
.
dispatch
(
'app/settScreen'
,
this
.
splitScreen
)
this
.
$store
.
dispatch
(
"app/settScreen"
,
this
.
splitScreen
);
if
(
this
.
splitScreen
)
{
//如果当前选项卡为材料信息内容,递减到上一个选项卡内容
if
(
this
.
tabName
==
this
.
clxxTab
.
value
)
{
...
...
@@ -179,7 +207,7 @@ export default {
}
},
//读取申请单元信息
loadBdcdylist
()
{
loadBdcdylist
()
{
var
formdata
=
new
FormData
();
formdata
.
append
(
"bsmSlsq"
,
this
.
bsmSlsq
);
formdata
.
append
(
"bestepid"
,
this
.
bestepid
);
...
...
@@ -189,12 +217,12 @@ export default {
this
.
currentSelectProps
=
res
.
result
[
0
];
this
.
unitClick
(
0
);
}
})
})
;
},
//申请单元点击事件
unitClick
(
index
)
{
unitClick
(
index
)
{
this
.
currentSelectProps
=
this
.
unitData
[
index
];
this
.
currentSelectProps
.
type
=
'ONLY_READ'
;
this
.
currentSelectProps
.
type
=
"ONLY_READ"
;
getStepFormInfo
(
this
.
currentSelectProps
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
fresh
++
;
...
...
@@ -203,8 +231,8 @@ export default {
//默认加载第一个表单信息
this
.
tabName
=
res
.
result
[
0
].
value
;
}
})
}
}
}
</
script
>
\ No newline at end of file
});
},
},
};
</
script
>
...
...
src/views/ywbl/dbx/dbx.vue
View file @
2c693a8
<
template
>
<div
class=
"from-clues"
>
<div
class=
"from-clues-header"
>
<el-form
:model=
"queryForm"
ref=
"queryForm"
@
submit
.
native
.
prevent
label-width=
"80px"
>
<el-form
:model=
"queryForm"
ref=
"queryForm"
@
submit
.
native
.
prevent
label-width=
"80px"
>
<el-row>
<el-col
:span=
"5"
>
<el-form-item
label=
"业务来源"
label-width=
"70px"
>
<el-select
v-model=
"queryForm.ywly"
class=
"width100"
filterable
@
change=
"handleSelect('ywly', 'ywlymc', 'ywly')"
clearable
placeholder=
"请选择业务来源"
>
<el-option
v-for=
"item in dictData['ywly']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
<el-select
v-model=
"queryForm.ywly"
class=
"width100"
filterable
@
change=
"handleSelect('ywly', 'ywlymc', 'ywly')"
clearable
placeholder=
"请选择业务来源"
>
<el-option
v-for=
"item in dictData['ywly']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"5"
>
<el-form-item
label=
"权利类型"
>
<el-select
v-model=
"queryForm.qllx"
class=
"width100"
@
change=
"handleSelect('A8', 'qllxmc', 'qllx')"
filterable
clearable
placeholder=
"请选择权利类型"
>
<el-option
v-for=
"item in dictData['A8']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
<el-select
v-model=
"queryForm.qllx"
class=
"width100"
@
change=
"handleSelect('A8', 'qllxmc', 'qllx')"
filterable
clearable
placeholder=
"请选择权利类型"
>
<el-option
v-for=
"item in dictData['A8']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"5"
>
<el-form-item
label=
"登记类型"
>
<el-select
v-model=
"queryForm.djlx"
class=
"width100"
@
change=
"handleSelect('A21', 'djlxmc', 'djlx')"
filterable
clearable
placeholder=
"请选择登记类型"
>
<el-option
v-for=
"item in dictData['A21']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
<el-select
v-model=
"queryForm.djlx"
class=
"width100"
@
change=
"handleSelect('A21', 'djlxmc', 'djlx')"
filterable
clearable
placeholder=
"请选择登记类型"
>
<el-option
v-for=
"item in dictData['A21']"
:key=
"item.dcode"
:label=
"item.dname"
:value=
"item.dcode"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"5"
>
<el-form-item
label=
"业务号"
>
<el-input
placeholder=
"请输入业务号"
v-model=
"queryForm.ywh"
@
clear=
"queryClick"
clearable
class=
"width100"
>
<el-input
placeholder=
"请输入业务号"
v-model=
"queryForm.ywh"
@
clear=
"queryClick"
clearable
class=
"width100"
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"4"
class=
"btnColRight"
>
<el-form-item>
<el-button
type=
"primary"
native-type=
"submit"
@
click=
"queryClick"
>
查询
</el-button>
<el-button
type=
"primary"
native-type=
"submit"
@
click=
"queryClick"
>
查询
</el-button
>
<el-button
@
click=
"moreQueryClick"
>
高级查询
</el-button>
</el-form-item>
</el-col>
...
...
@@ -49,40 +95,56 @@
<ul>
<li
v-for=
"(item, index) in searchList"
:key=
"index"
>
{{
item
.
name
}}
:
{{
item
.
value
}}
<i
class=
"el-icon-circle-close"
@
click=
"handelItem(item, index)"
></i>
<i
class=
"el-icon-circle-close"
@
click=
"handelItem(item, index)"
></i>
</li>
</ul>
<el-button
class=
"clean-btn"
type=
"text"
v-if=
"searchList.length > 0"
@
click
.
native=
"hanldeCleanAll"
>
清除全部
<el-button
class=
"clean-btn"
type=
"text"
v-if=
"searchList.length > 0"
@
click
.
native=
"hanldeCleanAll"
>
清除全部
</el-button>
</el-row>
</el-form>
</div>
<div
class=
"from-clues-content"
>
<lb-table
:page-size=
"pageData.size"
class=
"loadingtext"
@
sort-change=
"handleSort"
:current-page
.
sync=
"pageData.currentPage"
:heightNum=
"295"
:total=
"tableData.total"
@
size-change=
"handleSizeChange"
@
p-current-change=
"handleCurrentChange"
:column=
"tableData.columns"
:data=
"tableData.data"
>
<lb-table
:page-size=
"pageData.size"
class=
"loadingtext"
@
sort-change=
"handleSort"
:current-page
.
sync=
"pageData.currentPage"
:heightNum=
"295"
:total=
"tableData.total"
@
size-change=
"handleSizeChange"
@
p-current-change=
"handleCurrentChange"
:column=
"tableData.columns"
:data=
"tableData.data"
>
</lb-table>
</div>
<searchBox
v-model=
"isSearch"
@
getSearch=
"getSearch"
/>
</div>
</
template
>
<
script
>
import
{
mapGetters
}
from
'vuex'
import
searchBox
from
'../components/search.vue'
import
table
from
"@/utils/mixin/table"
import
searchMin
from
"../components/mixin/index"
import
{
datas
,
sendThis
}
from
"./dbxdata"
import
{
searchTaskToDo
,
deleteFlow
,
claimTask
}
from
"@/api/ywbl"
import
{
judgeUserTaskPermission
}
from
"@/api/fqsq"
import
{
mapGetters
}
from
"vuex"
;
import
searchBox
from
"../components/search.vue"
;
import
table
from
"@/utils/mixin/table"
;
import
searchMin
from
"../components/mixin/index"
;
import
{
datas
,
sendThis
}
from
"./dbxdata"
;
import
{
searchTaskToDo
,
deleteFlow
,
claimTask
}
from
"@/api/ywbl"
;
import
{
judgeUserTaskPermission
}
from
"@/api/fqsq"
;
export
default
{
name
:
"dbx"
,
components
:
{
searchBox
},
mixins
:
[
table
,
searchMin
],
computed
:
{
...
mapGetters
([
'dictData'
,
'transfer'
])
...
mapGetters
([
"dictData"
,
"transfer"
]),
},
data
()
{
data
()
{
return
{
queryForm
:
{
ywly
:
""
,
...
...
@@ -91,109 +153,127 @@ export default {
ywh
:
""
,
},
searchForm
:
{
ywlymc
:
''
,
qllxmc
:
''
,
djlxmc
:
''
,
ywh
:
''
ywlymc
:
""
,
qllxmc
:
""
,
djlxmc
:
""
,
ywh
:
""
,
},
tableData
:
{
total
:
0
,
columns
:
datas
.
columns
(),
data
:
[],
}
}
},
jumpid
:
""
,
};
},
mounted
()
{
mounted
()
{
sendThis
(
this
);
window
[
"getBpageList"
]
=
()
=>
{
this
.
queryClick
();
};
},
watch
:
{
queryForm
:
{
handler
(
newName
,
oldName
)
{
},
immediate
:
true
}
handler
(
newName
,
oldName
)
{},
immediate
:
true
,
},
},
methods
:
{
// 列表渲染接口
queryClick
()
{
this
.
$startLoading
()
this
.
searchForm
.
ywh
=
this
.
queryForm
.
ywh
this
.
iterationData
()
searchTaskToDo
({
...
this
.
queryForm
,
...
this
.
otherForm
,
...
this
.
pageData
}).
then
(
res
=>
{
this
.
$endLoading
()
queryClick
()
{
this
.
$startLoading
();
this
.
searchForm
.
ywh
=
this
.
queryForm
.
ywh
;
this
.
iterationData
();
searchTaskToDo
({
...
this
.
queryForm
,
...
this
.
otherForm
,
...
this
.
pageData
,
}).
then
((
res
)
=>
{
this
.
$endLoading
();
if
(
res
.
code
===
200
)
{
let
{
total
,
records
}
=
res
.
result
records
.
forEach
(
item
=>
{
item
.
qlrmc
=
item
.
qlrmc
.
join
(
','
)
item
.
ywh
=
item
.
ywh
.
join
(
','
)
item
.
zl
=
item
.
zl
.
join
(
','
)
item
.
fromstepdate
=
item
.
fromstepdate
[
0
]
item
.
qlrmcStr
=
item
.
qlrmc
?
String
(
item
.
qlrmc
)
:
''
item
.
ywrmcStr
=
item
.
ywrmc
?
String
(
item
.
ywrmc
)
:
''
})
this
.
tableData
.
total
=
total
?
total
:
0
this
.
tableData
.
data
=
records
?
records
:
[]
let
{
total
,
records
}
=
res
.
result
;
records
.
forEach
(
(
item
)
=>
{
item
.
qlrmc
=
item
.
qlrmc
.
join
(
","
);
item
.
ywh
=
item
.
ywh
.
join
(
","
);
item
.
zl
=
item
.
zl
.
join
(
","
);
item
.
fromstepdate
=
item
.
fromstepdate
[
0
]
;
item
.
qlrmcStr
=
item
.
qlrmc
?
String
(
item
.
qlrmc
)
:
""
;
item
.
ywrmcStr
=
item
.
ywrmc
?
String
(
item
.
ywrmc
)
:
""
;
})
;
this
.
tableData
.
total
=
total
?
total
:
0
;
this
.
tableData
.
data
=
records
?
records
:
[]
;
}
})
})
;
},
handleSort
(
val
)
{
this
.
queryForm
.
sortField
=
val
.
prop
this
.
queryForm
.
sortOrder
=
val
.
order
==
"ascending"
?
'asc'
:
'desc'
this
.
queryClick
()
handleSort
(
val
)
{
this
.
queryForm
.
sortField
=
val
.
prop
;
this
.
queryForm
.
sortOrder
=
val
.
order
==
"ascending"
?
"asc"
:
"desc"
;
this
.
queryClick
();
},
del
(
item
)
{
del
(
item
)
{
let
formdata
=
new
FormData
();
formdata
.
append
(
"bsmSlsq"
,
item
.
bsmSlsq
);
this
.
$confirm
(
'确定要删除吗, 是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
deleteFlow
(
formdata
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
this
.
handleDel
()
this
.
$message
({
type
:
'success'
,
message
:
'删除成功!'
});
this
.
queryClick
()
}
else
{
this
.
$message
.
error
(
res
.
message
);
}
})
}).
catch
(()
=>
{
this
.
$message
({
type
:
'info'
,
message
:
'已取消删除'
})
this
.
$confirm
(
"确定要删除吗, 是否继续?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
deleteFlow
(
formdata
).
then
((
res
)
=>
{
if
(
res
.
code
===
200
)
{
this
.
handleDel
();
this
.
$message
({
type
:
"success"
,
message
:
"删除成功!"
,
});
this
.
queryClick
();
}
else
{
this
.
$message
.
error
(
res
.
message
);
}
});
})
.
catch
(()
=>
{
this
.
$message
({
type
:
"info"
,
message
:
"已取消删除"
,
});
});
},
ywhClick
(
item
)
{
ywhClick
(
item
)
{
//判断用户是否拥有该任务的权限,若有则跳转,无权限则给予提示并刷新页面
judgeUserTaskPermission
({
bsmSlsq
:
item
.
bsmSlsq
,
bestepid
:
item
.
bestepid
}).
then
(
res
=>
{
bestepid
:
item
.
bestepid
,
}).
then
(
(
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
result
)
{
//有任务权限
const
{
href
}
=
this
.
$router
.
resolve
(
'/workFrame?bsmSlsq='
+
item
.
bsmSlsq
+
'&bestepid='
+
item
.
bestepid
+
'&bsmBusiness='
+
'&sqywbm='
+
item
.
djywbm
);
window
.
open
(
href
,
'_blank'
);
const
{
href
}
=
this
.
$router
.
resolve
(
"/workFrame?bsmSlsq="
+
item
.
bsmSlsq
+
"&bestepid="
+
item
.
bestepid
+
"&bsmBusiness="
+
"&sqywbm="
+
item
.
djywbm
);
window
.
open
(
href
,
`urlname
${
item
.
bsmSlsq
}
`
);
//从待办箱进入的调取任务领取接口
claimTask
(
item
.
bsmSlsq
,
item
.
bestepid
)
claimTask
(
item
.
bsmSlsq
,
item
.
bestepid
)
;
}
else
{
//无任务权限
this
.
$message
.
error
(
"无该任务操作权限,或已被他人抢办,请重新操作"
)
this
.
$message
.
error
(
"无该任务操作权限,或已被他人抢办,请重新操作"
)
;
//刷新页面
this
.
queryClick
();
}
}
else
{
this
.
$message
.
error
(
"用户任务权限判断失败,请联系管理员"
)
this
.
$message
.
error
(
"用户任务权限判断失败,请联系管理员"
)
;
}
})
}
}
}
})
;
}
,
}
,
}
;
</
script
>
<
style
scoped
lang=
"scss"
>
@import
"~@/styles/public.scss"
;
...
...
Please
register
or
sign in
to post a comment