Commit c86c395c authored by mhw's avatar mhw

版本更新

parent 8666dde9
...@@ -17,4 +17,8 @@ export default class DatasetData { ...@@ -17,4 +17,8 @@ export default class DatasetData {
static load (sender, params, axiosOption, httpOption) { static load (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetData/load', 'post', params, axiosOption, httpOption); return sender.doUrl('/admin/app/datasetData/load', 'post', params, axiosOption, httpOption);
} }
static summaryCount (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetData/summaryCount', 'get', params, axiosOption, httpOption);
}
DatasetData
} }
...@@ -2,7 +2,9 @@ export default class DatasetVersion { ...@@ -2,7 +2,9 @@ export default class DatasetVersion {
static list (sender, params, axiosOption, httpOption) { static list (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/list', 'post', params, axiosOption, httpOption); return sender.doUrl('/admin/app/datasetVersion/list', 'post', params, axiosOption, httpOption);
} }
static publish (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/publish', 'get', params, axiosOption, httpOption);
}
static view (sender, params, axiosOption, httpOption) { static view (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/view', 'get', params, axiosOption, httpOption); return sender.doUrl('/admin/app/datasetVersion/view', 'get', params, axiosOption, httpOption);
} }
...@@ -13,6 +15,13 @@ export default class DatasetVersion { ...@@ -13,6 +15,13 @@ export default class DatasetVersion {
static startExport (sender, params, axiosOption, httpOption) { static startExport (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/startExport', 'get', params, axiosOption, httpOption); return sender.doUrl('/admin/app/datasetVersion/startExport', 'get', params, axiosOption, httpOption);
} }
static load (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/load', 'post', params, axiosOption, httpOption);
}
static outputList (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetOutput/list', 'post', params, axiosOption, httpOption);
}
static add (sender, params, axiosOption, httpOption) { static add (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/datasetVersion/add', 'post', params, axiosOption, httpOption); return sender.doUrl('/admin/app/datasetVersion/add', 'post', params, axiosOption, httpOption);
} }
......
<?xml version="1.0" encoding="UTF-8"?>
<svg width="140px" height="73px" viewBox="0 0 140 73" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>标注数据集</title>
<defs>
<filter x="-24.2%" y="-44.4%" width="148.5%" height="188.9%" filterUnits="objectBoundingBox" id="filter-1">
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0.104890114 0 0 0 0 0.150829946 0 0 0 0 0.330804797 0 0 0 0.0998885148 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
<feMerge>
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
<rect id="path-2" x="0" y="0" width="45" height="30" rx="2"></rect>
<filter x="-15.6%" y="-33.3%" width="148.9%" height="173.3%" filterUnits="objectBoundingBox" id="filter-3">
<feOffset dx="4" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="3" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
<feColorMatrix values="0 0 0 0 0.103182954 0 0 0 0 0.242371171 0 0 0 0 0.467360344 0 0 0 0.108555507 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="1.1-在线标注入口优化-0818" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="数据标注" transform="translate(-509.000000, -766.000000)">
<g id="页面备份" transform="translate(0.000000, 590.000000)">
<g id="流程引导备份" transform="translate(196.000000, 112.000000)">
<g id="使用流程" transform="translate(24.000000, 64.000000)">
<g id="编组-16" transform="translate(263.000000, 0.000000)">
<g id="标注数据集" transform="translate(26.000000, 0.000000)">
<rect id="矩形" x="0" y="0" width="140" height="72"></rect>
<g id="编组-49" transform="translate(8.000000, 6.000000)">
<g id="编组-48">
<rect id="矩形" fill="#E6F0FF" x="20" y="0" width="80" height="60" rx="1"></rect>
<path d="M21,0 L99,0 C99.5522847,-1.01453063e-16 100,0.44771525 100,1 L100,5 L100,5 L20,5 L20,1 C20,0.44771525 20.4477153,1.01453063e-16 21,0 Z" id="矩形备份-23" fill="#2468F2"></path>
<g id="编组-44" transform="translate(28.000000, 12.000000)" fill="#A7C8FC">
<rect id="矩形" x="0" y="0" width="17" height="3" rx="1"></rect>
<g id="编组-45" transform="translate(0.000000, 5.000000)">
<rect id="矩形备份-4" x="0" y="0" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-11" x="0" y="9.5" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-18" x="0" y="19" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-26" x="32.4056604" y="0" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-25" x="32.4056604" y="9.5" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-24" x="32.4056604" y="19" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-30" x="0" y="28.5" width="30.9056604" height="8" rx="1"></rect>
<rect id="矩形备份-28" x="32.4056604" y="28.5" width="30.9056604" height="8" rx="1"></rect>
</g>
</g>
<g id="编组-47" filter="url(#filter-1)" transform="translate(0.000000, 20.146418)">
<path d="M1,0 L32,0 C32.5522847,-1.01453063e-16 33,0.44771525 33,1 L33,17 C33,17.5522847 32.5522847,18 32,18 L1,18 C0.44771525,18 6.76353751e-17,17.5522847 0,17 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 Z" id="矩形备份-5" fill="#FFFFFF"></path>
<g id="编组-46" transform="translate(5.032309, 4.853582)">
<rect id="矩形" fill="#2468F2" x="0" y="0" width="14" height="2.5" rx="0.5"></rect>
<rect id="矩形备份-6" fill="#A8CAFF" x="0" y="4" width="24" height="5" rx="1"></rect>
</g>
</g>
</g>
<g id="编组-51" transform="translate(73.000000, 30.000000)">
<g id="矩形">
<use fill="black" fill-opacity="1" filter="url(#filter-3)" xlink:href="#path-2"></use>
<use fill-opacity="0.159118226" fill="#ADD3FF" fill-rule="evenodd" xlink:href="#path-2"></use>
</g>
<g id="编组-50" transform="translate(14.000000, 6.000000)" fill-rule="nonzero">
<path d="M1.09874512,8.65954839 L13.6587489,8.66659001 C13.9498874,8.6668315 14.229142,8.55154993 14.4348199,8.34621463 L17.6780611,5.11428669 C18.1067248,4.68711829 18.1079011,3.99355511 17.6780598,3.56521317 L14.4277527,0.326243997 C14.2216644,0.120874574 13.9437396,0.00586769778 13.651683,0.00586769778 L1.11640983,0 C0.511099014,0 0.01884236,0.488192456 0.0176647125,1.09256533 L4.54747351e-13,7.56463598 C0.0011776475,8.16900885 0.492256654,8.65837485 1.09874512,8.65954839 Z M11.8475251,3.17442252 C12.4905206,2.53366992 13.5339183,2.5336719 14.1792691,3.17677158 C14.8234423,3.81869772 14.8222646,4.8596273 14.1769158,5.50038189 C13.5327426,6.14230802 12.4881673,6.1411325 11.8451698,5.49803481 C11.2021762,4.85493315 11.2021762,3.8151771 11.8475251,3.17442252 Z" id="形状" fill="#2468F2"></path>
<path d="M1.09874512,18.992958 L13.6587489,18.9999996 C13.9498874,19.0002411 14.229142,18.8849595 14.4348199,18.6796242 L17.6780611,15.4476963 C18.1067248,15.0205279 18.1079011,14.3269647 17.6780598,13.8986228 L14.4277527,10.6596536 C14.2216644,10.4542842 13.9437396,10.3392773 13.651683,10.3392773 L1.11640983,10.3334096 C0.511099014,10.3334096 0.01884236,10.8216021 0.0176647125,11.4259749 L0,17.8980456 C0.0011776475,18.5024185 0.492256654,18.9917845 1.09874512,18.992958 Z M11.8475251,13.5078321 C12.4905206,12.8670795 13.5339183,12.8670815 14.1792691,13.5101812 C14.8234423,14.1521073 14.8222646,15.1930369 14.1769158,15.8337915 C13.5327426,16.4757176 12.4881673,16.4745421 11.8451698,15.8314444 C11.2021762,15.1883428 11.2021762,14.1485867 11.8475251,13.5078321 Z" id="形状" fill="#A7C8FC"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
This diff is collapsed.
module.exports = { module.exports = {
// baseUrl: 'http://218.76.0.69:8082/', // baseUrl: 'http://218.76.0.69:8082/',
baseUrl: 'http://192.168.0.34:8082/', baseUrl: 'http://192.168.0.36:8082/',
// baseUrl: 'http://192.168.0.168:8482/', // baseUrl: 'http://192.168.0.168:8482/',
wsUrl: 'ws://218.76.0.69:7860/', wsUrl: 'ws://218.76.0.69:7860/',
projectName: '灵境大模型平台' projectName: '灵境大模型平台'
......
...@@ -174,10 +174,10 @@ const InputStatus = new DictionaryBase('导入状态', [ ...@@ -174,10 +174,10 @@ const InputStatus = new DictionaryBase('导入状态', [
} }
]); ]);
Vue.prototype.InputStatus = InputStatus; Vue.prototype.InputStatus = InputStatus;
const OutputStatus = new DictionaryBase('导状态', [ const OutputStatus = new DictionaryBase('导状态', [
{ {
id: 0, id: 0,
name: '-', name: '导出中',
symbol: '0' symbol: '0'
}, },
{ {
...@@ -191,7 +191,7 @@ Vue.prototype.OutputStatus = OutputStatus; ...@@ -191,7 +191,7 @@ Vue.prototype.OutputStatus = OutputStatus;
const CleanStatus = new DictionaryBase('清洗状态', [ const CleanStatus = new DictionaryBase('清洗状态', [
{ {
id: 0, id: 0,
name: '-', name: '清洗中',
symbol: '0' symbol: '0'
}, },
{ {
......
...@@ -30,36 +30,33 @@ ...@@ -30,36 +30,33 @@
</template> </template>
<script> <script>
import { MyDataSet } from '@/api/gptController.js'
import { MyDataSet } from '@/api/gptController.js';
export default { export default {
data () { data() {
return { return {
form: { form: {
'dataType': 0, dataType: 0,
'datasetName': '', datasetName: '',
'deletedFlag': 0, deletedFlag: 0,
'dimensionType': 0, dimensionType: 0,
'template': 0 template: 0
}, },
rules: { rules: {
datasetName: [{required: true, message: '数据集名称不能为空', trigger: 'blur'}] datasetName: [{ required: true, message: '数据集名称不能为空', trigger: 'blur' }]
}
} }
};
}, },
props: ['isEdit', 'item'], props: ['isEdit', 'item'],
components: {}, components: {},
computed: { computed: {},
}, mounted() {
mounted () {
this.intFrom() this.intFrom()
}, },
methods: { methods: {
intFrom () { intFrom() {
this.form = { ...this.form, ...this.item } this.form = { ...this.form, ...this.item }
try { try {
this.form.templateLabel = JSON.parse(this.item.templateLabel) this.form.templateLabel = JSON.parse(this.item.templateLabel)
...@@ -67,48 +64,52 @@ export default { ...@@ -67,48 +64,52 @@ export default {
// console.log(error); // console.log(error);
} }
}, },
onCancel (isSuccess) { onCancel(isSuccess) {
if (this.observer != null) { if (this.observer != null) {
this.observer.cancel(isSuccess); this.observer.cancel(isSuccess)
} }
}, },
onSubmit () { onSubmit() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => { this.$refs['form'].validate((valid) => {
if (valid) { if (valid) {
let params = {}; let params = {}
params.datasetManageDto = { ...this.form }; params.datasetManageDto = { ...this.form }
if (this.isEdit) { if (this.isEdit) {
MyDataSet.update(this, params).then(res => { MyDataSet.update(this, params)
resolve(res); .then((res) => {
this.$message.success('编辑成功'); resolve(res)
this.onCancel(true); this.$message.success('编辑成功')
}).catch(e => { this.onCancel(true)
reject(e); })
}); .catch((e) => {
reject(e)
})
} else { } else {
MyDataSet.add(this, params).then(res => { MyDataSet.add(this, params)
resolve(res); .then((res) => {
this.$message.success('添加成功'); resolve(res)
this.onCancel(true); this.$message.success('添加成功')
}).catch(e => { this.onCancel(true)
reject(e); })
}); .catch((e) => {
reject(e)
})
} }
} else { } else {
// reject(); // reject();
} }
}); })
}); })
}, },
isText (data) { isText(data) {
if (data !== 0) { if (data !== 0) {
this.form.template = undefined this.form.template = undefined
} }
} }
} }
}; }
</script> </script>
<style scoped> <style scoped>
.inputWidth { .inputWidth {
...@@ -118,7 +119,7 @@ export default { ...@@ -118,7 +119,7 @@ export default {
font-size: 20px; font-size: 20px;
margin-bottom: 16px; margin-bottom: 16px;
} }
.introduce{ .introduce {
font-size: 12px; font-size: 12px;
color: #909399; color: #909399;
} }
......
<!-- -->
<template>
<div class="tableItem">
<div class="operation">
<div>
<span @dblclick="checkName">
数据集名称:
<span v-if="!value.isEdit">{{ value.datasetName }}</span>
<el-input ref="inputName" v-else v-model="value.datasetName" placeholder="请输入内容" :size="defaultFormItemSize" style="width:200px" @change="editName()" @blur="editName()"></el-input>
</span>
<span style="margin-left: 20px">数据集ID:{{ value.datasetId }}</span>
</div>
<div>
<el-button type="text" icon="el-icon-plus" @click="addVersions">新增版本</el-button>
<el-button type="text" icon="el-icon-menu" @click="all">全部版本</el-button>
<el-button type="text" icon="el-icon-delete" @click="delDataset(value)">删除</el-button>
</div>
</div>
<tableBox :tableData="value" :refresh="refresh" />
</div>
</template>
<script>
import { MyDataSet } from '@/api/gptController.js'
import addVersions from './dialog/add.vue'
import tableBox from './tableBox/index.vue'
export default {
data() {
return {
dialogVisible: false,
dialogTitle: ''
}
},
inject: ['refresh'],
props: {
value: {
type: Object,
default: () => {}
}
},
components: { tableBox },
computed: {},
mounted() {},
methods: {
addVersions() {
this.$dialog
.show(
'新增数据集版本',
addVersions,
{
area: ['600px', 'auto']
},
{ isEdit: false, tableData: this.value }
)
.then((res) => {
this.refresh()
})
.catch((e) => {})
},
delDataset(item) {
this.$confirm('是否确认删除', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = { datasetId: item.datasetId }
MyDataSet.delete(this, params)
.then((res) => {
this.$message.success('删除成功')
this.refresh()
})
.catch((e) => {
console.log(e)
})
})
},
all() {
// this.dialogTitle = this.value.datasetName
// this.dialogVisible = true
this.$dialog
.show(
this.value.datasetName,
tableBox,
{
area: ['100%', '100%']
},
{ tableData: this.value, refresh: this.refresh }
)
.then((res) => {
this.refresh()
})
.catch((e) => {})
},
editName() {
this.value.isEdit = false
let params = {
datasetManageDto: {
datasetName: this.value.datasetName,
datasetId: this.value.datasetId
}
}
MyDataSet.update(this, params)
.then((res) => {
this.$message.success('修改成功')
this.refresh()
})
.catch((e) => {
console.log(e)
})
},
checkName() {
this.value.isEdit = true
this.$nextTick(() => {
this.$refs.inputName.focus()
})
}
}
}
</script>
<style scoped>
.operation {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #f8f8f9;
border-bottom: 1px solid #eee;
height: 50px;
}
.operation > div {
margin: 0 20px 0 20px;
}
.tableItem {
margin-bottom: 10px;
}
</style>
<!-- --> <!-- -->
<template> <template>
<el-form label-position="left" ref="form" label-width="80px" :model="form" :size="defaultFormItemSize" :rules="rules"> <el-form label-position="left" ref="form" label-width="80px" :model="form" :size="defaultFormItemSize" :rules="rules">
<el-form-item label="数据集版本:"> <el-form-item label="数据集版本:">
V {{ form.datasetVersion }} V {{ form.datasetVersion }}
</el-form-item> </el-form-item>
...@@ -41,8 +40,9 @@ import { DatasetVersion } from '@/api/gptController.js' ...@@ -41,8 +40,9 @@ import { DatasetVersion } from '@/api/gptController.js'
export default { export default {
data() { data() {
return { return {
versionList: [],
form: { form: {
datasetVersion: this.versionList.slice(0, 1)[0].datasetVersion + 1, datasetVersion: undefined,
isInherit: 1, isInherit: 1,
hisVersion: undefined, hisVersion: undefined,
dimensionType: undefined, dimensionType: undefined,
...@@ -55,13 +55,18 @@ export default { ...@@ -55,13 +55,18 @@ export default {
} }
} }
}, },
props: ['isEdit', 'datasetId', 'versionList'], props: ['isEdit', 'datasetId'],
components: {}, components: {},
computed: {}, computed: {},
watch: {
versionList() {
this.form.datasetVersion = this.versionList?.slice(0, 1)[0]?.datasetVersion + 1
}
},
mounted() { mounted() {
this.intFrom() this.intFrom()
this.getList()
}, },
methods: { methods: {
...@@ -73,6 +78,20 @@ export default { ...@@ -73,6 +78,20 @@ export default {
this.observer.cancel(isSuccess) this.observer.cancel(isSuccess)
} }
}, },
getList() {
let params = {
datasetVersionDtoFilter: { datasetId: this.datasetId },
pageParam: {
pageNum: 0,
pageSize: 100
}
}
DatasetVersion.list(this, params)
.then((res) => {
this.versionList = res.data.dataList
})
.catch((e) => {})
},
onSubmit() { onSubmit() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => { this.$refs['form'].validate((valid) => {
......
...@@ -2,13 +2,43 @@ ...@@ -2,13 +2,43 @@
<template> <template>
<el-form label-position="left" ref="form" label-width="100px" :model="form" :size="defaultFormItemSize"> <el-form label-position="left" ref="form" label-width="100px" :model="form" :size="defaultFormItemSize">
<el-form-item label="导出文件格式:"> <el-form-item label="导出文件格式:">
<el-select v-model="form.format" placeholder="请选择"> <el-select v-model="form.format" placeholder="请选择">
<el-option v-for="item in ImportFormat.getList()" :key="item.id" :label="item.name" :value="item.symbol"> <el-option v-for="item in ImportFormat.getList()" :key="item.id" :label="item.name" :value="item.symbol">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据导出记录:">
<el-table :data="outputList" border style="width: 100%" height="600">
<el-table-column prop="markFormatType" label="标注格式类型">
</el-table-column>
<el-table-column prop="outputContent" label="导出内容">
</el-table-column>
<el-table-column prop="fileSize" label="文件大小">
</el-table-column>
<el-table-column prop="dataCount" label="数据量">
</el-table-column>
<el-table-column prop="createUserId" label="创建人">
</el-table-column>
<el-table-column prop="outputStartTime" label="导出开始时间" width="150">
</el-table-column>
<el-table-column prop="outputEndTime" label="导出完成时间" width="150">
</el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
{{ OutputStatus.getValue(scope.row.status) }}
</template>
</el-table-column>
<el-table-column label="操作" fixed="right">
<template slot-scope="scope">
<el-button @click="down(scope.row.downloadUrl)" type="text" size="mini">
下载
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20"> <el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button> <el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
...@@ -22,6 +52,7 @@ import { DatasetVersion } from '@/api/gptController.js' ...@@ -22,6 +52,7 @@ import { DatasetVersion } from '@/api/gptController.js'
export default { export default {
data() { data() {
return { return {
outputList: [],
form: { form: {
format: 'jsonl' format: 'jsonl'
} }
...@@ -32,7 +63,9 @@ export default { ...@@ -32,7 +63,9 @@ export default {
computed: {}, computed: {},
mounted() {}, mounted() {
this.getOutputList()
},
methods: { methods: {
onCancel(isSuccess) { onCancel(isSuccess) {
...@@ -49,7 +82,6 @@ export default { ...@@ -49,7 +82,6 @@ export default {
this.onCancel(true) this.onCancel(true)
this.$message.success('下载成功') this.$message.success('下载成功')
}) })
// this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => { // this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => {
// // resolve(res); // // resolve(res);
// console.log(res); // console.log(res);
...@@ -58,6 +90,18 @@ export default { ...@@ -58,6 +90,18 @@ export default {
// }).catch(e => { // }).catch(e => {
// // reject(e); // // reject(e);
// }); // });
},
down(url) {
let downDom = document.createElement('a')
downDom.href = url
downDom.click()
},
getOutputList() {
let params = { datasetOutputDtoFilter: { versionId: this.row.versionId } }
DatasetVersion.outputList(this, params).then((res) => {
this.outputList = res.data.dataList
console.log(this.outputList)
})
} }
} }
} }
......
<!-- 标注 --> <!-- 标注 -->
<template> <template>
<div> <div>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true ,height: 270}" :data="[form.data]" min-height="96"> <vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true ,height: 260}" :data="[form.data]" min-height="96">
<!-- <vxe-column field="index" title="序号"></vxe-column> --> <!-- <vxe-column field="index" title="序号"></vxe-column> -->
<vxe-column :field="'data.'+item" :title="item" v-for="item in columnList" :key="item"> <vxe-column field="data.instruction" title="问题">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input style="height: 100%;" type="textarea" placeholder="请输入内容" v-model="scope.row[item]" :rows="10"> <el-input v-if="isEdit===true" style="height: 100%;" type="textarea" placeholder="请输入内容" v-model="scope.row.instruction" :rows="10">
</el-input> </el-input>
<div class="text" v-else>{{ scope.row.instruction }}</div>
</template>
</vxe-column>
<vxe-column field="data.output" title="回答">
<template slot-scope="scope">
<el-input v-if="isEdit===true" style="height: 100%;" type="textarea" placeholder="请输入内容" v-model="scope.row.output" :rows="10">
</el-input>
<div class="text" v-else>{{ scope.row.output }}</div>
</template> </template>
</vxe-column> </vxe-column>
...@@ -26,7 +34,7 @@ export default { ...@@ -26,7 +34,7 @@ export default {
form: JSON.parse(JSON.stringify(this.row)) form: JSON.parse(JSON.stringify(this.row))
} }
}, },
props: ['row', 'columnList', 'refresh'], props: ['row', 'columnList', 'refresh', 'isEdit'],
components: {}, components: {},
computed: {}, computed: {},
...@@ -53,4 +61,9 @@ export default { ...@@ -53,4 +61,9 @@ export default {
} }
</script> </script>
<style scoped> <style scoped>
.text {
white-space: break-spaces;
height: 260px;
overflow: auto;
}
</style> </style>
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
</el-breadcrumb> </el-breadcrumb>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96"> <vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<!-- <vxe-column field="index" title="序号"></vxe-column> --> <!-- <vxe-column field="index" title="序号"></vxe-column> -->
<vxe-column :field="'data.'+item" :title="item" v-for="item in columnList" :key="item"></vxe-column> <!-- <vxe-column :field="'data.'+item" :title="item" v-for="item in columnList" :key="item"></vxe-column> -->
<vxe-column field="data.instruction" title="问题"></vxe-column>
<vxe-column field="data.output" title="回答"></vxe-column>
<vxe-column field="operation" title="操作" width="150px"> <vxe-column field="operation" title="操作" width="150px">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -72,20 +74,6 @@ export default { ...@@ -72,20 +74,6 @@ export default {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
DatasetData.load(this, params) DatasetData.load(this, params)
.then((res) => { .then((res) => {
switch (this.nowPage) {
case 0:
this.allNum = res.data.totalCount
break
case 1:
this.unmarkedNum = res.data.totalCount
break
case 2:
this.markedNum = res.data.totalCount
break
default:
break
}
let dataList = res.data.dataList.map((item) => { let dataList = res.data.dataList.map((item) => {
try { try {
var obj = JSON.parse(item.data) var obj = JSON.parse(item.data)
...@@ -124,22 +112,32 @@ export default { ...@@ -124,22 +112,32 @@ export default {
}) })
}, },
check(row) { check(row) {
let data = [] // let data = []
for (const key in row.data) { // for (const key in row.data) {
if (key !== '_X_ROW_KEY') { // if (key !== '_X_ROW_KEY') {
// data.push({ [key]: row.data[key] }) // // data.push({ [key]: row.data[key] })
data += `${[key]}: ${row.data[key]}\n\n` // data += `${[key]}: ${row.data[key]}\n\n`
} // }
} // }
console.log(data) // console.log(data)
this.$alert(data, '详情', { // this.$alert(data, '详情', {
confirmButtonText: '确定', // confirmButtonText: '确定',
callback: (action) => {} // callback: (action) => {}
}) // })
this.$dialog
.show(
'查看',
label,
{
area: ['70%', '50%']
},
{ row, columnList: this.columnList, isEdit: false }
)
.then((res) => {})
.catch((e) => {})
}, },
label(row) { label(row) {
// 标注 // 标注
console.log(row)
// let newRow = JSON.parse(JSON.stringify(row)) // let newRow = JSON.parse(JSON.stringify(row))
this.$dialog this.$dialog
.show( .show(
...@@ -148,7 +146,7 @@ export default { ...@@ -148,7 +146,7 @@ export default {
{ {
area: ['70%', '50%'] area: ['70%', '50%']
}, },
{ row, columnList: this.columnList, refresh: this.refresh } { row, columnList: this.columnList, refresh: this.refresh, isEdit: true }
) )
.then((res) => { .then((res) => {
this.refresh() this.refresh()
...@@ -190,16 +188,30 @@ export default { ...@@ -190,16 +188,30 @@ export default {
}, },
formInit() { formInit() {
this.refresh() this.refresh()
},
summaryCount() {
let params = { versionId: this.versionItem.versionId }
DatasetData.summaryCount(this, params)
.then((res) => {
this.allNum = res.data.allMarkCount
this.unmarkedNum = res.data.unMarkCount
this.markedNum = res.data.markCount
})
.catch((e) => {
console.log(e)
})
} }
}, },
mounted() { mounted() {
this.formInit() this.formInit()
this.summaryCount()
}, },
watch: { watch: {
versionItem: { versionItem: {
handler() { handler() {
this.formInit() this.formInit()
this.summaryCount()
} }
}, },
deep: true deep: true
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<div class="versionsList"> <div class="versionsList">
<div class="title">版本列表</div> <div class="title">版本列表</div>
<el-button type="text" icon="el-icon-plus" @click="addVersions()">新增版本</el-button> <el-button type="text" icon="el-icon-plus" @click="addVersions()">新增版本</el-button>
<div :class="['versionsItem',item?.versionId===nowVersion?.versionId?'isActive':'']" v-for="item in versionList" :key="item.versionId" @click="cutVersions(item)">{{ item.versionName }}</div> <div :class="['versionsItem','omit',item?.versionId===nowVersion?.versionId?'isActive':'']" v-for="item in versionList" :key="item.versionId" @click="cutVersions(item)">{{ item.versionName }}</div>
</div> </div>
<el-tabs v-model="activeName" style="width:calc(100% - 200px)" v-if="nowVersion"> <el-tabs v-model="activeName" style="width:calc(100% - 200px)" v-if="nowVersion">
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="nowVersion.releaseStatus!==1" @click.native="putOut(nowVersion)">发布</el-dropdown-item> <el-dropdown-item v-if="nowVersion.releaseStatus!==1" @click.native="putOut(nowVersion)">发布</el-dropdown-item>
<el-dropdown-item @click.native="derived(nowVersion)">导出</el-dropdown-item> <el-dropdown-item @click.native="derived(nowVersion)">导出</el-dropdown-item>
<el-dropdown-item @click.native="analyse(nowVersion)">分析</el-dropdown-item> <!-- <el-dropdown-item @click.native="analyse(nowVersion)">分析</el-dropdown-item>
<el-dropdown-item @click.native="enhance(nowVersion)">增强</el-dropdown-item> <el-dropdown-item @click.native="enhance(nowVersion)">增强</el-dropdown-item> -->
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
...@@ -81,11 +81,11 @@ ...@@ -81,11 +81,11 @@
</template> </template>
<script> <script>
import derived from '../dialog/derived.vue' import derived from './dialog/derived.vue'
import dataImport from '../dialog/dataImport.vue' import dataImport from './dialog/dataImport.vue'
import particulars from '../dialog/particulars.vue' import particulars from './dialog/particulars.vue'
import { DatasetVersion } from '@/api/gptController.js' import { DatasetVersion } from '@/api/gptController.js'
import addVersions from '../dialog/add.vue' import addVersions from './dialog/add.vue'
export default { export default {
data() { data() {
return { return {
...@@ -112,7 +112,7 @@ export default { ...@@ -112,7 +112,7 @@ export default {
{ {
area: ['600px', 'auto'] area: ['600px', 'auto']
}, },
{ isEdit: false, datasetId: this.tableData.datasetId, versionList: this.versionList } { isEdit: false, datasetId: this.tableData.datasetId }
) )
.then((res) => { .then((res) => {
this.refresh() this.refresh()
...@@ -199,7 +199,7 @@ export default { ...@@ -199,7 +199,7 @@ export default {
'导出', '导出',
derived, derived,
{ {
area: ['600px', 'auto'] area: ['100%', '100%']
}, },
{ row: data } { row: data }
) )
...@@ -216,6 +216,22 @@ export default { ...@@ -216,6 +216,22 @@ export default {
}, },
putOut(data) { putOut(data) {
console.log(data) console.log(data)
this.$confirm('是否确认发布', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = { versionId: data.versionId }
DatasetVersion.publish(this, params)
.then((res) => {
this.$message.success('发布成功')
this.refresh()
this.getList()
})
.catch((e) => {
console.log(e)
})
})
}, },
cutVersions(item) { cutVersions(item) {
// 切换版本 // 切换版本
......
<!-- 创建Prompt模板 --> <!-- 创建数据集 -->
<template> <template>
<el-form label-position="left" ref="form" label-width="80px" :model="form" :size="defaultFormItemSize"> <el-form label-position="left" ref="form" label-width="100px" :rules="rules" :model="form" :size="defaultFormItemSize">
<el-row class="title">基本信息</el-row> <el-row class="title">基本信息</el-row>
<el-form-item label="任务名称:"> <el-form-item label="数据集名称:" prop="datasetName">
<el-input v-model="form.taskName" class="inputWidth" :size="defaultFormItemSize"></el-input> <el-input v-model="form.datasetName" class="inputWidth" :size="defaultFormItemSize"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任务描述:"> <el-form-item label="数据类型:">
<el-input v-model="form.taskDescribe" type="textarea" :rows="4" class="inputWidth" :size="defaultFormItemSize"></el-input> <el-radio v-for="item in DataType.getList()" :key="item.id" v-model="form.dataType" :label="item.id">{{item.name}}</el-radio>
</el-form-item>
<el-row class="title">压缩配置</el-row>
<el-form-item label="选择源模型:">
<el-select v-model="value" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
<el-row> <span class="introduce">启用此功能可能会为您提供更好质量的提示词,但也会花费更长的时间进行优化</span></el-row>
</el-form-item> </el-form-item>
<el-form-item label="模型创建⽅式:"> <el-form-item label="数据集版本:">
<el-radio v-for="item in ModelCreationMode.getList()" :key="item.id" v-model="form.modelCompressDto.createMethod" :label="item.id">{{ item.name}}</el-radio> {{ 'V1' }}
</el-form-item>
<el-form-item label="选择已有模型:">
<el-select v-model="value" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="压缩策略:">
<el-select v-model="value" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-row class="title">资源配置</el-row> <el-form-item label="标注类型:">
<el-form-item label="压缩任务运⾏环境:"> <el-radio v-for="item in LabelType.getList()" :key="item.id" v-model="form.dimensionType" :label="item.id" @change="isText">{{item.name}}</el-radio>
<el-radio v-model="radio" label="0">GPU A800 -------- TeslaGPU_A800_80G显存单卡_16核_128G内存</el-radio>
</el-form-item> </el-form-item>
<el-form-item label="选择计算节点数:">
<el-input-number v-model="form.epoch" :min="1" label="迭代轮次" :size="defaultFormItemSize"></el-input-number> <el-form-item label="标注模版:" v-if="form.dimensionType===0">
<el-radio v-for="item in MarkTemplate.getList()" :key="item.id" v-model="form.template" :label="item.id">{{item.name}}</el-radio>
</el-form-item> </el-form-item>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20"> <el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button> <el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button> <el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button>
...@@ -47,45 +30,33 @@ ...@@ -47,45 +30,33 @@
</template> </template>
<script> <script>
import { MyDataSet } from '@/api/gptController.js'
import { BatchOptimizationController } from '@/api/gptController.js';
export default { export default {
data () { data() {
return { return {
form: { form: {
'chain': 0, dataType: 0,
'destDatasetId': 0, datasetName: '',
'destDatasetName': '', deletedFlag: 0,
'destDatasetVersion': 0, dimensionType: 0,
'epoch': 0, template: 0
'failCount': 0, },
'finishTime': '', rules: {
'qualityQptimality': 0, datasetName: [{ required: true, message: '数据集名称不能为空', trigger: 'blur' }]
'shortenPrompt': 0, }
'sourceDatasetId': 0,
'sourceDatasetName': '',
'sourceDatasetVersion': 0,
'successCount': 0,
'taskDescribe': '',
'taskName': '',
'taskStatus': 0
} }
};
}, },
props: ['isEdit', 'item'], props: ['isEdit', 'item'],
components: {}, components: {},
computed: { computed: {},
},
mounted () { mounted() {
this.intFrom() this.intFrom()
}, },
methods: { methods: {
intFrom () { intFrom() {
this.form = { ...this.form, ...this.item } this.form = { ...this.form, ...this.item }
try { try {
this.form.templateLabel = JSON.parse(this.item.templateLabel) this.form.templateLabel = JSON.parse(this.item.templateLabel)
...@@ -93,43 +64,52 @@ export default { ...@@ -93,43 +64,52 @@ export default {
// console.log(error); // console.log(error);
} }
}, },
onCancel (isSuccess) { onCancel(isSuccess) {
if (this.observer != null) { if (this.observer != null) {
this.observer.cancel(isSuccess); this.observer.cancel(isSuccess)
} }
}, },
onSubmit () { onSubmit() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => { this.$refs['form'].validate((valid) => {
if (valid) { if (valid) {
let params = {}; let params = {}
params.promptOptimizeBatchDto = { ...this.form }; params.datasetManageDto = { ...this.form }
if (this.isEdit) { if (this.isEdit) {
BatchOptimizationController.update(this, params).then(res => { MyDataSet.update(this, params)
resolve(res); .then((res) => {
this.$message.success('编辑成功'); resolve(res)
this.onCancel(true); this.$message.success('编辑成功')
}).catch(e => { this.onCancel(true)
reject(e); })
}); .catch((e) => {
reject(e)
})
} else { } else {
BatchOptimizationController.add(this, params).then(res => { MyDataSet.add(this, params)
resolve(res); .then((res) => {
this.$message.success('添加成功'); resolve(res)
this.onCancel(true); this.$message.success('添加成功')
}).catch(e => { this.onCancel(true)
reject(e); })
}); .catch((e) => {
reject(e)
})
} }
} else { } else {
reject(); // reject();
}
})
})
},
isText(data) {
if (data !== 0) {
this.form.template = undefined
} }
});
});
} }
} }
}; }
</script> </script>
<style scoped> <style scoped>
.inputWidth { .inputWidth {
...@@ -139,7 +119,7 @@ export default { ...@@ -139,7 +119,7 @@ export default {
font-size: 20px; font-size: 20px;
margin-bottom: 16px; margin-bottom: 16px;
} }
.introduce{ .introduce {
font-size: 12px; font-size: 12px;
color: #909399; color: #909399;
} }
......
<!-- 在线标注 --> <!-- 数据标注 -->
<template> <template>
<div style="position: relative"> <div style="position: relative">
<el-collapse v-model="activeName" accordion ref="collapse" v-resize="resize" style="margin-bottom:20px"> <el-collapse v-model="activeName" accordion ref="collapse" v-resize="resize" style="margin-bottom:20px">
...@@ -28,24 +28,27 @@ ...@@ -28,24 +28,27 @@
<div class="tableBox" :style="{ height: tableHeight }"> <div class="tableBox" :style="{ height: tableHeight }">
<el-form ref="myDataSetPage" :model="myDataSetPage" label-width="75px" :size="defaultFormItemSize" label-position="right" @submit.native.prevent> <el-form ref="myDataSetPage" :model="myDataSetPage" label-width="75px" :size="defaultFormItemSize" label-position="right" @submit.native.prevent>
<filter-box :item-width="350" @search="refresh()" @reset="onReset"> <filter-box :item-width="350" @search="refresh()" @reset="onReset">
<el-form-item label="数据集名称" prop="formFilter.versionName" label-width="80px">
<el-form-item label="数据集名称" prop="formFilter.dataName" label-width="120px"> <el-input class="filter-item" v-model="myDataSetPage.formFilter.versionName" :clearable="true" placeholder="数据集名称" />
<el-input class="filter-item" v-model="myDataSetPage.formFilter.dataName" :clearable="true" placeholder="数据集名称" />
</el-form-item> </el-form-item>
</filter-box> </filter-box>
</el-form> </el-form>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96"> <vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<vxe-column field="versions" title="数据集名称 > 版本"></vxe-column> <vxe-column field="versionName" title="数据集名称 > 版本"></vxe-column>
<vxe-column field="versionsId" title="标注类型 > 模版"></vxe-column> <vxe-column field="dimensionType" title="标注类型 > 模版">
<vxe-column field="importState" title="数据量"></vxe-column> <template slot-scope="scope">
<vxe-column field="derivedState" title="数据集ID"></vxe-column> {{ LabelType.getValue(scope.row.dimensionType) }}
<vxe-column field="cleanCondition" title="标注进度"></vxe-column> </template>
<vxe-column field="cleanCondition" title="创建时间"></vxe-column> </vxe-column>
<vxe-column field="dataVolume" title="数据量"></vxe-column>
<vxe-column field="datasetId" title="数据集ID"></vxe-column>
<vxe-column field="markProgress" title="标注进度"></vxe-column>
<vxe-column field="createTime" title="创建时间"></vxe-column>
<vxe-column field="operation" title="操作"> <vxe-column field="operation" title="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" :size="defaultFormItemSize" @click="dataImport(scope.row)">详情</el-button> <el-button type="text" icon="el-icon-menu" :size="defaultFormItemSize" @click="all(scope.row)">详情</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">标注</el-button> <el-button type="text" :size="defaultFormItemSize">标注</el-button>
<!-- <el-button type="text" :size="defaultFormItemSize" @click="edit(scope.row)">编辑</el-button> <!-- <el-button type="text" :size="defaultFormItemSize" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button> --> <el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button> -->
</template> </template>
...@@ -63,7 +66,7 @@ ...@@ -63,7 +66,7 @@
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
/* eslint-disable-next-line */ /* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js' import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js'
import { ModelSquare } from '@/api/gptController.js' import { DatasetVersion } from '@/api/gptController.js'
import editOrAdd from './dialog/editOrAdd' import editOrAdd from './dialog/editOrAdd'
export default { export default {
...@@ -95,11 +98,8 @@ export default { ...@@ -95,11 +98,8 @@ export default {
], ],
myDataSetPage: { myDataSetPage: {
formFilter: { formFilter: {
modelDescribe: '', versionName: '',
modelId: 0, inputStatus: 1
modelName: '',
modelType: 0,
versionCount: 0
}, },
tableData: { tableData: {
...@@ -134,11 +134,11 @@ export default { ...@@ -134,11 +134,11 @@ export default {
// pageNum: 0, // pageNum: 0,
// pageSize: 0 // pageSize: 0
// }, // },
modelSquareDtoFilter: { ...this.myDataSetPage.formFilter } datasetVersionDtoFilter: { ...this.myDataSetPage.formFilter }
} }
console.log(params)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
ModelSquare.list(this, params) DatasetVersion.load(this, params)
.then((res) => { .then((res) => {
resolve({ resolve({
dataList: res.data.dataList, dataList: res.data.dataList,
...@@ -187,7 +187,7 @@ export default { ...@@ -187,7 +187,7 @@ export default {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
let params = { batchTaskId: item.batchTaskId } let params = { batchTaskId: item.batchTaskId }
ModelSquare.delete(this, params) DatasetVersion.delete(this, params)
.then((res) => { .then((res) => {
this.$message.success('删除成功') this.$message.success('删除成功')
this.refresh() this.refresh()
...@@ -229,7 +229,7 @@ export default { ...@@ -229,7 +229,7 @@ export default {
background-color: white; background-color: white;
width: 100%; width: 100%;
padding: 0px 20px 20px 20px; padding: 0px 20px 20px 20px;
height: 280px; height: 200px;
.instructionsList { .instructionsList {
display: flex; display: flex;
......
<!-- -->
<template>
<el-form label-position="left" ref="form" label-width="80px" :model="form" :size="defaultFormItemSize" :rules="rules">
<el-form-item label="数据集版本:">
V {{ form.datasetVersion }}
</el-form-item>
<el-form-item label="备注信息:">
<el-input v-model="form.remark" style="width:70%" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" placeholder="请备注本次版本主要做的修改,如添加数据、更换标注方式等,限制50字符内" maxlength="50">
</el-input>
</el-form-item>
<el-form-item label="继承历史版本:">
<el-switch v-model="form.isInherit" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" @change="isInherit">
</el-switch>
</el-form-item>
<el-form-item label="历史版本:" v-if="form.isInherit == 1" prop="hisVersion">
<el-select v-model="form.hisVersion" placeholder="请选择">
<el-option v-for="item in versionList" :key="item.datasetVersion" :label="'V' + item.datasetVersion" :value="item.datasetVersion">
</el-option>
</el-select>
</el-form-item>
<template v-else>
<el-form-item label="标注类型:" prop="dimensionType">
<el-radio v-for="item in LabelType.getList()" :key="item.id" v-model="form.dimensionType" @change="isText" :label="item.id">{{ item.name }}</el-radio>
</el-form-item>
<el-form-item label="标注模版:" v-if="form.dimensionType === 0" prop="template">
<el-radio v-for="item in MarkTemplate.getList()" :key="item.id" v-model="form.template" :label="item.id">{{ item.name }}</el-radio>
</el-form-item>
</template>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button>
</el-row>
</el-form>
</template>
<script>
import { DatasetVersion } from '@/api/gptController.js'
export default {
data() {
return {
versionList: [],
form: {
datasetVersion: undefined,
isInherit: 1,
hisVersion: undefined,
dimensionType: undefined,
template: undefined
},
rules: {
hisVersion: [{ required: true, message: '历史版本不能为空', trigger: 'blur' }],
dimensionType: [{ required: true, message: '标注模版不能为空', trigger: 'blur' }],
template: [{ required: true, message: '标注模版', trigger: 'blur' }]
}
}
},
props: ['isEdit', 'datasetId'],
components: {},
computed: {},
watch: {
versionList() {
this.form.datasetVersion = this.versionList?.slice(0, 1)[0]?.datasetVersion + 1
}
},
mounted() {
this.intFrom()
this.getList()
},
methods: {
intFrom() {
this.form = { ...this.form, datasetId: this.datasetId }
},
onCancel(isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess)
}
},
getList() {
let params = {
datasetVersionDtoFilter: { datasetId: this.datasetId },
pageParam: {
pageNum: 0,
pageSize: 100
}
}
DatasetVersion.list(this, params)
.then((res) => {
this.versionList = res.data.dataList
})
.catch((e) => {})
},
onSubmit() {
return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => {
if (valid) {
let params = {}
params.datasetVersionDto = { ...this.form }
if (this.isEdit) {
DatasetVersion.update(this, params)
.then((res) => {
resolve(res)
this.$message.success('编辑成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
} else {
DatasetVersion.add(this, params)
.then((res) => {
resolve(res)
this.$message.success('添加成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
}
} else {
// reject();
}
})
})
},
isInherit(data) {
if (data === 1) {
this.form.dimensionType = undefined
this.form.template = undefined
} else if (data === 0) {
this.form.hisVersion = undefined
}
},
isText(data) {
if (data !== 0) {
this.form.template = undefined
}
}
}
}
</script>
<style scoped>
.inputWidth {
width: 600px;
}
.title {
font-size: 20px;
margin-bottom: 16px;
}
.introduce {
font-size: 12px;
color: #909399;
}
</style>
<!--导入 -->
<template>
<el-form label-position="left" ref="form" label-width="100px" :model="form" :size="defaultFormItemSize" :rules="rules" v-loading.fullscreen.lock="fullscreenLoading">
<!-- <el-form-item label="数据标注状态:">
<el-radio v-for="item in DataAnnotationState.getList()" :key="item.id" v-model="form.dimensionType"
:label="item.id">{{ item.name }}</el-radio>
</el-form-item>
<el-form-item label="导入格式:">
<el-radio v-for="item in ImportFormat.getList()" :key="item.id" v-model="form.dimensionType"
:label="item.id">{{ item.name }}</el-radio>
</el-form-item> -->
<el-form-item label="上传jsonl文件:" prop="importFile">
<el-button @click="clickUp" :size="defaultFormItemSize" type="primary">上传<i class="el-icon-upload el-icon--right"></i></el-button>
<input style="display:none" ref="upFile" type="file" accept="application/json" @change="fileinfo($event.target.files)" >
<div class="itemFile" v-if="form.importFile">{{ form.importFile?.name }}
<i class="el-icon-circle-close" style="color:#0092FF;cursor: pointer;" @click="clearFile()"></i>
</div>
</el-form-item>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button>
</el-row>
</el-form>
</template>
<script>
// import { DatasetVersion } from '@/api/gptController.js';
export default {
data () {
return {
fullscreenLoading: false,
form: {
importFile: undefined
},
rules: {
importFile: [{ required: true, message: '请上传文件', trigger: 'blur' }]
}
};
},
props: ['isEdit', 'row'],
components: {},
computed: {
},
mounted () {
this.intFrom()
},
methods: {
fileinfo (files) {
console.log(files[0]);
this.form.importFile = files[0]
this.$refs.upFile.value = ''
},
clickUp () {
this.$refs.upFile.click()
},
intFrom () {
this.form = { ...this.form, datasetId: this.row.datasetId, versionId: this.row.versionId }
},
onCancel (isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
}
},
onSubmit () {
return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => {
if (valid) {
this.fullscreenLoading = true
let params = {};
params = { ...this.form };
this.upload('/admin/app/datasetVersion/import', params).then(res => {
resolve(res);
this.$message.success('上传成功');
this.onCancel(true);
this.fullscreenLoading = false
}).catch(e => {
this.fullscreenLoading = false
reject(e);
});
// if (this.isEdit) {
// DatasetVersion.importFile(this, params).then(res => {
// resolve(res);
// this.$message.success('编辑成功');
// this.onCancel(true);
// }).catch(e => {
// reject(e);
// });
// } else {
// DatasetVersion.importFile(this, params).then(res => {
// resolve(res);
// this.$message.success('添加成功');
// this.onCancel(true);
// }).catch(e => {
// reject(e);
// });
// }
} else {
reject();
}
});
});
},
clearFile () {
this.form.importFile = undefined
}
}
};
</script>
<style scoped>
.inputWidth {
width: 600px;
}
.title {
font-size: 20px;
margin-bottom: 16px;
}
.introduce {
font-size: 12px;
color: #909399;
}
</style>
<!--导出 -->
<template>
<el-form label-position="left" ref="form" label-width="100px" :model="form" :size="defaultFormItemSize">
<el-form-item label="导出文件格式:">
<el-select v-model="form.format" placeholder="请选择">
<el-option v-for="item in ImportFormat.getList()" :key="item.id" :label="item.name" :value="item.symbol">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="数据导出记录:">
<el-table :data="outputList" border style="width: 100%" height="600">
<el-table-column prop="markFormatType" label="标注格式类型">
</el-table-column>
<el-table-column prop="outputContent" label="导出内容">
</el-table-column>
<el-table-column prop="fileSize" label="文件大小">
</el-table-column>
<el-table-column prop="dataCount" label="数据量">
</el-table-column>
<el-table-column prop="createUserId" label="创建人">
</el-table-column>
<el-table-column prop="outputStartTime" label="导出开始时间" width="150">
</el-table-column>
<el-table-column prop="outputEndTime" label="导出完成时间" width="150">
</el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
{{ OutputStatus.getValue(scope.row.status) }}
</template>
</el-table-column>
<el-table-column label="操作" fixed="right">
<template slot-scope="scope">
<el-button @click="down(scope.row.downloadUrl)" type="text" size="mini">
下载
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="downloadFile">开始导出</el-button>
</el-row>
</el-form>
</template>
<script>
import { DatasetVersion } from '@/api/gptController.js'
export default {
data() {
return {
outputList: [],
form: {
format: 'jsonl'
}
}
},
props: ['isEdit', 'row'],
components: {},
computed: {},
mounted() {
this.getOutputList()
},
methods: {
onCancel(isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess)
}
},
downloadFile() {
let downDom = document.createElement('a')
let params = { versionId: this.row.versionId, fileType: this.form.format }
DatasetVersion.startExport(this, params).then((res) => {
downDom.href = res.data
downDom.click()
this.onCancel(true)
this.$message.success('下载成功')
})
// this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => {
// // resolve(res);
// console.log(res);
// this.$message.success('下载成功');
// this.onCancel(true);
// }).catch(e => {
// // reject(e);
// });
},
down(url) {
let downDom = document.createElement('a')
downDom.href = url
downDom.click()
},
getOutputList() {
let params = { datasetOutputDtoFilter: { versionId: this.row.versionId } }
DatasetVersion.outputList(this, params).then((res) => {
this.outputList = res.data.dataList
console.log(this.outputList)
})
}
}
}
</script>
<style scoped>
.inputWidth {
width: 600px;
}
.title {
font-size: 20px;
margin-bottom: 16px;
}
.introduce {
font-size: 12px;
color: #909399;
}
</style>
<!-- 标注 -->
<template>
<div>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true ,height: 260}" :data="[form.data]" min-height="96">
<!-- <vxe-column field="index" title="序号"></vxe-column> -->
<vxe-column field="data.instruction" title="问题">
<template slot-scope="scope">
<el-input v-if="isEdit===true" style="height: 100%;" type="textarea" placeholder="请输入内容" v-model="scope.row.instruction" :rows="10">
</el-input>
<div class="text" v-else>{{ scope.row.instruction }}</div>
</template>
</vxe-column>
<vxe-column field="data.output" title="回答">
<template slot-scope="scope">
<el-input v-if="isEdit===true" style="height: 100%;" type="textarea" placeholder="请输入内容" v-model="scope.row.output" :rows="10">
</el-input>
<div class="text" v-else>{{ scope.row.output }}</div>
</template>
</vxe-column>
</vxe-table>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
<el-button :size="defaultFormItemSize" :plain="true" @click="onCancel(false)">取消</el-button>
<el-button type="primary" :size="defaultFormItemSize" @click="onSubmit">确定</el-button>
</el-row>
</div>
</template>
<script>
import { DatasetData } from '@/api/gptController.js'
export default {
data() {
return {
form: JSON.parse(JSON.stringify(this.row))
}
},
props: ['row', 'columnList', 'refresh', 'isEdit'],
components: {},
computed: {},
mounted() {},
methods: {
onCancel(isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess)
}
},
onSubmit() {
let params = {}
params.datasetMongoDto = this.form
DatasetData.update(this, params)
.then((res) => {
this.$message.success('编辑成功')
this.onCancel(true)
})
.catch((e) => {})
}
}
}
</script>
<style scoped>
.text {
white-space: break-spaces;
height: 260px;
overflow: auto;
}
</style>
<!--详情 -->
<template>
<div class="tableBox">
<el-breadcrumb separator="|">
<el-breadcrumb-item :class="nowPage==0?'isactive':''" @click.native="breadcrumbClick(0)">全部({{ allNum}}</el-breadcrumb-item>
<el-breadcrumb-item :class="nowPage==1?'isactive':''" @click.native="breadcrumbClick(1)">无标注信息({{ unmarkedNum}}</el-breadcrumb-item>
<el-breadcrumb-item :class="nowPage==2?'isactive':''" @click.native="breadcrumbClick(2)">有标注信息({{ markedNum}}</el-breadcrumb-item>
</el-breadcrumb>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<!-- <vxe-column field="index" title="序号"></vxe-column> -->
<!-- <vxe-column :field="'data.'+item" :title="item" v-for="item in columnList" :key="item"></vxe-column> -->
<vxe-column field="data.instruction" title="问题"></vxe-column>
<vxe-column field="data.output" title="回答"></vxe-column>
<vxe-column field="operation" title="操作" width="150px">
<template slot-scope="scope">
<el-button type="text" :size="defaultFormItemSize" @click="check(scope.row)">查看</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="label(scope.row)" v-if="versionItem.dimensionType===0">标注</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button>
</template>
</vxe-column>
</vxe-table>
<el-row slot="pagination" type="flex" justify="end" style="margin-top: 16px;width: 100%;">
<el-pagination :total="myDataSetPage.tableData.impl.totalCount" :current-page="myDataSetPage.tableData.impl.currentPage" :page-size="myDataSetPage.tableData.impl.pageSize" :page-sizes="[10, 20, 50, 100]" layout="total, prev, pager, next, sizes" @current-change="myDataSetPage.tableData.impl.onCurrentPageChange" @size-change="myDataSetPage.tableData.impl.onPageSizeChange">
</el-pagination>
</el-row>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js'
import { DatasetData } from '@/api/gptController.js'
import label from './label.vue'
export default {
data() {
return {
unmarkedNum: 0,
allNum: 0,
markedNum: 0,
nowPage: 0,
markStatus: undefined,
myDataSetPage: {
tableData: {
impl: new TableWidget(this.getwidgetData, true, true, false, undefined, false)
}
},
columnList: []
}
},
components: {},
props: ['versionItem'],
computed: {
...mapGetters(['getMainContextHeight']),
tableHeight() {
return this.getMainContextHeight + 'px'
}
},
methods: {
getwidgetData(params) {
if (params == null) params = {}
params = {
datasetDataDtoFilter: {
versionId: this.versionItem.versionId,
markStatus: this.markStatus
},
...params
}
return new Promise((resolve, reject) => {
DatasetData.load(this, params)
.then((res) => {
let dataList = res.data.dataList.map((item) => {
try {
var obj = JSON.parse(item.data)
} catch (err) {
console.log('JSON解析错误:' + err)
}
return {
...item,
data: obj
}
})
if (this.columnList.length === 0) {
for (const key in dataList[0].data) {
if (Object.hasOwnProperty.call(dataList[0].data, key)) {
if (key !== '_X_ROW_KEY') {
this.columnList.push(key)
}
}
}
}
// dataList.forEach((element) => {
// for (const key in element.data) {
// if (Object.hasOwnProperty.call(element.data, key)) {
// element.data[key] = JSON.stringify(element.data[key])
// }
// }
// })
resolve({
dataList,
totalCount: res.data.totalCount
})
})
.catch((e) => {
reject(e)
})
})
},
check(row) {
// let data = []
// for (const key in row.data) {
// if (key !== '_X_ROW_KEY') {
// // data.push({ [key]: row.data[key] })
// data += `${[key]}: ${row.data[key]}\n\n`
// }
// }
// console.log(data)
// this.$alert(data, '详情', {
// confirmButtonText: '确定',
// callback: (action) => {}
// })
this.$dialog
.show(
'查看',
label,
{
area: ['70%', '50%']
},
{ row, columnList: this.columnList, isEdit: false }
)
.then((res) => {})
.catch((e) => {})
},
label(row) {
// 标注
// let newRow = JSON.parse(JSON.stringify(row))
this.$dialog
.show(
'标注',
label,
{
area: ['70%', '50%']
},
{ row, columnList: this.columnList, refresh: this.refresh, isEdit: true }
)
.then((res) => {
this.refresh()
})
.catch((e) => {})
},
del(item) {
this.$confirm('是否确认删除', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = { id: item._id, versionId: item.versionId }
DatasetData.delete(this, params)
.then((res) => {
this.$message.success('删除成功')
this.refresh()
})
.catch((e) => {
console.log(e)
})
})
},
breadcrumbClick(index) {
this.nowPage = index
this.markStatus = index === 0 ? undefined : index === 1 ? 0 : index === 2 ? 1 : undefined
this.refresh()
},
refresh(reloadData = false) {
if (reloadData) {
this.myDataSetPage.tableData.impl.refreshTable(true, 1)
} else {
this.myDataSetPage.tableData.impl.refreshTable()
}
},
onReset() {
this.$refs.myDataSetPage.resetFields()
this.refresh(true)
},
formInit() {
this.refresh()
},
summaryCount() {
let params = { versionId: this.versionItem.versionId }
DatasetData.summaryCount(this, params)
.then((res) => {
this.allNum = res.data.allMarkCount
this.unmarkedNum = res.data.unMarkCount
this.markedNum = res.data.markCount
})
.catch((e) => {
console.log(e)
})
}
},
mounted() {
this.formInit()
this.summaryCount()
},
watch: {
versionItem: {
handler() {
this.formInit()
this.summaryCount()
}
},
deep: true
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/style/element-variables.scss';
.topBox {
background-color: white;
width: 100%;
height: 95px;
margin-bottom: 16px;
.title {
color: $--color-text-primary;
font-size: 16px;
font-weight: 500;
margin-bottom: 8px;
padding: 20px 20px 10px 20px;
}
}
.instructions {
padding: 0px 20px 20px 20px;
.describe {
color: $--color-text-secondary;
margin-bottom: 16px;
}
.itemTitle {
color: $--color-text-primary;
font-size: 16px;
font-weight: 500;
margin-bottom: 8px;
}
.head-index {
font-size: 24px;
color: #e8e9eb;
line-height: 32px;
}
.itemDescribe {
width: 170px;
color: $--color-text-secondary;
}
.img {
height: 72px;
width: 140px;
}
}
.tableBox {
position: relative;
background-color: white;
width: 100%;
padding: 0 20px 20px 20px;
height: 100%;
overflow: auto;
.add {
margin-bottom: 20px;
}
}
/deep/ .el-message-box__message {
white-space: pre-line;
}
/deep/ .el-breadcrumb {
height: 40px;
line-height: 40px;
margin-bottom: 10px;
}
/deep/ .isactive .el-breadcrumb__inner {
color: #0092ff !important;
}
</style>
<!-- -->
<template>
<div class="box">
<div class="versionsList">
<div class="title">版本列表</div>
<el-button type="text" icon="el-icon-plus" @click="addVersions()">新增版本</el-button>
<div :class="['versionsItem','omit',item?.versionId===nowVersion?.versionId?'isActive':'']" v-for="item in versionList" :key="item.versionId" @click="cutVersions(item)">{{ item.versionName }}</div>
</div>
<el-tabs v-model="activeName" style="width:calc(100% - 200px)" v-if="nowVersion">
<div style="position: absolute; top: -55px; right: 0;">
<el-button type="text" :size="defaultFormItemSize" @click="dataImport(nowVersion)">导入</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(nowVersion)">删除</el-button>
<template v-if="nowVersion.inputStatus !== 0">
<el-dropdown style="margin-left:15px;font-size: 12px;color: #0092FF;" :size="defaultFormItemSize">
<span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="nowVersion.releaseStatus!==1" @click.native="putOut(nowVersion)">发布</el-dropdown-item>
<el-dropdown-item @click.native="derived(nowVersion)">导出</el-dropdown-item>
<!-- <el-dropdown-item @click.native="analyse(nowVersion)">分析</el-dropdown-item>
<el-dropdown-item @click.native="enhance(nowVersion)">增强</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
</template>
</div>
<el-tab-pane label="数据详情" name="dataDetail" style="height: 100%;">
<particulars :versionItem='nowVersion' />
</el-tab-pane>
<el-tab-pane label="版本信息" name="versionInformation" style="padding-left: 20px;">
<div class="dataBox">
<div class="dataItem">
<div class="title">版本:</div>
<div class="content"> V{{ nowVersion.datasetVersion }}</div>
</div>
</div>
<div class="dataItem">
<div class="title">版本ID:</div>
<div class="content"> {{ nowVersion.versionId }}</div>
</div>
<div class="dataItem">
<div class="title">导出状态:</div>
<div class="content"> {{ OutputStatus.getValue(nowVersion.outputStatus) }}</div>
</div>
<div class="dataItem">
<div class="title">清洗状态:</div>
<div class="content"> {{ CleanStatus.getValue(nowVersion.cleanStatus) }}</div>
</div>
<div class="dataItem">
<div class="title">增强状态:</div>
<div class="content"> {{EnhanceStatus.getValue(nowVersion.enhanceStatus)}}</div>
</div>
<div class="dataItem">
<div class="title">发布状态:</div>
<div class="content"> {{ ReleaseStatus.getValue(nowVersion.releaseStatus) }}</div>
</div>
<div class="dataItem">
<div class="title">标注类型>模板:</div>
<div class="content">{{ LabelType.getValue(nowVersion.dimensionType ) }}</div>
</div>
<div class="dataItem">
<div class="title">数据量:</div>
<div class="content"> {{ nowVersion.dataVolume }}</div>
</div>
<div class="dataItem">
<div class="title">标注进度:</div>
<div class="content"> {{ nowVersion.markProgress }}</div>
</div>
<div class="dataItem">
<div class="title">最后更新时间:</div>
<div class="content"> {{ nowVersion.updateTime }}</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import derived from './dialog/derived.vue'
import dataImport from './dialog/dataImport.vue'
import particulars from './dialog/particulars.vue'
import { DatasetVersion } from '@/api/gptController.js'
import addVersions from './dialog/add.vue'
export default {
data() {
return {
activeName: 'dataDetail',
versionList: [],
nowVersion: undefined
}
},
props: ['tableData', 'refresh'],
components: { particulars },
computed: {},
mounted() {
this.getList()
},
methods: {
addVersions() {
this.$dialog
.show(
'新增数据集版本',
addVersions,
{
area: ['600px', 'auto']
},
{ isEdit: false, datasetId: this.tableData.datasetId }
)
.then((res) => {
this.refresh()
this.getList()
})
.catch((e) => {})
},
dataImport(data) {
this.$dialog
.show(
'导入',
dataImport,
{
area: ['600px', '200px']
},
{ row: data }
)
.then((res) => {
this.refresh()
this.getList()
})
.catch((e) => {})
},
del(data) {
if (this.versionList.length === 1) {
this.$message.warning('必须存在一个版本')
return
}
this.$confirm('是否确认删除', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = { versionId: data.versionId }
DatasetVersion.delete(this, params)
.then((res) => {
this.$message.success('删除成功')
this.refresh()
this.getList()
})
.catch((e) => {
console.log(e)
})
})
},
getList() {
let params = {
datasetVersionDtoFilter: { datasetId: this.tableData.datasetId },
pageParam: {
pageNum: 0,
pageSize: 100
}
}
DatasetVersion.list(this, params)
.then((res) => {
this.versionList = res.data.dataList
this.nowVersion = this.versionList[0]
})
.catch((e) => {})
},
particulars(data) {
// 详情
this.$dialog
.show(
'详情',
particulars,
{
area: ['100%', '100%']
},
{ row: data }
)
.then((res) => {
this.refresh()
})
.catch((e) => {})
},
label(data) {
// 标注
},
derived(data) {
// 导出
this.$dialog
.show(
'导出',
derived,
{
area: ['100%', '100%']
},
{ row: data }
)
.then((res) => {
this.refresh()
})
.catch((e) => {})
},
analyse(data) {
// 分析
},
enhance(data) {
// 增强
},
putOut(data) {
console.log(data)
this.$confirm('是否确认发布', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let params = { versionId: data.versionId }
DatasetVersion.publish(this, params)
.then((res) => {
this.$message.success('发布成功')
this.refresh()
this.getList()
})
.catch((e) => {
console.log(e)
})
})
},
cutVersions(item) {
// 切换版本
this.nowVersion = item
}
}
}
</script>
<style scoped>
.box {
display: flex;
height: 100%;
}
.versionsList {
width: 200px;
height: 100%;
border-right: 1px solid #dddee0;
margin-right: 10px;
overflow: auto;
}
.versionsItem {
height: 35px;
line-height: 35px;
width: 150px;
padding: 0 10px 0 10px;
border-radius: 5px;
margin-bottom: 10px;
cursor: pointer;
}
.isActive {
background: #0092ff;
color: #fff;
}
div /deep/ .el-tabs__content {
height: calc(100% - 50px);
}
.dataItem {
display: flex;
flex-direction: row;
align-items: center;
height: 40px;
}
.title {
width: 100px;
}
</style>
...@@ -276,7 +276,7 @@ export default { ...@@ -276,7 +276,7 @@ export default {
background-color: white; background-color: white;
width: 100%; width: 100%;
padding: 0px 20px 20px 20px; padding: 0px 20px 20px 20px;
height: 280px; height: 200px;
.instructionsList { .instructionsList {
display: flex; display: flex;
......
...@@ -269,7 +269,7 @@ export default { ...@@ -269,7 +269,7 @@ export default {
background-color: white; background-color: white;
width: 100%; width: 100%;
padding: 0px 20px 20px 20px; padding: 0px 20px 20px 20px;
height: 280px; height: 200px;
.instructionsList { .instructionsList {
display: flex; display: flex;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment