gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
426 lines (391 loc) • 10.8 kB
JavaScript
'use strict';
function checkMapIsExist(key,list=[]) {
if(list.length === 0) return null;
let temp = list.filter(item=>{
return key === item;
});
if (temp.length > 0) return temp[0]
else return list[0]
}
/**
* @description 搜索方法
* $vm.handleRemoteSearch(query, resolve, type) 搜索方法需要自己实现
* type = movie/brand/classify/shop 说明:影片/品牌/分类/商品
*/
/**
* @description 获取分类提交表单信息
* @param nameSpace {String} 商品类型 cake/default/gift/movie
*
* @param $vm {Object} 当前页面this
*
* @param setting {Object} 配置选项卡
* setting.status => 归类状态列表
* setting.mode => 操作方式列表
* setting.type => 归类类型
*
* @param data {Object} 编辑时候返回数据
*
*/
export function getClassifiedFrom(nameSpace='default', data = {}, $vm, setting={}){
let form = [];
form = form.concat([
{
label: '归类ID:',
ele: 'el-input',
type: 'text',
valueKey: 'category_id',
value: data.id,
placeholder: '请输入归类名称',
className: 'input40',
disabled: true,
rules: [
{
required: true,
message: '请输入归类名称',
trigger: 'blur'
},
]
},
{
label: '归类名称:',
ele: 'el-input',
type: 'text',
valueKey: 'category_name',
value: data.category_name || '',
placeholder: '请输入归类名称',
className: 'input40',
rules: [
{
required: true,
message: '请输入归类名称',
trigger: 'blur'
},
]
},
{
label: '归类描述:',
ele: 'el-input',
type: 'textarea',
valueKey: 'intro',
value: data.intro || '',
placeholder: '请输入归类描述',
className: 'input40',
},
{
label: '归类状态:',
ele: 'xd-radio',
valueKey: 'status',
value: data.status || 'Y',
rules: [
{required: true, message: '请选择', trigger: ['blur', 'change']}
],
list: setting.status || [
{"label": "启用", "value": 'Y'},
{"label": "禁用", "value": 'N'},
]
},
]);
//设置ID显示
if (!data.id) {
form.splice(0, 1);
}
return form;
}
/**
* @description 获取配置表单
* @param nameSpace {String} 商品类型 cake/default/gift/movie
*
* @param $vm {Object} 当前页面this
*
* @param setting {Object} 配置选项卡
* setting.status => 归类状态列表
* setting.mode => 操作方式列表
* setting.type => 归类类型
*
* @param data {Object} 编辑时候返回数据
*
*/
export function getClassifiedSettingFrom(nameSpace = 'default', $vm, data = {}, setting = { }) {
let form = [];
let {category_id, set_id, category_name} = $vm.$route.params;
form = form.concat([
{
label: '归类ID:',
ele: 'el-input',
type: 'text',
valueKey: 'category_id',
value: category_id,
placeholder: '请输入归类名称',
className: 'input40',
disabled: true,
},
{
label: '归类名称:',
ele: 'el-input',
type: 'text',
valueKey: 'category_name',
value: category_name,
placeholder: '请输入归类名称',
className: 'input40',
disabled: true,
},
{
label: '归类配置ID:',
ele: 'el-input',
type: 'text',
valueKey: 'set_id',
value: set_id || '',
placeholder: '请输入归类名称',
className: 'input40',
disabled: true,
},
]);
//设置ID显示
if (!set_id) {
form.splice(2, 1);
}
//大礼包
if (nameSpace === 'gift') {
form = form.concat([
{
label: '所属礼包池::',
ele: 'xd-select-list',
valueKey: 'gift_pool',
value: '',
placeholder: '请选择所属礼包池',
className: 'input40',
list: [
{"label": "万利达集团", "value": 4},
{"label": "中国联通", "value": 5},
{"label": "中国移动", "value": 6},
{"label": "味多美", "value": 7},
]
},
{
label: '是否公开:',
ele: 'xd-radio',
valueKey: 'is_public',
value: 2,
list: setting.mode || [
{"label": "公开", "value": 1},
{"label": "不公开", "value": 2},
]
},
{
label: '归类图片:',
ele: 'xd-upload',
valueKey: 'image',
value: {},
defaultValue: null,
slot: true,
oneWidth: 120,
oneHeight: 120,
elinputClassName: 'input40',
tipsformet: '上传文件格式:@imageType@,不超过@size@MB.',
type: ['jpg', 'png', 'jpeg'],
styleType: 'one',
uploadType: 'aliyun',
size: 5, //5M
action: 'https://up-z1.qiniup.com',
rules: [
{required: true, message: '请上传图片', trigger: ['blur', 'change']},
]
},
]);
}
//电影
else if (nameSpace === 'movie') {
form = form.concat([
{
label: '影片归类选择:',
ele: 'xd-radio',
valueKey: 'selection_method',
value: data.selection_method || 'regular',
rules: [
{required: true, message: '请选择影片归类类型', trigger: ['blur', 'change']}
],
list: setting.mode || [
{"label": "正选", "value": 'regular'},
{"label": "反选", "value": 'inverse'},
]
},
{
label: '',
ele: 'xd-remote-select',
valueKey: 'film_data',
value: data.film_data || [
{value: '28', label: '1921'},
{value: '39', label: '守岛人'},
],
className: 'input40',
placeholder: '请选择影片',
multiple: true,
collapseTags: false,
remoteSearch: (query, resolve) => {
if (typeof $vm.handleRemoteSearch === 'function') {
$vm.handleRemoteSearch(query, resolve, 'movie')
} else throw new Error('$vm.handleRemoteSearch 未定义,需要实现该方法')
},
rules: [
{required: true, message: '请选择影片', trigger: 'change'},
]
},
]);
}
//其他
else {
form = form.concat([
{
label: '归类选择:',
ele: 'xd-radio',
valueKey: 'type',
value: 'classify',
rules: [
{required: true, message: '请选择归类类型:', trigger: ['blur', 'change']}
],
list: setting.type || [
{"label": "分类", "value": 'classify'},
{"label": "商品", "value": 'shop'},
{"label": "品牌", "value": 'brand'},
]
},
{
label: '', //label
ele: 'slot', //package 名称
slot: 'type',
},
]);
}
return form;
}
/**
* @description 获取默认归类模式下的分类
* @param type {String} classify/brand/shop
* @param $vm {Object} 当前页面this
* @param setting {Object} 配置选项卡
* setting.mode => 操作方式列表
*
*/
export function getDefaultFrom(type, setting, $vm){
let form = [];
type = checkMapIsExist(type, ['classify','brand','shop'])
form = form.concat([
{
label: '',
ele: 'xd-radio',
valueKey: 'mode',
value: '',
rules: [
{required: true, message: '请选择操作方式', trigger: ['blur', 'change']}
],
list: setting.mode || [
{"label": "正选", "value": 1},
{"label": "反选", "value": 2},
]
},
{
label: '',
ele: 'xd-remote-select',
valueKey: 'movie',
value: [
],
className: 'input40',
placeholder: '请选择',
multiple: true,
collapseTags: false,
remoteSearch: (query, resolve) => {
if (typeof $vm.handleRemoteSearch === 'function') {
$vm.handleRemoteSearch(query, resolve, 'movie')
} else throw new Error('$vm.handleRemoteSearch 未定义,需要实现该方法')
},
rules: [
{required: true, message: '请选择', trigger: 'change'},
]
},
]);
return form;
}
/**
* @description 获取搜索表头
* @param setting {Object} 配置选项卡
* setting.status => 状态列表
* @returns {*[]}
*/
export function getSearchForm(setting) {
let form = [
{
label: '归类名称:',
ele: 'el-input',
type: 'text',
valueKey: 'category_name',
value: '',
placeholder: '请输入归类名称',
},
{
label: '状态:',
ele: 'xd-select-list',
valueKey: 'status',
value: 1,
list: setting.status || [
{"label": "正选", "value": 1},
{"label": "反选", "value": 2},
]
},
];
return form
}
/**
* @description 获取列表表格表头
* @param type {String} 商品类型 cake/default/gift/movie
*/
export function getTableHeaders(type = 'default') {
//检查type是否正确,不正确使用第一个值
type = checkMapIsExist(type, ['default', 'gift', 'movie']);
//设置默认值
let isDefault = true;
if (type === 'gift') {
isDefault = false
}
//是否显示配置按钮
let isSettings = true;
// if(type === 'gift') {
// isSettings = true;
// }
let header = [
{"type": "normal", "prop": "id", "align": "center", "width": 120, "label": "ID"},
{"type": "normal", "prop": "category_name", "align": "center", "minWidth": 200, "label": "名称"},
];
if(type === 'gift') {
header = header.concat([
{"type": "image", "prop": "image", "align": "center", "width": 120, "height": 120, "label": "体验二维码"},
{"type": "normal", "prop": "erCode", "align": "center", "width": 130, "label": "一选二二维码"},
]);
}
header = header.concat([
{"type": "normal", "prop": "intro", "align": "center", "minWidth": 200, "label": "归类描述"},
{"type": "status", "prop": "status", "align": "center", "width": 90, "label": "状态", "message": ['已使用', '未使用']},
{"type": "normal", "prop": "created_time", "align": "center", "width": 180, "label": "创建时间"},
])
//按钮
let values = [
{"ui": "text-button", "name": "编辑", "type": "primary"},
];
//是否显示配置按钮
if(isSettings) {
values = values.concat([
{"ui": "text-button", "name": "配置", "type": "primary"},
])
}
//是否显示海报按钮
if (!isDefault) values = values.concat([
{"ui": "text-button", "name": "下载海报", "type": "primary"},
]);
return header.concat([{
"type": "operate",
"align": "center",
"prop": "operate",
"width": isDefault ? 135 : 220,
"label": "操作",
values: values
}])
}