index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <div class="page_content">
  3. <div class="page_title">
  4. <div class="title">
  5. <svg-icon className="documentation" iconClass="documentation" />
  6. <span>公司部门</span>
  7. </div>
  8. </div>
  9. <div class="page_main">
  10. <div class="organi">
  11. <div class="outer">
  12. <DeptItem v-for="item in dataList" :data="item" :key="item.id" />
  13. </div>
  14. </div>
  15. </div>
  16. <!-- 添加或修改部门对话框 -->
  17. <el-dialog :title="title" :visible.sync="show" width="600px" append-to-body @close="cancel">
  18. <el-form ref="deptForm" :model="deptForm" :rules="deptFormRules" label-width="100px">
  19. <el-row>
  20. <el-col :span="24">
  21. <el-form-item label="上级部门">
  22. <el-input v-model="deptForm.parentName" disabled />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="24">
  26. <el-form-item label="部门名称" prop="deptName">
  27. <el-input v-model.trim="deptForm.deptName" placeholder="请输入部门名称" maxlength="20" show-word-limit />
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="24">
  31. <el-form-item label="公司简称">
  32. <ul class="short">
  33. <li v-for="item in shortList" :key="item.title">
  34. <span>{{ item.title }}</span>
  35. <input type="checkbox" :checked="item.checked" @change="shortChange(item.index, $event)" />
  36. </li>
  37. </ul>
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. </el-form>
  42. <div slot="footer" class="dialog-footer">
  43. <el-button size="small" @click="cancel">取 消</el-button>
  44. <el-button size="small" type="primary" @click="sub">保 存</el-button>
  45. </div>
  46. </el-dialog>
  47. </div>
  48. </template>
  49. <script>
  50. import { treeselect, addDept } from '@/api/system/dept.js'
  51. import DeptItem from './components/deptItem.vue'
  52. export default {
  53. components: { DeptItem },
  54. data() {
  55. return {
  56. checked: true,
  57. //组织架构数据
  58. dataList: [],
  59. //弹窗显示
  60. show: false,
  61. //弹窗标题
  62. title: '',
  63. //弹窗表单
  64. deptForm: {
  65. //上级部门id
  66. parentId: 0,
  67. //上级部门名称
  68. parentName: '',
  69. //部门名称
  70. deptName: '',
  71. //部门简称
  72. shortName: '',
  73. //简称索引
  74. shortNameIndex: ''
  75. },
  76. //表单验证
  77. deptFormRules: {}
  78. }
  79. },
  80. created() {
  81. treeselect().then(res => {
  82. if (res.code === 200) {
  83. this.dataList = res.data.map(item => {
  84. return {
  85. ...item,
  86. root: true
  87. }
  88. })
  89. }
  90. })
  91. },
  92. computed: {
  93. shortList() {
  94. return this.deptForm.deptName.split('').map((title, index) => {
  95. return {
  96. index,
  97. title,
  98. checked: true
  99. }
  100. })
  101. }
  102. },
  103. provide() {
  104. return {
  105. updData: this.updData,
  106. delData: this.delData,
  107. resetDel: this.resetDel
  108. }
  109. },
  110. methods: {
  111. //弹窗关闭
  112. cancel() {
  113. this.show = false
  114. this.resetForm()
  115. },
  116. //表单重置
  117. resetForm() {},
  118. //弹窗提交
  119. sub() {
  120. console.log(this.shortList)
  121. },
  122. //编辑部门
  123. updData(type, data) {
  124. this.show = true
  125. //添加
  126. if (type == 0) {
  127. this.title = '部门添加'
  128. this.deptForm.parentId = data.id
  129. this.deptForm.parentName = data.label
  130. } else {
  131. this.title = '部门修改'
  132. }
  133. },
  134. //简称索引改变
  135. shortChange(index, e) {},
  136. delData() {},
  137. resetDel() {}
  138. }
  139. }
  140. </script>
  141. <style scoped lang="scss">
  142. ::v-deep .org-chart-node-label {
  143. background-color: #199ed8;
  144. color: #fff;
  145. border-radius: 5px;
  146. }
  147. .organi {
  148. width: 100%;
  149. height: 100%;
  150. background-color: #fff;
  151. overflow: auto;
  152. padding: 30px;
  153. }
  154. .outer {
  155. width: auto;
  156. display: inline-block;
  157. }
  158. .short {
  159. display: flex;
  160. flex-wrap: wrap;
  161. li {
  162. height: 36px;
  163. line-height: 36px;
  164. margin-right: 10px;
  165. }
  166. }
  167. </style>