You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
4.5 KiB

  1. <!-- 投诉建议 -->
  2. <template>
  3. <view class="complain">
  4. <mNavbar title="投诉建议" :leftClick="leftClick"></mNavbar>
  5. <view class="content">
  6. <view class="c-input">
  7. <textarea v-model="form.suggestion" :maxlength="maxNum" @input="GetNumber"
  8. placeholder="请输入投诉/建议的内容....."></textarea>
  9. <view class="input-num">{{ inputNum }} / {{ maxNum }}</view>
  10. </view>
  11. <view class="c-input">
  12. <input v-model="remark" type="text" placeholder="备注(选填)" />
  13. </view>
  14. <!-- 上传图片 -->
  15. <view class="upload">
  16. <view class="upload-title">上传图片/视频</view>
  17. <view class="image-list">
  18. <view @click="selectImg(item)" v-for="(item,index) in form.images" class="image-item">
  19. <image :src="item" mode=""></image>
  20. </view>
  21. <view @click="fileUploads" v-if="uploadNum < maxUploadNum" class="add-img-btn">
  22. <image src="/static/complain/img.png" mode="scaleToFill"></image>
  23. </view>
  24. </view>
  25. </view>
  26. </view>
  27. <view class="add-btn">
  28. <view @click="complain" class="btn">
  29. 提交审核
  30. </view>
  31. </view>
  32. <van-action-sheet v-model:show="show" :actions="actions" @select="selectionOperation" />
  33. </view>
  34. </template>
  35. <script>
  36. import mNavbar from '@/components/base/m-navbar.vue'
  37. import { showImagePreview } from 'vant';
  38. export default {
  39. components: {
  40. mNavbar
  41. },
  42. data() {
  43. return {
  44. maxNum: 600, //最大输入字数
  45. inputNum: 0, //已输入的字数
  46. form: {
  47. suggestion: '', //投诉建议,内容
  48. images : [],
  49. remark : ''
  50. },
  51. actions: [{
  52. index : 0,
  53. name: '查看图片'
  54. },
  55. {
  56. index : 1,
  57. name: '删除图片'
  58. }
  59. ],
  60. show : false,
  61. maxUploadNum : 5, //最大上传5张
  62. currentImg : null, //用户点击的图片
  63. uploadNum : 0, //已上传张数
  64. }
  65. },
  66. methods: {
  67. //返回个人中心
  68. leftClick() {
  69. uni.switchTab({
  70. url: '/pages/index/center'
  71. })
  72. },
  73. //获取输入字数
  74. GetNumber(e) {
  75. this.inputNum = e.detail.cursor;
  76. },
  77. //投诉
  78. complain() {
  79. },
  80. //用户选择查看图片或者删除图片
  81. selectionOperation(item){
  82. let { index } = item
  83. if(index){
  84. this.removeImg()
  85. }else{
  86. this.viewImg()
  87. }
  88. },
  89. //图片列表删除一张图片
  90. removeImg(){
  91. this.form.images = this.form.images.filter(item => {
  92. return item != this.currentImg
  93. })
  94. this.show = false
  95. this.uploadNum = this.form.images.length
  96. },
  97. //查看图片
  98. viewImg(){
  99. showImagePreview([this.currentImg]);
  100. },
  101. //选择图片
  102. selectImg(item){
  103. this.show = true;
  104. this.currentImg = item;
  105. },
  106. //图片上传
  107. fileUploads() {
  108. uni.chooseImage({
  109. count: 1, // 默认9,设置为1表示单选
  110. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  111. sourceType: ['album'], // 可以指定来源是相册还是相机,默认二者都有
  112. success: (res) => {
  113. let resultPromise = [];
  114. //上传单张图片逻辑
  115. this.uploadFileToOSS(res.tempFiles[0]).then(imgPath => {
  116. this.form.images.push(imgPath)
  117. this.uploadNum++
  118. })
  119. }
  120. });
  121. },
  122. }
  123. }
  124. </script>
  125. <style lang="scss" scoped>
  126. .complain {
  127. .content {
  128. width: 96%;
  129. margin: 0rpx auto;
  130. padding-bottom: 80rpx;
  131. .c-input {
  132. background: #F6F6F6;
  133. border-radius: 20rpx;
  134. margin-top: 20rpx;
  135. box-sizing: border-box;
  136. padding: 40rpx;
  137. textarea {
  138. width: 100%;
  139. }
  140. .input-num {
  141. text-align: right;
  142. color: #BCB7B7;
  143. font-size: 22rpx;
  144. }
  145. }
  146. .upload {
  147. .upload-title {
  148. margin: 30rpx 0rpx;
  149. }
  150. .image-list {
  151. display: flex;
  152. flex-wrap: wrap;
  153. justify-content: space-between;
  154. .image-item,
  155. .add-img-btn {
  156. width: calc(375rpx - 10px);
  157. height: calc(375rpx - 10px);
  158. overflow: hidden;
  159. border-radius: 20rpx;
  160. box-sizing: border-box;
  161. border: 2px dashed #ccc;
  162. margin-bottom: 25rpx;
  163. image {
  164. width: calc(375rpx - 10px);
  165. height: calc(375rpx - 10px);
  166. }
  167. }
  168. }
  169. }
  170. }
  171. .add-btn {
  172. position: fixed;
  173. display: flex;
  174. justify-content: center;
  175. align-items: center;
  176. left: 0;
  177. bottom: 0;
  178. width: 750rpx;
  179. height: 100rpx;
  180. background: white;
  181. .btn {
  182. display: flex;
  183. align-items: center;
  184. justify-content: center;
  185. width: 85%;
  186. height: 80rpx;
  187. border-radius: 40rpx;
  188. color: white;
  189. text-align: center;
  190. font-size: 28rpx;
  191. background: #EF8C94;
  192. }
  193. }
  194. }
  195. </style>