EditModal.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <template>
  2. <el-dialog
  3. :visible.sync="visible"
  4. v-bind="modalOptions"
  5. >
  6. <el-form
  7. ref="formData"
  8. :model="formData"
  9. :rules="formRules"
  10. size="mini"
  11. label-suffix=":"
  12. label-width="150px"
  13. >
  14. <el-form-item label="客户手机号" prop="phone">
  15. <el-input v-model="formData.phone" :disabled="!!formData.buyerUserId" maxlength="11" clearable />
  16. </el-form-item>
  17. <el-form-item label="客户昵称" prop="name">
  18. <el-input v-model="formData.name" placeholder="请输入客户昵称" maxlength="10" show-word-limit />
  19. </el-form-item>
  20. <el-form-item label="性别" prop="sex">
  21. <el-radio-group v-model="formData.sex">
  22. <el-radio label="男">男</el-radio>
  23. <el-radio label="女">女</el-radio>
  24. </el-radio-group>
  25. </el-form-item>
  26. <el-form-item label="生日" prop="birthday">
  27. <el-date-picker
  28. v-model="formData.birthday"
  29. size="medium"
  30. type="date"
  31. placeholder="选择日期"
  32. value-format="yyyy-MM-dd"
  33. ></el-date-picker>
  34. </el-form-item>
  35. <el-form-item label="标签" prop="ids">
  36. <el-select v-model="formData.ids" multiple size="mini" placeholder="请选择标签">
  37. <el-option v-for="item in tagList" :key="item.labelId" :label="item.labelName" :value="item.labelId" />
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="备注" prop="remark">
  41. <el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" maxlength="520" :rows="3" show-word-limit />
  42. </el-form-item>
  43. </el-form>
  44. <span slot="footer" class="dialog-footer">
  45. <el-button size="mini" @click="handleClose">取 消</el-button>
  46. <el-button type="primary" size="mini" @click="handleSubmit">确 定</el-button>
  47. </span>
  48. </el-dialog>
  49. </template>
  50. <script>
  51. import { addCustomer, updateCustomer, getCustomerDetail, getLabelData } from '@/api/customer'
  52. export default {
  53. name: 'EditModal',
  54. components: {
  55. },
  56. data() {
  57. return {
  58. modalOptions: {
  59. closeOnClickModal: false,
  60. width: '820px',
  61. title: ''
  62. },
  63. visible: false,
  64. formData: {
  65. buyerUserId: '',
  66. phone: '',
  67. name: '',
  68. time: '',
  69. source: '',
  70. sex: '',
  71. birthday: '',
  72. remark: '',
  73. total: '',
  74. frequency: '',
  75. lastTime: '',
  76. refundMoney: '',
  77. refunds: '',
  78. labelName: '',
  79. ids: []
  80. },
  81. formRules: {
  82. phone: [
  83. { required: true, message: '缺少客户手机号' },
  84. { pattern: /^1[3456789]\d{9}$/, message: '目前只支持中国大陆的手机号码' }
  85. ],
  86. name: [
  87. { required: true, message: '请输入客户昵称' }
  88. ]
  89. },
  90. tagList: []
  91. }
  92. },
  93. watch: {
  94. 'formData.buyerUserId': {
  95. deep: true,
  96. handler(val) {
  97. if (val) {
  98. this.formRules.phone = [
  99. { required: true, message: '缺少客户手机号' }
  100. ]
  101. } else {
  102. this.formRules.phone = [
  103. { required: true, message: '缺少客户手机号' },
  104. { pattern: /^1[3456789]\d{9}$/, message: '目前只支持中国大陆的手机号码' }
  105. ]
  106. }
  107. }
  108. }
  109. },
  110. methods: {
  111. handleClose() {
  112. this.visible = false
  113. },
  114. async getTagList() {
  115. const res = await getLabelData()
  116. this.tagList = res.data
  117. },
  118. initList() {
  119. this.getTagList()
  120. },
  121. handleOpen(params = {}) {
  122. this.modalOptions.title = params.buyerUserId ? '编辑客户基本信息' : '添加客户基本信息'
  123. this.formData = Object.assign(this.$options.data().formData, params)
  124. this.visible = true
  125. this.initList()
  126. if (params.buyerUserId) {
  127. this.getInfo(params.buyerUserId)
  128. } else {
  129. this.$refs.formData && this.$refs.formData.resetFields()
  130. }
  131. },
  132. async getInfo(id) {
  133. const loading = this.$loading({ text: '加载中' })
  134. try {
  135. const res = await getCustomerDetail({ buyerUserId: id })
  136. this.formData = Object.assign(this.$options.data().formData, res.data, {
  137. buyerUserId: res.data.buyerUserId || '',
  138. phone: res.data.phone || '',
  139. name: res.data.name || '',
  140. time: res.data.time || '',
  141. source: res.data.source || '',
  142. sex: res.data.sex,
  143. birthday: res.data.birthday || '',
  144. remark: res.data.remark || '',
  145. total: res.data.total,
  146. frequency: res.data.frequency,
  147. lastTime: res.data.lastTime || '',
  148. refundMoney: res.data.refundMoney,
  149. refunds: res.data.refunds,
  150. labelName: res.data.labelName || '',
  151. ids: res.data.ids || []
  152. })
  153. this.$nextTick(() => {
  154. this.$refs.formData && this.$refs.formData.validate()
  155. })
  156. } finally {
  157. loading.close()
  158. }
  159. },
  160. handleSubmit() {
  161. this.$refs.formData.validate(async (valid) => {
  162. if (valid) {
  163. const loading = this.$loading({ text: '提交中,请稍候……' })
  164. try {
  165. const { ...otps } = this.formData
  166. const params = {
  167. ...otps
  168. }
  169. this.formData.buyerUserId ? await updateCustomer(params) : await addCustomer(params)
  170. loading.close()
  171. this.$message({ message: `${this.formData.buyerUserId ? '编辑' : '添加'}成功!`, type: 'success' })
  172. this.$emit('success')
  173. this.visible = false
  174. } catch (e) {
  175. loading.close()
  176. } finally {
  177. loading.close()
  178. }
  179. } else {
  180. this.$message({ message: '请输入相关信息', type: 'warning' })
  181. return false
  182. }
  183. })
  184. }
  185. }
  186. }
  187. </script>