edit.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <template>
  2. <div>
  3. <el-button :type="btnType" size="mini" @click="onShow">编 辑</el-button>
  4. <el-dialog title="创建经销商" append-to-body :visible.sync="dialogVisible">
  5. <el-row :gutter="20">
  6. <el-form :model="form" ref="form" :rules="rules" size="small" label-position="left" label-width="100px" class="demo-form-inline">
  7. <el-col :span="24">
  8. <p class="normal-title normal-margin">企业信息</p>
  9. </el-col>
  10. <el-col :span="12">
  11. <el-form-item label="企业名称" prop="enterprisename">
  12. <el-popover
  13. placement="bottom"
  14. width="100%"
  15. v-model="visible">
  16. <div>
  17. <ul class="enterprisePanel">
  18. <li v-for="item in ENlist" :key="item.sys_enterpriseid" @click="chooseEnterprise(item)">
  19. <p>{{item.enterprisename}}</p>
  20. <small>{{item.province}}-{{item.city}}-{{item.county}}</small>
  21. </li>
  22. </ul>
  23. </div>
  24. <el-input readonly slot="reference" v-model="form.enterprisename" @focus="queryEnterpriseArchives" @input.native="onChange" placeholder="输入企业名称" clearable></el-input>
  25. </el-popover>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item label="省市县">
  30. <p class="enterpriseText">{{enterprise.province?enterprise.province:'--'}}</p>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="12">
  34. <el-form-item label="联系人">
  35. <p class="enterpriseText">{{enterprise.contact?enterprise.contact:'--'}}</p>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="12">
  39. <el-form-item label="联系方式">
  40. <p class="enterpriseText">{{enterprise.phonenumber?enterprise.phonenumber:'--'}}</p>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="24">
  44. <el-form-item label="详细地址">
  45. <p class="enterpriseText">{{enterprise.address?enterprise.address:'--'}}</p>
  46. </el-form-item>
  47. </el-col>
  48. <el-col :span="24">
  49. <p class="normal-title normal-margin">经销商信息</p>
  50. </el-col>
  51. <el-col :span="12">
  52. <el-form-item label="经销商编号" prop="agentnum">
  53. <el-input v-model="form.agentnum" placeholder="输入经销商编号"></el-input>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="12">
  57. <el-form-item label="签约日期">
  58. <el-date-picker
  59. style="width:100%"
  60. v-model="form.signdate"
  61. type="date"
  62. value-format="yyyy-MM-dd"
  63. placeholder="选择日期">
  64. </el-date-picker>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="12">
  68. <el-form-item label="经销商类型" prop="type">
  69. <el-select style="width:100%" v-model="form.type" placeholder="请选择">
  70. <el-option
  71. v-for="item in agent_type"
  72. :key="item.value"
  73. :label="item.value"
  74. :value="item.value">
  75. </el-option>
  76. </el-select>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12">
  80. <el-form-item label="上级经销商">
  81. <selectAgent ref="agent" @selectAgent="selectAgent"></selectAgent>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="12">
  85. <el-form-item label="经销商等级">
  86. <el-select style="width:100%" v-model="form.grade" placeholder="请选择">
  87. <el-option
  88. v-for="item in agent_level"
  89. :key="item.value"
  90. :label="item.remarks"
  91. :value="item.value">
  92. </el-option>
  93. </el-select>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="12">
  97. <el-form-item label="营销区域" prop="sa_saleareaids">
  98. <el-cascader
  99. style="width:100%"
  100. v-model="form.sa_saleareaids"
  101. :options="arealist"
  102. :props="{
  103. value:'sa_saleareaid',
  104. label:'areaname',
  105. children:'subarea'
  106. }"
  107. :show-all-levels="false"
  108. @change="onCascaderChange">
  109. </el-cascader>
  110. </el-form-item>
  111. </el-col>
  112. </el-form>
  113. </el-row>
  114. <div class="dialog-footer">
  115. <el-button size="small" @click="dialogVisible = false" class="normal-btn-width">取 消</el-button>
  116. <el-button size="small" type="warning" @click="onSubmit" class="normal-btn-width btn-warning">确 定</el-button>
  117. </div>
  118. </el-dialog>
  119. </div>
  120. </template>
  121. <script>
  122. import selectAgent from '@/components/selectAgent/index.vue'
  123. export default {
  124. props:['data','btnType'],
  125. data () {
  126. return {
  127. rules: {
  128. enterprisename: [
  129. { required: true, message: '请输入企业名称', trigger: ['blur', 'change'] },
  130. ],
  131. agentnum: [
  132. { required: true, message: '请输入经销商编号', trigger: 'blur' },
  133. ],
  134. sa_saleareaids: [
  135. { required: true, message: '请输入经销商编号', trigger: 'change' },
  136. ],
  137. type: [
  138. { required: true, message: '请选择经销商类型', trigger: 'change' },
  139. ],
  140. },
  141. dialogVisible:false,
  142. visible:false,
  143. form:{
  144. "enterprisename":'',
  145. "sa_agentsid": 0,
  146. "parentid":"",
  147. "agentnum":"",
  148. "signdate":"",
  149. "grade":'1',
  150. "sa_saleareaid":null,
  151. "sys_enterpriseid":null,
  152. "sa_saleareaids":[]
  153. },
  154. ENlist:[],
  155. agent_level:[],
  156. arealist:[],
  157. agent_type:[],
  158. enterprise:{}
  159. }
  160. },
  161. components:{
  162. selectAgent
  163. },
  164. methods:{
  165. onShow () {
  166. this.dialogVisible = true
  167. this.query_sysoptions()
  168. this.query_arealist()
  169. this.queryMain()
  170. },
  171. async queryMain() {
  172. const res = await this.$api.requested({
  173. "classname": "webmanage.sale.agents.agents",
  174. "method": "query_agentMain",
  175. "content": {
  176. "sa_agentsid": this.data.sa_agentsid
  177. }
  178. })
  179. this.$refs.agent.value.enterprisename = res.data.parent_enterprisename
  180. res.data.sa_saleareaids?res.data.sa_saleareaids = JSON.parse(res.data.sa_saleareaids):''
  181. this.form = Object.assign({},this.form,res.data)
  182. this.enterprise = Object.assign({},this.form,res.data)
  183. },
  184. async queryEnterpriseArchives () {
  185. const res = await this.$api.requested({
  186. "id": 20220920083901,
  187. "content": {
  188. "pageNumber": 1,
  189. "pageSize": 20,
  190. "where": {
  191. "condition": this.form.enterprisename
  192. }
  193. }
  194. })
  195. this.ENlist = res.data
  196. },
  197. async query_arealist (callback) {
  198. const res = await this.$api.requested({
  199. "classname": "webmanage.sale.salearea.salearea",
  200. "method": "query_area",
  201. "content": {
  202. }
  203. })
  204. this.arealist = this.createList(res.data)
  205. },
  206. createList (array) {
  207. var that = this
  208. let arr = []
  209. function convertToElementTree(node) {
  210. if (node.subarea && node.subarea.length > 0) {
  211. for (var index = 0; index < node.subarea.length; index++) {
  212. convertToElementTree(node.subarea[index])
  213. }
  214. } else {
  215. node.subarea = null
  216. }
  217. return node;
  218. }
  219. array.forEach((element) => {
  220. arr.push(convertToElementTree(element))
  221. });
  222. return arr
  223. },
  224. async query_sysoptions () {
  225. const res = await this.$store.dispatch('optiontypeselect','agentgrade')
  226. this.agent_level = res.data
  227. const res1 = await this.$store.dispatch('optiontypeselect','agenttypemx')
  228. this.agent_type = res1.data
  229. },
  230. onSubmit () {
  231. this.$refs['form'].validate(async (valid) => {
  232. if (!valid) return false
  233. const res = await this.$api.requested({
  234. "classname": "webmanage.sale.agents.agents",
  235. "method": "insertormodify_agent",
  236. "content": this.form
  237. })
  238. this.tool.showMessage(res,()=>{
  239. this.$emit('onSuccess')
  240. // this.$refs['form'].resetFields();
  241. this.dialogVisible = false
  242. })
  243. })
  244. },
  245. onChange () {
  246. this.visible = true
  247. this.debounce(this.queryEnterpriseArchives,1000)()
  248. },
  249. onCascaderChange (value) {
  250. this.form.sa_saleareaid = value.at(-1)
  251. },
  252. debounce (fn, wait) {
  253. let timer = 0
  254. return function () {
  255. if (timer !== null) clearTimeout(timer)
  256. timer = setTimeout(fn, wait)
  257. }
  258. },
  259. chooseEnterprise (item) {
  260. this.visible = false
  261. this.form.enterprisename = item.enterprisename
  262. this.form.enterpriseid = item.enterpriseid
  263. item.province = `${item.province}-${item.city}-${item.county}`
  264. this.enterprise = item
  265. },
  266. selectAgent (data) {
  267. this.form.parentid = data.sa_agentsid
  268. },
  269. },
  270. }
  271. </script>
  272. <style>
  273. </style>
  274. <style scoped>
  275. .enterprisePanel {
  276. max-height: 400px;
  277. overflow-y: scroll;
  278. }
  279. .enterprisePanel li{
  280. padding: 10px;
  281. cursor: pointer;
  282. line-height: 25px;
  283. }
  284. .enterprisePanel li small{
  285. color: #999;
  286. }
  287. .enterprisePanel li:hover{
  288. background: #f1f2f3;
  289. }
  290. .enterpriseText{
  291. height: 34px;
  292. line-height: 34px;
  293. font-weight: 500;
  294. }
  295. </style>