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