瀏覽代碼

售后列表

yangjunfeng 5 年之前
父節點
當前提交
c15dbcdd49
共有 19 個文件被更改,包括 5474 次插入324 次删除
  1. 705 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addOrEdit.vue
  2. 1327 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addOrder.vue
  3. 286 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addTodo.vue
  4. 377 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/afterSale.vue
  5. 407 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/detail.vue
  6. 107 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/editLabel.vue
  7. 118 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/freeCoupons.vue
  8. 134 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/importFile.vue
  9. 114 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/memberExtension.vue
  10. 113 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/memberLevel.vue
  11. 90 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/mergeId.vue
  12. 395 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/searchFilter.vue
  13. 99 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/sendGroupMessage.vue
  14. 171 0
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/transfer.vue
  15. 470 157
      CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/index.vue
  16. 128 41
      CallCenterWeb.UI/src/views/memberManagement/memberList/components/detail.vue
  17. 2 2
      CallCenterWeb.UI/src/views/outbound/automaticOutbound/components/importFile.vue
  18. 156 0
      CallCenterWeb.UI/src/views/systemSetup/roleSetting/department/component/addOrEditGroup.vue
  19. 275 124
      CallCenterWeb.UI/src/views/systemSetup/roleSetting/department/index.vue

+ 705 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addOrEdit.vue

@@ -0,0 +1,705 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <!-- <el-form-item label="会员卡编号" prop="vipcode">
5
+        <el-input v-model="ruleForm.F_VIPCode" placeholder="请输入会员卡编号"></el-input>
6
+      </el-form-item> -->
7
+      <el-form-item label="客户姓名" prop="F_Name">
8
+        <el-input v-model="ruleForm.F_Name" placeholder="请输入客户姓名"/>
9
+      </el-form-item>
10
+      <el-form-item label="客户性别" prop="F_Sex">
11
+        <el-radio v-model="ruleForm.F_Sex" label="男">男</el-radio>
12
+        <el-radio v-model="ruleForm.F_Sex" label="女">女</el-radio>
13
+      </el-form-item>
14
+      <el-form-item label="客户年龄" prop="F_Age">
15
+        <el-input v-model="ruleForm.F_Age" placeholder="请输入客户年龄" onkeyup="value=value.replace(/[^\d.]/g,'')"/>
16
+      </el-form-item>
17
+      <el-form-item label="主号码" prop="F_Phone">
18
+        <el-input v-model="ruleForm.F_Phone" placeholder="请输入主号码"/>
19
+      </el-form-item>
20
+      <el-row>
21
+        <el-col :span="16">
22
+          <el-form-item label="备用号码" prop="backupMobile">
23
+            <el-input v-model="ruleForm.backupMobile" placeholder="请输入手机号码"/>
24
+          </el-form-item>
25
+        </el-col>
26
+        <el-col :span="8">
27
+          <el-form-item label="">
28
+            <el-button type="primary" @click="addMobile">添加号码</el-button>
29
+          </el-form-item>
30
+        </el-col>
31
+      </el-row>
32
+      <el-row>
33
+        <el-col :span="24">
34
+          <el-form-item label="备用号码">
35
+            <el-table :data="mobileTableData" stripe style="width: 100%">
36
+              <el-table-column label="备用号码" align="center" >
37
+                <template slot-scope="scope">
38
+                  {{ scope.row.mobileNumber | phoneFilter }}
39
+                </template>
40
+              </el-table-column>
41
+              <el-table-column label="操作" align="center">
42
+                <template slot-scope="scope">
43
+                  <el-button type="text" @click="btn_deleteMobile(scope.row.mobileNumber)">删除</el-button>
44
+                </template>
45
+              </el-table-column>
46
+            </el-table>
47
+          </el-form-item>
48
+        </el-col>
49
+      </el-row>
50
+      <el-row/>
51
+      <el-form-item label="会员标签" prop="F_Type">
52
+        <el-select v-model="ruleForm.F_Type" clearable placeholder="请选择会员标签" class="form_select">
53
+          <el-option
54
+            v-for="item in memberType"
55
+            :key="item.F_ID"
56
+            :label="item.F_Name"
57
+            :value="item.F_Name"/>
58
+        </el-select>
59
+      </el-form-item>
60
+      <el-form-item label="默认地区" prop="provinceCity">
61
+        <el-cascader
62
+          ref="myCascader"
63
+          v-model="provinceCity"
64
+          :options="provinceCityDatas"
65
+          :props="props"
66
+          :placeholder="placeholderArea"
67
+          :class="{'placeholderAreaClass':isPlaceholderAreaClass} "
68
+          class="form_select"
69
+          clearable
70
+          change-on-select
71
+          @change="handleItemChange"/>
72
+      </el-form-item>
73
+      <el-form-item label="默认地址" prop="F_Address">
74
+        <el-input v-model="ruleForm.F_Address" placeholder="请输入详细地址"/>
75
+      </el-form-item>
76
+      <el-form-item label="备用地区1" prop="provinceCity1">
77
+        <el-cascader
78
+          ref="myCascader1"
79
+          v-model="provinceCity1"
80
+          :options="provinceCityDatas1"
81
+          :props="props"
82
+          :placeholder="placeholderArea1"
83
+          :class="{'placeholderAreaClass': isPlaceholderAreaClass} "
84
+          class="form_select"
85
+          clearable
86
+          change-on-select
87
+          @change="handleItemChange1"/>
88
+      </el-form-item>
89
+      <el-form-item label="备用地址1" prop="F_Address1">
90
+        <el-input v-model="ruleForm.F_Address1" placeholder="请输入备用地址"/>
91
+      </el-form-item>
92
+      <el-form-item label="备用地区2" prop="provinceCity2">
93
+        <el-cascader
94
+          ref="myCascader2"
95
+          v-model="provinceCity2"
96
+          :options="provinceCityDatas2"
97
+          :props="props"
98
+          :placeholder="placeholderArea2"
99
+          :class="{'placeholderAreaClass':isPlaceholderAreaClass} "
100
+          class="form_select"
101
+          clearable
102
+          change-on-select
103
+          @change="handleItemChange2"/>
104
+      </el-form-item>
105
+      <el-form-item label="备用地址2" prop="F_Address2">
106
+        <el-input v-model="ruleForm.F_Address2" placeholder="请输入备用地址"/>
107
+      </el-form-item>
108
+      <el-form-item label="邮编" prop="F_Postcode">
109
+        <el-input v-model="ruleForm.F_Postcode" placeholder="请输入邮编"/>
110
+      </el-form-item>
111
+      <el-form-item label="鞋码" prop="F_ShoeSize">
112
+        <el-input v-model="ruleForm.F_ShoeSize" placeholder="请输入鞋码" onkeyup="value=value.replace(/[^\d.]/g,'')"/>
113
+      </el-form-item>
114
+      <el-form-item label="会员生日" prop="F_Birthday">
115
+        <el-date-picker
116
+          v-model="ruleForm.F_Birthday"
117
+          value-format="yyyy-MM-dd"
118
+          type="date"
119
+          placeholder="请选择会员生日"
120
+          class="form_date"
121
+        />
122
+      </el-form-item>
123
+      <el-form-item label="会员积分" prop="F_Score">
124
+        <el-input v-model="ruleForm.F_Score" placeholder="请输入会员积分" onkeyup="value=value.replace(/[^\d.]/g,'')"/>
125
+      </el-form-item>
126
+      <el-form-item label="推荐人" prop="F_RecommendName" >
127
+        <el-select v-model="ruleForm.F_RecommendName" :placeholder="recommendNameRemind" :remote-method="remoteMethodRecommend" :loading="loading" class="form_select" filterable remote reserve-keyword value-key="F_ID" @change="recommendChangeSelect">
128
+          <el-option v-for="item in recommendListOptions" :key="item.F_ID" :label="item.F_Name" :value="item"/>
129
+        </el-select>
130
+      </el-form-item>
131
+      <!-- <el-form-item label="推荐人" prop="F_Recommender">
132
+        <el-input v-model="ruleForm.F_Recommender" placeholder="请输入推荐人"></el-input>
133
+      </el-form-item>
134
+      <el-form-item label="推荐人手机号码" prop="F_RecommenderTel">
135
+        <el-input v-model="ruleForm.F_RecommenderTel" placeholder="请输入推荐人手机号码"></el-input>
136
+      </el-form-item> -->
137
+      <el-form-item label="累计消费金额" prop="F_Money">
138
+        <el-input v-model="ruleForm.F_Money" placeholder="请输入累计消费金额" onkeyup="value=value.replace(/[^\d.]/g,'')"/>
139
+      </el-form-item>
140
+      <el-form-item label="累计积分" prop="F_TotalScore">
141
+        <el-input v-model="ruleForm.F_TotalScore" placeholder="请输入累计积分" onkeyup="value=value.replace(/[^\d.]/g,'')"/>
142
+      </el-form-item>
143
+      <el-form-item>
144
+        <el-button type="primary" @click="submitForm">保存</el-button>
145
+        <el-button @click="resetForm">重置</el-button>
146
+      </el-form-item>
147
+    </el-form>
148
+  </div>
149
+</template>
150
+
151
+<script>
152
+import { getProviceCityById } from '@/api/commonAPI'
153
+import { getMemberInfo, addOrder, editOrder, getLabelLists } from '@/api/memberManagement/memberList'
154
+import { validateTel } from '@/utils/validate'
155
+import { filterContent, pickerOptions } from '@/utils'
156
+import { getOrderLists } from '@/api/memberManagement/memberList'
157
+
158
+export default {
159
+  name: 'AddOrEdit',
160
+  filters: {
161
+    phoneFilter(status) {
162
+      const mtel = status.substr(0, 3) + '****' + status.substr(7)
163
+      return mtel
164
+    }
165
+  },
166
+  props: {
167
+    rowid: {
168
+      type: String,
169
+      default: ''
170
+    },
171
+    callid: {
172
+      type: Number,
173
+      default: 0
174
+    },
175
+    layerid: {
176
+      type: String,
177
+      default: ''
178
+    }
179
+  },
180
+  data() {
181
+    return {
182
+      aa: '',
183
+      sourceOptions: [], // 工单来源下拉数据
184
+      memberType: [], // 会员类型下拉数据
185
+      recommendList: [], // 会员列表数据
186
+      recommendListOptions: [], // 会员列表数据
187
+      provinceCityDatas: [], // 省市下拉数据
188
+      provinceCityDatas1: [], // 省市下拉数据
189
+      provinceCityDatas2: [], // 省市下拉数据
190
+      provinceCity: [], // 省市下拉绑定的值
191
+      provinceCity1: [], // 省市下拉绑定的值
192
+      provinceCity2: [], // 省市下拉绑定的值
193
+      provinceCityText: [], // 省市下拉绑定的文本值
194
+      provinceCityText1: [], // 省市下拉绑定的文本值
195
+      provinceCityText2: [], // 省市下拉绑定的文本值
196
+      mobileTableData: [], // 备用号码列表
197
+      mobileData: '', // 备用号码数据
198
+      props: {
199
+        // 自定义省市下拉数据的key值
200
+        value: 'id',
201
+        label: 'text',
202
+        children: 'children'
203
+      },
204
+      addressParams: {
205
+        pid: 1
206
+      },
207
+      isPlaceholderAreaClass: true,
208
+      placeholderArea: '', // 地区默认值
209
+      placeholderArea1: '', // 备选地区1默认值
210
+      placeholderArea2: '', // 备选地区2默认值
211
+      level: 0, // 城市等级
212
+      pickerOptions, // 日期数据
213
+      recommendNameRemind: '请输入手机号码',
214
+      ruleForm: {
215
+        unique_id: '', //		否	string	callid
216
+        id: '', // 编辑会员信息id
217
+        // F_VIPCode: "", //会员卡编号
218
+        F_Name: '', // 客户姓名
219
+        F_Sex: '男', // 客户性别
220
+        F_Age: '', // 客户年龄
221
+        // F_Mobile: "", //备用号码
222
+        backupMobile: '', // 备用号码
223
+        F_Phone: '', // 主号码
224
+        F_Type: '', // 会员类型
225
+        // province: "", //省
226
+        // city: "", //市
227
+        // county: "", //县/区
228
+        // township: "", //乡镇
229
+        F_Address: '', // 详细地址
230
+        F_Address1: '', // 备用地址1
231
+        F_Address2: '', // 备用地址2
232
+        F_Postcode: '', // 邮编
233
+        F_ShoeSize: '', // 鞋码
234
+        F_Birthday: '', // 会员生日
235
+        F_Score: '', // 会员积分
236
+        F_Recommender: '', // 推荐人
237
+        F_RecommenderTel: '', // 推荐人手机号码
238
+        F_RecommenderID: '', // 推荐人id
239
+        F_RecommendName: '', // 推荐人名称
240
+        F_Money: '', // 累计消费金额
241
+        F_TotalScore: '' // 累计积分
242
+      },
243
+      rules: {
244
+        F_Name: [
245
+          {
246
+            required: true,
247
+            trigger: 'blur',
248
+            message: '请输入客户姓名'
249
+          }
250
+        ],
251
+        F_Phone: [
252
+          {
253
+            required: true,
254
+            trigger: 'blur',
255
+            message: '请输入主号码'
256
+          }
257
+        ]
258
+      },
259
+      loading: false
260
+    }
261
+  },
262
+  computed: {
263
+    F_Phone: {
264
+      get: function() {
265
+        return this.ruleForm.F_Phone // 获取的时候直接获取值
266
+      },
267
+      set: function(value) {
268
+        this.ruleForm.F_Phone = value.substr(0, 3) + '****' + value.substr(7) //
269
+      }
270
+    }
271
+  },
272
+  created() {
273
+    this.getProCity()
274
+    this.getRecommendList()
275
+    if (this.callid) {
276
+      this.ruleForm.unique_id = this.callid
277
+    }
278
+    Promise.all([]).then(() => {
279
+      this.getType()
280
+      if (this.rowid) {
281
+        this.ruleForm.id = this.rowid
282
+        this.getDetail(this.rowid)
283
+      } else {
284
+        this.placeholderArea = '请选择地区'
285
+        this.placeholderArea1 = '请选择备用地区1'
286
+        this.placeholderArea2 = '请选备用择地区2'
287
+        this.isPlaceholderAreaClass = false
288
+      }
289
+    })
290
+  },
291
+  methods: {
292
+    submitForm() {
293
+      this.$refs.ruleForm.validate(valid => {
294
+        if (valid) {
295
+          this.ruleForm.content = filterContent.delHtmlTag(
296
+            this.ruleForm.content
297
+          ) // 保存内容时去掉 html 标签
298
+          this.loading = true
299
+          return new Promise(resolve => {
300
+            this.mobileData = ''
301
+            for (let i = 0; i < this.mobileTableData.length; i++) {
302
+              this.mobileData += this.mobileTableData[i].mobileNumber + ','
303
+            }
304
+            const params = {
305
+              id: this.rowid ? this.rowid : '',
306
+              state: '1',
307
+              name: this.ruleForm.F_Name, // 客户姓名
308
+              phone: this.ruleForm.F_Phone, // 主号码
309
+              mobile: this.mobileData, // 手机号码
310
+              F_RecommenderID: this.ruleForm.F_RecommenderID, // 推荐人
311
+              recommender: this.ruleForm.F_Recommender, // 推荐人
312
+              recommendertel: this.ruleForm.F_RecommenderTel, // 推荐人手机号码
313
+              sex: this.ruleForm.F_Sex, // 性别
314
+              age: this.ruleForm.F_Age, // 年龄
315
+              label: this.ruleForm.F_Type, // 会员类型
316
+              address: this.ruleForm.F_Address, // 详细地址
317
+              address1: this.ruleForm.F_Address1, // 备用地址1
318
+              address2: this.ruleForm.F_Address2, // 备用地址2
319
+              postcode: this.ruleForm.F_Postcode, // 邮编
320
+              province: this.provinceCityText && this.provinceCityText[0], // 省份
321
+              city: this.provinceCityText && this.provinceCityText[1], // 市
322
+              area: this.provinceCityText && this.provinceCityText[2], // 县
323
+              town: this.provinceCityText && this.provinceCityText[3], // 乡
324
+              province1: this.provinceCityText1 && this.provinceCityText1[0], // 省份
325
+              city1: this.provinceCityText1 && this.provinceCityText1[1], // 市
326
+              area1: this.provinceCityText1 && this.provinceCityText1[2], // 县
327
+              town1: this.provinceCityText1 && this.provinceCityText1[3], // 乡
328
+              province2: this.provinceCityText2 && this.provinceCityText2[0], // 省份
329
+              city2: this.provinceCityText2 && this.provinceCityText2[1], // 市
330
+              area2: this.provinceCityText2 && this.provinceCityText2[2], // 县
331
+              town2: this.provinceCityText2 && this.provinceCityText2[3], // 乡
332
+              shoesize: this.ruleForm.F_ShoeSize, // 鞋码
333
+              birthday: this.ruleForm.F_Birthday, // 会员生日
334
+              score: this.ruleForm.F_Score, // 会员积分
335
+              money: this.ruleForm.F_Money, // 累计消费金额
336
+              totalscore: this.ruleForm.F_TotalScore // 累计积分
337
+            }
338
+            // 添加
339
+            if (!this.rowid) {
340
+              addOrder(params)
341
+                .then(response => {
342
+                  this.loading = false
343
+                  if (response.state.toLowerCase() === 'success') {
344
+                    this.$parent.$layer.close(this.layerid)
345
+                    this.$parent.btn_search() // 重新加载父级数据
346
+                    this.$message.success('恭喜你,添加成功!')
347
+                  }
348
+                })
349
+                .catch(() => {
350
+                  this.loading = false
351
+                })
352
+              return
353
+            }
354
+            // 编辑
355
+            editOrder(params)
356
+              .then(response => {
357
+                this.loading = false
358
+                if (response.state.toLowerCase() === 'success') {
359
+                  this.$parent.$layer.close(this.layerid)
360
+                  this.$parent.getList() // 重新加载父级数据
361
+                  this.$message.success('恭喜你,编辑成功!')
362
+                }
363
+              })
364
+              .catch(() => {
365
+                this.loading = false
366
+              })
367
+          })
368
+        } else {
369
+          this.$message.error('请输入有效的必填项信息!')
370
+          return false
371
+        }
372
+      })
373
+    },
374
+    resetForm() {
375
+      this.$refs.ruleForm.resetFields()
376
+      this.provinceCityText = []
377
+      this.provinceCity = []
378
+      this.provinceCityText1 = []
379
+      this.provinceCity1 = []
380
+      this.provinceCityText2 = []
381
+      this.provinceCity2 = []
382
+      this.placeholderArea = '请选择地区'
383
+      this.isPlaceholderAreaClass = false
384
+    },
385
+    // 详情
386
+    getDetail(rid) {
387
+      getMemberInfo(rid).then(response => {
388
+        const res = response.model
389
+        this.ruleForm = response.model
390
+        this.ruleForm.F_Type = res.F_Label
391
+        this.ruleForm.F_RecommenderID = res.F_RecommenderID + ''
392
+        this.recommendNameRemind = res.F_Recommender
393
+        this.ruleForm.F_Recommender = res.F_Recommender
394
+        this.ruleForm.F_RecommenderTel = res.F_RecommenderTel
395
+        for (let i = 0; i < res.F_Mobile.split(',').length; i++) {
396
+          const data = {
397
+            mobileNumber: res.F_Mobile.split(',')[i]
398
+          }
399
+          this.mobileTableData.push(data)
400
+        }
401
+        if (res.F_Province) {
402
+          if (res.F_City) {
403
+            this.placeholderArea = res.F_Province + '/'
404
+          } else {
405
+            this.placeholderArea = res.F_Province
406
+          }
407
+          if (res.F_City && res.F_Area) {
408
+            this.placeholderArea += res.F_City + '/'
409
+          } else {
410
+            this.placeholderArea += res.F_City
411
+          }
412
+          if (res.F_Area && res.F_Town) {
413
+            this.placeholderArea += res.F_Area + '/'
414
+          } else {
415
+            this.placeholderArea += res.F_Area
416
+          }
417
+          if (res.F_Town) {
418
+            this.placeholderArea += res.F_Town
419
+          }
420
+          this.provinceCityText = this.placeholderArea.split('/')
421
+        } else {
422
+          this.placeholderArea = '请选择地区'
423
+          this.isPlaceholderAreaClass = false
424
+        }
425
+        if (res.F_Province1) {
426
+          if (res.F_City1) {
427
+            this.placeholderArea1 = res.F_Province1 + '/'
428
+          } else {
429
+            this.placeholderArea1 = res.F_Province1
430
+          }
431
+          if (res.F_City1 && res.F_Area1) {
432
+            this.placeholderArea1 += res.F_City1 + '/'
433
+          } else {
434
+            this.placeholderArea1 += res.F_City1
435
+          }
436
+          if (res.F_Area1 && res.F_Town1) {
437
+            this.placeholderArea1 += res.F_Area1 + '/'
438
+          } else {
439
+            this.placeholderArea1 += res.F_Area1
440
+          }
441
+          if (res.F_Town1) {
442
+            this.placeholderArea1 += res.F_Town1
443
+          }
444
+          this.provinceCityText1 = this.placeholderArea1.split('/')
445
+        } else {
446
+          this.placeholderArea1 = '请选择备用地区1'
447
+          this.isPlaceholderAreaClass = false
448
+        }
449
+        if (res.F_Province2) {
450
+          if (res.F_City2) {
451
+            this.placeholderArea2 = res.F_Province2 + '/'
452
+          } else {
453
+            this.placeholderArea2 = res.F_Province2
454
+          }
455
+          if (res.F_City2 && res.F_Area2) {
456
+            this.placeholderArea2 += res.F_City2 + '/'
457
+          } else {
458
+            this.placeholderArea2 += res.F_City2
459
+          }
460
+          if (res.F_Area2 && res.F_Town2) {
461
+            this.placeholderArea2 += res.F_Area2 + '/'
462
+          } else {
463
+            this.placeholderArea2 += res.F_Area2
464
+          }
465
+          if (res.F_Town2) {
466
+            this.placeholderArea2 += res.F_Town2
467
+          }
468
+          this.provinceCityText2 = this.placeholderArea2.split('/')
469
+        } else {
470
+          this.placeholderArea2 = '请选择备用地区2'
471
+          this.isPlaceholderAreaClass = false
472
+        }
473
+      })
474
+    },
475
+    // 获取会员类型
476
+    getType() {
477
+      return new Promise(resolve => {
478
+        const params = {
479
+          pageindex: 1,
480
+          pagesize: 100
481
+        }
482
+        getLabelLists(params).then(response => {
483
+          if (response.state.toLowerCase() === 'success') {
484
+            this.memberType = response.rows.Rows
485
+          }
486
+        })
487
+      })
488
+    },
489
+    addMobile() {
490
+      if (this.ruleForm.backupMobile.length !== 11) {
491
+        this.$message({
492
+          message: '号码为11位!',
493
+          type: 'warning'
494
+        })
495
+        return
496
+      }
497
+      const data = {
498
+        mobileNumber: this.ruleForm.backupMobile
499
+      }
500
+      this.mobileTableData.push(data)
501
+    },
502
+    btn_deleteMobile(val) {
503
+      const index = this.mobileTableData.indexOf(val)
504
+      this.mobileTableData.splice(index, 1)
505
+    },
506
+    // 获取推荐人列表
507
+    getRecommendList() {
508
+      this.loading = true
509
+      return new Promise(resolve => {
510
+        const params = {
511
+          pageindex: '', // int 第几页
512
+          pagesize: '', // int 每页几条信息
513
+          name: '', // 客户姓名
514
+          phone: '', // 手机号码
515
+          type: '', // 会员类型
516
+          province: '', // 省份
517
+          city: '', // 市
518
+          area: '', // 县区
519
+          town: '', // 乡镇
520
+          address: '', // 详细地址
521
+          birthday: '', // 会员生日
522
+          recommender: '', // 推荐人
523
+          saleperson: '', // 销售负责人
524
+          contact: '' // 联系频次
525
+        }
526
+        getOrderLists(params).then(response => {
527
+          this.loading = false
528
+          if (response.state.toLowerCase() === 'success') {
529
+            this.recommendList = response.rows.Rows
530
+          }
531
+        })
532
+        resolve()
533
+      })
534
+    },
535
+    // 获取推荐人
536
+    remoteMethodRecommend(query) {
537
+      if (query !== '') {
538
+        this.loading = true
539
+        setTimeout(() => {
540
+          this.loading = false
541
+          this.recommendListOptions = this.recommendList.filter(item => {
542
+            return (item.F_Phone).toLowerCase()
543
+              .indexOf(query.toLowerCase()) > -1
544
+          })
545
+        }, 200)
546
+      } else {
547
+        this.recommendListOptions = []
548
+      }
549
+    },
550
+    recommendChangeSelect(item) {
551
+      this.ruleForm.F_RecommenderID = item.F_ID
552
+      this.ruleForm.F_Recommender = item.F_Name
553
+      this.ruleForm.F_RecommenderTel = item.F_Phone
554
+    },
555
+    // 获取省市下拉数据
556
+    getProCity() {
557
+      getProviceCityById(this.addressParams)
558
+        .then(res => {
559
+          this.provinceCityDatas = this.handleData(res.data)
560
+          this.provinceCityDatas1 = this.handleData1(res.data)
561
+          this.provinceCityDatas2 = this.handleData2(res.data)
562
+        })
563
+        .catch(err => {})
564
+    },
565
+    handleItemChange(val) {
566
+      this.provinceCityText = this.$refs['myCascader'].currentLabels
567
+      const pid = val ? val[val.length - 1] : 1 // id值
568
+      this.level = val.length + 1 // 判断第几级
569
+      this.provinceCityDatas = this.handleData(
570
+        this.provinceCityDatas,
571
+        pid,
572
+        this.level
573
+      )
574
+    },
575
+    handleItemChange1(val) {
576
+      this.provinceCityText1 = this.$refs['myCascader1'].currentLabels
577
+      const pid = val ? val[val.length - 1] : 1 // id值
578
+      this.level = val.length + 1 // 判断第几级
579
+      this.provinceCityDatas1 = this.handleData1(
580
+        this.provinceCityDatas1,
581
+        pid,
582
+        this.level
583
+      )
584
+    },
585
+    handleItemChange2(val) {
586
+      this.provinceCityText2 = this.$refs['myCascader2'].currentLabels
587
+      const pid = val ? val[val.length - 1] : 1 // id值
588
+      this.level = val.length + 1 // 判断第几级
589
+      this.provinceCityDatas2 = this.handleData2(
590
+        this.provinceCityDatas2,
591
+        pid,
592
+        this.level
593
+      )
594
+    },
595
+    handleData(data, val, level) {
596
+      for (let i = 0; i < data.length; i++) {
597
+        if (!data[i].children) {
598
+          this.$set(data[i], 'children', [])
599
+        }
600
+        if (data[i].id === val) {
601
+          getProviceCityById({ pid: val })
602
+            .then(res => {
603
+              if (res.data.length) {
604
+                data[i].children = res.data
605
+                if (this.level !== 4) {
606
+                  data[i].children.forEach(ele => {
607
+                    this.$set(ele, 'children', [])
608
+                  })
609
+                }
610
+              } else {
611
+                data[i].children = undefined
612
+              }
613
+            })
614
+            .catch(err => {})
615
+        } else {
616
+          if (data[i].children.length) {
617
+            this.handleData(data[i].children, val, level)
618
+          }
619
+        }
620
+      }
621
+      return data
622
+    },
623
+    handleData1(data, val, level) {
624
+      for (let i = 0; i < data.length; i++) {
625
+        if (!data[i].children) {
626
+          this.$set(data[i], 'children', [])
627
+        }
628
+        if (data[i].id === val) {
629
+          getProviceCityById({ pid: val })
630
+            .then(res => {
631
+              if (res.data.length) {
632
+                data[i].children = res.data
633
+                if (this.level !== 4) {
634
+                  data[i].children.forEach(ele => {
635
+                    this.$set(ele, 'children', [])
636
+                  })
637
+                }
638
+              } else {
639
+                data[i].children = undefined
640
+              }
641
+            })
642
+            .catch(err => {})
643
+        } else {
644
+          if (data[i].children.length) {
645
+            this.handleData1(data[i].children, val, level)
646
+          }
647
+        }
648
+      }
649
+      return data
650
+    },
651
+    handleData2(data, val, level) {
652
+      for (let i = 0; i < data.length; i++) {
653
+        if (!data[i].children) {
654
+          this.$set(data[i], 'children', [])
655
+        }
656
+        if (data[i].id === val) {
657
+          getProviceCityById({ pid: val })
658
+            .then(res => {
659
+              if (res.data.length) {
660
+                data[i].children = res.data
661
+                if (this.level !== 4) {
662
+                  data[i].children.forEach(ele => {
663
+                    this.$set(ele, 'children', [])
664
+                  })
665
+                }
666
+              } else {
667
+                data[i].children = undefined
668
+              }
669
+            })
670
+            .catch(err => {})
671
+        } else {
672
+          if (data[i].children.length) {
673
+            this.handleData2(data[i].children, val, level)
674
+          }
675
+        }
676
+      }
677
+      return data
678
+    }
679
+  }
680
+}
681
+</script>
682
+
683
+<style rel="stylesheet/scss" lang="scss">
684
+.order_form {
685
+  .form_select {
686
+    width: 100%;
687
+  }
688
+  .form_date {
689
+    width: 100%;
690
+  }
691
+  .col_select_text {
692
+    text-align: right;
693
+    padding-right: 15px;
694
+  }
695
+}
696
+.placeholderAreaClass .el-input__inner::-webkit-input-placeholder { /* WebKit browsers */
697
+  color: #606266;
698
+  font-size: 14px;
699
+}
700
+
701
+.placeholderAreaClass .el-input__inner::-moz-placeholder { /* Mozilla Firefox 19+ */
702
+  color: #606266;
703
+  font-size: 14px;
704
+}
705
+</style>

File diff suppressed because it is too large
+ 1327 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addOrder.vue


+ 286 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/addTodo.vue

@@ -0,0 +1,286 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form
4
+      ref="ruleForm"
5
+      :model="ruleForm"
6
+      :rules="rules"
7
+      label-width="100px"
8
+    >
9
+      <el-form-item label="类型" prop="type">
10
+        <el-select
11
+          v-model="ruleForm.type"
12
+          class="select_picker"
13
+          filterable
14
+          placeholder="请选择类型"
15
+          @change="handleChange"
16
+        >
17
+          <el-option
18
+            v-for="item in typeList"
19
+            :key="item.value"
20
+            :label="item.label"
21
+            :value="item.value"
22
+          />
23
+        </el-select>
24
+      </el-form-item>
25
+      <el-form-item label="状态" prop="state">
26
+        <el-select
27
+          v-model="ruleForm.state"
28
+          class="select_picker"
29
+          filterable
30
+          clearable
31
+          placeholder="请选择状态"
32
+        >
33
+          <el-option
34
+            v-for="item in stateList"
35
+            :key="item.value"
36
+            :label="item.label"
37
+            :value="item.value"
38
+          />
39
+        </el-select>
40
+      </el-form-item>
41
+      <el-form-item label="是否提醒" prop="isRemind">
42
+        <el-select
43
+          v-model="ruleForm.isRemind"
44
+          placeholder="请选择是否提醒"
45
+          width
46
+        >
47
+          <el-option label="否" value="0"/>
48
+          <el-option label="是" value="1"/>
49
+        </el-select>
50
+      </el-form-item>
51
+      <el-form-item label="提醒时间" prop="remindDate">
52
+        <el-date-picker
53
+          v-model="ruleForm.remindDate"
54
+          type="datetime"
55
+          placeholder="请选择提醒时间"
56
+        />
57
+      </el-form-item>
58
+      <el-form-item v-if="showSchedule" label="待办标题" prop="title">
59
+        <el-input v-model="ruleForm.title" placeholder="请输入待办标题" />
60
+      </el-form-item>
61
+      <el-form-item v-if="showSchedule" label="待办内容" prop="content">
62
+        <el-input
63
+          v-model="ruleForm.content"
64
+          type="textarea"
65
+          autosize
66
+          placeholder="请输入待办内容"
67
+        />
68
+      </el-form-item>
69
+      <el-form-item
70
+        v-if="showContacts"
71
+        label="待联系人姓名"
72
+        prop="name"
73
+        label-width="110px"
74
+      >
75
+        <el-input v-model="ruleForm.name" placeholder="请输入待联系人姓名" />
76
+      </el-form-item>
77
+      <el-form-item
78
+        v-if="showContacts"
79
+        label="待联系人电话"
80
+        prop="phone"
81
+        label-width="110px"
82
+      >
83
+        <el-input
84
+          v-model="ruleForm.phone"
85
+          onkeyup="value=value.replace(/[^\d.]/g,'')"
86
+          placeholder="待联系人电话"
87
+        />
88
+      </el-form-item>
89
+      <el-form-item>
90
+        <el-button type="primary" @click="submitForm">保存</el-button>
91
+        <el-button @click="resetForm">重置</el-button>
92
+      </el-form-item>
93
+    </el-form>
94
+  </div>
95
+</template>
96
+
97
+<script>
98
+import { addTodo, editTodo, getTodo } from '@/api/todoManagement/todoList'
99
+import { filterContent } from '@/utils'
100
+
101
+export default {
102
+  name: 'AddOrEdit',
103
+  props: {
104
+    rowPhone: {
105
+      type: String,
106
+      default: ''
107
+    },
108
+    rowName: {
109
+      type: String,
110
+      default: ''
111
+    },
112
+    layerid: {
113
+      type: String,
114
+      default: ''
115
+    }
116
+  },
117
+  data() {
118
+    return {
119
+      ruleForm: {
120
+        id: '',
121
+        type: 0,
122
+        state: '',
123
+        isRemind: '0',
124
+        remindDate: '',
125
+        title: '',
126
+        content: '',
127
+        name: '',
128
+        phone: ''
129
+      },
130
+      showSchedule: true, // 日程展示
131
+      showContacts: false, // 联系人展示
132
+      stateList: [
133
+        {
134
+          value: 0,
135
+          label: '未完成'
136
+        },
137
+        {
138
+          value: 1,
139
+          label: '已完成'
140
+        }
141
+      ], // 待办状态数据
142
+      typeList: [
143
+        {
144
+          value: 0,
145
+          label: '日程'
146
+        },
147
+        {
148
+          value: 1,
149
+          label: '待联系人'
150
+        }
151
+      ], // 类型数据
152
+      rules: {
153
+        title: [
154
+          {
155
+            required: true,
156
+            message: '请输入待办标题!',
157
+            trigger: 'blur'
158
+          }
159
+        ],
160
+        type: [
161
+          {
162
+            required: true,
163
+            message: '请选择类型!',
164
+            trigger: 'blur'
165
+          }
166
+        ],
167
+        state: [
168
+          {
169
+            required: true,
170
+            message: '请选择状态!',
171
+            trigger: 'change'
172
+          }
173
+        ],
174
+        content: [
175
+          {
176
+            required: true,
177
+            message: '请输入待办内容!',
178
+            trigger: 'blur'
179
+          }
180
+        ],
181
+        name: [
182
+          {
183
+            required: true,
184
+            message: '请输入待联系人姓名!',
185
+            trigger: 'blur'
186
+          }
187
+        ],
188
+        phone: [
189
+          {
190
+            required: true,
191
+            message: '请输入待联系人电话!',
192
+            trigger: 'blur'
193
+          }
194
+        ],
195
+        isRemind: [
196
+          {
197
+            required: true,
198
+            message: '请选择是否提醒!',
199
+            trigger: 'blur'
200
+          }
201
+        ]
202
+      },
203
+      positionData: [], // 职位数据
204
+      loading: false
205
+    }
206
+  },
207
+  created() {
208
+    if (this.rowPhone) {
209
+      this.ruleForm.phone = this.rowPhone.substr(0, 3) + '****' + this.rowPhone.substr(7)
210
+    }
211
+    if (this.rowName) {
212
+      this.ruleForm.name = this.rowName
213
+    }
214
+  },
215
+  methods: {
216
+    submitForm() {
217
+      if (this.ruleForm.isRemind == 1 && !this.ruleForm.remindDate) {
218
+        this.$message.error('请选择提醒时间')
219
+        return
220
+      }
221
+      this.$refs.ruleForm.validate((valid) => {
222
+        if (valid) {
223
+          this.loading = true
224
+          const datas = {
225
+            F_ID: this.ruleForm.id,
226
+            F_Type: this.ruleForm.type,
227
+            F_Name: this.ruleForm.title,
228
+            F_State: this.ruleForm.state,
229
+            F_IsRemind: this.ruleForm.isRemind,
230
+            F_Remindertime: this.ruleForm.remindDate,
231
+            F_Content: this.ruleForm.content,
232
+            F_PeopleName: this.ruleForm.name,
233
+            F_Tel: this.ruleForm.phone
234
+          }
235
+
236
+          // 添加
237
+          if (!this.rowid) {
238
+            addTodo(datas)
239
+              .then((response) => {
240
+                this.loading = false
241
+                if (response.state.toLowerCase() === 'success') {
242
+                  this.$parent.$layer.close(this.layerid)
243
+                  this.$parent.getList() // 重新加载父级数据
244
+                  this.$message.success('恭喜你,待办信息添加成功!')
245
+                }
246
+              })
247
+              .catch(() => {
248
+                this.loading = false
249
+              })
250
+            return
251
+          }
252
+        } else {
253
+          this.$message.error('请输入有效的必填项信息!')
254
+          return false
255
+        }
256
+      })
257
+    },
258
+    resetForm() {
259
+      this.$refs.ruleForm.resetFields()
260
+    },
261
+    // 选择切换
262
+    handleChange(val) {
263
+      if (val == 0) {
264
+        this.ruleForm.name = ''
265
+        this.ruleForm.phone = ''
266
+        this.showSchedule = true
267
+        this.showContacts = false
268
+      } else if (val == 1) {
269
+        this.ruleForm.title = ''
270
+        this.ruleForm.content = ''
271
+        this.showSchedule = false
272
+        this.showContacts = true
273
+      }
274
+    }
275
+  }
276
+}
277
+</script>
278
+
279
+<style rel="stylesheet/scss" lang="scss" scoped>
280
+.date_picker {
281
+  width: 100%;
282
+}
283
+div.date_picker input.el-range-input {
284
+  width: 46%;
285
+}
286
+</style>

+ 377 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/afterSale.vue

@@ -0,0 +1,377 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="订单编号" prop="F_OrderId" >
5
+        <el-input v-model="ruleForm.F_OrderId" disabled="false" />
6
+      </el-form-item>
7
+      <el-form-item label="售后类型" prop="F_Type" >
8
+        <el-select v-model="ruleForm.F_Type" class="form_select" filterable clearable placeholder="请选择售后类型">
9
+          <el-option label="调换货" value="1"></el-option>
10
+          <el-option label="退货" value="2"></el-option>
11
+          <el-option label="部分退货" value="3"></el-option>
12
+          <el-option label="对发货" value="4"></el-option>
13
+          <el-option label="补发货" value="5"></el-option>
14
+          <el-option label="补差额" value="6"></el-option>
15
+        </el-select>
16
+      </el-form-item>
17
+      <el-form-item label="变动金额" prop="F_Money">
18
+        <el-input-number v-model="ruleForm.F_Money" controls-position="right" class="form_input_number"></el-input-number>
19
+        <!-- <el-input v-model="ruleForm.F_Money" placeholder="-需要退 +用户需补"/> -->
20
+      </el-form-item>
21
+      <el-form-item label="售后原因类型" prop="F_ReturnType" >
22
+        <el-select v-model="ruleForm.F_ReturnType" class="form_select" filterable clearable placeholder="请选择售后原因类型">
23
+          <el-option v-for="item in afterSaleReasonsList" :key="item.F_ValueId" :label="item.F_Value" :value="item.F_Value"></el-option>
24
+        </el-select>
25
+      </el-form-item>
26
+      <el-form-item label="售后原因" prop="F_ReturnDes" >
27
+        <el-input v-model="ruleForm.F_ReturnDes" placeholder="请输入售后原因" />
28
+      </el-form-item>
29
+      <el-form-item label="退回商品状态" prop="F_ProductStatus" >
30
+        <el-input v-model="ruleForm.F_ProductStatus" placeholder="请输入退回商品状态" />
31
+      </el-form-item>
32
+      <el-row>
33
+        <el-col :span='8'>
34
+          <el-form-item label="商品分类" prop="parentids" >
35
+            <el-cascader
36
+              v-model="parentids"
37
+              :options="commodityTypeLists"
38
+              :props="typeDropProps"
39
+              placeholder="请选择商品分类"
40
+              clearable
41
+              filterable
42
+              change-on-select
43
+              @change="commodityTypeChange"
44
+              style="width: 100%;"/>
45
+          </el-form-item>
46
+        </el-col>
47
+        <el-col :span='8'>
48
+          <el-form-item label="商品" prop="productName" >
49
+            <el-select v-model="commoditySearchData.productName" class="filter-item" value-key="F_ProductId" clearable placeholder="请选择商品" @change="commodityListChange">
50
+              <el-option
51
+                v-for="item in commodityListLists"
52
+                :key="item.F_ProductId"
53
+                :label="item.F_ProductName"
54
+                :value="item">
55
+              </el-option>
56
+            </el-select>
57
+          </el-form-item>
58
+        </el-col>
59
+        <el-col :span='8'>
60
+          <el-form-item label="商品数量" prop="num" >
61
+            <el-input-number v-model="commoditySearchData.num" :min="1" label="描述文字"></el-input-number>
62
+          </el-form-item>
63
+        </el-col>
64
+      </el-row>
65
+      <el-row>
66
+        <el-form-item>
67
+          <el-button type="primary" @click="addCommodity">添加商品</el-button>
68
+        </el-form-item>
69
+      </el-row>
70
+      <el-row>
71
+        <el-col :span='24'>
72
+          <el-form-item label="补发商品">
73
+            <el-table :data="commodityTableData" stripe style="width: 100%">
74
+              <el-table-column prop="F_ProductName" label="商品名称" align="center" ></el-table-column>
75
+              <el-table-column prop="F_Count" label="商品数量" align="center"></el-table-column>
76
+              <el-table-column label="操作" align="center">
77
+                <template slot-scope="scope">
78
+                  <el-button type="text" @click="btn_deleteCommodity(scope.row)">删除</el-button>
79
+                </template>
80
+              </el-table-column>
81
+            </el-table>
82
+          </el-form-item>
83
+        </el-col>
84
+      </el-row>
85
+      <el-row>
86
+        <el-col :span='24'>
87
+          <el-form-item label="退回商品">
88
+            <el-table :data="oldCommodityTableData" stripe style="width: 100%" @selection-change="handleSelectionChange" ref="oldCommodityTable" >
89
+              <el-table-column type="selection" width="55"></el-table-column>
90
+              <el-table-column prop="F_ProductName" label="商品名称" align="center" ></el-table-column>
91
+              <el-table-column prop="F_Count" label="商品数量" align="center"></el-table-column>
92
+            </el-table>
93
+          </el-form-item>
94
+        </el-col>
95
+      </el-row>
96
+      <el-form-item label="售后备注" prop="F_Remark">
97
+        <el-input :autosize="{ minRows: 4}" v-model="ruleForm.F_Remark" type="textarea" placeholder="请输入售后备注"/>
98
+      </el-form-item>
99
+      <el-form-item>
100
+        <el-button type="primary" @click="submitForm(0)">保存</el-button>
101
+        <el-button type="primary" @click="submitForm(1)">提交</el-button>
102
+      </el-form-item>
103
+    </el-form>
104
+  </div>
105
+</template>
106
+
107
+<script>
108
+import { getDictionaryValueList } from '@/api/commonAPI'
109
+import { getOrder } from '@/api/orderManagement/orderList'
110
+import { getCommodityType } from '@/api/commodityManagement/commodityType'
111
+import { getCommodityList } from '@/api/commodityManagement/commodityList'
112
+import { addAfterSaleList, getAfterSaleList, getAfterSaleOrderCommodityList } from "@/api/afterSaleManagement/afterSaleList";
113
+
114
+export default {
115
+  name: "AfterSale",
116
+  props: {
117
+    rowid: {
118
+      type: String,
119
+      default: ""
120
+    },
121
+    collectionAfterSalesReasonType: {
122
+      type: String,
123
+      default: ""
124
+    },
125
+    layerid: {
126
+      type: String,
127
+      default: ""
128
+    }
129
+  },
130
+  data() {
131
+    return {
132
+      parentids: [],
133
+      afterSaleReasonsList: [], //售后原因类型
134
+      commodityTypeLists: [], //商品分类下拉数据
135
+      // 自定义菜单下拉数据的key值
136
+      typeDropProps: {
137
+        value: 'id',
138
+        label: 'text'
139
+      },
140
+      commodityTableData: [], //添加商品
141
+      commoditySearchData: { //商品搜索数据
142
+        classId: '', // 商品分类id
143
+        className: '', // 商品分类名称
144
+        productName: '', //商品名称
145
+        productId: '', //商品id
146
+        num: 1, //商品数量
147
+      },
148
+      oldCommodityTableData: [], //退回商品列表
149
+      oldDetailListSelection: [], // 退回商品选中数据
150
+      ruleForm: {
151
+        F_OrderId: '', //订单编号
152
+        F_DetailList: '', //补发产品列表
153
+        F_OldDetailList: '', //退回产品列表
154
+        F_Type: '', //合并类型
155
+        F_Money: '', //减免金额
156
+        F_Remark: '', //销售备注
157
+        F_ReturnType: '', //售后原因类型
158
+        F_ReturnDes: '', //售后原因
159
+        F_ProductStatus: '', //退回商品状态
160
+        F_CheckStateSH: '', //0保存 1提交按钮 2不通过
161
+      },
162
+      rules: {
163
+        order1: [{
164
+          required: true,
165
+          trigger: 'blur',
166
+          message: '请输入订单编号1',
167
+        }],
168
+        order2: [{
169
+          required: true,
170
+          trigger: 'blur',
171
+          message: '请输入订单编号2',
172
+        }],
173
+        F_Type: [{
174
+          required: true,
175
+          trigger: 'change',
176
+          message: '请选择售后类型',
177
+        }],
178
+        F_Money: [{
179
+          required: true,
180
+          trigger: 'blur',
181
+          message: '请输入变动金额',
182
+        }],
183
+        F_ReturnType: [{
184
+          required: true,
185
+          trigger: 'change',
186
+          message: '请选择售后原因类型',
187
+        }],
188
+        F_ReturnDes: [{
189
+          required: true,
190
+          trigger: 'blur',
191
+          message: '请输入售后原因',
192
+        }],
193
+        F_ProductStatus: [{
194
+          required: true,
195
+          trigger: 'blur',
196
+          message: '请输入退回商品状态',
197
+        }],
198
+      },
199
+      loading: false
200
+    };
201
+  },
202
+  created() {
203
+    this.getCommodityTypeSelect()
204
+    this.getAfterSaleReasons()
205
+    Promise.all([
206
+    ]).then(() => {
207
+      if (this.rowid) {
208
+        this.ruleForm.F_OrderId = this.rowid
209
+        this.getAfterSaleOrderCommodity(this.rowid)
210
+      }
211
+      if (this.collectionAfterSalesReasonType) {
212
+        this.ruleForm.F_ReturnType = this.collectionAfterSalesReasonType
213
+      }
214
+    });
215
+  },
216
+  methods: {
217
+    submitForm(state) {
218
+      this.$refs.ruleForm.validate(valid => {
219
+        if (valid) {
220
+          this.loading = true;
221
+          this.ruleForm.F_CheckStateSH = state
222
+          //添加
223
+          addAfterSaleList(this.ruleForm).then(response => {
224
+            this.loading = false
225
+            if (response.state.toLowerCase() === 'success') {
226
+              this.$parent.$layer.close(this.layerid)
227
+              this.$parent.getList() // 重新加载父级数据
228
+              this.$message.success('恭喜你,添加成功!')
229
+            }
230
+          }).catch(() => {
231
+            this.loading = false
232
+          })
233
+          return
234
+        } else {
235
+          this.$message.error("请输入有效的必填项信息!");
236
+          return false;
237
+        }
238
+      });
239
+    },
240
+    //获取商品分类
241
+    getCommodityTypeSelect() {
242
+      this.loading = true
243
+      return new Promise(resolve => {
244
+        const data = {
245
+          pageindex: 1, // int 第几页
246
+          pagesize: 300, // int 每页几条信息
247
+          ParentId: 0,
248
+        }
249
+        getCommodityType(data).then(response => {
250
+          this.loading = false
251
+          if (response.state.toLowerCase() === 'success') {
252
+            this.commodityTypeLists = response.data
253
+          }
254
+        })
255
+        resolve()
256
+      })
257
+    },
258
+
259
+    commodityTypeChange(item) {
260
+      this.commoditySearchData.classId = this.parentids[this.parentids.length - 1]
261
+      this.getCommodityListSelect()
262
+    },
263
+    commodityListChange(item) {
264
+      this.commoditySearchData.productId = item.F_ProductId
265
+      this.commoditySearchData.productName = item.F_ProductName
266
+    },
267
+    //获取商品
268
+    getCommodityListSelect() {
269
+      this.loading = true
270
+      return new Promise(resolve => {
271
+        const params = {
272
+          pageindex: 1, // int 第几页,
273
+          pagesize: 300, // int 每页几条信息,
274
+          ProductId: '',
275
+          ClassId: this.commoditySearchData.classId === '' ? 0 : this.commoditySearchData.classId,
276
+          ClassName: '',
277
+          ProductName: '',
278
+          PinyinShort: '',
279
+          ProductNumber: '',
280
+          ProductShortName: '',
281
+          tag: '',
282
+          issale: 1,
283
+        }
284
+        getCommodityList(params).then(response => {
285
+          this.loading = false
286
+          if (response.state.toLowerCase() === 'success') {
287
+            this.commodityListLists = response.data.Rows
288
+          }
289
+        })
290
+        resolve()
291
+      })
292
+    },
293
+    addCommodity() {
294
+      if (this.commoditySearchData.productName === ''){
295
+        this.$message({
296
+          message: '请选择商品!',
297
+          type: 'warning'
298
+        })
299
+        return
300
+      }
301
+      if (this.commodityTableData.length > 0) {
302
+        for (let i=0; i < this.commodityTableData.length; i++ ) {
303
+          if (this.commodityTableData[i].F_ProductId === this.commoditySearchData.productId) {
304
+            this.commodityTableData[i].F_Count = this.commodityTableData[i].F_Count + this.commoditySearchData.num
305
+            return
306
+          }
307
+        }
308
+      }
309
+      let data = {
310
+        F_ProductId: this.commoditySearchData.productId,
311
+        F_ProductName: this.commoditySearchData.productName,
312
+        F_Count: this.commoditySearchData.num,
313
+      }
314
+      this.commodityTableData.push(data)
315
+      let idsQuantity = []
316
+      for (let i=0; i<this.commodityTableData.length; i++) {
317
+        idsQuantity.push(this.commodityTableData[i].F_ProductId + ',' +this.commodityTableData[i].F_Count)
318
+      }
319
+      this.ruleForm.F_DetailList = idsQuantity.join('|') //补发产品列表
320
+    },
321
+    //删除商品
322
+    btn_deleteCommodity (val) {
323
+      let index = this.commodityTableData.indexOf(val)
324
+      this.commodityTableData.splice(index, 1)
325
+    },
326
+    // 售后订单商品列表
327
+    getAfterSaleOrderCommodity(rid) {
328
+      const params = {
329
+        orderid: rid
330
+      }
331
+      getAfterSaleOrderCommodityList(params).then(response => {
332
+        if (response.state.toLowerCase() === 'success') {
333
+          const res = response.data
334
+          this.oldCommodityTableData = res
335
+          this.$nextTick(()=>{
336
+            this.oldCommodityTableData.forEach((row,index)=>{
337
+              this.$refs.oldCommodityTable.toggleRowSelection(row)
338
+            })
339
+          },1)
340
+        }
341
+      })
342
+    },
343
+    //售后原因类型
344
+    getAfterSaleReasons() {
345
+      return new Promise(resolve=>{
346
+        const params={
347
+          isleaf:true,
348
+          code:'AfterSaleReasons'
349
+        }
350
+        getDictionaryValueList(params).then(response=>{
351
+          if(response.state.toLowerCase() === 'success'){
352
+            this.afterSaleReasonsList = response.data.Rows
353
+          }
354
+        })
355
+      })
356
+    },
357
+    //选择多个
358
+    handleSelectionChange(selection) {
359
+      let idsQuantity = []
360
+      this.oldDetailListSelection = selection
361
+      for (let i=0; i<this.oldDetailListSelection.length; i++) {
362
+        idsQuantity.push(this.oldDetailListSelection[i].F_ProductId + ',' + this.oldDetailListSelection[i].F_Count)
363
+      }
364
+      this.ruleForm.F_OldDetailList = idsQuantity.join('|')
365
+    }, 
366
+  }
367
+};
368
+</script>
369
+
370
+<style rel="stylesheet/scss" lang="scss">
371
+.order_form .form_select {
372
+  width: 100%;
373
+}
374
+.form_input_number {
375
+  width: 100%; 
376
+}
377
+</style>

+ 407 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/detail.vue

@@ -0,0 +1,407 @@
1
+<template>
2
+  <div class="order_detail">
3
+    <el-row :gutter="20">
4
+      <el-col :md="24" class="order_detail_body">
5
+        <el-card shadow="hover">
6
+          <!-- <el-col :md="3">
7
+            <div class="round_img">
8
+              <img :src="avatar" alt="头像">
9
+            </div>
10
+          </el-col>-->
11
+          <el-col :md="21">
12
+            <h1 class="title">
13
+              <svg-icon class="title_icon" icon-class="hongqi" />会员信息
14
+            </h1>
15
+            <!-- <p class="title_sub"><span class="green">{{ name }}</span> {{ createtime }}</p> -->
16
+            <p class="title_sub">
17
+              <span class="green">{{ name }}</span> 足力健
18
+            </p>
19
+            <!-- <p class="title_sub">催单次数:<span class="red">10</span>次 | 工单状态: <span class="done">已完成</span></p> -->
20
+          </el-col>
21
+          <el-col :md="24" class="order_detail_content">
22
+            <el-col :md="6" class="order_detail_item">客户姓名:{{ name }}</el-col>
23
+            <el-col :md="6" class="order_detail_item">客户性别:{{ sex }}</el-col>
24
+            <el-col :md="6" class="order_detail_item">客户年龄:{{ age }}</el-col>
25
+            <el-col :md="6" class="order_detail_item">主号码:{{ phone | phoneFilter }}</el-col>
26
+            <el-col :md="6" class="order_detail_item">备用号码:{{ mobile1 | mobileFilter }}</el-col>
27
+            <el-col :md="6" class="order_detail_item">会员标签:{{ type }}</el-col>
28
+            <el-col :md="6" class="order_detail_item">会员生日:{{ birthday }}</el-col>
29
+            <el-col :md="6" class="order_detail_item">省份:{{ province }}</el-col>
30
+            <el-col :md="6" class="order_detail_item">市:{{ city }}</el-col>
31
+            <el-col :md="6" class="order_detail_item">县区:{{ area }}</el-col>
32
+            <el-col :md="6" class="order_detail_item">乡镇:{{ town }}</el-col>
33
+            <el-col :md="6" class="order_detail_item">详细地址:{{ address }}</el-col>
34
+            <el-col :md="6" class="order_detail_item">备用省份1:{{ province1 }}</el-col>
35
+            <el-col :md="6" class="order_detail_item">备用市1:{{ city1 }}</el-col>
36
+            <el-col :md="6" class="order_detail_item">备用县区1:{{ area1 }}</el-col>
37
+            <el-col :md="6" class="order_detail_item">备用乡镇1:{{ town1 }}</el-col>
38
+            <el-col :md="6" class="order_detail_item">备用详细地址1:{{ address1 }}</el-col>
39
+            <el-col :md="6" class="order_detail_item">备用省份2:{{ province2 }}</el-col>
40
+            <el-col :md="6" class="order_detail_item">备用市2:{{ city2 }}</el-col>
41
+            <el-col :md="6" class="order_detail_item">备用县区2:{{ area2 }}</el-col>
42
+            <el-col :md="6" class="order_detail_item">备用乡镇2:{{ town2 }}</el-col>
43
+            <el-col :md="6" class="order_detail_item">备用详细地址2:{{ address2 }}</el-col>
44
+            <el-col :md="6" class="order_detail_item">鞋码:{{ shoesize }}</el-col>
45
+            <el-col :md="6" class="order_detail_item">会员积分:{{ score }}</el-col>
46
+            <el-col :md="6" class="order_detail_item">推荐人:{{ recommender }}</el-col>
47
+            <el-col :md="6" class="order_detail_item">推荐人手机号:{{ recommenderTel }}</el-col>
48
+            <el-col :md="6" class="order_detail_item">累计消费金额:{{ money }}</el-col>
49
+            <el-col :md="6" class="order_detail_item">累计积分:{{ totalscore }}</el-col>
50
+            <el-col :md="6" class="order_detail_item">首次通话记录:{{ firstcalltime  }}</el-col>
51
+            <el-col :md="6" class="order_detail_item">末联通话记录:{{ lastholetime }}</el-col>
52
+            <el-col :md="6" class="order_detail_item">修改人:{{ F_LastModifyBy  }}</el-col>
53
+            <el-col :md="6" class="order_detail_item">修改时间:{{ F_LastModifyOn }}</el-col>
54
+            <!-- <el-col :md="18" :offset="6">
55
+              <el-button type="primary" size="mini" plain>打标签</el-button>
56
+              <el-button type="primary" size="mini" plain>赠送优惠券</el-button>
57
+              <el-button type="primary" size="mini" plain>群发短信</el-button>
58
+              <el-button type="primary" size="mini" plain>付费会员延期</el-button>
59
+              <el-button type="primary" size="mini" plain>会员等级</el-button>
60
+              <el-button type="primary" size="mini" plain>档案合并</el-button>
61
+              <el-button type="primary" size="mini" plain>档案拆分</el-button>
62
+            </el-col>-->
63
+          </el-col>
64
+        </el-card>
65
+      </el-col>
66
+      <!-- <el-col :md="12">
67
+        <el-card shadow="hover">
68
+          <div slot="header" class="clearfix">
69
+            <span>工单动态</span>
70
+          </div>
71
+          <div class="order_steps">
72
+            <el-steps :active="0" :space="100" direction="vertical" process-status="success">
73
+              <el-step title="已完成" description="2018-10-23 10:30:20 这是一段很长很长很长的描述性文字"/>
74
+              <el-step title="已转派" description="2018-10-23 10:30:20 这是一段很长很长很长的描述性文字"/>
75
+              <el-step title="已创建" description="2018-10-23 10:30:20 这是一段很长很长很长的描述性文字"/>
76
+            </el-steps>
77
+          </div>
78
+        </el-card>
79
+      </el-col>-->
80
+      <!-- <el-col :md="24">
81
+        <el-card shadow="hover" class="order_record">
82
+          <el-tabs v-model="activeName" @tab-click="handleClick">
83
+            <el-tab-pane label="催单记录(2)" name="first">
84
+              <div class="tab_body">
85
+                催单记录
86
+              </div>
87
+            </el-tab-pane>
88
+            <el-tab-pane label="录音记录(3)" name="second">
89
+              <div class="tab_body">
90
+                录音记录
91
+              </div>
92
+            </el-tab-pane>
93
+          </el-tabs>
94
+        </el-card>
95
+      </el-col>-->
96
+    </el-row>
97
+    <el-row>
98
+      <el-col>
99
+        被推荐人信息
100
+      </el-col>
101
+    </el-row>
102
+    <el-table
103
+      :data="dataLists"
104
+      border
105
+      stripe
106
+    >
107
+    <el-table-column
108
+       type="index"
109
+        label="编号"
110
+        align="center"
111
+        width=""
112
+      ></el-table-column>
113
+      <el-table-column
114
+        prop="F_Recommender"
115
+        label="推荐人"
116
+        align="center"
117
+        width=""
118
+      ></el-table-column>
119
+   <el-table-column
120
+        prop="F_RecommenderTel"
121
+        label="联系方式"
122
+        align="center"
123
+        width=""
124
+      ></el-table-column>
125
+    </el-table>
126
+   
127
+  </div>
128
+</template>
129
+
130
+<script>
131
+import { getMemberInfo } from '@/api/memberManagement/memberList'
132
+import { mapGetters } from 'vuex'
133
+import { filterContent } from '@/utils'
134
+
135
+export default {
136
+  name: 'Detail',
137
+  props: {
138
+    rowid: {
139
+      type: String,
140
+      default: ''
141
+    },
142
+    layerid: {
143
+      type: String,
144
+      default: ''
145
+    }
146
+  },
147
+  filters: {
148
+    phoneFilter(status) {
149
+      const mtel = status.substr(0, 3) + "****" +status.substr(7);
150
+      return mtel;
151
+    },
152
+     mobileFilter(status) {
153
+      const arr=status.split(',')
154
+      var mtel=''
155
+      for (let i = 0; i < arr.length; i++) {
156
+        mtel +=  arr[i].substr(0, 3) + "****" + arr[i].substr(7)+",";
157
+      }
158
+         return mtel;
159
+
160
+    },
161
+  },
162
+  data () {
163
+    return {
164
+      activeName: 'first',
165
+      name: '', // 姓名
166
+      phone: '', // 固定电话
167
+      sex: '', // 性别
168
+      age: '', // 年龄
169
+      mobile1: '', // 手机号码1
170
+      type: '', // 会员类型
171
+      postcode: '', // 邮编
172
+      shoesize: '', // 鞋码
173
+      regtime: '', // 会员日期
174
+      birthday: '', // 会员生日
175
+      score: '', // 会员积分
176
+      recommender: '', // 推荐人
177
+      recommenderTel: '', //推荐人手机号
178
+      money: '', // 累计消费金额
179
+      totalscore: '', // 累计积分
180
+      province: '', // 省
181
+      city: '', // 市
182
+      area: '', // 县
183
+      town: '', // 乡
184
+      address: '', // 地址
185
+      province1: '', // 省
186
+      city1: '', // 市
187
+      area1: '', // 县
188
+      town1: '', // 乡
189
+      address1: '', // 地址
190
+      province2: '', // 省
191
+      city2: '', // 市
192
+      area2: '', // 县
193
+      town2: '', // 乡
194
+      address2: '', // 地址
195
+      firstcalltime: '', //首次通话记录
196
+      lastholetime: '', // 末联通话记录
197
+      F_LastModifyOn:'',//修改时间
198
+      F_LastModifyBy:'',//修改人
199
+      
200
+      dataLists: [], // 列表数据
201
+    }
202
+   
203
+  },
204
+  computed: {
205
+    ...mapGetters([
206
+      'avatar'
207
+    ])
208
+  },
209
+  created () {
210
+    if (this.rowid) {
211
+      this.getDetail(this.rowid)
212
+    }
213
+  },
214
+  methods: {
215
+    handleClick (tab, event) {
216
+      console.log(tab, event)
217
+    },
218
+    // 详情
219
+    getDetail (rid) {
220
+      getMemberInfo(rid).then(response => {
221
+        const res = response.model
222
+        this.dataLists=response.viplist
223
+        console.log('res', res)
224
+        this.name = res.F_Name // 姓名
225
+        this.sex = res.F_Sex // 性别
226
+        this.age = res.F_Age // 年龄
227
+        this.mobile1 = res.F_Mobile // 手机号码1
228
+        this.phone = res.F_Phone // 固定电话
229
+        this.type = res.F_Label // 会员标签
230
+        this.postcode = res.F_Postcode // 邮编
231
+        this.shoesize = res.F_ShoeSize // 鞋码
232
+        this.regtime = res.F_RegTime // 会员日期
233
+        this.birthday = res.Birthday // 会员生日
234
+        this.score = res.F_Score // 会员积分
235
+        this.recommender = res.F_Recommender // 推荐人
236
+        this.recommenderTel = res.F_RecommenderTel // 推荐人
237
+        this.money = res.F_Money // 累计消费金额  
238
+        this.totalscore = res.F_TotalScore // 累计积分
239
+        this.province = res.F_Province // 省
240
+        this.city = res.F_City // 市
241
+        this.area = res.F_Area // 县
242
+        this.town = res.F_Town // 乡
243
+        this.address = res.F_Address // 详细地址
244
+        this.province1 = res.F_Province1 // 省
245
+        this.city1 = res.F_City1 // 市
246
+        this.area1 = res.F_Area1 // 县
247
+        this.town1 = res.F_Town1 // 乡
248
+        this.address1 = res.F_Address1 // 备用地址
249
+        this.province2 = res.F_Province2 // 省
250
+        this.city2 = res.F_City2 // 市
251
+        this.area2 = res.F_Area2 // 县
252
+        this.town2 = res.F_Town2 // 乡
253
+        this.address2 = res.F_Address2 // 备用地址
254
+        this.firstcalltime = res.F_Firstcalltime  //首次通话记录
255
+        this.lastholetime = res.F_Lastholetime // 末联通话记录
256
+         this.F_LastModifyOn=res.F_LastModifyOn//修改时间
257
+         this.F_LastModifyBy=res.F_LastModifyBy//修改人
258
+      })
259
+    }
260
+  }
261
+}
262
+</script>
263
+
264
+<style rel="stylesheet/scss" lang="scss">
265
+.order_detail {
266
+  .el-col {
267
+    margin-bottom: 20px;
268
+  }
269
+  .el-icon-time {
270
+    color: #d81e06;
271
+  }
272
+  .el-card__header {
273
+    padding-top: 14px;
274
+    padding-bottom: 14px;
275
+    background-color: #f5f5f6;
276
+  }
277
+  .order_file {
278
+    .el-card__body {
279
+      padding: 22px 0 0 0;
280
+      text-align: center;
281
+    }
282
+  }
283
+  .order_steps {
284
+    .el-step__icon-inner {
285
+      display: none;
286
+    }
287
+  }
288
+  .order_record {
289
+    .el-card__body {
290
+      padding: 0;
291
+    }
292
+    .el-tabs__header {
293
+      padding: 0px 20px;
294
+      background-color: #f5f5f6;
295
+      .el-tabs__item {
296
+        font-size: 16px;
297
+        height: 47px;
298
+        line-height: 47px;
299
+      }
300
+    }
301
+  }
302
+}
303
+</style>
304
+
305
+<style rel="stylesheet/scss" lang="scss" scoped>
306
+.order_detail {
307
+  .order_detail_body {
308
+    margin-bottom: 20px;
309
+    .round_img {
310
+      width: 90px;
311
+      height: 90px;
312
+      border-radius: 50%;
313
+      overflow: hidden;
314
+      margin: 14px;
315
+      img {
316
+        width: 100%;
317
+        height: 100%;
318
+      }
319
+    }
320
+    .title {
321
+      font-size: 20px;
322
+      .title_icon {
323
+        color: #d81e06;
324
+        font-size: 16px;
325
+        margin-right: 20px;
326
+      }
327
+    }
328
+    .title_sub {
329
+      font-size: 14px;
330
+      color: #666666;
331
+    }
332
+    .order_detail_content {
333
+      background-color: #f5f5f6;
334
+      padding-top: 20px;
335
+      color: #4c4c4c;
336
+      font-size: 14px;
337
+      .order_detail_item {
338
+        margin-bottom: 10px;
339
+        .order_content {
340
+          margin-top: 10px;
341
+        }
342
+        .order_file {
343
+          position: relative;
344
+          cursor: pointer;
345
+          .img_mask {
346
+            display: none;
347
+            position: absolute;
348
+            left: 0px;
349
+            top: 0px;
350
+            background-color: rgba(0, 0, 0, 0.3);
351
+            width: 100%;
352
+            height: 22px;
353
+            text-align: right;
354
+            z-index: 1;
355
+            i {
356
+              font-size: 20px;
357
+              line-height: 22px;
358
+              display: inline-block;
359
+              margin-right: 15px;
360
+              color: #fff;
361
+            }
362
+          }
363
+          p {
364
+            margin-top: 5px;
365
+            padding-left: 14px;
366
+            padding-right: 14px;
367
+            white-space: nowrap;
368
+            overflow: hidden;
369
+            text-overflow: ellipsis;
370
+          }
371
+          .file_icon {
372
+            height: 68px;
373
+            line-height: 68px;
374
+            font-size: 68px;
375
+            color: #409eff;
376
+          }
377
+        }
378
+        .order_file:hover .img_mask {
379
+          display: block;
380
+        }
381
+      }
382
+    }
383
+  }
384
+  .green {
385
+    color: #00c1de;
386
+  }
387
+  .done {
388
+    color: #198120;
389
+  }
390
+  .red {
391
+    color: #d81e06;
392
+  }
393
+  .yellow {
394
+    color: #e6a23c;
395
+  }
396
+  .order_steps {
397
+    // height: 240px;
398
+    .el-step__icon-inner {
399
+      display: none;
400
+    }
401
+  }
402
+
403
+  .tab_body {
404
+    padding: 0 20px 20px 20px;
405
+  }
406
+}
407
+</style>

+ 107 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/editLabel.vue

@@ -0,0 +1,107 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="已选中标签" prop="SelectedLabel">
5
+        <el-input v-model="ruleForm.SelectedLabel" placeholder="已选中标签"></el-input>
6
+      </el-form-item>
7
+      <el-form-item>
8
+        <el-button type="primary" @click="submitForm">保存</el-button>
9
+      </el-form-item>
10
+    </el-form>
11
+  </div>
12
+</template>
13
+
14
+<script>
15
+import { getProviceCity, getDictionary } from '@/api/commonAPI'
16
+import { getOrder, addOrder } from '@/api/memberManagement/memberList'
17
+import { validateTel } from '@/utils/validate'
18
+import { filterContent } from '@/utils'
19
+
20
+export default {
21
+  name: 'EditLabel',
22
+  props: {
23
+    rowid: {
24
+      type: String,
25
+      default: ''
26
+    },
27
+    callid: {
28
+      type: Number,
29
+      default: 0
30
+    },
31
+    layerid: {
32
+      type: String,
33
+      default: ''
34
+    }
35
+  },
36
+  data() {
37
+    return {
38
+      props: { // 自定义省市下拉数据的key值
39
+        value: 'code',
40
+        label: 'name',
41
+        children: 'entityJson'
42
+      },
43
+      sourceOptions: [], // 工单来源下拉数据
44
+      ruleForm: {
45
+        unique_id: '', //		否	string	callid
46
+        ordercode: '',
47
+        SelectedLabel: '',
48
+        labelDescription: '',
49
+      },
50
+      rules: {
51
+        SelectedLabel: [{
52
+          required: true,
53
+          trigger: 'blur',
54
+          message: '已选中标签',
55
+        }]
56
+      },
57
+      loading: false
58
+    }
59
+  },
60
+  created() {
61
+    if (this.callid) {
62
+      this.ruleForm.unique_id = this.callid
63
+    }
64
+    Promise.all([])
65
+      .then(() => {
66
+        if (this.rowid) {
67
+          this.ruleForm.ordercode = this.rowid
68
+          console.log("rowid",this.rowid)
69
+        }
70
+      })
71
+  },
72
+  methods: {
73
+    submitForm() {
74
+      this.$refs.ruleForm.validate((valid) => {
75
+        if (valid) {
76
+          this.ruleForm.content = filterContent.delHtmlTag(this.ruleForm.content)// 保存内容时去掉 html 标签
77
+          this.loading = true
78
+          // 添加
79
+          addOrder(this.ruleForm).then(response => {
80
+            this.loading = false
81
+            if (response.state.toLowerCase() === 'success') {
82
+              this.$parent.$layer.close(this.layerid)
83
+              this.$parent.getList() // 重新加载父级数据
84
+              this.$message.success('恭喜你,添加成功!')
85
+            }
86
+          }).catch(() => {
87
+            this.loading = false
88
+          })
89
+          return
90
+        } else {
91
+          this.$message.error('请输入有效的必填项信息!')
92
+          return false
93
+        }
94
+      })
95
+    },
96
+    resetForm() {
97
+      this.$refs.ruleForm.resetFields()
98
+    },
99
+  }
100
+}
101
+</script>
102
+
103
+<style rel="stylesheet/scss" lang="scss">
104
+.order_form .form_select{
105
+	width: 100%;
106
+}
107
+</style>

+ 118 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/freeCoupons.vue

@@ -0,0 +1,118 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="优惠券">
5
+        <el-select v-model="ruleForm.labelName" class="form_select" placeholder="优惠券">
6
+          <el-option label="全部" value="0"></el-option>
7
+          <el-option label="代金券" value="1"></el-option>
8
+          <el-option label="折扣券" value="2"></el-option>
9
+          <el-option label="兑换券" value="3"></el-option>
10
+        </el-select>
11
+      </el-form-item>
12
+      <el-form-item label="优惠券">
13
+        <el-select v-model="ruleForm.labelName" class="form_select" placeholder="优惠券">
14
+          <el-option label="全部" value="0"></el-option>
15
+          <el-option label="代金券" value="1"></el-option>
16
+          <el-option label="折扣券" value="2"></el-option>
17
+          <el-option label="兑换券" value="3"></el-option>
18
+        </el-select>
19
+      </el-form-item>
20
+      <el-form-item>
21
+        <el-button type="primary" @click="submitForm">保存</el-button>
22
+      </el-form-item>
23
+    </el-form>
24
+  </div>
25
+</template>
26
+
27
+<script>
28
+import { getProviceCity, getDictionary } from '@/api/commonAPI'
29
+import { getOrder, addOrder } from '@/api/memberManagement/memberList'
30
+import { validateTel } from '@/utils/validate'
31
+import { filterContent } from '@/utils'
32
+
33
+export default {
34
+  name: 'FreeCoupons',
35
+  props: {
36
+    rowid: {
37
+      type: String,
38
+      default: ''
39
+    },
40
+    callid: {
41
+      type: Number,
42
+      default: 0
43
+    },
44
+    layerid: {
45
+      type: String,
46
+      default: ''
47
+    }
48
+  },
49
+  data() {
50
+    return {
51
+      props: { // 自定义省市下拉数据的key值
52
+        value: 'code',
53
+        label: 'name',
54
+        children: 'entityJson'
55
+      },
56
+      sourceOptions: [], // 工单来源下拉数据
57
+      ruleForm: {
58
+        unique_id: '', //		否	string	callid
59
+        ordercode: '',
60
+        labelName: '',
61
+        labelDescription: '',
62
+      },
63
+      rules: {
64
+        labelName: [{
65
+          required: true,
66
+          trigger: 'blur',
67
+          message: '请输入标签姓名',
68
+        }]
69
+      },
70
+      loading: false
71
+    }
72
+  },
73
+  created() {
74
+    if (this.callid) {
75
+      this.ruleForm.unique_id = this.callid
76
+    }
77
+    Promise.all([])
78
+      .then(() => {
79
+        if (this.rowid) {
80
+          this.ruleForm.ordercode = this.rowid
81
+        }
82
+      })
83
+  },
84
+  methods: {
85
+    submitForm() {
86
+      this.$refs.ruleForm.validate((valid) => {
87
+        if (valid) {
88
+          this.ruleForm.content = filterContent.delHtmlTag(this.ruleForm.content)// 保存内容时去掉 html 标签
89
+          this.loading = true
90
+          addOrder(this.ruleForm).then(response => {
91
+            this.loading = false
92
+            if (response.state.toLowerCase() === 'success') {
93
+              this.$parent.$layer.close(this.layerid)
94
+              this.$parent.getList() // 重新加载父级数据
95
+              this.$message.success('恭喜你,添加成功!')
96
+            }
97
+          }).catch(() => {
98
+            this.loading = false
99
+          })
100
+          return
101
+        } else {
102
+          this.$message.error('请输入有效的必填项信息!')
103
+          return false
104
+        }
105
+      })
106
+    },
107
+    resetForm() {
108
+      this.$refs.ruleForm.resetFields()
109
+    },
110
+  }
111
+}
112
+</script>
113
+
114
+<style rel="stylesheet/scss" lang="scss">
115
+.order_form .form_select{
116
+	width: 100%;
117
+}
118
+</style>

+ 134 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/importFile.vue

@@ -0,0 +1,134 @@
1
+<template>
2
+  <div class="importFile">
3
+    <el-alert title="选取的EXCEL文件需要严格按照下载的EXCEL模板进行填写!选择好文件后点击导入即可!" type="warning" class="md" show-icon/>
4
+    <el-row>
5
+      <el-col :lg="7" class="md">
6
+        <a :href="downloadUrl" download="会员信息导入模板.xlsx" class="download_btn" title="点击下载EXCEL模板" rel="nofollow">
7
+          下载EXCEL模板
8
+        </a>
9
+      </el-col>
10
+      <el-col :lg="17" class="md">
11
+        <el-upload
12
+          ref="upload"
13
+          :limit="1"
14
+          :file-list="uploadData.fileList"
15
+          :action= "uploadData.uploadUrl"
16
+          :data = "uploadData.uploaderFiles"
17
+          :headers="{'Authorization': token}"
18
+          :on-success="uploadSuccess"
19
+          :on-error="uploadError"
20
+          :on-exceed="uploadExceed"
21
+          :auto-upload="false"
22
+          class="uploadFiles"
23
+          list-type="text"
24
+          name="upFile"
25
+          accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
26
+          <el-button slot="trigger" size="small" type="primary">选取EXCEL文件</el-button>
27
+          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">导入</el-button>
28
+          <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
29
+        </el-upload>
30
+      </el-col>
31
+    </el-row>
32
+  </div>
33
+</template>
34
+
35
+<script>
36
+import { mapGetters } from 'vuex'
37
+export default {
38
+  name: 'ImportFile',
39
+  props: {
40
+    rowid: {
41
+      type: String,
42
+      default: ''
43
+    },
44
+    layerid: {
45
+      type: String,
46
+      default: ''
47
+    }
48
+  },
49
+  computed: {
50
+    ...mapGetters([
51
+      'token'
52
+    ])
53
+  },
54
+  data() {
55
+    return {
56
+      downloadUrl: '/static/xls/huiyuanxinxiTemplate.xlsx',
57
+      uploadData: {// 文件上传数据
58
+        uploadUrl: this.$store.getters.serverConfig.BASE_API + 'api/vipinfo/importexcel',
59
+        uploaderFiles: {// 上传文件的参数
60
+          // taskid: this.rowid // 是	string	任务id
61
+        },
62
+        fileList: [] // 展示文件的数据
63
+      }
64
+    }
65
+  },
66
+  created() {
67
+  },
68
+  methods: {
69
+    submitUpload() {
70
+      this.$refs.upload.submit()
71
+    },
72
+    // 文件上传
73
+    uploadSuccess(response, file, fileList) {
74
+      if (response.state.toLowerCase() === 'success') {
75
+        this.$parent.$layer.close(this.layerid)
76
+        this.$parent.$parent.getList() // 重新加载父级数据
77
+        this.$message.success('恭喜你,会员信息导入成功!')
78
+      } else {
79
+        this.$message.error(response.message)
80
+      }
81
+    },
82
+    uploadExceed(file, fileList) {
83
+      this.$message.warning('只能选择一个文件!')
84
+    },
85
+    uploadError(err, file, fileList) {
86
+      this.$message.error(err)
87
+    }
88
+  }
89
+}
90
+</script>
91
+
92
+<style rel="stylesheet/scss" lang="scss">
93
+
94
+</style>
95
+<style rel="stylesheet/scss" lang="scss" scoped>
96
+	.importFile{
97
+		.md{
98
+			margin-bottom: 20px;
99
+		}
100
+		.download_btn{
101
+			display: inline-block;
102
+			line-height: 1;
103
+			white-space: nowrap;
104
+			cursor: pointer;
105
+			border: 1px solid #dcdfe6;
106
+			-webkit-appearance: none;
107
+			text-align: center;
108
+			-webkit-box-sizing: border-box;
109
+			box-sizing: border-box;
110
+			outline: 0;
111
+			margin: 0;
112
+			-webkit-transition: .1s;
113
+			transition: .1s;
114
+			font-weight: 500;
115
+			padding: 9px 15px;
116
+			font-size: 12px;
117
+			border-radius: 4px;
118
+			color: #fff;
119
+			background-color: #409EFF;
120
+			border-color: #409EFF;
121
+			&:hover{
122
+				background: #66b1ff;
123
+				border-color: #66b1ff;
124
+				color: #fff;
125
+			}
126
+			&:active{
127
+				background: #66b1ff;
128
+				border-color: #66b1ff;
129
+				color: #fff;
130
+			}
131
+		}
132
+	}
133
+
134
+</style>

+ 114 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/memberExtension.vue

@@ -0,0 +1,114 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="付费会员类型">
5
+        <el-select v-model="ruleForm.paidMemberType" class="form_select" placeholder="付费会员类型">
6
+          <el-option label="一般付费" value="0"></el-option>
7
+          <el-option label="超级付费" value="1"></el-option>
8
+        </el-select>
9
+      </el-form-item>
10
+      <el-form-item label="延期条件">
11
+        <el-select v-model="ruleForm.extensionCondition" class="form_select" placeholder="延期条件">
12
+          <el-option label="指定会员或指定条件" value="0"></el-option>
13
+          <el-option label="付费会员已失效" value="1"></el-option>
14
+        </el-select>
15
+      </el-form-item>
16
+      <el-form-item label="延期天数" prop="deferredDays">
17
+        <el-input v-model="ruleForm.deferredDays" placeholder="请输入延期天数"/>
18
+      </el-form-item>
19
+      <el-form-item>
20
+        <el-button type="primary" @click="submitForm">保存</el-button>
21
+        <el-button @click="resetForm">重置</el-button>
22
+      </el-form-item>
23
+    </el-form>
24
+  </div>
25
+</template>
26
+
27
+<script>
28
+import { getProviceCity, getDictionary } from '@/api/commonAPI'
29
+import { getOrder, addOrder } from '@/api/memberManagement/memberList'
30
+import { validateTel } from '@/utils/validate'
31
+import { filterContent } from '@/utils'
32
+
33
+export default {
34
+  name: 'MemberExtension',
35
+  props: {
36
+    rowid: {
37
+      type: String,
38
+      default: ''
39
+    },
40
+    callid: {
41
+      type: Number,
42
+      default: 0
43
+    },
44
+    layerid: {
45
+      type: String,
46
+      default: ''
47
+    }
48
+  },
49
+  data() {
50
+    return {
51
+      props: { // 自定义省市下拉数据的key值
52
+        value: 'code',
53
+        label: 'name',
54
+        children: 'entityJson'
55
+      },
56
+      sourceOptions: [], // 工单来源下拉数据
57
+      ruleForm: {
58
+        unique_id: '', //		否	string	callid
59
+        ordercode: '', 
60
+        paidMemberType: '', // 付费会员类型 
61
+        extensionCondition: '', // 延期条件
62
+        deferredDays: '', // 延期天数
63
+      },
64
+      rules: {
65
+      },
66
+      loading: false
67
+    }
68
+  },
69
+  created() {
70
+    if (this.callid) {
71
+      this.ruleForm.unique_id = this.callid
72
+    }
73
+    Promise.all([])
74
+      .then(() => {
75
+        if (this.rowid) {
76
+          this.ruleForm.ordercode = this.rowid
77
+        }
78
+      })
79
+  },
80
+  methods: {
81
+    submitForm() {
82
+      this.$refs.ruleForm.validate((valid) => {
83
+        if (valid) {
84
+          this.ruleForm.content = filterContent.delHtmlTag(this.ruleForm.content)// 保存内容时去掉 html 标签
85
+          this.loading = true
86
+          addOrder(this.ruleForm).then(response => {
87
+            this.loading = false
88
+            if (response.state.toLowerCase() === 'success') {
89
+              this.$parent.$layer.close(this.layerid)
90
+              this.$parent.getList() // 重新加载父级数据
91
+              this.$message.success('恭喜你,添加成功!')
92
+            }
93
+          }).catch(() => {
94
+            this.loading = false
95
+          })
96
+          return
97
+        } else {
98
+          this.$message.error('请输入有效的必填项信息!')
99
+          return false
100
+        }
101
+      })
102
+    },
103
+    resetForm() {
104
+      this.$refs.ruleForm.resetFields()
105
+    },
106
+  }
107
+}
108
+</script>
109
+
110
+<style rel="stylesheet/scss" lang="scss">
111
+.order_form .form_select{
112
+	width: 100%;
113
+}
114
+</style>

+ 113 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/memberLevel.vue

@@ -0,0 +1,113 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="会员等级">
5
+        <el-select v-model="ruleForm.memberLevelInput" class="form_select" placeholder="优惠券">
6
+          <el-option label="普通会员" value="0"></el-option>
7
+          <el-option label="高级会员" value="1"></el-option>
8
+          <el-option label="尊贵会员" value="2"></el-option>
9
+          <el-option label="黄金会员" value="3"></el-option>
10
+        </el-select>
11
+      </el-form-item>
12
+      <el-form-item label="备注">
13
+        <el-input
14
+          type="textarea"
15
+          :rows="4"
16
+          placeholder="备注"
17
+          v-model="ruleForm.textarea">
18
+        </el-input>
19
+      </el-form-item>
20
+      <el-form-item>
21
+        <el-button type="primary" @click="submitForm">保存</el-button>
22
+        <el-button @click="resetForm">重置</el-button>
23
+      </el-form-item>
24
+    </el-form>
25
+  </div>
26
+</template>
27
+
28
+<script>
29
+import { getProviceCity, getDictionary } from '@/api/commonAPI'
30
+import { getOrder, addOrder } from '@/api/memberManagement/memberList'
31
+import { validateTel } from '@/utils/validate'
32
+import { filterContent } from '@/utils'
33
+
34
+export default {
35
+  name: 'MemberLevel',
36
+  props: {
37
+    rowid: {
38
+      type: String,
39
+      default: ''
40
+    },
41
+    callid: {
42
+      type: Number,
43
+      default: 0
44
+    },
45
+    layerid: {
46
+      type: String,
47
+      default: ''
48
+    }
49
+  },
50
+  data() {
51
+    return {
52
+      props: { // 自定义省市下拉数据的key值
53
+        value: 'code',
54
+        label: 'name',
55
+        children: 'entityJson'
56
+      },
57
+      sourceOptions: [], // 工单来源下拉数据
58
+      ruleForm: {
59
+        unique_id: '', //		否	string	callid
60
+        ordercode: '',
61
+        memberLevelInput: '', // 会员等级
62
+      },
63
+      rules: {
64
+      },
65
+      loading: false
66
+    }
67
+  },
68
+  created() {
69
+    if (this.callid) {
70
+      this.ruleForm.unique_id = this.callid
71
+    }
72
+    Promise.all([])
73
+      .then(() => {
74
+        if (this.rowid) {
75
+          this.ruleForm.ordercode = this.rowid
76
+        }
77
+      })
78
+  },
79
+  methods: {
80
+    submitForm() {
81
+      this.$refs.ruleForm.validate((valid) => {
82
+        if (valid) {
83
+          this.ruleForm.content = filterContent.delHtmlTag(this.ruleForm.content)// 保存内容时去掉 html 标签
84
+          this.loading = true
85
+          addOrder(this.ruleForm).then(response => {
86
+            this.loading = false
87
+            if (response.state.toLowerCase() === 'success') {
88
+              this.$parent.$layer.close(this.layerid)
89
+              this.$parent.getList() // 重新加载父级数据
90
+              this.$message.success('恭喜你,添加成功!')
91
+            }
92
+          }).catch(() => {
93
+            this.loading = false
94
+          })
95
+          return
96
+        } else {
97
+          this.$message.error('请输入有效的必填项信息!')
98
+          return false
99
+        }
100
+      })
101
+    },
102
+    resetForm() {
103
+      this.$refs.ruleForm.resetFields()
104
+    },
105
+  }
106
+}
107
+</script>
108
+
109
+<style rel="stylesheet/scss" lang="scss">
110
+.order_form .form_select{
111
+	width: 100%;
112
+}
113
+</style>

+ 90 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/mergeId.vue

@@ -0,0 +1,90 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-form>
4
+      <el-form-item label="选择主档案">
5
+        <el-radio-group v-model="radioTreaty" @change="agreeChange">
6
+          <el-radio :label="idsOne" border>{{ vipNameOne }}</el-radio>
7
+          <el-radio :label="idsTwo" border>{{ vipNameTwo }}</el-radio>
8
+        </el-radio-group>
9
+      </el-form-item>
10
+      <el-button class="btn_merge" type="primary" @click="onSubmit">合并</el-button>
11
+    </el-form>
12
+  </div>
13
+</template>
14
+<script>
15
+import {
16
+  Merge
17
+} from '@/api/memberManagement/memberList'
18
+export default {
19
+  props: {
20
+    name: {
21
+      type: Array,
22
+      default: []
23
+    },
24
+    ids: {
25
+      type: Array,
26
+      default: []
27
+    },
28
+    layerid: {
29
+      type: String,
30
+      default: ''
31
+    }
32
+  },
33
+  data() {
34
+    return {
35
+      radioTreaty: [],
36
+      vipNameOne: '', // name1
37
+      vipNameTwo: '', // name2
38
+      idsOne: '',
39
+      idsTwo: '',
40
+      selectOne: '',
41
+      selectTwo: ''
42
+    }
43
+  },
44
+  created() {
45
+    this.radioTreaty = this.ids
46
+    for (var i = 0; i < this.name.length; i++) {
47
+      this.vipNameOne = this.name[0]
48
+      this.vipNameTwo = this.name[1]
49
+    }
50
+    for (var j = 0; j < this.radioTreaty.length; j++) {
51
+      this.idsOne = this.radioTreaty[0]
52
+      this.idsTwo = this.radioTreaty[1]
53
+    }
54
+  },
55
+  methods: {
56
+    agreeChange: function(val) {
57
+      this.selectOne = val
58
+      if (this.selectOne == this.idsOne) {
59
+        this.selectTwo = this.idsTwo
60
+      } else if (this.selectOne == this.idsTwo) {
61
+        this.selectTwo = this.idsOne
62
+      }
63
+    },
64
+    onSubmit() {
65
+      const params = {
66
+        MainID: this.selectOne,
67
+        ViceID: this.selectTwo
68
+      }
69
+      Merge(params).then((response) => {
70
+        if (response.state.toLowerCase() === 'success') {
71
+          this.$parent.$layer.close(this.layerid)
72
+          this.$parent.getList() // 重新加载父级数据
73
+          this.$message.success('合并成功!')
74
+        }
75
+      })
76
+        .catch(() => {
77
+          this.$message.info('已取消合并')
78
+        })
79
+    }
80
+  }
81
+
82
+}
83
+</script>
84
+<style rel="stylesheet/scss" lang="scss" scoped>
85
+.btn_merge{
86
+    display: block;
87
+    margin-top: 20px;
88
+}
89
+</style>
90
+

+ 395 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/searchFilter.vue

@@ -0,0 +1,395 @@
1
+<template>
2
+  <div class="filter-container">
3
+    <el-date-picker
4
+      v-model="searchDatas.memberBirthday"
5
+      type="date"
6
+      placeholder="会员生日"
7
+      value-format="yyyy-MM-dd"
8
+      class="filter-item"
9
+    />
10
+    <el-select
11
+      v-model="searchDatas.labelList"
12
+      placeholder="请选择会员标签"
13
+      class="form_select"
14
+      clearable
15
+    >
16
+      <el-option
17
+        v-for="item in labelList"
18
+        :key="item.F_Id"
19
+        :label="item.F_Name"
20
+        :value="item.F_Name"
21
+      />
22
+    </el-select>
23
+    <el-cascader
24
+      ref="myCascader"
25
+      v-model="searchDatas.provinceCity"
26
+      :options="provinceCityDatas"
27
+      :props="props"
28
+      placeholder="请选择地区"
29
+      class="form_select area"
30
+      clearable
31
+      change-on-select
32
+      @change="handleItemChange"
33
+    />
34
+    <el-input
35
+      v-model="searchDatas.customerName"
36
+      placeholder="客户姓名"
37
+      class="filter-item"
38
+    />
39
+    <el-input
40
+      v-model="searchDatas.phoneNumber"
41
+      placeholder="手机号码"
42
+      class="filter-item"
43
+    />
44
+    <el-input
45
+      v-model="searchDatas.address"
46
+      placeholder="详细地址"
47
+      class="filter-item"
48
+    />
49
+    <el-input
50
+      v-model="searchDatas.referrer"
51
+      placeholder="推荐人"
52
+      class="filter-item"
53
+    />
54
+    <el-input
55
+      v-model="searchDatas.saleperson"
56
+      placeholder="销售负责人"
57
+      class="filter-item"
58
+    />
59
+    <!-- <el-input v-model="searchDatas.contactFrequency" placeholder="联系频次" class="filter-item"></el-input> -->
60
+    <el-button
61
+      type="primary"
62
+      class="filter-item"
63
+      icon="el-icon-search"
64
+      @click="btn_search"
65
+    >搜索</el-button
66
+    >
67
+
68
+    <!-- <el-button
69
+      v-permission="'HY_label'"
70
+      type="primary"
71
+      class="filter-item"
72
+      @click="btn_label"
73
+    >打标签</el-button
74
+    > -->
75
+    <!-- <el-button
76
+      v-permission="'HY_coupon'"
77
+      type="primary"
78
+      class="filter-item"
79
+      @click="btn_coupon"
80
+    >赠送优惠券</el-button
81
+    > -->
82
+    <!-- <el-button
83
+      v-permission="'HY_send_message'"
84
+      type="primary"
85
+      class="filter-item"
86
+      @click="btn_send_message"
87
+    >群发短信</el-button
88
+    >
89
+    <el-button
90
+      v-permission="'HY_member_extension'"
91
+      type="primary"
92
+      class="filter-item"
93
+      @click="btn_member_extension"
94
+    >付费会员延期</el-button
95
+    >
96
+    <el-button
97
+      v-permission="'HY_member_level'"
98
+      type="primary"
99
+      class="filter-item"
100
+      @click="btn_member_level"
101
+    >会员等级</el-button
102
+    >
103
+    <el-button type="primary" class="filter-item" @click="btn_import">
104
+      <svg-icon icon-class="daoru" />导入
105
+    </el-button>
106
+    <el-button
107
+      type="primary"
108
+      class="filter-item"
109
+      @click="btn_export"
110
+    >导出</el-button
111
+    >
112
+    <el-button type="primary" class="filter-item" @click="btn_file_merge">档案合并</el-button>
113
+    <el-button type="primary" class="filter-item" @click="btn_file_split">档案拆分</el-button> -->
114
+    <el-button
115
+      type="primary"
116
+      class="filter-item"
117
+      icon="el-icon-plus"
118
+      @click="btn_add"
119
+    >添加</el-button
120
+    >
121
+    <!-- <el-button
122
+      type="primary"
123
+      class="filter-item"
124
+      @click="btn_deletes"
125
+    >批量删除</el-button
126
+    >
127
+    <el-button
128
+      type="primary"
129
+      class="filter-item"
130
+      @click="transfer"
131
+    >转移</el-button
132
+    > -->
133
+  </div>
134
+</template>
135
+
136
+<script>
137
+import {
138
+  getProviceCity,
139
+  getDictionary,
140
+  getProviceCityById
141
+} from '@/api/commonAPI'
142
+import { pickerOptions } from '@/utils'
143
+import addOrEdit from './addOrEdit'
144
+import editLabel from './editLabel'
145
+import freeCoupons from './freeCoupons'
146
+import sendGroupMessage from './sendGroupMessage'
147
+import memberExtension from './memberExtension'
148
+import memberLevel from './memberLevel'
149
+import importFile from './importFile'
150
+import { getLabelLists } from '@/api/memberManagement/memberList'
151
+export default {
152
+  name: 'SearchFilter',
153
+  props: {
154
+    searchDatas: {
155
+      required: true,
156
+      type: Object,
157
+      default() {
158
+        return {
159
+          customerName: '', // 客户姓名
160
+          phoneNumber: '', // 手机号码
161
+          labelList: '', // 会员标签
162
+          // province: '', //省份
163
+          // city: '', //市
164
+          // county: '', //县区
165
+          // township: '', //乡镇
166
+          address: '', // 详细地址
167
+          memberBirthday: '', // 会员生日
168
+          referrer: '', // 推荐人
169
+          saleperson: '', // 销售负责人
170
+          // contactFrequency: "", //联系频次
171
+          provinceCity: [] // 省市下拉绑定的值
172
+        }
173
+      }
174
+    },
175
+    selectedId: Array
176
+    // provinceCity: Array,
177
+  },
178
+  data() {
179
+    return {
180
+      provinceCityDatas: [], // 省市下拉数据
181
+      provinceCityText: [], // 省市下拉绑定的值
182
+      props: {
183
+        // 自定义省市下拉数据的key值
184
+        value: 'id',
185
+        label: 'text',
186
+        children: 'children'
187
+      },
188
+      addressParams: {
189
+        pid: 1
190
+      },
191
+      level: 0, // 城市等级
192
+      deptOptions: [], // 咨询/投诉下拉数据
193
+      labelList: [], // 会员类型下拉数据
194
+      pickerOptions // 日期数据
195
+    }
196
+  },
197
+  created() {
198
+    this.getType()
199
+    this.getProCity()
200
+  },
201
+  methods: {
202
+    btn_search() {
203
+      console.log(this.provinceCityText)
204
+      this.$emit('search', this.searchDatas, this.provinceCityText)
205
+    },
206
+    btn_export() {
207
+      this.$emit('export', this.searchDatas, this.provinceCityText)
208
+    },
209
+    btn_deletes() {
210
+      this.$emit('delorders')
211
+    },
212
+    transfer() {
213
+      this.$emit('transfer')
214
+    },
215
+    btn_add() {
216
+      this.$layer.iframe({
217
+        content: {
218
+          content: addOrEdit, // 传递的组件对象
219
+          parent: this, // 当前的vue对象
220
+          data: { rowid: '' } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
221
+        },
222
+        area: ['80%', '90%'],
223
+        title: '添加会员信息'
224
+      })
225
+    },
226
+    btn_label() {
227
+      this.$layer.iframe({
228
+        content: {
229
+          content: editLabel,
230
+          parent: this,
231
+          data: { rowid: this.selectedId }
232
+        },
233
+        area: ['80%', '90%'],
234
+        title: '打标签'
235
+      })
236
+    },
237
+    btn_coupon() {
238
+      this.$layer.iframe({
239
+        content: {
240
+          content: freeCoupons, // 传递的组件对象
241
+          parent: this, // 当前的vue对象
242
+          data: { rowid: this.selectedId } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
243
+        },
244
+        area: ['80%', '90%'],
245
+        title: '赠送优惠券'
246
+      })
247
+    },
248
+    btn_send_message() {
249
+      this.$layer.iframe({
250
+        content: {
251
+          content: sendGroupMessage, // 传递的组件对象
252
+          parent: this, // 当前的vue对象
253
+          data: { rowid: this.selectedId } // props
254
+        },
255
+        area: ['80%', '90%'],
256
+        title: '群发短信'
257
+      })
258
+    },
259
+    btn_member_extension() {
260
+      this.$layer.iframe({
261
+        content: {
262
+          content: memberExtension, // 传递的组件对象
263
+          parent: this, // 当前的vue对象
264
+          data: { rowid: this.selectedId } // props
265
+        },
266
+        area: ['80%', '90%'],
267
+        title: '付费会员延期'
268
+      })
269
+    },
270
+    btn_member_level() {
271
+      this.$layer.iframe({
272
+        content: {
273
+          content: memberLevel, // 传递的组件对象
274
+          parent: this, // 当前的vue对象
275
+          data: { rowid: this.selectedId } // props
276
+        },
277
+        area: ['80%', '90%'],
278
+        title: '会员等级'
279
+      })
280
+    },
281
+    btn_import() {
282
+      // if (!this.planId) {
283
+      //   this.$message.warning('请先选择一行!')
284
+      //   return
285
+      // }
286
+      this.$layer.iframe({
287
+        content: {
288
+          content: importFile, // 传递的组件对象
289
+          parent: this, // 当前的vue对象
290
+          data: { rowid: '' } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
291
+        },
292
+        area: ['40%', '380px'],
293
+        shadeClose: false,
294
+        title: '导入会员信息'
295
+      })
296
+    },
297
+    btn_file_merge() {
298
+      this.$emit('merge')
299
+    },
300
+    btn_file_split() {
301
+      this.$emit('split')
302
+    },
303
+    // 获取省市下拉数据
304
+    // getProCity() {
305
+    //   return new Promise(resolve => {
306
+    //     const params={
307
+    //       level:1
308
+    //     }
309
+    //     getProviceCity(params).then(response => {
310
+    //       if (response.state.toLowerCase() === 'success') {
311
+    //         this.provinceCityDatas = response.data
312
+    //       }
313
+    //     })
314
+    //     resolve()
315
+    //   })
316
+    // },
317
+    getProCity() {
318
+      getProviceCityById(this.addressParams)
319
+        .then((res) => {
320
+          this.provinceCityDatas = this.handleData(res.data)
321
+        })
322
+        .catch((err) => {})
323
+    },
324
+    handleItemChange(val) {
325
+      this.provinceCityText = this.$refs['myCascader'].currentLabels
326
+      const pid = val ? val[val.length - 1] : 1 // id值
327
+      this.level = val.length + 1 // 判断第几级
328
+      this.provinceCityDatas = this.handleData(
329
+        this.provinceCityDatas,
330
+        pid,
331
+        this.level
332
+      )
333
+    },
334
+    handleData(data, val, level) {
335
+      for (let i = 0; i < data.length; i++) {
336
+        if (!data[i].children) {
337
+          this.$set(data[i], 'children', [])
338
+        }
339
+        if (data[i].id === val) {
340
+          getProviceCityById({ pid: val })
341
+            .then((res) => {
342
+              if (res.data.length) {
343
+                data[i].children = res.data
344
+                if (this.level !== 4) {
345
+                  data[i].children.forEach((ele) => {
346
+                    this.$set(ele, 'children', [])
347
+                  })
348
+                }
349
+              } else {
350
+                data[i].children = undefined
351
+              }
352
+            })
353
+            .catch((err) => {})
354
+        } else {
355
+          if (data[i].children.length) {
356
+            this.handleData(data[i].children, val, level)
357
+          }
358
+        }
359
+      }
360
+
361
+      return data
362
+    },
363
+
364
+    // 获取会员类型
365
+    getType() {
366
+      return new Promise((resolve) => {
367
+        const params = {
368
+          pageindex: 1,
369
+          pagesize: 10,
370
+          isleaf: true,
371
+          code: 'HYLX'
372
+        }
373
+        getLabelLists(params).then((response) => {
374
+          if (response.state.toLowerCase() === 'success') {
375
+            this.labelList = response.rows.Rows
376
+          }
377
+        })
378
+      })
379
+    }
380
+  }
381
+}
382
+</script>
383
+
384
+<style rel="stylesheet/scss" lang="scss" scoped>
385
+.filter-container .filter-item.el-select {
386
+  margin-right: 10px;
387
+}
388
+.filter-container .filter-item.el-date-editor {
389
+  margin-right: 10px;
390
+}
391
+.area {
392
+  width: 270px !important;
393
+}
394
+</style>
395
+

+ 99 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/sendGroupMessage.vue

@@ -0,0 +1,99 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="短信内容">
5
+        <el-input type="textarea" :rows="4" placeholder="请输入内容" v-model="ruleForm.textarea"></el-input>
6
+      </el-form-item>
7
+      <el-form-item>
8
+        <el-button type="primary" @click="submitForm">发送短信</el-button>
9
+      </el-form-item>
10
+    </el-form>
11
+  </div>
12
+</template>
13
+
14
+<script>
15
+import { getProviceCity, getDictionary } from '@/api/commonAPI'
16
+import { getOrder, addOrder } from '@/api/memberManagement/memberList'
17
+import { validateTel } from '@/utils/validate'
18
+import { filterContent } from '@/utils'
19
+
20
+export default {
21
+  name: 'SendGroupMessage',
22
+  props: {
23
+    rowid: {
24
+      type: String,
25
+      default: ''
26
+    },
27
+    callid: {
28
+      type: Number,
29
+      default: 0
30
+    },
31
+    layerid: {
32
+      type: String,
33
+      default: ''
34
+    }
35
+  },
36
+  data() {
37
+    return {
38
+      props: { // 自定义省市下拉数据的key值
39
+        value: 'code',
40
+        label: 'name',
41
+        children: 'entityJson'
42
+      },
43
+      sourceOptions: [], // 工单来源下拉数据
44
+      ruleForm: {
45
+        unique_id: '', //		否	string	callid
46
+        ordercode: '',
47
+        labelDescription: '',
48
+      },
49
+      rules: {
50
+      },
51
+      loading: false
52
+    }
53
+  },
54
+  created() {
55
+    if (this.callid) {
56
+      this.ruleForm.unique_id = this.callid
57
+    }
58
+    Promise.all([])
59
+      .then(() => {
60
+        if (this.rowid) {8
61
+          this.ruleForm.ordercode = this.rowid
62
+        }
63
+      })
64
+  },
65
+  methods: {
66
+    submitForm() {
67
+      this.$refs.ruleForm.validate((valid) => {
68
+        if (valid) {
69
+          this.ruleForm.content = filterContent.delHtmlTag(this.ruleForm.content)// 保存内容时去掉 html 标签
70
+          this.loading = true
71
+          addOrder(this.ruleForm).then(response => {
72
+            this.loading = false
73
+            if (response.state.toLowerCase() === 'success') {
74
+              this.$parent.$layer.close(this.layerid)
75
+              this.$parent.getOrderRecord() // 重新加载来电弹屏工单记录
76
+              this.$message.success('恭喜你,添加成功!')
77
+            }
78
+          }).catch(() => {
79
+            this.loading = false
80
+          })
81
+          return
82
+        } else {
83
+          this.$message.error('请输入有效的必填项信息!')
84
+          return false
85
+        }
86
+      })
87
+    },
88
+    resetForm() {
89
+      this.$refs.ruleForm.resetFields()
90
+    },
91
+  }
92
+}
93
+</script>
94
+
95
+<style rel="stylesheet/scss" lang="scss">
96
+.order_form .form_select{
97
+	width: 100%;
98
+}
99
+</style>

+ 171 - 0
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/components/transfer.vue

@@ -0,0 +1,171 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="order_form">
4
+      <el-form-item label="部门" prop="depid">
5
+        <el-cascader
6
+          v-model="ruleForm.depid"
7
+          :options="depData"
8
+          :props="props"
9
+          placeholder="请选择部门"
10
+          class="form_select"
11
+          clearable
12
+          style="width:199px"
13
+          filterable
14
+          change-on-select
15
+          @change="handleSalesMan"
16
+        />
17
+      </el-form-item>
18
+      <el-form-item label="新销售负责人" prop="F_Name">
19
+        <el-select v-model="ruleForm.F_Name" clearable placeholder="请选择销售负责人">
20
+          <el-option
21
+            v-for="item in salesMan"
22
+            :key="item.F_UserCode"
23
+            :label="item.F_UserName"
24
+            :value="item.F_UserCode"/>
25
+        </el-select>
26
+      </el-form-item>
27
+      <el-form-item>
28
+        <el-button type="primary" @click="submitForm">保存</el-button>
29
+      </el-form-item>
30
+    </el-form>
31
+  </div>
32
+</template>
33
+
34
+<script>
35
+import { getDepartmentTreeList } from '@/api/commonAPI'
36
+import { formatterContent } from '@/utils'
37
+import { getTransfer, getSalesmanData } from '@/api/memberManagement/memberList'
38
+export default {
39
+  name: 'AddOrEdit',
40
+  props: {
41
+    rowid: {
42
+      type: Array,
43
+      default: []
44
+    },
45
+    callid: {
46
+      type: Number,
47
+      default: 0
48
+    },
49
+    layerid: {
50
+      type: String,
51
+      default: ''
52
+    }
53
+  },
54
+  data() {
55
+    return {
56
+      ruleForm: {
57
+        F_Name: '', // 客户姓名
58
+        depid: [] // 部门id
59
+      },
60
+      rules: {
61
+        F_Name: [
62
+          {
63
+            required: true,
64
+            trigger: 'blur',
65
+            message: '请输入新负责人姓名'
66
+          }
67
+        ],
68
+        depid: [
69
+          {
70
+            required: true,
71
+            trigger: 'blur',
72
+            message: '请选择部门'
73
+          }
74
+        ]
75
+      },
76
+      props: {
77
+        // 自定义部门下拉数据的key值
78
+        value: 'id',
79
+        label: 'text',
80
+        children: 'children'
81
+      },
82
+      depData: [], // 部门数据
83
+      salesMan: [], // 销售负责人数据
84
+      loading: false
85
+    }
86
+  },
87
+  created() {
88
+    if (this.callid) {
89
+      this.ruleForm.unique_id = this.callid
90
+    }
91
+    Promise.all([]).then(() => {
92
+      if (this.rowid) {
93
+        this.getDepartment()
94
+      }
95
+    })
96
+  },
97
+  methods: {
98
+    submitForm() {
99
+      this.$refs.ruleForm.validate(valid => {
100
+        if (valid) {
101
+          this.loading = true
102
+          return new Promise(resolve => {
103
+            // const params ={
104
+            //   ids:this.rowid,
105
+            //   toperson: this.ruleForm.F_Name
106
+            // }
107
+            // console.log(params)
108
+            // 添加
109
+            if (this.rowid) {
110
+              getTransfer(this.rowid, this.ruleForm.F_Name)
111
+                .then(response => {
112
+                  this.loading = false
113
+                  if (response.state.toLowerCase() === 'success') {
114
+                    this.$parent.$layer.close(this.layerid)
115
+                    this.$parent.getList() // 重新加载父级数据
116
+                    this.$message.success('恭喜你,转移成功!')
117
+                  }
118
+                })
119
+                .catch(() => {
120
+                  this.loading = false
121
+                })
122
+            }
123
+          })
124
+        } else {
125
+          this.$message.error('请输入有效的必填项信息!')
126
+          return false
127
+        }
128
+      })
129
+    },
130
+    // 获取部门信息
131
+    getDepartment() {
132
+      getDepartmentTreeList().then(response => {
133
+        if (response.state.toLowerCase() == 'success') {
134
+          this.depData = response.data
135
+        }
136
+      })
137
+    },
138
+    // 获取销售负责人数据
139
+    handleSalesMan() {
140
+      this.ruleForm.F_Name = ''
141
+      return new Promise(resolve => {
142
+        const params = {
143
+          deptid: this.ruleForm.depid && this.ruleForm.depid[this.ruleForm.depid.length - 1]
144
+        }
145
+        getSalesmanData(params).then(response => {
146
+          if (response.state.toLowerCase() == 'success') {
147
+            this.salesMan = response.data
148
+          }
149
+        }).catch(result => {
150
+          console.log(result)
151
+        })
152
+      })
153
+    }
154
+  }
155
+}
156
+</script>
157
+
158
+<style rel="stylesheet/scss" lang="scss">
159
+.order_form {
160
+  .form_select {
161
+    width: 100%;
162
+  }
163
+  .form_date {
164
+    width: 100%;
165
+  }
166
+  .col_select_text {
167
+    text-align: right;
168
+    padding-right: 15px;
169
+  }
170
+}
171
+</style>

+ 470 - 157
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleList/index.vue

@@ -1,53 +1,163 @@
1 1
 <template>
2 2
   <div class="app-container">
3
-    <div class="filter-container">
4
-      <el-select v-model="searchData.checkState" class="filter-item" filterable clearable placeholder="请选择售后审核状态">
5
-        <el-option label="全部" value="-2"></el-option>
6
-        <el-option label="保存" value="0"></el-option>
7
-        <el-option label="审核通过" value="1"></el-option>
8
-        <el-option label="审核未通过" value="2"></el-option>
9
-      </el-select>
10
-      <el-select v-model="searchData.type" class="filter-item" filterable clearable placeholder="请选择售后类型">
11
-          <el-option label="调换货" value="1"></el-option>
12
-          <el-option label="退货" value="2"></el-option>
13
-          <el-option label="部分退货" value="3"></el-option>
14
-          <el-option label="对发货" value="4"></el-option>
15
-          <el-option label="补发货" value="5"></el-option>
16
-          <el-option label="补差额" value="6"></el-option>
17
-      </el-select>
18
-      <el-button type="primary" class="filter-item" icon="el-icon-search" @click="btn_search">搜索</el-button>
19
-    </div>
20
-    <el-table v-loading="loading" :data="dataLists" border stripe  @selection-change="handleSelectionChange">
21
-      <el-table-column type="selection"></el-table-column>
22
-      <el-table-column type="index" label="编号" align="center" fixed width="80" />
23
-      <el-table-column prop="F_OrderId" label="订单编号" align="center" min-width="180" >
24
-        <template slot-scope="scope">
25
-          <el-button type="text" size="small" @click="hadndleOrderCode(scope.row.F_OrderId)">{{ scope.row.F_OrderId }}</el-button>
26
-        </template>
27
-      </el-table-column>
28
-      <el-table-column label="售后类型" align="center">
3
+    <search-filter
4
+      :search-datas.sync="searchDatas"
5
+      :selected-id="selectedId"
6
+      showadd
7
+      @transfer="btn_transfer"
8
+      @search="btn_search"
9
+    />
10
+    <el-table
11
+      v-loading="loading"
12
+      :data="dataLists"
13
+      border
14
+      stripe
15
+      @selection-change="changeSelects"
16
+    >
17
+      <el-table-column type="selection" width="40" fixed/>
18
+      <el-table-column
19
+        prop="F_Name"
20
+        label="客户姓名"
21
+        align="center"
22
+        width=""
23
+      />
24
+      <el-table-column
25
+        prop="F_Sex"
26
+        label="客户性别"
27
+        align="center"
28
+        width=""
29
+      />
30
+      <el-table-column
31
+        prop="F_Age"
32
+        label="客户年龄"
33
+        align="center"
34
+        width=""
35
+      />
36
+      <el-table-column label="主号码" align="center" width="100px">
29 37
         <template slot-scope="scope">
30
-          {{ scope.row.F_Type | judgmentStateName }}
38
+          {{ scope.row.F_Phone | phoneFilter }}
39
+          <i
40
+            class="el-icon-phone phoneIcon"
41
+            @click="clickCut(scope.row.F_ID)"
42
+          />
31 43
         </template>
32 44
       </el-table-column>
33
-      <el-table-column label="售后审核状态" align="center">
45
+      <el-table-column label="备用号码" align="center" width="">
34 46
         <template slot-scope="scope">
35
-          {{ scope.row.F_CheckStateSH | judgmentAfterSaleCheckState }}
47
+          {{ scope.row.F_Mobile | mobileFilter }}
48
+          <i
49
+            class="el-icon-phone phoneIcon"
50
+            @click="clickCut2(scope.row.F_ID)"
51
+          />
36 52
         </template>
37 53
       </el-table-column>
38
-      <el-table-column label="仓库审核状态" align="center">
39
-        <template slot-scope="scope">
40
-          {{ scope.row.F_CheckStateKG | judgmentCustodianStateName }}
54
+      <el-table-column
55
+        prop="F_Label"
56
+        label="会员标签"
57
+        align="center"
58
+        width=""
59
+      />
60
+      <el-table-column label="详细地址" align="center" width="100px">
61
+        <template slot-scope="scoped">
62
+          <!-- <span v-show="scoped.row.F_Province==null?false:true">{{scoped.row.F_Province}}</span>
63
+          <span v-show="scoped.row.F_City==null?false:true">{{scoped.row.F_City}}</span>
64
+          <span v-show="scoped.row.F_Area==null?false:true">{{scoped.row.F_Area}}</span>
65
+          <span v-show="scoped.row.F_Town==null?false:true">{{scoped.row.F_Town}}</span> -->
66
+          <span v-show="scoped.row.F_Address == null ? false : true">{{
67
+            scoped.row.F_Address
68
+          }}</span>
41 69
         </template>
42 70
       </el-table-column>
43
-      <el-table-column prop="F_Money" label="变动金额" align="center" />
44
-      <el-table-column prop="F_Remark" label="备注" align="center" />
45
-      <el-table-column prop="F_AddTime" label="下单日期" align="center" />
46
-      <el-table-column label="操作" width="240" align="center" class-name="oparate_btn" fixed="right">
71
+      <el-table-column
72
+        prop="F_Address1"
73
+        label="备用地址"
74
+        align="center"
75
+        width=""
76
+      />
77
+      <el-table-column
78
+        prop="F_ShoeSize"
79
+        label="鞋码"
80
+        align="center"
81
+        width=""
82
+      />
83
+      <el-table-column
84
+        prop="Birthday"
85
+        label="会员生日"
86
+        align="center"
87
+        width="100px"
88
+      />
89
+      <el-table-column
90
+        prop="F_Score"
91
+        label="会员积分"
92
+        align="center"
93
+        width=""
94
+      />
95
+      <el-table-column
96
+        prop="F_Recommender"
97
+        label="推荐人"
98
+        align="center"
99
+        width=""
100
+      />
101
+      <el-table-column
102
+        prop="F_Saleperson"
103
+        label="销售负责人"
104
+        align="center"
105
+        width="90px"
106
+      />
107
+      <el-table-column
108
+        prop="F_Money"
109
+        label="累计消费金额"
110
+        align="center"
111
+        width=""
112
+      />
113
+      <el-table-column
114
+        prop="F_Firstcalltime"
115
+        label="首次通话记录"
116
+        align="center"
117
+        width=""
118
+      />
119
+      <el-table-column
120
+        prop="F_Lastholetime"
121
+        label="末联通话记录"
122
+        align="center"
123
+        width=""
124
+      />
125
+      <el-table-column
126
+        prop="F_TotalScore"
127
+        label="累计积分"
128
+        align="center"
129
+        width=""
130
+      />
131
+      <el-table-column
132
+        label="操作"
133
+        width="140"
134
+        align="center"
135
+        class-name="oparate_btn"
136
+        fixed="right"
137
+      >
47 138
         <template slot-scope="scope">
48
-          <el-button v-permission="'HY_after_sale_detail'" type="text" @click="btn_after_sale_detail(scope.row.F_Id)">详情</el-button>
49
-          <el-button v-permission="'HY_edit'" v-if="authority_edit(scope.row.F_CheckStateSH)" type="text" @click="btn_edit(scope.row.F_Id)">编辑</el-button>
50
-          <el-button v-permission="'HY_delete'" v-if="authority_delete(scope.row.F_CheckStateSH)" type="text" @click="btn_delete(scope.row.F_Id)">删除</el-button>
139
+          <el-button
140
+            v-permission="'HY_add_aftersale'"
141
+            type="text"
142
+            @click="btn_add_order(scope.row.F_ID)"
143
+          >添加售后</el-button
144
+          >
145
+
146
+          <el-button
147
+            type="text"
148
+            @click="btn_detail(scope.row.F_ID.toString())"
149
+          >详情</el-button
150
+          >
151
+          <el-button
152
+            type="text"
153
+            @click="btn_edit(scope.row.F_ID)"
154
+          >编辑</el-button
155
+          >
156
+          <el-button
157
+            type="text"
158
+            @click="btn_delete(scope.row.F_ID)"
159
+          >删除</el-button
160
+          >
51 161
         </template>
52 162
       </el-table-column>
53 163
     </el-table>
@@ -63,58 +173,73 @@
63 173
 </template>
64 174
 
65 175
 <script>
66
-import { getDictionaryValueList } from '@/api/commonAPI'
67
-import { getAfterSaleList, deleteAfterSaleList } from "@/api/afterSaleManagement/afterSaleList";
68
-import { pickerOptions, formatterContent } from "@/utils";
69
-import Pagination from "@/components/Pagination"; // 对el-pagination 二次封装
70
-import addOrEdit from "./addOrEdit"
71
-import afterSaleDetail from "./afterSaleDetail"
72
-import detail from "@/views/orderManagement/orderList/detail"
73
-
74
-
176
+import { mapGetters } from 'vuex'
177
+import {
178
+  getOrderLists,
179
+  deleteOrder,
180
+  deletesMember,
181
+  encryptphone,
182
+  split
183
+} from '@/api/memberManagement/memberList'
184
+import searchFilter from './components/searchFilter'
185
+import addOrEdit from './components/addOrEdit'
186
+import addTodo from './components/addTodo'
187
+import detail from './components/detail'
188
+import transfer from './components/transfer'
189
+import addOrder from './components/addOrder'
190
+import afterSale from './components/afterSale'
191
+import { formatterContent } from '@/utils'
192
+import Pagination from '@/components/Pagination' // 对el-pagination 二次封装
193
+import mergeId from './components/mergeId'
75 194
 export default {
76
-  name: "ConsolidateOrderList",
195
+  name: 'MemberLabel',
77 196
   components: {
78
-    Pagination
197
+    Pagination,
198
+    searchFilter
79 199
   },
80 200
   filters: {
81
-    judgmentStateName(status) {
82
-      const statusMap = {
83
-        '1': '调换货',
84
-        '2': '退货',
85
-        '3': '部分退货',
86
-        '4': '对发货',
87
-        '5': '补发货',
88
-        '6': '补差额',
89
-      }
90
-      return statusMap[status]
91
-    },
92
-    judgmentAfterSaleCheckState(status) {
93
-      const statusMap = {
94
-        '0': '保存',
95
-        '1': '审核通过',
96
-        '2': '审核未通过',
201
+    phoneFilter(status) {
202
+      if (status) {
203
+        const mtel = status.substr(0, 3) + '****' + status.substr(7)
204
+        return mtel
97 205
       }
98
-      return statusMap[status]
99 206
     },
100
-    judgmentCustodianStateName(status) {
101
-      const statusMap = {
102
-        '0': '未审核',
103
-        '1': '收到货',
104
-        '2': '货物不符',
105
-        '3': '未收到货',
207
+    mobileFilter(status) {
208
+      if (status) {
209
+        const arr = status.split(',')
210
+        var mtel = ''
211
+        for (let i = 0; i < arr.length; i++) {
212
+          mtel += arr[i].substr(0, 3) + '****' + arr[i].substr(7) + ','
213
+        }
106 214
       }
107
-      return statusMap[status]
108
-    },
215
+
216
+      return mtel
217
+    }
109 218
   },
219
+
110 220
   data() {
111 221
     return {
112
-      loading: false,
113
-      searchData: {
114
-        checkState: '-2', //售后审核状态
115
-        type: '', //售后类型
222
+      phoneOne: '', // 加密主号码
223
+      phoneOne2: '', // 加密备用号码
224
+      phoneNumOne: '',
225
+      searchDatas: {
226
+        VIPCode: '', // 会员卡编号
227
+        customerName: '', // 客户姓名
228
+        phoneNumber: '', // 手机号码
229
+        labelList: '', // 会员标签
230
+        province: '', // 省份
231
+        city: '', // 市
232
+        county: '', // 县区
233
+        township: '', // 乡镇
234
+        address: '', // 详细地址
235
+        birthday: '', // 会员生日
236
+        referrer: '', // 推荐人
237
+        saleperson: '', // 销售负责人
238
+        // contactFrequency: '', //联系频次
239
+        provinceCity: [], // 省市下拉绑定的值
240
+        provinceCityText: [] // 省市下拉绑定文本值
116 241
       },
117
-      pickerOptions, // 日期数据
242
+      loading: false,
118 243
       pageParams: {
119 244
         pageindex: 1, // 当前第几页
120 245
         pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
@@ -122,127 +247,315 @@ export default {
122 247
       },
123 248
       dataLists: [], // 列表数据
124 249
       multipleSelection: [], // 选中的数据
125
-      selectedId: [], // 选中的数据的id
126
-    };
250
+      selectedId: [], // 选中的id
251
+      namesData: []
252
+    }
127 253
   },
128 254
   created() {
129 255
     this.getList()
130
-    document.onkeyup = e => {
256
+    document.onkeyup = (e) => {
131 257
       if (e.keyCode === 13) {
132
-        this.getList();
258
+        this.getList()
133 259
       }
134
-    };
260
+    }
261
+  },
262
+  computed: {
263
+    ...mapGetters(['token'])
135 264
   },
136 265
   methods: {
137 266
     getList() {
138
-      this.loading = true;
139
-      return new Promise(resolve => {
267
+      this.loading = true
268
+      return new Promise((resolve) => {
140 269
         const params = {
141
-          F_CheckStateSH: this.searchData.checkState, //售后审核状态
142
-          F_Type: this.searchData.type, //售后类型
143
-          F_State: -2, //订单状态
144
-          F_Id: '',
145 270
           pageindex: this.pageParams.pageindex, // int 第几页
146 271
           pagesize: this.pageParams.pagesize, // int 每页几条信息
147
-           F_PayState:'-2',
148
-        };
149
-        getAfterSaleList(params).then(response => {
150
-          this.loading = false;
151
-          if (response.state.toLowerCase() === "success") {
152
-            this.pageParams.total = response.data.Totals;
153
-            this.dataLists = response.data.Rows;
272
+          name: this.searchDatas.customerName.trim(), // 客户姓名
273
+          phone: this.searchDatas.phoneNumber.trim(), // 手机号码
274
+          label: this.searchDatas.labelList, // 会员标签
275
+          province:
276
+            this.searchDatas.provinceCityText &&
277
+            this.searchDatas.provinceCityText[0], // 省份
278
+          city:
279
+            this.searchDatas.provinceCityText[1] &&
280
+            this.searchDatas.provinceCityText[1], // 市
281
+          area:
282
+            this.searchDatas.provinceCityText[2] &&
283
+            this.searchDatas.provinceCityText[2], // 县区
284
+          town:
285
+            this.searchDatas.provinceCityText[3] &&
286
+            this.searchDatas.provinceCityText[3], // 乡镇
287
+          address: this.searchDatas.address.trim(), // 详细地址
288
+          birthday: this.searchDatas.memberBirthday, // 会员生日
289
+          recommender: this.searchDatas.referrer.trim(), // 推荐人
290
+          saleperson: this.searchDatas.saleperson.trim() // 销售负责人
291
+          // contact: this.searchDatas.contactFrequency.trim(), //联系频次
292
+        }
293
+        getOrderLists(params).then((response) => {
294
+          this.loading = false
295
+          if (response.state.toLowerCase() === 'success') {
296
+            this.pageParams.total = response.rows.Totals
297
+            this.dataLists = response.rows.Rows
154 298
           }
155
-        });
156
-        resolve();
157
-      });
299
+        })
300
+        resolve()
301
+      })
302
+    },
303
+    btn_search(val, data) {
304
+      this.searchDatas.provinceCityText = data
305
+      this.pageParams.pageindex = 1
306
+      this.getList()
307
+    },
308
+    btn_export(val, data) {
309
+      this.searchDatas.provinceCityText = data
310
+      window.location.href =
311
+        this.$store.getters.serverConfig.BASE_API +
312
+        'api/vipinfo/exportexcel?name=' +
313
+        this.searchDatas.customerName +
314
+        '&phone=' +
315
+        this.searchDatas.phoneNumber + // 手机号码
316
+        '&province=' +
317
+        (this.searchDatas.provinceCityText.length > 0
318
+          ? this.searchDatas.provinceCityText[0]
319
+          : '') +
320
+        '&city=' +
321
+        (this.searchDatas.provinceCityText.length > 1
322
+          ? this.searchDatas.provinceCityText[1]
323
+          : '') +
324
+        '&area=' +
325
+        (this.searchDatas.provinceCityText.length > 2
326
+          ? this.searchDatas.provinceCityText[2]
327
+          : '') +
328
+        '&town=' +
329
+        (this.searchDatas.provinceCityText.length > 3
330
+          ? this.searchDatas.provinceCityText[3]
331
+          : '') +
332
+        '&label=' +
333
+        this.searchDatas.labelList + // 会员类型
334
+        '&address=' +
335
+        this.searchDatas.address + // 地址
336
+        '&recommender=' +
337
+        this.searchDatas.referrer + // 推荐人
338
+        '&saleperson=' +
339
+        this.searchDatas.saleperson + // 销售负责人
340
+        // '&token=' + this.token +
341
+        '&birthday=' +
342
+        this.searchDatas.birthday
158 343
     },
159
-    //编辑详情
160
-    btn_after_sale_detail(editId) {
344
+    btn_detail(editId) {
161 345
       this.$layer.iframe({
162 346
         content: {
163
-          content: afterSaleDetail, // 传递的组件对象
347
+          content: detail, // 传递的组件对象
164 348
           parent: this, // 当前的vue对象
165 349
           data: { rowid: editId } // props
166 350
         },
167
-        area: ["80%", "90%"],
168
-        title: "售后列表详情"
169
-      });
351
+        area: ['80%', '90%'],
352
+        title: '详情'
353
+      })
170 354
     },
171
-    //编辑
172 355
     btn_edit(editId) {
173 356
       this.$layer.iframe({
174 357
         content: {
175 358
           content: addOrEdit, // 传递的组件对象
176 359
           parent: this, // 当前的vue对象
177
-          data: { rowid: editId } // props
360
+          data: { rowid: editId.toString() } // props
178 361
         },
179
-        area: ["80%", "90%"],
180
-        title: "编辑售后"
181
-      });
182
-    },
183
-    btn_delete(id) {
184
-      this.$confirm('您确定删除吗?', '提示', {
185
-        confirmButtonText: '确定',
186
-        cancelButtonText: '取消',
187
-        type: 'warning'
188
-      }).then(() => {
189
-        const data = {
190
-          ids: id
191
-        }
192
-        deleteAfterSaleList(data).then(response => {
193
-          if (response.state.toLowerCase() === 'success') {
194
-            this.getList()
195
-            this.$message.success('删除成功!')
196
-          }
197
-        })
198
-      }).catch(() => {
199
-        this.$message.info('已取消删除')
362
+        area: ['80%', '90%'],
363
+        title: '编辑会员信息'
200 364
       })
201 365
     },
202
-    btn_search() {
203
-      this.pageParams.pageindex = 1;
204
-      this.getList();
205
-    },
206
-    hadndleOrderCode(ordercode){
366
+    // 添加订单
367
+    btn_add_order(id) {
207 368
       this.$layer.iframe({
208 369
         content: {
209
-          content: detail, // 传递的组件对象
370
+          content: afterSale, // 传递的组件对象
210 371
           parent: this, // 当前的vue对象
211
-          data: { 'rowid': ordercode }// props
372
+          data: { rowid: id.toString() } // props
212 373
         },
213 374
         area: ['80%', '90%'],
214
-        title: '订单详情'
375
+        title: '添加订单'
215 376
       })
216 377
     },
217
-    //选择多个
218
-    handleSelectionChange(val) {
219
-      const ids = []
220
-      this.multipleSelection = val
221
-      for (let i=0; i<this.multipleSelection.length; i++) {
222
-        ids.push(this.multipleSelection[i].id)
378
+    // 添加待办
379
+    btn_addTodo(phone, name) {
380
+      this.$layer.iframe({
381
+        content: {
382
+          content: addTodo, // 传递的组件对象
383
+          parent: this, // 当前的vue对象
384
+          data: { rowPhone: phone, rowName: name } // props
385
+        },
386
+        area: ['40%', '70%'],
387
+        title: '添加待办信息'
388
+      })
389
+    },
390
+    // 批量删除
391
+    btn_deletes() {
392
+      if (this.selectedId.length == 0) {
393
+        this.$message('请选择一个选项')
394
+        return
395
+      } else {
396
+        this.$confirm('您确定要删除吗?', '提示', {
397
+          confirmButtonText: '确定',
398
+          cancelButtonText: '取消',
399
+          type: 'warning'
400
+        })
401
+          .then(() => {
402
+            deletesMember(this.selectedId).then((response) => {
403
+              if (response.state.toLowerCase() === 'success') {
404
+                this.getList()
405
+                this.$message.success('删除成功!')
406
+              }
407
+            })
408
+          })
409
+          .catch(() => {
410
+            this.$message.info('已取消删除')
411
+          })
412
+      }
413
+    },
414
+    // 档案合并
415
+    btn_file_merge() {
416
+      if (this.selectedId.length == 1) {
417
+        this.$message('请选择两个选项')
418
+        return
419
+      } else {
420
+        this.$layer.iframe({
421
+          content: {
422
+            content: mergeId, // 传递的组件对象
423
+            parent: this, // 当前的vue对象
424
+            data: { name: this.namesData, ids: this.selectedId } // props
425
+          },
426
+          area: ['40%', '70%'],
427
+          title: '选择主档案'
428
+        })
223 429
       }
224
-      this.selectedPhone = ids;
225 430
     },
226
-    authority_edit(checkStateSH) {
227
-      if (checkStateSH == 0 || checkStateSH == 2) {
228
-        return true
431
+    // 档案拆分
432
+    btn_file_split() {
433
+      if (this.selectedId.length == 0) {
434
+        this.$message('请选择一个选项')
435
+        return
229 436
       } else {
230
-        return false
437
+        this.$confirm('您确定要拆分吗?', '提示', {
438
+          confirmButtonText: '确定',
439
+          cancelButtonText: '取消',
440
+          type: 'warning'
441
+        })
442
+          .then(() => {
443
+            const params = {
444
+              id: this.selectedId[0]
445
+            }
446
+            split(params).then((response) => {
447
+              if (response.state.toLowerCase() === 'success') {
448
+                this.getList()
449
+                this.$message.success('拆分成功!')
450
+              }
451
+            })
452
+          })
453
+          .catch(() => {
454
+            this.$message.info('已取消拆分')
455
+          })
231 456
       }
232 457
     },
233
-    authority_delete(checkStateSH) {
234
-      if (checkStateSH == 0 || checkStateSH == 2) {
235
-        return true
458
+    // 转移
459
+    btn_transfer() {
460
+      if (this.selectedId.length == 0) {
461
+        this.$message('请选择一个选项')
462
+        return
236 463
       } else {
237
-        return false
464
+        this.$layer.iframe({
465
+          content: {
466
+            content: transfer, // 传递的组件对象
467
+            parent: this, // 当前的vue对象
468
+            data: { rowid: this.selectedId } // props
469
+          },
470
+          area: ['40%', '40%'],
471
+          title: '转移档案'
472
+        })
238 473
       }
239 474
     },
475
+    btn_delete(editId) {
476
+      this.$confirm('您确定要将此会员删除吗?', '提示', {
477
+        confirmButtonText: '确定',
478
+        cancelButtonText: '取消',
479
+        type: 'warning'
480
+      })
481
+        .then(() => {
482
+          deletesMember(editId).then((response) => {
483
+            if (response.state.toLowerCase() === 'success') {
484
+              this.getList()
485
+              this.$message.success('删除成功!')
486
+            }
487
+          })
488
+        })
489
+        .catch(() => {
490
+          this.$message.info('已取消删除')
491
+        })
492
+    },
493
+    changeSelects(val) {
494
+      const ids = []
495
+      const names = []
496
+      this.multipleSelection = val
497
+      for (let i = 0; i < this.multipleSelection.length; i++) {
498
+        ids.push(this.multipleSelection[i].F_ID)
499
+        names.push(this.multipleSelection[i].F_Name)
500
+      }
501
+      this.selectedId = ids
502
+      this.namesData = names
503
+      console.log(this.selectedId, this.namesData)
504
+    },
505
+
506
+    // 主号码加密
507
+    clickCut(id) {
508
+      const params = {
509
+        id: id,
510
+        type: 0
511
+      }
512
+      encryptphone(params)
513
+        .then((response) => {
514
+          if (response.state.toLowerCase() === 'success') {
515
+            this.phoneOne = response.data
516
+            this.$copyText(this.phoneOne).then(
517
+              (e) => {
518
+                this.$message.success(
519
+                  '号码复制成功成功,请联系管理员进行解密!'
520
+                )
521
+              },
522
+              (e) => {
523
+                this.$toast('复制失败')
524
+              }
525
+            )
526
+          }
527
+        })
528
+        .catch(() => {
529
+          this.$message.info('查询失败')
530
+        })
531
+    },
532
+    // 备用号码解密
533
+    clickCut2(id) {
534
+      const params = {
535
+        id: id,
536
+        type: 1
537
+      }
538
+      encryptphone(params)
539
+        .then((response) => {
540
+          if (response.state.toLowerCase() === 'success') {
541
+            this.phoneOne2 = response.data
542
+            this.$copyText(this.phoneOne2).then(
543
+              (e) => {
544
+                this.$message.success('号码复制成功成功!')
545
+              },
546
+              (e) => {
547
+                this.$toast('复制失败')
548
+              }
549
+            )
550
+          }
551
+        })
552
+        .catch(() => {
553
+          this.$message.info('查询失败')
554
+        })
555
+    }
240 556
   }
241
-};
557
+}
242 558
 </script>
243 559
 
244 560
 <style rel="stylesheet/scss" lang="scss" scoped>
245
-.el{
246
-  cursor: pointer;
247
-}
248 561
 </style>

+ 128 - 41
CallCenterWeb.UI/src/views/memberManagement/memberList/components/detail.vue

@@ -47,9 +47,9 @@
47 47
             <el-col :md="6" class="order_detail_item">推荐人手机号:{{ recommenderTel }}</el-col>
48 48
             <el-col :md="6" class="order_detail_item">累计消费金额:{{ money }}</el-col>
49 49
             <el-col :md="6" class="order_detail_item">累计积分:{{ totalscore }}</el-col>
50
-            <el-col :md="6" class="order_detail_item">首次通话记录:{{ firstcalltime  }}</el-col>
50
+            <el-col :md="6" class="order_detail_item">首次通话记录:{{ firstcalltime }}</el-col>
51 51
             <el-col :md="6" class="order_detail_item">末联通话记录:{{ lastholetime }}</el-col>
52
-            <el-col :md="6" class="order_detail_item">修改人:{{ F_LastModifyBy  }}</el-col>
52
+            <el-col :md="6" class="order_detail_item">修改人:{{ F_LastModifyBy }}</el-col>
53 53
             <el-col :md="6" class="order_detail_item">修改时间:{{ F_LastModifyOn }}</el-col>
54 54
             <!-- <el-col :md="18" :offset="6">
55 55
               <el-button type="primary" size="mini" plain>打标签</el-button>
@@ -104,36 +104,123 @@
104 104
       border
105 105
       stripe
106 106
     >
107
-    <el-table-column
108
-       type="index"
107
+      <el-table-column
108
+        type="index"
109 109
         label="编号"
110 110
         align="center"
111 111
         width=""
112
-      ></el-table-column>
112
+      />
113 113
       <el-table-column
114 114
         prop="F_Recommender"
115 115
         label="推荐人"
116 116
         align="center"
117 117
         width=""
118
-      ></el-table-column>
119
-   <el-table-column
118
+      />
119
+      <el-table-column
120 120
         prop="F_RecommenderTel"
121 121
         label="联系方式"
122 122
         align="center"
123 123
         width=""
124
-      ></el-table-column>
124
+      />
125
+    </el-table>
126
+    <el-row>
127
+      <el-col>
128
+        订单列表
129
+      </el-col>
130
+    </el-row>
131
+    <el-table
132
+      :data="orderLists"
133
+      border
134
+      stripe
135
+    >
136
+      <el-table-column
137
+        type="index"
138
+        label="编号"
139
+        align="center"
140
+        width=""
141
+      />
142
+      <el-table-column prop="F_Id" label="订单编号" align="center" min-width="180"/>
143
+      <el-table-column prop="F_Customer" label="客户姓名" align="center" min-width />
144
+      <el-table-column prop="F_CustomerPhone" label="手机号码" align="center" min-width="140">
145
+        <template slot-scope="scope">
146
+          {{ scope.row.F_CustomerPhone }}
147
+
148
+        </template>
149
+      </el-table-column>
150
+      <el-table-column label="订购商品" align="center" min-width>
151
+        <template slot-scope="scope">{{ scope.row.OrderDetailList | judgmentOrderGoods }}</template>
152
+      </el-table-column>
153
+      <el-table-column prop="F_AddTime" label="下单日期" align="center" />
154
+      <el-table-column label="订单状态" align="center">
155
+        <template slot-scope="scope">{{ scope.row.F_State | judgmentStateName }}</template>
156
+      </el-table-column>
157
+      <el-table-column prop="F_AddUserName" label="下单员工" align="center" />
158
+      <el-table-column prop="F_BelongName" label="归属员工" align="center" />
159
+      <el-table-column prop="F_Type" label="订单类型" align="center" />
160
+      <el-table-column prop="F_Express" label="快递公司" align="center" />
161
+      <el-table-column label="物流状态" align="center">
162
+        <template slot-scope="scope">{{ scope.row.F_Status | judgmentStatusName }}</template>
163
+      </el-table-column>
125 164
     </el-table>
126
-   
127 165
   </div>
128 166
 </template>
129 167
 
130 168
 <script>
131 169
 import { getMemberInfo } from '@/api/memberManagement/memberList'
170
+import { getOrderLists } from '@/api/orderManagement/orderList'
132 171
 import { mapGetters } from 'vuex'
133 172
 import { filterContent } from '@/utils'
134 173
 
135 174
 export default {
136 175
   name: 'Detail',
176
+  filters: {
177
+    phoneFilter(status) {
178
+      const mtel = status.substr(0, 3) + '****' + status.substr(7)
179
+      return mtel
180
+    },
181
+    mobileFilter(status) {
182
+      const arr = status.split(',')
183
+      var mtel = ''
184
+      for (let i = 0; i < arr.length; i++) {
185
+        mtel += arr[i].substr(0, 3) + '****' + arr[i].substr(7) + ','
186
+      }
187
+      return mtel
188
+    },
189
+    judgmentStateName(status) {
190
+      const statusMap = {
191
+        '-1': '无效',
192
+        0: '暂存',
193
+        1: '提交',
194
+        2: '退回',
195
+        3: '通过',
196
+        4: '无货',
197
+        5: '已分拣',
198
+        6: '已发货'
199
+      }
200
+      return statusMap[status]
201
+    },
202
+    judgmentStatusName(status) {
203
+      const statusMap = {
204
+        0: '未发出',
205
+        1: '未签收',
206
+        2: '签收',
207
+        3: '改代收',
208
+        4: '拒收'
209
+      }
210
+      return statusMap[status]
211
+    },
212
+    judgmentOrderGoods(status) {
213
+      let orderGoodsNameQuantity = ''
214
+      for (let i = 0; i < status.length; i++) {
215
+        orderGoodsNameQuantity = `${orderGoodsNameQuantity}${status[i].F_ProductName}*${status[i].F_Count},`
216
+      }
217
+      orderGoodsNameQuantity = orderGoodsNameQuantity.substring(
218
+        0,
219
+        orderGoodsNameQuantity.length - 1
220
+      )
221
+      return orderGoodsNameQuantity
222
+    }
223
+  },
137 224
   props: {
138 225
     rowid: {
139 226
       type: String,
@@ -144,22 +231,7 @@ export default {
144 231
       default: ''
145 232
     }
146 233
   },
147
-  filters: {
148
-    phoneFilter(status) {
149
-      const mtel = status.substr(0, 3) + "****" +status.substr(7);
150
-      return mtel;
151
-    },
152
-     mobileFilter(status) {
153
-      const arr=status.split(',')
154
-      var mtel=''
155
-      for (let i = 0; i < arr.length; i++) {
156
-        mtel +=  arr[i].substr(0, 3) + "****" + arr[i].substr(7)+",";
157
-      }
158
-         return mtel;
159
-
160
-    },
161
-  },
162
-  data () {
234
+  data() {
163 235
     return {
164 236
       activeName: 'first',
165 237
       name: '', // 姓名
@@ -174,7 +246,7 @@ export default {
174 246
       birthday: '', // 会员生日
175 247
       score: '', // 会员积分
176 248
       recommender: '', // 推荐人
177
-      recommenderTel: '', //推荐人手机号
249
+      recommenderTel: '', // 推荐人手机号
178 250
       money: '', // 累计消费金额
179 251
       totalscore: '', // 累计积分
180 252
       province: '', // 省
@@ -192,35 +264,34 @@ export default {
192 264
       area2: '', // 县
193 265
       town2: '', // 乡
194 266
       address2: '', // 地址
195
-      firstcalltime: '', //首次通话记录
267
+      firstcalltime: '', // 首次通话记录
196 268
       lastholetime: '', // 末联通话记录
197
-      F_LastModifyOn:'',//修改时间
198
-      F_LastModifyBy:'',//修改人
199
-      
200
-      dataLists: [], // 列表数据
269
+      F_LastModifyOn: '', // 修改时间
270
+      F_LastModifyBy: '', // 修改人
271
+      orderLists: [], // 订单列表数据
272
+      dataLists: [] // 列表数据
201 273
     }
202
-   
203 274
   },
204 275
   computed: {
205 276
     ...mapGetters([
206 277
       'avatar'
207 278
     ])
208 279
   },
209
-  created () {
280
+  created() {
281
+    this.getList()
210 282
     if (this.rowid) {
211 283
       this.getDetail(this.rowid)
212 284
     }
213 285
   },
214 286
   methods: {
215
-    handleClick (tab, event) {
287
+    handleClick(tab, event) {
216 288
       console.log(tab, event)
217 289
     },
218 290
     // 详情
219
-    getDetail (rid) {
291
+    getDetail(rid) {
220 292
       getMemberInfo(rid).then(response => {
221 293
         const res = response.model
222
-        this.dataLists=response.viplist
223
-        console.log('res', res)
294
+        this.dataLists = response.viplist
224 295
         this.name = res.F_Name // 姓名
225 296
         this.sex = res.F_Sex // 性别
226 297
         this.age = res.F_Age // 年龄
@@ -234,7 +305,7 @@ export default {
234 305
         this.score = res.F_Score // 会员积分
235 306
         this.recommender = res.F_Recommender // 推荐人
236 307
         this.recommenderTel = res.F_RecommenderTel // 推荐人
237
-        this.money = res.F_Money // 累计消费金额  
308
+        this.money = res.F_Money // 累计消费金额
238 309
         this.totalscore = res.F_TotalScore // 累计积分
239 310
         this.province = res.F_Province // 省
240 311
         this.city = res.F_City // 市
@@ -251,10 +322,26 @@ export default {
251 322
         this.area2 = res.F_Area2 // 县
252 323
         this.town2 = res.F_Town2 // 乡
253 324
         this.address2 = res.F_Address2 // 备用地址
254
-        this.firstcalltime = res.F_Firstcalltime  //首次通话记录
325
+        this.firstcalltime = res.F_Firstcalltime // 首次通话记录
255 326
         this.lastholetime = res.F_Lastholetime // 末联通话记录
256
-         this.F_LastModifyOn=res.F_LastModifyOn//修改时间
257
-         this.F_LastModifyBy=res.F_LastModifyBy//修改人
327
+        this.F_LastModifyOn = res.F_LastModifyOn// 修改时间
328
+        this.F_LastModifyBy = res.F_LastModifyBy// 修改人
329
+      })
330
+    },
331
+    getList() {
332
+      return new Promise((resolve) => {
333
+        const params = {
334
+
335
+          pageindex: 1, // int 第几页
336
+          pagesize: 500, // int 每页几条信息
337
+          F_VipId: this.rowid
338
+        }
339
+        getOrderLists(params).then((response) => {
340
+          if (response.state.toLowerCase() === 'success') {
341
+            this.orderLists = response.data.Rows
342
+          }
343
+        })
344
+        resolve()
258 345
       })
259 346
     }
260 347
   }

+ 2 - 2
CallCenterWeb.UI/src/views/outbound/automaticOutbound/components/importFile.vue

@@ -52,13 +52,13 @@ export default {
52 52
       downloadUrl: '/static/xls/importOutbound.xlsx',
53 53
       uploadData: {// 文件上传数据
54 54
         uploadHeader: {
55
-          Authorization: getToken(),
55
+          Authorization: getToken()
56 56
         },
57 57
         uploadUrl: this.$store.getters.serverConfig.BASE_API + 'api/OutboundTask/importexcel',
58 58
         uploaderFiles: {// 上传文件的参数
59 59
           pid: this.rowid
60 60
         },
61
-        fileList: [], // 展示文件的数据
61
+        fileList: [] // 展示文件的数据
62 62
       }
63 63
     }
64 64
   },

+ 156 - 0
CallCenterWeb.UI/src/views/systemSetup/roleSetting/department/component/addOrEditGroup.vue

@@ -0,0 +1,156 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px">
4
+      <el-form-item label="团队名称:">
5
+        <span>{{ this.depName }}</span>
6
+      </el-form-item>
7
+      <el-form-item label="小组名称:" prop="position">
8
+        <el-input v-model="ruleForm.position" type="text" autosize placeholder="请输入团队名称" />
9
+      </el-form-item>
10
+      <el-form-item label="描述说明:" prop="des">
11
+        <el-input v-model="ruleForm.des" type="textarea" autosize placeholder="请输入描述说明" />
12
+      </el-form-item>
13
+      <el-form-item label="任务额:" prop="targetmoney">
14
+        <el-input v-model.number="ruleForm.targetmoney" autosize placeholder="请输入任务额" />
15
+      </el-form-item>
16
+      <el-form-item>
17
+        <el-button type="primary" @click="submitForm">保存</el-button>
18
+        <el-button @click="resetForm">重置</el-button>
19
+      </el-form-item>
20
+    </el-form>
21
+  </div>
22
+</template>
23
+
24
+<script>
25
+import { addTeam, editTeam, getTeamDetail } from '@/api/systemSetup/sysSetting/teamManagement'
26
+import { filterContent } from '@/utils'
27
+
28
+export default {
29
+  name: 'AddOrEdit',
30
+  props: {
31
+    rowid: {
32
+      type: String,
33
+      default: ''
34
+    },
35
+    layerid: {
36
+      type: String,
37
+      default: ''
38
+    },
39
+    depId: {
40
+      type: Number,
41
+      default: 0
42
+    },
43
+    depName: {
44
+      type: String,
45
+      default: ''
46
+    }
47
+  },
48
+  data() {
49
+    return {
50
+      props: {
51
+        value: 'id',
52
+        label: 'text',
53
+        children: 'children'
54
+      },
55
+      ruleForm: {
56
+        id: '',
57
+        position: '',
58
+        department: [],
59
+        des: '',
60
+        targetmoney: ''
61
+      },
62
+      rules: {
63
+        position: [{
64
+          required: true,
65
+          message: '请输入团队名称!',
66
+          trigger: 'blur'
67
+        }],
68
+        targetmoney: [
69
+          { type: 'number', message: '任务额必须为数字!' }
70
+        ]
71
+      },
72
+      positionData: [], // 职位数据
73
+      loading: false
74
+    }
75
+  },
76
+  created() {
77
+    if (this.rowid) {
78
+      this.ruleForm.id = this.rowid
79
+      this.getDetail(this.rowid)
80
+    }
81
+  },
82
+  methods: {
83
+    submitForm() {
84
+      this.$refs.ruleForm.validate((valid) => {
85
+        if (valid) {
86
+          this.loading = true
87
+          const datas = {
88
+            id: this.ruleForm.id,
89
+            name: this.ruleForm.position,
90
+            deptid: this.depId,
91
+            targetmoney: this.ruleForm.targetmoney,
92
+            des: filterContent.delHtmlTag(this.ruleForm.des)
93
+          }
94
+
95
+          // 添加
96
+          if (!this.rowid) {
97
+            addTeam(datas).then(response => {
98
+              this.loading = false
99
+              if (response.state.toLowerCase() === 'success') {
100
+                this.$parent.$layer.close(this.layerid)
101
+                this.$parent.getteamList()
102
+                this.$parent.getList() // 重新加载父级数据
103
+                this.$parent.getTreeLists() // 重新加载父级数据
104
+                this.$parent.depId = 0
105
+                this.$message.success('恭喜你,团队管理添加成功!')
106
+              }
107
+            }).catch(() => {
108
+              this.loading = false
109
+            })
110
+            return
111
+          }
112
+          // 编辑
113
+          editTeam(datas).then(response => {
114
+            this.loading = false
115
+            if (response.state.toLowerCase() === 'success') {
116
+              this.$parent.$layer.close(this.layerid)
117
+              this.$parent.getList() // 重新加载父级数据
118
+              this.$parent.getTreeLists() // 重新加载父级数据
119
+              this.$parent.depId = 0
120
+              this.$message.success('恭喜你,团队管理编辑成功!')
121
+            }
122
+          }).catch(() => {
123
+            this.loading = false
124
+          })
125
+        } else {
126
+          this.$message.error('请输入有效的必填项信息!')
127
+          return false
128
+        }
129
+      })
130
+    },
131
+    resetForm() {
132
+      this.$refs.ruleForm.resetFields()
133
+    },
134
+    // 获取详情
135
+    getDetail(rid) {
136
+      getTeamDetail(rid).then(response => {
137
+        if (response.state.toLowerCase() === 'success') {
138
+          const res = response.data
139
+          this.ruleForm.position = res.F_Name
140
+          this.ruleForm.des = res.F_Des
141
+          this.ruleForm.targetmoney = res.F_TargetMoney
142
+        }
143
+      })
144
+    }
145
+  }
146
+}
147
+</script>
148
+
149
+<style rel="stylesheet/scss" lang="scss" scoped>
150
+.date_picker {
151
+  width: 100%;
152
+}
153
+div.date_picker input.el-range-input {
154
+  width: 46%;
155
+}
156
+</style>

+ 275 - 124
CallCenterWeb.UI/src/views/systemSetup/roleSetting/department/index.vue

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
   <div class="app-container">
3 3
     <el-row :gutter="20">
4
-      <el-col :span="8">
4
+      <el-col :span="4">
5 5
         <div class="filter-container">
6 6
           <el-button type="primary" class="filter-item" icon="el-icon-plus" @click="btn_add()">添加</el-button>
7 7
           <el-button type="primary" class="filter-item" icon="el-icon-edit" @click="btn_edit()">编辑</el-button>
@@ -16,12 +16,12 @@
16 16
         <el-table
17 17
           v-loading="loading"
18 18
           :data="departmentDataLists"
19
+          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
19 20
           highlight-current-row
20
-          @current-change="handleCurrentChange"
21 21
           border
22 22
           row-key="F_DeptId"
23 23
           default-expand-all
24
-          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
24
+          @current-change="handleCurrentChange"
25 25
           @row-click="openEdit"
26 26
         >
27 27
           <el-table-column prop="F_DeptName" label="部门名称" align="center" min-width />
@@ -35,7 +35,7 @@
35 35
           </el-table-column>
36 36
         </el-table>
37 37
       </el-col>
38
-      <el-col :span="16">
38
+      <el-col :span="11">
39 39
         <div>
40 40
           <div class="filter-container search">
41 41
             <el-input v-model="keyword" placeholder="请输入关键字" class="filter-item" />
@@ -53,8 +53,8 @@
53 53
               @click="btn_addR"
54 54
             >添加</el-button>
55 55
           </div>
56
-          <el-table v-loading="loading" :data="dataLists" border stripe>
57
-            <el-table-column type="index" label="编号" align="center" fixed width="80" />
56
+          <el-table v-loading="loading" :data="dataLists" border stripe @row-click="handleTableClick">
57
+            <el-table-column type="index" label="编号" align="center" fixed width="60" />
58 58
             <el-table-column prop="F_DeptName" label="部门名称" align="center" min-width />
59 59
             <el-table-column prop="F_Name" label="团队名称" align="center" min-width />
60 60
             <el-table-column prop="F_CreateBy" label="创建人" align="center" min-width />
@@ -98,6 +98,68 @@
98 98
           />
99 99
         </div>
100 100
       </el-col>
101
+      <el-col :span="9">
102
+        <div>
103
+          <div class="filter-container search">
104
+            <el-input v-model="teamkeyword" placeholder="请输入关键字" class="filter-item" />
105
+            <el-button
106
+              type="primary"
107
+              class="filter-item"
108
+              icon="el-icon-search"
109
+              @click="btn_searchGrop"
110
+            >搜索</el-button>
111
+            <el-button
112
+              v-permission="'HY_add'"
113
+              type="primary"
114
+              class="filter-item"
115
+              icon="el-icon-plus"
116
+              @click="btn_addGrop"
117
+            >添加</el-button>
118
+          </div>
119
+          <el-table v-loading="loading" :data="teamLists" border stripe>
120
+            <el-table-column type="index" label="编号" align="center" fixed width="50" />
121
+            <el-table-column prop="F_DeptName" label="部门名称" align="center" min-width />
122
+            <el-table-column prop="F_Name" label="小组名称" align="center" min-width />
123
+            <el-table-column prop="F_CreateBy" label="创建人" align="center" min-width />
124
+            <el-table-column prop="F_TargetMoney" label="任务额" align="center" min-width>
125
+              <template slot-scope="scope">{{ scope.row.F_TargetMoney | judgmentTargetMoney }}</template>
126
+            </el-table-column>
127
+            <el-table-column prop="F_Des" label="描述说明" align="center" min-width />
128
+            <el-table-column
129
+              label="操作"
130
+              width="160"
131
+              align="center"
132
+              class-name="oparate_btn"
133
+              fixed="right"
134
+            >
135
+              <template slot-scope="scope">
136
+                <el-button
137
+                  v-permission="'HY_edit'"
138
+                  size="mini"
139
+                  plain
140
+                  type="primary"
141
+                  @click="btn_editR(scope.row.F_Id.toString())"
142
+                >编辑</el-button>
143
+                <el-button
144
+                  v-permission="'HY_delete'"
145
+                  size="mini"
146
+                  plain
147
+                  type="danger"
148
+                  @click="btn_deleteR(scope.row.F_Id.toString())"
149
+                >删除</el-button>
150
+              </template>
151
+            </el-table-column>
152
+          </el-table>
153
+          <pagination
154
+            v-show="pageParams.total > 0"
155
+            :total="pageParams.total"
156
+            :pageindex.sync="pageParams.pageindex"
157
+            :pagesize.sync="pageParams.pagesize"
158
+            class="pagination"
159
+            @pagination="getList"
160
+          />
161
+        </div>
162
+      </el-col>
101 163
     </el-row>
102 164
   </div>
103 165
 </template>
@@ -106,249 +168,338 @@ import {
106 168
   getScoreList,
107 169
   deleteType,
108 170
   deleteScore,
109
-  getDepartmentList,
110
-} from "@/api/systemSetup/roleSetting/department";
171
+  getDepartmentList
172
+} from '@/api/systemSetup/roleSetting/department'
111 173
 import {
112 174
   getTeamLists,
113 175
   deleteTeam,
114
-  getDepidTeam,
115
-} from "@/api/systemSetup/sysSetting/teamManagement";
116
-import addOrEditKnowledge from "./component/addOrEdit";
117
-import addOrEditTeam from "./component/addOrEditTeam";
118
-import Pagination from "@/components/Pagination"; // 对el-pagination 二次封装
176
+  getDepidTeam
177
+} from '@/api/systemSetup/sysSetting/teamManagement'
178
+import addOrEditKnowledge from './component/addOrEdit'
179
+import addOrEditTeam from './component/addOrEditTeam'
180
+import addOrEditGrop from './component/addOrEditGroup'
181
+import Pagination from '@/components/Pagination' // 对el-pagination 二次封装
119 182
 export default {
120 183
   components: {
121
-    Pagination,
184
+    Pagination
122 185
   },
123 186
   filters: {
124 187
     judgmentLockName(status) {
125 188
       const statusMap = {
126
-        0: "未锁定",
127
-        1: "锁定",
128
-      };
129
-      return statusMap[status];
189
+        0: '未锁定',
190
+        1: '锁定'
191
+      }
192
+      return statusMap[status]
130 193
     },
131 194
     judgmentTargetMoney(status) {
132 195
       if (status == 0) {
133
-        return "";
196
+        return ''
134 197
       } else {
135
-        return status;
198
+        return status
136 199
       }
137
-    },
200
+    }
138 201
   },
139 202
   data() {
140 203
     return {
141
-      keyword: "",
142
-      selectedId:'',
143
-      depId: 0, //最后一级部门id
144
-      depName: "", //最后一级部门名称
204
+      keyword: '',
205
+      teamkeyword: '',
206
+      selectedId: '',
207
+      depId: 0, // 最后一级部门id
208
+      depName: '', // 最后一级部门名称
209
+      gropName: '', // 点击团队名称
145 210
       loading: false,
211
+      clickId: '', // 团队点击id
146 212
       pageParams: {
147 213
         pageindex: 1, // 当前第几页
148 214
         pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
149
-        total: 0, // 总共多少数据
215
+        total: 0 // 总共多少数据
150 216
       },
151 217
       dataLists: [], // 团队管理列表数据
152
-      departmentDataLists: [], //部门列表数据
153
-    };
218
+      teamLists: [], // 小组列表数据
219
+      departmentDataLists: [] // 部门列表数据
220
+    }
154 221
   },
155 222
   created() {
156
-    this.getDepList(); //部门列表
157
-    this.getList(); // 团队管理数据
223
+    this.getDepList() // 部门列表
224
+    this.getList() // 团队管理数据
158 225
     document.onkeyup = (e) => {
159 226
       if (e.keyCode === 13) {
160
-        this.getList();
227
+        this.getList()
161 228
       }
162
-    };
229
+    }
163 230
   },
164
-  mounted: function () {},
231
+  mounted: function() {},
165 232
   methods: {
166 233
     // 部门分类
167 234
     getDepList() {
168
-      this.loading = true;
235
+      this.loading = true
169 236
       return new Promise((resolve) => {
170 237
         const params = {
171 238
           pageindex: this.pageParams.pageindex, // 第几页
172 239
           pagesize: this.pageParams.pagesize, // 每页几条信息
173
-          keyword: this.keyword.trim(),
174
-        };
240
+          keyword: this.keyword.trim()
241
+        }
175 242
         getDepartmentList(params)
176 243
           .then((response) => {
177
-            this.loading = false;
178
-            this.departmentDataLists = response;
244
+            this.loading = false
245
+            this.departmentDataLists = response
179 246
           })
180 247
           .catch((result) => {
181
-            this.loading = false;
182
-            this.departmentDataLists = [];
183
-          });
184
-        resolve();
185
-      });
248
+            this.loading = false
249
+            this.departmentDataLists = []
250
+          })
251
+        resolve()
252
+      })
186 253
     },
187
-    //添加
254
+    // 添加
188 255
     btn_add() {
189 256
       this.$layer.iframe({
190 257
         content: {
191 258
           content: addOrEditKnowledge, // 传递的组件对象
192 259
           parent: this, // 当前的vue对象
193
-          data: { rowid: "" }, // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
260
+          data: { rowid: '' } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
194 261
         },
195
-        area: ["80%", "90%"],
262
+        area: ['80%', '90%'],
196 263
         shadeClose: false,
197
-        title: "添加部门分类",
198
-      });
264
+        title: '添加部门分类'
265
+      })
199 266
     },
200
-    //编辑
267
+    // 编辑
201 268
     openEdit(row) {
202
-      this.selectedId=row.F_DeptId.toString()
269
+      this.selectedId = row.F_DeptId.toString()
203 270
     },
204 271
     btn_edit() {
205 272
       if (this.selectedId == String) {
206 273
         this.$message({
207
-          message: "请选择一行编辑!",
208
-          type: "warning",
209
-        });
210
-        return;
274
+          message: '请选择一行编辑!',
275
+          type: 'warning'
276
+        })
277
+        return
211 278
       }
212
-      let rowId = this.selectedId;
279
+      const rowId = this.selectedId
213 280
       this.$layer.iframe({
214 281
         content: {
215 282
           content: addOrEditKnowledge, // 传递的组件对象
216 283
           parent: this, // 当前的vue对象
217
-          data: { rowid: rowId }, // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
284
+          data: { rowid: rowId } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
218 285
         },
219
-        area: ["80%", "90%"],
286
+        area: ['80%', '90%'],
220 287
         shadeClose: false,
221
-        title: "编辑部门分类",
222
-      });
288
+        title: '编辑部门分类'
289
+      })
223 290
     },
224
-    //删除
291
+    // 删除
225 292
     btn_delete() {
226 293
       if (this.selectedId == String) {
227 294
         this.$message({
228
-          message: "没有可删除的选项!",
229
-          type: "warning",
230
-        });
295
+          message: '没有可删除的选项!',
296
+          type: 'warning'
297
+        })
231 298
       } else {
232
-        let ids = this.selectedId;
233
-        this.deleteType(this.selectedId);
299
+        const ids = this.selectedId
300
+        this.deleteType(this.selectedId)
234 301
       }
235 302
     },
236
-    //删除
303
+    // 删除
237 304
     deleteType(ids) {
238
-      this.$confirm("您确定要删除吗?", "提示", {
239
-        confirmButtonText: "确定",
240
-        cancelButtonText: "取消",
241
-        type: "warning",
305
+      this.$confirm('您确定要删除吗?', '提示', {
306
+        confirmButtonText: '确定',
307
+        cancelButtonText: '取消',
308
+        type: 'warning'
242 309
       })
243 310
         .then(() => {
244 311
           deleteType(ids).then((response) => {
245
-            if (response.state.toLowerCase() === "success") {
246
-              this.getDepList();
247
-              this.$message.success("删除成功!");
312
+            if (response.state.toLowerCase() === 'success') {
313
+              this.getDepList()
314
+              this.$message.success('删除成功!')
248 315
             }
249
-          });
316
+          })
250 317
         })
251 318
         .catch(() => {
252
-          this.$message.info("已取消删除");
253
-        });
319
+          this.$message.info('已取消删除')
320
+        })
254 321
     },
255 322
     changeSelects(val) {
256
-      const ids = [];
257
-      this.multipleSelection = val;
323
+      const ids = []
324
+      this.multipleSelection = val
258 325
       for (let i = 0; i < this.multipleSelection.length; i++) {
259
-        ids.push(this.multipleSelection[i].F_DeptId);
326
+        ids.push(this.multipleSelection[i].F_DeptId)
260 327
       }
261
-      this.selectedId = ids;
328
+      this.selectedId = ids
262 329
     },
263 330
     handleCurrentChange(data) {
264 331
       if (data.F_DeptId !== 0) {
265
-        this.depId = data.F_DeptId;
266
-        this.depName = data.F_DeptName;
267
-        this.getList();
332
+        this.depId = data.F_DeptId
333
+        this.depName = data.F_DeptName
334
+        this.getList()
268 335
       } else {
269
-        this.depId = 0;
336
+        this.depId = 0
270 337
       }
271 338
     },
272 339
 
273
-    //获取团队列表数据
340
+    // 获取团队列表数据
274 341
     getList() {
275
-      this.loading = true;
342
+      this.loading = true
276 343
       return new Promise((resolve) => {
277 344
         const params = {
278 345
           pageindex: this.pageParams.pageindex, // 第几页
279 346
           pagesize: this.pageParams.pagesize, // 每页几条信息
280 347
           key: this.keyword.trim(),
281
-          deptid: this.depId,
282
-        };
348
+          deptid: this.depId
349
+        }
283 350
         getTeamLists(params).then((response) => {
284
-          this.loading = false;
285
-          if (response.state.toLowerCase() === "success") {
286
-            this.pageParams.total = response.data.Totals;
287
-            this.dataLists = response.data.Rows;
351
+          this.loading = false
352
+          if (response.state.toLowerCase() === 'success') {
353
+            this.pageParams.total = response.data.Totals
354
+            this.dataLists = response.data.Rows
288 355
           }
289
-        });
290
-        resolve();
291
-      });
356
+        })
357
+        resolve()
358
+      })
292 359
     },
293
-    //搜索
360
+    // 搜索
294 361
     btn_search() {
295
-      this.pageParams.pageindex = 1;
296
-      this.getList();
362
+      this.pageParams.pageindex = 1
363
+      this.getList()
297 364
     },
298
-    //右边添加功能
365
+    // 右边添加功能
299 366
     btn_addR() {
300 367
       if (this.depId !== 0) {
301 368
         this.$layer.iframe({
302 369
           content: {
303 370
             content: addOrEditTeam, // 传递的组件对象
304 371
             parent: this, // 当前的vue对象
305
-            data: { depId: this.depId, depName: this.depName }, // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
372
+            data: { depId: this.depId, depName: this.depName } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
306 373
           },
307
-          area: ["80%", "80%"],
308
-          title: "添加团队管理信息",
309
-        });
374
+          area: ['80%', '80%'],
375
+          title: '添加团队管理信息'
376
+        })
310 377
       } else {
311
-        this.$message.info("请选择部门");
378
+        this.$message.info('请选择部门')
312 379
       }
313 380
     },
314
-    //右边编辑功能
381
+    // 右边编辑功能
315 382
     btn_editR(editId) {
316 383
       if (this.depId !== 0) {
317 384
         this.$layer.iframe({
318 385
           content: {
319 386
             content: addOrEditTeam, // 传递的组件对象
320 387
             parent: this, // 当前的vue对象
321
-            data: { rowid: editId, depId: this.depId, depName: this.depName }, // props
388
+            data: { rowid: editId, depId: this.depId, depName: this.depName } // props
322 389
           },
323
-          area: ["80%", "80%"],
324
-          title: "编辑团队管理信息",
325
-        });
390
+          area: ['80%', '80%'],
391
+          title: '编辑团队管理信息'
392
+        })
326 393
       } else {
327
-        this.$message.info("请选择部门");
394
+        this.$message.info('请选择部门')
328 395
       }
329 396
     },
330
-    //右边删除功能
397
+    // 右边删除功能
331 398
     btn_deleteR(editId) {
332
-      this.$confirm("您确定要将此团队信息删除吗?", "提示", {
333
-        confirmButtonText: "确定",
334
-        cancelButtonText: "取消",
335
-        type: "warning",
399
+      this.$confirm('您确定要将此团队信息删除吗?', '提示', {
400
+        confirmButtonText: '确定',
401
+        cancelButtonText: '取消',
402
+        type: 'warning'
336 403
       })
337 404
         .then(() => {
338 405
           deleteTeam(editId).then((response) => {
339
-            if (response.state.toLowerCase() === "success") {
340
-              this.getList();
341
-              this.$message.success("删除成功!");
342
-              this.depId = 0;
406
+            if (response.state.toLowerCase() === 'success') {
407
+              this.getList()
408
+              this.$message.success('删除成功!')
409
+              this.depId = 0
343 410
             }
344
-          });
411
+          })
345 412
         })
346 413
         .catch(() => {
347
-          this.$message.info("已取消删除");
348
-        });
414
+          this.$message.info('已取消删除')
415
+        })
349 416
     },
350
-  },
351
-};
417
+    //  点击某一行团队
418
+    handleTableClick(row, event, column) {
419
+      this.gropName = row.F_Name
420
+      this.clickId = row.F_Id
421
+      this.getteamList()
422
+    },
423
+    // 获取小组列表数据
424
+    getteamList() {
425
+      this.loading = true
426
+      return new Promise((resolve) => {
427
+        const params = {
428
+          pageindex: this.pageParams.pageindex, // 第几页
429
+          pagesize: this.pageParams.pagesize, // 每页几条信息
430
+          praentid: this.clickId,
431
+          key: this.teamkeyword.trim(),
432
+          deptid: this.depId
433
+        }
434
+        getTeamLists(params).then((response) => {
435
+          this.loading = false
436
+          if (response.state.toLowerCase() === 'success') {
437
+            this.pageParams.total = response.data.Totals
438
+            this.teamLists = response.data.Rows
439
+          }
440
+        })
441
+        resolve()
442
+      })
443
+    },
444
+    // 搜索
445
+    btn_searchGrop() {
446
+      this.pageParams.pageindex = 1
447
+      this.getteamList()
448
+    },
449
+    // 小组添加功能
450
+    btn_addGrop() {
451
+      if (this.clickId !== 0) {
452
+        this.$layer.iframe({
453
+          content: {
454
+            content: addOrEditGrop, // 传递的组件对象
455
+            parent: this, // 当前的vue对象
456
+            data: { depId: this.depId, depName: this.depName } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
457
+          },
458
+          area: ['80%', '80%'],
459
+          title: '添加小组管理信息'
460
+        })
461
+      } else {
462
+        this.$message.info('请选择团队')
463
+      }
464
+    },
465
+    // 右边编辑功能
466
+    btn_editGrop(editId) {
467
+      if (this.depId !== 0) {
468
+        this.$layer.iframe({
469
+          content: {
470
+            content: addOrEditTeam, // 传递的组件对象
471
+            parent: this, // 当前的vue对象
472
+            data: { rowid: editId, depId: this.depId, depName: this.depName } // props
473
+          },
474
+          area: ['80%', '80%'],
475
+          title: '编辑团队管理信息'
476
+        })
477
+      } else {
478
+        this.$message.info('请选择部门')
479
+      }
480
+    },
481
+    // 右边删除功能
482
+    btn_deleteGrop(editId) {
483
+      this.$confirm('您确定要将此团队信息删除吗?', '提示', {
484
+        confirmButtonText: '确定',
485
+        cancelButtonText: '取消',
486
+        type: 'warning'
487
+      })
488
+        .then(() => {
489
+          deleteTeam(editId).then((response) => {
490
+            if (response.state.toLowerCase() === 'success') {
491
+              this.getList()
492
+              this.$message.success('删除成功!')
493
+              this.depId = 0
494
+            }
495
+          })
496
+        })
497
+        .catch(() => {
498
+          this.$message.info('已取消删除')
499
+        })
500
+    }
501
+  }
502
+}
352 503
 </script>
353 504
 <style lang="scss" scoped>
354 505
 .search {