Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
1d555073
Unverified
提交
1d555073
authored
7月 27, 2021
作者:
taojinlong
提交者:
GitHub
7月 27, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' into pr@dev@task
上级
585755a3
b416707b
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
150 行增加
和
54 行删除
+150
-54
ExtractDataService.java
.../java/io/dataease/service/dataset/ExtractDataService.java
+10
-11
SysMsgService.java
.../main/java/io/dataease/service/message/SysMsgService.java
+0
-1
index.vue
frontend/src/components/business/complex-table/index.vue
+5
-1
Preview.vue
frontend/src/components/canvas/components/Editor/Preview.vue
+6
-0
SettingMenu.vue
...d/src/components/canvas/components/Editor/SettingMenu.vue
+2
-2
RectangleAttr.vue
frontend/src/components/canvas/components/RectangleAttr.vue
+34
-4
DeSelectGrid.vue
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
+46
-3
unread.vue
frontend/src/views/msg/unread.vue
+1
-0
DatasetTaskList.vue
frontend/src/views/system/task/DatasetTaskList.vue
+0
-0
TaskRecord.vue
frontend/src/views/system/task/TaskRecord.vue
+38
-24
dataset.vue
frontend/src/views/system/task/dataset.vue
+8
-8
没有找到文件。
backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java
浏览文件 @
1d555073
...
...
@@ -29,10 +29,6 @@ import org.apache.commons.lang3.StringUtils;
import
org.apache.http.HttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.poi.hssf.usermodel.HSSFSheet
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.pentaho.di.cluster.SlaveServer
;
import
org.pentaho.di.core.database.DatabaseMeta
;
import
org.pentaho.di.core.row.ValueMetaInterface
;
...
...
@@ -66,8 +62,6 @@ import org.springframework.context.annotation.Lazy;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.InputStream
;
import
java.net.InetAddress
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -295,7 +289,7 @@ public class ExtractDataService {
replaceTable
(
DorisTableUtils
.
dorisName
(
datasetTableId
));
saveSucessLog
(
datasetTableTaskLog
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
true
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
datasetTableTaskLog
,
true
);
deleteFile
(
"all_scope"
,
datasetTableId
);
...
...
@@ -308,7 +302,7 @@ public class ExtractDataService {
dataSetTableTaskService
.
updateTaskStatus
(
datasetTableTask
,
JobStatus
.
Error
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
false
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
datasetTableTaskLog
,
false
);
updateTableStatus
(
datasetTableId
,
datasetTable
,
JobStatus
.
Error
,
null
);
dropDorisTable
(
DorisTableUtils
.
dorisTmpName
(
DorisTableUtils
.
dorisName
(
datasetTableId
)));
deleteFile
(
"all_scope"
,
datasetTableId
);
...
...
@@ -350,7 +344,7 @@ public class ExtractDataService {
}
saveSucessLog
(
datasetTableTaskLog
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
true
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
datasetTableTaskLog
,
true
);
deleteFile
(
"incremental_add"
,
datasetTableId
);
deleteFile
(
"incremental_delete"
,
datasetTableId
);
...
...
@@ -360,7 +354,7 @@ public class ExtractDataService {
dataSetTableTaskService
.
updateTaskStatus
(
datasetTableTask
,
JobStatus
.
Completed
);
}
catch
(
Exception
e
)
{
saveErrorLog
(
datasetTableId
,
taskId
,
e
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
false
);
sendWebMsg
(
datasetTable
,
datasetTableTask
,
datasetTableTaskLog
,
false
);
updateTableStatus
(
datasetTableId
,
datasetTable
,
JobStatus
.
Error
,
null
);
dataSetTableTaskService
.
updateTaskStatus
(
datasetTableTask
,
JobStatus
.
Error
);
...
...
@@ -385,13 +379,14 @@ public class ExtractDataService {
}
private
void
sendWebMsg
(
DatasetTable
datasetTable
,
DatasetTableTask
datasetTableTask
,
Boolean
status
)
{
private
void
sendWebMsg
(
DatasetTable
datasetTable
,
DatasetTableTask
datasetTableTask
,
DatasetTableTaskLog
datasetTableTaskLog
,
Boolean
status
)
{
String
taskId
=
datasetTableTask
.
getId
();
String
msg
=
status
?
"成功"
:
"失败"
;
Long
typeId
=
status
?
5L
:
6L
;
String
id
=
datasetTable
.
getId
();
AuthURD
authURD
=
AuthUtils
.
authURDR
(
id
);
Set
<
Long
>
userIds
=
AuthUtils
.
userIdsByURD
(
authURD
);
Gson
gson
=
new
Gson
();
userIds
.
forEach
(
userId
->
{
Map
<
String
,
Object
>
param
=
new
HashMap
<>();
...
...
@@ -399,6 +394,10 @@ public class ExtractDataService {
if
(
StringUtils
.
isNotEmpty
(
taskId
))
{
param
.
put
(
"taskId"
,
taskId
);
}
if
(
ObjectUtils
.
isNotEmpty
(
datasetTableTaskLog
)
&&
StringUtils
.
isNotEmpty
(
datasetTableTaskLog
.
getId
()))
{
param
.
put
(
"logId"
,
datasetTableTaskLog
.
getId
());
}
String
content
=
"数据集【"
+
datasetTable
.
getName
()
+
"】同步"
+
msg
;
if
(
ObjectUtils
.
isNotEmpty
(
datasetTableTask
)
&&
ObjectUtils
.
isNotEmpty
(
datasetTableTask
.
getName
()))
{
content
+=
" 任务名称【"
+
datasetTableTask
.
getName
()
+
"】"
;
...
...
backend/src/main/java/io/dataease/service/message/SysMsgService.java
浏览文件 @
1d555073
...
...
@@ -181,7 +181,6 @@ public class SysMsgService {
}
public
List
<
SysMsgSetting
>
defaultSettings
()
{
// Long userId = AuthUtils.getUser().getUserId();
SysMsgSetting
sysMsgSetting1
=
new
SysMsgSetting
();
sysMsgSetting1
.
setTypeId
(
2L
);
sysMsgSetting1
.
setChannelId
(
1L
);
...
...
frontend/src/components/business/complex-table/index.vue
浏览文件 @
1d555073
...
...
@@ -14,7 +14,7 @@
<slot
name=
"complex"
/>
</
template
>
<slot
name=
"buttons"
/>
<fu-table-column-select
:columns=
"columns"
/>
<fu-table-column-select
v-if=
"!hideColumns"
:columns=
"columns"
/>
</fu-search-bar>
</div>
...
...
@@ -46,6 +46,10 @@ export default {
type
:
Array
,
default
:
()
=>
[]
},
hideColumns
:
{
type
:
Boolean
,
default
:
false
},
// eslint-disable-next-line vue/require-default-prop
localKey
:
String
,
// 如果需要记住选择的列,则这里添加一个唯一的Key
// eslint-disable-next-line vue/require-default-prop
...
...
frontend/src/components/canvas/components/Editor/Preview.vue
浏览文件 @
1d555073
...
...
@@ -108,6 +108,12 @@ export default {
}
}
}
if
(
this
.
canvasStyleData
.
selfAdaption
)
{
style
=
{
overflow
:
'hidden'
,
...
style
}
}
return
style
},
// 此处单独计算componentData的值 不放入全局mapState中
...
...
frontend/src/components/canvas/components/Editor/SettingMenu.vue
浏览文件 @
1d555073
...
...
@@ -3,8 +3,8 @@
<div
style=
"width: 100%;"
>
<el-dropdown
trigger=
"click"
@
mouseup=
"handleMouseUp"
>
<slot
name=
"icon"
/>
<el-dropdown-menu
v-if=
"curComponent"
slot=
"dropdown"
>
<el-dropdown-item
v-if=
"editFilter.includes(curComponent.type)"
icon=
"el-icon-edit-outline"
@
click
.
native=
"edit"
>
{{
$t
(
'panel.edit'
)
}}
</el-dropdown-item>
<el-dropdown-menu>
<el-dropdown-item
v-if=
"
curComponent&&
editFilter.includes(curComponent.type)"
icon=
"el-icon-edit-outline"
@
click
.
native=
"edit"
>
{{
$t
(
'panel.edit'
)
}}
</el-dropdown-item>
<el-dropdown-item
icon=
"el-icon-document-copy"
@
click
.
native=
"copy"
>
{{
$t
(
'panel.copy'
)
}}
</el-dropdown-item>
<el-dropdown-item
icon=
"el-icon-delete"
@
click
.
native=
"deleteComponent"
>
{{
$t
(
'panel.delete'
)
}}
</el-dropdown-item>
<el-dropdown-item
icon=
"el-icon-upload2"
@
click
.
native=
"topComponent"
>
{{
$t
(
'panel.topComponent'
)
}}
</el-dropdown-item>
...
...
frontend/src/components/canvas/components/RectangleAttr.vue
浏览文件 @
1d555073
...
...
@@ -32,13 +32,29 @@
</el-tooltip>
</div>
<el-tooltip
:content=
"$t('panel.borderRadius')"
>
<i
style=
"float: left;margin-top: 3px;margin-left: 2px;"
class=
"icon iconfont icon-fangxing-"
/>
</el-tooltip>
<div
style=
"width: 70px;float: left;margin-top: 2px;margin-left: 2px;"
>
<el-input
v-model=
"styleInfo.borderRadius"
type=
"number"
size=
"mini"
min=
"0"
max=
"100"
step=
"1"
@
change=
"styleChange"
/>
</div>
<el-tooltip
:content=
"$t('panel.opacity')"
>
<i
style=
"float: left;margin-top: 3px;margin-left: 2px;"
class=
"icon iconfont icon-touming"
/>
</el-tooltip>
<div
style=
"width: 70px;float: left;margin-top: 2px;margin-left: 2px;"
>
<el-input
v-model=
"innerOpacity"
type=
"number"
size=
"mini"
min=
"0"
max=
"100"
step=
"10"
@
change=
"styleChange"
/>
</div>
<div
style=
"width: 20px;float: left;margin-top: 2px;margin-left: 10px;"
>
<div
style=
"width: 16px;height: 18px"
>
<el-tooltip
content=
"边框颜色"
>
<i
class=
"iconfont icon-huabi"
@
click=
"goBoardColor"
/>
</el-tooltip>
<div
:style=
"boardDivColor"
/>
<el-color-picker
ref=
"boardColorPicker"
v-model=
"styleInfo.borderColor"
style=
"margin-top: 7px;height: 0px"
size=
"mini"
@
change=
"styleChange"
/>
<el-color-picker
ref=
"boardColorPicker"
v-model=
"styleInfo.borderColor"
style=
"margin-top: 7px;height: 0px"
size=
"mini"
@
change=
"styleChange"
/>
</div>
</div>
...
...
@@ -48,9 +64,10 @@
<i
class=
"iconfont icon-beijingse1"
@
click=
"goBackgroundColor"
/>
</el-tooltip>
<div
:style=
"backgroundDivColor"
/>
<el-color-picker
ref=
"backgroundColorPicker"
v-model=
"styleInfo.backgroundColor"
style=
"margin-top: 7px;height: 0px"
size=
"mini"
@
change=
"styleChange"
/>
<el-color-picker
ref=
"backgroundColorPicker"
v-model=
"styleInfo.backgroundColor"
style=
"margin-top: 7px;height: 0px"
size=
"mini"
@
change=
"styleChange"
/>
</div>
</div>
</div>
</el-card>
</
template
>
...
...
@@ -101,7 +118,20 @@ export default {
},
{
value
:
'5'
,
label
:
'5'
}]
}],
innerOpacity
:
0
}
},
watch
:
{
innerOpacity
:
{
handler
(
oldVal
,
newVal
)
{
this
.
styleInfo
[
'opacity'
]
=
this
.
innerOpacity
/
100
}
}
},
mounted
()
{
if
(
this
.
styleInfo
[
'opacity'
])
{
this
.
innerOpacity
=
this
.
styleInfo
[
'opacity'
]
*
100
}
},
computed
:
{
...
...
@@ -176,7 +206,7 @@ export default {
.el-card-main
{
height
:
34px
;
z-index
:
10
;
width
:
21
0px
;
width
:
40
0px
;
position
:
absolute
;
}
...
...
frontend/src/components/widget/DeWidget/DeSelectGrid.vue
浏览文件 @
1d555073
...
...
@@ -8,7 +8,7 @@
<el-tree
v-if=
"options!== null && options.attrs!==null"
ref=
"deSelectGrid"
:data=
"options.attrs.datas"
:data=
"options.attrs.
multiple ? [allNode, ...options.attrs.datas] : options.attrs.
datas"
:props=
"defaultProp"
:indent=
"0"
:filter-node-method=
"filterNode"
...
...
@@ -18,7 +18,8 @@
<span
slot-scope=
"
{ node, data }" class="custom-tree-node-list father">
<span
style=
"display: flex;flex: 1;width: 0;"
>
<el-radio
v-if=
"!options.attrs.multiple"
v-model=
"options.value"
:label=
"data.id"
@
change=
"changeRadioBox"
><span>
{{
node
.
label
}}
</span></el-radio>
<el-checkbox
v-if=
"options.attrs.multiple"
v-model=
"data.checked"
:label=
"data.id"
@
change=
"changeCheckBox(data)"
><span>
{{
node
.
label
}}
</span></el-checkbox>
<el-checkbox
v-if=
"options.attrs.multiple && data.id !== allNode.id"
v-model=
"data.checked"
:label=
"data.id"
@
change=
"changeCheckBox(data)"
><span>
{{
node
.
label
}}
</span></el-checkbox>
<el-checkbox
v-if=
"inDraw && options.attrs.multiple && data.id === allNode.id"
v-model=
"data.checked"
:indeterminate=
"data.indeterminate"
:label=
"data.id"
@
change=
"allCheckChange(data)"
><span>
{{
node
.
label
}}
</span></el-checkbox>
</span>
<span
v-if=
"!options.attrs.multiple && options.value && options.value === data.id"
class=
"child"
>
<span
style=
"margin-left: 12px;"
@
click
.
stop
>
...
...
@@ -70,7 +71,13 @@ export default {
label
:
'text'
,
children
:
'children'
},
keyWord
:
null
keyWord
:
null
,
allNode
:
{
id
:
(
-
2
<<
16
)
+
''
,
text
:
this
.
$t
(
'commons.all'
),
checked
:
false
,
indeterminate
:
false
}
}
},
computed
:
{
...
...
@@ -89,6 +96,11 @@ export default {
!
sourceValid
&&
(
this
.
options
.
value
=
[])
sourceValid
&&
!
Array
.
isArray
(
sourceValue
)
&&
(
this
.
options
.
value
=
sourceValue
.
split
(
','
))
!
this
.
inDraw
&&
(
this
.
options
.
value
=
[])
if
(
!
this
.
inDraw
)
{
this
.
options
.
value
=
[]
this
.
allNode
.
indeterminate
=
false
this
.
allNode
.
checked
=
false
}
this
.
setMutiBox
()
}
else
{
!
sourceValid
&&
(
this
.
options
.
value
=
null
)
...
...
@@ -122,6 +134,7 @@ export default {
this
.
options
.
attrs
.
datas
.
forEach
(
data
=>
{
data
.
checked
=
(
this
.
options
.
value
&&
this
.
options
.
value
.
includes
(
data
.
id
))
})
this
.
setAllNodeStatus
()
}
},
setRadioBox
()
{
...
...
@@ -150,6 +163,36 @@ export default {
values
.
splice
(
index
,
1
)
}
this
.
setAllNodeStatus
()
this
.
options
.
value
=
values
this
.
setCondition
()
},
// 勾选数据项 会影响全选节点的状态
setAllNodeStatus
()
{
const
nodeSize
=
this
.
options
.
attrs
.
datas
.
length
const
checkedSize
=
this
.
options
.
attrs
.
datas
.
filter
(
item
=>
item
.
checked
).
length
if
(
nodeSize
===
checkedSize
)
{
this
.
allNode
.
checked
=
true
this
.
allNode
.
indeterminate
=
false
}
else
if
(
checkedSize
===
0
)
{
this
.
allNode
.
checked
=
false
this
.
allNode
.
indeterminate
=
false
}
else
{
this
.
allNode
.
checked
=
false
this
.
allNode
.
indeterminate
=
true
}
},
allCheckChange
(
data
)
{
data
.
indeterminate
=
false
const
values
=
[]
// this.options.value = []
this
.
options
.
attrs
.
datas
.
forEach
(
item
=>
{
item
.
checked
=
data
.
checked
// data.checked && this.options.value.push(item.id)
data
.
checked
&&
values
.
push
(
item
.
id
)
})
this
.
options
.
value
=
values
this
.
setCondition
()
},
...
...
frontend/src/views/msg/unread.vue
浏览文件 @
1d555073
...
...
@@ -8,6 +8,7 @@
<complex-table
:data=
"data"
:columns=
"columns"
:hide-columns=
"true"
:pagination-config=
"paginationConfig"
:search-config=
"searchConfig"
@
select=
"select"
...
...
frontend/src/views/system/task/DatasetTaskList.vue
浏览文件 @
1d555073
差异被折叠。
点击展开。
frontend/src/views/system/task/TaskRecord.vue
浏览文件 @
1d555073
...
...
@@ -5,7 +5,7 @@
<el-table-column
prop=
"name"
:label=
"$t('dataset.task_name')"
>
<template
slot-scope=
"scope"
>
<span>
<el-link
style=
"font-size: 12px"
@
click=
"jumpTask(scope.row)"
>
{{
scope
.
row
.
name
}}
</el-link>
<el-link
:type=
"matchLogId && scope.row.id === matchLogId ? 'danger': ''"
style=
"font-size: 12px"
@
click=
"jumpTask(scope.row)"
>
{{
scope
.
row
.
name
}}
</el-link>
</span>
</
template
>
</el-table-column>
...
...
@@ -52,17 +52,14 @@
</template>
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
ComplexTable
from
'@/components/business/complex-table'
import
{
formatCondition
,
formatQuickCondition
,
addOrder
,
formatOrders
}
from
'@/utils/index'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
import
{
post
}
from
'@/api/dataset/dataset'
import
cron
from
'@/components/cron/cron'
import
TableSelector
from
'@/views/chart/view/TableSelector'
export
default
{
name
:
'TaskRecord'
,
components
:
{
ComplexTable
,
LayoutContent
,
cron
,
TableSelector
},
components
:
{
ComplexTable
},
props
:
{
param
:
{
type
:
Object
,
...
...
@@ -113,7 +110,8 @@ export default {
orderConditions
:
[],
last_condition
:
null
,
show_error_massage
:
false
,
error_massage
:
''
error_massage
:
''
,
matchLogId
:
null
}
},
computed
:
{
...
...
@@ -122,7 +120,7 @@ export default {
if
(
this
.
param
==
null
)
{
this
.
last_condition
=
{}
this
.
search
()
}
else
{
}
else
if
(
this
.
param
.
name
)
{
this
.
last_condition
=
{
'dataset_table_task.name'
:
{
field
:
'dataset_table_task.name'
,
...
...
@@ -131,6 +129,16 @@ export default {
}
}
this
.
search
(
this
.
last_condition
)
}
else
if
(
this
.
param
.
taskId
)
{
this
.
matchLogId
=
this
.
param
.
logId
||
this
.
matchLogId
this
.
last_condition
=
{
'dataset_table_task.id'
:
{
field
:
'dataset_table_task.id'
,
operator
:
'eq'
,
value
:
this
.
param
.
taskId
}
}
this
.
search
(
this
.
last_condition
)
}
// this.timer = setInterval(() => {
...
...
@@ -156,25 +164,25 @@ export default {
this
.
timer
=
null
}
},
msg2Current
(
routerParam
)
{
if
(
!
routerParam
||
!
routerParam
.
taskId
)
return
const
taskId
=
routerParam
.
taskId
// console.log(taskId)
const
current_condition
=
{
'dataset_table_task.id'
:
{
field
:
'dataset_table_task.id'
,
operator
:
'eq'
,
value
:
taskId
}
}
// 先把定时器干掉 否则会阻塞下面的search
this
.
destroyTimer
()
//
msg2Current(routerParam) {
//
if (!routerParam || !routerParam.taskId) return
//
const taskId = routerParam.taskId
//
// console.log(taskId)
//
const current_condition = {
//
'dataset_table_task.id': {
//
field: 'dataset_table_task.id',
//
operator: 'eq',
//
value: taskId
//
}
//
}
//
// 先把定时器干掉 否则会阻塞下面的search
//
this.destroyTimer()
this
.
search
(
current_condition
)
//
this.search(current_condition)
// 查询完再开启定时器
this
.
createTimer
()
},
//
// 查询完再开启定时器
//
this.createTimer()
//
},
sortChange
({
column
,
prop
,
order
})
{
this
.
orderConditions
=
[]
if
(
!
order
)
{
...
...
@@ -210,6 +218,12 @@ export default {
},
jumpTask
(
item
)
{
this
.
$emit
(
'jumpTask'
,
item
)
},
rowClassMethod
({
row
,
rowIndex
})
{
if
(
this
.
matchLogId
&&
this
.
matchLogId
===
row
.
id
)
{
return
'row-match-class'
}
return
''
}
}
}
...
...
frontend/src/views/system/task/dataset.vue
浏览文件 @
1d555073
...
...
@@ -17,17 +17,14 @@
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
ComplexTable
from
'@/components/business/complex-table'
import
UnionView
from
'@/views/dataset/data/UnionView'
import
UpdateInfo
from
'@/views/dataset/data/UpdateInfo'
import
DatasetTaskList
from
'@/views/system/task/DatasetTaskList'
import
TaskRecord
from
'@/views/system/task/TaskRecord'
import
TabDataPreview
from
'@/views/dataset/data/TabDataPreview'
import
DatasetTableData
from
'@/views/dataset/common/DatasetTableData'
import
bus
from
'@/utils/bus'
import
{
mapGetters
}
from
'vuex'
export
default
{
components
:
{
DatasetTableData
,
LayoutContent
,
ComplexTable
,
UnionView
,
UpdateInfo
,
TabDataPreview
,
DatasetTaskList
,
TaskRecord
},
components
:
{
LayoutContent
,
DatasetTaskList
,
TaskRecord
},
data
()
{
return
{
task
:
null
,
...
...
@@ -74,9 +71,12 @@ export default {
try
{
const
msgParam
=
JSON
.
parse
(
routerParam
.
sourceParam
)
// this.param = msgParam.tableId
this
.
tabActive
=
'TaskRecord'
this
.
$nextTick
(()
=>
{
this
.
$refs
.
task_record
&&
this
.
$refs
.
task_record
.
msg2Current
&&
this
.
$refs
.
task_record
.
msg2Current
(
msgParam
)
// 目标组件存在定时器 这种方式会被定时器阻塞
// this.$refs.task_record && this.$refs.task_record.msg2Current && this.$refs.task_record.msg2Current(msgParam)
this
.
task
=
msgParam
this
.
tabActive
=
'TaskRecord'
})
}
catch
(
error
)
{
console
.
error
(
error
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论