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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 116 | \ No newline at end of file |
src/i18n/index.js
| @@ -99,6 +99,7 @@ import { messages as integralDetailMessages } from '../views/mall/integralDetail | @@ -99,6 +99,7 @@ import { messages as integralDetailMessages } from '../views/mall/integralDetail | ||
| 99 | import { messages as marketSmsManageMessages } from '../views/market/marketSmsManageLang' | 99 | import { messages as marketSmsManageMessages } from '../views/market/marketSmsManageLang' |
| 100 | import { messages as marketWayMessages } from '../views/market/marketWayLang' | 100 | import { messages as marketWayMessages } from '../views/market/marketWayLang' |
| 101 | import { messages as marketGoodsItemManageMessages } from '../views/market/marketGoodsItemManageLang' | 101 | import { messages as marketGoodsItemManageMessages } from '../views/market/marketGoodsItemManageLang' |
| 102 | +import { messages as marketRuleMessages } from '../views/market/marketRuleLang' | ||
| 102 | 103 | ||
| 103 | Vue.use(VueI18n) | 104 | Vue.use(VueI18n) |
| 104 | 105 | ||
| @@ -202,6 +203,7 @@ const messages = { | @@ -202,6 +203,7 @@ const messages = { | ||
| 202 | ...marketSmsManageMessages.en, | 203 | ...marketSmsManageMessages.en, |
| 203 | ...marketWayMessages.en, | 204 | ...marketWayMessages.en, |
| 204 | ...marketGoodsItemManageMessages.en, | 205 | ...marketGoodsItemManageMessages.en, |
| 206 | + ...marketRuleMessages.en, | ||
| 205 | }, | 207 | }, |
| 206 | zh: { | 208 | zh: { |
| 207 | ...loginMessages.zh, | 209 | ...loginMessages.zh, |
| @@ -301,6 +303,7 @@ const messages = { | @@ -301,6 +303,7 @@ const messages = { | ||
| 301 | ...marketSmsManageMessages.zh, | 303 | ...marketSmsManageMessages.zh, |
| 302 | ...marketWayMessages.zh, | 304 | ...marketWayMessages.zh, |
| 303 | ...marketGoodsItemManageMessages.zh, | 305 | ...marketGoodsItemManageMessages.zh, |
| 306 | + ...marketRuleMessages.zh, | ||
| 304 | } | 307 | } |
| 305 | } | 308 | } |
| 306 | 309 |
src/router/index.js
| @@ -467,20 +467,25 @@ const routes = [ | @@ -467,20 +467,25 @@ const routes = [ | ||
| 467 | component: () => import('@/views/mall/integralDetailList.vue') | 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 | component: () => import('@/views/market/marketSmsManageList.vue') | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 92 | \ No newline at end of file |