EditClassDialog.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <Dialog custom-show draggable :title="!id ? '新增分类' : '修改分类'" @close="handleCancel" @confirm="submitForm(classFormRef)">
  3. <el-form ref="classFormRef" :model="form" :rules="rules">
  4. <el-form-item label="分类名称:" label-width="200px" prop="name">
  5. <el-input v-model="form.name" class="custom-input2" placeholder="请输入分类名称" />
  6. </el-form-item>
  7. <el-form-item label="分类值:" label-width="200px" prop="value">
  8. <el-input v-model="form.value" class="custom-input2" placeholder="请输入分类值" />
  9. </el-form-item>
  10. <el-form-item label="图标:" label-width="200px" prop="fileList">
  11. <FileUpload v-model="form.fileList" :file-type="['jpg', 'jpeg', 'png']" :limit="1" :file-size="20" :is-show-tip="false" class="upload-box" />
  12. </el-form-item>
  13. <el-form-item v-if="form.value === 'marker'" label="图标宽度:" label-width="200px" prop="size.0">
  14. <el-input v-model="form.size[0]" class="custom-input2" placeholder="请输入图标宽度" />
  15. </el-form-item>
  16. <el-form-item v-if="form.value === 'marker'" label="图标高度:" label-width="200px" prop="size.1">
  17. <el-input v-model="form.size[1]" class="custom-input2" placeholder="请输入图标高度" />
  18. </el-form-item>
  19. <el-form-item label="排序:" label-width="200px" prop="order_num">
  20. <el-input v-model="form.order_num" class="custom-input2" placeholder="请输入排序" />
  21. </el-form-item>
  22. <el-form-item label="状态:" label-width="200px" prop="visible">
  23. <el-select
  24. v-model="form.visible"
  25. placeholder="请选择"
  26. class="custom-select"
  27. size="large"
  28. popper-class="custom-select-popper"
  29. :teleported="false"
  30. clearable
  31. >
  32. <el-option v-for="item in show_status" :key="item.value" :label="item.label" :value="item.value"></el-option>
  33. </el-select>
  34. </el-form-item>
  35. </el-form>
  36. </Dialog>
  37. </template>
  38. <script lang="ts" setup name="EditClassDialog">
  39. import { createClassification, getClassificationInfo, updateClassificationInfo } from '@/api/globalMap/onlinePlotting';
  40. import { FormInstance } from 'element-plus';
  41. import { deepClone } from '@/utils';
  42. import { toRefs } from 'vue';
  43. import { showSuccessMsg } from '@/utils/notification';
  44. const props = defineProps({
  45. modelValue: Boolean,
  46. id: String,
  47. templateId: String
  48. });
  49. const emits = defineEmits(['update:modelValue', 'updateData']);
  50. const proxy = getCurrentInstance()?.proxy;
  51. const { show_status } = toRefs<any>(proxy?.useDict('show_status'));
  52. let classFormRef = ref();
  53. const form = ref<ClassParams>({
  54. name: '',
  55. value: '',
  56. image: '',
  57. icon: '',
  58. order_num: '',
  59. visible: '1',
  60. fileList: [],
  61. size: []
  62. });
  63. const rules = ref({
  64. name: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  65. value: [{ required: true, message: '分类值不能为空', trigger: 'blur' }],
  66. image: [{ required: true, message: '图标不能为空', trigger: 'blur' }]
  67. });
  68. // 取消
  69. const handleCancel = () => {
  70. emits('update:modelValue');
  71. };
  72. //提交
  73. const submitForm = async (formEl: FormInstance | undefined) => {
  74. if (!formEl) return;
  75. await formEl.validate((valid) => {
  76. if (valid) {
  77. const data = deepClone(form.value);
  78. data.image = data.fileList[0].url;
  79. data.icon = data.fileList[0].name;
  80. data.template_id = props.templateId;
  81. delete data.fileList;
  82. if (!data.order_num) {
  83. delete data.order_num;
  84. }
  85. if (!data.visible) {
  86. delete data.visible;
  87. }
  88. if (!!props.id) {
  89. updateClassificationInfo(props.id, data).then(() => {
  90. showSuccessMsg('修改成功');
  91. emits('updateData');
  92. emits('update:modelValue');
  93. });
  94. } else {
  95. createClassification(data).then(() => {
  96. showSuccessMsg('新增成功');
  97. emits('updateData');
  98. emits('update:modelValue');
  99. });
  100. }
  101. }
  102. });
  103. };
  104. onMounted(() => {
  105. if (props.id) {
  106. getClassificationInfo(props.id).then((res) => {
  107. res.data.fileList = [
  108. {
  109. name: res.data.icon,
  110. url: res.data.image
  111. }
  112. ];
  113. form.value = res.data;
  114. });
  115. }
  116. });
  117. </script>
  118. <style lang="scss" scoped></style>