SalesHeader.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <template>
  2. <div class="sales">
  3. <el-form ref="form" :rules="rules" label-position="left" :disabled="screenForm.disabled" label-width="120px" :model="screenForm" size="mini">
  4. <el-row :gutter="20">
  5. <el-col :xs="24" :ms="6" :lg="6">
  6. <el-form-item label="销售订单号">
  7. <el-input v-model="screenForm.id" disabled placeholder="销售订单号" size="mini" />
  8. </el-form-item>
  9. </el-col>
  10. <el-col :xs="24" :ms="6" :lg="6">
  11. <el-form-item label="商家编号">
  12. <el-input v-model="screenForm.customerNumber" disabled placeholder="商家编号" size="mini" />
  13. </el-form-item>
  14. </el-col>
  15. <el-col :xs="24" :ms="6" :lg="6">
  16. <el-form-item label="商家名称">
  17. <el-input v-model="screenForm.customerName" disabled placeholder="商家名称" size="mini" />
  18. </el-form-item>
  19. </el-col>
  20. <el-col :xs="24" :ms="6" :lg="6">
  21. <el-form-item label="配送日期" prop="pickTime">
  22. <el-date-picker
  23. v-model="screenForm.pickTime"
  24. style="width: 100%"
  25. type="date"
  26. size="mini"
  27. value-format="yyyy-MM-dd HH:mm:ss"
  28. placeholder="选择日期"
  29. />
  30. </el-form-item>
  31. </el-col>
  32. <!-- <el-col :xs="24" :ms="6" :lg="6">-->
  33. <!-- <el-form-item label="发货仓库编号" prop="code">-->
  34. <!-- <el-input v-model="screenForm.code" placeholder="发货仓库编号" size="mini" />-->
  35. <!-- </el-form-item>-->
  36. <!-- </el-col>-->
  37. <el-col :xs="24" :ms="6" :lg="6">
  38. <el-form-item label="发货仓库名称" prop="stockType">
  39. <el-select v-model="screenForm.stockType" placeholder="请选择" clearable @change="handleStokType">
  40. <el-option
  41. label="嘉贤前置仓"
  42. :value="1"
  43. />
  44. <el-option
  45. label="商家商家仓"
  46. :value="2"
  47. />
  48. </el-select>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :xs="24" :ms="6" :lg="6">
  52. <el-form-item label="用户名称" prop="userName">
  53. <el-input v-model="screenForm.userName" placeholder="用户名称" size="mini" />
  54. </el-form-item>
  55. </el-col>
  56. <el-col :xs="24" :ms="6" :lg="6">
  57. <el-form-item label="用户电话" prop="phone">
  58. <el-input v-model="screenForm.phone" placeholder="用户电话" size="mini" />
  59. </el-form-item>
  60. </el-col>
  61. <el-col :xs="24" :ms="18" :lg="18" style="display: flex;" class="custom">
  62. <el-form-item label="省" prop="provinceId" class="item">
  63. <el-select
  64. v-model="screenForm.provinceId"
  65. placeholder="请选择省"
  66. style="width: 100%"
  67. @change="changeProvince"
  68. >
  69. <el-option v-for="item in provinceList" :key="item.id" :label="item.name" :value="item.id" />
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item label="市" prop="cityId" label-width="50px">
  73. <el-select v-model="screenForm.cityId" placeholder="请选择市" style="width: 100%" @change="changeCity">
  74. <el-option v-for="item in cityList" :key="item.id" :label="item.name" :value="item.id" />
  75. </el-select>
  76. </el-form-item>
  77. <el-form-item label="区" prop="areaId" label-width="50px">
  78. <el-select v-model="screenForm.areaId" placeholder="请选择区" style="width: 100%" @change="changeArea">
  79. <el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id" />
  80. </el-select>
  81. </el-form-item>
  82. <el-form-item label="街道" prop="streetId" label-width="50px">
  83. <el-select v-model="screenForm.streetId" placeholder="请选择街道" style="width: 100%" @change="changeStreet">
  84. <el-option v-for="item in streetList" :key="item.id" :label="item.name" :value="item.id" />
  85. </el-select>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :xs="24" :ms="6" :lg="6">
  89. <el-form-item label="送货地址" prop="receAddress">
  90. <el-input v-model="screenForm.receAddress" placeholder="送货地址" size="mini" />
  91. </el-form-item>
  92. </el-col>
  93. <el-col :xs="24" :ms="24" :lg="24">
  94. <el-form-item label="备注" prop="notes">
  95. <el-input v-model="screenForm.notes" placeholder="备注" size="mini" />
  96. </el-form-item>
  97. </el-col>
  98. </el-row>
  99. </el-form>
  100. </div>
  101. </template>
  102. <script>
  103. import { getRegion } from '@/api/sales'
  104. export default {
  105. name: 'SalesHeader',
  106. data() {
  107. return {
  108. screenForm: {
  109. id: '',
  110. city: '',
  111. area: '',
  112. province: '',
  113. street: '',
  114. cityId: '',
  115. areaId: '',
  116. provinceId: '',
  117. streetId: '',
  118. customerNumber: '',
  119. customerName: '',
  120. pickTime: '',
  121. stockType: '',
  122. userName: '',
  123. phone: '',
  124. receAddress: '',
  125. notes: ''
  126. },
  127. rules: {
  128. // id: [
  129. // { required: true, message: '请输入销售订单号', trigger: 'change' },
  130. //
  131. // ],
  132. cityId: [{
  133. required: true, message: '请输入市', trigger: 'change'
  134. }],
  135. areaId: [{
  136. required: true, message: '请输入区', trigger: 'change'
  137. }],
  138. provinceId: [{
  139. required: true, message: '请输入省', trigger: 'change'
  140. }],
  141. streetId: [{
  142. required: true, message: '请输入街道', trigger: 'change'
  143. }],
  144. // customerNumber: [ { required: true, message: '请输入商家编号', trigger: 'change' },
  145. // ],
  146. // customerName: [{
  147. // required: true, message: '请输入商家名称', trigger: 'change'
  148. // }],
  149. pickTime: [{
  150. required: true, message: '请输入配送日期', trigger: 'change'
  151. }],
  152. // stockType: [{
  153. // required: true, message: '请输入发货仓库名称', trigger: 'change'
  154. // }],
  155. userName: [{
  156. required: true, message: '请输入用户名称', trigger: 'change'
  157. }],
  158. phone: [{
  159. required: true, message: '请输入用户电话', trigger: 'change'
  160. },
  161. { min: 11, max: 11, message: '请输入11位手机号', trigger: 'change' }
  162. ],
  163. receAddress: [{
  164. required: true, message: '请输入送货地址', trigger: 'change'
  165. }]
  166. },
  167. provinceList: [],
  168. cityList: [],
  169. areaList: [],
  170. streetList: [],
  171. areaValue: ''
  172. }
  173. },
  174. created() {
  175. this.getRegion()
  176. },
  177. methods: {
  178. // 获取省市区街道
  179. getRegion(level = 0, id = 0) {
  180. getRegion({ pid: id }).then(res => {
  181. if (level === 0) {
  182. this.provinceList = res.data
  183. } else if (level === 1) {
  184. this.cityList = res.data
  185. } else if (level === 2) {
  186. this.areaList = res.data
  187. } else if (level === 3) {
  188. this.streetList = res.data
  189. }
  190. })
  191. },
  192. handleArea(value, type) {
  193. this.screenForm[type] = this[type + 'List'].find(k => k.id === value).name
  194. },
  195. // 切换省
  196. changeProvince(value) {
  197. this.screenForm.cityId = ''
  198. this.screenForm.areaId = ''
  199. this.screenForm.streetId = ''
  200. this.cityList = []
  201. this.areaList = []
  202. this.streetList = []
  203. this.getRegion(1, value)
  204. this.handleArea(value, 'province')
  205. },
  206. // 切换市
  207. changeCity(value) {
  208. this.screenForm.areaId = ''
  209. this.screenForm.streetId = ''
  210. this.areaList = []
  211. this.streetList = []
  212. this.getRegion(2, value)
  213. this.handleArea(value, 'city')
  214. },
  215. // 切换区
  216. changeArea(value) {
  217. this.areaValue = value
  218. this.screenForm.streetId = ''
  219. this.streetList = []
  220. this.getRegion(3, value)
  221. this.handleArea(value, 'area')
  222. },
  223. // 切换街道
  224. changeStreet(value) {
  225. this.getRegion(3, this.areaValue)
  226. this.handleArea(value, 'street')
  227. },
  228. // 初始化省市区街道
  229. initRegion(level, item, id = 0) {
  230. const { province, city, area, street } = item
  231. let nextId = null
  232. getRegion({ pid: id }).then(res => {
  233. if (level === 0) {
  234. this.provinceList = res.data
  235. nextId = this.screenForm.provinceId = this.provinceList[findElem(this.provinceList, 'name', province)].id
  236. } else if (level === 1) {
  237. this.cityList = res.data
  238. nextId = this.screenForm.cityId = this.cityList[findElem(this.cityList, 'name', city)].id
  239. } else if (level === 2) {
  240. this.areaList = res.data
  241. nextId = this.screenForm.areaId = this.areaList[findElem(this.areaList, 'name', area)].id
  242. } else if (level === 3) {
  243. this.streetList = res.data
  244. nextId = this.screenForm.streetId = this.streetList[findElem(this.streetList, 'name', street)].id
  245. }
  246. if (level < 3) {
  247. level = level + 1
  248. this.initRegion(level, item, nextId)
  249. }
  250. })
  251. },
  252. handleStokType(e) {
  253. this.$emit('setStokType', e)
  254. }
  255. }
  256. }
  257. </script>
  258. <style scoped lang="scss">
  259. .sales {
  260. margin: 20px;
  261. padding: 20px;
  262. box-shadow: 0 0 8px 0 rgb(0 0 0 / 20%);
  263. }
  264. ::v-deep .el-select{
  265. width: 100%;
  266. }
  267. .custom {
  268. .item {
  269. ::v-deep .el-form-item__label:first-child {
  270. text-align: left;
  271. }
  272. }
  273. ::v-deep .el-form-item__label {
  274. text-align: center;
  275. }
  276. }
  277. </style>