Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
www.fudou6.com
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liaili
www.fudou6.com
Commits
b947053b
Commit
b947053b
authored
Aug 01, 2016
by
superman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
0b5038d5
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
319 additions
and
418 deletions
+319
-418
project.js
public/javascripts/project.js
+1
-2
project.js.map
public/javascripts/project.js.map
+1
-1
project.jsx
public/javascripts/project.jsx
+1
-2
project.min.js
public/javascripts/project.min.js
+1
-1
project.css
public/stylesheets/project.css
+57
-99
project.less
public/stylesheets/project.less
+74
-112
index.js
routes/index.js
+4
-0
product.js
routes/product.js
+123
-147
product.js.map
routes/product.js.map
+1
-1
product.jsx
routes/product.jsx
+2
-1
layout.hbs
views/layout.hbs
+4
-4
product.hbs
views/product.hbs
+15
-17
project.hbs
views/project.hbs
+35
-31
No files found.
public/javascripts/project.js
View file @
b947053b
...
...
@@ -52,7 +52,7 @@
$errorDescription
.
empty
();
});
$successDialog
.
on
(
'click'
,
'modal-dialog-close'
,
function
(
e
)
{
$successDialog
.
on
(
'click'
,
'
.
modal-dialog-close'
,
function
(
e
)
{
$successDialog
.
fadeOut
(
300
);
});
...
...
@@ -66,7 +66,6 @@
description
:
description
},
'POST'
).
then
(
function
()
{
$successDialog
.
fadeIn
(
300
);
alert
(
'提交成功!'
);
}).
catch
(
function
()
{
alert
(
'提交失败, 请稍后再试!'
);
});
...
...
public/javascripts/project.js.map
View file @
b947053b
{"version":3,"sources":["project.jsx"],"names":[],"mappings":"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","file":"project.js","sourcesContent":["/**\n * Created by Administrator on 2016/7/27.\n */\n(()=> {\n const $form = $('#container .introducer');\n const $submit = $('input[type=\"submit\"]', $form);\n const $introducerMobile = $('#introducerMobile', $form);\n const $projectDescription = $('#projectDescription', $form);\n const $errorPhone = $('.error-phone', $form);\n const $errorDescription = $('.error-description', $form);\n const $successDialog = $('.modal-box-success');\n\n const filterMobileInput = ($mobile)=> {\n $mobile.val(($mobile.val() + '').replace(/[^\\d]/g, ''));\n };\n\n const validateMobile = ()=> {\n let mobile = $.trim($introducerMobile.val() + '');\n if (/^[\\d]{11}$/g.test(mobile)) {\n $errorPhone.empty();\n return mobile;\n } else {\n $errorPhone.html('手机号输入错误!');\n return false;\n }\n };\n\n const validateDescription = ()=> {\n let description = $.trim($projectDescription.val() + '');\n if (description.length) {\n $errorDescription.empty();\n return description;\n } else {\n $errorDescription.html('请输入项目描述内容!');\n return false;\n }\n };\n\n $introducerMobile.on('keyup', (e)=> {\n filterMobileInput($introducerMobile);\n }).on('change blur', (e)=> {\n validateMobile();\n }).on('focus', (e)=> {\n $errorPhone.empty();\n });\n\n $projectDescription.on('change blur', (e)=> {\n validateDescription();\n }).on('focus', (e)=> {\n $errorDescription.empty();\n });\n\n\n $successDialog.on('click', 'modal-dialog-close', (e)=> {\n $successDialog.fadeOut(300);\n });\n\n $form.on('submit', (e)=> {\n e.preventDefault();\n let mobile = validateMobile();\n let description = validateDescription();\n if (mobile && description) {\n request('/api/1.0/proj/add.json', {\n mobile,\n description\n }, 'POST').then(()=> {\n $successDialog.fadeIn(300);\n alert('提交成功!');\n }).catch(()=> {\n alert('提交失败, 请稍后再试!');\n });\n }\n });\n})();\n\n(()=> {\n const $modalBox = $('.modal-box');\n\n $('.hot-project-address').on('click', 'a', (e)=> {\n e.preventDefault();\n $modalBox.fadeIn(300);\n });\n\n $modalBox.on('click', '.modal-dialog-close', (e)=> {\n e.preventDefault();\n $modalBox.fadeOut(300);\n });\n\n\n})();\n\n\n// (function () {\n//\n//\n//\n//\n//\n// var $modalBoxProject = $('.modal-box-project');\n// var $modalBoxSuccess = $('.modal-box-success');\n//\n//\n//\n//\n// /**\n// * 地图项目地址弹框\n// */\n// $('.hot-project-address a').click(function (e) {\n// e.preventDefault();\n// $modalBox.fadeIn(300);\n// });\n// $('#modalBoxHidden').click(function (e) {\n// e.preventDefault();\n// $modalBox.fadeOut(300);\n// });\n//\n// /**\n// * 项目提交弹框\n// */\n// $submit.on('click',function(e){\n// e.preventDefault();\n// $modalBoxSuccess.fadeIn(300);\n// });\n// $('.modal-box-success a').on('click',function(e){\n// e.preventDefault();\n// $modalBoxSuccess.fadeOut(300);\n// });\n//\n//\n// })();"]}
\ No newline at end of file
{"version":3,"sources":["project.jsx"],"names":[],"mappings":"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","file":"project.js","sourcesContent":["/**\n * Created by Administrator on 2016/7/27.\n */\n(()=> {\n const $form = $('#container .introducer');\n const $submit = $('input[type=\"submit\"]', $form);\n const $introducerMobile = $('#introducerMobile', $form);\n const $projectDescription = $('#projectDescription', $form);\n const $errorPhone = $('.error-phone', $form);\n const $errorDescription = $('.error-description', $form);\n const $successDialog = $('.modal-box-success');\n\n const filterMobileInput = ($mobile)=> {\n $mobile.val(($mobile.val() + '').replace(/[^\\d]/g, ''));\n };\n\n const validateMobile = ()=> {\n let mobile = $.trim($introducerMobile.val() + '');\n if (/^[\\d]{11}$/g.test(mobile)) {\n $errorPhone.empty();\n return mobile;\n } else {\n $errorPhone.html('手机号输入错误!');\n return false;\n }\n };\n\n const validateDescription = ()=> {\n let description = $.trim($projectDescription.val() + '');\n if (description.length) {\n $errorDescription.empty();\n return description;\n } else {\n $errorDescription.html('请输入项目描述内容!');\n return false;\n }\n };\n\n $introducerMobile.on('keyup', (e)=> {\n filterMobileInput($introducerMobile);\n }).on('change blur', (e)=> {\n validateMobile();\n }).on('focus', (e)=> {\n $errorPhone.empty();\n });\n\n $projectDescription.on('change blur', (e)=> {\n validateDescription();\n }).on('focus', (e)=> {\n $errorDescription.empty();\n });\n\n\n $successDialog.on('click', '.modal-dialog-close', (e)=> {\n $successDialog.fadeOut(300);\n });\n\n $form.on('submit', (e)=> {\n e.preventDefault();\n let mobile = validateMobile();\n let description = validateDescription();\n if (mobile && description) {\n request('/api/1.0/proj/add.json', {\n mobile,\n description\n }, 'POST').then(()=> {\n $successDialog.fadeIn(300);\n }).catch(()=> {\n alert('提交失败, 请稍后再试!');\n });\n }\n });\n})();\n\n(()=> {\n const $modalBox = $('.modal-box');\n\n $('.hot-project-address').on('click', 'a', (e)=> {\n e.preventDefault();\n $modalBox.fadeIn(300);\n });\n\n $modalBox.on('click', '.modal-dialog-close', (e)=> {\n e.preventDefault();\n $modalBox.fadeOut(300);\n });\n\n\n})();\n\n\n// (function () {\n//\n//\n//\n//\n//\n// var $modalBoxProject = $('.modal-box-project');\n// var $modalBoxSuccess = $('.modal-box-success');\n//\n//\n//\n//\n// /**\n// * 地图项目地址弹框\n// */\n// $('.hot-project-address a').click(function (e) {\n// e.preventDefault();\n// $modalBox.fadeIn(300);\n// });\n// $('#modalBoxHidden').click(function (e) {\n// e.preventDefault();\n// $modalBox.fadeOut(300);\n// });\n//\n// /**\n// * 项目提交弹框\n// */\n// $submit.on('click',function(e){\n// e.preventDefault();\n// $modalBoxSuccess.fadeIn(300);\n// });\n// $('.modal-box-success a').on('click',function(e){\n// e.preventDefault();\n// $modalBoxSuccess.fadeOut(300);\n// });\n//\n//\n// })();"]}
\ No newline at end of file
public/javascripts/project.jsx
View file @
b947053b
...
...
@@ -51,7 +51,7 @@
});
$successDialog
.
on
(
'click'
,
'modal-dialog-close'
,
(
e
)
=>
{
$successDialog
.
on
(
'click'
,
'
.
modal-dialog-close'
,
(
e
)
=>
{
$successDialog
.
fadeOut
(
300
);
});
...
...
@@ -65,7 +65,6 @@
description
},
'POST'
).
then
(()
=>
{
$successDialog
.
fadeIn
(
300
);
alert
(
'提交成功!'
);
}).
catch
(()
=>
{
alert
(
'提交失败, 请稍后再试!'
);
});
...
...
public/javascripts/project.min.js
View file @
b947053b
"use strict"
;(
function
(){
var
$form
=
$
(
"#container .introducer"
);
var
$submit
=
$
(
'input[type="submit"]'
,
$form
);
var
$introducerMobile
=
$
(
"#introducerMobile"
,
$form
);
var
$projectDescription
=
$
(
"#projectDescription"
,
$form
);
var
$errorPhone
=
$
(
".error-phone"
,
$form
);
var
$errorDescription
=
$
(
".error-description"
,
$form
);
var
$successDialog
=
$
(
".modal-box-success"
);
var
filterMobileInput
=
function
filterMobileInput
(
$mobile
){
$mobile
.
val
((
$mobile
.
val
()
+
""
).
replace
(
/
[^\d]
/g
,
""
))};
var
validateMobile
=
function
validateMobile
(){
var
mobile
=
$
.
trim
(
$introducerMobile
.
val
()
+
""
);
if
(
/^
[\d]{11}
$/g
.
test
(
mobile
)){
$errorPhone
.
empty
();
return
mobile
}
else
{
$errorPhone
.
html
(
"手机号输入错误!"
);
return
false
}};
var
validateDescription
=
function
validateDescription
(){
var
description
=
$
.
trim
(
$projectDescription
.
val
()
+
""
);
if
(
description
.
length
){
$errorDescription
.
empty
();
return
description
}
else
{
$errorDescription
.
html
(
"请输入项目描述内容!"
);
return
false
}};
$introducerMobile
.
on
(
"keyup"
,
function
(
e
){
filterMobileInput
(
$introducerMobile
)}).
on
(
"change blur"
,
function
(
e
){
validateMobile
()}).
on
(
"focus"
,
function
(
e
){
$errorPhone
.
empty
()});
$projectDescription
.
on
(
"change blur"
,
function
(
e
){
validateDescription
()}).
on
(
"focus"
,
function
(
e
){
$errorDescription
.
empty
()});
$successDialog
.
on
(
"click"
,
"modal-dialog-close"
,
function
(
e
){
$successDialog
.
fadeOut
(
300
)});
$form
.
on
(
"submit"
,
function
(
e
){
e
.
preventDefault
();
var
mobile
=
validateMobile
();
var
description
=
validateDescription
();
if
(
mobile
&&
description
){
request
(
"/api/1.0/proj/add.json"
,{
mobile
:
mobile
,
description
:
description
},
"POST"
).
then
(
function
(){
$successDialog
.
fadeIn
(
300
);
alert
(
"提交成功!"
)}).
catch
(
function
(){
alert
(
"提交失败, 请稍后再试!"
)})}})})();(
function
(){
var
$modalBox
=
$
(
".modal-box"
);
$
(
".hot-project-address"
).
on
(
"click"
,
"a"
,
function
(
e
){
e
.
preventDefault
();
$modalBox
.
fadeIn
(
300
)});
$modalBox
.
on
(
"click"
,
".modal-dialog-close"
,
function
(
e
){
e
.
preventDefault
();
$modalBox
.
fadeOut
(
300
)})})();
\ No newline at end of file
"use strict"
;(
function
(){
var
$form
=
$
(
"#container .introducer"
);
var
$submit
=
$
(
'input[type="submit"]'
,
$form
);
var
$introducerMobile
=
$
(
"#introducerMobile"
,
$form
);
var
$projectDescription
=
$
(
"#projectDescription"
,
$form
);
var
$errorPhone
=
$
(
".error-phone"
,
$form
);
var
$errorDescription
=
$
(
".error-description"
,
$form
);
var
$successDialog
=
$
(
".modal-box-success"
);
var
filterMobileInput
=
function
filterMobileInput
(
$mobile
){
$mobile
.
val
((
$mobile
.
val
()
+
""
).
replace
(
/
[^\d]
/g
,
""
))};
var
validateMobile
=
function
validateMobile
(){
var
mobile
=
$
.
trim
(
$introducerMobile
.
val
()
+
""
);
if
(
/^
[\d]{11}
$/g
.
test
(
mobile
)){
$errorPhone
.
empty
();
return
mobile
}
else
{
$errorPhone
.
html
(
"手机号输入错误!"
);
return
false
}};
var
validateDescription
=
function
validateDescription
(){
var
description
=
$
.
trim
(
$projectDescription
.
val
()
+
""
);
if
(
description
.
length
){
$errorDescription
.
empty
();
return
description
}
else
{
$errorDescription
.
html
(
"请输入项目描述内容!"
);
return
false
}};
$introducerMobile
.
on
(
"keyup"
,
function
(
e
){
filterMobileInput
(
$introducerMobile
)}).
on
(
"change blur"
,
function
(
e
){
validateMobile
()}).
on
(
"focus"
,
function
(
e
){
$errorPhone
.
empty
()});
$projectDescription
.
on
(
"change blur"
,
function
(
e
){
validateDescription
()}).
on
(
"focus"
,
function
(
e
){
$errorDescription
.
empty
()});
$successDialog
.
on
(
"click"
,
".modal-dialog-close"
,
function
(
e
){
$successDialog
.
fadeOut
(
300
)});
$form
.
on
(
"submit"
,
function
(
e
){
e
.
preventDefault
();
var
mobile
=
validateMobile
();
var
description
=
validateDescription
();
if
(
mobile
&&
description
){
request
(
"/api/1.0/proj/add.json"
,{
mobile
:
mobile
,
description
:
description
},
"POST"
).
then
(
function
(){
$successDialog
.
fadeIn
(
300
)}).
catch
(
function
(){
alert
(
"提交失败, 请稍后再试!"
)})}})})();(
function
(){
var
$modalBox
=
$
(
".modal-box"
);
$
(
".hot-project-address"
).
on
(
"click"
,
"a"
,
function
(
e
){
e
.
preventDefault
();
$modalBox
.
fadeIn
(
300
)});
$modalBox
.
on
(
"click"
,
".modal-dialog-close"
,
function
(
e
){
e
.
preventDefault
();
$modalBox
.
fadeOut
(
300
)})})();
\ No newline at end of file
public/stylesheets/project.css
View file @
b947053b
...
...
@@ -213,138 +213,96 @@
/* .hot-project-address end */
/* .hot-project-tabs start */
.hot-project-tabs
{
width
:
100%
;
height
:
690px
;
background
:
#f6f6f6
;
padding
:
180px
0
160px
0
;
}
.hot-project-tabs
ul
{
width
:
1203px
;
height
:
350px
;
margin
:
180px
auto
160px
;
width
:
1150px
;
margin
:
0
auto
;
border
:
1px
solid
#43abb6
;
}
.hot-project-tabs
ul
li
{
width
:
300px
;
height
:
100%
;
width
:
25%
;
float
:
left
;
font-size
:
16px
;
color
:
#000
;
text-align
:
center
;
background
:
#f6f6f6
;
transition-delay
:
.1s
;
transition
:
background
.5s
,
color
.5s
;
}
.hot-project-tabs
ul
li
dl
{
width
:
100%
;
.hot-project-tabs
ul
li
>
div
{
border-right
:
1px
solid
#43abb6
;
height
:
200px
;
padding-top
:
160px
;
position
:
relative
;
}
.hot-project-tabs
ul
li
dl
dt
{
width
:
115px
;
.hot-project-tabs
ul
li
>
div
:before
,
.hot-project-tabs
ul
li
>
div
:after
{
content
:
''
;
position
:
absolute
;
top
:
44px
;
left
:
50%
;
margin-left
:
-58px
;
height
:
115px
;
margin
:
44px
auto
0
;
width
:
115px
;
background
:
url(https://res.fudou6.com/c/4/20160801/by15pyq5qCH6aKYLTFfMDE=_480x240.png)
0
0
no-repeat
;
opacity
:
0
;
transform
:
scale
(
0
);
transition-delay
:
.1s
;
transition
:
.5s
;
}
.hot-project-tabs
ul
li
dl
dd
{
line-height
:
28px
;
.hot-project-tabs
ul
li
>
div
:before
{
transform
:
scale
(
1
);
opacity
:
1
;
}
.hot-project-tabs
ul
li
:last-child
>
div
{
border-right
:
0
;
}
.hot-project-tabs
ul
li
dl
dd
h4
{
.hot-project-tabs
ul
li
h4
{
font-size
:
28px
;
color
:
#43abb6
;
margin
:
1
4px
0
24
px
;
margin
:
1
0px
0
20
px
;
}
.hot-project-tabs
ul
li
:nth-child
(
1
)
{
b
order-right
:
1px
solid
#43abb6
;
.hot-project-tabs
ul
li
:nth-child
(
1
)
>
div
:before
{
b
ackground-position
:
-360px
-120px
;
}
.hot-project-tabs
ul
li
:nth-child
(
1
)
dt
{
background
:
url("https://res.fudou6.com/c/4/20160801/nbrdGFiczA1X2I=_115x115.png")
no-repeat
;
.hot-project-tabs
ul
li
:nth-child
(
1
)
>
div
:after
{
background
-position
:
-360px
0px
;
}
.hot-project-tabs
ul
li
:nth-child
(
2
)
{
b
order-right
:
1px
solid
#43abb6
;
.hot-project-tabs
ul
li
:nth-child
(
2
)
>
div
:before
{
b
ackground-position
:
-240px
-120px
;
}
.hot-project-tabs
ul
li
:nth-child
(
2
)
dt
{
background
:
url("https://res.fudou6.com/c/4/20160801/dgndGFiczA0X2I=_115x115.png")
no-repeat
;
.hot-project-tabs
ul
li
:nth-child
(
2
)
>
div
:after
{
background
-position
:
-240px
0px
;
}
.hot-project-tabs
ul
li
:nth-child
(
3
)
{
border-right
:
1px
solid
#43abb6
;
.hot-project-tabs
ul
li
:nth-child
(
3
)
>
div
:before
{
background-position
:
-120px
-120px
;
}
.hot-project-tabs
ul
li
:nth-child
(
3
)
>
div
:after
{
background-position
:
-120px
0px
;
}
.hot-project-tabs
ul
li
:nth-child
(
3
)
dt
{
background
:
url("https://res.fudou6.com/c/4/20160801/p8edGFiczAzX2I=_115x115.png")
no-repeat
;
.hot-project-tabs
ul
li
:nth-child
(
4
)
>
div
:before
{
background
-position
:
0px
-120px
;
}
.hot-project-tabs
ul
li
:nth-child
(
4
)
dt
{
background
:
url("https://res.fudou6.com/c/4/20160801/6jpdGFiczAyX2I=_115x115.png")
no-repeat
;
.hot-project-tabs
ul
li
:nth-child
(
4
)
>
div
:after
{
background
-position
:
0px
0px
;
}
.hot-project-tabs
ul
li
:hover
{
transition-delay
:
0s
;
color
:
#fff
;
background
:
#43abb6
;
}
.hot-project-tabs
ul
li
:hover
h4
{
color
:
#fff
;
}
@-webkit-keyframes
changeOne
{
0
%
{
opacity
:
1
;
background
:
url("https://res.fudou6.com/c/4/20160801/nbrdGFiczA1X2I=_115x115.png")
no-repeat
;
}
50
%
{
opacity
:
0
;
}
100
%
{
background
:
url("https://res.fudou6.com/c/4/20160801/u42dGFiczA1X2E=_115x115.png")
no-repeat
;
opacity
:
1
;
}
}
.hot-project-tabs
ul
li
:nth-child
(
1
)
:hover
dt
{
animation-name
:
changeOne
;
animation-duration
:
0.5s
;
animation-fill-mode
:
forwards
;
}
@-webkit-keyframes
changeTwo
{
0
%
{
opacity
:
1
;
background
:
url("https://res.fudou6.com/c/4/20160801/dgndGFiczA0X2I=_115x115.png")
no-repeat
;
}
50
%
{
opacity
:
0
;
}
100
%
{
background
:
url("https://res.fudou6.com/c/4/20160801/n3ndGFiczA0X2E=_115x115.png")
no-repeat
;
opacity
:
1
;
}
}
.hot-project-tabs
ul
li
:nth-child
(
2
)
:hover
dt
{
animation-name
:
changeTwo
;
animation-duration
:
0.5s
;
animation-fill-mode
:
forwards
;
}
@-webkit-keyframes
changeThree
{
0
%
{
opacity
:
1
;
background
:
url("https://res.fudou6.com/c/4/20160801/p8edGFiczAzX2I=_115x115.png")
no-repeat
;
}
50
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
background
:
url("https://res.fudou6.com/c/4/20160801/za5dGFiczAzX2E=_115x115.png")
no-repeat
;
}
}
.hot-project-tabs
ul
li
:nth-child
(
3
)
:hover
dt
{
animation-name
:
changeThree
;
animation-duration
:
0.5s
;
animation-fill-mode
:
forwards
;
}
@-webkit-keyframes
changeFour
{
0
%
{
background
:
url("https://res.fudou6.com/c/4/20160801/6jpdGFiczAyX2I=_115x115.png")
no-repeat
;
}
50
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
background
:
url("https://res.fudou6.com/c/4/20160801/zsedGFiczAyX2E=_115x115.png")
no-repeat
;
}
.hot-project-tabs
ul
li
:hover
>
div
:before
{
opacity
:
0
;
transform
:
scale
(
0
);
}
.hot-project-tabs
ul
li
:nth-child
(
4
)
:hover
dt
{
animation-name
:
changeFour
;
animation-duration
:
0.5s
;
animation-fill-mode
:
forwards
;
.hot-project-tabs
ul
li
:hover
>
div
:after
{
opacity
:
1
;
transform
:
scale
(
1
);
}
/* .hot-project-tabs end */
/* .modal-box start */
...
...
public/stylesheets/project.less
View file @
b947053b
...
...
@@ -297,147 +297,109 @@
/* .hot-project-tabs start */
.hot-project-tabs {
width: 100%;
height: 690px;
background: #f6f6f6;
padding: 180px 0 160px 0;
ul {
width: 1203px;
height: 350px;
margin: 180px auto 160px;
width: @container-width;
margin: 0 auto;
border: 1px solid #43abb6;
li {
width: 300px;
height: 100%;
width: 25%;
float: left;
font-size: 16px;
color: #000;
text-align: center;
dl {
width: 100%;
dt {
width: 115px;
background: #f6f6f6;
transition-delay: .1s;
transition: background .5s, color .5s;
& > div {
border-right: 1px solid #43abb6;
height: 200px;
padding-top: 160px;
position: relative;
&:before,
&:after {
content: '';
position: absolute;
top: 44px;
left: 50%;
margin-left: -58px;
height: 115px;
margin: 44px auto 0;
width: 115px;
background: url(https://res.fudou6.com/c/4/20160801/by15pyq5qCH6aKYLTFfMDE=_480x240.png) 0 0 no-repeat;
opacity: 0;
transform: scale(0);
transition-delay: .1s;
transition: .5s;
}
dd {
line-height: 28px;
h4 {
font-size: 28px;
color: #43abb6;
margin: 14px 0 24px;
}
&:before {
transform: scale(1);
opacity: 1;
}
}
}
li:nth-child(1) {
border-right: 1px solid #43abb6;
dt {
background: url("https://res.fudou6.com/c/4/20160801/nbrdGFiczA1X2I=_115x115.png") no-repeat;
}
}
li:nth-child(2) {
border-right: 1px solid #43abb6;
dt {
background: url("https://res.fudou6.com/c/4/20160801/dgndGFiczA0X2I=_115x115.png") no-repeat;
}
}
li:nth-child(3) {
border-right: 1px solid #43abb6;
dt {
background: url("https://res.fudou6.com/c/4/20160801/p8edGFiczAzX2I=_115x115.png") no-repeat;
&:last-child > div {
border-right: 0;
}
}
li:nth-child(4) {
dt {
background: url("https://res.fudou6.com/c/4/20160801/6jpdGFiczAyX2I=_115x115.png") no-repeat;
}
}
li:hover {
color: #fff;
background: #43abb6;
h4 {
color: #fff;
font-size: 28px;
color: #43abb6;
margin: 10px 0 20px;
}
}
li:nth-child(1):hover {
@-webkit-keyframes changeOne {
0% {
opacity: 1;
background: url("https://res.fudou6.com/c/4/20160801/nbrdGFiczA1X2I=_115x115.png") no-repeat;
}
50% {
opacity: 0;
&:nth-child(1) > div {
&:before {
background-position: -360px -120px;
}
100% {
background: url("https://res.fudou6.com/c/4/20160801/u42dGFiczA1X2E=_115x115.png") no-repeat;
opacity: 1;
&:after {
background-position: -360px 0px;
}
}
dt {
animation-name: changeOne;
animation-duration: 0.5s;
animation-fill-mode: forwards;
}
}
li:nth-child(2):hover {
@-webkit-keyframes changeTwo {
0% {
opacity: 1;
background: url("https://res.fudou6.com/c/4/20160801/dgndGFiczA0X2I=_115x115.png") no-repeat;
&:nth-child(2) > div {
&:before {
background-position: -240px -120px;
}
50% {
opacity: 0;
}
100% {
background: url("https://res.fudou6.com/c/4/20160801/n3ndGFiczA0X2E=_115x115.png") no-repeat;
opacity: 1;
&:after {
background-position: -240px 0px;
}
}
dt {
animation-name: changeTwo;
animation-duration: 0.5s;
animation-fill-mode: forwards;
}
}
li:nth-child(3):hover {
@-webkit-keyframes changeThree {
0% {
opacity: 1;
background: url("https://res.fudou6.com/c/4/20160801/p8edGFiczAzX2I=_115x115.png") no-repeat;
&:nth-child(3) > div {
&:before {
background-position: -120px -120px;
}
50%
{
opacity: 0
;
&:after
{
background-position: -120px 0px
;
}
100% {
opacity: 1;
background: url("https://res.fudou6.com/c/4/20160801/za5dGFiczAzX2E=_115x115.png") no-repeat;
}
}
dt {
animation-name: changeThree;
animation-duration: 0.5s;
animation-fill-mode: forwards;
}
}
li:nth-child(4):hover {
@-webkit-keyframes changeFour {
0% {
background: url("https://res.fudou6.com/c/4/20160801/6jpdGFiczAyX2I=_115x115.png") no-repeat;
&:nth-child(4) > div {
&:before {
background-position: 0px -120px;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
background: url("https://res.fudou6.com/c/4/20160801/zsedGFiczAyX2E=_115x115.png") no-repeat;
&:after {
background-position: 0px 0px;
}
}
dt {
animation-name: changeFour;
animation-duration: 0.5s;
animation-fill-mode: forwards;
&:hover {
transition-delay: 0s;
color: #fff;
background: #43abb6;
h4 {
color: #fff;
}
& > div {
&:before {
opacity: 0;
transform: scale(0);
}
&:after {
opacity: 1;
transform: scale(1);
}
}
}
}
}
}
...
...
routes/index.js
View file @
b947053b
...
...
@@ -6,6 +6,7 @@ var product = require('./product');
/* GET home page. */
router
.
get
(
'/'
,
function
(
req
,
res
)
{
res
.
render
(
'index'
,
{
navIndex
:
'active'
,
styles
:
[
'index'
],
scripts
:[],
character
:
[
...
...
@@ -81,12 +82,14 @@ router.get('/', function (req, res) {
router
.
get
(
'/about'
,
function
(
req
,
res
)
{
res
.
render
(
'about'
,
{
navAbout
:
'active'
,
styles
:
[
'about'
],
});
});
router
.
get
(
'/project'
,
function
(
req
,
res
)
{
res
.
render
(
'project'
,
{
navProject
:
'active'
,
styles
:
[
'project'
],
scripts
:[
'utils'
,
'project'
],
});
...
...
@@ -98,6 +101,7 @@ router.get('/project', function (req, res) {
router
.
get
(
'/products'
,
function
(
req
,
res
)
{
res
.
render
(
'products'
,
{
navProducts
:
'active'
,
styles
:
[
'products'
],
scripts
:[
'utils'
,
'products'
],
});
...
...
routes/product.js
View file @
b947053b
(
function
(
global
,
factory
)
{
if
(
typeof
define
===
"function"
&&
define
.
amd
)
{
define
([
'module'
,
'exports'
,
'../utils/xFetch'
,
'express'
],
factory
);
}
else
if
(
typeof
exports
!==
"undefined"
)
{
factory
(
module
,
exports
,
require
(
'../utils/xFetch'
),
require
(
'express'
));
}
else
{
var
mod
=
{
exports
:
{}
};
factory
(
mod
,
mod
.
exports
,
global
.
xFetch
,
global
.
express
);
global
.
product
=
mod
.
exports
;
}
})(
this
,
function
(
module
,
exports
,
_xFetch
,
express
)
{
'use strict'
;
'use strict'
;
Object
.
defineProperty
(
exports
,
"__esModule"
,
{
value
:
true
});
exports
.
formatDateTime
=
exports
.
leftPad
=
exports
.
productStatusToString
=
exports
.
PRODUCT_STATUS
=
undefined
;
exports
.
formatMoney
=
formatMoney
;
Object
.
defineProperty
(
exports
,
"__esModule"
,
{
value
:
true
});
exports
.
formatDateTime
=
exports
.
leftPad
=
exports
.
productStatusToString
=
exports
.
PRODUCT_STATUS
=
undefined
;
var
_xFetch2
=
_interopRequireDefault
(
_xFetch
)
;
var
_extends
=
Object
.
assign
||
function
(
target
)
{
for
(
var
i
=
1
;
i
<
arguments
.
length
;
i
++
)
{
var
source
=
arguments
[
i
];
for
(
var
key
in
source
)
{
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
source
,
key
))
{
target
[
key
]
=
source
[
key
];
}
}
}
return
target
;
}
;
function
_interopRequireDefault
(
obj
)
{
return
obj
&&
obj
.
__esModule
?
obj
:
{
default
:
obj
};
}
exports
.
formatMoney
=
formatMoney
;
var
_extends
=
Object
.
assign
||
function
(
target
)
{
for
(
var
i
=
1
;
i
<
arguments
.
length
;
i
++
)
{
var
source
=
arguments
[
i
];
var
_xFetch
=
require
(
'../utils/xFetch'
);
for
(
var
key
in
source
)
{
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
source
,
key
))
{
target
[
key
]
=
source
[
key
];
}
}
}
var
_xFetch2
=
_interopRequireDefault
(
_xFetch
);
return
target
;
};
function
_interopRequireDefault
(
obj
)
{
return
obj
&&
obj
.
__esModule
?
obj
:
{
default
:
obj
};
}
var
PRODUCT_STATUS
=
exports
.
PRODUCT_STATUS
=
{
'-9'
:
'草稿'
,
0
:
'已删除'
,
1
:
'未发布'
,
5
:
'预热中'
,
11
:
'募集中'
,
17
:
'已暂停'
,
21
:
'已封账'
,
31
:
'已成立'
};
var
express
=
require
(
'express'
);
var
productStatusToString
=
exports
.
productStatusToString
=
function
productStatusToString
(
status
)
{
return
PRODUCT_STATUS
[
status
]
||
'未定义'
;
};
var
PRODUCT_STATUS
=
exports
.
PRODUCT_STATUS
=
{
'-9'
:
'草稿'
,
0
:
'已删除'
,
1
:
'未发布'
,
5
:
'预热中'
,
11
:
'募集中'
,
17
:
'已暂停'
,
21
:
'已封账'
,
31
:
'已成立'
};
function
formatMoney
()
{
var
money
=
arguments
.
length
<=
0
||
arguments
[
0
]
===
undefined
?
0
:
arguments
[
0
];
var
ret
=
void
0
;
if
(
isNaN
(
money
))
{
ret
=
'0'
;
}
else
if
(
money
>=
1
E10
)
{
ret
=
money
/
1
E10
+
'亿'
;
}
else
if
(
money
>=
1
E6
)
{
ret
=
money
/
1
E6
+
'万'
;
}
else
{
ret
=
money
/
1
E2
;
}
return
ret
;
}
var
productStatusToString
=
exports
.
productStatusToString
=
function
productStatusToString
(
status
)
{
return
PRODUCT_STATUS
[
status
]
||
'未定义'
;
};
var
leftPad
=
exports
.
leftPad
=
function
leftPad
(
num
)
{
return
num
>=
10
?
num
:
'0'
+
num
;
};
function
formatMoney
()
{
var
money
=
arguments
.
length
<=
0
||
arguments
[
0
]
===
undefined
?
0
:
arguments
[
0
];
var
formatDateTime
=
exports
.
formatDateTime
=
function
formatDateTime
()
{
var
time
=
arguments
.
length
<=
0
||
arguments
[
0
]
===
undefined
?
0
:
arguments
[
0
];
var
format
=
arguments
.
length
<=
1
||
arguments
[
1
]
===
undefined
?
'YYYY-MM-DD hh:mm:ss'
:
arguments
[
1
];
var
date
=
new
Date
(
time
);
var
data
=
{
YYYY
:
date
.
getFullYear
(),
MM
:
leftPad
(
date
.
getMonth
()
+
1
),
DD
:
leftPad
(
date
.
getDate
()),
hh
:
leftPad
(
date
.
getHours
()),
mm
:
leftPad
(
date
.
getMinutes
()),
ss
:
leftPad
(
date
.
getSeconds
())
};
return
format
.
replace
(
/
[
A-Za-z
]
+/g
,
function
(
metch
)
{
return
data
[
metch
];
});
var
ret
=
void
0
;
if
(
isNaN
(
money
))
{
ret
=
'0'
;
}
else
if
(
money
>=
1
E10
)
{
ret
=
money
/
1
E10
+
'亿'
;
}
else
if
(
money
>=
1
E6
)
{
ret
=
money
/
1
E6
+
'万'
;
}
else
{
ret
=
money
/
1
E2
;
}
return
ret
;
}
var
leftPad
=
exports
.
leftPad
=
function
leftPad
(
num
)
{
return
num
>=
10
?
num
:
'0'
+
num
;
};
var
formatDateTime
=
exports
.
formatDateTime
=
function
formatDateTime
()
{
var
time
=
arguments
.
length
<=
0
||
arguments
[
0
]
===
undefined
?
0
:
arguments
[
0
];
var
format
=
arguments
.
length
<=
1
||
arguments
[
1
]
===
undefined
?
'YYYY-MM-DD hh:mm:ss'
:
arguments
[
1
];
var
date
=
new
Date
(
time
);
var
data
=
{
YYYY
:
date
.
getFullYear
(),
MM
:
leftPad
(
date
.
getMonth
()
+
1
),
DD
:
leftPad
(
date
.
getDate
()),
hh
:
leftPad
(
date
.
getHours
()),
mm
:
leftPad
(
date
.
getMinutes
()),
ss
:
leftPad
(
date
.
getSeconds
())
};
return
format
.
replace
(
/
[
A-Za-z
]
+/g
,
function
(
metch
)
{
return
data
[
metch
];
});
};
module
.
exports
=
function
(
req
,
res
,
next
)
{
Promise
.
all
([(
0
,
_xFetch2
.
default
)(
'https://m.fudou6.com/api/1.0/cate/cates.json'
),
(
0
,
_xFetch2
.
default
)(
'https://m.fudou6.com/api/1.0/prod/detail.json?itemId='
+
req
.
params
.
id
)]).
then
(
function
(
arr
)
{
var
pCates
=
arr
[
0
].
pCates
;
var
item
=
arr
[
1
].
item
;
if
(
!
item
||
!
pCates
)
{
var
err
=
new
Error
(
'Not Found'
);
err
.
status
=
404
;
next
(
err
);
}
pCates
.
forEach
(
function
(
cate
)
{
cate
.
subCates
.
forEach
(
function
(
scate
)
{
if
(
scate
.
id
==
item
.
categoryId
)
{
item
.
categoryName
=
scate
.
name
;
item
.
categoryParentId
=
cate
.
id
;
item
.
categroyParentName
=
cate
.
name
;
}
});
});
item
.
elements
=
JSON
.
parse
(
item
.
elements
);
Object
.
keys
(
item
.
elements
).
forEach
(
function
(
key
)
{
console
.
log
(
'%s
\
t%s
\
t%s'
,
key
,
item
.
elements
[
key
][
0
],
item
.
elements
[
key
][
1
]);
item
.
elements
[
key
]
=
item
.
elements
[
key
][
1
];
});
item
.
commissionAlg
=
JSON
.
parse
(
item
.
commissionAlg
);
module
.
exports
=
function
(
req
,
res
,
next
)
{
Promise
.
all
([(
0
,
_xFetch2
.
default
)(
'https://m.fudou6.com/api/1.0/cate/cates.json'
),
(
0
,
_xFetch2
.
default
)(
'https://m.fudou6.com/api/1.0/prod/detail.json?itemId='
+
req
.
params
.
id
)]).
then
(
function
(
arr
)
{
var
pCates
=
arr
[
0
].
pCates
;
var
item
=
arr
[
1
].
item
;
item
.
commissionAlg
=
item
.
commissionAlg
.
map
(
function
(
it
)
{
var
_ref
=
it
.
result
||
{};
var
sy
=
_ref
.
sy
;
var
yj
=
_ref
.
yj
;
if
(
!
item
||
!
pCates
)
{
var
err
=
new
Error
(
'Not Found'
);
err
.
status
=
404
;
next
(
err
);
}
return
{
rowspan
:
item
.
commissionAlg
.
length
,
range
:
(
it
.
min
?
formatMoney
(
it
.
min
)
+
' ≤ '
:
''
)
+
' x '
+
(
it
.
max
?
' < '
+
formatMoney
(
it
.
max
)
:
''
),
min
:
it
.
min
,
max
:
it
.
max
,
sy
:
sy
,
yj
:
yj
}
;
pCates
.
forEach
(
function
(
cate
)
{
cate
.
subCates
.
forEach
(
function
(
scate
)
{
if
(
scate
.
id
==
item
.
categoryId
)
{
item
.
categoryName
=
scate
.
name
;
item
.
categoryParentId
=
cate
.
id
;
item
.
categroyParentName
=
cate
.
name
;
}
});
});
item
.
fundRaisedStartTimeString
=
item
.
fundRaisedStartTime
&&
formatDateTime
(
item
.
fundRaisedStartTime
);
item
.
fundRaisedEndTimeString
=
item
.
fundRaisedEndTime
&&
formatDateTime
(
item
.
fundRaisedEndTime
);
item
.
elements
=
JSON
.
parse
(
item
.
elements
);
item
.
statusString
=
productStatusToString
(
item
.
status
);
Object
.
keys
(
item
.
elements
).
forEach
(
function
(
key
)
{
//console.log('%s\t%s\t%s', key, item.elements[key][0], item.elements[key][1]);
item
.
elements
[
key
]
=
item
.
elements
[
key
][
1
];
});
//募集目标
item
.
fundRaisedTargetString
=
formatMoney
(
item
.
fundRaisedTarget
);
//已募集
item
.
fundRaisedOverString
=
formatMoney
(
item
.
fundRaisedOver
);
item
.
fundRaisedPercentage
=
item
.
fundRaisedOver
/
item
.
fundRaisedTarget
*
100
;
//募集剩余
item
.
fundRaisedSurplus
=
Math
.
max
(
item
.
fundRaisedTarget
-
item
.
fundRaisedOver
,
0
);
item
.
commissionAlg
=
JSON
.
parse
(
item
.
commissionAlg
);
item
.
fundRaisedSurplusString
=
formatMoney
(
item
.
fundRaisedSurplus
);
//最小投资
item
.
minimumAmountString
=
formatMoney
(
item
.
minimumAmount
);
item
.
commissionAlg
=
item
.
commissionAlg
.
map
(
function
(
it
)
{
var
_ref
=
it
.
result
||
{};
//console.log(item);
var
sy
=
_ref
.
sy
;
var
yj
=
_ref
.
yj
;
re
s
.
render
(
'product'
,
_extends
(
{
styles
:
[
'product'
]
,
scripts
:
[
'utils'
,
'product'
]
},
item
));
}).
catch
(
function
(
err
)
{
console
.
log
(
err
);
next
(
err
)
;
re
turn
{
rowspan
:
item
.
commissionAlg
.
length
,
range
:
(
it
.
min
?
formatMoney
(
it
.
min
)
+
' ≤ '
:
''
)
+
' x '
+
(
it
.
max
?
' < '
+
formatMoney
(
it
.
max
)
:
''
),
min
:
it
.
min
,
max
:
it
.
max
,
sy
:
sy
,
yj
:
yj
}
;
});
};
});
item
.
fundRaisedStartTimeString
=
item
.
fundRaisedStartTime
&&
formatDateTime
(
item
.
fundRaisedStartTime
);
item
.
fundRaisedEndTimeString
=
item
.
fundRaisedEndTime
&&
formatDateTime
(
item
.
fundRaisedEndTime
);
item
.
statusString
=
productStatusToString
(
item
.
status
);
//募集目标
item
.
fundRaisedTargetString
=
formatMoney
(
item
.
fundRaisedTarget
);
//已募集
item
.
fundRaisedOverString
=
formatMoney
(
item
.
fundRaisedOver
);
item
.
fundRaisedPercentage
=
item
.
fundRaisedOver
/
item
.
fundRaisedTarget
*
100
;
//募集剩余
item
.
fundRaisedSurplus
=
Math
.
max
(
item
.
fundRaisedTarget
-
item
.
fundRaisedOver
,
0
);
item
.
fundRaisedSurplusString
=
formatMoney
(
item
.
fundRaisedSurplus
);
//最小投资
item
.
minimumAmountString
=
formatMoney
(
item
.
minimumAmount
);
//console.log(item);
res
.
render
(
'product'
,
_extends
({
navProducts
:
'active'
,
styles
:
[
'product'
],
scripts
:
[
'utils'
,
'product'
]
},
item
));
}).
catch
(
function
(
err
)
{
console
.
log
(
err
);
next
(
err
);
});
};
//# sourceMappingURL=product.js.map
\ No newline at end of file
routes/product.js.map
View file @
b947053b
{"version":3,"sources":["product.jsx"],"names":[],"mappings":";;wDAEsB,S;;qEAAA,S;;;;;;;;6CAAlB,O;;;;;;;YAiBY,W,GAAA,W;;;;;;;;;;;;;;;;;;;;;;;;AAfT,QAAM,0CAAiB;AAC1B,cAAM,IADoB;AAE1B,WAAG,KAFuB;AAG1B,WAAG,KAHuB;AAI1B,WAAG,KAJuB;AAK1B,YAAI,KALsB;AAM1B,YAAI,KANsB;AAO1B,YAAI,KAPsB;AAQ1B,YAAI;AARsB,KAAvB;;AAWA,QAAM,wDAAwB,SAAxB,qBAAwB,SAAU;AAC3C,eAAO,eAAe,MAAf,KAA0B,KAAjC;AACH,KAFM;;AAIA,aAAS,WAAT,GAAgC;AAAA,YAAX,KAAW,yDAAH,CAAG;;AACnC,YAAI,YAAJ;AACA,YAAI,MAAM,KAAN,CAAJ,EAAkB;AACd,kBAAM,GAAN;AACH,SAFD,MAEO,IAAI,SAAS,IAAb,EAAmB;AACtB,kBAAO,QAAQ,IAAT,GAAiB,GAAvB;AACH,SAFM,MAEA,IAAI,SAAS,GAAb,EAAkB;AACrB,kBAAO,QAAQ,GAAT,GAAgB,GAAtB;AACH,SAFM,MAEA;AACH,kBAAO,QAAQ,GAAf;AACH;AACD,eAAO,GAAP;AACH;;AAGM,QAAM,4BAAU,SAAV,OAAU,MAAO;AAC1B,eAAO,OAAO,EAAP,GAAY,GAAZ,GAAmB,MAAM,GAAhC;AACH,KAFM;;AAIA,QAAM,0CAAiB,SAAjB,cAAiB,GAA8C;AAAA,YAA7C,IAA6C,yDAAtC,CAAsC;AAAA,YAAnC,MAAmC,yDAA1B,qBAA0B;;AACxE,YAAM,OAAO,IAAI,IAAJ,CAAS,IAAT,CAAb;AACA,YAAM,OAAO;AACT,kBAAM,KAAK,WAAL,EADG;AAET,gBAAI,QAAQ,KAAK,QAAL,KAAkB,CAA1B,CAFK;AAGT,gBAAI,QAAQ,KAAK,OAAL,EAAR,CAHK;AAIT,gBAAI,QAAQ,KAAK,QAAL,EAAR,CAJK;AAKT,gBAAI,QAAQ,KAAK,UAAL,EAAR,CALK;AAMT,gBAAI,QAAQ,KAAK,UAAL,EAAR;AANK,SAAb;AAQA,eAAO,OAAO,OAAP,CAAe,YAAf,EAA6B,iBAAS;AACzC,mBAAO,KAAK,KAAL,CAAP;AACH,SAFM,CAAP;AAGH,KAbM;;AAgBP,WAAO,OAAP,GAAiB,UAAU,GAAV,EAAe,GAAf,EAAoB,IAApB,EAA0B;AACvC,gBAAQ,GAAR,CAAY,CACR,sBAAO,8CAAP,CADQ,EAER,sBAAO,0DAA0D,IAAI,MAAJ,CAAW,EAA5E,CAFQ,CAAZ,EAGG,IAHH,CAGQ,UAAC,GAAD,EAAQ;AAAA,gBACL,MADK,GACK,IAAI,CAAJ,CADL,CACL,MADK;AAAA,gBAEL,IAFK,GAEG,IAAI,CAAJ,CAFH,CAEL,IAFK;;;AAMZ,gBAAI,CAAC,IAAD,IAAS,CAAC,MAAd,EAAsB;AAClB,oBAAI,MAAM,IAAI,KAAJ,CAAU,WAAV,CAAV;AACA,oBAAI,MAAJ,GAAa,GAAb;AACA,qBAAK,GAAL;AACH;;AAGD,mBAAO,OAAP,CAAe,gBAAO;AAClB,qBAAK,QAAL,CAAc,OAAd,CAAsB,iBAAQ;AAC1B,wBAAI,MAAM,EAAN,IAAY,KAAK,UAArB,EAAiC;AAC7B,6BAAK,YAAL,GAAoB,MAAM,IAA1B;AACA,6BAAK,gBAAL,GAAwB,KAAK,EAA7B;AACA,6BAAK,kBAAL,GAA0B,KAAK,IAA/B;AACH;AACJ,iBAND;AAOH,aARD;;AAUA,iBAAK,QAAL,GAAgB,KAAK,KAAL,CAAW,KAAK,QAAhB,CAAhB;;AAEA,mBAAO,IAAP,CAAY,KAAK,QAAjB,EAA2B,OAA3B,CAAmC,eAAK;AACpC,wBAAQ,GAAR,CAAY,YAAZ,EAA0B,GAA1B,EAA+B,KAAK,QAAL,CAAc,GAAd,EAAmB,CAAnB,CAA/B,EAAsD,KAAK,QAAL,CAAc,GAAd,EAAmB,CAAnB,CAAtD;AACA,qBAAK,QAAL,CAAc,GAAd,IAAqB,KAAK,QAAL,CAAc,GAAd,EAAmB,CAAnB,CAArB;AACH,aAHD;;AAKA,iBAAK,aAAL,GAAqB,KAAK,KAAL,CAAW,KAAK,aAAhB,CAArB;;AAEA,iBAAK,aAAL,GAAqB,KAAK,aAAL,CAAmB,GAAnB,CAAuB,cAAK;AAAA,2BAC3B,GAAG,MAAH,IAAa,EADc;;AAAA,oBACtC,EADsC,QACtC,EADsC;AAAA,oBAClC,EADkC,QAClC,EADkC;;AAE7C,uBAAO;AACH,6BAAQ,KAAK,aAAL,CAAmB,MADxB;AAEH,2BAAO,CAAC,GAAG,GAAH,GAAS,YAAY,GAAG,GAAf,IAAoB,KAA7B,GAAmC,EAApC,IAA0C,KAA1C,IAAmD,GAAG,GAAH,GAAS,QAAM,YAAY,GAAG,GAAf,CAAf,GAAqC,EAAxF,CAFJ;AAGH,yBAAK,GAAG,GAHL;AAIH,yBAAK,GAAG,GAJL;AAKH,0BALG,EAKC;AALD,iBAAP;AAOH,aAToB,CAArB;;AAWA,iBAAK,yBAAL,GAAiC,KAAK,mBAAL,IAA4B,eAAe,KAAK,mBAApB,CAA7D;AACA,iBAAK,uBAAL,GAA+B,KAAK,iBAAL,IAA0B,eAAe,KAAK,iBAApB,CAAzD;;AAIA,iBAAK,YAAL,GAAoB,sBAAsB,KAAK,MAA3B,CAApB;;AAEA;AACA,iBAAK,sBAAL,GAA8B,YAAY,KAAK,gBAAjB,CAA9B;AACA;AACA,iBAAK,oBAAL,GAA4B,YAAY,KAAK,cAAjB,CAA5B;AACA,iBAAK,oBAAL,GAA4B,KAAK,cAAL,GAAsB,KAAK,gBAA3B,GAA8C,GAA1E;AACA;AACA,iBAAK,iBAAL,GAAyB,KAAK,GAAL,CAAS,KAAK,gBAAL,GAAwB,KAAK,cAAtC,EAAsD,CAAtD,CAAzB;;AAEA,iBAAK,uBAAL,GAA+B,YAAY,KAAK,iBAAjB,CAA/B;AACA;AACA,iBAAK,mBAAL,GAA2B,YAAY,KAAK,aAAjB,CAA3B;;AAEA;;AAEA,gBAAI,MAAJ,CAAW,SAAX;AACI,wBAAO,CAAC,SAAD,CADX;AAEI,yBAAQ,CAAC,OAAD,EAAS,SAAT;AAFZ,eAGO,IAHP;AAMH,SAzED,EAyEG,KAzEH,CAyES,eAAM;AACX,oBAAQ,GAAR,CAAY,GAAZ;AACA,iBAAK,GAAL;AACH,SA5ED;AA8EH,KA/ED","file":"product.js","sourcesContent":["import xFetch from '../utils/xFetch';\n\nvar express = require('express');\n\nexport const PRODUCT_STATUS = {\n '-9': '草稿',\n 0: '已删除',\n 1: '未发布',\n 5: '预热中',\n 11: '募集中',\n 17: '已暂停',\n 21: '已封账',\n 31: '已成立',\n}\n\nexport const productStatusToString = status => {\n return PRODUCT_STATUS[status] || '未定义';\n};\n\nexport function formatMoney(money = 0) {\n let ret;\n if (isNaN(money)) {\n ret = '0';\n } else if (money >= 1E10) {\n ret = (money / 1E10) + '亿';\n } else if (money >= 1E6) {\n ret = (money / 1E6) + '万';\n } else {\n ret = (money / 1E2);\n }\n return ret;\n}\n\n\nexport const leftPad = num => {\n return num >= 10 ? num : ('0' + num);\n};\n\nexport const formatDateTime = (time = 0, format = 'YYYY-MM-DD hh:mm:ss') => {\n const date = new Date(time);\n const data = {\n YYYY: date.getFullYear(),\n MM: leftPad(date.getMonth() + 1),\n DD: leftPad(date.getDate()),\n hh: leftPad(date.getHours()),\n mm: leftPad(date.getMinutes()),\n ss: leftPad(date.getSeconds())\n };\n return format.replace(/[A-Za-z]+/g, metch => {\n return data[metch];\n });\n};\n\n\nmodule.exports = function (req, res, next) {\n Promise.all([\n xFetch('https://m.fudou6.com/api/1.0/cate/cates.json'),\n xFetch('https://m.fudou6.com/api/1.0/prod/detail.json?itemId=' + req.params.id)\n ]).then((arr)=> {\n const {pCates} = arr[0];\n const {item} = arr[1];\n\n\n\n if (!item || !pCates) {\n var err = new Error('Not Found');\n err.status = 404;\n next(err);\n }\n\n\n pCates.forEach(cate=> {\n cate.subCates.forEach(scate=> {\n if (scate.id == item.categoryId) {\n item.categoryName = scate.name;\n item.categoryParentId = cate.id;\n item.categroyParentName = cate.name;\n }\n });\n });\n\n item.elements = JSON.parse(item.elements);\n\n Object.keys(item.elements).forEach(key=>{\n console.log('%s\\t%s\\t%s', key, item.elements[key][0], item.elements[key][1]);\n item.elements[key] = item.elements[key][1];\n });\n\n item.commissionAlg = JSON.parse(item.commissionAlg);\n\n item.commissionAlg = item.commissionAlg.map(it=> {\n const {sy, yj} = (it.result || {});\n return {\n rowspan:item.commissionAlg.length,\n range: (it.min ? formatMoney(it.min)+' ≤ ':'') + ' x ' + (it.max ? ' < '+formatMoney(it.max) : ''),\n min: it.min,\n max: it.max,\n sy, yj\n };\n });\n\n item.fundRaisedStartTimeString = item.fundRaisedStartTime && formatDateTime(item.fundRaisedStartTime);\n item.fundRaisedEndTimeString = item.fundRaisedEndTime && formatDateTime(item.fundRaisedEndTime);\n\n\n\n item.statusString = productStatusToString(item.status);\n\n //募集目标\n item.fundRaisedTargetString = formatMoney(item.fundRaisedTarget);\n //已募集\n item.fundRaisedOverString = formatMoney(item.fundRaisedOver);\n item.fundRaisedPercentage = item.fundRaisedOver / item.fundRaisedTarget * 100;\n //募集剩余\n item.fundRaisedSurplus = Math.max(item.fundRaisedTarget - item.fundRaisedOver, 0);\n\n item.fundRaisedSurplusString = formatMoney(item.fundRaisedSurplus);\n //最小投资\n item.minimumAmountString = formatMoney(item.minimumAmount);\n\n //console.log(item);\n\n res.render('product', {\n styles:['product'],\n scripts:['utils','product'],\n ...item\n });\n\n }).catch(err=> {\n console.log(err);\n next(err);\n });\n\n};\n"]}
\ No newline at end of file
{"version":3,"sources":["product.jsx"],"names":[],"mappings":"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","file":"product.js","sourcesContent":["import xFetch from '../utils/xFetch';\n\nvar express = require('express');\n\nexport const PRODUCT_STATUS = {\n '-9': '草稿',\n 0: '已删除',\n 1: '未发布',\n 5: '预热中',\n 11: '募集中',\n 17: '已暂停',\n 21: '已封账',\n 31: '已成立',\n}\n\nexport const productStatusToString = status => {\n return PRODUCT_STATUS[status] || '未定义';\n};\n\nexport function formatMoney(money = 0) {\n let ret;\n if (isNaN(money)) {\n ret = '0';\n } else if (money >= 1E10) {\n ret = (money / 1E10) + '亿';\n } else if (money >= 1E6) {\n ret = (money / 1E6) + '万';\n } else {\n ret = (money / 1E2);\n }\n return ret;\n}\n\n\nexport const leftPad = num => {\n return num >= 10 ? num : ('0' + num);\n};\n\nexport const formatDateTime = (time = 0, format = 'YYYY-MM-DD hh:mm:ss') => {\n const date = new Date(time);\n const data = {\n YYYY: date.getFullYear(),\n MM: leftPad(date.getMonth() + 1),\n DD: leftPad(date.getDate()),\n hh: leftPad(date.getHours()),\n mm: leftPad(date.getMinutes()),\n ss: leftPad(date.getSeconds())\n };\n return format.replace(/[A-Za-z]+/g, metch => {\n return data[metch];\n });\n};\n\n\nmodule.exports = function (req, res, next) {\n Promise.all([\n xFetch('https://m.fudou6.com/api/1.0/cate/cates.json'),\n xFetch('https://m.fudou6.com/api/1.0/prod/detail.json?itemId=' + req.params.id)\n ]).then((arr)=> {\n const {pCates} = arr[0];\n const {item} = arr[1];\n\n\n\n if (!item || !pCates) {\n var err = new Error('Not Found');\n err.status = 404;\n next(err);\n }\n\n\n pCates.forEach(cate=> {\n cate.subCates.forEach(scate=> {\n if (scate.id == item.categoryId) {\n item.categoryName = scate.name;\n item.categoryParentId = cate.id;\n item.categroyParentName = cate.name;\n }\n });\n });\n\n item.elements = JSON.parse(item.elements);\n\n Object.keys(item.elements).forEach(key=>{\n //console.log('%s\\t%s\\t%s', key, item.elements[key][0], item.elements[key][1]);\n item.elements[key] = item.elements[key][1];\n });\n\n item.commissionAlg = JSON.parse(item.commissionAlg);\n\n item.commissionAlg = item.commissionAlg.map(it=> {\n const {sy, yj} = (it.result || {});\n return {\n rowspan:item.commissionAlg.length,\n range: (it.min ? formatMoney(it.min)+' ≤ ':'') + ' x ' + (it.max ? ' < '+formatMoney(it.max) : ''),\n min: it.min,\n max: it.max,\n sy, yj\n };\n });\n\n item.fundRaisedStartTimeString = item.fundRaisedStartTime && formatDateTime(item.fundRaisedStartTime);\n item.fundRaisedEndTimeString = item.fundRaisedEndTime && formatDateTime(item.fundRaisedEndTime);\n\n\n\n item.statusString = productStatusToString(item.status);\n\n //募集目标\n item.fundRaisedTargetString = formatMoney(item.fundRaisedTarget);\n //已募集\n item.fundRaisedOverString = formatMoney(item.fundRaisedOver);\n item.fundRaisedPercentage = item.fundRaisedOver / item.fundRaisedTarget * 100;\n //募集剩余\n item.fundRaisedSurplus = Math.max(item.fundRaisedTarget - item.fundRaisedOver, 0);\n\n item.fundRaisedSurplusString = formatMoney(item.fundRaisedSurplus);\n //最小投资\n item.minimumAmountString = formatMoney(item.minimumAmount);\n\n //console.log(item);\n\n res.render('product', {\n navProducts:'active',\n styles:['product'],\n scripts:['utils','product'],\n ...item\n });\n\n }).catch(err=> {\n console.log(err);\n next(err);\n });\n\n};\n"]}
\ No newline at end of file
routes/product.jsx
View file @
b947053b
...
...
@@ -82,7 +82,7 @@ module.exports = function (req, res, next) {
item
.
elements
=
JSON
.
parse
(
item
.
elements
);
Object
.
keys
(
item
.
elements
).
forEach
(
key
=>
{
console
.
log
(
'%s
\
t%s
\
t%s'
,
key
,
item
.
elements
[
key
][
0
],
item
.
elements
[
key
][
1
]);
//
console.log('%s\t%s\t%s', key, item.elements[key][0], item.elements[key][1]);
item
.
elements
[
key
]
=
item
.
elements
[
key
][
1
];
});
...
...
@@ -121,6 +121,7 @@ module.exports = function (req, res, next) {
//console.log(item);
res
.
render
(
'product'
,
{
navProducts
:
'active'
,
styles
:[
'product'
],
scripts
:[
'utils'
,
'product'
],
...
item
...
...
views/layout.hbs
View file @
b947053b
...
...
@@ -14,10 +14,10 @@
<div
class=
"container"
>
<a
class=
"logo"
href=
"/"
><img
src=
"/images/logo.png"
alt=
"logo"
></a>
<nav
class=
"clear"
>
<span><a
href=
"/"
>
首页 / HOME
</a></span>
<span><a
href=
"/project"
>
项目合作 / PROJECT
</a></span>
<span><a
href=
"/products"
>
最新产品 / PRODUCT
</a></span>
<span><a
href=
"/about"
>
关于我们 / ABOUT
</a></span>
<span><a
href=
"/"
class=
"
{{
navIndex
}}
"
>
首页 / HOME
</a></span>
<span><a
href=
"/project"
class=
"
{{
navProject
}}
"
>
项目合作 / PROJECT
</a></span>
<span><a
href=
"/products"
class=
"
{{
navProducts
}}
"
>
最新产品 / PRODUCT
</a></span>
<span><a
href=
"/about"
class=
"
{{
navAbout
}}
"
>
关于我们 / ABOUT
</a></span>
</nav>
</div>
</header>
...
...
views/product.hbs
View file @
b947053b
...
...
@@ -46,23 +46,21 @@
<p>
{{
statusString
}}
</p>
</div>
</div>
<div
class=
"appointment"
>
<h2
class=
"info-title"
>
在线预约
</h2>
<p>
留下联系方式我们帮您第一时间抢占稀缺额度
</p>
<form
id=
"form"
>
<div>
<input
type=
"text"
name=
"userName"
placeholder=
"请填写您的姓名"
/>
<input
type=
"text"
name=
"userTel"
placeholder=
"请填写手机号"
maxlength=
"11"
/>
<input
type=
"submit"
value=
"提交"
/>
</div>
<div>
<span
class=
"errorName"
></span>
<span
class=
"errorTel"
></span>
</div>
</form>
</div>
<!--<div class="appointment">-->
<!--<h2 class="info-title">在线预约</h2>-->
<!--<p>留下联系方式我们帮您第一时间抢占稀缺额度</p>-->
<!--<form id="form">-->
<!--<div>-->
<!--<input type="text" name="userName" placeholder="请填写您的姓名" />-->
<!--<input type="text" name="userTel" placeholder="请填写手机号" maxlength="11"/>-->
<!--<input type="submit" value="提交"/>-->
<!--</div>-->
<!--<div>-->
<!--<span class="errorName"></span>-->
<!--<span class="errorTel" ></span>-->
<!--</div>-->
<!--</form>-->
<!--</div>-->
<div
class=
"detail"
>
<h2
class=
"info-title"
>
产品详情
</h2>
<table>
...
...
views/project.hbs
View file @
b947053b
...
...
@@ -64,40 +64,44 @@
</div>
<div
class=
"hot-project-tabs clear"
>
<ul
class=
"clear"
>
<li
class=
"fl"
>
<dl>
<dt></dt>
<dd><h4>
海量资金
</h4></dd>
<dd>
20多万资金方
</dd>
<dd>
3万亿资金,快速融资
</dd>
</dl>
<li>
<div>
<h4>
海量资金
</h4>
<p>
20多万资金方
<br/>
3万亿资金,快速融资
</p>
</div>
</li>
<li
class=
"fl"
>
<dl>
<dt></dt>
<dd><h4>
安全可靠
</h4></dd>
<dd>
以对项目质量的严格把控。
</dd>
<dd>
和清晰的流程设计
</dd>
<dd>
让合投更规范、高效
</dd>
</dl>
<li>
<div>
<h4>
安全可靠
</h4>
<p>
以对项目质量的严格把控
<br/>
和清晰的流程设计
<br/>
让合投更规范、高效
</p>
</div>
</li>
<li
class=
"fl"
>
<dl>
<dt></dt>
<dd><h4>
融资高效
</h4></dd>
<dd>
多个大型项目经验,
</dd>
<dd>
融资流程
</dd>
<dd>
简单\迅速\到账快捷
</dd>
</dl>
<li>
<div>
<h4>
融资高效
</h4>
<p>
多个大型项目经验
<br/>
融资流程
<br/>
简单\迅速\到账快捷
</p>
</div>
</li>
<li
class=
"fl"
>
<dl>
<dt></dt>
<dd><h4>
专业服务
</h4></dd>
<dd>
专业的投资团队,
</dd>
<dd>
全程免费的投融资指导,
</dd>
<dd>
精准的对接推荐
</dd>
</dl>
<li>
<div>
<h4>
专业服务
</h4>
<p>
专业的投资团队
<br/>
全程免费的投融资指导
<br/>
精准的对接推荐
</p>
</div>
</li>
</ul>
</div>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment