mapDialog.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <script setup>
  2. import { ref } from "vue";
  3. import { raiInterface } from "@/api/api.js";
  4. import { ElMessage } from "element-plus";
  5. const props = defineProps({
  6. isShowDia: Boolean,
  7. title: String,
  8. nodeData: Object,
  9. });
  10. const emit = defineEmits(["over", "cancel"]);
  11. const add_name = ref("");
  12. /* 保存 */
  13. const saveHandle = () => {
  14. switch (title) {
  15. case "add":
  16. addNode();
  17. break;
  18. case "edit":
  19. editNode();
  20. break;
  21. case "del":
  22. delNode();
  23. break;
  24. }
  25. };
  26. /* 新增节点 */
  27. const addNode = () => {
  28. if (add_name) {
  29. raiInterface
  30. .addNode({
  31. IndustryMapId: props.nodeData.id,
  32. IndustryMapName: add_name,
  33. Level: props.nodeData.level,
  34. })
  35. .then((res) => {
  36. if (res.Ret === 200) {
  37. emit("over");
  38. ElMessage.success(res.Msg);
  39. }
  40. });
  41. } else {
  42. ElMessage.warning("子级名称不能为空");
  43. }
  44. };
  45. /* 修改 */
  46. const editNode = () => {
  47. raiInterface
  48. .editNode({
  49. IndustryMapId: props.nodeData.id,
  50. IndustryMapName: props.nodeData.name,
  51. })
  52. .then((res) => {
  53. if (res.Ret === 200) {
  54. emit("over");
  55. ElMessage.success(res.Msg);
  56. }
  57. });
  58. };
  59. /* 删除节点 */
  60. const delNode = () => {
  61. raiInterface
  62. .delNode({
  63. IndustryMapId: props.nodeData.id,
  64. })
  65. .then((res) => {
  66. if (res.Ret === 200) {
  67. ElMessage.success("已删除");
  68. emit("over");
  69. }
  70. });
  71. };
  72. /* 取消 */
  73. const cancelHandle = () => {
  74. add_name.value = "";
  75. emit("cancel");
  76. };
  77. </script>
  78. <template>
  79. <el-dialog draggable v-model="props.isShowDia" :close-on-click-modal="false" :modal-append-to-body="false" @close="cancelHandle" custom-class="map_dialog" width="450px">
  80. <template #header>
  81. <span style="font-size: 16px">{{ props.title == "add" ? "新增子级" : "edit" ? "编辑" : "删除" }}</span>
  82. </template>
  83. <div class="dialog_cont">
  84. <!-- 新增子级 -->
  85. <template v-if="props.title == 'add'">
  86. <div class="node_name">父级名称:&nbsp;{{ nodeData.name }}</div>
  87. <el-input v-model="add_name" placeholder="请输入子级名称" class="node_ipt" @keyup.enter.native="saveHandle"> </el-input>
  88. </template>
  89. <!-- 编辑 -->
  90. <el-input v-model="nodeData.name" placeholder="请输入名称" class="node_ipt" v-else-if="props.title == 'edit'" @keyup.enter.native="saveHandle"> </el-input>
  91. <!-- 删除 -->
  92. <div class="node_name" v-else-if="props.title == 'del'">确定要删除此节点吗?</div>
  93. </div>
  94. <div style="display: flex; justify-content: center; margin-top: 40px">
  95. <el-button type="primary" style="width: 80px; marginright: 24px" @click="saveHandle">确定</el-button>
  96. <el-button type="primary" plain style="width: 80px" @click="cancelHandle">取消</el-button>
  97. </div>
  98. </el-dialog>
  99. </template>
  100. <style lang="scss" scoped>
  101. .dialog_cont {
  102. display: flex;
  103. padding: 0 10px;
  104. .node_name {
  105. display: flex;
  106. align-items: center;
  107. flex-shrink: 0;
  108. font-size: 15px;
  109. }
  110. }
  111. </style>