Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
marketing
Overview
Overview
Details
Activity
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
marketing-web
marketing
Commits
b6e08e77
Commit
b6e08e77
authored
May 27, 2022
by
crushh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: dist
parent
6059d628
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
143 additions
and
86 deletions
+143
-86
base-config.vue
src/views/game/cmh/base-config.vue
+27
-22
form.vue
src/views/game/cmh/form.vue
+30
-13
gameTemplate.vue
src/views/game/cmh/gameTemplate.vue
+1
-1
index.vue
src/views/game/cmh/index.vue
+1
-1
prize-config.vue
src/views/game/cmh/prize-config.vue
+61
-38
rule-config.vue
src/views/game/cmh/rule-config.vue
+23
-11
No files found.
src/views/game/cmh/base-config.vue
View file @
b6e08e77
...
...
@@ -99,7 +99,7 @@
</el-form-item>
</div>
<dm-form-bottom
class=
"footer"
>
<el-button
type=
"primary"
@
click=
"
submit
"
>
保存并下一步
</el-button>
<el-button
type=
"primary"
@
click=
"
nextStep()
"
>
保存并下一步
</el-button>
</dm-form-bottom>
</el-form>
</
template
>
...
...
@@ -286,6 +286,7 @@ export default {
},
handleTemplateArr
(
data
,
echo
)
{
this
.
gameExt
=
data
;
const
materialKeys
=
[
'mpUrlView'
,
'adsLinkUrl'
,
'adsImageUrl'
];
data
.
forEach
(
item
=>
{
if
(
item
.
materialSize
)
{
const
{
width
,
height
,
size
}
=
JSON
.
parse
(
item
.
materialSize
);
...
...
@@ -296,7 +297,7 @@ export default {
this
.
prizeStyleJson
=
JSON
.
parse
(
item
.
materialValue
);
this
.
baseForm
[
'prizeStyleJson'
]
=
JSON
.
parse
(
item
.
materialValue
);
}
else
{
if
(
!
this
.
baseForm
[
item
.
materialKey
]
)
{
if
(
!
materialKeys
.
includes
(
item
.
materialKey
)
)
{
this
.
baseForm
[
item
.
materialKey
]
=
item
.
materialValue
;
}
}
...
...
@@ -364,26 +365,30 @@ export default {
handleNameChange
(
val
)
{
this
.
$emit
(
'change'
,
this
.
baseForm
);
},
submit
()
{
this
.
$refs
.
baseForm
.
validate
(
val
=>
{
if
(
val
)
{
const
data
=
{
...
this
.
baseForm
};
let
gameExt
=
[...
this
.
gameExt
];
let
obj
=
{};
Object
.
keys
(
data
).
forEach
(
key
=>
{
let
val
=
gameExt
.
filter
(
item
=>
item
.
materialKey
==
key
)[
0
];
if
(
val
)
{
val
.
materialValue
=
data
[
key
];
obj
[
key
]
=
val
;
}
});
obj
.
backMusicUrl
=
data
.
backMusicUrlObj
;
data
.
gameExt
=
obj
;
data
.
gameExt
.
prizeStyleJson
.
materialValue
=
JSON
.
stringify
(
data
.
gameExt
.
prizeStyleJson
.
materialValue
);
this
.
$emit
(
'nextStep'
,
data
);
}
else
{
this
.
scrollToError
(
this
);
}
nextStep
(
noNext
)
{
return
new
Promise
(
resolve
=>
{
this
.
$refs
.
baseForm
.
validate
(
val
=>
{
if
(
val
)
{
const
data
=
{
...
this
.
baseForm
};
let
gameExt
=
[...
this
.
gameExt
];
let
obj
=
{};
Object
.
keys
(
data
).
forEach
(
key
=>
{
let
val
=
gameExt
.
filter
(
item
=>
item
.
materialKey
==
key
)[
0
];
if
(
val
)
{
val
.
materialValue
=
data
[
key
];
obj
[
key
]
=
val
;
}
});
obj
.
backMusicUrl
=
data
.
backMusicUrlObj
;
data
.
gameExt
=
obj
;
data
.
gameExt
.
prizeStyleJson
.
materialValue
=
JSON
.
stringify
(
data
.
gameExt
.
prizeStyleJson
.
materialValue
);
resolve
(
true
);
this
.
$emit
(
'nextStep'
,
data
,
noNext
);
}
else
{
resolve
(
false
);
this
.
scrollToError
(
this
);
}
});
});
}
}
...
...
src/views/game/cmh/form.vue
View file @
b6e08e77
...
...
@@ -8,7 +8,7 @@
<div
class=
"rightBtn"
>
<el-button
@
click=
"returnNext"
v-if=
"!isInfo"
>
退出
</el-button>
<el-button
@
click=
"$router.go(-1)"
v-else
>
返回
</el-button>
<
!--
<el-button
type=
"primary"
>
发布并预览
</el-button>
--
>
<
el-button
type=
"primary"
@
click=
"submitForm"
>
发布并预览
</el-button
>
</div>
</div>
<div
class=
"content"
>
...
...
@@ -34,9 +34,9 @@
<dm-step
title=
"3.规则配置"
></dm-step>
</dm-steps>
<div
class=
"formContent"
>
<baseConfig
:gameStatus=
"gameStatus"
:templateArr=
"templateData"
:echoData=
"baseForm"
v-show=
"active == 0"
@
change=
"handleBaseConfigChange"
@
nextStep=
"data => nextStep(1, data)
"
/>
<prizeConfig
:gameStatus=
"gameStatus"
:invalidCard=
"invalidCard"
:prizeMax=
"prizeMax"
:echoData=
"prizeForm"
:prizeMin=
"prizeMin"
v-show=
"active == 1"
@
nextStep=
"data => nextStep(2, data)"
@
prevStep=
"step => (active = step)
"
/>
<ruleConfig
:gameStatus=
"gameStatus"
:gameTime=
"gameTime"
:shareCard=
"shareCard"
:shareReport=
"shareReport"
:echoData=
"ruleForm"
v-show=
"active == 2"
@
nextStep=
"data => submit(3, data)"
@
prevStep=
"step => (active = step)
"
:btnLoading=
"btnLoading"
/>
<baseConfig
ref=
"baseConfig"
:gameStatus=
"gameStatus"
:templateArr=
"templateData"
:echoData=
"baseForm"
v-show=
"active == 0"
@
change=
"handleBaseConfigChange"
@
nextStep=
"nextStep
"
/>
<prizeConfig
ref=
"prizeConfig"
:gameStatus=
"gameStatus"
:invalidCard=
"invalidCard"
:prizeMax=
"prizeMax"
:echoData=
"prizeForm"
:prizeMin=
"prizeMin"
v-show=
"active == 1"
@
nextStep=
"nextStep"
@
prevStep=
"step => active--
"
/>
<ruleConfig
ref=
"ruleConfig"
:gameStatus=
"gameStatus"
:gameTime=
"gameTime"
:shareCard=
"shareCard"
:shareReport=
"shareReport"
:echoData=
"ruleForm"
v-show=
"active == 2"
@
nextStep=
"nextStep"
@
prevStep=
"step => active--"
@
submit=
"submitForm
"
:btnLoading=
"btnLoading"
/>
</div>
</div>
<info
:data=
"echoData"
:invalidCard=
"invalidCard"
v-if=
"isInfo"
/>
...
...
@@ -236,17 +236,17 @@ export default {
this
.
getGameDetail
(
id
);
}
},
nextStep
(
step
,
data
)
{
this
.
active
=
step
;
console
.
log
(
data
);
this
.
submitData
=
{
...
this
.
submitData
,
...
data
};
nextStep
(
data
,
noNext
)
{
if
(
!
noNext
)
{
this
.
active
++
;
}
else
{
this
.
submitData
=
{
...
this
.
submitData
,
...
data
};
}
},
async
submit
(
step
,
data
)
{
this
.
submitData
=
{
...
this
.
submitData
,
...
data
};
console
.
log
(
this
.
submitData
);
async
handleSubmitData
()
{
console
.
log
(
'=====》submit'
);
this
.
submitData
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
submitData
));
console
.
log
(
this
.
submitData
);
const
{
ruleId
,
winChance
,
filterJson
,
filterJsonView
,
memberDesc
,
memberType
,
playConditionFlag
,
playTimes
,
shareFlag
,
shareImageUrl
,
gameRuleConditionList
,
gameName
,
gamePrizeList
,
prizeNoticeStock
,
prizeNoticeFlag
,
adsFlag
,
bulletFlag
,
backMusicFlag
,
templateId
,
gameRule
,
gameTime
,
gameExt
}
=
this
.
submitData
;
const
gameRuleInfo
=
{
ruleId
,
winChance
,
filterJson
,
filterJsonView
,
memberDesc
,
memberType
,
playConditionFlag
,
playTimes
,
shareFlag
,
shareImageUrl
,
shareRuleDesc
:
gameName
};
let
cardIdArr
=
[];
...
...
@@ -336,6 +336,23 @@ export default {
.
finally
((
this
.
btnLoading
=
false
));
});
},
validator
()
{
// 校验必填
return
Promise
.
all
([
this
.
$refs
.
baseConfig
.
nextStep
(
'noNext'
),
this
.
$refs
.
prizeConfig
.
nextStep
(
'noNext'
),
this
.
$refs
.
ruleConfig
.
nextStep
(
'noNext'
)]).
then
(
val
=>
{
if
(
!
val
.
includes
(
false
))
{
return
true
;
}
else
{
this
.
$message
.
error
(
'请确认必填字段都已填写且通过校验'
);
return
false
;
}
});
},
submitForm
()
{
this
.
validator
().
then
(
val
=>
{
if
(
!
val
)
return
;
this
.
handleSubmitData
();
});
},
getLink
(
row
)
{
const
{
startDate
,
gameId
,
gameName
}
=
row
;
this
.
gameId
=
gameId
;
...
...
src/views/game/cmh/gameTemplate.vue
View file @
b6e08e77
...
...
@@ -348,7 +348,7 @@ img {
.ad-image
{
margin
:
39px
15px
15px
;
border-radius
:
8px
;
height
:
150
px
;
height
:
75
px
;
width
:
calc
(
100%
-
30px
);
}
...
...
src/views/game/cmh/index.vue
View file @
b6e08e77
...
...
@@ -191,7 +191,7 @@ export default {
limitCode
:
this
.
$buttonCode
.
marketingCmhStop
},
visible
:
row
=>
{
return
row
.
status
===
1
&&
this
.
$getButtonLimit
(
this
.
$buttonCode
.
marketingCmhStop
);
return
(
row
.
status
===
1
||
row
.
status
===
0
)
&&
this
.
$getButtonLimit
(
this
.
$buttonCode
.
marketingCmhStop
);
},
handler
:
row
=>
this
.
stopGame
(
row
)
},
...
...
src/views/game/cmh/prize-config.vue
View file @
b6e08e77
...
...
@@ -38,7 +38,7 @@
<div
:class=
"['cardBox', row.status == 1 || row.status == 2 ? 'redBorder' : '']"
>
<el-tag
v-show=
"row.status == 1"
size=
"mini"
type=
"danger"
class=
"tagIcon"
>
删除
</el-tag>
<el-tag
v-show=
"row.status == 2"
size=
"mini"
type=
"danger"
class=
"tagIcon"
>
失效
</el-tag>
{{
row
.
prizeName
}}
{{
row
.
prizeName
Str
}}
</div>
</div>
</el-form-item>
...
...
@@ -72,7 +72,7 @@
<
template
slot-scope=
"{ row, $index }"
>
<div
v-if=
"row.prizeType == 1 || row.prizeType == 2"
style=
"width:60px;height:62px"
>
<el-form-item
:prop=
"'gamePrizeList.' + $index + '.' + 'prizeImageUrl'"
:rules=
"rules.prizeImageUrl"
label-width=
"0"
>
<dm-upload-avatar
class=
"upload-avatar"
width=
"60"
height=
"60"
:limit=
"
{ type: false, maxSize: 1 }" fileType="img" :model.sync="row.prizeImageUrl" tips=""
@backImg="obj => handleImgback(obj, row)"
:unused="row.isInfo">
</dm-upload-avatar>
<dm-upload-avatar
class=
"upload-avatar"
width=
"60"
height=
"60"
:limit=
"
{ type: false, maxSize: 1 }" fileType="img" :model.sync="row.prizeImageUrl" tips="" :unused="row.isInfo">
</dm-upload-avatar>
</el-form-item>
</div>
<el-form-item
label-width=
"0"
v-else
>
...
...
@@ -143,7 +143,7 @@
</el-form-item>
<dm-form-bottom
class=
"footer"
>
<el-button
@
click=
"prevStep"
>
上一步
</el-button>
<el-button
type=
"primary"
@
click=
"
submit
"
>
保存并下一步
</el-button>
<el-button
type=
"primary"
@
click=
"
nextStep()
"
>
保存并下一步
</el-button>
</dm-form-bottom>
<libCard
:show
.
sync=
"show"
@
sendItem=
"sendItem"
:cardLimitType=
"-1"
:cardLimit=
"1"
/>
</el-form>
...
...
@@ -153,6 +153,7 @@
import
dmUploadAvatar
from
'@/components/upload/avatar'
;
import
libCard
from
'@/views/sign/components/lib-card.vue'
;
import
Sortable
from
'sortablejs'
;
import
{
cardView
}
from
'@/service/api/gameApi.js'
;
export
default
{
data
()
{
const
prizeNoticeStockVal
=
(
rule
,
value
,
callback
)
=>
{
...
...
@@ -251,6 +252,9 @@ export default {
if
(
item
.
prizeImageUrl
)
{
item
.
prizeImageUrl
=
{
imgUrl
:
item
.
prizeImageUrl
,
code
:
item
.
prizeImageUrl
};
}
if
(
item
.
prizeType
==
2
)
{
item
.
prizeNameStr
=
item
.
prizeName
;
}
if
(
this
.
isEdit
)
{
item
.
prizeStockOriginal
=
item
.
prizeStock
;
}
else
{
...
...
@@ -263,6 +267,19 @@ export default {
},
invalidCard
(
val
)
{
console
.
log
(
'invalidCard====>'
);
this
.
handleInvalidCard
(
val
);
}
},
methods
:
{
async
cardView
()
{
let
cardIdArr
=
this
.
prizeForm
.
gamePrizeList
.
filter
(
item
=>
item
.
prizeType
==
2
).
map
(
item
=>
item
.
prizeRelationId
);
if
(
cardIdArr
.
length
)
{
const
{
result
}
=
await
cardView
({
ids
:
cardIdArr
.
join
(
','
)
});
console
.
log
(
result
);
this
.
handleInvalidCard
(
result
);
}
},
handleInvalidCard
(
val
)
{
this
.
prizeForm
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeType
==
2
)
{
item
.
status
=
val
[
item
.
prizeRelationId
].
invalid
;
...
...
@@ -273,9 +290,8 @@ export default {
}
}
});
}
},
methods
:
{
},
prizeStockRule
(
row
)
{
return
(
rule
,
value
,
callback
)
=>
{
if
(
row
.
prizeType
==
1
)
{
...
...
@@ -321,9 +337,6 @@ export default {
}
});
},
handleImgback
(
obj
,
row
)
{
console
.
log
(
obj
,
row
);
},
selectCard
(
index
)
{
this
.
show
=
true
;
this
.
index
=
index
;
...
...
@@ -333,6 +346,7 @@ export default {
const
data
=
this
.
prizeForm
.
gamePrizeList
[
this
.
index
];
data
.
prizeRelationId
=
selectedData
.
coupCardId
;
data
.
prizeName
=
selectedData
.
cardName
.
length
>
10
?
selectedData
.
cardName
.
slice
(
0
,
10
)
:
selectedData
.
cardName
;
data
.
prizeNameStr
=
data
.
prizeName
;
data
.
prizeImageUrl
=
{
imgUrl
:
this
.
imgeType
[
selectedData
.
cardType
],
code
:
this
.
imgeType
[
selectedData
.
cardType
]
};
data
.
prizeNumber
=
1
;
data
.
status
=
0
;
...
...
@@ -340,7 +354,7 @@ export default {
this
.
prizeForm
.
gamePrizeList
=
this
.
prizeForm
.
gamePrizeList
.
splice
(
0
);
},
addPrize
()
{
this
.
prizeForm
.
gamePrizeList
.
push
({
sort
:
this
.
prizeForm
.
gamePrizeList
.
length
,
exchangeType
:
0
,
isOld
:
0
});
this
.
prizeForm
.
gamePrizeList
.
push
({
sort
:
this
.
prizeForm
.
gamePrizeList
.
length
,
exchangeType
:
0
,
isOld
:
0
,
prizeName
:
''
});
},
del
(
index
)
{
this
.
prizeForm
.
gamePrizeList
.
splice
(
index
,
1
);
...
...
@@ -353,6 +367,7 @@ export default {
data
.
prizeRelationId
=
''
;
data
.
prizeImageUrl
=
''
;
this
.
prizeForm
.
gamePrizeList
=
this
.
prizeForm
.
gamePrizeList
.
splice
(
0
);
this
.
$refs
.
prizeForm
.
clearValidate
(
`gamePrizeList.
${
index
}
.prizeStock`
);
},
handleTypeChange
(
val
,
index
)
{
console
.
log
(
val
,
index
);
...
...
@@ -397,9 +412,9 @@ export default {
this
.
prizeForm
.
gamePrizeList
=
this
.
prizeForm
.
gamePrizeList
.
splice
(
0
);
},
prevStep
()
{
this
.
$emit
(
'prevStep'
,
0
);
this
.
$emit
(
'prevStep'
);
},
submit
()
{
validateData
()
{
let
invalid
=
false
;
let
arr
=
[];
this
.
$refs
.
prizeForm
.
validate
(
val
=>
{
...
...
@@ -408,12 +423,12 @@ export default {
this
.
scrollToError
(
this
);
}
});
if
(
!
this
.
boolVal
)
return
;
if
(
!
this
.
boolVal
)
return
false
;
this
.
prizeForm
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeType
==
2
&&
item
.
status
!=
0
&&
!
item
.
isOld
)
{
invalid
=
true
;
this
.
$message
.
error
(
`
${
item
.
prizeName
}
已
${
item
.
status
==
1
?
'删除'
:
'失效'
}
,请重新关联奖品`
);
return
;
return
false
;
}
if
(
item
.
prizeType
==
0
)
{
arr
.
push
(
item
);
...
...
@@ -421,39 +436,47 @@ export default {
});
if
(
!
arr
.
length
)
{
this
.
$message
.
error
(
'请至少包含一个谢谢参与的奖项'
);
return
;
return
false
;
}
if
(
invalid
)
return
;
if
(
invalid
)
return
false
;
if
(
this
.
prizeForm
.
gamePrizeList
.
length
<
this
.
prizeMin
)
{
this
.
$message
.
error
(
`请配置至少
${
this
.
prizeMin
}
个奖项`
);
return
;
return
false
;
}
if
(
this
.
prizeForm
.
gamePrizeList
.
length
>
this
.
prizeMax
)
{
this
.
$message
.
error
(
`请配置最多
${
this
.
prizeMax
}
个奖项`
);
return
;
return
false
;
}
let
data
=
{
...
this
.
prizeForm
};
data
=
JSON
.
parse
(
JSON
.
stringify
(
data
));
data
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeImageUrl
)
{
item
.
prizeImageUrl
=
item
.
prizeImageUrl
.
imgUrl
||
''
;
}
if
(
item
.
prizeType
==
0
)
{
item
.
prizeStock
=
-
1
;
}
if
(
item
.
prizeType
!=
0
)
{
if
(
this
.
isEdit
&&
item
.
isOld
)
{
let
num
=
item
.
prizeStock
-
item
.
prizeStockOriginal
;
item
.
optNum
=
num
;
}
else
{
item
.
optNum
=
item
.
prizeStock
;
}
}
else
{
item
.
optNum
=
-
1
;
return
true
;
},
nextStep
(
noNext
)
{
return
new
Promise
(
resolve
=>
{
const
val
=
this
.
validateData
();
if
(
val
)
{
let
data
=
{
...
this
.
prizeForm
};
data
=
JSON
.
parse
(
JSON
.
stringify
(
data
));
data
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeImageUrl
)
{
item
.
prizeImageUrl
=
item
.
prizeImageUrl
.
imgUrl
||
''
;
}
if
(
item
.
prizeType
==
0
)
{
item
.
prizeStock
=
-
1
;
}
if
(
item
.
prizeType
!=
0
)
{
if
(
this
.
isEdit
&&
item
.
isOld
)
{
let
num
=
item
.
prizeStock
-
item
.
prizeStockOriginal
;
item
.
optNum
=
num
;
}
else
{
item
.
optNum
=
item
.
prizeStock
;
}
}
else
{
item
.
optNum
=
-
1
;
}
});
this
.
$emit
(
'nextStep'
,
data
,
noNext
);
}
resolve
(
val
);
});
this
.
$emit
(
'nextStep'
,
data
);
}
}
};
...
...
src/views/game/cmh/rule-config.vue
View file @
b6e08e77
...
...
@@ -225,7 +225,8 @@ export default {
},
isAdd
:
this
.
$route
.
meta
.
type
===
'add'
,
isEdit
:
this
.
$route
.
meta
.
type
===
'edit'
,
gameDays
:
0
gameDays
:
0
,
boolVal
:
true
};
},
props
:
{
...
...
@@ -377,26 +378,36 @@ export default {
return
true
;
},
prevStep
()
{
this
.
$emit
(
'prevStep'
,
1
);
this
.
$emit
(
'prevStep'
);
},
clearValidate
(
name
)
{
this
.
$refs
.
ruleForm
.
clearValidate
(
name
);
},
submit
()
{
validateData
()
{
if
(
this
.
ruleForm
.
playConditionFlag
==
1
&&
!
this
.
ruleForm
.
gameRuleConditionList
.
filter
(
item
=>
item
.
conditionType
!=
-
1
).
length
)
{
this
.
$message
.
error
(
'请至少勾选一项'
);
return
;
return
false
;
}
const
conditionType2
=
this
.
ruleForm
.
gameRuleConditionList
.
filter
(
item
=>
item
.
conditionType
==
2
);
if
(
this
.
ruleForm
.
playConditionFlag
==
1
&&
conditionType2
.
length
&&
conditionType2
[
0
].
conditionJson
.
type
==
21
)
{
const
maxTimes
=
conditionType2
[
0
].
conditionJson
.
type
==
21
?
conditionType2
[
0
].
conditionJson
.
value
:
conditionType2
[
0
].
conditionJson
.
value
*
this
.
gameDays
;
if
(
maxTimes
>
this
.
ruleForm
.
playTimes
)
{
this
.
$message
.
error
(
`每人最多可玩次数需大于免费游戏次数
${
maxTimes
}
`
);
return
;
return
false
;
}
}
this
.
$refs
.
ruleForm
.
validate
((
val
,
obj
)
=>
{
this
.
$refs
.
ruleForm
.
validate
(
val
=>
{
this
.
boolVal
=
val
;
if
(
!
val
)
{
this
.
scrollToError
(
this
);
}
});
if
(
!
this
.
boolVal
)
return
false
;
return
true
;
},
nextStep
(
noNext
)
{
return
new
Promise
(
resolve
=>
{
const
val
=
this
.
validateData
();
if
(
val
)
{
const
data
=
{
...
this
.
ruleForm
};
const
arr
=
[];
...
...
@@ -412,12 +423,13 @@ export default {
});
data
.
gameRuleConditionList
=
arr
;
console
.
log
(
data
);
this
.
$emit
(
'nextStep'
,
data
);
}
else
{
this
.
scrollToError
(
this
);
this
.
$emit
(
'nextStep'
,
data
,
noNext
);
}
console
.
log
(
obj
);
resolve
(
val
);
});
},
submit
()
{
this
.
$emit
(
'submit'
);
}
}
};
...
...
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