edit.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. <template>
  2. <div>
  3. <el-button type="primary" size="mini" @click="onShow">编 辑</el-button>
  4. <el-drawer title="编辑合作伙伴" direction="rtl" size="900px" append-to-body :visible.sync="dialogVisible" :show-close="false">
  5. <div class="drawer__panel">
  6. <el-row :gutter="20">
  7. <el-form :model="form" ref="form" :rules="rules" size="small" label-position="right" label-width="120px" class="demo-form-inline">
  8. <el-col :span="24">
  9. <p class="normal-title normal-margin">企业信息</p>
  10. </el-col>
  11. <el-col :span="12">
  12. <el-form-item label="企业名称:" prop="enterprisename">
  13. <el-popover
  14. placement="bottom"
  15. width="100%"
  16. v-model="visible">
  17. <div>
  18. <ul class="enterprisePanel">
  19. <li v-for="item in ENlist" :key="item.sys_enterpriseid" @click="chooseEnterprise(item)">
  20. <p>{{item.enterprisename}}</p>
  21. <small>{{item.province}}-{{item.city}}-{{item.county}}</small>
  22. </li>
  23. </ul>
  24. </div>
  25. <el-input readonly slot="reference" v-model="form.enterprisename" @focus="queryEnterpriseArchives" @input.native="onChange" placeholder="输入企业名称" clearable></el-input>
  26. </el-popover>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="12">
  30. <el-form-item label="省市县:">
  31. <!-- <p class="enterpriseText">{{enterprise.province?enterprise.province:''}}</p>-->
  32. <el-input v-model="enterprise.province" disabled></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12">
  36. <el-form-item label="联系人:">
  37. <el-input v-model="enterprise.contact" disabled></el-input>
  38. <!-- <p class="enterpriseText">{{enterprise.contact?enterprise.contact:''}}</p>-->
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="12">
  42. <el-form-item label="联系方式:">
  43. <el-input v-model="enterprise.phonenumber" disabled></el-input>
  44. <!-- <p class="enterpriseText">{{enterprise.phonenumber?enterprise.phonenumber:''}}</p>-->
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="24">
  48. <el-form-item label="详细地址:">
  49. <el-input v-model="enterprise.address" disabled></el-input>
  50. <!-- <p class="enterpriseText">{{enterprise.address?enterprise.address:''}}</p>-->
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="24">
  54. <p class="normal-title normal-margin">合作伙伴信息</p>
  55. </el-col>
  56. <el-col :span="12">
  57. <el-form-item label="合作状态:" prop="cooperationstatus">
  58. <el-select v-model="form.cooperationstatus" placeholder="请选择" style="width: 100%" @change="cooperationstatusChange" :disabled="data.cooperationstatus === '正式'">
  59. <el-option
  60. v-for="item in cooperationstatus"
  61. :key="item.label"
  62. :label="item.label"
  63. :value="item.label">
  64. </el-option>
  65. </el-select>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="12">
  69. <el-form-item label="合作伙伴编号" prop="agentnum" v-if="form.cooperationstatus === '正式'" :rules="{required:true,message:'请输入合作伙伴编号',trigger:'blur'}">
  70. <el-input :disabled="true" v-model="form.agentnum" placeholder="输入合作伙伴编号"></el-input>
  71. </el-form-item>
  72. <el-form-item v-else label="合作伙伴编号" prop="agentnum">
  73. <el-input v-model="form.agentnum" placeholder="输入合作伙伴编号"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="12">
  77. <el-form-item v-if="form.cooperationstatus === '正式'" label="erp编号:" prop="erpagentnum" :rules="{required:true,message:'请输入erp编号',trigger:'blur'}">
  78. <el-input v-model="form.erpagentnum" placeholder="输入erp编号"></el-input>
  79. </el-form-item>
  80. <el-form-item v-else label="erp编号:" prop="erpagentnum" :rules="{required:false,message:'请输入erp编号',trigger:'blur'}">
  81. <el-input v-model="form.erpagentnum" placeholder="输入erp编号"></el-input>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="12">
  85. <el-form-item label="合作伙伴类型:" prop="type">
  86. <el-select
  87. ref="sle"
  88. style="width:100%;"
  89. v-model="form.type"
  90. multiple
  91. placeholder="请选择合作伙伴类别"
  92. size="mini"
  93. >
  94. <el-option
  95. v-for="item in agent_type"
  96. :key="item.value"
  97. :label="item.value"
  98. :value="item.value"
  99. >
  100. <!-- <span style="float: left">{{ item.tag }}</span>-->
  101. <!-- <span style="float: right; color: #8492a6; font-size: 12px">{{ item.helptips?item.helptips:'暂无描述' }}</span>-->
  102. </el-option>
  103. </el-select>
  104. </el-form-item>
  105. </el-col>
  106. <el-col :span="12">
  107. <el-form-item label="签约日期">
  108. <el-date-picker
  109. style="width:100%"
  110. v-model="form.signdate"
  111. type="date"
  112. value-format="yyyy-MM-dd"
  113. placeholder="选择日期">
  114. </el-date-picker>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="12">
  118. <el-form-item label="企业等级">
  119. <el-select size="small" style="width:100%" v-model="form.grade" placeholder="请选择">
  120. <el-option
  121. v-for="item in agent_level"
  122. :key="item.value"
  123. :label="item.remarks"
  124. :value="item.value">
  125. <span style="float: left">{{ item.value }}</span>
  126. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  127. </el-option>
  128. </el-select>
  129. </el-form-item>
  130. </el-col>
  131. <el-col :span="12">
  132. <el-form-item label="可退货天数" prop="limitreturnday">
  133. <el-input v-model.number="form.limitreturnday" placeholder="请输入订单可退货天数"></el-input>
  134. </el-form-item>
  135. </el-col>
  136. <el-col :span="12">
  137. <el-form-item label="上级合作伙伴:">
  138. <selectAgent ref="agent" @selectAgent="selectAgent" :title="title"></selectAgent>
  139. </el-form-item>
  140. </el-col>
  141. <el-col :span="12" style="height:51px">
  142. <el-form-item label="开票节点" prop="invoicingpoint">
  143. <el-radio-group v-model="form.invoicingpoint">
  144. <el-radio :label="1">订单审核</el-radio>
  145. <el-radio :label="2">发货</el-radio>
  146. </el-radio-group>
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="12">
  150. <el-form-item label="是否授权所有营销类别:" prop="saleclassauth" label-width="160px">
  151. <el-checkbox v-model="form.saleclassauth" :true-label="0" :false-label="1"></el-checkbox>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="12">
  155. <el-form-item label="是否免运费">
  156. <el-radio-group v-model="radio" @change="radioChange">
  157. <el-radio :label="-1">不免费运费</el-radio>
  158. <el-radio :label="0">免运费</el-radio>
  159. <el-radio :label="1">其他</el-radio>
  160. </el-radio-group>
  161. </el-form-item>
  162. </el-col>
  163. <el-col :span="12" v-if="radio === 1">
  164. <el-form-item label="免运费额度" prop="freefreightamount">
  165. <el-input v-model.number="form.freefreightamount" placeholder="请输入免运费额度"></el-input>
  166. </el-form-item>
  167. </el-col>
  168. </el-form>
  169. </el-row>
  170. </div>
  171. <div class="fixed__btn__panel">
  172. <el-button size="small" @click="dialogVisible = false" class="normal-btn-width">取 消</el-button>
  173. <el-button size="small" type="warning" @click="onSubmit" class="normal-btn-width btn-warning">确 定</el-button>
  174. </div>
  175. </el-drawer>
  176. </div>
  177. </template>
  178. <script>
  179. import selectAgent from '@/components/selectAgent/index.vue'
  180. export default {
  181. props:['data','btnType'],
  182. data () {
  183. return {
  184. rules: {
  185. enterprisename: [
  186. { required: true, message: '请输入企业名称', trigger: ['blur', 'change'] },
  187. ],
  188. // agentnum: [
  189. // { required: true, message: '请输入经销商编号', trigger: 'blur' },
  190. // ],
  191. sa_saleareaids: [
  192. { required: true, message: '请输入合作伙伴编号', trigger: 'change' },
  193. ],
  194. type: [
  195. { required: true, message: '请选择合作伙伴类型', trigger: 'change' },
  196. ],
  197. cooperationstatus: [
  198. { required: true, message: '请选择合作状态', trigger: 'change' },
  199. ],
  200. // erpagentnum: [
  201. // { required: true, message: '请输入erp经销商编号', trigger: 'change' },
  202. // ],
  203. },
  204. fill:true,
  205. cooperationstatus:[
  206. {
  207. label:'正式'
  208. },
  209. {
  210. label:'意向'
  211. },
  212. ],
  213. dialogVisible:false,
  214. visible:false,
  215. form:{
  216. "enterprisename": "",
  217. "sa_agentsid": '',
  218. "parentid": "",
  219. "agentnum": "",
  220. "signdate": "",
  221. "grade": "",
  222. "sys_enterpriseid": '',
  223. "sa_saleareaids": [
  224. ],
  225. "type": [],
  226. 'cooperationstatus':'正式',
  227. "erpagentnum": "",
  228. "isservice": 0, //是否服务商,0或1
  229. "limitreturnday": "", //订单可退货天数
  230. "freefreightamount": "", //免运费额度
  231. "latitude": "", //纬度
  232. "longitude": "", //经度
  233. "invoicingpoint": 1, //开票节点(1:订单审核:2:发货)
  234. "saleclassauth": 1, //是否需要经营授权,默认1
  235. "grade":''
  236. },
  237. ENlist:[],
  238. agent_level:[],
  239. arealist:[],
  240. agent_type:[],
  241. enterprise:{},
  242. timer:0,
  243. radio:-1,
  244. title:'选择上级合作伙伴',
  245. }
  246. },
  247. components:{
  248. selectAgent
  249. },
  250. methods:{
  251. onShow () {
  252. this.dialogVisible = true
  253. this.cooperationstatus === '正式' ? this.fill = true : this.fill = false
  254. this.query_sysoptions()
  255. this.query_arealist()
  256. this.queryMain()
  257. },
  258. async queryMain() {
  259. const res = await this.$api.requested({
  260. "classname": "webmanage.sale.agents.agents",
  261. "method": "query_agentMain",
  262. "content": {
  263. "sa_agentsid": this.data.sa_agentsid
  264. }
  265. })
  266. this.$refs.agent.value.enterprisename = res.data.parent_enterprisename
  267. res.data.sa_saleareaids?res.data.sa_saleareaids = JSON.parse(res.data.sa_saleareaids):''
  268. this.form = Object.assign({},this.form,res.data)
  269. this.enterprise = Object.assign({},this.form,res.data)
  270. if (this.form.province) {
  271. this.form.province = [this.form.province,this.form.city,this.form.county]
  272. }
  273. if (!this.form.grade) this.form.grade = ''
  274. switch (this.form.freefreightamount) {
  275. case -1:
  276. this.radio = -1
  277. break;
  278. case 0:
  279. this.radio = 0
  280. break;
  281. default:
  282. this.radio = 1
  283. break;
  284. }
  285. },
  286. async queryEnterpriseArchives () {
  287. const res = await this.$api.requested({
  288. "id": 20220920083901,
  289. "content": {
  290. "pageNumber": 1,
  291. "pageSize": 20,
  292. "where": {
  293. "condition": this.form.enterprisename
  294. }
  295. }
  296. })
  297. this.ENlist = res.data
  298. },
  299. async query_arealist (callback) {
  300. const res = await this.$api.requested({
  301. "classname": "webmanage.sale.salearea.salearea",
  302. "method": "query_area",
  303. "content": {
  304. }
  305. })
  306. this.arealist = this.createList(res.data)
  307. },
  308. createList (array) {
  309. var that = this
  310. let arr = []
  311. function convertToElementTree(node) {
  312. if (node.subarea && node.subarea.length > 0) {
  313. for (var index = 0; index < node.subarea.length; index++) {
  314. convertToElementTree(node.subarea[index])
  315. }
  316. } else {
  317. node.subarea = null
  318. }
  319. return node;
  320. }
  321. array.forEach((element) => {
  322. arr.push(convertToElementTree(element))
  323. });
  324. return arr
  325. },
  326. async query_sysoptions () {
  327. const res = await this.$store.dispatch('optiontypeselect','agentgrade')
  328. this.agent_level = res.data
  329. const res1 = await this.$store.dispatch('optiontypeselect','agenttypemx')
  330. this.agent_type = res1.data
  331. },
  332. radioChange (val) {
  333. switch (val) {
  334. case -1:
  335. this.form.freefreightamount = -1
  336. break;
  337. case 0:
  338. this.form.freefreightamount = 0
  339. break;
  340. default:
  341. this.form.freefreightamount = ''
  342. break;
  343. }
  344. },
  345. onSubmit () {
  346. this.$refs['form'].validate(async (valid) => {
  347. if (!valid) return false
  348. const res = await this.$api.requested({
  349. "classname": "webmanage.sale.agents.agents",
  350. "method": "insertormodify_agent",
  351. "content": this.form
  352. })
  353. this.tool.showMessage(res,()=>{
  354. this.$emit('onSuccess')
  355. // this.$refs['form'].resetFields();
  356. this.dialogVisible = false
  357. })
  358. })
  359. },
  360. onChange () {
  361. this.visible = true
  362. this.debounce(this.queryEnterpriseArchives,1000)()
  363. },
  364. onCascaderChange (value) {
  365. this.form.sa_saleareaid = value.at(-1)
  366. },
  367. debounce (fn, wait) {
  368. return function () {
  369. if (this.timer !== null) clearTimeout(this.timer)
  370. this.timer = setTimeout(fn, wait)
  371. }
  372. },
  373. chooseEnterprise (item) {
  374. this.visible = false
  375. this.form.enterprisename = item.enterprisename
  376. this.form.enterpriseid = item.enterpriseid
  377. item.province = `${item.province}-${item.city}-${item.county}`
  378. this.enterprise = item
  379. },
  380. selectAgent (data) {
  381. this.form.parentid = data.sa_agentsid
  382. },
  383. cooperationstatusChange(){
  384. if (this.form.cooperationstatus === '正式'){
  385. this.fill = true
  386. }else {
  387. this.fill = false
  388. }
  389. }
  390. },
  391. }
  392. </script>
  393. <style>
  394. </style>
  395. <style scoped>
  396. .enterprisePanel {
  397. max-height: 400px;
  398. overflow-y: scroll;
  399. }
  400. .enterprisePanel li{
  401. padding: 10px;
  402. cursor: pointer;
  403. line-height: 25px;
  404. }
  405. .enterprisePanel li small{
  406. color: #999;
  407. }
  408. .enterprisePanel li:hover{
  409. background: #f1f2f3;
  410. }
  411. .enterpriseText{
  412. height: 34px;
  413. line-height: 34px;
  414. }
  415. .gz-form-row{
  416. display: flex;
  417. flex-wrap: wrap;
  418. }
  419. </style>