更新API服务地址前缀为'/admin-go',统一后端服务配置,优化请求模块,调整个人信息页面上传接口,提升代码一致性和可读性。

This commit is contained in:
2026-04-02 14:14:26 +08:00
parent 89e0e55dd9
commit 08ae659a56
21 changed files with 1567 additions and 1598 deletions

View File

@@ -1,10 +1,6 @@
# 本地环境
ENV = 'development'
# 统一后端服务地址配置(全部模块共用 8000 端口
# 切换环境时,仅需修改下面这一个地址的 IP
# 当前环境: 192.168.3.38
# 备用环境: 192.168.3.200
# 备用环境: 116.204.74.41
# 备用环境: 172.20.10.7
VITE_API_URL = 'http://192.168.74.41:8000/'
# 统一后端服务地址前缀网关服务名admin-go
# 开发环境走本地代理,避免 CORS
VITE_API_URL = 'http://192.168.74.41:8000'

View File

@@ -4,5 +4,5 @@ ENV = 'production'
# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可
VITE_PUBLIC_PATH = '/sys/'
# 统一服务地址端口8000
VITE_API_URL = '/'
# 统一服务地址前缀网关服务名admin-go
VITE_API_URL = ''

View File

@@ -1,12 +1,12 @@
<!DOCTYPE html>
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>服务开通 - 智能营销服务平台</title>
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="main.css" />
<link rel="stylesheet" href="style.css" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800&display=swap" rel="stylesheet" />
<style>
* {
box-sizing: border-box;
@@ -134,7 +134,9 @@
right: 8px;
width: 18px;
height: 18px;
background: #10b981 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E") center/12px no-repeat;
background: #10b981
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E")
center/12px no-repeat;
border-radius: 50%;
}
@@ -187,7 +189,9 @@
right: 12px;
width: 22px;
height: 22px;
background: #3b82f6 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E") center/14px no-repeat;
background: #3b82f6
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E")
center/14px no-repeat;
border-radius: 50%;
}
@@ -298,7 +302,9 @@
}
@keyframes spin {
to { transform: rotate(360deg); }
to {
transform: rotate(360deg);
}
}
.empty-container {
@@ -344,14 +350,15 @@
color: #15803d;
}
</style>
</head>
<body class="auth-body">
</head>
<body class="auth-body">
<!-- 导航 -->
<nav class="auth-navbar">
<div class="auth-navbar-container">
<a href="/index.html#/home" class="auth-back-link">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path></svg>
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path>
</svg>
返回首页
</a>
<span class="auth-title">服务开通</span>
@@ -371,12 +378,14 @@
</div>
<!-- 错误信息 -->
<div id="error" class="error-message" style="display: none;"></div>
<div id="error" class="error-message" style="display: none"></div>
<!-- 资产信息 -->
<div id="asset-info" class="asset-info" style="display: none;">
<div id="asset-info" class="asset-info" style="display: none">
<div class="icon-wrapper">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path></svg>
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
</div>
<div class="info-content">
<h3 id="asset-name" class="asset-name"></h3>
@@ -385,31 +394,38 @@
</div>
<!-- 用户类型选择 -->
<div id="type-section" style="display: none;">
<div id="type-section" style="display: none">
<div class="section-title">选择类型</div>
<div id="type-list" class="type-grid"></div>
</div>
<!-- SKU 列表 -->
<div id="sku-section" style="display: none;">
<div id="sku-section" style="display: none">
<div class="section-title">选择套餐</div>
<div id="sku-list" class="sku-grid"></div>
</div>
<!-- 空状态 -->
<div id="empty" class="empty-container" style="display: none;">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"></path></svg>
<div id="empty" class="empty-container" style="display: none">
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"
></path>
</svg>
<p>暂无可用套餐</p>
</div>
<!-- 成功信息 -->
<div id="success" class="success-message" style="display: none;">
<div id="success" class="success-message" style="display: none">
<h3>🎉 开通成功!</h3>
<p>正在返回...</p>
</div>
<!-- 操作按钮 -->
<div id="actions" class="subscribe-actions" style="display: none;">
<div id="actions" class="subscribe-actions" style="display: none">
<button class="btn-subscribe secondary" onclick="handleCancel()">取消</button>
<button id="btn-submit" class="btn-subscribe primary" onclick="handleSubscribe()" disabled>立即开通</button>
</div>
@@ -455,14 +471,14 @@
console.log('[subscribe] token:', token);
const headers = {
'Content-Type': 'application/json'
'Content-Type': 'application/json',
};
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
const response = await fetch(`${API_BASE_NEW}/assets/asset/getAssetAndSku?assetId=${assetId}`, {
headers: headers
headers: headers,
});
// 先获取文本检查是否为有效JSON
@@ -485,7 +501,6 @@
renderAssetInfo(assetData);
renderTypeList(tenantModuleTypes);
renderSkuList(assetData.skus || []);
} catch (error) {
console.error('加载失败:', error);
showError(error.message || '加载套餐信息失败,请稍后重试');
@@ -511,11 +526,15 @@
return;
}
container.innerHTML = types.map(type => `
container.innerHTML = types
.map(
(type) => `
<div class="type-card" data-type-key="${type.key}" onclick="selectType('${type.key}')">
<div class="type-name">${type.value}</div>
</div>
`).join('');
`
)
.join('');
section.style.display = 'block';
@@ -528,7 +547,7 @@
// 选择用户类型
function selectType(typeKey) {
// 移除之前的选中状态
document.querySelectorAll('.type-card').forEach(card => {
document.querySelectorAll('.type-card').forEach((card) => {
card.classList.remove('selected');
});
@@ -539,7 +558,7 @@
}
// 保存选中的类型
selectedType = tenantModuleTypes.find(t => t.key === typeKey) || null;
selectedType = tenantModuleTypes.find((t) => t.key === typeKey) || null;
// 更新按钮状态
updateSubmitButton();
@@ -557,7 +576,9 @@
return;
}
container.innerHTML = skus.map(sku => `
container.innerHTML = skus
.map(
(sku) => `
<div class="sku-card" data-sku-id="${sku.id}" onclick="selectSku('${sku.id}')">
<div class="sku-name">${sku.skuName}</div>
<div class="sku-content">
@@ -570,7 +591,9 @@
</div>
</div>
</div>
`).join('');
`
)
.join('');
section.style.display = 'block';
actions.style.display = 'flex';
@@ -584,7 +607,7 @@
// 选择SKU
function selectSku(skuId) {
// 移除之前的选中状态
document.querySelectorAll('.sku-card').forEach(card => {
document.querySelectorAll('.sku-card').forEach((card) => {
card.classList.remove('selected');
});
@@ -595,7 +618,7 @@
}
// 保存选中的SKU
selectedSku = assetData?.skus?.find(s => s.id === skuId) || null;
selectedSku = assetData?.skus?.find((s) => s.id === skuId) || null;
// 更新按钮状态
updateSubmitButton();
@@ -634,7 +657,7 @@
// 构建请求参数
const requestBody = {
assetSkuId: selectedSku.id
assetSkuId: selectedSku.id,
};
// 如果选择了用户类型,添加到请求参数
@@ -642,13 +665,13 @@
requestBody.tenantModuleType = selectedType.key;
}
const response = await fetch(`${API_BASE_MAIN}/api/v1/system/moduleTenant/add`, {
const response = await fetch(`${API_BASE_MAIN}/admin-go/api/v1/system/moduleTenant/add`, {
method: 'POST',
headers: {
'Authorization': token ? `Bearer ${token}` : '',
'Content-Type': 'application/json'
Authorization: token ? `Bearer ${token}` : '',
'Content-Type': 'application/json',
},
body: JSON.stringify(requestBody)
body: JSON.stringify(requestBody),
});
const result = await response.json();
@@ -689,7 +712,6 @@
window.location.reload(true);
}, 100);
}, 2000);
} catch (error) {
console.error('开通失败:', error);
alert(error.message || '开通失败,请稍后重试');
@@ -740,5 +762,5 @@
document.getElementById('loading').style.display = 'none';
}
</script>
</body>
</body>
</html>

View File

@@ -4,9 +4,9 @@ import request from '/@/utils/request';
* 登录api接口集合
* @method signIn 用户登录
*/
export function login(params: object){
export function login(params: object) {
return request({
url: '/api/v1/system/login',
url: '/admin-go/api/v1/system/login',
method: 'post',
data: params,
});
@@ -15,19 +15,19 @@ export function login(params: object){
/**
* 获取验证码
*/
export function captcha(){
export function captcha() {
return request({
url:"/api/v1/pub/captcha/get",
method:"get"
})
url: '/admin-go/api/v1/pub/captcha/get',
method: 'get',
});
}
/**
* 退出登录
*/
export function logout(){
export function logout() {
return request({
url: '/api/v1/system/logout',
url: '/admin-go/api/v1/system/logout',
method: 'get',
});
}

View File

@@ -3,7 +3,7 @@ import request from '/@/utils/request';
// 清除缓存
export function removeCache() {
return request({
url: '/api/v1/system/cache/remove',
method: 'delete'
})
url: '/admin-go/api/v1/system/cache/remove',
method: 'delete',
});
}

View File

@@ -1,42 +1,41 @@
import request from '/@/utils/request';
export function getConfigList(query:Object) {
export function getConfigList(query: Object) {
return request({
url: '/api/v1/system/config/list',
url: '/admin-go/api/v1/system/config/list',
method: 'get',
params:query
})
params: query,
});
}
export function getConfig(id:string) {
export function getConfig(id: string) {
return request({
url: '/api/v1/system/config/get',
url: '/admin-go/api/v1/system/config/get',
method: 'get',
params:{id}
})
params: { id },
});
}
export function addConfig(data:any) {
export function addConfig(data: any) {
return request({
url: '/api/v1/system/config/add',
url: '/admin-go/api/v1/system/config/add',
method: 'post',
data:data
})
data: data,
});
}
export function editConfig(data:any) {
export function editConfig(data: any) {
return request({
url: '/api/v1/system/config/edit',
url: '/admin-go/api/v1/system/config/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deleteConfig(ids:string[]) {
export function deleteConfig(ids: string[]) {
return request({
url: '/api/v1/system/config/delete',
url: '/admin-go/api/v1/system/config/delete',
method: 'delete',
data:{ids}
})
data: { ids },
});
}

View File

@@ -1,36 +1,33 @@
import request from '/@/utils/request';
export function getDeptList(query?:Object) {
export function getDeptList(query?: Object) {
return request({
url: '/api/v1/system/dept/list',
url: '/admin-go/api/v1/system/dept/list',
method: 'get',
params:query
})
params: query,
});
}
export function addDept(data:object) {
export function addDept(data: object) {
return request({
url: '/api/v1/system/dept/add',
url: '/admin-go/api/v1/system/dept/add',
method: 'post',
data:data
})
data: data,
});
}
export function editDept(data:object) {
export function editDept(data: object) {
return request({
url: '/api/v1/system/dept/edit',
url: '/admin-go/api/v1/system/dept/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deleteDept(id:number) {
export function deleteDept(id: number) {
return request({
url: '/api/v1/system/dept/delete',
url: '/admin-go/api/v1/system/dept/delete',
method: 'delete',
data:{id}
})
data: { id },
});
}

View File

@@ -1,85 +1,83 @@
import request from '/@/utils/request';
import {ref ,toRefs,ToRefs} from 'vue'
import { ref, toRefs, ToRefs } from 'vue';
// 根据字典类型查询字典数据信息
export function getDict(dictType :string,defaultValue?:string):Promise<any> {
let dv = defaultValue??''
let params ={
dictType:dictType,
defaultValue:dv
}
export function getDict(dictType: string, defaultValue?: string): Promise<any> {
let dv = defaultValue ?? '';
let params = {
dictType: dictType,
defaultValue: dv,
};
return request({
url: '/api/v1/system/dict/data/getDictData',
url: '/admin-go/api/v1/system/dict/data/getDictData',
method: 'get',
params:params
})
params: params,
});
}
// 根据字典类型查询字典数据信息(新方案)
export function getDicts(dictType :string,defaultValue?:string):Promise<any> {
let dv = defaultValue??''
let params ={
dictType:dictType,
defaultValue:dv
}
export function getDicts(dictType: string, defaultValue?: string): Promise<any> {
let dv = defaultValue ?? '';
let params = {
dictType: dictType,
defaultValue: dv,
};
return request({
url: '/api/v1/system/dict/data/getDictDataTree',
url: '/admin-go/api/v1/system/dict/data/getDictDataTree',
method: 'get',
params:params
})
params: params,
});
}
/**
* 获取字典数据
*/
export function useDict(...args:string[]):ToRefs<any>{
const res:any = ref({});
args.forEach((d:string) => {
export function useDict(...args: string[]): ToRefs<any> {
const res: any = ref({});
args.forEach((d: string) => {
res.value[d] = [];
getDict(d).then(resp => {
res.value[d] = resp.data.values.map((p:any) => ({ label: p.value, value: p.key, isDefault: p.isDefault }))
})
})
getDict(d).then((resp) => {
res.value[d] = resp.data.values.map((p: any) => ({ label: p.value, value: p.key, isDefault: p.isDefault }));
});
});
return toRefs(res.value);
}
export function getDataList(query:Object) {
export function getDataList(query: Object) {
return request({
url: '/api/v1/system/dict/data/list',
url: '/admin-go/api/v1/system/dict/data/list',
method: 'get',
params:query
})
params: query,
});
}
export function getData(dictCode:number) {
export function getData(dictCode: number) {
return request({
url: '/api/v1/system/dict/data/get',
url: '/admin-go/api/v1/system/dict/data/get',
method: 'get',
params:{dictCode}
})
params: { dictCode },
});
}
export function addData(data:any) {
export function addData(data: any) {
return request({
url: '/api/v1/system/dict/data/add',
url: '/admin-go/api/v1/system/dict/data/add',
method: 'post',
data:data
})
data: data,
});
}
export function editData(data:any) {
export function editData(data: any) {
return request({
url: '/api/v1/system/dict/data/edit',
url: '/admin-go/api/v1/system/dict/data/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deleteData(ids:number[]) {
export function deleteData(ids: number[]) {
return request({
url: '/api/v1/system/dict/data/delete',
url: '/admin-go/api/v1/system/dict/data/delete',
method: 'delete',
data:{ids}
})
data: { ids },
});
}

View File

@@ -1,52 +1,49 @@
import request from '/@/utils/request';
export function getTypeList(query:Object) {
export function getTypeList(query: Object) {
return request({
url: '/api/v1/system/dict/type/list',
url: '/admin-go/api/v1/system/dict/type/list',
method: 'get',
params:query
})
params: query,
});
}
export function getType(dictId:number) {
export function getType(dictId: number) {
return request({
url: '/api/v1/system/dict/type/get',
url: '/admin-go/api/v1/system/dict/type/get',
method: 'get',
params:{dictId}
})
params: { dictId },
});
}
export function addType(data:any) {
export function addType(data: any) {
return request({
url: '/api/v1/system/dict/type/add',
url: '/admin-go/api/v1/system/dict/type/add',
method: 'post',
data:data
})
data: data,
});
}
export function editType(data:any) {
export function editType(data: any) {
return request({
url: '/api/v1/system/dict/type/edit',
url: '/admin-go/api/v1/system/dict/type/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deleteType(dictIds:number[]) {
export function deleteType(dictIds: number[]) {
return request({
url: '/api/v1/system/dict/type/delete',
url: '/admin-go/api/v1/system/dict/type/delete',
method: 'delete',
data:{dictIds}
})
data: { dictIds },
});
}
// 获取字典选择框列表
export function optionselect() {
return request({
url: '/api/v1/system/dict/type/optionSelect',
method: 'get'
})
url: '/admin-go/api/v1/system/dict/type/optionSelect',
method: 'get',
});
}

View File

@@ -1,57 +1,56 @@
import request from '/@/utils/request';
export function getMenuList(query:Object) {
export function getMenuList(query: Object) {
return request({
url: '/api/v1/system/menu/list',
url: '/admin-go/api/v1/system/menu/list',
method: 'get',
params:query
})
params: query,
});
}
export function getUserMenus() {
return request({
url: '/api/v1/system/user/getUserMenus',
method: 'get'
})
url: '/admin-go/api/v1/system/user/getUserMenus',
method: 'get',
});
}
export function getMenuParams() {
return request({
url: '/api/v1/system/menu/getParams',
method: 'get'
})
}
export function addMenu(data:Object) {
return request({
url: '/api/v1/system/menu/add',
method: 'post',
data:data
})
}
export function getMenuInfo(id:number) {
return request({
url: '/api/v1/system/menu/get',
url: '/admin-go/api/v1/system/menu/getParams',
method: 'get',
params:{id}
})
});
}
export function updateMenu(data:Object) {
export function addMenu(data: Object) {
return request({
url: '/api/v1/system/menu/update',
method: 'put',
data:data
})
url: '/admin-go/api/v1/system/menu/add',
method: 'post',
data: data,
});
}
export function getMenuInfo(id: number) {
return request({
url: '/admin-go/api/v1/system/menu/get',
method: 'get',
params: { id },
});
}
export function updateMenu(data: Object) {
return request({
url: '/admin-go/api/v1/system/menu/update',
method: 'put',
data: data,
});
}
// 删除菜单
export function delMenu(menuId:number) {
export function delMenu(menuId: number) {
return request({
url: '/api/v1/system/menu/delete',
url: '/admin-go/api/v1/system/menu/delete',
method: 'delete',
data:{ids:[menuId]}
})
data: { ids: [menuId] },
});
}

View File

@@ -1,28 +1,24 @@
import request from '/@/utils/request';
export function logList(query:object) {
export function logList(query: object) {
return request({
url: '/api/v1/system/loginLog/list',
url: '/admin-go/api/v1/system/loginLog/list',
method: 'get',
params:query
})
params: query,
});
}
export function deleteLog(ids:number[]) {
export function deleteLog(ids: number[]) {
return request({
url: '/api/v1/system/loginLog/delete',
url: '/admin-go/api/v1/system/loginLog/delete',
method: 'delete',
params:{ids}
})
params: { ids },
});
}
export function clearLog() {
return request({
url: '/api/v1/system/loginLog/clear',
url: '/admin-go/api/v1/system/loginLog/clear',
method: 'delete',
})
});
}

View File

@@ -1,37 +1,36 @@
import request from '/@/utils/request'
import request from '/@/utils/request';
// 查询操作日志列表
export function listSysOperLog(query:object) {
export function listSysOperLog(query: object) {
return request({
url: '/api/v1/system/operLog/list',
url: '/admin-go/api/v1/system/operLog/list',
method: 'get',
params: query
})
params: query,
});
}
// 查询操作日志详细
export function getSysOperLog(operId:number) {
export function getSysOperLog(operId: number) {
return request({
url: '/api/v1/system/operLog/get',
url: '/admin-go/api/v1/system/operLog/get',
method: 'get',
params: {
operId: operId.toString()
}
})
operId: operId.toString(),
},
});
}
// 删除操作日志
export function delSysOperLog(operIds:number[]) {
export function delSysOperLog(operIds: number[]) {
return request({
url: '/api/v1/system/operLog/delete',
url: '/admin-go/api/v1/system/operLog/delete',
method: 'delete',
data:{
operIds:operIds
}
})
data: {
operIds: operIds,
},
});
}
export function clearOperLog() {
return request({
url: '/api/v1/system/operLog/clear',
url: '/admin-go/api/v1/system/operLog/clear',
method: 'delete',
})
});
}

View File

@@ -1,9 +1,8 @@
import request from '/@/utils/request';
export function getSysInfo() {
return request({
url: '/api/v1/system/monitor/server',
method: 'get'
})
url: '/admin-go/api/v1/system/monitor/server',
method: 'get',
});
}

View File

@@ -1,18 +1,18 @@
import request from '/@/utils/request';
// 查询列表
export function listSysUserOnline(query:object) {
export function listSysUserOnline(query: object) {
return request({
url: '/api/v1/system/online/list',
url: '/admin-go/api/v1/system/online/list',
method: 'get',
params: query
})
params: query,
});
}
export function forceLogout(ids:string[]) {
export function forceLogout(ids: string[]) {
return request({
url: '/api/v1/system/online/forceLogout',
url: '/admin-go/api/v1/system/online/forceLogout',
method: 'delete',
data: {ids}
})
data: { ids },
});
}

View File

@@ -2,27 +2,24 @@ import request from '/@/utils/request';
export function getPersonalInfo() {
return request({
url: '/api/v1/system/personal/getPersonalInfo',
url: '/admin-go/api/v1/system/personal/getPersonalInfo',
method: 'get',
})
});
}
export function editPersonal(data:object) {
export function editPersonal(data: object) {
return request({
url: '/api/v1/system/personal/edit',
url: '/admin-go/api/v1/system/personal/edit',
method: 'put',
data:data
})
data: data,
});
}
//重置個人密碼
export function resetPwdPersonal(data:object) {
export function resetPwdPersonal(data: object) {
return request({
url: '/api/v1/system/personal/resetPwd',
url: '/admin-go/api/v1/system/personal/resetPwd',
method: 'put',
data:data
})
data: data,
});
}

View File

@@ -1,35 +1,33 @@
import request from '/@/utils/request';
export function getPostList(query:Object) {
export function getPostList(query: Object) {
return request({
url: '/api/v1/system/post/list',
url: '/admin-go/api/v1/system/post/list',
method: 'get',
params:query
})
params: query,
});
}
export function addPost(data:object) {
export function addPost(data: object) {
return request({
url: '/api/v1/system/post/add',
url: '/admin-go/api/v1/system/post/add',
method: 'post',
data:data
})
data: data,
});
}
export function editPost(data:object) {
export function editPost(data: object) {
return request({
url: '/api/v1/system/post/edit',
url: '/admin-go/api/v1/system/post/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deletePost(ids:number[]) {
export function deletePost(ids: number[]) {
return request({
url: '/api/v1/system/post/delete',
url: '/admin-go/api/v1/system/post/delete',
method: 'delete',
data:{ids}
})
data: { ids },
});
}

View File

@@ -1,70 +1,65 @@
import request from '/@/utils/request';
export function getRoleList(query:Object) {
export function getRoleList(query: Object) {
return request({
url: '/api/v1/system/role/list',
url: '/admin-go/api/v1/system/role/list',
method: 'get',
params:query
})
params: query,
});
}
export function getRoleParams() {
return request({
url: '/api/v1/system/role/getParamsInfo',
method: 'get'
})
}
export function addRole(data:object) {
return request({
url: '/api/v1/system/role/add',
method: 'post',
data:data
})
}
export function getRole(id:string) {
return request({
url: '/api/v1/system/role/get',
url: '/admin-go/api/v1/system/role/getParamsInfo',
method: 'get',
params:{id}
})
});
}
export function editRole(data:object) {
export function addRole(data: object) {
return request({
url: '/api/v1/system/role/edit',
url: '/admin-go/api/v1/system/role/add',
method: 'post',
data: data,
});
}
export function getRole(id: string) {
return request({
url: '/admin-go/api/v1/system/role/get',
method: 'get',
params: { id },
});
}
export function editRole(data: object) {
return request({
url: '/admin-go/api/v1/system/role/edit',
method: 'put',
data:data
})
data: data,
});
}
export function deleteRole(id:string) {
export function deleteRole(id: string) {
return request({
url: '/api/v1/system/role/delete',
url: '/admin-go/api/v1/system/role/delete',
method: 'delete',
data:{ids:[id]}
})
data: { ids: [id] },
});
}
export function dataScope(data:any) {
export function dataScope(data: any) {
return request({
url: '/api/v1/system/role/dataScope',
url: '/admin-go/api/v1/system/role/dataScope',
method: 'put',
data:data
})
data: data,
});
}
// 根据角色ID查询部门树结构
export function roleDeptTreeSelect(roleId:string) {
export function roleDeptTreeSelect(roleId: string) {
return request({
url: '/api/v1/system/role/deptTreeSelect',
url: '/admin-go/api/v1/system/role/deptTreeSelect',
method: 'get',
params:{roleId}
})
params: { roleId },
});
}

View File

@@ -3,7 +3,7 @@ import request from '/@/utils/request';
// 获取租户列表
export function getTenantList(query: Object) {
return request({
url: '/api/v1/system/tenant/list',
url: '/admin-go/api/v1/system/tenant/list',
method: 'get',
params: query,
});
@@ -12,7 +12,7 @@ export function getTenantList(query: Object) {
// 获取租户详情
export function getTenant(id: number) {
return request({
url: '/api/v1/system/tenant/get',
url: '/admin-go/api/v1/system/tenant/get',
method: 'get',
params: { id },
});
@@ -23,7 +23,7 @@ export function addTenant(data: object) {
// 如果是 FormData需要让浏览器自动设置 Content-Type包含 boundary
const isFormData = data instanceof FormData;
return request({
url: '/api/v1/system/tenant/add',
url: '/admin-go/api/v1/system/tenant/add',
method: 'post',
data: data,
headers: isFormData ? { 'Content-Type': undefined } : undefined,
@@ -35,7 +35,7 @@ export function editTenant(data: object) {
// 如果是 FormData需要让浏览器自动设置 Content-Type包含 boundary
const isFormData = data instanceof FormData;
return request({
url: '/api/v1/system/tenant/edit',
url: '/admin-go/api/v1/system/tenant/edit',
method: 'put',
data: data,
headers: isFormData ? { 'Content-Type': undefined } : undefined,
@@ -45,7 +45,7 @@ export function editTenant(data: object) {
// 删除租户
export function deleteTenant(ids: number[]) {
return request({
url: '/api/v1/system/tenant/delete',
url: '/admin-go/api/v1/system/tenant/delete',
method: 'delete',
data: { ids },
});

View File

@@ -1,75 +1,71 @@
import request from '/@/utils/request';
export function getUserList(query:Object) {
export function getUserList(query: Object) {
return request({
url: '/api/v1/system/user/getList',
url: '/admin-go/api/v1/system/user/getList',
method: 'get',
params:query
})
params: query,
});
}
export function getDeptTree() {
return request({
url: '/api/v1/system/dept/treeSelect',
method: 'get'
})
url: '/admin-go/api/v1/system/dept/treeSelect',
method: 'get',
});
}
export function getParams() {
return request({
url: '/api/v1/system/user/paramsInfo',
method: 'get'
})
}
export function getEditUser(id:number) {
return request({
url: '/api/v1/system/user/getEdit',
url: '/admin-go/api/v1/system/user/paramsInfo',
method: 'get',
params:{id}
})
});
}
export function addUser(data:object) {
export function getEditUser(id: number) {
return request({
url: '/api/v1/system/user/add',
url: '/admin-go/api/v1/system/user/getEdit',
method: 'get',
params: { id },
});
}
export function addUser(data: object) {
return request({
url: '/admin-go/api/v1/system/user/add',
method: 'post',
data:data
})
data: data,
});
}
export function editUser(data:object) {
export function editUser(data: object) {
return request({
url: '/api/v1/system/user/edit',
url: '/admin-go/api/v1/system/user/edit',
method: 'put',
data:data
})
data: data,
});
}
export function resetUserPwd(userId:number, password:string) {
export function resetUserPwd(userId: number, password: string) {
return request({
url: '/api/v1/system/user/resetPwd',
url: '/admin-go/api/v1/system/user/resetPwd',
method: 'put',
data:{userId,password}
})
data: { userId, password },
});
}
export function changeUserStatus(userId:number, status:number) {
export function changeUserStatus(userId: number, status: number) {
return request({
url: '/api/v1/system/user/setStatus',
url: '/admin-go/api/v1/system/user/setStatus',
method: 'put',
data:{userId,status}
})
data: { userId, status },
});
}
export function deleteUser(ids:number[]) {
export function deleteUser(ids: number[]) {
return request({
url: '/api/v1/system/user/delete',
url: '/admin-go/api/v1/system/user/delete',
method: 'delete',
data:{ids}
})
data: { ids },
});
}

View File

@@ -7,15 +7,14 @@
<div class="personal-user">
<div class="personal-user-left">
<el-upload
class=" h100 personal-user-left-upload avatar-uploader"
:action="baseURL+'/api/v1/system/upload/singleImg'"
class="h100 personal-user-left-upload avatar-uploader"
:action="baseURL + '/admin-go/api/v1/system/upload/singleImg'"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:data="dataParam"
>
<img v-if="imageUrl" :src="proxy.getUpFileUrl(imageUrl)" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><ele-Plus /></el-icon>
</el-upload>
</div>
<div class="personal-user-right">
@@ -25,7 +24,7 @@
<el-row>
<el-col :xs="24" :sm="8" class="personal-item mb6">
<div class="personal-item-label">昵称</div>
<div class="personal-item-value"> {{ personalForm.nickname }}</div>
<div class="personal-item-value">{{ personalForm.nickname }}</div>
</el-col>
<el-col :xs="24" :sm="16" class="personal-item mb6">
<div class="personal-item-label">联系电话</div>
@@ -37,11 +36,11 @@
<el-row>
<el-col :xs="24" :sm="8" class="personal-item mb6">
<div class="personal-item-label">登录IP</div>
<div class="personal-item-value">{{personalForm.lastLoginIp}}</div>
<div class="personal-item-value">{{ personalForm.lastLoginIp }}</div>
</el-col>
<el-col :xs="24" :sm="16" class="personal-item mb6">
<div class="personal-item-label">登录时间</div>
<div class="personal-item-value">{{personalForm.lastLoginTime}}</div>
<div class="personal-item-value">{{ personalForm.lastLoginTime }}</div>
</el-col>
</el-row>
</el-col>
@@ -204,20 +203,20 @@
</template>
<script lang="ts">
import { toRefs, reactive, computed, defineComponent,getCurrentInstance,onMounted } from 'vue';
import { toRefs, reactive, computed, defineComponent, getCurrentInstance, onMounted } from 'vue';
import { formatAxis } from '/@/utils/formatTime';
import { storeToRefs } from 'pinia';
import { useUserInfo } from '/@/stores/userInfo';
import {getPersonalInfo, editPersonal, resetPwdPersonal} from "/@/api/system/personal";
import type { UploadProps } from 'element-plus'
import {ElMessage} from "element-plus";
import {ElMessageBox} from 'element-plus'
import {getToken} from "/@/utils/gfast"
import { getPersonalInfo, editPersonal, resetPwdPersonal } from '/@/api/system/personal';
import type { UploadProps } from 'element-plus';
import { ElMessage } from 'element-plus';
import { ElMessageBox } from 'element-plus';
import { getToken } from '/@/utils/gfast';
import { newsInfoList, recommendList } from './mock';
import {Session} from "/@/utils/storage";
import { Session } from '/@/utils/storage';
// 定义接口来定义对象的类型
interface PersonalState {
imageUrl:'',
imageUrl: '';
deptName: '';
roles: [];
personalForm: any;
@@ -228,38 +227,38 @@ interface PersonalState {
export default defineComponent({
name: 'personals',
setup() {
const baseURL:string|undefined|boolean = import.meta.env.VITE_API_URL
const {proxy} = <any>getCurrentInstance();
const baseURL: string | undefined | boolean = import.meta.env.VITE_API_URL;
const { proxy } = <any>getCurrentInstance();
const stores = useUserInfo();
const { userInfos } = storeToRefs(stores);
const dataParam = reactive({
token:getToken(),
})
token: getToken(),
});
const state = reactive<PersonalState>({
newsInfoList,
recommendList,
imageUrl:'',
deptName:'',
roles:[],
imageUrl: '',
deptName: '',
roles: [],
personalForm: {
nickname: '',
userEmail: '',
describe: '',
mobile: '',
sex: '',
remark:'',
avatar:'',
lastLoginIp:'',
lastLoginTime:''
remark: '',
avatar: '',
lastLoginIp: '',
lastLoginTime: '',
},
});
// const handleUpload =
const handleUpload = () => {
// console.log(state.personalForm)
editPersonal(state.personalForm).then((res:any)=>{
const userInfo = res.data.userInfo
userInfo.avatar = proxy.getUpFileUrl(userInfo.avatar)
editPersonal(state.personalForm).then((res: any) => {
const userInfo = res.data.userInfo;
userInfo.avatar = proxy.getUpFileUrl(userInfo.avatar);
// 存储 token 到浏览器缓存
Session.set('token', res.data.token);
// 存储用户信息到浏览器缓存
@@ -270,56 +269,52 @@ export default defineComponent({
};
// 当前时间提示语
const currentTime = computed(() => {
return formatAxis(new Date());
});
const handleAvatarSuccess: UploadProps['onSuccess'] = (
response,
uploadFile
) => {
if(response.code == 0){
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
state.imageUrl = response.data.path;
state.personalForm.avatar = response.data.path;
handleUpload();
}
};
/** 重置密码按钮操作 */
const handleEditPass = ()=> {
ElMessageBox.prompt('请输入"' + state.personalForm.nickname + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消"
}).then(({ value }) => {
if(!value || value==''){
const handleEditPass = () => {
ElMessageBox.prompt('请输入"' + state.personalForm.nickname + '"的新密码', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
})
.then(({ value }) => {
if (!value || value == '') {
ElMessage.success('密码不能为空');
return
return;
}
resetPwdPersonal({password:value}).then(() => {
ElMessage.success("修改成功,新密码是:" + value);
resetPwdPersonal({ password: value }).then(() => {
ElMessage.success('修改成功,新密码是:' + value);
});
}).catch(() => {});
})
.catch(() => {});
};
// 初始化用户数据
const initUserInfo = () => {
getPersonalInfo().then((res:any)=>{
getPersonalInfo().then((res: any) => {
const user = res.data.user;
state.imageUrl = user.avatar;
state.personalForm = {
nickname:user.userNickname,
userEmail:user.userEmail,
nickname: user.userNickname,
userEmail: user.userEmail,
describe: user.describe,
mobile: user.mobile,
sex: String(user.sex),
remark:user.remark,
avatar:user.avatar,
lastLoginIp:user.lastLoginIp,
lastLoginTime:user.lastLoginTime
}
remark: user.remark,
avatar: user.avatar,
lastLoginIp: user.lastLoginIp,
lastLoginTime: user.lastLoginTime,
};
state.deptName = res.data.deptName;
state.roles = res.data.roles;
})
});
};
// 页面加载时
onMounted(() => {
@@ -354,7 +349,7 @@ export default defineComponent({
:deep(.el-upload) {
height: 100%;
}
.avatar-uploader{
.avatar-uploader {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;

View File

@@ -44,21 +44,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
port: env.VITE_PORT as unknown as number,
open: false,
hmr: true,
// proxy: {
// '/gitee': {
// target: 'https://gitee.com',
// ws: true,
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/gitee/, ''),
// },
// },
proxy: {
'/api': {
target: 'http://localhost:8808',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '/api'),
},
},
// 无代理模式:前端直连后端,由后端处理 CORS
},
build: {
outDir: 'dist',