Commit 313306819565301df4e6e170b9b53d08a4e081d8

Authored by wuxw
1 parent 94a52a65

开发完成admin 营销规则

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 &#39;../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
... ...