Commit c9f67a18 by crushh

update: dist

parent d2c2ca90
<template>
<div>
<el-button v-for="item in notDropdownList" :disabled="typeof item.disabled === 'function' ? item.disabled(scopeData) : item.disabled" v-bind="{ type: 'text', ...item.props }" :key="item.text" @click="handleCommand(item)">{{ item.text }}</el-button>
<el-dropdown v-if="buttonArray.length > max" v-bind="{ type: 'text', ...dropdownProps }" @click="() => emitEventHandler('click')" @command="handleCommand" @visible-change="bool => emitEventHandler('visible-change', bool)">
<span class="el-dropdown-link">
<i class="iconfont icon-more"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="item in dropdownList" :class="{ 'item-disabled': typeof item.disabled === 'function' ? item.disabled(scopeData) : item.disabled }" :command="item" :key="item.text">
<el-button :disabled="typeof item.disabled === 'function' ? item.disabled(scopeData) : item.disabled" v-bind="{ type: 'text', ...item.props }">{{ item.text }}</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
<script>
export default {
name: 'dm-dropdown',
components: {},
props: {
dropdownProps: {
//Dropdown Attributes
type: Object,
default: () => {}
},
configs: {
type: Array,
default: () => []
},
max: {
type: [Number, String],
default: 3
},
scopeData: Object
},
methods: {
emitEventHandler(event) {
this.$emit(event, ...Array.from(arguments).slice(1));
},
handleCommand(config) {
if (typeof config.disabled == 'function' ? config.disabled(this.scopeData) : config.disabled) return;
config.handler && config.handler(this.scopeData);
this.emitEventHandler('command', { config, data: this.scopeData });
}
},
computed: {
buttonArray() {
return this.configs.filter(item => {
let visible = item.visible;
if (typeof visible === 'boolean') {
return item.visible;
} else if (typeof visible === 'function') {
return item.visible(this.scopeData);
} else {
return true;
}
});
},
notDropdownList() {
return this.buttonArray.length > this.max ? this.buttonArray.slice(0, this.max - 1) : this.buttonArray;
},
dropdownList() {
return this.buttonArray.length > this.max ? this.buttonArray.slice(this.max - 1) : [];
}
}
};
</script>
<style lang="scss" scoped>
.el-dropdown-link {
cursor: pointer;
color: #2f54eb;
}
.el-button--text + .el-dropdown {
margin-left: 8px;
}
.item-disabled {
cursor: not-allowed;
}
</style>
## 示例
```
<el-table-column
fixed="right"
label="操作"
>
<template slot-scope="scope">
<dm-dropdown :scope-data="scope.row" :configs="btnArr" @command="onCommand"/>
</template>
</el-table-column>
export default {
name: 'btn',
data() {
return {
dropdownAttr: {
// splitButton: true
},
btnArr: [
{
text: '查看',
visible: (row)=>row.status === 2, // 不写visible属性默认为true
handler: (row) =>{
console.log(row)
console.log('查看')
},
},
{
text: '编辑',
handler: (row) =>{
console.log(row)
console.log('编辑')
},
},
{
text: '删除',
handler: (row) =>{
console.log(row)
console.log('删除')
}
},
{
text: '复制',
handler: (row) =>{
console.log(row)
console.log('复制')
},
},
{
text: '禁用',
handler: (row) =>{
console.log(row)
console.log('禁用')
},
}
],
}
},
methods: {
onCommand(item) {
console.log(item)
},
}
}
```
### props
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 是否必传 |
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
| scopeData | - | Object | -- | -- | 否 |
| configs | 按钮数组 | Array | [{text:string(必传), visible: boolean \| function, handler: function,props:按钮属性配置(非必传)}] | -- | 是 |
| dropdownProps | el-dropDown的属性 | Object | -- | -- | 否 |
| max | 最多展示几个按钮 | String/Number | -- | 3 | 否 |
#### events
| 事件名称 | 说明 | 参数 |
| ------------ | ------------ | ------------ |
| command | 按钮触发事件 | {config, data} |
### 更新日志:
- v1.0.0 cr by 黄冷<br>
......@@ -93,7 +93,7 @@
import { page, rechargeCenter, stopActivityPlan, startActivityPlan, pageStatistics, aiAccountCheck } from '@/service/api/aiApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import filterAvater from '@/mixins/filterAvater.js';
import dmDropdown from '@/components/dm-drop-down/dm-drop-down';
const maxTimeRange = 365 * 24 * 60 * 60 * 1000; // 12个月
export default {
mixins: [filterAvater],
......@@ -326,9 +326,6 @@ export default {
}
next();
},
components: {
dmDropdown
},
filters: {
activePlanStatusFilter(val) {
let str = '- -';
......
......@@ -18,7 +18,9 @@
<el-select class="dm-select pl10" v-model="listParams.cardStatus" placeholder="选择卡券状态" @change="refresh">
<el-option v-for="(item, index) in cardStatusOptions" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
<span class="vertical-middle">领取时间:</span><el-date-picker v-model="dateTime" :clearable="false" @change="changeTime" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> <span class="vertical-middle">核销时间:</span><el-date-picker v-model="dateTime2" @change="refresh" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<span class="vertical-middle">领取时间:</span>
<el-date-picker v-model="dateTime" :clearable="false" @change="changeTime" :picker-options="pickerOptionsGet" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<span class="vertical-middle">核销时间:</span><el-date-picker v-model="dateTime2" @change="refresh" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<!-- 列表 -->
<el-table tooltipEffect="light" :data="recordList" style="width: 100%" @sort-change="sortList">
......@@ -130,6 +132,17 @@ import qs from 'qs';
import cardOrder from './card-order';
import tableMethods from '@/mixins/tableMethods.js';
import filterAvater from '@/mixins/filterAvater.js';
let maxTime = null;
let minTime = null;
const daysFun = () => {
let y = new Date().getFullYear() - 1;
let isLeap = (0 === y % 4 && 0 === y % 100) || 0 === y % 400;
let days = isLeap ? 366 : 365;
let preY = new Date().getFullYear() - 2;
let preYisLeap = (0 === preY % 4 && 0 === preY % 100) || 0 === preY % 400;
let prevDays = preYisLeap ? 366 : 365;
return { days, prevDays };
};
export default {
name: 'record-get',
mixins: [tableMethods, filterAvater],
......@@ -142,6 +155,7 @@ export default {
formatDateTimeByType,
dateTime: [],
dateTimeCopy: [],
daysFun,
dateTime2: ['', ''],
// limit: false, // 限制筛选时间前后七天
cardStatusOptions: [
......@@ -186,15 +200,27 @@ export default {
dataArr: [],
pickerOptions: {
disabledDate: time => {
let y = new Date().getFullYear() - 1;
let isLeap = (0 === y % 4 && 0 === y % 100) || 0 === y % 400;
let days = isLeap ? 366 : 365;
let preY = new Date().getFullYear() - 2;
let preYisLeap = (0 === preY % 4 && 0 === preY % 100) || 0 === preY % 400;
let prevDays = preYisLeap ? 366 : 365;
const { days, prevDays } = daysFun();
// let monthDayNum = new Date().getDate() + 1;
return time.getTime() < Date.now() - (days * 8.64e7 + prevDays * 8.64e7) || time.getTime() >= new Date().getTime();
}
},
pickerOptionsGet: {
onPick(time) {
if (!time.maxDate) {
const minTimeRange = 7 * 24 * 60 * 60 * 1000; // 7day
minTime = time.minDate.getTime() - minTimeRange;
maxTime = time.minDate.getTime() + minTimeRange < new Date().getTime() ? time.minDate.getTime() + minTimeRange : new Date().getTime();
}
},
disabledDate: time => {
if (minTime && maxTime && this.listParams.allCouponFlag == 1) {
return time.getTime() < minTime || time.getTime() > maxTime;
} else {
const { days, prevDays } = daysFun();
return time.getTime() < Date.now() - (days * 8.64e7 + prevDays * 8.64e7) || time.getTime() > new Date().getTime();
}
}
}
};
},
......
......@@ -93,10 +93,9 @@ import { cmhPage, stopGame, pageStatistics } from '@/service/api/gameApi.js';
import links from '../common/links';
import { formatDateTimeByType } from '@/utils/index.js';
import img from '@/assets/img/template1/mould_share_page.png';
import dmDropdown from '@/components/dm-drop-down/dm-drop-down';
export default {
components: {
dmDropdown,
links
},
data() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment