Commit c4950e1b135d31f6678af3e9ca6fe8a47cbf3291
1 parent
e863b603
BPM 模型重构 1:新建流程时,只填写 name、description、key
Showing
9 changed files
with
132 additions
and
57 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java
| @@ -56,7 +56,7 @@ public class BpmModelController { | @@ -56,7 +56,7 @@ public class BpmModelController { | ||
| 56 | public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException { | 56 | public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException { |
| 57 | BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO); | 57 | BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO); |
| 58 | // 读取文件 | 58 | // 读取文件 |
| 59 | - createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false)); | 59 | +// createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false)); |
| 60 | return success(bpmModelService.createModel(createReqVO)); | 60 | return success(bpmModelService.createModel(createReqVO)); |
| 61 | } | 61 | } |
| 62 | 62 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelCreateReqVO.java
| @@ -10,12 +10,17 @@ import javax.validation.constraints.NotEmpty; | @@ -10,12 +10,17 @@ import javax.validation.constraints.NotEmpty; | ||
| 10 | 10 | ||
| 11 | @ApiModel("流程模型的创建 Request VO") | 11 | @ApiModel("流程模型的创建 Request VO") |
| 12 | @Data | 12 | @Data |
| 13 | -@EqualsAndHashCode(callSuper = true) | ||
| 14 | -@ToString(callSuper = true) | ||
| 15 | -public class BpmModelCreateReqVO extends BpmModelBaseVO { | 13 | +public class BpmModelCreateReqVO { |
| 16 | 14 | ||
| 17 | - @ApiModelProperty(value = "BPMN XML", required = true) | ||
| 18 | - @NotEmpty(message = "BPMN XML 不能为空") | ||
| 19 | - private String bpmnXml; | 15 | + @ApiModelProperty(value = "流程标识", required = true, example = "process_yudao") |
| 16 | + @NotEmpty(message = "流程标识不能为空") | ||
| 17 | + private String key; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "流程名称", required = true, example = "芋道") | ||
| 20 | + @NotEmpty(message = "流程名称不能为空") | ||
| 21 | + private String name; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "流程描述", example = "我是描述") | ||
| 24 | + private String description; | ||
| 20 | 25 | ||
| 21 | } | 26 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelUpdateReqVO.java
| @@ -18,8 +18,19 @@ public class BpmModelUpdateReqVO extends BpmModelBaseVO { | @@ -18,8 +18,19 @@ public class BpmModelUpdateReqVO extends BpmModelBaseVO { | ||
| 18 | @NotEmpty(message = "编号不能为空") | 18 | @NotEmpty(message = "编号不能为空") |
| 19 | private String id; | 19 | private String id; |
| 20 | 20 | ||
| 21 | + @ApiModelProperty(value = "流程名称", example = "芋道") | ||
| 22 | + private String name; | ||
| 23 | + | ||
| 24 | + @ApiModelProperty(value = "流程描述", example = "我是描述") | ||
| 25 | + private String description; | ||
| 26 | + | ||
| 27 | + @ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") | ||
| 28 | + private String category; | ||
| 29 | + | ||
| 30 | + @ApiModelProperty(value = "表单编号", example = "1024") | ||
| 31 | + private Long formId; | ||
| 32 | + | ||
| 21 | @ApiModelProperty(value = "BPMN XML", required = true) | 33 | @ApiModelProperty(value = "BPMN XML", required = true) |
| 22 | - @NotEmpty(message = "BPMN XML 不能为空") | ||
| 23 | private String bpmnXml; | 34 | private String bpmnXml; |
| 24 | 35 | ||
| 25 | } | 36 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java
| @@ -95,8 +95,7 @@ public interface BpmModelConvert { | @@ -95,8 +95,7 @@ public interface BpmModelConvert { | ||
| 95 | default void copy(Model model, BpmModelCreateReqVO bean) { | 95 | default void copy(Model model, BpmModelCreateReqVO bean) { |
| 96 | model.setName(bean.getName()); | 96 | model.setName(bean.getName()); |
| 97 | model.setKey(bean.getKey()); | 97 | model.setKey(bean.getKey()); |
| 98 | - model.setCategory(bean.getCategory()); | ||
| 99 | - model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); | 98 | + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), null))); |
| 100 | } | 99 | } |
| 101 | 100 | ||
| 102 | default void copy(Model model, BpmModelUpdateReqVO bean) { | 101 | default void copy(Model model, BpmModelUpdateReqVO bean) { |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmModelFormTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.enums.definition; | ||
| 2 | + | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 4 | +import lombok.Getter; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * BPM 模型的表单类型的枚举 | ||
| 8 | + * | ||
| 9 | + * @author 芋道源码 | ||
| 10 | + */ | ||
| 11 | +@Getter | ||
| 12 | +@AllArgsConstructor | ||
| 13 | +public enum BpmModelFormTypeEnum { | ||
| 14 | + | ||
| 15 | + NORMAL(10, "流程表单"), // 对应 BpmFormDO | ||
| 16 | + CUSTOM(20, "业务表单") // 业务自己定义的表单,自己进行数据的存储 | ||
| 17 | + ; | ||
| 18 | + | ||
| 19 | + private final Integer type; | ||
| 20 | + private final String desc; | ||
| 21 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; | ||
| 3 | import lombok.Data; | 4 | import lombok.Data; |
| 4 | 5 | ||
| 5 | /** | 6 | /** |
| @@ -16,8 +17,23 @@ public class BpmModelMetaInfoRespDTO { | @@ -16,8 +17,23 @@ public class BpmModelMetaInfoRespDTO { | ||
| 16 | */ | 17 | */ |
| 17 | private String description; | 18 | private String description; |
| 18 | /** | 19 | /** |
| 20 | + * 表单类型 | ||
| 21 | + */ | ||
| 22 | + private Long formType; | ||
| 23 | + /** | ||
| 19 | * 表单编号 | 24 | * 表单编号 |
| 25 | + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 | ||
| 20 | */ | 26 | */ |
| 21 | private Long formId; | 27 | private Long formId; |
| 28 | + /** | ||
| 29 | + * 自定义表单的提交路径,使用 Vue 的路由地址 | ||
| 30 | + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 | ||
| 31 | + */ | ||
| 32 | + private String formCustomSubmitPath; | ||
| 33 | + /** | ||
| 34 | + * 自定义表单的查看路径,使用 Vue 的路由地址 | ||
| 35 | + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 | ||
| 36 | + */ | ||
| 37 | + private String formCustomViewPath; | ||
| 22 | 38 | ||
| 23 | } | 39 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java
| @@ -121,15 +121,12 @@ public class BpmModelServiceImpl implements BpmModelService { | @@ -121,15 +121,12 @@ public class BpmModelServiceImpl implements BpmModelService { | ||
| 121 | BpmModelConvert.INSTANCE.copy(model, createReqVO); | 121 | BpmModelConvert.INSTANCE.copy(model, createReqVO); |
| 122 | // 保存流程定义 | 122 | // 保存流程定义 |
| 123 | repositoryService.saveModel(model); | 123 | repositoryService.saveModel(model); |
| 124 | - // 添加 BPMN XML | ||
| 125 | - repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(createReqVO.getBpmnXml())); | ||
| 126 | return model.getId(); | 124 | return model.getId(); |
| 127 | } | 125 | } |
| 128 | 126 | ||
| 129 | @Override | 127 | @Override |
| 130 | @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 | 128 | @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 |
| 131 | public void updateModel(BpmModelUpdateReqVO updateReqVO) { | 129 | public void updateModel(BpmModelUpdateReqVO updateReqVO) { |
| 132 | - checkKeyNCName(updateReqVO.getKey()); | ||
| 133 | // 校验流程模型存在 | 130 | // 校验流程模型存在 |
| 134 | Model model = repositoryService.getModel(updateReqVO.getId()); | 131 | Model model = repositoryService.getModel(updateReqVO.getId()); |
| 135 | if (model == null) { | 132 | if (model == null) { |
yudao-admin-server/src/main/resources/application-dev.yaml
| @@ -63,12 +63,12 @@ spring: | @@ -63,12 +63,12 @@ spring: | ||
| 63 | 63 | ||
| 64 | # 工作流 Activiti 配置 | 64 | # 工作流 Activiti 配置 |
| 65 | activiti: | 65 | activiti: |
| 66 | - #1.false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常 | ||
| 67 | - #2.true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表 | ||
| 68 | - #3.create_drop:启动时自动创建表,关闭时自动删除表 | ||
| 69 | - #4.drop_create:启动时,删除旧表,再创建新表 | 66 | + # 1. false:默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常 |
| 67 | + # 2. true:启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表 | ||
| 68 | + # 3. create_drop:启动时自动创建表,关闭时自动删除表 | ||
| 69 | + # 4. drop_create:启动时,删除旧表,再创建新表 | ||
| 70 | database-schema-update: true | 70 | database-schema-update: true |
| 71 | - #activiti7默认不生成历史信息表,需手动设置开启 | 71 | + # activiti7 默认不生成历史信息表,需手动设置开启 |
| 72 | db-history-used: true | 72 | db-history-used: true |
| 73 | check-process-definitions: true | 73 | check-process-definitions: true |
| 74 | #full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数 | 74 | #full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数 |
yudao-admin-ui/src/views/bpm/model/index.vue
| @@ -109,51 +109,50 @@ | @@ -109,51 +109,50 @@ | ||
| 109 | <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" /> | 109 | <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" /> |
| 110 | </el-dialog> | 110 | </el-dialog> |
| 111 | 111 | ||
| 112 | + <!-- 对话框(添加) --> | ||
| 113 | + <el-dialog title="新建模型" :visible.sync="open" width="500px" append-to-body> | ||
| 114 | + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | ||
| 115 | + <el-form-item label="流程标识" prop="key"> | ||
| 116 | + <el-input v-model="form.key" placeholder="请输入流标标识" style="width: 350px;" /> | ||
| 117 | + <el-tooltip class="item" effect="light" content="新建后,流程标识不可修改!" placement="top"> | ||
| 118 | + <i style="padding-left: 5px;" class="el-icon-question" /> | ||
| 119 | + </el-tooltip> | ||
| 120 | + </el-form-item> | ||
| 121 | + <el-form-item label="流程名称" prop="name"> | ||
| 122 | + <el-input v-model="form.name" placeholder="请输入流程名称" clearable /> | ||
| 123 | + </el-form-item> | ||
| 124 | + <el-form-item label="流程描述" prop="description"> | ||
| 125 | + <el-input type="textarea" v-model="form.description" clearable /> | ||
| 126 | + </el-form-item> | ||
| 127 | + </el-form> | ||
| 128 | + <div slot="footer" class="dialog-footer"> | ||
| 129 | + <el-button type="primary" @click="submitForm">确 定</el-button> | ||
| 130 | + <el-button @click="cancel">取 消</el-button> | ||
| 131 | + </div> | ||
| 132 | + </el-dialog> | ||
| 133 | + | ||
| 112 | <!-- 用户导入对话框 --> | 134 | <!-- 用户导入对话框 --> |
| 113 | <el-dialog title="导入流程模型" :visible.sync="upload.open" width="400px" append-to-body> | 135 | <el-dialog title="导入流程模型" :visible.sync="upload.open" width="400px" append-to-body> |
| 114 | - <el-upload | ||
| 115 | - ref="upload" | ||
| 116 | - :limit="1" | ||
| 117 | - accept=".bpmn, .xml" | ||
| 118 | - :headers="upload.headers" | ||
| 119 | - :action="upload.url" | ||
| 120 | - :disabled="upload.isUploading" | ||
| 121 | - :on-progress="handleFileUploadProgress" | ||
| 122 | - :on-success="handleFileSuccess" | ||
| 123 | - :auto-upload="false" | ||
| 124 | - name="bpmnFile" | ||
| 125 | - :data="upload.form" | ||
| 126 | - drag | ||
| 127 | - > | 136 | + <el-upload ref="upload" :limit="1" accept=".bpmn, .xml" :headers="upload.headers" :action="upload.url" |
| 137 | + :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" | ||
| 138 | + :auto-upload="false" name="bpmnFile" :data="upload.form" drag> | ||
| 128 | <i class="el-icon-upload"></i> | 139 | <i class="el-icon-upload"></i> |
| 129 | <div class="el-upload__text"> | 140 | <div class="el-upload__text"> |
| 130 | 将文件拖到此处,或 | 141 | 将文件拖到此处,或 |
| 131 | <em>点击上传</em> | 142 | <em>点击上传</em> |
| 132 | </div> | 143 | </div> |
| 133 | <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“bpm”或“xml”格式文件!</div> | 144 | <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“bpm”或“xml”格式文件!</div> |
| 134 | - | ||
| 135 | - <!-- <div class="el-upload__tip" slot="tip">--> | ||
| 136 | -<!-- 流程名称:<el-input v-model="upload.name"/>--> | ||
| 137 | -<!-- 流程分类:<el-input v-model="upload.category"/>--> | ||
| 138 | -<!-- </div>--> | ||
| 139 | <div class="el-upload__tip" slot="tip"> | 145 | <div class="el-upload__tip" slot="tip"> |
| 140 | <el-form ref="uploadForm" size="mini" label-width="90px" :model="upload.form" :rules="upload.rules" @submit.native.prevent> | 146 | <el-form ref="uploadForm" size="mini" label-width="90px" :model="upload.form" :rules="upload.rules" @submit.native.prevent> |
| 141 | <el-form-item label="流程标识" prop="key"> | 147 | <el-form-item label="流程标识" prop="key"> |
| 142 | - <el-input v-model="upload.form.key" placeholder="请输入流标标识" /> | 148 | + <el-input v-model="upload.form.key" placeholder="请输入流标标识" style="width: 250px;" /> |
| 149 | + <el-tooltip class="item" effect="light" content="新建后,流程标识不可修改!" placement="top"> | ||
| 150 | + <i style="padding-left: 5px;" class="el-icon-question" /> | ||
| 151 | + </el-tooltip> | ||
| 143 | </el-form-item> | 152 | </el-form-item> |
| 144 | <el-form-item label="流程名称" prop="name"> | 153 | <el-form-item label="流程名称" prop="name"> |
| 145 | <el-input v-model="upload.form.name" placeholder="请输入流程名称" clearable /> | 154 | <el-input v-model="upload.form.name" placeholder="请输入流程名称" clearable /> |
| 146 | </el-form-item> | 155 | </el-form-item> |
| 147 | - <el-form-item label="流程分类" prop="category"> | ||
| 148 | - <el-select v-model="upload.form.category" placeholder="请选择流程分类" clearable style="width: 100%"> | ||
| 149 | - <el-option v-for="dict in categoryDictDatas" :key="dict.value" :label="dict.label" :value="dict.value"/> | ||
| 150 | - </el-select> | ||
| 151 | - </el-form-item> | ||
| 152 | - <el-form-item label="流程表单" prop="formId"> | ||
| 153 | - <el-select v-model="upload.form.formId" placeholder="请选择流程表单,非必选哟!" clearable style="width: 100%"> | ||
| 154 | - <el-option v-for="form in forms" :key="form.id" :label="form.name" :value="form.id"/> | ||
| 155 | - </el-select> | ||
| 156 | - </el-form-item> | ||
| 157 | <el-form-item label="流程描述" prop="description"> | 156 | <el-form-item label="流程描述" prop="description"> |
| 158 | <el-input type="textarea" v-model="upload.form.description" clearable /> | 157 | <el-input type="textarea" v-model="upload.form.description" clearable /> |
| 159 | </el-form-item> | 158 | </el-form-item> |
| @@ -169,14 +168,12 @@ | @@ -169,14 +168,12 @@ | ||
| 169 | </template> | 168 | </template> |
| 170 | 169 | ||
| 171 | <script> | 170 | <script> |
| 172 | -import {deleteModel, deployModel, getModelPage, getModel, updateModelState} from "@/api/bpm/model"; | 171 | +import {deleteModel, deployModel, getModelPage, getModel, updateModelState, createModel} from "@/api/bpm/model"; |
| 173 | import {DICT_TYPE, getDictDatas} from "@/utils/dict"; | 172 | import {DICT_TYPE, getDictDatas} from "@/utils/dict"; |
| 174 | import {getForm, getSimpleForms} from "@/api/bpm/form"; | 173 | import {getForm, getSimpleForms} from "@/api/bpm/form"; |
| 175 | import {decodeFields} from "@/utils/formGenerator"; | 174 | import {decodeFields} from "@/utils/formGenerator"; |
| 176 | import Parser from '@/components/parser/Parser' | 175 | import Parser from '@/components/parser/Parser' |
| 177 | -import {getToken} from "@/utils/auth"; | ||
| 178 | import {getBaseHeader} from "@/utils/request"; | 176 | import {getBaseHeader} from "@/utils/request"; |
| 179 | -import {addUser, updateUser} from "@/api/system/user"; | ||
| 180 | 177 | ||
| 181 | export default { | 178 | export default { |
| 182 | name: "model", | 179 | name: "model", |
| @@ -212,6 +209,15 @@ export default { | @@ -212,6 +209,15 @@ export default { | ||
| 212 | fields: [] | 209 | fields: [] |
| 213 | }, | 210 | }, |
| 214 | 211 | ||
| 212 | + // 流程表单 | ||
| 213 | + open: false, | ||
| 214 | + form: {}, | ||
| 215 | + // 表单校验 | ||
| 216 | + rules: { | ||
| 217 | + key: [{ required: true, message: "流程标识不能为空", trigger: "blur" }], | ||
| 218 | + name: [{ required: true, message: "流程名称不能为空", trigger: "blur" }], | ||
| 219 | + }, | ||
| 220 | + | ||
| 215 | // 流程导入参数 | 221 | // 流程导入参数 |
| 216 | upload: { | 222 | upload: { |
| 217 | // 是否显示弹出层(用户导入) | 223 | // 是否显示弹出层(用户导入) |
| @@ -228,7 +234,6 @@ export default { | @@ -228,7 +234,6 @@ export default { | ||
| 228 | rules: { | 234 | rules: { |
| 229 | key: [{ required: true, message: "流程标识不能为空", trigger: "blur" }], | 235 | key: [{ required: true, message: "流程标识不能为空", trigger: "blur" }], |
| 230 | name: [{ required: true, message: "流程名称不能为空", trigger: "blur" }], | 236 | name: [{ required: true, message: "流程名称不能为空", trigger: "blur" }], |
| 231 | - category: [{ required: true, message: "流程分类不能为空", trigger: "blur" }], | ||
| 232 | }, | 237 | }, |
| 233 | }, | 238 | }, |
| 234 | // 流程表单的下拉框的数据 | 239 | // 流程表单的下拉框的数据 |
| @@ -256,10 +261,19 @@ export default { | @@ -256,10 +261,19 @@ export default { | ||
| 256 | } | 261 | } |
| 257 | ); | 262 | ); |
| 258 | }, | 263 | }, |
| 264 | + /** 取消按钮 */ | ||
| 265 | + cancel() { | ||
| 266 | + this.open = false; | ||
| 267 | + this.reset(); | ||
| 268 | + }, | ||
| 259 | // 表单重置 | 269 | // 表单重置 |
| 260 | reset() { | 270 | reset() { |
| 261 | - this.bpmnData = {} | ||
| 262 | - this.bpmnXML = "" | 271 | + this.form = { |
| 272 | + key: undefined, | ||
| 273 | + name: undefined, | ||
| 274 | + description: undefined | ||
| 275 | + }; | ||
| 276 | + this.resetForm("form"); | ||
| 263 | }, | 277 | }, |
| 264 | /** 搜索按钮操作 */ | 278 | /** 搜索按钮操作 */ |
| 265 | handleQuery() { | 279 | handleQuery() { |
| @@ -274,9 +288,8 @@ export default { | @@ -274,9 +288,8 @@ export default { | ||
| 274 | }, | 288 | }, |
| 275 | /** 新增按钮操作 */ | 289 | /** 新增按钮操作 */ |
| 276 | handleAdd() { | 290 | handleAdd() { |
| 277 | - this.$router.push({ | ||
| 278 | - path:"/bpm/manager/model/edit" | ||
| 279 | - }); | 291 | + this.reset(); |
| 292 | + this.open = true; | ||
| 280 | }, | 293 | }, |
| 281 | /** 修改按钮操作 */ | 294 | /** 修改按钮操作 */ |
| 282 | handleUpdate(row) { | 295 | handleUpdate(row) { |
| @@ -287,6 +300,19 @@ export default { | @@ -287,6 +300,19 @@ export default { | ||
| 287 | } | 300 | } |
| 288 | }); | 301 | }); |
| 289 | }, | 302 | }, |
| 303 | + /** 提交按钮 */ | ||
| 304 | + submitForm() { | ||
| 305 | + this.$refs["form"].validate(valid => { | ||
| 306 | + if (!valid) { | ||
| 307 | + return; | ||
| 308 | + } | ||
| 309 | + createModel(this.form).then(response => { | ||
| 310 | + this.msgSuccess("新增成功"); | ||
| 311 | + this.open = false; | ||
| 312 | + this.getList(); | ||
| 313 | + }); | ||
| 314 | + }); | ||
| 315 | + }, | ||
| 290 | /** 删除按钮操作 */ | 316 | /** 删除按钮操作 */ |
| 291 | handleDelete(row) { | 317 | handleDelete(row) { |
| 292 | const that = this; | 318 | const that = this; |