更新后端界面,用户管理界面
This commit is contained in:
parent
cffc718284
commit
1f5f4d16e6
@ -4,7 +4,7 @@ import request from "@/utils/request";
|
|||||||
// 获取内容统计
|
// 获取内容统计
|
||||||
export function getContentStats() {
|
export function getContentStats() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/contentstats",
|
url: "/backend/contentstats",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -12,7 +12,7 @@ export function getContentStats() {
|
|||||||
// 获取用户统计
|
// 获取用户统计
|
||||||
export function getUserStats() {
|
export function getUserStats() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/usersstats",
|
url: "/backend/usersstats",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -10,7 +10,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getBabyList() {
|
export function getBabyList() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/babys/list',
|
url: '/backend/babys/list',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@ export function getBabyList() {
|
|||||||
*/
|
*/
|
||||||
export function getBabyDetail(id) {
|
export function getBabyDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babys/${id}`,
|
url: `/backend/babys/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ export function getBabyDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function createBaby(data) {
|
export function createBaby(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/babys",
|
url: "/backend/babys",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -46,7 +46,7 @@ export function createBaby(data) {
|
|||||||
// 更新宝贝信息
|
// 更新宝贝信息
|
||||||
export function editBaby(id, data) {
|
export function editBaby(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/baby/update/${id}`,
|
url: `/backend/baby/update/${id}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
@ -59,7 +59,7 @@ export function editBaby(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteBaby(id) {
|
export function deleteBaby(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babys/${id}`,
|
url: `/backend/babys/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ export function deleteBaby(id) {
|
|||||||
*/
|
*/
|
||||||
export function bindParent(id, data) {
|
export function bindParent(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babys/bindparents/${id}`,
|
url: `/backend/babys/bindparents/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -85,7 +85,7 @@ export function bindParent(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function getParents(id) {
|
export function getParents(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babys/getParents/${id}`,
|
url: `/backend/babys/getParents/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ export function getParents(id) {
|
|||||||
*/
|
*/
|
||||||
export function getUserList() {
|
export function getUserList() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/babyhealthUser/list",
|
url: "/backend/babyhealthUser/list",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -112,7 +112,7 @@ export function getUserList() {
|
|||||||
*/
|
*/
|
||||||
export function getUserDetail(id) {
|
export function getUserDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babyhealthUser/detail/${id}`,
|
url: `/backend/babyhealthUser/detail/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ export function getUserDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function createUser(data) {
|
export function createUser(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/babyhealthUser/create",
|
url: "/backend/babyhealthUser/create",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -141,7 +141,7 @@ export function createUser(data) {
|
|||||||
*/
|
*/
|
||||||
export function updateUser(id, data) {
|
export function updateUser(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babyhealthUser/update/${id}`,
|
url: `/backend/babyhealthUser/update/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -157,7 +157,7 @@ export function updateUser(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteUser(id) {
|
export function deleteUser(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/babyhealthUser/delete/${id}`,
|
url: `/backend/babyhealthUser/delete/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ export function deleteUser(id) {
|
|||||||
*/
|
*/
|
||||||
export function getDashborad() {
|
export function getDashborad() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/babyhealthDashborad/dashborad",
|
url: "/backend/babyhealthDashborad/dashborad",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getBanners() {
|
export function getBanners() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/allbanners",
|
url: "/backend/allbanners",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ export function getBanners() {
|
|||||||
*/
|
*/
|
||||||
export function createBanner(formData) {
|
export function createBanner(formData) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/createbanner",
|
url: "/backend/createbanner",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: formData,
|
data: formData,
|
||||||
headers: {
|
headers: {
|
||||||
@ -35,7 +35,7 @@ export function createBanner(formData) {
|
|||||||
*/
|
*/
|
||||||
export function editBanner(id, bannerData) {
|
export function editBanner(id, bannerData) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editbanner/${id}`,
|
url: `/backend/editbanner/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: bannerData,
|
data: bannerData,
|
||||||
});
|
});
|
||||||
@ -48,7 +48,7 @@ export function editBanner(id, bannerData) {
|
|||||||
*/
|
*/
|
||||||
export function deleteBanner(id) {
|
export function deleteBanner(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deletebanner/${id}`,
|
url: `/backend/deletebanner/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
|||||||
|
|
||||||
export function listContacts(params) {
|
export function listContacts(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/crm/contact/list',
|
url: '/backend/crm/contact/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params,
|
params,
|
||||||
})
|
})
|
||||||
@ -10,7 +10,7 @@ export function listContacts(params) {
|
|||||||
|
|
||||||
export function createContact(data) {
|
export function createContact(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/crm/contact/add',
|
url: '/backend/crm/contact/add',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
@ -18,7 +18,7 @@ export function createContact(data) {
|
|||||||
|
|
||||||
export function updateContact(data) {
|
export function updateContact(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/crm/contact/edit',
|
url: '/backend/crm/contact/edit',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
@ -26,7 +26,7 @@ export function updateContact(data) {
|
|||||||
|
|
||||||
export function deleteContact(data) {
|
export function deleteContact(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/crm/contact/delete',
|
url: '/backend/crm/contact/delete',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getPlatformStats() {
|
export function getPlatformStats() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/dashboard/platform-stats",
|
url: "/backend/dashboard/platform-stats",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -17,7 +17,7 @@ export function getPlatformStats() {
|
|||||||
*/
|
*/
|
||||||
export function getTenantStats() {
|
export function getTenantStats() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/dashboard/tenant-stats",
|
url: "/backend/dashboard/tenant-stats",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ export function getTenantStats() {
|
|||||||
*/
|
*/
|
||||||
export function getActivityLogs(pageNum = 1, pageSize = 10) {
|
export function getActivityLogs(pageNum = 1, pageSize = 10) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/dashboard/user-activity-logs",
|
url: "/backend/dashboard/user-activity-logs",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: {
|
params: {
|
||||||
page_num: pageNum,
|
page_num: pageNum,
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getDemandList() {
|
export function getDemandList() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/demandList",
|
url: "/backend/demandList",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ export function getDemandList() {
|
|||||||
*/
|
*/
|
||||||
export function addDemand(data) {
|
export function addDemand(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/addDemand",
|
url: "/backend/addDemand",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -32,7 +32,7 @@ export function addDemand(data) {
|
|||||||
*/
|
*/
|
||||||
export function editDemand(id, data) {
|
export function editDemand(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editDemand/${id}`,
|
url: `/backend/editDemand/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -45,7 +45,7 @@ export function editDemand(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteDemand(id) {
|
export function deleteDemand(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteDemand/${id}`,
|
url: `/backend/deleteDemand/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import request from '@/utils/request';
|
|||||||
// 获取租户下的所有部门
|
// 获取租户下的所有部门
|
||||||
export function getTenantDepartments(tenantId) {
|
export function getTenantDepartments(tenantId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/departments/tenant/${tenantId}`,
|
url: `/backend/departments/tenant/${tenantId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -11,7 +11,7 @@ export function getTenantDepartments(tenantId) {
|
|||||||
// 获取部门详情
|
// 获取部门详情
|
||||||
export function getDepartmentInfo(departmentId) {
|
export function getDepartmentInfo(departmentId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/departments/${departmentId}`,
|
url: `/backend/departments/${departmentId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -19,7 +19,7 @@ export function getDepartmentInfo(departmentId) {
|
|||||||
// 添加部门
|
// 添加部门
|
||||||
export function addDepartment(data) {
|
export function addDepartment(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/departments',
|
url: '/backend/departments',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -28,7 +28,7 @@ export function addDepartment(data) {
|
|||||||
// 更新部门信息
|
// 更新部门信息
|
||||||
export function editDepartment(departmentId, data) {
|
export function editDepartment(departmentId, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/departments/${departmentId}`,
|
url: `/backend/departments/${departmentId}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -37,7 +37,7 @@ export function editDepartment(departmentId, data) {
|
|||||||
// 删除部门
|
// 删除部门
|
||||||
export function deleteDepartment(departmentId) {
|
export function deleteDepartment(departmentId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/departments/${departmentId}`,
|
url: `/backend/departments/${departmentId}`,
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import request from '@/utils/request'
|
|||||||
// 获取字典类型列表
|
// 获取字典类型列表
|
||||||
export function getDictTypes(params) {
|
export function getDictTypes(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/dict/types',
|
url: '/backend/dict/types',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -12,7 +12,7 @@ export function getDictTypes(params) {
|
|||||||
// 根据ID获取字典类型
|
// 根据ID获取字典类型
|
||||||
export function getDictTypeById(id) {
|
export function getDictTypeById(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/types/${id}`,
|
url: `/backend/dict/types/${id}`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -20,7 +20,7 @@ export function getDictTypeById(id) {
|
|||||||
// 添加字典类型
|
// 添加字典类型
|
||||||
export function addDictType(data) {
|
export function addDictType(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/dict/types',
|
url: '/backend/dict/types',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: {
|
data: {
|
||||||
...data,
|
...data,
|
||||||
@ -32,7 +32,7 @@ export function addDictType(data) {
|
|||||||
// 更新字典类型
|
// 更新字典类型
|
||||||
export function updateDictType(id, data) {
|
export function updateDictType(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/types/${id}`,
|
url: `/backend/dict/types/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: {
|
data: {
|
||||||
...data,
|
...data,
|
||||||
@ -44,7 +44,7 @@ export function updateDictType(id, data) {
|
|||||||
// 删除字典类型
|
// 删除字典类型
|
||||||
export function deleteDictType(id) {
|
export function deleteDictType(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/types/${id}`,
|
url: `/backend/dict/types/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ export function deleteDictType(id) {
|
|||||||
// 获取字典项列表
|
// 获取字典项列表
|
||||||
export function getDictItems(params) {
|
export function getDictItems(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/dict/items',
|
url: '/backend/dict/items',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -61,7 +61,7 @@ export function getDictItems(params) {
|
|||||||
// 根据ID获取字典项
|
// 根据ID获取字典项
|
||||||
export function getDictItemById(id) {
|
export function getDictItemById(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/items/${id}`,
|
url: `/backend/dict/items/${id}`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ export function getDictItemById(id) {
|
|||||||
// 添加字典项
|
// 添加字典项
|
||||||
export function addDictItem(data) {
|
export function addDictItem(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/dict/items',
|
url: '/backend/dict/items',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -78,7 +78,7 @@ export function addDictItem(data) {
|
|||||||
// 更新字典项
|
// 更新字典项
|
||||||
export function updateDictItem(id, data) {
|
export function updateDictItem(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/items/${id}`,
|
url: `/backend/dict/items/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -87,7 +87,7 @@ export function updateDictItem(id, data) {
|
|||||||
// 删除字典项
|
// 删除字典项
|
||||||
export function deleteDictItem(id) {
|
export function deleteDictItem(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/items/${id}`,
|
url: `/backend/dict/items/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ export function deleteDictItem(id) {
|
|||||||
// 根据字典编码获取字典项(用于业务查询)
|
// 根据字典编码获取字典项(用于业务查询)
|
||||||
export function getDictItemsByCode(code, includeDisabled = false) {
|
export function getDictItemsByCode(code, includeDisabled = false) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/dict/items/code/${code}`,
|
url: `/backend/dict/items/code/${code}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: {
|
params: {
|
||||||
include_disabled: includeDisabled ? '1' : '0'
|
include_disabled: includeDisabled ? '1' : '0'
|
||||||
@ -106,7 +106,7 @@ export function getDictItemsByCode(code, includeDisabled = false) {
|
|||||||
// 批量更新字典项排序
|
// 批量更新字典项排序
|
||||||
export function batchUpdateDictItemSort(data) {
|
export function batchUpdateDictItemSort(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/dict/items/sort',
|
url: '/backend/dict/items/sort',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getEmailInfo() {
|
export function getEmailInfo() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/email/info",
|
url: "/backend/email/info",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -17,7 +17,7 @@ export function getEmailInfo() {
|
|||||||
*/
|
*/
|
||||||
export function editEmailInfo(data) {
|
export function editEmailInfo(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/email/editinfo",
|
url: "/backend/email/editinfo",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -29,7 +29,7 @@ export function editEmailInfo(data) {
|
|||||||
*/
|
*/
|
||||||
export function sendTestEmail(data) {
|
export function sendTestEmail(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/email/sendtestemail",
|
url: "/backend/email/sendtestemail",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getOrganizationList() {
|
export function getOrganizationList() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/erp/getOrganization',
|
url: '/backend/erp/getOrganization',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@ export function getOrganizationList() {
|
|||||||
*/
|
*/
|
||||||
export function getOrganizationDetail(id) {
|
export function getOrganizationDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/getOrganizationDetail/${id}`,
|
url: `/backend/erp/getOrganizationDetail/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ export function getOrganizationDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function createOrganization(data) {
|
export function createOrganization(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/erp/createOrganization",
|
url: "/backend/erp/createOrganization",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -46,7 +46,7 @@ export function createOrganization(data) {
|
|||||||
// 更新组织机构信息
|
// 更新组织机构信息
|
||||||
export function editOrganization(id, data) {
|
export function editOrganization(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/editOrganization/${id}`,
|
url: `/backend/erp/editOrganization/${id}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
@ -59,7 +59,7 @@ export function editOrganization(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteOrganization(id) {
|
export function deleteOrganization(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/deleteOrganization/${id}`,
|
url: `/backend/erp/deleteOrganization/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@ export function deleteOrganization(id) {
|
|||||||
*/
|
*/
|
||||||
export function getCompanys() {
|
export function getCompanys() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/erp/getCompanys',
|
url: '/backend/erp/getCompanys',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ export function getCompanys() {
|
|||||||
*/
|
*/
|
||||||
export function getDepartments(parentId) {
|
export function getDepartments(parentId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/erp/getDepartments',
|
url: '/backend/erp/getDepartments',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: parentId ? { parent_id: parentId } : {}
|
params: parentId ? { parent_id: parentId } : {}
|
||||||
});
|
});
|
||||||
@ -99,7 +99,7 @@ export function getDepartments(parentId) {
|
|||||||
*/
|
*/
|
||||||
export function getEmployeeList(tenantId) {
|
export function getEmployeeList(tenantId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/erp/getEmployee',
|
url: '/backend/erp/getEmployee',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { tid: tenantId }
|
params: { tid: tenantId }
|
||||||
});
|
});
|
||||||
@ -112,7 +112,7 @@ export function getEmployeeList(tenantId) {
|
|||||||
*/
|
*/
|
||||||
export function getEmployeeDetail(id) {
|
export function getEmployeeDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/getEmployeeDetail/${id}`,
|
url: `/backend/erp/getEmployeeDetail/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ export function getEmployeeDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function createEmployee(data) {
|
export function createEmployee(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/erp/createEmployee",
|
url: "/backend/erp/createEmployee",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -136,7 +136,7 @@ export function createEmployee(data) {
|
|||||||
// 更新员工信息
|
// 更新员工信息
|
||||||
export function editEmployee(id, data) {
|
export function editEmployee(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/editEmployee/${id}`,
|
url: `/backend/erp/editEmployee/${id}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
@ -149,7 +149,7 @@ export function editEmployee(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteEmployee(id) {
|
export function deleteEmployee(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/erp/deleteEmployee/${id}`,
|
url: `/backend/erp/deleteEmployee/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getUserCate() {
|
export function getUserCate() {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/usercate`,
|
url: `/backend/usercate`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -17,7 +17,7 @@ export function getUserCate() {
|
|||||||
*/
|
*/
|
||||||
export function getAllFiles() {
|
export function getAllFiles() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/allfiles",
|
url: "/backend/allfiles",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ export function getAllFiles() {
|
|||||||
*/
|
*/
|
||||||
export function createFileCate(data) {
|
export function createFileCate(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/createfilecate",
|
url: "/backend/createfilecate",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -43,7 +43,7 @@ export function createFileCate(data) {
|
|||||||
*/
|
*/
|
||||||
export function renameFileCate(id, data) {
|
export function renameFileCate(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/renamefilecate/${id}`,
|
url: `/backend/renamefilecate/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -56,7 +56,7 @@ export function renameFileCate(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteFileCate(id) {
|
export function deleteFileCate(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deletefilecate/${id}`,
|
url: `/backend/deletefilecate/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -78,7 +78,7 @@ export function getCateFiles(id, page = 1, pageSize = 24, keyword = "") {
|
|||||||
params.keyword = keyword;
|
params.keyword = keyword;
|
||||||
}
|
}
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/catefiles/${id}`,
|
url: `/backend/catefiles/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
@ -91,7 +91,7 @@ export function getCateFiles(id, page = 1, pageSize = 24, keyword = "") {
|
|||||||
*/
|
*/
|
||||||
export function getFileById(id) {
|
export function getFileById(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/catefiles`,
|
url: `/backend/catefiles`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -109,7 +109,7 @@ export function uploadFile(formData, options = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/uploadfile",
|
url: "/backend/uploadfile",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: formData,
|
data: formData,
|
||||||
headers: {
|
headers: {
|
||||||
@ -126,7 +126,7 @@ export function uploadFile(formData, options = {}) {
|
|||||||
*/
|
*/
|
||||||
export function updateFile(id, fileData) {
|
export function updateFile(id, fileData) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/updatefile/${id}`,
|
url: `/backend/updatefile/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: fileData,
|
data: fileData,
|
||||||
});
|
});
|
||||||
@ -139,7 +139,7 @@ export function updateFile(id, fileData) {
|
|||||||
*/
|
*/
|
||||||
export function deleteFile(id) {
|
export function deleteFile(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deletefile/${id}`,
|
url: `/backend/deletefile/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ export function deleteFile(id) {
|
|||||||
*/
|
*/
|
||||||
export function deleteFilePermanently(id) {
|
export function deleteFilePermanently(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteFilePermanently/${id}`,
|
url: `/backend/deleteFilePermanently/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -164,7 +164,7 @@ export function deleteFilePermanently(id) {
|
|||||||
*/
|
*/
|
||||||
export function moveFile(id, cate) {
|
export function moveFile(id, cate) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/movefile/${id}`,
|
url: `/backend/movefile/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { cate },
|
params: { cate },
|
||||||
});
|
});
|
||||||
@ -177,7 +177,7 @@ export function moveFile(id, cate) {
|
|||||||
*/
|
*/
|
||||||
export function batchDeleteFiles(ids) {
|
export function batchDeleteFiles(ids) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/batchDeleteFiles",
|
url: "/backend/batchDeleteFiles",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: { ids },
|
data: { ids },
|
||||||
});
|
});
|
||||||
@ -190,7 +190,7 @@ export function batchDeleteFiles(ids) {
|
|||||||
*/
|
*/
|
||||||
export function batchDeleteFilesPermanently(ids) {
|
export function batchDeleteFilesPermanently(ids) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/batchDeleteFilesPermanently",
|
url: "/backend/batchDeleteFilesPermanently",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: { ids },
|
data: { ids },
|
||||||
});
|
});
|
||||||
@ -204,7 +204,7 @@ export function batchDeleteFilesPermanently(ids) {
|
|||||||
*/
|
*/
|
||||||
export function batchMoveFiles(ids, cate) {
|
export function batchMoveFiles(ids, cate) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/batchMoveFiles",
|
url: "/backend/batchMoveFiles",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: { ids, cate },
|
data: { ids, cate },
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import request from '@/utils/request'
|
|||||||
*/
|
*/
|
||||||
export function getFriendlinkList(params) {
|
export function getFriendlinkList(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/friendlinks',
|
url: '/backend/friendlinks',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -19,7 +19,7 @@ export function getFriendlinkList(params) {
|
|||||||
*/
|
*/
|
||||||
export function getAllFriendlinks() {
|
export function getAllFriendlinks() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/friendlinks/all',
|
url: '/backend/friendlinks/all',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ export function getAllFriendlinks() {
|
|||||||
*/
|
*/
|
||||||
export function addFriendlink(data) {
|
export function addFriendlink(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/friendlinks',
|
url: '/backend/friendlinks',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -45,7 +45,7 @@ export function addFriendlink(data) {
|
|||||||
*/
|
*/
|
||||||
export function updateFriendlink(id, data) {
|
export function updateFriendlink(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/friendlinks/${id}`,
|
url: `/backend/friendlinks/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -58,7 +58,7 @@ export function updateFriendlink(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteFriendlink(id) {
|
export function deleteFriendlink(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/friendlinks/${id}`,
|
url: `/backend/friendlinks/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@ export function deleteFriendlink(id) {
|
|||||||
*/
|
*/
|
||||||
export function batchDeleteFriendlinks(ids) {
|
export function batchDeleteFriendlinks(ids) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/friendlinks/batchdelete',
|
url: '/backend/friendlinks/batchdelete',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: { ids }
|
data: { ids }
|
||||||
})
|
})
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getFrontMenus() {
|
export function getFrontMenus() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/frontmenus",
|
url: "/backend/frontmenus",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ export function getFrontMenus() {
|
|||||||
*/
|
*/
|
||||||
export function createFrontMenu(formData, options = {}) {
|
export function createFrontMenu(formData, options = {}) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/createfrontmenu",
|
url: "/backend/createfrontmenu",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: formData,
|
data: formData,
|
||||||
headers: {
|
headers: {
|
||||||
@ -35,7 +35,7 @@ export function createFrontMenu(formData, options = {}) {
|
|||||||
*/
|
*/
|
||||||
export function editFrontMenu(id, frontMenuData) {
|
export function editFrontMenu(id, frontMenuData) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editfrontmenu/${id}`,
|
url: `/backend/editfrontmenu/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: frontMenuData,
|
data: frontMenuData,
|
||||||
});
|
});
|
||||||
@ -48,7 +48,7 @@ export function editFrontMenu(id, frontMenuData) {
|
|||||||
*/
|
*/
|
||||||
export function deleteFrontMenu(id) {
|
export function deleteFrontMenu(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deletefrontmenu/${id}`,
|
url: `/backend/deletefrontmenu/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getModuleCategory() {
|
export function getModuleCategory() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/moduleCategory",
|
url: "/backend/moduleCategory",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ export function getModuleCategory() {
|
|||||||
*/
|
*/
|
||||||
export function getModules(cid) {
|
export function getModules(cid) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/moduleCenter/modules",
|
url: "/backend/moduleCenter/modules",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { cid }
|
params: { cid }
|
||||||
});
|
});
|
||||||
@ -34,7 +34,7 @@ export function getModules(cid) {
|
|||||||
*/
|
*/
|
||||||
export function editModuleCategory(data) {
|
export function editModuleCategory(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/moduleCenter/editCategory",
|
url: "/backend/moduleCenter/editCategory",
|
||||||
method: "post",
|
method: "post",
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
@ -50,7 +50,7 @@ export function editModuleCategory(data) {
|
|||||||
*/
|
*/
|
||||||
export function editModules(data) {
|
export function editModules(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/moduleCenter/editModules",
|
url: "/backend/moduleCenter/editModules",
|
||||||
method: "post",
|
method: "post",
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getOnePages() {
|
export function getOnePages() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/allonepages",
|
url: "/backend/allonepages",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -18,7 +18,7 @@ export function getOnePages() {
|
|||||||
*/
|
*/
|
||||||
export function createOnePage(formData) {
|
export function createOnePage(formData) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/createonepage",
|
url: "/backend/createonepage",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: formData,
|
data: formData,
|
||||||
});
|
});
|
||||||
@ -32,7 +32,7 @@ export function createOnePage(formData) {
|
|||||||
*/
|
*/
|
||||||
export function editOnePage(id, onePageData) {
|
export function editOnePage(id, onePageData) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editonepage/${id}`,
|
url: `/backend/editonepage/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: onePageData,
|
data: onePageData,
|
||||||
});
|
});
|
||||||
@ -45,7 +45,7 @@ export function editOnePage(id, onePageData) {
|
|||||||
*/
|
*/
|
||||||
export function deleteOnePage(id) {
|
export function deleteOnePage(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteonepage/${id}`,
|
url: `/backend/deleteonepage/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getOperationLogs(params) {
|
export function getOperationLogs(params) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/operationLogs",
|
url: "/backend/operationLogs",
|
||||||
method: "get",
|
method: "get",
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
@ -28,7 +28,7 @@ export function getOperationLogs(params) {
|
|||||||
*/
|
*/
|
||||||
export function getOperationLogDetail(id) {
|
export function getOperationLogDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/operationLogs/${id}`,
|
url: `/backend/operationLogs/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -40,7 +40,7 @@ export function getOperationLogDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function deleteOperationLog(id) {
|
export function deleteOperationLog(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/operationLogs/${id}`,
|
url: `/backend/operationLogs/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ export function deleteOperationLog(id) {
|
|||||||
*/
|
*/
|
||||||
export function batchDeleteOperationLogs(ids) {
|
export function batchDeleteOperationLogs(ids) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/operationLogs/batchDelete",
|
url: "/backend/operationLogs/batchDelete",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: { ids },
|
data: { ids },
|
||||||
});
|
});
|
||||||
@ -64,7 +64,7 @@ export function batchDeleteOperationLogs(ids) {
|
|||||||
*/
|
*/
|
||||||
export function getOperationStatistics() {
|
export function getOperationStatistics() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/operationLogs/statistics",
|
url: "/backend/operationLogs/statistics",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@ import request from '@/utils/request';
|
|||||||
|
|
||||||
export function getAllMenuPermissions(params = {}) {
|
export function getAllMenuPermissions(params = {}) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/allmenupermissions',
|
url: '/backend/allmenupermissions',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
});
|
});
|
||||||
@ -10,14 +10,14 @@ export function getAllMenuPermissions(params = {}) {
|
|||||||
|
|
||||||
export function getRolePermissions(roleId) {
|
export function getRolePermissions(roleId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/rolepermissions/${roleId}`,
|
url: `/backend/rolepermissions/${roleId}`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function assignRolePermissions(roleId, permissions) {
|
export function assignRolePermissions(roleId, permissions) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/assignrolepermissions/${roleId}`,
|
url: `/backend/assignrolepermissions/${roleId}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: { permissions }
|
data: { permissions }
|
||||||
});
|
});
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import request from '@/utils/request';
|
|||||||
// 获取租户下的所有职位
|
// 获取租户下的所有职位
|
||||||
export function getTenantPositions(tenantId) {
|
export function getTenantPositions(tenantId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/positions/tenant/${tenantId}`,
|
url: `/backend/positions/tenant/${tenantId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -11,7 +11,7 @@ export function getTenantPositions(tenantId) {
|
|||||||
// 根据部门ID获取职位列表
|
// 根据部门ID获取职位列表
|
||||||
export function getPositionsByDepartment(departmentId) {
|
export function getPositionsByDepartment(departmentId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/positions/department/${departmentId}`,
|
url: `/backend/positions/department/${departmentId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -19,7 +19,7 @@ export function getPositionsByDepartment(departmentId) {
|
|||||||
// 获取职位详情
|
// 获取职位详情
|
||||||
export function getPositionInfo(positionId) {
|
export function getPositionInfo(positionId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/positions/${positionId}`,
|
url: `/backend/positions/${positionId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -27,7 +27,7 @@ export function getPositionInfo(positionId) {
|
|||||||
// 添加职位
|
// 添加职位
|
||||||
export function addPosition(data) {
|
export function addPosition(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/positions',
|
url: '/backend/positions',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -36,7 +36,7 @@ export function addPosition(data) {
|
|||||||
// 更新职位信息
|
// 更新职位信息
|
||||||
export function editPosition(positionId, data) {
|
export function editPosition(positionId, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/positions/${positionId}`,
|
url: `/backend/positions/${positionId}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -45,7 +45,7 @@ export function editPosition(positionId, data) {
|
|||||||
// 删除职位
|
// 删除职位
|
||||||
export function deletePosition(positionId) {
|
export function deletePosition(positionId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/positions/${positionId}`,
|
url: `/backend/positions/${positionId}`,
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import request from '@/utils/request'
|
|||||||
*/
|
*/
|
||||||
export function getProductsList(params) {
|
export function getProductsList(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/productsList',
|
url: '/backend/productsList',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -20,7 +20,7 @@ export function getProductsList(params) {
|
|||||||
*/
|
*/
|
||||||
export function addProducts(data) {
|
export function addProducts(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/addProducts',
|
url: '/backend/addProducts',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -34,7 +34,7 @@ export function addProducts(data) {
|
|||||||
*/
|
*/
|
||||||
export function updateProducts(id, data) {
|
export function updateProducts(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editProducts/${id}`,
|
url: `/backend/editProducts/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -47,7 +47,7 @@ export function updateProducts(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteProducts(id) {
|
export function deleteProducts(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteProducts/${id}`,
|
url: `/backend/deleteProducts/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@ export function deleteProducts(id) {
|
|||||||
*/
|
*/
|
||||||
export function getProductsTypesList(params) {
|
export function getProductsTypesList(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/productsTypesList',
|
url: '/backend/productsTypesList',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -72,7 +72,7 @@ export function getProductsTypesList(params) {
|
|||||||
*/
|
*/
|
||||||
export function addProductsTypes(data) {
|
export function addProductsTypes(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/addProductsTypes',
|
url: '/backend/addProductsTypes',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -86,7 +86,7 @@ export function addProductsTypes(data) {
|
|||||||
*/
|
*/
|
||||||
export function updateProductsTypes(id, data) {
|
export function updateProductsTypes(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editProductsTypes/${id}`,
|
url: `/backend/editProductsTypes/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -99,7 +99,7 @@ export function updateProductsTypes(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteProductsTypes(id) {
|
export function deleteProductsTypes(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteProductsTypes/${id}`,
|
url: `/backend/deleteProductsTypes/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,21 +2,21 @@ import request from '@/utils/request'
|
|||||||
|
|
||||||
export function getAllRoles() {
|
export function getAllRoles() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/allRoles',
|
url: '/backend/allRoles',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getRoleById(id) {
|
export function getRoleById(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/roles/${id}`,
|
url: `/backend/roles/${id}`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createRole(data) {
|
export function createRole(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/roles',
|
url: '/backend/roles',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -24,7 +24,7 @@ export function createRole(data) {
|
|||||||
|
|
||||||
export function updateRole(id, data) {
|
export function updateRole(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/roles/${id}`,
|
url: `/backend/roles/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -32,7 +32,7 @@ export function updateRole(id, data) {
|
|||||||
|
|
||||||
export function deleteRole(id) {
|
export function deleteRole(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/roles/${id}`,
|
url: `/backend/roles/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import request from '@/utils/request'
|
|||||||
*/
|
*/
|
||||||
export function getServiceList(params) {
|
export function getServiceList(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/servicesList',
|
url: '/backend/servicesList',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -20,7 +20,7 @@ export function getServiceList(params) {
|
|||||||
*/
|
*/
|
||||||
export function addService(data) {
|
export function addService(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/addServices',
|
url: '/backend/addServices',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -34,7 +34,7 @@ export function addService(data) {
|
|||||||
*/
|
*/
|
||||||
export function updateService(id, data) {
|
export function updateService(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editServices/${id}`,
|
url: `/backend/editServices/${id}`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -47,7 +47,7 @@ export function updateService(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteService(id) {
|
export function deleteService(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteServices/${id}`,
|
url: `/backend/deleteServices/${id}`,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export function saveNormalInfos(data) {
|
|||||||
*/
|
*/
|
||||||
export function getVerifyInfos() {
|
export function getVerifyInfos() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/loginVerifyInfos",
|
url: "/backend/loginVerifyInfos",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ export function getVerifyInfos() {
|
|||||||
*/
|
*/
|
||||||
export function saveVerifyInfos(data) {
|
export function saveVerifyInfos(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/saveloginVerifyInfos",
|
url: "/backend/saveloginVerifyInfos",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -57,7 +57,7 @@ export function saveVerifyInfos(data) {
|
|||||||
*/
|
*/
|
||||||
export function getLegalInfos(tid) {
|
export function getLegalInfos(tid) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/legalInfos",
|
url: "/backend/legalInfos",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { tid }
|
params: { tid }
|
||||||
});
|
});
|
||||||
@ -70,7 +70,7 @@ export function getLegalInfos(tid) {
|
|||||||
*/
|
*/
|
||||||
export function saveLegalInfos(data) {
|
export function saveLegalInfos(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/saveLegalInfos",
|
url: "/backend/saveLegalInfos",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -83,7 +83,7 @@ export function saveLegalInfos(data) {
|
|||||||
*/
|
*/
|
||||||
export function getCompanyInfos(tid) {
|
export function getCompanyInfos(tid) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/companyInfos",
|
url: "/backend/companyInfos",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { tid }
|
params: { tid }
|
||||||
});
|
});
|
||||||
@ -96,7 +96,7 @@ export function getCompanyInfos(tid) {
|
|||||||
*/
|
*/
|
||||||
export function saveCompanyInfos(data) {
|
export function saveCompanyInfos(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/saveCompanyInfos",
|
url: "/backend/saveCompanyInfos",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -109,7 +109,7 @@ export function saveCompanyInfos(data) {
|
|||||||
*/
|
*/
|
||||||
export function getCompanySeo(tid) {
|
export function getCompanySeo(tid) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/companySeo",
|
url: "/backend/companySeo",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { tid }
|
params: { tid }
|
||||||
});
|
});
|
||||||
@ -122,7 +122,7 @@ export function getCompanySeo(tid) {
|
|||||||
*/
|
*/
|
||||||
export function saveCompanySeo(data) {
|
export function saveCompanySeo(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/saveCompanySeo",
|
url: "/backend/saveCompanySeo",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getSmsInfo() {
|
export function getSmsInfo() {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/sms/info",
|
url: "/backend/sms/info",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -15,7 +15,7 @@ export function getSmsInfo() {
|
|||||||
*/
|
*/
|
||||||
export function editSmsInfo(data: any) {
|
export function editSmsInfo(data: any) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/sms/editinfo",
|
url: "/backend/sms/editinfo",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -26,7 +26,7 @@ export function editSmsInfo(data: any) {
|
|||||||
*/
|
*/
|
||||||
export function sendTestSms(data: any) {
|
export function sendTestSms(data: any) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/sms/sendtest",
|
url: "/backend/sms/sendtest",
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -37,7 +37,7 @@ export function sendTestSms(data: any) {
|
|||||||
*/
|
*/
|
||||||
export function getSmsTaskList(params: { status?: string | number; phone?: string } = {}) {
|
export function getSmsTaskList(params: { status?: string | number; phone?: string } = {}) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/sms/taskList",
|
url: "/backend/sms/taskList",
|
||||||
method: "get",
|
method: "get",
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
@ -48,7 +48,7 @@ export function getSmsTaskList(params: { status?: string | number; phone?: strin
|
|||||||
*/
|
*/
|
||||||
export function editSmsTask(id: number | string, data: any) {
|
export function editSmsTask(id: number | string, data: any) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/sms/taskEdit/${id}`,
|
url: `/backend/sms/taskEdit/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import request from "@/utils/request";
|
|||||||
*/
|
*/
|
||||||
export function getTenantList(params) {
|
export function getTenantList(params) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/tenant/getTenant",
|
url: "/backend/tenant/getTenant",
|
||||||
method: "get",
|
method: "get",
|
||||||
params: params,
|
params: params,
|
||||||
});
|
});
|
||||||
@ -24,7 +24,7 @@ export function getTenantList(params) {
|
|||||||
*/
|
*/
|
||||||
export function getTenantDetail(id) {
|
export function getTenantDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/tenant/getTenantDetail/${id}`,
|
url: `/backend/tenant/getTenantDetail/${id}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ export function getTenantDetail(id) {
|
|||||||
*/
|
*/
|
||||||
export function createTenant(data) {
|
export function createTenant(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/tenant/createTenant",
|
url: "/backend/tenant/createTenant",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
headers: {
|
headers: {
|
||||||
@ -52,7 +52,7 @@ export function createTenant(data) {
|
|||||||
*/
|
*/
|
||||||
export function editTenant(id, data) {
|
export function editTenant(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/tenant/editTenant/${id}`,
|
url: `/backend/tenant/editTenant/${id}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -65,7 +65,7 @@ export function editTenant(id, data) {
|
|||||||
*/
|
*/
|
||||||
export function deleteTenant(id) {
|
export function deleteTenant(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/tenant/deleteTenant/${id}`,
|
url: `/backend/tenant/deleteTenant/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ export function deleteTenant(id) {
|
|||||||
*/
|
*/
|
||||||
export function checkTenantCode(tenant_code) {
|
export function checkTenantCode(tenant_code) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/tenant/findTenantCode',
|
url: '/backend/tenant/findTenantCode',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { tenant_code }
|
params: { tenant_code }
|
||||||
});
|
});
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import request from '@/utils/request'
|
|||||||
// 获取模板列表
|
// 获取模板列表
|
||||||
export function getThemeList() {
|
export function getThemeList() {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/theme',
|
url: '/backend/theme',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -11,7 +11,7 @@ export function getThemeList() {
|
|||||||
// 切换模板
|
// 切换模板
|
||||||
export function switchTheme(data) {
|
export function switchTheme(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/theme/switch',
|
url: '/backend/theme/switch',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
@ -20,7 +20,7 @@ export function switchTheme(data) {
|
|||||||
// 获取模板数据
|
// 获取模板数据
|
||||||
export function getThemeData(params) {
|
export function getThemeData(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/theme/data',
|
url: '/backend/theme/data',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
@ -29,7 +29,7 @@ export function getThemeData(params) {
|
|||||||
// 保存模板数据
|
// 保存模板数据
|
||||||
export function saveThemeData(data) {
|
export function saveThemeData(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/theme/data',
|
url: '/backend/theme/data',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,17 +1,18 @@
|
|||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
|
|
||||||
//获取所有用户信息
|
//获取所有用户信息
|
||||||
export function getAllUsers() {
|
export function getAllUsers(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/getAllUsers',
|
url: '/backend/getAllUsers',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取租户用户
|
//获取租户用户
|
||||||
export function getTenantUsers(tenantId) {
|
export function getTenantUsers(tenantId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/getTenantUsers/${tenantId}`,
|
url: `/backend/getTenantUsers/${tenantId}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -27,7 +28,7 @@ export function getUserInfo(userId) {
|
|||||||
// 添加用户
|
// 添加用户
|
||||||
export function addUser(data) {
|
export function addUser(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/addUser',
|
url: '/backend/addUser',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -36,7 +37,7 @@ export function addUser(data) {
|
|||||||
// 编辑用户信息
|
// 编辑用户信息
|
||||||
export function editUser(userId, data) {
|
export function editUser(userId, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/editUser/${userId}`,
|
url: `/backend/editUser/${userId}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
@ -47,10 +48,25 @@ export function updateUserInfo(userId, data) {
|
|||||||
return editUser(userId, data);
|
return editUser(userId, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新个人资料
|
||||||
|
export function updateUserProfile(userId, data) {
|
||||||
|
return editUser(userId, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绑定/更换手机号
|
||||||
|
export function bindPhone(userId, phone) {
|
||||||
|
return editUser(userId, { phone });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绑定/更换邮箱
|
||||||
|
export function bindEmail(userId, email) {
|
||||||
|
return editUser(userId, { email });
|
||||||
|
}
|
||||||
|
|
||||||
// 删除用户
|
// 删除用户
|
||||||
export function deleteUser(userId) {
|
export function deleteUser(userId) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/deleteUser/${userId}`,
|
url: `/backend/deleteUser/${userId}`,
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -58,11 +74,11 @@ export function deleteUser(userId) {
|
|||||||
// 修改密码
|
// 修改密码
|
||||||
export function changePassword(userId, data) {
|
export function changePassword(userId, data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/admin/changePassword',
|
url: '/backend/changePassword',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: {
|
data: {
|
||||||
id: userId,
|
id: userId,
|
||||||
password: data.newPassword
|
password: data.newPassword
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import request from "@/utils/request";
|
|||||||
// 获取文章列表
|
// 获取文章列表
|
||||||
export function GetCRMWorkbench(params) {
|
export function GetCRMWorkbench(params) {
|
||||||
return request({
|
return request({
|
||||||
url: `/admin/workbench/crm`,
|
url: `/backend/workbench/crm`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref } from "vue";
|
import { reactive, ref } from "vue";
|
||||||
import { ElMessage, type FormInstance, type FormRules } from "element-plus";
|
import { ElMessage, type FormInstance, type FormRules } from "element-plus";
|
||||||
import { editEmployee } from "@/api/erp";
|
import { changePassword } from "@/api/user";
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: "submit"): void;
|
(e: "submit"): void;
|
||||||
@ -99,8 +99,8 @@ const handleSubmit = async () => {
|
|||||||
|
|
||||||
submitLoading.value = true;
|
submitLoading.value = true;
|
||||||
try {
|
try {
|
||||||
await editEmployee(currentUser.value.id, {
|
await changePassword(currentUser.value.id, {
|
||||||
password: form.password,
|
newPassword: form.password,
|
||||||
});
|
});
|
||||||
|
|
||||||
ElMessage.success("密码修改成功");
|
ElMessage.success("密码修改成功");
|
||||||
|
|||||||
@ -67,7 +67,7 @@
|
|||||||
import { ref, reactive, watch } from "vue";
|
import { ref, reactive, watch } from "vue";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
import { Plus } from "@element-plus/icons-vue";
|
import { Plus } from "@element-plus/icons-vue";
|
||||||
import { getTenantUserList, editTenantUser } from "@/api/tenantUser";
|
import { getAllUsers, changePassword } from "@/api/user";
|
||||||
import AddUser from "./adduser.vue";
|
import AddUser from "./adduser.vue";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@ -119,7 +119,7 @@ const refreshTenantUsers = async () => {
|
|||||||
if (id == null) return;
|
if (id == null) return;
|
||||||
usersLoading.value = true;
|
usersLoading.value = true;
|
||||||
try {
|
try {
|
||||||
const usersRes = await getTenantUserList(buildTenantUserQuery(id));
|
const usersRes = await getAllUsers(buildTenantUserQuery(id));
|
||||||
if (usersRes?.code === 200) {
|
if (usersRes?.code === 200) {
|
||||||
tenantUsers.value = usersRes?.data?.list || usersRes?.data || [];
|
tenantUsers.value = usersRes?.data?.list || usersRes?.data || [];
|
||||||
} else {
|
} else {
|
||||||
@ -135,7 +135,7 @@ const refreshTenantUsers = async () => {
|
|||||||
const loadUsersForTid = async (tid: number) => {
|
const loadUsersForTid = async (tid: number) => {
|
||||||
usersLoading.value = true;
|
usersLoading.value = true;
|
||||||
try {
|
try {
|
||||||
const usersRes = await getTenantUserList({ tid });
|
const usersRes = await getAllUsers({ tid });
|
||||||
if (usersRes?.code === 200) {
|
if (usersRes?.code === 200) {
|
||||||
tenantUsers.value = usersRes?.data?.list || usersRes?.data || [];
|
tenantUsers.value = usersRes?.data?.list || usersRes?.data || [];
|
||||||
} else {
|
} else {
|
||||||
@ -194,7 +194,7 @@ const submitPassword = async () => {
|
|||||||
|
|
||||||
passwordSubmitting.value = true;
|
passwordSubmitting.value = true;
|
||||||
try {
|
try {
|
||||||
const res = await editTenantUser(currentTenantUserId.value, { password: passwordForm.password });
|
const res = await changePassword(currentTenantUserId.value, { newPassword: passwordForm.password });
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
ElMessage.success("密码修改成功");
|
ElMessage.success("密码修改成功");
|
||||||
passwordDialogVisible.value = false;
|
passwordDialogVisible.value = false;
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
*/
|
*/
|
||||||
import { ref, reactive } from 'vue';
|
import { ref, reactive } from 'vue';
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import { createTenantUser } from '@/api/tenantUser';
|
import { addUser } from '@/api/user';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
const visible = ref(false);
|
const visible = ref(false);
|
||||||
@ -123,7 +123,7 @@ const submitForm = async () => {
|
|||||||
};
|
};
|
||||||
// 提交时不需要把确认密码发给后端
|
// 提交时不需要把确认密码发给后端
|
||||||
delete (submitData as any).password2;
|
delete (submitData as any).password2;
|
||||||
const res = await createTenantUser(submitData);
|
const res = await addUser(submitData);
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
ElMessage.success('添加成功');
|
ElMessage.success('添加成功');
|
||||||
visible.value = false;
|
visible.value = false;
|
||||||
@ -141,4 +141,4 @@ const handleClosed = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
defineExpose({ open });
|
defineExpose({ open });
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
106
src/views/user/components/BindEmailDialog.vue
Normal file
106
src/views/user/components/BindEmailDialog.vue
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="userInfo?.email ? '更换邮箱' : '绑定邮箱'"
|
||||||
|
width="450px"
|
||||||
|
@close="handleDialogClose"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
:model="form"
|
||||||
|
:rules="formRules"
|
||||||
|
label-width="90px"
|
||||||
|
>
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input v-model="form.email" placeholder="请输入邮箱" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="loading" @click="handleSave">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, reactive, ref, watch } from "vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { bindEmail } from "@/api/user";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(["update:modelValue", "saved"]);
|
||||||
|
|
||||||
|
const visible = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => emit("update:modelValue", value)
|
||||||
|
});
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const formRef = ref(null);
|
||||||
|
|
||||||
|
const form = reactive({
|
||||||
|
email: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
const formRules = {
|
||||||
|
email: [
|
||||||
|
{ required: true, message: "请输入邮箱", trigger: "blur" },
|
||||||
|
{ type: "email", message: "请输入正确的邮箱格式", trigger: "blur" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const syncForm = () => {
|
||||||
|
form.email = props.userInfo?.email || "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSave = async () => {
|
||||||
|
try {
|
||||||
|
await formRef.value.validate();
|
||||||
|
loading.value = true;
|
||||||
|
|
||||||
|
const res = await bindEmail(props.userId, form.email);
|
||||||
|
|
||||||
|
if (res.code === 200) {
|
||||||
|
ElMessage.success(props.userInfo?.email ? "邮箱更换成功" : "邮箱绑定成功");
|
||||||
|
visible.value = false;
|
||||||
|
emit("saved");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("保存邮箱失败", error);
|
||||||
|
if (error !== false) {
|
||||||
|
ElMessage.error("保存邮箱失败");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDialogClose = () => {
|
||||||
|
formRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(value) => {
|
||||||
|
if (value) {
|
||||||
|
syncForm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
106
src/views/user/components/BindPhoneDialog.vue
Normal file
106
src/views/user/components/BindPhoneDialog.vue
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="userInfo?.phone ? '更换手机号' : '绑定手机号'"
|
||||||
|
width="450px"
|
||||||
|
@close="handleDialogClose"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
:model="form"
|
||||||
|
:rules="formRules"
|
||||||
|
label-width="90px"
|
||||||
|
>
|
||||||
|
<el-form-item label="手机号" prop="phone">
|
||||||
|
<el-input v-model="form.phone" placeholder="请输入手机号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="loading" @click="handleSave">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, reactive, ref, watch } from "vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { bindPhone } from "@/api/user";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(["update:modelValue", "saved"]);
|
||||||
|
|
||||||
|
const visible = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => emit("update:modelValue", value)
|
||||||
|
});
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const formRef = ref(null);
|
||||||
|
|
||||||
|
const form = reactive({
|
||||||
|
phone: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
const formRules = {
|
||||||
|
phone: [
|
||||||
|
{ required: true, message: "请输入手机号", trigger: "blur" },
|
||||||
|
{ pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const syncForm = () => {
|
||||||
|
form.phone = props.userInfo?.phone || "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSave = async () => {
|
||||||
|
try {
|
||||||
|
await formRef.value.validate();
|
||||||
|
loading.value = true;
|
||||||
|
|
||||||
|
const res = await bindPhone(props.userId, form.phone);
|
||||||
|
|
||||||
|
if (res.code === 200) {
|
||||||
|
ElMessage.success(props.userInfo?.phone ? "手机号更换成功" : "手机号绑定成功");
|
||||||
|
visible.value = false;
|
||||||
|
emit("saved");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("保存手机号失败", error);
|
||||||
|
if (error !== false) {
|
||||||
|
ElMessage.error("保存手机号失败");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDialogClose = () => {
|
||||||
|
formRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(value) => {
|
||||||
|
if (value) {
|
||||||
|
syncForm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
125
src/views/user/components/ChangePasswordDialog.vue
Normal file
125
src/views/user/components/ChangePasswordDialog.vue
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
title="修改密码"
|
||||||
|
width="450px"
|
||||||
|
@close="handleDialogClose"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="passwordFormRef"
|
||||||
|
:model="passwordForm"
|
||||||
|
:rules="passwordFormRules"
|
||||||
|
label-width="100px"
|
||||||
|
>
|
||||||
|
<el-form-item label="旧密码" prop="oldPassword">
|
||||||
|
<el-input
|
||||||
|
v-model="passwordForm.oldPassword"
|
||||||
|
type="password"
|
||||||
|
placeholder="请输入旧密码"
|
||||||
|
show-password
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新密码" prop="newPassword">
|
||||||
|
<el-input
|
||||||
|
v-model="passwordForm.newPassword"
|
||||||
|
type="password"
|
||||||
|
placeholder="请输入新密码"
|
||||||
|
show-password
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="确认密码" prop="confirmPassword">
|
||||||
|
<el-input
|
||||||
|
v-model="passwordForm.confirmPassword"
|
||||||
|
type="password"
|
||||||
|
placeholder="请再次输入新密码"
|
||||||
|
show-password
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="loading" @click="handleSavePassword">
|
||||||
|
确认修改
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, reactive, ref } from "vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { changePassword } from "@/api/user";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(["update:modelValue", "saved"]);
|
||||||
|
|
||||||
|
const visible = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => emit("update:modelValue", value)
|
||||||
|
});
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const passwordFormRef = ref(null);
|
||||||
|
|
||||||
|
const passwordForm = reactive({
|
||||||
|
oldPassword: "",
|
||||||
|
newPassword: "",
|
||||||
|
confirmPassword: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
const validateConfirmPassword = (rule, value, callback) => {
|
||||||
|
if (value !== passwordForm.newPassword) {
|
||||||
|
callback(new Error("两次输入的密码不一致"));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const passwordFormRules = {
|
||||||
|
oldPassword: [{ required: true, message: "请输入旧密码", trigger: "blur" }],
|
||||||
|
newPassword: [
|
||||||
|
{ required: true, message: "请输入新密码", trigger: "blur" },
|
||||||
|
{ min: 6, max: 20, message: "密码长度为 6 到 20 个字符", trigger: "blur" }
|
||||||
|
],
|
||||||
|
confirmPassword: [
|
||||||
|
{ required: true, message: "请再次输入新密码", trigger: "blur" },
|
||||||
|
{ validator: validateConfirmPassword, trigger: "blur" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSavePassword = async () => {
|
||||||
|
try {
|
||||||
|
await passwordFormRef.value.validate();
|
||||||
|
loading.value = true;
|
||||||
|
const res = await changePassword(props.userId, passwordForm);
|
||||||
|
if (res.code !== 200) {
|
||||||
|
ElMessage.error(res.msg || "修改密码失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ElMessage.success(res.msg || "密码修改成功");
|
||||||
|
visible.value = false;
|
||||||
|
emit("saved");
|
||||||
|
} catch (error) {
|
||||||
|
console.error("修改密码失败", error);
|
||||||
|
if (error !== false) {
|
||||||
|
ElMessage.error("修改密码失败");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDialogClose = () => {
|
||||||
|
passwordFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
91
src/views/user/components/DetailCard.vue
Normal file
91
src/views/user/components/DetailCard.vue
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<template>
|
||||||
|
<div class="detail-card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">详细资料</h3>
|
||||||
|
<el-button type="primary" :icon="Edit" size="small" @click="$emit('edit')">
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<el-descriptions :column="2" border>
|
||||||
|
<el-descriptions-item label="姓名">
|
||||||
|
{{ userInfo?.name || "-" }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="性别">
|
||||||
|
{{ getSexText(userInfo?.sex) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="生日">
|
||||||
|
{{ userInfo?.birth || "-" }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="状态">
|
||||||
|
<el-tag :type="userInfo?.status === 1 ? 'success' : 'danger'" size="small">
|
||||||
|
{{ userInfo?.status === 1 ? "正常" : "禁用" }}
|
||||||
|
</el-tag>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="注册时间" :span="2">
|
||||||
|
{{ formatDate(userInfo?.create_time) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="最后登录IP" :span="2">
|
||||||
|
{{ userInfo?.last_login_ip || "-" }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { Edit } from "@element-plus/icons-vue";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
formatDate: {
|
||||||
|
type: Function,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
getSexText: {
|
||||||
|
type: Function,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
defineEmits(["edit"]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.detail-card {
|
||||||
|
background: var(--el-bg-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
border: 1px solid var(--el-border-color-lighter);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.detail-card {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
137
src/views/user/components/EditProfileDialog.vue
Normal file
137
src/views/user/components/EditProfileDialog.vue
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
title="编辑资料"
|
||||||
|
width="500px"
|
||||||
|
@close="handleDialogClose"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="editFormRef"
|
||||||
|
:model="editForm"
|
||||||
|
:rules="editFormRules"
|
||||||
|
label-width="80px"
|
||||||
|
>
|
||||||
|
<el-form-item label="姓名" prop="name">
|
||||||
|
<el-input v-model="editForm.name" placeholder="请输入姓名" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="性别">
|
||||||
|
<el-radio-group v-model="editForm.sex">
|
||||||
|
<el-radio :value="0">保密</el-radio>
|
||||||
|
<el-radio :value="1">男</el-radio>
|
||||||
|
<el-radio :value="2">女</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="生日">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="editForm.birth"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
style="width: 100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input v-model="editForm.email" placeholder="请输入邮箱" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号" prop="phone">
|
||||||
|
<el-input v-model="editForm.phone" placeholder="请输入手机号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="loading" @click="handleSaveProfile">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, reactive, ref, watch } from "vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { updateUserProfile } from "@/api/user";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(["update:modelValue", "saved"]);
|
||||||
|
|
||||||
|
const visible = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => emit("update:modelValue", value)
|
||||||
|
});
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const editFormRef = ref(null);
|
||||||
|
|
||||||
|
const editForm = reactive({
|
||||||
|
email: "",
|
||||||
|
phone: "",
|
||||||
|
name: "",
|
||||||
|
sex: 0,
|
||||||
|
birth: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
const editFormRules = {
|
||||||
|
email: [
|
||||||
|
{ required: true, message: "请输入邮箱", trigger: "blur" },
|
||||||
|
{ type: "email", message: "请输入正确的邮箱格式", trigger: "blur" }
|
||||||
|
],
|
||||||
|
phone: [
|
||||||
|
{ pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const syncForm = () => {
|
||||||
|
editForm.name = props.userInfo?.name || "";
|
||||||
|
editForm.sex = props.userInfo?.sex || 0;
|
||||||
|
editForm.birth = props.userInfo?.birth || "";
|
||||||
|
editForm.email = props.userInfo?.email || "";
|
||||||
|
editForm.phone = props.userInfo?.phone || "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSaveProfile = async () => {
|
||||||
|
try {
|
||||||
|
await editFormRef.value.validate();
|
||||||
|
loading.value = true;
|
||||||
|
const res = await updateUserProfile(props.userId, editForm);
|
||||||
|
if (res.code === 200) {
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
visible.value = false;
|
||||||
|
emit("saved");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("保存失败", error);
|
||||||
|
if (error !== false) {
|
||||||
|
ElMessage.error("保存失败");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDialogClose = () => {
|
||||||
|
editFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(value) => {
|
||||||
|
if (value) {
|
||||||
|
syncForm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
130
src/views/user/components/ProfileCard.vue
Normal file
130
src/views/user/components/ProfileCard.vue
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<template>
|
||||||
|
<div class="profile-card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">个人资料</h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="avatar-section">
|
||||||
|
<el-avatar :size="100" :src="userInfo?.avatar || ''">
|
||||||
|
{{ userInfo?.account?.charAt(0)?.toUpperCase() || "U" }}
|
||||||
|
</el-avatar>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
link
|
||||||
|
size="small"
|
||||||
|
@click="$emit('change-avatar')"
|
||||||
|
>
|
||||||
|
更换头像
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="info-list">
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">账号</span>
|
||||||
|
<span class="info-value">{{ userInfo?.account || "-" }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">邮箱</span>
|
||||||
|
<span class="info-value">{{ userInfo?.email || "-" }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">手机号</span>
|
||||||
|
<span class="info-value">{{ userInfo?.phone || "-" }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">状态</span>
|
||||||
|
<el-tag :type="userInfo?.status === 1 ? 'success' : 'danger'" size="small">
|
||||||
|
{{ userInfo?.status === 1 ? "正常" : "禁用" }}
|
||||||
|
</el-tag>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
defineProps({
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
defineEmits(["change-avatar"]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.profile-card {
|
||||||
|
background: var(--el-bg-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
border: 1px solid var(--el-border-color-lighter);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-content {
|
||||||
|
.avatar-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
|
||||||
|
.el-avatar {
|
||||||
|
background: linear-gradient(135deg, #3973ff 0%, #4f84ff 100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-list {
|
||||||
|
.info-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 12px 0;
|
||||||
|
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--el-text-color-regular);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.profile-card {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
83
src/views/user/components/QuickActions.vue
Normal file
83
src/views/user/components/QuickActions.vue
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<template>
|
||||||
|
<div class="quick-actions">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">快捷操作</h3>
|
||||||
|
</div>
|
||||||
|
<div class="action-list">
|
||||||
|
<div class="action-item" @click="$emit('logout')">
|
||||||
|
<el-icon><SwitchButton /></el-icon>
|
||||||
|
<span>退出登录</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { SwitchButton } from "@element-plus/icons-vue";
|
||||||
|
|
||||||
|
defineEmits(["logout"]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.quick-actions {
|
||||||
|
background: var(--el-bg-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
border: 1px solid var(--el-border-color-lighter);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-list {
|
||||||
|
.action-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 14px 16px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
font-size: 20px;
|
||||||
|
color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.quick-actions {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
150
src/views/user/components/SecurityCard.vue
Normal file
150
src/views/user/components/SecurityCard.vue
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<template>
|
||||||
|
<div class="security-card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">安全设置</h3>
|
||||||
|
</div>
|
||||||
|
<div class="security-list">
|
||||||
|
<div class="security-item">
|
||||||
|
<div class="security-info">
|
||||||
|
<el-icon class="security-icon"><Lock /></el-icon>
|
||||||
|
<div class="security-text">
|
||||||
|
<div class="security-title">登录密码</div>
|
||||||
|
<div class="security-desc">用于登录系统</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" link @click="$emit('change-password')">
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="security-item">
|
||||||
|
<div class="security-info">
|
||||||
|
<el-icon class="security-icon"><Iphone /></el-icon>
|
||||||
|
<div class="security-text">
|
||||||
|
<div class="security-title">手机绑定</div>
|
||||||
|
<div class="security-desc">已绑定: {{ userInfo?.phone || "未绑定" }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" link @click="$emit('bind-phone')">
|
||||||
|
{{ userInfo?.phone ? "更换" : "绑定" }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="security-item">
|
||||||
|
<div class="security-info">
|
||||||
|
<el-icon class="security-icon"><Message /></el-icon>
|
||||||
|
<div class="security-text">
|
||||||
|
<div class="security-title">邮箱绑定</div>
|
||||||
|
<div class="security-desc">已绑定: {{ userInfo?.email || "未绑定" }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" link @click="$emit('bind-email')">
|
||||||
|
{{ userInfo?.email ? "更换" : "绑定" }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { Lock, Iphone, Message } from "@element-plus/icons-vue";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
userInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
defineEmits(["change-password", "bind-phone", "bind-email"]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.security-card {
|
||||||
|
background: var(--el-bg-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
border: 1px solid var(--el-border-color-lighter);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.security-list {
|
||||||
|
.security-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
border: 1px solid var(--el-border-color-lighter);
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: var(--el-color-primary-light-7);
|
||||||
|
background: var(--el-fill-color-lighter);
|
||||||
|
}
|
||||||
|
|
||||||
|
.security-info {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
|
||||||
|
.security-icon {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: linear-gradient(135deg, rgba(57, 115, 255, 0.1) 0%, rgba(79, 132, 255, 0.1) 100%);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: var(--el-color-primary);
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.security-text {
|
||||||
|
.security-title {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.security-desc {
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--el-text-color-placeholder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.security-card {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -2,233 +2,56 @@
|
|||||||
<div class="user-profile">
|
<div class="user-profile">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
|
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
|
||||||
<div class="profile-card">
|
<ProfileCard
|
||||||
<div class="card-header">
|
:user-info="userInfo"
|
||||||
<h3 class="card-title">个人资料</h3>
|
@change-avatar="handleAvatarChange"
|
||||||
</div>
|
/>
|
||||||
<div class="card-content">
|
|
||||||
<div class="avatar-section">
|
|
||||||
<el-avatar :size="100" :src="userInfo?.avatar || ''">
|
|
||||||
{{ userInfo?.account?.charAt(0)?.toUpperCase() || 'U' }}
|
|
||||||
</el-avatar>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
link
|
|
||||||
size="small"
|
|
||||||
@click="handleAvatarChange"
|
|
||||||
>
|
|
||||||
更换头像
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="info-list">
|
|
||||||
<div class="info-item">
|
|
||||||
<span class="info-label">账号</span>
|
|
||||||
<span class="info-value">{{ userInfo?.account || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-item">
|
|
||||||
<span class="info-label">邮箱</span>
|
|
||||||
<span class="info-value">{{ userInfo?.email || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-item">
|
|
||||||
<span class="info-label">手机号</span>
|
|
||||||
<span class="info-value">{{ userInfo?.phone || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-item">
|
|
||||||
<span class="info-label">状态</span>
|
|
||||||
<el-tag :type="userInfo?.status === 1 ? 'success' : 'danger'" size="small">
|
|
||||||
{{ userInfo?.status === 1 ? '正常' : '禁用' }}
|
|
||||||
</el-tag>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="quick-actions">
|
<QuickActions @logout="handleLogout" />
|
||||||
<div class="card-header">
|
|
||||||
<h3 class="card-title">快捷操作</h3>
|
|
||||||
</div>
|
|
||||||
<div class="action-list">
|
|
||||||
<div class="action-item" @click="handleLogout">
|
|
||||||
<el-icon><SwitchButton /></el-icon>
|
|
||||||
<span>退出登录</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :xs="24" :sm="24" :md="16" :lg="16" :xl="16">
|
<el-col :xs="24" :sm="24" :md="16" :lg="16" :xl="16">
|
||||||
<div class="detail-card">
|
<DetailCard
|
||||||
<div class="card-header">
|
:user-info="userInfo"
|
||||||
<h3 class="card-title">详细资料</h3>
|
:format-date="formatDate"
|
||||||
<el-button
|
:get-sex-text="getSexText"
|
||||||
type="primary"
|
@edit="handleEditProfile"
|
||||||
:icon="Edit"
|
/>
|
||||||
size="small"
|
|
||||||
@click="handleEditProfile"
|
|
||||||
>
|
|
||||||
编辑
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<el-descriptions :column="2" border>
|
|
||||||
<el-descriptions-item label="姓名">
|
|
||||||
{{ userInfo?.name || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="性别">
|
|
||||||
{{ getSexText(userInfo?.sex) }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="生日">
|
|
||||||
{{ userInfo?.birth || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="状态">
|
|
||||||
<el-tag :type="userInfo?.status === 1 ? 'success' : 'danger'" size="small">
|
|
||||||
{{ userInfo?.status === 1 ? '正常' : '禁用' }}
|
|
||||||
</el-tag>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="注册时间" :span="2">
|
|
||||||
{{ formatDate(userInfo?.create_time) }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="最后登录IP" :span="2">
|
|
||||||
{{ userInfo?.last_login_ip || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="security-card">
|
<SecurityCard
|
||||||
<div class="card-header">
|
:user-info="userInfo"
|
||||||
<h3 class="card-title">安全设置</h3>
|
@change-password="handleChangePassword"
|
||||||
</div>
|
@bind-phone="bindPhoneDialogVisible = true"
|
||||||
<div class="security-list">
|
@bind-email="bindEmailDialogVisible = true"
|
||||||
<div class="security-item">
|
/>
|
||||||
<div class="security-info">
|
|
||||||
<el-icon class="security-icon"><Lock /></el-icon>
|
|
||||||
<div class="security-text">
|
|
||||||
<div class="security-title">登录密码</div>
|
|
||||||
<div class="security-desc">用于登录系统</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" link @click="handleChangePassword">
|
|
||||||
修改
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="security-item">
|
|
||||||
<div class="security-info">
|
|
||||||
<el-icon class="security-icon"><Iphone /></el-icon>
|
|
||||||
<div class="security-text">
|
|
||||||
<div class="security-title">手机绑定</div>
|
|
||||||
<div class="security-desc">已绑定: {{ userInfo?.phone || '未绑定' }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" link>
|
|
||||||
{{ userInfo?.phone ? '更换' : '绑定' }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="security-item">
|
|
||||||
<div class="security-info">
|
|
||||||
<el-icon class="security-icon"><Message /></el-icon>
|
|
||||||
<div class="security-text">
|
|
||||||
<div class="security-title">邮箱绑定</div>
|
|
||||||
<div class="security-desc">已绑定: {{ userInfo?.email || '未绑定' }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" link>
|
|
||||||
{{ userInfo?.email ? '更换' : '绑定' }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-dialog
|
<EditProfileDialog
|
||||||
v-model="editDialogVisible"
|
v-model="editDialogVisible"
|
||||||
title="编辑资料"
|
:user-info="userInfo"
|
||||||
width="500px"
|
:user-id="authStore.user?.id"
|
||||||
@close="handleEditDialogClose"
|
@saved="fetchUserInfo"
|
||||||
>
|
/>
|
||||||
<el-form
|
|
||||||
ref="editFormRef"
|
|
||||||
:model="editForm"
|
|
||||||
:rules="editFormRules"
|
|
||||||
label-width="80px"
|
|
||||||
>
|
|
||||||
<el-form-item label="姓名" prop="name">
|
|
||||||
<el-input v-model="editForm.name" placeholder="请输入姓名" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="性别">
|
|
||||||
<el-radio-group v-model="editForm.sex">
|
|
||||||
<el-radio :value="0">保密</el-radio>
|
|
||||||
<el-radio :value="1">男</el-radio>
|
|
||||||
<el-radio :value="2">女</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="生日">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="editForm.birth"
|
|
||||||
type="date"
|
|
||||||
placeholder="选择日期"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
style="width: 100%"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="邮箱" prop="email">
|
|
||||||
<el-input v-model="editForm.email" placeholder="请输入邮箱" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="手机号" prop="phone">
|
|
||||||
<el-input v-model="editForm.phone" placeholder="请输入手机号" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
|
||||||
<el-button type="primary" :loading="editLoading" @click="handleSaveProfile">
|
|
||||||
保存
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<el-dialog
|
<ChangePasswordDialog
|
||||||
v-model="passwordDialogVisible"
|
v-model="passwordDialogVisible"
|
||||||
title="修改密码"
|
:user-id="authStore.user?.id"
|
||||||
width="450px"
|
/>
|
||||||
@close="handlePasswordDialogClose"
|
|
||||||
>
|
<BindPhoneDialog
|
||||||
<el-form
|
v-model="bindPhoneDialogVisible"
|
||||||
ref="passwordFormRef"
|
:user-info="userInfo"
|
||||||
:model="passwordForm"
|
:user-id="authStore.user?.id"
|
||||||
:rules="passwordFormRules"
|
@saved="fetchUserInfo"
|
||||||
label-width="100px"
|
/>
|
||||||
>
|
|
||||||
<el-form-item label="旧密码" prop="oldPassword">
|
<BindEmailDialog
|
||||||
<el-input
|
v-model="bindEmailDialogVisible"
|
||||||
v-model="passwordForm.oldPassword"
|
:user-info="userInfo"
|
||||||
type="password"
|
:user-id="authStore.user?.id"
|
||||||
placeholder="请输入旧密码"
|
@saved="fetchUserInfo"
|
||||||
show-password
|
/>
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="新密码" prop="newPassword">
|
|
||||||
<el-input
|
|
||||||
v-model="passwordForm.newPassword"
|
|
||||||
type="password"
|
|
||||||
placeholder="请输入新密码"
|
|
||||||
show-password
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="确认密码" prop="confirmPassword">
|
|
||||||
<el-input
|
|
||||||
v-model="passwordForm.confirmPassword"
|
|
||||||
type="password"
|
|
||||||
placeholder="请再次输入新密码"
|
|
||||||
show-password
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="passwordDialogVisible = false">取消</el-button>
|
|
||||||
<el-button type="primary" :loading="passwordLoading" @click="handleSavePassword">
|
|
||||||
确认修改
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -236,15 +59,16 @@
|
|||||||
import { ref, onMounted } from "vue";
|
import { ref, onMounted } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import {
|
import { getUserInfo } from "@/api/user";
|
||||||
Edit,
|
|
||||||
Lock,
|
|
||||||
SwitchButton,
|
|
||||||
Iphone,
|
|
||||||
Message
|
|
||||||
} from "@element-plus/icons-vue";
|
|
||||||
import { getUserInfo, updateUserInfo } from "@/api/user";
|
|
||||||
import { useAuthStore } from "@/stores/auth";
|
import { useAuthStore } from "@/stores/auth";
|
||||||
|
import ProfileCard from "./components/ProfileCard.vue";
|
||||||
|
import QuickActions from "./components/QuickActions.vue";
|
||||||
|
import DetailCard from "./components/DetailCard.vue";
|
||||||
|
import SecurityCard from "./components/SecurityCard.vue";
|
||||||
|
import EditProfileDialog from "./components/EditProfileDialog.vue";
|
||||||
|
import ChangePasswordDialog from "./components/ChangePasswordDialog.vue";
|
||||||
|
import BindPhoneDialog from "./components/BindPhoneDialog.vue";
|
||||||
|
import BindEmailDialog from "./components/BindEmailDialog.vue";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
@ -252,57 +76,8 @@ const authStore = useAuthStore();
|
|||||||
const userInfo = ref(null);
|
const userInfo = ref(null);
|
||||||
const editDialogVisible = ref(false);
|
const editDialogVisible = ref(false);
|
||||||
const passwordDialogVisible = ref(false);
|
const passwordDialogVisible = ref(false);
|
||||||
const editLoading = ref(false);
|
const bindPhoneDialogVisible = ref(false);
|
||||||
const passwordLoading = ref(false);
|
const bindEmailDialogVisible = ref(false);
|
||||||
|
|
||||||
const editFormRef = ref(null);
|
|
||||||
const passwordFormRef = ref(null);
|
|
||||||
|
|
||||||
const editForm = ref({
|
|
||||||
email: "",
|
|
||||||
phone: "",
|
|
||||||
name: "",
|
|
||||||
sex: 0,
|
|
||||||
birth: ""
|
|
||||||
});
|
|
||||||
|
|
||||||
const passwordForm = ref({
|
|
||||||
oldPassword: "",
|
|
||||||
newPassword: "",
|
|
||||||
confirmPassword: ""
|
|
||||||
});
|
|
||||||
|
|
||||||
const validateConfirmPassword = (rule, value, callback) => {
|
|
||||||
if (value !== passwordForm.value.newPassword) {
|
|
||||||
callback(new Error("两次输入的密码不一致"));
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const editFormRules = {
|
|
||||||
email: [
|
|
||||||
{ required: true, message: "请输入邮箱", trigger: "blur" },
|
|
||||||
{ type: "email", message: "请输入正确的邮箱格式", trigger: "blur" }
|
|
||||||
],
|
|
||||||
phone: [
|
|
||||||
{ pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" }
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
const passwordFormRules = {
|
|
||||||
oldPassword: [
|
|
||||||
{ required: true, message: "请输入旧密码", trigger: "blur" }
|
|
||||||
],
|
|
||||||
newPassword: [
|
|
||||||
{ required: true, message: "请输入新密码", trigger: "blur" },
|
|
||||||
{ min: 6, max: 20, message: "密码长度为 6 到 20 个字符", trigger: "blur" }
|
|
||||||
],
|
|
||||||
confirmPassword: [
|
|
||||||
{ required: true, message: "请再次输入新密码", trigger: "blur" },
|
|
||||||
{ validator: validateConfirmPassword, trigger: "blur" }
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
const formatDate = (date) => {
|
const formatDate = (date) => {
|
||||||
if (!date) return "-";
|
if (!date) return "-";
|
||||||
@ -342,66 +117,13 @@ const fetchUserInfo = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleEditProfile = () => {
|
const handleEditProfile = () => {
|
||||||
editForm.value = {
|
|
||||||
name: userInfo.value?.name || "",
|
|
||||||
sex: userInfo.value?.sex || 0,
|
|
||||||
birth: userInfo.value?.birth || "",
|
|
||||||
email: userInfo.value?.email || "",
|
|
||||||
phone: userInfo.value?.phone || ""
|
|
||||||
};
|
|
||||||
editDialogVisible.value = true;
|
editDialogVisible.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSaveProfile = async () => {
|
|
||||||
try {
|
|
||||||
await editFormRef.value.validate();
|
|
||||||
editLoading.value = true;
|
|
||||||
const userId = authStore.user?.id;
|
|
||||||
const res = await updateUserInfo(userId, editForm.value);
|
|
||||||
if (res.code === 200) {
|
|
||||||
ElMessage.success("保存成功");
|
|
||||||
editDialogVisible.value = false;
|
|
||||||
await fetchUserInfo();
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error("保存失败", error);
|
|
||||||
if (error !== false) {
|
|
||||||
ElMessage.error("保存失败");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
editLoading.value = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleEditDialogClose = () => {
|
|
||||||
editFormRef.value?.resetFields();
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleChangePassword = () => {
|
const handleChangePassword = () => {
|
||||||
passwordDialogVisible.value = true;
|
passwordDialogVisible.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSavePassword = async () => {
|
|
||||||
try {
|
|
||||||
await passwordFormRef.value.validate();
|
|
||||||
passwordLoading.value = true;
|
|
||||||
// TODO: 调用修改密码接口
|
|
||||||
ElMessage.success("密码修改成功");
|
|
||||||
passwordDialogVisible.value = false;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("修改密码失败", error);
|
|
||||||
if (error !== false) {
|
|
||||||
ElMessage.error("修改密码失败");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
passwordLoading.value = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handlePasswordDialogClose = () => {
|
|
||||||
passwordFormRef.value?.resetFields();
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleAvatarChange = () => {
|
const handleAvatarChange = () => {
|
||||||
ElMessage.info("头像上传功能开发中");
|
ElMessage.info("头像上传功能开发中");
|
||||||
};
|
};
|
||||||
@ -417,7 +139,7 @@ const handleLogout = () => {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("退出登录接口调用失败:", error);
|
console.error("退出登录接口调用失败:", error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清除所有本地存储
|
// 清除所有本地存储
|
||||||
localStorage.removeItem("active_tab");
|
localStorage.removeItem("active_tab");
|
||||||
localStorage.removeItem("1123567809876");
|
localStorage.removeItem("1123567809876");
|
||||||
@ -425,14 +147,14 @@ const handleLogout = () => {
|
|||||||
localStorage.removeItem("token");
|
localStorage.removeItem("token");
|
||||||
localStorage.removeItem("user");
|
localStorage.removeItem("user");
|
||||||
localStorage.removeItem("tenant");
|
localStorage.removeItem("tenant");
|
||||||
|
|
||||||
sessionStorage.removeItem("active_tab");
|
sessionStorage.removeItem("active_tab");
|
||||||
sessionStorage.removeItem("456");
|
sessionStorage.removeItem("456");
|
||||||
sessionStorage.removeItem("tabs_list");
|
sessionStorage.removeItem("tabs_list");
|
||||||
sessionStorage.removeItem("token");
|
sessionStorage.removeItem("token");
|
||||||
sessionStorage.removeItem("user");
|
sessionStorage.removeItem("user");
|
||||||
sessionStorage.removeItem("tenant");
|
sessionStorage.removeItem("tenant");
|
||||||
|
|
||||||
// 清除所有 cookies,包括跨域和不同路径的 cookie
|
// 清除所有 cookies,包括跨域和不同路径的 cookie
|
||||||
const clearCookie = (name) => {
|
const clearCookie = (name) => {
|
||||||
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
|
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
|
||||||
@ -442,13 +164,13 @@ const handleLogout = () => {
|
|||||||
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${location.hostname}`;
|
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${location.hostname}`;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 清除所有已知 cookie
|
// 清除所有已知 cookie
|
||||||
clearCookie("PHPSESSID");
|
clearCookie("PHPSESSID");
|
||||||
clearCookie("token");
|
clearCookie("token");
|
||||||
clearCookie("user");
|
clearCookie("user");
|
||||||
clearCookie("tenant");
|
clearCookie("tenant");
|
||||||
|
|
||||||
// 同时清除所有现有的 cookie
|
// 同时清除所有现有的 cookie
|
||||||
const cookies = document.cookie.split(";");
|
const cookies = document.cookie.split(";");
|
||||||
for (let i = 0; i < cookies.length; i++) {
|
for (let i = 0; i < cookies.length; i++) {
|
||||||
@ -459,7 +181,7 @@ const handleLogout = () => {
|
|||||||
clearCookie(name);
|
clearCookie(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
authStore.clearToken();
|
authStore.clearToken();
|
||||||
router.push("/login");
|
router.push("/login");
|
||||||
ElMessage.success("已退出登录");
|
ElMessage.success("已退出登录");
|
||||||
@ -474,166 +196,5 @@ onMounted(() => {
|
|||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
.user-profile {
|
.user-profile {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
.profile-card,
|
|
||||||
.quick-actions,
|
|
||||||
.detail-card,
|
|
||||||
.security-card {
|
|
||||||
background: var(--el-bg-color);
|
|
||||||
border-radius: 12px;
|
|
||||||
padding: 24px;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
border: 1px solid var(--el-border-color-lighter);
|
|
||||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
||||||
transition: all 0.3s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-header {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
padding-bottom: 16px;
|
|
||||||
border-bottom: 1px solid var(--el-border-color-lighter);
|
|
||||||
|
|
||||||
.card-title {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: var(--el-text-color-primary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-content {
|
|
||||||
.avatar-section {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
gap: 16px;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
|
|
||||||
.el-avatar {
|
|
||||||
background: linear-gradient(135deg, #3973ff 0%, #4f84ff 100%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-list {
|
|
||||||
.info-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 12px 0;
|
|
||||||
border-bottom: 1px solid var(--el-border-color-lighter);
|
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-label {
|
|
||||||
font-size: 14px;
|
|
||||||
color: var(--el-text-color-regular);
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-value {
|
|
||||||
font-size: 14px;
|
|
||||||
color: var(--el-text-color-primary);
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.action-list {
|
|
||||||
.action-item {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 12px;
|
|
||||||
padding: 14px 16px;
|
|
||||||
border-radius: 8px;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: all 0.3s;
|
|
||||||
|
|
||||||
.el-icon {
|
|
||||||
font-size: 20px;
|
|
||||||
color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 14px;
|
|
||||||
color: var(--el-text-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: var(--el-fill-color-light);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.security-list {
|
|
||||||
.security-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 16px;
|
|
||||||
border-radius: 8px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
border: 1px solid var(--el-border-color-lighter);
|
|
||||||
transition: all 0.3s;
|
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border-color: var(--el-color-primary-light-7);
|
|
||||||
background: var(--el-fill-color-lighter);
|
|
||||||
}
|
|
||||||
|
|
||||||
.security-info {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 12px;
|
|
||||||
|
|
||||||
.security-icon {
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: linear-gradient(135deg, rgba(57, 115, 255, 0.1) 0%, rgba(79, 132, 255, 0.1) 100%);
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
color: var(--el-color-primary);
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.security-text {
|
|
||||||
.security-title {
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: var(--el-text-color-primary);
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.security-desc {
|
|
||||||
font-size: 13px;
|
|
||||||
color: var(--el-text-color-placeholder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.profile-card,
|
|
||||||
.quick-actions,
|
|
||||||
.detail-card,
|
|
||||||
.security-card {
|
|
||||||
padding: 16px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user