edit.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <div class="cmain">
  3. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  4. <el-form-item label="上级科室" prop="parentId" v-if="form.parentId !== 0">
  5. <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级科室" />
  6. </el-form-item>
  7. <el-form-item label="科室名称" prop="deptName"><el-input v-model="form.deptName" placeholder="请输入科室名称" /></el-form-item>
  8. <div v-if="form.parentId != 0">
  9. <el-form-item label="科室介绍" prop="brief">
  10. <editor v-model="form.brief" placeholder="请输入"></editor>
  11. </el-form-item>
  12. </div>
  13. <el-row>
  14. <el-col :span="10">
  15. <el-form-item label="显示排序" prop="orderNum"><el-input-number v-model="form.orderNum" controls-position="right" :min="0" /></el-form-item>
  16. </el-col>
  17. <el-col :span="8">
  18. <el-form-item label="科室状态">
  19. <el-radio-group v-model="form.status">
  20. <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
  21. </el-radio-group>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. </el-form>
  26. <div class="mfooter">
  27. <el-button type="primary" @click="submitForm">确 定</el-button>
  28. <el-button @click="$layer.close(layerid)">取 消</el-button>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from '@/api/system/dept';
  34. import Treeselect from '@riophae/vue-treeselect';
  35. import '@riophae/vue-treeselect/dist/vue-treeselect.css';
  36. export default {
  37. dicts: ['sys_normal_disable'],
  38. components: { Treeselect },
  39. data() {
  40. return {
  41. form: { ancestors: [], brief: '', status: '0' },
  42. deptOptions: [],
  43. rules: {
  44. parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
  45. deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
  46. brief: [{ required: true, message: '科室介绍不能为空', trigger: 'blur' }],
  47. orderNum: [{ required: true, message: '显示排序不能为空', trigger: 'blur' }]
  48. }
  49. };
  50. },
  51. mounted() {
  52. if (this.param.id) {
  53. getDept(this.param.id).then((response) => {
  54. this.form = response.data;
  55. this.form.ancestors = this.form.ancestors.split(',') || [];
  56. listDeptExcludeChild(this.param.id).then((response) => {
  57. this.deptOptions = this.handleTree(response.data, 'deptId');
  58. if (this.deptOptions.length == 0) {
  59. const noResultsOptions = { deptId: this.form.parentId, deptName: this.form.parentName, children: [] };
  60. this.deptOptions.push(noResultsOptions);
  61. }
  62. });
  63. });
  64. } else {
  65. listDept().then((response) => {
  66. this.deptOptions = this.handleTree(response.data, 'deptId');
  67. });
  68. this.form.parentId = this.param.parentId;
  69. this.form.ancestors = this.param.ancestors;
  70. this.form.ancestors.push(1);
  71. }
  72. },
  73. methods: {
  74. /** 转换部门数据结构 */
  75. normalizer(node) {
  76. if (node.children && !node.children.length) {
  77. delete node.children;
  78. }
  79. return {
  80. id: node.deptId,
  81. label: node.deptName,
  82. children: node.children
  83. };
  84. },
  85. submitForm: function () {
  86. this.$refs['form'].validate((valid) => {
  87. if (valid) {
  88. let data = JSON.parse(JSON.stringify(this.form));
  89. data.ancestors = data.ancestors.toString();
  90. if (this.form.deptId != undefined) {
  91. updateDept(data).then((response) => {
  92. this.$modal.msgSuccess('修改成功');
  93. this.$layer.close(this.layerid);
  94. this.$parent.getList();
  95. });
  96. } else {
  97. addDept(data).then((response) => {
  98. this.$modal.msgSuccess('新增成功');
  99. this.$layer.close(this.layerid);
  100. this.$parent.getList();
  101. });
  102. }
  103. }
  104. });
  105. }
  106. }
  107. };
  108. </script>