| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- <template>
- <div class="app-list-content">
- <cl-crud class="liu-crud-wrap" @load="onLoad">
- <template #slot-tabs="{ scope }">
- <el-tabs
- class="liu-tabs"
- type="border-card"
- v-model="tabIndex"
- @tab-click="handleClick"
- >
- <el-tab-pane
- v-for="(item, index) in tabsData"
- :key="index"
- :label="`${item.text}(${item.val})`"
- :name="item.key"
- ></el-tab-pane>
- </el-tabs>
- </template>
- <template #table-column-avatarUrl="{scope}">
- <cl-avatar
- shape="square"
- :size="40"
- :src="scope.row.avatarUrl | default_avatar"
- :style="{ margin: 'auto' }"
- ></cl-avatar>
- </template>
- <template #table-column-balance="{scope}">
- <span>{{ scope.row.userAsset.balance }}</span>
- </template>
- <template #table-column-growth="{scope}">
- <span>{{ scope.row.userAsset.growth }}</span>
- </template>
- <!-- 充值 -->
- <template #slot-recharge="{scope}">
- <el-button type="text" @click="rechargeDialog = true">充值</el-button>
- </template>
- <!-- 升级 -->
- <template #slot-upgrade="{scope}">
- <el-button type="text" @click="upgradeDialog = true">升级</el-button>
- </template>
- <!-- 发货 -->
- <template #slot-ship="{scope}">
- <el-button type="text" @click="$message('开发中...')">发货</el-button>
- </template>
- </cl-crud>
- <!-- 充值 -->
- <el-dialog
- title="充值"
- :visible.sync="rechargeDialog"
- :close-on-click-modal="false"
- width="400px"
- >
- <div class="recharge-modal-content">
- <el-form
- :model="rechargeForm"
- :rules="rechargeRules"
- ref="rechargeForm"
- label-width="80px"
- class="demo-form"
- >
- <el-form-item label="充值金额">
- <el-input
- v-model="rechargeForm.rechargeAmount"
- placeholder="充值金额"
- size="small"
- ></el-input>
- </el-form-item>
- <el-form-item label="确认密码">
- <el-input
- v-model="rechargeForm.confirmPassword"
- type="password"
- placeholder="确认密码"
- size="small"
- ></el-input>
- </el-form-item>
- </el-form>
- </div>
- <div slot="footer" class="dialog-footer">
- <el-button size="small" @click="resetForm">取 消</el-button>
- <el-button type="primary" size="small" @click="rechargeAmount">充值</el-button>
- </div>
- </el-dialog>
- <!-- 升级 -->
- <el-dialog
- title="升级"
- :visible.sync="upgradeDialog"
- :close-on-click-modal="false"
- width="400px"
- >
- <div class="recharge-modal-content">
- <el-form
- :model="upgradeForm"
- :rules="upgradeRules"
- ref="upgradeForm"
- label-width="100px"
- class="demo-form"
- >
- <el-form-item label="请选择等级">
- <el-select v-model="upgradeForm.member" size="small" placeholder="请选择">
- <el-option
- v-for="(item, index) in levelData.list"
- :key="index"
- :label="`${item.level}`"
- :value="item.level"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="确认密码">
- <el-input
- v-model="upgradeForm.confirmPassword"
- placeholder="确认密码"
- type="password"
- size="small"
- ></el-input>
- </el-form-item>
- </el-form>
- </div>
- <div slot="footer" class="dialog-footer">
- <el-button size="small" @click="resetForm">取 消</el-button>
- <el-button type="primary" size="small" @click="upgradeAmount">充值</el-button>
- </div>
- </el-dialog>
- </div>
- </template>
- <script>
- import { mapGetters } from 'vuex';
- export default {
- data() {
- return {
- // cl-crud
- app: null,
- tabIndex: '-1',
- tabsData: [
- {
- text: '全部',
- key: '-1',
- val: 0
- },
- {
- text: '粉丝',
- key: '1',
- val: 0
- },
- {
- text: '会员',
- key: '2',
- val: 0
- }
- ],
- // recharge
- rechargeDialog: false,
- rechargeForm: {
- rechargeAmount: '',
- confirmPassword: ''
- },
- rechargeRules: {},
- // upgrade
- upgradeDialog: false,
- upgradeForm: {
- member: '',
- confirmPassword: ''
- },
- upgradeRules: {}
- };
- },
- computed: {
- ...mapGetters({ levelData: 'level' })
- },
- created() {
- // this.$store.dispatch('getLevel');
- },
- mounted() {},
- methods: {
- handleClick(tab, e) {
- console.log(tab, e);
- this.app.refresh({ type: this.tabIndex });
- },
- // 充值
- rechargeAmount() {
- this.$service.member.recharge(this.rechargeForm).then(res => {
- console.log(res);
- this.resetForm();
- });
- },
- // 升级
- upgradeAmount() {
- this.$service.member.upgrade(this.upgradeForm).then(res => {
- console.log(res);
- this.resetForm();
- });
- },
- resetForm() {
- try {
- this.$refs['rechargeForm'].resetFields();
- } catch (e) {}
- try {
- this.$refs['upgradeForm'].resetFields();
- } catch (e) {}
- this.rechargeDialog = false;
- this.upgradeDialog = false;
- },
- // crud
- onLoad({ ctx, app }) {
- this.app = app;
- ctx.service(this.$service.member)
- .set('table', {
- columns: [
- {
- prop: 'id',
- label: 'ID',
- align: 'center'
- },
- {
- prop: 'avatarUrl',
- label: '头像',
- align: 'center'
- },
- {
- prop: 'userName',
- label: '来源 昵称',
- align: 'center'
- },
- {
- prop: 'mobile',
- label: '手机号',
- align: 'center'
- },
- {
- prop: 'actPrice',
- label: '会员级别',
- align: 'center',
- emptyText: '无',
- 'min-width': 150
- },
- {
- prop: 'balance',
- label: '余额',
- align: 'center'
- },
- {
- prop: 'growth',
- label: '成长值',
- align: 'center'
- },
- {
- prop: 'subscribe',
- label: '关注公众号',
- align: 'center',
- sortable: true,
- width: 150
- },
- {
- prop: 'visitTimeFormat',
- label: '最近访问',
- align: 'center'
- }
- ],
- // 操作列
- op: {
- visible: true, // 是否显示
- // 同 element-ui Table-column Attributes
- props: {
- width: 150,
- align: 'center',
- fixed: 'right',
- label: '操作'
- },
- // 布局,请移步 `layout`
- layout: ['slot-recharge', 'slot-upgrade', 'slot-ship']
- }
- })
- .set('upsert', {
- props: {
- width: '600px',
- 'label-width': '120px'
- },
- items: [
- {
- prop: 'mobile',
- label: '手机号码',
- span: 24,
- component: {
- name: 'el-input',
- attrs: {
- placeholder: '请填写手机号码'
- }
- },
- rules: {
- required: true,
- message: '请填写手机号码'
- }
- },
- {
- prop: 'confirmMobile',
- label: '确认手机号码',
- span: 24,
- component: {
- name: 'el-input',
- attrs: {
- placeholder: '请填写确认手机号码'
- }
- },
- rules: {
- required: true,
- message: '请填写确认手机号码'
- }
- },
- {
- prop: 'balance',
- label: '余额',
- span: 24,
- component: {
- name: 'el-input',
- attrs: {
- placeholder: '请填写余额'
- }
- },
- rules: {
- required: true,
- message: '请填写余额'
- }
- },
- {
- prop: 'memberLevel',
- label: '会员级别',
- span: 24,
- component: {
- name: 'el-select',
- attrs: {
- placeholder: '请选择'
- },
- options: this.$util.isEmpty(this.levelData)
- ? []
- : this.levelData.list.map(e => {
- e.label = e.level;
- e.value = e.level;
- return e;
- })
- },
- rules: {
- required: true,
- message: '级别不能为空'
- }
- },
- {
- prop: 'realName',
- label: '姓名',
- span: 24,
- component: {
- name: 'el-input',
- attrs: {
- placeholder: '选填'
- }
- }
- },
- {
- prop: 'confirmPassword',
- label: '确认密码',
- span: 24,
- component: {
- name: 'el-input',
- attrs: {
- placeholder: '请填写确认密码'
- },
- props: {
- placeholder: '请填写确认密码',
- type: 'password'
- }
- },
- rules: [
- {
- required: true,
- message: '密码不能为空'
- },
- {
- min: 6,
- max: 16,
- message: '密码长度在 6 到 16 个字符'
- }
- ]
- },
- {
- prop: 'tips',
- component: (
- <div>
- <i class="el-icon-warning"></i>
- <span style="margin-left: 6px">
- 添加后,申请会员时自动根据手机号识别客户,成长值、等级和余额会自动同步。
- </span>
- </div>
- )
- }
- ]
- })
- .set('layout', [
- ['slot-tabs'],
- ['search-key', 'flex1', 'refresh-btn', 'add-btn'],
- ['data-table'],
- ['flex1', 'pagination']
- ])
- .on('refresh', async (params, { next }) => {
- // 继续执行刷新
- let { asset } = await next(params);
- this.tabsData[0].val = asset.totalUser;
- this.tabsData[1].val = asset.totalMember;
- this.tabsData[2].val = asset.totalFans;
- })
- .done();
- app.refresh({ type: this.tabIndex });
- }
- }
- };
- </script>
|