diff --git a/src/api/mall/convenienceMenusManageApi.js b/src/api/mall/convenienceMenusManageApi.js new file mode 100644 index 0000000..7b14579 --- /dev/null +++ b/src/api/mall/convenienceMenusManageApi.js @@ -0,0 +1,87 @@ +import request from '@/utils/request' + +// 获取便民服务菜单列表 +export function getConvenienceMenusList(params) { + return new Promise((resolve, reject) => { + request({ + url: '/convenienceMenus/queryConvenienceMenus', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || '获取便民服务菜单列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 添加便民服务菜单 +export function addConvenienceMenus(data) { + return new Promise((resolve, reject) => { + request({ + url: '/convenienceMenus/saveConvenienceMenus', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '添加便民服务菜单失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除便民服务菜单 +export function deleteConvenienceMenus(data) { + return new Promise((resolve, reject) => { + request({ + url: '/convenienceMenus/deleteConvenienceMenus', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除便民服务菜单失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 上传文件 +export function uploadFile(data) { + return new Promise((resolve, reject) => { + request({ + url: '/uploadFile', + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '上传文件失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/mall/storeInfoManageApi.js b/src/api/mall/storeInfoManageApi.js new file mode 100644 index 0000000..8d789fb --- /dev/null +++ b/src/api/mall/storeInfoManageApi.js @@ -0,0 +1,130 @@ +import request from '@/utils/request' + +// 查询商户信息列表 +export function queryStoreInfo(params) { + return new Promise((resolve, reject) => { + request({ + url: '/storeInfo/queryStoreInfo', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to query store info')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询便民菜单列表 +export function queryConvenienceMenus(params) { + return new Promise((resolve, reject) => { + request({ + url: '/convenienceMenus/queryConvenienceMenus', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || 'Failed to query convenience menus')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 保存商户信息 +export function saveStoreInfo(data) { + return new Promise((resolve, reject) => { + request({ + url: '/storeInfo/saveStoreInfo', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to save store info')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 更新商户信息 +export function updateStoreInfo(data) { + return new Promise((resolve, reject) => { + request({ + url: '/storeInfo/updateStoreInfo', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to update store info')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除商户信息 +export function deleteStoreInfo(data) { + return new Promise((resolve, reject) => { + request({ + url: '/storeInfo/deleteStoreInfo', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to delete store info')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 上传文件 +export function uploadFile(data) { + return new Promise((resolve, reject) => { + request({ + url: '/uploadFile', + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to upload file')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/mall/AddConvenienceMenus.vue b/src/components/mall/AddConvenienceMenus.vue new file mode 100644 index 0000000..e2e8d5a --- /dev/null +++ b/src/components/mall/AddConvenienceMenus.vue @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/src/components/mall/AddStoreInfo.vue b/src/components/mall/AddStoreInfo.vue new file mode 100644 index 0000000..c654375 --- /dev/null +++ b/src/components/mall/AddStoreInfo.vue @@ -0,0 +1,211 @@ + + + \ No newline at end of file diff --git a/src/components/mall/DeleteConvenienceMenus.vue b/src/components/mall/DeleteConvenienceMenus.vue new file mode 100644 index 0000000..65a5ebf --- /dev/null +++ b/src/components/mall/DeleteConvenienceMenus.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/src/components/mall/DeleteStoreInfo.vue b/src/components/mall/DeleteStoreInfo.vue new file mode 100644 index 0000000..07fb95f --- /dev/null +++ b/src/components/mall/DeleteStoreInfo.vue @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/src/components/mall/EditStoreInfo.vue b/src/components/mall/EditStoreInfo.vue new file mode 100644 index 0000000..8096f7c --- /dev/null +++ b/src/components/mall/EditStoreInfo.vue @@ -0,0 +1,226 @@ + + + \ No newline at end of file diff --git a/src/components/mall/UploadImage.vue b/src/components/mall/UploadImage.vue new file mode 100644 index 0000000..4276ab6 --- /dev/null +++ b/src/components/mall/UploadImage.vue @@ -0,0 +1,121 @@ + + + + + \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index f455bfd..5219f5a 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -103,6 +103,8 @@ import { messages as marketRuleMessages } from '../views/market/marketRuleLang' import { messages as marketBlacklistManageMessages } from '../views/market/marketBlacklistManageLang' import { messages as marketLogMessages } from '../views/market/marketLogLang' import { messages as advertManageMessages } from '../views/admin/advertManageLang' +import { messages as convenienceMenusManageMessages } from '../views/mall/convenienceMenusManageLang' +import { messages as storeInfoManageMessages } from '../views/mall/storeInfoManageLang' Vue.use(VueI18n) @@ -210,6 +212,8 @@ const messages = { ...marketBlacklistManageMessages.en, ...marketLogMessages.en, ...advertManageMessages.en, + ...convenienceMenusManageMessages.en, + ...storeInfoManageMessages.en, }, zh: { ...loginMessages.zh, @@ -313,6 +317,8 @@ const messages = { ...marketBlacklistManageMessages.zh, ...marketLogMessages.zh, ...advertManageMessages.zh, + ...convenienceMenusManageMessages.zh, + ...storeInfoManageMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 15aaa70..a4b052d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -501,6 +501,16 @@ const routes = [ name: '/pages/property/advertManage', component: () => import('@/views/admin/advertManageList.vue') }, + { + path:'/pages/admin/convenienceMenusManage', + name:'/pages/admin/convenienceMenusManage', + component: () => import('@/views/mall/convenienceMenusManageList.vue') + }, + { + path:'/pages/admin/storeInfoManage', + name:'/pages/admin/storeInfoManage', + component: () => import('@/views/mall/storeInfoManageList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/mall/convenienceMenusManageLang.js b/src/views/mall/convenienceMenusManageLang.js new file mode 100644 index 0000000..694679f --- /dev/null +++ b/src/views/mall/convenienceMenusManageLang.js @@ -0,0 +1,32 @@ +export const messages = { + en: { + convenienceMenus: { + title: 'Convenience Services', + assetId: 'Asset ID', + menuName: 'Menu Name', + imageUrl: 'Image URL', + pagePath: 'Page Path', + displayOrder: 'Display Order', + remark: 'Remark', + fetchError: 'Failed to fetch convenience menus', + addTitle: 'Add Convenience Menu', + editTitle: 'Edit Convenience Menu', + deleteConfirm: 'Are you sure to delete this convenience menu?' + } + }, + zh: { + convenienceMenus: { + title: '便民服务', + assetId: '资产ID', + menuName: '菜单名称', + imageUrl: '图片地址', + pagePath: '页面路径', + displayOrder: '显示序号', + remark: '备注', + fetchError: '获取便民服务菜单失败', + addTitle: '添加便民服务菜单', + editTitle: '修改便民服务菜单', + deleteConfirm: '确定删除便民服务菜单吗?' + } + } +} \ No newline at end of file diff --git a/src/views/mall/convenienceMenusManageList.vue b/src/views/mall/convenienceMenusManageList.vue new file mode 100644 index 0000000..83f2566 --- /dev/null +++ b/src/views/mall/convenienceMenusManageList.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/views/mall/storeInfoManageLang.js b/src/views/mall/storeInfoManageLang.js new file mode 100644 index 0000000..0c9e015 --- /dev/null +++ b/src/views/mall/storeInfoManageLang.js @@ -0,0 +1,144 @@ +export const messages = { + en: { + storeInfoManage: { + search: { + title: 'Search Conditions', + storeName: 'Please enter store name', + convenienceType: 'Please select convenience type', + isShow: 'Please select whether to display' + }, + list: { + title: 'Store Information' + }, + table: { + storeInfoId: 'Store ID', + storeName: 'Store Name', + icon: 'Image URL', + tel: 'Store Phone', + site: 'Store Location', + seq: 'Display Sequence', + isShow: 'Is Show', + convenienceType: 'Convenience Type', + workTime: 'Work Time', + remark: 'Remark' + }, + common: { + search: 'Search', + add: 'Add', + edit: 'Edit', + delete: 'Delete', + yes: 'Yes', + no: 'No', + operation: 'Operation', + cancel: 'Cancel', + save: 'Save', + confirm: 'Confirm', + saveSuccess: 'Save successfully', + updateSuccess: 'Update successfully', + deleteSuccess: 'Delete successfully', + required: 'Required', + optional: 'Optional' + }, + delete: { + confirmDelete: 'Are you sure to delete store info' + }, + error: { + fetchStoreInfoFailed: 'Failed to get store information', + fetchConvenienceMenusFailed: 'Failed to get convenience menus', + saveFailed: 'Failed to save store info', + updateFailed: 'Failed to update store info', + deleteFailed: 'Failed to delete store info', + uploadFailed: 'Failed to upload image', + uploadImageOnly: 'Only image files can be uploaded', + imageSizeLimit: 'Image size cannot exceed 2MB', + maxLength50: 'Cannot exceed 50 characters', + maxLength13: 'Cannot exceed 13 characters', + maxLength100: 'Cannot exceed 100 characters', + maxLength200: 'Cannot exceed 200 characters', + maxLength5000: 'Cannot exceed 5000 characters', + required: 'This field is required', + number: 'Please enter a valid number' + }, + validation: { + storeNameRequired: 'Store name is required', + seqRequired: 'Display sequence is required', + seqNumber: 'Display sequence must be a number', + telMaxLength: 'Phone number cannot exceed 13 characters', + siteMaxLength: 'Location cannot exceed 100 characters', + workTimeMaxLength: 'Work time cannot exceed 200 characters', + remarkMaxLength: 'Remark cannot exceed 5000 characters' + } + } + }, + zh: { + storeInfoManage: { + search: { + title: '查询条件', + storeName: '请输入商户名称', + convenienceType: '请选择便民种类', + isShow: '请选择是否显示' + }, + list: { + title: '商户信息' + }, + table: { + storeInfoId: '商户信息ID', + storeName: '商户名称', + icon: '图片地址', + tel: '商户电话', + site: '商户位置', + seq: '显示序号', + isShow: '是否显示', + convenienceType: '便民类型', + workTime: '工作时间', + remark: '备注' + }, + common: { + search: '查询', + add: '添加', + edit: '修改', + delete: '删除', + yes: '是', + no: '否', + operation: '操作', + cancel: '取消', + save: '保存', + confirm: '确认', + saveSuccess: '保存成功', + updateSuccess: '更新成功', + deleteSuccess: '删除成功', + required: '必填', + optional: '选填' + }, + delete: { + confirmDelete: '确定删除商户信息' + }, + error: { + fetchStoreInfoFailed: '获取商户信息失败', + fetchConvenienceMenusFailed: '获取便民菜单失败', + saveFailed: '保存商户信息失败', + updateFailed: '更新商户信息失败', + deleteFailed: '删除商户信息失败', + uploadFailed: '上传图片失败', + uploadImageOnly: '只能上传图片文件', + imageSizeLimit: '图片大小不能超过2MB', + maxLength50: '不能超过50个字符', + maxLength13: '不能超过13个字符', + maxLength100: '不能超过100个字符', + maxLength200: '不能超过200个字符', + maxLength5000: '不能超过5000个字符', + required: '此字段为必填项', + number: '请输入有效的数字' + }, + validation: { + storeNameRequired: '商户名称为必填项', + seqRequired: '显示序号为必填项', + seqNumber: '显示序号必须为数字', + telMaxLength: '电话号码不能超过13个字符', + siteMaxLength: '位置不能超过100个字符', + workTimeMaxLength: '工作时间不能超过200个字符', + remarkMaxLength: '备注不能超过5000个字符' + } + } + } +} \ No newline at end of file diff --git a/src/views/mall/storeInfoManageList.vue b/src/views/mall/storeInfoManageList.vue new file mode 100644 index 0000000..ce3abb1 --- /dev/null +++ b/src/views/mall/storeInfoManageList.vue @@ -0,0 +1,214 @@ + + + + + \ No newline at end of file