Commit e9908e309d613b639953c1fb0aaf67c228f0ac71
1 parent
f22ec63c
开发完成admin供应商功能
Showing
11 changed files
with
957 additions
and
2 deletions
src/api/scm/supplierCouponApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 获取供应商列表 | ||
| 4 | +export function getSupplierList(params) { | ||
| 5 | + return new Promise((resolve, reject) => { | ||
| 6 | + request({ | ||
| 7 | + url: '/supplier.listSupplier', | ||
| 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 || 'Failed to get supplier list')) | ||
| 16 | + } | ||
| 17 | + }).catch(error => { | ||
| 18 | + reject(error) | ||
| 19 | + }) | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 获取优惠券列表 | ||
| 24 | +export function getSupplierCouponList(params) { | ||
| 25 | + return new Promise((resolve, reject) => { | ||
| 26 | + request({ | ||
| 27 | + url: '/supplierCoupon.listSupplierCoupon', | ||
| 28 | + method: 'get', | ||
| 29 | + params | ||
| 30 | + }).then(response => { | ||
| 31 | + const res = response.data | ||
| 32 | + if (res.code === 0) { | ||
| 33 | + resolve(res) | ||
| 34 | + } else { | ||
| 35 | + reject(new Error(res.msg || 'Failed to get coupon list')) | ||
| 36 | + } | ||
| 37 | + }).catch(error => { | ||
| 38 | + reject(error) | ||
| 39 | + }) | ||
| 40 | + }) | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +// 添加优惠券 | ||
| 44 | +export function addSupplierCoupon(data) { | ||
| 45 | + return new Promise((resolve, reject) => { | ||
| 46 | + request({ | ||
| 47 | + url: '/supplierCoupon.saveSupplierCoupon', | ||
| 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 || 'Failed to add coupon')) | ||
| 56 | + } | ||
| 57 | + }).catch(error => { | ||
| 58 | + reject(error) | ||
| 59 | + }) | ||
| 60 | + }) | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +// 更新优惠券 | ||
| 64 | +export function updateSupplierCoupon(data) { | ||
| 65 | + return new Promise((resolve, reject) => { | ||
| 66 | + request({ | ||
| 67 | + url: '/supplierCoupon.updateSupplierCoupon', | ||
| 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 || 'Failed to update coupon')) | ||
| 76 | + } | ||
| 77 | + }).catch(error => { | ||
| 78 | + reject(error) | ||
| 79 | + }) | ||
| 80 | + }) | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +// 删除优惠券 | ||
| 84 | +export function deleteSupplierCoupon(data) { | ||
| 85 | + return new Promise((resolve, reject) => { | ||
| 86 | + request({ | ||
| 87 | + url: '/supplierCoupon.deleteSupplierCoupon', | ||
| 88 | + method: 'post', | ||
| 89 | + data | ||
| 90 | + }).then(response => { | ||
| 91 | + const res = response.data | ||
| 92 | + if (res.code === 0) { | ||
| 93 | + resolve(res) | ||
| 94 | + } else { | ||
| 95 | + reject(new Error(res.msg || 'Failed to delete coupon')) | ||
| 96 | + } | ||
| 97 | + }).catch(error => { | ||
| 98 | + reject(error) | ||
| 99 | + }) | ||
| 100 | + }) | ||
| 101 | +} | ||
| 0 | \ No newline at end of file | 102 | \ No newline at end of file |
src/api/scm/supplierCouponBuyApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 获取优惠券购买记录列表 | ||
| 5 | + * @param {Object} params 查询参数 | ||
| 6 | + * @returns {Promise} 包含优惠券购买记录列表的Promise | ||
| 7 | + */ | ||
| 8 | +export function getSupplierCouponBuyList(params) { | ||
| 9 | + return new Promise((resolve, reject) => { | ||
| 10 | + request({ | ||
| 11 | + url: '/supplierCoupon.listSupplierCouponBuy', | ||
| 12 | + method: 'get', | ||
| 13 | + params | ||
| 14 | + }).then(response => { | ||
| 15 | + const res = response.data | ||
| 16 | + if (res.code === 0) { | ||
| 17 | + resolve({ | ||
| 18 | + data: res.data, | ||
| 19 | + total: res.total, | ||
| 20 | + records: res.records | ||
| 21 | + }) | ||
| 22 | + } else { | ||
| 23 | + reject(new Error(res.msg || 'Failed to get coupon purchase records')) | ||
| 24 | + } | ||
| 25 | + }).catch(error => { | ||
| 26 | + reject(error) | ||
| 27 | + }) | ||
| 28 | + }) | ||
| 29 | +} | ||
| 0 | \ No newline at end of file | 30 | \ No newline at end of file |
src/components/scm/addSupplierCoupon.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <el-dialog | ||
| 3 | + :title="$t('supplierCoupon.addTitle')" | ||
| 4 | + :visible.sync="visible" | ||
| 5 | + width="50%" | ||
| 6 | + > | ||
| 7 | + <el-form :model="form" :rules="rules" ref="form" label-width="120px"> | ||
| 8 | + <el-form-item :label="$t('supplierCoupon.name')" prop="name"> | ||
| 9 | + <el-input | ||
| 10 | + v-model="form.name" | ||
| 11 | + :placeholder="$t('supplierCoupon.required')" | ||
| 12 | + ></el-input> | ||
| 13 | + </el-form-item> | ||
| 14 | + | ||
| 15 | + <el-form-item :label="$t('supplierCoupon.thirdPartyId')" prop="businessKey"> | ||
| 16 | + <el-input | ||
| 17 | + v-model="form.businessKey" | ||
| 18 | + :placeholder="$t('supplierCoupon.required')" | ||
| 19 | + ></el-input> | ||
| 20 | + </el-form-item> | ||
| 21 | + | ||
| 22 | + <el-form-item :label="$t('supplierCoupon.price')" prop="valuePrice"> | ||
| 23 | + <el-input | ||
| 24 | + v-model="form.valuePrice" | ||
| 25 | + :placeholder="$t('supplierCoupon.required')" | ||
| 26 | + ></el-input> | ||
| 27 | + </el-form-item> | ||
| 28 | + | ||
| 29 | + <el-form-item :label="$t('supplierCoupon.remark')" prop="remark"> | ||
| 30 | + <el-input | ||
| 31 | + type="textarea" | ||
| 32 | + v-model="form.remark" | ||
| 33 | + :placeholder="$t('supplierCoupon.required')" | ||
| 34 | + rows="4" | ||
| 35 | + ></el-input> | ||
| 36 | + </el-form-item> | ||
| 37 | + </el-form> | ||
| 38 | + | ||
| 39 | + <div slot="footer" class="dialog-footer"> | ||
| 40 | + <el-button @click="visible = false"> | ||
| 41 | + {{ $t('supplierCoupon.cancel') }} | ||
| 42 | + </el-button> | ||
| 43 | + <el-button type="primary" @click="submitForm"> | ||
| 44 | + {{ $t('supplierCoupon.confirm') }} | ||
| 45 | + </el-button> | ||
| 46 | + </div> | ||
| 47 | + </el-dialog> | ||
| 48 | +</template> | ||
| 49 | + | ||
| 50 | +<script> | ||
| 51 | +import { addSupplierCoupon } from '@/api/scm/supplierCouponApi' | ||
| 52 | + | ||
| 53 | +export default { | ||
| 54 | + name: 'AddSupplierCoupon', | ||
| 55 | + data() { | ||
| 56 | + return { | ||
| 57 | + visible: false, | ||
| 58 | + form: { | ||
| 59 | + name: '', | ||
| 60 | + supplierId: '', | ||
| 61 | + businessKey: '', | ||
| 62 | + valuePrice: '', | ||
| 63 | + remark: '' | ||
| 64 | + }, | ||
| 65 | + rules: { | ||
| 66 | + name: [ | ||
| 67 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 68 | + { max: 64, message: this.$t('supplierCoupon.maxLength', { length: 64 }), trigger: 'blur' } | ||
| 69 | + ], | ||
| 70 | + businessKey: [ | ||
| 71 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 72 | + { max: 30, message: this.$t('supplierCoupon.maxLength', { length: 30 }), trigger: 'blur' } | ||
| 73 | + ], | ||
| 74 | + valuePrice: [ | ||
| 75 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 76 | + { max: 10, message: this.$t('supplierCoupon.maxLength', { length: 10 }), trigger: 'blur' } | ||
| 77 | + ], | ||
| 78 | + remark: [ | ||
| 79 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 80 | + { max: 1024, message: this.$t('supplierCoupon.maxLength', { length: 1024 }), trigger: 'blur' } | ||
| 81 | + ] | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + }, | ||
| 85 | + methods: { | ||
| 86 | + open(data) { | ||
| 87 | + this.form = { | ||
| 88 | + name: '', | ||
| 89 | + supplierId: data.supplierId, | ||
| 90 | + businessKey: '', | ||
| 91 | + valuePrice: '', | ||
| 92 | + remark: '' | ||
| 93 | + } | ||
| 94 | + this.visible = true | ||
| 95 | + this.$nextTick(() => { | ||
| 96 | + if (this.$refs.form) { | ||
| 97 | + this.$refs.form.clearValidate() | ||
| 98 | + } | ||
| 99 | + }) | ||
| 100 | + }, | ||
| 101 | + | ||
| 102 | + submitForm() { | ||
| 103 | + this.$refs.form.validate(async (valid) => { | ||
| 104 | + if (valid) { | ||
| 105 | + try { | ||
| 106 | + await addSupplierCoupon(this.form) | ||
| 107 | + this.$message.success(this.$t('supplierCoupon.addSuccess')) | ||
| 108 | + this.visible = false | ||
| 109 | + this.$emit('success') | ||
| 110 | + } catch (error) { | ||
| 111 | + this.$message.error(error.message || this.$t('supplierCoupon.addFailed')) | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + }) | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | +} | ||
| 118 | +</script> | ||
| 0 | \ No newline at end of file | 119 | \ No newline at end of file |
src/components/scm/deleteSupplierCoupon.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <el-dialog :title="$t('supplierCoupon.deleteTitle')" :visible.sync="visible" width="30%"> | ||
| 3 | + <p>{{ $t('supplierCoupon.deleteConfirm') }}</p> | ||
| 4 | + <div slot="footer" class="dialog-footer"> | ||
| 5 | + <el-button @click="visible = false"> | ||
| 6 | + {{ $t('supplierCoupon.cancel') }} | ||
| 7 | + </el-button> | ||
| 8 | + <el-button type="primary" @click="confirmDelete"> | ||
| 9 | + {{ $t('supplierCoupon.confirm') }} | ||
| 10 | + </el-button> | ||
| 11 | + </div> | ||
| 12 | + </el-dialog> | ||
| 13 | +</template> | ||
| 14 | + | ||
| 15 | +<script> | ||
| 16 | +import { deleteSupplierCoupon } from '@/api/scm/supplierCouponApi' | ||
| 17 | + | ||
| 18 | +export default { | ||
| 19 | + name: 'DeleteSupplierCoupon', | ||
| 20 | + data() { | ||
| 21 | + return { | ||
| 22 | + visible: false, | ||
| 23 | + couponId: '' | ||
| 24 | + } | ||
| 25 | + }, | ||
| 26 | + methods: { | ||
| 27 | + open(data) { | ||
| 28 | + this.couponId = data.couponId | ||
| 29 | + this.supplierId = data.supplierId | ||
| 30 | + this.visible = true | ||
| 31 | + }, | ||
| 32 | + | ||
| 33 | + async confirmDelete() { | ||
| 34 | + try { | ||
| 35 | + await deleteSupplierCoupon({ couponId: this.couponId,supplierId:this.supplierId }) | ||
| 36 | + this.$message.success(this.$t('supplierCoupon.deleteSuccess')) | ||
| 37 | + this.visible = false | ||
| 38 | + this.$emit('success') | ||
| 39 | + } catch (error) { | ||
| 40 | + this.$message.error(error.message || this.$t('supplierCoupon.deleteFailed')) | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | +} | ||
| 45 | +</script> | ||
| 0 | \ No newline at end of file | 46 | \ No newline at end of file |
src/components/scm/editSupplierCoupon.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <el-dialog | ||
| 3 | + :title="$t('supplierCoupon.editTitle')" | ||
| 4 | + :visible.sync="visible" | ||
| 5 | + width="50%" | ||
| 6 | + > | ||
| 7 | + <el-form :model="form" :rules="rules" ref="form" label-width="120px"> | ||
| 8 | + <el-form-item :label="$t('supplierCoupon.name')" prop="name"> | ||
| 9 | + <el-input | ||
| 10 | + v-model="form.name" | ||
| 11 | + :placeholder="$t('supplierCoupon.required')" | ||
| 12 | + ></el-input> | ||
| 13 | + </el-form-item> | ||
| 14 | + | ||
| 15 | + <el-form-item :label="$t('supplierCoupon.thirdPartyId')" prop="businessKey"> | ||
| 16 | + <el-input | ||
| 17 | + v-model="form.businessKey" | ||
| 18 | + :placeholder="$t('supplierCoupon.required')" | ||
| 19 | + ></el-input> | ||
| 20 | + </el-form-item> | ||
| 21 | + | ||
| 22 | + <el-form-item :label="$t('supplierCoupon.price')" prop="valuePrice"> | ||
| 23 | + <el-input | ||
| 24 | + v-model="form.valuePrice" | ||
| 25 | + :placeholder="$t('supplierCoupon.required')" | ||
| 26 | + ></el-input> | ||
| 27 | + </el-form-item> | ||
| 28 | + | ||
| 29 | + <el-form-item :label="$t('supplierCoupon.remark')" prop="remark"> | ||
| 30 | + <el-input | ||
| 31 | + type="textarea" | ||
| 32 | + v-model="form.remark" | ||
| 33 | + :placeholder="$t('supplierCoupon.required')" | ||
| 34 | + rows="4" | ||
| 35 | + ></el-input> | ||
| 36 | + </el-form-item> | ||
| 37 | + </el-form> | ||
| 38 | + | ||
| 39 | + <div slot="footer" class="dialog-footer"> | ||
| 40 | + <el-button @click="visible = false"> | ||
| 41 | + {{ $t('supplierCoupon.cancel') }} | ||
| 42 | + </el-button> | ||
| 43 | + <el-button type="primary" @click="submitForm"> | ||
| 44 | + {{ $t('supplierCoupon.confirm') }} | ||
| 45 | + </el-button> | ||
| 46 | + </div> | ||
| 47 | + </el-dialog> | ||
| 48 | +</template> | ||
| 49 | + | ||
| 50 | +<script> | ||
| 51 | +import { updateSupplierCoupon } from '@/api/scm/supplierCouponApi' | ||
| 52 | + | ||
| 53 | +export default { | ||
| 54 | + name: 'EditSupplierCoupon', | ||
| 55 | + data() { | ||
| 56 | + return { | ||
| 57 | + visible: false, | ||
| 58 | + form: { | ||
| 59 | + couponId: '', | ||
| 60 | + name: '', | ||
| 61 | + businessKey: '', | ||
| 62 | + valuePrice: '', | ||
| 63 | + remark: '' | ||
| 64 | + }, | ||
| 65 | + rules: { | ||
| 66 | + name: [ | ||
| 67 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 68 | + { max: 64, message: this.$t('supplierCoupon.maxLength', { length: 64 }), trigger: 'blur' } | ||
| 69 | + ], | ||
| 70 | + businessKey: [ | ||
| 71 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 72 | + { max: 30, message: this.$t('supplierCoupon.maxLength', { length: 30 }), trigger: 'blur' } | ||
| 73 | + ], | ||
| 74 | + valuePrice: [ | ||
| 75 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 76 | + { max: 10, message: this.$t('supplierCoupon.maxLength', { length: 10 }), trigger: 'blur' } | ||
| 77 | + ], | ||
| 78 | + remark: [ | ||
| 79 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' }, | ||
| 80 | + { max: 1024, message: this.$t('supplierCoupon.maxLength', { length: 1024 }), trigger: 'blur' } | ||
| 81 | + ], | ||
| 82 | + couponId: [ | ||
| 83 | + { required: true, message: this.$t('supplierCoupon.required'), trigger: 'blur' } | ||
| 84 | + ] | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + }, | ||
| 88 | + methods: { | ||
| 89 | + open(data) { | ||
| 90 | + this.form = { ...data } | ||
| 91 | + this.visible = true | ||
| 92 | + this.$nextTick(() => { | ||
| 93 | + if (this.$refs.form) { | ||
| 94 | + this.$refs.form.clearValidate() | ||
| 95 | + } | ||
| 96 | + }) | ||
| 97 | + }, | ||
| 98 | + | ||
| 99 | + submitForm() { | ||
| 100 | + this.$refs.form.validate(async (valid) => { | ||
| 101 | + if (valid) { | ||
| 102 | + try { | ||
| 103 | + await updateSupplierCoupon(this.form) | ||
| 104 | + this.$message.success(this.$t('supplierCoupon.updateSuccess')) | ||
| 105 | + this.visible = false | ||
| 106 | + this.$emit('success') | ||
| 107 | + } catch (error) { | ||
| 108 | + this.$message.error(error.message || this.$t('supplierCoupon.updateFailed')) | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + }) | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | +} | ||
| 115 | +</script> | ||
| 0 | \ No newline at end of file | 116 | \ No newline at end of file |
src/i18n/index.js
| @@ -110,6 +110,8 @@ import { messages as couponPoolManageMessages } from '../views/account/couponPoo | @@ -110,6 +110,8 @@ import { messages as couponPoolManageMessages } from '../views/account/couponPoo | ||
| 110 | import { messages as couponDetailManageMessages } from '../views/account/couponDetailManageLang' | 110 | import { messages as couponDetailManageMessages } from '../views/account/couponDetailManageLang' |
| 111 | import { messages as supplierTypeManageMessages } from '../views/scm/supplierTypeManageLang' | 111 | import { messages as supplierTypeManageMessages } from '../views/scm/supplierTypeManageLang' |
| 112 | import { messages as supplierManageMessages } from '../views/scm/supplierManageLang' | 112 | import { messages as supplierManageMessages } from '../views/scm/supplierManageLang' |
| 113 | +import { messages as supplierCouponMessages } from '../views/scm/supplierCouponLang' | ||
| 114 | +import { messages as supplierCouponBuyMessages } from '../views/scm/supplierCouponBuyLang' | ||
| 113 | 115 | ||
| 114 | Vue.use(VueI18n) | 116 | Vue.use(VueI18n) |
| 115 | 117 | ||
| @@ -224,6 +226,8 @@ const messages = { | @@ -224,6 +226,8 @@ const messages = { | ||
| 224 | ...couponDetailManageMessages.en, | 226 | ...couponDetailManageMessages.en, |
| 225 | ...supplierTypeManageMessages.en, | 227 | ...supplierTypeManageMessages.en, |
| 226 | ...supplierManageMessages.en, | 228 | ...supplierManageMessages.en, |
| 229 | + ...supplierCouponMessages.en, | ||
| 230 | + ...supplierCouponBuyMessages.en, | ||
| 227 | }, | 231 | }, |
| 228 | zh: { | 232 | zh: { |
| 229 | ...loginMessages.zh, | 233 | ...loginMessages.zh, |
| @@ -334,6 +338,8 @@ const messages = { | @@ -334,6 +338,8 @@ const messages = { | ||
| 334 | ...couponDetailManageMessages.zh, | 338 | ...couponDetailManageMessages.zh, |
| 335 | ...supplierTypeManageMessages.zh, | 339 | ...supplierTypeManageMessages.zh, |
| 336 | ...supplierManageMessages.zh, | 340 | ...supplierManageMessages.zh, |
| 341 | + ...supplierCouponMessages.zh, | ||
| 342 | + ...supplierCouponBuyMessages.zh, | ||
| 337 | } | 343 | } |
| 338 | } | 344 | } |
| 339 | 345 |
src/router/index.js
| @@ -532,9 +532,19 @@ const routes = [ | @@ -532,9 +532,19 @@ const routes = [ | ||
| 532 | component: () => import('@/views/scm/supplierTypeManageList.vue') | 532 | component: () => import('@/views/scm/supplierTypeManageList.vue') |
| 533 | }, | 533 | }, |
| 534 | { | 534 | { |
| 535 | - path:'/pages/scm/supplierManage', | ||
| 536 | - name:'/pages/scm/supplierManage', | 535 | + path: '/pages/scm/supplierManage', |
| 536 | + name: '/pages/scm/supplierManage', | ||
| 537 | component: () => import('@/views/scm/supplierManageList.vue') | 537 | component: () => import('@/views/scm/supplierManageList.vue') |
| 538 | + }, | ||
| 539 | + { | ||
| 540 | + path: '/pages/scm/supplierCoupon', | ||
| 541 | + name: '/pages/scm/supplierCoupon', | ||
| 542 | + component: () => import('@/views/scm/supplierCouponList.vue') | ||
| 543 | + }, | ||
| 544 | + { | ||
| 545 | + path:'/pages/scm/supplierCouponBuy', | ||
| 546 | + name:'/pages/scm/supplierCouponBuy', | ||
| 547 | + component: () => import('@/views/scm/supplierCouponBuyList.vue') | ||
| 538 | }, | 548 | }, |
| 539 | // 其他子路由可以在这里添加 | 549 | // 其他子路由可以在这里添加 |
| 540 | ] | 550 | ] |
src/views/scm/supplierCouponBuyLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + supplierCouponBuy: { | ||
| 4 | + searchTitle: 'Query Conditions', | ||
| 5 | + listTitle: 'Coupon Purchase Records', | ||
| 6 | + placeholder: { | ||
| 7 | + buyId: 'Order Number', | ||
| 8 | + couponId: 'Coupon ID', | ||
| 9 | + name: 'Name', | ||
| 10 | + supplierName: 'Supplier', | ||
| 11 | + storeName: 'Store Name', | ||
| 12 | + objName: 'Community Name', | ||
| 13 | + createUserTel: 'Contact Info', | ||
| 14 | + createUserName: 'Buyer' | ||
| 15 | + }, | ||
| 16 | + table: { | ||
| 17 | + buyId: 'ID', | ||
| 18 | + couponName: 'Coupon', | ||
| 19 | + name: 'Name', | ||
| 20 | + supplierName: 'Supplier', | ||
| 21 | + quantity: 'Quantity', | ||
| 22 | + valuePrice: 'Price', | ||
| 23 | + storeName: 'Store Name', | ||
| 24 | + objName: 'Community Name', | ||
| 25 | + createUserTel: 'Contact', | ||
| 26 | + createUserName: 'Buyer', | ||
| 27 | + remark: 'Remark' | ||
| 28 | + }, | ||
| 29 | + fetchError: 'Failed to fetch coupon purchase records' | ||
| 30 | + }, | ||
| 31 | + common: { | ||
| 32 | + search: 'Search' | ||
| 33 | + } | ||
| 34 | + }, | ||
| 35 | + zh: { | ||
| 36 | + supplierCouponBuy: { | ||
| 37 | + searchTitle: '查询条件', | ||
| 38 | + listTitle: '优惠券购买记录', | ||
| 39 | + placeholder: { | ||
| 40 | + buyId: '请填写订单号', | ||
| 41 | + couponId: '请填写优惠券编号', | ||
| 42 | + name: '请填写名称', | ||
| 43 | + supplierName: '请填写供应商', | ||
| 44 | + storeName: '请填写商户名称', | ||
| 45 | + objName: '请填写小区名称', | ||
| 46 | + createUserTel: '请填写联系方式', | ||
| 47 | + createUserName: '请填写购买人' | ||
| 48 | + }, | ||
| 49 | + table: { | ||
| 50 | + buyId: '编号', | ||
| 51 | + couponName: '优惠券', | ||
| 52 | + name: '名称', | ||
| 53 | + supplierName: '供应商', | ||
| 54 | + quantity: '购买数量', | ||
| 55 | + valuePrice: '售价', | ||
| 56 | + storeName: '商户名称', | ||
| 57 | + objName: '小区名称', | ||
| 58 | + createUserTel: '联系方式', | ||
| 59 | + createUserName: '购买人', | ||
| 60 | + remark: '备注' | ||
| 61 | + }, | ||
| 62 | + fetchError: '获取优惠券购买记录失败' | ||
| 63 | + }, | ||
| 64 | + common: { | ||
| 65 | + search: '查询' | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | +} | ||
| 0 | \ No newline at end of file | 69 | \ No newline at end of file |
src/views/scm/supplierCouponBuyList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="supplier-coupon-buy-container"> | ||
| 3 | + <!-- 查询条件 --> | ||
| 4 | + <el-card class="search-wrapper"> | ||
| 5 | + <div slot="header" class="clearfix flex justify-between"> | ||
| 6 | + <span>{{ $t('supplierCouponBuy.searchTitle') }}</span> | ||
| 7 | + </div> | ||
| 8 | + <el-row :gutter="20"> | ||
| 9 | + <el-col :span="6"> | ||
| 10 | + <el-input v-model="searchForm.buyId" :placeholder="$t('supplierCouponBuy.placeholder.buyId')" clearable /> | ||
| 11 | + </el-col> | ||
| 12 | + <el-col :span="6"> | ||
| 13 | + <el-input v-model="searchForm.couponId" :placeholder="$t('supplierCouponBuy.placeholder.couponId')" clearable /> | ||
| 14 | + </el-col> | ||
| 15 | + <el-col :span="6"> | ||
| 16 | + <el-input v-model="searchForm.name" :placeholder="$t('supplierCouponBuy.placeholder.name')" clearable /> | ||
| 17 | + </el-col> | ||
| 18 | + <el-col :span="6"> | ||
| 19 | + <el-button type="primary" @click="handleSearch"> | ||
| 20 | + {{ $t('common.search') }} | ||
| 21 | + </el-button> | ||
| 22 | + </el-col> | ||
| 23 | + </el-row> | ||
| 24 | + | ||
| 25 | + <el-row :gutter="20" style="margin-top: 15px"> | ||
| 26 | + <el-col :span="6"> | ||
| 27 | + <el-input v-model="searchForm.supplierName" :placeholder="$t('supplierCouponBuy.placeholder.supplierName')" | ||
| 28 | + clearable /> | ||
| 29 | + </el-col> | ||
| 30 | + <el-col :span="6"> | ||
| 31 | + <el-input v-model="searchForm.storeName" :placeholder="$t('supplierCouponBuy.placeholder.storeName')" | ||
| 32 | + clearable /> | ||
| 33 | + </el-col> | ||
| 34 | + <el-col :span="6"> | ||
| 35 | + <el-input v-model="searchForm.objName" :placeholder="$t('supplierCouponBuy.placeholder.objName')" clearable /> | ||
| 36 | + </el-col> | ||
| 37 | + </el-row> | ||
| 38 | + | ||
| 39 | + <el-row :gutter="20" style="margin-top: 15px"> | ||
| 40 | + <el-col :span="6"> | ||
| 41 | + <el-input v-model="searchForm.createUserTel" :placeholder="$t('supplierCouponBuy.placeholder.createUserTel')" | ||
| 42 | + clearable /> | ||
| 43 | + </el-col> | ||
| 44 | + <el-col :span="6"> | ||
| 45 | + <el-input v-model="searchForm.createUserName" :placeholder="$t('supplierCouponBuy.placeholder.createUserName')" | ||
| 46 | + clearable /> | ||
| 47 | + </el-col> | ||
| 48 | + </el-row> | ||
| 49 | + </el-card> | ||
| 50 | + | ||
| 51 | + <!-- 数据列表 --> | ||
| 52 | + <el-card class="list-wrapper"> | ||
| 53 | + <div slot="header" class="clearfix flex justify-between"> | ||
| 54 | + <span>{{ $t('supplierCouponBuy.listTitle') }}</span> | ||
| 55 | + </div> | ||
| 56 | + | ||
| 57 | + <el-table v-loading="loading" :data="tableData" border style="width: 100%"> | ||
| 58 | + <el-table-column prop="buyId" :label="$t('supplierCouponBuy.table.buyId')" align="center" /> | ||
| 59 | + <el-table-column prop="couponName" :label="$t('supplierCouponBuy.table.couponName')" align="center" /> | ||
| 60 | + <el-table-column prop="name" :label="$t('supplierCouponBuy.table.name')" align="center" /> | ||
| 61 | + <el-table-column prop="supplierName" :label="$t('supplierCouponBuy.table.supplierName')" align="center" /> | ||
| 62 | + <el-table-column prop="quantity" :label="$t('supplierCouponBuy.table.quantity')" align="center" /> | ||
| 63 | + <el-table-column prop="valuePrice" :label="$t('supplierCouponBuy.table.valuePrice')" align="center" /> | ||
| 64 | + <el-table-column prop="storeName" :label="$t('supplierCouponBuy.table.storeName')" align="center" /> | ||
| 65 | + <el-table-column prop="objName" :label="$t('supplierCouponBuy.table.objName')" align="center" /> | ||
| 66 | + <el-table-column prop="createUserTel" :label="$t('supplierCouponBuy.table.createUserTel')" align="center" /> | ||
| 67 | + <el-table-column prop="createUserName" :label="$t('supplierCouponBuy.table.createUserName')" align="center" /> | ||
| 68 | + <el-table-column prop="remark" :label="$t('supplierCouponBuy.table.remark')" align="center" /> | ||
| 69 | + </el-table> | ||
| 70 | + | ||
| 71 | + <!-- 分页 --> | ||
| 72 | + <el-pagination :current-page="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size" | ||
| 73 | + layout="total, sizes, prev, pager, next, jumper" :total="page.total" @size-change="handleSizeChange" | ||
| 74 | + @current-change="handleCurrentChange" /> | ||
| 75 | + </el-card> | ||
| 76 | + </div> | ||
| 77 | +</template> | ||
| 78 | + | ||
| 79 | +<script> | ||
| 80 | +import { getSupplierCouponBuyList } from '@/api/scm/supplierCouponBuyApi' | ||
| 81 | + | ||
| 82 | +export default { | ||
| 83 | + name: 'SupplierCouponBuyList', | ||
| 84 | + data() { | ||
| 85 | + return { | ||
| 86 | + loading: false, | ||
| 87 | + searchForm: { | ||
| 88 | + buyId: '', | ||
| 89 | + couponId: '', | ||
| 90 | + name: '', | ||
| 91 | + supplierName: '', | ||
| 92 | + storeName: '', | ||
| 93 | + objName: '', | ||
| 94 | + createUserTel: '', | ||
| 95 | + createUserName: '' | ||
| 96 | + }, | ||
| 97 | + tableData: [], | ||
| 98 | + page: { | ||
| 99 | + current: 1, | ||
| 100 | + size: 10, | ||
| 101 | + total: 0 | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + }, | ||
| 105 | + created() { | ||
| 106 | + this.getList() | ||
| 107 | + }, | ||
| 108 | + methods: { | ||
| 109 | + async getList() { | ||
| 110 | + try { | ||
| 111 | + this.loading = true | ||
| 112 | + const params = { | ||
| 113 | + ...this.searchForm, | ||
| 114 | + page: this.page.current, | ||
| 115 | + row: this.page.size | ||
| 116 | + } | ||
| 117 | + const { data, total } = await getSupplierCouponBuyList(params) | ||
| 118 | + this.tableData = data | ||
| 119 | + this.page.total = total | ||
| 120 | + } catch (error) { | ||
| 121 | + this.$message.error(this.$t('supplierCouponBuy.fetchError')) | ||
| 122 | + } finally { | ||
| 123 | + this.loading = false | ||
| 124 | + } | ||
| 125 | + }, | ||
| 126 | + handleSearch() { | ||
| 127 | + this.page.current = 1 | ||
| 128 | + this.getList() | ||
| 129 | + }, | ||
| 130 | + handleSizeChange(val) { | ||
| 131 | + this.page.size = val | ||
| 132 | + this.getList() | ||
| 133 | + }, | ||
| 134 | + handleCurrentChange(val) { | ||
| 135 | + this.page.current = val | ||
| 136 | + this.getList() | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | +} | ||
| 140 | +</script> | ||
| 141 | + | ||
| 142 | +<style lang="scss" scoped> | ||
| 143 | +.supplier-coupon-buy-container { | ||
| 144 | + padding: 20px; | ||
| 145 | + | ||
| 146 | + .search-wrapper { | ||
| 147 | + margin-bottom: 20px; | ||
| 148 | + | ||
| 149 | + .el-row { | ||
| 150 | + margin-bottom: 15px; | ||
| 151 | + | ||
| 152 | + &:last-child { | ||
| 153 | + margin-bottom: 0; | ||
| 154 | + } | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + .list-wrapper { | ||
| 159 | + .el-pagination { | ||
| 160 | + margin-top: 20px; | ||
| 161 | + text-align: right; | ||
| 162 | + } | ||
| 163 | + } | ||
| 164 | +} | ||
| 165 | +</style> | ||
| 0 | \ No newline at end of file | 166 | \ No newline at end of file |
src/views/scm/supplierCouponLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + supplierCoupon: { | ||
| 4 | + title: 'Supplier Coupon Management', | ||
| 5 | + searchConditions: 'Search Conditions', | ||
| 6 | + couponInfo: 'Coupon Information', | ||
| 7 | + name: 'Name', | ||
| 8 | + businessId: 'Business ID', | ||
| 9 | + supplier: 'Supplier', | ||
| 10 | + thirdPartyId: 'Third-party ID', | ||
| 11 | + price: 'Price', | ||
| 12 | + remark: 'Remark', | ||
| 13 | + operation: 'Operation', | ||
| 14 | + add: 'Add', | ||
| 15 | + edit: 'Edit', | ||
| 16 | + delete: 'Delete', | ||
| 17 | + confirm: 'Confirm', | ||
| 18 | + cancel: 'Cancel', | ||
| 19 | + deleteConfirm: 'Are you sure to delete this coupon?', | ||
| 20 | + deleteTitle: 'Confirm Operation', | ||
| 21 | + required: 'Required', | ||
| 22 | + addTitle: 'Add Coupon', | ||
| 23 | + editTitle: 'Edit Coupon', | ||
| 24 | + search: 'Search', | ||
| 25 | + noData: 'No data', | ||
| 26 | + supplierRequired: 'Please select a supplier first' | ||
| 27 | + } | ||
| 28 | + }, | ||
| 29 | + zh: { | ||
| 30 | + supplierCoupon: { | ||
| 31 | + title: '供应商优惠券管理', | ||
| 32 | + searchConditions: '查询条件', | ||
| 33 | + couponInfo: '优惠券信息', | ||
| 34 | + name: '名称', | ||
| 35 | + businessId: '业务ID', | ||
| 36 | + supplier: '供应商', | ||
| 37 | + thirdPartyId: '三方ID', | ||
| 38 | + price: '售价', | ||
| 39 | + remark: '备注', | ||
| 40 | + operation: '操作', | ||
| 41 | + add: '添加', | ||
| 42 | + edit: '修改', | ||
| 43 | + delete: '删除', | ||
| 44 | + confirm: '确认', | ||
| 45 | + cancel: '取消', | ||
| 46 | + deleteConfirm: '确定删除优惠券?', | ||
| 47 | + deleteTitle: '请确认您的操作', | ||
| 48 | + required: '必填', | ||
| 49 | + addTitle: '添加优惠券', | ||
| 50 | + editTitle: '修改优惠券', | ||
| 51 | + search: '查询', | ||
| 52 | + noData: '暂无数据', | ||
| 53 | + supplierRequired: '请先选择供应商' | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | +} | ||
| 0 | \ No newline at end of file | 57 | \ No newline at end of file |
src/views/scm/supplierCouponList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="supplier-coupon-container"> | ||
| 3 | + | ||
| 4 | + | ||
| 5 | + <el-row :gutter="20"> | ||
| 6 | + <el-col :span="4"> | ||
| 7 | + <el-card class="supplier-list"> | ||
| 8 | + <ul class="supplier-ul"> | ||
| 9 | + <li v-for="(supplier, index) in suppliers" :key="index" | ||
| 10 | + :class="{ 'active': supplier.supplierId === curSupplier.supplierId }" @click="switchSupplier(supplier)"> | ||
| 11 | + {{ supplier.supplierName }} | ||
| 12 | + </li> | ||
| 13 | + </ul> | ||
| 14 | + </el-card> | ||
| 15 | + </el-col> | ||
| 16 | + | ||
| 17 | + <el-col :span="20"> | ||
| 18 | + <el-card> | ||
| 19 | + <div slot="header" class="text-left"> | ||
| 20 | + <span>{{ $t('supplierCoupon.searchConditions') }}</span> | ||
| 21 | + </div> | ||
| 22 | + | ||
| 23 | + <el-form :inline="true" :model="conditions" class="demo-form-inline text-left"> | ||
| 24 | + <el-form-item :label="$t('supplierCoupon.name')"> | ||
| 25 | + <el-input v-model="conditions.name" :placeholder="$t('supplierCoupon.name')"></el-input> | ||
| 26 | + </el-form-item> | ||
| 27 | + | ||
| 28 | + <el-form-item :label="$t('supplierCoupon.businessId')"> | ||
| 29 | + <el-input v-model="conditions.businessKey" :placeholder="$t('supplierCoupon.businessId')"></el-input> | ||
| 30 | + </el-form-item> | ||
| 31 | + | ||
| 32 | + <el-form-item> | ||
| 33 | + <el-button type="primary" @click="querySupplierCoupon"> | ||
| 34 | + {{ $t('supplierCoupon.search') }} | ||
| 35 | + </el-button> | ||
| 36 | + </el-form-item> | ||
| 37 | + </el-form> | ||
| 38 | + </el-card> | ||
| 39 | + | ||
| 40 | + <el-card class="coupon-list"> | ||
| 41 | + <div slot="header" class="flex justify-between"> | ||
| 42 | + <span>{{ $t('supplierCoupon.couponInfo') }}</span> | ||
| 43 | + <el-button type="primary" size="small" style="float: right;" @click="openAddDialog"> | ||
| 44 | + {{ $t('supplierCoupon.add') }} | ||
| 45 | + </el-button> | ||
| 46 | + </div> | ||
| 47 | + | ||
| 48 | + <el-table :data="supplierCoupons" style="width: 100%" v-loading="loading"> | ||
| 49 | + <el-table-column prop="couponId" :label="$t('supplierCoupon.name')" align="center" /> | ||
| 50 | + <el-table-column prop="name" :label="$t('supplierCoupon.name')" align="center" /> | ||
| 51 | + <el-table-column prop="supplierName" :label="$t('supplierCoupon.supplier')" align="center" /> | ||
| 52 | + <el-table-column prop="businessKey" :label="$t('supplierCoupon.thirdPartyId')" align="center" /> | ||
| 53 | + <el-table-column prop="valuePrice" :label="$t('supplierCoupon.price')" align="center" /> | ||
| 54 | + <el-table-column prop="remark" :label="$t('supplierCoupon.remark')" align="center" /> | ||
| 55 | + <el-table-column :label="$t('supplierCoupon.operation')" align="center"> | ||
| 56 | + <template slot-scope="scope"> | ||
| 57 | + <el-button size="mini" @click="openEditDialog(scope.row)"> | ||
| 58 | + {{ $t('supplierCoupon.edit') }} | ||
| 59 | + </el-button> | ||
| 60 | + <el-button size="mini" type="danger" @click="openDeleteDialog(scope.row)"> | ||
| 61 | + {{ $t('supplierCoupon.delete') }} | ||
| 62 | + </el-button> | ||
| 63 | + </template> | ||
| 64 | + </el-table-column> | ||
| 65 | + </el-table> | ||
| 66 | + | ||
| 67 | + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" | ||
| 68 | + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size" | ||
| 69 | + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total" style="margin-top: 20px;"> | ||
| 70 | + </el-pagination> | ||
| 71 | + </el-card> | ||
| 72 | + </el-col> | ||
| 73 | + </el-row> | ||
| 74 | + | ||
| 75 | + <add-supplier-coupon ref="addDialog" @success="handleAddSuccess" /> | ||
| 76 | + <edit-supplier-coupon ref="editDialog" @success="handleEditSuccess" /> | ||
| 77 | + <delete-supplier-coupon ref="deleteDialog" @success="handleDeleteSuccess" /> | ||
| 78 | + </div> | ||
| 79 | +</template> | ||
| 80 | + | ||
| 81 | +<script> | ||
| 82 | +import { getSupplierList, getSupplierCouponList } from '@/api/scm/supplierCouponApi' | ||
| 83 | +import AddSupplierCoupon from '@/components/scm/addSupplierCoupon' | ||
| 84 | +import EditSupplierCoupon from '@/components/scm/editSupplierCoupon' | ||
| 85 | +import DeleteSupplierCoupon from '@/components/scm/deleteSupplierCoupon' | ||
| 86 | + | ||
| 87 | +export default { | ||
| 88 | + name: 'SupplierCouponList', | ||
| 89 | + components: { | ||
| 90 | + AddSupplierCoupon, | ||
| 91 | + EditSupplierCoupon, | ||
| 92 | + DeleteSupplierCoupon | ||
| 93 | + }, | ||
| 94 | + data() { | ||
| 95 | + return { | ||
| 96 | + suppliers: [], | ||
| 97 | + curSupplier: {}, | ||
| 98 | + supplierCoupons: [], | ||
| 99 | + loading: false, | ||
| 100 | + conditions: { | ||
| 101 | + name: '', | ||
| 102 | + businessKey: '', | ||
| 103 | + supplierId: '' | ||
| 104 | + }, | ||
| 105 | + pagination: { | ||
| 106 | + current: 1, | ||
| 107 | + size: 10, | ||
| 108 | + total: 0 | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + }, | ||
| 112 | + mounted() { | ||
| 113 | + this.getSupplierList() | ||
| 114 | + }, | ||
| 115 | + methods: { | ||
| 116 | + async getSupplierList() { | ||
| 117 | + try { | ||
| 118 | + const res = await getSupplierList({ | ||
| 119 | + page: 1, | ||
| 120 | + row: 100 | ||
| 121 | + }) | ||
| 122 | + this.suppliers = res.data | ||
| 123 | + if (this.suppliers.length > 0) { | ||
| 124 | + this.switchSupplier(this.suppliers[0]) | ||
| 125 | + } | ||
| 126 | + } catch (error) { | ||
| 127 | + this.$message.error(this.$t('supplierCoupon.fetchError')) | ||
| 128 | + } | ||
| 129 | + }, | ||
| 130 | + | ||
| 131 | + async getSupplierCouponList() { | ||
| 132 | + this.loading = true | ||
| 133 | + try { | ||
| 134 | + const params = { | ||
| 135 | + ...this.conditions, | ||
| 136 | + page: this.pagination.current, | ||
| 137 | + row: this.pagination.size | ||
| 138 | + } | ||
| 139 | + const res = await getSupplierCouponList(params) | ||
| 140 | + this.supplierCoupons = res.data | ||
| 141 | + this.pagination.total = res.total | ||
| 142 | + } catch (error) { | ||
| 143 | + this.$message.error(this.$t('supplierCoupon.fetchError')) | ||
| 144 | + } finally { | ||
| 145 | + this.loading = false | ||
| 146 | + } | ||
| 147 | + }, | ||
| 148 | + | ||
| 149 | + switchSupplier(supplier) { | ||
| 150 | + this.curSupplier = supplier | ||
| 151 | + this.conditions.supplierId = supplier.supplierId | ||
| 152 | + this.pagination.current = 1 | ||
| 153 | + this.getSupplierCouponList() | ||
| 154 | + }, | ||
| 155 | + | ||
| 156 | + querySupplierCoupon() { | ||
| 157 | + this.pagination.current = 1 | ||
| 158 | + this.getSupplierCouponList() | ||
| 159 | + }, | ||
| 160 | + | ||
| 161 | + handleSizeChange(size) { | ||
| 162 | + this.pagination.size = size | ||
| 163 | + this.getSupplierCouponList() | ||
| 164 | + }, | ||
| 165 | + | ||
| 166 | + handleCurrentChange(current) { | ||
| 167 | + this.pagination.current = current | ||
| 168 | + this.getSupplierCouponList() | ||
| 169 | + }, | ||
| 170 | + | ||
| 171 | + openAddDialog() { | ||
| 172 | + if (!this.curSupplier.supplierId) { | ||
| 173 | + this.$message.warning(this.$t('supplierCoupon.supplierRequired')) | ||
| 174 | + return | ||
| 175 | + } | ||
| 176 | + this.$refs.addDialog.open({ | ||
| 177 | + supplierId: this.curSupplier.supplierId | ||
| 178 | + }) | ||
| 179 | + }, | ||
| 180 | + | ||
| 181 | + openEditDialog(row) { | ||
| 182 | + this.$refs.editDialog.open(row) | ||
| 183 | + }, | ||
| 184 | + | ||
| 185 | + openDeleteDialog(row) { | ||
| 186 | + this.$refs.deleteDialog.open(row) | ||
| 187 | + }, | ||
| 188 | + | ||
| 189 | + handleAddSuccess() { | ||
| 190 | + this.getSupplierCouponList() | ||
| 191 | + }, | ||
| 192 | + | ||
| 193 | + handleEditSuccess() { | ||
| 194 | + this.getSupplierCouponList() | ||
| 195 | + }, | ||
| 196 | + | ||
| 197 | + handleDeleteSuccess() { | ||
| 198 | + this.getSupplierCouponList() | ||
| 199 | + } | ||
| 200 | + } | ||
| 201 | +} | ||
| 202 | +</script> | ||
| 203 | + | ||
| 204 | +<style scoped> | ||
| 205 | +.supplier-coupon-container { | ||
| 206 | + padding: 20px; | ||
| 207 | +} | ||
| 208 | + | ||
| 209 | +.supplier-list { | ||
| 210 | + height: calc(100vh - 200px); | ||
| 211 | + overflow-y: auto; | ||
| 212 | +} | ||
| 213 | + | ||
| 214 | +.supplier-ul { | ||
| 215 | + list-style: none; | ||
| 216 | + padding: 0; | ||
| 217 | + margin: 0; | ||
| 218 | +} | ||
| 219 | + | ||
| 220 | +.supplier-ul li { | ||
| 221 | + padding: 10px; | ||
| 222 | + cursor: pointer; | ||
| 223 | + border-bottom: 1px solid #eee; | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +.supplier-ul li:hover { | ||
| 227 | + background-color: #f5f7fa; | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +.supplier-ul li.active { | ||
| 231 | + background-color: #409eff; | ||
| 232 | + color: white; | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +.coupon-list { | ||
| 236 | + margin-top: 20px; | ||
| 237 | +} | ||
| 238 | + | ||
| 239 | +.demo-form-inline { | ||
| 240 | + margin-bottom: 0; | ||
| 241 | +} | ||
| 242 | +</style> | ||
| 0 | \ No newline at end of file | 243 | \ No newline at end of file |