艺易修小程序24.08.21
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.

191 lines
4.2 KiB

8 months ago
8 months ago
8 months ago
  1. <!-- 结单 -->
  2. <template>
  3. <view class="finish">
  4. <!-- <navbar title="结单" :leftClick="leftClick"></navbar> -->
  5. <uv-form labelPosition="top" :model="form" :rules="rules" ref="form" labelWidth="140">
  6. <uv-form-item label="处理结果" prop="form.processingResult">
  7. <uv-input @focus="processingPickerOpen" placeholder="请选择处理结果" v-model="form.processingResult"
  8. :fontSize="30"></uv-input>
  9. </uv-form-item>
  10. <uv-form-item label="收费金额" prop="form.money">
  11. <uv-input placeholder="请输入收费金额" type="number" v-model="form.money" :fontSize="30"></uv-input>
  12. </uv-form-item>
  13. <uv-form-item label="处理说明" prop="form.instructions">
  14. <uv-textarea v-model="form.instructions" :maxlength="200" :height="120" count
  15. placeholder="请输入处理说明"></uv-textarea>
  16. </uv-form-item>
  17. <uv-form-item label="照片" prop="form.images">
  18. <view class="image-list">
  19. <view @click="openImageMenu(index)" v-for="(item,index) in form.images" :key="index"
  20. class="image-item">
  21. <image :src="item" mode="widthFix"></image>
  22. </view>
  23. <view v-if="form.images.length < maxUpload" @click="chooseImage" class="upload">
  24. <uv-icon name="camera-fill" color="#3c9cff" size="50"></uv-icon>
  25. </view>
  26. </view>
  27. </uv-form-item>
  28. <uv-button type="primary" text="结单" shape="circle" customStyle="margin-top: 10px"
  29. @click="submit"></uv-button>
  30. <!-- 选择完成状态 -->
  31. <uv-picker ref="processing" :columns="processingList" :itemHeight="100" :round="20" keyName="label"
  32. title="选择处理结果" @confirm="floorConfirm"></uv-picker>
  33. <!-- 图片操作菜单 -->
  34. <uv-action-sheet ref="actionSheet" :actions="list" :round="20" cancelText="取消" title="图片操作"
  35. @select="selectImageSheet"> </uv-action-sheet>
  36. </uv-form>
  37. </view>
  38. </template>
  39. <script>
  40. import navbar from '../../components/base/navbar.vue'
  41. export default {
  42. name: 'Finish',
  43. components: {
  44. navbar
  45. },
  46. data() {
  47. return {
  48. form: {
  49. processingResult: '',
  50. money: 0,
  51. instructions: '',
  52. images: []
  53. },
  54. rules: {
  55. },
  56. processingList: [
  57. [{
  58. id: 0,
  59. label: '已处理'
  60. },
  61. {
  62. id: 1,
  63. label: '未处理'
  64. }
  65. ]
  66. ],
  67. maxUpload: 4,
  68. currentIndex: 0,
  69. list: [ //图片操作菜单操作项
  70. {
  71. name: '查看图片',
  72. id: 0
  73. },
  74. {
  75. name: '删除图片',
  76. id: 1
  77. }
  78. ],
  79. }
  80. },
  81. methods: {
  82. //返回
  83. leftClick() {
  84. uni.switchTab({
  85. url: '/pages/repairList/repairList'
  86. })
  87. },
  88. //打开处理结果
  89. processingPickerOpen() {
  90. this.$refs.processing.open();
  91. },
  92. //用户选择了处理结果
  93. floorConfirm(floor) {
  94. this.form.processingResult = floor.value[0].label
  95. },
  96. //选择文件
  97. chooseImage() {
  98. this.$utils.chooseImage(res => {
  99. res.tempFiles.forEach(file => {
  100. console.log(file);
  101. this.aliUpload(file)
  102. })
  103. })
  104. },
  105. //阿里云oss上传
  106. aliUpload(file) {
  107. this.$uploadFileToOSS(file).then(filePath => {
  108. this.form.images.push(filePath)
  109. })
  110. },
  111. //打开图片操作菜单
  112. openImageMenu(index) {
  113. this.currentIndex = index
  114. this.$refs.actionSheet.open();
  115. },
  116. //用户选择了图片操作选项
  117. selectImageSheet(imageSheet) {
  118. let {
  119. id
  120. } = imageSheet
  121. if (id) {
  122. this.deleteImageAsList()
  123. } else {
  124. this.viewImageAsList()
  125. }
  126. },
  127. //查看图片
  128. viewImageAsList() {
  129. this.$utils.previewImage({
  130. current: this.currentIndex,
  131. urls: this.form.images
  132. })
  133. },
  134. //删除图片
  135. deleteImageAsList() {
  136. this.form.images = this.form.images.filter((_, index) => {
  137. return index != this.currentIndex
  138. })
  139. },
  140. }
  141. }
  142. </script>
  143. <style>
  144. .finish {
  145. width: 96%;
  146. margin: 0rpx auto;
  147. }
  148. .image-list {
  149. width: 100%;
  150. display: flex;
  151. flex-wrap: wrap;
  152. padding-top: 20rpx;
  153. }
  154. .image-item,
  155. .upload {
  156. display: flex;
  157. align-items: center;
  158. justify-content: center;
  159. width: 24%;
  160. height: 174rpx;
  161. background: #f8f8f8;
  162. margin-left: 1%;
  163. border-radius: 15rpx;
  164. overflow: hidden;
  165. margin-bottom: 20rpx;;
  166. }
  167. .image-item image {
  168. width: 100%;
  169. }
  170. </style>