fuliqi
2024-01-24 29c1e7eb5ac16e90d8991a86c1c071bc312ec8d9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
<template>
  <div class="inner-bg-style">
    <el-row>
      <el-col :span="24" class="order-audit-config">
        <div>订单发货审核</div>
        <div class="order-audit-config-form">
          <el-form size="mini" ref="form" :model="form" :rules="formRules" label-width="180px">
            <el-form-item label="需审核三方平台订单:" prop="orderSource">
              <el-select v-model="form.orderSource" multiple clearable @change="changeOrderSource"
                         placeholder="请选择需审核三方平台订单">
                <el-option v-for="item in orderSourceArr" :key="item.id" :value="item.id"
                           :label="item.name"></el-option>
              </el-select>
              <span class="itemTip"> 温馨提示:已配置的三方平台订单不可多次选择配置</span>
            </el-form-item>
            <el-form-item label="订单审核是否开启:">
              <el-radio-group @change="changeOrderReview(1)" v-model="form.orderReview">
                <el-radio label="1">是(订单需要人工审核)</el-radio>
                <el-radio label="0">否(订单不需要人工审核,可直接发货)</el-radio>
              </el-radio-group>
            </el-form-item>
            <div v-if="form.orderReview === '1'">
              <el-form-item label="审核类型:">
                <el-radio-group @change="changeOrderReview(2)"
                                v-model="form.otherOrderControReview">
                  <el-radio label="0">审核所有订单</el-radio>
                  <el-radio label="1">审核符合条件订单</el-radio>
                </el-radio-group>
              </el-form-item>
              <div v-show="form.otherOrderControReview === '1'">
                <el-form-item label="促销单需审核:">
                  <el-checkbox v-model="form.promotionReview"></el-checkbox>
                </el-form-item>
                <el-form-item label="发票单需审核:">
                  <el-checkbox v-model="form.invoiceReview"> </el-checkbox>
                </el-form-item>
                <el-form-item label="有订单备注需审核:">
                  <el-checkbox v-model="form.memoReview"> </el-checkbox>
                </el-form-item>
                <el-form-item label="预售订单需审核">
                  <el-checkbox v-model="form.preOrderReview"> </el-checkbox>
                </el-form-item>
                <el-form-item label="需审核订单类型:">
                  <el-select v-model="form.orderTypeReview" multiple clearable
                             placeholder="请选择需审核订单类型">
                    <el-option v-for="item in orderTypeArr" :key="item.id" :value="item.id"
                               :label="item.name"></el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="指定商品需审核:" prop="productReview">
                  <el-button type="success" size="mini" @click="addProduct">添加商品</el-button>
                  <el-button size="mini" @click="clearTable">清空</el-button>
                  <el-table :data="form.productReview" border>
                    <el-table-column label="商品主编码" width="200px" prop="spuNum"></el-table-column>
                    <el-table-column label="商品图片" prop="imageUrl">
                      <template slot-scope="scope">
                        <product-img :imgUrl="scope.row.imageUrl"></product-img>
                      </template>
                    </el-table-column>
                    <el-table-column label="商品名称" prop="prodName"
                                     show-overflow-tooltip></el-table-column>
                    <el-table-column label="商品购买审核数量" width="200px" prop="buyQuantity">
                      <template slot="header">
                        商品购买审核数量
                        <el-tooltip class="item" effect="dark" content="该审核数量将按照用户实际购买数量最小单位进行审核限制"
                                    placement="top">
                          <i class="el-icon-info"></i>
                        </el-tooltip>
                      </template>
                      <template slot-scope="scope">
                        <el-form-item :prop="'productReview.'+scope.$index+'.buyQuantity'"
                                      :rules="formRules.buyQuantity">
                          <el-input-number :min='0' :max='999'
                                           v-model="scope.row.buyQuantity"></el-input-number> 瓶
                        </el-form-item>
                      </template>
                    </el-table-column>
                    <el-table-column width="80px" label="操作">
                      <template slot-scope="scope">
                        <el-form-item>
                          <el-button type="danger" size="mini"
                                     @click="deleteItem(scope.row,scope.$index)">删除</el-button>
                        </el-form-item>
                      </template>
                    </el-table-column>
                  </el-table>
                </el-form-item>
                <!-- 选择多规格商品 -->
                <el-form-item prop="productSkuReview">
                  <add-multi-spec-product ref="tableMultiSpecGoods" :isShowSpecUnit="false"
                                          :isShowPurchaseQuantity="true"
                                          :productData="form.productSkuReview"
                                          :formRules="formRules"
                                          @hand-selected="handSelectedMultiSpecProduct"
                                          @hand-clear="handClearMultiSpecProduct">
                  </add-multi-spec-product>
                </el-form-item>
                <el-form-item label="订单金额审核:" prop="payPriceReview">
                  实付订单满
                  <el-input-number size="mini" v-model="form.payPriceReview"
                                   :min='0'></el-input-number>
                  元,需审核
                </el-form-item>
              </div>
            </div>
            <el-form-item v-else label="推送类型:">
              <el-radio-group v-model="form.pushType" @change="changePushType">
                <el-radio label="1">实时推送(平台接收订单即推送安吉)</el-radio>
                <div class="br"></div>
                <el-radio label="0">定时推送(设定推送时间,达到该时间后即推送安吉)</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item v-if="form.pushType==='0'" prop="delayPushTime" label="设定推送时间:">
              <el-input-number size="mini" v-model="form.delayPushTime" :min='0'
                               :max="1440"></el-input-number> 分钟
              <span class="itemTip"> 温馨提示:最大不超过24小时</span>
            </el-form-item>
            <div v-if="form.orderSource.includes('WLY')">
              <div class="config-tip">退款订单配置</div>
              <el-form-item label="未发货订单自动退款:">
                <el-checkbox v-model="form.deliveryRefundReview">
                  <span class="itemTip"> 温馨提示:未发货自动退款目前仅支持垂直赋能平台订单</span>
                </el-checkbox>
              </el-form-item>
            </div>
          </el-form>
        </div>
        <el-row class="buttonPosition">
          <el-button type="primary" size="mini" @click="submit">保存</el-button>
          <el-button size="mini" @click="cancel">取消</el-button>
        </el-row>
      </el-col>
    </el-row>
    <product-selected :show.sync="selectedDialog.show" :isSelectable="true"
                      :title="selectedDialog.title"
                      @hand-selected-row-data="handSelectedRowData"></product-selected>
  </div>
</template>
 
<script>
import orderSource from '@/utils/constant/orderSourceArr'
import productSelected from '@/views/product/components/productSelected.vue'
import addMultiSpecProduct from '@/views/submenuTactics/components/addMultiSpecProduct.vue'
import orderAuditConfigApi from '@/api/orderAuditConfig'
import orderTypeArr from '@/utils/constant/orderTypeArr'
import productImg from '@/views/product/components/productImg.vue'
import { inputNumberValid, inputNonnegativeNumber } from '@/utils/validator'
export default {
  components: { productSelected, addMultiSpecProduct, productImg },
  data() {
    const orderPriceAuditValid = (rule, value, callback) => {
      const reg = /^(?!0+$)(?!0*\.0*$)\d{1,9}(\.\d{1,2})?$/ // 最多输入两位小数
      if (value === 0) {
        callback(new Error('请输入大于0的订单金额'))
      } else if (value > 999999999) {
        callback(new Error('最大金额不能超过 999999999'))
      } else if (value && !reg.test(value)) {
        callback(new Error('最多输入两位小数'))
      } else {
        callback()
      }
    }
    return {
      orderSourceArr: [],
      orderTypeArr, // 订单类型
      form: {
        orderReview: '1',
        orderSource: [],
        promotionReview: false,
        invoiceReview: false,
        memoReview: false,
        productReview: [],
        productSkuReview: [],
        deliveryRefundReview: false,
        preOrderReview: false,
        orderTypeReview: [],
        payPriceReview: undefined,
        otherOrderControReview: '0',
        delayPushTime: null,
        pushType: '1'
      },
      selectedDialog: {
        show: false,
        title: '选择商品'
      },
      formRules: {
        buyQuantity: [
          { required: true, message: '审核数量不能为空', trigger: 'change' },
          { validator: inputNonnegativeNumber }
        ],
        payPriceReview: [
          { validator: orderPriceAuditValid, trigger: 'change' }
        ],
        delayPushTime: [
          { required: true, message: '设定推送时间不能为空', trigger: 'change' },
          { validator: inputNumberValid }
        ],
        orderSource: [{ type: 'array', required: true, message: '需审核三方平台订单不能为空' }],
      },
      formKey: ['promotionReview', 'invoiceReview', 'memoReview', 'preOrderReview', 'orderTypeReview', 'productReview', 'productSkuReview', 'payPriceReview']
    }
  },
  created() {
    this.getAvailableOrderSource()
    if (this.$route.query.id) {
      this.configInfo() // 查询配置详情
    }
  },
  methods: {
    /**
     * 当订单来源不包含五粮液时则自动退款为否
     */
    changeOrderSource(val) {
      this.form.deliveryRefundReview = !!val.includes('WLY')
    },
    /**
     * 获取可用的订单来源
     */
    async getAvailableOrderSource() {
      const id = this.$route.query.id || null
      this.orderSourceArr = []
      const res = await orderAuditConfigApi.getAvailableOrderSource(id)
      if (res.code === '0') {
        orderSource.forEach(item => {
          if (res.data[item.id]) {
            this.orderSourceArr.push(item)
          }
        })
      }
    },
    changePushType() {
      this.form.delayPushTime = null
      this.$refs.form.clearValidate()
    },
    // 当订单免审状态改变时清空数据
    changeOrderReview(tag) {
      for (const key in this.form) {
        if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
          this.form[key] = false
        }
      }
      if (tag === 1) {
        this.form.otherOrderControReview = '0'
      }
      this.form.productReview = []
      this.form.productSkuReview = []
      this.form.orderTypeReview = []
      this.form.pushType = '1'
      this.form.delayPushTime = null
      this.form.payPriceReview = undefined
      this.$refs.form.clearValidate()
    },
    // 处理表单数据
    handFormData(data) {
      const param = {}
      for (const key in data) {
        if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
          param[key] = data[key] ? '1' : '0'
        } else {
          switch (key) {
            case 'deliveryRefundReview':
              param[key] = data[key] ? '0' : '1'
              break
            case 'productReview':
            case 'productSkuReview':
              param[key] = data[key] ? JSON.stringify(data[key]) : null
              break
            case 'orderTypeReview':
              param[key] = data[key].length ? data[key].join() : null
              break
            case 'payPriceReview':
              param[key] = data[key] ? data[key] : null
              break
            default:
              param[key] = data[key]
              break
          }
        }
      }
 
      return param
    },
    // 当需要审核符合条件订单时,下面的值至少要填写一项
    validatorFormKey() {
      let flag = null
      for (const key of this.formKey) {
        if (!this.form[key] || (Array.isArray(this.form[key]) && !this.form[key].length)) {
          flag = false
          continue
        } else {
          flag = true
          return flag
        }
      }
      return flag
    },
    // 保存
    submit() {
      if (this.form.otherOrderControReview === '1' && !this.validatorFormKey()) {
        this.$message({
          message: '最少选择一项配置项',
          type: 'info'
        })
        return
      }
      this.$refs.form.validate().then((res) => {
        this.$confirm('此配置保存后将立即生效,是否保存所改配置?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(async () => {
          try {
            const param = {
              configParams: this.handFormData(this.form),
              id: this.$route.query.id,
              orderSource: this.form.orderSource.join()
            }
            delete param.configParams.orderSource
            const res = await orderAuditConfigApi.saveInfo(param)
            if (res.code === '0') {
              this.$message({
                message: '配置成功',
                type: 'success'
              })
              this.$router.push({ name: 'orderAuditConfig' })
            }
          } catch (error) {
          }
        })
      })
    },
    // 取消修改返回到未修改之前
    async cancel() {
      this.$router.push({ name: 'orderAuditConfig' })
    },
    // 查询配置详情
    async configInfo() {
      try {
        const res = await orderAuditConfigApi.detailsInfo(this.$route.query.id)
        if (res.code === '0' && res.data) {
          const configParams = res.data.configParams
          for (const key in configParams) {
            if (key === 'promotionReview' || key === 'invoiceReview' || key === 'memoReview' || key === 'preOrderReview') {
              this.form[key] = configParams[key] === '1'
            } else {
              this.form.orderReview = configParams.orderReview
              this.form.orderSource = res.data.orderSource ? res.data.orderSource.split(',') : []
              this.form.productReview = configParams.productReview ? JSON.parse(configParams.productReview) : []
              this.form.productSkuReview = configParams.productSkuReview ? JSON.parse(configParams.productSkuReview) : []
              this.form.deliveryRefundReview = configParams.deliveryRefundReview !== '1'
              this.form.orderTypeReview = configParams.orderTypeReview ? configParams.orderTypeReview.split(',') : []
              this.form.payPriceReview = configParams.payPriceReview ? configParams.payPriceReview : undefined
              this.form.otherOrderControReview = configParams.otherOrderControReview
              this.form.delayPushTime = configParams.delayPushTime
              this.form.pushType = this.form.delayPushTime ? '0' : '1'
            }
          }
        }
      } catch (error) {
      }
    },
    /**
       * 清空表格数据
       */
    clearTable() {
      this.form.productReview = []
    },
    /**
     * 清空多规格商品数据
     */
    handClearMultiSpecProduct() {
      this.form.productSkuReview = [];
    },
    /**
     * 当选择多规格商品时
     */
    handSelectedMultiSpecProduct() {
      this.$refs.form.clearValidate('productSkuReview')
    },
    /**
       * 删除表格数据
       */
    deleteItem(row, index) {
      this.form.productReview.splice(index, 1)
    },
    /**
       * 打开添加商品弹窗
       */
    addProduct() {
      this.selectedDialog.show = true
    },
    /**
     * 获取商品弹出框返回的数据
     */
    handSelectedRowData(rows) {
      rows.forEach(rowItem => {
        if (!this.form.productReview.find(item => {
          return rowItem.spuId === item.spuId
        })) {
          this.form.productReview.push({
            spuId: rowItem.spuId,
            spuNum: rowItem.spuNum,
            prodName: rowItem.spuName,
            imageUrl: rowItem.imageUrl,
            buyQuantity: 0,
            spuUnit: rowItem.spuUnit
          })
        }
      })
    }
  }
}
</script>
 
<style lang="scss">
.order-audit-config {
  padding: 20px;
  .order-audit-config-form {
    padding: 15px;
  }
  .el-table {
    margin-top: 20px;
  }
  .config-tip {
    margin: 15px;
  }
  .el-icon-info {
    cursor: pointer;
  }
  .br {
    margin: 20px 0;
  }
}
</style>