Commit aef38358 authored by youjie's avatar youjie

no message

parent f8c01d69
This diff is collapsed.
.row{
display: flex;
flex-direction: row;
}
.column{
display: flex;
flex-direction: column;
}
.col{
flex: 1;
}
.justify-start{
justify-content: start;
}
.justify-between{
justify-content: space-between;
}
.justify-center{
justify-content: center;
}
.justify-end{
justify-content: end;
}
.items-start{
align-items: start;
}
.items-center{
align-items: center;
}
.items-end{
align-items: end;
}
.wrap{
flex-wrap: wrap;
}
.no-wrap{
flex-wrap: nowrap;
}
.pa-lg{
padding: 20px;
}
.pa-md{
padding: 15px;
}
.pa-sm{
padding: 10px;
}
.pa-xs{
padding: 5px;
}
.pt-lg{
padding-top: 20px;
}
.pt-md{
padding-top: 15px;
}
.pt-sm{
padding-top: 10px;
}
.pt-xs{
padding-top: 5px;
}
.pb-lg{
padding-bottom: 20px;
}
.pb-md{
padding-bottom: 15px;
}
.pb-sm{
padding-bottom: 10px;
}
.pb-xs{
padding-bottom: 5px;
}
.pl-lg{
padding-left: 20px;
}
.pl-md{
padding-left: 15px;
}
.pl-sm{
padding-left: 10px;
}
.pl-xs{
padding-left: 5px;
}
.pr-lg{
padding-right: 20px;
}
.pr-md{
padding-right: 15px;
}
.pr-sm{
padding-right: 10px;
}
.pr-xs{
padding-right: 5px;
}
.ma-lg{
margin: 20px;
}
.ma-md{
margin: 15px;
}
.ma-sm{
margin: 10px;
}
.ma-xs{
margin: 5px;
}
.mt-lg{
margin-top: 20px;
}
.mt-md{
margin-top: 15px;
}
.mt-sm{
margin-top: 10px;
}
.mt-xs{
margin-top: 5px;
}
.mb-lg{
margin-bottom: 20px;
}
.mb-md{
margin-bottom: 15px;
}
.mb-sm{
margin-bottom: 10px;
}
.mb-xs{
margin-bottom: 5px;
}
.ml-lg{
margin-left: 20px;
}
.ml-md{
margin-left: 15px;
}
.ml-sm{
margin-left: 10px;
}
.ml-xs{
margin-left: 5px;
}
.mr-lg{
margin-right: 20px;
}
.mr-md{
margin-right: 15px;
}
.mr-sm{
margin-right: 10px;
}
.mr-xs{
margin-right: 5px;
}
.pointer{
cursor: pointer;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
// 酒店列表配置
export const hotelListConfig = {
// 表格基础配置
tableConfig: {
height: '100%',
border: true,
stripe: true,
size: 'mini',
'empty-text': '暂无酒店数据'
},
// 分页配置
paginationConfig: {
background: true,
layout: 'total, prev, pager, next, jumper',
'pager-count': 7,
'hide-on-single-page': false
},
// 列配置工厂函数
createColumns: (cityList = []) => [
{
label: '城市',
prop: 'CityCode',
minWidth: 100,
fixed: 'left',
slot: 'city'
},
{
label: '酒店名称',
prop: 'Name',
minWidth: 200,
fixed: 'left',
type: 'link'
},
{
label: '星级',
prop: 'Star',
minWidth: 100,
slot: 'star'
},
{
label: '成團間數',
prop: 'CTJS',
minWidth: 100,
slot: 'groupCount'
},
{
label: '總房間數',
prop: 'RoomNumber',
minWidth: 100,
slot: 'roomCount'
},
{
label: '開業年份',
prop: 'OpenTime',
minWidth: 100,
emptyText: '-'
},
{
label: '合約最終日期',
prop: 'ContractTime',
minWidth: 100,
emptyText: '-'
},
{
label: '官网',
prop: 'URL',
minWidth: 200,
slot: 'website'
},
{
label: '最后更新日期',
prop: 'UpdateTimeStr',
minWidth: 120,
emptyText: '-'
}
],
// 操作列配置
actionColumn: {
label: '操作',
width: 120,
actions: [
{
key: 'edit',
label: '修改',
type: 'text'
},
{
key: 'delete',
label: '删除',
type: 'text',
className: 'delete-btn'
}
]
},
// 高级查询配置
advancedSearchConfig: {
title: '高级查询',
buttonText: '高级查询',
width: 600,
fields: [
{
key: 'starLevel',
label: '星级',
type: 'select',
placeholder: '选择星级',
span: 8,
options: [
{ label: '1星', value: '1' },
{ label: '2星', value: '2' },
{ label: '3星', value: '3' },
{ label: '4星', value: '4' },
{ label: '5星', value: '5' }
]
},
{
key: 'openTimeStart',
label: '开业年份',
type: 'date',
dateType: 'year',
placeholder: '开始年份',
span: 8
},
{
key: 'openTimeEnd',
label: '至',
type: 'date',
dateType: 'year',
placeholder: '结束年份',
span: 8
},
{
key: 'roomNumberMin',
label: '房间数',
type: 'input',
inputType: 'number',
placeholder: '最小房间数',
span: 8
},
{
key: 'roomNumberMax',
label: '至',
type: 'input',
inputType: 'number',
placeholder: '最大房间数',
span: 8
},
{
key: 'hasWebsite',
label: '有官网',
type: 'select',
placeholder: '选择',
span: 8,
options: [
{ label: '有官网', value: '1' },
{ label: '无官网', value: '0' }
]
},
{
key: 'ctjsMin',
label: '成团间数',
type: 'input',
inputType: 'number',
placeholder: '最小成团间数',
span: 8
},
{
key: 'ctjsMax',
label: '至',
type: 'input',
inputType: 'number',
placeholder: '最大成团间数',
span: 8
},
{
key: 'contractTimeStart',
label: '合约日期',
type: 'date',
placeholder: '开始日期',
valueFormat: 'yyyy-MM-dd',
span: 8
},
{
key: 'contractTimeEnd',
label: '至',
type: 'date',
placeholder: '结束日期',
valueFormat: 'yyyy-MM-dd',
span: 8
}
]
},
// 工具操作配置
toolActions: [
{ command: 'export', label: '导出' },
{ command: 'import', label: '导入' }
],
// 抽屉配置
drawerConfig: {
title: '酒店信息',
size: '90%',
direction: 'rtl'
},
// API 配置
apiConfig: {
list: 'hotel_post_GetPageList',
delete: 'hotel_post_Remove',
cityList: 'dict_post_Destination_GetCityList'
}
}
// 导出默认配置
export default hotelListConfig
// 列表管理通用 Mixin
export const addEditMixin = {
data() {
return {
//用户信息
userInfo: {},
//单选产品订单状态
OrderStatusType: [
{ Name: this.$t('OrderList.orderStatus.apply'), ID: '1' },
{ Name: this.$t('OrderList.orderStatus.check'), ID: '2' },
{ Name: this.$t('OrderList.orderStatus.cancel'), ID: '3' },
{ Name: this.$t('OrderList.orderStatus.sun'), ID: '4' },
],
//取消订单备注
cancelRemark: '',
};
},
created() {
this.getUserInfo()
},
methods: {
getUserInfo(){
this.userInfo =this.getLocalStorage()
},
}
};
export default addEditMixin;
// 列表管理通用 Mixin
export const listManagerMixin = {
data() {
return {
// 数据
dataList: [],
loading: false,
// 分页
pagination: {
currentPage: 1,
pageSize: 25,
total: 0
},
// 查询参数
queryParams: {
pageIndex: 1,
pageSize: 25
},
// 选中的行
selectedRows: [],
employeeMsg: { // 员工
GroupId: '',
BranchId: -1,
DepartmentId: 0,
PostId: 0,
IsLeave: 0,
},
EmployeeList: [],//员工
};
},
created() {
this.employeeMsg.GroupId = this.getLocalStorage().RB_Group_id; //集团ID
this.getEmployee()
},
methods: {
async getEmployee() { //员工
try {
this.apipost('admin_get_EmployeeGetList', this.employeeMsg, res => {
if (res.data.resultCode == 1) {
this.EmployeeList = res.data.data;
}
}, err => {})
} catch (error) {
console.error("加载数据失败:", error);
this.$message.error("网络请求失败");
return null;
} finally {
}
},
// 通用数据加载方法
async loadData(apiName, params = {}) {
this.loading = true;
try {
const queryParams = { ...this.queryParams, ...params };
const response = await this.apipost(apiName, queryParams);
if (response.data.resultCode === 1) {
this.dataList =
response.data.data.pageData || response.data.data || [];
this.pagination.total =
response.data.data.count || response.data.data.length || 0;
return response.data.data;
} else {
this.$message.error(response.data.message || "加载数据失败");
return null;
}
} catch (error) {
console.error("加载数据失败:", error);
this.$message.error("网络请求失败");
return null;
} finally {
this.loading = false;
}
},
// 通用删除方法
async deleteItem(apiName, id, idField = "ID") {
try {
const params = {};
params[idField] = id;
const response = await this.apipost(apiName, params);
if (response.data.resultCode === 1) {
this.$message.success("删除成功");
return true;
} else {
this.$message.error(response.data.message || "删除失败");
return false;
}
} catch (error) {
console.error("删除失败:", error);
this.$message.error("删除失败");
return false;
}
},
// 通用确认删除
confirmDelete(message = "确定要删除这条记录吗?") {
return this.$confirm(message, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
});
},
// 筛选变化处理
handleFilterChange({ key, value }) {
if (value === null || value === undefined) {
delete this.queryParams[key];
} else {
this.queryParams[key] = value;
}
this.resetPagination();
this.refresh();
},
// 高级查询处理
handleAdvancedSearch(filters) {
// 清除之前的高级筛选条件
Object.keys(filters).forEach(key => {
delete this.queryParams[key];
});
// 设置新的筛选条件
Object.keys(filters).forEach(key => {
const value = filters[key];
if (value !== "" && value !== null && value !== undefined) {
this.queryParams[key] = value;
}
});
this.resetPagination();
this.refresh();
},
// 分页变化处理
handlePageChange(page) {
this.queryParams.pageIndex = page;
this.pagination.currentPage = page;
this.refresh();
},
// 页面大小变化处理
handleSizeChange(size) {
this.queryParams.pageSize = size;
this.pagination.pageSize = size;
this.resetPagination();
this.refresh();
},
// 排序变化处理
handleSortChange({ column, prop, order }) {
if (order) {
this.queryParams.sortField = prop;
this.queryParams.sortOrder = order === "ascending" ? "asc" : "desc";
} else {
delete this.queryParams.sortField;
delete this.queryParams.sortOrder;
}
this.refresh();
},
// 选择变化处理
handleSelectionChange(selection) {
this.selectedRows = selection;
},
// 重置分页
resetPagination() {
this.queryParams.pageIndex = 1;
this.pagination.currentPage = 1;
},
// 刷新数据
refresh() {
// 子组件需要实现这个方法
if (this.loadListData) {
this.loadListData();
}
},
// 获取选中的行
getSelectedRows() {
return this.selectedRows;
},
// 获取选中的ID列表
getSelectedIds(idField = "ID") {
return this.selectedRows.map(row => row[idField]);
},
// 清除选择
clearSelection() {
if (this.$refs.listManager) {
this.$refs.listManager.clearSelection();
}
},
// 批量操作确认
confirmBatchOperation(message, minCount = 1) {
if (this.selectedRows.length < minCount) {
this.$message.warning(`请至少选择 ${minCount} 条记录`);
return Promise.reject();
}
return this.$confirm(
`${message},共 ${this.selectedRows.length} 条记录?`,
"批量操作确认",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
);
},
// 导出数据
async exportData(apiName, filename = "export.xlsx", params = {}) {
try {
this.loading = true;
const exportParams = { ...this.queryParams, ...params, export: true };
const response = await this.apipost(apiName, exportParams, null, {
responseType: "blob"
});
// 创建下载链接
const blob = new Blob([response.data]);
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = filename;
link.click();
window.URL.revokeObjectURL(url);
this.$message.success("导出成功");
} catch (error) {
console.error("导出失败:", error);
this.$message.error("导出失败");
} finally {
this.loading = false;
}
},
// 格式化数据
formatValue(value, formatter) {
if (typeof formatter === "function") {
return formatter(value);
}
if (formatter === "date") {
return value ? this.$moment(value).format("YYYY-MM-DD") : "-";
}
if (formatter === "datetime") {
return value ? this.$moment(value).format("YYYY-MM-DD HH:mm:ss") : "-";
}
if (formatter === "currency") {
return value ? ${Number(value).toFixed(2)}` : "-";
}
return value || "-";
}
}
};
export default listManagerMixin;
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
// 邮轮列表配置
export const scenicSpotListConfig = {
// 表格基础配置
tableConfig: {
height: '100%',
border: true,
stripe: true,
size: 'mini',
'empty-text': '暂无邮轮数据'
},
// 分页配置
paginationConfig: {
background: true,
layout: 'total, sizes, prev, pager, next, jumper',
'pager-count': 7,
'hide-on-single-page': false,
'page-sizes': [10, 14, 20, 25, 50, 100],
'page-size': 14,
'current-page': 1,
small: false,
disabled: false,
'prev-text': '',
'next-text': '',
total: 0
},
// 分页默认配置
defaultPagination: {
currentPage: 1,
pageSize: 14,
total: 0,
pageSizes: [10, 14, 20, 25, 50, 100]
},
// 列配置工厂函数
createColumns: (options = {}) => [
{
id: 'scenic-name-column',
label: '邮轮名称',
prop: 'Name',
minWidth: 150,
// fixed: 'left',
type: 'link',
slotName: 'scenicName',
filter: {
type: 'input',
key: 'NameFilter',
placeholder: '输入邮轮名称'
}
},
{
id: 'city-column',
label: '城市',
prop: 'CityName',
minWidth: 100,
slotName: 'cityName',
filter: {
type: 'select',
key: 'CityFilter',
placeholder: '选择城市',
searchable: true,
multiple: true,
options: options.cityList || []
}
},
{
id: 'ticket-type-column',
label: '邮轮类型',
prop: 'TicketTypeName',
minWidth: 120,
slotName: 'ticketType',
filter: {
type: 'select',
key: 'TicketTypeFilter',
placeholder: '选择邮轮类型',
multiple: true,
options: options.ticketTypeList || []
}
},
{
label: '邮轮名称英文',
prop: 'RealName',
minWidth: 150,
slotName: 'realName',
emptyText: '-',
filter: {
type: 'input',
key: 'EnNameFilter',
placeholder: '输入邮轮英文名称'
}
},
{
label: '营业时间',
prop: 'OpeningHours',
minWidth: 150,
slotName: 'businessHours',
emptyText: '-'
},
{
label: '最后更新时间',
prop: 'UpdateDate',
minWidth: 150,
slotName: 'updateDate',
emptyText: '-'
},
{
label: '状态',
prop: 'Status',
minWidth: 80,
slotName: 'status',
filter: {
type: 'select',
key: 'StatusFilter',
placeholder: '选择状态',
options: [
{ label: '正常', value: '0' },
{ label: '删除', value: '1' }
]
}
}
],
// 操作列配置
actionColumn: {
label: '操作',
width: 120,
fixed: 'right'
},
// 高级查询配置
advancedSearchConfig: {
title: '高级查询',
buttonText: '高级查询',
width: 600,
fields: [
{
key: 'QCountry',
label: '国家',
type: 'select',
placeholder: '选择国家',
span: 8,
options: [] // 动态填充
},
{
key: 'QProvince',
label: '省份',
type: 'select',
placeholder: '选择省份',
span: 8,
options: [] // 动态填充
}
]
},
// 工具操作配置
toolActions: [
// {
// command: 'add',
// label: '添加邮轮',
// type: 'primary',
// icon: 'el-icon-plus',
// permission: 'scenic.add'
// },
{
command: 'export',
label: '导出数据',
icon: 'el-icon-download',
permission: 'scenic.export'
},
{
command: 'importData',
label: '导入数据',
icon: 'el-icon-upload2',
permission: 'scenic.import'
},
{
command: 'refresh',
label: '刷新',
icon: 'el-icon-refresh',
type: 'default'
},
{
command: 'clearFilters',
label: '清除筛选',
icon: 'el-icon-delete',
type: 'warning'
}
],
// 抽屉配置
drawerConfig: {
title: '邮轮信息',
size: '90%',
direction: 'rtl'
},
// API 配置
apiConfig: {
list: 'ticketcoupons_post_GetPageList',
delete: 'ticketcoupons_post_Remove',
export: 'dmcstatistics_post_GetTicketCouponsExport',
import: 'ticketcoupons_post_ImportData',
countryList: 'dict_post_Destination_GetCountry',
provinceList: 'dict_post_Destination_GetChildList',
employeeList: 'admin_get_EmployeeGetList',
ticketTypeList: 'ticketcoupons_get_GetBYTicketTypeEnumList',
batchDelete: 'ticketcoupons_post_BatchRemove',
uploadTemplate: 'file_post_UploadTemplate',
cityList:'dict_post_Destination_GetCityList'
},
// 默认查询参数
defaultQueryParams: {
pageIndex: 1,
pageSize: 14,
Name: "",
QCountry: "",
QProvince: "",
QCity: "",
QDistrict: "",
Status: "0",
TicketType: "-1",
UpdateBy: 0,
SelectType: 1
},
// 分页配置工具方法
createPaginationConfig: (options = {}) => ({
...scenicSpotListConfig.paginationConfig,
...options
}),
// 验证分页参数
validatePaginationParams: (pageIndex, pageSize, total) => {
const validPageSizes = [10, 14, 20, 25, 50, 100]
const normalizedPageSize = validPageSizes.includes(pageSize) ? pageSize : 14
const maxPage = total > 0 ? Math.ceil(total / normalizedPageSize) : 1
const normalizedPageIndex = Math.max(1, Math.min(pageIndex, maxPage))
return {
pageIndex: normalizedPageIndex,
pageSize: normalizedPageSize,
isValid: pageIndex === normalizedPageIndex && pageSize === normalizedPageSize
}
}
}
// 导出默认配置
export default scenicSpotListConfig
// 导出分页配置工具方法
export const createPaginationConfig = scenicSpotListConfig.createPaginationConfig
export const validatePaginationParams = scenicSpotListConfig.validatePaginationParams
This diff is collapsed.
...@@ -1897,6 +1897,30 @@ export default { ...@@ -1897,6 +1897,30 @@ export default {
title: '国内景区报价管理' title: '国内景区报价管理'
}, },
}, },
{
path: '/cruiseShipOrderList',
name: 'cruiseShipOrderList',
component: resolve => require(['@/components/cruiseShip/list/cruiseShipOrderList'], resolve),
meta: {
title: '邮轮订单'
},
},
{
path: '/cruiseShipOrderListOP',
name: 'cruiseShipOrderListOP',
component: resolve => require(['@/components/cruiseShip/list/cruiseShipOrderList'], resolve),
meta: {
title: '邮轮订单OP'
},
},
{
path: '/cruiseShipSupplier',
name: 'cruiseShipSupplier',
component: resolve => require(['@/components/cruiseShip/supplier/cruiseShipSupplier'], resolve),
meta: {
title: '邮轮供应商'
},
},
{ {
path: '/TicketManager', //机票列表 path: '/TicketManager', //机票列表
name: 'TicketManager', name: 'TicketManager',
......
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