Edit.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div>
  3. <el-dialog append-to-body :title="title" :visible.sync="visible" @close="close">
  4. <el-form ref="form" :model="form" :rules="rules">
  5. <el-row :gutter="20">
  6. <el-col :span="12">
  7. <el-form-item label="序号" prop="code">
  8. <el-input v-model="form.code" disabled :placeholder="form.code ? form.code : '自动生成无需填写'" />
  9. </el-form-item>
  10. </el-col>
  11. <el-col :span="12">
  12. <el-form-item label="日期时间" prop="consultTime">
  13. <el-date-picker
  14. v-model="form.consultTime"
  15. format="yyyy-MM-dd HH:mm"
  16. placeholder="请选择发布日期"
  17. style="width: 100%"
  18. type="datetime"
  19. value-format="yyyy-MM-dd HH:mm" />
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="12">
  23. <el-form-item label="所在地区" required>
  24. <el-row :gutter="4" style="width: 100%; padding-top: 32px">
  25. <el-col :span="8">
  26. <el-select
  27. v-model="form.province"
  28. :disabled="areaEditDisable"
  29. filterable
  30. placeholder="省"
  31. value-key="id"
  32. @change="provinceChange">
  33. <el-option v-for="item in provinceOptions" :key="item.id" :label="item.distName" :value="item" />
  34. </el-select>
  35. </el-col>
  36. <el-col :span="8">
  37. <el-select
  38. v-model="form.city"
  39. :disabled="areaEditDisable"
  40. filterable
  41. placeholder="市"
  42. value-key="id"
  43. @change="cityChange">
  44. <el-option
  45. v-for="item in currentProvince ? currentProvince.children : []"
  46. :key="item.id"
  47. :label="item.distName"
  48. :value="item" />
  49. </el-select>
  50. </el-col>
  51. <el-col :span="8">
  52. <el-button :disabled="areaEditDisable" type="primary" @click="showSelectCityDialog">搜索</el-button>
  53. </el-col>
  54. </el-row>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="12">
  58. <el-form-item label="单位名称" prop="unit">
  59. <el-input v-model="form.unit" placeholder="请输入单位名称" />
  60. </el-form-item>
  61. </el-col>
  62. </el-row>
  63. <el-row :gutter="4" style="width: 100%; padding-top: 32px">
  64. <el-col :span="12">
  65. <el-form-item label="联系人" prop="name">
  66. <el-input v-model="form.name" placeholder="请输入联系人" />
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="12">
  70. <el-form-item label="联系方式" prop="contact">
  71. <el-input v-model="form.contact" placeholder="请输入联系方式" />
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="12">
  75. <el-form-item label="咨询产品" prop="product">
  76. <el-input v-model="form.product" placeholder="请输入咨询产品" />
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12">
  80. <el-form-item label="对接人" prop="inchargeName">
  81. <el-input v-model="form.inchargeName" suffix-icon="el-icon-search" @focus="handleSelectSale" />
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-form-item label="400电话内容" prop="content">
  86. <el-input v-model="form.content" maxlength="500" resize="none" :rows="5" show-word-limit type="textarea" />
  87. </el-form-item>
  88. </el-form>
  89. <span slot="footer">
  90. <el-button v-show="form.id" type="primary" @click="consultEdit">保存</el-button>
  91. <el-button v-show="!form.id" type="primary" @click="consultSave">保存</el-button>
  92. <el-button @click="visible = false">取消</el-button>
  93. </span>
  94. </el-dialog>
  95. <!-- 选择销售工程师弹窗 -->
  96. <select-user
  97. ref="selectSales"
  98. :query-params="{
  99. roles: ['SalesEngineer', 'SalesDirector', 'StrategicProjectTeamLeader', 'StrategicProjectTeam'],
  100. }"
  101. @save="selectSales" />
  102. <!-- 地区搜索 -->
  103. <selectCity ref="selectCity" @submit="submitCity" />
  104. </div>
  105. </template>
  106. <script>
  107. import to from 'await-to-js'
  108. import customerApi from '@/api/customer'
  109. import consultApi from '@/api/consult'
  110. import SelectUser from '@/components/select/SelectUser'
  111. import selectCity from './selectCity'
  112. export default {
  113. components: { SelectUser, selectCity },
  114. data() {
  115. return {
  116. title: '',
  117. visible: false,
  118. areaEditDisable: false,
  119. provinceOptions: [],
  120. currentProvince: [],
  121. form: {
  122. id: 0,
  123. code: '', // 序号
  124. consultTime: null, // 日期时间
  125. provinceId: 0, // 所在省ID
  126. province: '', // 所在省
  127. cityId: 0, // 所在市ID
  128. city: '', // 所在市
  129. unit: '', // 单位名称
  130. name: '', // 联系人
  131. contact: '', // 联系方式
  132. product: '', // 咨询产品
  133. inchargeId: '', // 对接人ID
  134. inchargeName: '', // 对接人(销售工程师)
  135. content: '', // 内容
  136. },
  137. rules: {
  138. code: [{ required: false }],
  139. consultTime: [{ required: true, trigger: ['blur', 'change'], message: '请输入日期时间' }],
  140. provinceId: [{ required: true, trigger: ['blur', 'change'], message: '请输入所在省ID' }],
  141. province: [{ required: true, trigger: ['blur', 'change'], message: '请输入所在省' }],
  142. cityId: [{ required: true, trigger: ['blur', 'change'], message: '请输入所在市ID' }],
  143. city: [{ required: true, trigger: ['blur', 'change'], message: '请输入所在市' }],
  144. unit: [{ required: true, trigger: ['blur', 'change'], message: '请输入单位名称' }],
  145. name: [{ required: true, trigger: ['blur', 'change'], message: '请输入联系人' }],
  146. contact: [{ required: true, trigger: ['blur', 'change'], message: '请输入联系方式' }],
  147. product: [{ required: true, trigger: ['blur', 'change'], message: '请输入咨询产品' }],
  148. inchargeId: [{ required: true, trigger: ['blur', 'change'], message: '请输入对接人ID' }],
  149. inchargeName: [{ required: true, trigger: ['blur', 'change'], message: '请输入对接人' }],
  150. content: [{ required: true, trigger: ['blur', 'change'], message: '请输入内容' }],
  151. },
  152. }
  153. },
  154. mounted() {
  155. Promise.all([customerApi.getProvinceDetail()])
  156. .then(([province]) => {
  157. this.provinceOptions = province.data.list || []
  158. })
  159. .catch((err) => console.log(err))
  160. },
  161. methods: {
  162. async init(id) {
  163. this.visible = true
  164. if (!id) {
  165. this.title = '新建咨询记录'
  166. return
  167. }
  168. this.title = '编辑咨询记录'
  169. const [err, res] = await to(consultApi.get({ id: id }))
  170. if (err) return
  171. this.form = res.data
  172. },
  173. // 保存
  174. async consultSave() {
  175. this.$refs.form.validate(async (valid) => {
  176. if (valid) {
  177. let params = { ...this.form }
  178. const [err, res] = await to(consultApi.add(params))
  179. if (err) return
  180. this.$message.success(res.msg)
  181. this.visible = false
  182. this.$emit('consultSave')
  183. }
  184. })
  185. },
  186. async consultEdit() {
  187. this.$refs.form.validate(async (valid) => {
  188. if (valid) {
  189. let params = { ...this.form }
  190. const [err, res] = await to(consultApi.update(params))
  191. if (err) return
  192. this.$message.success(res.msg)
  193. this.visible = false
  194. this.$emit('consultSave')
  195. }
  196. })
  197. },
  198. provinceChange(val) {
  199. this.currentProvince = val
  200. this.form.provinceId = val.id
  201. this.form.province = val.distName
  202. this.form.cityId = 0
  203. this.form.city = ''
  204. this.$forceUpdate()
  205. },
  206. cityChange(val) {
  207. this.form.cityId = val.id
  208. this.form.city = val.distName
  209. this.$forceUpdate()
  210. },
  211. // 打开选择城市弹窗
  212. showSelectCityDialog() {
  213. this.$refs.selectCity.openDialog()
  214. },
  215. // 选中城市
  216. submitCity(row) {
  217. this.form.provinceId = row.provinceId
  218. this.form.province = row.province
  219. this.form.cityId = row.cityId
  220. this.form.city = row.city
  221. for (let item of this.provinceOptions) {
  222. if (item.id == row.provinceId) {
  223. this.currentProvince = item
  224. break
  225. }
  226. }
  227. },
  228. selectSales(val) {
  229. if (val && val.length > 0) {
  230. this.form.inchargeId = val[0].id
  231. this.form.inchargeName = val.map((item) => item.nickName).join()
  232. }
  233. },
  234. handleSelectSale() {
  235. this.$refs.selectSales.open()
  236. },
  237. close() {
  238. this.form = {
  239. id: 0,
  240. code: '', // 序号
  241. consultTime: null, // 日期时间
  242. provinceId: 0, // 所在省ID
  243. province: '', // 所在省
  244. cityId: 0, // 所在市ID
  245. city: '', // 所在市
  246. unit: '', // 单位名称
  247. name: '', // 联系人
  248. contact: '', // 联系方式
  249. product: '', // 咨询产品
  250. inchargeId: '', // 对接人ID
  251. inchargeName: '', // 对接人(销售工程师)
  252. content: '', // 内容
  253. }
  254. this.$refs['form'].resetFields()
  255. },
  256. },
  257. }
  258. </script>
  259. <style></style>