algcreate1.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <!-- -->
  2. <template>
  3. <div class=''>
  4. <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
  5. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  6. <el-breadcrumb-item :to="{ path: '/alg-algs'}">算法管理</el-breadcrumb-item>
  7. <el-breadcrumb-item>新建传统算法</el-breadcrumb-item>
  8. </el-breadcrumb>
  9. <el-divider class="divi"></el-divider>
  10. <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
  11. label-width="180px">
  12. <el-form-item label="传统算法名称" prop="algorithmName">
  13. <el-input v-model="dataForm.algorithmName" placeholder="请输入传统算法名称"></el-input>
  14. </el-form-item>
  15. <el-form-item label="类别" size="mini" prop="categoryId">
  16. <el-radio-group v-model="dataForm.categoryId">
  17. <el-radio v-for="category in categoryList" :key="category.categoryId" :label="category.categoryId">
  18. {{ category.categoryName }}
  19. </el-radio>
  20. </el-radio-group>
  21. </el-form-item>
  22. <el-form-item label="文件" size="mini">
  23. <el-upload class="upload-demo" action="#" :on-preview="handlePreview"
  24. :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="10" :on-exceed="handleExceed"
  25. :on-change="fileChange"
  26. :file-list="fileList">
  27. <el-button size="small" type="primary">点击上传</el-button>
  28. <div slot="tip" class="el-upload__tip">请上传代码文件</div>
  29. </el-upload>
  30. </el-form-item>
  31. <el-form-item label="选择数据集:">
  32. <el-select v-model="datasetSelected" multiple placeholder="选择数据集">
  33. <el-option-group v-for="group in datasetOptions" :key="group.label" :label="group.label">
  34. <el-option
  35. v-for="item in group.dataset"
  36. :key="item.filename"
  37. :label="item.filename"
  38. :value="item.filename"
  39. >
  40. </el-option>
  41. </el-option-group>
  42. </el-select>
  43. </el-form-item>
  44. <!-- 算法参数设置 -->
  45. <el-form-item
  46. v-for="(algParameter, index) in dataForm.algParameters"
  47. :label="'输入参数' + (index+1)"
  48. :key="algParameter.key"
  49. :prop="'algParameters.' + index + '.value'"
  50. >
  51. <el-input v-model="algParameter.label" placeholder="请输入参数名"></el-input>
  52. <el-select v-model="algParameter.type" placeholder="请选择参数类别">
  53. <el-option
  54. v-for="item in algParameterOptions"
  55. :key="item.value"
  56. :label="item.label"
  57. :value="item.value">
  58. </el-option>
  59. </el-select>
  60. <el-button @click.prevent="removealgParameter(algParameter)">删除</el-button>
  61. </el-form-item>
  62. <el-form-item>
  63. <el-button @click="addalgParameter">新增输入参数</el-button>
  64. </el-form-item>
  65. <!-- 算法输出结果 -->
  66. <el-form-item
  67. v-for="(algResult, index) in dataForm.algResults"
  68. :label="'输出结果' + (index+1)"
  69. :key="algResult.key"
  70. :prop="'algResults.' + index + '.value'"
  71. >
  72. <el-input v-model="algResult.label" placeholder="请输入算法结果名"></el-input>
  73. <el-input v-model="algResult.value" placeholder="请输入算法结果文件名"></el-input>
  74. <!-- <el-select v-model="algResult.type" placeholder="请选择算法结果类别">
  75. <el-option
  76. v-for="item in algResultOptions"
  77. :key="item.value"
  78. :label="item.label"
  79. :value="item.value">
  80. </el-option>
  81. </el-select> -->
  82. <el-button @click.prevent="removealgResult(algResult)">删除</el-button>
  83. </el-form-item>
  84. <el-form-item>
  85. <el-button @click="addalgResult">新增算法输出</el-button>
  86. </el-form-item>
  87. <el-form-item label="描述信息" prop="remark">
  88. <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入内容" v-model="dataForm.remark">
  89. </el-input>
  90. </el-form-item>
  91. <!-- <el-form-item label="状态" size="mini" prop="status">
  92. <el-radio-group v-model="dataForm.status">
  93. <el-radio :label="0">禁用</el-radio>
  94. <el-radio :label="1">正常</el-radio>
  95. </el-radio-group>
  96. </el-form-item> -->
  97. <el-form-item style="float:right">
  98. <el-button @click="visible = false;redirectHandle()">取消</el-button>
  99. <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
  100. </el-form-item>
  101. </el-form>
  102. </div>
  103. </template>
  104. <script>
  105. //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
  106. //例如:import 《组件名称》 from '《组件路径》';
  107. import { MessageBox } from 'element-ui'
  108. import { Message } from "element-ui"
  109. export default {
  110. created() {
  111. this.init();
  112. },
  113. data() {
  114. return {
  115. visible: false,
  116. // 获取所有类别列表
  117. categoryList: [],
  118. dataForm: {
  119. id: 0,
  120. algorithmName: "",
  121. categoryId: 1,
  122. algParameters:[
  123. {label:'',type:''}
  124. ],
  125. algResults:[
  126. {label:'',value:''}
  127. ],
  128. remark: "",
  129. },
  130. textarea2: "",
  131. fileList: [
  132. ],
  133. dataRule: {
  134. algorithmName: [
  135. { required: true, message: "名称不能为空", trigger: "blur" },
  136. ],
  137. },
  138. algParameterOptions:[
  139. {
  140. value: 'int',
  141. label: 'int'
  142. }, {
  143. value: 'string',
  144. label: 'string'
  145. }, {
  146. value: 'list',
  147. label: 'list'
  148. }
  149. ],
  150. algResultOptions:[
  151. {
  152. value: 'file',
  153. label: 'file'
  154. }
  155. ],
  156. datasetOptions: [
  157. {
  158. label:'静态数据集',
  159. dataset:[]
  160. },{
  161. label:'动态数据集',
  162. dataset:[]
  163. }
  164. ],
  165. datasetSelected: [],
  166. };
  167. },
  168. methods: {
  169. init() {
  170. this.dataForm.id = 0;
  171. this.fileList=[];
  172. this.$http({
  173. url: this.$http.adornUrl("/category/select"),
  174. method: "get",
  175. params: this.$http.adornParams(),
  176. })
  177. // 这块修改为获取类别
  178. .then(({ data }) => {
  179. this.categoryList = data && data.code === 0 ? data.list : [];
  180. })
  181. .then(() => {
  182. this.visible = true;
  183. this.$nextTick(() => {
  184. this.$refs["dataForm"].resetFields();
  185. });
  186. })
  187. // 这部分用不到
  188. .then(() => {
  189. if (this.dataForm.id) {
  190. this.$http({
  191. url: this.$http.adornUrl(`/algs/models/info/${this.dataForm.id}`),
  192. method: "get",
  193. params: this.$http.adornParams(),
  194. }).then(({ data }) => {
  195. if (data && data.code === 0) {
  196. this.dataForm.algorithmName = data.model.algorithmName;
  197. this.dataForm.categoryId = data.model.categoryId;
  198. this.dataForm.remark = data.model.remark;
  199. // 模板文件地址
  200. // this.dataForm.dfsUrlv = data.temp.dfsUrlv;
  201. }
  202. });
  203. }
  204. });
  205. //这块为获取所有静态数据集
  206. this.$http({
  207. url: this.$http.adornUrl("/dataset/listAll"),
  208. method: "get",
  209. params: this.$http.adornParams({
  210. }),
  211. }).then(({ data }) => {
  212. if (data && data.code === 0) {
  213. this.datasetOptions[0].dataset = data.list;
  214. } else {
  215. this.datasetOptions[0] = [];
  216. }
  217. });
  218. //这块为获取所有动态数据集
  219. this.$http({
  220. url: this.$http.adornUrl("/dataset/listAllDyDataset"),
  221. method: "get",
  222. params: this.$http.adornParams({
  223. }),
  224. }).then(({ data }) => {
  225. if (data && data.code === 0) {
  226. this.datasetOptions[1].dataset = data.list;
  227. } else {
  228. this.datasetOptions[1] = [];
  229. }
  230. });
  231. },
  232. redirectHandle(){
  233. this.$router.replace({ path: "/alg-algs" });
  234. },
  235. //新增算法参数
  236. addalgParameter(){
  237. this.dataForm.algParameters.push({
  238. type:'',
  239. key:Date.now()
  240. });
  241. },
  242. //新增算法结果
  243. addalgResult(){
  244. this.dataForm.algResults.push({
  245. value:'',
  246. key:Date.now()
  247. });
  248. },
  249. //删除算法参数
  250. removealgParameter(item){
  251. var index = this.dataForm.algParameters.indexOf(item)
  252. if (index !== -1) {
  253. this.dataForm.algParameters.splice(index, 1)
  254. }
  255. },
  256. //删除算法结果
  257. removealgResult(item){
  258. var index = this.dataForm.algResults.indexOf(item)
  259. if (index !== -1) {
  260. this.dataForm.algResults.splice(index, 1)
  261. }
  262. },
  263. // 表单提交
  264. dataFormSubmit() {
  265. var algParameterNames=[];
  266. var algParameterTypes=[];
  267. var algResultNames=[];
  268. var algResultValues=[];
  269. for(var i=0;i<this.dataForm.algParameters.length;i++){
  270. algParameterNames.push(this.dataForm.algParameters[i].label);
  271. algParameterTypes.push(this.dataForm.algParameters[i].type);
  272. }
  273. for(var i=0;i<this.dataForm.algResults.length;i++){
  274. algResultNames.push(this.dataForm.algResults[i].label);
  275. algResultValues.push(this.dataForm.algResults[i].value);
  276. }
  277. this.$refs["dataForm"].validate((valid) => {
  278. if (valid) {
  279. MessageBox.confirm(`是否新建传统算法?`, '提示', {
  280. confirmButtonText: '确定',
  281. cancelButtonText: '取消',
  282. type: 'warning'
  283. }).then(() => {
  284. let formData=new FormData();
  285. this.fileList.forEach(file=>{
  286. formData.append('file',file.raw);
  287. });
  288. formData.append("algorithmId",undefined);
  289. formData.append("algorithmName",this.dataForm.algorithmName);
  290. formData.append("remark",this.dataForm.remark);
  291. formData.append("categoryId",this.dataForm.categoryId);
  292. formData.append("uid",this.$store.state.user.id);
  293. formData.append("frameId",-1);
  294. formData.append("number",1);
  295. formData.append("dataSets",this.datasetSelected);
  296. formData.append("algParameterName",algParameterNames);
  297. formData.append("algParameterTypes",algParameterTypes);
  298. formData.append("algResultNames",algResultNames);
  299. formData.append("algResultLocations",algResultValues)
  300. this.$http({
  301. url: this.$http.adornUrl(
  302. `/algs/${!this.dataForm.id ? "save" : "update"}`
  303. ),
  304. method: "post",
  305. data:formData,
  306. }).then(({ data }) => {
  307. if (data && data.code === 0) {
  308. Message({
  309. message: "操作成功",
  310. type: "success",
  311. duration: 1500,
  312. onClose: () => {
  313. this.visible = false;
  314. this.$emit("refreshDataList");
  315. },
  316. });
  317. this.$router.replace({ path: "/alg-algs" });
  318. } else {
  319. Message.error(data.msg);
  320. }
  321. });
  322. }).catch(() => {})
  323. }
  324. });
  325. },
  326. // 以下4个函数是文件上传功能的
  327. handleRemove(file, fileList) {
  328. console.log(file, fileList);
  329. },
  330. handlePreview(file) {
  331. console.log(file);
  332. },
  333. handleExceed(files, fileList) {
  334. Message.warning(
  335. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  336. files.length + fileList.length
  337. } 个文件`
  338. );
  339. },
  340. beforeRemove(file, fileList) {
  341. return MessageBox.confirm(`确定移除 ${file.name}?`);
  342. },
  343. // 文件改变时
  344. fileChange(file, fileList) {
  345. this.fileList=fileList;
  346. this.fileList.append(file);
  347. },
  348. },
  349. };
  350. </script>
  351. <style>
  352. .divi {
  353. display: block;
  354. height: 1px;
  355. width: 100%;
  356. margin: 24px 0;
  357. background-color: #dcdfe6;
  358. position: relative;
  359. }
  360. .divi2 {
  361. display: block;
  362. height: 1px;
  363. width: 100%;
  364. position: relative;
  365. }
  366. .sele {
  367. border: 1px solid #409eff;
  368. border-radius: 5px;
  369. box-sizing: border-box;
  370. padding: 5px 0px;
  371. margin: 10px;
  372. }
  373. .el-input {
  374. width: 250px;
  375. }
  376. </style>