修改工作区下载逻辑;云端文件夹基本功能已完成。

This commit is contained in:
2026-07-01 11:35:20 +08:00
parent 488bebcc87
commit 3544208baa
8 changed files with 3722 additions and 863 deletions

View File

@@ -42,7 +42,10 @@
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
]
},
/* ios */

View File

@@ -394,6 +394,31 @@
font-weight: 500;
}
.team-info {
margin-top: 14rpx;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 12rpx;
}
.team-type-tag {
font-size: 22rpx;
color: #3b86ff;
background: rgba(59, 134, 255, 0.1);
padding: 6rpx 16rpx;
border-radius: 8rpx;
font-weight: 500;
}
.team-desc-text {
font-size: 24rpx;
color: #999;
line-height: 1.5;
flex: 1;
min-width: 0;
}
.select-team-tip {
padding: 80rpx 0;
}
@@ -595,6 +620,11 @@
background: rgba(59, 134, 255, 0.1);
}
.member-role.member {
color: #67c23a;
background: rgba(103, 194, 58, 0.1);
}
.member-actions-right {
display: flex;
gap: 8rpx;
@@ -611,6 +641,11 @@
border: 1rpx solid #3b86ff;
}
.demote-admin {
color: #e6a23c;
border: 1rpx solid #e6a23c;
}
.remove-member {
color: #f56c6c;
border: 1rpx solid #f56c6c;
@@ -645,6 +680,88 @@
padding: 14rpx 32rpx;
}
/* 搜索结果列表 */
.search-result-list {
margin-top: 16rpx;
border-radius: 14rpx;
overflow: hidden;
background: #f8f9fc;
}
.search-result-item {
display: flex;
align-items: center;
padding: 18rpx 20rpx;
border-bottom: 1rpx solid #eee;
}
.search-result-item:last-child {
border-bottom: none;
}
.search-result-item:active {
background: rgba(59, 134, 255, 0.05);
}
.result-avatar {
width: 64rpx;
height: 64rpx;
border-radius: 50%;
flex-shrink: 0;
margin-right: 16rpx;
}
.result-default-avatar {
width: 64rpx;
height: 64rpx;
border-radius: 50%;
background: linear-gradient(135deg, #3b86ff, #6db3ff);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-right: 16rpx;
}
.result-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4rpx;
}
.result-name {
font-size: 28rpx;
color: #333;
font-weight: 500;
}
.result-email {
font-size: 22rpx;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.result-add-btn {
flex-shrink: 0;
font-size: 24rpx;
color: #3b86ff;
padding: 10rpx 24rpx;
border: 1rpx solid #3b86ff;
border-radius: 20rpx;
}
.search-empty {
margin-top: 16rpx;
text-align: center;
font-size: 24rpx;
color: #bbb;
padding: 20rpx 0;
}
.folder-null {
display: flex;
flex-direction: column;
@@ -661,9 +778,76 @@
color: #ddd;
}
/* 删除团队 */
.delete-team-section {
border-top: 1rpx solid #eee;
padding-top: 20rpx;
margin-top: 10rpx;
}
.delete-team-btn {
text-align: center;
padding: 18rpx;
font-size: 26rpx;
color: #e74c3c;
background: rgba(231, 76, 60, 0.06);
border-radius: 14rpx;
border: 1rpx solid rgba(231, 76, 60, 0.2);
}
.delete-team-btn:active {
background: rgba(231, 76, 60, 0.12);
}
/* 修改团队信息 */
.edit-team-section {
border-top: 1rpx solid #eee;
padding-top: 20rpx;
margin-top: 10rpx;
}
.edit-team-btn {
text-align: center;
padding: 18rpx;
font-size: 26rpx;
color: #3b86ff;
background: rgba(59, 134, 255, 0.06);
border-radius: 14rpx;
border: 1rpx solid rgba(59, 134, 255, 0.2);
}
.edit-team-btn:active {
background: rgba(59, 134, 255, 0.12);
}
.edit-team-form {
margin-bottom: 10rpx;
}
.form-label {
font-size: 26rpx;
color: #666;
margin-bottom: 8rpx;
margin-top: 18rpx;
}
.text-btn {
padding: 8rpx 20rpx;
border-radius: 30rpx;
font-size: 14px;
font-weight: 500;
}
/* ===== 上传文件弹窗 ===== */
.upload-path-label {
font-size: 26rpx;
color: #666;
margin-bottom: 10rpx;
}
.upload-path-hint {
font-size: 22rpx;
color: #999;
margin-bottom: 20rpx;
text-align: center;
}

File diff suppressed because it is too large Load Diff

View File

@@ -317,28 +317,13 @@
uni.downloadFile({
url: downloadUrl,
name: fileName, // 重要:指定文件名,保证打开正常
name: fileName,
success: (downloadRes) => {
uni.hideLoading();
if (downloadRes.statusCode === 200) {
// 下载成功 → 直接打开文件
uni.openDocument({
filePath: downloadRes.tempFilePath,
showMenu: true, // 右上角显示 分享/保存 按钮
success: () => {
uni.showToast({
title: '打开成功',
icon: 'success'
});
},
fail: (err) => {
console.error('打开失败:', err);
uni.showToast({
title: '无法打开此文件',
icon: 'error'
});
}
});
const tempPath = downloadRes.tempFilePath;
// 下载成功,保存到 yxd 目录
saveFileToYxd(fileName, tempPath);
} else {
uni.showToast({ title: '下载失败', icon: 'error' });
}
@@ -356,6 +341,133 @@
}
};
// 将下载的文件保存到外部存储 yxd 目录
const saveFileToYxd = (fileName, tempPath) => {
// #ifdef APP-PLUS
// App 端:复制文件到 /storage/emulated/0/yxd/
const YXD_PATH = '/storage/emulated/0/yxd/';
const ensureYxdDir = (callback) => {
plus.io.resolveLocalFileSystemURL(YXD_PATH, (dirEntry) => {
callback(dirEntry);
}, () => {
plus.io.resolveLocalFileSystemURL('/storage/emulated/0/', (rootEntry) => {
rootEntry.getDirectory('yxd', { create: true }, (dirEntry) => {
callback(dirEntry);
}, (err) => {
console.error('创建 yxd 目录失败:', JSON.stringify(err));
uni.showToast({ title: '创建目录失败', icon: 'error' });
openFileConfirm(fileName, tempPath);
});
}, (err) => {
console.error('访问外部存储根目录失败:', JSON.stringify(err));
uni.showToast({ title: '无法访问存储目录', icon: 'error' });
openFileConfirm(fileName, tempPath);
});
});
};
ensureYxdDir((yxdDirEntry) => {
plus.io.resolveLocalFileSystemURL(tempPath, (fileEntry) => {
fileEntry.copyTo(
yxdDirEntry,
fileName,
() => {
const targetPath = YXD_PATH + fileName;
console.log('文件已保存到:', targetPath);
openFileConfirm(fileName, targetPath);
},
(err) => {
console.error('复制文件失败:', JSON.stringify(err));
openFileConfirm(fileName, tempPath);
}
);
}, (err) => {
console.error('读取临时文件失败:', JSON.stringify(err));
openFileConfirm(fileName, tempPath);
});
});
// #endif
// #ifndef APP-PLUS
uni.saveFile({
tempFilePath: tempPath,
success: (saveRes) => {
openFileConfirm(fileName, saveRes.savedFilePath);
},
fail: () => {
openFileConfirm(fileName, tempPath);
}
});
// #endif
};
// 下载成功后确认是否打开文件
const openFileConfirm = (fileName, filePath) => {
uni.showActionSheet({
title: `${fileName} 下载完成`,
itemList: ['打开文件', '选择其他应用打开', '仅保存'],
success: (res) => {
switch (res.tapIndex) {
case 0:
openFile(filePath);
break;
case 1:
openFileWithMenu(filePath);
break;
case 2:
uni.showToast({
title: '文件已保存到 yxd 目录',
icon: 'success'
});
break;
}
},
fail: () => {
uni.showToast({
title: '文件已保存到 yxd 目录',
icon: 'success'
});
}
});
};
// 使用系统默认应用打开
const openFile = (filePath) => {
uni.openDocument({
filePath: filePath,
success: () => uni.showToast({
title: '打开成功',
icon: 'success'
}),
fail: (err) => {
console.error('打开文件失败:', err);
uni.showToast({
title: '无法打开此文件',
icon: 'error'
});
}
});
};
// 选择其他应用打开
const openFileWithMenu = (filePath) => {
uni.openDocument({
filePath: filePath,
showMenu: true,
success: () => uni.showToast({
title: '打开成功',
icon: 'success'
}),
fail: (err) => {
console.error('打开文件失败:', err);
uni.showToast({
title: '无法打开此文件',
icon: 'error'
});
}
});
};
// 删除
const handleDelete = (folder) => {
uni.showModal({

File diff suppressed because it is too large Load Diff

View File

@@ -62,7 +62,10 @@
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
]
},
"apple": {

View File

@@ -878,6 +878,28 @@
background: #3b86ff;
font-weight: 500;
}
.team-info[data-v-51006ffb] {
margin-top: 0.4375rem;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0.375rem;
}
.team-type-tag[data-v-51006ffb] {
font-size: 0.6875rem;
color: #3b86ff;
background: rgba(59, 134, 255, 0.1);
padding: 0.1875rem 0.5rem;
border-radius: 0.25rem;
font-weight: 500;
}
.team-desc-text[data-v-51006ffb] {
font-size: 0.75rem;
color: #999;
line-height: 1.5;
flex: 1;
min-width: 0;
}
.select-team-tip[data-v-51006ffb] {
padding: 2.5rem 0;
}
@@ -1052,6 +1074,10 @@
color: #3b86ff;
background: rgba(59, 134, 255, 0.1);
}
.member-role.member[data-v-51006ffb] {
color: #67c23a;
background: rgba(103, 194, 58, 0.1);
}
.member-actions-right[data-v-51006ffb] {
display: flex;
gap: 0.25rem;
@@ -1065,6 +1091,10 @@
color: #3b86ff;
border: 0.03125rem solid #3b86ff;
}
.demote-admin[data-v-51006ffb] {
color: #e6a23c;
border: 0.03125rem solid #e6a23c;
}
.remove-member[data-v-51006ffb] {
color: #f56c6c;
border: 0.03125rem solid #f56c6c;
@@ -1094,6 +1124,78 @@
font-size: 0.75rem;
padding: 0.4375rem 1rem;
}
/* 搜索结果列表 */
.search-result-list[data-v-51006ffb] {
margin-top: 0.5rem;
border-radius: 0.4375rem;
overflow: hidden;
background: #f8f9fc;
}
.search-result-item[data-v-51006ffb] {
display: flex;
align-items: center;
padding: 0.5625rem 0.625rem;
border-bottom: 0.03125rem solid #eee;
}
.search-result-item[data-v-51006ffb]:last-child {
border-bottom: none;
}
.search-result-item[data-v-51006ffb]:active {
background: rgba(59, 134, 255, 0.05);
}
.result-avatar[data-v-51006ffb] {
width: 2rem;
height: 2rem;
border-radius: 50%;
flex-shrink: 0;
margin-right: 0.5rem;
}
.result-default-avatar[data-v-51006ffb] {
width: 2rem;
height: 2rem;
border-radius: 50%;
background: linear-gradient(135deg, #3b86ff, #6db3ff);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-right: 0.5rem;
}
.result-info[data-v-51006ffb] {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 0.125rem;
}
.result-name[data-v-51006ffb] {
font-size: 0.875rem;
color: #333;
font-weight: 500;
}
.result-email[data-v-51006ffb] {
font-size: 0.6875rem;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.result-add-btn[data-v-51006ffb] {
flex-shrink: 0;
font-size: 0.75rem;
color: #3b86ff;
padding: 0.3125rem 0.75rem;
border: 0.03125rem solid #3b86ff;
border-radius: 0.625rem;
}
.search-empty[data-v-51006ffb] {
margin-top: 0.5rem;
text-align: center;
font-size: 0.75rem;
color: #bbb;
padding: 0.625rem 0;
}
.folder-null[data-v-51006ffb] {
display: flex;
flex-direction: column;
@@ -1108,9 +1210,69 @@
font-size: 2rem;
color: #ddd;
}
/* 删除团队 */
.delete-team-section[data-v-51006ffb] {
border-top: 0.03125rem solid #eee;
padding-top: 0.625rem;
margin-top: 0.3125rem;
}
.delete-team-btn[data-v-51006ffb] {
text-align: center;
padding: 0.5625rem;
font-size: 0.8125rem;
color: #e74c3c;
background: rgba(231, 76, 60, 0.06);
border-radius: 0.4375rem;
border: 0.03125rem solid rgba(231, 76, 60, 0.2);
}
.delete-team-btn[data-v-51006ffb]:active {
background: rgba(231, 76, 60, 0.12);
}
/* 修改团队信息 */
.edit-team-section[data-v-51006ffb] {
border-top: 0.03125rem solid #eee;
padding-top: 0.625rem;
margin-top: 0.3125rem;
}
.edit-team-btn[data-v-51006ffb] {
text-align: center;
padding: 0.5625rem;
font-size: 0.8125rem;
color: #3b86ff;
background: rgba(59, 134, 255, 0.06);
border-radius: 0.4375rem;
border: 0.03125rem solid rgba(59, 134, 255, 0.2);
}
.edit-team-btn[data-v-51006ffb]:active {
background: rgba(59, 134, 255, 0.12);
}
.edit-team-form[data-v-51006ffb] {
margin-bottom: 0.3125rem;
}
.form-label[data-v-51006ffb] {
font-size: 0.8125rem;
color: #666;
margin-bottom: 0.25rem;
margin-top: 0.5625rem;
}
.text-btn[data-v-51006ffb] {
padding: 0.25rem 0.625rem;
border-radius: 0.9375rem;
font-size: 14px;
font-weight: 500;
}
/* ===== 上传文件弹窗 ===== */
.upload-path-label[data-v-51006ffb] {
font-size: 0.8125rem;
color: #666;
margin-bottom: 0.3125rem;
}
.upload-path-hint[data-v-51006ffb] {
font-size: 0.6875rem;
color: #999;
margin-bottom: 0.625rem;
text-align: center;
}

View File

@@ -687,4 +687,810 @@ export const getCloudFileUrl = (token, fileId) => {
})
}
// 删除云端文件
export const deleteCloudFile = (token, fileId) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/file/delete`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"file_id": fileId
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '删除云端文件出错啦'
reject(msg)
}
} else {
reject(`删除云端文件失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 批量上传云端文件
export const uploadCloudFile = (token, type, path, files, team_id) => {
return new Promise((resolve, reject) => {
// 处理参数team_id 转为字符串,空值置空
const teamIdStr = team_id == null ? "" : String(team_id);
uni.uploadFile({
url: `${BASE_URL}/cloud_api/file/upload`,
method: "POST",
// 不要手动设置 Content-Type浏览器自动生成 multipart/form-data
header: {
// 如果后端把token放header就写这里放表单里就写到formData
},
// 普通文本参数对应form-data里的文本项
formData: {
access_token: token,
path: path || "/",
type: type,
team_id: teamIdStr
},
// 多文件每个文件name都叫files和Postman保持一致
files: files.map(fileItem => ({
uri: fileItem.tempFilePath, // 文件本地临时路径
name: "files"
})),
success: (res) => {
if (res.statusCode === 200) {
try {
const respond = JSON.parse(res.data);
if (respond.success) {
resolve(respond.message);
} else {
const msg = respond?.error || '获取云端文件url出错啦';
reject(msg);
}
} catch (e) {
reject("接口返回数据格式异常");
}
} else {
reject(`获取云端文件url失败${res.statusCode}`);
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误';
reject(msg);
}
});
});
};
// 获取用户可访问的团队列表
export const getTeamList = async (token) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/list`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
access_token: token,
team_name: ""
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
const teamsList = respond.teams
// 去掉第1条数据系统团队从下标1开始截取剩余所有
const newList = teamsList.slice(1)
resolve(newList)
} else {
const msg = res.data.error || '获取用户可访问的团队列表出错啦'
reject(msg)
}
} else {
reject(`获取用户可访问的团队列表失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 获取团队全部成员
export const getTeamAllMember = (token, teamId) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/get_all_member`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
const members = respond.team?.result || []
resolve(members)
} else {
const msg = respond?.error || '获取团队全部成员出错啦'
reject(msg)
}
} else {
reject(`获取团队全部成员失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 删除团队
export const deleteTeam = (token, teamId) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/delete`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '删除团队出错啦'
reject(msg)
}
} else {
reject(`删除团队失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 添加团队成员
export const addTeamMember = (token, teamId, userIds) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/add_member`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId,
"user_ids": userIds,
"role": "admin"
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '添加团队成员出错啦'
reject(msg)
}
} else {
reject(`添加团队成员失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 修改团队信息
export const updateTeamInfo = (token, teamId, data) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/update`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId,
...data
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '修改团队信息出错啦'
reject(msg)
}
} else {
reject(`修改团队信息失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 移除团队成员
export const removeTeamMember = (token, teamId, userIds) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/remove_member`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId,
"user_ids": userIds
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '移除团队成员出错啦'
reject(msg)
}
} else {
reject(`移除团队成员失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 调整团员身份
export const updateTeamMemberRole = (token, teamId, userId, role) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/team/adjust_member_role`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"team_id": teamId,
"user_id": userId,
"role": role
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '调整团员身份出错啦'
reject(msg)
}
} else {
reject(`调整团员身份失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// ============================云端数据库=========================
// 获取用户可访问的数据库列表
export const getCloudDbList = (token) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/list`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
// "databases": [
// {
// "database_name": "测试3",
// "table_count": 0,
// "file_path": "/home/yxd/yxd-agent-cloud/databases/6a446df3060ba5feae589c22.db",
// "modified_time": 1782869492.6399229,
// "database_id": "6a446df3060ba5feae589c22",
// "user_id": "690c72a6b8ffa329af2d5607",
// "access_level": 2
// },
// {
// "database_name": "database1",
// "table_count": 0,
// "file_path": "/home/yxd/yxd-agent-cloud/databases/6a446bfa1db19f3506901d2d.db",
// "modified_time": 1782868987.3745258,
// "database_id": "6a446bfa1db19f3506901d2d",
// "team_id": "6a02f6f0d99a03faefd1f437",
// "access_level": 2
// }
// ],
resolve(respond.databases)
} else {
const msg = respond?.error || '获取用户可访问的数据库列表出错啦'
reject(msg)
}
} else {
reject(`获取用户可访问的数据库列表失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 创建数据库(仅个人可创建)
export const createCloudDb = (token, databaseName) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/create`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"database_name": databaseName
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '创建数据库出错啦'
reject(msg)
}
} else {
reject(`创建数据库失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 上传db
export const uploadCloudDbFile = (token, file) => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: `${BASE_URL}/cloud_api/database/upload/db`,
method: "POST",
// 不要手动设置 Content-Type浏览器自动生成 multipart/form-data
header: {
// 如果后端把token放header就写这里放表单里就写到formData
},
// 普通文本参数对应form-data里的文本项
formData: {
access_token: token
},
// 多文件每个文件name都叫files和Postman保持一致
file: files,
success: (res) => {
if (res.statusCode === 200) {
try {
const respond = JSON.parse(res.data);
if (respond.success) {
resolve(respond.message);
} else {
const msg = respond?.error || '上传db出错啦';
reject(msg);
}
} catch (e) {
reject("接口返回数据格式异常");
}
} else {
reject(`上传db失败${res.statusCode}`);
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误';
reject(msg);
}
});
});
};
// 删除数据库(仅个人可创建)
export const deleteCloudDb = (token, databaseId) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/delete`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"database_id": databaseName
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.message)
} else {
const msg = respond?.error || '删除数据库出错啦'
reject(msg)
}
} else {
reject(`删除数据库失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 获取数据库中的表列表
export const getCloudDbTables = (token, databaseId, isDetail) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/list`,
method: "POST",
header: {
'Content-Type': 'application/json'
},
data: {
"access_token": token,
"database_id": databaseId,
"is_detail": isDetail
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond.success) {
resolve(respond.tables)
} else {
const msg = respond?.error || '获取用户可访问的数据库列表出错啦'
reject(msg)
}
} else {
reject(`获取用户可访问的数据库列表失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 删除数据库中的表
export const deleteCloudDbTable = async (token, databaseId, tableName) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/delete_conversation`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
"table_name": table_name
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '删除数据库中的表出错啦'
reject(msg)
}
} else {
reject(`删除数据库中的表失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 更新表数据
export const updateCloudDbTableData = async (token, databaseId, tableName, whereData, updateData) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/table/update/by/id`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
"table_name": table_name,
"where_data": {
"_row_id": 2
},
"update_data": {
"问题": "《水土保持监理规范2344444》制定的目的是什么"
}
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '更新表数据出错啦'
reject(msg)
}
} else {
reject(`更新表数据失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 导入文件到数据库
export const importFileToCloudDb = (token, forceOverwrite, databaseId, file, tableName) => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: `${BASE_URL}/cloud_api/file/upload`,
method: "POST",
// 不要手动设置 Content-Type浏览器自动生成 multipart/form-data
header: {
// 如果后端把token放header就写这里放表单里就写到formData
},
// 普通文本参数对应form-data里的文本项
formData: {
access_token: token,
force_overwrite: forceOverwrite,
database_id: databaseId,
team_id: teamIdStr,
table_name: tableName
},
file: file,
success: (res) => {
if (res.statusCode === 200) {
try {
const respond = JSON.parse(res.data);
if (respond.success) {
resolve(respond.message);
} else {
const msg = respond?.error || '导入文件到数据库出错啦';
reject(msg);
}
} catch (e) {
reject("接口返回数据格式异常");
}
} else {
reject(`导入文件到数据库失败:${res.statusCode}`);
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误';
reject(msg);
}
});
});
};
// 查看 个人/团队 数据库权限信息
export const getCloudDbPermission = async (token, databaseId, type, Id) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/permission/info`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
type: Id
// "team_id": "6a02f6f0d99a03faefd1f437",
// "user_id": "690c72a6b8ffa329af2d5607",
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '查看 个人/团队 数据库权限信息出错啦'
reject(msg)
}
} else {
reject(`查看 个人/团队 数据库权限信息失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 删除 团队/用户 对数据库权限
export const deleteCloudDbPermission = async (token, databaseId, type, Id) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/permission/delete`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
type: Id
// "team_id": "6a02f6f0d99a03faefd1f437",
// "user_id": "690c72a6b8ffa329af2d5607",
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '删除 团队/用户 对数据库权限出错啦'
reject(msg)
}
} else {
reject(`删除 团队/用户 对数据库权限失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 修改/增加 团队/用户 对数据库权限
export const updateCloudDbPermission = async (token, databaseId, type, Id, level) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/permission/update`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
"access_level": "3",
type: Id,
// "team_id": "6a02f6f0d99a03faefd1f437",
// "user_id": "690c72a6b8ffa329af2d5607",
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '修改/增加 团队/用户 对数据库权限出错啦'
reject(msg)
}
} else {
reject(`修改/增加 团队/用户 对数据库权限失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}
// 个人数据库移交团队
export const dbTransferToTeam = async (token, databaseId,teamId) => {
return new Promise((resolve, reject) => {
uni.request({
url: `${BASE_URL}/cloud_api/database/transfer_to_team`,
method: "POST",
data: {
"access_token": token,
"database_id": databaseId,
"team_id": teamId
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200) {
const respond = res.data
if (respond?.success) {
resolve(respond.message)
} else {
const msg = respond.failed_ids.error || '个人数据库移交团队出错啦'
reject(msg)
}
} else {
reject(`个人数据库移交团队失败:${res.statusCode}`)
}
},
fail: (err) => {
const msg = err.errMsg || '网络错误'
reject(msg)
}
})
})
}