leaveMsg.vue 4.2 KB

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