南大三十年教职工疗休养
This commit is contained in:
+103
-42
@@ -73,7 +73,7 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column label="工号" prop="loginName" width="120" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="所在单位" prop="unitName" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="线路" prop="lineName" min-width="200" sortable="custom" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时间" prop="travelPeriod" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时间段" prop="travelPeriod" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时段" prop="periodName" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="乘车地点" prop="boardingPlace" min-width="140" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="已上传图片数量" width="140" align="center" header-align="center">
|
||||
@@ -159,7 +159,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="18" v-if="assignForm.personType === 'FORMAL'">
|
||||
<el-form-item label="出行时间">
|
||||
<el-form-item label="出行时间段">
|
||||
<div class="period-button-list">
|
||||
<el-button
|
||||
v-for="item in assignPeriodOptions"
|
||||
@@ -177,6 +177,10 @@ layout("/layouts/platform.html"){
|
||||
</el-form>
|
||||
|
||||
<div class="quota-bar">
|
||||
<div class="quota-item quota-item-total">
|
||||
<span class="quota-label">分工会总名额</span>
|
||||
<span>{{ quotaInfo.branchTotalQuota }}</span>
|
||||
</div>
|
||||
<div class="quota-item">
|
||||
<span class="quota-label">正式名额</span>
|
||||
<span>{{ quotaInfo.formalQuota }}</span>
|
||||
@@ -424,6 +428,9 @@ layout("/layouts/platform.html"){
|
||||
color: #303133;
|
||||
background: #fafafa;
|
||||
}
|
||||
.quota-item-total {
|
||||
min-width: 150px;
|
||||
}
|
||||
.quota-label {
|
||||
font-weight: 600;
|
||||
margin-right: 10px;
|
||||
@@ -503,6 +510,7 @@ layout("/layouts/platform.html"){
|
||||
assignMatterOptions: [],
|
||||
assignPeriodOptions: [],
|
||||
quotaInfo: {
|
||||
branchTotalQuota: 0,
|
||||
formalQuota: 0,
|
||||
backupQuota: 0,
|
||||
formalUsed: 0,
|
||||
@@ -511,6 +519,7 @@ layout("/layouts/platform.html"){
|
||||
backupRemaining: 0
|
||||
},
|
||||
assignDialogVisible: false,
|
||||
assignOpenToken: 0,
|
||||
candidateLoading: false,
|
||||
candidateSelectLoading: false,
|
||||
candidateData: [],
|
||||
@@ -617,6 +626,7 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
defaultQuotaInfo() {
|
||||
return {
|
||||
branchTotalQuota: 0,
|
||||
formalQuota: 0,
|
||||
backupQuota: 0,
|
||||
formalUsed: 0,
|
||||
@@ -726,21 +736,11 @@ layout("/layouts/platform.html"){
|
||||
window.location.href = loc() + "/exportData?" + params.toString()
|
||||
},
|
||||
openAssign() {
|
||||
const token = this.nextAssignOpenToken()
|
||||
const year = this.pageForm.year || moment().format("YYYY")
|
||||
this.assignForm = this.defaultAssignForm(year)
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.assignPeriodOptions = []
|
||||
this.quotaInfo = this.defaultQuotaInfo()
|
||||
this.candidateData = []
|
||||
this.selectedCandidates = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignDialogVisible = true
|
||||
this.loadAssignSettingOptions()
|
||||
},
|
||||
resetAssignDialog() {
|
||||
this.assignForm = this.defaultAssignForm(moment().format("YYYY"))
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.assignSettingOptions = []
|
||||
this.assignMatterOptions = []
|
||||
this.assignPeriodOptions = []
|
||||
this.quotaInfo = this.defaultQuotaInfo()
|
||||
@@ -749,8 +749,37 @@ layout("/layouts/platform.html"){
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignSubmitting = false
|
||||
this.candidateLoading = false
|
||||
this.candidateSelectLoading = false
|
||||
this.assignDialogVisible = true
|
||||
this.loadAssignSettingOptions(token)
|
||||
},
|
||||
resetAssignDialog() {
|
||||
this.assignOpenToken += 1
|
||||
this.assignForm = this.defaultAssignForm(moment().format("YYYY"))
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.assignSettingOptions = []
|
||||
this.assignMatterOptions = []
|
||||
this.assignPeriodOptions = []
|
||||
this.quotaInfo = this.defaultQuotaInfo()
|
||||
this.candidateData = []
|
||||
this.selectedCandidates = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignSubmitting = false
|
||||
this.candidateLoading = false
|
||||
this.candidateSelectLoading = false
|
||||
},
|
||||
// 人员分配弹窗每次打开都生成新的批次标记,旧请求返回时不再覆盖新弹窗数据。
|
||||
nextAssignOpenToken() {
|
||||
this.assignOpenToken += 1
|
||||
return this.assignOpenToken
|
||||
},
|
||||
isCurrentAssignOpen(token) {
|
||||
return this.assignDialogVisible && token === this.assignOpenToken
|
||||
},
|
||||
assignYearChange() {
|
||||
const token = this.assignOpenToken
|
||||
this.assignForm.settingId = ""
|
||||
this.assignForm.matterId = ""
|
||||
this.assignForm.periodId = ""
|
||||
@@ -761,9 +790,10 @@ layout("/layouts/platform.html"){
|
||||
this.candidateUserOptions = []
|
||||
this.candidateForm.keyword = ""
|
||||
this.clearCandidateSelection()
|
||||
this.loadAssignSettingOptions()
|
||||
this.loadAssignSettingOptions(token)
|
||||
},
|
||||
assignSettingChange() {
|
||||
const token = this.assignOpenToken
|
||||
this.assignForm.matterId = ""
|
||||
this.assignForm.periodId = ""
|
||||
this.assignMatterOptions = []
|
||||
@@ -772,30 +802,32 @@ layout("/layouts/platform.html"){
|
||||
this.candidateUserOptions = []
|
||||
this.candidateForm.keyword = ""
|
||||
this.clearCandidateSelection()
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadAssignTravelPeriods(true)
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadAssignTravelPeriods(token)
|
||||
this.loadCandidatePageData(token)
|
||||
},
|
||||
assignPersonTypeChange() {
|
||||
if (this.assignForm.personType === "BACKUP") {
|
||||
this.assignForm.matterId = ""
|
||||
}
|
||||
this.loadQuotaInfo()
|
||||
this.loadQuotaInfo(this.assignOpenToken)
|
||||
},
|
||||
loadAssignSettingOptions() {
|
||||
loadAssignSettingOptions(token) {
|
||||
token = token || this.assignOpenToken
|
||||
this.$axios.post(loc() + "/settingOptions", {year: this.assignForm.year}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
this.assignSettingOptions = res.data || []
|
||||
// 人员分配弹窗独立默认取当前年度第一条配置,再加载名额、线路和候选人员。
|
||||
if (!this.assignForm.settingId && this.assignSettingOptions.length > 0) {
|
||||
this.assignForm.settingId = this.assignSettingOptions[0].id
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadAssignTravelPeriods(true)
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadAssignTravelPeriods(token)
|
||||
this.loadCandidatePageData(token)
|
||||
} else if (this.assignForm.settingId) {
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadAssignTravelPeriods(true)
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadAssignTravelPeriods(token)
|
||||
this.loadCandidatePageData(token)
|
||||
} else {
|
||||
this.assignMatterOptions = []
|
||||
this.assignPeriodOptions = []
|
||||
@@ -806,46 +838,50 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
})
|
||||
},
|
||||
loadAssignTravelPeriods(defaultFirst) {
|
||||
loadAssignTravelPeriods(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.assignPeriodOptions = []
|
||||
this.assignForm.periodId = ""
|
||||
this.loadQuotaInfo()
|
||||
this.loadQuotaInfo(token)
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/travelPeriodOptions", {settingId: this.assignForm.settingId}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
this.assignPeriodOptions = res.data || []
|
||||
const hasCurrent = this.assignPeriodOptions.some(item => item.id === this.assignForm.periodId)
|
||||
if ((defaultFirst || !hasCurrent) && this.assignPeriodOptions.length > 0) {
|
||||
this.assignForm.periodId = this.assignPeriodOptions[0].id
|
||||
} else if (!hasCurrent) {
|
||||
if (!hasCurrent) {
|
||||
this.assignForm.periodId = ""
|
||||
}
|
||||
} else {
|
||||
this.assignPeriodOptions = []
|
||||
this.assignForm.periodId = ""
|
||||
}
|
||||
this.loadQuotaInfo()
|
||||
this.loadQuotaInfo(token)
|
||||
})
|
||||
},
|
||||
loadAssignMatterOptions() {
|
||||
loadAssignMatterOptions(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.assignMatterOptions = []
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/matterOptions", {settingId: this.assignForm.settingId}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
this.assignMatterOptions = res.data || []
|
||||
}
|
||||
})
|
||||
},
|
||||
loadQuotaInfo() {
|
||||
loadQuotaInfo(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.quotaInfo = this.defaultQuotaInfo()
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/quotaInfo", {settingId: this.assignForm.settingId}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const baseQuota = Object.assign(this.defaultQuotaInfo(), res.data || {})
|
||||
if (this.assignForm.personType === "FORMAL") {
|
||||
@@ -855,16 +891,18 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
this.quotaInfo = baseQuota
|
||||
if (this.assignForm.personType === "FORMAL" && this.assignForm.periodId) {
|
||||
this.loadPeriodQuotaInfo()
|
||||
this.loadPeriodQuotaInfo(token)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
loadPeriodQuotaInfo() {
|
||||
loadPeriodQuotaInfo(token) {
|
||||
token = token || this.assignOpenToken
|
||||
this.$axios.post(loc() + "/periodQuotaInfo", {
|
||||
settingId: this.assignForm.settingId,
|
||||
periodId: this.assignForm.periodId
|
||||
}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const periodQuota = res.data || {}
|
||||
this.quotaInfo = Object.assign({}, this.quotaInfo, {
|
||||
@@ -876,13 +914,29 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
toggleAssignPeriod(item) {
|
||||
const token = this.assignOpenToken
|
||||
this.assignForm.periodId = this.assignForm.periodId === item.id ? "" : item.id
|
||||
// 选择出行时间段时提醒先核对分配批次,避免批次线路时间与时间段不一致。
|
||||
if (this.assignForm.periodId) {
|
||||
this.$message({
|
||||
type: "warning",
|
||||
message: this.assignPeriodCheckMessage(),
|
||||
duration: 5000
|
||||
})
|
||||
}
|
||||
this.candidateForm.pageNumber = 1
|
||||
this.clearCandidateSelection()
|
||||
this.loadQuotaInfo()
|
||||
this.loadCandidatePageData()
|
||||
this.loadQuotaInfo(token)
|
||||
this.loadCandidatePageData(token)
|
||||
},
|
||||
loadCandidatePageData() {
|
||||
assignPeriodCheckMessage() {
|
||||
if (!this.assignForm.matterId) {
|
||||
return "请选择分配批次,并确认选中的 “分配批次” 与 “出行时间段” 出行时间是否一致"
|
||||
}
|
||||
return "请确认选中的 “分配批次” 与 “出行时间段” 出行时间是否一致"
|
||||
},
|
||||
loadCandidatePageData(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.candidateData = []
|
||||
this.candidateForm.totalCount = 0
|
||||
@@ -897,6 +951,7 @@ layout("/layouts/platform.html"){
|
||||
keyword: (this.selectedCandidateIds || []).length > 0 ? "" : this.candidateForm.keyword,
|
||||
userIds: JSON.stringify(this.selectedCandidateIds || [])
|
||||
}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const data = res.data || {}
|
||||
this.candidateData = (data.list || []).map(item => Object.assign({}, item, {
|
||||
@@ -909,7 +964,9 @@ layout("/layouts/platform.html"){
|
||||
this.$message.warning(res.msg || "候选人员查询失败")
|
||||
}
|
||||
}).finally(() => {
|
||||
this.candidateLoading = false
|
||||
if (this.isCurrentAssignOpen(token)) {
|
||||
this.candidateLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
candidateSearch() {
|
||||
@@ -948,6 +1005,7 @@ layout("/layouts/platform.html"){
|
||||
// 人员选择器复用候选人员接口,后端会限定为当前登录人所在分工会会员。
|
||||
this.candidateForm.keyword = keyword || ""
|
||||
this.candidateSelectLoading = true
|
||||
const token = this.assignOpenToken
|
||||
this.$axios.post(loc() + "/candidatePageData", {
|
||||
pageNumber: 1,
|
||||
pageSize: 20,
|
||||
@@ -955,12 +1013,15 @@ layout("/layouts/platform.html"){
|
||||
retiringSoon: this.normalizeCandidateFilterValue(this.candidateForm.retiringSoon),
|
||||
keyword: keyword || ""
|
||||
}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const data = res.data || {}
|
||||
this.candidateUserOptions = this.mergeOptionLists(this.selectedCandidates, data.list || [])
|
||||
}
|
||||
}).finally(() => {
|
||||
this.candidateSelectLoading = false
|
||||
if (this.isCurrentAssignOpen(token)) {
|
||||
this.candidateSelectLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
candidateUserSelectChange(userIds) {
|
||||
@@ -1149,7 +1210,7 @@ layout("/layouts/platform.html"){
|
||||
return
|
||||
}
|
||||
if (this.assignForm.personType === "FORMAL" && !this.assignForm.periodId) {
|
||||
this.$message.warning("请选择出行时间")
|
||||
this.$message.warning("请选择出行时间段")
|
||||
return
|
||||
}
|
||||
this.$confirm("确定保存当前人员分配吗?", "提示", {
|
||||
|
||||
+57
-24
@@ -91,7 +91,7 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column label="所属分工会" prop="unionName" min-width="160" sortable="custom" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="所在单位" prop="unitName" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="线路" prop="lineName" min-width="200" sortable="custom" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时间" prop="travelPeriod" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时间段" prop="travelPeriod" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出行时段" prop="periodName" min-width="180" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="乘车地点" prop="boardingPlace" min-width="140" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="已上传图片数量" width="140" align="center" header-align="center">
|
||||
@@ -475,6 +475,7 @@ layout("/layouts/platform.html"){
|
||||
assignMatterOptions: [],
|
||||
unionOptions: [],
|
||||
assignDialogVisible: false,
|
||||
assignOpenToken: 0,
|
||||
remindDialogVisible: false,
|
||||
remindSubmitting: false,
|
||||
candidateLoading: false,
|
||||
@@ -760,28 +761,47 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
openAssign() {
|
||||
const token = this.nextAssignOpenToken()
|
||||
const year = this.pageForm.year || moment().format("YYYY")
|
||||
this.assignForm = this.defaultAssignForm(year)
|
||||
this.assignForm.matterId = ""
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.candidateData = []
|
||||
this.selectedCandidates = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignDialogVisible = true
|
||||
this.loadAssignSettingOptions()
|
||||
},
|
||||
resetAssignDialog() {
|
||||
this.assignForm = this.defaultAssignForm(moment().format("YYYY"))
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.assignSettingOptions = []
|
||||
this.assignMatterOptions = []
|
||||
this.candidateData = []
|
||||
this.selectedCandidates = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignSubmitting = false
|
||||
this.candidateLoading = false
|
||||
this.candidateSelectLoading = false
|
||||
this.assignDialogVisible = true
|
||||
this.loadAssignSettingOptions(token)
|
||||
},
|
||||
resetAssignDialog() {
|
||||
this.assignOpenToken += 1
|
||||
this.assignForm = this.defaultAssignForm(moment().format("YYYY"))
|
||||
this.candidateForm = this.defaultCandidateForm()
|
||||
this.assignSettingOptions = []
|
||||
this.assignMatterOptions = []
|
||||
this.candidateData = []
|
||||
this.selectedCandidates = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.assignSubmitting = false
|
||||
this.candidateLoading = false
|
||||
this.candidateSelectLoading = false
|
||||
},
|
||||
// 人员分配弹窗每次打开都生成新的批次标记,旧请求返回时不再覆盖新弹窗数据。
|
||||
nextAssignOpenToken() {
|
||||
this.assignOpenToken += 1
|
||||
return this.assignOpenToken
|
||||
},
|
||||
isCurrentAssignOpen(token) {
|
||||
return this.assignDialogVisible && token === this.assignOpenToken
|
||||
},
|
||||
assignYearChange() {
|
||||
const token = this.assignOpenToken
|
||||
this.assignForm.settingId = ""
|
||||
this.assignForm.matterId = ""
|
||||
this.assignMatterOptions = []
|
||||
@@ -789,31 +809,34 @@ layout("/layouts/platform.html"){
|
||||
this.candidateUserOptions = []
|
||||
this.candidateForm.keyword = ""
|
||||
this.clearCandidateSelection()
|
||||
this.loadAssignSettingOptions()
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignSettingOptions(token)
|
||||
this.loadCandidatePageData(token)
|
||||
},
|
||||
assignSettingChange() {
|
||||
const token = this.assignOpenToken
|
||||
this.assignForm.matterId = ""
|
||||
this.assignMatterOptions = []
|
||||
this.selectedCandidateIds = []
|
||||
this.candidateUserOptions = []
|
||||
this.candidateForm.keyword = ""
|
||||
this.clearCandidateSelection()
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadCandidatePageData(token)
|
||||
},
|
||||
loadAssignSettingOptions() {
|
||||
loadAssignSettingOptions(token) {
|
||||
token = token || this.assignOpenToken
|
||||
this.$axios.post(loc() + "/settingOptions", {year: this.assignForm.year}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
this.assignSettingOptions = res.data || []
|
||||
// 人员分配弹窗独立于主列表筛选,默认取当前年度第一条可用配置。
|
||||
if (!this.assignForm.settingId && this.assignSettingOptions.length > 0) {
|
||||
this.assignForm.settingId = this.assignSettingOptions[0].id
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadCandidatePageData(token)
|
||||
} else if (this.assignForm.settingId) {
|
||||
this.loadAssignMatterOptions()
|
||||
this.loadCandidatePageData()
|
||||
this.loadAssignMatterOptions(token)
|
||||
this.loadCandidatePageData(token)
|
||||
} else {
|
||||
this.assignMatterOptions = []
|
||||
this.candidateData = []
|
||||
@@ -822,18 +845,21 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
})
|
||||
},
|
||||
loadAssignMatterOptions() {
|
||||
loadAssignMatterOptions(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.assignMatterOptions = []
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/matterOptions", {settingId: this.assignForm.settingId}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
this.assignMatterOptions = res.data || []
|
||||
}
|
||||
})
|
||||
},
|
||||
loadCandidatePageData() {
|
||||
loadCandidatePageData(token) {
|
||||
token = token || this.assignOpenToken
|
||||
if (!this.assignForm.settingId) {
|
||||
this.candidateData = []
|
||||
this.candidateForm.totalCount = 0
|
||||
@@ -851,6 +877,7 @@ layout("/layouts/platform.html"){
|
||||
keyword: (this.selectedCandidateIds || []).length > 0 ? "" : this.candidateForm.keyword,
|
||||
userIds: JSON.stringify(this.selectedCandidateIds || [])
|
||||
}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const data = res.data || {}
|
||||
this.candidateData = (data.list || []).map(item => Object.assign({}, item, {
|
||||
@@ -864,7 +891,9 @@ layout("/layouts/platform.html"){
|
||||
this.$message.warning(res.msg || "候选人员查询失败")
|
||||
}
|
||||
}).finally(() => {
|
||||
this.candidateLoading = false
|
||||
if (this.isCurrentAssignOpen(token)) {
|
||||
this.candidateLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
assignMatterChange(value) {
|
||||
@@ -922,6 +951,7 @@ layout("/layouts/platform.html"){
|
||||
// 人员选择器复用候选人员接口,校工会可按分工会过滤,也可不选分工会查询全部会员。
|
||||
this.candidateForm.keyword = keyword || ""
|
||||
this.candidateSelectLoading = true
|
||||
const token = this.assignOpenToken
|
||||
this.$axios.post(loc() + "/candidatePageData", {
|
||||
pageNumber: 1,
|
||||
pageSize: 20,
|
||||
@@ -932,12 +962,15 @@ layout("/layouts/platform.html"){
|
||||
lastThirtyJoined: this.normalizeCandidateFilterValue(this.candidateForm.lastThirtyJoined),
|
||||
keyword: keyword || ""
|
||||
}).then((res) => {
|
||||
if (!this.isCurrentAssignOpen(token)) return
|
||||
if (res.code === 0) {
|
||||
const data = res.data || {}
|
||||
this.candidateUserOptions = this.mergeOptionLists(this.selectedCandidates, data.list || [])
|
||||
}
|
||||
}).finally(() => {
|
||||
this.candidateSelectLoading = false
|
||||
if (this.isCurrentAssignOpen(token)) {
|
||||
this.candidateSelectLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
candidateUserSelectChange(userIds) {
|
||||
|
||||
+27
-30
@@ -379,7 +379,6 @@ layout("/layouts/platform_h5.html"){
|
||||
<van-button v-if="canModify(row) || isTravelEnded(row)" size="small" type="info" :disabled="isTravelEnded(row)" @click="openSignup(row)">修改</van-button>
|
||||
<van-button v-if="canRevoke(row)" size="small" type="danger" plain @click="revokeSignup(row)">撤回</van-button>
|
||||
<van-button v-if="showLeaveThirtyTeachTour(row)" size="small" type="danger" plain :loading="leaveLoading" @click="leaveThirtyTeachTour(row)">退出疗休养报名</van-button>
|
||||
<van-button v-if="showCancel(row)" size="small" type="danger" plain :disabled="isTravelEnded(row)" @click="cancelByRow(row)">取消报名</van-button>
|
||||
<van-button v-if="showExport(row)" size="small" type="info" plain :disabled="!canExport(row)" @click="downloadExport(row, 'cost')">报销申请</van-button>
|
||||
<van-button v-if="showDirectRelativeExport(row)" size="small" type="info" plain :disabled="!canDirectRelativeExport(row)" @click="downloadExport(row, 'direct')">亲属线路申请</van-button>
|
||||
</div>
|
||||
@@ -470,8 +469,9 @@ layout("/layouts/platform_h5.html"){
|
||||
<div class="tour-section-title">教职工信息</div>
|
||||
<van-field label="姓名" readonly v-model="signupForm.userName"></van-field>
|
||||
<van-field label="工号" readonly v-model="signupForm.jobNo"></van-field>
|
||||
<van-field label="身份证号" v-model="signupForm.idCard" maxlength="30" placeholder="请填写身份证号"></van-field>
|
||||
<van-field label="身份证号" readonly v-model="signupForm.idCard"></van-field>
|
||||
<van-field label="年龄" readonly :value="staffAge(signupForm)"></van-field>
|
||||
<van-field label="手机号" readonly v-model="signupForm.mobile"></van-field>
|
||||
<van-field label="所在工会" readonly v-model="signupForm.unionName"></van-field>
|
||||
</div>
|
||||
|
||||
@@ -480,13 +480,13 @@ layout("/layouts/platform_h5.html"){
|
||||
<van-field label="报名线路" readonly v-model="signupForm.lineName"></van-field>
|
||||
<van-field label="线路类型" readonly v-model="signupForm.lineType"></van-field>
|
||||
<van-field label="出行时间" readonly v-model="signupForm.travelPeriod"></van-field>
|
||||
<van-field readonly clickable is-link label="乘车地点" v-model="signupForm.boardingPlace" placeholder="请选择乘车地点" @click="openBoardingPlacePicker"></van-field>
|
||||
<van-field v-if="fillBedInfo" readonly clickable is-link label="床型" v-model="signupForm.bedType" placeholder="请选择床型" @click="openBedPicker('self')"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床位信息" v-model="signupForm.bedInfo" maxlength="100" placeholder="请输入床位信息"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="意向拼床人" v-model="signupForm.intendedRoommate" maxlength="100" placeholder="请输入意向拼床人"></van-field>
|
||||
<van-field required readonly clickable is-link label="乘车地点" v-model="signupForm.boardingPlace" placeholder="请选择乘车地点" @click="openBoardingPlacePicker"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床型" readonly v-model="signupForm.bedType"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床位信息" readonly v-model="signupForm.bedInfo"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="意向拼床人" readonly v-model="signupForm.intendedRoommate"></van-field>
|
||||
<van-field v-if="canApplyOverReimbursement(signupForm)" class="tour-over-cost" label="报销超出费用">
|
||||
<template #input>
|
||||
<van-radio-group v-model="signupForm.overCostReimbursed" direction="horizontal">
|
||||
<van-radio-group v-model="signupForm.overCostReimbursed" direction="horizontal" disabled>
|
||||
<van-radio :name="true">是</van-radio>
|
||||
<van-radio :name="false">否</van-radio>
|
||||
</van-radio-group>
|
||||
@@ -499,12 +499,12 @@ layout("/layouts/platform_h5.html"){
|
||||
|
||||
<div v-if="isDirectFamilyLine(signupForm)" class="tour-section">
|
||||
<div class="tour-section-title">直系亲属线路</div>
|
||||
<van-field label="亲属姓名" v-model="directRelativeForm.relativeName" maxlength="100" placeholder="请输入亲属姓名"></van-field>
|
||||
<van-field label="所在单位" v-model="directRelativeForm.unitName" maxlength="100" placeholder="请输入所在单位"></van-field>
|
||||
<van-field readonly clickable is-link label="亲属关系" v-model="directRelativeForm.relationshipName" placeholder="请选择亲属关系" @click="openDirectRelativePicker"></van-field>
|
||||
<van-field label="线路名称" v-model="directRelativeForm.lineName" maxlength="100" placeholder="请输入线路名称"></van-field>
|
||||
<van-field label="出行开始" v-model="directRelativeForm.travelStartTime" type="date" placeholder="请选择出行开始日期"></van-field>
|
||||
<van-field label="出行结束" v-model="directRelativeForm.travelEndTime" type="date" placeholder="请选择出行结束日期"></van-field>
|
||||
<van-field label="亲属姓名" readonly v-model="directRelativeForm.relativeName"></van-field>
|
||||
<van-field label="所在单位" readonly v-model="directRelativeForm.unitName"></van-field>
|
||||
<van-field label="亲属关系" readonly v-model="directRelativeForm.relationshipName"></van-field>
|
||||
<van-field label="线路名称" readonly v-model="directRelativeForm.lineName"></van-field>
|
||||
<van-field label="出行开始" readonly v-model="directRelativeForm.travelStartTime"></van-field>
|
||||
<van-field label="出行结束" readonly v-model="directRelativeForm.travelEndTime"></van-field>
|
||||
</div>
|
||||
|
||||
<div v-if="allowFamily && !isDirectFamilyLine(signupForm)" class="tour-section">
|
||||
@@ -512,29 +512,26 @@ layout("/layouts/platform_h5.html"){
|
||||
<div v-for="(item,index) in familyData" :key="index" class="tour-family-card">
|
||||
<div class="tour-family-head">
|
||||
<span>家属{{ index + 1 }}</span>
|
||||
<van-button size="mini" type="danger" plain @click="removeFamily(index)">删除</van-button>
|
||||
</div>
|
||||
<van-field label="姓名" v-model="item.familyName" maxlength="100" placeholder="请填写姓名"></van-field>
|
||||
<van-field label="年龄" v-model.number="item.age" type="digit" placeholder="请填写年龄"></van-field>
|
||||
<van-field label="姓名" readonly v-model="item.familyName"></van-field>
|
||||
<van-field label="年龄" readonly v-model="item.age"></van-field>
|
||||
<van-field label="性别">
|
||||
<template #input>
|
||||
<van-radio-group v-model="item.gender" direction="horizontal">
|
||||
<van-radio-group v-model="item.gender" direction="horizontal" disabled>
|
||||
<van-radio name="男">男</van-radio>
|
||||
<van-radio name="女">女</van-radio>
|
||||
</van-radio-group>
|
||||
</template>
|
||||
</van-field>
|
||||
<van-field label="身份证号" v-model="item.idCard" maxlength="18" placeholder="请填写身份证号" @blur="normalizeFamilyIdCard(item)"></van-field>
|
||||
<van-field readonly clickable is-link label="关系" v-model="item.relationship" placeholder="请选择关系" @click="openRelationshipPicker(index)"></van-field>
|
||||
<van-field v-if="fillBedInfo" readonly clickable is-link label="床型" v-model="item.bedType" placeholder="请选择床型" @click="openBedPicker('family', index)"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床位" v-model="item.bedInfo" maxlength="100" placeholder="请输入床位信息"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="意向拼床人" v-model="item.intendedRoommate" maxlength="100" placeholder="请输入意向拼床人"></van-field>
|
||||
<van-field label="身份证号" readonly v-model="item.idCard"></van-field>
|
||||
<van-field label="关系" readonly v-model="item.relationship"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床型" readonly v-model="item.bedType"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="床位" readonly v-model="item.bedInfo"></van-field>
|
||||
<van-field v-if="fillBedInfo" label="意向拼床人" readonly v-model="item.intendedRoommate"></van-field>
|
||||
</div>
|
||||
<van-cell title="添加家属" is-link @click="addFamily"></van-cell>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tour-bottom-bar">
|
||||
<van-button v-if="showCancel(signupForm)" type="danger" plain block round :loading="cancelLoading" @click="cancelSignup">取消报名</van-button>
|
||||
<van-button type="info" block round :loading="signupLoading" @click="submitSignup">提交</van-button>
|
||||
</div>
|
||||
</van-popup>
|
||||
@@ -623,7 +620,7 @@ layout("/layouts/platform_h5.html"){
|
||||
return this.directRelativeOptions.map(item => ({ text: item.name || item.code, item }))
|
||||
},
|
||||
boardingPlaceColumns() {
|
||||
return this.boardingPlaceOptions
|
||||
return [""].concat(this.boardingPlaceOptions || [])
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -986,7 +983,7 @@ layout("/layouts/platform_h5.html"){
|
||||
this.boardingPlacePickerVisible = true
|
||||
},
|
||||
confirmBoardingPlace(value) {
|
||||
this.signupForm.boardingPlace = value
|
||||
this.signupForm.boardingPlace = value || ""
|
||||
this.boardingPlacePickerVisible = false
|
||||
},
|
||||
normalizeFamilyIdCard(row) {
|
||||
@@ -1032,11 +1029,11 @@ layout("/layouts/platform_h5.html"){
|
||||
vant.Toast("请选择乘车地点")
|
||||
return
|
||||
}
|
||||
if (!this.validateFamilies() || !this.validateDirectRelative()) return
|
||||
const families = this.allowFamily && this.signupForm.hasFamily ? this.familyData : []
|
||||
// H5 修改页当前只允许调整乘车地点,家属、直系亲属等历史报名信息仅展示不参与提交校验。
|
||||
const form = Object.assign({}, this.signupForm, {
|
||||
families: JSON.stringify(families),
|
||||
directRelative: this.isDirectFamilyLine(this.signupForm) ? JSON.stringify(this.directRelativeForm) : ""
|
||||
boardingPlaceOnly: true,
|
||||
families: "[]",
|
||||
directRelative: ""
|
||||
})
|
||||
this.signupLoading = true
|
||||
this.$axios.post("/platform/thirtyTeachTour/mysignup/doSignup", form).then((res) => {
|
||||
|
||||
Reference in New Issue
Block a user