basicInfo.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. import { lbsAmapRegion } from '@/api/common.js'
  2. import geographicalPosi from '@/components/geographicalPosi/index.vue'
  3. import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
  4. export default {
  5. data() {
  6. return {
  7. provinceList: [],
  8. cityList: [],
  9. areaList: [],
  10. streetList: [],
  11. }
  12. },
  13. computed: {
  14. // 基本信息数据模型
  15. basicInfo() {
  16. return [
  17. {
  18. name: 'el-input',
  19. md: 6,
  20. attributes: {
  21. placeholder: '请输入',
  22. disabled: this.formData.status == "OK"
  23. },
  24. formItemAttributes: {
  25. label: '客户名称',
  26. prop: 'userName',
  27. rules: [...required],
  28. },
  29. events: {
  30. input: (v) => {
  31. this.formData.linkName = v
  32. }
  33. }
  34. },
  35. {
  36. name: 'el-input',
  37. md: 6,
  38. attributes: {
  39. placeholder: '请输入',
  40. disabled: this.formData.status == "OK"
  41. },
  42. formItemAttributes: {
  43. label: '联系人',
  44. prop: 'linkName',
  45. rules: [...required],
  46. }
  47. },
  48. {
  49. name: 'el-input',
  50. md: 6,
  51. attributes: {
  52. placeholder: '请输入',
  53. disabled: this.formData.status == "OK", maxlength: 11
  54. },
  55. formItemAttributes: {
  56. label: '客户电话',
  57. prop: 'userMobile',
  58. rules: [...mobileRequired],
  59. }
  60. },
  61. {
  62. name: 'el-input',
  63. md: 6,
  64. attributes: {
  65. placeholder: '请输入',
  66. disabled: this.formData.status == "OK", maxlength: 11
  67. },
  68. formItemAttributes: {
  69. label: '客户电话2',
  70. prop: 'userMobile2',
  71. }
  72. },
  73. {
  74. name: 'el-select',
  75. md: 6,
  76. formItemAttributes: {
  77. label: '客户地址', //省
  78. prop: 'provinceId',
  79. errLabel: '省',
  80. rules: [...required],
  81. },
  82. options: this.provinceList.map((v, i) => ({ value: v.id, label: v.name })),
  83. attributes: {
  84. disabled: this.formData.status == "OK", clearable: true, filterable: true, placeholder: '请选择'
  85. },
  86. events: {
  87. change: (val) => {
  88. // 获取省名称
  89. this.formData.province = this.provinceList.find(item => item.id === val)?.name || ''
  90. // 清除市区街道以及详细地址数据
  91. this.delDataK(1)
  92. lbsAmapRegion({ pid: val }).then(res => {
  93. this.cityList = res.data
  94. })
  95. }
  96. }
  97. },
  98. {
  99. name: 'el-select',
  100. md: 5,
  101. formItemAttributes: {
  102. 'label-width': '0px',
  103. label: '', //市
  104. prop: 'cityId',
  105. errLabel: '市',
  106. rules: [...required],
  107. },
  108. options: this.cityList.map((v, i) => ({ value: v.id, label: v.name })),
  109. attributes: {
  110. disabled: this.formData.status == "OK", clearable: true, filterable: true, placeholder: '请选择'
  111. },
  112. events: {
  113. change: (val) => {
  114. // 获取市名称
  115. this.formData.city = this.cityList.find(item => item.id === val).name
  116. // 清除区街道以及详细地址数据
  117. this.delDataK(2)
  118. lbsAmapRegion({ pid: val }).then(res => {
  119. this.areaList = res.data
  120. })
  121. }
  122. }
  123. },
  124. {
  125. name: 'el-select',
  126. md: 5,
  127. formItemAttributes: {
  128. 'label-width': '0px',
  129. label: '', //区
  130. prop: 'areaId',
  131. errLabel: '区',
  132. rules: [...required],
  133. },
  134. options: this.areaList.map((v, i) => ({ value: v.id, label: v.name })),
  135. attributes: {
  136. disabled: this.formData.status == "OK", clearable: true, filterable: true, placeholder: '请选择'
  137. },
  138. events: {
  139. change: (val) => {
  140. // 获取区名称
  141. this.formData.area = this.areaList.find(item => item.id === val).name
  142. // 清除街道以及详细地址数据
  143. this.delDataK(3)
  144. lbsAmapRegion({ pid: val }).then(res => {
  145. this.streetList = res.data
  146. })
  147. }
  148. }
  149. },
  150. {
  151. name: 'el-select',
  152. md: 5,
  153. formItemAttributes: {
  154. 'label-width': '0px',
  155. label: '', //街道
  156. prop: 'streetId',
  157. errLabel: '街道',
  158. rules: [...required],
  159. },
  160. options: this.streetList.map((v, i) => ({ value: v.id, label: v.name })),
  161. attributes: {
  162. disabled: this.formData.status == "OK", clearable: true, filterable: true, placeholder: '请选择'
  163. },
  164. events: {
  165. change: (val) => {
  166. // 获取街道名称
  167. this.formData.street = this.streetList.find(item => item.id === val).name
  168. // 清除详细地址数据
  169. this.delDataK(4)
  170. }
  171. }
  172. },
  173. {
  174. name: 'slot-component',
  175. md: 3,
  176. formItemAttributes: {
  177. 'label-width': '0px',
  178. prop: '',
  179. },
  180. render: (h, { props }) => {
  181. return (
  182. <geographicalPosi
  183. disabled={this.formData.status == "OK"}
  184. formData={this.formData}
  185. onSelectPosi={data => {
  186. // 获取经纬度
  187. this.formData.lng = data.center[0]
  188. this.formData.lat = data.center[1]
  189. // 获取定位的省市区街道
  190. var { province, city, district, township } = data.data.addressComponent
  191. // 获取选中省名称id
  192. var { id, name } = this.provinceList.find(item => item.name === province)
  193. this.formData.provinceId = id
  194. this.formData.province = name
  195. // 请求市选项
  196. lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
  197. // 赋值市选项
  198. this.cityList = res.data
  199. // 获取选中市名称id
  200. var { id, name } = res.data.find(item => item.name === city)
  201. this.formData.cityId = id
  202. this.formData.city = name
  203. // 请求区选项
  204. lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
  205. // 赋值区选项
  206. this.areaList = res.data
  207. // 获取选中区名称id
  208. var { id, name } = res.data.find(item => item.name === district)
  209. this.formData.areaId = id
  210. this.formData.area = name
  211. // 请求街道选项
  212. lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
  213. // 赋值街道选项
  214. this.streetList = res.data
  215. // 获取选中街道名称id
  216. var { id, name } = res.data.find(item => item.name === township)
  217. this.formData.streetId = id
  218. this.formData.street = name
  219. this.formData.address = data.name
  220. })
  221. })
  222. })
  223. }}
  224. />
  225. )
  226. }
  227. }, {
  228. name: 'el-input',
  229. md: 24,
  230. formItemAttributes: { label: '详细地址', prop: 'address', rules: [...required] },
  231. attributes: {
  232. placeholder: '详细地址',
  233. disabled: this.formData.status == "OK"
  234. }
  235. },
  236. ]
  237. }
  238. },
  239. methods: {
  240. // 获取省市区街道
  241. getinitlbslist() {
  242. // 初始化请求省市区街道下拉选项数据
  243. lbsAmapRegion({ pid: 0 }).then(res => {
  244. this.provinceList = res.data
  245. if (this.formData.provinceId) {
  246. var item = this.provinceList.find(item => item.name === this.formData.provinceId)
  247. if (item) {
  248. this.formData.province = item.name
  249. }
  250. lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
  251. this.cityList = res.data
  252. if (this.formData.cityId) {
  253. var item2 = this.cityList.find(item => item.name === this.formData.cityId)
  254. if (item2) {
  255. this.formData.city = item2.name
  256. }
  257. lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
  258. this.areaList = res.data
  259. if (this.formData.areaId) {
  260. var item3 = this.areaList.find(item => item.name === this.formData.areaId)
  261. if (item3) {
  262. this.formData.city = item2.name
  263. }
  264. lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
  265. this.streetList = res.data
  266. if (this.formData.streetId) {
  267. var item4 = this.streetList.find(item => item.name === this.formData.streetId)
  268. if (item4) {
  269. this.formData.street = item4.name
  270. }
  271. }
  272. })
  273. }
  274. })
  275. }
  276. })
  277. }
  278. })
  279. },
  280. delDataK(num) {
  281. if (num <= 1) {
  282. // 删除市
  283. this.formData.cityId = ''
  284. this.formData.city = ''
  285. // 删除市选项
  286. this.cityList = []
  287. }
  288. if (num <= 2) {
  289. // 删除区
  290. this.formData.areaId = ''
  291. this.formData.area = ''
  292. // 删除区选项
  293. this.areaList = []
  294. }
  295. if (num <= 3) {
  296. // 删除街道
  297. this.formData.streetId = ''
  298. this.formData.street = ''
  299. // 删除街道选项
  300. this.streetList = []
  301. }
  302. // 删除gps地址
  303. this.formData.address = ''
  304. },
  305. }
  306. }