platformsetting.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. <template>
  2. <basic-container>
  3. <el-tabs type="border-card">
  4. <el-tab-pane :label="item.label" v-for="(item,key) in option" :key="key">
  5. <div v-if="item.key==='YEEPAY_PRODUCT_INFO'">
  6. <el-select v-model="item.value" placeholder="请选择商户" size="small" style="width:100%" @change="selectChange(item)">
  7. <el-option
  8. v-for="opt in item.opt"
  9. :key="opt.productCode"
  10. :label="opt.productName"
  11. :value="opt.productCode">
  12. <span style="float: left">{{ opt.productName }}</span>
  13. <span style="float: right; color: #8492a6; font-size: 13px">{{ opt.productCode }}</span>
  14. </el-option>
  15. </el-select>
  16. </div>
  17. <el-divider/>
  18. <avue-form :option="item.option" v-model="item.data"
  19. @submit="(data,done)=>{submit(data,done,item)}"></avue-form>
  20. </el-tab-pane>
  21. </el-tabs>
  22. </basic-container>
  23. </template>
  24. <script>
  25. import {getList, update} from "@/api/ldt_platform/platformsetting";
  26. export default {
  27. data() {
  28. return {
  29. option: [
  30. {
  31. label: "城市分红",
  32. id: "",
  33. key: "agent_city_setting",
  34. option: {
  35. labelWidth: 160,
  36. emptyBtn: false,
  37. column: [
  38. {
  39. label: '独家代理商分红率',
  40. prop: 'cityRate',
  41. type: 'number',
  42. rules: [
  43. {
  44. required: true,
  45. message: '请输入分红率',
  46. trigger: 'blur'
  47. }
  48. ]
  49. },
  50. {
  51. label: '渠道合作伙伴分红率',
  52. prop: 'promoteRate',
  53. type: 'number',
  54. rules: [
  55. {
  56. required: true,
  57. message: '请输入分红率',
  58. trigger: 'blur'
  59. }
  60. ]
  61. },
  62. {
  63. label: '保证金',
  64. prop: 'cost',
  65. type: 'number',
  66. rules: [
  67. {
  68. required: true,
  69. message: '请输入分红率',
  70. trigger: 'blur'
  71. }
  72. ]
  73. }]
  74. },
  75. data: {}
  76. }, {
  77. label: "推广商店",
  78. id: "",
  79. key: "agent_channel_setting",
  80. option: {
  81. emptyBtn: false,
  82. labelWidth: 160,
  83. column: [
  84. {
  85. label: '独家代理商分红率',
  86. prop: 'cityRate',
  87. type: 'number',
  88. rules: [
  89. {
  90. required: true,
  91. message: '请输入分红率',
  92. trigger: 'blur'
  93. }
  94. ]
  95. },
  96. {
  97. label: '渠道合作伙伴分红率',
  98. prop: 'promoteRate',
  99. type: 'number',
  100. rules: [
  101. {
  102. required: true,
  103. message: '请输入分红率',
  104. trigger: 'blur'
  105. }
  106. ]
  107. },
  108. {
  109. label: '保证金',
  110. prop: 'cost',
  111. type: 'number',
  112. rules: [
  113. {
  114. required: true,
  115. message: '请输入分红率',
  116. trigger: 'blur'
  117. }
  118. ]
  119. }]
  120. },
  121. data: {}
  122. }, {
  123. label: "平台费用",
  124. id: "",
  125. key: "platform_arg",
  126. option: {
  127. emptyBtn: false,
  128. labelWidth: 100,
  129. column: [
  130. {
  131. label: '服务费率',
  132. prop: 'serviceFee',
  133. type: 'number',
  134. rules: [
  135. {
  136. required: true,
  137. message: '请输入分红率',
  138. trigger: 'blur'
  139. }
  140. ]
  141. },
  142. {
  143. label: '积分费率',
  144. prop: 'pointFee',
  145. type: 'number',
  146. rules: [
  147. {
  148. required: true,
  149. message: '请输入分红率',
  150. trigger: 'blur'
  151. }
  152. ]
  153. }]
  154. },
  155. data: {}
  156. }, {
  157. label: "商户易宝",
  158. id: "",
  159. key: "YEEPAY_PRODUCT_INFO",
  160. option: {
  161. labelWidth: 160,
  162. emptyBtn: false,
  163. column: [
  164. {
  165. label: '产品码',
  166. prop: 'productCode',
  167. disabled: true,
  168. rules: [
  169. {
  170. required: true,
  171. message: '请输入产品码',
  172. trigger: 'blur'
  173. }
  174. ]
  175. },
  176. {
  177. label: '计费策略',
  178. prop: 'rateType',
  179. type: 'select',
  180. change:(value)=>{
  181. const percentRate = this.option[3].option.column.find(ele=>{
  182. return ele.prop==='percentRate';
  183. });
  184. const fixedRate = this.option[3].option.column.find(ele=>{
  185. return ele.prop==='fixedRate';
  186. });
  187. switch (value.value){
  188. case "SINGLE_PERCENT":
  189. percentRate.disabled = false;
  190. percentRate.rules[0].required = true;
  191. fixedRate.disabled = true;
  192. fixedRate.rules[0].required = false;
  193. break;
  194. case "SINGLE_FIXED":
  195. percentRate.disabled = true;
  196. percentRate.rules[0].required = false;
  197. fixedRate.disabled = false;
  198. fixedRate.rules[0].required = true;
  199. break;
  200. case "FIXED_MIX_PERCENT":
  201. case "PERCENT_MIX_CAP":
  202. percentRate.disabled = false;
  203. percentRate.rules[0].required = true;
  204. fixedRate.disabled = false;
  205. fixedRate.rules[0].required = true;
  206. break;
  207. default:
  208. break;
  209. }
  210. },
  211. dicData: [
  212. {
  213. label:'单笔百分比',
  214. value:'SINGLE_PERCENT',
  215. },
  216. {
  217. label:'单笔固定值',
  218. value:'SINGLE_FIXED',
  219. },
  220. {
  221. label:'单笔固定值+单笔百分比',
  222. value:'FIXED_MIX_PERCENT',
  223. },
  224. {
  225. label:'单笔百分比+封顶值',
  226. value:'PERCENT_MIX_CAP',
  227. }
  228. ],
  229. rules: [
  230. {
  231. required: true,
  232. message: '请输入积分策略',
  233. trigger: 'blur'
  234. }
  235. ]
  236. },
  237. {
  238. label: '单笔百分比',
  239. prop: 'percentRate',
  240. disabled: true,
  241. rules: [
  242. {
  243. required: false,
  244. message: '请输入单笔百分比',
  245. trigger: 'blur'
  246. }
  247. ]
  248. },
  249. {
  250. label: '单笔固定值',
  251. prop: 'fixedRate',
  252. disabled: true,
  253. rules: [
  254. {
  255. required: false,
  256. message: '请输入单笔固定值',
  257. trigger: 'blur'
  258. }
  259. ]
  260. },
  261. {
  262. label: '手续费承担方',
  263. prop: 'undertaker',
  264. type: 'select',
  265. dicData: [
  266. {
  267. label: '入驻商户',
  268. value: 'SETTLED_MERCHANT'
  269. },
  270. {
  271. label: '用户',
  272. value: 'USER'
  273. },
  274. {
  275. label: '标准商户',
  276. value: 'ORDINARY_MERCHANT'
  277. },
  278. {
  279. label: '平台商',
  280. value: 'PLATFORM_MERCHANT'
  281. },
  282. {
  283. label: '服务商',
  284. value: 'SAAS_SERVICE_PROVIDER'
  285. }
  286. ],
  287. rules: [
  288. {
  289. required: false,
  290. message: '请输入手续费承担方',
  291. trigger: 'blur'
  292. }
  293. ]
  294. },
  295. {
  296. label: '手续费收取方式',
  297. prop: 'paymentMethod',
  298. type: 'select',
  299. dicData: [
  300. {
  301. label: '实收',
  302. value: 'REAL_TIME'
  303. },
  304. {
  305. label: '预付实扣',
  306. value: 'PREPAID_REAL'
  307. },
  308. {
  309. label: '后收',
  310. value: 'UN_REAL_TIME'
  311. }
  312. ],
  313. rules: [
  314. {
  315. required: false,
  316. message: '请输入手续费收取方式',
  317. trigger: 'blur'
  318. }
  319. ]
  320. }
  321. ]
  322. },
  323. data: {},
  324. opt:[],
  325. value:"",
  326. }
  327. ]
  328. };
  329. },
  330. created() {
  331. this.initData();
  332. },
  333. methods: {
  334. initData() {
  335. getList(1, 10).then(res => {
  336. res.data.data.records.forEach(ele => {
  337. //查找对应的选项卡
  338. const tab = this.option.find(col => {
  339. return col.key === ele.settingKey;
  340. });
  341. if (tab) {
  342. tab.id = ele.id;
  343. if(tab.key!=="YEEPAY_PRODUCT_INFO"){
  344. tab.data = JSON.parse(ele.settingValue);
  345. }else{ //易宝
  346. tab.opt = JSON.parse(ele.settingValue);
  347. tab.value = tab.opt[0].productCode;
  348. this.selectChange(tab);
  349. }
  350. }
  351. });
  352. });
  353. },
  354. /**
  355. * 选择下拉框值
  356. * @param value
  357. */
  358. selectChange(tab){
  359. if(tab){
  360. tab.data = tab.opt.find(col=>{
  361. return col.productCode === tab.value;
  362. });
  363. }
  364. },
  365. submit(data, done, item) {
  366. //判断是否是易宝提交
  367. if(item.key === "YEEPAY_PRODUCT_INFO"){
  368. const content = item.opt.find(col=>{
  369. return col.productCode===data.productCode;
  370. });
  371. //拷贝对象值
  372. Object.assign(content,data);
  373. data = item.opt;
  374. }
  375. update({
  376. "id": item.id,
  377. "settingKey": item.key,
  378. "settingValue": JSON.stringify(data)
  379. }).then(() => {
  380. this.$message({
  381. type: "success",
  382. message: "修改成功!"
  383. });
  384. done();
  385. });
  386. }
  387. }
  388. };
  389. </script>
  390. <style>
  391. </style>