EditModal.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. <template>
  2. <el-dialog :visible.sync="visible" v-bind="modalOptions">
  3. <el-form ref="formData" :model="formData" :rules="formRules" size="mini" label-suffix=":" label-width="150px">
  4. <el-form-item label="关联平台组合活动" prop="composeId">
  5. <el-select v-model="formData.composeId" size="mini" placeholder="请选择关联平台组合活动" filterable>
  6. <el-option
  7. v-for="(item, index) in activityList" :key="item.composeId"
  8. :label="`${item.composeName}(${item.composeId})`" :value="item.composeId"
  9. />
  10. </el-select>
  11. </el-form-item>
  12. <el-form-item label="活动配置类型" prop="configType">
  13. <el-select
  14. v-model="formData.configType" clearable size="mini" placeholder="请选择活动配置类型"
  15. @change="formData.roleType = formData.ruleId = formData.joinRule = formData.joinMoney = formData.isCardHolder = formData.serverId = []"
  16. >
  17. <el-option label="升级活动" :value="1" />
  18. <el-option label="分佣活动" :value="2" />
  19. <el-option label="社区活动" :value="3" />
  20. <el-option label="赠券活动" :value="4" />
  21. <el-option label="赠金活动" :value="5" />
  22. <el-option label="商圈订单" :value="6" />
  23. <el-option label="爆品家具" :value="7" />
  24. <el-option label="社区订单" :value="8" />
  25. <el-option label="用户代金券转增" :value="9" />
  26. <el-option label="商家代金券转赠" :value="10" />
  27. <el-option label="同城联盟卡" :value="11" />
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="是否参与" prop="joinRole">
  31. <el-select
  32. v-model="formData.joinRole" clearable size="mini" placeholder="请选择是否参与"
  33. @change="formData.roleType = formData.ruleId = formData.joinRule = formData.joinMoney = ''"
  34. >
  35. <el-option label="是" :value="1" />
  36. <el-option label="否" :value="2" />
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item
  40. v-if="[ 1 ].includes(formData.configType) && (formData.joinRole === 1)" label="升级类型"
  41. prop="roleType"
  42. >
  43. <el-select v-model="formData.roleType" clearable size="mini" placeholder="请选择升级类型">
  44. <el-option label="团长" :value="1" />
  45. <el-option label="合伙人" :value="2" />
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item
  49. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1)"
  50. label="关联佣金配置" prop="ruleId"
  51. >
  52. <el-select v-model="formData.ruleId" clearable size="mini" placeholder="请选择关联佣金配置" filterable>
  53. <el-option
  54. v-for="(item, index) in ruleList" :key="item.ruleId"
  55. :label="`${item.activityName || '--'}(${item.ruleId})`" :value="item.ruleId"
  56. />
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item
  60. v-if="[1, 2, 3, 4, 5, 6, 7].includes(formData.configType) && (formData.joinRole === 1)" label="规则"
  61. prop="joinRule"
  62. >
  63. <el-select v-model="formData.joinRule" clearable size="mini" placeholder="请选择规则">
  64. <el-option label="固定金额活动" :value="1" />
  65. <el-option label="商品价格比例" :value="2" />
  66. </el-select>
  67. </el-form-item>
  68. <el-form-item
  69. v-if="[1, 2, 3, 4, 5, 6, 7].includes(formData.configType) && (formData.joinRole === 1) && (formData.joinRule === 1)"
  70. label="固定分配佣金总额" prop="commissionPrice"
  71. >
  72. <el-input v-model="formData.commissionPrice" placeholder="请输入固定分配佣金总额" style="width: 250px;">
  73. <template #append>
  74. <div>元</div>
  75. </template>
  76. </el-input>
  77. </el-form-item>
  78. <el-form-item
  79. v-if="[1, 2, 3, 4, 5, 6, 7].includes(formData.configType) && (formData.joinRole === 1)" label="参与值"
  80. prop="joinMoney"
  81. >
  82. <el-input v-model="formData.joinMoney" placeholder="请输入商家参与活动金额或价格比例" style="width: 250px;">
  83. <template #append>
  84. <div v-if="formData.joinRule === 1">元</div>
  85. <div v-else-if="formData.joinRule === 2">%</div>
  86. </template>
  87. </el-input>
  88. </el-form-item>
  89. <el-form-item
  90. v-if="[ 3 ].includes(formData.configType) && (formData.joinRole === 1)" label="社区服务"
  91. prop="serverId"
  92. >
  93. <el-select
  94. v-model="formData.serverId" clearable size="mini"
  95. placeholder="请选择社区服务" filterable multiple
  96. @change="(e) => (formData.cardBusinessFields = JSON.stringify(communityList.filter(i => formData.serverId.includes(i.id))))"
  97. >
  98. <el-option
  99. v-for="(item, index) in communityList" :key="item.id"
  100. :label="`${item.serverInfoName || '--'}(${item.id})`" :value="item.id"
  101. />
  102. </el-select>{{ formData.serverId }}
  103. </el-form-item>
  104. <el-form-item
  105. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1)"
  106. label="是否发送卡包" prop="isCardHolder"
  107. >
  108. <el-radio-group v-model="formData.isCardHolder">
  109. <el-radio :label="true">是</el-radio>
  110. <el-radio :label="false">否</el-radio>
  111. </el-radio-group>
  112. </el-form-item>
  113. <el-form-item
  114. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  115. label="卡券类型" prop="cardType"
  116. >
  117. <el-select v-model="formData.cardType" clearable size="mini" placeholder="请选择卡券类型">
  118. <el-option label="社区" :value="1" />
  119. <el-option label="商圈" :value="2" />
  120. <el-option label="商城" :value="3" />
  121. </el-select>
  122. </el-form-item>
  123. <el-form-item
  124. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  125. label="卡券类型规则" prop="cardRule"
  126. >
  127. <el-radio-group v-model="formData.cardRule">
  128. <el-radio :label="1">满减券</el-radio>
  129. <el-radio :label="2">折扣券</el-radio>
  130. </el-radio-group>
  131. </el-form-item>
  132. <el-form-item
  133. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  134. label="卡包价格规则" prop="cardMoney"
  135. >
  136. <el-input v-model="formData.cardMoney" placeholder="请输入卡包价格规则" style="width: 250px;">
  137. <template #prepend>
  138. <div v-if="formData.cardRule === 1">减</div>
  139. <div v-else-if="formData.cardRule === 2">打</div>
  140. </template>
  141. <template #append>
  142. <div v-if="formData.cardRule === 1">元</div>
  143. <div v-else-if="formData.cardRule === 2">折</div>
  144. </template>
  145. </el-input>
  146. </el-form-item>
  147. <el-form-item
  148. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  149. label="卡券发放数量" prop="cardNum"
  150. >
  151. <el-input v-model="formData.cardNum" placeholder="请输入卡券发放数量" style="width: 200px;">
  152. <template #append>
  153. <div>天</div>
  154. </template>
  155. </el-input>
  156. </el-form-item>
  157. <el-form-item
  158. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  159. label="卡券有效期" prop="cardEffectiveTime"
  160. >
  161. <el-input v-model="formData.cardEffectiveTime" placeholder="请输入卡券有效期" style="width: 200px;">
  162. <template #append>
  163. <div>天</div>
  164. </template>
  165. </el-input>
  166. </el-form-item>
  167. <el-form-item
  168. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder"
  169. label="卡券使用范围" prop="cardRange"
  170. >
  171. <el-select v-model="formData.cardRange" clearable size="mini" placeholder="请选择卡券使用范围">
  172. <el-option label="指定" :value="1" />
  173. <el-option label="全部" :value="2" />
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item
  177. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1) && formData.isCardHolder && (formData.cardRange === 1)"
  178. label="卡券指定区域" prop="cardRange"
  179. >
  180. <el-cascader
  181. v-model="regionArrDialog" :props="regionProps" size="large" placeholder="请选择区域"
  182. @change="formData.cardJson = [ ...new Set(regionArrDialog.map(i => i[i.length - 1])) ].join(',')"
  183. ></el-cascader>
  184. <div v-if="String(formData.cardJson)">已选ID:{{ formData.cardJson }}</div>
  185. </el-form-item>
  186. <!-- && formData.isCardHolder -->
  187. <el-form-item
  188. v-if="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(formData.configType) && (formData.joinRole === 1)"
  189. label="业务json字段" prop="cardBusinessFields"
  190. >
  191. <el-input
  192. v-model="formData.cardBusinessFields" maxlength="255" type="textarea" placeholder="请输入封装第三方业务的JSON字符串"
  193. style="width: 400px;"
  194. />
  195. </el-form-item>
  196. </el-form>
  197. <template #footer>
  198. <span class="dialog-footer">
  199. <el-button size="mini" @click="handleClose">取 消</el-button>
  200. <el-button type="primary" size="mini" @click="handleSubmit">确 定</el-button>
  201. </span>
  202. </template>
  203. </el-dialog>
  204. </template>
  205. <script>
  206. import { savePlatformComposeConfig, updatePlatformComposeConfig, getPlatformComposeConfigById, getPlatformComposePage, getCommunityServerInfoList } from '@/api/active/combinationActivities'
  207. import { getAllPlatformBeeRule } from '@/api/commissionAllocation/gradeCommission'
  208. import { getProvinceList, getChildAreaList } from '@/api/address'
  209. export default {
  210. name: 'EditModal',
  211. components: {
  212. },
  213. data() {
  214. return {
  215. modalOptions: {
  216. closeOnClickModal: false,
  217. width: '820px',
  218. title: ''
  219. },
  220. visible: false,
  221. formData: {
  222. configId: '',
  223. composeId: '',
  224. configType: '',
  225. joinRole: '',
  226. joinRule: '',
  227. roleType: '',
  228. joinMoney: '',
  229. commissionPrice: '',
  230. ruleId: '',
  231. isCardHolder: '',
  232. cardType: '',
  233. cardRule: '',
  234. cardMoney: '',
  235. cardNum: '',
  236. cardEffectiveTime: '',
  237. cardRange: '',
  238. cardJson: '',
  239. cardBusinessFields: '',
  240. serverId: [] // 非后端参数
  241. },
  242. formRules: {
  243. composeId: [
  244. { required: true, message: '请选择平台组合活动' }
  245. ],
  246. configType: [
  247. { required: true, message: '请选择活动配置类型' }
  248. ],
  249. joinMoney: [
  250. { required: false, message: '请输入参与值' },
  251. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  252. ],
  253. commissionPrice: [
  254. { required: false, message: '请输入固定分配佣金总额' },
  255. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  256. ],
  257. cardRule: [
  258. { required: false, message: '请输入卡包价格规则' },
  259. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  260. ],
  261. cardNum: [
  262. { required: false, message: '请输入卡券发放数量' },
  263. { pattern: /^(0|[1-9][0-9]*)$/, message: '请输入正整数' }
  264. ],
  265. cardEffectiveTime: [
  266. { required: false, message: '请输入卡券有效期' },
  267. { pattern: /^(0|[1-9][0-9]*)$/, message: '请输入正整数' }
  268. ],
  269. isCardHolder: [ { required: true, message: '请选择是否发送卡包' } ]
  270. },
  271. activityList: [],
  272. ruleList: [],
  273. communityList: [],
  274. regionArrDialog: [],
  275. regionProps: {
  276. checkStrictly: true,
  277. multiple: true,
  278. lazy: true,
  279. label: 'name',
  280. value: 'id',
  281. lazyLoad(node, resolve) {
  282. const { level, value } = node
  283. if (level === 0) {
  284. getProvinceList().then((res) => {
  285. resolve(res.data)
  286. })
  287. } else if (level != 0) {
  288. getChildAreaList(value).then((res) => {
  289. resolve(res.data.map((item) => {
  290. item.leaf = level === 3
  291. return item
  292. }))
  293. })
  294. }
  295. }
  296. }
  297. }
  298. },
  299. methods: {
  300. handleClose() {
  301. this.visible = false
  302. },
  303. async initList() {
  304. const res1 = await getPlatformComposePage({ page: 1, pageSize: 9999 })
  305. this.activityList = res1.data.list
  306. const res2 = await getAllPlatformBeeRule({ page: 1, pageSize: 9999 })
  307. this.ruleList = res2.data.list
  308. const res3 = await getCommunityServerInfoList({ pageNo: 1, pageSize: 9999 })
  309. this.communityList = res3.data.records
  310. },
  311. handleOpen(params = {}) {
  312. this.modalOptions.title = params.configId ? '编辑组合活动配置' : '添加组合活动配置'
  313. this.formData = Object.assign(this.$options.data().formData, params, {
  314. joinMoney: (params.joinRule === 2) && (typeof params.joinMoney === 'number') ? params.joinMoney * 100 : params.joinMoney
  315. })
  316. if (this.formData.cardJson) this.regionArrDialog = this.formData.cardJson.split(',').map((i) => [ i ])
  317. this.visible = true
  318. this.initList()
  319. if (params.configId) {
  320. this.getInfo(params.configId)
  321. } else {
  322. this.$refs.formData && this.$refs.formData.resetFields()
  323. }
  324. },
  325. async getInfo(id) {
  326. const loading = this.$loading({ text: '加载中' })
  327. try {
  328. const res = await getPlatformComposeConfigById({ id })
  329. this.formData = Object.assign(this.$options.data().formData, res.data, {
  330. configId: res.data.configId || '',
  331. composeId: res.data.composeId || '',
  332. configType: res.data.configType || '',
  333. joinRole: res.data.joinRole || '',
  334. joinRule: res.data.joinRule || '',
  335. roleType: res.data.roleType || '',
  336. joinMoney: (res.data.joinRule === 2) && (typeof res.data.joinMoney === 'number') ? res.data.joinMoney * 100 : res.data.joinMoney,
  337. commissionPrice: res.data.commissionPrice || '',
  338. ruleId: res.data.ruleId || '',
  339. isCardHolder: res.data.isCardHolder,
  340. cardType: res.data.cardType || '',
  341. cardRule: res.data.cardRule || '',
  342. cardMoney: res.data.cardMoney || '',
  343. cardNum: res.data.cardNum || '',
  344. cardEffectiveTime: res.data.cardEffectiveTime || '',
  345. cardRange: res.data.cardRange || '',
  346. cardJson: res.data.cardJson || '',
  347. cardBusinessFields: res.data.cardBusinessFields || ''
  348. })
  349. if (this.formData.cardJson) this.regionArrDialog = this.formData.cardJson.split(',').map((i) => [ i ])
  350. this.$nextTick(() => {
  351. this.$refs.formData && this.$refs.formData.validate()
  352. })
  353. } finally {
  354. loading.close()
  355. }
  356. },
  357. handleSubmit() {
  358. this.$refs.formData.validate(async (valid) => {
  359. if (valid) {
  360. const loading = this.$loading({ text: '加载中' })
  361. try {
  362. const { joinRule, joinMoney, ...otps } = this.formData
  363. const params = {
  364. joinMoney: joinRule === 2 ? joinMoney / 100 : joinMoney,
  365. joinRule,
  366. ...otps
  367. }
  368. this.formData.configId ? await updatePlatformComposeConfig(params) : await savePlatformComposeConfig(params)
  369. loading.close()
  370. this.$message({ message: `${this.formData.configId ? '编辑' : '添加'}成功!`, type: 'success' })
  371. this.$emit('success')
  372. this.visible = false
  373. } catch (e) {
  374. loading.close()
  375. } finally {
  376. loading.close()
  377. }
  378. } else {
  379. this.$message({ message: '请输入相关信息', type: 'warning' })
  380. return false
  381. }
  382. })
  383. }
  384. }
  385. }
  386. </script>