提交代码
This commit is contained in:
parent
8eb22eaff4
commit
ce08ffde29
|
|
@ -49,6 +49,15 @@ export function updateFile(data) {
|
|||
})
|
||||
}
|
||||
|
||||
export function moveFile(data) {
|
||||
return request({
|
||||
url: '/ai/dataSetBasicFile/moveFile',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 删除文件基础
|
||||
export function delFile(fileId) {
|
||||
return request({
|
||||
|
|
@ -63,6 +72,13 @@ export function dataRecovery(fileId) {
|
|||
method: 'post',
|
||||
})
|
||||
}
|
||||
export function emptyRecycleBin() {
|
||||
return request({
|
||||
url: '/ai/dataSetBasicFile/emptyRecycleBin',
|
||||
method: 'post',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-dialog title="创建标注任务" :visible.sync="isOpen" width="500px" append-to-body @close="cancel" :close-on-click-modal="false">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="70px">
|
||||
<el-dialog title="创建标注任务" :visible.sync="isOpen" width="700px" append-to-body @close="cancel"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="70px">
|
||||
<el-form-item label="名称" prop="taskName">
|
||||
<el-input v-model="form.taskName" maxlength="20" placeholder="请输入版本名称" />
|
||||
<el-input v-model="form.taskName" maxlength="20" placeholder="请输入版本名称"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="描述" prop="taskDesc">
|
||||
<el-input
|
||||
|
|
@ -24,7 +26,8 @@
|
|||
</el-form-item>
|
||||
<el-form-item label="是否启用标注团队" prop="isStartTeam" label-width="130px">
|
||||
<el-switch
|
||||
v-model="form.isStartTeam">
|
||||
v-model="form.isStartTeam"
|
||||
>
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
<div v-show="form.isStartTeam">
|
||||
|
|
@ -34,20 +37,39 @@
|
|||
<el-form-item label="分配数量" prop="isStartTeam" label-width="100px">
|
||||
<el-table
|
||||
size="mini"
|
||||
:data="tableData">
|
||||
:data="tableData"
|
||||
>
|
||||
<el-table-column
|
||||
prop="date"
|
||||
label="姓名"
|
||||
max-width="180">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="角色"
|
||||
max-width="180">
|
||||
align="center"
|
||||
max-width="180"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="address"
|
||||
label="数量">
|
||||
prop="type"
|
||||
label="角色"
|
||||
align="center"
|
||||
max-width="180"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.type === '0' ? '审核人员' : '标注人员' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="num"
|
||||
align="center"
|
||||
label="数量"
|
||||
max-width="50"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
v-model="scope.row.num"
|
||||
:min="1"
|
||||
:max="scope.row.type === '0' ? getReviewerMax(scope.row) : getLabelingMax(scope.row)"
|
||||
style="width: 150px"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
|
|
@ -58,8 +80,7 @@
|
|||
<el-button @click="cancel">取 消</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<select-personnel-dialog dataset-id="" :open="selectOpen" @dialog-cancel="handleCancel" @update-data ="updateData"/>
|
||||
<select-personnel-dialog dataset-id="" :open="selectOpen" @dialog-cancel="handleCancel" @update-data="updateData"/>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
|
@ -71,74 +92,124 @@ import { add } from '@/api/dataCenter/releaseVersion'
|
|||
|
||||
export default {
|
||||
dicts: ['ai_annotate_type'],
|
||||
components: {selectPersonnelDialog},
|
||||
components: { selectPersonnelDialog },
|
||||
props: {
|
||||
open: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
datasetId:{
|
||||
datasetNum:{
|
||||
type: Number,
|
||||
default: 0,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
datasetId: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isOpen: {
|
||||
get() {
|
||||
return this.open;
|
||||
return this.open
|
||||
},
|
||||
set(value) {
|
||||
this.$emit('update:open', value);
|
||||
},
|
||||
},
|
||||
this.$emit('update:open', value)
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableData:[],
|
||||
selectOpen:false,
|
||||
tableData: [],
|
||||
selectOpen: false,
|
||||
form: {}, // 初始化为空
|
||||
rules:{
|
||||
versionName:[
|
||||
{ required: true, message: '版本名称不能为空', trigger: 'blur' },
|
||||
rules: {
|
||||
versionName: [
|
||||
{ required: true, message: '版本名称不能为空', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getReviewerMax(row) {
|
||||
// 假设总数是 this.datasetNum,其他值可以从 tableData 动态计算
|
||||
const totalAssigned = this.tableData
|
||||
.filter(item => item.type === '0' && item.id !== row.id)
|
||||
.reduce((sum, item) => sum + item.num, 0);
|
||||
return this.datasetNum - totalAssigned;
|
||||
},
|
||||
getLabelingMax(row) {
|
||||
const totalAssigned = this.tableData
|
||||
.filter(item => item.type === '1' && item.id !== row.id)
|
||||
.reduce((sum, item) => sum + item.num, 0);
|
||||
return this.datasetNum - totalAssigned;
|
||||
},
|
||||
// 数据提交
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
this.form.datasetId = this.datasetId;
|
||||
this.form.datasetId = this.datasetId
|
||||
add(this.form).then(response => {
|
||||
this.$modal.msgSuccess("发布成功");
|
||||
this.cancel();
|
||||
this.$modal.msgSuccess('发布成功')
|
||||
this.cancel()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
updateData(data){
|
||||
console.log(data)
|
||||
updateData(data) {
|
||||
this.tableData = []
|
||||
let num = Math.max(data.selectReviewer.length,data.selectLabeling.length)
|
||||
let minNum = Math.floor(this.datasetNum / num) // 基础分配
|
||||
if (minNum < 1) {
|
||||
this.$modal.msgWarning('每人最少分配1张');
|
||||
return;
|
||||
}
|
||||
// 处理 Reviewer 的分配
|
||||
let reviewerRemainder = this.datasetNum % data.selectReviewer.length // 余数
|
||||
let reviewerNum = Math.floor(this.datasetNum / data.selectReviewer.length) // 基础分配
|
||||
data.selectReviewer.forEach(item => {
|
||||
item.num = reviewerNum // 默认基础分配
|
||||
if (reviewerRemainder > 0) {
|
||||
item.num += 1 // 如果有余数,额外分配 1
|
||||
reviewerRemainder-- // 减少余数
|
||||
}
|
||||
this.tableData.push(item)
|
||||
})
|
||||
|
||||
// 处理 Labeling 的分配
|
||||
let labelingRemainder = this.datasetNum % data.selectLabeling.length // 余数
|
||||
let labelingNum = Math.floor(this.datasetNum / data.selectLabeling.length) // 基础分配
|
||||
|
||||
data.selectLabeling.forEach(item => {
|
||||
item.num = labelingNum // 默认基础分配
|
||||
if (labelingRemainder > 0) {
|
||||
item.num += 1 // 如果有余数,额外分配 1
|
||||
labelingRemainder-- // 减少余数
|
||||
}
|
||||
this.tableData.push(item)
|
||||
})
|
||||
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.isOpen = false;
|
||||
this.reset();
|
||||
this.$emit('dialog-cancel'); // 通知父组件
|
||||
this.isOpen = false
|
||||
this.reset()
|
||||
this.$emit('dialog-cancel') // 通知父组件
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {}; // 清空表单
|
||||
this.$refs.form.resetFields(); // 调用 Element UI 的重置方法
|
||||
this.tableData=[];
|
||||
this.form = {} // 清空表单
|
||||
this.$refs.form.resetFields() // 调用 Element UI 的重置方法
|
||||
},
|
||||
// 处理取消事件
|
||||
handleCancel() {
|
||||
this.selectOpen = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
this.selectOpen = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
|
|||
|
|
@ -118,11 +118,13 @@ export default {
|
|||
};
|
||||
this.form.selectReviewer.forEach((id) => {
|
||||
const result = this.reviewer.find(item => item.id === id);
|
||||
data.selectReviewer.push(result);
|
||||
|
||||
data.selectReviewer.push({id: result.id, name: result.name,num:0,type:'0'});
|
||||
})
|
||||
this.form.selectLabeling.forEach((id) => {
|
||||
const result = this.labeling.find(item => item.id === id);
|
||||
data.selectLabeling.push(result);
|
||||
console.log(result)
|
||||
data.selectLabeling.push({id: result.id, name: result.name,num:0,type:'1'});
|
||||
})
|
||||
this.$emit('update-data', data); // 触发事件并传递数据
|
||||
this.cancel();
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@
|
|||
<!--版本发布-->
|
||||
<release-version-dialog :dataset-id="datasetId" :open="releaseOpen" @dialog-cancel="handleCancel"/>
|
||||
<!--创建标注任务-->
|
||||
<annotation-task-dialog :dataset-id="datasetId" :open="annotationOpen" @dialog-cancel="handleCancel"/>
|
||||
<annotation-task-dialog :datasetNum="datasetNum" :dataset-id="datasetId" :open="annotationOpen" @dialog-cancel="handleCancel"/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -169,6 +169,7 @@ export default {
|
|||
name: "DataSet",
|
||||
data() {
|
||||
return {
|
||||
datasetNum:0,
|
||||
datasetId: 0,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
|
|
@ -241,6 +242,7 @@ export default {
|
|||
handleAnnotation(row){
|
||||
this.annotationOpen = true;
|
||||
this.datasetId = row.datasetId;
|
||||
this.datasetNum = row.notAnnotatedCount;
|
||||
},
|
||||
handleUpdate(){
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
:on-change="handleChange"
|
||||
:on-exceed="handleExceed"
|
||||
accept="*"
|
||||
:before-upload="beforeUpload"
|
||||
:directory="true"
|
||||
>
|
||||
<el-row>
|
||||
|
|
@ -37,6 +38,7 @@
|
|||
<span style="margin-left: 2%;font-size: 18px">{{ filename }}</span>
|
||||
</div>
|
||||
<el-progress :color="progress === 100 ? '#13ce66' : '#6E6A6A4C'" :percentage="progress"></el-progress>
|
||||
<span v-if="uploadFailed[filename]" style="font-size: 12px;color: red">文件上传失败</span>
|
||||
<el-divider></el-divider>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
|
@ -147,6 +149,7 @@ export default {
|
|||
uploadNextChunk(); // 上传下一个分片
|
||||
} else {
|
||||
this.startNextUpload(); // 上传下一个文件
|
||||
this.checkAllUploadsComplete(); // 检查是否所有文件上传完成
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
|
|
@ -156,7 +159,14 @@ export default {
|
|||
};
|
||||
uploadNextChunk(); // 开始上传第一个分片
|
||||
},
|
||||
|
||||
checkAllUploadsComplete() {
|
||||
const allComplete = Object.values(this.uploadProgress).every(progress => progress === 100);
|
||||
if (allComplete) {
|
||||
this.$message.success("所有文件上传完成!");
|
||||
this.drawer = false; // 自动关闭弹窗
|
||||
this.getList && this.getList(); // 重新加载列表
|
||||
}
|
||||
},
|
||||
// 启动队列中的下一个文件上传(控制并发)
|
||||
startNextUpload() {
|
||||
Object.keys(this.uploadsNum).forEach(fileName => {
|
||||
|
|
@ -170,7 +180,14 @@ export default {
|
|||
const nextFile = this.queue.shift(); // 获取下一个文件
|
||||
this.uploadChunks(nextFile); // 开始上传该文件
|
||||
},
|
||||
|
||||
beforeUpload(file) {
|
||||
const maxSize = 2 * 1024 * 1024*1024; // 限制文件最大为 5MB
|
||||
if (file.size > maxSize) {
|
||||
this.$message.error('文件大小不能超过 2GB');
|
||||
return false; // 阻止上传
|
||||
}
|
||||
return true; // 允许上传
|
||||
},
|
||||
// 处理超出文件数限制的情况
|
||||
handleExceed(files, fileList) {
|
||||
this.$message.warning(`最多只能选择50个文件,当前选择了 ${files.length + fileList.length} 个文件`);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,14 @@
|
|||
@click="dataRecovery"
|
||||
v-hasPermi="['dataCenter:dataSetBasicFile:dataRecovery']"
|
||||
>还原</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-refresh"
|
||||
size="mini"
|
||||
@click="emptyRecycleBin"
|
||||
v-hasPermi="['dataCenter:dataSetBasicFile:dataRecovery']"
|
||||
>清空回收站</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
|
@ -74,7 +82,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { delList, dataRecovery } from "@/api/dataCenter/basicFile";
|
||||
import { delList, dataRecovery,emptyRecycleBin} from "@/api/dataCenter/basicFile";
|
||||
export default {
|
||||
name: "File",
|
||||
data() {
|
||||
|
|
@ -157,6 +165,14 @@ export default {
|
|||
this.getList();
|
||||
this.$modal.msgSuccess("还原成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
emptyRecycleBin(){
|
||||
this.$modal.confirm('是否确认清空回收站?').then(function() {
|
||||
return emptyRecycleBin();
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("清空成功");
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue