Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
40e4236a
提交
40e4236a
authored
3月 25, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
前端:商品分类列表
上级
e9b5adea
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
255 行增加
和
205 行删除
+255
-205
README.md
admin-web/README.md
+6
-2
index.js
admin-web/src/components/GlobalFooter/index.js
+14
-14
defaultSettings.js
admin-web/src/defaultSettings.js
+1
-1
UserLayout.js
admin-web/src/layouts/UserLayout.js
+3
-5
AdminList.js
admin-web/src/pages/Admin/AdminList.js
+6
-4
Login.js
admin-web/src/pages/User/Login.js
+36
-53
document.ejs
admin-web/src/pages/document.ejs
+1
-1
product.js
mobile-web/src/api/product.js
+12
-0
request.js
mobile-web/src/config/request.js
+72
-70
index.vue
mobile-web/src/page/category/index.vue
+89
-49
MVCConfiguration.java
...der/mall/product/application/config/MVCConfiguration.java
+11
-4
UsersProductCategoryController.java
...tion/controller/users/UsersProductCategoryController.java
+4
-2
没有找到文件。
admin-web/README.md
浏览文件 @
40e4236a
...
@@ -31,4 +31,8 @@ http://www.tuicool.com/articles/YrQ7j2a
...
@@ -31,4 +31,8 @@ http://www.tuicool.com/articles/YrQ7j2a
#### 5.注释
#### 5.注释
1.
route目录下的文件需要加上文件头部注释(写清楚文件是什么功能)
1.
route目录下的文件需要加上文件头部注释(写清楚文件是什么功能)
2.
component文件需要加上头部注释 (写清楚改控件的用处)
2.
component文件需要加上头部注释 (写清楚改控件的用处)
\ No newline at end of file
## 补充规范
1.
services 目录中,每个 api 文件,对应后端一个 api 服务。主要考虑是
\ No newline at end of file
admin-web/src/components/GlobalFooter/index.js
浏览文件 @
40e4236a
...
@@ -6,20 +6,20 @@ const GlobalFooter = ({ className, links, copyright }) => {
...
@@ -6,20 +6,20 @@ const GlobalFooter = ({ className, links, copyright }) => {
const
clsString
=
classNames
(
styles
.
globalFooter
,
className
);
const
clsString
=
classNames
(
styles
.
globalFooter
,
className
);
return
(
return
(
<
footer
className
=
{
clsString
}
>
<
footer
className
=
{
clsString
}
>
{
links
&&
(
{
/*{links && (*/
}
<
div
className
=
{
styles
.
links
}
>
{
/*<div className={styles.links}>*/
}
{
links
.
map
(
link
=>
(
{
/*{links.map(link => (*/
}
<
a
{
/*<a*/
}
key
=
{
link
.
key
}
{
/*key={link.key}*/
}
title
=
{
link
.
key
}
{
/*title={link.key}*/
}
target
=
{
link
.
blankTarget
?
'_blank'
:
'_self'
}
{
/*target={link.blankTarget ? '_blank' : '_self'}*/
}
href
=
{
link
.
href
}
{
/*href={link.href}*/
}
>
{
/*>*/
}
{
link
.
title
}
{
/*{link.title}*/
}
<
/a
>
{
/*</a>*/
}
))
}
{
/*))}*/
}
<
/div
>
{
/*</div>*/
}
)
}
{
/*)}*/
}
{
copyright
&&
<
div
className
=
{
styles
.
copyright
}
>
{
copyright
}
<
/div>
}
{
copyright
&&
<
div
className
=
{
styles
.
copyright
}
>
{
copyright
}
<
/div>
}
<
/footer
>
<
/footer
>
);
);
...
...
admin-web/src/defaultSettings.js
浏览文件 @
40e4236a
...
@@ -9,7 +9,7 @@ module.exports = {
...
@@ -9,7 +9,7 @@ module.exports = {
menu
:
{
menu
:
{
disableLocal
:
false
,
disableLocal
:
false
,
},
},
title
:
'
Ant Design Pro
'
,
title
:
'
小商城管理平台
'
,
pwa
:
true
,
pwa
:
true
,
// your iconfont Symbol Scrip Url
// your iconfont Symbol Scrip Url
// eg://at.alicdn.com/t/font_1039637_btcrd5co4w.js
// eg://at.alicdn.com/t/font_1039637_btcrd5co4w.js
...
...
admin-web/src/layouts/UserLayout.js
浏览文件 @
40e4236a
...
@@ -29,9 +29,7 @@ const links = [
...
@@ -29,9 +29,7 @@ const links = [
];
];
const
copyright
=
(
const
copyright
=
(
<
Fragment
>
<
a
href
=
'https://pc.qq.com/detail/1/detail_2661.html'
>
请使用谷歌浏览器
(
Chrome
)
获取最佳用户体验
<
/a
>
Copyright
<
Icon
type
=
"copyright"
/>
2018
蚂蚁金服体验技术部出品
<
/Fragment
>
);
);
class
UserLayout
extends
Component
{
class
UserLayout
extends
Component
{
...
@@ -63,10 +61,10 @@ class UserLayout extends Component {
...
@@ -63,10 +61,10 @@ class UserLayout extends Component {
<
div
className
=
{
styles
.
header
}
>
<
div
className
=
{
styles
.
header
}
>
<
Link
to
=
"/"
>
<
Link
to
=
"/"
>
<
img
alt
=
"logo"
className
=
{
styles
.
logo
}
src
=
{
logo
}
/
>
<
img
alt
=
"logo"
className
=
{
styles
.
logo
}
src
=
{
logo
}
/
>
<
span
className
=
{
styles
.
title
}
>
后台管理系统
<
/span
>
<
span
className
=
{
styles
.
title
}
>
小商城管理平台
<
/span
>
<
/Link
>
<
/Link
>
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
desc
}
>
TODO
....
<
/div
>
{
/*<div className={styles.desc}>TODO....</div>*/
}
<
/div
>
<
/div
>
{
children
}
{
children
}
<
/div
>
<
/div
>
...
...
admin-web/src/pages/Admin/AdminList.js
浏览文件 @
40e4236a
...
@@ -105,7 +105,7 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
...
@@ -105,7 +105,7 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
<
a
className
=
{
styles
.
tableDelete
}
onClick
=
{()
=>
handleDelete
(
record
)}
>
<
a
className
=
{
styles
.
tableDelete
}
onClick
=
{()
=>
handleDelete
(
record
)}
>
删除
删除
<
/a
>
<
/a
>
<
/span> :
'
'
<
/span> :
nul
l
}
}
<
/Fragment
>
<
/Fragment
>
);
);
...
@@ -379,13 +379,14 @@ const RoleAssignModal = Form.create()(props => {
...
@@ -379,13 +379,14 @@ const RoleAssignModal = Form.create()(props => {
);
);
});
});
@
connect
(({
adminList
,
loading
})
=>
({
@
connect
(({
adminList
})
=>
({
// list: adminList.list,
// list: adminList.list,
// pagination: adminList.pagination,
// pagination: adminList.pagination,
...
adminList
,
...
adminList
,
loading
:
loading
.
models
.
resourceList
,
}))
}))
// 主界面
@
Form
.
create
()
@
Form
.
create
()
class
AdminList
extends
PureComponent
{
class
AdminList
extends
PureComponent
{
state
=
{
state
=
{
...
@@ -499,4 +500,4 @@ class AdminList extends PureComponent {
...
@@ -499,4 +500,4 @@ class AdminList extends PureComponent {
}
}
}
}
export
default
AdminList
;
export
default
AdminList
;
\ No newline at end of file
admin-web/src/pages/User/Login.js
浏览文件 @
40e4236a
...
@@ -108,62 +108,45 @@ class LoginPage extends Component {
...
@@ -108,62 +108,45 @@ class LoginPage extends Component {
}}
}}
/
>
/
>
<
/Tab
>
<
/Tab
>
<
Tab
key
=
"mobile"
tab
=
{
formatMessage
({
id
:
'app.login.tab-login-mobile'
})}
>
{
/*<Tab key="mobile" tab={formatMessage({ id: 'app.login.tab-login-mobile' })}>*/
}
{
login
.
status
===
'error'
&&
{
/*{login.status === 'error' &&*/
}
login
.
type
===
'mobile'
&&
{
/*login.type === 'mobile' &&*/
}
!
submitting
&&
{
/*!submitting &&*/
}
this
.
renderMessage
(
{
/*this.renderMessage(*/
}
formatMessage
({
id
:
'app.login.message-invalid-verification-code'
})
{
/*formatMessage({ id: 'app.login.message-invalid-verification-code' })*/
}
)}
{
/*)}*/
}
<
Mobile
{
/*<Mobile*/
}
name
=
"username"
{
/*name="username"*/
}
placeholder
=
{
formatMessage
({
id
:
'form.phone-number.placeholder'
})}
{
/*placeholder={formatMessage({ id: 'form.phone-number.placeholder' })}*/
}
rules
=
{[
{
/*rules={[*/
}
{
{
/*{*/
}
required
:
true
,
{
/*required: true,*/
}
message
:
formatMessage
({
id
:
'validation.phone-number.required'
}),
{
/*message: formatMessage({ id: 'validation.phone-number.required' }),*/
}
},
{
/*},*/
}
{
{
/*{*/
}
pattern
:
/^1
\d{10}
$/
,
{
/*pattern: /^1\d{10}$/,*/
}
message
:
formatMessage
({
id
:
'validation.phone-number.wrong-format'
}),
{
/*message: formatMessage({ id: 'validation.phone-number.wrong-format' }),*/
}
},
{
/*},*/
}
]}
{
/*]}*/
}
/
>
{
/*/>*/
}
<
Captcha
{
/*<Captcha*/
}
name
=
"password"
{
/*name="password"*/
}
placeholder
=
{
formatMessage
({
id
:
'form.verification-code.placeholder'
})}
{
/*placeholder={formatMessage({ id: 'form.verification-code.placeholder' })}*/
}
countDown
=
{
120
}
{
/*countDown={120}*/
}
onGetCaptcha
=
{
this
.
onGetCaptcha
}
{
/*onGetCaptcha={this.onGetCaptcha}*/
}
getCaptchaButtonText
=
{
formatMessage
({
id
:
'form.get-captcha'
})}
{
/*getCaptchaButtonText={formatMessage({ id: 'form.get-captcha' })}*/
}
getCaptchaSecondText
=
{
formatMessage
({
id
:
'form.captcha.second'
})}
{
/*getCaptchaSecondText={formatMessage({ id: 'form.captcha.second' })}*/
}
rules
=
{[
{
/*rules={[*/
}
{
{
/*{*/
}
required
:
true
,
{
/*required: true,*/
}
message
:
formatMessage
({
id
:
'validation.verification-code.required'
}),
{
/*message: formatMessage({ id: 'validation.verification-code.required' }),*/
}
},
{
/*},*/
}
]}
{
/*]}*/
}
/
>
{
/*/>*/
}
<
/Tab
>
{
/*</Tab>*/
}
<
div
>
<
Checkbox
checked
=
{
autoLogin
}
onChange
=
{
this
.
changeAutoLogin
}
>
<
FormattedMessage
id
=
"app.login.remember-me"
/>
<
/Checkbox
>
<
a
style
=
{{
float
:
'right'
}}
href
=
""
>
<
FormattedMessage
id
=
"app.login.forgot-password"
/>
<
/a
>
<
/div
>
<
Submit
loading
=
{
submitting
}
>
<
Submit
loading
=
{
submitting
}
>
<
FormattedMessage
id
=
"app.login.login"
/>
<
FormattedMessage
id
=
"app.login.login"
/>
<
/Submit
>
<
/Submit
>
<
div
className
=
{
styles
.
other
}
>
<
FormattedMessage
id
=
"app.login.sign-in-with"
/>
<
Icon
type
=
"alipay-circle"
className
=
{
styles
.
icon
}
theme
=
"outlined"
/>
<
Icon
type
=
"taobao-circle"
className
=
{
styles
.
icon
}
theme
=
"outlined"
/>
<
Icon
type
=
"weibo-circle"
className
=
{
styles
.
icon
}
theme
=
"outlined"
/>
<
Link
className
=
{
styles
.
register
}
to
=
"/user/register"
>
<
FormattedMessage
id
=
"app.login.signup"
/>
<
/Link
>
<
/div
>
<
/Login
>
<
/Login
>
<
/div
>
<
/div
>
);
);
...
...
admin-web/src/pages/document.ejs
浏览文件 @
40e4236a
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
name=
"viewport"
name=
"viewport"
content=
"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
content=
"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
/>
<title>
Ant Design Pro
</title>
<title>
小商城管理平台
</title>
<link
rel=
"icon"
href=
"/favicon.png"
type=
"image/x-icon"
/>
<link
rel=
"icon"
href=
"/favicon.png"
type=
"image/x-icon"
/>
</head>
</head>
<body>
<body>
...
...
mobile-web/src/api/product.js
0 → 100644
浏览文件 @
40e4236a
import
request
from
"../config/request"
;
export
function
getProductCategoryList
(
pid
)
{
return
request
({
url
:
'product-api/users/category/list'
,
method
:
'get'
,
params
:
{
pid
}
});
}
\ No newline at end of file
mobile-web/src/config/request.js
浏览文件 @
40e4236a
import
axios
from
'axios'
import
axios
from
'axios'
import
{
baseUrl
,
dataSources
}
from
'./env'
;
import
{
baseUrl
,
dataSources
}
from
'./env'
;
import
datas
from
'../data/data'
;
import
datas
from
'../data/data'
;
const
service
=
axios
.
create
({
const
service
=
axios
.
create
({
baseURL
:
baseUrl
,
// api 的 base_url
baseURL
:
baseUrl
,
// api 的 base_url
timeout
:
5000
,
// request timeout
timeout
:
5000
,
// request timeout
});
});
const
servicef
=
function
(
parameter
)
{
const
servicef
=
function
(
parameter
){
// debugger;
if
(
dataSources
==
'local'
)
{
if
(
dataSources
==
'local'
)
{
//定义回调函数和axios一致
//定义回调函数和axios一致
const
promist
=
new
Promise
(
function
(
resolve
,
reject
)
{
const
promist
=
new
Promise
(
function
(
resolve
,
reject
)
{
var
data
=
datas
[
parameter
.
url
];
var
data
=
datas
[
parameter
.
url
];
if
(
typeof
data
==
'string'
)
{
if
(
typeof
data
==
'string'
)
{
data
=
JSON
.
parse
(
data
);
data
=
JSON
.
parse
(
data
);
}
}
resolve
(
data
);
resolve
(
data
);
})
})
return
promist
;
return
promist
;
}
}
...
@@ -26,69 +25,72 @@ const servicef =function(parameter){
...
@@ -26,69 +25,72 @@ const servicef =function(parameter){
}
}
service
.
interceptors
.
request
.
use
(
service
.
interceptors
.
request
.
use
(
config
=>
{
config
=>
{
// Do something before request is sent
// Do something before request is sent
// if (store.getters.token) {
// if (store.getters.token) {
// // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
// // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
// config.headers['X-Token'] = getToken()
// config.headers['X-Token'] = getToken()
// }
// }
return
config
return
config
},
},
error
=>
{
error
=>
{
// Do something with request error
// Do something with request error
console
.
log
(
error
)
// for debug
console
.
log
(
error
)
// for debug
Promise
.
reject
(
error
)
Promise
.
reject
(
error
)
}
}
)
)
// response interceptor
// response interceptor
service
.
interceptors
.
response
.
use
(
service
.
interceptors
.
response
.
use
(
//response => response,
//response => response,
/**
/**
* 下面的注释为通过在response里,自定义code来标示请求状态
* 下面的注释为通过在response里,自定义code来标示请求状态
* 当code返回如下情况则说明权限有问题,登出并返回到登录页
* 当code返回如下情况则说明权限有问题,登出并返回到登录页
* 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
* 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
* 以下代码均为样例,请结合自生需求加以修改,若不需要,则可删除
* 以下代码均为样例,请结合自生需求加以修改,若不需要,则可删除
*/
*/
response
=>
{
response
=>
{
const
res
=
response
.
data
;
// debugger;
if
(
res
.
ResultCode
!==
200
)
{
const
res
=
response
.
data
;
// Message({
if
(
res
.
code
!==
0
)
{
// message: res.message,
// Message({
// type: 'error',
// message: res.message,
// duration: 5 * 1000
// type: 'error',
// })
// duration: 5 * 1000
// // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;
// })
// if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了;
// // 请自行在引入 MessageBox
// if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// // import { Message, MessageBox } from 'element-ui'
// // 请自行在引入 MessageBox
// MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
// // import { Message, MessageBox } from 'element-ui'
// confirmButtonText: '重新登录',
// MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
// cancelButtonText: '取消',
// confirmButtonText: '重新登录',
// type: 'warning'
// cancelButtonText: '取消',
// }).then(() => {
// type: 'warning'
// store.dispatch('FedLogOut').then(() => {
// }).then(() => {
// location.reload() // 为了重新实例化vue-router对象 避免bug
// store.dispatch('FedLogOut').then(() => {
// })
// location.reload() // 为了重新实例化vue-router对象 避免bug
// })
// })
// }
// })
console
.
log
(
1
);
// }
return
Promise
.
reject
(
'error'
)
console
.
log
(
1
);
}
else
{
return
Promise
.
reject
(
'error'
)
if
(
typeof
response
.
data
.
Tag
==
'string'
){
}
else
{
return
JSON
.
parse
(
response
.
data
.
Tag
);
// if (typeof response.data.Tag == 'string') {
}
else
{
// return JSON.parse(response.data.Tag);
return
response
.
data
.
Tag
;
// } else {
}
// return response.data.Tag;
}
// }
},
// debugger;
error
=>
{
return
res
.
data
;
return
Promise
.
reject
(
error
)
}
}
)
},
error
=>
{
return
Promise
.
reject
(
error
)
}
)
export
default
servicef
export
default
servicef
\ No newline at end of file
\ No newline at end of file
mobile-web/src/page/category/index.vue
浏览文件 @
40e4236a
...
@@ -6,63 +6,71 @@
...
@@ -6,63 +6,71 @@
show-action
show-action
@
search=
"onSearch"
@
search=
"onSearch"
>
>
<div
slot=
"action"
@
click=
"onSearch"
>
搜索
</div>
<div
slot=
"action"
@
click=
"onSearch"
>
搜索
</div>
</van-search>
</van-search>
<van-badge-group
:active-key=
"activeKey"
class=
"tab"
:style=
"'height:'+fullHeight+'px'"
>
<van-badge-group
:active-key=
"activeKey"
class=
"tab"
:style=
"'height:'+fullHeight+'px'"
>
<
van-badge
title=
"热门推荐"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"热门推荐"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"手机数码"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"手机数码"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"家用电器"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"家用电器"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"电脑办公"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"电脑办公"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"美妆护肤"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"美妆护肤"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"个护清洁"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"个护清洁"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"汽车用品"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"汽车用品"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"男装"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"男装"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"男鞋"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"男鞋"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"女装"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"女装"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"女鞋"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"女鞋"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"母婴童装"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"母婴童装"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"图书音像"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"图书音像"
@
click=
"onClick"
/>
--
>
<
van-badge
title=
"运动户外"
@
click=
"onClick"
/
>
<
!--
<van-badge
title=
"运动户外"
@
click=
"onClick"
/>
--
>
<van-badge
title=
"食品生鲜
"
@
click=
"onClick"
/>
<van-badge
v-for=
"category in rootCategories"
:title=
"category.name
"
@
click=
"onClick"
/>
</van-badge-group>
</van-badge-group>
<div
class=
"content"
:style=
"'width:'+fullWidth+'px;height:'+(fullHeight-7)+'px'"
>
<div
class=
"content"
:style=
"'width:'+fullWidth+'px;height:'+(fullHeight-7)+'px'"
>
<img
src=
"https://img11.360buyimg.com/mcoss/jfs/t1/1072/23/3672/95463/5b9a0813E175891fa/e38fc2f7c2ddfec2.jpg"
/>
<!-- TODO 营销活动,暂时注释掉 -->
<!--
<img
src=
"https://img11.360buyimg.com/mcoss/jfs/t1/1072/23/3672/95463/5b9a0813E175891fa/e38fc2f7c2ddfec2.jpg"
/>
-->
<!-- TODO 常用分类,暂时注释掉 -->
<!--
<div
class=
"category-div"
>
-->
<!--
<h4>
常用分类
</h4>
-->
<!--
<ul
>
-->
<!--
<li>
-->
<!--
<router-link
to=
"/search?keyword=xxxx"
>
-->
<!--
<img
src=
"//img12.360buyimg.com/focus/jfs/t11824/150/2263801190/3392/8e69e1b3/5a167b8cNdcf71ae5.jpg"
>
-->
<!--
<span>
蓝牙耳机
</span>
-->
<!--
</router-link>
-->
<!--
</li>
-->
<!--
<li>
-->
<!--
<a
>
-->
<!--
<img
src=
"//img20.360buyimg.com/focus/jfs/t13759/194/897734755/2493/1305d4c4/5a1692ebN8ae73077.jpg"
>
-->
<!--
<span>
iPhone
</span>
-->
<!--
</a>
-->
<!--
</li>
-->
<!--
<div
style=
"clear:both"
></div>
-->
<!--
</ul>
-->
<!--
</div>
-->
<div
class=
"category-div"
>
<div
class=
"category-div"
>
<h4>
常用分类
</h4>
<!--
<h4>
热门分类
</h4>
-->
<ul
>
<ul>
<li>
<!--
<li><a
><img
src=
"//img11.360buyimg.com/focus/s140x140_jfs/t21388/146/237407622/26923/221da1b3/5b054fedN2ba90518.jpg"
><span>
手机
</span></a></li>
-->
<router-link
to=
"/search?keyword=xxxx"
>
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t20128/208/216721929/9242/472993da/5b05522dNa2aae1bb.png"
><span>
耳机
</span></a></li>
-->
<img
src=
"//img12.360buyimg.com/focus/jfs/t11824/150/2263801190/3392/8e69e1b3/5a167b8cNdcf71ae5.jpg"
>
<!--
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t21655/83/2186874549/15932/c273d29b/5b48802aN13fe73de.png"
><span>
剃须刀
</span></a></li>
-->
<span>
蓝牙耳机
</span>
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t21715/149/246679831/16257/ddbf2036/5b0565a7N8dbc0017.png"
><span>
路由器
</span></a></li>
-->
</router-link>
<!--
<li><a
><img
src=
"//img14.360buyimg.com/focus/s140x140_jfs/t1/4478/16/633/36008/5b923503E39b9dfa9/13b099f187576d8c.png"
><span>
月饼
</span></a></li>
-->
</li>
<!--
<li><a
><img
src=
"//img10.360buyimg.com/focus/s140x140_jfs/t1/1410/32/643/38009/5b9236b2Eb02fbf02/1e7de6987578dcdd.jpg"
><span>
牛奶
</span></a></li>
-->
<li>
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t1/4674/14/665/25245/5b9236bbE088d5efb/6c7c2f9857736c65.jpg"
><span>
男士内裤
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t1/1710/26/666/26147/5b9236c3E5fd1cd42/86c6bca8f4fe1efa.png"
><span>
小米8
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img11.360buyimg.com/focus/s140x140_jfs/t1/3653/6/655/42593/5b9236caEfef6235b/9e118f12705f52bb.png"
><span>
大闸蟹
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t23881/349/2204372862/9923/4c62864a/5b7693eeNf6883734.png"
><span>
三只松鼠
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t24253/294/2182777138/4059/429945c9/5b76990bNde226fbc.png"
><span>
充电宝
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t22051/318/235303191/9297/c5ea2761/5b055000N410a7553.png"
><span>
空调
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img10.360buyimg.com/focus/s140x140_jfs/t19960/243/653029866/38879/91bb398b/5b055555N9245f8aa.jpg"
><span>
电饭煲
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img12.360buyimg.com/focus/s140x140_jfs/t1/345/33/944/5582/5b9236d2E62d8da2e/99f72d51b8f195ed.jpg"
><span>
电话手表
</span></a></li>
-->
<!--
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t1/1446/14/631/8500/5b9237e5E0d1f9e16/b1a627b92323b5ed.png"
><span>
华为
</span></a></li>
-->
<li
v-for=
"category in childCategories"
>
<a
>
<a
>
<img
src=
"//img20.360buyimg.com/focus/jfs/t13759/194/897734755/2493/1305d4c4/5a1692ebN8ae73077.jpg"
>
<img
:src=
"category.picUrl"
/
>
<span>
iPhone
</span>
<span>
{{
category
.
name
}}
</span>
</a>
</a>
</li>
</li>
<div
style=
"clear:both"
></div>
</ul>
</div>
<div
class=
"category-div"
>
<h4>
热门分类
</h4>
<ul>
<li><a
><img
src=
"//img11.360buyimg.com/focus/s140x140_jfs/t21388/146/237407622/26923/221da1b3/5b054fedN2ba90518.jpg"
><span>
手机
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t20128/208/216721929/9242/472993da/5b05522dNa2aae1bb.png"
><span>
耳机
</span></a></li>
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t21655/83/2186874549/15932/c273d29b/5b48802aN13fe73de.png"
><span>
剃须刀
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t21715/149/246679831/16257/ddbf2036/5b0565a7N8dbc0017.png"
><span>
路由器
</span></a></li>
<li><a
><img
src=
"//img14.360buyimg.com/focus/s140x140_jfs/t1/4478/16/633/36008/5b923503E39b9dfa9/13b099f187576d8c.png"
><span>
月饼
</span></a></li>
<li><a
><img
src=
"//img10.360buyimg.com/focus/s140x140_jfs/t1/1410/32/643/38009/5b9236b2Eb02fbf02/1e7de6987578dcdd.jpg"
><span>
牛奶
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t1/4674/14/665/25245/5b9236bbE088d5efb/6c7c2f9857736c65.jpg"
><span>
男士内裤
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t1/1710/26/666/26147/5b9236c3E5fd1cd42/86c6bca8f4fe1efa.png"
><span>
小米8
</span></a></li>
<li><a
><img
src=
"//img11.360buyimg.com/focus/s140x140_jfs/t1/3653/6/655/42593/5b9236caEfef6235b/9e118f12705f52bb.png"
><span>
大闸蟹
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t23881/349/2204372862/9923/4c62864a/5b7693eeNf6883734.png"
><span>
三只松鼠
</span></a></li>
<li><a
><img
src=
"//img20.360buyimg.com/focus/s140x140_jfs/t24253/294/2182777138/4059/429945c9/5b76990bNde226fbc.png"
><span>
充电宝
</span></a></li>
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t22051/318/235303191/9297/c5ea2761/5b055000N410a7553.png"
><span>
空调
</span></a></li>
<li><a
><img
src=
"//img10.360buyimg.com/focus/s140x140_jfs/t19960/243/653029866/38879/91bb398b/5b055555N9245f8aa.jpg"
><span>
电饭煲
</span></a></li>
<li><a
><img
src=
"//img12.360buyimg.com/focus/s140x140_jfs/t1/345/33/944/5582/5b9236d2E62d8da2e/99f72d51b8f195ed.jpg"
><span>
电话手表
</span></a></li>
<li><a
><img
src=
"//img30.360buyimg.com/focus/s140x140_jfs/t1/1446/14/631/8500/5b9237e5E0d1f9e16/b1a627b92323b5ed.png"
><span>
华为
</span></a></li>
<div
style=
"clear:both"
>
<div
style=
"clear:both"
>
</div>
</div>
</ul>
</ul>
...
@@ -74,6 +82,8 @@
...
@@ -74,6 +82,8 @@
<
script
>
<
script
>
import
{
Search
}
from
"vant"
;
import
{
Search
}
from
"vant"
;
// import { GetAddressById } from '../../api/user';
import
{
getProductCategoryList
}
from
'../../api/product'
;
export
default
{
export
default
{
name
:
"userindex"
,
name
:
"userindex"
,
...
@@ -83,6 +93,8 @@ export default {
...
@@ -83,6 +93,8 @@ export default {
data
()
{
data
()
{
return
{
return
{
value
:
""
,
value
:
""
,
rootCategories
:
[],
childCategories
:
[],
activeKey
:
0
,
activeKey
:
0
,
fullHeight
:
document
.
documentElement
.
clientHeight
-
93
,
fullHeight
:
document
.
documentElement
.
clientHeight
-
93
,
fullWidth
:
document
.
documentElement
.
clientWidth
-
99
fullWidth
:
document
.
documentElement
.
clientWidth
-
99
...
@@ -90,11 +102,39 @@ export default {
...
@@ -90,11 +102,39 @@ export default {
},
},
methods
:
{
methods
:
{
onSearch
()
{
onSearch
()
{
// debugger;
// GetAddressById(1);
console
.
log
(
this
.
value
);
console
.
log
(
this
.
value
);
},
},
onClick
(
key
)
{
onClick
(
key
)
{
// debugger;
// GetAddressById(1);
// 设置 activeKey
this
.
activeKey
=
key
;
this
.
activeKey
=
key
;
// 读取子节点的分类
if
(
this
.
rootCategories
.
length
>
key
)
{
let
response
=
getProductCategoryList
(
this
.
rootCategories
[
key
].
id
);
response
.
then
(
data
=>
{
this
.
childCategories
=
data
;
});
}
}
}
},
mounted
()
{
let
response
=
getProductCategoryList
(
0
);
response
.
then
(
data
=>
{
// console.log(data);
// debugger;
// 设置根节点的分类
this
.
rootCategories
=
data
;
// 获得首个根节点的分类
if
(
data
&&
data
.
length
>
0
)
{
let
response
=
getProductCategoryList
(
data
[
0
].
id
);
response
.
then
(
data
=>
{
this
.
childCategories
=
data
;
});
}
});
}
}
};
};
</
script
>
</
script
>
...
...
product/product-application/src/main/java/cn/iocoder/mall/product/application/config/MVCConfiguration.java
浏览文件 @
40e4236a
...
@@ -3,10 +3,7 @@ package cn.iocoder.mall.product.application.config;
...
@@ -3,10 +3,7 @@ package cn.iocoder.mall.product.application.config;
import
cn.iocoder.common.framework.config.GlobalExceptionHandler
;
import
cn.iocoder.common.framework.config.GlobalExceptionHandler
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.web.servlet.config.annotation.EnableWebMvc
;
import
org.springframework.web.servlet.config.annotation.*
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
@EnableWebMvc
@EnableWebMvc
@Configuration
@Configuration
...
@@ -31,4 +28,13 @@ public class MVCConfiguration implements WebMvcConfigurer {
...
@@ -31,4 +28,13 @@ public class MVCConfiguration implements WebMvcConfigurer {
registry
.
addResourceHandler
(
"webjars/**"
).
addResourceLocations
(
"classpath:/META-INF/resources/webjars/"
);
registry
.
addResourceHandler
(
"webjars/**"
).
addResourceLocations
(
"classpath:/META-INF/resources/webjars/"
);
}
}
// TODO 芋艿,允许跨域
@Override
public
void
addCorsMappings
(
CorsRegistry
registry
)
{
registry
.
addMapping
(
"/**"
)
.
allowedHeaders
(
"*"
)
.
allowedMethods
(
"*"
)
.
allowedOrigins
(
"*"
);
}
}
}
\ No newline at end of file
product/product-application/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductCategoryController.java
浏览文件 @
40e4236a
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
users
;
package
cn
.
iocoder
.
mall
.
product
.
application
.
controller
.
users
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.product.api.ProductCategoryService
;
import
cn.iocoder.mall.product.api.ProductCategoryService
;
import
cn.iocoder.mall.product.api.bo.ProductCategoryBO
;
import
cn.iocoder.mall.product.api.bo.ProductCategoryBO
;
import
cn.iocoder.mall.product.application.convert.ProductCategoryConvert
;
import
cn.iocoder.mall.product.application.convert.ProductCategoryConvert
;
...
@@ -26,9 +27,9 @@ public class UsersProductCategoryController {
...
@@ -26,9 +27,9 @@ public class UsersProductCategoryController {
@GetMapping
(
"/list"
)
@GetMapping
(
"/list"
)
@ApiOperation
(
"获得指定编号下的子分类的数组"
)
@ApiOperation
(
"获得指定编号下的子分类的数组"
)
@ApiImplicitParam
(
name
=
"pid"
,
value
=
"指定分类编号"
,
required
=
true
,
example
=
"0"
)
@ApiImplicitParam
(
name
=
"pid"
,
value
=
"指定分类编号"
,
required
=
true
,
example
=
"0"
)
public
List
<
UsersProductCategoryVO
>
list
(
@RequestParam
(
"pid"
)
Integer
pid
)
{
public
CommonResult
<
List
<
UsersProductCategoryVO
>
>
list
(
@RequestParam
(
"pid"
)
Integer
pid
)
{
List
<
ProductCategoryBO
>
result
=
productCategoryService
.
getListByPid
(
pid
);
List
<
ProductCategoryBO
>
result
=
productCategoryService
.
getListByPid
(
pid
);
return
ProductCategoryConvert
.
INSTANCE
.
convertToVO
(
result
);
return
CommonResult
.
success
(
ProductCategoryConvert
.
INSTANCE
.
convertToVO
(
result
)
);
}
}
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论