提交代码
This commit is contained in:
parent
b69ef1dd92
commit
d9a58838ad
|
|
@ -158,7 +158,7 @@ export const dynamicRoutes = [
|
|||
path: 'index/:evaluateId(\\d+)',
|
||||
component: () => import('@/views/dataCenter/evaluate/child/evaluateDetails'),
|
||||
name: 'Data',
|
||||
meta: { title: '模型评价详情', activeMenu: '/dataCenter/evaluateDetails' }
|
||||
meta: { title: '模型评价详情', activeMenu: '/dataCenter/evaluate/evaluateDetails' }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
<el-table-column label="操作" align="center" min-width="140" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleExamine(scope.row)"
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
>审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
:disabled="scope.row.status0Count ===0"
|
||||
size="mini"
|
||||
type="text"
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
>智能标注
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleAnnotation(scope.row)"
|
||||
|
|
|
|||
|
|
@ -150,7 +150,9 @@ export default {
|
|||
loadTaskList() {
|
||||
getMyNoAnnotatedTask().then(res => {
|
||||
this.taskList = res.data
|
||||
console.log(this.taskList)
|
||||
this.taskId = Number(this.$route.params && this.$route.params.taskId)
|
||||
console.log(this.taskId)
|
||||
this.selectTask(this.taskId)
|
||||
})
|
||||
},
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
<el-table-column label="操作" align="center" min-width="140" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleExamine(scope.row)"
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
>审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
:disabled="scope.row.status0Count ===0"
|
||||
size="mini"
|
||||
type="text"
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
>智能标注
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleAnnotation(scope.row)"
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
<el-table-column label="操作" align="center" min-width="140" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleExamine(scope.row)"
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
>审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
:disabled="scope.row.status0Count ===0"
|
||||
size="mini"
|
||||
type="text"
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
>智能标注
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.reviewerIds.split(',').map(Number).includes(getUserId)"
|
||||
v-if="scope.row.annotatorIds.split(',').map(Number).includes(getUserId)"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleAnnotation(scope.row)"
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { getDetails, addDetails, updateDetails } from '@/api/dataCenter/evaluateDetails'
|
||||
import { getDetails, addDetails, updateDetails } from '@/api/dataCenter/evaluateDetails';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
|
|
@ -45,16 +45,23 @@ export default {
|
|||
computed: {
|
||||
isOpen: {
|
||||
get() {
|
||||
return this.open
|
||||
return this.open;
|
||||
},
|
||||
set(value) {
|
||||
this.$emit('dialog-cancel')
|
||||
this.$emit('dialog-cancel');
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
form: {
|
||||
justSqmple: null,
|
||||
loseSample: null,
|
||||
tpNum: null,
|
||||
tnNum: null,
|
||||
fpNum: null,
|
||||
fnNum: null
|
||||
},
|
||||
rules: {
|
||||
justSqmple: [
|
||||
{ required: true, message: '请输入正样本数', trigger: 'blur' },
|
||||
|
|
@ -63,66 +70,95 @@ export default {
|
|||
loseSample: [
|
||||
{ required: true, message: '请输入负样本数', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' }
|
||||
|
||||
],
|
||||
tpNum: [
|
||||
{ required: true, message: '请输入TP数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' }
|
||||
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' },
|
||||
{ validator: this.validatePositiveSamples, trigger: 'blur' }
|
||||
],
|
||||
tnNum: [{ required: true, message: '请输入TN数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' }
|
||||
fnNum: [
|
||||
{ required: true, message: '请输入FN数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' },
|
||||
{ validator: this.validatePositiveSamples, trigger: 'blur' }
|
||||
],
|
||||
fpNum: [{ required: true, message: '请输入FP数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' }
|
||||
tnNum: [
|
||||
{ required: true, message: '请输入TN数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' },
|
||||
{ validator: this.validateNegativeSamples, trigger: 'blur' }
|
||||
],
|
||||
fnNum: [{ required: true, message: '请输入FN数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' }
|
||||
fpNum: [
|
||||
{ required: true, message: '请输入FP数量', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: 'blur' },
|
||||
{ validator: this.validateNegativeSamples, trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
isOpen(newVal) {
|
||||
if (newVal && this.evaluateDetailId) {
|
||||
getDetails(this.evaluateDetailId).then(res => {
|
||||
this.form = res.data
|
||||
})
|
||||
getDetails(this.evaluateDetailId).then((res) => {
|
||||
this.form = res.data;
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
validatePositiveSamples(rule, value, callback) {
|
||||
const { tpNum, fnNum, justSqmple } = this.form;
|
||||
if (tpNum != null && fnNum != null && justSqmple != null) {
|
||||
if (tpNum + fnNum !== parseInt(justSqmple, 10)) {
|
||||
callback(new Error('TP和FN之和必须等于正样本数'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
validateNegativeSamples(rule, value, callback) {
|
||||
const { tnNum, fpNum, loseSample } = this.form;
|
||||
if (tnNum != null && fpNum != null && loseSample != null) {
|
||||
if (tnNum + fpNum !== parseInt(loseSample, 10)) {
|
||||
callback(new Error('FP和TN之和必须等于负样本数'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateDetails(this.form).then(res => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
this.isOpen = false
|
||||
this.getList()
|
||||
})
|
||||
updateDetails(this.form).then((res) => {
|
||||
this.$modal.msgSuccess('修改成功');
|
||||
this.isOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
this.form.evaluateId = this.evaluateId
|
||||
console.log(this.form)
|
||||
addDetails(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
this.isOpen = false
|
||||
this.getList()
|
||||
})
|
||||
this.form.evaluateId = this.evaluateId;
|
||||
addDetails(this.form).then((response) => {
|
||||
this.$modal.msgSuccess('新增成功');
|
||||
this.isOpen = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
cancel() {
|
||||
this.isOpen = false
|
||||
this.resetForm()
|
||||
this.isOpen = false;
|
||||
this.resetForm();
|
||||
},
|
||||
resetForm() {
|
||||
this.form = {}
|
||||
this.form = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
<style scoped lang="scss"></style>
|
||||
|
|
|
|||
|
|
@ -149,7 +149,6 @@ export default {
|
|||
},
|
||||
created() {
|
||||
this.evaluateId = Number(this.$route.params && this.$route.params.evaluateId)
|
||||
console.log(this.evaluateId)
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入完整手机号码" clearable style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
|
@ -82,7 +82,9 @@
|
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange" :selectable="checkSelectable" :row-class-name="getRowClassName">
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"
|
||||
:selectable="checkSelectable" :row-class-name="getRowClassName"
|
||||
>
|
||||
<el-table-column type="selection" width="50" align="center"/>
|
||||
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible"/>
|
||||
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
|
||||
|
|
@ -112,13 +114,13 @@
|
|||
|
||||
<el-table-column label="账号时效" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.isPermanent==1?"长期账号":"临时账号" }}</span>
|
||||
<span>{{ scope.row.isPermanent == 1 ? '长期账号' : '临时账号' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column v-if="config.registersConfig.approvalStatus" label="审批状态" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.approvalStatus==0?"未审批":"已审批" }}</span>
|
||||
<span>{{ scope.row.approvalStatus == 0 ? '未审批' : '已审批' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
|
||||
|
|
@ -127,7 +129,9 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope" v-if="!hasSystemOrAuditrRole(scope.row.roles) && scope.row.userId !== 1 && scope.row.isBuiltIn !== '0'">
|
||||
<template slot-scope="scope"
|
||||
v-if="!hasSystemOrAuditrRole(scope.row.roles) && scope.row.userId !== 1 && scope.row.isBuiltIn !== '0'"
|
||||
>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="confirmPassword(scope.row)"
|
||||
v-hasPermi="['system:user:edit']"
|
||||
>修改
|
||||
|
|
@ -220,7 +224,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="状态">
|
||||
<el-form-item label="状态">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{
|
||||
dict.label
|
||||
|
|
@ -330,11 +334,11 @@ import {
|
|||
import { getToken } from '@/utils/auth'
|
||||
import Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import {validateNewPassword } from '@/utils/validate'
|
||||
import { validateNewPassword } from '@/utils/validate'
|
||||
|
||||
export default {
|
||||
name: 'User',
|
||||
dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_login_type','sys_user_permanent'],
|
||||
dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_login_type', 'sys_user_permanent'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -428,7 +432,7 @@ export default {
|
|||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
deptId:[ { required: true, message: '请选择归属部门', trigger: 'blur' }],
|
||||
deptId: [{ required: true, message: '请选择归属部门', trigger: 'blur' }],
|
||||
phonenumber: [
|
||||
{ required: true, message: '手机号不能为空', trigger: 'blur' },
|
||||
{
|
||||
|
|
@ -452,12 +456,14 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
config() {
|
||||
return JSON.parse(localStorage.getItem('systemConfig')) || {registersConfig: {
|
||||
return JSON.parse(localStorage.getItem('systemConfig')) || {
|
||||
registersConfig: {
|
||||
phoneRegisters: true,
|
||||
emailRegisters: true,
|
||||
verificationCode:true,
|
||||
approvalStatus:true,
|
||||
}}; // 获取 JSON 对象
|
||||
verificationCode: true,
|
||||
approvalStatus: true
|
||||
}
|
||||
} // 获取 JSON 对象
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
|
@ -476,8 +482,8 @@ export default {
|
|||
methods: {
|
||||
/* 手机号码脱敏 */
|
||||
hidePhone(phone) {
|
||||
if (!phone) return '';
|
||||
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
|
||||
if (!phone) return ''
|
||||
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
|
||||
},
|
||||
/* 表单登录权限自定义校验 */
|
||||
validateLoginType(rule, value, callback) {
|
||||
|
|
@ -585,13 +591,13 @@ export default {
|
|||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
// 过滤掉不可选的行(虽然界面上不可选,但为了安全起见还是过滤一次)
|
||||
const validSelection = selection.filter(row => this.checkSelectable(row));
|
||||
const validSelection = selection.filter(row => this.checkSelectable(row))
|
||||
|
||||
// 更新选中的roleId数组
|
||||
this.ids = validSelection.map(item => item.userId);
|
||||
this.ids = validSelection.map(item => item.userId)
|
||||
// 更新单选和多选状态
|
||||
this.single = validSelection.length !== 1;
|
||||
this.multiple = !validSelection.length;
|
||||
this.single = validSelection.length !== 1
|
||||
this.multiple = !validSelection.length
|
||||
},
|
||||
// 更多操作触发
|
||||
handleCommand(command, row) {
|
||||
|
|
@ -641,7 +647,7 @@ export default {
|
|||
this.form.password = ''
|
||||
})
|
||||
},
|
||||
confirmPassword(row){
|
||||
confirmPassword(row) {
|
||||
this.$prompt('请输入密码,鉴别用户', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
|
|
@ -650,14 +656,14 @@ export default {
|
|||
inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
inputValidator: (value) => {
|
||||
// 调用 validateNewPassword 校验
|
||||
const errorMessage=function(error) {
|
||||
const errorMessage = function(error) {
|
||||
if (error) {
|
||||
return error.message;
|
||||
return error.message
|
||||
} else {
|
||||
console.log('验证通过');
|
||||
console.log('验证通过')
|
||||
}
|
||||
};
|
||||
validateNewPassword(null, value, errorMessage);
|
||||
}
|
||||
validateNewPassword(null, value, errorMessage)
|
||||
}
|
||||
}).then(({ value }) => {
|
||||
confirmPassword(value).then(response => {
|
||||
|
|
@ -667,7 +673,7 @@ export default {
|
|||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
confirmResetPwd(row){
|
||||
confirmResetPwd(row) {
|
||||
this.$prompt('请输入密码,鉴别用户', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
|
|
@ -676,14 +682,14 @@ export default {
|
|||
inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
inputValidator: (value) => {
|
||||
// 调用 validateNewPassword 校验
|
||||
const errorMessage=function(error) {
|
||||
const errorMessage = function(error) {
|
||||
if (error) {
|
||||
return error.message;
|
||||
return error.message
|
||||
} else {
|
||||
console.log('验证通过');
|
||||
console.log('验证通过')
|
||||
}
|
||||
};
|
||||
validateNewPassword(null, value, errorMessage);
|
||||
}
|
||||
validateNewPassword(null, value, errorMessage)
|
||||
}
|
||||
}).then(({ value }) => {
|
||||
confirmPassword(value).then(response => {
|
||||
|
|
@ -703,14 +709,14 @@ export default {
|
|||
inputErrorMessage: '用户密码长度必须介于 8 和 16 之间',
|
||||
inputValidator: (value) => {
|
||||
// 调用 validateNewPassword 校验
|
||||
const errorMessage=function(error) {
|
||||
const errorMessage = function(error) {
|
||||
if (error) {
|
||||
return error.message;
|
||||
return error.message
|
||||
} else {
|
||||
console.log('验证通过');
|
||||
console.log('验证通过')
|
||||
}
|
||||
};
|
||||
validateNewPassword(null, value, errorMessage);
|
||||
}
|
||||
validateNewPassword(null, value, errorMessage)
|
||||
}
|
||||
}).then(({ value }) => {
|
||||
resetUserPwd(row.userId, value).then(response => {
|
||||
|
|
@ -791,20 +797,19 @@ export default {
|
|||
|
||||
hasSystemOrAuditrRole(roles) {
|
||||
if (!roles || !Array.isArray(roles)) {
|
||||
return false; // 如果 roles 为空或不是数组,返回 false
|
||||
return false // 如果 roles 为空或不是数组,返回 false
|
||||
}
|
||||
return roles.some(role => role.roleKey === 'systemAdmin' || role.roleKey === 'audit'); // 检查是否存在 roleKey 为 admin 的角色
|
||||
return roles.some(role => role.roleKey === 'systemAdmin' || role.roleKey === 'audit') // 检查是否存在 roleKey 为 admin 的角色
|
||||
},
|
||||
|
||||
// 检查行是否可选
|
||||
checkSelectable(row) {
|
||||
return !(row.userId === 1 || row.isBuiltIn === '0' || this.hasSystemOrAuditrRole(row.roles));
|
||||
return !(row.userId === 1 || row.isBuiltIn === '0' || this.hasSystemOrAuditrRole(row.roles))
|
||||
},
|
||||
|
||||
|
||||
getRowClassName(row) {
|
||||
return !this.checkSelectable(row) ? 'disabled-row' : '';
|
||||
},
|
||||
return !this.checkSelectable(row) ? 'disabled-row' : ''
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -824,4 +829,4 @@ export default {
|
|||
.disabled-row:hover td {
|
||||
background-color: #f5f7fa !important;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
|||
Loading…
Reference in New Issue