DistrEdit.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <template>
  2. <el-dialog append-to-body :title="title" :visible.sync="dialogFormVisible" @close="close">
  3. <el-form ref="form" :model="form" :rules="dist">
  4. <el-row :gutter="20">
  5. <el-col :span="12">
  6. <el-form-item label="名称" prop="distName">
  7. <el-input v-model="form.distName" placeholder="请输入名称" />
  8. </el-form-item>
  9. </el-col>
  10. <el-col :span="12">
  11. <el-form-item label="助记名" prop="abbrName">
  12. <el-input v-model="form.abbrName" placeholder="请输入助记名" />
  13. </el-form-item>
  14. </el-col>
  15. </el-row>
  16. <el-row :gutter="20">
  17. <el-col :span="12">
  18. <el-form-item label="选择省份" prop="provinceDesc">
  19. <el-select
  20. ref="optionRef"
  21. v-model="form.provinceDesc"
  22. placeholder="请选择"
  23. style="width: 100%"
  24. @change="selectDistrict">
  25. <el-option
  26. v-for="item in district"
  27. :key="item.regionCode"
  28. :label="item.regionDesc"
  29. :value="item.regionCode" />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="省份" prop="provinceId" style="display: none">
  33. <el-input v-model.trim="form.provinceId" />
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="12">
  37. <select-user
  38. ref="selectUser"
  39. :query-params="{ roles: ['SalesEngineer', 'ProductLineManager', 'SalesDirector'] }"
  40. @save="selectUser" />
  41. <el-form-item label="销售人员" prop="belongSale">
  42. <el-input v-model="form.belongSale" readonly suffix-icon="el-icon-search" @focus="choose" />
  43. </el-form-item>
  44. </el-col>
  45. </el-row>
  46. <el-row :gutter="20">
  47. <el-col :span="12">
  48. <el-form-item label="注册资金/万元" prop="capital">
  49. <el-input v-model.number="form.capital" />
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="12">
  53. <el-form-item label="注册地" prop="registerDistrict">
  54. <el-input v-model.trim="form.registerDistrict" />
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. <el-row :gutter="20">
  59. <el-col :span="12">
  60. <el-form-item label="业务范围" prop="businessScope">
  61. <el-input v-model.trim="form.businessScope" />
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12">
  65. <el-form-item label="现有销售人数" prop="saleNum">
  66. <el-input v-model.number="form.saleNum" />
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. <el-row :gutter="20">
  71. <el-col :span="12">
  72. <el-form-item label="授权客户类型" prop="customerType">
  73. <el-select v-model="form.customerType" multiple placeholder="授权客户类型" style="width: 100%">
  74. <el-option v-for="item in customerOptions" :key="item.value" :label="item.value" :value="item.key" />
  75. </el-select>
  76. </el-form-item>
  77. </el-col>
  78. </el-row>
  79. <el-form-item label="已有代理品牌和产品" prop="existedProduct">
  80. <el-input
  81. v-model="form.existedProduct"
  82. maxlength="500"
  83. placeholder="请输入备注"
  84. resize="none"
  85. :rows="5"
  86. show-word-limit
  87. type="textarea" />
  88. </el-form-item>
  89. <el-form-item label="历史合作的终端客户名称" prop="historyCustomer">
  90. <el-input
  91. v-model="form.historyCustomer"
  92. maxlength="500"
  93. placeholder="请输入备注"
  94. resize="none"
  95. :rows="5"
  96. show-word-limit
  97. type="textarea" />
  98. </el-form-item>
  99. </el-form>
  100. <span slot="footer">
  101. <el-button @click="close">取 消</el-button>
  102. <el-button type="primary" @click="save">确 定</el-button>
  103. </span>
  104. </el-dialog>
  105. </template>
  106. <script>
  107. import distrApi from '@/api/base/distr'
  108. import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  109. import regionAuthApi from '@/api/base/regionAuth'
  110. import SelectUser from '@/components/select/SelectUser'
  111. export default {
  112. name: 'UserEdit',
  113. components: {
  114. SelectUser,
  115. },
  116. data() {
  117. return {
  118. form: {
  119. distName: '',
  120. abbrName: '',
  121. provinceDesc: '',
  122. provinceId: 0,
  123. belongSale: '',
  124. belongSaleId: 0,
  125. capital: 0,
  126. registerDistrict: '',
  127. businessScope: '',
  128. saleNum: 0,
  129. customerType: '',
  130. existedProduct: '',
  131. historyCustomer: '',
  132. },
  133. dist: {
  134. distName: [{ required: true, trigger: 'blur', message: '请输入经销商名称' }],
  135. provinceDesc: [{ required: true, trigger: 'blur', message: '请输入省份' }],
  136. provinceId: [{ required: true, trigger: 'blur', message: '请输入省份' }],
  137. belongSale: [{ required: true, trigger: 'blur', message: '请输入销售人员' }],
  138. capital: [{ required: true, trigger: 'blur', message: '请输入注册资金' }],
  139. registerDistrict: [{ required: true, trigger: 'blur', message: '请输入注册地' }],
  140. businessScope: [{ required: true, trigger: 'blur', message: '请输入业务范围' }],
  141. saleNum: [{ required: true, trigger: 'blur', message: '请输入现有销售人数' }],
  142. customerType: [{ required: true, trigger: 'blur', message: '请输入授权客户类型' }],
  143. existedProduct: [{ required: true, trigger: 'blur', message: '请输入已有代理品牌和产品' }],
  144. historyCustomer: [{ required: true, trigger: 'blur', message: '请输入历史合作的终端客户名称' }],
  145. },
  146. //省份
  147. district: [],
  148. title: '',
  149. dialogFormVisible: false,
  150. customerOptions: [],
  151. }
  152. },
  153. created() {
  154. //省份
  155. // this.getProvinceInfo()
  156. this.getUserSalesProvince()
  157. },
  158. mounted() {
  159. this.getOptions()
  160. },
  161. methods: {
  162. getOptions() {
  163. Promise.all([this.getDicts('cust_idy')])
  164. .then(([data]) => {
  165. this.customerOptions = data.data.values || []
  166. })
  167. .catch((err) => console.log(err))
  168. },
  169. showEdit(row) {
  170. if (!row) {
  171. this.title = '新建'
  172. } else {
  173. this.title = '编辑'
  174. this.form = Object.assign({}, row)
  175. this.form.customerType = row.customerType ? row.customerType.split(',') : null
  176. // this.pid = this.form.provinceId
  177. // this.form.provinceId = this.form.provinceDesc
  178. }
  179. this.dialogFormVisible = true
  180. },
  181. close() {
  182. this.$refs['form'].resetFields()
  183. this.form = {
  184. distName: '',
  185. abbrName: '',
  186. provinceDesc: '',
  187. provinceId: 0,
  188. belongSale: '',
  189. belongSaleId: 0,
  190. capital: 0,
  191. registerDistrict: '',
  192. businessScope: '',
  193. saleNum: 0,
  194. customerType: '',
  195. existedProduct: '',
  196. historyCustomer: '',
  197. }
  198. this.dialogFormVisible = false
  199. },
  200. choose() {
  201. // this.$refs.transfer.innerVisible = true
  202. this.$refs.selectUser.open()
  203. },
  204. async getProvinceInfo() {
  205. const { data: data } = await distrApi.getProvinceInfo({})
  206. this.district = data.list
  207. },
  208. async getUserSalesProvince() {
  209. const { data: data } = await regionAuthApi.getUserSalesProvince({})
  210. if (data && data.list) {
  211. this.district = data.list.children
  212. }
  213. },
  214. selectDistrict(code) {
  215. let obj = {}
  216. obj = this.district.find((item) => {
  217. return item.regionCode === code //筛选出匹配数据
  218. })
  219. console.log('省份名称', obj)
  220. this.provinceDesc = obj.regionDesc
  221. this.form.provinceId = obj.regionCode
  222. this.form.provinceDesc = obj.regionDesc
  223. },
  224. save() {
  225. this.$refs['form'].validate(async (valid) => {
  226. if (valid) {
  227. console.log(this.form)
  228. let params = { ...this.form }
  229. params.distType = '10'
  230. params.provinceId = parseInt(params.provinceId)
  231. params.distType = '10'
  232. params.customerType = params.customerType.join(',')
  233. if (this.form.id) {
  234. const { msg } = await distrApi.doEdit(params)
  235. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  236. } else {
  237. const { msg } = await distrApi.doAdd(params)
  238. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  239. }
  240. this.$emit('fetch-data')
  241. this.close()
  242. }
  243. })
  244. },
  245. selectUser(userList) {
  246. this.userList = userList
  247. if (userList && userList.length > 0) {
  248. this.form.belongSaleId = userList[0].id
  249. }
  250. this.form.belongSale = userList.map((item) => item.nickName).join()
  251. },
  252. async handleSubmit() {
  253. this.form.belongSaleId = this.userList[0].id
  254. this.form.belongSale = this.userList[0].nickName
  255. },
  256. },
  257. }
  258. </script>