init
51
cocosTem/.gitignore
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# Fireball Projects
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/library/
|
||||
/temp/
|
||||
/local/
|
||||
/build/
|
||||
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# npm files
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
npm-debug.log
|
||||
node_modules/
|
||||
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# Logs and databases
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
*.log
|
||||
*.sql
|
||||
*.sqlite
|
||||
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# files for debugger
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
*.sln
|
||||
*.pidb
|
||||
*.suo
|
||||
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# OS generated files
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
.DS_Store
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
# WebStorm files
|
||||
#/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
.idea/
|
||||
|
||||
#//////////////////////////
|
||||
# VS Code files
|
||||
#//////////////////////////
|
||||
|
||||
.vscode/
|
2
cocosTem/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# hello-world
|
||||
Hello world new project template.
|
6
cocosTem/assets/Scene.meta
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"ver": "1.0.1",
|
||||
"uuid": "29f52784-2fca-467b-92e7-8fd9ef8c57b7",
|
||||
"isGroup": false,
|
||||
"subMetas": {}
|
||||
}
|
692
cocosTem/assets/Scene/helloworld1.fire
Normal file
@ -0,0 +1,692 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.SceneAsset",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"_native": "",
|
||||
"scene": {
|
||||
"__id__": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Scene",
|
||||
"_objFlags": 0,
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_is3DNode": true,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"autoReleaseAssets": false,
|
||||
"_id": "2d2f792f-a40c-49bb-a189-ed176a246e49"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Canvas",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 10
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 252,
|
||||
"g": 252,
|
||||
"b": 252,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
480,
|
||||
320,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "a286bbGknJLZpRpxROV6M94"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Main Camera",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 4
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
260.20003889642146,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "bajsC4KotFLZ6XLFLKnycL"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Camera",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"_cullingMask": 4294967295,
|
||||
"_clearFlags": 7,
|
||||
"_backgroundColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_depth": -1,
|
||||
"_zoomRatio": 1,
|
||||
"_targetTexture": null,
|
||||
"_fov": 60,
|
||||
"_orthoSize": 10,
|
||||
"_nearClip": 1,
|
||||
"_farClip": 4096,
|
||||
"_ortho": true,
|
||||
"_rect": {
|
||||
"__type__": "cc.Rect",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 1,
|
||||
"height": 1
|
||||
},
|
||||
"_renderStages": 1,
|
||||
"_alignWithScreen": true,
|
||||
"_id": "c7r5+B15dD56dUBiNj+0KH"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "background",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 6
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 27,
|
||||
"g": 38,
|
||||
"b": 46,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "e2e0crkOLxGrpMxpbC4iQg1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 1,
|
||||
"_target": null,
|
||||
"_alignFlags": 45,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 200,
|
||||
"_originalHeight": 150,
|
||||
"_id": "86+yud7pFDSrM+lsxByQvE"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "410fb916-8721-4663-bab8-34397391ace7"
|
||||
},
|
||||
"_type": 1,
|
||||
"_sizeMode": 0,
|
||||
"_fillType": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_atlas": null,
|
||||
"_id": "1bi08CbSBHsZSXfV2t6eKB"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "cocos",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 195,
|
||||
"height": 270
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
50,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "c4f30YOS65G64U2TwufdJ+2"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "31bc895a-c003-4566-a9f3-2e54ae1c17dc"
|
||||
},
|
||||
"_type": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillType": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_atlas": null,
|
||||
"_id": "42SM+92GZAXYsjLj89MLM+"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "label",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 11
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 180,
|
||||
"height": 75.6
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
-180,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "31f1bH7V69Ajr1iXhluMpTB"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 10
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_useOriginalSize": false,
|
||||
"_string": "场景一",
|
||||
"_N$string": "场景一",
|
||||
"_fontSize": 60,
|
||||
"_lineHeight": 60,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_batchAsBitmap": false,
|
||||
"_styleFlags": 0,
|
||||
"_underlineHeight": 0,
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_N$cacheMode": 0,
|
||||
"_id": "74saCdhnNHjbyDsdd1bTTt"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "start",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 13
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 0,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 360,
|
||||
"height": 75.6
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
-2.689,
|
||||
228.739,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "a4hq+O8n9Ku6fPkInwkYqy"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 12
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_useOriginalSize": false,
|
||||
"_string": "游戏已经开始",
|
||||
"_N$string": "游戏已经开始",
|
||||
"_fontSize": 60,
|
||||
"_lineHeight": 60,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_batchAsBitmap": false,
|
||||
"_styleFlags": 0,
|
||||
"_underlineHeight": 0,
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_N$cacheMode": 0,
|
||||
"_id": "19R1zEAyhNW7DqaCbkPuSQ"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Canvas",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"_designResolution": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_fitWidth": false,
|
||||
"_fitHeight": true,
|
||||
"_id": "6f5cteKmlPh6NGUsUqxlFR"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 1,
|
||||
"_target": null,
|
||||
"_alignFlags": 45,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_id": "99b3jBgkdOd72Zkl4/Otpp"
|
||||
}
|
||||
]
|
7
cocosTem/assets/Scene/helloworld1.fire.meta
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"ver": "1.2.7",
|
||||
"uuid": "2d2f792f-a40c-49bb-a189-ed176a246e49",
|
||||
"asyncLoadAssets": false,
|
||||
"autoReleaseAssets": false,
|
||||
"subMetas": {}
|
||||
}
|
816
cocosTem/assets/Scene/helloworld2.fire
Normal file
@ -0,0 +1,816 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.SceneAsset",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"_native": "",
|
||||
"scene": {
|
||||
"__id__": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Scene",
|
||||
"_objFlags": 0,
|
||||
"_parent": null,
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 2
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_is3DNode": true,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"autoReleaseAssets": false,
|
||||
"_id": "f9a417c7-2760-4487-9752-b2bf9d52d0cd"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Canvas",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 3
|
||||
},
|
||||
{
|
||||
"__id__": 5
|
||||
},
|
||||
{
|
||||
"__id__": 8
|
||||
},
|
||||
{
|
||||
"__id__": 13
|
||||
},
|
||||
{
|
||||
"__id__": 16
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 18
|
||||
},
|
||||
{
|
||||
"__id__": 19
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 252,
|
||||
"g": 252,
|
||||
"b": 252,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
480,
|
||||
320,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "a286bbGknJLZpRpxROV6M94"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Main Camera",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 4
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
260.20003889642146,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "bajsC4KotFLZ6XLFLKnycL"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Camera",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"_cullingMask": 4294967295,
|
||||
"_clearFlags": 7,
|
||||
"_backgroundColor": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 0,
|
||||
"g": 0,
|
||||
"b": 0,
|
||||
"a": 255
|
||||
},
|
||||
"_depth": -1,
|
||||
"_zoomRatio": 1,
|
||||
"_targetTexture": null,
|
||||
"_fov": 60,
|
||||
"_orthoSize": 10,
|
||||
"_nearClip": 1,
|
||||
"_farClip": 4096,
|
||||
"_ortho": true,
|
||||
"_rect": {
|
||||
"__type__": "cc.Rect",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 1,
|
||||
"height": 1
|
||||
},
|
||||
"_renderStages": 1,
|
||||
"_alignWithScreen": true,
|
||||
"_id": "c7r5+B15dD56dUBiNj+0KH"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "background",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 6
|
||||
},
|
||||
{
|
||||
"__id__": 7
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 27,
|
||||
"g": 38,
|
||||
"b": 46,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "e2e0crkOLxGrpMxpbC4iQg1"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 1,
|
||||
"_target": null,
|
||||
"_alignFlags": 45,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 200,
|
||||
"_originalHeight": 150,
|
||||
"_id": "86+yud7pFDSrM+lsxByQvE"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 5
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "410fb916-8721-4663-bab8-34397391ace7"
|
||||
},
|
||||
"_type": 1,
|
||||
"_sizeMode": 0,
|
||||
"_fillType": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_atlas": null,
|
||||
"_id": "1bi08CbSBHsZSXfV2t6eKB"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "cocos",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 9
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 11
|
||||
},
|
||||
{
|
||||
"__id__": 12
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 163,
|
||||
"g": 169,
|
||||
"b": 215,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 195,
|
||||
"height": 270
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
50,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "c4f30YOS65G64U2TwufdJ+2"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "label copy",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 10
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 80,
|
||||
"height": 75.6
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
-67.446,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "7fpk8dYSZHUqhhA8izl2yc"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 9
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_useOriginalSize": false,
|
||||
"_string": "点我",
|
||||
"_N$string": "点我",
|
||||
"_fontSize": 40,
|
||||
"_lineHeight": 60,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_batchAsBitmap": false,
|
||||
"_styleFlags": 0,
|
||||
"_underlineHeight": 0,
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_N$cacheMode": 0,
|
||||
"_id": "5bqdY+nJFOLZy5zju4uvgV"
|
||||
},
|
||||
{
|
||||
"__type__": "280c3rsZJJKnZ9RqbALVwtK",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"_id": "9apaRusDREA7cns5r4lASF"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Sprite",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 8
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_srcBlendFactor": 770,
|
||||
"_dstBlendFactor": 771,
|
||||
"_spriteFrame": {
|
||||
"__uuid__": "31bc895a-c003-4566-a9f3-2e54ae1c17dc"
|
||||
},
|
||||
"_type": 0,
|
||||
"_sizeMode": 1,
|
||||
"_fillType": 0,
|
||||
"_fillCenter": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"_fillStart": 0,
|
||||
"_fillRange": 0,
|
||||
"_isTrimmedMode": true,
|
||||
"_atlas": null,
|
||||
"_id": "42SM+92GZAXYsjLj89MLM+"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "label",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 14
|
||||
},
|
||||
{
|
||||
"__id__": 15
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 255,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 120,
|
||||
"height": 75.6
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
0,
|
||||
-180,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "31f1bH7V69Ajr1iXhluMpTB"
|
||||
},
|
||||
{
|
||||
"__type__": "280c3rsZJJKnZ9RqbALVwtK",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_enabled": true,
|
||||
"_id": "6baj3CQdBEiY9nOoO8f78d"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 13
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_useOriginalSize": false,
|
||||
"_string": "点我",
|
||||
"_N$string": "点我",
|
||||
"_fontSize": 60,
|
||||
"_lineHeight": 60,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_batchAsBitmap": false,
|
||||
"_styleFlags": 0,
|
||||
"_underlineHeight": 0,
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_N$cacheMode": 0,
|
||||
"_id": "74saCdhnNHjbyDsdd1bTTt"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "start",
|
||||
"_objFlags": 0,
|
||||
"_parent": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 17
|
||||
}
|
||||
],
|
||||
"_prefab": null,
|
||||
"_opacity": 0,
|
||||
"_color": {
|
||||
"__type__": "cc.Color",
|
||||
"r": 255,
|
||||
"g": 255,
|
||||
"b": 255,
|
||||
"a": 255
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 240,
|
||||
"height": 75.6
|
||||
},
|
||||
"_anchorPoint": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0.5,
|
||||
"y": 0.5
|
||||
},
|
||||
"_trs": {
|
||||
"__type__": "TypedArray",
|
||||
"ctor": "Float64Array",
|
||||
"array": [
|
||||
-2.689,
|
||||
228.739,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"_eulerAngles": {
|
||||
"__type__": "cc.Vec3",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"_skewX": 0,
|
||||
"_skewY": 0,
|
||||
"_is3DNode": false,
|
||||
"_groupIndex": 0,
|
||||
"groupIndex": 0,
|
||||
"_id": "9dP/51SK5KaaGnHV3pyiu+"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Label",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_enabled": true,
|
||||
"_materials": [
|
||||
{
|
||||
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
|
||||
}
|
||||
],
|
||||
"_useOriginalSize": false,
|
||||
"_string": "游戏已经开始",
|
||||
"_N$string": "游戏已经开始",
|
||||
"_fontSize": 60,
|
||||
"_lineHeight": 60,
|
||||
"_enableWrapText": true,
|
||||
"_N$file": null,
|
||||
"_isSystemFontUsed": true,
|
||||
"_spacingX": 0,
|
||||
"_batchAsBitmap": false,
|
||||
"_styleFlags": 0,
|
||||
"_underlineHeight": 0,
|
||||
"_N$horizontalAlign": 1,
|
||||
"_N$verticalAlign": 1,
|
||||
"_N$fontFamily": "Arial",
|
||||
"_N$overflow": 0,
|
||||
"_N$cacheMode": 0,
|
||||
"_id": "88xe+64S1Pi4WXePlAzXuO"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Canvas",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"_designResolution": {
|
||||
"__type__": "cc.Size",
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"_fitWidth": true,
|
||||
"_fitHeight": true,
|
||||
"_id": "6f5cteKmlPh6NGUsUqxlFR"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Widget",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 2
|
||||
},
|
||||
"_enabled": true,
|
||||
"alignMode": 1,
|
||||
"_target": null,
|
||||
"_alignFlags": 45,
|
||||
"_left": 0,
|
||||
"_right": 0,
|
||||
"_top": 0,
|
||||
"_bottom": 0,
|
||||
"_verticalCenter": 0,
|
||||
"_horizontalCenter": 0,
|
||||
"_isAbsLeft": true,
|
||||
"_isAbsRight": true,
|
||||
"_isAbsTop": true,
|
||||
"_isAbsBottom": true,
|
||||
"_isAbsHorizontalCenter": true,
|
||||
"_isAbsVerticalCenter": true,
|
||||
"_originalWidth": 0,
|
||||
"_originalHeight": 0,
|
||||
"_id": "5a1vk9sfZDY4JvjsCOVU1b"
|
||||
}
|
||||
]
|
7
cocosTem/assets/Scene/helloworld2.fire.meta
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"ver": "1.2.7",
|
||||
"uuid": "f9a417c7-2760-4487-9752-b2bf9d52d0cd",
|
||||
"asyncLoadAssets": false,
|
||||
"autoReleaseAssets": false,
|
||||
"subMetas": {}
|
||||
}
|
6
cocosTem/assets/Script.meta
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"ver": "1.0.1",
|
||||
"uuid": "4734c20c-0db8-4eb2-92ea-e692f4d70934",
|
||||
"isGroup": false,
|
||||
"subMetas": {}
|
||||
}
|
20
cocosTem/assets/Script/emitNode.js
Normal file
@ -0,0 +1,20 @@
|
||||
cc.Class({
|
||||
extends: cc.Component,
|
||||
|
||||
properties: {
|
||||
|
||||
},
|
||||
|
||||
onLoad: function () {
|
||||
this.node.on(
|
||||
cc.Node.EventType.TOUCH_END,
|
||||
e => {
|
||||
e.stopPropagation();
|
||||
if (window.eventBus) {
|
||||
window.eventBus.emit('WEB_MSG_TYPE.SELECT_NODE', e.currentTarget);
|
||||
}
|
||||
},
|
||||
this
|
||||
);
|
||||
},
|
||||
});
|
9
cocosTem/assets/Script/emitNode.js.meta
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.8",
|
||||
"uuid": "280c3aec-6492-4a9d-9f51-a9b00b570b4a",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
6
cocosTem/assets/Texture.meta
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"ver": "1.0.1",
|
||||
"uuid": "7b81d4e8-ec84-4716-968d-500ac1d78a54",
|
||||
"isGroup": false,
|
||||
"subMetas": {}
|
||||
}
|
BIN
cocosTem/assets/Texture/HelloWorld.png
Normal file
After Width: | Height: | Size: 37 KiB |
36
cocosTem/assets/Texture/HelloWorld.png.meta
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"ver": "2.3.4",
|
||||
"uuid": "6aa0aa6a-ebee-4155-a088-a687a6aadec4",
|
||||
"type": "sprite",
|
||||
"wrapMode": "clamp",
|
||||
"filterMode": "bilinear",
|
||||
"premultiplyAlpha": false,
|
||||
"genMipmaps": false,
|
||||
"packable": true,
|
||||
"width": 195,
|
||||
"height": 270,
|
||||
"platformSettings": {},
|
||||
"subMetas": {
|
||||
"HelloWorld": {
|
||||
"ver": "1.0.4",
|
||||
"uuid": "31bc895a-c003-4566-a9f3-2e54ae1c17dc",
|
||||
"rawTextureUuid": "6aa0aa6a-ebee-4155-a088-a687a6aadec4",
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 195,
|
||||
"height": 270,
|
||||
"rawWidth": 195,
|
||||
"rawHeight": 270,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"subMetas": {}
|
||||
}
|
||||
}
|
||||
}
|
BIN
cocosTem/assets/Texture/singleColor.png
Normal file
After Width: | Height: | Size: 82 B |
36
cocosTem/assets/Texture/singleColor.png.meta
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"ver": "2.3.4",
|
||||
"uuid": "a8027877-d8d6-4645-97a0-52d4a0123dba",
|
||||
"type": "sprite",
|
||||
"wrapMode": "clamp",
|
||||
"filterMode": "bilinear",
|
||||
"premultiplyAlpha": false,
|
||||
"genMipmaps": false,
|
||||
"packable": true,
|
||||
"width": 2,
|
||||
"height": 2,
|
||||
"platformSettings": {},
|
||||
"subMetas": {
|
||||
"singleColor": {
|
||||
"ver": "1.0.4",
|
||||
"uuid": "410fb916-8721-4663-bab8-34397391ace7",
|
||||
"rawTextureUuid": "a8027877-d8d6-4645-97a0-52d4a0123dba",
|
||||
"trimType": "auto",
|
||||
"trimThreshold": 1,
|
||||
"rotated": false,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0,
|
||||
"trimX": 0,
|
||||
"trimY": 0,
|
||||
"width": 2,
|
||||
"height": 2,
|
||||
"rawWidth": 2,
|
||||
"rawHeight": 2,
|
||||
"borderTop": 0,
|
||||
"borderBottom": 0,
|
||||
"borderLeft": 0,
|
||||
"borderRight": 0,
|
||||
"subMetas": {}
|
||||
}
|
||||
}
|
||||
}
|
7
cocosTem/assets/migration.meta
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"ver": "1.0.1",
|
||||
"uuid": "c591e2ea-99c7-43fe-bb67-06c67bb74c67",
|
||||
"isSubpackage": false,
|
||||
"subpackageName": "",
|
||||
"subMetas": {}
|
||||
}
|
17
cocosTem/assets/migration/use_v2.1-2.2.1_cc.Toggle_event.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* This script is automatically generated by Cocos Creator and is only used for projects compatible with the v2.1.0 ~ 2.2.1 version.
|
||||
* You do not need to manually add this script in any other project.
|
||||
* If you don't use cc.Toggle in your project, you can delete this script directly.
|
||||
* If your project is hosted in VCS such as git, submit this script together.
|
||||
*
|
||||
* 此脚本由 Cocos Creator 自动生成,仅用于兼容 v2.1.0 ~ 2.2.1 版本的工程,
|
||||
* 你无需在任何其它项目中手动添加此脚本。
|
||||
* 如果你的项目中没用到 Toggle,可直接删除该脚本。
|
||||
* 如果你的项目有托管于 git 等版本库,请将此脚本一并上传。
|
||||
*/
|
||||
|
||||
if (cc.Toggle) {
|
||||
// Whether to trigger 'toggle' and 'checkEvents' events when modifying 'toggle.isChecked' in the code
|
||||
// 在代码中修改 'toggle.isChecked' 时是否触发 'toggle' 与 'checkEvents' 事件
|
||||
cc.Toggle._triggerEventInScript_isChecked = true;
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.8",
|
||||
"uuid": "7cbbe4d5-14ab-47f4-a440-6683133e72bb",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
88
cocosTem/assets/web2gameSDk.ts
Normal file
@ -0,0 +1,88 @@
|
||||
cc.web2cocosSDK = {
|
||||
// 根据页码切换游戏
|
||||
changeGameByPageIndex: (pageIndex, callback) => { },
|
||||
/**
|
||||
* 加载场景
|
||||
*
|
||||
* @param {String} sceneName 场景名字
|
||||
* @param {*} callFunc
|
||||
*/
|
||||
loadScene(sceneName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
cc.director.loadScene(sceneName, err => {
|
||||
if (!err) {
|
||||
resolve(sceneName)
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 加载游戏(prefab)
|
||||
*
|
||||
* @param {String} name 图片名称
|
||||
* @param {Function} callFunc
|
||||
*/
|
||||
loadGame: (gameName, callFunc) => { },
|
||||
|
||||
// 卸载游戏
|
||||
unloadGame: () => {
|
||||
},
|
||||
/**
|
||||
* 加载自定义的图片
|
||||
*
|
||||
* @param {String} name 图片名称
|
||||
* @param {Function} callFunc
|
||||
*/
|
||||
loadCustomImage(name, callFunc) {
|
||||
// cc.loader.load('../cocos-build/web-mobile/custom/' + name, callFunc);
|
||||
},
|
||||
//
|
||||
/**
|
||||
* 重置game分辨率
|
||||
*
|
||||
* @param {cc.Vec2} editorSize {width:2048,height:1152}
|
||||
* @param {number} ratio 缩放的倍率
|
||||
* @param {Function} callFunc
|
||||
*/
|
||||
updateResolution(editorSize, ratio, callFunc) {
|
||||
var gameDiv = document.getElementById('GameDiv');
|
||||
cc.view.setDesignResolutionSize(
|
||||
editorSize.width,
|
||||
editorSize.height,
|
||||
cc.ResolutionPolicy.FIXED_WIDTH
|
||||
);
|
||||
gameDiv.style.width = editorSize.width / ratio + 'px';
|
||||
gameDiv.style.height = editorSize.height / ratio + 'px';
|
||||
cc.view.setCanvasSize(editorSize.width / ratio, editorSize.height / ratio);
|
||||
console.log(editorSize);
|
||||
callFunc && callFunc();
|
||||
},
|
||||
/**
|
||||
* 设置节点属性
|
||||
*
|
||||
* @param {*} { node, attribute, value }
|
||||
* @returns
|
||||
*/
|
||||
setNodeAttribute({ node, attribute, value }) {
|
||||
if (!node) {
|
||||
console.log('不存在节点');
|
||||
return;
|
||||
} else {
|
||||
node[attribute] = value;
|
||||
console.log('设置成功:' + attribute);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 触发cocos内的事件系统
|
||||
*
|
||||
* @param {*} eventName
|
||||
* @param {*} params
|
||||
*/
|
||||
emitGameEvt(eventName, params) {
|
||||
// EVT.emit(eventName, params);
|
||||
cc.find('Canvas/start').opacity = 0;
|
||||
cc.tween(cc.find('Canvas/start')).to(0.5, { opacity: 255 }).start()
|
||||
}
|
||||
};
|
9
cocosTem/assets/web2gameSDk.ts.meta
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.8",
|
||||
"uuid": "748bbd8a-dbdb-483c-b426-3e2bfdbe1873",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
30663
cocosTem/creator.d.ts
vendored
Normal file
15
cocosTem/jsconfig.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es6",
|
||||
"module": "commonjs",
|
||||
"experimentalDecorators": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
".vscode",
|
||||
"library",
|
||||
"local",
|
||||
"settings",
|
||||
"temp"
|
||||
]
|
||||
}
|
7
cocosTem/project.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"engine": "cocos2d-html5",
|
||||
"packages": "packages",
|
||||
"version": "2.3.4",
|
||||
"id": "45bbc909-9dc1-4d76-aa37-9bf96a2e5737",
|
||||
"isNew": false
|
||||
}
|
43
cocosTem/settings/builder.json
Normal file
@ -0,0 +1,43 @@
|
||||
{
|
||||
"excludeScenes": [],
|
||||
"orientation": {
|
||||
"landscapeLeft": true,
|
||||
"landscapeRight": true,
|
||||
"portrait": false,
|
||||
"upsideDown": false
|
||||
},
|
||||
"packageName": "org.cocos2d.helloworld",
|
||||
"startScene": "2d2f792f-a40c-49bb-a189-ed176a246e49",
|
||||
"title": "hello_world",
|
||||
"webOrientation": "auto",
|
||||
"includeSDKBox": false,
|
||||
"inlineSpriteFrames": true,
|
||||
"inlineSpriteFrames_native": true,
|
||||
"mergeStartScene": false,
|
||||
"optimizeHotUpdate": false,
|
||||
"md5Cache": false,
|
||||
"encryptJs": true,
|
||||
"xxteaKey": "46b6f4ef-a734-46",
|
||||
"zipCompressJs": true,
|
||||
"fb-instant-games": {},
|
||||
"android": {
|
||||
"packageName": "org.cocos2d.demo"
|
||||
},
|
||||
"ios": {
|
||||
"packageName": "org.cocos2d.demo"
|
||||
},
|
||||
"mac": {
|
||||
"packageName": "org.cocos2d.demo"
|
||||
},
|
||||
"win32": {},
|
||||
"android-instant": {
|
||||
"REMOTE_SERVER_ROOT": "",
|
||||
"host": "",
|
||||
"packageName": "org.cocos2d.demo",
|
||||
"pathPattern": "",
|
||||
"recordPath": "",
|
||||
"scheme": "https",
|
||||
"skipRecord": false
|
||||
},
|
||||
"appBundle": false
|
||||
}
|
7
cocosTem/settings/builder.panel.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"excludeScenes": [],
|
||||
"packageName": "org.cocos2d.helloworld",
|
||||
"platform": "web-mobile",
|
||||
"startScene": "2d2f792f-a40c-49bb-a189-ed176a246e49",
|
||||
"title": "HelloWorld"
|
||||
}
|
42
cocosTem/settings/project.json
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"collision-matrix": [
|
||||
[
|
||||
true
|
||||
]
|
||||
],
|
||||
"excluded-modules": [
|
||||
"3D Physics/cannon.js",
|
||||
"3D Physics/Builtin",
|
||||
"3D Particle"
|
||||
],
|
||||
"group-list": [
|
||||
"default"
|
||||
],
|
||||
"start-scene": "2d2f792f-a40c-49bb-a189-ed176a246e49",
|
||||
"design-resolution-width": 960,
|
||||
"design-resolution-height": 640,
|
||||
"fit-width": false,
|
||||
"fit-height": true,
|
||||
"use-project-simulator-setting": false,
|
||||
"simulator-orientation": false,
|
||||
"use-customize-simulator": false,
|
||||
"simulator-resolution": {
|
||||
"width": 960,
|
||||
"height": 640
|
||||
},
|
||||
"last-module-event-record-time": 1617852160242,
|
||||
"assets-sort-type": "name",
|
||||
"facebook": {
|
||||
"enable": false,
|
||||
"appID": "",
|
||||
"live": {
|
||||
"enable": false
|
||||
},
|
||||
"audience": {
|
||||
"enable": false
|
||||
}
|
||||
},
|
||||
"migrate-history": [
|
||||
"cloud-function"
|
||||
]
|
||||
}
|
6
cocosTem/settings/services.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"game": {
|
||||
"name": "未知游戏",
|
||||
"appid": "UNKNOW"
|
||||
}
|
||||
}
|
BIN
cocosTem/template-banner.png
Normal file
After Width: | Height: | Size: 23 KiB |
5
cocosTem/template.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "TEMPLATES.helloworld.name",
|
||||
"desc": "TEMPLATES.helloworld.desc",
|
||||
"banner": "template-banner.png"
|
||||
}
|
19
cocosTem/tsconfig.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"lib": [ "es2015", "es2017", "dom" ],
|
||||
"target": "es5",
|
||||
"experimentalDecorators": true,
|
||||
"skipLibCheck": true,
|
||||
"outDir": "temp/vscode-dist",
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"library",
|
||||
"local",
|
||||
"temp",
|
||||
"build",
|
||||
"settings"
|
||||
]
|
||||
}
|
12
vueTem/.babelrc
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
["env", {
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
|
||||
}
|
||||
}],
|
||||
"stage-2"
|
||||
],
|
||||
"plugins": ["transform-vue-jsx", "transform-runtime"]
|
||||
}
|
9
vueTem/.editorconfig
Normal file
@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
4
vueTem/.eslintignore
Normal file
@ -0,0 +1,4 @@
|
||||
/build/
|
||||
/config/
|
||||
/dist/
|
||||
/*.js
|
30
vueTem/.eslintrc.js
Normal file
@ -0,0 +1,30 @@
|
||||
// https://eslint.org/docs/user-guide/configuring
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
parserOptions: {
|
||||
parser: 'babel-eslint'
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
},
|
||||
extends: [
|
||||
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
|
||||
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
|
||||
'plugin:vue/essential',
|
||||
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
|
||||
'standard'
|
||||
],
|
||||
// required to lint *.vue files
|
||||
plugins: [
|
||||
'vue'
|
||||
],
|
||||
// add your custom rules here
|
||||
rules: {
|
||||
// allow async-await
|
||||
'generator-star-spacing': 'off',
|
||||
// allow debugger during development
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
"no-tabs": "off"
|
||||
}
|
||||
}
|
14
vueTem/.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
.DS_Store
|
||||
node_modules/
|
||||
dist/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
10
vueTem/.postcssrc.js
Normal file
@ -0,0 +1,10 @@
|
||||
// https://github.com/michael-ciniawsky/postcss-load-config
|
||||
|
||||
module.exports = {
|
||||
"plugins": {
|
||||
"postcss-import": {},
|
||||
"postcss-url": {},
|
||||
// to edit target browsers: use "browserslist" field in package.json
|
||||
"autoprefixer": {}
|
||||
}
|
||||
}
|
4
vueTem/.prettierrc.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"semi": false
|
||||
}
|
12
vueTem/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# jgq
|
||||
>内容组优秀游戏模板展示
|
||||
|
||||
|
||||
加入游戏的流程:
|
||||
在trunk的cocos_trunk_web分支加上这个游戏,然后截图一个封面图,然后把封面图放入cover目录下。
|
||||
在vue项目中的configSample中加入对应的配置。
|
||||
|
||||
发布流程:
|
||||
首先将代码push上去,push之前不用打包。
|
||||
http://jenkins.100daishu.com/job/sample/ 去这个网址发布。没账号没权限找福浩(运维)要。
|
||||
点击左侧 Build with Parameters按钮,选择master分支然后写上版本号,点击开始构建。
|
41
vueTem/build/build.js
Normal file
@ -0,0 +1,41 @@
|
||||
'use strict'
|
||||
require('./check-versions')()
|
||||
|
||||
process.env.NODE_ENV = 'production'
|
||||
|
||||
const ora = require('ora')
|
||||
const rm = require('rimraf')
|
||||
const path = require('path')
|
||||
const chalk = require('chalk')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const webpackConfig = require('./webpack.prod.conf')
|
||||
|
||||
const spinner = ora('building for production...')
|
||||
spinner.start()
|
||||
|
||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
|
||||
if (err) throw err
|
||||
webpack(webpackConfig, (err, stats) => {
|
||||
spinner.stop()
|
||||
if (err) throw err
|
||||
process.stdout.write(stats.toString({
|
||||
colors: true,
|
||||
modules: false,
|
||||
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
|
||||
chunks: false,
|
||||
chunkModules: false
|
||||
}) + '\n\n')
|
||||
|
||||
if (stats.hasErrors()) {
|
||||
console.log(chalk.red(' Build failed with errors.\n'))
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log(chalk.cyan(' Build complete.\n'))
|
||||
console.log(chalk.yellow(
|
||||
' Tip: built files are meant to be served over an HTTP server.\n' +
|
||||
' Opening index.html over file:// won\'t work.\n'
|
||||
))
|
||||
})
|
||||
})
|
54
vueTem/build/check-versions.js
Normal file
@ -0,0 +1,54 @@
|
||||
'use strict'
|
||||
const chalk = require('chalk')
|
||||
const semver = require('semver')
|
||||
const packageConfig = require('../package.json')
|
||||
const shell = require('shelljs')
|
||||
|
||||
function exec (cmd) {
|
||||
return require('child_process').execSync(cmd).toString().trim()
|
||||
}
|
||||
|
||||
const versionRequirements = [
|
||||
{
|
||||
name: 'node',
|
||||
currentVersion: semver.clean(process.version),
|
||||
versionRequirement: packageConfig.engines.node
|
||||
}
|
||||
]
|
||||
|
||||
if (shell.which('npm')) {
|
||||
versionRequirements.push({
|
||||
name: 'npm',
|
||||
currentVersion: exec('npm --version'),
|
||||
versionRequirement: packageConfig.engines.npm
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = function () {
|
||||
const warnings = []
|
||||
|
||||
for (let i = 0; i < versionRequirements.length; i++) {
|
||||
const mod = versionRequirements[i]
|
||||
|
||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||
warnings.push(mod.name + ': ' +
|
||||
chalk.red(mod.currentVersion) + ' should be ' +
|
||||
chalk.green(mod.versionRequirement)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (warnings.length) {
|
||||
console.log('')
|
||||
console.log(chalk.yellow('To use this template, you must update following to modules:'))
|
||||
console.log()
|
||||
|
||||
for (let i = 0; i < warnings.length; i++) {
|
||||
const warning = warnings[i]
|
||||
console.log(' ' + warning)
|
||||
}
|
||||
|
||||
console.log()
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
BIN
vueTem/build/logo.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
101
vueTem/build/utils.js
Normal file
@ -0,0 +1,101 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const config = require('../config')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const packageConfig = require('../package.json')
|
||||
|
||||
exports.assetsPath = function (_path) {
|
||||
const assetsSubDirectory = process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsSubDirectory
|
||||
: config.dev.assetsSubDirectory
|
||||
|
||||
return path.posix.join(assetsSubDirectory, _path)
|
||||
}
|
||||
|
||||
exports.cssLoaders = function (options) {
|
||||
options = options || {}
|
||||
|
||||
const cssLoader = {
|
||||
loader: 'css-loader',
|
||||
options: {
|
||||
sourceMap: options.sourceMap
|
||||
}
|
||||
}
|
||||
|
||||
const postcssLoader = {
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
sourceMap: options.sourceMap
|
||||
}
|
||||
}
|
||||
|
||||
// generate loader string to be used with extract text plugin
|
||||
function generateLoaders (loader, loaderOptions) {
|
||||
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
|
||||
|
||||
if (loader) {
|
||||
loaders.push({
|
||||
loader: loader + '-loader',
|
||||
options: Object.assign({}, loaderOptions, {
|
||||
sourceMap: options.sourceMap
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// Extract CSS when that option is specified
|
||||
// (which is the case during production build)
|
||||
if (options.extract) {
|
||||
return ExtractTextPlugin.extract({
|
||||
use: loaders,
|
||||
fallback: 'vue-style-loader'
|
||||
})
|
||||
} else {
|
||||
return ['vue-style-loader'].concat(loaders)
|
||||
}
|
||||
}
|
||||
|
||||
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
|
||||
return {
|
||||
css: generateLoaders(),
|
||||
postcss: generateLoaders(),
|
||||
less: generateLoaders('less'),
|
||||
sass: generateLoaders('sass', { indentedSyntax: true }),
|
||||
scss: generateLoaders('sass'),
|
||||
stylus: generateLoaders('stylus'),
|
||||
styl: generateLoaders('stylus')
|
||||
}
|
||||
}
|
||||
|
||||
// Generate loaders for standalone style files (outside of .vue)
|
||||
exports.styleLoaders = function (options) {
|
||||
const output = []
|
||||
const loaders = exports.cssLoaders(options)
|
||||
|
||||
for (const extension in loaders) {
|
||||
const loader = loaders[extension]
|
||||
output.push({
|
||||
test: new RegExp('\\.' + extension + '$'),
|
||||
use: loader
|
||||
})
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
exports.createNotifierCallback = () => {
|
||||
const notifier = require('node-notifier')
|
||||
|
||||
return (severity, errors) => {
|
||||
if (severity !== 'error') return
|
||||
|
||||
const error = errors[0]
|
||||
const filename = error.file && error.file.split('!').pop()
|
||||
|
||||
notifier.notify({
|
||||
title: packageConfig.name,
|
||||
message: severity + ': ' + error.name,
|
||||
subtitle: filename || '',
|
||||
icon: path.join(__dirname, 'logo.png')
|
||||
})
|
||||
}
|
||||
}
|
22
vueTem/build/vue-loader.conf.js
Normal file
@ -0,0 +1,22 @@
|
||||
'use strict'
|
||||
const utils = require('./utils')
|
||||
const config = require('../config')
|
||||
const isProduction = process.env.NODE_ENV === 'production'
|
||||
const sourceMapEnabled = isProduction
|
||||
? config.build.productionSourceMap
|
||||
: config.dev.cssSourceMap
|
||||
|
||||
module.exports = {
|
||||
loaders: utils.cssLoaders({
|
||||
sourceMap: sourceMapEnabled,
|
||||
extract: isProduction
|
||||
}),
|
||||
cssSourceMap: sourceMapEnabled,
|
||||
cacheBusting: config.dev.cacheBusting,
|
||||
transformToRequire: {
|
||||
video: ['src', 'poster'],
|
||||
source: 'src',
|
||||
img: 'src',
|
||||
image: 'xlink:href'
|
||||
}
|
||||
}
|
92
vueTem/build/webpack.base.conf.js
Normal file
@ -0,0 +1,92 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const utils = require('./utils')
|
||||
const config = require('../config')
|
||||
const vueLoaderConfig = require('./vue-loader.conf')
|
||||
|
||||
function resolve (dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
const createLintingRule = () => ({
|
||||
// test: /\.(js|vue)$/,
|
||||
// loader: 'eslint-loader',
|
||||
// enforce: 'pre',
|
||||
// include: [resolve('src'), resolve('test')],
|
||||
// options: {
|
||||
// formatter: require('eslint-friendly-formatter'),
|
||||
// emitWarning: !config.dev.showEslintErrorsInOverlay
|
||||
// }
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
context: path.resolve(__dirname, '../'),
|
||||
entry: {
|
||||
app: './src/main.js'
|
||||
},
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: '[name].js',
|
||||
publicPath: process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsPublicPath
|
||||
: config.dev.assetsPublicPath
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.vue', '.json'],
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js',
|
||||
'@': resolve('src'),
|
||||
}
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
...(config.dev.useEslint ? [createLintingRule()] : []),
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: vueLoaderConfig
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('img/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('media/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
node: {
|
||||
// prevent webpack from injecting useless setImmediate polyfill because Vue
|
||||
// source contains it (although only uses it if it's native).
|
||||
setImmediate: false,
|
||||
// prevent webpack from injecting mocks to Node native modules
|
||||
// that does not make sense for the client
|
||||
dgram: 'empty',
|
||||
fs: 'empty',
|
||||
net: 'empty',
|
||||
tls: 'empty',
|
||||
child_process: 'empty'
|
||||
}
|
||||
}
|
95
vueTem/build/webpack.dev.conf.js
Normal file
@ -0,0 +1,95 @@
|
||||
'use strict'
|
||||
const utils = require('./utils')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const merge = require('webpack-merge')
|
||||
const path = require('path')
|
||||
const baseWebpackConfig = require('./webpack.base.conf')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||
const portfinder = require('portfinder')
|
||||
|
||||
const HOST = process.env.HOST
|
||||
const PORT = process.env.PORT && Number(process.env.PORT)
|
||||
|
||||
const devWebpackConfig = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
|
||||
},
|
||||
// cheap-module-eval-source-map is faster for development
|
||||
devtool: config.dev.devtool,
|
||||
|
||||
// these devServer options should be customized in /config/index.js
|
||||
devServer: {
|
||||
clientLogLevel: 'warning',
|
||||
historyApiFallback: {
|
||||
rewrites: [
|
||||
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
|
||||
],
|
||||
},
|
||||
hot: true,
|
||||
contentBase: false, // since we use CopyWebpackPlugin.
|
||||
compress: true,
|
||||
host: HOST || config.dev.host,
|
||||
port: PORT || config.dev.port,
|
||||
open: config.dev.autoOpenBrowser,
|
||||
overlay: config.dev.errorOverlay
|
||||
? { warnings: false, errors: true }
|
||||
: false,
|
||||
publicPath: config.dev.assetsPublicPath,
|
||||
proxy: config.dev.proxyTable,
|
||||
quiet: true, // necessary for FriendlyErrorsPlugin
|
||||
watchOptions: {
|
||||
poll: config.dev.poll,
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': require('../config/dev.env')
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
|
||||
new webpack.NoEmitOnErrorsPlugin(),
|
||||
// https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'index.html',
|
||||
template: 'index.html',
|
||||
inject: true
|
||||
}),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.dev.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
module.exports = new Promise((resolve, reject) => {
|
||||
portfinder.basePort = process.env.PORT || config.dev.port
|
||||
portfinder.getPort((err, port) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
} else {
|
||||
// publish the new Port, necessary for e2e tests
|
||||
process.env.PORT = port
|
||||
// add port to devServer config
|
||||
devWebpackConfig.devServer.port = port
|
||||
|
||||
// Add FriendlyErrorsPlugin
|
||||
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
|
||||
compilationSuccessInfo: {
|
||||
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
|
||||
},
|
||||
onErrors: config.dev.notifyOnErrors
|
||||
? utils.createNotifierCallback()
|
||||
: undefined
|
||||
}))
|
||||
|
||||
resolve(devWebpackConfig)
|
||||
}
|
||||
})
|
||||
})
|
145
vueTem/build/webpack.prod.conf.js
Normal file
@ -0,0 +1,145 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const utils = require('./utils')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const merge = require('webpack-merge')
|
||||
const baseWebpackConfig = require('./webpack.base.conf')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
|
||||
|
||||
const env = require('../config/prod.env')
|
||||
|
||||
const webpackConfig = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
extract: true,
|
||||
usePostCSS: true
|
||||
})
|
||||
},
|
||||
devtool: config.build.productionSourceMap ? config.build.devtool : false,
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: utils.assetsPath('js/[name].[chunkhash].js'),
|
||||
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
|
||||
},
|
||||
plugins: [
|
||||
// http://vuejs.github.io/vue-loader/en/workflow/production.html
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': env
|
||||
}),
|
||||
new UglifyJsPlugin({
|
||||
uglifyOptions: {
|
||||
compress: {
|
||||
warnings: false
|
||||
}
|
||||
},
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
parallel: true
|
||||
}),
|
||||
// extract css into its own file
|
||||
new ExtractTextPlugin({
|
||||
filename: utils.assetsPath('css/[name].[contenthash].css'),
|
||||
// Setting the following option to `false` will not extract CSS from codesplit chunks.
|
||||
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
|
||||
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
|
||||
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
|
||||
allChunks: true,
|
||||
}),
|
||||
// Compress extracted CSS. We are using this plugin so that possible
|
||||
// duplicated CSS from different components can be deduped.
|
||||
new OptimizeCSSPlugin({
|
||||
cssProcessorOptions: config.build.productionSourceMap
|
||||
? { safe: true, map: { inline: false } }
|
||||
: { safe: true }
|
||||
}),
|
||||
// generate dist index.html with correct asset hash for caching.
|
||||
// you can customize output by editing /index.html
|
||||
// see https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: config.build.index,
|
||||
template: 'index.html',
|
||||
inject: true,
|
||||
minify: {
|
||||
removeComments: true,
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true
|
||||
// more options:
|
||||
// https://github.com/kangax/html-minifier#options-quick-reference
|
||||
},
|
||||
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
|
||||
chunksSortMode: 'dependency'
|
||||
}),
|
||||
// keep module.id stable when vendor modules does not change
|
||||
new webpack.HashedModuleIdsPlugin(),
|
||||
// enable scope hoisting
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
// split vendor js into its own file
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor',
|
||||
minChunks (module) {
|
||||
// any required modules inside node_modules are extracted to vendor
|
||||
return (
|
||||
module.resource &&
|
||||
/\.js$/.test(module.resource) &&
|
||||
module.resource.indexOf(
|
||||
path.join(__dirname, '../node_modules')
|
||||
) === 0
|
||||
)
|
||||
}
|
||||
}),
|
||||
// extract webpack runtime and module manifest to its own file in order to
|
||||
// prevent vendor hash from being updated whenever app bundle is updated
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'manifest',
|
||||
minChunks: Infinity
|
||||
}),
|
||||
// This instance extracts shared chunks from code splitted chunks and bundles them
|
||||
// in a separate chunk, similar to the vendor chunk
|
||||
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'app',
|
||||
async: 'vendor-async',
|
||||
children: true,
|
||||
minChunks: 3
|
||||
}),
|
||||
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.build.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
if (config.build.productionGzip) {
|
||||
const CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||
|
||||
webpackConfig.plugins.push(
|
||||
new CompressionWebpackPlugin({
|
||||
asset: '[path].gz[query]',
|
||||
algorithm: 'gzip',
|
||||
test: new RegExp(
|
||||
'\\.(' +
|
||||
config.build.productionGzipExtensions.join('|') +
|
||||
')$'
|
||||
),
|
||||
threshold: 10240,
|
||||
minRatio: 0.8
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (config.build.bundleAnalyzerReport) {
|
||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
||||
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
|
||||
}
|
||||
|
||||
module.exports = webpackConfig
|
7
vueTem/config/dev.env.js
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict'
|
||||
const merge = require('webpack-merge')
|
||||
const prodEnv = require('./prod.env')
|
||||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"',
|
||||
})
|
88
vueTem/config/index.js
Normal file
@ -0,0 +1,88 @@
|
||||
'use strict'
|
||||
// Template version: 1.3.1
|
||||
// see http://vuejs-templates.github.io/webpack for documentation.
|
||||
|
||||
const path = require('path')
|
||||
const rootPath = process.env.NODE_ENV == 'development' ? 'http://47.95.9.245:80/api' : 'http://47.95.9.245:80/api' // 设置开发环境与生产环境的接口 目前都用的服务器数据,是一样的,但是正式代码中肯定是不一样的
|
||||
console.log(rootPath);
|
||||
module.exports = {
|
||||
dev: {
|
||||
// Paths
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: '/',
|
||||
proxyTable: {
|
||||
'/api':{
|
||||
changeOrigin: true,
|
||||
target: rootPath,
|
||||
pathRewrite: {
|
||||
'^/api': ''
|
||||
}
|
||||
},
|
||||
'/uploader': {
|
||||
changeOrigin: true,
|
||||
target: 'http://47.95.9.245:80'
|
||||
}
|
||||
},
|
||||
|
||||
// Various Dev Server settings
|
||||
host: 'localhost', // can be overwritten by process.env.HOST
|
||||
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||
autoOpenBrowser: false,
|
||||
errorOverlay: true,
|
||||
notifyOnErrors: true,
|
||||
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
|
||||
|
||||
// Use Eslint Loader?
|
||||
// If true, your code will be linted during bundling and
|
||||
// linting errors and warnings will be shown in the console.
|
||||
useEslint: true,
|
||||
// If true, eslint errors and warnings will also be shown in the error overlay
|
||||
// in the browser.
|
||||
showEslintErrorsInOverlay: false,
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
// https://webpack.js.org/configuration/devtool/#development
|
||||
devtool: 'cheap-module-eval-source-map',
|
||||
|
||||
// If you have problems debugging vue-files in devtools,
|
||||
// set this to false - it *may* help
|
||||
// https://vue-loader.vuejs.org/en/options.html#cachebusting
|
||||
cacheBusting: true,
|
||||
|
||||
cssSourceMap: true
|
||||
},
|
||||
|
||||
build: {
|
||||
// Template for index.html
|
||||
index: path.resolve(__dirname, '../dist/index.html'),
|
||||
|
||||
// Paths
|
||||
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: './',
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
productionSourceMap: true,
|
||||
// https://webpack.js.org/configuration/devtool/#production
|
||||
devtool: '#source-map',
|
||||
|
||||
// Gzip off by default as many popular static hosts such as
|
||||
// Surge or Netlify already gzip all static assets for you.
|
||||
// Before setting to `true`, make sure to:
|
||||
// npm install --save-dev compression-webpack-plugin
|
||||
productionGzip: false,
|
||||
productionGzipExtensions: ['js', 'css'],
|
||||
|
||||
// Run the build command with an extra argument to
|
||||
// View the bundle analyzer report after build finishes:
|
||||
// `npm run build --report`
|
||||
// Set to `true` or `false` to always turn it on or off
|
||||
bundleAnalyzerReport: process.env.npm_config_report
|
||||
}
|
||||
}
|
4
vueTem/config/prod.env.js
Normal file
@ -0,0 +1,4 @@
|
||||
'use strict'
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"',
|
||||
}
|
26
vueTem/index.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||
<link
|
||||
href="//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<title>cocos-vue-demo</title>
|
||||
<script src="./static/js/EventBus.js" charset="utf-8"></script>
|
||||
<script src="./static/cocos-build/web-mobile/src/settings.js"></script>
|
||||
<script src="./static/cocos-build/web-mobile/cocos2d-js-min.js"></script>
|
||||
<script src="./static/cocos-build/web-mobile/src/project.js"></script>
|
||||
<link
|
||||
href="https://at.alicdn.com/t/font_1550750_y90c54773nj.css"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
/>
|
||||
</head>
|
||||
<body class="fit">
|
||||
<div id="app" style="display: flex;flex-direction: row;" class="fit"></div>
|
||||
</body>
|
||||
|
||||
<!-- built files will be auto injected -->
|
||||
</html>
|
13159
vueTem/package-lock.json
generated
Normal file
84
vueTem/package.json
Normal file
@ -0,0 +1,84 @@
|
||||
{
|
||||
"name": "app",
|
||||
"version": "1.0.0",
|
||||
"description": "amterasu's first node app",
|
||||
"author": "Amterasu",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
||||
"start": "npm run dev",
|
||||
"lint": "eslint --ext .js,.vue src",
|
||||
"build": "node build/build.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.18.0",
|
||||
"element-ui": "^2.3.3",
|
||||
"express": "^4.16.3",
|
||||
"hanzi-writer": "^2.3.0",
|
||||
"html2canvas": "^1.0.0-rc.7",
|
||||
"vue": "^2.5.2",
|
||||
"vue-router": "^3.0.1",
|
||||
"vue-waterfall": "^1.0.6",
|
||||
"vuerify": "^0.4.0",
|
||||
"vuex": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^7.1.2",
|
||||
"babel-core": "^6.22.1",
|
||||
"babel-eslint": "^8.2.1",
|
||||
"babel-helper-vue-jsx-merge-props": "^2.0.3",
|
||||
"babel-loader": "^7.1.1",
|
||||
"babel-plugin-syntax-jsx": "^6.18.0",
|
||||
"babel-plugin-transform-runtime": "^6.22.0",
|
||||
"babel-plugin-transform-vue-jsx": "^3.5.0",
|
||||
"babel-preset-env": "^1.3.2",
|
||||
"babel-preset-stage-2": "^6.22.0",
|
||||
"chalk": "^2.0.1",
|
||||
"copy-webpack-plugin": "^4.0.1",
|
||||
"css-loader": "^0.28.0",
|
||||
"eslint": "^4.15.0",
|
||||
"eslint-config-standard": "^10.2.1",
|
||||
"eslint-friendly-formatter": "^3.0.0",
|
||||
"eslint-loader": "^1.7.1",
|
||||
"eslint-plugin-import": "^2.7.0",
|
||||
"eslint-plugin-node": "^5.2.0",
|
||||
"eslint-plugin-promise": "^3.4.0",
|
||||
"eslint-plugin-standard": "^3.0.1",
|
||||
"eslint-plugin-vue": "^4.0.0",
|
||||
"extract-text-webpack-plugin": "^3.0.0",
|
||||
"file-loader": "^1.1.4",
|
||||
"friendly-errors-webpack-plugin": "^1.6.1",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
"node-notifier": "^5.1.2",
|
||||
"node-sass": "^4.8.3",
|
||||
"optimize-css-assets-webpack-plugin": "^3.2.0",
|
||||
"ora": "^1.2.0",
|
||||
"portfinder": "^1.0.13",
|
||||
"postcss-import": "^11.0.0",
|
||||
"postcss-loader": "^2.0.8",
|
||||
"postcss-url": "^7.2.1",
|
||||
"rimraf": "^2.6.0",
|
||||
"sass-loader": "^6.0.7",
|
||||
"semver": "^5.3.0",
|
||||
"shelljs": "^0.7.6",
|
||||
"uglifyjs-webpack-plugin": "^1.1.1",
|
||||
"url-loader": "^0.5.8",
|
||||
"vue-loader": "^13.3.0",
|
||||
"vue-style-loader": "^3.0.1",
|
||||
"vue-template-compiler": "^2.5.2",
|
||||
"vue-waterfall-easy": "^1.0.8",
|
||||
"webpack": "^3.6.0",
|
||||
"webpack-bundle-analyzer": "^2.9.0",
|
||||
"webpack-dev-server": "^2.9.1",
|
||||
"webpack-merge": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not ie <= 8"
|
||||
]
|
||||
}
|
25
vueTem/src/App.vue
Normal file
@ -0,0 +1,25 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<the-header></the-header>
|
||||
<router-view >
|
||||
</router-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import creatorLoader from '../static/cocos-loader/creator-load'
|
||||
import TheHeader from './views/header/TheHeader'
|
||||
|
||||
export default {
|
||||
name: 'electron-cocos',
|
||||
components: {
|
||||
TheHeader: TheHeader
|
||||
},
|
||||
created() {},
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* CSS */
|
||||
</style>
|
169
vueTem/src/components/BaseAlert.vue
Normal file
@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<div class="alert-layer f--hcc" v-show="showStatus">
|
||||
<div class="alert-box">
|
||||
<div class="alert-header f--hlc">
|
||||
<span class="icon "></span>
|
||||
<div class="">{{title}}</div>
|
||||
</div>
|
||||
<div class="alert-content">
|
||||
<div class="content f--hlc">
|
||||
<span :class="iconClass"></span>
|
||||
<div class="margin-content">
|
||||
<div class="">{{text}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn-clear sure-btn" @click="ensure">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const TYPE_CLASSES_MAP = {
|
||||
success: "am-icon-circle-check",
|
||||
warning: "am-icon-warning",
|
||||
error: "am-icon-circle-cross"
|
||||
};
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
showStatus: this.show,
|
||||
text: this.value
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
ensure() {
|
||||
this.showStatus = false;
|
||||
this.$emit("update:show", this.showStatus);
|
||||
this.$emit("ensure");
|
||||
}
|
||||
},
|
||||
props: {
|
||||
show: {
|
||||
// 开关的状态
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
},
|
||||
title: {
|
||||
type: [String, Number],
|
||||
default: "提示"
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
default: "info"
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.text = newVal;
|
||||
},
|
||||
show(newVal) {
|
||||
this.showStatus = newVal;
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
iconClass() {
|
||||
return TYPE_CLASSES_MAP[this.type] || "am-icon-circle-check";
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.alert-layer,
|
||||
.confirm-layer {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 9999;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
.alert-box {
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-webkit-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-moz-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-ms-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-o-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
width: 400px;
|
||||
background: #353535;
|
||||
overflow: hidden;
|
||||
.alert-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
background: #545454;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
position: relative;
|
||||
.icon {
|
||||
width: 30px;
|
||||
height: 40px;
|
||||
background: url(../images/icon1.svg) no-repeat -1400px -240px;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.alert-content {
|
||||
padding: 0 30px;
|
||||
.content {
|
||||
border-radius: 2px;
|
||||
width: 100%;
|
||||
line-height: 25px;
|
||||
margin-top: 16px;
|
||||
background: #232323;
|
||||
padding: 1px;
|
||||
font-size: 14px;
|
||||
color: #b5b5b5;
|
||||
box-shadow: inset 0 0 5px 0 rgba(0, 0, 0, 0.1);
|
||||
-webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1) inset;
|
||||
.am-icon-circle-check {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1480px -200px;
|
||||
}
|
||||
.am-icon-warning {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1480px -240px;
|
||||
}
|
||||
.am-icon-circle-cross {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1600px -200px;
|
||||
}
|
||||
.margin-content {
|
||||
margin: 10px 10px 10px 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.sure-btn {
|
||||
border-radius: 2px;
|
||||
width: 100px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
color: #151515;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
background: #b5b5b5;
|
||||
margin: 12px auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
64
vueTem/src/components/BaseColorPicker.vue
Normal file
@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div class="f--hlc ant-row ant-form-item ant-form-full">
|
||||
<div class="ant-col-l ant-form-item-label">
|
||||
<label>
|
||||
<slot name="label">
|
||||
{{label}}
|
||||
</slot>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ant-col-r">
|
||||
<div class="ant-form-item-control">
|
||||
<div>
|
||||
<span class="ant-input-wrapper" style="float:left">
|
||||
<el-color-picker v-model="currColor" size="mini" :disabled="!switchStatus" @change="emitColor" :show-alpha="false" />
|
||||
</span>
|
||||
<el-switch v-model="switchStatus" active-color="#ffa800" inactive-color="#151515" style="margin-top:3px;" @change="changeSwitch" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
switchStatus: this.switch,
|
||||
currColor: this.value
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
changeSwitch() {
|
||||
this.emitColor();
|
||||
},
|
||||
emitColor() {
|
||||
this.$emit("changeStauts", this.switchStatus, this.currColor);
|
||||
}
|
||||
},
|
||||
props: {
|
||||
switch: {
|
||||
// 开关的状态
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
value: {
|
||||
// 颜色
|
||||
type: String,
|
||||
default: "#fff"
|
||||
},
|
||||
label: {
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.currColor = newVal;
|
||||
},
|
||||
switch(newVal) {
|
||||
this.switchStatus = newVal;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
175
vueTem/src/components/BaseConfirm.vue
Normal file
@ -0,0 +1,175 @@
|
||||
<template>
|
||||
<div class="confirm-layer f--hcc" v-show="showStatus">
|
||||
<div class="confirm-box">
|
||||
<div class="confirm-header f--hlc">
|
||||
<span class="icon paid-service-icon"></span>
|
||||
<div class="">{{title}}</div>
|
||||
|
||||
</div>
|
||||
<div class="confirm-content">
|
||||
<div class="content f--hlc warning">
|
||||
<span :class="iconClass"></span>
|
||||
<div class="margin-content">
|
||||
<div>{{text}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group f--hcc">
|
||||
<button class="btn-clear sure-btn" @click="close">取消</button>
|
||||
<button class="btn-clear sure-btn" @click="ensure">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const TYPE_CLASSES_MAP = {
|
||||
success: "am-icon-circle-check",
|
||||
warning: "am-icon-warning",
|
||||
error: "am-icon-circle-cross"
|
||||
};
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
showStatus: this.show,
|
||||
text: this.value
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
ensure() {
|
||||
this.close();
|
||||
this.$emit("ensure");
|
||||
},
|
||||
close(){
|
||||
this.showStatus = false;
|
||||
this.$emit("update:show", this.showStatus);
|
||||
}
|
||||
},
|
||||
props: {
|
||||
show: {
|
||||
// 开关的状态
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
},
|
||||
title: {
|
||||
type: [String, Number],
|
||||
default: "提示"
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
default: "info"
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.text = newVal;
|
||||
},
|
||||
show(newVal) {
|
||||
this.showStatus = newVal;
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
iconClass() {
|
||||
return TYPE_CLASSES_MAP[this.type] || "am-icon-circle-check";
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.confirm-layer {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 9999;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
.confirm-box {
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-webkit-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-moz-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-ms-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-o-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
width: 400px;
|
||||
background: #353535;
|
||||
overflow: hidden;
|
||||
.confirm-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
background: #545454;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
position: relative;
|
||||
.icon {
|
||||
width: 30px;
|
||||
height: 40px;
|
||||
background: url(../images/icon1.svg) no-repeat -1400px -560px;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.confirm-content {
|
||||
padding: 0 30px;
|
||||
.content {
|
||||
border-radius: 2px;
|
||||
width: 100%;
|
||||
line-height: 25px;
|
||||
margin-top: 16px;
|
||||
background: #232323;
|
||||
padding: 1px;
|
||||
font-size: 14px;
|
||||
color: #b5b5b5;
|
||||
box-shadow: inset 0 0 5px 0 rgba(0, 0, 0, 0.1);
|
||||
-webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1) inset;
|
||||
.am-icon-circle-check {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1480px -200px;
|
||||
}
|
||||
.am-icon-warning {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1480px -240px;
|
||||
}
|
||||
.am-icon-circle-cross {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
display: block;
|
||||
margin: 10px;
|
||||
background: url(../images/icon1.svg) no-repeat -1600px -200px;
|
||||
}
|
||||
.margin-content {
|
||||
margin: 10px 10px 10px 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.sure-btn {
|
||||
border-radius: 2px;
|
||||
width: 100px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
color: #151515;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
background: #b5b5b5;
|
||||
margin: 12px auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
625
vueTem/src/components/BaseMaterialContainer.vue
Normal file
@ -0,0 +1,625 @@
|
||||
<template>
|
||||
<div class="item">
|
||||
<!-- 如果是模板则显示封面 -->
|
||||
<div v-if="isTemplate && fold==true" @mouseenter="templateMaskShow = true">
|
||||
<img :src="datas.Cover" class="templateCover">
|
||||
</div>
|
||||
<!-- 如果点击分块使用则拆解显示 -->
|
||||
<div v-else v-html="html" @click.stop="renderMaterial($event)" :class="{partContent:isTemplate && fold==false}"></div>
|
||||
<!-- 收藏按钮 -->
|
||||
<i class="fa media " :class="{'fa-star':IsCollect,'fa-star-o':!IsCollect}" v-show="fold==true" @click="collectItem"></i>
|
||||
<!-- 退出分块 -->
|
||||
<i aria-hidden="true" class="fa fa-sign-out media" v-show="isTemplate && fold==false" @click="quitUsePart"></i>
|
||||
<!-- 是否是vip -->
|
||||
<div class="iconfont icon-VIP" v-if="IsVip"></div>
|
||||
<!-- 显示分块使用和整套使用 -->
|
||||
<div class="templateSelect" v-if="isTemplate && fold==true && templateMaskShow" @mouseleave="templateMaskShow = false">
|
||||
<p>
|
||||
<button type="button" class="el-button el-tooltip el-button--default" @click="showTemplateAllSection">
|
||||
<span>
|
||||
<i class="iconfont icon-quanbufenlei"></i>
|
||||
<span>分块使用模板</span>
|
||||
</span>
|
||||
</button>
|
||||
<button type="button" class="el-button el-tooltip el-button--default" @click="useAll">
|
||||
<span>
|
||||
<i aria-hidden="true" class="iconfont icon-quanbu"></i>
|
||||
<span>整套使用模板</span>
|
||||
</span>
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
<am-alert :show.sync="showAlert" v-model="alertText" @ensure="hideAlert" type="error" />
|
||||
<login-dialog :show.sync="showLoginDialog" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import amAlert from "../components/BaseAlert";
|
||||
import LoginDialog from "../components/LoginDialog";
|
||||
import { mapState } from "vuex";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
fold: true, // 是否折叠
|
||||
templateMaskShow: false,
|
||||
showAlert: false,
|
||||
alertText: "",
|
||||
IsCollect: this.datas.IsCollect,
|
||||
IsVip: this.datas.is_vip,
|
||||
showLoginDialog: false,
|
||||
event:null,// 这个是当前点击的事件对象,用于登陆后直接把素材放入选区
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
loginShow() {
|
||||
this.showLoginDialog = true;
|
||||
},
|
||||
loginSuccess(type) {
|
||||
// 登陆成功的回调,去处理一些事务
|
||||
// 收藏后登陆,登陆后自动收藏
|
||||
if (type == "collect") this.collectCallback();
|
||||
// vip素材点击后放入编辑器
|
||||
if (type == "open") this.openCallback();
|
||||
},
|
||||
collectCallback() {
|
||||
this.collectItem();
|
||||
},
|
||||
openCallback(){
|
||||
this.renderMaterial(this.event)
|
||||
},
|
||||
// 向编辑器中构建素材
|
||||
renderMaterial(event) {
|
||||
this.event = event;
|
||||
if (this.datas.IfSystem == 1) {
|
||||
return false;
|
||||
} else if (
|
||||
$(".sidebar")
|
||||
.find("li.active")
|
||||
.attr("data-type") == "imglist" &&
|
||||
$(this.ue.body).find(".checkSelected").length > 0 &&
|
||||
$(this.ue.body)
|
||||
.find(".checkSelected")
|
||||
.children()[0].localName == "img"
|
||||
) {
|
||||
$(this.ue.body)
|
||||
.find(".checkSelected")
|
||||
.children("img")
|
||||
.attr(
|
||||
"src",
|
||||
$(event.currentTarget)
|
||||
.find("img")
|
||||
.attr("src")
|
||||
);
|
||||
$(this.ue.body)
|
||||
.find(".checkSelected")
|
||||
.children("img")
|
||||
.attr(
|
||||
"_src",
|
||||
$(event.currentTarget)
|
||||
.find("img")
|
||||
.attr("src")
|
||||
);
|
||||
this.clearselectline();
|
||||
} else {
|
||||
if (
|
||||
($(event.currentTarget).find(".isvip").length > 0 &&
|
||||
!!Number(topnavInfo.userInfo.IsVip)) ||
|
||||
$(event.currentTarget).find(".isvip").length == 0
|
||||
) {
|
||||
var range = this.ue.selection.getRange().cloneContents(); //获得选区【秒刷】
|
||||
var _this =
|
||||
$(event.currentTarget)[0].nodeName.toLowerCase() == "p"
|
||||
? $(event.currentTarget)
|
||||
.parents(".item")
|
||||
.find(".KolEditor:first")
|
||||
.clone()
|
||||
: $(event.currentTarget)
|
||||
.find(".KolEditor:first")
|
||||
.clone();
|
||||
if (this.type == "mysign") {
|
||||
//侧边栏在我的签名上,点击为添加签名
|
||||
//头部
|
||||
if ($(this.ue.body).find(".materialTop").length > 0) {
|
||||
$(this.ue.body)
|
||||
.find(".materialTop")
|
||||
.empty()
|
||||
.append(
|
||||
$(event.currentTarget)
|
||||
.find(".materialTop")
|
||||
.html()
|
||||
);
|
||||
} else {
|
||||
var _node = this.ue.body.firstChild;
|
||||
$(event.currentTarget)
|
||||
.find(".materialTop")
|
||||
.clone()
|
||||
.insertBefore($(_node));
|
||||
}
|
||||
// 尾部
|
||||
if ($(this.ue.body).find(".materialBottom").length > 0) {
|
||||
$(this.ue.body)
|
||||
.find(".materialBottom")
|
||||
.empty()
|
||||
.append(
|
||||
$(event.currentTarget)
|
||||
.find(".materialBottom")
|
||||
.html()
|
||||
);
|
||||
} else {
|
||||
$(this.ue.body).append(
|
||||
$(event.currentTarget)
|
||||
.find(".materialBottom")
|
||||
.clone()[0]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (range != null) {
|
||||
this.secondBrush(_this);
|
||||
} else {
|
||||
var _style = $(event.currentTarget)
|
||||
.find(".KolEditor:first")
|
||||
.attr("style");
|
||||
this.ue.execCommand(
|
||||
"inserthtml",
|
||||
'<section class="KolEditor" style="' +
|
||||
_style +
|
||||
'">' +
|
||||
_this.html() +
|
||||
"</section>"
|
||||
);
|
||||
// ====== 带序号的素材,点击实现数字自增 ======
|
||||
if (
|
||||
$(event.currentTarget)
|
||||
.find(".KolEditor:first")
|
||||
.find("p.count").length > 0
|
||||
) {
|
||||
$(event.currentTarget)
|
||||
.find(".KolEditor:first")
|
||||
.find("p.count")
|
||||
.each(function() {
|
||||
var count = Number($(this).html());
|
||||
var _length = $(this).html().length;
|
||||
if (String(count + 1).length < _length) {
|
||||
var zero = new Array(
|
||||
_length - String(count + 1).length + 1
|
||||
).join("0");
|
||||
$(this).html(zero + (count + 1));
|
||||
} else {
|
||||
$(this).html(count + 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
this.clearselectline();
|
||||
} else {
|
||||
this.dialog.vipTips = true;
|
||||
this.vipMessage = "成为VIP会员,VIP素材免费用";
|
||||
$(".purchvip")
|
||||
.find("button")
|
||||
.attr({ statsmark: "查看VIP特权关闭", statstype: "2" });
|
||||
}
|
||||
}
|
||||
},
|
||||
// 删除选中框
|
||||
clearselectline() {
|
||||
$(this.ue.body)
|
||||
.find(".checkSelected")
|
||||
.removeClass("checkSelected");
|
||||
},
|
||||
//秒刷代码
|
||||
secondBrush(_this) {
|
||||
var rangeLength = this.ue.selection.getRange().endOffset;
|
||||
var textLength = _this.find("p").length;
|
||||
var imgLength = _this.find("img.KolImg").length;
|
||||
var startIndex = 0;
|
||||
var imgIndex = 0;
|
||||
var innertext = _this.html();
|
||||
this.ue.selection
|
||||
.getRange()
|
||||
.adjustmentBoundary()
|
||||
.traversal(function(node) {
|
||||
var isHasImg = 0;
|
||||
if (node.localName == "img" || $(node).find("img").length > 0) {
|
||||
var imgsrc = node.currentSrc
|
||||
? node.currentSrc
|
||||
: $(node)
|
||||
.find("img")
|
||||
.attr("src");
|
||||
_this
|
||||
.find("img.KolImg")
|
||||
.eq(imgIndex)
|
||||
.attr("src", imgsrc);
|
||||
isHasImg = 1;
|
||||
imgIndex++;
|
||||
} else {
|
||||
if (node.localName != "br" && $.trim(node.textContent) != "") {
|
||||
if (startIndex >= textLength) {
|
||||
var beforeStyle = _this.find("p:last").attr("style");
|
||||
_this
|
||||
.find("p:last")
|
||||
.after(
|
||||
'<p style="' +
|
||||
beforeStyle +
|
||||
'">' +
|
||||
node.textContent +
|
||||
"</p>"
|
||||
);
|
||||
} else {
|
||||
_this
|
||||
.find("p")
|
||||
.eq(startIndex)
|
||||
.html(node.textContent);
|
||||
}
|
||||
startIndex++;
|
||||
}
|
||||
}
|
||||
});
|
||||
this.ue.execCommand(
|
||||
"inserthtml",
|
||||
'<section class="KolEditor">' + _this.html() + "</section>"
|
||||
);
|
||||
},
|
||||
// 分块使用
|
||||
showTemplateAllSection() {
|
||||
this.fold = false;
|
||||
const self = this;
|
||||
// 为分块绑定事件
|
||||
$(document)
|
||||
.off("mouseenter.part")
|
||||
.on(
|
||||
"mouseenter.part",
|
||||
".partContent .KolEditor:first .KolEditor",
|
||||
function() {
|
||||
$(this).css("position", "relative");
|
||||
$(this).append(
|
||||
'<section class="usePart" style="position:absolute;left:-10px;top:-10px;width:calc(100% + 20px);height:calc(100% + 20px);background-color:rgba(0,0,0,0.4);z-index:88;border-radius:4px;"><i class="fa fa-arrow-circle-o-right" data-type="fa-arrow-circle-o-right" style="cursor:pointer;font-size:40px;color:#fff;display:inline-block;position:absolute;left:50%;top:50%;margin-left:-20px;margin-top:-20px;"></i></section>'
|
||||
);
|
||||
$(".usePart").click(function(event) {
|
||||
var range = self.ue.selection.getRange().cloneContents();
|
||||
var _this = $(this).parents(".KolEditor:first");
|
||||
$(this).remove();
|
||||
if (range != null) {
|
||||
secondBrush(_this.clone());
|
||||
} else {
|
||||
self.ue.execCommand(
|
||||
"inserthtml",
|
||||
'<section class="KolEditor">' + _this.html() + "</section>"
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
$(document).on(
|
||||
"mouseleave",
|
||||
".partContent .KolEditor:first .KolEditor",
|
||||
function() {
|
||||
$(this)
|
||||
.find(".usePart")
|
||||
.remove();
|
||||
}
|
||||
);
|
||||
},
|
||||
// 退出分块使用
|
||||
quitUsePart() {
|
||||
this.fold = true;
|
||||
},
|
||||
useAll: function() {
|
||||
if (this.datas.is_vip) {
|
||||
this.ue.execCommand("inserthtml", this.datas.content);
|
||||
} else {
|
||||
this.showAlert = true;
|
||||
this.alertText = "成为VIP会员,VIP素材免费用";
|
||||
}
|
||||
},
|
||||
hideAlert() {
|
||||
console.log("goto vippage");
|
||||
},
|
||||
collectItem() {
|
||||
if (!this.isLogin) {
|
||||
this.showLoginDialog = true;
|
||||
return;
|
||||
}
|
||||
this.IsCollect = !this.IsCollect;
|
||||
},
|
||||
hideQrcodeDia() {
|
||||
console.log("close dialog qroce");
|
||||
}
|
||||
},
|
||||
props: {
|
||||
type: {
|
||||
// template mertial
|
||||
type: String,
|
||||
default: "mertial"
|
||||
},
|
||||
html: {
|
||||
// html
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
datas: {
|
||||
// 全部的data
|
||||
type: Object,
|
||||
default: {}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState("user", ["user"]),
|
||||
isTemplate() {
|
||||
return !!this.datas.IfSystem;
|
||||
},
|
||||
isLogin() {
|
||||
return !!this.user;
|
||||
},
|
||||
isVip() {
|
||||
return !!this.user;
|
||||
}
|
||||
},
|
||||
components: {
|
||||
amAlert,
|
||||
LoginDialog
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.item {
|
||||
margin-top: 10px;
|
||||
// 分块使用
|
||||
.templateCover {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
i.media {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
color: #f7ba2a;
|
||||
font-size: 20px;
|
||||
display: block;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
text-align: center;
|
||||
padding-left: 8px;
|
||||
line-height: 35px;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
border-bottom-left-radius: 100%;
|
||||
display: none;
|
||||
z-index: 99;
|
||||
}
|
||||
i.fa-trash-o {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
display: none;
|
||||
}
|
||||
.isvip {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
z-index: 99;
|
||||
width: 25px;
|
||||
}
|
||||
i.fa-times {
|
||||
color: #ff4949 !important;
|
||||
}
|
||||
.item {
|
||||
&:hover {
|
||||
transition: all 0.3s ease;
|
||||
i.media {
|
||||
display: block;
|
||||
}
|
||||
i.fa-trash-o {
|
||||
display: block;
|
||||
}
|
||||
.isvip {
|
||||
display: block;
|
||||
}
|
||||
.templateSelect {
|
||||
display: block;
|
||||
}
|
||||
i.pasterAbout {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
&.item {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
padding: 10px 10px;
|
||||
cursor: pointer;
|
||||
min-height: 60px;
|
||||
border-radius: 2px;
|
||||
border-top: none;
|
||||
margin-bottom: 4px;
|
||||
overflow: hidden;
|
||||
transition: background, 0.3s, ease;
|
||||
&.designTemplate,
|
||||
&.template {
|
||||
.mytemplate-Name,
|
||||
.mytemplate-title {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
&.draft,
|
||||
&.myTemplate,
|
||||
&.mysign {
|
||||
max-height: 240px;
|
||||
border: 1px solid #e6e6e6;
|
||||
padding: 0px;
|
||||
> div {
|
||||
> div {
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
.mytemplate-Name {
|
||||
height: 33px;
|
||||
line-height: 33px;
|
||||
background-color: #f9fafc;
|
||||
color: #333333;
|
||||
font-size: 14px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 12px;
|
||||
}
|
||||
.mytemplate-summary {
|
||||
line-height: 1.5px;
|
||||
background-color: #f9fafc;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
box-sizing: border-box;
|
||||
padding: 5px 12px;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
.templateSelect {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: 88;
|
||||
> p {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
button {
|
||||
&:hover {
|
||||
i,
|
||||
span {
|
||||
color: #f7ba2a;
|
||||
}
|
||||
}
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
> span {
|
||||
i {
|
||||
font-size: 40px;
|
||||
width: 40px;
|
||||
color: #fff;
|
||||
line-height: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
}
|
||||
> span {
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
margin-top: 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mytemplate {
|
||||
border-width: 1px;
|
||||
border-color: rgb(230, 230, 230);
|
||||
border-style: solid;
|
||||
border-radius: 4px;
|
||||
padding: 0px;
|
||||
margin-top: 12px;
|
||||
> div > div {
|
||||
margin: 12px;
|
||||
max-height: 180px;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
p.mytemplate-title {
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
padding: 0px 12px;
|
||||
background-color: #f9fafc;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
}
|
||||
p.mytemplate-summary {
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
padding: 0px 12px;
|
||||
background-color: #f9fafc;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
p.mytemplate-title {
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
padding-left: 12px;
|
||||
background-color: #f9fafc;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
}
|
||||
p.designTemplat-price {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 20px;
|
||||
margin-top: 6px;
|
||||
span {
|
||||
&:nth-child(1) {
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
i {
|
||||
font-size: 16px;
|
||||
margin-right: 3px;
|
||||
}
|
||||
}
|
||||
&:nth-child(2) {
|
||||
font-size: 20px;
|
||||
color: #ff5e45;
|
||||
i {
|
||||
font-style: normal;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
qqmusic {
|
||||
min-height: 60px;
|
||||
width: 100%;
|
||||
border: 1px solid #e7e7ed;
|
||||
margin: 17px 1px 16px 0;
|
||||
display: block;
|
||||
// background-image: url("../../javascript/lib/ueditor/themes/default/images/icon_qqmusic_audio_default.png");
|
||||
background-position: right center;
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
padding: 9px 12px;
|
||||
}
|
||||
qqmusic:before {
|
||||
content: "QQ音乐";
|
||||
display: block;
|
||||
text-align: left;
|
||||
}
|
||||
qqmusic:after {
|
||||
content: "QQ音乐--预览查看";
|
||||
color: #8d8d8d;
|
||||
display: block;
|
||||
text-align: left;
|
||||
}
|
||||
.icon-VIP {
|
||||
color: #ef2a36;
|
||||
font-size: 35px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 7px;
|
||||
}
|
||||
</style>
|
134
vueTem/src/components/BaseQrcodeDialog.vue
Normal file
@ -0,0 +1,134 @@
|
||||
<template>
|
||||
<div class="qrCode-layer f--hcc" v-show="showStatus">
|
||||
<div class="qrCode">
|
||||
<div class="qrCode-header f--hlc">
|
||||
<span class="title-icon"></span>
|
||||
<span class="flex-1">预览二维码</span>
|
||||
<span class="close-icon" @click="close"></span>
|
||||
</div>
|
||||
<div class="qrCode-content">
|
||||
<div class="qrCode-div">
|
||||
<div class="qrCode-bg">
|
||||
<img :src="src" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<p>扫码查看手机效果</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
showStatus: this.value,
|
||||
src: ""
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
changeSwitch() {
|
||||
this.emitSwitch();
|
||||
},
|
||||
close() {
|
||||
this.showStatus = false;
|
||||
this.$emit("update:show", this.showStatus);
|
||||
this.$emit("close");
|
||||
}
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
// 地址
|
||||
type: String,
|
||||
default: false
|
||||
},
|
||||
show: {
|
||||
// 状态
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.src = newVal;
|
||||
},
|
||||
show(newVal) {
|
||||
this.showStatus = newVal;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.qrCode-layer {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 9999;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
.qrCode {
|
||||
box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-webkit-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-moz-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-ms-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
-o-box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.3);
|
||||
border-radius: 2px;
|
||||
width: 214px;
|
||||
background: #353535;
|
||||
.qrCode-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
background: #545454;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
.title-icon {
|
||||
width: 30px;
|
||||
height: 40px;
|
||||
background: url(../images/icon1.svg) no-repeat -1520px -240px;
|
||||
display: block;
|
||||
}
|
||||
.close-icon {
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 40px;
|
||||
background: url(../images/icon1.svg) no-repeat -1203px -235px;
|
||||
display: block;
|
||||
&.close-icon:hover {
|
||||
background-position: -1203px -275px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.qrCode-content {
|
||||
width: 100%;
|
||||
p {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #b5b5b5;
|
||||
padding: 0 10px;
|
||||
margin: 0 0 9px;
|
||||
}
|
||||
.qrCode-div {
|
||||
border-radius: 2px;
|
||||
width: 194px;
|
||||
height: 194px;
|
||||
margin: 10px auto;
|
||||
padding: 5px;
|
||||
background: #545454;
|
||||
.qrCode-bg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #d2d2d2;
|
||||
padding: 5px;
|
||||
img {
|
||||
border-style: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
55
vueTem/src/components/BaseSwitchInput.vue
Normal file
@ -0,0 +1,55 @@
|
||||
<template>
|
||||
<div class="f--hlc ant-row ant-form-item" :class="{ 'ant-form-full':full,'ant-form-half':!full} ">
|
||||
<div class="ant-col-l ant-form-item-label">
|
||||
<label>
|
||||
<slot name="label">
|
||||
{{label}}
|
||||
</slot>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ant-col-r">
|
||||
<div class="ant-form-item-control" style="text-align: left;">
|
||||
<el-switch v-model="status" active-color="#ffa800" inactive-color="#151515" style="margin-top:3px;" @change="changeSwitch" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
status: this.value
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
changeSwitch() {
|
||||
this.emitSwitch();
|
||||
},
|
||||
emitSwitch() {
|
||||
this.$emit("changeSwitch", this.status);
|
||||
}
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
// 状态
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
label: {
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
},
|
||||
full: {
|
||||
// 容器全宽或者半宽
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.status = newVal;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
223
vueTem/src/components/BaseToolInput.vue
Normal file
@ -0,0 +1,223 @@
|
||||
<template>
|
||||
<div
|
||||
class="f--hlc ant-row ant-form-item"
|
||||
:class="{ 'ant-form-full':full,'ant-form-half':!full} "
|
||||
>
|
||||
<div class="ant-col-l ant-form-item-label">
|
||||
<label>
|
||||
<slot name="label">
|
||||
{{label}}
|
||||
</slot>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ant-col-r">
|
||||
<div class="ant-form-item-control">
|
||||
<div :class="['ant-input-'+icon]">
|
||||
<div
|
||||
class="ant-input-number ant-input-number-sm"
|
||||
:class="{'input-com-number':fullInput,'slider-input':!fullInput}"
|
||||
>
|
||||
<div
|
||||
class="ant-input-number-handler-wrap"
|
||||
v-if="count"
|
||||
>
|
||||
<a
|
||||
class="ant-input-number-handler ant-input-number-handler-up "
|
||||
:class="{'ant-input-number-handler-down-disabled':maxDisabled}"
|
||||
@keydown.enter="increase"
|
||||
@click="increase"
|
||||
>
|
||||
<span class="ant-input-number-handler-up-inner"></span>
|
||||
</a>
|
||||
<a
|
||||
class="ant-input-number-handler ant-input-number-handler-down "
|
||||
:class="{'ant-input-number-handler-down-disabled':minDisabled}"
|
||||
@keydown.enter="decrease"
|
||||
@click="decrease"
|
||||
>
|
||||
<span class="ant-input-number-handler-down-inner"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="ant-input-number-input-wrap">
|
||||
<input
|
||||
class="ant-input-number-input"
|
||||
:step="step"
|
||||
:max="max"
|
||||
:min="min"
|
||||
:value="currentValue"
|
||||
@keydown.up="increase($event)"
|
||||
@keydown.down="decrease($event)"
|
||||
ref="input"
|
||||
@input="inputEventChangeVal($event)"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="ant-slider slider-per"
|
||||
v-if="showSlider"
|
||||
>
|
||||
<el-slider
|
||||
v-model="currentValue"
|
||||
@change="setCurrentValue"
|
||||
></el-slider>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
currentValue: parseFloat(this.value)
|
||||
};
|
||||
},
|
||||
props: {
|
||||
full: {
|
||||
// 容器全宽或者半宽
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
count: {
|
||||
// 是否有计数功能
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
icon: {
|
||||
// 单位图标 rate:% px:px degree:度
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
step: {
|
||||
// 点击一次数值增长或者减少的数值
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
max: {
|
||||
// 最大
|
||||
type: [Number, String],
|
||||
default: 9999
|
||||
},
|
||||
min: {
|
||||
// 最小
|
||||
type: [Number, String],
|
||||
default: 0
|
||||
},
|
||||
value: {
|
||||
// input值
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
},
|
||||
showSlider: {
|
||||
// 是否显示滑动条
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
label: {
|
||||
// 文字
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
increase(e) {
|
||||
if (!this.count || this.maxDisabled) return;
|
||||
const value = this.value || 0;
|
||||
const newVal = this._increase(value, this.step);
|
||||
this.setCurrentValue(newVal);
|
||||
e.currentTarget.focus();
|
||||
},
|
||||
decrease(e) {
|
||||
if (!this.count || this.minDisabled) return;
|
||||
const value = this.value || 0;
|
||||
const newVal = this._decrease(value, this.step);
|
||||
this.setCurrentValue(newVal);
|
||||
e.currentTarget.focus();
|
||||
},
|
||||
|
||||
_increase(val, step) {
|
||||
if (typeof val !== "number" && val !== undefined)
|
||||
return this.currentValue;
|
||||
const precisionFactor = Math.pow(10, this.precision);
|
||||
return this.toPrecision(
|
||||
(precisionFactor * val + precisionFactor * step) / precisionFactor
|
||||
);
|
||||
},
|
||||
_decrease(val, step) {
|
||||
if (typeof val !== "number" && val !== undefined)
|
||||
return this.currentValue;
|
||||
const precisionFactor = Math.pow(10, this.precision);
|
||||
return this.toPrecision(
|
||||
(precisionFactor * val - precisionFactor * step) / precisionFactor
|
||||
);
|
||||
},
|
||||
getPrecision(value) {
|
||||
if (value === undefined) return 0;
|
||||
const valueString = value.toString();
|
||||
const dotPosition = valueString.indexOf(".");
|
||||
let precision = 0;
|
||||
if (dotPosition !== -1) {
|
||||
precision = valueString.length - dotPosition - 1;
|
||||
}
|
||||
return precision;
|
||||
},
|
||||
setCurrentValue(newVal) {
|
||||
const oldVal = this.currentValue;
|
||||
if (newVal >= this.max) newVal = parseFloat(this.max ? this.max : 0);
|
||||
if (newVal <= this.min) newVal = parseFloat(this.min ? this.min : 0);
|
||||
// if (oldVal === newVal) {
|
||||
// this.$refs.input.setCurrentValue(this.currentValue);
|
||||
// return;
|
||||
// }
|
||||
if (this.count) {
|
||||
this.$emit("input", newVal);
|
||||
this.$emit("change", newVal, oldVal);
|
||||
this.currentValue = parseFloat(newVal ? newVal : 0);
|
||||
} else {
|
||||
this.$emit("input", parseFloat(newVal));
|
||||
this.$emit("change", parseFloat(newVal), oldVal);
|
||||
this.currentValue = parseFloat(newVal ? newVal : 0);
|
||||
}
|
||||
},
|
||||
inputEventChangeVal(e) {
|
||||
const newVal = parseFloat(
|
||||
e.currentTarget.value ? e.currentTarget.value : 0
|
||||
);
|
||||
this.setCurrentValue(newVal);
|
||||
e.currentTarget.focus();
|
||||
},
|
||||
toPrecision(num, precision) {
|
||||
if (precision === undefined) precision = this.precision;
|
||||
return parseFloat(parseFloat(Number(num ? num : 0).toFixed(precision)));
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
minDisabled() {
|
||||
return this._decrease(this.value, this.step) < this.min;
|
||||
},
|
||||
maxDisabled() {
|
||||
return this._increase(this.value, this.step) > this.max;
|
||||
},
|
||||
precision() {
|
||||
const { value, step, getPrecision } = this;
|
||||
return Math.max(getPrecision(value), getPrecision(step));
|
||||
},
|
||||
fullInput() {
|
||||
// input全宽或者半宽
|
||||
return !this.showSlider && this.full;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value(newVal) {
|
||||
this.currentValue = parseFloat(newVal);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import "../styles/css/toolbar";
|
||||
@import "../styles/css/toolbarfont";
|
||||
</style>
|
57
vueTem/src/components/BaseToolTextarea.vue
Normal file
@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<div data-item="value" class="f--hlc ant-row ant-form-item ant-form-full">
|
||||
<div class="ant-col-l ant-form-item-label">
|
||||
<label>
|
||||
<slot name="label">
|
||||
{{label}}
|
||||
</slot>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ant-col-r">
|
||||
<div class="ant-form-item-control">
|
||||
<div class="input-com ">
|
||||
<div>
|
||||
<div class="input-com-wrapper">
|
||||
<textarea class="input-com-input input-com-textarea" type="textarea" :value='currentValue' @blur="changeTextarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
currentValue: this.value
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
changeTextarea() {
|
||||
this.setCurrentValue();
|
||||
},
|
||||
setCurrentValue() {
|
||||
this.$emit("changeTextarea", this.value);
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
value(newVal) {
|
||||
this.currentValue = newVal
|
||||
}
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
// input值
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
},
|
||||
label: {
|
||||
type: [String, Number],
|
||||
default: ""
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
128
vueTem/src/components/LandingPage.vue
Normal file
@ -0,0 +1,128 @@
|
||||
<template>
|
||||
<div id="wrapper">
|
||||
<img id="logo" src="~@/assets/logo.png" alt="electron-vue">
|
||||
<main>
|
||||
<div class="left-side">
|
||||
<span class="title">
|
||||
Welcome to your new project!
|
||||
</span>
|
||||
<system-information></system-information>
|
||||
</div>
|
||||
|
||||
<div class="right-side">
|
||||
<div class="doc">
|
||||
<div class="title">Getting Started</div>
|
||||
<p>
|
||||
electron-vue comes packed with detailed documentation that covers everything from
|
||||
internal configurations, using the project structure, building your application,
|
||||
and so much more.
|
||||
</p>
|
||||
<button @click="open('https://simulatedgreg.gitbooks.io/electron-vue/content/')">Read the Docs</button><br><br>
|
||||
</div>
|
||||
<div class="doc">
|
||||
<div class="title alt">Other Documentation</div>
|
||||
<button class="alt" @click="open('https://electron.atom.io/docs/')">Electron</button>
|
||||
<button class="alt" @click="open('https://vuejs.org/v2/guide/')">Vue.js</button>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import SystemInformation from './LandingPage/SystemInformation'
|
||||
|
||||
export default {
|
||||
name: 'landing-page',
|
||||
components: { SystemInformation },
|
||||
methods: {
|
||||
open (link) {
|
||||
this.$electron.shell.openExternal(link)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro');
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body { font-family: 'Source Sans Pro', sans-serif; }
|
||||
|
||||
#wrapper {
|
||||
background:
|
||||
radial-gradient(
|
||||
ellipse at top left,
|
||||
rgba(255, 255, 255, 1) 40%,
|
||||
rgba(229, 229, 229, .9) 100%
|
||||
);
|
||||
height: 100vh;
|
||||
padding: 60px 80px;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
#logo {
|
||||
height: auto;
|
||||
margin-bottom: 20px;
|
||||
width: 420px;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
main > div { flex-basis: 50%; }
|
||||
|
||||
.left-side {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.welcome {
|
||||
color: #555;
|
||||
font-size: 23px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: #2c3e50;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.title.alt {
|
||||
font-size: 18px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.doc p {
|
||||
color: black;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.doc button {
|
||||
font-size: .8em;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
padding: 0.75em 2em;
|
||||
border-radius: 2em;
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
background-color: #4fc08d;
|
||||
transition: all 0.15s ease;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #4fc08d;
|
||||
}
|
||||
|
||||
.doc button.alt {
|
||||
color: #42b983;
|
||||
background-color: transparent;
|
||||
}
|
||||
</style>
|
61
vueTem/src/config/configSample.js
Normal file
@ -0,0 +1,61 @@
|
||||
/* eslint-disable comma-dangle */
|
||||
/* eslint-disable quotes */
|
||||
/*
|
||||
* @Description: 优秀模板示例数据
|
||||
* @Author: jinguoqiang
|
||||
* @Date: 2020-04-26 19:14:14
|
||||
* @LastEditors: jinguoqiang
|
||||
* @LastEditTime: 2020年10月30日17:38:50
|
||||
*/
|
||||
|
||||
export const GameSyncTypeEnum = {
|
||||
SYNC: '1',
|
||||
DISTRIBUTE: '2',
|
||||
BOTH: '3'
|
||||
}
|
||||
export const GradeEnum = {
|
||||
ONE: 1,
|
||||
TWO: 2,
|
||||
THREE: 3
|
||||
}
|
||||
|
||||
export const CourseStepEnum = {
|
||||
NORMLAL: '1', // 课中作答
|
||||
CONCENTRATION: '2', // 专注力游戏
|
||||
BIG_GAME: '3' // 大游戏
|
||||
}
|
||||
|
||||
export const AuthorEnum = {
|
||||
JGQ: '小明',
|
||||
CGC: '小红',
|
||||
WQD: '珍妮',
|
||||
HJS: '项羽',
|
||||
XJT: '小王子'
|
||||
}
|
||||
|
||||
export const SubjectEnum = {
|
||||
Math: '数学',
|
||||
Chinese: '语文'
|
||||
}
|
||||
export const sampleData = [
|
||||
{
|
||||
name: 'helloworld1',
|
||||
title: '场景1',
|
||||
description: '第一个场景',
|
||||
grade: [GradeEnum.ONE, GradeEnum.TWO, GradeEnum.THREE],
|
||||
tip: CourseStepEnum.NORMLAL,
|
||||
subject: SubjectEnum.Math,
|
||||
author: AuthorEnum.JGQ,
|
||||
type: GameSyncTypeEnum.BOTH
|
||||
},
|
||||
{
|
||||
name: 'helloworld2',
|
||||
title: '场景2',
|
||||
description: '第二个场景',
|
||||
grade: [GradeEnum.ONE, GradeEnum.TWO, GradeEnum.THREE],
|
||||
tip: CourseStepEnum.NORMLAL,
|
||||
subject: SubjectEnum.Math,
|
||||
author: AuthorEnum.JGQ,
|
||||
type: GameSyncTypeEnum.BOTH
|
||||
},
|
||||
]
|
24
vueTem/src/const/event.js
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* @Author: jinguoqiang
|
||||
* @Date: 2020-04-27 11:21:19
|
||||
* @LastEditTime: 2020-04-27 11:21:24
|
||||
* @LastEditors: jinguoqiang
|
||||
*/
|
||||
// game 发消息给 electron
|
||||
export let GAME2WEB_EVENTTYPE = {
|
||||
ON_PAGE_CHANGE_SUCCESS: 'ON_PAGE_CHANGE_SUCCESS',
|
||||
SELECT_NODE: 'SELECT_NODE',
|
||||
GAMENODE_MOVED: 'GAMENODE_MOVED',
|
||||
GAMENODE_MOVEEND: 'GAMENODE_MOVEEND',
|
||||
GAMESCENE_LOADED: 'GAMESCENE_LOADED'
|
||||
}
|
||||
|
||||
// electron 发消息给 game
|
||||
export let E2G_EVENTTYPE = {
|
||||
CREATOR_INIT: 'CREATOR_INIT', // 初始化游戏场景
|
||||
LOAD_SCENE: 'LOAD_SCENE', // 加载场景
|
||||
LOAD_GAME: 'LOAD_GAME', // 加载小游戏 (prefab)
|
||||
UNLOAD_GAME: 'UNLOAD_GAME', // 卸载小游戏 (prefab)
|
||||
UPDATE_RESOLUTION: 'UPDATE_RESOLUTION', // 调整分辨率
|
||||
SET_NODEATTRIBUTE: 'SET_NODEATTRIBUTE' // 设置节点属性值
|
||||
}
|
54
vueTem/src/images/1.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" width="180" height="60" viewBox="0 0 180 60">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1, .cls-2 {
|
||||
fill: #858585;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #151515;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #fff;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<title>属性面板图标</title>
|
||||
<g>
|
||||
<path class="cls-1" d="M5.87,10.94v2.83h-1V6.2H7a2.8,2.8,0,0,1,1.9.59,2.12,2.12,0,0,1,.68,1.69,2.28,2.28,0,0,1-.79,1.8,2.75,2.75,0,0,1-2,.65Zm0-3.88v3h.9a2,2,0,0,0,1.36-.4,1.45,1.45,0,0,0,.46-1.15q0-1.46-1.73-1.46Z"/>
|
||||
<path class="cls-1" d="M16,13.77H14.83l-1.69-2.85a2.92,2.92,0,0,1-.17-.39h0s-.06.16-.18.4L11,13.77H9.84L12.35,10,10,6.2h1.2l1.49,2.62a5.17,5.17,0,0,1,.26.54h0a6.24,6.24,0,0,1,.29-.56L14.86,6.2H16L13.62,10Z"/>
|
||||
</g>
|
||||
<path class="cls-2" d="M77.5,5.5v-3h-3v1h-3v-1h-3v1h-3v-1h-3v3h1v3h-1v3h1v3h-1v3h3v-1h3v1h3v-1h3v1h3v-3h-1v-3h1v-3h-1v-3Zm-2,3h-1v3h1v3h-1v1h-3v-1h-3v1h-3v-1h-1v-3h1v-3h-1v-3h1v-1h3v1h3v-1h3v1h1Zm-7,3h3v-3h-3Z"/>
|
||||
<path class="cls-1" d="M92.83,10a1.62,1.62,0,1,0-1.62,1.67A1.65,1.65,0,0,0,92.83,10ZM91.21,2.5A7.4,7.4,0,0,0,83.93,10H81.5l3.24,3.33L88,10H85.55a5.67,5.67,0,1,1,11.33,0,5.75,5.75,0,0,1-5.67,5.83,5.59,5.59,0,0,1-3.29-1.08L86.78,16a7.16,7.16,0,0,0,4.44,1.55A7.4,7.4,0,0,0,98.5,10,7.4,7.4,0,0,0,91.21,2.5Z"/>
|
||||
<path class="cls-1" d="M112.89,13.5h-3.11a3.32,3.32,0,0,1-3.11-3.5,3.88,3.88,0,0,1,.11-.87h1.45a.67.67,0,0,1,.2,0,1.89,1.89,0,0,0-.2.83,1.66,1.66,0,0,0,1.56,1.75h3.11A1.66,1.66,0,0,0,114.44,10a1.66,1.66,0,0,0-1.56-1.75h-1.11a4.33,4.33,0,0,0-1.25-1.75h2.36A3.32,3.32,0,0,1,116,10,3.32,3.32,0,0,1,112.89,13.5Zm-6.67-1.75h-1.11A1.66,1.66,0,0,1,103.56,10a1.66,1.66,0,0,1,1.56-1.75h3.11A1.66,1.66,0,0,1,109.78,10a1.9,1.9,0,0,1-.19.83.66.66,0,0,0,.19,0h1.45a3.83,3.83,0,0,0,.11-.87,3.32,3.32,0,0,0-3.11-3.5h-3.11A3.32,3.32,0,0,0,102,10a3.32,3.32,0,0,0,3.11,3.5h2.36A4.33,4.33,0,0,1,106.22,11.75Z"/>
|
||||
<path class="cls-1" d="M33.5,3.83A1.5,1.5,0,1,1,32,5.33a1.5,1.5,0,0,1,1.5-1.5m0-1A2.5,2.5,0,1,0,36,5.33a2.5,2.5,0,0,0-2.5-2.5Z"/>
|
||||
<g>
|
||||
<path class="cls-1" d="M50.91,9.48a2.22,2.22,0,0,0,.53-1.53A2.15,2.15,0,0,0,51,6.46a1.73,1.73,0,0,0-1.35-.54,1.84,1.84,0,0,0-1.43.59,2.25,2.25,0,0,0-.53,1.56,2.1,2.1,0,0,0,.5,1.46,1.73,1.73,0,0,0,1.34.56A1.81,1.81,0,0,0,50.91,9.48Zm-2-2.39a.79.79,0,0,1,.67-.31.75.75,0,0,1,.64.3,1.47,1.47,0,0,1,.24.9,1.52,1.52,0,0,1-.24.92.76.76,0,0,1-.65.3.78.78,0,0,1-.65-.29A1.41,1.41,0,0,1,48.65,8,1.47,1.47,0,0,1,48.9,7.1Z"/>
|
||||
<path class="cls-1" d="M55.48,10.33a1.73,1.73,0,0,0-1.35-.55,1.82,1.82,0,0,0-1.42.6,2.27,2.27,0,0,0-.53,1.56,2.11,2.11,0,0,0,.5,1.45A1.72,1.72,0,0,0,54,14a1.82,1.82,0,0,0,1.41-.59A2.2,2.2,0,0,0,56,11.84,2.18,2.18,0,0,0,55.48,10.33Zm-.75,2.44a.76.76,0,0,1-.65.31.78.78,0,0,1-.65-.3,1.4,1.4,0,0,1-.25-.88,1.5,1.5,0,0,1,.25-.92.79.79,0,0,1,.67-.31.75.75,0,0,1,.63.29,1.43,1.43,0,0,1,.24.89A1.52,1.52,0,0,1,54.72,12.78Z"/>
|
||||
<polygon class="cls-1" points="53.72 6.03 48.7 13.89 49.82 13.89 54.84 6.03 53.72 6.03"/>
|
||||
</g>
|
||||
<rect class="cls-3" x="100" y="24.5" width="18" height="11" rx="1.8" ry="1.8"/>
|
||||
<path class="cls-1" d="M112.89,33.5h-3.11a3.32,3.32,0,0,1-3.11-3.5,3.88,3.88,0,0,1,.11-.87h1.45a.67.67,0,0,1,.2,0,1.89,1.89,0,0,0-.2.83,1.66,1.66,0,0,0,1.56,1.75h3.11a1.76,1.76,0,0,0,0-3.5h-1.11a4.33,4.33,0,0,0-1.25-1.75h2.36A3.32,3.32,0,0,1,116,30,3.32,3.32,0,0,1,112.89,33.5Zm-6.67-1.75h-1.11a1.76,1.76,0,0,1,0-3.5h3.11A1.66,1.66,0,0,1,109.78,30a1.9,1.9,0,0,1-.19.83.66.66,0,0,0,.19,0h1.45a3.83,3.83,0,0,0,.11-.87,3.32,3.32,0,0,0-3.11-3.5h-3.11A3.32,3.32,0,0,0,102,30a3.32,3.32,0,0,0,3.11,3.5h2.36A4.33,4.33,0,0,1,106.22,31.75Z"/>
|
||||
<rect class="cls-3" x="100" y="44.5" width="18" height="11" rx="1.8" ry="1.8"/>
|
||||
<path class="cls-4" d="M112.89,53.5h-3.11a3.32,3.32,0,0,1-3.11-3.5,3.88,3.88,0,0,1,.11-.87h1.45a.67.67,0,0,1,.2,0,1.89,1.89,0,0,0-.2.83,1.66,1.66,0,0,0,1.56,1.75h3.11a1.76,1.76,0,0,0,0-3.5h-1.11a4.33,4.33,0,0,0-1.25-1.75h2.36a3.52,3.52,0,0,1,0,7Zm-6.67-1.75h-1.11a1.76,1.76,0,0,1,0-3.5h3.11A1.66,1.66,0,0,1,109.78,50a1.9,1.9,0,0,1-.19.83.66.66,0,0,0,.19,0h1.45a3.83,3.83,0,0,0,.11-.87,3.32,3.32,0,0,0-3.11-3.5h-3.11a3.52,3.52,0,0,0,0,7h2.36A4.33,4.33,0,0,1,106.22,51.75Z"/>
|
||||
<g>
|
||||
<rect class="cls-1" x="124.02" y="4" width="1" height="12"/>
|
||||
<rect class="cls-1" x="135.02" y="4" width="1" height="12"/>
|
||||
<rect class="cls-1" x="129.52" y="6.31" width="1" height="7.39" transform="translate(120.02 140.02) rotate(-90)"/>
|
||||
<polygon class="cls-1" points="125.02 9.91 128.02 7.41 128.02 12.41 125.02 9.91"/>
|
||||
<polygon class="cls-1" points="135.02 9.91 132.02 12.41 132.02 7.41 135.02 9.91"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-1" x="149.53" y="-1.5" width="1" height="12" transform="translate(154.53 -145.53) rotate(90)"/>
|
||||
<rect class="cls-1" x="149.53" y="9.5" width="1" height="12" transform="translate(165.53 -134.53) rotate(90)"/>
|
||||
<rect class="cls-1" x="149.53" y="6.31" width="1" height="7.39"/>
|
||||
<polygon class="cls-1" points="150.13 5 152.63 8 147.63 8 150.13 5"/>
|
||||
<polygon class="cls-1" points="150.13 15 147.63 12 152.63 12 150.13 15"/>
|
||||
</g>
|
||||
<path class="cls-1" d="M174.17,8.45h-.92a1.6,1.6,0,0,0-.47-1,1.67,1.67,0,0,0-1.11-.33,1.5,1.5,0,0,0-1,.28.87.87,0,0,0-.39.75.9.9,0,0,0,.52.78,8,8,0,0,0,1.26.47,5.05,5.05,0,0,1,1.56.67,1.74,1.74,0,0,1,.73,1.47c0,1.47-.86,2.22-2.57,2.22a2.38,2.38,0,0,1-2.61-2.48h.92a2,2,0,0,0,.5,1.22,1.75,1.75,0,0,0,1.16.33c1.08,0,1.63-.42,1.63-1.22a1,1,0,0,0-.58-.93,7.91,7.91,0,0,0-1.29-.46A4.73,4.73,0,0,1,170,9.6a1.6,1.6,0,0,1-.69-1.4A1.73,1.73,0,0,1,170,6.76a2.49,2.49,0,0,1,1.67-.54A2.23,2.23,0,0,1,174.17,8.45Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
BIN
vueTem/src/images/h-ruler.jpeg
Normal file
After Width: | Height: | Size: 1.6 KiB |
2291
vueTem/src/images/icon1.svg
Normal file
After Width: | Height: | Size: 269 KiB |
26
vueTem/src/main.js
Normal file
@ -0,0 +1,26 @@
|
||||
import Vue from 'vue'
|
||||
import ElementUI from 'element-ui'
|
||||
import 'element-ui/lib/theme-chalk/index.css'
|
||||
import './styles/css/common.scss'
|
||||
import './styles/css/element-variables.scss'
|
||||
import './styles/fonts/css/font-awesome.min.css'
|
||||
import Vuerify from 'vuerify'
|
||||
|
||||
import axios from 'axios'
|
||||
|
||||
import App from './App'
|
||||
import router from './router'
|
||||
import store from './store'
|
||||
|
||||
Vue.http = Vue.prototype.$http = axios
|
||||
Vue.config.productionTip = false
|
||||
Vue.use(ElementUI)
|
||||
Vue.use(Vuerify)
|
||||
|
||||
/* eslint-disable no-new */
|
||||
new Vue({
|
||||
components: { App },
|
||||
router,
|
||||
store,
|
||||
template: '<App/>'
|
||||
}).$mount('#app')
|
25
vueTem/src/router/index.js
Normal file
@ -0,0 +1,25 @@
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
export default new Router({
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
name: 'index',
|
||||
component: require('@/views/editor/editor').default,
|
||||
meta: {
|
||||
requireAuth: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/index',
|
||||
name: 'index',
|
||||
component: require('@/views/editor/editor').default,
|
||||
meta: {
|
||||
requireAuth: true
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
12
vueTem/src/store/index.js
Normal file
@ -0,0 +1,12 @@
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
import modules from './modules'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
export default new Vuex.Store({
|
||||
modules,
|
||||
plugins: [],
|
||||
strict: process.env.NODE_ENV !== 'production'
|
||||
})
|
17
vueTem/src/store/modules/CCGameLoaded.js
Normal file
@ -0,0 +1,17 @@
|
||||
import { SET_CCGAME_LOADED } from '../mutation-types'
|
||||
|
||||
const state = {
|
||||
isloaded: false // 是否cocos已经初始化完毕
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
[SET_CCGAME_LOADED] (state, res) {
|
||||
state.isloaded = true
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
state,
|
||||
mutations,
|
||||
namespaced: true
|
||||
}
|
14
vueTem/src/store/modules/index.js
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* The file enables `@/store/index.js` to import all vuex modules
|
||||
* in a one-shot manner. There should not be any reason to edit this file.
|
||||
*/
|
||||
|
||||
const files = require.context('.', false, /\.js$/)
|
||||
const modules = {}
|
||||
|
||||
files.keys().forEach(key => {
|
||||
if (key === './index.js') return
|
||||
modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
|
||||
})
|
||||
|
||||
export default modules
|
1
vueTem/src/store/mutation-types.js
Normal file
@ -0,0 +1 @@
|
||||
export const SET_CCGAME_LOADED = 'SET_CCGAME_LOADED'
|
250
vueTem/src/styles/css/common.scss
Normal file
@ -0,0 +1,250 @@
|
||||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
*:before,
|
||||
*:after {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body,
|
||||
div,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ul,
|
||||
ol,
|
||||
li,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
pre,
|
||||
code,
|
||||
form,
|
||||
fieldset,
|
||||
legend,
|
||||
input,
|
||||
button,
|
||||
textarea,
|
||||
p,
|
||||
blockquote,
|
||||
th,
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
body {
|
||||
// background: #2e2e2e;
|
||||
background: #F4F4F4;
|
||||
color: #555;
|
||||
font-size: 14px;
|
||||
cursor: default;
|
||||
font-family: "Arial", "Microsoft YaHei", "\9ED1\4F53", "\5B8B\4F53", sans-serif;
|
||||
}
|
||||
td,
|
||||
th,
|
||||
caption {
|
||||
font-size: 14px;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: normal;
|
||||
font-size: 100%;
|
||||
}
|
||||
address,
|
||||
caption,
|
||||
cite,
|
||||
code,
|
||||
dfn,
|
||||
em,
|
||||
strong,
|
||||
th,
|
||||
var {
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
}
|
||||
a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.icon {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
vertical-align: -0.15em;
|
||||
fill: currentColor;
|
||||
overflow: hidden;
|
||||
}
|
||||
img {
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
ol,
|
||||
ul,
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
input,
|
||||
textarea,
|
||||
select,
|
||||
button {
|
||||
font: 14px "Arial", "Microsoft YaHei", "\9ED1\4F53", "\5B8B\4F53", sans-serif;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
html {
|
||||
overflow-y: auto;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
}
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
/*公共类*/
|
||||
.fl {
|
||||
float: left;
|
||||
}
|
||||
.fr {
|
||||
float: right;
|
||||
}
|
||||
.al {
|
||||
text-align: left;
|
||||
}
|
||||
.ac {
|
||||
text-align: center;
|
||||
}
|
||||
.ar {
|
||||
text-align: right;
|
||||
}
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
/*input placeholder */
|
||||
::-webkit-input-placeholder {
|
||||
/* WebKit, Blink, Edge */
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: rgba(145, 158, 171, 1);
|
||||
line-height: 17px;
|
||||
}
|
||||
:-moz-placeholder {
|
||||
/* Mozilla Firefox 4 to 18 */
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: rgba(145, 158, 171, 1);
|
||||
line-height: 17px;
|
||||
}
|
||||
::-moz-placeholder {
|
||||
/* Mozilla Firefox 19+ */
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: rgba(145, 158, 171, 1);
|
||||
line-height: 17px;
|
||||
}
|
||||
:-ms-input-placeholder {
|
||||
/* Internet Explorer 10-11 */
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: rgba(145, 158, 171, 1);
|
||||
line-height: 17px;
|
||||
}
|
||||
/* .icon-icon_folderchev{
|
||||
background-size: 522px 474px!important;
|
||||
} */
|
||||
// 公用样式
|
||||
#app {
|
||||
height: 100%;
|
||||
// background: #2e2e2e;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Material Icons';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(../fonts/MaterialIcons-Regular.eot);
|
||||
/* For IE6-8 */
|
||||
src: local('Material Icons'), local('MaterialIcons-Regular'), url(../fonts/MaterialIcons-Regular.woff2) format('woff2'), url(../fonts/MaterialIcons-Regular.woff) format('woff'), url(../fonts/MaterialIcons-Regular.ttf) format('truetype');
|
||||
}
|
||||
|
||||
.material-icons {
|
||||
font-family: 'Material Icons';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-transform: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
direction: ltr;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.control {
|
||||
.mu-text-field-input {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
}
|
||||
|
||||
// #PropertyView {
|
||||
// .el-slider__runway {
|
||||
// margin-bottom: 0 !important;
|
||||
// margin-top: 0 !important;
|
||||
// background-color: #151515 !important;
|
||||
// border-color: #232323 !important;
|
||||
// height: 4px !important;
|
||||
// }
|
||||
// .el-slider__bar {
|
||||
// height: 4px !important;
|
||||
// .el-slider__button-wrapper {
|
||||
// top: -17px !important;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
.el-color-dropdown {
|
||||
border: 1px solid rgb(21, 21, 21) !important;
|
||||
background: rgb(53, 53, 53) !important;
|
||||
border-radius: 8px !important;
|
||||
padding: 15px !important;
|
||||
}
|
||||
|
||||
.el-icon--right {
|
||||
position: absolute;
|
||||
right: -10px;
|
||||
top: 2px;
|
||||
}
|
||||
.el-icon--right {
|
||||
margin-left: 5px;
|
||||
}
|
||||
[class*=" el-icon-"],
|
||||
[class^="el-icon-"] {
|
||||
font-family: element-icons !important;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
175
vueTem/src/styles/css/element-variables.scss
Normal file
@ -0,0 +1,175 @@
|
||||
// .el-tooltip__popper.is-light {
|
||||
// background: #ffffff;
|
||||
// -webkit-box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
// box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
// border-radius: 3px;
|
||||
// border: 0;
|
||||
// }
|
||||
|
||||
// .el-tabs__header {
|
||||
// background: #fff;
|
||||
// margin: 0;
|
||||
// line-height: 40px;
|
||||
// }
|
||||
|
||||
// .el-tabs__nav-wrap {
|
||||
// padding-left: 16px;
|
||||
// }
|
||||
|
||||
// .el-tabs__nav-wrap::after {
|
||||
// height: 1px;
|
||||
// background-color: rgba(224, 224, 224, 1);
|
||||
// }
|
||||
|
||||
// .el-tabs__item {
|
||||
// font-size: 14px;
|
||||
// font-weight: 400;
|
||||
// color: rgba(99, 115, 129, 1);
|
||||
// }
|
||||
|
||||
// .el-tabs--top,
|
||||
// .el-tabs__content,
|
||||
// .el-tab-pane {
|
||||
// height: 100%;
|
||||
// }
|
||||
|
||||
// .el-textarea__inner {
|
||||
// height: 400px;
|
||||
// padding: 5px 8px!important;
|
||||
// }
|
||||
|
||||
// .left-panel /deep/ .el-tabs__content {
|
||||
// overflow-y: auto;
|
||||
// overflow-x: hidden;
|
||||
// height: calc(100% - 70px);
|
||||
// }
|
||||
// .right-panel /deep/ .el-tabs__content {
|
||||
// overflow-y: auto;
|
||||
// overflow-x: hidden;
|
||||
// height: calc(100% - 70px);
|
||||
// }
|
||||
|
||||
// .el-dropdown-menu__item {
|
||||
// font-size: 14px;
|
||||
// font-weight: 400;
|
||||
// line-height: 20px;
|
||||
// padding: 8px 20px 8px 32px;
|
||||
// }
|
||||
|
||||
// .el-checkbox {
|
||||
// margin: 4px 0;
|
||||
// }
|
||||
|
||||
// .el-dropdown {
|
||||
// display: -webkit-box;
|
||||
// display: -ms-flexbox;
|
||||
// display: flex;
|
||||
// padding: 0 8px;
|
||||
// font-size: 13px;
|
||||
// cursor: pointer;
|
||||
// }
|
||||
|
||||
// .el-dropdown-menu {
|
||||
// border: none;
|
||||
// -webkit-user-select: none;
|
||||
// -moz-user-select: none;
|
||||
// -ms-user-select: none;
|
||||
// user-select: none;
|
||||
// }
|
||||
|
||||
// .el-dropdown-link {
|
||||
// width: 100%;
|
||||
// }
|
||||
|
||||
// .el-dropdown-link:focus {
|
||||
// outline: none;
|
||||
// }
|
||||
|
||||
// .el-dropdown-menu__item:hover {
|
||||
// background: rgba(242, 244, 247, 1) !important;
|
||||
// color: #212121 !important;
|
||||
// }
|
||||
|
||||
// .el-tabs__active-bar {
|
||||
// height: 4px!important;
|
||||
// width: 20px!important;
|
||||
// }
|
||||
|
||||
// .is-active {
|
||||
// color: #3E93E1!important;
|
||||
// font-weight: bold!important;
|
||||
// }
|
||||
|
||||
// .ql-container.ql-snow {
|
||||
// border-radius: 3px;
|
||||
// border: 1px solid rgba(171, 186, 203, 1);
|
||||
// }
|
||||
|
||||
// .ql-editor {
|
||||
// padding: 12px 8px!important;
|
||||
// background: white;
|
||||
// }
|
||||
|
||||
// .ql-editor.ql-blank::before {
|
||||
// left: 8px!important;
|
||||
// opacity: 0.5;
|
||||
// font-style: normal!important;
|
||||
// }
|
||||
|
||||
// .el-checkbox__input.is-checked+.el-checkbox__label {
|
||||
// color: #348de0;
|
||||
// }
|
||||
|
||||
// .el-tabs__item:focus.is-active.is-focus:not(:active) {
|
||||
// -webkit-box-shadow: none !important;
|
||||
// box-shadow: none !important;
|
||||
// }
|
||||
|
||||
// .el-dialog__header {
|
||||
// border-bottom: 1px solid #f0f1f2ff;
|
||||
// }
|
||||
|
||||
// .el-dialog__body {
|
||||
// padding: 24px 20px
|
||||
// }
|
||||
|
||||
// .el-input-number--mini {
|
||||
// width: 90px;
|
||||
// }
|
||||
|
||||
// .el-input--mini>input {
|
||||
// padding: 0 !important;
|
||||
// }
|
||||
// .el-dialog {
|
||||
// width: 60%;
|
||||
// }
|
||||
|
||||
// /*自定义popper-class*/
|
||||
// .tip_popper {
|
||||
// max-width: 232px;
|
||||
// font-size: 12px;
|
||||
// color: #212121;
|
||||
// line-height: 17px;
|
||||
// }
|
||||
// .tip_popper /deep/ .popper__arrow{
|
||||
// /* border-bottom-color: white !important;
|
||||
// border-top-color: white !important; */
|
||||
// }
|
||||
// /* 新版本UI checkBox相关 start */
|
||||
// /* el-radio相关写在这里 */
|
||||
// .el-radio__inner{
|
||||
// border-color: rgba(204, 204, 204, 1)!important;
|
||||
// background: rgba(255, 255, 255, 0);
|
||||
// }
|
||||
// .is-checked > .el-radio__inner{
|
||||
// border-color: rgba(76, 131, 253, 1)!important;
|
||||
// }
|
||||
// .el-radio__inner::after{
|
||||
// width:8px;
|
||||
// height: 8px;
|
||||
// background: rgba(76, 131, 253, 1);
|
||||
// border:1px solid #fff;
|
||||
// -webkit-box-sizing:content-box;
|
||||
// box-sizing:content-box;
|
||||
// }
|
||||
// /* 新版本UI checkBox相关 end */
|
4817
vueTem/src/styles/css/toolbar.scss
Normal file
2642
vueTem/src/styles/css/toolbarfont.css
Normal file
BIN
vueTem/src/styles/fonts/MaterialIcons-Regular.eot
Normal file
BIN
vueTem/src/styles/fonts/MaterialIcons-Regular.ttf
Normal file
BIN
vueTem/src/styles/fonts/MaterialIcons-Regular.woff
Normal file
BIN
vueTem/src/styles/fonts/MaterialIcons-Regular.woff2
Normal file
2337
vueTem/src/styles/fonts/css/font-awesome.css
vendored
Normal file
4
vueTem/src/styles/fonts/css/font-awesome.min.css
vendored
Normal file
BIN
vueTem/src/styles/fonts/fonts/FontAwesome.otf
Normal file
BIN
vueTem/src/styles/fonts/fonts/fontawesome-webfont.eot
Normal file
2671
vueTem/src/styles/fonts/fonts/fontawesome-webfont.svg
Normal file
After Width: | Height: | Size: 434 KiB |
BIN
vueTem/src/styles/fonts/fonts/fontawesome-webfont.ttf
Normal file
BIN
vueTem/src/styles/fonts/fonts/fontawesome-webfont.woff
Normal file
BIN
vueTem/src/styles/fonts/fonts/fontawesome-webfont.woff2
Normal file
955
vueTem/src/views/editor/centerPanel.vue
Normal file
@ -0,0 +1,955 @@
|
||||
<template>
|
||||
<div class="centerEditor">
|
||||
<div class="centerEditorContainer">
|
||||
<div class="loading" v-show="gameLoadingStatus">
|
||||
<svg
|
||||
width="45"
|
||||
height="45"
|
||||
viewBox="0 0 45 45"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
stroke="#fff"
|
||||
>
|
||||
<g
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="translate(1 1)"
|
||||
stroke-width="2"
|
||||
>
|
||||
<circle cx="22" cy="22" r="6" stroke-opacity="0">
|
||||
<animate
|
||||
attributeName="r"
|
||||
begin="1.5s"
|
||||
dur="3s"
|
||||
values="6;22"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
<animate
|
||||
attributeName="stroke-opacity"
|
||||
begin="1.5s"
|
||||
dur="3s"
|
||||
values="1;0"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
<animate
|
||||
attributeName="stroke-width"
|
||||
begin="1.5s"
|
||||
dur="3s"
|
||||
values="2;0"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
</circle>
|
||||
<circle cx="22" cy="22" r="6" stroke-opacity="0">
|
||||
<animate
|
||||
attributeName="r"
|
||||
begin="3s"
|
||||
dur="3s"
|
||||
values="6;22"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
<animate
|
||||
attributeName="stroke-opacity"
|
||||
begin="3s"
|
||||
dur="3s"
|
||||
values="1;0"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
<animate
|
||||
attributeName="stroke-width"
|
||||
begin="3s"
|
||||
dur="3s"
|
||||
values="2;0"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
</circle>
|
||||
<circle cx="22" cy="22" r="8">
|
||||
<animate
|
||||
attributeName="r"
|
||||
begin="0s"
|
||||
dur="1.5s"
|
||||
values="6;1;2;3;4;5;6"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite"
|
||||
/>
|
||||
</circle>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="base-filter-block">
|
||||
<ul class="group-list">
|
||||
<li class="group-item">
|
||||
<label class="group-label"
|
||||
><span class="label-name">游戏类型</span
|
||||
><span class="colon">:</span></label
|
||||
>
|
||||
<div class="group-options">
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': !GameSyncTypeEnumSelect }"
|
||||
@click="selectFilter('GameSyncTypeEnum', null)"
|
||||
>
|
||||
<span>全部</span>
|
||||
</div>
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': GameSyncTypeEnumSelect == item }"
|
||||
v-for="(item, index) in GameSyncTypeEnum"
|
||||
:key="index"
|
||||
@click="selectFilter('GameSyncTypeEnum', item)"
|
||||
>
|
||||
<span> {{ item }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="group-item">
|
||||
<label class="group-label"
|
||||
><span class="label-name">年级</span
|
||||
><span class="colon">:</span></label
|
||||
>
|
||||
<div class="group-options">
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': !GradeEnumSelect }"
|
||||
@click="selectFilter('GradeEnum', null)"
|
||||
>
|
||||
<span>全部</span>
|
||||
</div>
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': GradeEnumSelect == item }"
|
||||
v-for="(item, index) in GradeEnum"
|
||||
:key="index"
|
||||
@click="selectFilter('GradeEnum', item)"
|
||||
>
|
||||
<span> {{ item }}年级 </span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="group-item">
|
||||
<label class="group-label"
|
||||
><span class="label-name">所属环节</span
|
||||
><span class="colon">:</span></label
|
||||
>
|
||||
<div class="group-options">
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': !CourseStepEnumSelect }"
|
||||
@click="selectFilter('CourseStepEnum', null)"
|
||||
>
|
||||
<span>全部</span>
|
||||
</div>
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': CourseStepEnumSelect == item }"
|
||||
v-for="(item, index) in CourseStepEnum"
|
||||
:key="index"
|
||||
@click="selectFilter('CourseStepEnum', item)"
|
||||
>
|
||||
<span> {{ item }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="group-item">
|
||||
<label class="group-label"
|
||||
><span class="label-name">研发者</span
|
||||
><span class="colon">:</span></label
|
||||
>
|
||||
<div class="group-options">
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': !AuthorEnumSelect }"
|
||||
@click="selectFilter('AuthorEnum', null)"
|
||||
>
|
||||
<span>全部</span>
|
||||
</div>
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': AuthorEnumSelect == item }"
|
||||
v-for="(item, index) in AuthorEnum"
|
||||
:key="index"
|
||||
@click="selectFilter('AuthorEnum', item)"
|
||||
>
|
||||
<span> {{ item }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="group-item">
|
||||
<label class="group-label"
|
||||
><span class="label-name">学科</span
|
||||
><span class="colon">:</span></label
|
||||
>
|
||||
<div class="group-options">
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': !SubjectEnumSelect }"
|
||||
@click="selectFilter('SubjectEnum', null)"
|
||||
>
|
||||
<span>全部</span>
|
||||
</div>
|
||||
<div
|
||||
class="option-item"
|
||||
:class="{ 'is-actived': SubjectEnumSelect == item }"
|
||||
v-for="(item, index) in SubjectEnum"
|
||||
:key="index"
|
||||
@click="selectFilter('SubjectEnum', item)"
|
||||
>
|
||||
<span> {{ item }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p class="result-num">
|
||||
共 <b>{{ sampleData.length }}</b> 个游戏
|
||||
</p>
|
||||
<div class="no-data" v-if="!sampleData.length">
|
||||
<img src="/static/img/nodata.png" class="no-data-bg" />
|
||||
<p class="no-data-text">未找到相应内容</p>
|
||||
</div>
|
||||
<div class="itemList">
|
||||
<div
|
||||
class="itemContainer"
|
||||
v-for="item in sampleData"
|
||||
:key="item.name"
|
||||
@click="showGameModel(item)"
|
||||
>
|
||||
<span><img :src="'/static/img/cover/' + item.name + '.jpg'" /></span>
|
||||
<div class="cover-info">
|
||||
<span>
|
||||
<h4>{{ item.title }}</h4>
|
||||
</span>
|
||||
<small>{{ item.description }}</small>
|
||||
</div>
|
||||
<div class="cover-fields">
|
||||
<i class="fa fa-list-ul"></i>
|
||||
{{ item.type }}
|
||||
</div>
|
||||
<div class="cover-stat">
|
||||
<i class="fa fa-eye"></i
|
||||
><span class="f10"> {{ item.tip }}</span>
|
||||
<i class="fa fa-heart"></i
|
||||
><span class="f10"> {{ item.grade.join(',') }}年级</span>
|
||||
<div class="cover-yh">
|
||||
{{ item.author }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modalMask" v-show="gameShowStatus">
|
||||
<div class="modalContainer">
|
||||
<map-editor ref="editor" @sceneLoaded="sceneLoaded"> </map-editor>
|
||||
<div class="game-details-block">
|
||||
<div class="block-top">
|
||||
<p class="game-name text-overflow">
|
||||
<span> {{ selectSample.title }} </span>
|
||||
</p>
|
||||
<div class="game-datas">
|
||||
<!-- <div class="game-use-count"><span class="use-num">使用 0</span><span class="answer-num">作答 0</span><span class="correct-rate">正确率 0%</span></div> -->
|
||||
</div>
|
||||
<div class="tool-btns">
|
||||
<div
|
||||
class="game-add-button iconfont icon-car larger"
|
||||
:class="{ disabled: disabledStartBtn }"
|
||||
@click="gameBegin"
|
||||
>
|
||||
开始游戏
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="block-main overflow">
|
||||
<li>
|
||||
<label class="label-name">游戏类型:</label>
|
||||
<div class="game-id">
|
||||
<em>{{ selectSample.type }}</em>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<label class="label-name">年级:</label>
|
||||
<div class="game-url">
|
||||
<em>{{ selectSample.grade.join(',') }}年级</em>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<label class="label-name">游戏简介:</label>
|
||||
<p class="game-desc">{{ selectSample.description }}</p>
|
||||
</li>
|
||||
<li>
|
||||
<label class="label-name">游戏标签:</label>
|
||||
<ul class="game-label-list">
|
||||
<li><span>思维逻辑</span></li>
|
||||
<li><span>逆向思维</span></li>
|
||||
<li><span>鸡蛋灌饼</span></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="game-label">
|
||||
<label class="label-name">程序id:</label>
|
||||
<ul class="knowledge-label-list">
|
||||
<li>{{ selectSample.name }}</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="upload-name">
|
||||
<label class="label-name">研发:</label
|
||||
><span>{{ selectSample.author }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="fa fa-close iconClose"
|
||||
aria-hidden="true"
|
||||
@click="closeGameModel"
|
||||
></div>
|
||||
</div>
|
||||
<transition name="fade">
|
||||
<div class="yyMask" v-show="yyLoadingStatus">
|
||||
<img src="/static/img/loading-yy.gif" />
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import mapEditor from './mapEditor'
|
||||
import {
|
||||
sampleData,
|
||||
GameSyncTypeEnum,
|
||||
GradeEnum,
|
||||
CourseStepEnum,
|
||||
AuthorEnum,
|
||||
SubjectEnum,
|
||||
} from '@/config/configSample'
|
||||
import web2game from './web2game'
|
||||
|
||||
import { GAME2WEB_EVENTTYPE, E2G_EVENTTYPE } from '../../const/event'
|
||||
export default {
|
||||
created() {
|
||||
this.sampleData = sampleData
|
||||
this.oriSampleData = this.sampleData
|
||||
// eventBus.on(GAME2WEB_EVENTTYPE.ON_PAGE_CHANGE_SUCCESS, () => {
|
||||
// this.gameLoadingStatus = false
|
||||
// this.gameShowStatus = true
|
||||
// setTimeout(() => {
|
||||
// // 改变位置后
|
||||
// const myEvent = new Event('resize')
|
||||
// window.dispatchEvent(myEvent)
|
||||
// }, 200)
|
||||
// })
|
||||
|
||||
},
|
||||
components: {
|
||||
mapEditor,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
gameShowStatus: false,
|
||||
gameLoadingStatus: false,
|
||||
isFirstCreate: true,
|
||||
yyLoadingStatus: false,
|
||||
disabledStartBtn: false,
|
||||
GameSyncTypeEnum,
|
||||
GradeEnum,
|
||||
CourseStepEnum,
|
||||
AuthorEnum,
|
||||
SubjectEnum,
|
||||
GameSyncTypeEnumSelect: null,
|
||||
GradeEnumSelect: null,
|
||||
CourseStepEnumSelect: null,
|
||||
AuthorEnumSelect: null,
|
||||
SubjectEnumSelect: null,
|
||||
sampleData: [],
|
||||
oriSampleData: [],
|
||||
selectSample: {
|
||||
name: 'game_labyrinth',
|
||||
title: '迷宫',
|
||||
description: '使小球走道终点,可以用aswd或者上下左右的键盘进行控制',
|
||||
grade: [1, 2, 3],
|
||||
tip: '大游戏',
|
||||
author: '靳国强',
|
||||
type: '分发',
|
||||
},
|
||||
ratio: 2.5,
|
||||
STUDENT_SIZE: {
|
||||
width: 2048,
|
||||
height: 1152,
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
sceneLoaded() {
|
||||
// this.gameShowStatus = false
|
||||
this.yyLoadingStatus = false
|
||||
},
|
||||
showGameModel(selectSample) {
|
||||
this.gameLoadingStatus = true
|
||||
this.selectSample = selectSample
|
||||
this.disabledStartBtn = false
|
||||
web2game.loadScene(selectSample.name)
|
||||
// .then((sceneName) => {
|
||||
// cc.director.loadScene(selectSample.name)
|
||||
this.gameLoadingStatus = false
|
||||
this.gameShowStatus = true
|
||||
// // web2game.updateResolution(this.STUDENT_SIZE, this.ratio)
|
||||
|
||||
// // setTimeout(() => {
|
||||
// // // 改变位置后
|
||||
// // const myEvent = new Event('resize')
|
||||
// // window.dispatchEvent(myEvent)
|
||||
// // },400)
|
||||
// })
|
||||
},
|
||||
closeGameModel() {
|
||||
this.gameShowStatus = false
|
||||
// web2game.unloadGame()
|
||||
},
|
||||
gameBegin() {
|
||||
if (this.disabledStartBtn) return
|
||||
this.disabledStartBtn = true
|
||||
web2game.emit('nova.teacher.start')
|
||||
},
|
||||
selectFilter(key, value) {
|
||||
this[key + 'Select'] = value
|
||||
this.search()
|
||||
},
|
||||
search() {
|
||||
this.sampleData = this.oriSampleData.filter((el) => {
|
||||
return (
|
||||
(!this.GameSyncTypeEnumSelect ||
|
||||
el.type == this.GameSyncTypeEnumSelect) &&
|
||||
(!this.GradeEnumSelect || el.grade.includes(this.GradeEnumSelect)) &&
|
||||
(!this.CourseStepEnumSelect || el.tip == this.CourseStepEnumSelect) &&
|
||||
(!this.AuthorEnumSelect || el.author == this.AuthorEnumSelect) &&
|
||||
(!this.SubjectEnumSelect || el.subject == this.SubjectEnumSelect)
|
||||
)
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang = scss>
|
||||
.fade-enter {
|
||||
opacity: 0;
|
||||
}
|
||||
.fade-enter-active {
|
||||
transition: opacity 1s;
|
||||
}
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
.fade-leave-active {
|
||||
transition: opacity 1s;
|
||||
}
|
||||
|
||||
.centerEditor {
|
||||
position: relative;
|
||||
top: 75px;
|
||||
padding-bottom: 50px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.centerEditorContainer {
|
||||
width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.loading {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 3;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
.no-data {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
img {
|
||||
height: 136px;
|
||||
}
|
||||
.no-data-text {
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
color: #666;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.base-filter-block {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 13px 24px 13px 24px;
|
||||
background: #fff;
|
||||
flex-shrink: 0;
|
||||
margin-top: 24px;
|
||||
box-shadow: 0 1px 3px 0 rgba(85, 97, 107, 0.15);
|
||||
border-radius: 4px;
|
||||
.group-list {
|
||||
flex: 1;
|
||||
margin-right: 16px;
|
||||
.group-item {
|
||||
display: flex;
|
||||
position: relative;
|
||||
.group-label {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
margin-top: 3px;
|
||||
width: 65px;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
font-weight: 600;
|
||||
.red-icon {
|
||||
position: relative;
|
||||
padding-left: 14px;
|
||||
}
|
||||
.label-name {
|
||||
padding-left: 0px;
|
||||
flex: 1;
|
||||
text-align-last: justify;
|
||||
}
|
||||
.colon {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
.group-options {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
.option-item {
|
||||
padding: 3px 4px;
|
||||
height: 26px;
|
||||
cursor: pointer;
|
||||
span {
|
||||
display: inline-block;
|
||||
padding: 1px 6px;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
&.is-actived span,
|
||||
&:hover span {
|
||||
background-color: #e7f5ff;
|
||||
color: #3f92ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.itemList {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 23.7%);
|
||||
grid-row-gap: 20px;
|
||||
grid-column-gap: 20px;
|
||||
width: 100%;
|
||||
.itemContainer {
|
||||
background-color: #fff;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
|
||||
position: relative;
|
||||
transition: all 1s ease 0s;
|
||||
overflow: hidden;
|
||||
&:hover {
|
||||
box-shadow: 7px 17px 12px 0 rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.cover-info {
|
||||
padding: 6px 15px 28px;
|
||||
height: 80px;
|
||||
overflow: hidden;
|
||||
h4 {
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
word-break: keep-all;
|
||||
white-space: nowrap;
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
line-height: 18px;
|
||||
margin-top: 7px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
small {
|
||||
color: #838383;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.cover-fields {
|
||||
bottom: 34px;
|
||||
font-size: 12px;
|
||||
height: 35px;
|
||||
left: 10px;
|
||||
line-height: 35px;
|
||||
max-width: 210px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
.cover-stat {
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 0 0 3px 3px;
|
||||
border-top: 1px solid #e7e7e7;
|
||||
box-shadow: 0 1px 0 0 #fff inset;
|
||||
padding: 7px 15px 7px 15px;
|
||||
color: #8b8b8c;
|
||||
position: relative;
|
||||
.cover-yh {
|
||||
position: absolute;
|
||||
right: 1px;
|
||||
top: 1px;
|
||||
border-left: 1px solid #ddd;
|
||||
color: #aaa;
|
||||
cursor: default;
|
||||
width: 40px;
|
||||
line-height: 30px;
|
||||
height: 30px;
|
||||
transition: color 0.15s linear;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
text-rendering: auto;
|
||||
font-size: 12px;
|
||||
font-family: 'Arial';
|
||||
}
|
||||
.f10 {
|
||||
font-size: 10px;
|
||||
font-family: 'Arial';
|
||||
padding-right: 12px;
|
||||
}
|
||||
}
|
||||
img {
|
||||
width: 100%;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
transition: all 1s ease 0s;
|
||||
}
|
||||
}
|
||||
}
|
||||
.yyMask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 4;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
img {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%) scale(-0.5, 0.5);
|
||||
}
|
||||
}
|
||||
.result-num {
|
||||
flex-shrink: 0;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
color: #666;
|
||||
}
|
||||
.modalMask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 3;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(3, 3, 3, 0.5);
|
||||
.iconClose {
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 300px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 40px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.modalContainer {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
.game-details-block {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
margin-left: 16px;
|
||||
width: 370px;
|
||||
height: 460px;
|
||||
background: #fff;
|
||||
-webkit-box-shadow: 0 2px 10px 0 rgba(58, 66, 73, 0.21);
|
||||
box-shadow: 0 2px 10px 0 rgba(58, 66, 73, 0.21);
|
||||
border-radius: 4px;
|
||||
.block-main,
|
||||
.block-top {
|
||||
padding-left: 24px;
|
||||
padding-right: 22px;
|
||||
}
|
||||
|
||||
.block-top {
|
||||
-ms-flex-negative: 0;
|
||||
flex-shrink: 0;
|
||||
padding-top: 24px;
|
||||
padding-bottom: 21px;
|
||||
border-bottom: 1px solid #f0f1f2;
|
||||
}
|
||||
|
||||
.block-main {
|
||||
-webkit-box-flex: 1;
|
||||
-ms-flex: 1;
|
||||
flex: 1;
|
||||
padding-bottom: 31px;
|
||||
}
|
||||
|
||||
.block-footer {
|
||||
-ms-flex-negative: 0;
|
||||
flex-shrink: 0;
|
||||
border-top: 1px solid #f0f1f2;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.game-name {
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.game-datas {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
margin-top: 14px;
|
||||
.game-use-count {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
color: #979ea6;
|
||||
}
|
||||
|
||||
.game-use-count > span + span {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.tool-btns {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
margin-top: 22px;
|
||||
.larger {
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.game-add-button {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
background: #3f92ff;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
&:active {
|
||||
background: #66a8ff;
|
||||
}
|
||||
&:hover {
|
||||
background: #66a8ff;
|
||||
}
|
||||
&.disabled {
|
||||
cursor: not-allowed;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tool-btns .btn-edit,
|
||||
.tool-btns .game-add-button {
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.tool-btns .btn-edit,
|
||||
.tool-btns .btn-modify {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
padding: 0 15px;
|
||||
border-radius: 8px;
|
||||
color: #3f92ff;
|
||||
}
|
||||
|
||||
.tool-btns .btn-edit > .iconfont,
|
||||
.tool-btns .btn-modify > .iconfont {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.block-main > li {
|
||||
margin-top: 19px;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.block-main > li.game-label,
|
||||
.block-main > li.upload-name {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.label-name {
|
||||
-ms-flex-negative: 0;
|
||||
flex-shrink: 0;
|
||||
margin-right: 8px;
|
||||
width: 70px;
|
||||
-moz-text-align-last: justify;
|
||||
text-align-last: justify;
|
||||
}
|
||||
|
||||
.icon-copy {
|
||||
margin-left: 6px;
|
||||
padding: 0 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon-copy:hover {
|
||||
color: #3f92ff;
|
||||
}
|
||||
|
||||
.game-desc {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.game-desc .icon-arrow-bottom,
|
||||
.game-desc .icon-arrow-top {
|
||||
color: #3f92ff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.game-label-list,
|
||||
.knowledge-label-list {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.game-label-list li {
|
||||
margin-right: 12px;
|
||||
margin-bottom: 11px;
|
||||
padding: 1px 0;
|
||||
}
|
||||
|
||||
.game-label-list li > span {
|
||||
display: inline-block;
|
||||
padding: 1px 6px;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
border-radius: 3px;
|
||||
color: #979ea6;
|
||||
background-color: #f0f4f6;
|
||||
}
|
||||
|
||||
.knowledge-label-list li {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
margin-bottom: 12px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.knowledge-label-list li .icon-label {
|
||||
margin-right: 6px;
|
||||
color: #979ea6;
|
||||
}
|
||||
|
||||
.knowledge-label-list li > span {
|
||||
color: #979ea6;
|
||||
}
|
||||
|
||||
.btn-delete {
|
||||
margin-top: 18px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn-delete .icon-delete {
|
||||
margin-right: 10px;
|
||||
font-size: 14px;
|
||||
color: #979ea6;
|
||||
}
|
||||
|
||||
.btn-delete:hover .icon-delete {
|
||||
color: #ff4640;
|
||||
}
|
||||
}
|
||||
.gameDetailsBlock {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left: 16px;
|
||||
width: 420px;
|
||||
background: #fff;
|
||||
box-shadow: 0 2px 10px 0 rgba(58, 66, 73, 0.21);
|
||||
border-radius: 4px;
|
||||
/* &.teacherSize {
|
||||
width: 3036px;
|
||||
height: 1366px;
|
||||
transform: matrix(0.33, 0, 0, 0.33, -1618, -768);
|
||||
}
|
||||
&.studentSize {
|
||||
width: 2048px;
|
||||
height: 1152px;
|
||||
transform: matrix(0.5, 0, 0, 0.5, -1124, -576);
|
||||
} */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
28
vueTem/src/views/editor/editor.vue
Normal file
@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<div class="editor">
|
||||
<center-panel></center-panel>
|
||||
<right-panel></right-panel>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import centerPanel from './centerPanel'
|
||||
import rightPanel from './rightPanel'
|
||||
|
||||
export default {
|
||||
name: 'electron-cocos',
|
||||
components: {
|
||||
centerPanel,
|
||||
rightPanel,
|
||||
},
|
||||
created() {},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.editor {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
159
vueTem/src/views/editor/headEditor.vue
Normal file
@ -0,0 +1,159 @@
|
||||
<template>
|
||||
<div class="topbar topicfixed">
|
||||
<div class="toppic">
|
||||
<div class="topside">
|
||||
<a
|
||||
href="##"
|
||||
class="logoLink"
|
||||
>im.qq.com</a>
|
||||
<ul
|
||||
id="topNav"
|
||||
class="topNav"
|
||||
>
|
||||
<li
|
||||
v-for='item in routerData'
|
||||
:key='item.path'
|
||||
active-class='current'
|
||||
>
|
||||
<router-link :to="item.path">
|
||||
{{item.name}}
|
||||
</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
routerData: [
|
||||
{
|
||||
name: '首页',
|
||||
path: '/index',
|
||||
},
|
||||
{
|
||||
name: '汉字笔顺生成器',
|
||||
path: '/hanzi',
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
created() {},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang = scss>
|
||||
div {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Helvetica, Tahoma, Arial, 'Hiragino Sans GB',
|
||||
'Hiragino Sans GB W3', 'Microsoft YaHei', STXihei, STHeiti, Heiti, SimSun,
|
||||
sans-serif;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
.topbar {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.toppic {
|
||||
max-width: 1170px;
|
||||
min-width: 980px;
|
||||
width: 80%;
|
||||
height: 75px;
|
||||
margin: 0 auto;
|
||||
|
||||
a {
|
||||
&:link,
|
||||
&:visited {
|
||||
/*color: #fff;*/
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.topicfixed {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #dcdcdc;
|
||||
|
||||
a {
|
||||
&:link,
|
||||
&:visited {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.international .topicfixed .toppic a {
|
||||
&:link,
|
||||
&:visited {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.topside {
|
||||
float: left;
|
||||
width: 59%;
|
||||
}
|
||||
|
||||
.logoLink {
|
||||
float: left;
|
||||
display: block;
|
||||
width: 31px;
|
||||
height: 0px;
|
||||
overflow: hidden;
|
||||
padding-top: 76px;
|
||||
font-size: 0;
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('/static/img/youyou.png');
|
||||
background-position: 0 50%;
|
||||
background-size: 31px 46px;
|
||||
}
|
||||
.topNav {
|
||||
float: left;
|
||||
width: 450px;
|
||||
li {
|
||||
float: left;
|
||||
margin-left: 20px;
|
||||
|
||||
a {
|
||||
float: left;
|
||||
padding: 0 20px;
|
||||
line-height: 75px;
|
||||
font-size: 1.125em;
|
||||
|
||||
&:hover {
|
||||
color: #3f92ff;
|
||||
}
|
||||
}
|
||||
|
||||
&.current a {
|
||||
color: #3f92ff;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.topicfixed {
|
||||
height: 75px;
|
||||
}
|
||||
</style>
|
74
vueTem/src/views/editor/mapEditor.vue
Normal file
@ -0,0 +1,74 @@
|
||||
<template>
|
||||
<div id="GameDiv" class="studentSize">
|
||||
<canvas id="GameCanvas"></canvas>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import GAME_INIT from '../../../static/cocos-loader/creator-load'
|
||||
import { GAME2WEB_EVENTTYPE, E2G_EVENTTYPE } from '../../const/event'
|
||||
import { mapState, mapMutations } from 'vuex'
|
||||
import web2game from './web2game'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
ratio: 1.2,
|
||||
STUDENT_SIZE: {
|
||||
width: 960,
|
||||
height: 640,
|
||||
},
|
||||
TEACHER_SIZE: {
|
||||
width: 1012,
|
||||
height: 455,
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
setTimeout(() => {
|
||||
this.init()
|
||||
}, 200)
|
||||
},
|
||||
computed: {
|
||||
...mapState('CCGameLoaded', ['isloaded']),
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
GAME_INIT(() => {
|
||||
web2game.loadScene('helloworld1').then((scenename) => {
|
||||
console.log(123)
|
||||
web2game.updateResolution(this.STUDENT_SIZE, this.ratio)
|
||||
this.$emit('sceneLoaded') // 发给父组件初始化完毕,这时去掉遮罩
|
||||
})
|
||||
})
|
||||
},
|
||||
...mapMutations('CCGameLoaded', ['SET_CCGAME_LOADED']),
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss'>
|
||||
#GameDiv {
|
||||
// position: absolute;
|
||||
// top: 50%;
|
||||
// left: 50%;
|
||||
// transform: translate(-50%, -50%);
|
||||
// &.teacherSize {
|
||||
// width: 1012px;
|
||||
// height: 455px;
|
||||
// }
|
||||
&.studentSize {
|
||||
width: 960;
|
||||
height: 640px;
|
||||
}
|
||||
}
|
||||
#GameCanvas {
|
||||
display: block;
|
||||
touch-action: none;
|
||||
user-select: none;
|
||||
cursor: default;
|
||||
border-radius: 5px;
|
||||
}
|
||||
canvas:focus {
|
||||
outline: none;
|
||||
}
|
||||
</style>
|
336
vueTem/src/views/editor/rightPanel.vue
Normal file
@ -0,0 +1,336 @@
|
||||
<template>
|
||||
<div id="PropertyView" style="right: 0; top: 0">
|
||||
<h1 id="PropertyViewHeader" class="f--hlc" style="cursor: default">
|
||||
<div class="property-header f--hlc">
|
||||
<div>画布</div>
|
||||
</div>
|
||||
</h1>
|
||||
<div
|
||||
class=""
|
||||
id="PropertyViewBody"
|
||||
style="max-height: calc(100% - 30px); overflow-y: scroll"
|
||||
v-show="!foldMenuStatus"
|
||||
>
|
||||
<div class="property-fields">
|
||||
<form class="ant-form ant-form-horizontal form_display">
|
||||
<am-input
|
||||
@change="changeX4Game"
|
||||
v-model="x"
|
||||
label="X轴位移"
|
||||
icon="px"
|
||||
:full="false"
|
||||
min="-9999"
|
||||
/>
|
||||
<am-input
|
||||
@change="changeY4Game"
|
||||
v-model="y"
|
||||
label="Y轴位移"
|
||||
icon="px"
|
||||
:full="false"
|
||||
min="-9999"
|
||||
/>
|
||||
<am-input
|
||||
@change="changeAngle4Game"
|
||||
v-model="angle"
|
||||
icon="degree"
|
||||
:full="false"
|
||||
min="-360"
|
||||
>
|
||||
<template slot="label">
|
||||
<div class="rotation" title="旋转"></div>
|
||||
</template>
|
||||
</am-input>
|
||||
<am-input
|
||||
@change="changeScale4Game"
|
||||
v-model="scale"
|
||||
label="缩放"
|
||||
icon="rate"
|
||||
:full="false"
|
||||
:step="0.1"
|
||||
/>
|
||||
</form>
|
||||
<form class="ant-form ant-form-horizontal form_display2">
|
||||
<am-input
|
||||
@change="changeOpacity4Game"
|
||||
v-model="opacity"
|
||||
label="不透明度"
|
||||
showSlider
|
||||
min="0"
|
||||
max="100"
|
||||
icon="rate"
|
||||
/>
|
||||
</form>
|
||||
<form
|
||||
class="ant-form ant-form-horizontal form_display2"
|
||||
style="padding-bottom: 20px"
|
||||
>
|
||||
<el-upload
|
||||
action="https://jsonplaceholder.typicode.com/posts/"
|
||||
:limit="3"
|
||||
:file-list="fileList"
|
||||
:on-change="uploadChange"
|
||||
accept=".jpg,.jpeg,.png,.JPG,.JPEG"
|
||||
v-show="showImgUploadBtn"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="ant-btn ant-btn-primary"
|
||||
style="margin-bottom: 10px"
|
||||
>
|
||||
<span>上传图片</span>
|
||||
<span> </span>
|
||||
</button>
|
||||
<div slot="tip" class="el-upload__tip">
|
||||
只能上传jpg/png文件,且不超过500kb
|
||||
</div>
|
||||
</el-upload>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<am-alert :show.sync="showAlert" v-model="alertText" type="error" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import amInput from '../../components/BaseToolInput'
|
||||
import amColorPicker from '../../components/BaseColorPicker'
|
||||
import amSwitchInput from '../../components/BaseSwitchInput'
|
||||
import amToolTextarea from '../../components/BaseToolTextarea'
|
||||
import amAlert from '../../components/BaseAlert'
|
||||
import amConfirm from '../../components/BaseConfirm'
|
||||
import { GAME2WEB_EVENTTYPE, E2G_EVENTTYPE } from '../../const/event'
|
||||
// import { copyFile, saveConfig } from "../../utils/tools/node-utils";
|
||||
import web2game from './web2game'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
foldMenuStatus: false,
|
||||
x: 0,
|
||||
y: 0,
|
||||
angle: 0,
|
||||
scale: 1,
|
||||
opacity: 255,
|
||||
fileList: [],
|
||||
savePath: '',
|
||||
textCur: 'left',
|
||||
desCur: 'normal',
|
||||
styleCur: 'normal',
|
||||
weightCur: 'normal',
|
||||
colorSwitch: true,
|
||||
bgSwitch: true,
|
||||
showAlert: false,
|
||||
alertText: '',
|
||||
activeNode: null,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// this.savePath = path.join(
|
||||
// path.resolve("."),
|
||||
// "cocos-build/web-mobile/custom"
|
||||
// );
|
||||
// eventBus.on('GAMENODE_MOVED', (target) => {
|
||||
// this.activeNode = target
|
||||
// this.changePosition4Editor()
|
||||
// })
|
||||
// eventBus.on('GAMENODE_MOVEEND', (target) => {
|
||||
// this.activeNode = target
|
||||
// this.changePosition4Editor()
|
||||
// this.changeNodeAttributeAndSave({
|
||||
// x: this.x,
|
||||
// y: this.y,
|
||||
// })
|
||||
// })
|
||||
|
||||
eventBus.on('WEB_MSG_TYPE.SELECT_NODE', (nodeInfo) => {
|
||||
this.activeNode = nodeInfo
|
||||
this.x = this.activeNode.x
|
||||
this.y = this.activeNode.y
|
||||
this.angle = this.activeNode.angle
|
||||
this.opacity = this.activeNode.opacity
|
||||
this.scale = this.activeNode.scale
|
||||
|
||||
console.log(nodeInfo)
|
||||
this.$notify({
|
||||
title: '打开控制台看console',
|
||||
position: 'top-left',
|
||||
message:
|
||||
'可以直接获取节点信息,并且可以直接在web内进行修改(可以直接在右边的属性栏内修改节点属性),如果还能实现保存,就能实现编辑了。',
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
changePosition4Editor() {
|
||||
this.x = this.activeNode.x ? parseInt(this.activeNode.x) : 0
|
||||
this.y = this.activeNode.y ? parseInt(this.activeNode.y) : 0
|
||||
},
|
||||
changeColor(switchStatus, color) {
|
||||
console.log(switchStatus, color)
|
||||
},
|
||||
changeX4Game(newVal) {
|
||||
this.changeNodeAttribute4Game('x', this.x)
|
||||
},
|
||||
changeY4Game(newVal) {
|
||||
this.changeNodeAttribute4Game('y', this.y)
|
||||
},
|
||||
changeScale4Game(newVal) {
|
||||
this.changeNodeAttribute4Game('scale', this.scale)
|
||||
},
|
||||
changeAngle4Game(newVal) {
|
||||
console.log(this.angle)
|
||||
this.changeNodeAttribute4Game('angle', this.angle)
|
||||
},
|
||||
changeOpacity4Game(newVal) {
|
||||
this.changeNodeAttribute4Game('opacity', Math.ceil(this.opacity * 2.55))
|
||||
},
|
||||
changeNodeAttribute4Game(attribute, value) {
|
||||
if (typeof attribute == 'object') {
|
||||
for (let key in attribute) {
|
||||
web2game.setNodeAttribute({
|
||||
node: this.activeNode,
|
||||
key,
|
||||
value: attribute[key],
|
||||
})
|
||||
}
|
||||
} else {
|
||||
web2game.setNodeAttribute({
|
||||
node: this.activeNode,
|
||||
attribute,
|
||||
value,
|
||||
})
|
||||
}
|
||||
},
|
||||
changeNodeAttributeAndSave(attribute, value) {
|
||||
this.changeNodeAttribute4Game(attribute, value)
|
||||
// const gamesConfig = window.cocosGames;
|
||||
// const gameData = gamesConfig[1];
|
||||
// console.log(gamesConfig);
|
||||
// if (!gamesConfig[1].editorConfig) {
|
||||
// gamesConfig[1].editorConfig = {};
|
||||
// }
|
||||
// if (gamesConfig[1].editorConfig[this.activeNode.increaseId]) {
|
||||
// if (typeof attribute == "object") {
|
||||
// for (let key in attribute) {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId][key] =
|
||||
// attribute[key];
|
||||
// }
|
||||
// } else {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId][
|
||||
// attribute
|
||||
// ] = value;
|
||||
// }
|
||||
// } else {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId] = {};
|
||||
// for (let key in attribute) {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId][key] =
|
||||
// attribute[key];
|
||||
// }
|
||||
// }
|
||||
// console.log(4444);
|
||||
// saveConfig("window.cocosGames = " + JSON.stringify(gamesConfig));
|
||||
},
|
||||
|
||||
isImage(fileName) {
|
||||
if (typeof fileName !== 'string') return
|
||||
let name = fileName.toLowerCase()
|
||||
return (
|
||||
name.endsWith('.png') ||
|
||||
name.endsWith('.jpeg') ||
|
||||
name.endsWith('.jpg') ||
|
||||
name.endsWith('.png') ||
|
||||
name.endsWith('.bmp')
|
||||
)
|
||||
},
|
||||
// 方法判断
|
||||
uploadChange(file, fileList) {
|
||||
if (!this.activeNode) return
|
||||
// 拿到当前上传图片的name,判断其后缀名是否符合
|
||||
let type = this.isImage(file.name)
|
||||
console.log(type)
|
||||
this.fileList = fileList
|
||||
let fileLength = this.fileList.length
|
||||
if (!type) {
|
||||
// 若不符合图片类型,则让当前上传的文件去除掉即可,即从上传对列删除本次上传
|
||||
this.fileList.splice(fileLength - 1, 1)
|
||||
this.$message.error('只允许上传图片')
|
||||
return
|
||||
}
|
||||
this.onUploadSuccess(file, fileList)
|
||||
},
|
||||
onUploadSuccess(file, fileList) {
|
||||
console.log(file, fileList)
|
||||
var reader = new FileReader()
|
||||
reader.readAsDataURL(file.raw)
|
||||
reader.onload = () => {
|
||||
console.log(reader.result) //获取到base64格式图片
|
||||
const img = new Image()
|
||||
img.src = reader.result
|
||||
let tex = new cc.Texture2D()
|
||||
tex.initWithElement(img)
|
||||
tex.handleLoadedTexture()
|
||||
this.activeNode.getComponent(
|
||||
cc.Sprite
|
||||
).spriteFrame = new cc.SpriteFrame(tex)
|
||||
// const sp = new SpriteFrame()
|
||||
// sp.texture = tex
|
||||
// self.sp.spriteFrame = sp
|
||||
}
|
||||
// cc.loader.load(img, (err, texture) => {
|
||||
// if (err) return
|
||||
// this.activeNode.getComponent(
|
||||
// cc.Sprite
|
||||
// ).spriteFrame = new cc.SpriteFrame(texture)
|
||||
// })
|
||||
// const filePath = file.raw.path;
|
||||
// const imageType = file.raw.type;
|
||||
// const name = Date.now();
|
||||
// const type = imageType.split("/")[1];
|
||||
// copyFile(filePath, this.savePath, name + "." + type, () => {
|
||||
// cc.log("进入回调");
|
||||
// cc.log(this.savePath + "/" + name + "." + type);
|
||||
// if (this.activeNode) {
|
||||
// web2game.LOAD_CUSTOMIMG(name + "." + type, (err, texture) => {
|
||||
// cc.log("加载成功");
|
||||
// var spriteFrame = new cc.SpriteFrame(texture);
|
||||
// this.activeNode.getComponent(cc.Sprite).spriteFrame = spriteFrame;
|
||||
// const gamesConfig = window.cocosGames;
|
||||
// const gameData = gamesConfig[1];
|
||||
// console.log(name + "." + type);
|
||||
// if (!gamesConfig[1].editorConfig) {
|
||||
// gamesConfig[1].editorConfig = {};
|
||||
// }
|
||||
// if (gamesConfig[1].editorConfig[this.activeNode.increaseId]) {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId].sprite =
|
||||
// name + "." + type;
|
||||
// } else {
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId] = {};
|
||||
// gamesConfig[1].editorConfig[this.activeNode.increaseId].sprite =
|
||||
// name + "." + type;
|
||||
// }
|
||||
// saveConfig("window.cocosGames = " + JSON.stringify(gamesConfig));
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// fs.copyFile(filePath, this.savePath, (err)=>{
|
||||
// console.log(123)
|
||||
// });
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
showImgUploadBtn() {
|
||||
return this.activeNode && this.activeNode.getComponent(cc.Sprite)
|
||||
},
|
||||
},
|
||||
components: {
|
||||
amInput,
|
||||
amColorPicker,
|
||||
amSwitchInput,
|
||||
amToolTextarea,
|
||||
amAlert,
|
||||
amConfirm,
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
96
vueTem/src/views/editor/web2game.js
Normal file
@ -0,0 +1,96 @@
|
||||
/* eslint-disable no-undef */
|
||||
/* eslint-disable space-before-function-paren */
|
||||
class Web2Game {
|
||||
/**
|
||||
* 根据页码切换课件
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
changeGameByPageIndex(pageIndex, callback) {
|
||||
cc.web2cocosSDK.changeGameByPageIndex(pageIndex, callback)
|
||||
}
|
||||
/**
|
||||
* 加载场景
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
loadScene(sceneName, callback) {
|
||||
return cc.web2cocosSDK.loadScene(sceneName, callback)
|
||||
}
|
||||
/**
|
||||
* 加载游戏的预制体
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
loadGame(gameName, callback) {
|
||||
cc.web2cocosSDK.loadGame(gameName, callback)
|
||||
}
|
||||
/**
|
||||
* 卸载游戏
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
unloadGame() {
|
||||
cc.web2cocosSDK.unloadGame()
|
||||
}
|
||||
/**
|
||||
* 加载图片 --electron内使用
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
|
||||
loadCustomImage(imageName, callback) {
|
||||
cc.web2cocosSDK.loadCustomImage(imageName, callback)
|
||||
}
|
||||
/**
|
||||
* 重置game分辨率
|
||||
*
|
||||
* @param {cc.Vec2} editorSize {width:2048,height:1152}
|
||||
* @param {number} ratio 缩放的倍率
|
||||
* @param {Function} callFunc
|
||||
*/
|
||||
updateResolution(editorSize, ratio, callback) {
|
||||
cc.web2cocosSDK.updateResolution(editorSize, ratio, callback)
|
||||
}
|
||||
/**
|
||||
* 设置节点属性
|
||||
*
|
||||
* @param {string} sceneName
|
||||
* @param {Function} callback
|
||||
* @memberof Web2Game
|
||||
*/
|
||||
setNodeAttribute({ node, attribute, value }) {
|
||||
cc.web2cocosSDK.setNodeAttribute({ node, attribute, value })
|
||||
}
|
||||
/**
|
||||
* 触发cocos内的事件系统
|
||||
*
|
||||
* @param {*} eventName
|
||||
* @param {*} params
|
||||
*/
|
||||
emit(eventName, params) {
|
||||
cc.web2cocosSDK.emitGameEvt(eventName, params)
|
||||
}
|
||||
static getInstance() {
|
||||
let instance
|
||||
return function() {
|
||||
if (!instance) {
|
||||
instance = new Web2Game()
|
||||
}
|
||||
return instance
|
||||
}
|
||||
}
|
||||
}
|
||||
const web2game = new Web2Game()
|
||||
|
||||
export default web2game
|
150
vueTem/src/views/header/TheHeader.vue
Normal file
@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<div class="topbar topicfixed">
|
||||
<div class="toppic">
|
||||
<div class="topside">
|
||||
<a href="##" class="logoLink">im.qq.com</a>
|
||||
<ul id="topNav" class="topNav">
|
||||
<li>
|
||||
<a href="/">首页</a>
|
||||
</li>
|
||||
|
||||
<li v-for='item in routerData' :key='item.path' active-class='current'>
|
||||
<router-link :to="item.path">
|
||||
{{item.name}}
|
||||
</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
routerData: [
|
||||
// {
|
||||
// name: '首页',
|
||||
// path: '/index'
|
||||
// },
|
||||
]
|
||||
}
|
||||
},
|
||||
created() {},
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang = scss>
|
||||
div {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Helvetica, Tahoma, Arial, 'Hiragino Sans GB',
|
||||
'Hiragino Sans GB W3', 'Microsoft YaHei', STXihei, STHeiti, Heiti, SimSun,
|
||||
sans-serif;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
.topbar {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.toppic {
|
||||
max-width: 1170px;
|
||||
min-width: 980px;
|
||||
width: 80%;
|
||||
height: 75px;
|
||||
margin: 0 auto;
|
||||
|
||||
a {
|
||||
&:link,
|
||||
&:visited {
|
||||
/*color: #fff;*/
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.topicfixed {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #dcdcdc;
|
||||
|
||||
a {
|
||||
&:link,
|
||||
&:visited {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.international .topicfixed .toppic a {
|
||||
&:link,
|
||||
&:visited {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.topside {
|
||||
float: left;
|
||||
width: 59%;
|
||||
}
|
||||
|
||||
.logoLink {
|
||||
float: left;
|
||||
display: block;
|
||||
width: 46px;
|
||||
height: 46px;
|
||||
overflow: hidden;
|
||||
margin-top: 13px;
|
||||
font-size: 0;
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('/static/img/head.jpg');
|
||||
background-position: 0 50%;
|
||||
background-size: 46px 46px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.topNav {
|
||||
float: left;
|
||||
width: 450px;
|
||||
li {
|
||||
float: left;
|
||||
margin-left: 20px;
|
||||
|
||||
a {
|
||||
float: left;
|
||||
padding: 0 20px;
|
||||
line-height: 75px;
|
||||
font-size: 1.125em;
|
||||
|
||||
&:hover {
|
||||
color: #3f92ff;
|
||||
}
|
||||
}
|
||||
|
||||
&.current a {
|
||||
color: #3f92ff;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.topicfixed {
|
||||
height: 75px;
|
||||
}
|
||||
</style>
|
1
vueTem/static/cocos-build/web-mobile/cocos2d-js-min.js
vendored
Normal file
BIN
vueTem/static/cocos-build/web-mobile/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
90
vueTem/static/cocos-build/web-mobile/index.html
Normal file
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<title>Cocos Creator | hello_world</title>
|
||||
|
||||
<!--http://www.html5rocks.com/en/mobile/mobifying/-->
|
||||
<meta name="viewport"
|
||||
content="width=device-width,user-scalable=no,initial-scale=1, minimum-scale=1,maximum-scale=1"/>
|
||||
|
||||
<!--https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html-->
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<!-- force webkit on 360 -->
|
||||
<meta name="renderer" content="webkit"/>
|
||||
<meta name="force-rendering" content="webkit"/>
|
||||
<!-- force edge on IE -->
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
|
||||
<!-- force full screen on some browser -->
|
||||
<meta name="full-screen" content="yes"/>
|
||||
<meta name="x5-fullscreen" content="true"/>
|
||||
<meta name="360-fullscreen" content="true"/>
|
||||
|
||||
<!-- force screen orientation on some browser -->
|
||||
<meta name="screen-orientation" content=""/>
|
||||
<meta name="x5-orientation" content="">
|
||||
|
||||
<!--fix fireball/issues/3568 -->
|
||||
<!--<meta name="browsermode" content="application">-->
|
||||
<meta name="x5-page-mode" content="app">
|
||||
|
||||
<!--<link rel="apple-touch-icon" href=".png" />-->
|
||||
<!--<link rel="apple-touch-icon-precomposed" href=".png" />-->
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="style-mobile.css"/>
|
||||
<link rel="icon" href="favicon.ico"/>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="0"></canvas>
|
||||
<div id="splash">
|
||||
<div class="progress-bar stripes">
|
||||
<span style="width: 0%"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="src/settings.js" charset="utf-8"></script>
|
||||
|
||||
<script src="main.js" charset="utf-8"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
// open web debugger console
|
||||
if (typeof VConsole !== 'undefined') {
|
||||
window.vConsole = new VConsole();
|
||||
}
|
||||
|
||||
var debug = window._CCSettings.debug;
|
||||
var splash = document.getElementById('splash');
|
||||
splash.style.display = 'block';
|
||||
|
||||
function loadScript (moduleName, cb) {
|
||||
function scriptLoaded () {
|
||||
document.body.removeChild(domScript);
|
||||
domScript.removeEventListener('load', scriptLoaded, false);
|
||||
cb && cb();
|
||||
};
|
||||
var domScript = document.createElement('script');
|
||||
domScript.async = true;
|
||||
domScript.src = moduleName;
|
||||
domScript.addEventListener('load', scriptLoaded, false);
|
||||
document.body.appendChild(domScript);
|
||||
}
|
||||
|
||||
loadScript(debug ? 'cocos2d-js.js' : 'cocos2d-js-min.js', function () {
|
||||
if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
|
||||
loadScript(debug ? 'physics.js' : 'physics-min.js', window.boot);
|
||||
}
|
||||
else {
|
||||
window.boot();
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|