1
This commit is contained in:
@@ -40,7 +40,7 @@ WHERE p.permission = 'tour'
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'tour.setting') t);
|
||||
|
||||
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
|
||||
SELECT 'b7c63f0c73a44a9a8c4f3d3bb1a10003', p.id, CONCAT(p.path, '0002'), '旅行社管理', 'Travel Agency', 'menu', '/platform/tour/travelAgency', 'data-pjax', '', 1, 0, 'tour.travelAgency', NULL, 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'l', 0, 0
|
||||
SELECT 'b7c63f0c73a44a9a8c4f3d3bb1a10003', p.id, CONCAT(p.path, '0002'), '服务单位管理', 'Service Unit', 'menu', '/platform/tour/travelAgency', 'data-pjax', '', 1, 0, 'tour.travelAgency', NULL, 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'f', 0, 0
|
||||
FROM sys_menu p
|
||||
WHERE p.permission = 'tour'
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'tour.travelAgency') t);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 疗休养配置增加出行人数指标,历史配置默认按 0 处理。
|
||||
ALTER TABLE `tour_setting`
|
||||
ADD COLUMN `travelPeopleQuota` int DEFAULT 0 COMMENT '出行人数指标' AFTER `tourType`;
|
||||
@@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS `tour_setting` (
|
||||
`year` int DEFAULT NULL COMMENT '年度',
|
||||
`configName` varchar(100) DEFAULT NULL COMMENT '疗休养配置名称',
|
||||
`tourType` varchar(50) DEFAULT NULL COMMENT '疗休养类型',
|
||||
`travelPeopleQuota` int DEFAULT 0 COMMENT '出行人数指标',
|
||||
`activityGroupId` varchar(32) DEFAULT NULL COMMENT '可参加人员范围ID',
|
||||
`sortNo` int DEFAULT NULL COMMENT '排序编号',
|
||||
`minGroupPeople` int DEFAULT NULL COMMENT '最少成团人数',
|
||||
@@ -33,7 +34,7 @@ CREATE TABLE IF NOT EXISTS `tour_setting` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养配置';
|
||||
|
||||
-- 疗休养配置标段表。
|
||||
-- 标段先挂在配置上维护,后续线路、旅行社、报名等模块可继续通过 lotId 做业务关联。
|
||||
-- 标段先挂在配置上维护,后续线路、服务单位、报名等模块可继续通过 lotId 做业务关联。
|
||||
CREATE TABLE IF NOT EXISTS `tour_setting_lot` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`settingId` varchar(32) DEFAULT NULL COMMENT '所属配置ID',
|
||||
@@ -51,12 +52,30 @@ CREATE TABLE IF NOT EXISTS `tour_setting_lot` (
|
||||
KEY `idx_tour_setting_lot_value` (`lotValue`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养配置标段';
|
||||
|
||||
-- 旅行社管理表。
|
||||
-- 疗休养配置分工会人员分配表。
|
||||
CREATE TABLE IF NOT EXISTS `tour_setting_union_quota` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`settingId` varchar(32) DEFAULT NULL COMMENT '所属疗休养配置ID',
|
||||
`unionId` varchar(32) DEFAULT NULL COMMENT '分工会ID',
|
||||
`unionName` varchar(100) DEFAULT NULL COMMENT '分工会名称',
|
||||
`peopleQuota` int DEFAULT 0 COMMENT '人员数量',
|
||||
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
|
||||
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
|
||||
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
|
||||
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
|
||||
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tour_setting_union_quota_setting_union` (`settingId`, `unionId`),
|
||||
KEY `idx_tour_setting_union_quota_setting` (`settingId`),
|
||||
KEY `idx_tour_setting_union_quota_union` (`unionId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疗休养配置分工会人员分配';
|
||||
|
||||
-- 服务单位管理表。
|
||||
CREATE TABLE IF NOT EXISTS `tour_travel_agency` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`year` int DEFAULT NULL COMMENT '年度',
|
||||
`agencyCode` varchar(50) DEFAULT NULL COMMENT '旅行社编号',
|
||||
`agencyName` varchar(100) DEFAULT NULL COMMENT '旅行社名称',
|
||||
`agencyCode` varchar(50) DEFAULT NULL COMMENT '服务单位编号',
|
||||
`agencyName` varchar(100) DEFAULT NULL COMMENT '服务单位名称',
|
||||
`contactName` varchar(30) DEFAULT NULL COMMENT '联系人',
|
||||
`contactPhone` varchar(30) DEFAULT NULL COMMENT '联系人手机',
|
||||
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
|
||||
@@ -72,7 +91,7 @@ CREATE TABLE IF NOT EXISTS `tour_travel_agency` (
|
||||
UNIQUE KEY `uk_tour_travel_agency_year_code` (`year`, `agencyCode`),
|
||||
KEY `idx_tour_travel_agency_name` (`agencyName`),
|
||||
KEY `idx_tour_travel_agency_contact` (`contactName`, `contactPhone`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养旅行社';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养服务单位';
|
||||
|
||||
-- 线路管理表。
|
||||
CREATE TABLE IF NOT EXISTS `tour_line` (
|
||||
@@ -80,7 +99,7 @@ CREATE TABLE IF NOT EXISTS `tour_line` (
|
||||
`year` int DEFAULT NULL COMMENT '创建年度',
|
||||
`lineCode` varchar(50) DEFAULT NULL COMMENT '线路编号',
|
||||
`lineName` varchar(100) DEFAULT NULL COMMENT '线路名称',
|
||||
`travelAgencyId` varchar(32) DEFAULT NULL COMMENT '旅行社ID',
|
||||
`travelAgencyId` varchar(32) DEFAULT NULL COMMENT '服务单位ID',
|
||||
`creatorUserId` varchar(32) DEFAULT NULL COMMENT '创建人ID',
|
||||
`creatorName` varchar(100) DEFAULT NULL COMMENT '创建人',
|
||||
`unitId` varchar(32) DEFAULT NULL COMMENT '所在单位ID',
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
-- 疗休养配置分工会人员分配表,人员数量合计受配置的出行人数指标约束。
|
||||
CREATE TABLE IF NOT EXISTS `tour_setting_union_quota` (
|
||||
`id` varchar(32) NOT NULL COMMENT 'ID',
|
||||
`settingId` varchar(32) DEFAULT NULL COMMENT '所属疗休养配置ID',
|
||||
`unionId` varchar(32) DEFAULT NULL COMMENT '分工会ID',
|
||||
`unionName` varchar(100) DEFAULT NULL COMMENT '分工会名称',
|
||||
`peopleQuota` int DEFAULT 0 COMMENT '人员数量',
|
||||
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
|
||||
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
|
||||
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
|
||||
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
|
||||
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tour_setting_union_quota_setting_union` (`settingId`, `unionId`),
|
||||
KEY `idx_tour_setting_union_quota_setting` (`settingId`),
|
||||
KEY `idx_tour_setting_union_quota_union` (`unionId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疗休养配置分工会人员分配';
|
||||
@@ -174,7 +174,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="报名线路">{{ detail.lineName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ detail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名酒店">{{ detail.hotelName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名旅行社">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名服务单位">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出行时间">{{ detail.travelPeriod || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="fillBedInfo" label="床型">{{ detail.bedType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="fillBedInfo" label="床位信息">{{ detail.bedInfo || '' }}</el-descriptions-item>
|
||||
|
||||
@@ -114,7 +114,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="报名线路">{{ detail.lineName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ detail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名酒店">{{ detail.hotelName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名旅行社">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名服务单位">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出行时间">{{ detail.travelPeriod || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="detailFillBedInfo" label="床型">{{ detail.bedType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="detailFillBedInfo" label="床位信息">{{ detail.bedInfo || '' }}</el-descriptions-item>
|
||||
@@ -255,7 +255,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="报名旅行社">
|
||||
<el-form-item label="报名服务单位">
|
||||
<el-input v-model="signupForm.travelAgencyName" :disabled="isDirectFamilyLine(signupForm)" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@@ -112,8 +112,8 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="旅行社名称" prop="travelAgencyId">
|
||||
<el-select v-model="formData.travelAgencyId" clearable filterable placeholder="请选择旅行社" style="width: 100%">
|
||||
<el-form-item label="服务单位名称" prop="travelAgencyId">
|
||||
<el-select v-model="formData.travelAgencyId" clearable filterable placeholder="请选择服务单位" style="width: 100%">
|
||||
<el-option v-for="item in travelAgencyOptions" :key="item.id" :label="item.agencyName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -187,7 +187,7 @@ layout("/layouts/platform.html"){
|
||||
<text-editor v-model="formData.lineContent"></text-editor>
|
||||
</el-form-item>
|
||||
<el-form-item label="移动端缩略图" prop="mobileThumb">
|
||||
<!-- 与旅行社管理保持一致:移动端缩略图使用单图上传并保存URL。 -->
|
||||
<!-- 与服务单位管理保持一致:移动端缩略图使用单图上传并保存URL。 -->
|
||||
<file-upload
|
||||
style="--upload-width: 200px;--upload-height:108px"
|
||||
:upload_number="1"
|
||||
|
||||
+1
-1
@@ -191,7 +191,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="出行时段">{{ detail.travelPeriod || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ detail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名酒店">{{ detail.hotelName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="旅行社">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="服务单位">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否携带家属">
|
||||
{{ familyText() }}
|
||||
</el-descriptions-item>
|
||||
|
||||
@@ -83,6 +83,7 @@ layout("/layouts/platform.html"){
|
||||
:visible.sync="dialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="64.8%"
|
||||
custom-class="tour-setting-dialog"
|
||||
@closed="destroyEditor">
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="form">
|
||||
<div v-if="title === '新建疗休养配置'" class="tour-setting-inherit">
|
||||
@@ -145,6 +146,11 @@ layout("/layouts/platform.html"){
|
||||
<el-input-number v-model="formData.maxGroupPeople" :controls="false" :min="0" :precision="0" placeholder="请输入最多成团人数" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="出行人数指标" prop="travelPeopleQuota">
|
||||
<el-input-number v-model="formData.travelPeopleQuota" :controls="false" :min="0" :precision="0" placeholder="请输入出行人数指标" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<div class="tour-setting-basic-divider"></div>
|
||||
</el-col>
|
||||
@@ -267,6 +273,47 @@ layout("/layouts/platform.html"){
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="人员分配" name="unionQuota">
|
||||
<div class="tour-tab-fill">
|
||||
<div class="tour-quota-toolbar">
|
||||
<div class="tour-quota-stat">
|
||||
<span>出行人数指标</span>
|
||||
<strong>{{ travelPeopleQuota }}</strong>
|
||||
</div>
|
||||
<div class="tour-quota-stat">
|
||||
<span>分工会总人数</span>
|
||||
<strong>{{ branchTotalPersonCount }}</strong>
|
||||
</div>
|
||||
<el-input-number
|
||||
v-model="quotaAllocate.ratio"
|
||||
:controls="false"
|
||||
:min="0"
|
||||
:precision="2"
|
||||
placeholder="比例"
|
||||
class="tour-quota-input">
|
||||
</el-input-number>
|
||||
<el-button type="primary" size="medium" @click="allocateQuotaByRatio">按比例分配</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="formData.unionQuotas"
|
||||
border
|
||||
class="vi-table tour-quota-table tour-tab-table"
|
||||
empty-text="暂无分工会"
|
||||
height="100%"
|
||||
show-summary
|
||||
:summary-method="unionQuotaSummary"
|
||||
style="width: 100%">
|
||||
<el-table-column label="序号" type="index" width="70" align="center" header-align="center"></el-table-column>
|
||||
<el-table-column label="分工会" prop="unionName" min-width="220" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="当前人数" prop="personCount" width="140" align="center" header-align="center"></el-table-column>
|
||||
<el-table-column label="人员数量" width="180" align="center" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input-number v-model="row.peopleQuota" :controls="false" :min="0" :precision="0" style="width: 100%"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="服务须知" name="notice">
|
||||
<el-form-item prop="serviceNotice" label-width="0">
|
||||
<text-editor v-model="formData.serviceNotice"></text-editor>
|
||||
@@ -331,10 +378,14 @@ layout("/layouts/platform.html"){
|
||||
activityGroupList: [],
|
||||
formData: {},
|
||||
lotDeleteList: [],
|
||||
quotaAllocate: {
|
||||
ratio: null
|
||||
},
|
||||
inheritLoading: false,
|
||||
formRules: {
|
||||
year: [{required: true, message: "必填", trigger: ["blur", "change"]}],
|
||||
configName: [{required: true, message: "必填", trigger: ["blur", "change"]}],
|
||||
travelPeopleQuota: [{required: true, message: "必填", trigger: ["blur", "change"]}],
|
||||
minGroupPeople: [{validator: checkGroupPeople, trigger: ["blur", "change"]}],
|
||||
maxGroupPeople: [{validator: checkGroupPeople, trigger: ["blur", "change"]}],
|
||||
outProvinceRatioType: [{required: true, message: "必填", trigger: ["blur", "change"]}],
|
||||
@@ -347,12 +398,117 @@ layout("/layouts/platform.html"){
|
||||
components: {
|
||||
"drawer-user-scope": httpVueLoader("/components/module/activity/DrawerUserScope.vue")
|
||||
},
|
||||
computed: {
|
||||
// 出行人数指标统一按非负整数参与页面统计和分配上限校验。
|
||||
travelPeopleQuota() {
|
||||
return this.toNonNegativeInteger(this.formData.travelPeopleQuota)
|
||||
},
|
||||
// 人员总数使用后端实时统计结果,仅作为按比例分配的计算基数。
|
||||
branchTotalPersonCount() {
|
||||
const rows = this.formData.unionQuotas || []
|
||||
return rows.reduce((sum, row) => sum + this.toNonNegativeInteger(row.personCount), 0)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"formData.travelPeopleQuota": function() {
|
||||
this.refreshQuotaRatio()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getActivityGroup() {
|
||||
const {data} = await this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup")
|
||||
this.activityGroupList = (data || []).map((item) => {
|
||||
// 加载分工会人员分配行;新增时传空配置ID,编辑时合并已保存数量。
|
||||
loadUnionQuotaRows(settingId) {
|
||||
this.$axios.post(loc() + "/unionQuotaRows", {settingId: settingId || ""}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$set(this.formData, "unionQuotas", this.normalizeUnionQuotaRows(res.data || []))
|
||||
this.refreshQuotaRatio()
|
||||
} else {
|
||||
this.$message.warning(res.msg || "查询人员分配失败")
|
||||
}
|
||||
})
|
||||
},
|
||||
// 将接口和历史数据中的空值规范为非负整数,避免合计结果出现 NaN。
|
||||
normalizeUnionQuotaRows(rows) {
|
||||
return (rows || []).map(item => {
|
||||
return Object.assign({}, item, {
|
||||
groupId: item.groupId === null || item.groupId === undefined ? "" : String(item.groupId)
|
||||
peopleQuota: this.toNonNegativeInteger(item.peopleQuota),
|
||||
personCount: this.toNonNegativeInteger(item.personCount)
|
||||
})
|
||||
})
|
||||
},
|
||||
toNonNegativeInteger(value) {
|
||||
const numberValue = parseInt(value, 10)
|
||||
if (isNaN(numberValue) || numberValue < 0) {
|
||||
return 0
|
||||
}
|
||||
return numberValue
|
||||
},
|
||||
toNumber(value) {
|
||||
const numberValue = parseFloat(value)
|
||||
return isNaN(numberValue) ? null : numberValue
|
||||
},
|
||||
truncateDecimal(value, precision) {
|
||||
const times = Math.pow(10, precision)
|
||||
return Math.floor(value * times) / times
|
||||
},
|
||||
// 默认比例为出行人数指标除以分工会总人数,并按参考项目保留两位后直接截断。
|
||||
refreshQuotaRatio() {
|
||||
if (this.branchTotalPersonCount <= 0 || this.travelPeopleQuota <= 0) {
|
||||
this.quotaAllocate.ratio = null
|
||||
return
|
||||
}
|
||||
this.quotaAllocate.ratio = this.truncateDecimal(this.travelPeopleQuota / this.branchTotalPersonCount, 2)
|
||||
},
|
||||
unionQuotaSummary(param) {
|
||||
const columns = param.columns || []
|
||||
const rows = this.formData.unionQuotas || []
|
||||
return columns.map((column, index) => {
|
||||
if (index === 0) {
|
||||
return "合计"
|
||||
}
|
||||
if (column.property === "personCount") {
|
||||
return rows.reduce((sum, row) => sum + this.toNonNegativeInteger(row.personCount), 0)
|
||||
}
|
||||
if (column.label === "人员数量") {
|
||||
return rows.reduce((sum, row) => sum + this.toNonNegativeInteger(row.peopleQuota), 0)
|
||||
}
|
||||
return ""
|
||||
})
|
||||
},
|
||||
allocateQuotaByRatio() {
|
||||
const rows = this.formData.unionQuotas || []
|
||||
const ratio = this.toNumber(this.quotaAllocate.ratio)
|
||||
if (!rows.length) {
|
||||
this.$message.warning("暂无分工会数据")
|
||||
return
|
||||
}
|
||||
if (ratio === null || this.quotaAllocate.ratio === "" || this.quotaAllocate.ratio === undefined) {
|
||||
this.$message.warning("比例为空,未分配")
|
||||
return
|
||||
}
|
||||
if (ratio < 0) {
|
||||
this.$message.warning("比例不能为负数")
|
||||
return
|
||||
}
|
||||
// 按比例分配时小数直接舍去,不补余数,保持与参考项目一致。
|
||||
const nextQuotas = rows.map(row => {
|
||||
return Math.floor(ratio * this.toNonNegativeInteger(row.personCount))
|
||||
})
|
||||
const quotaTotal = nextQuotas.reduce((sum, value) => sum + value, 0)
|
||||
if (quotaTotal > this.travelPeopleQuota) {
|
||||
this.$message.warning("当前人员数量合计 " + quotaTotal + ",不能超过出行人数指标 " + this.travelPeopleQuota)
|
||||
return
|
||||
}
|
||||
nextQuotas.forEach((peopleQuota, index) => {
|
||||
this.$set(rows[index], "peopleQuota", peopleQuota)
|
||||
})
|
||||
},
|
||||
getActivityGroup() {
|
||||
return this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup").then((res) => {
|
||||
const data = res.data
|
||||
this.activityGroupList = (data || []).map((item) => {
|
||||
return Object.assign({}, item, {
|
||||
groupId: item.groupId === null || item.groupId === undefined ? "" : String(item.groupId)
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -378,6 +534,7 @@ layout("/layouts/platform.html"){
|
||||
year: moment().format("YYYY"),
|
||||
configName: "",
|
||||
tourType: "",
|
||||
travelPeopleQuota: 0,
|
||||
activityGroupId: "",
|
||||
sortNo: 0,
|
||||
minGroupPeople: 0,
|
||||
@@ -394,6 +551,7 @@ layout("/layouts/platform.html"){
|
||||
fillBedInfo: true,
|
||||
enabled: true,
|
||||
lots: [],
|
||||
unionQuotas: [],
|
||||
serviceNotice: ""
|
||||
}
|
||||
},
|
||||
@@ -404,6 +562,7 @@ layout("/layouts/platform.html"){
|
||||
// 新建时给出默认年度和开关值,减少校工会管理员录入成本。
|
||||
this.formData = this.defaultFormData()
|
||||
this.dialogVisible = true
|
||||
this.loadUnionQuotaRows("")
|
||||
this.$nextTick(() => this.$refs.form && this.$refs.form.clearValidate())
|
||||
},
|
||||
inheritPreviousYearInfo() {
|
||||
@@ -428,11 +587,19 @@ layout("/layouts/platform.html"){
|
||||
allowOverReimbursement: !!item.allowOverReimbursement
|
||||
}
|
||||
})
|
||||
// 延用上一年分配数量,但清除原配置和子表ID,保存时生成当前年度数据。
|
||||
const inheritedUnionQuotas = this.normalizeUnionQuotaRows(previous.unionQuotas || []).map(item => {
|
||||
return Object.assign({}, item, {
|
||||
id: "",
|
||||
settingId: ""
|
||||
})
|
||||
})
|
||||
this.formData = Object.assign(this.defaultFormData(), previous, {
|
||||
year: String(currentYear),
|
||||
cycleStartYear: previous.cycleStartYear ? String(previous.cycleStartYear) : "",
|
||||
cycleEndYear: previous.cycleEndYear ? String(previous.cycleEndYear) : "",
|
||||
lots: inheritedLots
|
||||
lots: inheritedLots,
|
||||
unionQuotas: inheritedUnionQuotas
|
||||
})
|
||||
delete this.formData.id
|
||||
delete this.formData.createdAt
|
||||
@@ -463,6 +630,7 @@ layout("/layouts/platform.html"){
|
||||
this.$axios.post(loc() + "/detail", {id: row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = Object.assign({
|
||||
travelPeopleQuota: 0,
|
||||
activityGroupId: "",
|
||||
outProvinceRatioType: "当年报名人数",
|
||||
outProvinceFixedPeople: 0,
|
||||
@@ -474,6 +642,7 @@ layout("/layouts/platform.html"){
|
||||
fillBedInfo: true,
|
||||
enabled: true,
|
||||
lots: [],
|
||||
unionQuotas: [],
|
||||
serviceNotice: ""
|
||||
}, res.data || {})
|
||||
this.formData.year = this.formData.year ? String(this.formData.year) : ""
|
||||
@@ -491,6 +660,7 @@ layout("/layouts/platform.html"){
|
||||
this.formData.lots = (this.formData.lots || []).map(item => Object.assign({}, item, {
|
||||
allowOverReimbursement: !!item.allowOverReimbursement
|
||||
}))
|
||||
this.formData.unionQuotas = this.normalizeUnionQuotaRows(this.formData.unionQuotas || [])
|
||||
this.dialogVisible = true
|
||||
this.$nextTick(() => this.$refs.form && this.$refs.form.clearValidate())
|
||||
} else {
|
||||
@@ -502,6 +672,7 @@ layout("/layouts/platform.html"){
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (!valid) return
|
||||
if (!this.validateLots()) return
|
||||
if (!this.validateUnionQuotas()) return
|
||||
this.submitLoading = true
|
||||
// Nutz 对子表集合按字符串化 JSON 绑定更稳定,和体检项目维护的提交方式保持一致。
|
||||
const submitData = JSON.parse(JSON.stringify(this.formData))
|
||||
@@ -509,6 +680,7 @@ layout("/layouts/platform.html"){
|
||||
submitData.outProvinceFixedPeople = 0
|
||||
}
|
||||
submitData.lots = JSON.stringify(this.formData.lots || [])
|
||||
submitData.unionQuotas = JSON.stringify(this.formData.unionQuotas || [])
|
||||
submitData.lotDeleteList = JSON.stringify(this.lotDeleteList)
|
||||
this.$axios.post(loc() + "/doSubmit", submitData).then((res) => {
|
||||
this.submitLoading = false
|
||||
@@ -562,6 +734,29 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
return true
|
||||
},
|
||||
// 提交前统一人员数量格式,并校验分配合计不超过出行人数指标。
|
||||
validateUnionQuotas() {
|
||||
const rows = this.formData.unionQuotas || []
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
const row = rows[i]
|
||||
if (row.peopleQuota === null || row.peopleQuota === undefined || row.peopleQuota === "") {
|
||||
row.peopleQuota = 0
|
||||
}
|
||||
if (!/^\d+$/.test(String(row.peopleQuota))) {
|
||||
this.$message.warning("第" + (i + 1) + "行人员数量必须为非负整数")
|
||||
return false
|
||||
}
|
||||
this.$set(row, "peopleQuota", this.toNonNegativeInteger(row.peopleQuota))
|
||||
}
|
||||
const quotaTotal = rows.reduce((sum, row) => {
|
||||
return sum + this.toNonNegativeInteger(row.peopleQuota)
|
||||
}, 0)
|
||||
if (quotaTotal > this.travelPeopleQuota) {
|
||||
this.$message.warning("当前人员数量合计 " + quotaTotal + ",不能超过出行人数指标 " + this.travelPeopleQuota)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
deleteLot(index, row) {
|
||||
this.$confirm("确定删除该标段吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
@@ -593,6 +788,9 @@ layout("/layouts/platform.html"){
|
||||
destroyEditor() {
|
||||
this.formData = {}
|
||||
this.lotDeleteList = []
|
||||
this.quotaAllocate = {
|
||||
ratio: null
|
||||
}
|
||||
this.inheritLoading = false
|
||||
this.activeTab = "basic"
|
||||
}
|
||||
@@ -627,6 +825,94 @@ layout("/layouts/platform.html"){
|
||||
border-top: 1px dashed #dcdfe6;
|
||||
margin: 2px 0 18px;
|
||||
}
|
||||
|
||||
.tour-quota-toolbar {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.tour-quota-input {
|
||||
width: 160px;
|
||||
}
|
||||
|
||||
.tour-quota-stat {
|
||||
align-items: center;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
display: inline-flex;
|
||||
gap: 8px;
|
||||
height: 36px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.tour-quota-stat span {
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.tour-quota-stat strong {
|
||||
color: #303133;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.tour-tab-fill {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.tour-tab-table {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.tour-setting-dialog {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 85vh;
|
||||
max-height: 85vh;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-dialog__header,
|
||||
.tour-setting-dialog .el-dialog__footer,
|
||||
.tour-setting-dialog .el-tabs__header {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-dialog__body {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-form,
|
||||
.tour-setting-dialog .el-tabs {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-tabs {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-tabs__content {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
padding: 0 6px 18px 0;
|
||||
}
|
||||
|
||||
.tour-setting-dialog .el-tab-pane {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!--#
|
||||
|
||||
@@ -154,7 +154,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="报名旅行社">
|
||||
<el-form-item label="报名服务单位">
|
||||
<el-input v-model="signupForm.travelAgencyName" :disabled="isDirectFamilyLine(signupForm)" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -360,7 +360,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="时间标段">{{ lineDetail.lotName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ lineDetail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="直系亲属线路">{{ isDirectFamilyLine(lineDetail) ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="旅行社">{{ lineDetail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="服务单位">{{ lineDetail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建人">{{ lineDetail.creatorName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在单位">{{ lineDetail.unitName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否对外开放">{{ lineDetail.openFlag ? '是' : '否' }}</el-descriptions-item>
|
||||
|
||||
@@ -15,11 +15,11 @@ layout("/layouts/platform.html"){
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="旅行社名称">
|
||||
<search-item label="服务单位名称">
|
||||
<el-input
|
||||
v-model="pageForm.agencyName"
|
||||
clearable
|
||||
placeholder="请输入旅行社名称"
|
||||
placeholder="请输入服务单位名称"
|
||||
style="width: 100%"
|
||||
@keyup.enter.native="doSearch">
|
||||
</el-input>
|
||||
@@ -50,7 +50,7 @@ layout("/layouts/platform.html"){
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="旅行社列表">
|
||||
<table-tool :app="this" label="服务单位列表">
|
||||
<el-button @click="openAdd" size="medium" type="primary">
|
||||
<i class="el-icon-plus"></i>
|
||||
新增
|
||||
@@ -65,8 +65,8 @@ layout("/layouts/platform.html"){
|
||||
@sort-change="pageOrder">
|
||||
<el-table-column label="序号" type="index" :index="indexMethod" width="80" align="center" header-align="center"></el-table-column>
|
||||
<el-table-column label="年度" prop="year" width="110" sortable="custom" align="center" header-align="center"></el-table-column>
|
||||
<el-table-column label="旅行社编号" prop="agencyCode" width="120" sortable="custom" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="旅行社名称" prop="agencyName" min-width="220" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="服务单位编号" prop="agencyCode" width="120" sortable="custom" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="服务单位名称" prop="agencyName" min-width="220" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="联系人" prop="contactName" width="130" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="联系电话" prop="contactPhone" width="150" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="激活状态" prop="enabled" width="160" align="center" header-align="center">
|
||||
@@ -111,15 +111,15 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="旅行社名称" prop="agencyName">
|
||||
<el-input v-model="formData.agencyName" maxlength="30" show-word-limit placeholder="请输入旅行社名称"></el-input>
|
||||
<el-form-item label="服务单位名称" prop="agencyName">
|
||||
<el-input v-model="formData.agencyName" maxlength="30" show-word-limit placeholder="请输入服务单位名称"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="旅行社编号" prop="agencyCode">
|
||||
<el-input v-model="formData.agencyCode" maxlength="50" placeholder="请输入旅行社编号"></el-input>
|
||||
<el-form-item label="服务单位编号" prop="agencyCode">
|
||||
<el-input v-model="formData.agencyCode" maxlength="50" placeholder="请输入服务单位编号"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@@ -248,19 +248,19 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.title = "新增旅行社信息"
|
||||
this.title = "新增服务单位信息"
|
||||
this.viewMode = false
|
||||
this.formData = this.emptyForm()
|
||||
this.dialogVisible = true
|
||||
this.$nextTick(() => this.$refs.form && this.$refs.form.clearValidate())
|
||||
},
|
||||
openEdit(row) {
|
||||
this.title = "编辑旅行社信息"
|
||||
this.title = "编辑服务单位信息"
|
||||
this.viewMode = false
|
||||
this.loadDetail(row.id)
|
||||
},
|
||||
openView(row) {
|
||||
this.title = "查看旅行社信息"
|
||||
this.title = "查看服务单位信息"
|
||||
this.viewMode = true
|
||||
this.loadDetail(row.id)
|
||||
},
|
||||
|
||||
@@ -191,7 +191,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="出行时段">{{ detail.travelPeriod || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ detail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名酒店">{{ detail.hotelName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="旅行社">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="服务单位">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否携带家属">
|
||||
{{ familyText() }}
|
||||
</el-descriptions-item>
|
||||
|
||||
@@ -164,7 +164,7 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="报名线路">{{ detail.lineName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ detail.lineType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名酒店">{{ detail.hotelName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名旅行社">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名服务单位">{{ detail.travelAgencyName || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出行时间">{{ detail.travelPeriod || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="fillBedInfo" label="床型">{{ detail.bedType || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item v-if="fillBedInfo" label="床位信息">{{ detail.bedInfo || '' }}</el-descriptions-item>
|
||||
|
||||
@@ -425,7 +425,7 @@ layout("/layouts/platform_h5.html"){
|
||||
<van-cell title="线路类型" :value="detail.lineType || ''"></van-cell>
|
||||
<van-cell title="出行时间" :value="detail.travelPeriod || ''"></van-cell>
|
||||
<van-cell title="报名酒店" :value="detail.hotelName || ''"></van-cell>
|
||||
<van-cell title="旅行社" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell title="服务单位" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell v-if="detailFillBedInfo" title="床型" :value="detail.bedType || ''"></van-cell>
|
||||
<van-cell v-if="detailFillBedInfo" title="床位信息" :value="detail.bedInfo || ''"></van-cell>
|
||||
<van-cell v-if="detailFillBedInfo" title="意向拼床人" :value="detail.intendedRoommate || ''"></van-cell>
|
||||
|
||||
+1
-1
@@ -216,7 +216,7 @@ layout("/layouts/platform_h5.html"){
|
||||
<van-cell title="出行时段" :value="detail.travelPeriod || ''"></van-cell>
|
||||
<van-cell title="报名时间" :value="detail.signupTime || ''"></van-cell>
|
||||
<van-cell title="报名酒店" :value="detail.hotelName || ''"></van-cell>
|
||||
<van-cell title="旅行社" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell title="服务单位" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="床型" :value="detail.bedType || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="床位信息" :value="detail.bedInfo || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="意向拼床人" :value="detail.intendedRoommate || ''"></van-cell>
|
||||
|
||||
@@ -3,10 +3,11 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
#-->
|
||||
|
||||
<style scoped>
|
||||
.tour-signup-h5 {
|
||||
#app.tour-signup-h5 {
|
||||
/* 覆盖公共 #app 固定高度,确保长须知内容和底部占位共同参与页面滚动。 */
|
||||
height: auto;
|
||||
min-height: 100vh;
|
||||
background: #f5f7fb;
|
||||
padding-bottom: 80px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@@ -143,15 +144,24 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
padding: 34px 0 26px;
|
||||
}
|
||||
|
||||
.tour-signup-footer-spacer {
|
||||
/* 占位元素位于正文流末尾,保证最后一行可完整滚动到固定按钮栏上方。 */
|
||||
height: 110px;
|
||||
height: calc(110px + env(safe-area-inset-bottom));
|
||||
}
|
||||
|
||||
.tour-signup-footer {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
/* 不支持安全区变量时使用固定内边距,避免整条 padding 声明失效。 */
|
||||
padding: 10px 12px;
|
||||
padding: 10px 12px calc(10px + env(safe-area-inset-bottom));
|
||||
background: rgba(255, 255, 255, 0.96);
|
||||
box-shadow: 0 -6px 18px rgba(15, 23, 42, 0.08);
|
||||
box-sizing: border-box;
|
||||
z-index: 20;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -196,8 +206,18 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
</van-skeleton>
|
||||
</div>
|
||||
|
||||
<div class="tour-signup-footer-spacer" aria-hidden="true"></div>
|
||||
|
||||
<div class="tour-signup-footer">
|
||||
<van-button block type="info" color="#0f74bc" round @click="confirmRead">我已阅读</van-button>
|
||||
<van-button
|
||||
block
|
||||
type="info"
|
||||
color="#0f74bc"
|
||||
round
|
||||
:disabled="readCountdown > 0"
|
||||
@click="confirmRead">
|
||||
{{ readButtonText }}
|
||||
</van-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -217,6 +237,8 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
pdfPageCount: 0,
|
||||
pdfRenderedPages: 0,
|
||||
pdfRenderToken: 0,
|
||||
readCountdown: 10,
|
||||
readCountdownTimer: null,
|
||||
bannerList: [
|
||||
"/assets/platform/images/tour/tour-h5-banner-1.jpg",
|
||||
"/assets/platform/images/tour/tour-h5-banner-2.jpg"
|
||||
@@ -228,7 +250,33 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// 倒计时期间在按钮中展示剩余秒数,结束后恢复原确认文案。
|
||||
readButtonText() {
|
||||
return this.readCountdown > 0 ? "我已阅读(" + this.readCountdown + "秒)" : "我已阅读"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 启动十秒阅读倒计时,重复调用前先清理旧计时器,避免并发计时。
|
||||
startReadCountdown() {
|
||||
this.clearReadCountdown()
|
||||
this.readCountdown = 10
|
||||
this.readCountdownTimer = window.setInterval(() => {
|
||||
if (this.readCountdown <= 1) {
|
||||
this.readCountdown = 0
|
||||
this.clearReadCountdown()
|
||||
return
|
||||
}
|
||||
this.readCountdown -= 1
|
||||
}, 1000)
|
||||
},
|
||||
// 页面离开或倒计时结束时释放计时器,避免页面销毁后继续更新状态。
|
||||
clearReadCountdown() {
|
||||
if (this.readCountdownTimer !== null) {
|
||||
window.clearInterval(this.readCountdownTimer)
|
||||
this.readCountdownTimer = null
|
||||
}
|
||||
},
|
||||
parseContentHref(content) {
|
||||
if (!content) {
|
||||
return ""
|
||||
@@ -386,13 +434,19 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
})
|
||||
},
|
||||
confirmRead() {
|
||||
// 方法内再次校验倒计时,防止通过脚本触发禁用按钮的点击事件。
|
||||
if (this.readCountdown > 0) {
|
||||
return
|
||||
}
|
||||
window.location.href = "/platform/tour/signup/h5/signup"
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.startReadCountdown()
|
||||
this.loadServiceNotice()
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.clearReadCountdown()
|
||||
this.clearPdfPreview()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -470,8 +470,8 @@ layout("/layouts/platform_tour_signup_h5.html"){
|
||||
<div class="tour-line-info">
|
||||
<div><span>出行开始时间:</span>{{ row.travelStartTime || '暂无' }}</div>
|
||||
<div><span>出行结束时间:</span>{{ row.travelEndTime || '暂无' }}</div>
|
||||
<!-- 临时屏蔽旅行社信息,保留字段和接口便于后续恢复。
|
||||
<div><span>旅行社:</span>{{ row.travelAgencyName || '暂无' }}</div>
|
||||
<!-- 临时屏蔽服务单位信息,保留字段和接口便于后续恢复。
|
||||
<div><span>服务单位:</span>{{ row.travelAgencyName || '暂无' }}</div>
|
||||
-->
|
||||
</div>
|
||||
<div class="tour-line-actions">
|
||||
|
||||
+1
-1
@@ -214,7 +214,7 @@ layout("/layouts/platform_h5.html"){
|
||||
<van-cell title="出行时段" :value="detail.travelPeriod || ''"></van-cell>
|
||||
<van-cell title="报名时间" :value="detail.signupTime || ''"></van-cell>
|
||||
<van-cell title="报名酒店" :value="detail.hotelName || ''"></van-cell>
|
||||
<van-cell title="旅行社" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell title="服务单位" :value="detail.travelAgencyName || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="床型" :value="detail.bedType || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="床位信息" :value="detail.bedInfo || ''"></van-cell>
|
||||
<van-cell v-if="fillBedInfo" title="意向拼床人" :value="detail.intendedRoommate || ''"></van-cell>
|
||||
|
||||
Reference in New Issue
Block a user