Blame view

pages-sub/daily/maintain-manage/add-record.vue 8.06 KB
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
1
  <template>
d433e7f6   刘淇   工单
2
3
    <view class="page-container">
      <view class="inspect-form-content commonPageLRpadding">
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
4
5
        <up-form
            label-position="left"
d433e7f6   刘淇   工单
6
7
8
            :model="inspectForm"
            ref="inspectFormRef"
            labelWidth="140rpx"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
9
        >
fa775c6b   刘淇   养护计划调整
10
          <!-- 1. 养护描述(文本域) -->
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
11
          <up-form-item
fa775c6b   刘淇   养护计划调整
12
              prop="remark"
d433e7f6   刘淇   工单
13
              class="form-item"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
14
          >
d433e7f6   刘淇   工单
15
            <up-textarea
ff65dc6c   刘淇   快速工单 样式优化
16
17
                v-model.trim="inspectForm.remark"
                placeholder="请输入养护描述"
d433e7f6   刘淇   工单
18
19
20
                maxlength="200"
                count
            ></up-textarea>
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
21
22
          </up-form-item>
  
d433e7f6   刘淇   工单
23
          <!-- 2. 上传图片 -->
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
24
          <up-form-item
d433e7f6   刘淇   工单
25
26
              label="上传图片"
              prop="images"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
27
              required
ff65dc6c   刘淇   快速工单 样式优化
28
  
d433e7f6   刘淇   工单
29
              class="form-item"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
30
          >
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
31
            <up-upload
d433e7f6   刘淇   工单
32
33
34
35
                :file-list="imagesList"
                @after-read="(event) => uploadImgs(event)"
                @delete="(event) => deleteImg(event)"
                @on-exceed="handleExceed"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
36
                multiple
d433e7f6   刘淇   工单
37
38
39
40
                :max-count="3"
                upload-text="选择图片"
                del-color="#ff4d4f"
                class="upload-wrap"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
41
42
43
            ></up-upload>
          </up-form-item>
  
ff65dc6c   刘淇   快速工单 样式优化
44
45
46
47
  <!--        &lt;!&ndash; 3. 完成进度(滑块) &ndash;&gt;-->
  <!--        <up-form-item-->
  <!--            label="完成进度"-->
  <!--            prop="progress"-->
b0e2f1a9   刘淇   快速工单和巡查计划样式优化
48
  
ff65dc6c   刘淇   快速工单 样式优化
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  <!--            class="form-item"-->
  <!--        >-->
  <!--          <view class="progress-wrap">-->
  <!--            <up-slider-->
  <!--                v-model="inspectForm.progress"-->
  <!--                :min="initProgress"-->
  <!--                :max="100"-->
  <!--                active-color="#1989fa"-->
  <!--                inactive-color="#e5e5e5"-->
  <!--                block-size="24"-->
  <!--                :showValue="true"-->
  <!--                class="progress-slider"-->
  <!--                @changing="handleProgressChange"-->
  <!--            ></up-slider>-->
  <!--          </view>-->
  <!--        </up-form-item>-->
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
65
66
67
68
69
70
71
        </up-form>
      </view>
  
      <!-- 底部提交按钮 -->
      <view class="fixed-bottom-btn-wrap">
        <up-button
            type="primary"
d433e7f6   刘淇   工单
72
73
74
            text="提交"
            @click="submitInspect"
            :style="{ width: '100%', height: '88rpx', fontSize: '32rpx', borderRadius: 0 }"
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
75
76
        ></up-button>
      </view>
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
77
78
79
80
    </view>
  </template>
  
  <script setup lang="ts">
d433e7f6   刘淇   工单
81
  import { ref } from 'vue'
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
82
  import type { UniFormRef } from '@/uni_modules/uview-plus/types'
d433e7f6   刘淇   工单
83
84
  const inspectFormRef = ref<UniFormRef>(null)
  </script>
7b1f488f   刘淇   封装下图片上传
85
  
d433e7f6   刘淇   工单
86
87
88
89
90
91
92
93
94
95
96
  <script lang="ts">
  import { uploadImages } from '@/common/utils/upload'
  import { maintainCreate } from "@/api/maintain-manage/maintain-manage"
  
  export default {
    data() {
      return {
        imagesList: [],
        initProgress: 0,
        inspectForm: {
          remark: '',
ff65dc6c   刘淇   快速工单 样式优化
97
          // progress: 0
d433e7f6   刘淇   工单
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
        },
        paramsOptins: {},
        inspectFormRules: {
          images: [
            {
              required: true,
              message: '请上传图片',
              trigger: 'change',
              validator: (rule, value, callback) => {
                const hasSuccessImg = this.imagesList.some(item => item.status === 'success')
                const imgCount = this.imagesList.filter(item => item.status === 'success').length
                if (!hasSuccessImg || imgCount < 1) {
                  callback(new Error('最少需要上传1张图片'))
                } else if (imgCount > 3) {
                  callback(new Error('最多只能上传3张图片'))
                } else {
                  callback()
                }
              }
            }
          ],
2f1e3176   刘淇   图片参数处理
119
  
d433e7f6   刘淇   工单
120
121
122
123
124
125
        }
      }
    },
    onLoad(option) {
      console.log('页面参数:', option)
      this.paramsOptins = option
2f1e3176   刘淇   图片参数处理
126
  
fa775c6b   刘淇   养护计划调整
127
  
d433e7f6   刘淇   工单
128
129
130
131
132
133
134
135
136
    },
    onReady() {
      this.$refs.inspectFormRef.setRules(this.inspectFormRules)
      console.log('巡查表单规则初始化完成')
    },
    methods: {
      /**
       * 进度滑块变化处理 - 核心优化:实时触发校验 + 状态更新
       */
2f1e3176   刘淇   图片参数处理
137
  
7b1f488f   刘淇   封装下图片上传
138
  
d433e7f6   刘淇   工单
139
140
141
142
143
144
145
146
147
      /**
       * 删除图片
       */
      deleteImg(event) {
        console.log('删除图片事件:', event)
        this.imagesList.splice(event.index, 1)
        this.$refs.inspectFormRef.validateField('images')
        uni.showToast({ title: '图片删除成功', icon: 'success' })
      },
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
148
  
d433e7f6   刘淇   工单
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
      /**
       * 上传图片
       */
      async uploadImgs(event) {
        console.log('上传图片事件:', event)
        const fileList = Array.isArray(event.file) ? event.file : [event.file]
        const targetImgList = this.imagesList
        const filePaths = fileList.map(item => item.url)
        const tempItems = fileList.map(item => ({
          ...item,
          status: 'uploading',
          message: '上传中'
        }))
        const startIndex = targetImgList.length
        targetImgList.push(...tempItems)
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
164
165
  
        try {
d433e7f6   刘淇   工单
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
          const uploadResultUrls = await uploadImages({
            filePaths: filePaths,
            ignoreError: true
          })
          console.log('上传成功的URL列表:', uploadResultUrls)
  
          uploadResultUrls.forEach((url, index) => {
            if (targetImgList[startIndex + index]) {
              targetImgList.splice(startIndex + index, 1, {
                ...fileList[index],
                status: 'success',
                message: '',
                url: url
              })
            }
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
181
          })
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
182
  
d433e7f6   刘淇   工单
183
184
185
186
187
188
189
190
191
192
193
194
          if (uploadResultUrls.length < fileList.length) {
            const failCount = fileList.length - uploadResultUrls.length
            for (let i = uploadResultUrls.length; i < fileList.length; i++) {
              if (targetImgList[startIndex + i]) {
                targetImgList.splice(startIndex + i, 1, {
                  ...fileList[i],
                  status: 'failed',
                  message: '上传失败'
                })
              }
            }
            uni.showToast({ title: `成功上传${uploadResultUrls.length}张,失败${failCount}张`, icon: 'none' })
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
195
          } else {
d433e7f6   刘淇   工单
196
            uni.showToast({ title: `成功上传${fileList.length}张图片`, icon: 'success' })
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
197
          }
d433e7f6   刘淇   工单
198
199
  
          this.$refs.inspectFormRef.validateField('images')
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
200
        } catch (err) {
d433e7f6   刘淇   工单
201
202
203
204
205
206
207
208
209
210
211
212
          console.error('图片上传失败:', err)
          for (let i = 0; i < fileList.length; i++) {
            if (targetImgList[startIndex + i]) {
              targetImgList.splice(startIndex + i, 1, {
                ...fileList[i],
                status: 'failed',
                message: '上传失败'
              })
            }
          }
          uni.showToast({ title: '图片上传失败,请重试', icon: 'none' })
          this.$refs.inspectFormRef.validateField('images')
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
213
214
        }
      },
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
215
  
d433e7f6   刘淇   工单
216
217
218
219
220
221
      /**
       * 处理图片超出数量限制
       */
      handleExceed() {
        uni.showToast({ title: '最多只能上传3张图片', icon: 'none' })
      },
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
222
  
d433e7f6   刘淇   工单
223
224
225
226
227
228
      /**
       * 提取图片URL数组
       */
      getImgUrlList(imgList) {
        return imgList.filter(item => item.status === 'success').map(item => item.url)
      },
b0e2f1a9   刘淇   快速工单和巡查计划样式优化
229
  
d433e7f6   刘淇   工单
230
231
232
233
      /**
       * 提交巡查表单
       */
      async submitInspect() {
ff65dc6c   刘淇   快速工单 样式优化
234
        // console.log('当前完成进度:', this.inspectForm.progress)
d433e7f6   刘淇   工单
235
236
237
238
239
        try {
          await this.$refs.inspectFormRef.validate()
          console.log('图片列表:', this.imagesList)
  
          const submitData = {
d433e7f6   刘淇   工单
240
241
242
243
            "planNo": this.paramsOptins.planNo,
            "imgHost": "1",
            "beginImg": this.getImgUrlList(this.imagesList),
            "commonUserList": [],
ff65dc6c   刘淇   快速工单 样式优化
244
            "remark": this.inspectForm.remark.trim()
d433e7f6   刘淇   工单
245
          }
b0e2f1a9   刘淇   快速工单和巡查计划样式优化
246
  
d433e7f6   刘淇   工单
247
248
249
          uni.showLoading({ title: '提交中...' })
          await maintainCreate(submitData)
          uni.hideLoading()
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
250
  
d433e7f6   刘淇   工单
251
252
253
254
255
          uni.showToast({
            title: '提交成功',
            icon: 'success',
            duration: 1000
          })
7b1f488f   刘淇   封装下图片上传
256
  
d433e7f6   刘淇   工单
257
          setTimeout(() => {
4fa8cf12   刘淇   巡查员结束工单
258
            uni.reLaunch({
d433e7f6   刘淇   工单
259
260
261
              url: '/pages-sub/daily/maintain-manage/index'
            })
          }, 1000)
7b1f488f   刘淇   封装下图片上传
262
  
d433e7f6   刘淇   工单
263
264
265
266
267
268
269
270
271
272
273
        } catch (error) {
          uni.hideLoading()
          if (!Array.isArray(error)) {
            console.error('巡查表单提交失败:', error)
            uni.showToast({
              title: '提交失败,请重试',
              icon: 'none',
              duration: 2000
            })
          }
        }
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
274
275
276
277
278
279
      }
    }
  }
  </script>
  
  <style lang="scss" scoped>
d433e7f6   刘淇   工单
280
  .inspect-form-content {
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
281
    background: #fff;
d433e7f6   刘淇   工单
282
283
    padding: 20rpx;
    margin-bottom: 20rpx;
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
284
285
  }
  
d433e7f6   刘淇   工单
286
287
  .progress-wrap {
    width: 83%;
fb13622a   刘淇   养护计划列表 样式 差去一个卡片的头部
288
  }
d433e7f6   刘淇   工单
289
  </style>