提交代码

This commit is contained in:
jiang 2024-11-27 17:47:15 +08:00
parent 5d0e5b692e
commit 959ed2c2c9
2 changed files with 64 additions and 51 deletions

View File

@ -41,4 +41,12 @@ export function getAnnotationDetails(data) {
}) })
} }
export function listSelection(data) {
return request({
url: '/ai/annotationTask/list/listSelection',
method: 'get',
params: data
})
}

View File

@ -5,7 +5,7 @@
> >
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="名称" prop="taskName"> <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>
<el-form-item label="描述" prop="taskDesc"> <el-form-item label="描述" prop="taskDesc">
<el-input <el-input
@ -24,10 +24,11 @@
type="datetimerange" type="datetimerange"
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"> end-placeholder="结束日期"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="标注类型" prop="annotateType" > <el-form-item label="标注类型" prop="annotateType">
<el-select v-model="form.annotateType" placeholder="请选择标注类型" clearable style="width: 100%"> <el-select v-model="form.annotateType" placeholder="请选择标注类型" clearable style="width: 100%">
<el-option v-for="dict in dict.type.ai_annotate_type" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.ai_annotate_type" :key="dict.value" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -35,16 +36,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="标签" prop="label" > <el-form-item label="标签" prop="label">
<treeselect v-model="form.label" :disable-branch-nodes="true" :multiple="true" :options="labelsListOptions" :normalizer="normalizer" placeholder="请选择父节点" /> <treeselect v-model="form.label" :disable-branch-nodes="true" :multiple="true" :options="labelsListOptions"
:normalizer="normalizer" placeholder="请选择标签"
/>
</el-form-item> </el-form-item>
<el-form-item label="是否启用标注团队" prop="isStartTeam" label-width="130px"> <el-form-item label="是否启用标注团队" prop="isStartTeam" label-width="130px">
<el-switch <el-switch
v-model="form.isStartTeam" v-model="form.startTeam"
> >
</el-switch> </el-switch>
</el-form-item> </el-form-item>
<div v-show="form.isStartTeam"> <div v-show="form.startTeam">
<el-form-item label="选择标注人员" prop="isStartTeam" label-width="100px"> <el-form-item label="选择标注人员" prop="isStartTeam" label-width="100px">
<el-button type="primary" @click="selectOpen=true">选择标注人员</el-button> <el-button type="primary" @click="selectOpen=true">选择标注人员</el-button>
</el-form-item> </el-form-item>
@ -103,19 +106,20 @@
import selectPersonnelDialog from '../child/selectPersonnelDialog.vue' import selectPersonnelDialog from '../child/selectPersonnelDialog.vue'
import { add } from '@/api/dataCenter/annotationTask' import { add } from '@/api/dataCenter/annotationTask'
import {listDataSetLabels } from "@/api/dataCenter/labels"; import { listDataSetLabels } from '@/api/dataCenter/labels'
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from '@riophae/vue-treeselect'
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default { export default {
dicts: ['ai_annotate_type'], dicts: ['ai_annotate_type'],
components: { selectPersonnelDialog, Treeselect}, components: { selectPersonnelDialog, Treeselect },
props: { props: {
open: { open: {
type: Boolean, type: Boolean,
default: false, default: false,
required: true required: true
}, },
datasetNum:{ datasetNum: {
type: Number, type: Number,
default: 0, default: 0,
required: true required: true
@ -136,10 +140,10 @@ export default {
} }
} }
}, },
watch:{ watch: {
isOpen(newVal, oldVal){ isOpen(newVal, oldVal) {
if (newVal){ if (newVal) {
this.getTreeselect(); this.getTreeselect()
} }
} }
@ -149,12 +153,12 @@ export default {
tableData: [], tableData: [],
// //
labelsListOptions: [], labelsListOptions: [],
labels:[], labels: [],
selectOpen: false, selectOpen: false,
form: {}, // form: {}, //
rules: { rules: {
taskName: [ taskName: [
{ required: true, message: '版本名称不能为空', trigger: 'blur' } { required: true, message: '任务名称不能为空', trigger: 'blur' }
], ],
annotateType: [ annotateType: [
{ required: true, message: '标注类型不能为空', trigger: 'blur' } { required: true, message: '标注类型不能为空', trigger: 'blur' }
@ -162,7 +166,7 @@ export default {
label: [ label: [
{ required: true, message: '请选择标签', trigger: 'blur' } { required: true, message: '请选择标签', trigger: 'blur' }
], ],
data:[ data: [
{ required: true, message: '请选择时间', trigger: 'blur' } { required: true, message: '请选择时间', trigger: 'blur' }
] ]
} }
@ -171,61 +175,62 @@ export default {
methods: { methods: {
normalizer(node) { normalizer(node) {
if (node.children && !node.children.length) { if (node.children && !node.children.length) {
delete node.children; delete node.children
} }
return { return {
id: node.labelId, id: node.labelId,
label: node.labelName, label: node.labelName,
children: node.children children: node.children
}; }
}, },
/** 查询样本标签管理下拉树结构 */ /** 查询样本标签管理下拉树结构 */
getTreeselect() { getTreeselect() {
listDataSetLabels({}).then(response => { listDataSetLabels({}).then(response => {
console.log(response) console.log(response)
this.labelsListOptions = []; this.labelsListOptions = []
const menu = { labelId: 0, labelName: '主类目', children: [] }; const menu = { labelId: 0, labelName: '主类目', children: [] }
menu.children = this.handleTree(response.data, "labelId"); menu.children = this.handleTree(response.data, 'labelId')
this.labelsListOptions.push(menu); this.labelsListOptions.push(menu)
}); })
}, },
getReviewerMax(row) { getReviewerMax(row) {
// this.datasetNum tableData // this.datasetNum tableData
const totalAssigned = this.tableData const totalAssigned = this.tableData
.filter(item => item.type === '0' && item.id !== row.id) .filter(item => item.type === '0' && item.id !== row.id)
.reduce((sum, item) => sum + item.num, 0); .reduce((sum, item) => sum + item.num, 0)
return this.datasetNum - totalAssigned; return this.datasetNum - totalAssigned
}, },
getLabelingMax(row) { getLabelingMax(row) {
const totalAssigned = this.tableData const totalAssigned = this.tableData
.filter(item => item.type === '1' && item.id !== row.id) .filter(item => item.type === '1' && item.id !== row.id)
.reduce((sum, item) => sum + item.num, 0); .reduce((sum, item) => sum + item.num, 0)
return this.datasetNum - totalAssigned; return this.datasetNum - totalAssigned
}, },
// //
submitForm() { submitForm() {
if (this.tableData.length === 0 && this.form.isStartTeam) { if (this.tableData.length === 0 && this.form.isStartTeam) {
this.$modal.msgWarning('请选择人员') this.$modal.msgWarning('请选择人员')
return; return
} }
this.$refs['form'].validate(valid => { this.$refs['form'].validate(valid => {
if (valid) { if (valid) {
this.form.labels=this.form.label.join(",") this.form.labels = this.form.label.join(',')
if(this.form.isStartTeam){ this.form.isStartTeam = this.form.startTeam ? '1' : '0'
let annotators = []; if (this.form.isStartTeam) {
let reviewers =[]; let annotators = []
this.tableData.forEach((item) => { let reviewers = []
if (item.type === '0') { this.tableData.forEach((item) => {
reviewers.push(item); if (item.type === '0') {
} reviewers.push(item)
if (item.type === '1') { }
annotators.push(item); if (item.type === '1') {
} annotators.push(item)
}) }
this.form.annotators = annotators; })
this.form.reviewers = annotators; this.form.annotators = annotators
this.form.reviewers = annotators
} }
this.form.datasetId = this.datasetId; this.form.datasetId = this.datasetId
add(this.form).then(response => { add(this.form).then(response => {
this.$modal.msgSuccess('发布成功') this.$modal.msgSuccess('发布成功')
this.cancel() this.cancel()
@ -235,11 +240,11 @@ export default {
}, },
updateData(data) { updateData(data) {
this.tableData = [] this.tableData = []
let num = Math.max(data.selectReviewer.length,data.selectLabeling.length) let num = Math.max(data.selectReviewer.length, data.selectLabeling.length)
let minNum = Math.floor(this.datasetNum / num) // let minNum = Math.floor(this.datasetNum / num) //
if (minNum < 1) { if (minNum < 1) {
this.$modal.msgWarning('每人最少分配1张'); this.$modal.msgWarning('每人最少分配1张')
return; return
} }
// Reviewer // Reviewer
let reviewerRemainder = this.datasetNum % data.selectReviewer.length // let reviewerRemainder = this.datasetNum % data.selectReviewer.length //
@ -275,7 +280,7 @@ export default {
}, },
// //
reset() { reset() {
this.tableData=[]; this.tableData = []
this.form = {} // this.form = {} //
this.$refs.form.resetFields() // Element UI this.$refs.form.resetFields() // Element UI
}, },