Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
a5d6d18b
authored
Jan 10, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
📖
MALL:优化商品列表的样式
parent
ab64a1d1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
73 additions
and
67 deletions
+73
-67
src/utils/index.ts
+4
-4
src/views/mall/product/spu/index.vue
+69
-63
No files found.
src/utils/index.ts
View file @
a5d6d18b
...
...
@@ -194,10 +194,10 @@ export const copyValueToTarget = (target, source) => {
* 将一个整数转换为分数保留两位小数
* @param num
*/
export
const
formatToFraction
=
(
num
:
number
|
string
|
undefined
):
number
=>
{
if
(
typeof
num
===
'undefined'
)
return
0
export
const
formatToFraction
=
(
num
:
number
|
string
|
undefined
):
string
=>
{
if
(
typeof
num
===
'undefined'
)
return
'0.00'
const
parsedNumber
=
typeof
num
===
'string'
?
parseFloat
(
num
)
:
num
return
parseFloat
((
parsedNumber
/
100
).
toFixed
(
2
)
)
return
(
parsedNumber
/
100.0
).
toFixed
(
2
)
}
/**
...
...
@@ -249,7 +249,7 @@ export const yuanToFen = (amount: string | number): number => {
/**
* 分转元
*/
export
const
fenToYuan
=
(
price
:
string
|
number
):
number
=>
{
export
const
fenToYuan
=
(
price
:
string
|
number
):
string
=>
{
return
formatToFraction
(
price
)
}
...
...
src/views/mall/product/spu/index.vue
View file @
a5d6d18b
<!-- 商品中心 - 商品列表 -->
<
template
>
<!-- 搜索工作栏 -->
<ContentWrap>
...
...
@@ -125,27 +126,33 @@
</el-form>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"商品编号"
min-width=
"6
0"
prop=
"id"
/>
<el-table-column
label=
"商品
图"
min-width=
"8
0"
>
<el-table-column
label=
"商品编号"
min-width=
"14
0"
prop=
"id"
/>
<el-table-column
label=
"商品
信息"
min-width=
"30
0"
>
<
template
#
default=
"{ row }"
>
<el-image
:src=
"row.picUrl"
class=
"h-30px w-30px"
@
click=
"imagePreview(row.picUrl)"
/>
<div
class=
"flex"
>
<el-image
fit=
"cover"
:src=
"row.picUrl"
class=
"flex-none w-50px h-50px"
@
click=
"imagePreview(row.picUrl)"
/>
<div
class=
"ml-4 overflow-hidden"
>
<el-tooltip
effect=
"dark"
:content=
"row.name"
placement=
"top"
>
<div>
{{
row
.
name
}}
</div>
</el-tooltip>
</div>
</div>
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"商品名称"
min-width=
"300"
prop=
"name"
/>
<el-table-column
align=
"center"
label=
"商品售价"
min-width=
"90"
prop=
"price"
>
<
template
#
default=
"{ row }"
>
{{
fenToYuan
(
row
.
price
)
}}
元
</
template
>
<el-table-column
align=
"center"
label=
"价格"
min-width=
"160"
prop=
"price"
>
<
template
#
default=
"{ row }"
>
¥
{{
fenToYuan
(
row
.
price
)
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"销量"
min-width=
"90"
prop=
"salesCount"
/>
<el-table-column
align=
"center"
label=
"库存"
min-width=
"90"
prop=
"stock"
/>
<el-table-column
align=
"center"
label=
"排序"
min-width=
"70"
prop=
"sort"
/>
<el-table-column
:formatter=
"dateFormatter"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
/>
<el-table-column
align=
"center"
label=
"状态"
min-width=
"80"
>
<el-table-column
align=
"center"
label=
"销售状态"
min-width=
"80"
>
<
template
#
default=
"{ row }"
>
<template
v-if=
"row.status >= 0"
>
<el-switch
...
...
@@ -163,16 +170,16 @@
</
template
>
</template>
</el-table-column>
<el-table-column
:formatter=
"dateFormatter"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
/>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
min-width=
"200"
>
<
template
#
default=
"{ row }"
>
<el-button
v-hasPermi=
"['product:spu:update']"
link
type=
"primary"
@
click=
"openDetail(row.id)"
>
详情
</el-button>
<el-button
link
type=
"primary"
@
click=
"openDetail(row.id)"
>
详情
</el-button>
<el-button
v-hasPermi=
"['product:spu:update']"
link
...
...
@@ -196,17 +203,17 @@
type=
"primary"
@
click=
"handleStatus02Change(row, ProductSpuStatusEnum.DISABLE.status)"
>
恢复
到仓库
恢复
</el-button>
</
template
>
<
template
v-else
>
<el-button
v-hasPermi=
"['product:spu:update']"
link
type=
"
primary
"
type=
"
danger
"
@
click=
"handleStatus02Change(row, ProductSpuStatusEnum.RECYCLE.status)"
>
加入回收站
回收
</el-button>
</
template
>
</template>
...
...
@@ -236,48 +243,41 @@ defineOptions({ name: 'ProductSpu' })
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
const
{
currentRoute
,
push
}
=
useRouter
()
// 路由跳转
const
{
push
}
=
useRouter
()
// 路由跳转
const
loading
=
ref
(
false
)
// 列表的加载中
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
<
any
[]
>
([])
// 列表的数据
const
list
=
ref
<
ProductSpuApi
.
Spu
[]
>
([])
// 列表的数据
// tabs 数据
const
tabsData
=
ref
([
{
count
:
0
,
name
:
'出售中商品'
,
type
:
0
name
:
'出售中'
,
type
:
0
,
count
:
0
},
{
count
:
0
,
name
:
'仓库中商品'
,
type
:
1
name
:
'仓库中'
,
type
:
1
,
count
:
0
},
{
count
:
0
,
name
:
'已售罄商品'
,
type
:
2
name
:
'已售罄'
,
type
:
2
,
count
:
0
},
{
count
:
0
,
name
:
'警戒库存'
,
type
:
3
type
:
3
,
count
:
0
},
{
count
:
0
,
name
:
'商品回收站'
,
type
:
4
name
:
'回收站'
,
type
:
4
,
count
:
0
}
])
/** 获得每个 Tab 的数量 */
const
getTabsCount
=
async
()
=>
{
const
res
=
await
ProductSpuApi
.
getTabsCount
()
for
(
let
objName
in
res
)
{
tabsData
.
value
[
Number
(
objName
)].
count
=
res
[
objName
]
}
}
const
queryParams
=
ref
({
pageNo
:
1
,
pageSize
:
10
,
...
...
@@ -288,11 +288,6 @@ const queryParams = ref({
})
// 查询参数
const
queryFormRef
=
ref
()
// 搜索的表单Ref
const
handleTabClick
=
(
tab
:
TabsPaneContext
)
=>
{
queryParams
.
value
.
tabType
=
tab
.
paneName
as
number
getList
()
}
/** 查询列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
...
...
@@ -305,8 +300,22 @@ const getList = async () => {
}
}
/** 切换 Tab */
const
handleTabClick
=
(
tab
:
TabsPaneContext
)
=>
{
queryParams
.
value
.
tabType
=
tab
.
paneName
as
number
getList
()
}
/** 获得每个 Tab 的数量 */
const
getTabsCount
=
async
()
=>
{
const
res
=
await
ProductSpuApi
.
getTabsCount
()
for
(
let
objName
in
res
)
{
tabsData
.
value
[
Number
(
objName
)].
count
=
res
[
objName
]
}
}
/** 添加到仓库 / 回收站的状态 */
const
handleStatus02Change
=
async
(
row
,
newStatus
:
number
)
=>
{
const
handleStatus02Change
=
async
(
row
:
any
,
newStatus
:
number
)
=>
{
try
{
// 二次确认
const
text
=
newStatus
===
ProductSpuStatusEnum
.
RECYCLE
.
status
?
'加入到回收站'
:
'恢复到仓库'
...
...
@@ -322,7 +331,7 @@ const handleStatus02Change = async (row, newStatus: number) => {
}
/** 更新上架/下架状态 */
const
handleStatusChange
=
async
(
row
)
=>
{
const
handleStatusChange
=
async
(
row
:
any
)
=>
{
try
{
// 二次确认
const
text
=
row
.
status
?
'上架'
:
'下架'
...
...
@@ -407,19 +416,16 @@ const handleExport = async () => {
}
}
const
categoryList
=
ref
()
// 分类树
/** 获取分类的节点的完整结构 */
const
formatCategoryName
=
(
categoryId
)
=>
{
const
categoryList
=
ref
()
// 分类树
const
formatCategoryName
=
(
categoryId
:
number
)
=>
{
return
treeToString
(
categoryList
.
value
,
categoryId
)
}
// 监听路由变化更新列表,解决商品保存后,列表不刷新的问题。
watch
(
()
=>
currentRoute
.
value
,
()
=>
{
/** 激活时 */
onActivated
(()
=>
{
getList
()
}
)
})
/** 初始化 **/
onMounted
(
async
()
=>
{
...
...
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