Skip to content

Commit 28951fb

Browse files
committed
重命名组件名称,增加用户地址查看api和页面、统一组件的props userId 变量名。
1 parent f17bb9a commit 28951fb

File tree

11 files changed

+283
-163
lines changed

11 files changed

+283
-163
lines changed

src/api/member/address/index.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import request from '@/config/axios'
2+
3+
export interface AddressVO {
4+
id: number
5+
name: string
6+
mobile: string
7+
areaId: number
8+
detailAddress: string
9+
defaultStatus: boolean
10+
}
11+
12+
// 查询用户收件地址列表
13+
export const getAddressPage = async (params) => {
14+
return await request.get({ url: `/member/address/page`, params })
15+
}
16+
17+
// 查询用户收件地址详情
18+
export const getAddress = async (id: number) => {
19+
return await request.get({ url: `/member/address/get?id=` + id })
20+
}
21+
22+
// 新增用户收件地址
23+
export const createAddress = async (data: AddressVO) => {
24+
return await request.post({ url: `/member/address/create`, data })
25+
}
26+
27+
// 修改用户收件地址
28+
export const updateAddress = async (data: AddressVO) => {
29+
return await request.put({ url: `/member/address/update`, data })
30+
}
31+
32+
// 删除用户收件地址
33+
export const deleteAddress = async (id: number) => {
34+
return await request.delete({ url: `/member/address/delete?id=` + id })
35+
}
36+
37+
// 导出用户收件地址 Excel
38+
export const exportAddress = async (params) => {
39+
return await request.download({ url: `/member/address/export-excel`, params })
40+
}

src/api/member/user/index.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import request from '@/config/axios'
22

33
export interface UserVO {
4+
areaId: number | undefined
5+
areaName: string | undefined
6+
avatar: string | undefined
7+
birthday: number | undefined
8+
createTime: number | undefined
49
id: number
10+
loginDate: number | undefined
11+
loginIp: string
12+
mark: string
513
mobile: string
6-
password: string
7-
status: number
14+
name: string | undefined
15+
nickname: string | undefined
816
registerIp: string
9-
loginIp: string
10-
loginDate: Date
11-
nickname: string
12-
avatar: string
13-
name: string
1417
sex: number
15-
areaId: number
16-
birthday: Date
17-
mark: string
18-
createTime: Date
18+
status: number
1919
}
2020

2121
// TODO @梦:和 UserVO 搞成一个把。
@@ -32,6 +32,7 @@ export interface UserBaseInfoVO {
3232
name: string | null | undefined
3333
sex: number
3434
areaId: number | null | undefined
35+
areaName: string | null | undefined
3536
birthday: Date | null | undefined
3637
mark: string | null | undefined
3738
createTime: Date | null | undefined

src/router/modules/remaining.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
434434
meta: { hidden: true },
435435
children: [
436436
{
437-
path: 'user/detail/:member_id',
437+
path: 'user/detail/:userId',
438438
name: 'MemberUserDetail',
439439
meta: {
440440
title: '会员详情',

src/utils/formatTime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import dayjs from 'dayjs'
1111
* @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
1212
* @returns 返回拼接后的时间字符串
1313
*/
14-
export function formatDate(date: Date, format?: string): string {
14+
export function formatDate(date: Date | number, format?: string): string {
1515
// 日期不存在,则返回空
1616
if (!date) {
1717
return ''
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<template>
2+
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
3+
<el-table-column label="收件地址编号" align="center" prop="id" width="150px" />
4+
<el-table-column label="收件人名称" align="center" prop="name" width="150px" />
5+
<el-table-column label="手机号" align="center" prop="mobile" width="150px" />
6+
<el-table-column label="地区编码" align="center" prop="areaId" width="150px" />
7+
<el-table-column label="收件详细地址" align="center" prop="detailAddress" />
8+
<el-table-column label="是否默认" align="center" prop="defaultStatus" width="150px">
9+
<template #default="scope">
10+
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="Number(scope.row.defaultStatus)" />
11+
</template>
12+
</el-table-column>
13+
<el-table-column
14+
label="创建时间"
15+
align="center"
16+
prop="createTime"
17+
:formatter="dateFormatter"
18+
width="180px"
19+
/>
20+
</el-table>
21+
<!-- 分页 -->
22+
<Pagination
23+
:total="total"
24+
v-model:page="queryParams.pageNo"
25+
v-model:limit="queryParams.pageSize"
26+
@pagination="getList"
27+
/>
28+
</template>
29+
<script lang="ts" setup>
30+
import { DICT_TYPE } from '@/utils/dict'
31+
32+
defineComponent({
33+
name: 'AddressList'
34+
})
35+
import { defineComponent } from 'vue'
36+
import { dateFormatter } from '@/utils/formatTime'
37+
import * as AddressApi from '@/api/member/address'
38+
39+
const { userId }: { userId: number } = defineProps({
40+
userId: {
41+
type: Number,
42+
required: true
43+
}
44+
})
45+
46+
const loading = ref(true) // 列表的加载中
47+
const total = ref(0) // 列表的总页数
48+
const list = ref([]) // 列表的数据
49+
const queryParams = reactive({
50+
pageNo: 1,
51+
pageSize: 10,
52+
userId: NaN,
53+
name: null,
54+
mobile: null,
55+
areaId: null,
56+
detailAddress: null,
57+
defaultStatus: null,
58+
createTime: []
59+
})
60+
61+
/** 查询列表 */
62+
const getList = async () => {
63+
loading.value = true
64+
try {
65+
const data = await AddressApi.getAddressPage(queryParams)
66+
list.value = data.list
67+
total.value = data.total
68+
} finally {
69+
loading.value = false
70+
}
71+
}
72+
73+
/** 初始化 **/
74+
onMounted(() => {
75+
queryParams.userId = userId
76+
getList()
77+
})
78+
</script>
79+
80+
<style scoped lang="scss"></style>

src/views/member/user/components/PointList.vue

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
>
1818
<el-option
1919
v-for="dict in getIntDictOptions(DICT_TYPE.MEMBER_POINT_BIZ_TYPE)"
20-
:key="dict.value"
20+
:key="dict.value as number"
2121
:label="dict.label"
2222
:value="dict.value"
2323
/>
@@ -112,7 +112,7 @@ const queryParams = reactive({
112112
bizType: undefined,
113113
title: null,
114114
createDate: [],
115-
userId: null
115+
userId: NaN
116116
})
117117
const queryFormRef = ref() // 搜索的表单
118118
@@ -140,17 +140,16 @@ const resetQuery = () => {
140140
handleQuery()
141141
}
142142
143-
// TODO @梦:改成 userId 哈
144-
const { memberId } = defineProps({
145-
memberId: {
143+
const { userId } = defineProps({
144+
userId: {
146145
type: Number,
147146
required: true
148147
}
149148
})
150149
151150
/** 初始化 **/
152151
onMounted(() => {
153-
queryParams.userId = memberId
152+
queryParams.userId = userId
154153
getList()
155154
})
156155
</script>

src/views/member/user/components/SignList.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ const list = ref([]) // 列表的数据
9292
const queryParams = reactive({
9393
pageNo: 1,
9494
pageSize: 10,
95+
userId: NaN,
9596
nickname: null,
9697
day: null,
9798
createTime: []
@@ -122,17 +123,16 @@ const resetQuery = () => {
122123
handleQuery()
123124
}
124125
125-
// TODO @梦:改成 userId 哈
126-
const { memberId } = defineProps({
127-
memberId: {
126+
const { userId } = defineProps({
127+
userId: {
128128
type: Number,
129129
required: true
130130
}
131131
})
132132
133133
/** 初始化 **/
134134
onMounted(() => {
135-
queryParams.userId = memberId
135+
queryParams.userId = userId
136136
getList()
137137
})
138138
</script>
Lines changed: 87 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,90 @@
1-
<script setup lang="ts"></script>
2-
31
<template>
4-
<span>基础信息</span>
2+
<el-card shadow="never">
3+
<template #header>
4+
<slot name="header"></slot>
5+
</template>
6+
<el-row>
7+
<el-col :span="4">
8+
<ElAvatar shape="square" :size="140" :src="user.avatar || undefined" />
9+
</el-col>
10+
<el-col :span="20">
11+
<el-descriptions :column="2">
12+
<el-descriptions-item>
13+
<template #label>
14+
<descriptions-item-label label="用户名" icon="ep:user" />
15+
</template>
16+
{{ user.name || '空' }}
17+
</el-descriptions-item>
18+
<el-descriptions-item>
19+
<template #label>
20+
<descriptions-item-label label="昵称" icon="ep:user" />
21+
</template>
22+
{{ user.nickname }}
23+
</el-descriptions-item>
24+
<el-descriptions-item label="手机号">
25+
<template #label>
26+
<descriptions-item-label label="手机号" icon="ep:phone" />
27+
</template>
28+
{{ user.mobile }}
29+
</el-descriptions-item>
30+
<el-descriptions-item>
31+
<template #label>
32+
<descriptions-item-label label="性别" icon="fa:mars-double" />
33+
</template>
34+
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="user.sex" />
35+
</el-descriptions-item>
36+
<el-descriptions-item>
37+
<template #label>
38+
<descriptions-item-label label="所在地" icon="ep:location" />
39+
</template>
40+
{{ user.areaName }}
41+
</el-descriptions-item>
42+
<el-descriptions-item>
43+
<template #label>
44+
<descriptions-item-label label="注册 IP" icon="ep:position" />
45+
</template>
46+
{{ user.registerIp }}
47+
</el-descriptions-item>
48+
<el-descriptions-item>
49+
<template #label>
50+
<descriptions-item-label label="生日" icon="fa:birthday-cake" />
51+
</template>
52+
{{ user.birthday ? formatDate(user.birthday) : '空' }}
53+
</el-descriptions-item>
54+
<el-descriptions-item>
55+
<template #label>
56+
<descriptions-item-label label="注册时间" icon="ep:calendar" />
57+
</template>
58+
{{ user.createTime ? formatDate(user.createTime) : '空' }}
59+
</el-descriptions-item>
60+
<el-descriptions-item>
61+
<template #label>
62+
<descriptions-item-label label="最后登录时间" icon="ep:calendar" />
63+
</template>
64+
{{ user.loginDate ? formatDate(user.loginDate) : '空' }}
65+
</el-descriptions-item>
66+
</el-descriptions>
67+
</el-col>
68+
</el-row>
69+
</el-card>
570
</template>
71+
<script setup lang="ts">
72+
import { DICT_TYPE } from '@/utils/dict'
73+
import { formatDate } from '@/utils/formatTime'
74+
import * as UserApi from '@/api/member/user'
75+
import DescriptionsItemLabel from '@/views/member/user/components/descriptions/DescriptionsItemLabel.vue'
676
7-
<style scoped lang="scss"></style>
77+
const { user }: { user: UserApi.UserVO } = defineProps({
78+
user: {
79+
type: UserApi.UserVO,
80+
required: true
81+
}
82+
})
83+
</script>
84+
<style scoped lang="scss">
85+
.card-header {
86+
display: flex;
87+
justify-content: space-between;
88+
align-items: center;
89+
}
90+
</style>

src/views/member/user/components/address-list.vue

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<script setup lang="ts">
2+
const { label } = defineProps({
3+
label: {
4+
type: String,
5+
required: true
6+
},
7+
icon: {
8+
type: String,
9+
required: false
10+
}
11+
})
12+
</script>
13+
14+
<template>
15+
<div class="cell-item">
16+
<Icon :icon="icon" />
17+
{{ label }}
18+
</div>
19+
</template>
20+
21+
<style scoped lang="scss">
22+
.cell-item {
23+
display: inline;
24+
}
25+
.cell-item::after {
26+
content: ':';
27+
}
28+
</style>

0 commit comments

Comments
 (0)