修改工作区下载逻辑;云端文件夹基本功能已完成。
This commit is contained in:
@@ -42,7 +42,10 @@
|
|||||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
"<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打包配置 */
|
/* ios打包配置 */
|
||||||
|
|||||||
@@ -394,6 +394,31 @@
|
|||||||
font-weight: 500;
|
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 {
|
.select-team-tip {
|
||||||
padding: 80rpx 0;
|
padding: 80rpx 0;
|
||||||
}
|
}
|
||||||
@@ -595,6 +620,11 @@
|
|||||||
background: rgba(59, 134, 255, 0.1);
|
background: rgba(59, 134, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.member-role.member {
|
||||||
|
color: #67c23a;
|
||||||
|
background: rgba(103, 194, 58, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
.member-actions-right {
|
.member-actions-right {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8rpx;
|
gap: 8rpx;
|
||||||
@@ -611,6 +641,11 @@
|
|||||||
border: 1rpx solid #3b86ff;
|
border: 1rpx solid #3b86ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.demote-admin {
|
||||||
|
color: #e6a23c;
|
||||||
|
border: 1rpx solid #e6a23c;
|
||||||
|
}
|
||||||
|
|
||||||
.remove-member {
|
.remove-member {
|
||||||
color: #f56c6c;
|
color: #f56c6c;
|
||||||
border: 1rpx solid #f56c6c;
|
border: 1rpx solid #f56c6c;
|
||||||
@@ -645,6 +680,88 @@
|
|||||||
padding: 14rpx 32rpx;
|
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 {
|
.folder-null {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -661,9 +778,76 @@
|
|||||||
color: #ddd;
|
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 {
|
.text-btn {
|
||||||
padding: 8rpx 20rpx;
|
padding: 8rpx 20rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
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
@@ -317,28 +317,13 @@
|
|||||||
|
|
||||||
uni.downloadFile({
|
uni.downloadFile({
|
||||||
url: downloadUrl,
|
url: downloadUrl,
|
||||||
name: fileName, // 重要:指定文件名,保证打开正常
|
name: fileName,
|
||||||
success: (downloadRes) => {
|
success: (downloadRes) => {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
if (downloadRes.statusCode === 200) {
|
if (downloadRes.statusCode === 200) {
|
||||||
// 下载成功 → 直接打开文件
|
const tempPath = downloadRes.tempFilePath;
|
||||||
uni.openDocument({
|
// 下载成功,保存到 yxd 目录
|
||||||
filePath: downloadRes.tempFilePath,
|
saveFileToYxd(fileName, tempPath);
|
||||||
showMenu: true, // 右上角显示 分享/保存 按钮
|
|
||||||
success: () => {
|
|
||||||
uni.showToast({
|
|
||||||
title: '打开成功',
|
|
||||||
icon: 'success'
|
|
||||||
});
|
|
||||||
},
|
|
||||||
fail: (err) => {
|
|
||||||
console.error('打开失败:', err);
|
|
||||||
uni.showToast({
|
|
||||||
title: '无法打开此文件',
|
|
||||||
icon: 'error'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
uni.showToast({ title: '下载失败', icon: 'error' });
|
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) => {
|
const handleDelete = (folder) => {
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
|
|||||||
1409
unpackage/dist/dev/app-plus/app-service.js
vendored
1409
unpackage/dist/dev/app-plus/app-service.js
vendored
File diff suppressed because it is too large
Load Diff
5
unpackage/dist/dev/app-plus/manifest.json
vendored
5
unpackage/dist/dev/app-plus/manifest.json
vendored
@@ -62,7 +62,10 @@
|
|||||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
"<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": {
|
"apple": {
|
||||||
|
|||||||
@@ -878,6 +878,28 @@
|
|||||||
background: #3b86ff;
|
background: #3b86ff;
|
||||||
font-weight: 500;
|
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] {
|
.select-team-tip[data-v-51006ffb] {
|
||||||
padding: 2.5rem 0;
|
padding: 2.5rem 0;
|
||||||
}
|
}
|
||||||
@@ -1052,6 +1074,10 @@
|
|||||||
color: #3b86ff;
|
color: #3b86ff;
|
||||||
background: rgba(59, 134, 255, 0.1);
|
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] {
|
.member-actions-right[data-v-51006ffb] {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.25rem;
|
gap: 0.25rem;
|
||||||
@@ -1065,6 +1091,10 @@
|
|||||||
color: #3b86ff;
|
color: #3b86ff;
|
||||||
border: 0.03125rem solid #3b86ff;
|
border: 0.03125rem solid #3b86ff;
|
||||||
}
|
}
|
||||||
|
.demote-admin[data-v-51006ffb] {
|
||||||
|
color: #e6a23c;
|
||||||
|
border: 0.03125rem solid #e6a23c;
|
||||||
|
}
|
||||||
.remove-member[data-v-51006ffb] {
|
.remove-member[data-v-51006ffb] {
|
||||||
color: #f56c6c;
|
color: #f56c6c;
|
||||||
border: 0.03125rem solid #f56c6c;
|
border: 0.03125rem solid #f56c6c;
|
||||||
@@ -1094,6 +1124,78 @@
|
|||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
padding: 0.4375rem 1rem;
|
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] {
|
.folder-null[data-v-51006ffb] {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -1108,9 +1210,69 @@
|
|||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
color: #ddd;
|
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] {
|
.text-btn[data-v-51006ffb] {
|
||||||
padding: 0.25rem 0.625rem;
|
padding: 0.25rem 0.625rem;
|
||||||
border-radius: 0.9375rem;
|
border-radius: 0.9375rem;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user