Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
DG_FAF
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
template admin
DG_FAF
Commits
f75b271b
Commit
f75b271b
authored
Mar 06, 2023
by
李维
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加排序题
parent
1fab9d5d
Changes
7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
224 additions
and
44 deletions
+224
-44
SortWords.prefab
assets/DG_FAF/prefabs/SortWords/SortWords.prefab
+1
-1
SortWords_DG_FAF.js
assets/DG_FAF/prefabs/SortWords/SortWords_DG_FAF.js
+16
-9
DG_FAF.fire
assets/DG_FAF/scene/DG_FAF.fire
+26
-26
DG_FAF.ts
assets/DG_FAF/scene/DG_FAF.ts
+133
-6
defaultData_DG_FAF.ts
assets/DG_FAF/script/defaultData_DG_FAF.ts
+1
-1
form.component.html
form_angular/src/app/form/form.component.html
+46
-1
form.component.ts
form_angular/src/app/form/form.component.ts
+1
-0
No files found.
assets/DG_FAF/prefabs/SortWords/SortWords.prefab
View file @
f75b271b
...
@@ -483,7 +483,7 @@
...
@@ -483,7 +483,7 @@
},
},
{
{
"__type__": "cc.Node",
"__type__": "cc.Node",
"_name": "word",
"_name": "
_
word",
"_objFlags": 0,
"_objFlags": 0,
"_parent": {
"_parent": {
"__id__": 11
"__id__": 11
...
...
assets/DG_FAF/prefabs/SortWords/SortWords_DG_FAF.js
View file @
f75b271b
...
@@ -29,8 +29,9 @@ cc.Class({
...
@@ -29,8 +29,9 @@ cc.Class({
// LIFE-CYCLE CALLBACKS:
// LIFE-CYCLE CALLBACKS:
// onLoad () {},
// onLoad () {},
currentInputIndex
:
0
,
currentInputIndex
:
null
,
start
()
{
start
()
{
this
.
currentInputIndex
=
0
;
this
.
initEventListener
();
this
.
initEventListener
();
},
},
...
@@ -45,7 +46,8 @@ cc.Class({
...
@@ -45,7 +46,8 @@ cc.Class({
okBtn
.
on
(
"
click
"
,
()
=>
{
okBtn
.
on
(
"
click
"
,
()
=>
{
const
selectedContainer
=
cc
.
find
(
"
mainContainer/selected
"
,
this
.
node
);
const
selectedContainer
=
cc
.
find
(
"
mainContainer/selected
"
,
this
.
node
);
const
allData
=
[];
const
allData
=
[];
selectedContainer
.
children
.
forEach
(
child
=>
{
selectedContainer
.
children
.
forEach
((
child
,
index
)
=>
{
child
.
myData
.
currentIndex
=
index
;
allData
.
push
(
child
.
myData
)
allData
.
push
(
child
.
myData
)
})
})
this
.
node
.
emit
(
"
onEnter
"
,
allData
);
this
.
node
.
emit
(
"
onEnter
"
,
allData
);
...
@@ -58,16 +60,16 @@ cc.Class({
...
@@ -58,16 +60,16 @@ cc.Class({
},
},
show
(
options
)
{
show
(
options
)
{
this
.
node
.
opacity
=
0
;
this
.
node
.
opacity
=
255
;
this
.
node
.
x
=
0
;
this
.
node
.
x
=
0
;
this
.
node
.
y
=
0
;
this
.
node
.
y
=
0
;
this
.
node
.
active
=
true
;
const
template
=
cc
.
find
(
"
mainContainer/options/word
"
,
this
.
node
);
const
template
=
cc
.
find
(
"
mainContainer/options/
_
word
"
,
this
.
node
);
const
optionsContainer
=
cc
.
find
(
"
mainContainer/options
"
,
this
.
node
);
const
optionsContainer
=
cc
.
find
(
"
mainContainer/options
"
,
this
.
node
);
const
selectedContainer
=
cc
.
find
(
"
mainContainer/selected
"
,
this
.
node
);
const
selectedContainer
=
cc
.
find
(
"
mainContainer/selected
"
,
this
.
node
);
options
.
forEach
(
item
=>
{
options
.
forEach
(
item
=>
{
const
newWord
=
cc
.
instantiate
(
template
);
const
newWord
=
cc
.
instantiate
(
template
);
newWord
.
name
=
"
word
"
;
newWord
.
getComponent
(
cc
.
Label
).
string
=
item
.
word
;
newWord
.
getComponent
(
cc
.
Label
).
string
=
item
.
word
;
newWord
.
active
=
true
;
newWord
.
active
=
true
;
newWord
.
myData
=
{
newWord
.
myData
=
{
...
@@ -79,16 +81,14 @@ cc.Class({
...
@@ -79,16 +81,14 @@ cc.Class({
optionsContainer
.
addChild
(
newWord
);
optionsContainer
.
addChild
(
newWord
);
newWord
.
on
(
"
click
"
,
()
=>
{
newWord
.
on
(
"
click
"
,
()
=>
{
if
(
newWord
.
selected
)
{
if
(
newWord
.
myData
.
selected
)
{
selectedContainer
.
removeChild
(
newWord
)
selectedContainer
.
removeChild
(
newWord
)
optionsContainer
.
addChild
(
newWord
)
optionsContainer
.
addChild
(
newWord
)
newWord
.
myData
.
selected
=
false
;
newWord
.
myData
.
selected
=
false
;
ewWord
.
myData
.
currentIndex
=
-
1
;
}
else
{
}
else
{
optionsContainer
.
removeChild
(
newWord
)
optionsContainer
.
removeChild
(
newWord
)
selectedContainer
.
addChild
(
newWord
)
selectedContainer
.
addChild
(
newWord
)
newWord
.
myData
.
selected
=
true
;
newWord
.
myData
.
selected
=
true
;
newWord
.
myData
.
currentIndex
=
this
.
currentInputIndex
++
;
}
}
})
})
});
});
...
@@ -99,10 +99,17 @@ cc.Class({
...
@@ -99,10 +99,17 @@ cc.Class({
},
},
hide
()
{
hide
()
{
const
optionsContainer
=
cc
.
find
(
"
mainContainer/options
"
,
this
.
node
);
const
selectedContainer
=
cc
.
find
(
"
mainContainer/selected
"
,
this
.
node
);
this
.
node
.
opacity
=
255
;
this
.
node
.
opacity
=
255
;
cc
.
tween
(
this
.
node
).
to
(
0.1
,
{
opacity
:
0
}).
call
(()
=>
{
cc
.
tween
(
this
.
node
).
to
(
0.1
,
{
opacity
:
0
}).
call
(()
=>
{
this
.
node
.
x
=
5000
;
this
.
node
.
x
=
5000
;
this
.
node
.
active
=
false
;
optionsContainer
.
children
.
forEach
(
child
=>
{
if
(
child
.
name
!=
"
_word
"
)
{
child
.
destroy
();
}
})
selectedContainer
.
removeAllChildren
();
}).
start
();
}).
start
();
}
}
// update (dt) {},
// update (dt) {},
...
...
assets/DG_FAF/scene/DG_FAF.fire
View file @
f75b271b
...
@@ -2881,7 +2881,7 @@
...
@@ -2881,7 +2881,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
8cJEY1+WlLn7+Ees86mvmp
"
"_id": "
f3EiGLz1NDc4D8RdALWpcl
"
},
},
{
{
"__type__": "cc.Node",
"__type__": "cc.Node",
...
@@ -2948,7 +2948,7 @@
...
@@ -2948,7 +2948,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
2dytsJT51DPpQxEOL5WgfY
"
"_id": "
1dzmvk2WNLybGOFWu+bkme
"
},
},
{
{
"__type__": "cc.Sprite",
"__type__": "cc.Sprite",
...
@@ -2980,7 +2980,7 @@
...
@@ -2980,7 +2980,7 @@
"_fillRange": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_isTrimmedMode": true,
"_atlas": null,
"_atlas": null,
"_id": "
00pf/LUbhOB4LiEJEj7cvA
"
"_id": "
cfK116pA5E3rJPBTkQXbhd
"
},
},
{
{
"__type__": "cc.BlockInputEvents",
"__type__": "cc.BlockInputEvents",
...
@@ -2990,7 +2990,7 @@
...
@@ -2990,7 +2990,7 @@
"__id__": 60
"__id__": 60
},
},
"_enabled": true,
"_enabled": true,
"_id": "
30jJaNpKlLyo2TLbUHgwz2
"
"_id": "
754BzPZlxJgYZwyfK9VeV5
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3068,7 +3068,7 @@
...
@@ -3068,7 +3068,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
65woOMq3ZN37z1Xp8U4RV8
"
"_id": "
57hZXsIzZIioUCR8w+iTOC
"
},
},
{
{
"__type__": "cc.Node",
"__type__": "cc.Node",
...
@@ -3135,7 +3135,7 @@
...
@@ -3135,7 +3135,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
570ZJcch9IWKgt1rMU3yMf
"
"_id": "
e5DKi46NdM363yZ0bToDkN
"
},
},
{
{
"__type__": "cc.Widget",
"__type__": "cc.Widget",
...
@@ -3162,7 +3162,7 @@
...
@@ -3162,7 +3162,7 @@
"_isAbsVerticalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 0,
"_originalWidth": 0,
"_originalHeight": 0,
"_originalHeight": 0,
"_id": "
05BVea+OlM16R05XeYpNz5
"
"_id": "
e1fgau3adEKIPfOYgZ0KdO
"
},
},
{
{
"__type__": "cc.Layout",
"__type__": "cc.Layout",
...
@@ -3194,7 +3194,7 @@
...
@@ -3194,7 +3194,7 @@
"_N$verticalDirection": 1,
"_N$verticalDirection": 1,
"_N$horizontalDirection": 0,
"_N$horizontalDirection": 0,
"_N$affectedByScale": false,
"_N$affectedByScale": false,
"_id": "
bfB5MPc0NFEZCPEAqQp6lO
"
"_id": "
27AqdDVU5Cr4ZonWIZ17gu
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3276,11 +3276,11 @@
...
@@ -3276,11 +3276,11 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
2a7Hud0/xCiLXnK66ah5wm
"
"_id": "
af7LcdiRNEu6OIKQtyY4qy
"
},
},
{
{
"__type__": "cc.Node",
"__type__": "cc.Node",
"_name": "word",
"_name": "
_
word",
"_objFlags": 0,
"_objFlags": 0,
"_parent": {
"_parent": {
"__id__": 69
"__id__": 69
...
@@ -3343,7 +3343,7 @@
...
@@ -3343,7 +3343,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
f1jffZE21FvJp+FYVnGRpF
"
"_id": "
24la8mlS1Kv56l3T0Ja1Jh
"
},
},
{
{
"__type__": "cc.Label",
"__type__": "cc.Label",
...
@@ -3376,7 +3376,7 @@
...
@@ -3376,7 +3376,7 @@
"_N$fontFamily": "Arial",
"_N$fontFamily": "Arial",
"_N$overflow": 0,
"_N$overflow": 0,
"_N$cacheMode": 0,
"_N$cacheMode": 0,
"_id": "
a9ULDPLjJAL4ByC5ghW/qP
"
"_id": "
67CcGsSLtGZbHjRFHCZps1
"
},
},
{
{
"__type__": "cc.Button",
"__type__": "cc.Button",
...
@@ -3444,7 +3444,7 @@
...
@@ -3444,7 +3444,7 @@
"hoverSprite": null,
"hoverSprite": null,
"_N$disabledSprite": null,
"_N$disabledSprite": null,
"_N$target": null,
"_N$target": null,
"_id": "6
aDnDBQ4BLp5qAcUldLhqV
"
"_id": "6
3+3E4GyVKMYbR+2yeTuhD
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3482,7 +3482,7 @@
...
@@ -3482,7 +3482,7 @@
"_isAbsVerticalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 0,
"_originalWidth": 0,
"_originalHeight": 0,
"_originalHeight": 0,
"_id": "
dbeUV0oAdMkoUX7whT39g6
"
"_id": "
7bBkLt755MLbXHGoJM4q8Q
"
},
},
{
{
"__type__": "cc.Layout",
"__type__": "cc.Layout",
...
@@ -3514,7 +3514,7 @@
...
@@ -3514,7 +3514,7 @@
"_N$verticalDirection": 1,
"_N$verticalDirection": 1,
"_N$horizontalDirection": 0,
"_N$horizontalDirection": 0,
"_N$affectedByScale": false,
"_N$affectedByScale": false,
"_id": "
faXxKgaaVL35pkDm3g8E3J
"
"_id": "
c6mk63Ne5M0KZ5M8Exwf1I
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3610,7 +3610,7 @@
...
@@ -3610,7 +3610,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
6a+9q2JdVKWorw6Tdjdmpq
"
"_id": "
a7rCwj+WxDpZffmGLFrFRp
"
},
},
{
{
"__type__": "cc.Node",
"__type__": "cc.Node",
...
@@ -3677,7 +3677,7 @@
...
@@ -3677,7 +3677,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
201ygQsTBLPqWoIAPTrF3e
"
"_id": "
8aFT0yjrhOM6YkkP+l+1RA
"
},
},
{
{
"__type__": "cc.Sprite",
"__type__": "cc.Sprite",
...
@@ -3709,7 +3709,7 @@
...
@@ -3709,7 +3709,7 @@
"_fillRange": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_isTrimmedMode": true,
"_atlas": null,
"_atlas": null,
"_id": "
66AgH7wFxFoJVsZBUXaShb
"
"_id": "
08WztnS9lGjIUZHeWrgNGP
"
},
},
{
{
"__type__": "cc.Button",
"__type__": "cc.Button",
...
@@ -3777,7 +3777,7 @@
...
@@ -3777,7 +3777,7 @@
"hoverSprite": null,
"hoverSprite": null,
"_N$disabledSprite": null,
"_N$disabledSprite": null,
"_N$target": null,
"_N$target": null,
"_id": "
77AAijsM1Mu7STJKA5kLiV
"
"_id": "
bf1OUxMdtK4br9YG+smHT+
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3855,7 +3855,7 @@
...
@@ -3855,7 +3855,7 @@
"_is3DNode": false,
"_is3DNode": false,
"_groupIndex": 0,
"_groupIndex": 0,
"groupIndex": 0,
"groupIndex": 0,
"_id": "
e52OcTCZ9DWKQ69/QEdQ+j
"
"_id": "
9616fFlYxFBLgyg2A5NYDn
"
},
},
{
{
"__type__": "cc.Sprite",
"__type__": "cc.Sprite",
...
@@ -3887,7 +3887,7 @@
...
@@ -3887,7 +3887,7 @@
"_fillRange": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_isTrimmedMode": true,
"_atlas": null,
"_atlas": null,
"_id": "4
1HajXuhFFLZJ/8t/SWtH/
"
"_id": "4
fk1UrqZpDCall8r89ssFN
"
},
},
{
{
"__type__": "cc.Button",
"__type__": "cc.Button",
...
@@ -3955,7 +3955,7 @@
...
@@ -3955,7 +3955,7 @@
"hoverSprite": null,
"hoverSprite": null,
"_N$disabledSprite": null,
"_N$disabledSprite": null,
"_N$target": null,
"_N$target": null,
"_id": "
1d/eTvKPhIA6IgQHl62p3b
"
"_id": "
7bsIwp83xN9qIshem+89wq
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -3998,7 +3998,7 @@
...
@@ -3998,7 +3998,7 @@
"_N$verticalDirection": 1,
"_N$verticalDirection": 1,
"_N$horizontalDirection": 0,
"_N$horizontalDirection": 0,
"_N$affectedByScale": false,
"_N$affectedByScale": false,
"_id": "
47qbtGqlBAlr4hz+Lu4DgK
"
"_id": "
f28JAhwDFHp6Y8EaYUQFod
"
},
},
{
{
"__type__": "cc.Widget",
"__type__": "cc.Widget",
...
@@ -4025,7 +4025,7 @@
...
@@ -4025,7 +4025,7 @@
"_isAbsVerticalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 0,
"_originalWidth": 0,
"_originalHeight": 0,
"_originalHeight": 0,
"_id": "
e2voxEJAdBI4uUPgSePbQF
"
"_id": "
d5ecb59A1OqJ4xwxu00AJU
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
@@ -4046,7 +4046,7 @@
...
@@ -4046,7 +4046,7 @@
"__id__": 59
"__id__": 59
},
},
"_enabled": true,
"_enabled": true,
"_id": "
d6ACvoJspN8LxPPh7gIGJT
"
"_id": "
6a6qCSGUVO4bu3dozn7odA
"
},
},
{
{
"__type__": "cc.Widget",
"__type__": "cc.Widget",
...
@@ -4073,7 +4073,7 @@
...
@@ -4073,7 +4073,7 @@
"_isAbsVerticalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 0,
"_originalWidth": 0,
"_originalHeight": 0,
"_originalHeight": 0,
"_id": "
9eUm8aLA5ERrjo+cVhnuDj
"
"_id": "
72o40ck/BHKp2Gv5BcAgFh
"
},
},
{
{
"__type__": "cc.PrefabInfo",
"__type__": "cc.PrefabInfo",
...
...
assets/DG_FAF/scene/DG_FAF.ts
View file @
f75b271b
...
@@ -20,6 +20,7 @@ const CONNECTION = "6";
...
@@ -20,6 +20,7 @@ const CONNECTION = "6";
const
PRONUNCIATION_ASSESSMENT
=
"
7
"
;
const
PRONUNCIATION_ASSESSMENT
=
"
7
"
;
const
RIGHT_OR_WRONG
=
"
8
"
;
const
RIGHT_OR_WRONG
=
"
8
"
;
const
CROSSWORD_PUZZLE
=
"
9
"
;
const
CROSSWORD_PUZZLE
=
"
9
"
;
const
SORT_WORDS
=
"
10
"
;
const
layer_1
=
5
const
layer_1
=
5
const
layer_2
=
10
const
layer_2
=
10
...
@@ -64,12 +65,6 @@ export default class SceneComponent extends MyCocosSceneComponent {
...
@@ -64,12 +65,6 @@ export default class SceneComponent extends MyCocosSceneComponent {
this
.
initScorePanel
();
this
.
initScorePanel
();
this
.
initActionButton
();
this
.
initActionButton
();
this
.
initScoreShow
();
this
.
initScoreShow
();
setTimeout
(()
=>
{
this
.
sortWords
.
emit
(
"
show
"
,
[
{
word
:
"
Fine
"
},
{
word
:
"
thank
"
},
{
word
:
"
you
"
}
])
},
1000
);
}
}
// 初始化屏幕储存
// 初始化屏幕储存
...
@@ -389,6 +384,12 @@ export default class SceneComponent extends MyCocosSceneComponent {
...
@@ -389,6 +384,12 @@ export default class SceneComponent extends MyCocosSceneComponent {
case
CROSSWORD_PUZZLE
:
case
CROSSWORD_PUZZLE
:
validater
=
this
.
setCrosswordPuzzleInput
(
configItem
,
isDebug
);
validater
=
this
.
setCrosswordPuzzleInput
(
configItem
,
isDebug
);
this
.
scoreValidater
.
push
(
validater
);
this
.
scoreValidater
.
push
(
validater
);
break
;
// 文字排序
case
SORT_WORDS
:
validater
=
this
.
setSortWords
(
configItem
,
this
.
data
.
hotZoneItemArr
[
configItem
.
linkHotZoneIndex
],
isDebug
);
this
.
scoreValidater
.
push
(
validater
);
break
;
}
}
});
});
...
@@ -1287,6 +1288,122 @@ export default class SceneComponent extends MyCocosSceneComponent {
...
@@ -1287,6 +1288,122 @@ export default class SceneComponent extends MyCocosSceneComponent {
return
validater
return
validater
}
}
// 设置单词排序题
setSortWords
(
contentData
,
hotZoneItemData
,
debugMode
=
false
)
{
// 该题型需要配置一个显示正确错误符号的热区
const
resultIconShowData
=
this
.
data
.
hotZoneItemArr
[
contentData
.
linkResultShowHotZoneIndex
];
const
resultIconRect
=
this
.
newRectNode
(
resultIconShowData
,
layer_2
,
debugMode
);
this
.
newDecorativeFrame
(
hotZoneItemData
,
layer_1
,
"
#FFFFFF
"
,
"
#6dbef6
"
,
debugMode
);
const
rect
=
this
.
newRectNode
(
hotZoneItemData
,
layer_3
,
debugMode
);
// 选项列表
const
optionList
=
[];
// 已选的单词列表
let
sortedList
=
[];
// 正确校验方法 - 默认返null
let
validater
=
()
=>
{
const
result
=
{
detail
:
{
contentType
:
SORT_WORDS
,
configIndex
:
contentData
.
index
,
contentIndex
:
-
1
,
optionList
:
[],
sortedList
:
[],
right
:
true
},
configIndex
:
contentData
.
index
,
rect
:
resultIconRect
,
allRight
:
true
,
score
:
-
1
}
result
.
detail
.
optionList
=
optionList
;
result
.
detail
.
sortedList
=
sortedList
;
if
(
optionList
.
length
!=
sortedList
.
length
)
{
// 如果选项长度和选择的长度不等,则判定为没有完成所有选项
// 错误
result
.
allRight
=
false
;
result
.
detail
.
right
=
false
;
return
[
result
]
}
// 遍历选择的列表 判断是否和设定一致 注意:设定的序号从1开始
let
hasWrong
=
false
;
sortedList
.
forEach
(
word
=>
{
if
((
Number
(
word
.
currentIndex
)
+
1
)
!=
Number
(
word
.
option
.
sortIndex
))
{
hasWrong
=
true
;
}
})
if
(
!
hasWrong
)
{
// 正确 返回分数
result
.
score
=
contentData
.
score
&&
!
isNaN
(
Number
(
contentData
.
score
))
?
Number
(
contentData
.
score
)
:
0
;
return
[
result
]
}
else
{
// 错误
result
.
allRight
=
false
;
result
.
detail
.
right
=
false
;
return
[
result
]
}
};
contentData
.
contentList
.
forEach
((
option
,
index
)
=>
{
optionList
.
push
({
word
:
option
.
text
,
index
:
index
,
sortIndex
:
option
.
sortIndex
})
});
rect
.
on
(
"
click
"
,
async
()
=>
{
if
(
this
.
submitted
)
{
return
;
}
this
.
currentInputTarget
=
rect
;
// 取得上次输入文字 传到键盘中 作为默认显示 - 清空当前文字节点
let
lastText
=
""
;
if
(
rect
.
cleanLast
)
{
lastText
=
rect
.
cleanLast
()
}
let
text
=
""
sortedList
=
await
this
.
asyncShowSortWordsModal
(
optionList
);
if
(
sortedList
==
undefined
)
{
// 点击了取消 还原上次显示
text
=
lastText
;
}
else
{
const
textArr
=
[];
sortedList
.
forEach
(
word
=>
{
textArr
.
push
(
word
.
option
.
word
);
})
text
=
textArr
.
join
(
"
"
);
}
const
inputLabel
=
this
.
newInputTextNode
(
text
,
0
);
inputLabel
.
x
=
rect
.
width
/
2
;
inputLabel
.
y
=
rect
.
height
/
2
;
currentInputText
=
text
;
// 更新清除方法
rect
.
cleanLast
=
()
=>
{
inputLabel
.
destroy
();
return
text
;
}
// 校验必须在上面更新了校验器之后进行 否则本次选择不会生效
this
.
checkCanSubmit
();
rect
.
addChild
(
inputLabel
);
})
return
validater
}
// 设置选项菜单热区 [已修改]
// 设置选项菜单热区 [已修改]
setTextOptionList
(
contentData
,
debugMode
=
false
)
{
setTextOptionList
(
contentData
,
debugMode
=
false
)
{
// 存放子校验器
// 存放子校验器
...
@@ -1925,6 +2042,16 @@ export default class SceneComponent extends MyCocosSceneComponent {
...
@@ -1925,6 +2042,16 @@ export default class SceneComponent extends MyCocosSceneComponent {
})
})
}
}
// 同步方式显示单词排序框
asyncShowSortWordsModal
(
options
)
{
return
new
Promise
((
resovle
,
reject
)
=>
{
this
.
sortWords
.
emit
(
"
show
"
,
options
);
this
.
onSortWordsEndCallback
=
(
target
,
e
)
=>
{
resovle
(
e
);
}
})
}
onDestroy
()
{
onDestroy
()
{
cc
.
audioEngine
.
stop
(
this
.
currentAudioPlay
);
cc
.
audioEngine
.
stop
(
this
.
currentAudioPlay
);
}
}
...
...
assets/DG_FAF/script/defaultData_DG_FAF.ts
View file @
f75b271b
This diff is collapsed.
Click to expand it.
form_angular/src/app/form/form.component.html
View file @
f75b271b
...
@@ -52,8 +52,10 @@
...
@@ -52,8 +52,10 @@
<nz-option
[
nzValue
]="
CONNECTION
"
nzLabel=
"连线组"
></nz-option>
<nz-option
[
nzValue
]="
CONNECTION
"
nzLabel=
"连线组"
></nz-option>
<nz-option
[
nzValue
]="
RIGHT_OR_WRONG
"
nzLabel=
"判断对错"
></nz-option>
<nz-option
[
nzValue
]="
RIGHT_OR_WRONG
"
nzLabel=
"判断对错"
></nz-option>
<nz-option
[
nzValue
]="
CROSSWORD_PUZZLE
"
nzLabel=
"纵横字谜"
></nz-option>
<nz-option
[
nzValue
]="
CROSSWORD_PUZZLE
"
nzLabel=
"纵横字谜"
></nz-option>
<nz-option
[
nzValue
]="
SORT_WORDS
"
nzLabel=
"单词排序"
></nz-option>
<nz-option
[
nzValue
]="
IMAGE_SELECT
"
nzLabel=
"图片选项"
nzDisabled
></nz-option>
<nz-option
[
nzValue
]="
IMAGE_SELECT
"
nzLabel=
"图片选项"
nzDisabled
></nz-option>
<nz-option
[
nzValue
]="
PRONUNCIATION_ASSESSMENT
"
nzLabel=
"语音评测"
nzDisabled
></nz-option>
<nz-option
[
nzValue
]="
PRONUNCIATION_ASSESSMENT
"
nzLabel=
"语音评测"
nzDisabled
></nz-option>
</nz-select>
</nz-select>
<div
*
ngIf=
"it.hotZoneType != '' && it.hotZoneType != AUDIO_PLAY && it.hotZoneType != TEXTINPUT && it.hotZoneType != PRONUNCIATION_ASSESSMENT"
style=
"padding: 10px 0 10px 150px;"
>
<div
*
ngIf=
"it.hotZoneType != '' && it.hotZoneType != AUDIO_PLAY && it.hotZoneType != TEXTINPUT && it.hotZoneType != PRONUNCIATION_ASSESSMENT"
style=
"padding: 10px 0 10px 150px;"
>
<div
style=
"margin-bottom: 16px;"
>
<div
style=
"margin-bottom: 16px;"
>
...
@@ -421,6 +423,49 @@
...
@@ -421,6 +423,49 @@
</tr>
</tr>
</tbody>
</tbody>
</nz-table>
</nz-table>
<!-- 单词排序 -->
<nz-table
*
ngIf=
"it.hotZoneType == SORT_WORDS"
#
contentTable
[
nzData
]="
it
.
contentList
"
[
nzShowPagination
]="
false
"
>
<thead>
<tr>
<th
nzWidth=
"100px"
nzAlign=
"center"
>
序号
</th>
<th
nzWidth=
"100px"
>
正确序号
</th>
<th>
文字
</th>
<th
nzWidth=
"150px"
>
操作
</th>
</tr>
</thead>
<tbody>
<tr
*
ngFor=
"let data of contentTable.data; let i = index;"
>
<ng-container
*
ngIf=
"!(editCache[data.uuid] && editCache[data.uuid].edit); else editTemplate"
>
<td
nzWidth=
"100px"
nzAlign=
"center"
>
{{ i + 1 }}
</td>
<td
nzWidth=
"100px"
>
{{ data.sortIndex }}
</td>
<td>
{{ data.text }}
</td>
<td
nzWidth=
"150px"
>
<a
(
click
)="
startHotZoneConfigEdit
(
data
.
uuid
,
data
)"
>
编辑
</a>
<nz-divider
nzType=
"vertical"
></nz-divider>
<a
nz-popconfirm
nzPopconfirmTitle=
"删除后不可恢复,确定删除吗?"
(
nzOnConfirm
)="
deleteHotZoneConfigItem
(
it
,
i
)"
>
删除
</a>
</td>
</ng-container>
<ng-template
#
editTemplate
>
<td
nzWidth=
"100px"
nzAlign=
"center"
>
{{ i + 1 }}
</td>
<td
nzWidth=
"100px"
>
<input
type=
"text"
nz-input
[(
ngModel
)]="
editCache
[
data
.
uuid
].
data
.
sortIndex
"
/>
</td>
<td>
<input
type=
"text"
nz-input
[(
ngModel
)]="
editCache
[
data
.
uuid
].
data
.
text
"
/>
</td>
<td
nzWidth=
"150px"
>
<a
(
click
)="
saveHotZoneConfigEdit
(
data
.
uuid
,
it
)"
class=
"save"
>
保存
</a>
<nz-divider
nzType=
"vertical"
></nz-divider>
<a
nz-popconfirm
nzPopconfirmTitle=
"确定取消?"
(
nzOnConfirm
)="
cancelHotZoneConfigEdit
(
data
.
uuid
,
data
)"
>
取消
</a>
</td>
</ng-template>
</tr>
</tbody>
</nz-table>
</div>
</div>
<div
*
ngIf=
"it.hotZoneType == AUDIO_PLAY"
style=
"padding: 10px 0 10px 100px;"
>
<div
*
ngIf=
"it.hotZoneType == AUDIO_PLAY"
style=
"padding: 10px 0 10px 100px;"
>
<app-audio-recorder
<app-audio-recorder
...
@@ -465,7 +510,7 @@
...
@@ -465,7 +510,7 @@
</nz-select>
</nz-select>
</div>
</div>
<div
*
ngIf=
"it.hotZoneType == HOT_ZONE_RADIO || it.hotZoneType == HOT_ZONE_CHECKBOX || it.hotZoneType == CONNECTION || it.hotZoneType == RIGHT_OR_WRONG || it.hotZoneType == CROSSWORD_PUZZLE"
style=
"margin: 10px 10px;"
>
<div
*
ngIf=
"it.hotZoneType == HOT_ZONE_RADIO || it.hotZoneType == HOT_ZONE_CHECKBOX || it.hotZoneType == CONNECTION || it.hotZoneType == RIGHT_OR_WRONG || it.hotZoneType == CROSSWORD_PUZZLE
|| it.hotZoneType == SORT_WORDS
"
style=
"margin: 10px 10px;"
>
<span
style=
"display: inline-block; text-align: right; width: 150px;"
>
检查结果显示热区:
</span>
<span
style=
"display: inline-block; text-align: right; width: 150px;"
>
检查结果显示热区:
</span>
<nz-select
nzShowSearch
nzAllowClear
[(
ngModel
)]="
it
.
linkResultShowHotZoneIndex
"
style=
"width: 300px;"
(
ngModelChange
)="
save
()"
>
<nz-select
nzShowSearch
nzAllowClear
[(
ngModel
)]="
it
.
linkResultShowHotZoneIndex
"
style=
"width: 300px;"
(
ngModelChange
)="
save
()"
>
<nz-option
*
ngFor=
"let itOption of item.hotZoneItemArr"
[
nzValue
]="
itOption
.
index
"
[
nzLabel
]="
itOption
.
itemName
"
></nz-option>
<nz-option
*
ngFor=
"let itOption of item.hotZoneItemArr"
[
nzValue
]="
itOption
.
index
"
[
nzLabel
]="
itOption
.
itemName
"
></nz-option>
...
...
form_angular/src/app/form/form.component.ts
View file @
f75b271b
...
@@ -48,6 +48,7 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy, AfterViewIni
...
@@ -48,6 +48,7 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy, AfterViewIni
PRONUNCIATION_ASSESSMENT
=
"
7
"
;
PRONUNCIATION_ASSESSMENT
=
"
7
"
;
RIGHT_OR_WRONG
=
"
8
"
;
RIGHT_OR_WRONG
=
"
8
"
;
CROSSWORD_PUZZLE
=
"
9
"
;
CROSSWORD_PUZZLE
=
"
9
"
;
SORT_WORDS
=
"
10
"
;
constructor
(
private
appRef
:
ApplicationRef
,
private
changeDetectorRef
:
ChangeDetectorRef
,
private
nzMessageService
:
NzMessageService
,
private
modal
:
NzModalService
)
{
constructor
(
private
appRef
:
ApplicationRef
,
private
changeDetectorRef
:
ChangeDetectorRef
,
private
nzMessageService
:
NzMessageService
,
private
modal
:
NzModalService
)
{
...
...
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