123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- <!-- -->
- <template>
- <div class=''>
- <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
- <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
- <el-breadcrumb-item :to="{ path: '/alg-algs'}">算法管理</el-breadcrumb-item>
- <el-breadcrumb-item>新建传统算法</el-breadcrumb-item>
- </el-breadcrumb>
- <el-divider class="divi"></el-divider>
- <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
- label-width="180px">
- <el-form-item label="传统算法名称" prop="algorithmName">
- <el-input v-model="dataForm.algorithmName" placeholder="请输入传统算法名称"></el-input>
- </el-form-item>
- <el-form-item label="类别" size="mini" prop="categoryId">
- <el-radio-group v-model="dataForm.categoryId">
- <el-radio v-for="category in categoryList" :key="category.categoryId" :label="category.categoryId">
- {{ category.categoryName }}
- </el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="文件" size="mini">
- <el-upload
- class="upload-demo"
- action=""
- :before-remove="beforeRemove"
- multiple
- :limit="10"
- :on-exceed="handleExceed"
- :on-change="fileChange"
- :file-list="fileList"
- :auto-upload="false">
- <el-button size="small" type="primary">点击上传</el-button>
- <div slot="tip" class="el-upload__tip">请上传代码文件</div>
- </el-upload>
- </el-form-item>
- <el-form-item label="选择数据集:">
- <el-select v-model="datasetSelected" multiple placeholder="选择数据集">
- <el-option-group v-for="group in datasetOptions" :key="group.label" :label="group.label">
- <el-option
- v-for="item in group.dataset"
- :key="item.filename"
- :label="item.filename"
- :value="item.filename"
- >
- </el-option>
- </el-option-group>
- </el-select>
- </el-form-item>
-
- <!-- 算法参数设置 -->
- <el-form-item
- v-for="(algParameter, index) in dataForm.algParameters"
- :label="'输入参数' + (index+1)"
- :key="algParameter.key"
- :prop="'algParameters.' + index + '.value'"
- >
- <el-input v-model="algParameter.label" placeholder="请输入参数名"></el-input>
- <el-select v-model="algParameter.type" placeholder="请选择参数类别">
- <el-option
- v-for="item in algParameterOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-button @click.prevent="removealgParameter(algParameter)">删除</el-button>
- </el-form-item>
- <el-form-item>
- <el-button @click="addalgParameter">新增输入参数</el-button>
- </el-form-item>
- <!-- 算法输出结果 -->
- <el-form-item
- v-for="(algResult, index) in dataForm.algResults"
- :label="'输出结果' + (index+1)"
- :key="algResult.key"
- :prop="'algResults.' + index + '.value'"
- >
- <el-input v-model="algResult.label" placeholder="请输入算法结果名"></el-input>
- <el-input v-model="algResult.value" placeholder="请输入算法结果文件名"></el-input>
- <!-- <el-select v-model="algResult.type" placeholder="请选择算法结果类别">
- <el-option
- v-for="item in algResultOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select> -->
- <el-button @click.prevent="removealgResult(algResult)">删除</el-button>
- </el-form-item>
- <el-form-item>
- <el-button @click="addalgResult">新增算法输出</el-button>
- </el-form-item>
-
- <el-form-item label="描述信息" prop="remark">
- <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入内容" v-model="dataForm.remark">
- </el-input>
- </el-form-item>
- <!-- <el-form-item label="状态" size="mini" prop="status">
- <el-radio-group v-model="dataForm.status">
- <el-radio :label="0">禁用</el-radio>
- <el-radio :label="1">正常</el-radio>
- </el-radio-group>
- </el-form-item> -->
- <el-form-item style="float:right">
- <el-button @click="visible = false;redirectHandle()">取消</el-button>
- <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
- </el-form-item>
- </el-form>
- </div>
- </template>
- <script>
- //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
- //例如:import 《组件名称》 from '《组件路径》';
- import { MessageBox } from 'element-ui'
- import { Message } from "element-ui"
- export default {
- created() {
- this.init();
- },
- data() {
- return {
- visible: false,
- // 获取所有类别列表
- categoryList: [],
- dataForm: {
- id: 0,
- algorithmName: "",
- categoryId: 1,
- algParameters:[
- {label:'',type:''}
- ],
- algResults:[
- {label:'',value:''}
- ],
- remark: "",
- },
- textarea2: "",
- fileList: [
- ],
- dataRule: {
- algorithmName: [
- { required: true, message: "名称不能为空", trigger: "blur" },
- ],
- },
- algParameterOptions:[
- {
- value: 'int',
- label: 'int'
- }, {
- value: 'string',
- label: 'string'
- }, {
- value: 'list',
- label: 'list'
- }
- ],
- algResultOptions:[
- {
- value: 'file',
- label: 'file'
- }
- ],
- datasetOptions: [
- {
- label:'静态数据集',
- dataset:[]
- },{
- label:'动态数据集',
- dataset:[]
- }
- ],
- datasetSelected: [],
- };
- },
- methods: {
- init() {
- this.dataForm.id = 0;
- this.fileList=[];
- this.$http({
- url: this.$http.adornUrl("/category/select"),
- method: "get",
- params: this.$http.adornParams(),
- })
- // 这块修改为获取类别
- .then(({ data }) => {
- this.categoryList = data && data.code === 0 ? data.list : [];
- })
- .then(() => {
- this.visible = true;
- this.$nextTick(() => {
- this.$refs["dataForm"].resetFields();
- });
- })
- // 这部分用不到
- .then(() => {
- if (this.dataForm.id) {
- this.$http({
- url: this.$http.adornUrl(`/algs/models/info/${this.dataForm.id}`),
- method: "get",
- params: this.$http.adornParams(),
- }).then(({ data }) => {
- if (data && data.code === 0) {
- this.dataForm.algorithmName = data.model.algorithmName;
- this.dataForm.categoryId = data.model.categoryId;
- this.dataForm.remark = data.model.remark;
- // 模板文件地址
- // this.dataForm.dfsUrlv = data.temp.dfsUrlv;
- }
- });
- }
- });
- //这块为获取所有静态数据集
- this.$http({
- url: this.$http.adornUrl("/dataset/listAll"),
- method: "get",
- params: this.$http.adornParams({
- }),
- }).then(({ data }) => {
- if (data && data.code === 0) {
- this.datasetOptions[0].dataset = data.list;
- } else {
- this.datasetOptions[0] = [];
- }
- });
- //这块为获取所有动态数据集
- this.$http({
- url: this.$http.adornUrl("/dataset/listAllDyDataset"),
- method: "get",
- params: this.$http.adornParams({
- }),
- }).then(({ data }) => {
- if (data && data.code === 0) {
- this.datasetOptions[1].dataset = data.list;
- } else {
- this.datasetOptions[1] = [];
- }
- });
- },
- redirectHandle(){
- this.$router.replace({ path: "/alg-algs" });
- },
- //新增算法参数
- addalgParameter(){
- this.dataForm.algParameters.push({
- type:'',
- key:Date.now()
- });
- },
- //新增算法结果
- addalgResult(){
- this.dataForm.algResults.push({
- value:'',
- key:Date.now()
- });
- },
- //删除算法参数
- removealgParameter(item){
- var index = this.dataForm.algParameters.indexOf(item)
- if (index !== -1) {
- this.dataForm.algParameters.splice(index, 1)
- }
- },
- //删除算法结果
- removealgResult(item){
- var index = this.dataForm.algResults.indexOf(item)
- if (index !== -1) {
- this.dataForm.algResults.splice(index, 1)
- }
- },
-
- // 表单提交
- dataFormSubmit() {
- var algParameterNames=[];
- var algParameterTypes=[];
- var algResultNames=[];
- var algResultValues=[];
- for(var i=0;i<this.dataForm.algParameters.length;i++){
- algParameterNames.push(this.dataForm.algParameters[i].label);
- algParameterTypes.push(this.dataForm.algParameters[i].type);
- }
- for(var i=0;i<this.dataForm.algResults.length;i++){
- algResultNames.push(this.dataForm.algResults[i].label);
- algResultValues.push(this.dataForm.algResults[i].value);
- }
- this.$refs["dataForm"].validate((valid) => {
- if (valid) {
- MessageBox.confirm(`是否新建传统算法?`, '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- let formData=new FormData();
- this.fileList.forEach(file=>{
- formData.append('file',file.raw);
- });
- formData.append("algorithmId",undefined);
- formData.append("algorithmName",this.dataForm.algorithmName);
- formData.append("remark",this.dataForm.remark);
- formData.append("categoryId",this.dataForm.categoryId);
- formData.append("uid",this.$store.state.user.id);
- formData.append("frameId",-1);
- formData.append("number",1);
- formData.append("dataSets",this.datasetSelected);
- formData.append("algParameterName",algParameterNames);
- formData.append("algParameterTypes",algParameterTypes);
- formData.append("algResultNames",algResultNames);
- formData.append("algResultLocations",algResultValues)
- this.$http({
- url: this.$http.adornUrl(
- `/algs/${!this.dataForm.id ? "save" : "update"}`
- ),
- method: "post",
- data:formData,
- }).then(({ data }) => {
- if (data && data.code === 0) {
- Message({
- message: "操作成功",
- type: "success",
- duration: 1500,
- onClose: () => {
- this.visible = false;
- this.$emit("refreshDataList");
- },
- });
- this.$router.replace({ path: "/alg-algs" });
- } else {
- Message.error(data.msg);
- }
- });
- }).catch(() => {})
-
- }
- });
- },
- // 以下4个函数是文件上传功能的
- handleExceed(files, fileList) {
- Message.warning(
- `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
- files.length + fileList.length
- } 个文件`
- );
- },
- beforeRemove(file, fileList) {
- return MessageBox.confirm(`确定移除 ${file.name}?`);
- },
- // 文件改变时
- fileChange(file, fileList) {
- this.fileList.push(file);
- },
- },
- };
- </script>
- <style>
- .divi {
- display: block;
- height: 1px;
- width: 100%;
- margin: 24px 0;
- background-color: #dcdfe6;
- position: relative;
- }
- .divi2 {
- display: block;
- height: 1px;
- width: 100%;
- position: relative;
- }
- .sele {
- border: 1px solid #409eff;
- border-radius: 5px;
- box-sizing: border-box;
- padding: 5px 0px;
- margin: 10px;
- }
- .el-input {
- width: 250px;
- }
- </style>
|