index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div class="app-container">
  3. <!--工具栏-->
  4. <div class="head-container">
  5. <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
  6. <crudOperation :permission="permission" />
  7. <dmUserTemp @on-change="dmUserCallbackFunc" />
  8. <!--表单组件-->
  9. <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
  10. <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
  11. <el-form-item label="系统名称" prop="systemName">
  12. <el-input v-model="form.systemName" style="width: 370px;" />
  13. </el-form-item>
  14. <el-form-item label="系统地址" prop="systemUrl">
  15. <el-input v-model="form.systemUrl" style="width: 370px;" />
  16. </el-form-item>
  17. <el-form-item label="系统图标" prop="storageId">
  18. <!-- <el-input v-model="form.storageId" style="width: 370px;" />-->
  19. <el-upload
  20. class="avatar-uploader"
  21. :action="imagesUploadApi"
  22. :show-file-list="false"
  23. :on-success="handleAvatarSuccess"
  24. :file-list="fileList"
  25. >
  26. <img v-if="imageUrl" :src="imageUrl" class="avatar">
  27. <i v-else class="el-icon-plus avatar-uploader-icon" />
  28. </el-upload>
  29. </el-form-item>
  30. <el-form-item label="管理员" prop="dmUser.name">
  31. <el-input v-model="form.dmUser.name" style="width: 370px;" @click.native="openDmList(form)" />
  32. </el-form-item>
  33. </el-form>
  34. <div slot="footer" class="dialog-footer">
  35. <el-button type="text" @click="crud.cancelCU">取消</el-button>
  36. <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
  37. </div>
  38. </el-dialog>
  39. <!--表格渲染-->
  40. <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
  41. <el-table-column type="selection" width="55" />
  42. <el-table-column prop="systemName" label="子系统名称" />
  43. <el-table-column prop="dmUser.name" label="子系统管理员" />
  44. <el-table-column prop="createTime" label="创建时间" />
  45. <el-table-column prop="updateTime" label="更新时间" />
  46. <el-table-column v-if="checkPer(['admin','dmSystem:edit','dmSystem:del'])" label="操作" width="150px" align="center">
  47. <template slot-scope="scope">
  48. <udOperation
  49. :data="scope.row"
  50. :permission="permission"
  51. />
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. <!--分页组件-->
  56. <pagination />
  57. </div>
  58. </div>
  59. </template>
  60. <script>
  61. import { mapGetters } from 'vuex'
  62. import crudDmSystem from '@/api/dm/system/dmSystem'
  63. import CRUD, { presenter, header, form, crud } from '@crud/crud'
  64. import rrOperation from '@crud/RR.operation'
  65. import crudOperation from '@crud/CRUD.operation'
  66. import udOperation from '@crud/UD.operation'
  67. import pagination from '@crud/Pagination'
  68. import dmUserTemp from '@/components/User/dmUserindex'
  69. const defaultForm = { systemName: null, systemUrl: null, storage: {}, dmUser: {}}
  70. export default {
  71. name: 'DmSystem',
  72. components: { pagination, crudOperation, rrOperation, udOperation, dmUserTemp },
  73. mixins: [presenter(), header(), form(defaultForm), crud()],
  74. cruds() {
  75. return CRUD({ title: '子系统', url: 'api/dmSystem', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmSystem }})
  76. },
  77. data() {
  78. return {
  79. permission: {
  80. add: ['admin', 'dmSystem:add'],
  81. edit: ['admin', 'dmSystem:edit'],
  82. del: ['admin', 'dmSystem:del']
  83. },
  84. rules: {
  85. systemName: [
  86. { required: true, message: '子系统名称不能为空', trigger: 'blur' }
  87. ],
  88. systemUrl: [
  89. { required: true, message: '子系统地址不能为空', trigger: 'blur' }
  90. ],
  91. storageId: [
  92. { required: true, message: '图片不能为空', trigger: 'blur' }
  93. ],
  94. userId: [
  95. { required: true, message: '子系统管理员不能为空', trigger: 'blur' }
  96. ]
  97. },
  98. imageUrl: '',
  99. fileList: []
  100. }
  101. },
  102. computed: {
  103. ...mapGetters([
  104. 'baseApi',
  105. 'imagesUploadApi' // 图片上传
  106. ])
  107. },
  108. methods: {
  109. // 钩子:在获取表格数据之前执行,false 则代表不获取数据
  110. [CRUD.HOOK.beforeRefresh]() {
  111. return true
  112. },
  113. handleAvatarSuccess(res, file) {
  114. this.form.storageId = res.id
  115. this.form.storage = res
  116. this.imageUrl = res.url
  117. console.log('res', res)
  118. console.log('file', file)
  119. },
  120. openDmList(form) {
  121. this.crud.doOpenDmUser(form)
  122. console.log(form)
  123. },
  124. dmUserCallbackFunc(userList) {
  125. this.form.dmUser = userList[0]
  126. }
  127. }
  128. }
  129. </script>
  130. <style lang="scss" scoped>
  131. .avatar-uploader {
  132. ::v-deep .el-upload {
  133. border: 1px dashed #d9d9d9;
  134. border-radius: 6px;
  135. cursor: pointer;
  136. position: relative;
  137. overflow: hidden;
  138. }
  139. ::v-deep .el-upload:hover {
  140. border-color: #409EFF;
  141. }
  142. }
  143. .avatar-uploader-icon {
  144. font-size: 28px;
  145. color: #8c939d;
  146. width: 178px;
  147. height: 178px;
  148. line-height: 178px;
  149. text-align: center;
  150. }
  151. .avatar {
  152. width: 178px;
  153. height: 178px;
  154. display: block;
  155. }
  156. </style>