提交代码

This commit is contained in:
jiang 2024-11-25 18:10:02 +08:00
parent 8eb22eaff4
commit ce08ffde29
6 changed files with 174 additions and 50 deletions

View File

@ -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',
})
}

View File

@ -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">

View File

@ -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();

View File

@ -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(){

View File

@ -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} 个文件`);

View File

@ -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(() => {});
}
}
};