Commit 313306819565301df4e6e170b9b53d08a4e081d8
1 parent
94a52a65
开发完成admin 营销规则
Showing
18 changed files
with
1656 additions
and
13 deletions
src/api/market/marketRuleApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +// 获取营销规则列表 | |
| 4 | +export function listMarketRule(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/marketRule.listMarketRule', | |
| 8 | + method: 'get', | |
| 9 | + params | |
| 10 | + }).then(response => { | |
| 11 | + const res = response.data | |
| 12 | + if (res.code == 0) { | |
| 13 | + resolve(res) | |
| 14 | + } else { | |
| 15 | + reject(new Error(res.msg || '获取营销规则列表失败')) | |
| 16 | + } | |
| 17 | + }).catch(error => { | |
| 18 | + reject(error) | |
| 19 | + }) | |
| 20 | + }) | |
| 21 | +} | |
| 22 | + | |
| 23 | +// 添加营销规则 | |
| 24 | +export function saveMarketRule(data) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/marketRule.saveMarketRule', | |
| 28 | + method: 'post', | |
| 29 | + data | |
| 30 | + }).then(response => { | |
| 31 | + const res = response.data | |
| 32 | + if (res.code == 0) { | |
| 33 | + resolve(res) | |
| 34 | + } else { | |
| 35 | + reject(new Error(res.msg || '添加营销规则失败')) | |
| 36 | + } | |
| 37 | + }).catch(error => { | |
| 38 | + reject(error) | |
| 39 | + }) | |
| 40 | + }) | |
| 41 | +} | |
| 42 | + | |
| 43 | +// 更新营销规则 | |
| 44 | +export function updateMarketRule(data) { | |
| 45 | + return new Promise((resolve, reject) => { | |
| 46 | + request({ | |
| 47 | + url: '/marketRule.updateMarketRule', | |
| 48 | + method: 'post', | |
| 49 | + data | |
| 50 | + }).then(response => { | |
| 51 | + const res = response.data | |
| 52 | + if (res.code == 0) { | |
| 53 | + resolve(res) | |
| 54 | + } else { | |
| 55 | + reject(new Error(res.msg || '更新营销规则失败')) | |
| 56 | + } | |
| 57 | + }).catch(error => { | |
| 58 | + reject(error) | |
| 59 | + }) | |
| 60 | + }) | |
| 61 | +} | |
| 62 | + | |
| 63 | +// 删除营销规则 | |
| 64 | +export function deleteMarketRule(data) { | |
| 65 | + return new Promise((resolve, reject) => { | |
| 66 | + request({ | |
| 67 | + url: '/marketRule.deleteMarketRule', | |
| 68 | + method: 'post', | |
| 69 | + data | |
| 70 | + }).then(response => { | |
| 71 | + const res = response.data | |
| 72 | + if (res.code == 0) { | |
| 73 | + resolve(res) | |
| 74 | + } else { | |
| 75 | + reject(new Error(res.msg || '删除营销规则失败')) | |
| 76 | + } | |
| 77 | + }).catch(error => { | |
| 78 | + reject(error) | |
| 79 | + }) | |
| 80 | + }) | |
| 81 | +} | |
| 82 | + | |
| 83 | +// 获取营销方式列表 | |
| 84 | +export function listMarketRuleWay(params) { | |
| 85 | + return new Promise((resolve, reject) => { | |
| 86 | + request({ | |
| 87 | + url: '/marketRule.listMarketRuleWay', | |
| 88 | + method: 'get', | |
| 89 | + params | |
| 90 | + }).then(response => { | |
| 91 | + const res = response.data | |
| 92 | + if (res.code == 0) { | |
| 93 | + resolve(res) | |
| 94 | + } else { | |
| 95 | + reject(new Error(res.msg || '获取营销方式列表失败')) | |
| 96 | + } | |
| 97 | + }).catch(error => { | |
| 98 | + reject(error) | |
| 99 | + }) | |
| 100 | + }) | |
| 101 | +} | |
| 102 | + | |
| 103 | +// 添加营销方式 | |
| 104 | +export function saveMarketRuleWay(data) { | |
| 105 | + return new Promise((resolve, reject) => { | |
| 106 | + request({ | |
| 107 | + url: '/marketRule.saveMarketRuleWay', | |
| 108 | + method: 'post', | |
| 109 | + data | |
| 110 | + }).then(response => { | |
| 111 | + const res = response.data | |
| 112 | + if (res.code == 0) { | |
| 113 | + resolve(res) | |
| 114 | + } else { | |
| 115 | + reject(new Error(res.msg || '添加营销方式失败')) | |
| 116 | + } | |
| 117 | + }).catch(error => { | |
| 118 | + reject(error) | |
| 119 | + }) | |
| 120 | + }) | |
| 121 | +} | |
| 122 | +export function deleteMarketRuleWay(data) { | |
| 123 | + return new Promise((resolve, reject) => { | |
| 124 | + request({ | |
| 125 | + url: '/marketRule.deleteMarketRuleWay', | |
| 126 | + method: 'post', | |
| 127 | + data | |
| 128 | + }).then(response => { | |
| 129 | + const res = response.data | |
| 130 | + if (res.code == 0) { | |
| 131 | + resolve(res) | |
| 132 | + } else { | |
| 133 | + reject(new Error(res.msg || '删除营销方式失败')) | |
| 134 | + } | |
| 135 | + }).catch(error => { | |
| 136 | + reject(error) | |
| 137 | + }) | |
| 138 | + }) | |
| 139 | +} | |
| 140 | + | |
| 141 | +// 获取营销文本列表 | |
| 142 | +export function listMarketText(params) { | |
| 143 | + return new Promise((resolve, reject) => { | |
| 144 | + request({ | |
| 145 | + url: '/marketText.listMarketText', | |
| 146 | + method: 'get', | |
| 147 | + params | |
| 148 | + }).then(response => { | |
| 149 | + const res = response.data | |
| 150 | + if (res.code == 0) { | |
| 151 | + resolve(res) | |
| 152 | + } else { | |
| 153 | + reject(new Error(res.msg || '获取营销文本列表失败')) | |
| 154 | + } | |
| 155 | + }).catch(error => { | |
| 156 | + reject(error) | |
| 157 | + }) | |
| 158 | + }) | |
| 159 | +} | |
| 160 | + | |
| 161 | +// 获取营销图片列表 | |
| 162 | +export function listMarketPic(params) { | |
| 163 | + return new Promise((resolve, reject) => { | |
| 164 | + request({ | |
| 165 | + url: '/marketPic.listMarketPic', | |
| 166 | + method: 'get', | |
| 167 | + params | |
| 168 | + }).then(response => { | |
| 169 | + const res = response.data | |
| 170 | + if (res.code == 0) { | |
| 171 | + resolve(res) | |
| 172 | + } else { | |
| 173 | + reject(new Error(res.msg || '获取营销图片列表失败')) | |
| 174 | + } | |
| 175 | + }).catch(error => { | |
| 176 | + reject(error) | |
| 177 | + }) | |
| 178 | + }) | |
| 179 | +} | |
| 180 | + | |
| 181 | +// 获取营销商品列表 | |
| 182 | +export function listMarketGoods(params) { | |
| 183 | + return new Promise((resolve, reject) => { | |
| 184 | + request({ | |
| 185 | + url: '/marketGoods.listMarketGoods', | |
| 186 | + method: 'get', | |
| 187 | + params | |
| 188 | + }).then(response => { | |
| 189 | + const res = response.data | |
| 190 | + if (res.code == 0) { | |
| 191 | + resolve(res) | |
| 192 | + } else { | |
| 193 | + reject(new Error(res.msg || '获取营销商品列表失败')) | |
| 194 | + } | |
| 195 | + }).catch(error => { | |
| 196 | + reject(error) | |
| 197 | + }) | |
| 198 | + }) | |
| 199 | +} | |
| 200 | + | |
| 201 | +// 获取小区列表 | |
| 202 | +export function listCommunitys(params) { | |
| 203 | + return new Promise((resolve, reject) => { | |
| 204 | + request({ | |
| 205 | + url: '/community.listCommunitys', | |
| 206 | + method: 'get', | |
| 207 | + params | |
| 208 | + }).then(response => { | |
| 209 | + const res = response.data | |
| 210 | + if (res.code == 0) { | |
| 211 | + resolve(res) | |
| 212 | + } else { | |
| 213 | + reject(new Error(res.msg || '获取小区列表失败')) | |
| 214 | + } | |
| 215 | + }).catch(error => { | |
| 216 | + reject(error) | |
| 217 | + }) | |
| 218 | + }) | |
| 219 | +} | |
| 220 | + | |
| 221 | +// 添加营销规则小区 | |
| 222 | +export function saveMarketRuleCommunity(data) { | |
| 223 | + return new Promise((resolve, reject) => { | |
| 224 | + request({ | |
| 225 | + url: '/marketRule.saveMarketRuleCommunity', | |
| 226 | + method: 'post', | |
| 227 | + data | |
| 228 | + }).then(response => { | |
| 229 | + const res = response.data | |
| 230 | + if (res.code == 0) { | |
| 231 | + resolve(res) | |
| 232 | + } else { | |
| 233 | + reject(new Error(res.msg || '添加营销规则小区失败')) | |
| 234 | + } | |
| 235 | + }).catch(error => { | |
| 236 | + reject(error) | |
| 237 | + }) | |
| 238 | + }) | |
| 239 | +} | |
| 240 | + | |
| 241 | +// 获取营销规则小区列表 | |
| 242 | +export function listMarketRuleCommunity(params) { | |
| 243 | + return new Promise((resolve, reject) => { | |
| 244 | + request({ | |
| 245 | + url: '/marketRule.listMarketRuleCommunity', | |
| 246 | + method: 'get', | |
| 247 | + params | |
| 248 | + }).then(response => { | |
| 249 | + const res = response.data | |
| 250 | + if (res.code == 0) { | |
| 251 | + resolve(res) | |
| 252 | + } else { | |
| 253 | + reject(new Error(res.msg || '获取营销规则小区列表失败')) | |
| 254 | + } | |
| 255 | + }).catch(error => { | |
| 256 | + reject(error) | |
| 257 | + }) | |
| 258 | + }) | |
| 259 | +} | |
| 260 | + | |
| 261 | +export function deleteMarketRuleCommunity(data) { | |
| 262 | + return new Promise((resolve, reject) => { | |
| 263 | + request({ | |
| 264 | + url: '/marketRule.deleteMarketRuleCommunity', | |
| 265 | + method: 'post', | |
| 266 | + data | |
| 267 | + }).then(response => { | |
| 268 | + const res = response.data | |
| 269 | + if (res.code == 0) { | |
| 270 | + resolve(res) | |
| 271 | + } else { | |
| 272 | + reject(new Error(res.msg || '删除营销规则小区失败')) | |
| 273 | + } | |
| 274 | + }).catch(error => { | |
| 275 | + reject(error) | |
| 276 | + }) | |
| 277 | + }) | |
| 278 | +} | |
| 279 | + | |
| 280 | +// 添加营销规则对象 | |
| 281 | +export function saveMarketRuleObj(data) { | |
| 282 | + return new Promise((resolve, reject) => { | |
| 283 | + request({ | |
| 284 | + url: '/marketRule.saveMarketRuleObj', | |
| 285 | + method: 'post', | |
| 286 | + data | |
| 287 | + }).then(response => { | |
| 288 | + const res = response.data | |
| 289 | + if (res.code == 0) { | |
| 290 | + resolve(res) | |
| 291 | + } else { | |
| 292 | + reject(new Error(res.msg || '添加营销规则对象失败')) | |
| 293 | + } | |
| 294 | + }).catch(error => { | |
| 295 | + reject(error) | |
| 296 | + }) | |
| 297 | + }) | |
| 298 | +} | |
| 299 | + | |
| 300 | +// 获取营销规则对象列表 | |
| 301 | +export function listMarketRuleObj(params) { | |
| 302 | + return new Promise((resolve, reject) => { | |
| 303 | + request({ | |
| 304 | + url: '/marketRule.listMarketRuleObj', | |
| 305 | + method: 'get', | |
| 306 | + params | |
| 307 | + }).then(response => { | |
| 308 | + const res = response.data | |
| 309 | + if (res.code == 0) { | |
| 310 | + resolve(res) | |
| 311 | + } else { | |
| 312 | + reject(new Error(res.msg || '获取营销规则对象列表失败')) | |
| 313 | + } | |
| 314 | + }).catch(error => { | |
| 315 | + reject(error) | |
| 316 | + }) | |
| 317 | + }) | |
| 318 | +} | |
| 319 | + | |
| 320 | +export function deleteMarketRuleObj(data) { | |
| 321 | + return new Promise((resolve, reject) => { | |
| 322 | + request({ | |
| 323 | + url: '/marketRule.deleteMarketRuleObj', | |
| 324 | + method: 'post', | |
| 325 | + data | |
| 326 | + }).then(response => { | |
| 327 | + const res = response.data | |
| 328 | + if (res.code == 0) { | |
| 329 | + resolve(res) | |
| 330 | + } else { | |
| 331 | + reject(new Error(res.msg || '删除营销规则对象失败')) | |
| 332 | + } | |
| 333 | + }).catch(error => { | |
| 334 | + reject(error) | |
| 335 | + }) | |
| 336 | + }) | |
| 337 | +} | |
| 0 | 338 | \ No newline at end of file | ... | ... |
src/components/market/AddMarketRule.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('marketRule.add')" :visible.sync="visible" width="50%" @close="handleClose"> | |
| 3 | + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> | |
| 4 | + <el-form-item :label="$t('marketRule.name')" prop="name"> | |
| 5 | + <el-input v-model="form.name" :placeholder="$t('marketRule.required')"></el-input> | |
| 6 | + </el-form-item> | |
| 7 | + <el-form-item :label="$t('marketRule.remark')" prop="remark"> | |
| 8 | + <el-input type="textarea" v-model="form.remark" :placeholder="$t('marketRule.required')" rows="4"></el-input> | |
| 9 | + </el-form-item> | |
| 10 | + </el-form> | |
| 11 | + <span slot="footer" class="dialog-footer"> | |
| 12 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 13 | + <el-button type="primary" @click="handleSubmit">{{ $t('marketRule.save') }}</el-button> | |
| 14 | + </span> | |
| 15 | + </el-dialog> | |
| 16 | +</template> | |
| 17 | + | |
| 18 | +<script> | |
| 19 | +import { saveMarketRule } from '@/api/market/marketRuleApi' | |
| 20 | + | |
| 21 | +export default { | |
| 22 | + name: 'AddMarketRule', | |
| 23 | + data() { | |
| 24 | + return { | |
| 25 | + visible: false, | |
| 26 | + form: { | |
| 27 | + name: '', | |
| 28 | + remark: '' | |
| 29 | + }, | |
| 30 | + rules: { | |
| 31 | + name: [ | |
| 32 | + { required: true, message: this.$t('marketRule.required'), trigger: 'blur' }, | |
| 33 | + { max: 64, message: this.$t('marketRule.maxLength64'), trigger: 'blur' } | |
| 34 | + ], | |
| 35 | + remark: [ | |
| 36 | + { required: true, message: this.$t('marketRule.required'), trigger: 'blur' }, | |
| 37 | + { max: 512, message: this.$t('marketRule.maxLength512'), trigger: 'blur' } | |
| 38 | + ] | |
| 39 | + } | |
| 40 | + } | |
| 41 | + }, | |
| 42 | + methods: { | |
| 43 | + open() { | |
| 44 | + this.visible = true | |
| 45 | + }, | |
| 46 | + handleClose() { | |
| 47 | + this.$refs.form.resetFields() | |
| 48 | + }, | |
| 49 | + handleSubmit() { | |
| 50 | + this.$refs.form.validate(async valid => { | |
| 51 | + if (valid) { | |
| 52 | + try { | |
| 53 | + await saveMarketRule(this.form) | |
| 54 | + this.$message.success(this.$t('marketRule.addSuccess')) | |
| 55 | + this.visible = false | |
| 56 | + this.$emit('success') | |
| 57 | + } catch (error) { | |
| 58 | + this.$message.error(error.message) | |
| 59 | + } | |
| 60 | + } | |
| 61 | + }) | |
| 62 | + } | |
| 63 | + } | |
| 64 | +} | |
| 65 | +</script> | |
| 0 | 66 | \ No newline at end of file | ... | ... |
src/components/market/AddMarketRuleCommunity.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('marketRule.associateCommunity')" :visible.sync="visible" width="50%" @close="handleClose"> | |
| 3 | + <el-form ref="form" :model="form" :rules="rules" label-width="150px"> | |
| 4 | + <el-form-item :label="$t('marketRule.communityName')" prop="communityId"> | |
| 5 | + <el-select v-model="form.communityId" :placeholder="$t('marketRule.selectCommunity')" style="width: 100%;" filterable> | |
| 6 | + <el-option v-for="item in communitys" :key="item.communityId" :label="item.name" :value="item.communityId" /> | |
| 7 | + </el-select> | |
| 8 | + </el-form-item> | |
| 9 | + | |
| 10 | + <el-form-item :label="$t('marketRule.remark')" prop="remark"> | |
| 11 | + <el-input type="textarea" v-model="form.remark" :placeholder="$t('marketRule.optional')" rows="4"></el-input> | |
| 12 | + </el-form-item> | |
| 13 | + </el-form> | |
| 14 | + <span slot="footer" class="dialog-footer"> | |
| 15 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 16 | + <el-button type="primary" @click="handleSubmit">{{ $t('marketRule.save') }}</el-button> | |
| 17 | + </span> | |
| 18 | + </el-dialog> | |
| 19 | +</template> | |
| 20 | + | |
| 21 | +<script> | |
| 22 | +import { | |
| 23 | + saveMarketRuleCommunity, | |
| 24 | + listCommunitys | |
| 25 | +} from '@/api/market/marketRuleApi' | |
| 26 | + | |
| 27 | +export default { | |
| 28 | + name: 'AddMarketRuleCommunity', | |
| 29 | + props: { | |
| 30 | + ruleId: { | |
| 31 | + type: String, | |
| 32 | + required: true | |
| 33 | + } | |
| 34 | + }, | |
| 35 | + data() { | |
| 36 | + return { | |
| 37 | + visible: false, | |
| 38 | + form: { | |
| 39 | + ruleId: '', | |
| 40 | + communityId: '', | |
| 41 | + remark: '' | |
| 42 | + }, | |
| 43 | + communitys: [], | |
| 44 | + rules: { | |
| 45 | + communityId: [ | |
| 46 | + { required: true, message: this.$t('marketRule.required'), trigger: 'change' } | |
| 47 | + ], | |
| 48 | + remark: [ | |
| 49 | + { max: 512, message: this.$t('marketRule.maxLength512'), trigger: 'blur' } | |
| 50 | + ] | |
| 51 | + } | |
| 52 | + } | |
| 53 | + }, | |
| 54 | + methods: { | |
| 55 | + open() { | |
| 56 | + this.form.ruleId = this.ruleId | |
| 57 | + this.visible = true | |
| 58 | + this.loadCommunitys() | |
| 59 | + }, | |
| 60 | + handleClose() { | |
| 61 | + this.$refs.form.resetFields() | |
| 62 | + this.form = { | |
| 63 | + ruleId: this.ruleId, | |
| 64 | + communityId: '', | |
| 65 | + remark: '' | |
| 66 | + } | |
| 67 | + }, | |
| 68 | + async loadCommunitys() { | |
| 69 | + try { | |
| 70 | + const { communitys } = await listCommunitys({ page: 1, row: 500 }) | |
| 71 | + this.communitys = communitys | |
| 72 | + } catch (error) { | |
| 73 | + this.$message.error(error.message) | |
| 74 | + } | |
| 75 | + }, | |
| 76 | + handleSubmit() { | |
| 77 | + this.$refs.form.validate(async valid => { | |
| 78 | + if (valid) { | |
| 79 | + try { | |
| 80 | + await saveMarketRuleCommunity(this.form) | |
| 81 | + this.$message.success(this.$t('marketRule.addSuccess')) | |
| 82 | + this.visible = false | |
| 83 | + this.$emit('success') | |
| 84 | + } catch (error) { | |
| 85 | + this.$message.error(error.message) | |
| 86 | + } | |
| 87 | + } | |
| 88 | + }) | |
| 89 | + } | |
| 90 | + } | |
| 91 | +} | |
| 92 | +</script> | |
| 0 | 93 | \ No newline at end of file | ... | ... |
src/components/market/AddMarketRuleObj.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('marketRule.associateObject')" :visible.sync="visible" width="50%" @close="handleClose"> | |
| 3 | + <el-form ref="form" :model="form" :rules="rules" label-width="150px"> | |
| 4 | + <el-form-item :label="$t('marketRule.objectName')" prop="objType"> | |
| 5 | + <el-select v-model="form.objType" :placeholder="$t('marketRule.selectObject')" style="width: 100%;"> | |
| 6 | + <el-option v-for="item in objTypes" :key="item.statusCd" :label="item.name" :value="item.statusCd" /> | |
| 7 | + </el-select> | |
| 8 | + </el-form-item> | |
| 9 | + | |
| 10 | + <el-form-item :label="$t('marketRule.remark')" prop="remark"> | |
| 11 | + <el-input type="textarea" v-model="form.remark" :placeholder="$t('marketRule.optional')" rows="4"></el-input> | |
| 12 | + </el-form-item> | |
| 13 | + </el-form> | |
| 14 | + <span slot="footer" class="dialog-footer"> | |
| 15 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 16 | + <el-button type="primary" @click="handleSubmit">{{ $t('marketRule.save') }}</el-button> | |
| 17 | + </span> | |
| 18 | + </el-dialog> | |
| 19 | +</template> | |
| 20 | + | |
| 21 | +<script> | |
| 22 | +import { saveMarketRuleObj } from '@/api/market/marketRuleApi' | |
| 23 | + | |
| 24 | +export default { | |
| 25 | + name: 'AddMarketRuleObj', | |
| 26 | + props: { | |
| 27 | + ruleId: { | |
| 28 | + type: String, | |
| 29 | + required: true | |
| 30 | + } | |
| 31 | + }, | |
| 32 | + data() { | |
| 33 | + return { | |
| 34 | + visible: false, | |
| 35 | + form: { | |
| 36 | + ruleId: '', | |
| 37 | + objType: '', | |
| 38 | + remark: '' | |
| 39 | + }, | |
| 40 | + objTypes: [ | |
| 41 | + { statusCd: '1001', name: this.$t('marketRule.customer') }, | |
| 42 | + { statusCd: '2002', name: this.$t('marketRule.merchant') }, | |
| 43 | + { statusCd: '3003', name: this.$t('marketRule.staff') } | |
| 44 | + ], | |
| 45 | + rules: { | |
| 46 | + objType: [ | |
| 47 | + { required: true, message: this.$t('marketRule.required'), trigger: 'change' } | |
| 48 | + ], | |
| 49 | + remark: [ | |
| 50 | + { max: 512, message: this.$t('marketRule.maxLength512'), trigger: 'blur' } | |
| 51 | + ] | |
| 52 | + } | |
| 53 | + } | |
| 54 | + }, | |
| 55 | + methods: { | |
| 56 | + open() { | |
| 57 | + this.form.ruleId = this.ruleId | |
| 58 | + this.visible = true | |
| 59 | + }, | |
| 60 | + handleClose() { | |
| 61 | + this.$refs.form.resetFields() | |
| 62 | + this.form = { | |
| 63 | + ruleId: this.ruleId, | |
| 64 | + objType: '', | |
| 65 | + remark: '' | |
| 66 | + } | |
| 67 | + }, | |
| 68 | + handleSubmit() { | |
| 69 | + this.$refs.form.validate(async valid => { | |
| 70 | + if (valid) { | |
| 71 | + try { | |
| 72 | + await saveMarketRuleObj(this.form) | |
| 73 | + this.$message.success(this.$t('marketRule.addSuccess')) | |
| 74 | + this.visible = false | |
| 75 | + this.$emit('success') | |
| 76 | + } catch (error) { | |
| 77 | + this.$message.error(error.message) | |
| 78 | + } | |
| 79 | + } | |
| 80 | + }) | |
| 81 | + } | |
| 82 | + } | |
| 83 | +} | |
| 84 | +</script> | |
| 0 | 85 | \ No newline at end of file | ... | ... |
src/components/market/AddMarketRuleWay.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog | |
| 3 | + :title="$t('marketRule.associateMarketingMethod')" | |
| 4 | + :visible.sync="visible" | |
| 5 | + width="50%" | |
| 6 | + @close="handleClose" | |
| 7 | + > | |
| 8 | + <el-form ref="form" :model="form" :rules="rules" label-width="150px"> | |
| 9 | + <el-form-item :label="$t('marketRule.marketingType')" prop="wayType"> | |
| 10 | + <el-select | |
| 11 | + v-model="form.wayType" | |
| 12 | + :placeholder="$t('marketRule.selectMarketingType')" | |
| 13 | + @change="handleWayTypeChange" | |
| 14 | + > | |
| 15 | + <el-option | |
| 16 | + v-for="item in wayTypes" | |
| 17 | + :key="item.value" | |
| 18 | + :label="item.label" | |
| 19 | + :value="item.value" | |
| 20 | + /> | |
| 21 | + </el-select> | |
| 22 | + </el-form-item> | |
| 23 | + | |
| 24 | + <el-form-item | |
| 25 | + v-if="form.wayType === '1001'" | |
| 26 | + :label="$t('marketRule.marketingMethod')" | |
| 27 | + prop="wayObjId" | |
| 28 | + > | |
| 29 | + <el-select | |
| 30 | + v-model="form.wayObjId" | |
| 31 | + :placeholder="$t('marketRule.selectMarketingText')" | |
| 32 | + > | |
| 33 | + <el-option | |
| 34 | + v-for="item in marketTexts" | |
| 35 | + :key="item.textId" | |
| 36 | + :label="item.name" | |
| 37 | + :value="item.textId" | |
| 38 | + /> | |
| 39 | + </el-select> | |
| 40 | + </el-form-item> | |
| 41 | + | |
| 42 | + <el-form-item | |
| 43 | + v-if="form.wayType === '2002'" | |
| 44 | + :label="$t('marketRule.marketingMethod')" | |
| 45 | + prop="wayObjId" | |
| 46 | + > | |
| 47 | + <el-select | |
| 48 | + v-model="form.wayObjId" | |
| 49 | + :placeholder="$t('marketRule.selectMarketingImage')" | |
| 50 | + > | |
| 51 | + <el-option | |
| 52 | + v-for="item in marketPics" | |
| 53 | + :key="item.picId" | |
| 54 | + :label="item.name" | |
| 55 | + :value="item.picId" | |
| 56 | + /> | |
| 57 | + </el-select> | |
| 58 | + </el-form-item> | |
| 59 | + | |
| 60 | + <el-form-item | |
| 61 | + v-if="form.wayType === '3003'" | |
| 62 | + :label="$t('marketRule.marketingMethod')" | |
| 63 | + prop="wayObjId" | |
| 64 | + > | |
| 65 | + <el-select | |
| 66 | + v-model="form.wayObjId" | |
| 67 | + :placeholder="$t('marketRule.selectMarketingGoods')" | |
| 68 | + > | |
| 69 | + <el-option | |
| 70 | + v-for="item in marketGoodss" | |
| 71 | + :key="item.goodsId" | |
| 72 | + :label="item.name" | |
| 73 | + :value="item.goodsId" | |
| 74 | + /> | |
| 75 | + </el-select> | |
| 76 | + </el-form-item> | |
| 77 | + | |
| 78 | + <el-form-item :label="$t('marketRule.remark')" prop="remark"> | |
| 79 | + <el-input | |
| 80 | + type="textarea" | |
| 81 | + v-model="form.remark" | |
| 82 | + :placeholder="$t('marketRule.optional')" | |
| 83 | + rows="4" | |
| 84 | + ></el-input> | |
| 85 | + </el-form-item> | |
| 86 | + </el-form> | |
| 87 | + <span slot="footer" class="dialog-footer"> | |
| 88 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 89 | + <el-button type="primary" @click="handleSubmit">{{ $t('marketRule.save') }}</el-button> | |
| 90 | + </span> | |
| 91 | + </el-dialog> | |
| 92 | +</template> | |
| 93 | + | |
| 94 | +<script> | |
| 95 | +import { | |
| 96 | + saveMarketRuleWay, | |
| 97 | + listMarketText, | |
| 98 | + listMarketPic, | |
| 99 | + listMarketGoods | |
| 100 | +} from '@/api/market/marketRuleApi' | |
| 101 | + | |
| 102 | +export default { | |
| 103 | + name: 'AddMarketRuleWay', | |
| 104 | + props: { | |
| 105 | + ruleId: { | |
| 106 | + type: String, | |
| 107 | + required: true | |
| 108 | + } | |
| 109 | + }, | |
| 110 | + data() { | |
| 111 | + return { | |
| 112 | + visible: false, | |
| 113 | + form: { | |
| 114 | + ruleId: '', | |
| 115 | + wayType: '', | |
| 116 | + wayObjId: '', | |
| 117 | + remark: '' | |
| 118 | + }, | |
| 119 | + wayTypes: [ | |
| 120 | + { value: '1001', label: this.$t('marketRule.text') }, | |
| 121 | + { value: '2002', label: this.$t('marketRule.image') }, | |
| 122 | + { value: '3003', label: this.$t('marketRule.goods') } | |
| 123 | + ], | |
| 124 | + marketTexts: [], | |
| 125 | + marketPics: [], | |
| 126 | + marketGoodss: [], | |
| 127 | + rules: { | |
| 128 | + wayType: [ | |
| 129 | + { required: true, message: this.$t('marketRule.required'), trigger: 'change' } | |
| 130 | + ], | |
| 131 | + wayObjId: [ | |
| 132 | + { required: true, message: this.$t('marketRule.required'), trigger: 'change' } | |
| 133 | + ], | |
| 134 | + remark: [ | |
| 135 | + { max: 512, message: this.$t('marketRule.maxLength512'), trigger: 'blur' } | |
| 136 | + ] | |
| 137 | + } | |
| 138 | + } | |
| 139 | + }, | |
| 140 | + methods: { | |
| 141 | + open() { | |
| 142 | + this.form.ruleId = this.ruleId | |
| 143 | + this.visible = true | |
| 144 | + this.loadMarketTexts() | |
| 145 | + this.loadMarketPics() | |
| 146 | + this.loadMarketGoodss() | |
| 147 | + }, | |
| 148 | + handleClose() { | |
| 149 | + this.$refs.form.resetFields() | |
| 150 | + this.form = { | |
| 151 | + ruleId: this.ruleId, | |
| 152 | + wayType: '', | |
| 153 | + wayObjId: '', | |
| 154 | + remark: '' | |
| 155 | + } | |
| 156 | + }, | |
| 157 | + handleWayTypeChange() { | |
| 158 | + this.form.wayObjId = '' | |
| 159 | + }, | |
| 160 | + async loadMarketTexts() { | |
| 161 | + try { | |
| 162 | + const { data } = await listMarketText({ page: 1, row: 100 }) | |
| 163 | + this.marketTexts = data | |
| 164 | + } catch (error) { | |
| 165 | + this.$message.error(error.message) | |
| 166 | + } | |
| 167 | + }, | |
| 168 | + async loadMarketPics() { | |
| 169 | + try { | |
| 170 | + const { data } = await listMarketPic({ page: 1, row: 100 }) | |
| 171 | + this.marketPics = data | |
| 172 | + } catch (error) { | |
| 173 | + this.$message.error(error.message) | |
| 174 | + } | |
| 175 | + }, | |
| 176 | + async loadMarketGoodss() { | |
| 177 | + try { | |
| 178 | + const { data } = await listMarketGoods({ page: 1, row: 100 }) | |
| 179 | + this.marketGoodss = data | |
| 180 | + } catch (error) { | |
| 181 | + this.$message.error(error.message) | |
| 182 | + } | |
| 183 | + }, | |
| 184 | + handleSubmit() { | |
| 185 | + this.$refs.form.validate(async valid => { | |
| 186 | + if (valid) { | |
| 187 | + try { | |
| 188 | + await saveMarketRuleWay(this.form) | |
| 189 | + this.$message.success(this.$t('marketRule.addSuccess')) | |
| 190 | + this.visible = false | |
| 191 | + this.$emit('success') | |
| 192 | + } catch (error) { | |
| 193 | + this.$message.error(error.message) | |
| 194 | + } | |
| 195 | + } | |
| 196 | + }) | |
| 197 | + } | |
| 198 | + } | |
| 199 | +} | |
| 200 | +</script> | |
| 0 | 201 | \ No newline at end of file | ... | ... |
src/components/market/DeleteMarketRule.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog | |
| 3 | + :title="$t('marketRule.confirmDelete')" | |
| 4 | + :visible.sync="visible" | |
| 5 | + width="30%" | |
| 6 | + > | |
| 7 | + <p>{{ $t('marketRule.deleteConfirmMessage') }}</p> | |
| 8 | + <span slot="footer" class="dialog-footer"> | |
| 9 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 10 | + <el-button type="danger" @click="handleConfirm">{{ $t('marketRule.confirmDelete') }}</el-button> | |
| 11 | + </span> | |
| 12 | + </el-dialog> | |
| 13 | +</template> | |
| 14 | + | |
| 15 | +<script> | |
| 16 | +import { deleteMarketRule } from '@/api/market/marketRuleApi' | |
| 17 | + | |
| 18 | +export default { | |
| 19 | + name: 'DeleteMarketRule', | |
| 20 | + data() { | |
| 21 | + return { | |
| 22 | + visible: false, | |
| 23 | + ruleId: '' | |
| 24 | + } | |
| 25 | + }, | |
| 26 | + methods: { | |
| 27 | + open(data) { | |
| 28 | + this.ruleId = data.ruleId | |
| 29 | + this.visible = true | |
| 30 | + }, | |
| 31 | + async handleConfirm() { | |
| 32 | + try { | |
| 33 | + await deleteMarketRule({ ruleId: this.ruleId }) | |
| 34 | + this.$message.success(this.$t('marketRule.deleteSuccess')) | |
| 35 | + this.visible = false | |
| 36 | + this.$emit('success') | |
| 37 | + } catch (error) { | |
| 38 | + this.$message.error(error.message) | |
| 39 | + } | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 43 | +</script> | |
| 0 | 44 | \ No newline at end of file | ... | ... |
src/components/market/DeleteMarketRuleCommunity.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('marketRule.confirmDelete')" :visible.sync="visible" width="30%"> | |
| 3 | + <p>{{ $t('marketRule.deleteConfirmMessage') }}</p> | |
| 4 | + <span slot="footer" class="dialog-footer"> | |
| 5 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 6 | + <el-button type="danger" @click="handleConfirm">{{ $t('marketRule.confirmDelete') }}</el-button> | |
| 7 | + </span> | |
| 8 | + </el-dialog> | |
| 9 | +</template> | |
| 10 | + | |
| 11 | +<script> | |
| 12 | +import { deleteMarketRuleCommunity } from '@/api/market/marketRuleApi' | |
| 13 | + | |
| 14 | +export default { | |
| 15 | + name: 'DeleteMarketRuleCommunity', | |
| 16 | + data() { | |
| 17 | + return { | |
| 18 | + visible: false, | |
| 19 | + communityId: '', | |
| 20 | + rcId:'' | |
| 21 | + } | |
| 22 | + }, | |
| 23 | + methods: { | |
| 24 | + open(data) { | |
| 25 | + this.communityId = data.communityId | |
| 26 | + this.rcId = data.rcId | |
| 27 | + this.visible = true | |
| 28 | + }, | |
| 29 | + async handleConfirm() { | |
| 30 | + try { | |
| 31 | + await deleteMarketRuleCommunity({ communityId: this.communityId , rcId: this.rcId}) | |
| 32 | + this.$message.success(this.$t('marketRule.deleteSuccess')) | |
| 33 | + this.visible = false | |
| 34 | + this.$emit('success') | |
| 35 | + } catch (error) { | |
| 36 | + this.$message.error(error.message) | |
| 37 | + } | |
| 38 | + } | |
| 39 | + } | |
| 40 | +} | |
| 41 | +</script> | |
| 0 | 42 | \ No newline at end of file | ... | ... |
src/components/market/DeleteMarketRuleObj.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog | |
| 3 | + :title="$t('marketRule.confirmDelete')" | |
| 4 | + :visible.sync="visible" | |
| 5 | + width="30%" | |
| 6 | + > | |
| 7 | + <p>{{ $t('marketRule.deleteConfirmMessage') }}</p> | |
| 8 | + <span slot="footer" class="dialog-footer"> | |
| 9 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 10 | + <el-button type="danger" @click="handleConfirm">{{ $t('marketRule.confirmDelete') }}</el-button> | |
| 11 | + </span> | |
| 12 | + </el-dialog> | |
| 13 | +</template> | |
| 14 | + | |
| 15 | +<script> | |
| 16 | +import { deleteMarketRuleObj } from '@/api/market/marketRuleApi' | |
| 17 | + | |
| 18 | +export default { | |
| 19 | + name: 'DeleteMarketRuleObj', | |
| 20 | + data() { | |
| 21 | + return { | |
| 22 | + visible: false, | |
| 23 | + objId: '' | |
| 24 | + } | |
| 25 | + }, | |
| 26 | + methods: { | |
| 27 | + open(data) { | |
| 28 | + this.objId = data.objId | |
| 29 | + this.visible = true | |
| 30 | + }, | |
| 31 | + async handleConfirm() { | |
| 32 | + try { | |
| 33 | + await deleteMarketRuleObj({ objId: this.objId }) | |
| 34 | + this.$message.success(this.$t('marketRule.deleteSuccess')) | |
| 35 | + this.visible = false | |
| 36 | + this.$emit('success') | |
| 37 | + } catch (error) { | |
| 38 | + this.$message.error(error.message) | |
| 39 | + } | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 43 | +</script> | |
| 0 | 44 | \ No newline at end of file | ... | ... |
src/components/market/DeleteMarketRuleWay.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('marketRule.confirmDelete')" :visible.sync="visible" width="30%"> | |
| 3 | + <p>{{ $t('marketRule.deleteConfirmMessage') }}</p> | |
| 4 | + <span slot="footer" class="dialog-footer"> | |
| 5 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 6 | + <el-button type="danger" @click="handleConfirm">{{ $t('marketRule.confirmDelete') }}</el-button> | |
| 7 | + </span> | |
| 8 | + </el-dialog> | |
| 9 | +</template> | |
| 10 | + | |
| 11 | +<script> | |
| 12 | +import { deleteMarketRuleWay } from '@/api/market/marketRuleApi' | |
| 13 | + | |
| 14 | +export default { | |
| 15 | + name: 'DeleteMarketRuleWay', | |
| 16 | + data() { | |
| 17 | + return { | |
| 18 | + visible: false, | |
| 19 | + wayId: '' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + methods: { | |
| 23 | + open(data) { | |
| 24 | + this.wayId = data.wayId | |
| 25 | + this.visible = true | |
| 26 | + }, | |
| 27 | + async handleConfirm() { | |
| 28 | + try { | |
| 29 | + await deleteMarketRuleWay({ wayId: this.wayId }) | |
| 30 | + this.$message.success(this.$t('marketRule.deleteSuccess')) | |
| 31 | + this.visible = false | |
| 32 | + this.$emit('success') | |
| 33 | + } catch (error) { | |
| 34 | + this.$message.error(error.message) | |
| 35 | + } | |
| 36 | + } | |
| 37 | + } | |
| 38 | +} | |
| 39 | +</script> | |
| 0 | 40 | \ No newline at end of file | ... | ... |
src/components/market/EditMarketRule.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog | |
| 3 | + :title="$t('marketRule.edit')" | |
| 4 | + :visible.sync="visible" | |
| 5 | + width="50%" | |
| 6 | + @close="handleClose" | |
| 7 | + > | |
| 8 | + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> | |
| 9 | + <el-form-item :label="$t('marketRule.name')" prop="name"> | |
| 10 | + <el-input v-model="form.name" :placeholder="$t('marketRule.required')"></el-input> | |
| 11 | + </el-form-item> | |
| 12 | + <el-form-item :label="$t('marketRule.remark')" prop="remark"> | |
| 13 | + <el-input | |
| 14 | + type="textarea" | |
| 15 | + v-model="form.remark" | |
| 16 | + :placeholder="$t('marketRule.required')" | |
| 17 | + rows="4" | |
| 18 | + ></el-input> | |
| 19 | + </el-form-item> | |
| 20 | + </el-form> | |
| 21 | + <span slot="footer" class="dialog-footer"> | |
| 22 | + <el-button @click="visible = false">{{ $t('marketRule.cancel') }}</el-button> | |
| 23 | + <el-button type="primary" @click="handleSubmit">{{ $t('marketRule.save') }}</el-button> | |
| 24 | + </span> | |
| 25 | + </el-dialog> | |
| 26 | +</template> | |
| 27 | + | |
| 28 | +<script> | |
| 29 | +import { updateMarketRule } from '@/api/market/marketRuleApi' | |
| 30 | + | |
| 31 | +export default { | |
| 32 | + name: 'EditMarketRule', | |
| 33 | + data() { | |
| 34 | + return { | |
| 35 | + visible: false, | |
| 36 | + form: { | |
| 37 | + ruleId: '', | |
| 38 | + name: '', | |
| 39 | + remark: '' | |
| 40 | + }, | |
| 41 | + rules: { | |
| 42 | + name: [ | |
| 43 | + { required: true, message: this.$t('marketRule.required'), trigger: 'blur' }, | |
| 44 | + { max: 64, message: this.$t('marketRule.maxLength64'), trigger: 'blur' } | |
| 45 | + ], | |
| 46 | + remark: [ | |
| 47 | + { required: true, message: this.$t('marketRule.required'), trigger: 'blur' }, | |
| 48 | + { max: 512, message: this.$t('marketRule.maxLength512'), trigger: 'blur' } | |
| 49 | + ], | |
| 50 | + ruleId: [ | |
| 51 | + { required: true, message: this.$t('marketRule.required'), trigger: 'blur' } | |
| 52 | + ] | |
| 53 | + } | |
| 54 | + } | |
| 55 | + }, | |
| 56 | + methods: { | |
| 57 | + open(data) { | |
| 58 | + this.form = { ...data } | |
| 59 | + this.visible = true | |
| 60 | + }, | |
| 61 | + handleClose() { | |
| 62 | + this.$refs.form.resetFields() | |
| 63 | + }, | |
| 64 | + handleSubmit() { | |
| 65 | + this.$refs.form.validate(async valid => { | |
| 66 | + if (valid) { | |
| 67 | + try { | |
| 68 | + await updateMarketRule(this.form) | |
| 69 | + this.$message.success(this.$t('marketRule.editSuccess')) | |
| 70 | + this.visible = false | |
| 71 | + this.$emit('success') | |
| 72 | + } catch (error) { | |
| 73 | + this.$message.error(error.message) | |
| 74 | + } | |
| 75 | + } | |
| 76 | + }) | |
| 77 | + } | |
| 78 | + } | |
| 79 | +} | |
| 80 | +</script> | |
| 0 | 81 | \ No newline at end of file | ... | ... |
src/components/market/MarketRuleCommunity.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="market-rule-community"> | |
| 3 | + <div class="action-bar"> | |
| 4 | + <el-button type="primary" size="small" @click="openAddMarketRuleCommunityModal"> | |
| 5 | + {{ $t('marketRule.associateCommunity') }} | |
| 6 | + </el-button> | |
| 7 | + </div> | |
| 8 | + | |
| 9 | + <el-table :data="marketRuleCommunitys" border style="width: 100%" v-loading="loading"> | |
| 10 | + <el-table-column prop="communityName" :label="$t('marketRule.communityName')" align="center" /> | |
| 11 | + <el-table-column prop="communityId" :label="$t('marketRule.communityId')" align="center" /> | |
| 12 | + <el-table-column prop="remark" :label="$t('marketRule.remark')" align="center" /> | |
| 13 | + <el-table-column :label="$t('marketRule.operation')" align="center" width="150"> | |
| 14 | + <template slot-scope="scope"> | |
| 15 | + <el-button size="mini" type="danger" @click="openDeleteMarketRuleCommunityModal(scope.row)"> | |
| 16 | + {{ $t('marketRule.delete') }} | |
| 17 | + </el-button> | |
| 18 | + </template> | |
| 19 | + </el-table-column> | |
| 20 | + </el-table> | |
| 21 | + | |
| 22 | + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current" | |
| 23 | + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper" | |
| 24 | + :total="page.total" /> | |
| 25 | + | |
| 26 | + <add-market-rule-community ref="addMarketRuleCommunity" :rule-id="ruleId" @success="handleSuccess" /> | |
| 27 | + <delete-market-rule-community ref="deleteMarketRuleCommunity" @success="handleSuccess" /> | |
| 28 | + </div> | |
| 29 | +</template> | |
| 30 | + | |
| 31 | +<script> | |
| 32 | +import { listMarketRuleCommunity } from '@/api/market/marketRuleApi' | |
| 33 | +import AddMarketRuleCommunity from './AddMarketRuleCommunity' | |
| 34 | +import DeleteMarketRuleCommunity from './DeleteMarketRuleCommunity' | |
| 35 | + | |
| 36 | +export default { | |
| 37 | + name: 'MarketRuleCommunity', | |
| 38 | + props: { | |
| 39 | + ruleId: { | |
| 40 | + type: String, | |
| 41 | + required: true | |
| 42 | + } | |
| 43 | + }, | |
| 44 | + components: { | |
| 45 | + AddMarketRuleCommunity, | |
| 46 | + DeleteMarketRuleCommunity | |
| 47 | + }, | |
| 48 | + data() { | |
| 49 | + return { | |
| 50 | + loading: false, | |
| 51 | + marketRuleCommunitys: [], | |
| 52 | + page: { | |
| 53 | + current: 1, | |
| 54 | + size: 10, | |
| 55 | + total: 0 | |
| 56 | + } | |
| 57 | + } | |
| 58 | + }, | |
| 59 | + watch: { | |
| 60 | + ruleId: { | |
| 61 | + immediate: true, | |
| 62 | + handler() { | |
| 63 | + this.listMarketRuleCommunitys() | |
| 64 | + } | |
| 65 | + } | |
| 66 | + }, | |
| 67 | + methods: { | |
| 68 | + async listMarketRuleCommunitys() { | |
| 69 | + if (!this.ruleId) return | |
| 70 | + | |
| 71 | + this.loading = true | |
| 72 | + try { | |
| 73 | + const { data, total } = await listMarketRuleCommunity({ | |
| 74 | + page: this.page.current, | |
| 75 | + row: this.page.size, | |
| 76 | + ruleId: this.ruleId | |
| 77 | + }) | |
| 78 | + this.marketRuleCommunitys = data | |
| 79 | + this.page.total = total | |
| 80 | + } catch (error) { | |
| 81 | + this.$message.error(error.message) | |
| 82 | + } finally { | |
| 83 | + this.loading = false | |
| 84 | + } | |
| 85 | + }, | |
| 86 | + openAddMarketRuleCommunityModal() { | |
| 87 | + this.$refs.addMarketRuleCommunity.open() | |
| 88 | + }, | |
| 89 | + openDeleteMarketRuleCommunityModal(row) { | |
| 90 | + this.$refs.deleteMarketRuleCommunity.open(row) | |
| 91 | + }, | |
| 92 | + handleSuccess() { | |
| 93 | + this.listMarketRuleCommunitys() | |
| 94 | + }, | |
| 95 | + handleSizeChange(size) { | |
| 96 | + this.page.size = size | |
| 97 | + this.listMarketRuleCommunitys() | |
| 98 | + }, | |
| 99 | + handleCurrentChange(current) { | |
| 100 | + this.page.current = current | |
| 101 | + this.listMarketRuleCommunitys() | |
| 102 | + } | |
| 103 | + } | |
| 104 | +} | |
| 105 | +</script> | |
| 106 | + | |
| 107 | +<style scoped> | |
| 108 | +.action-bar { | |
| 109 | + margin-bottom: 15px; | |
| 110 | + text-align: left; | |
| 111 | +} | |
| 112 | +</style> | |
| 0 | 113 | \ No newline at end of file | ... | ... |
src/components/market/MarketRuleDiv.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-card class="box-card"> | |
| 4 | + <div slot="header" class="clearfix"> | |
| 5 | + <el-button-group> | |
| 6 | + <el-button type="primary" size="small" @click="openAddMarketRuleModal">{{ $t('marketRule.add') }}</el-button> | |
| 7 | + <el-button type="primary" size="small" @click="openEditMarketRuleModal">{{ $t('marketRule.edit') }}</el-button> | |
| 8 | + <el-button type="danger" size="small" @click="openDeleteMarketRuleModal">{{ $t('marketRule.delete') | |
| 9 | + }}</el-button> | |
| 10 | + </el-button-group> | |
| 11 | + </div> | |
| 12 | + <el-tree :data="marketRules" :props="defaultProps" node-key="ruleId" highlight-current | |
| 13 | + @node-click="handleNodeClick"></el-tree> | |
| 14 | + </el-card> | |
| 15 | + | |
| 16 | + <add-market-rule ref="addMarketRule" @success="handleSuccess" /> | |
| 17 | + <edit-market-rule ref="editMarketRule" @success="handleSuccess" /> | |
| 18 | + <delete-market-rule ref="deleteMarketRule" @success="handleSuccess" /> | |
| 19 | + </div> | |
| 20 | +</template> | |
| 21 | + | |
| 22 | +<script> | |
| 23 | +import { listMarketRule } from '@/api/market/marketRuleApi' | |
| 24 | +import AddMarketRule from '@/components/market/AddMarketRule' | |
| 25 | +import EditMarketRule from '@/components/market/EditMarketRule' | |
| 26 | +import DeleteMarketRule from '@/components/market/DeleteMarketRule' | |
| 27 | + | |
| 28 | +export default { | |
| 29 | + name: 'MarketRuleDiv', | |
| 30 | + data() { | |
| 31 | + return { | |
| 32 | + marketRules: [], | |
| 33 | + defaultProps: { | |
| 34 | + children: 'children', | |
| 35 | + label: 'name' | |
| 36 | + }, | |
| 37 | + curMarketRule: {} | |
| 38 | + } | |
| 39 | + }, | |
| 40 | + components: { | |
| 41 | + | |
| 42 | + AddMarketRule, | |
| 43 | + EditMarketRule, | |
| 44 | + DeleteMarketRule | |
| 45 | + }, | |
| 46 | + created() { | |
| 47 | + this.listMarketRules() | |
| 48 | + }, | |
| 49 | + methods: { | |
| 50 | + async listMarketRules() { | |
| 51 | + try { | |
| 52 | + const { data } = await listMarketRule({ | |
| 53 | + page: 1, | |
| 54 | + row: 100 | |
| 55 | + }) | |
| 56 | + this.marketRules = data | |
| 57 | + if (this.marketRules.length > 0) { | |
| 58 | + this.curMarketRule = this.marketRules[0] | |
| 59 | + this.$emit('switchMarketRule', this.curMarketRule) | |
| 60 | + } | |
| 61 | + } catch (error) { | |
| 62 | + this.$message.error(this.$t('marketRule.fetchError')) | |
| 63 | + } | |
| 64 | + }, | |
| 65 | + handleNodeClick(data) { | |
| 66 | + this.curMarketRule = data | |
| 67 | + this.$emit('switchMarketRule', data) | |
| 68 | + }, | |
| 69 | + openAddMarketRuleModal() { | |
| 70 | + this.$refs.addMarketRule && this.$refs.addMarketRule.open() | |
| 71 | + }, | |
| 72 | + openEditMarketRuleModal() { | |
| 73 | + if (!this.curMarketRule || !this.curMarketRule.ruleId) { | |
| 74 | + this.$message.warning(this.$t('marketRule.selectRuleFirst')) | |
| 75 | + return | |
| 76 | + } | |
| 77 | + this.$refs.editMarketRule && this.$refs.editMarketRule.open(this.curMarketRule) | |
| 78 | + }, | |
| 79 | + openDeleteMarketRuleModal() { | |
| 80 | + if (!this.curMarketRule || !this.curMarketRule.ruleId) { | |
| 81 | + this.$message.warning(this.$t('marketRule.selectRuleFirst')) | |
| 82 | + return | |
| 83 | + } | |
| 84 | + this.$refs.deleteMarketRule && this.$refs.deleteMarketRule.open(this.curMarketRule) | |
| 85 | + }, | |
| 86 | + | |
| 87 | + handleSuccess() { | |
| 88 | + this.listMarketRules() | |
| 89 | + } | |
| 90 | + } | |
| 91 | +} | |
| 92 | +</script> | |
| 93 | + | |
| 94 | +<style scoped> | |
| 95 | +.box-card { | |
| 96 | + height: 100%; | |
| 97 | +} | |
| 98 | + | |
| 99 | +.el-tree { | |
| 100 | + margin-top: 10px; | |
| 101 | +} | |
| 102 | +</style> | |
| 0 | 103 | \ No newline at end of file | ... | ... |
src/components/market/MarketRuleObj.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="market-rule-obj"> | |
| 3 | + <div class="action-bar"> | |
| 4 | + <el-button type="primary" size="small" @click="openAddMarketRuleObjModal"> | |
| 5 | + {{ $t('marketRule.associateObject') }} | |
| 6 | + </el-button> | |
| 7 | + </div> | |
| 8 | + | |
| 9 | + <el-table :data="marketRuleObjs" border style="width: 100%" v-loading="loading"> | |
| 10 | + <el-table-column prop="objTypeName" :label="$t('marketRule.objectName')" align="center" /> | |
| 11 | + <el-table-column prop="remark" :label="$t('marketRule.remark')" align="center" /> | |
| 12 | + <el-table-column :label="$t('marketRule.operation')" align="center" width="150"> | |
| 13 | + <template slot-scope="scope"> | |
| 14 | + <el-button size="mini" type="danger" @click="openDeleteMarketRuleObjModal(scope.row)"> | |
| 15 | + {{ $t('marketRule.delete') }} | |
| 16 | + </el-button> | |
| 17 | + </template> | |
| 18 | + </el-table-column> | |
| 19 | + </el-table> | |
| 20 | + | |
| 21 | + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current" | |
| 22 | + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper" | |
| 23 | + :total="page.total" /> | |
| 24 | + | |
| 25 | + <add-market-rule-obj ref="addMarketRuleObj" :rule-id="ruleId" @success="handleSuccess" /> | |
| 26 | + <delete-market-rule-obj ref="deleteMarketRuleObj" @success="handleSuccess" /> | |
| 27 | + </div> | |
| 28 | +</template> | |
| 29 | + | |
| 30 | +<script> | |
| 31 | +import { listMarketRuleObj } from '@/api/market/marketRuleApi' | |
| 32 | +import addMarketRuleObj from './AddMarketRuleObj' | |
| 33 | +import deleteMarketRuleObj from './DeleteMarketRuleObj' | |
| 34 | + | |
| 35 | +export default { | |
| 36 | + name: 'MarketRuleObj', | |
| 37 | + props: { | |
| 38 | + ruleId: { | |
| 39 | + type: String, | |
| 40 | + required: true | |
| 41 | + } | |
| 42 | + }, | |
| 43 | + components: { | |
| 44 | + addMarketRuleObj, | |
| 45 | + deleteMarketRuleObj | |
| 46 | + }, | |
| 47 | + data() { | |
| 48 | + return { | |
| 49 | + loading: false, | |
| 50 | + marketRuleObjs: [], | |
| 51 | + page: { | |
| 52 | + current: 1, | |
| 53 | + size: 10, | |
| 54 | + total: 0 | |
| 55 | + } | |
| 56 | + } | |
| 57 | + }, | |
| 58 | + watch: { | |
| 59 | + ruleId: { | |
| 60 | + immediate: true, | |
| 61 | + handler() { | |
| 62 | + this.listMarketRuleObjs() | |
| 63 | + } | |
| 64 | + } | |
| 65 | + }, | |
| 66 | + methods: { | |
| 67 | + async listMarketRuleObjs() { | |
| 68 | + if (!this.ruleId) return | |
| 69 | + | |
| 70 | + this.loading = true | |
| 71 | + try { | |
| 72 | + const { data, total } = await listMarketRuleObj({ | |
| 73 | + page: this.page.current, | |
| 74 | + row: this.page.size, | |
| 75 | + ruleId: this.ruleId | |
| 76 | + }) | |
| 77 | + this.marketRuleObjs = data | |
| 78 | + this.page.total = total | |
| 79 | + } catch (error) { | |
| 80 | + this.$message.error(error.message) | |
| 81 | + } finally { | |
| 82 | + this.loading = false | |
| 83 | + } | |
| 84 | + }, | |
| 85 | + openAddMarketRuleObjModal() { | |
| 86 | + this.$refs.addMarketRuleObj.open() | |
| 87 | + }, | |
| 88 | + openDeleteMarketRuleObjModal(row) { | |
| 89 | + this.$refs.deleteMarketRuleObj.open(row) | |
| 90 | + }, | |
| 91 | + handleSuccess() { | |
| 92 | + this.listMarketRuleObjs() | |
| 93 | + }, | |
| 94 | + handleSizeChange(size) { | |
| 95 | + this.page.size = size | |
| 96 | + this.listMarketRuleObjs() | |
| 97 | + }, | |
| 98 | + handleCurrentChange(current) { | |
| 99 | + this.page.current = current | |
| 100 | + this.listMarketRuleObjs() | |
| 101 | + } | |
| 102 | + } | |
| 103 | +} | |
| 104 | +</script> | |
| 105 | + | |
| 106 | +<style scoped> | |
| 107 | +.action-bar { | |
| 108 | + margin-bottom: 15px; | |
| 109 | + text-align: left; | |
| 110 | +} | |
| 111 | +</style> | |
| 0 | 112 | \ No newline at end of file | ... | ... |
src/components/market/MarketRuleWay.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="market-rule-way"> | |
| 3 | + <div class="action-bar"> | |
| 4 | + <el-button type="primary" size="small" @click="openAddMarketRuleWayModal" v-if="marketRuleWays.length < 1"> | |
| 5 | + {{ $t('marketRule.associateMarketingMethod') }} | |
| 6 | + </el-button> | |
| 7 | + </div> | |
| 8 | + | |
| 9 | + <el-table :data="marketRuleWays" border style="width: 100%" v-loading="loading"> | |
| 10 | + <el-table-column prop="wayTypeName" :label="$t('marketRule.marketingType')" align="center" /> | |
| 11 | + <el-table-column prop="textName" :label="$t('marketRule.marketingMethod')" align="center"> | |
| 12 | + <template slot-scope="scope"> | |
| 13 | + {{ scope.row.textName || scope.row.picName || scope.row.goodsName }} | |
| 14 | + </template> | |
| 15 | + </el-table-column> | |
| 16 | + <el-table-column prop="remark" :label="$t('marketRule.remark')" align="center" /> | |
| 17 | + <el-table-column :label="$t('marketRule.operation')" align="center" width="150"> | |
| 18 | + <template slot-scope="scope"> | |
| 19 | + <el-button size="mini" type="danger" @click="openDeleteMarketRuleWayModal(scope.row)"> | |
| 20 | + {{ $t('marketRule.delete') }} | |
| 21 | + </el-button> | |
| 22 | + </template> | |
| 23 | + </el-table-column> | |
| 24 | + </el-table> | |
| 25 | + | |
| 26 | + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current" | |
| 27 | + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper" | |
| 28 | + :total="page.total" /> | |
| 29 | + | |
| 30 | + <add-market-rule-way ref="addMarketRuleWay" :rule-id="ruleId" @success="handleSuccess" /> | |
| 31 | + <delete-market-rule-way ref="deleteMarketRuleWay" @success="handleSuccess" /> | |
| 32 | + </div> | |
| 33 | +</template> | |
| 34 | + | |
| 35 | +<script> | |
| 36 | +import { listMarketRuleWay } from '@/api/market/marketRuleApi' | |
| 37 | +import addMarketRuleWay from './AddMarketRuleWay' | |
| 38 | +import deleteMarketRuleWay from './DeleteMarketRuleWay' | |
| 39 | +export default { | |
| 40 | + name: 'MarketRuleWay', | |
| 41 | + props: { | |
| 42 | + ruleId: { | |
| 43 | + type: String, | |
| 44 | + required: true | |
| 45 | + } | |
| 46 | + }, | |
| 47 | + components: { | |
| 48 | + addMarketRuleWay, | |
| 49 | + deleteMarketRuleWay | |
| 50 | + }, | |
| 51 | + data() { | |
| 52 | + return { | |
| 53 | + loading: false, | |
| 54 | + marketRuleWays: [], | |
| 55 | + page: { | |
| 56 | + current: 1, | |
| 57 | + size: 10, | |
| 58 | + total: 0 | |
| 59 | + } | |
| 60 | + } | |
| 61 | + }, | |
| 62 | + watch: { | |
| 63 | + ruleId: { | |
| 64 | + immediate: true, | |
| 65 | + handler() { | |
| 66 | + this.listMarketRuleWays() | |
| 67 | + } | |
| 68 | + } | |
| 69 | + }, | |
| 70 | + methods: { | |
| 71 | + async listMarketRuleWays() { | |
| 72 | + if (!this.ruleId) return | |
| 73 | + | |
| 74 | + this.loading = true | |
| 75 | + try { | |
| 76 | + const { data, total } = await listMarketRuleWay({ | |
| 77 | + page: this.page.current, | |
| 78 | + row: this.page.size, | |
| 79 | + ruleId: this.ruleId | |
| 80 | + }) | |
| 81 | + this.marketRuleWays = data | |
| 82 | + this.page.total = total | |
| 83 | + } catch (error) { | |
| 84 | + this.$message.error(error.message) | |
| 85 | + } finally { | |
| 86 | + this.loading = false | |
| 87 | + } | |
| 88 | + }, | |
| 89 | + openAddMarketRuleWayModal() { | |
| 90 | + this.$refs.addMarketRuleWay.open() | |
| 91 | + }, | |
| 92 | + openDeleteMarketRuleWayModal(row) { | |
| 93 | + this.$refs.deleteMarketRuleWay.open(row) | |
| 94 | + }, | |
| 95 | + handleSuccess() { | |
| 96 | + this.listMarketRuleWays() | |
| 97 | + }, | |
| 98 | + handleSizeChange(size) { | |
| 99 | + this.page.size = size | |
| 100 | + this.listMarketRuleWays() | |
| 101 | + }, | |
| 102 | + handleCurrentChange(current) { | |
| 103 | + this.page.current = current | |
| 104 | + this.listMarketRuleWays() | |
| 105 | + } | |
| 106 | + } | |
| 107 | +} | |
| 108 | +</script> | |
| 109 | + | |
| 110 | +<style scoped> | |
| 111 | +.action-bar { | |
| 112 | + margin-bottom: 15px; | |
| 113 | + text-align: left; | |
| 114 | +} | |
| 115 | +</style> | |
| 0 | 116 | \ No newline at end of file | ... | ... |
src/i18n/index.js
| ... | ... | @@ -99,6 +99,7 @@ import { messages as integralDetailMessages } from '../views/mall/integralDetail |
| 99 | 99 | import { messages as marketSmsManageMessages } from '../views/market/marketSmsManageLang' |
| 100 | 100 | import { messages as marketWayMessages } from '../views/market/marketWayLang' |
| 101 | 101 | import { messages as marketGoodsItemManageMessages } from '../views/market/marketGoodsItemManageLang' |
| 102 | +import { messages as marketRuleMessages } from '../views/market/marketRuleLang' | |
| 102 | 103 | |
| 103 | 104 | Vue.use(VueI18n) |
| 104 | 105 | |
| ... | ... | @@ -202,6 +203,7 @@ const messages = { |
| 202 | 203 | ...marketSmsManageMessages.en, |
| 203 | 204 | ...marketWayMessages.en, |
| 204 | 205 | ...marketGoodsItemManageMessages.en, |
| 206 | + ...marketRuleMessages.en, | |
| 205 | 207 | }, |
| 206 | 208 | zh: { |
| 207 | 209 | ...loginMessages.zh, |
| ... | ... | @@ -301,6 +303,7 @@ const messages = { |
| 301 | 303 | ...marketSmsManageMessages.zh, |
| 302 | 304 | ...marketWayMessages.zh, |
| 303 | 305 | ...marketGoodsItemManageMessages.zh, |
| 306 | + ...marketRuleMessages.zh, | |
| 304 | 307 | } |
| 305 | 308 | } |
| 306 | 309 | ... | ... |
src/router/index.js
| ... | ... | @@ -467,20 +467,25 @@ const routes = [ |
| 467 | 467 | component: () => import('@/views/mall/integralDetailList.vue') |
| 468 | 468 | }, |
| 469 | 469 | { |
| 470 | - path:'/pages/admin/marketSmsManage', | |
| 471 | - name:'/pages/admin/marketSmsManage', | |
| 470 | + path: '/pages/admin/marketSmsManage', | |
| 471 | + name: '/pages/admin/marketSmsManage', | |
| 472 | 472 | component: () => import('@/views/market/marketSmsManageList.vue') |
| 473 | - }, | |
| 474 | - { | |
| 475 | - path:'/pages/admin/marketWay', | |
| 476 | - name:'/pages/admin/marketWay', | |
| 477 | - component: () => import('@/views/market/marketWayList.vue') | |
| 478 | - }, | |
| 479 | - { | |
| 480 | - path:'/views/market/marketGoodsItemManage', | |
| 481 | - name:'/views/market/marketGoodsItemManage', | |
| 482 | - component: () => import('@/views/market/marketGoodsItemManageList.vue') | |
| 483 | - }, | |
| 473 | + }, | |
| 474 | + { | |
| 475 | + path: '/pages/admin/marketWay', | |
| 476 | + name: '/pages/admin/marketWay', | |
| 477 | + component: () => import('@/views/market/marketWayList.vue') | |
| 478 | + }, | |
| 479 | + { | |
| 480 | + path: '/views/market/marketGoodsItemManage', | |
| 481 | + name: '/views/market/marketGoodsItemManage', | |
| 482 | + component: () => import('@/views/market/marketGoodsItemManageList.vue') | |
| 483 | + }, | |
| 484 | + { | |
| 485 | + path: '/pages/admin/marketRule', | |
| 486 | + name: '/pages/admin/marketRule', | |
| 487 | + component: () => import('@/views/market/marketRuleList.vue') | |
| 488 | + }, | |
| 484 | 489 | // 其他子路由可以在这里添加 |
| 485 | 490 | ] |
| 486 | 491 | }, | ... | ... |
src/views/market/marketRuleLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + marketRule: { | |
| 4 | + title: 'Marketing Rule Management', | |
| 5 | + name: 'Name', | |
| 6 | + description: 'Description', | |
| 7 | + marketingMethod: 'Marketing Method', | |
| 8 | + communityAuthorization: 'Community Authorization', | |
| 9 | + targetObject: 'Target Object', | |
| 10 | + add: 'Add', | |
| 11 | + edit: 'Edit', | |
| 12 | + delete: 'Delete', | |
| 13 | + save: 'Save', | |
| 14 | + cancel: 'Cancel', | |
| 15 | + confirmDelete: 'Confirm Delete', | |
| 16 | + deleteConfirmMessage: 'Are you sure to delete this marketing rule?', | |
| 17 | + marketingType: 'Marketing Type', | |
| 18 | + remark: 'Remark', | |
| 19 | + operation: 'Operation', | |
| 20 | + communityName: 'Community Name', | |
| 21 | + communityId: 'Community ID', | |
| 22 | + objectName: 'Object Name', | |
| 23 | + associateMarketingMethod: 'Associate Marketing Method', | |
| 24 | + associateCommunity: 'Associate Community', | |
| 25 | + associateObject: 'Associate Object', | |
| 26 | + text: 'Text', | |
| 27 | + image: 'Image', | |
| 28 | + goods: 'Goods', | |
| 29 | + required: 'Required', | |
| 30 | + selectMarketingType: 'Please select marketing type', | |
| 31 | + selectMarketingText: 'Please select marketing text', | |
| 32 | + selectMarketingImage: 'Please select marketing image', | |
| 33 | + selectMarketingGoods: 'Please select marketing goods', | |
| 34 | + selectCommunity: 'Please select community', | |
| 35 | + selectObject: 'Please select object', | |
| 36 | + customer: 'Customer', | |
| 37 | + merchant: 'Merchant', | |
| 38 | + staff: 'Staff' | |
| 39 | + } | |
| 40 | + }, | |
| 41 | + zh: { | |
| 42 | + marketRule: { | |
| 43 | + title: '营销规则管理', | |
| 44 | + name: '名称', | |
| 45 | + description: '描述', | |
| 46 | + marketingMethod: '营销方式', | |
| 47 | + communityAuthorization: '小区授权', | |
| 48 | + targetObject: '作用对象', | |
| 49 | + add: '添加', | |
| 50 | + edit: '修改', | |
| 51 | + delete: '删除', | |
| 52 | + save: '保存', | |
| 53 | + cancel: '取消', | |
| 54 | + confirmDelete: '确认删除', | |
| 55 | + deleteConfirmMessage: '确定删除营销规则?', | |
| 56 | + marketingType: '营销类型', | |
| 57 | + remark: '备注', | |
| 58 | + operation: '操作', | |
| 59 | + communityName: '小区名称', | |
| 60 | + communityId: '小区编号', | |
| 61 | + objectName: '对象名称', | |
| 62 | + associateMarketingMethod: '关联营销方式', | |
| 63 | + associateCommunity: '关联小区', | |
| 64 | + associateObject: '关联对象', | |
| 65 | + text: '文本', | |
| 66 | + image: '图片', | |
| 67 | + goods: '商品', | |
| 68 | + required: '必填', | |
| 69 | + selectMarketingType: '请选择营销类型', | |
| 70 | + selectMarketingText: '请选择营销文本', | |
| 71 | + selectMarketingImage: '请选择营销图片', | |
| 72 | + selectMarketingGoods: '请选择营销商品', | |
| 73 | + selectCommunity: '请选择小区', | |
| 74 | + selectObject: '请选择对象', | |
| 75 | + customer: '客户', | |
| 76 | + merchant: '商户', | |
| 77 | + staff: '员工' | |
| 78 | + } | |
| 79 | + } | |
| 80 | +} | |
| 0 | 81 | \ No newline at end of file | ... | ... |
src/views/market/marketRuleList.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="market-rule-container"> | |
| 3 | + <el-row :gutter="20"> | |
| 4 | + <el-col :span="4"> | |
| 5 | + <market-rule-div ref="marketRuleDiv" @switchMarketRule="handleSwitchMarketRule" /> | |
| 6 | + </el-col> | |
| 7 | + <el-col :span="20"> | |
| 8 | + <el-card class="box-card"> | |
| 9 | + <div slot="header" class="clearfix text-left"> | |
| 10 | + <span>{{ marketRuleInfo.curMarketRule.name }}</span> | |
| 11 | + <div class="role-context">{{ marketRuleInfo.curMarketRule.description }}</div> | |
| 12 | + </div> | |
| 13 | + <el-tabs v-model="marketRuleInfo.tabName" @tab-click="handleTabClick"> | |
| 14 | + <el-tab-pane label="营销方式" name="marketRuleWay"> | |
| 15 | + <market-rule-way v-if="marketRuleInfo.tabName === 'marketRuleWay'" | |
| 16 | + :rule-id="marketRuleInfo.curMarketRule.ruleId" /> | |
| 17 | + </el-tab-pane> | |
| 18 | + <el-tab-pane label="小区授权" name="marketRuleCommunity"> | |
| 19 | + <market-rule-community v-if="marketRuleInfo.tabName === 'marketRuleCommunity'" | |
| 20 | + :rule-id="marketRuleInfo.curMarketRule.ruleId" /> | |
| 21 | + </el-tab-pane> | |
| 22 | + <el-tab-pane label="作用对象" name="marketRuleObj"> | |
| 23 | + <market-rule-obj v-if="marketRuleInfo.tabName === 'marketRuleObj'" | |
| 24 | + :rule-id="marketRuleInfo.curMarketRule.ruleId" /> | |
| 25 | + </el-tab-pane> | |
| 26 | + </el-tabs> | |
| 27 | + </el-card> | |
| 28 | + </el-col> | |
| 29 | + </el-row> | |
| 30 | + | |
| 31 | + </div> | |
| 32 | +</template> | |
| 33 | + | |
| 34 | +<script> | |
| 35 | +import MarketRuleDiv from '@/components/market/MarketRuleDiv' | |
| 36 | +import MarketRuleWay from '@/components/market/MarketRuleWay' | |
| 37 | +import MarketRuleCommunity from '@/components/market/MarketRuleCommunity' | |
| 38 | +import MarketRuleObj from '@/components/market/MarketRuleObj' | |
| 39 | + | |
| 40 | + | |
| 41 | +export default { | |
| 42 | + name: 'MarketRuleList', | |
| 43 | + components: { | |
| 44 | + MarketRuleDiv, | |
| 45 | + MarketRuleWay, | |
| 46 | + MarketRuleCommunity, | |
| 47 | + MarketRuleObj, | |
| 48 | + }, | |
| 49 | + data() { | |
| 50 | + return { | |
| 51 | + marketRuleInfo: { | |
| 52 | + curMarketRule: {}, | |
| 53 | + tabName: 'marketRuleWay' | |
| 54 | + } | |
| 55 | + } | |
| 56 | + }, | |
| 57 | + methods: { | |
| 58 | + handleSwitchMarketRule(marketRule) { | |
| 59 | + this.marketRuleInfo.curMarketRule = marketRule | |
| 60 | + this.marketRuleInfo.tabName = 'marketRuleWay' | |
| 61 | + }, | |
| 62 | + handleTabClick(tab) { | |
| 63 | + this.marketRuleInfo.tabName = tab.name | |
| 64 | + }, | |
| 65 | + handleSuccess() { | |
| 66 | + this.$refs.marketRuleDiv.listMarketRules() | |
| 67 | + } | |
| 68 | + } | |
| 69 | +} | |
| 70 | +</script> | |
| 71 | + | |
| 72 | +<style lang="scss" scoped> | |
| 73 | +.market-rule-container { | |
| 74 | + padding: 20px; | |
| 75 | + | |
| 76 | + .box-card { | |
| 77 | + margin-bottom: 20px; | |
| 78 | + | |
| 79 | + .clearfix { | |
| 80 | + h5 { | |
| 81 | + margin: 0; | |
| 82 | + font-size: 18px; | |
| 83 | + } | |
| 84 | + | |
| 85 | + .role-context { | |
| 86 | + margin-top: 10px; | |
| 87 | + color: #666; | |
| 88 | + } | |
| 89 | + } | |
| 90 | + } | |
| 91 | +}</style> | |
| 0 | 92 | \ No newline at end of file | ... | ... |