leaveMsg.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <com-dialog
  3. title="留言"
  4. enterText="发表留言"
  5. :show="show"
  6. power="message:add"
  7. @submit="oper.readyInsert"
  8. @update:show="val => $emit('update:show', val)"
  9. >
  10. <div class="body-layer" style="padding: 0">
  11. <el-table
  12. ref="multipleTable"
  13. :data="dataList.state"
  14. tooltip-effect="dark"
  15. style="width: 100%;min-height:540px;max-height:540px"
  16. :span-method="arraySpanMethod"
  17. >
  18. <el-table-column label="留言内容" prop="content" v-slot:default="{ row }">
  19. <el-tooltip class="item" effect="dark" :content="row.content" placement="bottom-start" v-if="row.content && row.content.length > 30">
  20. <a class="msg-content">
  21. {{row.content.substr(0, 30)}}...
  22. </a>
  23. </el-tooltip>
  24. <a class="msg-content" v-else>
  25. {{row.content}}
  26. </a>
  27. </el-table-column>
  28. <el-table-column label="创建人" prop="userName" width="150"></el-table-column>
  29. <el-table-column label="创建日期" prop="createTime" v-slot:default="{row}" width="150">
  30. {{dateFormat(row.createTime)}}
  31. </el-table-column>
  32. </el-table>
  33. <com-pagination
  34. @size-change="pag.sizeChange"
  35. @current-change="pag.currentChange"
  36. :current-page="pag.state.currPage"
  37. :sizes="[10, 20]"
  38. :page-size="pag.state.size"
  39. :hide-sizes="true"
  40. layout="total, sizes, prev, pager, next, jumper"
  41. :total="pag.state.total"/>
  42. </div>
  43. </com-dialog>
  44. <com-dialog
  45. title="发表留言"
  46. v-model:show="oper.state.show"
  47. enterText="确 定"
  48. width="540"
  49. @submit="submit"
  50. >
  51. <el-form ref="form" :model="form" label-width="84px" class="leave-from">
  52. <el-input
  53. type="textarea"
  54. placeholder="请输入留言内容,限200字"
  55. maxlength="200"
  56. show-word-limit
  57. v-model="oper.state.content">
  58. </el-input>
  59. </el-form>
  60. </com-dialog>
  61. </template>
  62. <script>
  63. import getTableState from "@/state/tableRef";
  64. import {
  65. getMessageList,
  66. insertMessage,
  67. } from '@/request/config'
  68. import comDialog from "@/components/dialog";
  69. import comPagination from "@/components/pagination";
  70. import { watch } from 'vue';
  71. import { dateFormat } from '@/util'
  72. export default {
  73. name: 'archives',
  74. props: ['show', 'data'],
  75. setup(props) {
  76. console.log(props)
  77. const state = getTableState({
  78. getUrl: getMessageList,
  79. insertUrl: insertMessage,
  80. searchAttr: {pageSize: 10, projectId: props.data},
  81. operAttr: {
  82. content: '',
  83. projectId: props.data
  84. },
  85. });
  86. watch(props, () => {
  87. if (props.data === state.search.value.state.projectId) return
  88. state.search.value.state.projectId = props.data
  89. state.dataList.value.refer()
  90. })
  91. return { ...state, dateFormat(date) {
  92. // console.log()
  93. return dateFormat(new Date(date), 'yyyy-MM-dd hh:mm')
  94. } };
  95. },
  96. methods: {
  97. async submit() {
  98. this.oper.state.projectId = this.search.state.projectId
  99. if (!this.oper.state.content.trim()) {
  100. return this.$message.error('留言内容不能为空!', '提示')
  101. }
  102. try {
  103. await this.oper.state.id ? this.oper.update() : this.oper.insert()
  104. } catch {
  105. console.error('留言失败')
  106. }
  107. }
  108. },
  109. components: {
  110. "com-pagination": comPagination,
  111. "com-dialog": comDialog,
  112. }
  113. };
  114. </script>
  115. <style lang="scss" scoped>
  116. .table-ctrl-right {
  117. .search-scene {
  118. margin: 0 20px 0 26px;
  119. }
  120. i {
  121. margin-left: 20px;
  122. font-size: 1.7rem;
  123. vertical-align: middle;
  124. cursor: pointer;
  125. &.active {
  126. color: var(--primaryColor);
  127. }
  128. }
  129. }
  130. .leave-from {
  131. // width: 520px;
  132. margin: 0 auto;
  133. }
  134. .title {
  135. font-weight: bold;
  136. color: #26559B;
  137. line-height: 19px;
  138. font-size: 14px;
  139. }
  140. .msg-content {
  141. overflow:hidden; //超出的文本隐藏
  142. text-overflow:ellipsis; //溢出用省略号显示
  143. white-space:nowrap; //溢出不换行
  144. position: relative;
  145. cursor: pointer;
  146. }
  147. </style>
  148. <style>
  149. .leave-from textarea {
  150. height: 200px;
  151. }
  152. .el-popper:not(.el-cascader__dropdown) .el-popper__arrow {
  153. /* display: none !important; */
  154. }
  155. </style>