From a7b25fd7f381bfd7e70deb0d4dba943dad28ce5b Mon Sep 17 00:00:00 2001
From: aaron <>
Date: Sun, 19 Jan 2025 15:39:50 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=95=86=E6=88=B7=E5=BD=92?=
=?UTF-8?q?=E5=B1=9E=E7=9A=84=E5=A2=9E=E5=8A=A0=E5=92=8C=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/merchant/List.vue | 163 +++++++++++++++++++++++++++++++-----
1 file changed, 140 insertions(+), 23 deletions(-)
diff --git a/src/views/merchant/List.vue b/src/views/merchant/List.vue
index 1ad7fda..2a919b8 100644
--- a/src/views/merchant/List.vue
+++ b/src/views/merchant/List.vue
@@ -65,6 +65,25 @@
:label-col="{ span: 6 }"
:wrapper-col="{ span: 16 }"
>
+
+
+
+ {{ user.phone }} ({{ user.username || '未设置昵称' }})
+
+
+
+
+
+
+
+ {{ user.phone }} ({{ user.username || '未设置昵称' }})
+
+
+
+
{
+ if (!record.user_username && !record.user_phone) return '-'
+ return `${record.user_username || '未设置昵称'} (${record.user_phone})`
+ }
+ },
{
title: '商家分类',
dataIndex: 'category_name',
@@ -315,7 +363,7 @@ export default defineComponent({
title: '商家名称',
dataIndex: 'name',
key: 'name',
- width: 150,
+ width: 200,
},
{
title: '营业时间',
@@ -327,7 +375,8 @@ export default defineComponent({
title: '地址',
dataIndex: 'address',
key: 'address',
- width: 200,
+ ellipsis: true,
+ width: 300,
},
{
title: '位置',
@@ -339,7 +388,7 @@ export default defineComponent({
title: '联系电话',
dataIndex: 'phone',
key: 'phone',
- width: 120,
+ width: 150,
},
{
title: '创建时间',
@@ -350,9 +399,9 @@ export default defineComponent({
{
title: '操作',
key: 'action',
- width: 120,
+ width: 200,
+ fixed: 'right',
align: 'center',
- fixed: 'right'
}
]
@@ -439,9 +488,13 @@ export default defineComponent({
const addMap = ref(null)
const addMarker = ref(null)
+ const userLoading = ref(false)
+ const userOptions = ref([])
+
const formState = ref({
- name: '',
+ user_id: undefined,
category_id: undefined,
+ name: '',
business_hours: '',
address: '',
longitude: null,
@@ -450,8 +503,9 @@ export default defineComponent({
})
const rules = {
- name: [{ required: true, message: '请输入商家名称' }],
+ user_id: [{ required: true, message: '请选择用户' }],
category_id: [{ required: true, message: '请选择商家分类' }],
+ name: [{ required: true, message: '请输入商家名称' }],
business_hours: [{ required: true, message: '请输入营业时间' }],
address: [{ required: true, message: '请输入详细地址' }],
phone: [{ required: true, message: '请输入联系电话' }],
@@ -610,31 +664,24 @@ export default defineComponent({
// 取消添加
const handleCancel = () => {
- // 重置表单数据
formRef.value?.resetFields()
-
- // 重置表单状态
formState.value = {
- name: '',
+ user_id: undefined,
category_id: undefined,
+ name: '',
business_hours: '',
address: '',
longitude: null,
latitude: null,
phone: ''
}
-
- // 重置搜索相关数据
searchAddress.value = ''
searchOptions.value = []
-
- // 清除地图标记
+ userOptions.value = []
if (addMarker.value) {
addMarker.value.setMap(null)
addMarker.value = null
}
-
- // 关闭模态框
addModalVisible.value = false
}
@@ -778,6 +825,7 @@ export default defineComponent({
const editLoading = ref(false)
const editFormRef = ref(null)
const editFormState = ref({
+ user_id: undefined,
name: '',
category_id: undefined,
business_hours: '',
@@ -795,6 +843,7 @@ export default defineComponent({
const handleEdit = async (record) => {
currentEditId.value = record.id
editFormState.value = {
+ user_id: record.user_id,
name: record.name,
category_id: record.category_id,
business_hours: record.business_hours,
@@ -808,6 +857,15 @@ export default defineComponent({
if (categories.value.length === 0) {
await fetchCategories()
}
+
+ // 加载当前用户信息到选项中
+ if (record.user_id && record.user_phone) {
+ userOptions.value = [{
+ userid: record.user_id,
+ phone: record.user_phone,
+ username: record.user_username
+ }]
+ }
editModalVisible.value = true
await nextTick()
@@ -893,13 +951,25 @@ export default defineComponent({
editFormRef.value.validate().then(async () => {
try {
editLoading.value = true
- await request.put(`/api/merchant/${currentEditId.value}`, editFormState.value)
- message.success('修改成功')
- editModalVisible.value = false
- fetchData()
+
+ // 确保包含 user_id 在请求数据中
+ const updateData = {
+ ...editFormState.value,
+ user_id: editFormState.value.user_id
+ }
+
+ const res = await request.put(`/api/merchant/${currentEditId.value}`, updateData)
+
+ if (res.code === 200) {
+ message.success('修改成功')
+ editModalVisible.value = false
+ fetchData()
+ } else {
+ throw new Error(res.message || '修改失败')
+ }
} catch (error) {
console.error('修改商家失败:', error)
- message.error('修改失败')
+ message.error(error.message || '修改失败')
} finally {
editLoading.value = false
}
@@ -909,7 +979,18 @@ export default defineComponent({
// 取消修改
const handleEditCancel = () => {
editFormRef.value?.resetFields()
+ editFormState.value = {
+ user_id: undefined,
+ name: '',
+ category_id: undefined,
+ business_hours: '',
+ address: '',
+ longitude: null,
+ latitude: null,
+ phone: ''
+ }
editSearchAddress.value = ''
+ userOptions.value = []
if (editMarker.value) {
editMarker.value.setMap(null)
editMarker.value = null
@@ -917,6 +998,33 @@ export default defineComponent({
editModalVisible.value = false
}
+ // 搜索用户
+ const handleUserSearch = async (value) => {
+ if (!value || value.length < 3) {
+ userOptions.value = []
+ return
+ }
+
+ try {
+ userLoading.value = true
+ const res = await request.get('/api/user/list', {
+ params: {
+ phone: value,
+ limit: 10
+ }
+ })
+
+ if (res.code === 200) {
+ userOptions.value = res.data.items || []
+ }
+ } catch (error) {
+ console.error('搜索用户失败:', error)
+ message.error('搜索用户失败')
+ } finally {
+ userLoading.value = false
+ }
+ }
+
onMounted(() => {
fetchData()
})
@@ -966,7 +1074,10 @@ export default defineComponent({
handleEdit,
handleEditSubmit,
handleEditCancel,
- handleEditSelect
+ handleEditSelect,
+ userLoading,
+ userOptions,
+ handleUserSearch
}
}
})
@@ -1035,4 +1146,10 @@ export default defineComponent({
margin-top: 8px;
color: #666;
}
+
+:deep(.ant-select-item-option-content) {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
\ No newline at end of file