Commit c86c395c authored by mhw's avatar mhw

版本更新

parent 8666dde9
......@@ -17,4 +17,8 @@ export default class DatasetData {
static load (sender, 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 {
static list (sender, 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) {
return sender.doUrl('/admin/app/datasetVersion/view', 'get', params, axiosOption, httpOption);
}
......@@ -13,6 +15,13 @@ export default class DatasetVersion {
static startExport (sender, 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) {
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
<?xml version="1.0" encoding="UTF-8"?>
<svg width="141px" height="80px" viewBox="0 0 141 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>发布数据集</title>
<defs>
<rect id="path-1" 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-2">
<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>
<filter x="-48.0%" y="-48.0%" width="196.0%" height="196.0%" filterUnits="objectBoundingBox" id="filter-3">
<feOffset dx="0" dy="2" 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>
</defs>
<g id="1.1-在线标注入口优化-0818" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="数据标注" transform="translate(-772.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="编组-17" transform="translate(527.000000, 0.000000)">
<g id="发布数据集" transform="translate(26.000000, 0.000000)">
<rect id="矩形" x="0" y="0" width="140" height="72"></rect>
<g id="编组-48" transform="translate(28.000000, 6.000000)">
<rect id="矩形" fill="#E6F0FF" x="0" y="0" width="80" height="60" rx="1"></rect>
<path d="M1,0 L79,0 C79.5522847,-1.01453063e-16 80,0.44771525 80,1 L80,5 L80,5 L0,5 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 Z" id="矩形备份-23" fill="#2468F2"></path>
<g id="编组-52" transform="translate(9.000000, 14.000000)">
<g id="编组-45">
<g id="编组-35" transform="translate(42.645112, 0.000000)">
<g id="编组-34">
<rect id="矩形备份-4" fill="#FFFFFF" x="0" y="0" width="9.35488835" height="9.375" rx="1"></rect>
<path d="M7.29083571,3.25319623 C7.46062326,3.42356067 7.46062326,3.69955135 7.29083571,3.86991579 L4.67830322,6.48806484 C4.50830425,6.65821741 4.23290564,6.65821741 4.06290668,6.48806484 L2.61149973,5.03353759 C2.45163665,4.86160679 2.45635372,4.5936829 2.62216946,4.42751069 C2.78798519,4.26133848 3.05533431,4.25661127 3.22689628,4.41681804 L4.37060494,5.5624037 L6.67543917,3.25261442 C6.84543814,3.08246186 7.12083674,3.08246186 7.29083571,3.25261442 L7.29083571,3.25319623 Z" id="路径备份" stroke="#A7C8FC" stroke-width="0.5" fill="#A7C8FC" fill-rule="nonzero"></path>
</g>
<g id="编组-39" transform="translate(0.000000, 10.625000)">
<rect id="矩形备份-17" fill="#FFFFFF" x="0" y="0" width="9.35488835" height="9.375" rx="1"></rect>
<path d="M5.56508888,4.68810638 L6.67479603,3.57480076 C6.9204564,3.32861227 6.91924625,2.93082987 6.67479603,2.68464137 C6.42913567,2.43845288 6.03220661,2.43845288 5.78654625,2.68464137 L4.6768391,3.79673423 L3.56713195,2.68464137 C3.32147158,2.43845288 2.92454253,2.43845288 2.67888216,2.68464137 C2.4332218,2.93082987 2.4332218,3.32861227 2.67888216,3.57480076 L3.78858932,4.68810638 L2.67888216,5.80019924 C2.4332218,6.04638773 2.4332218,6.44417013 2.67888216,6.69035863 C2.92454253,6.93654712 3.32147158,6.93654712 3.56713195,6.69035863 L4.67804925,5.57826577 L5.7877564,6.69035863 C6.03341676,6.93654712 6.43034582,6.93654712 6.67600618,6.69035863 C6.92166655,6.44417013 6.92166655,6.04638773 6.67600618,5.80019924 L5.56508888,4.68810638 L5.56508888,4.68810638 Z" id="路径" fill="#A7C8FC"></path>
</g>
</g>
<rect id="矩形备份-26" fill="#A7C8FC" x="0" y="0" width="41.650787" height="9.375" rx="1"></rect>
<rect id="矩形备份-29" fill="#A7C8FC" x="0" y="10.625" width="41.650787" height="9.375" rx="1"></rect>
</g>
<g id="编组-45" transform="translate(0.000000, 21.000000)">
<g id="编组-35" transform="translate(42.645112, 0.000000)">
<g id="编组-34">
<rect id="矩形备份-4" fill="#FFFFFF" x="0" y="0" width="9.35488835" height="9.375" rx="1"></rect>
<path d="M7.29083571,3.25319623 C7.46062326,3.42356067 7.46062326,3.69955135 7.29083571,3.86991579 L4.67830322,6.48806484 C4.50830425,6.65821741 4.23290564,6.65821741 4.06290668,6.48806484 L2.61149973,5.03353759 C2.45163665,4.86160679 2.45635372,4.5936829 2.62216946,4.42751069 C2.78798519,4.26133848 3.05533431,4.25661127 3.22689628,4.41681804 L4.37060494,5.5624037 L6.67543917,3.25261442 C6.84543814,3.08246186 7.12083674,3.08246186 7.29083571,3.25261442 L7.29083571,3.25319623 Z" id="路径备份" stroke="#A7C8FC" stroke-width="0.5" fill="#A7C8FC" fill-rule="nonzero"></path>
</g>
<g id="编组-39" transform="translate(0.000000, 10.625000)">
<rect id="矩形备份-17" fill="#FFFFFF" x="0" y="0" width="9.35488835" height="9.375" rx="1"></rect>
<path d="M5.56508888,4.68810638 L6.67479603,3.57480076 C6.9204564,3.32861227 6.91924625,2.93082987 6.67479603,2.68464137 C6.42913567,2.43845288 6.03220661,2.43845288 5.78654625,2.68464137 L4.6768391,3.79673423 L3.56713195,2.68464137 C3.32147158,2.43845288 2.92454253,2.43845288 2.67888216,2.68464137 C2.4332218,2.93082987 2.4332218,3.32861227 2.67888216,3.57480076 L3.78858932,4.68810638 L2.67888216,5.80019924 C2.4332218,6.04638773 2.4332218,6.44417013 2.67888216,6.69035863 C2.92454253,6.93654712 3.32147158,6.93654712 3.56713195,6.69035863 L4.67804925,5.57826577 L5.7877564,6.69035863 C6.03341676,6.93654712 6.43034582,6.93654712 6.67600618,6.69035863 C6.92166655,6.44417013 6.92166655,6.04638773 6.67600618,5.80019924 L5.56508888,4.68810638 L5.56508888,4.68810638 Z" id="路径" fill="#A7C8FC"></path>
</g>
</g>
<rect id="矩形备份-26" fill="#A7C8FC" x="0" y="0" width="41.650787" height="9.375" rx="1"></rect>
<rect id="矩形备份-29" fill="#A7C8FC" x="0" y="10.625" width="41.650787" height="9.375" rx="1"></rect>
</g>
</g>
<rect id="矩形" fill="#A7C8FC" x="9" y="9" width="17" height="3" rx="1"></rect>
</g>
<g id="编组-51" transform="translate(80.000000, 36.000000)">
<g id="编组-53">
<g id="矩形">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<use fill-opacity="0.159118226" fill="#ADD3FF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="240显示、可见" transform="translate(10.000000, 7.000000)" fill="#A7C8FC" fill-rule="nonzero">
<path d="M12.2225623,0 C6.87519128,0 1.73152966,3.325 0,8 C1.73152966,12.675 6.87519128,16 12.2225623,16 C17.5444696,16 22.7390586,12.675 24.4705882,8 C22.7135949,3.325 17.5444696,0 12.2225623,0 Z M12.2225623,13 C9.42155843,13 7.129828,10.75 7.129828,8 C7.129828,5.25 9.42155843,3 12.2225623,3 C15.0235661,3 17.3152966,5.25 17.3152966,8 C17.3152966,10.75 15.0235661,13 12.2225623,13 Z" id="形状"></path>
</g>
</g>
<path d="M25.2782029,15 C25.2782029,16.65 23.9031646,18 22.2225623,18 C20.54196,18 19.1669217,16.65 19.1669217,15 C19.1669217,13.35 20.54196,12 22.2225623,12 C23.9031646,12 25.2782029,13.35 25.2782029,15 Z" id="路径" fill="#2468F2"></path>
</g>
<g id="椭圆形-2" filter="url(#filter-3)" transform="translate(8.000000, 46.000000)">
<circle id="椭圆形" fill="#FFFFFF" cx="12.5" cy="12.5" r="12.5"></circle>
<path d="M19.637909,8.36374179 C20.120697,8.84713093 20.120697,9.63022215 19.637909,10.1136113 L12.2092177,17.5423026 C11.7258286,18.0250906 10.9427374,18.0250906 10.4593482,17.5423026 L6.33229748,13.4152519 C5.87772955,12.9274184 5.89114247,12.1672157 6.36263666,11.6957215 C6.83413085,11.2242273 7.5943335,11.2108144 8.082167,11.6653824 L11.334283,14.9158475 L17.8880395,8.36209098 C18.3714287,7.87930301 19.1545199,7.87930301 19.637909,8.36209098 L19.637909,8.36374179 Z" id="路径" fill="#2468F2" fill-rule="nonzero"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
module.exports = {
// 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/',
wsUrl: 'ws://218.76.0.69:7860/',
projectName: '灵境大模型平台'
......
......@@ -174,10 +174,10 @@ const InputStatus = new DictionaryBase('导入状态', [
}
]);
Vue.prototype.InputStatus = InputStatus;
const OutputStatus = new DictionaryBase('导状态', [
const OutputStatus = new DictionaryBase('导状态', [
{
id: 0,
name: '-',
name: '导出中',
symbol: '0'
},
{
......@@ -191,7 +191,7 @@ Vue.prototype.OutputStatus = OutputStatus;
const CleanStatus = new DictionaryBase('清洗状态', [
{
id: 0,
name: '-',
name: '清洗中',
symbol: '0'
},
{
......
......@@ -14,8 +14,8 @@
{{ 'V1' }}
</el-form-item>
<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-for="item in LabelType.getList()" :key="item.id" v-model="form.dimensionType" :label="item.id" @change="isText">{{item.name}}</el-radio>
</el-form-item>
<el-form-item label="标注模版:" v-if="form.dimensionType===0">
......@@ -30,36 +30,33 @@
</template>
<script>
import { MyDataSet } from '@/api/gptController.js';
import { MyDataSet } from '@/api/gptController.js'
export default {
data () {
data() {
return {
form: {
'dataType': 0,
'datasetName': '',
'deletedFlag': 0,
'dimensionType': 0,
'template': 0
dataType: 0,
datasetName: '',
deletedFlag: 0,
dimensionType: 0,
template: 0
},
rules: {
datasetName: [{required: true, message: '数据集名称不能为空', trigger: 'blur'}]
datasetName: [{ required: true, message: '数据集名称不能为空', trigger: 'blur' }]
}
};
}
},
props: ['isEdit', 'item'],
components: {},
computed: {
computed: {},
},
mounted () {
mounted() {
this.intFrom()
},
methods: {
intFrom () {
intFrom() {
this.form = { ...this.form, ...this.item }
try {
this.form.templateLabel = JSON.parse(this.item.templateLabel)
......@@ -67,48 +64,52 @@ export default {
// console.log(error);
}
},
onCancel (isSuccess) {
onCancel(isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
this.observer.cancel(isSuccess)
}
},
onSubmit () {
onSubmit() {
return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => {
if (valid) {
let params = {};
params.datasetManageDto = { ...this.form };
let params = {}
params.datasetManageDto = { ...this.form }
if (this.isEdit) {
MyDataSet.update(this, params).then(res => {
resolve(res);
this.$message.success('编辑成功');
this.onCancel(true);
}).catch(e => {
reject(e);
});
MyDataSet.update(this, params)
.then((res) => {
resolve(res)
this.$message.success('编辑成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
} else {
MyDataSet.add(this, params).then(res => {
resolve(res);
this.$message.success('添加成功');
this.onCancel(true);
}).catch(e => {
reject(e);
});
MyDataSet.add(this, params)
.then((res) => {
resolve(res)
this.$message.success('添加成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
}
} else {
// reject();
}
});
});
})
})
},
isText (data) {
isText(data) {
if (data !== 0) {
this.form.template = undefined
}
}
}
};
}
</script>
<style scoped>
.inputWidth {
......@@ -118,7 +119,7 @@ export default {
font-size: 20px;
margin-bottom: 16px;
}
.introduce{
.introduce {
font-size: 12px;
color: #909399;
}
......
<!-- 我的数据集 -->
<template>
<div style="position: relative">
<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">
<el-form-item label="数据集名称" prop="formFilter.searchString">
<el-input class="filter-item" v-model="myDataSetPage.formFilter.searchString" :clearable="true" placeholder="数据集名称" />
</el-form-item>
<el-form-item label="标注类型" prop="formFilter.dimensionType">
<el-select v-model="myDataSetPage.formFilter.dimensionType" placeholder="请选择" label-width="120px">
<el-option v-for="item in LabelType.getList()" :key="item.value" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</filter-box>
</el-form>
<el-collapse v-model="activeName" accordion ref="collapse" v-resize="resize" style="margin-bottom:20px">
<el-collapse-item name="1">
<template slot="title">
<div class="title">使用流程</div>
</template>
<div class="instructions">
<div class="instructionsList">
<div class="item" v-for="(item, index) in instructionsList" :key="index">
<div>
<img class="img" :src="item.img" alt="" />
<div class="itemTitle">
<span class="head-index">{{ index + 1 }} &nbsp;</span>{{ item.title }}
</div>
<div class="itemDescribe">{{ item.describe }}</div>
</div>
<i v-if="instructionsList.length!==index+1" class="el-icon-arrow-right" style="margin-left: 50px; font-size: 30px; font-weight: bolder;color:#b8babf"></i>
</div>
</div>
</div>
</el-collapse-item>
</el-collapse>
<div class="tableBox" :style="{ height: tableHeight }">
<el-button class="add" type="primary" icon="el-icon-plus" :size="defaultFormItemSize" @click="add()">创建数据集</el-button>
<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">
<el-form-item label-width="0px">
<el-button class="add" type="primary" icon="el-icon-plus" :size="defaultFormItemSize" @click="add()">创建数据集</el-button>
</el-form-item>
<el-form-item label="数据集名称" prop="formFilter.searchString">
<el-input class="filter-item" v-model="myDataSetPage.formFilter.searchString" :clearable="true" placeholder="数据集名称" />
</el-form-item>
<el-form-item label="标注类型" prop="formFilter.dimensionType">
<el-select v-model="myDataSetPage.formFilter.dimensionType" placeholder="请选择" label-width="120px">
<el-option v-for="item in LabelType.getList()" :key="item.value" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</filter-box>
</el-form>
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<vxe-column field="datasetName" title="数据集名称"></vxe-column>
<vxe-column field="datasetVersion" title="最新版本">
......@@ -36,20 +65,38 @@
<vxe-column field="dataVolume" title="数据量"></vxe-column>
<vxe-column field="inputStatus" title="导入状态">
<template slot-scope="scope">
{{ ImportStatus.getValue(scope.row.inputStatus ) }}
<el-tag v-if="scope.row.inputStatus!==0" size="mini"> {{ ImportStatus.getValue(scope.row.inputStatus ) }}</el-tag>
<el-tag v-else type="warning" size="mini"> {{ ImportStatus.getValue(scope.row.inputStatus ) }}</el-tag>
</template>
</vxe-column>
<vxe-column field="releaseStatus" title="发布状态">
<template slot-scope="scope">
{{ PublishStatus.getValue(scope.row.releaseStatus ) }}
<el-tag v-if="scope.row.releaseStatus!==0" size="mini">{{ PublishStatus.getValue(scope.row.releaseStatus ) }}</el-tag>
<el-tag v-else type="warning" size="mini"> {{ PublishStatus.getValue(scope.row.releaseStatus ) }}</el-tag>
</template>
</vxe-column>
<vxe-column field="createTime" title="创建时间"></vxe-column>
<vxe-column field="operation" title="操作" width="280">
<vxe-column field="operation" title="操作" width="290">
<template slot-scope="scope">
<el-button type="text" icon="el-icon-menu" @click="all(scope.row)">详情</el-button>
<el-button type="text" icon="el-icon-plus" @click="addVersions(scope.row)">导入</el-button>
<el-button type="text" icon="el-icon-delete" @click="delDataset(scope.row)">删除</el-button>
<el-button type="text" icon="el-icon-menu" @click="all(scope.row)" :size="defaultFormItemSize">详情</el-button>
<el-button v-if="scope.row.releaseStatus==0" type="text" icon="el-icon-plus" @click="addVersions(scope.row)" :size="defaultFormItemSize">新增版本</el-button>
<el-button type="text" icon="el-icon-reading" v-else :size="defaultFormItemSize">去训练</el-button>
<el-button type="text" icon="el-icon-delete" @click="delDataset(scope.row)" :size="defaultFormItemSize">删除</el-button>
<template v-if="scope.row.inputStatus !== 0">
<el-dropdown style="margin-left:15px;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="scope.row.releaseStatus!==1" @click.native="putOut(scope.row)">发布</el-dropdown-item>
<el-dropdown-item @click.native="derived(scope.row)">导出</el-dropdown-item>
<el-dropdown-item>清洗</el-dropdown-item>
<!-- <el-dropdown-item @click.native="analyse(scope.row)">分析</el-dropdown-item>
<el-dropdown-item @click.native="enhance(scope.row)">增强</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
</template>
</template>
</vxe-column>
</vxe-table>
......@@ -66,15 +113,33 @@
import { mapGetters } from 'vuex'
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js'
import { MyDataSet } from '@/api/gptController.js'
import { MyDataSet, DatasetVersion } from '@/api/gptController.js'
import editOrAdd from './dialog/editOrAdd'
import addVersions from './tableItem/dialog/add.vue'
import tableBox from './tableItem/tableBox/index.vue'
/* eslint-disable-next-line */
import tableItem from './tableItem'
import addVersions from './versionsTableBox/dialog/add.vue'
import versionsTableBox from './versionsTableBox/index.vue'
import derived from './versionsTableBox/dialog/derived.vue'
export default {
data() {
return {
activeName: '1',
collapseHeight: 0,
instructionsList: [
{
title: '创建数据集',
describe: '指定适用于大语言模型或者文生图大模型的数据类型,创建对应数据集',
img: require('@/assets/img/create.e4129a2c.png')
},
{
title: '加工数据集',
describe: '通过数据分析/清洗/增强/标注,对数据资产进行加工处理,提升数据质量',
img: require('@/assets/img/machining.946ba7b5.png')
},
{
title: '发布并使用数据集',
describe: '发布该版本数据集,供后续大模型精调等环节使用',
img: require('@/assets/img/fb.png')
}
],
myDataSetPage: {
formFilter: {
searchString: '',
......@@ -97,7 +162,7 @@ export default {
computed: {
...mapGetters(['getMainContextHeight']),
tableHeight() {
return this.getMainContextHeight - 118 + 'px'
return this.getMainContextHeight - this.collapseHeight - 55 + 'px'
}
},
......@@ -163,7 +228,7 @@ export default {
this.$dialog
.show(
row.datasetName,
tableBox,
versionsTableBox,
{
area: ['100%', '100%']
},
......@@ -222,6 +287,50 @@ export default {
})
})
},
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)
})
})
},
refresh(reloadData = false) {
if (reloadData) {
this.myDataSetPage.tableData.impl.refreshTable(true, 1)
......@@ -233,16 +342,23 @@ export default {
this.$refs.myDataSetPage.resetFields()
this.refresh(true)
},
resize(e) {
setTimeout(() => {
this.collapseHeight = e?.height
}, 300)
},
formInit() {
this.refresh()
}
},
mounted() {
this.resize()
this.formInit()
}
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/assets/style/element-variables.scss';
.tableBox {
background-color: white;
width: 100%;
......@@ -252,4 +368,64 @@ export default {
.add {
margin: 0 0 20px 0;
}
.instructions {
background-color: white;
width: 100%;
padding: 0px 20px 20px 20px;
height: 200px;
.instructionsList {
display: flex;
flex-direction: row;
justify-content: space-around;
.item {
display: flex;
align-items: center;
}
}
.title {
color: $--color-text-primary;
font-size: 16px;
font-weight: 500;
margin-bottom: 8px;
}
.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 {
background-color: white;
width: 100%;
padding: 20px;
overflow: auto;
.add {
margin-bottom: 20px;
}
}
div /deep/ .el-collapse-item__content {
padding-bottom: 0;
}
div /deep/ .el-collapse-item__header {
padding-left: 20px;
}
</style>
<!-- -->
<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>
<el-form label-position="left" ref="form" label-width="80px" :model="form" :size="defaultFormItemSize" :rules="rules">
<el-form-item label="数据集版本:">
V {{ form.datasetVersion }}
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">
......@@ -41,8 +40,9 @@ import { DatasetVersion } from '@/api/gptController.js'
export default {
data() {
return {
versionList: [],
form: {
datasetVersion: this.versionList.slice(0, 1)[0].datasetVersion + 1,
datasetVersion: undefined,
isInherit: 1,
hisVersion: undefined,
dimensionType: undefined,
......@@ -55,13 +55,18 @@ export default {
}
}
},
props: ['isEdit', 'datasetId', 'versionList'],
props: ['isEdit', 'datasetId'],
components: {},
computed: {},
watch: {
versionList() {
this.form.datasetVersion = this.versionList?.slice(0, 1)[0]?.datasetVersion + 1
}
},
mounted() {
this.intFrom()
this.getList()
},
methods: {
......@@ -73,6 +78,20 @@ export default {
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) => {
......
......@@ -2,13 +2,43 @@
<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>
......@@ -22,6 +52,7 @@ import { DatasetVersion } from '@/api/gptController.js'
export default {
data() {
return {
outputList: [],
form: {
format: 'jsonl'
}
......@@ -32,7 +63,9 @@ export default {
computed: {},
mounted() {},
mounted() {
this.getOutputList()
},
methods: {
onCancel(isSuccess) {
......@@ -49,7 +82,6 @@ export default {
this.onCancel(true)
this.$message.success('下载成功')
})
// this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => {
// // resolve(res);
// console.log(res);
......@@ -58,6 +90,18 @@ export default {
// }).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)
})
}
}
}
......
<!-- 标注 -->
<template>
<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="'data.'+item" :title="item" v-for="item in columnList" :key="item">
<vxe-column field="data.instruction" title="问题">
<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>
<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>
......@@ -26,7 +34,7 @@ export default {
form: JSON.parse(JSON.stringify(this.row))
}
},
props: ['row', 'columnList', 'refresh'],
props: ['row', 'columnList', 'refresh', 'isEdit'],
components: {},
computed: {},
......@@ -53,4 +61,9 @@ export default {
}
</script>
<style scoped>
.text {
white-space: break-spaces;
height: 260px;
overflow: auto;
}
</style>
......@@ -9,7 +9,9 @@
</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.'+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">
......@@ -72,20 +74,6 @@ export default {
return new Promise((resolve, reject) => {
DatasetData.load(this, params)
.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) => {
try {
var obj = JSON.parse(item.data)
......@@ -124,22 +112,32 @@ export default {
})
},
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) => {}
})
// 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) {
// 标注
console.log(row)
// let newRow = JSON.parse(JSON.stringify(row))
this.$dialog
.show(
......@@ -148,7 +146,7 @@ export default {
{
area: ['70%', '50%']
},
{ row, columnList: this.columnList, refresh: this.refresh }
{ row, columnList: this.columnList, refresh: this.refresh, isEdit: true }
)
.then((res) => {
this.refresh()
......@@ -190,16 +188,30 @@ export default {
},
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
......
......@@ -4,7 +4,7 @@
<div class="versionsList">
<div class="title">版本列表</div>
<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>
<el-tabs v-model="activeName" style="width:calc(100% - 200px)" v-if="nowVersion">
......@@ -19,8 +19,8 @@
<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-item @click.native="analyse(nowVersion)">分析</el-dropdown-item>
<el-dropdown-item @click.native="enhance(nowVersion)">增强</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
</template>
......@@ -81,11 +81,11 @@
</template>
<script>
import derived from '../dialog/derived.vue'
import dataImport from '../dialog/dataImport.vue'
import particulars from '../dialog/particulars.vue'
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'
import addVersions from './dialog/add.vue'
export default {
data() {
return {
......@@ -112,7 +112,7 @@ export default {
{
area: ['600px', 'auto']
},
{ isEdit: false, datasetId: this.tableData.datasetId, versionList: this.versionList }
{ isEdit: false, datasetId: this.tableData.datasetId }
)
.then((res) => {
this.refresh()
......@@ -199,7 +199,7 @@ export default {
'导出',
derived,
{
area: ['600px', 'auto']
area: ['100%', '100%']
},
{ row: data }
)
......@@ -216,6 +216,22 @@ export default {
},
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) {
// 切换版本
......
<!-- 创建Prompt模板 -->
<!-- 创建数据集 -->
<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-form-item label="任务名称:">
<el-input v-model="form.taskName" class="inputWidth" :size="defaultFormItemSize"></el-input>
<el-form-item label="数据集名称:" prop="datasetName">
<el-input v-model="form.datasetName" class="inputWidth" :size="defaultFormItemSize"></el-input>
</el-form-item>
<el-form-item label="任务描述:">
<el-input v-model="form.taskDescribe" type="textarea" :rows="4" class="inputWidth" :size="defaultFormItemSize"></el-input>
</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 label="数据类型:">
<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-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>
</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 label="数据集版本:">
{{ 'V1' }}
</el-form-item>
<el-row class="title">资源配置</el-row>
<el-form-item label="压缩任务运⾏环境:">
<el-radio v-model="radio" label="0">GPU A800 -------- TeslaGPU_A800_80G显存单卡_16核_128G内存</el-radio>
<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-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-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>
......@@ -47,45 +30,33 @@
</template>
<script>
import { BatchOptimizationController } from '@/api/gptController.js';
import { MyDataSet } from '@/api/gptController.js'
export default {
data () {
data() {
return {
form: {
'chain': 0,
'destDatasetId': 0,
'destDatasetName': '',
'destDatasetVersion': 0,
'epoch': 0,
'failCount': 0,
'finishTime': '',
'qualityQptimality': 0,
'shortenPrompt': 0,
'sourceDatasetId': 0,
'sourceDatasetName': '',
'sourceDatasetVersion': 0,
'successCount': 0,
'taskDescribe': '',
'taskName': '',
'taskStatus': 0
dataType: 0,
datasetName: '',
deletedFlag: 0,
dimensionType: 0,
template: 0
},
rules: {
datasetName: [{ required: true, message: '数据集名称不能为空', trigger: 'blur' }]
}
};
}
},
props: ['isEdit', 'item'],
components: {},
computed: {
},
computed: {},
mounted () {
mounted() {
this.intFrom()
},
methods: {
intFrom () {
intFrom() {
this.form = { ...this.form, ...this.item }
try {
this.form.templateLabel = JSON.parse(this.item.templateLabel)
......@@ -93,43 +64,52 @@ export default {
// console.log(error);
}
},
onCancel (isSuccess) {
onCancel(isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
this.observer.cancel(isSuccess)
}
},
onSubmit () {
onSubmit() {
return new Promise((resolve, reject) => {
this.$refs['form'].validate((valid) => {
if (valid) {
let params = {};
params.promptOptimizeBatchDto = { ...this.form };
let params = {}
params.datasetManageDto = { ...this.form }
if (this.isEdit) {
BatchOptimizationController.update(this, params).then(res => {
resolve(res);
this.$message.success('编辑成功');
this.onCancel(true);
}).catch(e => {
reject(e);
});
MyDataSet.update(this, params)
.then((res) => {
resolve(res)
this.$message.success('编辑成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
} else {
BatchOptimizationController.add(this, params).then(res => {
resolve(res);
this.$message.success('添加成功');
this.onCancel(true);
}).catch(e => {
reject(e);
});
MyDataSet.add(this, params)
.then((res) => {
resolve(res)
this.$message.success('添加成功')
this.onCancel(true)
})
.catch((e) => {
reject(e)
})
}
} else {
reject();
// reject();
}
});
});
})
})
},
isText(data) {
if (data !== 0) {
this.form.template = undefined
}
}
}
};
}
</script>
<style scoped>
.inputWidth {
......@@ -139,7 +119,7 @@ export default {
font-size: 20px;
margin-bottom: 16px;
}
.introduce{
.introduce {
font-size: 12px;
color: #909399;
}
......
<!-- 在线标注 -->
<!-- 数据标注 -->
<template>
<div style="position: relative">
<el-collapse v-model="activeName" accordion ref="collapse" v-resize="resize" style="margin-bottom:20px">
......@@ -28,24 +28,27 @@
<div class="tableBox" :style="{ height: tableHeight }">
<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">
<el-form-item label="数据集名称" prop="formFilter.dataName" label-width="120px">
<el-input class="filter-item" v-model="myDataSetPage.formFilter.dataName" :clearable="true" placeholder="数据集名称" />
<el-form-item label="数据集名称" prop="formFilter.versionName" label-width="80px">
<el-input class="filter-item" v-model="myDataSetPage.formFilter.versionName" :clearable="true" placeholder="数据集名称" />
</el-form-item>
</filter-box>
</el-form>
<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="versionsId" title="标注类型 > 模版"></vxe-column>
<vxe-column field="importState" title="数据量"></vxe-column>
<vxe-column field="derivedState" title="数据集ID"></vxe-column>
<vxe-column field="cleanCondition" title="标注进度"></vxe-column>
<vxe-column field="cleanCondition" title="创建时间"></vxe-column>
<vxe-column field="versionName" title="数据集名称 > 版本"></vxe-column>
<vxe-column field="dimensionType" title="标注类型 > 模版">
<template slot-scope="scope">
{{ LabelType.getValue(scope.row.dimensionType) }}
</template>
</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="操作">
<template slot-scope="scope">
<el-button type="text" :size="defaultFormItemSize" @click="dataImport(scope.row)">详情</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(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">标注</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> -->
</template>
......@@ -63,7 +66,7 @@
import { mapGetters } from 'vuex'
/* eslint-disable-next-line */
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'
export default {
......@@ -95,11 +98,8 @@ export default {
],
myDataSetPage: {
formFilter: {
modelDescribe: '',
modelId: 0,
modelName: '',
modelType: 0,
versionCount: 0
versionName: '',
inputStatus: 1
},
tableData: {
......@@ -134,11 +134,11 @@ export default {
// pageNum: 0,
// pageSize: 0
// },
modelSquareDtoFilter: { ...this.myDataSetPage.formFilter }
datasetVersionDtoFilter: { ...this.myDataSetPage.formFilter }
}
console.log(params)
return new Promise((resolve, reject) => {
ModelSquare.list(this, params)
DatasetVersion.load(this, params)
.then((res) => {
resolve({
dataList: res.data.dataList,
......@@ -187,7 +187,7 @@ export default {
type: 'warning'
}).then(() => {
let params = { batchTaskId: item.batchTaskId }
ModelSquare.delete(this, params)
DatasetVersion.delete(this, params)
.then((res) => {
this.$message.success('删除成功')
this.refresh()
......@@ -229,7 +229,7 @@ export default {
background-color: white;
width: 100%;
padding: 0px 20px 20px 20px;
height: 280px;
height: 200px;
.instructionsList {
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 {
background-color: white;
width: 100%;
padding: 0px 20px 20px 20px;
height: 280px;
height: 200px;
.instructionsList {
display: flex;
......
......@@ -269,7 +269,7 @@ export default {
background-color: white;
width: 100%;
padding: 0px 20px 20px 20px;
height: 280px;
height: 200px;
.instructionsList {
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