edit.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div class="system-edit-dept-container">
  3. <el-dialog :title="(ruleForm.id?'修改':'添加')+'分类'" v-model="isShowDialog" width="769px">
  4. <el-form ref="formRef" :model="ruleForm" :rules="rules" size="default" label-width="90px">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
  7. <el-form-item label="上级分类">
  8. <el-cascader :options="deptData" :props="{ checkStrictly: true,emitPath: false, value: 'id', label: 'name' }" placeholder="请选择分类" clearable class="w100" v-model="ruleForm.parentId">
  9. <template #default="{ node, data }">
  10. <span>{{ data.name }}</span>
  11. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  12. </template>
  13. </el-cascader>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
  17. <el-form-item label="分类名称" prop="name">
  18. <el-input v-model="ruleForm.name" placeholder="请输入分类名称" clearable></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
  22. <el-form-item label="分类标识" prop="key">
  23. <el-input v-model="ruleForm.key" placeholder="请输入分类名称" clearable></el-input>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
  27. <el-form-item label="描述">
  28. <el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入描述" maxlength="150"></el-input>
  29. </el-form-item>
  30. </el-col>
  31. </el-row>
  32. </el-form>
  33. <template #footer>
  34. <span class="dialog-footer">
  35. <el-button @click="onCancel" size="default">取 消</el-button>
  36. <el-button type="primary" @click="onSubmit" size="default">{{ruleForm.id?'修 改':'添 加'}}</el-button>
  37. </span>
  38. </template>
  39. </el-dialog>
  40. </div>
  41. </template>
  42. <script lang="ts">
  43. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  44. import api from '/@/api/device';
  45. import { phoneValidate } from '/@/utils/validator';
  46. import { ElMessage } from 'element-plus';
  47. interface RuleFormState {
  48. id?: number;
  49. parentId: number;
  50. name: string;
  51. key: string;
  52. desc: string;
  53. children?: RuleFormState[];
  54. }
  55. interface DeptSate {
  56. isShowDialog: boolean;
  57. ruleForm: RuleFormState;
  58. deptData: RuleFormState[];
  59. orgData: any[];
  60. rules: object;
  61. }
  62. const baseForm: RuleFormState = {
  63. parentId: 0, // 上级分类
  64. name: '', // 分类名称
  65. key: '',
  66. desc: '',
  67. };
  68. export default defineComponent({
  69. name: 'deviceEditCate',
  70. setup(prop, { emit }) {
  71. const formRef = ref<HTMLElement | null>(null);
  72. const state = reactive<DeptSate>({
  73. isShowDialog: false,
  74. ruleForm: {
  75. ...baseForm,
  76. },
  77. deptData: [], // 分类数据
  78. orgData: [], // 组织数据
  79. rules: {
  80. name: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  81. key: [{ required: true, message: '分类标识不能为空', trigger: 'blur' }],
  82. },
  83. });
  84. // 打开弹窗
  85. const openDialog = (row?: RuleFormState | number) => {
  86. resetForm();
  87. api.category.getList({ status: 1 }).then((res: any) => {
  88. state.deptData = res.category || [];
  89. });
  90. if (row && typeof row === 'object') {
  91. state.ruleForm = row;
  92. } else if (row && typeof row === 'number') {
  93. state.ruleForm.parentId = row;
  94. }
  95. state.isShowDialog = true;
  96. };
  97. // 关闭弹窗
  98. const closeDialog = () => {
  99. state.isShowDialog = false;
  100. };
  101. // 取消
  102. const onCancel = () => {
  103. closeDialog();
  104. };
  105. // 新增
  106. const onSubmit = () => {
  107. console.log(state.ruleForm.parentId);
  108. const formWrap = unref(formRef) as any;
  109. if (!formWrap) return;
  110. formWrap.validate((valid: boolean) => {
  111. if (valid) {
  112. console.log(state.ruleForm);
  113. console.log(state.ruleForm.parentId);
  114. if (!state.ruleForm.parentId) {
  115. state.ruleForm.parentId = 0;
  116. }
  117. console.log(state.ruleForm.parentId);
  118. if (!state.ruleForm.id) {
  119. //添加
  120. api.category.add(state.ruleForm).then(() => {
  121. ElMessage.success('分类添加成功');
  122. closeDialog(); // 关闭弹窗
  123. emit('getCateList');
  124. });
  125. } else {
  126. //修改
  127. api.category.edit(state.ruleForm).then(() => {
  128. ElMessage.success('分类修改成功');
  129. closeDialog(); // 关闭弹窗
  130. emit('getCateList');
  131. });
  132. }
  133. }
  134. });
  135. };
  136. const resetForm = () => {
  137. state.ruleForm = {
  138. ...baseForm,
  139. };
  140. };
  141. return {
  142. openDialog,
  143. closeDialog,
  144. onCancel,
  145. onSubmit,
  146. formRef,
  147. ...toRefs(state),
  148. };
  149. },
  150. });
  151. </script>