Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
integrate-admin
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘旭
integrate-admin
Commits
49315233
提交
49315233
authored
11月 28, 2022
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提交
上级
dbdd8fc4
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
792 行增加
和
127 行删除
+792
-127
synchronizationAPI.ts
...vices/api/systemApi/synchronization/synchronizationAPI.ts
+17
-0
addProduct.vue
src/views/manage/components/platformProducts/addProduct.vue
+70
-0
kingdeeBasicConfig.vue
...manage/components/platformProducts/kingdeeBasicConfig.vue
+97
-0
ohterBasicConfig.vue
...s/manage/components/platformProducts/ohterBasicConfig.vue
+82
-0
previewProduct.vue
...ews/manage/components/platformProducts/previewProduct.vue
+54
-0
test.ts
src/views/manage/components/platformProducts/test.ts
+199
-0
formConfiguration.vue
src/views/manage/formConfiguration.vue
+2
-2
platformProducts.vue
src/views/manage/platformProducts.vue
+87
-74
productLog.vue
src/views/manage/productLog.vue
+31
-7
synchronousMonitoring.vue
src/views/manage/synchronousMonitoring.vue
+125
-4
enableSynchronization.vue
src/views/system/enableSynchronization.vue
+18
-12
useXyunLog.ts
src/views/system/tableConfigData/useXyunLog.ts
+1
-1
ElCustomHeader.vue
src/vueFormCreate/core/element/ElCustomHeader.vue
+7
-27
ElGenerateForm.vue
src/vueFormCreate/core/element/ElGenerateForm.vue
+2
-0
没有找到文件。
src/services/api/systemApi/synchronization/synchronizationAPI.ts
浏览文件 @
49315233
...
...
@@ -73,3 +73,20 @@ export function importFile(data: any) {
data
})
}
// 查询金蝶参数
export
function
getConnectParam
()
{
return
request
({
url
:
"/api/mall/init/common/param"
,
method
:
"get"
,
});
}
// 保存金蝶参数
export
function
putConnectParam
(
data
:
any
)
{
return
request
({
url
:
"/api/mall/init/common/param/create"
,
method
:
"post"
,
data
,
});
}
src/views/manage/components/platformProducts/addProduct.vue
0 → 100644
浏览文件 @
49315233
<
template
>
<el-dialog
v-model=
"showDialog"
title=
"选择产品"
width=
"30%"
>
<div
class=
"select"
>
<el-select
v-if=
"status"
v-model=
"productAfterCode"
@
change=
"afterChange"
>
<el-option
v-for=
"item in options"
:key=
"item.id"
:label=
"item.title"
:value=
"item.code"
/>
</el-select>
<el-select
v-else
v-model=
"productBeforeCode"
@
change=
"beforeChange"
>
<el-option
v-for=
"item in options"
:key=
"item.id"
:label=
"item.title"
:value=
"item.code"
/>
</el-select>
</div>
<template
#
footer
>
<el-button
type=
"primary"
@
click=
"showDialog = false"
>
确定
</el-button>
</
template
>
</el-dialog>
</template>
<
script
setup
lang=
'ts'
>
import
{
ref
}
from
'vue'
const
props
=
defineProps
({
// 第一个选择产品
productAfterCode
:
{
type
:
String
,
default
:
''
},
// 第二个选择产品
productBeforeCode
:
{
type
:
String
,
default
:
''
},
// select 数据源
options
:
{
type
:
Object
,
default
:
[]
}
})
const
showDialog
=
ref
(
false
)
const
status
=
ref
(
true
)
// 判断是哪个选择产品
const
emits
=
defineEmits
([
'codeChange'
])
const
afterChange
=
(
value
:
string
)
=>
{
if
(
value
)
emits
(
'codeChange'
,
'after'
,
value
)
}
const
beforeChange
=
(
value
:
string
)
=>
{
if
(
value
)
emits
(
'codeChange'
,
'before'
,
value
)
}
defineExpose
({
showDialog
,
status
})
</
script
>
<
style
lang =
"scss"
scoped
>
.select
{
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
center
;
align-items
:
center
;
:deep
(
.el-dialog__body
)
{
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
}
</
style
>
\ No newline at end of file
src/views/manage/components/platformProducts/kingdeeBasicConfig.vue
0 → 100644
浏览文件 @
49315233
<
template
>
<!-- 表单区域 -->
<el-form
ref=
"ruleFormRef"
:rules=
"rules"
:model=
"sybchronizationForm"
:disabled=
"isDisabled"
label-position=
"left"
label-width=
"95px"
class=
"demo-ruleForm"
style=
"margin-top: 50px"
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"金蝶地址:"
prop=
"k3CloudUrl"
>
<el-input
v-model=
"sybchronizationForm.k3CloudUrl"
placeholder=
"请输入金蝶地址:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"账套ID:"
prop=
"dbid"
>
<el-input
v-model=
"sybchronizationForm.dbid"
placeholder=
"请输入账套ID:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"端口:"
prop=
"lang"
>
<el-input
v-model=
"sybchronizationForm.lang"
placeholder=
"请输入端口:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"账号:"
prop=
"uid"
>
<el-input
v-model=
"sybchronizationForm.uid"
placeholder=
"请输入账号:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"密码:"
prop=
"pwd"
>
<el-input
v-model=
"sybchronizationForm.pwd"
type=
"password"
placeholder=
"请输入密码:"
clearable
show-password
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"时间:"
prop=
"duration"
>
<el-input
type=
"number"
v-model=
"sybchronizationForm.duration"
placeholder=
"间隔时间:"
clearable
@
input=
"(val: any) =>
{ if (val
<
=
0
||
val
>
= 60) sybchronizationForm.duration = '' }" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
getSynchronization
,
putSynchronization
,
}
from
"@/services/api/systemApi/synchronization/synchronizationAPI"
;
import
{
ref
}
from
"vue"
;
import
{
ElMessage
}
from
"element-plus"
;
import
type
{
FormInstance
,
FormRules
}
from
"element-plus"
;
const
sybchronizationForm
=
ref
({
k3CloudUrl
:
""
,
thirdPartyUrl
:
''
,
dbid
:
""
,
lang
:
""
,
uid
:
""
,
pwd
:
""
,
duration
:
''
,
});
// 校验规则
const
rules
=
ref
<
FormRules
>
({
k3CloudUrl
:
[{
required
:
true
,
message
:
"金蝶地址不为空"
,
trigger
:
"blur"
}],
dbid
:
[{
required
:
true
,
message
:
"数据库ID不为空"
,
trigger
:
"blur"
}],
lang
:
[{
required
:
true
,
message
:
"端口不为空"
,
trigger
:
"blur"
}],
uid
:
[{
required
:
true
,
message
:
"账号不为空"
,
trigger
:
"blur"
}],
pwd
:
[{
required
:
true
,
message
:
"密码不为空"
,
trigger
:
"blur"
}],
duration
:
[{
required
:
true
,
message
:
"间隔时间不为空, 且大于0 小于60"
,
trigger
:
"blur"
},]
});
const
ruleFormRef
=
ref
<
FormInstance
>
();
const
isDisabled
=
ref
(
true
);
// 保存配置
const
handleSave
=
(
formEl
:
FormInstance
|
undefined
)
=>
{
if
(
!
formEl
)
return
;
formEl
.
validate
(
async
(
valid
,
fields
)
=>
{
if
(
valid
)
{
const
res
:
any
=
await
putSynchronization
(
sybchronizationForm
.
value
);
if
(
res
.
code
===
200
)
{
ElMessage
({
message
:
"保存参数成功!"
,
type
:
"success"
});
}
}
else
{
console
.
log
(
"校验失败"
,
fields
);
return
false
;
}
});
};
</
script
>
<
style
lang=
"scss"
scoped
>
.el-form-item
{
margin-bottom
:
40px
;
}
</
style
>
src/views/manage/components/platformProducts/ohterBasicConfig.vue
0 → 100644
浏览文件 @
49315233
<
template
>
<!-- 表单区域 -->
<el-form
ref=
"ruleFormRef"
:rules=
"rules"
:model=
"connectParamForm"
:disabled=
"isDisabled"
label-position=
"left"
label-width=
"95px"
class=
"demo-ruleForm"
style=
"margin-top: 50px"
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"金蝶地址:"
prop=
"mallAddress"
>
<el-input
v-model=
"connectParamForm.mallAddress"
placeholder=
"请输入金蝶地址:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"账号:"
prop=
"account"
>
<el-input
v-model=
"connectParamForm.account"
placeholder=
"请输入账号:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"密码:"
prop=
"password"
>
<el-input
v-model=
"connectParamForm.password"
type=
"password"
placeholder=
"请输入密码:"
clearable
show-password
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"时间:"
prop=
"duration"
>
<el-input
type=
"number"
v-model=
"connectParamForm.duration"
placeholder=
"间隔时间:"
clearable
@
input=
"(val: any) =>
{ if (val
<
=
0
||
val
>
= 60) connectParamForm.duration = '' }" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
getConnectParam
,
putConnectParam
,
}
from
"@/services/api/systemApi/synchronization/synchronizationAPI"
;
import
{
ref
}
from
"vue"
;
import
{
ElMessage
}
from
"element-plus"
;
import
type
{
FormInstance
,
FormRules
}
from
"element-plus"
;
const
connectParamForm
=
ref
({
mallAddress
:
""
,
account
:
''
,
password
:
""
,
duration
:
""
});
// 校验规则
const
rules
=
ref
<
FormRules
>
({
mallAddress
:
[{
required
:
true
,
message
:
"金蝶地址不为空"
,
trigger
:
"blur"
}],
account
:
[{
required
:
true
,
message
:
"账号不为空"
,
trigger
:
"blur"
}],
password
:
[{
required
:
true
,
message
:
"密码不为空"
,
trigger
:
"blur"
}],
duration
:
[{
required
:
true
,
message
:
"间隔时间不为空, 且大于0 小于60"
,
trigger
:
"blur"
},]
});
const
ruleFormRef
=
ref
<
FormInstance
>
();
const
isDisabled
=
ref
(
true
);
// 保存配置
const
handleSave
=
(
formEl
:
FormInstance
|
undefined
)
=>
{
if
(
!
formEl
)
return
;
formEl
.
validate
(
async
(
valid
,
fields
)
=>
{
if
(
valid
)
{
const
res
:
any
=
await
putConnectParam
(
connectParamForm
.
value
);
if
(
res
.
code
===
200
)
{
ElMessage
({
message
:
"保存参数成功!"
,
type
:
"success"
});
}
}
else
{
console
.
log
(
"校验失败"
,
fields
);
return
false
;
}
});
};
</
script
>
<
style
lang=
"scss"
scoped
>
.el-form-item
{
margin-bottom
:
40px
;
}
</
style
>
src/views/manage/components/platformProducts/previewProduct.vue
0 → 100644
浏览文件 @
49315233
<
template
>
<!--
<el-dialog
v-model=
"previewVisible"
title=
"预览"
:width=
"800"
>
-->
<el-button
type=
"primary"
@
click=
"check"
v-if=
"previewVisible"
>
校验
</el-button>
<el-button
type=
"primary"
@
click=
"handleGetData"
v-if=
"previewVisible"
>
获取数据
</el-button>
<ElGenerateForm
ref=
"generateFormRef"
v-if=
"previewVisible"
:data=
"widgetForm"
/>
<!--
<template
#
footer
>
<el-button
@
click=
"handleReset"
>
重置
</el-button>
<el-button
type=
"primary"
@
click=
"handleGetData"
>
获取数据
</el-button>
</
template
>
-->
<!-- </el-dialog> -->
</template>
<
script
setup
lang=
'ts'
>
import
{
ref
}
from
'vue'
import
ElGenerateForm
from
'../../../../vueFormCreate/core/element/ElGenerateForm.vue'
import
{
data
}
from
'./test'
const
previewVisible
=
ref
(
false
)
const
widgetForm
=
data
.
data
const
generateFormRef
=
ref
()
const
dataJsonTemplate
=
ref
({
data
:
''
})
const
handleReset
=
()
=>
generateFormRef
.
value
.
reset
()
// 获取数据
const
handleGetData
=
()
=>
{
generateFormRef
.
value
.
getData
().
then
((
res
:
any
)
=>
{
dataJsonTemplate
.
value
.
data
=
res
console
.
log
(
dataJsonTemplate
.
value
,
'dataJsonTemplate.value'
);
})
}
const
handleCopyClick
=
(
text
:
string
)
=>
{
// copy(text)
}
const
check
=
()
=>
{
generateFormRef
.
value
.
getData
().
then
((
res
:
any
)
=>
{
console
.
log
(
res
);
console
.
log
(
'校验'
,
res
);
})
}
defineExpose
({
previewVisible
})
</
script
>
<
style
lang =
"scss"
scoped
>
</
style
>
\ No newline at end of file
src/views/manage/components/platformProducts/test.ts
0 → 100644
浏览文件 @
49315233
export
const
data
=
{
"code"
:
200
,
"data"
:
{
"list"
:
[
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"http://192.168.0.49/k3cloud/"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
true
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"k3_cloud_url"
,
"rules"
:
[],
"label"
:
"金蝶地址"
,
"dbFieldComment"
:
"金蝶地址"
,
"type"
:
"input"
,
"dbFieldName"
:
"k3_cloud_url"
,
"key"
:
"e814fa940a76497986a1c44be74707d0"
},
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"635755e0765c2e"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
true
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"dbid"
,
"rules"
:
[],
"label"
:
"金蝶账套"
,
"dbFieldComment"
:
"金蝶账套"
,
"type"
:
"input"
,
"dbFieldName"
:
"dbid"
,
"key"
:
"74ce381b56a14fa98df0edcc247cfc5b"
},
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"admin"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
false
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"uid"
,
"rules"
:
[],
"label"
:
"用户名"
,
"dbFieldComment"
:
"用户名"
,
"type"
:
"input"
,
"dbFieldName"
:
"uid"
,
"key"
:
"8389d01a315f4965bde5016dbd822d71"
},
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"kingdee$2022"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
false
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"pwd"
,
"rules"
:
[],
"label"
:
"密码"
,
"dbFieldComment"
:
"密码"
,
"type"
:
"input"
,
"dbFieldName"
:
"pwd"
,
"key"
:
"afe9c315d0e84e8398b80d44f7525f83"
},
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"2052"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
false
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"lang"
,
"rules"
:
[],
"label"
:
"端口"
,
"dbFieldComment"
:
"端口"
,
"type"
:
"input"
,
"dbFieldName"
:
"lang"
,
"key"
:
"9b4cac0704274b2691b8d4c9a7b86a15"
},
{
"options"
:
{
"clearable"
:
false
,
"readonly"
:
false
,
"maxlength"
:
null
,
"defaultValue"
:
"1"
,
"prefix"
:
""
,
"width"
:
"100%"
,
"prepend"
:
""
,
"disabled"
:
false
,
"rules"
:
{
"pattern"
:
""
,
"trigger"
:
"blur"
,
"message"
:
""
,
"type"
:
"any"
,
"enum"
:
""
,
"required"
:
false
},
"placeholder"
:
""
,
"suffix"
:
""
,
"append"
:
""
},
"model"
:
"duration"
,
"rules"
:
[],
"label"
:
"时长/分钟"
,
"dbFieldComment"
:
"时长/分钟"
,
"type"
:
"input"
,
"dbFieldName"
:
"duration"
,
"key"
:
"c120ff5d7b5941adbaa8d891ae766fb0"
}
],
"config"
:
{
"dbTableName"
:
"tb_kingdee_init_connect_param"
,
"formId"
:
"kingdee"
,
"dbTableComment"
:
"金蝶配置表"
,
"size"
:
"default"
,
"labelPosition"
:
"right"
,
"labelWidth"
:
100
,
"hideRequiredAsterisk"
:
false
}
},
"message"
:
""
,
"success"
:
true
}
\ No newline at end of file
src/views/manage/formConfiguration.vue
浏览文件 @
49315233
...
...
@@ -232,8 +232,8 @@ const init = (formId?: string, pageNo?: number, pageSize?: number) => {
init
(
searchValue
.
value
,
tablePage
.
value
.
pageNo
,
tablePage
.
value
.
pageSize
)
</
script
>
<
style
lang=
"scss"
>
.fc-style
{
<
style
lang=
"scss"
scoped
>
:deep
(
.fc-style
)
{
height
:
800px
;
border
:
1px
solid
#ccc
;
}
...
...
src/views/manage/platformProducts.vue
浏览文件 @
49315233
<
template
>
<el-button
type=
"primary"
icon=
"plus"
@
click=
"addProductShow"
style=
"margin: 20px 0 0 20px;"
>
新增
</el-button>
<el-button
type=
"primary"
icon=
"plus"
@
click=
"openShow"
style=
"margin: 20px 0 0 20px;"
>
打开测试
</el-button>
<div
class=
'container'
>
<el-row
justify=
"start"
style=
"width: 100%; height: 100%;"
>
<el-col
:span=
"12"
style=
"padding-right: 20px;"
>
<el-table
:data=
"productData"
border
>
<el-table-column
label=
"产品1"
prop=
"productAfterCode"
align=
"center"
/>
<el-table-column
label=
"产品2"
prop=
"productBeforeCode"
align=
"center"
/>
<el-table-column
label=
"产品1"
prop=
"productAfterCode
Name
"
align=
"center"
/>
<el-table-column
label=
"产品2"
prop=
"productBeforeCode
Name
"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
fixed=
"right"
width=
"155"
>
<template
#
default=
"scope"
>
<el-button
type=
"primary"
link
size=
"small"
@
click=
"selectScene(scope.row.id)"
>
选择场景
...
...
@@ -15,48 +17,45 @@
</el-table-column>
</el-table>
</el-col>
<el-col
:span=
"1"
>
<el-divider
class=
"divider"
direction=
"vertical"
/>
</el-row>
</div>
<el-dialog
v-model=
"showAddDialog"
title=
"选择产品"
width=
"50%"
>
<el-row
justify=
"start"
style=
"padding: 0 10%;"
>
<el-col
:span=
"6"
style=
"text-align:center"
>
<el-button
type=
"primary"
circle
style=
"width: 100px; height: 100px;"
@
click=
"selectAfterProducts"
>
{{ afterTitle }}
</el-button>
</el-col>
<el-col
:span=
"12"
style=
"display: flex; align-items: center; justify-content: center; text-align: center;"
>
<div
class=
"line-arrow"
>
<div
class=
"line"
></div>
</div>
</el-col>
<el-col
:span=
"6"
style=
"text-align:center"
>
<el-button
type=
"primary"
circle
style=
"width: 100px; height: 100px;"
@
click=
"selectBeforeProducts"
>
{{ beforeTitle }}
</el-button>
</el-col>
<el-col
:span=
"11"
style=
"margin-top: 20px;"
>
<previewProduct
ref=
"previewProductAfterRef"
/>
<!-- <kingdee-basic-config /> -->
</el-col>
<el-col
:span=
"2"
>
</el-col>
<el-col
:span=
"11"
style=
"margin-top: 8%;"
>
<el-row
justify=
"start"
>
<el-col
:span=
"6"
>
<el-button
type=
"primary"
circle
style=
"width: 100px; height: 100px; margin-right: 50px;"
@
click=
"selectAfterProducts"
>
{{ afterTitle }}
</el-button>
</el-col>
<el-col
:span=
"12"
style=
"display: flex; align-items: center;"
>
<div
class=
"line-arrow"
>
<div
class=
"line"
></div>
</div>
</el-col>
<el-col
:span=
"6"
>
<el-button
type=
"primary"
circle
style=
"width: 100px; height: 100px;"
@
click=
"selectBeforeProducts"
>
{{ beforeTitle }}
</el-button>
</el-col>
<el-col
:span=
"24"
style=
"text-align: center;"
>
<el-button
type=
"primary"
@
click=
"onConfirm"
style=
"width: 88px; margin-top: 20%;"
>
保存产品
</el-button>
</el-col>
</el-row>
<el-col
:span=
"11"
style=
"margin-top: 20px;"
>
<previewProduct
ref=
"previewProductBeforeRef"
/>
<!-- <kingdee-basic-config /> -->
</el-col>
<el-col
:span=
"24"
style=
"text-align: center;"
>
<el-button
type=
"primary"
@
click=
"onConfirm"
style=
"width: 88px; margin-top: 20%;"
>
保存产品
</el-button>
</el-col>
</el-row>
<el-dialog
v-model=
"showDialog"
title=
"选择产品"
width=
"30%"
>
<el-select
v-if=
"status"
v-model=
"productAfterCode"
>
<el-option
v-for=
"item in options"
:key=
"item.id"
:label=
"item.title"
:value=
"item.code"
/>
</el-select>
<el-select
v-else
v-model=
"productBeforeCode"
>
<el-option
v-for=
"item in options"
:key=
"item.id"
:label=
"item.title"
:value=
"item.code"
/>
</el-select>
<
template
#
footer
>
<el-button
type=
"primary"
@
click=
"showDialog = false"
>
确定
</el-button>
</
template
>
</el-dialog>
</div>
</el-dialog>
<add-product
ref=
"addProductRef"
:options=
"options"
:productAfterCode=
"productAfterCode"
:productBeforeCode=
"productBeforeCode"
@
codeChange=
"codeChange"
/>
</template>
...
...
@@ -65,14 +64,19 @@ import { ref, computed } from 'vue'
import
{
getPlatformProductList
,
createPlatformProduct
,
deletePlatformProduct
,
getDictItemList
}
from
'@/services/api/platformProducts'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
;
import
{
useRouter
}
from
'vue-router'
;
import
addProduct
from
'./components/platformProducts/addProduct.vue'
;
// import kingdeeBasicConfig from './components/platformProducts/kingdeeBasicConfig.vue';
import
previewProduct
from
'./components/platformProducts/previewProduct.vue'
;
const
router
=
useRouter
();
const
options
=
ref
([]
as
any
)
// select 数据源
const
showDialog
=
ref
(
false
)
const
show
Add
Dialog
=
ref
(
false
)
const
productAfterCode
=
ref
()
// 第一个选择产品
const
productBeforeCode
=
ref
()
// 第二个选择产品
const
status
=
ref
(
true
)
// 判断是哪个选择产品
const
productData
=
ref
()
const
addProductRef
=
ref
()
const
previewProductAfterRef
=
ref
()
const
previewProductBeforeRef
=
ref
()
const
afterTitle
=
computed
(()
=>
{
if
(
productAfterCode
.
value
)
{
...
...
@@ -96,16 +100,36 @@ const beforeTitle = computed(() => {
else
return
'选择产品'
})
// 添加产品
let
addProductShow
=
()
=>
{
showAddDialog
.
value
=
true
}
let
openShow
=
()
=>
{
previewProductAfterRef
.
value
.
previewVisible
=
true
}
// 选择前产品
const
selectAfterProducts
=
()
=>
{
status
.
value
=
true
showDialog
.
value
=
true
addProductRef
.
value
.
status
=
true
addProductRef
.
value
.
showDialog
=
true
}
// 选择前产品
const
selectBeforeProducts
=
()
=>
{
status
.
value
=
false
showDialog
.
value
=
true
addProductRef
.
value
.
status
=
false
addProductRef
.
value
.
showDialog
=
true
}
const
codeChange
=
(
code
:
string
,
value
:
string
)
=>
{
if
(
code
===
'after'
)
{
previewProductAfterRef
.
value
.
previewVisible
=
true
productAfterCode
.
value
=
value
}
else
{
previewProductBeforeRef
.
value
.
previewVisible
=
true
productBeforeCode
.
value
=
value
}
}
// 选择场景
...
...
@@ -144,13 +168,12 @@ const onConfirm = () => {
if
(
!
productAfterCode
.
value
)
return
ElMessage
({
type
:
'warning'
,
message
:
'请先选择第一个产品'
})
if
(
!
productBeforeCode
.
value
)
return
ElMessage
({
type
:
'warning'
,
message
:
'请先选择第二个产品'
})
if
(
productBeforeCode
.
value
===
productAfterCode
.
value
)
return
ElMessage
({
type
:
'warning'
,
message
:
'不能选择相同产品'
})
showDialog
.
value
=
false
show
Add
Dialog
.
value
=
false
let
data
=
{
productAfterCode
:
productAfterCode
.
value
,
productBeforeCode
:
productBeforeCode
.
value
}
// sessionStorage.setItem('productAfterCode', productAfterCode.value)
// sessionStorage.setItem('productBeforeCode', productBeforeCode.value)
createPlatformProduct
(
data
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
200
)
{
init
()
...
...
@@ -192,34 +215,25 @@ init()
justify-content
:
center
;
align-items
:
center
;
padding
:
20px
;
}
.line-arrow
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
margin-right
:
50px
;
.line
{
width
:
300px
;
border
:
1px
solid
#dcdfe6
;
}
.arrow
{
border-top
:
10px
solid
transparent
;
border-bottom
:
10px
solid
transparent
;
border-left
:
10px
solid
#dcdfe6
;
}
.line-arrow
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
padding
:
0
50px
;
width
:
100%
;
.line
{
width
:
100%
;
border
:
1px
solid
#dcdfe6
;
}
.divider
{
height
:
100%
;
.arrow
{
border-top
:
10px
solid
transparent
;
border-bottom
:
10px
solid
transparent
;
border-left
:
10px
solid
#dcdfe6
;
}
:deep
(
.el-dialog__body
)
{
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
}
</
style
>
\ No newline at end of file
src/views/manage/productLog.vue
浏览文件 @
49315233
...
...
@@ -15,7 +15,14 @@
<el-input
v-model=
"filterForm.name"
placeholder=
"请输入名称"
clearable
/>
</el-form-item>
</el-col>
<el-col></el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"选择产品"
width=
"60px"
>
<el-select
v-model=
"filterForm.platformProductRelationId"
clearable
placeholder=
"请选择产品"
>
<el-option
v-for=
"item in productOptions"
:key=
"item.id"
:label=
"item.label"
:value=
"item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"10"
>
<el-form-item
label=
"同步时长/毫秒"
>
<div
class=
"input-class"
id=
"input-class"
@
mouseover=
"mouseover"
@
mouseleave=
"mouseleave"
>
...
...
@@ -141,8 +148,10 @@ import { ElMessage, ElTable } from "element-plus";
import
{
store
}
from
'@/store'
;
import
{
getProductLog
}
from
"@/services/api/systemApi/log/logApi"
;
import
{
useproductLogTableList
}
from
"../system/tableConfigData/useXyunLog"
;
import
{
getPlatformProductList
}
from
'@/services/api/platformProducts'
const
dateTime
=
ref
();
const
productOptions
=
ref
();
// 产品数据源
const
filterForm
=
ref
<
any
>
({
dateFrom
:
""
,
dateTo
:
""
,
...
...
@@ -150,7 +159,7 @@ const filterForm = ref<any>({
costTimeFrom
:
undefined
,
costTimeTo
:
undefined
,
queueId
:
""
,
platformProductRelationId
:
1
platformProductRelationId
:
null
});
const
detailForm
=
ref
<
any
>
({
flag
:
""
,
...
...
@@ -182,7 +191,7 @@ const filterChange = (value: any) => {
nextTick
(()
=>
{
filters
.
value
=
i
;
page
(
1
,
filterForm
.
value
.
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
,
filterForm
.
value
.
dateFrom
,
...
...
@@ -226,7 +235,7 @@ const handleScreen = () => {
filterForm
.
value
.
costTimeTo
===
''
)
{
store
.
commit
(
'search/setproductSearch'
,
filterForm
.
value
)
page
(
1
,
filterForm
.
value
.
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
,
filterForm
.
value
.
dateFrom
,
...
...
@@ -252,7 +261,7 @@ const handleScreen = () => {
const
handleSizeChange
=
(
val
:
number
)
=>
{
pageSize
.
value
=
val
;
page
(
1
,
filterForm
.
value
.
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
,
filterForm
.
value
.
dateFrom
,
...
...
@@ -268,7 +277,7 @@ const handleSizeChange = (val: number) => {
const
handleCurrentChange
=
(
val
:
number
)
=>
{
currentPage
.
value
=
val
;
page
(
1
,
filterForm
.
value
.
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
,
filterForm
.
value
.
dateFrom
,
...
...
@@ -306,7 +315,7 @@ const initfilter = () => {
filterForm
.
value
=
data
dateTime
.
value
=
[
new
Date
(
data
.
dateFrom
),
new
Date
(
data
.
dateTo
)]
page
(
1
,
filterForm
.
value
.
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
,
filterForm
.
value
.
dateFrom
,
...
...
@@ -381,6 +390,21 @@ const page = (
}
});
};
// 初始化数据
const
initProduct
=
()
=>
{
getPlatformProductList
().
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
200
)
{
res
.
data
.
records
.
forEach
((
item
:
any
)
=>
{
item
.
label
=
item
.
productAfterCodeName
+
'-'
+
item
.
productBeforeCodeName
})
productOptions
.
value
=
res
.
data
.
records
console
.
log
(
productOptions
.
value
,
'产品线数据源'
);
}
})
}
initProduct
()
</
script
>
<
style
lang=
"scss"
scoped
>
@import
'./scss/kingdeeLog.scss'
...
...
src/views/manage/synchronousMonitoring.vue
浏览文件 @
49315233
...
...
@@ -19,11 +19,23 @@
</el-col>
<el-col
:span=
"4"
style=
"text-align: center;"
>
<el-button
type=
"primary"
@
click=
"onConfirm"
>
筛选
</el-button>
<el-button
type=
"primary"
@
click=
"handleManual"
>
手动同步
</el-button>
</el-col>
</el-row>
</el-form>
<el-divider
/>
<div
style=
"margin: 20px 0"
>
<el-space
:size=
"30"
>
<!--
<el-button
type=
"primary"
icon=
"Refresh"
@
click=
"handleErrorManual"
>
重置同步
</el-button>
-->
<!--
<el-button
type=
"primary"
icon=
"Finished"
@
click=
"handleCheck"
>
校验
</el-button>
-->
<el-button
:type=
"flag === 1 ? 'info' : 'primary'"
icon=
"SwitchButton"
@
click=
"handleOpen"
>
启用同步
</el-button>
<el-button
:type=
"flag === 1 ? 'primary' : 'info'"
icon=
"CircleClose"
@
click=
"handleClose"
>
关闭同步
</el-button>
<el-button
type=
"primary"
icon=
"RefreshRight"
@
click=
"handleManual"
>
手动同步
</el-button>
<el-button
type=
"primary"
@
click=
"handleSelected"
>
导入 lic 文件
</el-button>
<input
ref=
"uploadInput"
type=
"file"
style=
"display: none;"
accept=
".tmp"
@
change=
"submitUpload"
>
</el-space>
</div>
<el-table
:data=
"monitoringData"
v-loading=
"loading"
border
stripe
@
filter-change=
"filterChange"
>
<el-table-column
prop=
"status"
label=
"同步状态"
:filters=
"[
{ text: '未同步', value: '0' },
...
...
@@ -73,8 +85,15 @@
import
{
ref
,
reactive
,
onMounted
}
from
'vue'
import
{
store
}
from
'@/store'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
;
import
{
getManual
}
from
'@/services/api/systemApi/synchronization/synchronizationAPI'
import
{
getSMonitoring
,
deleteSMonitoring
}
from
'@/services/api/systemApi/synchronousMonitoring'
import
{
getStart
,
getManual
,
getOff
,
getabnormal
,
getSRecords
,
importFile
}
from
"@/services/api/systemApi/synchronization/synchronizationAPI"
;
const
loading
=
ref
(
true
)
...
...
@@ -92,6 +111,9 @@ const pageData = reactive({
pageSize
:
10
})
// 1、 启动 0、 关闭
const
flag
=
ref
()
// 筛选
const
onConfirm
=
()
=>
{
store
.
commit
(
'search/setMonitoringSearch'
,
filterForm
.
value
)
...
...
@@ -111,7 +133,6 @@ const filterChange = (value: any) => {
Object
.
values
(
value
).
forEach
((
e
:
any
)
=>
{
i
=
e
[
0
]
})
// nextTick(() => {
filterForm
.
value
.
status
=
i
;
initSMonitoring
(
pageData
.
currentPage
,
...
...
@@ -121,7 +142,6 @@ const filterChange = (value: any) => {
filterForm
.
value
.
sFormId
,
filterForm
.
value
.
status
)
// });
};
// 每页新条数
...
...
@@ -149,6 +169,12 @@ const handleCurrentChange = (val: number) => {
)
};
const
initSRecords
=
()
=>
getSRecords
().
then
((
res
:
any
)
=>
flag
.
value
=
res
.
data
.
status
)
initSRecords
()
const
handleDelete
=
(
id
:
number
)
=>
{
ElMessageBox
.
confirm
(
'确定删除该字段?'
,
...
...
@@ -164,13 +190,108 @@ const handleDelete = (id: number) => {
}).
catch
(()
=>
{
return
false
})
}
const
handleErrorManual
=
async
()
=>
{
const
res
:
any
=
await
getabnormal
()
if
(
res
.
code
===
200
)
{
ElMessage
({
type
:
'success'
,
message
:
'重置同步成功'
})
}
};
// 开启自动同步
const
handleOpen
=
async
()
=>
{
// if (isDisabled.value === true) return;
const
res
:
any
=
await
getStart
();
if
(
res
.
code
===
200
)
{
initSRecords
()
setTimeout
(()
=>
{
initSMonitoring
(
pageData
.
currentPage
,
pageData
.
pageSize
,
filterForm
.
value
.
fid
,
filterForm
.
value
.
queueId
,
filterForm
.
value
.
sFormId
,
filterForm
.
value
.
status
)
},
1000
);
return
ElMessage
({
type
:
"success"
,
message
:
"自动启动成功"
});
}
};
// 关闭自动同步
const
handleClose
=
async
()
=>
{
const
res
:
any
=
await
getOff
();
if
(
res
.
code
===
200
)
{
initSRecords
()
setTimeout
(()
=>
{
initSMonitoring
(
pageData
.
currentPage
,
pageData
.
pageSize
,
filterForm
.
value
.
fid
,
filterForm
.
value
.
queueId
,
filterForm
.
value
.
sFormId
,
filterForm
.
value
.
status
)
},
1000
);
return
ElMessage
({
type
:
"success"
,
message
:
"关闭成功"
});
}
};
// 手动同步
const
handleManual
=
async
()
=>
{
const
res
:
any
=
await
getManual
()
if
(
res
.
code
===
200
)
{
initSRecords
()
setTimeout
(()
=>
{
initSMonitoring
(
pageData
.
currentPage
,
pageData
.
pageSize
,
filterForm
.
value
.
fid
,
filterForm
.
value
.
queueId
,
filterForm
.
value
.
sFormId
,
filterForm
.
value
.
status
)
},
1000
);
ElMessage
({
type
:
'success'
,
message
:
'手动同步成功'
})
}
};
let
uploadInput
=
ref
()
// 点击导入文件
const
handleSelected
=
()
=>
uploadInput
.
value
.
click
()
// //选好文件之后点击打开按钮
const
submitUpload
=
(
e
:
any
)
=>
{
const
files
=
e
.
target
.
files
const
rawFile
=
files
[
0
]
console
.
log
(
rawFile
);
if
(
!
rawFile
)
return
upload
(
rawFile
)
}
//上传
const
upload
=
(
rawFile
:
any
)
=>
{
uploadInput
.
value
=
null
uploadSectionFile
(
rawFile
)
}
const
uploadSectionFile
=
(
file
:
any
,
params
?:
any
)
=>
{
// let data = params
let
fromData
=
new
FormData
()
// FormData 对象
let
fileObj
=
file
// 相当于input里取得的files
console
.
log
(
'file'
,
fileObj
);
fromData
.
append
(
'file'
,
fileObj
)
// 文件对象
console
.
log
(
fromData
);
importFile
(
fromData
).
then
((
res
:
any
)
=>
{
//调用上传接口
if
(
res
.
code
===
200
)
{
ElMessage
({
type
:
'success'
,
message
:
'导入成功!'
})
}
})
}
// 监控数据
const
initSMonitoring
=
(
pageNo
?:
number
,
...
...
src/views/system/enableSynchronization.vue
浏览文件 @
49315233
<
template
>
<!-- 按钮 -->
<div
style=
"margin: 50px 50px"
>
<
!--
<
div
style=
"margin: 50px 50px"
>
<el-space
:size=
"30"
>
<el-button
type=
"primary"
icon=
"Finished"
@
click=
"handleCheck"
>
校验
</el-button>
<el-button
:type=
"flag === 1 ? 'info' : 'primary'"
icon=
"SwitchButton"
@
click=
"handleOpen"
>
启用同步
</el-button>
<el-button
:type=
"flag === 1 ? 'primary' : 'info'"
icon=
"CircleClose"
@
click=
"handleClose"
>
关闭同步
</el-button>
<el-button
type=
"primary"
icon=
"Refresh"
@
click=
"handleManual"
>
手动同步
</el-button>
<el-button
type=
"primary"
icon=
"Refresh
Right
"
@
click=
"handleManual"
>
手动同步
</el-button>
<el-button
type=
"primary"
@
click=
"handleSelected"
>
导入 lic 文件
</el-button>
<input
ref=
"uploadInput"
type=
"file"
style=
"display: none;"
accept=
".tmp"
@
change=
"submitUpload"
>
</el-space>
</div>
</div>
-->
<!-- 表单区域 -->
<div
style=
"margin: 100px 40% 0 10%"
>
<el-form
ref=
"ruleFormRef"
:rules=
"rules"
:model=
"sybchronizationForm"
:disabled=
"isDisabled"
label-position=
"right"
label-width=
"155px"
class=
"demo-ruleForm"
style=
"margin-top: 50px"
>
<el-row>
<!--
<el-col
:span=
"24"
>
<el-form-item
label=
"第三方地址:"
prop=
"thirdPartyUrl"
>
<el-input
v-model=
"sybchronizationForm.thirdPartyUrl"
placeholder=
"请输入第三方地址:"
clearable
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"第三方地址:"
prop=
"thirdPartyUrl"
>
<el-input
v-model=
"sybchronizationForm.thirdPartyUrl"
placeholder=
"请输入第三方地址:"
clearable
/>
</el-form-item>
</el-col>
<el-form-item
label=
"金蝶地址:"
prop=
"k3CloudUrl"
>
<el-input
v-model=
"sybchronizationForm.k3CloudUrl"
placeholder=
"请输入金蝶地址:"
clearable
/>
</el-form-item>
</el-col>
</el-col>
-->
<el-col
:span=
"24"
>
<el-form-item
label=
"商城地址:"
prop=
"k3CloudUrl"
>
<el-input
v-model=
"sybchronizationForm.k3CloudUrl"
placeholder=
"请输入商城地址:"
clearable
/>
</el-form-item>
</el-col>
<!--
<el-col
:span=
"24"
>
<el-form-item
label=
"账套ID:"
prop=
"dbid"
>
<el-input
v-model=
"sybchronizationForm.dbid"
placeholder=
"请输入账套ID:"
clearable
/>
</el-form-item>
...
...
@@ -35,7 +40,7 @@
<el-form-item
label=
"端口:"
prop=
"lang"
>
<el-input
v-model=
"sybchronizationForm.lang"
placeholder=
"请输入端口:"
clearable
/>
</el-form-item>
</el-col>
</el-col>
-->
<el-col
:span=
"24"
>
<el-form-item
label=
"账号:"
prop=
"uid"
>
<el-input
v-model=
"sybchronizationForm.uid"
placeholder=
"请输入账号:"
clearable
/>
...
...
@@ -47,12 +52,12 @@
show-password
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<
!--
<
el-col
:span=
"24"
>
<el-form-item
label=
"间隔时间/分钟:"
prop=
"duration"
>
<el-input
type=
"number"
v-model=
"sybchronizationForm.duration"
placeholder=
"间隔时间:"
clearable
@
input=
"(val: any) =>
{ if (val
<
=
0
||
val
>
= 60) sybchronizationForm.duration = '' }" />
</el-form-item>
</el-col>
</el-col>
-->
<el-col
:span=
"24"
>
<el-form-item
style=
"margin-left: 20%"
>
<el-button
type=
"primary"
icon=
"Download"
@
click=
"handleSave(ruleFormRef)"
>
保存配置
</el-button>
...
...
@@ -103,6 +108,7 @@ const isDisabled = ref(true);
// 1、 启动 0、 关闭
const
flag
=
ref
()
const
handleCheck
=
async
()
=>
{
if
(
!
isDisabled
.
value
)
{
const
res
:
any
=
await
getCheck
(
sybchronizationForm
.
value
)
...
...
src/views/system/tableConfigData/useXyunLog.ts
浏览文件 @
49315233
...
...
@@ -60,7 +60,7 @@ export const useproductLogTableList = () => {
// 每页条数
const
pageSize
=
ref
(
10
);
const
loading
=
ref
(
true
);
const
platformProductRelationId
=
1
const
platformProductRelationId
:
any
=
null
onMounted
(
async
()
=>
{
const
res
=
await
getProductLog
(
platformProductRelationId
,
currentPage
.
value
,
pageSize
.
value
);
tableList
.
value
=
res
.
data
.
records
;
...
...
src/vueFormCreate/core/element/ElCustomHeader.vue
浏览文件 @
49315233
<
template
>
<
!--
<
el-header
class=
"btn-bar"
>
<el-header
class=
"btn-bar"
>
<slot></slot>
<el-button
v-if=
"$attrs.uploadJson"
type=
"text"
@
click=
"$emit('uploadJson')"
>
<el-button
v-if=
"$attrs.uploadJson"
type=
"text"
@
click=
"$emit('uploadJson')"
>
<template
#
icon
>
<SvgIcon
iconClass=
"upload"
/>
</
template
>
导入JSON
</el-button>
<el-button
v-if=
"$attrs.clearable"
type=
"text"
@
click=
"$emit('clearable')"
>
<el-button
v-if=
"$attrs.clearable"
type=
"text"
@
click=
"$emit('clearable')"
>
<
template
#
icon
>
<SvgIcon
iconClass=
"clearable"
/>
</
template
>
清空
</el-button>
<el-button
v-if=
"$attrs.preview"
type=
"text"
@
click=
"$emit('preview')"
>
<el-button
v-if=
"$attrs.preview"
type=
"text"
@
click=
"$emit('preview')"
>
<
template
#
icon
>
<SvgIcon
iconClass=
"preview"
/>
</
template
>
预览
</el-button>
<el-button
v-if=
"$attrs.generateJson"
type=
"text"
@
click=
"$emit('generateJson')"
>
<el-button
v-if=
"$attrs.generateJson"
type=
"text"
@
click=
"$emit('generateJson')"
>
<
template
#
icon
>
<SvgIcon
iconClass=
"generate-json"
/>
</
template
>
生成JSON
</el-button>
<el-button
v-if=
"$attrs.generateCode"
type=
"text"
@
click=
"$emit('generateCode')"
>
<el-button
v-if=
"$attrs.generateCode"
type=
"text"
@
click=
"$emit('generateCode')"
>
<
template
#
icon
>
<SvgIcon
iconClass=
"generate-code"
/>
</
template
>
生成代码
</el-button>
</el-header>
-->
</el-header>
</template>
<
script
lang=
"ts"
>
...
...
src/vueFormCreate/core/element/ElGenerateForm.vue
浏览文件 @
49315233
...
...
@@ -119,8 +119,10 @@ export default defineComponent({
.
validate
()
.
then
((
validate
:
boolean
)
=>
{
if
(
validate
)
{
// console.log('成功', state.generateForm);
resolve
(
state
.
model
)
}
else
{
// console.log('失败');
ElMessage
.
error
(
'验证失败'
)
}
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论