Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
ad82b780
Commit
ad82b780
authored
Jun 26, 2018
by
Junling Bu
Browse files
feat[litemall-admin, litemall-admin-api]:商品上架页面。
在这一个页面同时添加商品相关的四个表,包括商品基本信息、商品规格、商品货品、商品参数。
parent
897980ed
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/GoodsAllinone.java
0 → 100644
View file @
ad82b780
package
org.linlinjava.litemall.admin.dao
;
import
org.linlinjava.litemall.db.domain.LitemallGoods
;
import
org.linlinjava.litemall.db.domain.LitemallGoodsAttribute
;
import
org.linlinjava.litemall.db.domain.LitemallGoodsSpecification
;
import
org.linlinjava.litemall.db.domain.LitemallProduct
;
public
class
GoodsAllinone
{
LitemallGoods
goods
;
LitemallGoodsSpecification
[]
specifications
;
LitemallGoodsAttribute
[]
attributes
;
// 这里采用 Product 再转换到 LitemallProduct
Product
[]
products
;
public
LitemallGoods
getGoods
()
{
return
goods
;
}
public
Product
[]
getProducts
()
{
return
products
;
}
public
void
setProducts
(
Product
[]
products
)
{
this
.
products
=
products
;
}
public
void
setGoods
(
LitemallGoods
goods
)
{
this
.
goods
=
goods
;
}
public
LitemallGoodsSpecification
[]
getSpecifications
()
{
return
specifications
;
}
public
void
setSpecifications
(
LitemallGoodsSpecification
[]
specifications
)
{
this
.
specifications
=
specifications
;
}
public
LitemallGoodsAttribute
[]
getAttributes
()
{
return
attributes
;
}
public
void
setAttributes
(
LitemallGoodsAttribute
[]
attributes
)
{
this
.
attributes
=
attributes
;
}
}
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/dao/Product.java
0 → 100644
View file @
ad82b780
package
org.linlinjava.litemall.admin.dao
;
import
java.math.BigDecimal
;
public
class
Product
{
String
[]
specifications
;
BigDecimal
price
;
Integer
number
;
String
url
;
public
String
[]
getSpecifications
()
{
return
specifications
;
}
public
void
setSpecifications
(
String
[]
specifications
)
{
this
.
specifications
=
specifications
;
}
public
BigDecimal
getPrice
()
{
return
price
;
}
public
void
setPrice
(
BigDecimal
price
)
{
this
.
price
=
price
;
}
public
Integer
getNumber
()
{
return
number
;
}
public
void
setNumber
(
Integer
number
)
{
this
.
number
=
number
;
}
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
String
url
)
{
this
.
url
=
url
;
}
}
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/util/CatVo.java
0 → 100644
View file @
ad82b780
package
org.linlinjava.litemall.admin.util
;
import
java.util.List
;
public
class
CatVo
{
private
Integer
value
=
null
;
private
String
label
=
null
;
private
List
children
=
null
;
public
Integer
getValue
()
{
return
value
;
}
public
void
setValue
(
Integer
value
)
{
this
.
value
=
value
;
}
public
String
getLabel
()
{
return
label
;
}
public
void
setLabel
(
String
label
)
{
this
.
label
=
label
;
}
public
List
getChildren
()
{
return
children
;
}
public
void
setChildren
(
List
children
)
{
this
.
children
=
children
;
}
}
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminCategoryController.java
View file @
ad82b780
...
@@ -3,6 +3,7 @@ package org.linlinjava.litemall.admin.web;
...
@@ -3,6 +3,7 @@ package org.linlinjava.litemall.admin.web;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.admin.util.CatVo
;
import
org.linlinjava.litemall.db.domain.LitemallCategory
;
import
org.linlinjava.litemall.db.domain.LitemallCategory
;
import
org.linlinjava.litemall.db.service.LitemallCategoryService
;
import
org.linlinjava.litemall.db.service.LitemallCategoryService
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
...
@@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -98,4 +100,35 @@ public class AdminCategoryController {
...
@@ -98,4 +100,35 @@ public class AdminCategoryController {
return
ResponseUtil
.
ok
(
data
);
return
ResponseUtil
.
ok
(
data
);
}
}
@GetMapping
(
"/list2"
)
public
Object
list2
(
@LoginAdmin
Integer
adminId
)
{
if
(
adminId
==
null
)
{
return
ResponseUtil
.
unlogin
();
}
List
<
LitemallCategory
>
l1CatList
=
categoryService
.
queryL1
();
List
<
CatVo
>
list
=
new
ArrayList
<>(
l1CatList
.
size
());
for
(
LitemallCategory
l1
:
l1CatList
){
CatVo
l1CatVo
=
new
CatVo
();
l1CatVo
.
setValue
(
l1
.
getId
());
l1CatVo
.
setLabel
(
l1
.
getName
());
List
<
LitemallCategory
>
l2CatList
=
categoryService
.
queryByPid
(
l1
.
getId
());
List
<
CatVo
>
children
=
new
ArrayList
<>(
l2CatList
.
size
());
for
(
LitemallCategory
l2
:
l2CatList
)
{
CatVo
l2CatVo
=
new
CatVo
();
l2CatVo
.
setValue
(
l2
.
getId
());
l2CatVo
.
setLabel
(
l2
.
getName
());
children
.
add
(
l2CatVo
);
}
l1CatVo
.
setChildren
(
children
);
list
.
add
(
l1CatVo
);
}
return
ResponseUtil
.
ok
(
list
);
}
}
}
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java
View file @
ad82b780
package
org.linlinjava.litemall.admin.web
;
package
org.linlinjava.litemall.admin.web
;
import
io.swagger.models.auth.In
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.admin.dao.GoodsAllinone
;
import
org.linlinjava.litemall.admin.dao.Product
;
import
org.linlinjava.litemall.db.domain.LitemallGoods
;
import
org.linlinjava.litemall.db.domain.LitemallGoods
;
import
org.linlinjava.litemall.db.domain.LitemallGoodsAttribute
;
import
org.linlinjava.litemall.db.domain.LitemallGoodsSpecification
;
import
org.linlinjava.litemall.db.domain.LitemallProduct
;
import
org.linlinjava.litemall.db.service.LitemallGoodsAttributeService
;
import
org.linlinjava.litemall.db.service.LitemallGoodsService
;
import
org.linlinjava.litemall.db.service.LitemallGoodsService
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
import
org.linlinjava.litemall.db.service.LitemallGoodsSpecificationService
;
import
org.linlinjava.litemall.db.service.LitemallProductService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.support.DefaultTransactionDefinition
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -18,8 +34,17 @@ import java.util.Map;
...
@@ -18,8 +34,17 @@ import java.util.Map;
public
class
AdminGoodsController
{
public
class
AdminGoodsController
{
private
final
Log
logger
=
LogFactory
.
getLog
(
AdminGoodsController
.
class
);
private
final
Log
logger
=
LogFactory
.
getLog
(
AdminGoodsController
.
class
);
@Autowired
private
PlatformTransactionManager
txManager
;
@Autowired
@Autowired
private
LitemallGoodsService
goodsService
;
private
LitemallGoodsService
goodsService
;
@Autowired
private
LitemallGoodsSpecificationService
specificationService
;
@Autowired
private
LitemallGoodsAttributeService
attributeService
;
@Autowired
private
LitemallProductService
productService
;
@GetMapping
(
"/list"
)
@GetMapping
(
"/list"
)
public
Object
list
(
@LoginAdmin
Integer
adminId
,
public
Object
list
(
@LoginAdmin
Integer
adminId
,
...
@@ -81,4 +106,73 @@ public class AdminGoodsController {
...
@@ -81,4 +106,73 @@ public class AdminGoodsController {
return
ResponseUtil
.
ok
();
return
ResponseUtil
.
ok
();
}
}
@PostMapping
(
"/publish"
)
public
Object
publish
(
@LoginAdmin
Integer
adminId
,
@RequestBody
GoodsAllinone
goodsAllinone
){
if
(
adminId
==
null
){
return
ResponseUtil
.
unlogin
();
}
LitemallGoods
goods
=
goodsAllinone
.
getGoods
();
LitemallGoodsAttribute
[]
attributes
=
goodsAllinone
.
getAttributes
();
LitemallGoodsSpecification
[]
specifications
=
goodsAllinone
.
getSpecifications
();
Product
[]
products
=
goodsAllinone
.
getProducts
();
String
name
=
goods
.
getName
();
if
(
goodsService
.
checkExistByName
(
name
)){
return
ResponseUtil
.
fail
(
403
,
"商品名已经存在"
);
}
// 开启事务管理
DefaultTransactionDefinition
def
=
new
DefaultTransactionDefinition
();
def
.
setPropagationBehavior
(
TransactionDefinition
.
PROPAGATION_REQUIRED
);
TransactionStatus
status
=
txManager
.
getTransaction
(
def
);
try
{
// 商品基本信息表litemall_goods
goods
.
setAddTime
(
LocalDateTime
.
now
());
goodsService
.
add
(
goods
);
// 商品规格表litemall_goods_specification
Map
<
String
,
Integer
>
specIds
=
new
HashMap
<>();
for
(
LitemallGoodsSpecification
specification
:
specifications
){
specification
.
setGoodsId
(
goods
.
getId
());
specification
.
setAddTime
(
LocalDateTime
.
now
());
specificationService
.
add
(
specification
);
specIds
.
put
(
specification
.
getValue
(),
specification
.
getId
());
}
// 商品参数表litemall_goods_attribute
for
(
LitemallGoodsAttribute
attribute
:
attributes
){
attribute
.
setGoodsId
(
goods
.
getId
());
attribute
.
setAddTime
(
LocalDateTime
.
now
());
attributeService
.
add
(
attribute
);
}
// 商品货品表litemall_product
for
(
Product
product
:
products
){
LitemallProduct
litemallProduct
=
new
LitemallProduct
();
litemallProduct
.
setRetailPrice
(
product
.
getPrice
());
litemallProduct
.
setGoodsNumber
(
product
.
getNumber
());
litemallProduct
.
setUrl
(
product
.
getUrl
());
litemallProduct
.
setGoodsId
(
goods
.
getId
());
litemallProduct
.
setAddTime
(
LocalDateTime
.
now
());
String
[]
values
=
product
.
getSpecifications
();
Integer
[]
ids
=
new
Integer
[
values
.
length
];
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++){
ids
[
i
]
=
specIds
.
get
(
values
[
i
]);
}
Arrays
.
sort
(
ids
);
litemallProduct
.
setGoodsSpecificationIds
(
ids
);
productService
.
add
(
litemallProduct
);
}
}
catch
(
Exception
ex
)
{
txManager
.
rollback
(
status
);
logger
.
error
(
"系统内部错误"
,
ex
);
}
txManager
.
commit
(
status
);
return
ResponseUtil
.
ok
();
}
}
}
litemall-admin/src/api/category.js
View file @
ad82b780
...
@@ -46,3 +46,11 @@ export function deleteCategory(data) {
...
@@ -46,3 +46,11 @@ export function deleteCategory(data) {
data
data
})
})
}
}
export
function
listCategory2
(
query
)
{
return
request
({
url
:
'
/category/list2
'
,
method
:
'
get
'
,
params
:
query
})
}
litemall-admin/src/api/goods.js
View file @
ad82b780
...
@@ -39,3 +39,11 @@ export function deleteGoods(data) {
...
@@ -39,3 +39,11 @@ export function deleteGoods(data) {
data
data
})
})
}
}
export
function
publishGoods
(
data
)
{
return
request
({
url
:
'
/goods/publish
'
,
method
:
'
post
'
,
data
})
}
litemall-admin/src/api/storage.js
View file @
ad82b780
...
@@ -64,3 +64,6 @@ export function deleteStorage(data) {
...
@@ -64,3 +64,6 @@ export function deleteStorage(data) {
export
function
getUploadApi
(
data
)
{
export
function
getUploadApi
(
data
)
{
return
process
.
env
.
OS_API
+
'
/storage/create
'
return
process
.
env
.
OS_API
+
'
/storage/create
'
}
}
const
uploadPath
=
process
.
env
.
OS_API
+
'
/storage/create
'
export
{
uploadPath
}
litemall-admin/src/router/index.js
View file @
ad82b780
...
@@ -98,6 +98,7 @@ export const asyncRouterMap = [
...
@@ -98,6 +98,7 @@ export const asyncRouterMap = [
icon
:
'
chart
'
icon
:
'
chart
'
},
},
children
:
[
children
:
[
{
path
:
'
publish
'
,
component
:
_import
(
'
goods/publish
'
),
name
:
'
publish
'
,
meta
:
{
title
:
'
商品上架
'
,
noCache
:
true
}},
{
path
:
'
goods
'
,
component
:
_import
(
'
goods/goods
'
),
name
:
'
goods
'
,
meta
:
{
title
:
'
商品管理
'
,
noCache
:
true
}},
{
path
:
'
goods
'
,
component
:
_import
(
'
goods/goods
'
),
name
:
'
goods
'
,
meta
:
{
title
:
'
商品管理
'
,
noCache
:
true
}},
{
path
:
'
attribute
'
,
component
:
_import
(
'
goods/attribute
'
),
name
:
'
attribute
'
,
meta
:
{
title
:
'
商品参数
'
,
noCache
:
true
}},
{
path
:
'
attribute
'
,
component
:
_import
(
'
goods/attribute
'
),
name
:
'
attribute
'
,
meta
:
{
title
:
'
商品参数
'
,
noCache
:
true
}},
{
path
:
'
specification
'
,
component
:
_import
(
'
goods/specification
'
),
name
:
'
specification
'
,
meta
:
{
title
:
'
商品规格
'
,
noCache
:
true
}},
{
path
:
'
specification
'
,
component
:
_import
(
'
goods/specification
'
),
name
:
'
specification
'
,
meta
:
{
title
:
'
商品规格
'
,
noCache
:
true
}},
...
...
litemall-admin/src/utils/request.js
View file @
ad82b780
...
@@ -50,7 +50,8 @@ service.interceptors.response.use(
...
@@ -50,7 +50,8 @@ service.interceptors.response.use(
})
})
return
Promise
.
reject
(
'
error
'
)
return
Promise
.
reject
(
'
error
'
)
}
else
if
(
res
.
errno
!==
0
)
{
}
else
if
(
res
.
errno
!==
0
)
{
return
Promise
.
reject
(
'
error
'
)
// 非5xx的错误属于业务错误,留给具体页面处理
return
Promise
.
reject
(
response
)
}
else
{
}
else
{
return
response
return
response
}
}
...
...
litemall-admin/src/views/goods/goods.vue
View file @
ad82b780
...
@@ -181,8 +181,7 @@
...
@@ -181,8 +181,7 @@
</el-form>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogFormVisible = false"
>
取消
</el-button>
<el-button
@
click=
"dialogFormVisible = false"
>
取消
</el-button>
<el-button
v-if=
"dialogStatus=='create'"
type=
"primary"
@
click=
"createData"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"updateData"
>
确定
</el-button>
<el-button
v-else
type=
"primary"
@
click=
"updateData"
>
确定
</el-button>
</div>
</div>
</el-dialog>
</el-dialog>
...
@@ -208,7 +207,7 @@
...
@@ -208,7 +207,7 @@
</
style
>
</
style
>
<
script
>
<
script
>
import
{
listGoods
,
createGoods
,
updateGoods
,
deleteGoods
}
from
'
@/api/goods
'
import
{
listGoods
,
updateGoods
,
deleteGoods
}
from
'
@/api/goods
'
import
{
createStorage
,
getUploadApi
}
from
'
@/api/storage
'
import
{
createStorage
,
getUploadApi
}
from
'
@/api/storage
'
import
waves
from
'
@/directive/waves
'
// 水波纹指令
import
waves
from
'
@/directive/waves
'
// 水波纹指令
import
BackToTop
from
'
@/components/BackToTop
'
import
BackToTop
from
'
@/components/BackToTop
'
...
@@ -359,28 +358,7 @@ export default {
...
@@ -359,28 +358,7 @@ export default {
}
}
},
},
handleCreate
()
{
handleCreate
()
{
this
.
resetForm
()
this
.
$router
.
push
({
path
:
'
/goods/publish
'
})
this
.
dialogStatus
=
'
create
'
this
.
dialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'
dataForm
'
].
clearValidate
()
})
},
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
createGoods
(
this
.
dataForm
).
then
(
response
=>
{
this
.
list
.
unshift
(
response
.
data
.
data
)
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
创建成功
'
,
type
:
'
success
'
,
duration
:
2000
})
})
}
})
},
},
handleUpdate
(
row
)
{
handleUpdate
(
row
)
{
this
.
dataForm
=
Object
.
assign
({},
row
)
this
.
dataForm
=
Object
.
assign
({},
row
)
...
...
litemall-admin/src/views/goods/product.vue
View file @
ad82b780
...
@@ -6,7 +6,6 @@
...
@@ -6,7 +6,6 @@
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入商品ID"
v-model=
"listQuery.goodsId"
>
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入商品ID"
v-model=
"listQuery.goodsId"
>
</el-input>
</el-input>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
添加
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-download"
@
click=
"handleDownload"
:loading=
"downloadLoading"
>
导出
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-download"
@
click=
"handleDownload"
:loading=
"downloadLoading"
>
导出
</el-button>
</div>
</div>
...
@@ -42,7 +41,6 @@
...
@@ -42,7 +41,6 @@
<el-table-column
align=
"center"
label=
"操作"
width=
"250"
class-name=
"small-padding fixed-width"
>
<el-table-column
align=
"center"
label=
"操作"
width=
"250"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
编辑
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
编辑
</el-button>
<el-button
type=
"danger"
size=
"mini"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -54,20 +52,8 @@
...
@@ -54,20 +52,8 @@
</el-pagination>
</el-pagination>
</div>
</div>
<el-dialog
title=
"添加货品"
:visible.sync=
"createDialogFormVisible"
>
<el-form
:rules=
"rules"
ref=
"dataForm"
:model=
"dataForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-input
v-model=
"dataForm.goodsId"
></el-input>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"createDialogFormVisible = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"createData"
>
确定
</el-button>
</div>
</el-dialog>
<!-- 修改对话框 -->
<!-- 修改对话框 -->
<el-dialog
title=
"
修改
货品"
:visible.sync=
"editDialogFormVisible"
>
<el-dialog
title=
"
编辑商品
货品"
:visible.sync=
"editDialogFormVisible"
>
<el-form
:rules=
"rules"
ref=
"dataForm"
:model=
"dataForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
<el-form
:rules=
"rules"
ref=
"dataForm"
:model=
"dataForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-input
v-model=
"dataForm.goodsId"
:disabled=
"true"
></el-input>
<el-input
v-model=
"dataForm.goodsId"
:disabled=
"true"
></el-input>
...
@@ -112,7 +98,7 @@
...
@@ -112,7 +98,7 @@
</
style
>
</
style
>
<
script
>
<
script
>
import
{
listProduct
,
createProduct
,
updateProduct
,
dele
teProduct
}
from
'
@/api/product
'
import
{
listProduct
,
upda
teProduct
}
from
'
@/api/product
'
import
{
createStorage
}
from
'
@/api/storage
'
import
{
createStorage
}
from
'
@/api/storage
'
import
waves
from
'
@/directive/waves
'
// 水波纹指令
import
waves
from
'
@/directive/waves
'
// 水波纹指令
...
@@ -133,7 +119,6 @@ export default {
...
@@ -133,7 +119,6 @@ export default {
goodsId
:
undefined
,
goodsId
:
undefined
,
sort
:
'
+id
'
sort
:
'
+id
'
},
},
createDialogFormVisible
:
false
,
editDialogFormVisible
:
false
,
editDialogFormVisible
:
false
,
dataForm
:
{
dataForm
:
{
id
:
undefined
,
id
:
undefined
,
...
@@ -197,29 +182,6 @@ export default {
...
@@ -197,29 +182,6 @@ export default {
this
.
$message
.
error
(
'
上传失败,请重新上传
'
)
this
.
$message
.
error
(
'
上传失败,请重新上传
'
)
})
})
},
},
handleCreate
()
{
this
.
resetForm
()
this
.
createDialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'
dataForm
'
].
clearValidate
()
})
},
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
createProduct
(
this
.
dataForm
).
then
(
response
=>
{
this
.
getList
()
this
.
createDialogFormVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
创建成功
'
,
type
:
'
success
'
,
duration
:
2000
})
})
}
})
},
handleUpdate
(
row
)
{
handleUpdate
(
row
)
{
this
.
dataForm
=
Object
.
assign
({},
row
)
this
.
dataForm
=
Object
.
assign
({},
row
)
this
.
editDialogFormVisible
=
true
this
.
editDialogFormVisible
=
true
...
@@ -249,18 +211,6 @@ export default {
...
@@ -249,18 +211,6 @@ export default {
}
}
})
})
},
},
handleDelete
(
row
)
{
deleteProduct
(
row
).
then
(
response
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
删除成功
'
,
type
:
'
success
'
,
duration
:
2000
})
const
index
=
this
.
list
.
indexOf
(
row
)
this
.
list
.
splice
(
index
,
1
)
})
},
handleDownload
()
{
handleDownload
()
{
this
.
downloadLoading
=
true
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
...
...
litemall-admin/src/views/goods/publish.vue
0 → 100644
View file @
ad82b780
This diff is collapsed.
Click to expand it.
litemall-admin/src/views/goods/specification.vue
View file @
ad82b780
...
@@ -6,7 +6,6 @@
...
@@ -6,7 +6,6 @@
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入商品ID"
v-model=
"listQuery.goodsId"
>
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入商品ID"
v-model=
"listQuery.goodsId"
>
</el-input>
</el-input>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
@
click=
"handleCreate"
icon=
"el-icon-edit"
>
添加
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
:loading=
"downloadLoading"
v-waves
icon=
"el-icon-download"
@
click=
"handleDownload"
>
导出
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
:loading=
"downloadLoading"
v-waves
icon=
"el-icon-download"
@
click=
"handleDownload"
>
导出
</el-button>
</div>
</div>
...
@@ -30,7 +29,6 @@
...
@@ -30,7 +29,6 @@
<el-table-column
align=
"center"
label=
"操作"
width=
"250"
class-name=
"small-padding fixed-width"
>
<el-table-column
align=
"center"
label=
"操作"
width=
"250"
class-name=
"small-padding fixed-width"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
编辑
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate(scope.row)"
>
编辑
</el-button>
<el-button
type=
"danger"
size=
"mini"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -42,8 +40,8 @@
...
@@ -42,8 +40,8 @@
</el-pagination>
</el-pagination>
</div>
</div>
<!--
添加或
修改对话框 -->
<!-- 修改对话框 -->
<el-dialog
:
title=
"
textMap[dialogStatus]
"
:visible.sync=
"dialogFormVisible"
>
<el-dialog
title=
"
编辑商品规格
"
:visible.sync=
"dialogFormVisible"
>
<el-form
:rules=
"rules"
ref=
"dataForm"
:model=
"dataForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
<el-form
:rules=
"rules"
ref=
"dataForm"
:model=
"dataForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-form-item
label=
"商品ID"
prop=
"goodsId"
>
<el-input
v-model=
"dataForm.goodsId"
></el-input>
<el-input
v-model=
"dataForm.goodsId"
></el-input>
...
@@ -60,8 +58,7 @@
...
@@ -60,8 +58,7 @@
</el-form>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogFormVisible = false"
>
取消
</el-button>
<el-button
@
click=
"dialogFormVisible = false"
>
取消
</el-button>
<el-button
v-if=
"dialogStatus=='create'"
type=
"primary"
@
click=
"createData"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"updateData"
>
确定
</el-button>
<el-button
v-else
type=
"primary"
@
click=
"updateData"
>
确定
</el-button>
</div>
</div>
</el-dialog>
</el-dialog>
...
@@ -69,7 +66,7 @@
...
@@ -69,7 +66,7 @@
</template>
</template>
<
script
>
<
script
>
import
{
listGoodsSpecification
,
createGoodsSpecification
,
updateGoodsSpecification
,
dele
teGoodsSpecification
}
from
'
@/api/goods-specification
'
import
{
listGoodsSpecification
,
upda
teGoodsSpecification
}
from
'
@/api/goods-specification
'
import
waves
from
'
@/directive/waves
'
// 水波纹指令
import
waves
from
'
@/directive/waves
'
// 水波纹指令
export
default
{
export
default
{
...
@@ -97,10 +94,6 @@ export default {
...
@@ -97,10 +94,6 @@ export default {
},
},
dialogFormVisible
:
false
,
dialogFormVisible
:
false
,
dialogStatus
:
''
,
dialogStatus
:
''
,
textMap
:
{
update
:
'
编辑
'
,
create
:
'
创建
'
},
rules
:
{
rules
:
{
goodsId
:
[{
required
:
true
,
message
:
'
商品ID不能为空
'
,
trigger
:
'
blur
'
}],
goodsId
:
[{
required
:
true
,
message
:
'
商品ID不能为空
'
,
trigger
:
'
blur
'
}],
specification
:
[{
required
:
true
,
message
:
'
商品规格名称不能为空
'
,
trigger
:
'
blur
'
}],
specification
:
[{
required
:
true
,
message
:
'
商品规格名称不能为空
'
,
trigger
:
'
blur
'
}],
...
@@ -146,30 +139,6 @@ export default {
...
@@ -146,30 +139,6 @@ export default {
picUrl
:
undefined
picUrl
:
undefined
}
}
},
},
handleCreate
()
{
this
.
resetForm
()
this
.
dialogStatus
=
'
create
'
this
.
dialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'
dataForm
'
].
clearValidate
()
})
},
createData
()
{
this
.
$refs
[
'
dataForm
'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
createGoodsSpecification
(
this
.
dataForm
).
then
(
response
=>
{
this
.
list
.
unshift
(
response
.
data
.
data
)
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
创建成功
'
,
type
:
'
success
'
,
duration
:
2000
})
})
}
})
},
handleUpdate
(
row
)
{
handleUpdate
(
row
)
{
this
.
dataForm
=
Object
.
assign
({},
row
)
this
.
dataForm
=
Object
.
assign
({},
row
)
this
.
dialogStatus
=
'
update
'
this
.
dialogStatus
=
'
update
'
...
@@ -200,18 +169,6 @@ export default {
...
@@ -200,18 +169,6 @@ export default {
}
}
})
})
},
},
handleDelete
(
row
)
{
deleteGoodsSpecification
(
row
).
then
(
response
=>
{
this
.
$notify
({
title
:
'
成功
'
,
message
:
'
删除成功
'
,
type
:
'
success
'
,
duration
:
2000
})
const
index
=
this
.
list
.
indexOf
(
row
)
this
.
list
.
splice
(
index
,
1
)
})
},
handleDownload
()
{
handleDownload
()
{
this
.
downloadLoading
=
true
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGoodsService.java
View file @
ad82b780
...
@@ -207,4 +207,10 @@ public class LitemallGoodsService {
...
@@ -207,4 +207,10 @@ public class LitemallGoodsService {
}
}
return
cats
;
return
cats
;
}
}
public
boolean
checkExistByName
(
String
name
)
{
LitemallGoodsExample
example
=
new
LitemallGoodsExample
();
example
.
or
().
andNameEqualTo
(
name
).
andDeletedEqualTo
(
false
);
return
goodsMapper
.
countByExample
(
example
)
!=
0
;
}
}
}
Write
Preview
Supports
Markdown
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