models-add-or-update.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <el-dialog :title="!dataForm.id ? '新增模板' : '修改模板'" :close-on-click-modal="false" :visible.sync="visible">
  3. <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
  4. label-width="100px">
  5. <el-form-item label="模板名称" prop="modelName">
  6. <el-input v-model="dataForm.modelName" placeholder="请输入模板名称"></el-input>
  7. </el-form-item>
  8. <el-form-item label="类别" size="mini" prop="categoryId">
  9. <el-radio-group v-model="dataForm.categoryId">
  10. <el-radio v-for="category in categoryList" :key="category.categoryId" :label="category.categoryId">{{ category.categoryName }}
  11. </el-radio>
  12. </el-radio-group>
  13. </el-form-item>
  14. <el-form-item label="文件" size="mini">
  15. <el-upload class="upload-demo" action="#" :on-preview="handlePreview"
  16. :on-remove="handleRemove" multiple :limit="10" :on-exceed="handleExceed"
  17. :on-change="fileChange"
  18. :file-list="fileList">
  19. <el-button size="small" type="primary">点击上传</el-button>
  20. </el-upload>
  21. </el-form-item>
  22. <el-form-item label="形式" prop="form">
  23. <el-select v-model="dataForm.form" placeholder="选择算法形式">
  24. <el-option v-for="data in forms" :key="data.value" :label="data.label" :value="data.value">
  25. </el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item label="主运行文件" prop="form">
  29. <el-select v-model="dataForm.appFile" placeholder="选择主运行文件">
  30. <el-option v-for="data in fileList" :key="data.name" :label="data.name" :value="data.name">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="描述信息" prop="remark">
  35. <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入内容" v-model="dataForm.remark">
  36. </el-input>
  37. </el-form-item>
  38. <!-- <el-form-item label="状态" size="mini" prop="status">
  39. <el-radio-group v-model="dataForm.status">
  40. <el-radio :label="0">禁用</el-radio>
  41. <el-radio :label="1">正常</el-radio>
  42. </el-radio-group>
  43. </el-form-item> -->
  44. </el-form>
  45. <span slot="footer" class="dialog-footer">
  46. <el-button @click="visible = false">取消</el-button>
  47. <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
  48. </span>
  49. </el-dialog>
  50. </template>
  51. <script>
  52. import { MessageBox } from 'element-ui'
  53. import { Message } from "element-ui"
  54. export default {
  55. data() {
  56. return {
  57. visible: false,
  58. // 获取所有类别列表
  59. categoryList: [],
  60. dataForm: {
  61. id: 0,
  62. modelName: "",
  63. // 本模板的类别
  64. categoryId: 1,
  65. form:null,
  66. appFile:"",
  67. remark: "",
  68. },
  69. textarea2: "",
  70. fileList: [
  71. ],
  72. forms:[
  73. {
  74. label:"传统算法",
  75. value:1
  76. },
  77. {
  78. label:"智能算法",
  79. value:2
  80. }
  81. ],
  82. dataRule: {
  83. modelName: [
  84. { required: true, message: "模板名称不能为空", trigger: "blur" },
  85. ],
  86. form: [
  87. { required: true, message: "算法形式不能为空", trigger: "blur" },
  88. ],
  89. // email: [
  90. // { required: true, message: "邮箱不能为空", trigger: "blur" },
  91. // { validator: validateEmail, trigger: "blur" },
  92. // ],
  93. // mobile: [
  94. // { required: true, message: "手机号不能为空", trigger: "blur" },
  95. // { validator: validateMobile, trigger: "blur" },
  96. // ],
  97. // codes: [
  98. // { required: true, message: "代码文件不能为空", trigger: "blur" },
  99. // ],
  100. },
  101. };
  102. },
  103. methods: {
  104. init(id) {
  105. this.dataForm.id = id || 0;
  106. this.$http({
  107. url: this.$http.adornUrl("/category/select"),
  108. method: "get",
  109. params: this.$http.adornParams(),
  110. })
  111. // 这块修改为获取类别
  112. .then(({ data }) => {
  113. this.categoryList = data && data.code === 0 ? data.list : [];
  114. })
  115. .then(() => {
  116. this.fileList=[];
  117. this.visible = true;
  118. this.$nextTick(() => {
  119. this.$refs["dataForm"].resetFields();
  120. });
  121. })
  122. .then(() => {
  123. if (this.dataForm.id) {
  124. this.$http({
  125. url: this.$http.adornUrl(`/algs/models/info/${this.dataForm.id}`),
  126. method: "get",
  127. params: this.$http.adornParams(),
  128. }).then(({ data }) => {
  129. if (data && data.code === 0) {
  130. this.dataForm.modelName = data.model.modelName;
  131. this.dataForm.categoryId = data.model.categoryId;
  132. this.dataForm.remark = data.model.remark;
  133. this.dataForm.appFile=data.model.appFile;
  134. // 模板文件地址
  135. // this.dataForm.dfsUrlv = data.temp.dfsUrlv;
  136. }
  137. });
  138. }
  139. });
  140. },
  141. // 表单提交
  142. dataFormSubmit() {
  143. this.$refs["dataForm"].validate((valid) => {
  144. if (valid) {
  145. this.visible=false;
  146. MessageBox.confirm(`是否上传该算法?`, '提示', {
  147. confirmButtonText: '确定',
  148. cancelButtonText: '取消',
  149. type: 'warning'
  150. }).then(() => {
  151. let formData=new FormData();
  152. this.fileList.forEach(file=>{
  153. formData.append('file',file.raw);
  154. });
  155. formData.append('modelName',this.dataForm.modelName);
  156. formData.append('categoryId',this.dataForm.categoryId);
  157. formData.append('remark',this.dataForm.remark);
  158. formData.append('uid',this.$store.state.user.id);
  159. formData.append('form',this.dataForm.form);
  160. formData.append('appFile',this.dataForm.appFile);
  161. this.$http({
  162. url: this.$http.adornUrl(
  163. `/algs/models/${!this.dataForm.id ? "save" : "update"}`
  164. ),
  165. method: "post",
  166. data:formData,
  167. }).then(({ data }) => {
  168. if (data && data.code === 0) {
  169. Message({
  170. message: "操作成功",
  171. type: "success",
  172. duration: 1500,
  173. onClose: () => {
  174. this.visible = false;
  175. this.$emit("refreshDataList");
  176. },
  177. });
  178. } else {
  179. Message.error(data.msg);
  180. }
  181. });
  182. }).catch(() => {})
  183. }
  184. });
  185. },
  186. // 以下4个函数是文件上传功能的
  187. handleRemove(file, fileList) {
  188. console.log(file, fileList);
  189. },
  190. handlePreview(file) {
  191. console.log(file);
  192. },
  193. handleExceed(files, fileList) {
  194. Message.warning(
  195. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  196. files.length + fileList.length
  197. } 个文件`
  198. );
  199. },
  200. beforeRemove(file, fileList) {
  201. return MessageBox.confirm(`确定移除 ${file.name}?`);
  202. },
  203. // 文件改变时
  204. fileChange(file, fileList) {
  205. this.fileList=fileList;
  206. this.fileList.append(file);
  207. },
  208. },
  209. };
  210. </script>