Merge remote-tracking branch 'origin/main'

This commit is contained in:
@jyuhsin
2025-09-25 21:34:42 +08:00
59 changed files with 2492 additions and 412 deletions
@@ -616,6 +616,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
this.$axios.post('/platform/activity/culture/applyActivity/save', {data: JSON.stringify(formData)}).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
this.$emit("goBack")
if (this.activity_type === 40002) {
commonUtil.pjaxPush("/platform/activity/culture/infoManage/union")
} else if (this.activity_type === 40003) {
@@ -656,6 +657,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
data: JSON.stringify(formData)
}).then(res => {
if (res.code === 0) {
this.$emit("goBack")
this.$message.success("提交成功")
if (this.activity_type === 40002) {
commonUtil.pjaxPush("/platform/activity/culture/infoManage/union")
@@ -698,6 +700,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
taskId: this.taskId
}).then(res => {
if (res.code === 0) {
this.$emit("goBack")
this.$message.success("提交成功")
if (this.activity_type === 40002) {
commonUtil.pjaxPush("/platform/activity/culture/infoManage/union")
@@ -776,11 +779,11 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
this.$emit("goBack")
} else {
if (this.activity_type === 40002) {
pjaxReplace("/platform/activity/culture/infoManage/union")
commonUtil.pjaxPush("/platform/activity/culture/infoManage/union")
} else if (this.activity_type === 40003) {
pjaxReplace("/platform/activity/culture/infoManage/club")
commonUtil.pjaxPush("/platform/activity/culture/infoManage/club")
} else {
pjaxReplace("/platform/activity/culture/infoManage/school")
commonUtil.pjaxPush("/platform/activity/culture/infoManage/school")
}
}
@@ -130,7 +130,7 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
`,
props: {
activity_type: {
value: { type: Object, default: "" }
value: {type: Object, default: ""}
}
},
store,
@@ -141,20 +141,20 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
unionList: [],
showApprovalForm: false,
auditList: [
{ code: true, name: "已审核" },
{ code: false, name: "未审核" }
{code: true, name: "已审核"},
{code: false, name: "未审核"}
],
pageForm: {
approval: false,
year: new Date().getFullYear() + ""
},
tableColumns: [
{ prop: "name", label: "活动名称" },
{ prop: "address", label: "活动地点" },
{ prop: "projectTypeName", label: "活动项目类型" },
{ prop: "tussueName", label: "举办单位" },
{ prop: "time", label: "活动日期" },
{ prop: "applyTime", label: "创建时间", sortable: true },
{prop: "name", label: "活动名称"},
{prop: "address", label: "活动地点"},
{prop: "projectTypeName", label: "活动项目类型"},
{prop: "tussueName", label: "举办单位"},
{prop: "time", label: "活动日期"},
{prop: "applyTime", label: "创建时间", sortable: true},
]
}
},
@@ -164,7 +164,7 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
methods: {
openAudit(row) {
this.$refs.guava.edit(()=>{
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
@@ -175,7 +175,7 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
},
onView(row) {
this.$refs.guava.edit(()=>{
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.editInfo.onOpen(row)
})
@@ -197,11 +197,11 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
this.$axios.post("/platform/activity/culture/auditActivity/doReview", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}), id: this.formData.id
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
@@ -230,8 +230,8 @@ const ACTIVITY_CULTURE_AUDIT_ACTIVITY = {
// 根据 activity_type 动态添加流程相关列
if (this.activity_type === 40002 || this.activity_type === 40003) {
this.tableColumns.push(
{prop: "curTaskName", label: "当前节点"},
{prop: "instanceState", label: "流程状态"}
{prop: "curTaskName", label: "当前节点"},
{prop: "instanceState", label: "流程状态"}
);
}
this.unionList = await this.$businessTool.listUnion()
@@ -56,6 +56,12 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
<template scope="{row}" v-else-if="column.prop=='projectTypeName'">
{{row.projectTypeName}}({{row.projectTypeCode}})
</template>
<template scope="{row}" v-else-if="column.prop=='tussueName'">
<span v-if="row.activity_type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
<span v-if="row.activity_type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
<span v-if="row.activity_type==40001">校工会</span>
</template>
<template scope="{row}" v-else-if="column.prop=='isUnseal'">
<el-switch
@@ -151,50 +151,63 @@ var ACTIVITY_SPORTS_APPLY_USER = {
v-loading="applyUserTabLoading">
<el-table-column :reserve-selection="true"
align="center" header-align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
align="center" header-align="center" label="序号"
label="序号"
type="index"
width="80">
</el-table-column>
<el-table-column
align="center" header-align="center" label="所属队"
label="所属队"
prop="team" width="80">
</el-table-column>
<el-table-column
align="center" header-align="center" label="姓名"
label="姓名"
prop="username" width="130">
</el-table-column>
<el-table-column
align="center" header-align="center" label="教工号"
label="教工号"
prop="loginname" width="130">
</el-table-column>
<el-table-column
align="center" header-align="center" label="单位"
label="单位"
prop="unitname"
sortable>
</el-table-column>
<el-table-column
align="center" header-align="center" label="性别"
label="性别"
prop="sex" width="80">
</el-table-column>
<el-table-column
label="联系方式"
prop="mobile" width="150">
<template v-slot="{row}">
<el-input placeholder="请输入联系方式"
v-model="row.mobile"></el-input>
</template>
</el-table-column>
<el-table-column
align="center" header-align="center" label="年龄"
label="职级"
prop="professionalLevel" width="80">
</el-table-column>
<el-table-column
label="年龄"
prop="age" width="80">
</el-table-column>
<el-table-column
align="center" header-align="center" label="身份"
label="身份"
prop="identity" width="300px">
<template scope="{$index,row}">
<el-tag :disable-transitions="false"
@@ -530,6 +543,14 @@ var ACTIVITY_SPORTS_APPLY_USER = {
})
return
}
//判断每一个选手填写的是否正确
for (let i = 0; i < applyUserList.length; i++) {
if (!applyUserList[i].mobile) {
this.$message.warning("请输入联系方式!")
return
}
}
if (projectType !== "1") {
for (let i = 0; i < teamApplyData.length; i++) {
@@ -697,6 +718,7 @@ var ACTIVITY_SPORTS_APPLY_USER = {
loginname: v.loginname,
username: v.username,
age: v.age,
professionalLevel: v.professionalLevel,
birthday: v.birthday,
unitId: v.unitId,
unionId: v.unionId,
@@ -850,7 +872,7 @@ var ACTIVITY_SPORTS_APPLY_USER = {
return {
id: user.id,
loginname: user.loginname,
name: user.username + "" + (user.sex ? user.sex : "") + "-" + user.loginname + ""
name: user.username + "" + (user.sex ? user.sex : "") + "-" + user.loginname + "-" + user.age + (user.professionalLevel ? ("-" + user.professionalLevel) : "") + ""
}
},
uniteApplyReset() {
@@ -69,8 +69,9 @@ var ACTIVITY_SPORTS_DELETE_USER = {
{ prop: "name", label: "所属小队" },
{ prop: "username", label: "姓名" },
{ prop: "loginname", label: "工号" },
{ prop: "mobile", label: "电话" },
{ prop: "sex", label: "性别" },
{ prop: "mobile", label: "联系方式" },
{ prop: "professionalLevel", label: "职级" },
{ prop: "identity", label: "身份", sortable: true },
{ prop: "allName", label: "报名项目" }
]
@@ -270,7 +270,7 @@ let ACTIVITY_SPORTS_ADD_ACTIVITY = {
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="files" label="封面图" v-if="formData.applyWay.includes(1)">
<el-form-item prop="files" label="封面图" >
<file-upload
:value.sync="formData.image"
:upload_number="1"
@@ -60,20 +60,21 @@ layout("/layouts/platform.html"){
row-key="id"
@sort-change="pageOrder"
>
<el-table-column type="selection" width="55" reserve-selection fixed="left" :selectable="(row)=>{return row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62'}"></el-table-column>
<!-- <el-table-column type="selection" width="55" reserve-selection fixed="left" :selectable="(row)=>{return row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62'}"></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod" fixed="left"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100" fixed="left"></el-table-column>
<el-table-column label="年龄" prop="age" width="100"></el-table-column>
<el-table-column label="性别" prop="sex" width="100" fixed="left"></el-table-column>
<el-table-column label="民族" prop="nation" min-width="100"></el-table-column>
<!-- <el-table-column label="民族" prop="nation" min-width="100"></el-table-column>-->
<el-table-column label="职称" prop="professionalTitle" min-width="150"></el-table-column>
<el-table-column label="职级" prop="professionalLevel" min-width="100"></el-table-column>
<el-table-column label="校级领导" prop="schoolLeader" min-width="100">
<!-- :style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"-->
<!-- <el-table-column label="校级领导" prop="schoolLeader" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.schoolLeader"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
@@ -82,25 +83,53 @@ layout("/layouts/platform.html"){
<el-checkbox
v-if="row"
v-model="row.middleLevelLeader"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
</el-table-column>-->
<!--
<el-table-column label="专任教师" prop="ordinaryTeacher" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.ordinaryTeacher"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="高级职称专任教师" prop="seniorTeacher" min-width="150">
</el-table-column>-->
<el-table-column label="高级职称" prop="seniorTeacher" min-width="120">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.seniorTeacher"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="中级职称及以下" prop="intermediateBelow" min-width="120">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.intermediateBelow"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="干部" prop="cadre" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.cadre"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="工人" prop="worker" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.worker"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
@@ -109,7 +138,7 @@ layout("/layouts/platform.html"){
<el-checkbox
v-if="row"
v-model="row.isJdh"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
@@ -118,7 +147,7 @@ layout("/layouts/platform.html"){
<el-checkbox
v-if="row"
v-model="row.isGdh"
:style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
@@ -234,19 +263,21 @@ layout("/layouts/platform.html"){
},
onBatchSubmit() {
const selection = this.$refs.tableRef.selection
if (selection.length === 0){
/*if (selection.length === 0){
this.$message.warning('请选择要上报的记录')
return
}
}*/
this.$confirm('您确定要上报吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const loading = createLoading('正在提交中')
const {code, msg} = await this.$axios.post('/platform/teacherCongress/delegate/push/batchSubmit', {
ids: JSON.stringify(selection.map(v => v.id)),
sessionId: this.pageForm.sessionId
})
loading.close()
if (code === 0) {
this.$message.success(msg)
this.doSearch()
@@ -20,8 +20,10 @@ const pushAttendanceDialog = {
<div class="transfer-item-details">
<span class="detail-item">{{ option.sex}}</span>
<span class="detail-item" v-if="option.age">{{ option.age }}岁</span>
<span class="detail-item" v-if="option.professionalTitle">{{ option.professionalTitle }}</span>
<span class="detail-item" v-if="option.professionalLevel">{{ option.professionalLevel }}</span>
<span class="detail-item"
v-if="option.professionalTitle">{{ option.professionalTitle }}</span>
<span class="detail-item"
v-if="option.professionalLevel">{{ option.professionalLevel }}</span>
<span class="detail-item" v-if="option.nation">{{ option.nation }}</span>
</div>
</div>
@@ -63,11 +65,13 @@ const pushAttendanceDialog = {
return item.userName.indexOf(query) > -1
},
async onConfirm() {
const loading = createLoading('正在提交中')
const {code, msg} = await $.post('/platform/teacherCongress/delegate/push/addPreselectionDb', {
userValue: JSON.stringify(this.userValue),
sessionId: this.sessionId,
representativeType: '列席代表'
})
loading.close()
if (code === 0) {
this.dialogVisible = false
this.$message.success(msg)
@@ -76,10 +80,10 @@ const pushAttendanceDialog = {
}
},
style: /*language=CSS*/ `
.push-attendance-dialog ::v-deep .el-transfer{
text-align: center!important;
.push-attendance-dialog ::v-deep .el-transfer {
text-align: center !important;
}
.push-attendance-dialog ::v-deep .el-transfer-panel__item.el-checkbox {
height: auto;
display: block;
@@ -115,7 +119,8 @@ const pushAttendanceDialog = {
display: inline-flex;
align-items: center;
}
.push-attendance-dialog ::v-deep .el-transfer-panel{
.push-attendance-dialog ::v-deep .el-transfer-panel {
height: 60vh;
text-align: left !important;
width: 35% !important;
@@ -20,8 +20,10 @@ const pushFormalDialog = {
<div class="transfer-item-details">
<span class="detail-item">{{ option.sex}}</span>
<span class="detail-item" v-if="option.age">{{ option.age }}岁</span>
<span class="detail-item" v-if="option.professionalTitle">{{ option.professionalTitle }}</span>
<span class="detail-item" v-if="option.professionalLevel">{{ option.professionalLevel }}</span>
<span class="detail-item"
v-if="option.professionalTitle">{{ option.professionalTitle }}</span>
<span class="detail-item"
v-if="option.professionalLevel">{{ option.professionalLevel }}</span>
<span class="detail-item" v-if="option.nation">{{ option.nation }}</span>
</div>
</div>
@@ -63,11 +65,13 @@ const pushFormalDialog = {
return item.userName.indexOf(query) > -1
},
async onConfirm() {
const loading = createLoading('正在提交中')
const {code, msg} = await this.$axios.post('/platform/teacherCongress/delegate/push/addPreselectionDb', {
userValue: JSON.stringify(this.userValue),
sessionId: this.sessionId,
representativeType: '正式代表'
})
loading.close()
if (code === 0) {
this.dialogVisible = false
this.$message.success(msg)
@@ -76,11 +80,11 @@ const pushFormalDialog = {
}
},
style: /*language=CSS*/ `
.push-formal-dialog ::v-deep .el-transfer{
text-align: center!important;
.push-formal-dialog ::v-deep .el-transfer {
text-align: center !important;
}
.push-formal-dialog ::v-deep .el-transfer-panel__item.el-checkbox {
.push-formal-dialog ::v-deep .el-transfer-panel__item.el-checkbox {
height: auto;
display: block;
margin-right: 0;
@@ -116,7 +120,7 @@ const pushFormalDialog = {
align-items: center;
}
.push-formal-dialog ::v-deep .el-transfer-panel{
.push-formal-dialog ::v-deep .el-transfer-panel {
height: 60vh;
text-align: left !important;
width: 35% !important;
@@ -53,7 +53,7 @@ const pushProgress = {
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">高级职称专任教师</div>
<div class="metric-title">高级职称代表</div>
<div class="metric-value">{{ metrics.seniorTeacher.current }}<span
class="metric-target"
>/ {{ metrics.seniorTeacher.target }}</span></div>
@@ -81,14 +81,14 @@ const pushProgress = {
</div>
</div>
<!-- 专任教师代表数 -->
<!-- 中级职称及以下-->
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">专任教师代表</div>
<div class="metric-value">{{ metrics.ordinaryTeacher.current }}<span
<div class="metric-title">中级职称及以下代表</div>
<div class="metric-value">{{ metrics.intermediateBelow.current }}<span
class="metric-target"
>/ {{ metrics.ordinaryTeacher.target }}</span></div>
>/ {{ metrics.intermediateBelow.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-chalkboard-teacher text-primary"></i>
@@ -97,23 +97,121 @@ const pushProgress = {
<div class="progress-bar">
<div
class="progress-bar-inner bg-primary"
:style="{width: metrics.ordinaryTeacher.progress * 100 + '%'}"
:style="{width: metrics.intermediateBelow.progress * 100 + '%'}"
></div>
</div>
<div class="progress-info">
<span v-if="metrics.ordinaryTeacher.progress>=1 || metrics.ordinaryTeacher.target===0"
<span v-if="metrics.intermediateBelow.progress>=1 || metrics.intermediateBelow.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.ordinaryTeacher.progress<1" class="text-primary">
<span v-else-if="metrics.intermediateBelow.progress<1" class="text-primary">
未达标
</span>
<span
v-if="metrics.ordinaryTeacher.remaining>0"
v-if="metrics.intermediateBelow.remaining>0"
class="text-gray-500"
>剩余 {{ metrics.ordinaryTeacher.remaining }} 人</span>
>剩余 {{ metrics.intermediateBelow.remaining }} 人</span>
</div>
</div>
<!-- 干部-->
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">干部代表</div>
<div class="metric-value">{{ metrics.cadre.current }}<span
class="metric-target"
>/ {{ metrics.cadre.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-chalkboard-teacher text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.cadre.progress * 100 + '%'}"
></div>
</div>
<div class="progress-info">
<span v-if="metrics.cadre.progress>=1 || metrics.cadre.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.cadre.progress<1" class="text-primary">
未达标
</span>
<span
v-if="metrics.cadre.remaining>0"
class="text-gray-500"
>剩余 {{ metrics.cadre.remaining }} 人</span>
</div>
</div>
<!-- 工人-->
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">工人代表</div>
<div class="metric-value">{{ metrics.worker.current }}<span
class="metric-target"
>/ {{ metrics.worker.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-chalkboard-teacher text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.worker.progress * 100 + '%'}"
></div>
</div>
<div class="progress-info">
<span v-if="metrics.worker.progress>=1 || metrics.worker.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.worker.progress<1" class="text-primary">
未达标
</span>
<span
v-if="metrics.worker.remaining>0"
class="text-gray-500"
>剩余 {{ metrics.worker.remaining }} 人</span>
</div>
</div>
<!-- 专任教师代表数 -->
<!-- <div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">专任教师代表</div>
<div class="metric-value">{{ metrics.ordinaryTeacher.current }}<span
class="metric-target"
>/ {{ metrics.ordinaryTeacher.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-chalkboard-teacher text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div
class="progress-bar-inner bg-primary"
:style="{width: metrics.ordinaryTeacher.progress * 100 + '%'}"
></div>
</div>
<div class="progress-info">
<span v-if="metrics.ordinaryTeacher.progress>=1 || metrics.ordinaryTeacher.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.ordinaryTeacher.progress<1" class="text-primary">
未达标
</span>
<span
v-if="metrics.ordinaryTeacher.remaining>0"
class="text-gray-500"
>剩余 {{ metrics.ordinaryTeacher.remaining }} 人</span>
</div>
</div>-->
<!-- 女代表数 -->
<div class="metric-card">
@@ -178,100 +276,100 @@ const pushProgress = {
}} 人</span>
</div>
</div>
<!-- &lt;!&ndash; 少数民族数 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">少数民族代表</div>
<div class="metric-value">{{ metrics.ethnicMinority.current }}<span
class="metric-target"
>/ {{ metrics.ethnicMinority.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.ethnicMinority.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.ethnicMinority.progress>=1 || metrics.ethnicMinority.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.ethnicMinority.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.ethnicMinority.remaining>0" class="text-gray-500">剩余 {{
metrics.ethnicMinority.remaining
}} 人</span>
</div>
</div>
&lt;!&ndash; 校级领导 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">校级领导代表</div>
<div class="metric-value">{{ metrics.schoolLeader.current }}<span
class="metric-target"
>/ {{ metrics.schoolLeader.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.schoolLeader.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.schoolLeader.progress>=1 || metrics.schoolLeader.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.schoolLeader.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.schoolLeader.remaining>0" class="text-gray-500">剩余 {{
metrics.schoolLeader.remaining
}} 人</span>
</div>
</div>
<!-- &lt;!&ndash; 少数民族数 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">少数民族代表</div>
<div class="metric-value">{{ metrics.ethnicMinority.current }}<span
class="metric-target"
>/ {{ metrics.ethnicMinority.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.ethnicMinority.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.ethnicMinority.progress>=1 || metrics.ethnicMinority.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.ethnicMinority.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.ethnicMinority.remaining>0" class="text-gray-500">剩余 {{
metrics.ethnicMinority.remaining
}} 人</span>
</div>
</div>
&lt;!&ndash; 校级领导 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">校级领导代表</div>
<div class="metric-value">{{ metrics.schoolLeader.current }}<span
class="metric-target"
>/ {{ metrics.schoolLeader.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.schoolLeader.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.schoolLeader.progress>=1 || metrics.schoolLeader.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.schoolLeader.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.schoolLeader.remaining>0" class="text-gray-500">剩余 {{
metrics.schoolLeader.remaining
}} 人</span>
</div>
</div>
&lt;!&ndash; 中层领导 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">中层领导</div>
<div class="metric-value">{{ metrics.middleLevelLeader.current }}<span
class="metric-target"
>/ {{ metrics.middleLevelLeader.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.middleLevelLeader.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.middleLevelLeader.progress>=1 || metrics.middleLevelLeader.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.middleLevelLeader.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.middleLevelLeader.remaining>0" class="text-gray-500">剩余 {{
metrics.middleLevelLeader.remaining
}} 人</span>
</div>
</div>-->
&lt;!&ndash; 中层领导 &ndash;&gt;
<div class="metric-card">
<div class="metric-header">
<div>
<div class="metric-title">中层领导</div>
<div class="metric-value">{{ metrics.middleLevelLeader.current }}<span
class="metric-target"
>/ {{ metrics.middleLevelLeader.target }}</span></div>
</div>
<div class="metric-icon bg-primary-light">
<i class="fas fa-user-graduate text-primary"></i>
</div>
</div>
<div class="progress-bar">
<div class="progress-bar-inner bg-primary"
:style="{width: metrics.middleLevelLeader.progress * 100 + '%'}"></div>
</div>
<div class="progress-info">
<span v-if="metrics.middleLevelLeader.progress>=1 || metrics.middleLevelLeader.target===0"
class="text-success">
已达标
</span>
<span v-else-if="metrics.middleLevelLeader.progress<1" class="text-primary">
未达标
</span>
<span v-if="metrics.middleLevelLeader.remaining>0" class="text-gray-500">剩余 {{
metrics.middleLevelLeader.remaining
}} 人</span>
</div>
</div>-->
</div>
</div>
@@ -336,6 +434,24 @@ const pushProgress = {
progress: 66.7,
remaining: 2
},
intermediateBelow: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
},
cadre: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
},
worker: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
},
ordinaryTeacher: {
current: 8,
target: 10,
@@ -88,15 +88,15 @@ const write = {
<el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>
</el-form-item>
<el-form-item label="学历" prop="education">
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历"
code="USER_EDUCATION"></dict-select>
</el-form-item>
<el-form-item label="学位" prop="academicDegree">
<dict-select v-model="formData.academicDegree" style="width: 100%"
placeholder="请选择学位"
code="USER_ACADEMIC_DEGREE"></dict-select>
</el-form-item>
<!-- <el-form-item label="学历" prop="education">
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历"
code="USER_EDUCATION"></dict-select>
</el-form-item>
<el-form-item label="学位" prop="academicDegree">
<dict-select v-model="formData.academicDegree" style="width: 100%"
placeholder="请选择学位"
code="USER_ACADEMIC_DEGREE"></dict-select>
</el-form-item>-->
<el-form-item label="所属工会">
<el-input
@@ -128,15 +128,36 @@ const write = {
code="JobTitle"></dict-select>
</el-form-item>
<el-form-item label="是否专任教师" prop="ordinaryTeacher">
<el-radio-group v-model="formData.ordinaryTeacher" size="small">
<!-- <el-form-item label="是否专任教师" prop="ordinaryTeacher">
<el-radio-group v-model="formData.ordinaryTeacher" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>-->
<el-form-item label="是否高级职称" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否级职称专任教师" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small">
<el-form-item label="是否级职称及以下" prop="intermediateBelow">
<el-radio-group v-model="formData.intermediateBelow" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
@@ -169,13 +190,15 @@ const write = {
</div>
</div>
<div v-if="formData && formData.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'" class="form-actions">
<div v-if="formData && formData.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'"
class="form-actions">
<el-button @click="onSave">保存草稿</el-button>
<el-button type="primary" @click="onSubmit">提交信息</el-button>
</div>
</el-form>
<div v-if="isSelected && formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'" class="completion-panel">
<div v-if="isSelected && formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'"
class="completion-panel">
<div>
<i class="el-icon-success completion-icon"></i>
<h2 class="completion-title">信息提交成功</h2>
@@ -308,7 +331,9 @@ const write = {
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const loading = createLoading('正在提交中')
const {code} = await $.post('/platform/teacherCongress/delegate/push/write/save', this.formData)
loading.close()
if (code === 0) {
this.$message.success('保存成功')
this.$emit('refresh')
@@ -447,7 +472,7 @@ const write = {
margin-bottom: 24px;
}
.completion-panel ::v-deep .completion-actions {
.completion-panel ::v-deep .completion-actions {
display: flex;
justify-content: center;
gap: 16px;
@@ -467,32 +492,32 @@ const write = {
margin-bottom: 32px;
}
.info-box ::v-deep .info-content {
.info-box ::v-deep .info-content {
display: flex;
align-items: flex-start;
}
.info-box .info-content ::v-deep .info-icon {
.info-box .info-content ::v-deep .info-icon {
color: #2563eb;
margin-right: 12px;
margin-top: 2px;
}
.info-box .info-content ::v-deep .info-text {
.info-box .info-content ::v-deep .info-text {
flex: 1;
}
.info-box .info-content .info-text ::v-deep .info-title {
.info-box .info-content .info-text ::v-deep .info-title {
font-weight: 600;
margin-bottom: 8px;
}
.info-box .info-content .info-text ::v-deep .info-desc {
.info-box .info-content .info-text ::v-deep .info-desc {
color: #666;
margin-bottom: 8px;
}
.info-box .info-content .info-text ::v-deep .info-details {
.info-box .info-content .info-text ::v-deep .info-details {
font-size: 14px;
color: #666;
margin-top: 8px;
@@ -506,19 +531,19 @@ const write = {
margin-bottom: 32px;
}
.form-section ::v-deep .section-title {
.form-section ::v-deep .section-title {
font-size: 18px;
font-weight: 500;
margin-bottom: 16px;
}
.form-section ::v-deep .form-grid {
.form-section ::v-deep .form-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: 12px;
}
.form-section ::v-deep .form-grid.full-width {
.form-section ::v-deep .form-grid.full-width {
grid-template-columns: 1fr;
}
@@ -14,7 +14,7 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="分工会">
<el-select v-model="pageForm.unionId" filterable @change="listUnit" clearable style="width: 100%">
<el-select v-model="pageForm.unionId" filterable clearable style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
@@ -33,6 +33,7 @@ layout("/layouts/platform.html"){
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
<el-button type="primary" size="small" @click="exportExcel" class="ml5">导出</el-button>
</table-tool>
<el-table
@@ -47,20 +48,46 @@ layout("/layouts/platform.html"){
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<el-table-column label="民族" prop="nation"></el-table-column>
<!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash;
<el-table-column label="政治面貌" prop="political"
show-overflow-tooltip></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>-->
<el-table-column label="职称" prop="professionalTitle"></el-table-column>
<el-table-column label="职级" prop="professionalLevel"></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher">
<template v-slot="{row}">
<span v-if="row.seniorTeacher" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否中级职称及以下" prop="intermediateBelow">
<template v-slot="{row}">
<span v-if="row.intermediateBelow" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否干部" prop="cadre">
<template v-slot="{row}">
<span v-if="row.cadre" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否工人" prop="worker">
<template v-slot="{row}">
<span v-if="row.worker" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh">
<template v-slot="{row}">
{{row.isJdh?"是":"否"}}
<span v-if="row.isJdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh">
<template v-slot="{row}">
{{row.isGdh?"是":"否"}}
<span v-if="row.isGdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
@@ -130,6 +157,9 @@ layout("/layouts/platform.html"){
}
},
methods: {
exportExcel() {
this.$downLoad("/platform/teacherCongress/delegate/push/zcAudit/exportExcel", this.pageForm)
},
onView(row) {
this.writeDialog = true
this.userId = row.userId
@@ -45,8 +45,11 @@ layout("/layouts/platform.html"){
<el-table-column prop="memberCount" label="会员人数"></el-table-column>
<el-table-column prop="dbCount" label="代表人数"></el-table-column>
<el-table-column prop="allocationNum" label="名额分配人数"></el-table-column>
<el-table-column prop="seniorTeaNum" label="高级职称专任教师代表数"></el-table-column>
<el-table-column prop="ordinaryTeaNum" label="专任教师代表数"></el-table-column>
<el-table-column prop="seniorTeaNum" label="高级职称代表数"></el-table-column>
<el-table-column prop="intermediateBelowNum" label="中级职称及以下代表数"></el-table-column>
<el-table-column prop="cadreNum" label="干部代表数"></el-table-column>
<el-table-column prop="workerNum" label="工人代表数"></el-table-column>
<!-- <el-table-column prop="ordinaryTeaNum" label="专任教师代表数"></el-table-column>-->
<el-table-column prop="femaleNum" label="女代表数"></el-table-column>
<el-table-column prop="less45Num" label="45岁以下代表数"></el-table-column>
</el-table>
@@ -51,7 +51,7 @@ const MANUAL_ALLOCATION_DIALOG = {
></el-input-number>
</template>
</el-table-column>
<el-table-column prop="seniorTeaNum" label="高级职称专任教师代表数">
<el-table-column prop="seniorTeaNum" label="高级职称代表数">
<template v-slot="{row}">
<el-input-number
style="width: 100%"
@@ -63,11 +63,11 @@ const MANUAL_ALLOCATION_DIALOG = {
></el-input-number>
</template>
</el-table-column>
<el-table-column prop="ordinaryTeaNum" label="专任教师代表数">
<el-table-column prop="intermediateBelowNum" label="中级职称及以下代表数">
<template v-slot="{row}">
<el-input-number
style="width: 100%"
v-model="row.ordinaryTeaNum"
v-model="row.intermediateBelowNum"
:precision="0"
:step="1"
:min="0"
@@ -75,6 +75,42 @@ const MANUAL_ALLOCATION_DIALOG = {
></el-input-number>
</template>
</el-table-column>
<el-table-column prop="cadreNum" label="干部代表数">
<template v-slot="{row}">
<el-input-number
style="width: 100%"
v-model="row.cadreNum"
:precision="0"
:step="1"
:min="0"
:max="row.quota"
></el-input-number>
</template>
</el-table-column>
<el-table-column prop="workerNum" label="工人代表数">
<template v-slot="{row}">
<el-input-number
style="width: 100%"
v-model="row.workerNum"
:precision="0"
:step="1"
:min="0"
:max="row.quota"
></el-input-number>
</template>
</el-table-column>
<!-- <el-table-column prop="ordinaryTeaNum" label="专任教师代表数">
<template v-slot="{row}">
<el-input-number
style="width: 100%"
v-model="row.ordinaryTeaNum"
:precision="0"
:step="1"
:min="0"
:max="row.quota"
></el-input-number>
</template>
</el-table-column>-->
<el-table-column prop="femaleNum" label="女代表数">
<template v-slot="{row}">
<el-input-number
@@ -66,7 +66,7 @@ let commonColumns = [
{prop: 'loginname', label: '工号', width: "100"},
{prop: 'username', label: '姓名', width: "80"},
{prop: 'sex', label: '性别', sortable: true, width: '100px', checked: 0},
{prop: 'personType', label: '教职工类别', sortable: true, width: "100"},
{prop: 'personType', label: '人员类型', sortable: true, width: "100"},
{prop: 'userState', label: '在职状态', sortable: true, width: "100"},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true}
@@ -124,6 +124,320 @@ layout("/layouts/platform.html"){
}
})
</script>
<style>
.welfare-select-view-dialog .el-dialog__body {
padding: 20px;
}
/* 项目信息卡片 */
.project-info-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
margin-bottom: 16px;
overflow: hidden;
}
.project-info-header {
padding: 14px 16px;
border-bottom: 1px solid #EBEEF5;
font-size: 16px;
font-weight: 600;
color: #303133;
display: flex;
align-items: center;
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
}
.project-info-header i {
margin-right: 8px;
color: var(--color-primary);
font-size: 18px;
}
.project-info-content {
padding: 0;
}
.info-item {
display: flex;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid #EBEEF5;
}
.info-item:last-child {
border-bottom: none;
}
.info-label {
width: 100px;
color: #606266;
font-weight: 500;
flex-shrink: 0;
}
.info-value {
flex: 1;
color: #303133;
}
/* 选择卡片 */
.my-selections-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
overflow: hidden;
}
.selections-header {
padding: 14px 16px;
border-bottom: 1px solid #EBEEF5;
font-size: 16px;
font-weight: 600;
color: #303133;
display: flex;
align-items: center;
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
}
.selections-header i {
margin-right: 8px;
color: var(--color-primary);
font-size: 18px;
}
.selections-content {
padding: 16px;
}
.selection-item {
display: flex;
align-items: center;
padding: 12px;
border-radius: 6px;
margin-bottom: 12px;
background: #f8f9fb;
transition: all 0.3s;
}
.selection-item:last-child {
margin-bottom: 0;
}
.selection-item:hover {
transform: translateX(4px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
.selection-item-image {
width: 80px;
height: 80px;
border-radius: 4px;
overflow: hidden;
flex-shrink: 0;
}
.selection-item-image .el-image {
width: 100%;
height: 100%;
}
.image-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: #f5f7fa;
color: #909399;
font-size: 24px;
}
.selection-item-info {
flex: 1;
padding: 0 16px;
display: flex;
flex-direction: column;
}
.selection-item-name {
font-size: 15px;
font-weight: 600;
color: #303133;
margin-bottom: 6px;
}
.selection-item-meta {
margin-bottom: 8px;
}
.selection-item-count, .selection-item-time {
font-size: 13px;
color: #606266;
margin-bottom: 4px;
}
.selection-item-actions {
margin-top: 4px;
}
.detail-btn {
padding: 4px 8px;
font-size: 12px;
color: var(--color-primary);
background: #ecf5ff;
border-radius: 4px;
}
.detail-btn:hover {
background: #dbecff;
color: #3a8ee6;
}
.detail-btn i {
margin-right: 4px;
}
.count-value {
color: var(--color-primary);
font-weight: 600;
background: #ecf5ff;
padding: 2px 6px;
border-radius: 10px;
font-size: 12px;
}
.selection-item-status {
flex-shrink: 0;
width: 70px;
text-align: right;
}
.no-selections {
padding: 40px 0;
text-align: center;
color: #909399;
font-size: 14px;
display: flex;
flex-direction: column;
align-items: center;
}
.no-selections i {
font-size: 40px;
margin-bottom: 10px;
color: #C0C4CC;
}
/* 详情弹窗样式 */
.welfare-detail-dialog .el-dialog__body {
padding: 0;
}
.welfare-detail-content {
padding: 20px;
}
.detail-header {
display: flex;
margin-bottom: 20px;
}
.detail-image {
width: 120px;
height: 120px;
border-radius: 6px;
overflow: hidden;
flex-shrink: 0;
margin-right: 20px;
}
.detail-image .el-image {
width: 100%;
height: 100%;
}
.detail-title {
flex: 1;
}
.detail-title h3 {
margin: 0 0 12px 0;
font-size: 18px;
color: #303133;
}
.detail-meta {
display: flex;
flex-direction: column;
gap: 8px;
}
.detail-count, .detail-time {
display: flex;
align-items: center;
font-size: 14px;
color: #606266;
}
.detail-count i, .detail-time i {
margin-right: 6px;
color: #909399;
}
.detail-divider {
height: 1px;
background: #EBEEF5;
margin: 20px 0;
}
.detail-description {
color: #606266;
line-height: 1.6;
}
/* 富文本内容样式 */
.rich-text-content {
overflow-x: hidden;
word-break: break-word;
}
.rich-text-content img {
max-width: 100%;
height: auto;
border-radius: 4px;
margin: 10px 0;
}
.rich-text-content p {
margin: 8px 0;
line-height: 1.6;
}
.rich-text-content a {
color: var(--color-primary);
text-decoration: none;
}
.rich-text-content a:hover {
text-decoration: underline;
}
.rich-text-content ul, .rich-text-content ol {
padding-left: 20px;
margin: 10px 0;
}
.rich-text-content blockquote {
padding: 10px 15px;
border-left: 4px solid #EBEEF5;
background: #f8f9fb;
margin: 10px 0;
color: #606266;
}
</style>
<!--#
}
#-->
@@ -76,7 +76,7 @@ const filterUser = {
</el-select>
</search-item>
<search-item label="教职工类别">
<search-item label="人员类型">
<dict-select clearable code="USER_PERSON_TYPE"
multiple
collapse-tags
@@ -88,7 +88,7 @@ const filterUser = {
<dict-select clearable code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
placeholder="请选择聘用方式"
placeholder="请选择编制类别"
v-model="pageForm.preparedBys"></dict-select>
</search-item>
@@ -168,7 +168,7 @@ const filterUser = {
{ prop: "username", label: "姓名" },
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "教职工类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
@@ -18,8 +18,8 @@ layout("/layouts/platform.html"){
></el-date-picker>
</search-item>
<search-item label="项目名称">
<el-input clearable placeholder="请输入项目名称" v-model="pageForm.name"></el-input>
<search-item label="活动时间">
<el-input clearable placeholder="请输入活动名称" v-model="pageForm.name"></el-input>
</search-item>
</search>
</el-card>
@@ -172,22 +172,591 @@ layout("/layouts/platform.html"){
})
</script>
<style>
.desc_label {
width: 75px;
-webkit-flex-shrink: 0;
flex-shrink: 0;
padding-right: 4px;
display: inline-block;
font-size: 14px;
color: #7f7f7f;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
/* 全局变量 */
:root {
--primary-color: #409EFF;
--primary-light: #ecf5ff;
--text-primary: #303133;
--text-secondary: #606266;
--text-light: #909399;
--border-color: #EBEEF5;
--success-color: #67c23a;
--warning-color: #e6a23c;
--danger-color: #f56c6c;
}
.desc_value {
color: #333;
/* 主容器样式 */
.welfare-select-container {
background: linear-gradient(135deg, #f5f7fa 0%, #ffffff 100%);
padding: 16px;
border-radius: 8px;
max-width: 1000px;
margin: 0 auto;
}
/* 截止时间提醒 */
.welfare-deadline {
background: linear-gradient(135deg, #fff7f7 0%, #fff 100%);
border-left: 3px solid var(--danger-color);
padding: 12px 16px;
margin-bottom: 16px;
border-radius: 6px;
display: flex;
align-items: center;
color: var(--danger-color);
box-shadow: 0 2px 8px rgba(245, 108, 108, 0.1);
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.01);
}
100% {
transform: scale(1);
}
}
.welfare-deadline i {
margin-right: 8px;
font-size: 16px;
}
/* 选择提示 */
.welfare-notice {
margin-bottom: 16px;
}
.welfare-notice .el-alert {
border-radius: 6px;
padding: 12px 16px;
}
/* 内容区域 */
.welfare-content {
display: flex;
flex-direction: column;
gap: 16px;
margin-bottom: 16px;
}
/* 项目信息卡片 */
.welfare-info-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
width: 100%;
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.project-cover {
height: 140px;
overflow: hidden;
position: relative;
margin: -10px -20px 16px;
}
.project-cover::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 40px;
background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
}
.project-cover .el-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.welfare-info-header {
padding: 14px 16px;
border-bottom: 1px solid var(--border-color);
font-size: 16px;
font-weight: 600;
color: var(--text-primary);
display: flex;
align-items: center;
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
}
.welfare-info-header i {
margin-right: 8px;
color: var(--primary-color);
font-size: 18px;
}
.info-item {
display: flex;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.info-item:hover {
background: var(--primary-light);
}
.info-item:last-child {
border-bottom: none;
}
.info-label {
width: 100px;
color: var(--text-secondary);
font-weight: 500;
flex-shrink: 0;
}
.info-value {
flex: 1;
color: var(--text-primary);
}
/* 福利选项卡片 */
.welfare-options-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
width: 100%;
overflow: hidden;
}
.options-count {
font-size: 14px;
color: var(--text-light);
font-weight: normal;
margin-left: 8px;
opacity: 0.8;
}
/* 选项网格 */
.welfare-options-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 16px;
padding: 16px;
}
/* 选项卡片 */
.welfare-option {
position: relative;
border-radius: 6px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 2px solid transparent;
height: 100%;
display: flex;
flex-direction: column;
cursor: pointer;
animation: fadeIn 0.6s ease-out forwards;
}
.welfare-option:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
transform: translateY(-2px);
}
.welfare-option.selected {
border-color: var(--primary-color);
box-shadow: 0 4px 16px rgba(64, 158, 255, 0.15);
}
.welfare-option.selected::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--primary-color), #66b1ff);
z-index: 1;
}
/* 选项标签 */
.option-tag {
position: absolute;
top: 8px;
right: 8px;
z-index: 2;
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: 500;
box-shadow: 0 2px 6px rgba(64, 158, 255, 0.2);
}
/* 选项图片 */
.option-image {
width: 100%;
height: 160px;
overflow: hidden;
position: relative;
}
.option-image::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 40px;
background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent);
}
.option-image .el-image {
width: 100%;
height: 100%;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-option:hover .option-image .el-image {
transform: scale(1.06);
}
/* 选项内容 */
.option-content {
padding: 12px 16px;
flex: 1;
display: flex;
flex-direction: column;
position: relative;
background: linear-gradient(135deg, #fff 0%, #f8f9fb 100%);
}
.option-title {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 8px;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
padding-right: 24px;
}
.option-detail-btn {
display: inline-flex;
align-items: center;
color: var(--primary-color);
font-size: 13px;
margin-top: 8px;
padding: 4px 8px;
border-radius: 4px;
background: var(--primary-light);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
.option-detail-btn i {
margin-right: 4px;
font-size: 14px;
}
.option-detail-btn:hover {
background: #dceeff;
transform: translateX(4px);
}
/* 选择控件 */
.option-radio {
position: absolute;
top: 12px;
right: 12px;
}
.option-stepper {
position: absolute;
bottom: 12px;
right: 12px;
}
.option-stepper .el-input-number {
width: 100px;
}
/* 底部按钮 */
.welfare-footer {
display: flex;
justify-content: center;
padding: 16px 0;
}
.welfare-footer .el-button {
min-width: 140px;
height: 40px;
font-size: 15px;
font-weight: 500;
border-radius: 20px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-footer .el-button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.25);
}
/* 确认弹窗样式 */
.welfare-confirm-dialog {
border-radius: 8px;
}
.confirm-content {
padding: 16px 0;
}
.confirm-section-title {
font-size: 15px;
color: var(--text-primary);
margin-bottom: 12px;
font-weight: 500;
position: relative;
padding-left: 10px;
}
.confirm-section-title::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 14px;
background: var(--primary-color);
border-radius: 2px;
}
.confirm-mobile-section {
margin-bottom: 20px;
}
.selected-items {
background: #f8f9fb;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
max-height: 300px;
overflow-y: auto;
}
.selected-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
background: #fff;
border-radius: 8px;
margin-bottom: 10px;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.selected-item:last-child {
margin-bottom: 0;
}
.selected-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.selected-item-left {
display: flex;
align-items: center;
flex: 1;
min-width: 0;
}
.selected-item-image {
width: 60px;
height: 60px;
border-radius: 8px;
overflow: hidden;
margin-right: 12px;
flex-shrink: 0;
background: #f5f5f5;
border: 1px solid rgba(0, 0, 0, 0.06);
}
.selected-item-image .el-image {
width: 100%;
height: 100%;
display: block;
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
color: #909399;
font-size: 20px;
}
.selected-item-info {
flex: 1;
min-width: 0;
padding: 4px 0;
}
.selected-item-name {
color: var(--text-primary);
font-weight: 500;
font-size: 15px;
line-height: 1.4;
margin-bottom: 6px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.selected-item-quantity {
color: var(--text-secondary);
font-size: 13px;
display: flex;
align-items: center;
}
.selected-item-quantity i {
margin-right: 4px;
font-size: 14px;
color: var(--primary-color);
}
.selected-item-right {
flex-shrink: 0;
margin-left: 16px;
}
.selected-item-right .el-tag {
font-size: 13px;
font-weight: 600;
padding: 0 10px;
height: 24px;
line-height: 22px;
border-radius: 12px;
}
.confirm-total {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
background: #f8f9fb;
border-radius: 6px;
margin-top: 16px;
}
.total-label {
color: var(--text-secondary);
font-weight: 500;
font-size: 14px;
}
.total-value {
color: var(--primary-color);
font-weight: 600;
font-size: 15px;
}
.confirm-warning {
margin-top: 16px;
padding: 10px 14px;
background: #fff7e6;
border-radius: 6px;
color: var(--warning-color);
display: flex;
align-items: center;
font-size: 13px;
}
.confirm-warning.warning {
background: #fef0f0;
color: var(--danger-color);
}
.confirm-warning i {
margin-right: 6px;
font-size: 16px;
}
.deadline-info {
margin-top: 12px;
padding: 10px 14px;
background: var(--primary-light);
border-radius: 6px;
color: var(--primary-color);
display: flex;
align-items: center;
font-size: 13px;
}
.deadline-info i {
margin-right: 6px;
font-size: 16px;
}
/* 详情弹窗 */
.welfare-detail-dialog {
border-radius: 8px;
}
.welfare-detail-popup {
padding: 16px;
min-height: 200px;
}
.welfare-detail-title {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.welfare-detail-content {
color: var(--text-secondary);
line-height: 1.6;
font-size: 14px;
}
/* 加载状态 */
.welfare-loading {
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
}
/* 动画 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.welfare-select-container > * {
animation: fadeIn 0.5s ease-out forwards;
}
</style>
@@ -138,16 +138,24 @@ const optionSelect = {
<!-- 联系电话输入 -->
<div class="confirm-mobile-section">
<div class="confirm-section-title">联系信息</div>
<el-form :model="contactForm" ref="contactForm" :rules="contactRules">
<el-form-item prop="mobile">
<el-form :model="contactForm" ref="contactForm" :rules="contactRules" label-width="80px">
<el-form-item prop="mobile" label="联系电话">
<el-input
v-model="contactForm.mobile"
placeholder="请输入手机号码"
maxlength="11"
clearable>
<template slot="prepend">联系电话</template>
</el-input>
</el-form-item>
<el-form-item v-if="projectInfo.provideMode == 3" prop="receiveAddress" label="收货地址" :rules="[{ required: true, message: '请选择收货地址', trigger: 'change' }]">
<el-select v-model="contactForm.receiveAddress" placeholder="请选择收货地址" style="width: 100%">
<el-option v-for="item in addressOptions"
:key="item.id"
:label="item.userName + ' ' + item.tel + ' ' + item.province + ' ' + item.city + ' ' + item.county + ' ' + item.addressDetail"
:value="item.userName + ' ' + item.tel + ' ' + item.province + ' ' + item.city + ' ' + item.county + ' ' + item.addressDetail">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
@@ -222,7 +230,8 @@ const optionSelect = {
showOptionDetailDialog: false, // 选项详情弹窗
selectedOption: null, // 当前选中的选项
contactForm: {
mobile: "" // 联系电话
mobile: "", // 联系电话,
receiveAddress: ""
},
contactRules: {
mobile: [
@@ -316,7 +325,8 @@ const optionSelect = {
this.selectedRadioId = null
this.contactForm = {
mobile: ""
mobile: "",
receiveAddress: ""
}
this.getProjectInfo()
@@ -329,6 +339,11 @@ const optionSelect = {
this.projectInfo = res.data
this.deadlineTime = this.projectInfo.choiceTimeEnd
// 获取收货地址
if (this.projectInfo.provideMode === 3) {
this.getAddress()
}
// 初始化选项的selectNum为0
if (this.projectInfo.options) {
this.projectInfo.options.forEach((option) => {
@@ -363,6 +378,22 @@ const optionSelect = {
if (this.userSelection && this.userSelection.length > 0) {
this.contactForm.mobile = this.userSelection[0]?.mobile
} else {
if (this.isProxySelect) {
// 否则使用默认手机号
$.post("/platform/welfare/selection/situation/getMobileByUserId", { userId: this.userId }).then((res) => {
if (res.code === 0) {
this.contactForm.mobile = res.data
}
})
}
}
// 地址回显
if (this.projectInfo.provideMode === 3) {
if (this.userSelection && this.userSelection[0].receiveAddress) {
this.contactForm.receiveAddress = this.userSelection[0].receiveAddress
}
}
// 设置已选择的选项
@@ -411,7 +442,8 @@ const optionSelect = {
{
selectOptionId: this.selectedRadioId,
selectNum: 1,
mobile: this.contactForm.mobile
mobile: this.contactForm.mobile,
receiveAddress: this.contactForm.receiveAddress
}
]
}
@@ -421,7 +453,8 @@ const optionSelect = {
selections = this.selectedOptions.map((option) => ({
selectOptionId: option.id,
selectNum: option.selectNum,
mobile: this.contactForm.mobile
mobile: this.contactForm.mobile,
receiveAddress: this.contactForm.receiveAddress
}))
}
@@ -501,6 +534,14 @@ const optionSelect = {
event.stopPropagation()
this.selectedOption = option
this.showOptionDetailDialog = true
},
// 获取收货地址
async getAddress() {
const resp = await this.$axios.post("/platform/welfare/addressManage/selectUserAddress")
if (resp.code === 0) {
this.addressOptions = resp.data
}
}
},
watch: {
@@ -526,7 +567,7 @@ const optionSelect = {
},
style: /*language=CSS*/ `
/* 全局变量 */
:root {
:root {
--primary-color: #409EFF;
--primary-light: #ecf5ff;
--text-primary: #303133;
@@ -539,7 +580,7 @@ const optionSelect = {
}
/* 主容器样式 */
.welfare-select-container {
.welfare-select-container {
background: linear-gradient(135deg, #f5f7fa 0%, #ffffff 100%);
padding: 16px;
border-radius: 8px;
@@ -548,7 +589,7 @@ const optionSelect = {
}
/* 截止时间提醒 */
.welfare-deadline {
.welfare-deadline {
background: linear-gradient(135deg, #fff7f7 0%, #fff 100%);
border-left: 3px solid var(--danger-color);
padding: 12px 16px;
@@ -573,23 +614,23 @@ const optionSelect = {
}
}
.welfare-deadline i {
.welfare-deadline i {
margin-right: 8px;
font-size: 16px;
}
/* 选择提示 */
.welfare-notice {
.welfare-notice {
margin-bottom: 16px;
}
.welfare-notice .el-alert {
.welfare-notice .el-alert {
border-radius: 6px;
padding: 12px 16px;
}
/* 内容区域 */
.welfare-content {
.welfare-content {
display: flex;
flex-direction: column;
gap: 16px;
@@ -597,7 +638,7 @@ const optionSelect = {
}
/* 项目信息卡片 */
.welfare-info-card {
.welfare-info-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
@@ -606,14 +647,14 @@ const optionSelect = {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.project-cover {
.project-cover {
height: 140px;
overflow: hidden;
position: relative;
margin: -10px -20px 16px;
}
.project-cover::after {
.project-cover::after {
content: '';
position: absolute;
bottom: 0;
@@ -623,13 +664,13 @@ const optionSelect = {
background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
}
.project-cover .el-image {
.project-cover .el-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.welfare-info-header {
.welfare-info-header {
padding: 14px 16px;
border-bottom: 1px solid var(--border-color);
font-size: 16px;
@@ -640,41 +681,41 @@ const optionSelect = {
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
}
.welfare-info-header i {
.welfare-info-header i {
margin-right: 8px;
color: var(--primary-color);
font-size: 18px;
}
.info-item {
.info-item {
display: flex;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.info-item:hover {
.info-item:hover {
background: var(--primary-light);
}
.info-item:last-child {
.info-item:last-child {
border-bottom: none;
}
.info-label {
.info-label {
width: 100px;
color: var(--text-secondary);
font-weight: 500;
flex-shrink: 0;
}
.info-value {
.info-value {
flex: 1;
color: var(--text-primary);
}
/* 福利选项卡片 */
.welfare-options-card {
.welfare-options-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
@@ -682,7 +723,7 @@ const optionSelect = {
overflow: hidden;
}
.options-count {
.options-count {
font-size: 14px;
color: var(--text-light);
font-weight: normal;
@@ -691,7 +732,7 @@ const optionSelect = {
}
/* 选项网格 */
.welfare-options-grid {
.welfare-options-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 16px;
@@ -699,7 +740,7 @@ const optionSelect = {
}
/* 选项卡片 */
.welfare-option {
.welfare-option {
position: relative;
border-radius: 6px;
overflow: hidden;
@@ -714,17 +755,17 @@ const optionSelect = {
animation: fadeIn 0.6s ease-out forwards;
}
.welfare-option:hover {
.welfare-option:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
transform: translateY(-2px);
}
.welfare-option.selected {
.welfare-option.selected {
border-color: var(--primary-color);
box-shadow: 0 4px 16px rgba(64, 158, 255, 0.15);
}
.welfare-option.selected::before {
.welfare-option.selected::before {
content: '';
position: absolute;
top: 0;
@@ -736,7 +777,7 @@ const optionSelect = {
}
/* 选项标签 */
.option-tag {
.option-tag {
position: absolute;
top: 8px;
right: 8px;
@@ -749,14 +790,14 @@ const optionSelect = {
}
/* 选项图片 */
.option-image {
.option-image {
width: 100%;
height: 160px;
overflow: hidden;
position: relative;
}
.option-image::after {
.option-image::after {
content: '';
position: absolute;
bottom: 0;
@@ -766,18 +807,18 @@ const optionSelect = {
background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent);
}
.option-image .el-image {
.option-image .el-image {
width: 100%;
height: 100%;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-option:hover .option-image .el-image {
.welfare-option:hover .option-image .el-image {
transform: scale(1.06);
}
/* 选项内容 */
.option-content {
.option-content {
padding: 12px 16px;
flex: 1;
display: flex;
@@ -786,7 +827,7 @@ const optionSelect = {
background: linear-gradient(135deg, #fff 0%, #f8f9fb 100%);
}
.option-title {
.option-title {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
@@ -800,7 +841,7 @@ const optionSelect = {
padding-right: 24px;
}
.option-detail-btn {
.option-detail-btn {
display: inline-flex;
align-items: center;
color: var(--primary-color);
@@ -813,41 +854,41 @@ const optionSelect = {
cursor: pointer;
}
.option-detail-btn i {
.option-detail-btn i {
margin-right: 4px;
font-size: 14px;
}
.option-detail-btn:hover {
.option-detail-btn:hover {
background: #dceeff;
transform: translateX(4px);
}
/* 选择控件 */
.option-radio {
.option-radio {
position: absolute;
top: 12px;
right: 12px;
}
.option-stepper {
.option-stepper {
position: absolute;
bottom: 12px;
right: 12px;
}
.option-stepper .el-input-number {
.option-stepper .el-input-number {
width: 100px;
}
/* 底部按钮 */
.welfare-footer {
.welfare-footer {
display: flex;
justify-content: center;
padding: 16px 0;
}
.welfare-footer .el-button {
.welfare-footer .el-button {
min-width: 140px;
height: 40px;
font-size: 15px;
@@ -856,21 +897,21 @@ const optionSelect = {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-footer .el-button:hover {
.welfare-footer .el-button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.25);
}
/* 确认弹窗样式 */
.welfare-confirm-dialog {
.welfare-confirm-dialog {
border-radius: 8px;
}
.confirm-content {
.confirm-content {
padding: 16px 0;
}
.confirm-section-title {
.confirm-section-title {
font-size: 15px;
color: var(--text-primary);
margin-bottom: 12px;
@@ -879,7 +920,7 @@ const optionSelect = {
padding-left: 10px;
}
.confirm-section-title::before {
.confirm-section-title::before {
content: '';
position: absolute;
left: 0;
@@ -891,11 +932,11 @@ const optionSelect = {
border-radius: 2px;
}
.confirm-mobile-section {
.confirm-mobile-section {
margin-bottom: 20px;
}
.selected-items {
.selected-items {
background: #f8f9fb;
border-radius: 8px;
padding: 16px;
@@ -904,7 +945,7 @@ const optionSelect = {
overflow-y: auto;
}
.selected-item {
.selected-item {
display: flex;
justify-content: space-between;
align-items: center;
@@ -916,11 +957,11 @@ const optionSelect = {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.selected-item:last-child {
.selected-item:last-child {
margin-bottom: 0;
}
.selected-item:hover {
.selected-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
@@ -99,6 +99,9 @@ layout("/layouts/platform.html"){
show-overflow-tooltip
v-for="column in tableColumns"
></el-table-column>
<el-table-column label="收货地址" prop="receiveAddress" v-if="provideMode===3"></el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="proxySelect(row)">代选</el-button>
@@ -152,6 +155,9 @@ layout("/layouts/platform.html"){
return this.projectOptions.find((item) => item.id === this.pageForm.projectId).options
}
return []
},
provideMode() {
return this.projectOptions.find((item) => item.id === this.pageForm.projectId).provideMode
}
},
methods: {
@@ -205,6 +211,595 @@ layout("/layouts/platform.html"){
})
</script>
<style>
/* 全局变量 */
:root {
--primary-color: #409EFF;
--primary-light: #ecf5ff;
--text-primary: #303133;
--text-secondary: #606266;
--text-light: #909399;
--border-color: #EBEEF5;
--success-color: #67c23a;
--warning-color: #e6a23c;
--danger-color: #f56c6c;
}
/* 主容器样式 */
.welfare-select-container {
background: linear-gradient(135deg, #f5f7fa 0%, #ffffff 100%);
padding: 16px;
border-radius: 8px;
max-width: 1000px;
margin: 0 auto;
}
/* 截止时间提醒 */
.welfare-deadline {
background: linear-gradient(135deg, #fff7f7 0%, #fff 100%);
border-left: 3px solid var(--danger-color);
padding: 12px 16px;
margin-bottom: 16px;
border-radius: 6px;
display: flex;
align-items: center;
color: var(--danger-color);
box-shadow: 0 2px 8px rgba(245, 108, 108, 0.1);
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.01);
}
100% {
transform: scale(1);
}
}
.welfare-deadline i {
margin-right: 8px;
font-size: 16px;
}
/* 选择提示 */
.welfare-notice {
margin-bottom: 16px;
}
.welfare-notice .el-alert {
border-radius: 6px;
padding: 12px 16px;
}
/* 内容区域 */
.welfare-content {
display: flex;
flex-direction: column;
gap: 16px;
margin-bottom: 16px;
}
/* 项目信息卡片 */
.welfare-info-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
width: 100%;
overflow: hidden;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.project-cover {
height: 140px;
overflow: hidden;
position: relative;
margin: -10px -20px 16px;
}
.project-cover::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 40px;
background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
}
.project-cover .el-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.welfare-info-header {
padding: 14px 16px;
border-bottom: 1px solid var(--border-color);
font-size: 16px;
font-weight: 600;
color: var(--text-primary);
display: flex;
align-items: center;
background: linear-gradient(135deg, #f8f9fb 0%, #fff 100%);
}
.welfare-info-header i {
margin-right: 8px;
color: var(--primary-color);
font-size: 18px;
}
.info-item {
display: flex;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.info-item:hover {
background: var(--primary-light);
}
.info-item:last-child {
border-bottom: none;
}
.info-label {
width: 100px;
color: var(--text-secondary);
font-weight: 500;
flex-shrink: 0;
}
.info-value {
flex: 1;
color: var(--text-primary);
}
/* 福利选项卡片 */
.welfare-options-card {
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
width: 100%;
overflow: hidden;
}
.options-count {
font-size: 14px;
color: var(--text-light);
font-weight: normal;
margin-left: 8px;
opacity: 0.8;
}
/* 选项网格 */
.welfare-options-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 16px;
padding: 16px;
}
/* 选项卡片 */
.welfare-option {
position: relative;
border-radius: 6px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 2px solid transparent;
height: 100%;
display: flex;
flex-direction: column;
cursor: pointer;
animation: fadeIn 0.6s ease-out forwards;
}
.welfare-option:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
transform: translateY(-2px);
}
.welfare-option.selected {
border-color: var(--primary-color);
box-shadow: 0 4px 16px rgba(64, 158, 255, 0.15);
}
.welfare-option.selected::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(--primary-color), #66b1ff);
z-index: 1;
}
/* 选项标签 */
.option-tag {
position: absolute;
top: 8px;
right: 8px;
z-index: 2;
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: 500;
box-shadow: 0 2px 6px rgba(64, 158, 255, 0.2);
}
/* 选项图片 */
.option-image {
width: 100%;
height: 160px;
overflow: hidden;
position: relative;
}
.option-image::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 40px;
background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent);
}
.option-image .el-image {
width: 100%;
height: 100%;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-option:hover .option-image .el-image {
transform: scale(1.06);
}
/* 选项内容 */
.option-content {
padding: 12px 16px;
flex: 1;
display: flex;
flex-direction: column;
position: relative;
background: linear-gradient(135deg, #fff 0%, #f8f9fb 100%);
}
.option-title {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 8px;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
padding-right: 24px;
}
.option-detail-btn {
display: inline-flex;
align-items: center;
color: var(--primary-color);
font-size: 13px;
margin-top: 8px;
padding: 4px 8px;
border-radius: 4px;
background: var(--primary-light);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
.option-detail-btn i {
margin-right: 4px;
font-size: 14px;
}
.option-detail-btn:hover {
background: #dceeff;
transform: translateX(4px);
}
/* 选择控件 */
.option-radio {
position: absolute;
top: 12px;
right: 12px;
}
.option-stepper {
position: absolute;
bottom: 12px;
right: 12px;
}
.option-stepper .el-input-number {
width: 100px;
}
/* 底部按钮 */
.welfare-footer {
display: flex;
justify-content: center;
padding: 16px 0;
}
.welfare-footer .el-button {
min-width: 140px;
height: 40px;
font-size: 15px;
font-weight: 500;
border-radius: 20px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.welfare-footer .el-button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.25);
}
/* 确认弹窗样式 */
.welfare-confirm-dialog {
border-radius: 8px;
}
.confirm-content {
padding: 16px 0;
}
.confirm-section-title {
font-size: 15px;
color: var(--text-primary);
margin-bottom: 12px;
font-weight: 500;
position: relative;
padding-left: 10px;
}
.confirm-section-title::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 14px;
background: var(--primary-color);
border-radius: 2px;
}
.confirm-mobile-section {
margin-bottom: 20px;
}
.selected-items {
background: #f8f9fb;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
max-height: 300px;
overflow-y: auto;
}
.selected-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
background: #fff;
border-radius: 8px;
margin-bottom: 10px;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.selected-item:last-child {
margin-bottom: 0;
}
.selected-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.selected-item-left {
display: flex;
align-items: center;
flex: 1;
min-width: 0;
}
.selected-item-image {
width: 60px;
height: 60px;
border-radius: 8px;
overflow: hidden;
margin-right: 12px;
flex-shrink: 0;
background: #f5f5f5;
border: 1px solid rgba(0, 0, 0, 0.06);
}
.selected-item-image .el-image {
width: 100%;
height: 100%;
display: block;
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
color: #909399;
font-size: 20px;
}
.selected-item-info {
flex: 1;
min-width: 0;
padding: 4px 0;
}
.selected-item-name {
color: var(--text-primary);
font-weight: 500;
font-size: 15px;
line-height: 1.4;
margin-bottom: 6px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.selected-item-quantity {
color: var(--text-secondary);
font-size: 13px;
display: flex;
align-items: center;
}
.selected-item-quantity i {
margin-right: 4px;
font-size: 14px;
color: var(--primary-color);
}
.selected-item-right {
flex-shrink: 0;
margin-left: 16px;
}
.selected-item-right .el-tag {
font-size: 13px;
font-weight: 600;
padding: 0 10px;
height: 24px;
line-height: 22px;
border-radius: 12px;
}
.confirm-total {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
background: #f8f9fb;
border-radius: 6px;
margin-top: 16px;
}
.total-label {
color: var(--text-secondary);
font-weight: 500;
font-size: 14px;
}
.total-value {
color: var(--primary-color);
font-weight: 600;
font-size: 15px;
}
.confirm-warning {
margin-top: 16px;
padding: 10px 14px;
background: #fff7e6;
border-radius: 6px;
color: var(--warning-color);
display: flex;
align-items: center;
font-size: 13px;
}
.confirm-warning.warning {
background: #fef0f0;
color: var(--danger-color);
}
.confirm-warning i {
margin-right: 6px;
font-size: 16px;
}
.deadline-info {
margin-top: 12px;
padding: 10px 14px;
background: var(--primary-light);
border-radius: 6px;
color: var(--primary-color);
display: flex;
align-items: center;
font-size: 13px;
}
.deadline-info i {
margin-right: 6px;
font-size: 16px;
}
/* 详情弹窗 */
.welfare-detail-dialog {
border-radius: 8px;
}
.welfare-detail-popup {
padding: 16px;
min-height: 200px;
}
.welfare-detail-title {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.welfare-detail-content {
color: var(--text-secondary);
line-height: 1.6;
font-size: 14px;
}
/* 加载状态 */
.welfare-loading {
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
}
/* 动画 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.welfare-select-container > * {
animation: fadeIn 0.5s ease-out forwards;
}
</style>
<!--#
}
#-->
@@ -78,7 +78,7 @@ const addUser = {
</el-select>
</search-item>
<search-item label="教职工类别">
<search-item label="人员类型">
<dict-select clearable code="USER_PERSON_TYPE"
multiple
collapse-tags
@@ -90,7 +90,7 @@ const addUser = {
<dict-select clearable code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
placeholder="请选择聘用方式"
placeholder="请选择编制类别"
v-model="pageForm.preparedBys"></dict-select>
</search-item>
@@ -174,7 +174,7 @@ const addUser = {
{ prop: "username", label: "姓名" },
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "教职工类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
@@ -27,7 +27,7 @@ let ADD_WELFARE_LIST_BY_SELECT = {
<el-table-column label="工号" prop="loginname" sortable width="150px"></el-table-column>
<el-table-column label="姓名" prop="username" sortable width="150px"></el-table-column>
<el-table-column label="在职状态" prop="userState" sortable width="150px"></el-table-column>
<el-table-column label="编制类别" prop="personType" sortable width="150px"></el-table-column>
<el-table-column label="人事编制" prop="personType" sortable width="150px"></el-table-column>
<el-table-column label="所在单位" prop="unitName" show-overflow-tooltip
sortable></el-table-column>
<el-table-column label="所在工会" prop="unionName" sortable></el-table-column>
@@ -87,7 +87,7 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="教职工类别">
<search-item label="人员类型">
<dict-select
clearable
code="USER_PERSON_TYPE"
@@ -104,7 +104,7 @@ layout("/layouts/platform.html"){
code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
placeholder="请选择聘用方式"
placeholder="请选择编制类别"
v-model="pageForm.preparedBys"
></dict-select>
</search-item>
@@ -264,7 +264,7 @@ layout("/layouts/platform.html"){
{ prop: "username", label: "姓名" },
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "教职工类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "welfareUnionName", label: "所属工会", sortable: true },
@@ -8,6 +8,8 @@ layout("/layouts/platform_h5.html"){
}
.list-card-body {
/* width: calc(100% - 140px);
display: flex;*/
width: calc(100% - 140px);
display: flex;
flex-direction: column;
@@ -35,6 +37,9 @@ layout("/layouts/platform_h5.html"){
padding: 5px;
border-radius: 5px;
}
.list-card-img img{
width: 100%;
}
</style>
<div id="app" v-cloak>
@@ -44,6 +49,7 @@ layout("/layouts/platform_h5.html"){
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item :options="stateList" @change="doSearch" v-model="pageForm.state"></van-dropdown-item>
<van-dropdown-item :options="isEnrolledOptions" @change="doSearch" v-model="pageForm.isEnrolledText"></van-dropdown-item>
<van-dropdown-item :options="activityTypeOptions" @change="doSearch" v-model="pageForm.activity_type"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
@@ -58,33 +64,33 @@ layout("/layouts/platform_h5.html"){
<div class="time">{{item.startTime + ' 至 ' + item.endTime}}</div>
<div class="footer">
<span
class="tag"
v-if="$moment(item.applyStartTime).valueOf() > $moment().valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
class="tag"
v-if="$moment(item.applyStartTime).valueOf() > $moment().valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
>
未开始报名
</span>
<span
class="tag"
v-else-if="$moment(item.applyEndTime).valueOf() > $moment().valueOf() && $moment().valueOf() > $moment(item.applyStartTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
class="tag"
v-else-if="$moment(item.applyEndTime).valueOf() > $moment().valueOf() && $moment().valueOf() > $moment(item.applyStartTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
>
报名进行中
</span>
<span
class="tag"
v-else-if="$moment(item.applyEndTime).valueOf() < $moment().valueOf() && $moment().valueOf() < $moment(item.startTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
class="tag"
v-else-if="$moment(item.applyEndTime).valueOf() < $moment().valueOf() && $moment().valueOf() < $moment(item.startTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
>
报名已结束
</span>
<span
class="tag"
v-else-if="$moment(item.startTime).valueOf() < $moment().valueOf() && $moment().valueOf() < $moment(item.endTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
class="tag"
v-else-if="$moment(item.startTime).valueOf() < $moment().valueOf() && $moment().valueOf() < $moment(item.endTime).valueOf()"
style="color: var(--color-primary); border: 1px solid var(--color-primary)"
>
活动进行中
</span>
@@ -120,7 +126,8 @@ layout("/layouts/platform_h5.html"){
year: new Date().getFullYear(),
pageNumber: 1,
pageSize: 5,
totalCount: 0
totalCount: 0,
activity_type: 40001
},
yearList: [],
isEnrolledOptions: [
@@ -134,7 +141,12 @@ layout("/layouts/platform_h5.html"){
],
subLoading: false,
viewShow: false,
viewData: {}
viewData: {},
activityTypeOptions: [
{ value: 40001, text: "校文化活动" },
{ value: 40002, text: "分工会文化活动" },
{ value: 40003, text: "协会文化活动" },
]
}
},
components: {
@@ -270,3 +282,4 @@ layout("/layouts/platform_h5.html"){
<!--#
}
#-->
@@ -74,11 +74,7 @@ layout("/layouts/platform_h5.html"){
}, 500)
},
back() {
if (this.projectId) {
this.$pjaxReplace("/platform/h5/welfare/userChoose/index?id=" + this.projectId)
} else {
this.$pjaxReplace("/platform/h5/home")
}
this.historyBack()
},
onEdit(row) {
this.title = "编辑地址"
@@ -56,6 +56,10 @@ const selectView = {
<div class="info-row__label">联系电话</div>
<div class="info-row__value">{{ mergedSelections[0]?.mobile || '暂无' }}</div>
</div>
<div class="info-row">
<div class="info-row__label">收货地址</div>
<div class="info-row__value">{{ mergedSelections[0]?.receiveAddress || '暂无' }}</div>
</div>
</div>
</div>
@@ -73,7 +77,7 @@ const selectView = {
:key="item.id"
@click="showOptionDetail(item)">
<div class="selection-item__image">
<img :src="item.imgUrl || '/static/images/default-welfare.png'"
<img :src="item.imgUrl"
alt="福利图片"
@error="handleImageError">
</div>
@@ -678,18 +678,17 @@ layout("/layouts/platform_h5.html"){
maxlength="11"
required
></van-field>
<!--
收货地址字段预留位置
<!--收货地址-->
<van-field
v-if="projectInfo.needAddress"
v-model="formData.address"
v-if="projectInfo.provideMode == 3"
v-model="formData.receiveAddress"
label="收货地址"
placeholder="请输入收货地址"
type="textarea"
rows="2"
placeholder="请选择收货地址"
readonly
is-link
@click="showAddressSheet = true"
required
></van-field>
-->
></van-field>
</div>
<!-- 选择内容 -->
@@ -733,6 +732,35 @@ layout("/layouts/platform_h5.html"){
<div class="welfare-detail-content" v-html="selectedOption.description"></div>
</div>
</van-popup>
<!-- 收货地址选择弹窗 -->
<van-action-sheet v-model="showAddressSheet" title="选择收货地址" :round="true">
<div style="padding: 16px 0 0">
<div
v-for="address in addressOptions"
:key="address.id"
class="address-item"
@click="selectAddress(address)"
style="padding: 12px 16px; border-bottom: 1px solid #f0f0f0; cursor: pointer"
>
<div style="display: flex; justify-content: space-between; align-items: flex-start">
<div style="flex: 1">
<div style="font-size: 16px; font-weight: 500; color: #323233; margin-bottom: 4px">
{{ address.userName }} {{ address.tel }}
</div>
<div style="font-size: 14px; color: #646566; line-height: 1.4">
{{ address.province }}{{ address.city }}{{ address.county }}{{ address.addressDetail }}
</div>
</div>
<van-tag v-if="address.isDefault" type="primary" size="mini" style="margin-left: 8px">默认</van-tag>
</div>
</div>
<div v-if="addressOptions.length === 0" style="text-align: center; padding: 40px 16px; color: #969799">暂无收货地址</div>
</div>
<div style="padding: 16px; border-top: 1px solid #f0f0f0; background: #fafafa">
<van-button type="info" block round @click="goToAddressManage">收货地址管理</van-button>
</div>
</van-action-sheet>
</div>
</div>
@@ -757,8 +785,12 @@ layout("/layouts/platform_h5.html"){
formData: {
userSign: "", // 用户签名
mobile: "", // 手机号码
address: "" // 收货地址(预留)
}
address: "" // 收货地址
},
addressOptions: [],
showAddressSheet: false, // 收货地址选择弹窗
selectedAddressText: "" // 选中的收货地址显示文本
}
},
@@ -815,6 +847,11 @@ layout("/layouts/platform_h5.html"){
if (res.code === 0) {
this.projectInfo = res.data
// 获取收货地址
if (this.projectInfo.provideMode === 3) {
this.getAddress()
}
// 初始化选项的selectNum为0
if (this.projectInfo.options) {
this.projectInfo.options.forEach((option) => {
@@ -846,10 +883,16 @@ layout("/layouts/platform_h5.html"){
}
} else if (this.$store.user && this.$store.user.mobile) {
// 如果没有选择过,使用store中的默认手机号
debugger
this.formData.mobile = this.$store.user.mobile
}
// 地址回显
if (this.projectInfo.provideMode === 3) {
if (this.userSelection && this.userSelection[0].receiveAddress) {
this.formData.receiveAddress = this.userSelection[0].receiveAddress
}
}
// 设置已选择的选项
if (this.projectInfo.options && this.userSelection.length > 0) {
// 单选模式
@@ -898,6 +941,12 @@ layout("/layouts/platform_h5.html"){
return
}
// 如果需要邮寄
if (this.projectInfo.provideMode === 3 && !this.formData.receiveAddress) {
this.$toast.fail("请填写邮寄地址")
return
}
if (this.isSubmitting) return
this.isSubmitting = true
@@ -937,10 +986,10 @@ layout("/layouts/platform_h5.html"){
})
}
// 未来可扩展添加收货地址
if (this.formData.address) {
// 收货地址
if (this.projectInfo.provideMode === 3 && this.formData.receiveAddress) {
selections.forEach((selection) => {
selection.address = this.formData.address
selection.receiveAddress = this.formData.receiveAddress
})
}
@@ -1082,6 +1131,18 @@ layout("/layouts/platform_h5.html"){
}
},
// 选择收货地址
selectAddress(address) {
this.formData.receiveAddress =
address.userName + " " + address.tel + " " + address.province + address.city + address.county + address.addressDetail
this.showAddressSheet = false
},
// 跳转到地址管理页面
goToAddressManage() {
this.$pjaxReplace("/platform/h5/welfare/address/list")
},
// 切换选项选中状态
toggleOption(option) {
if (this.projectInfo.isCheckBox === "radio") {
@@ -1120,6 +1181,14 @@ layout("/layouts/platform_h5.html"){
}
}
}
},
// 获取收货地址
async getAddress() {
const resp = await this.$axios.post("/platform/welfare/addressManage/selectUserAddress")
if (resp.code === 0) {
this.addressOptions = resp.data
}
}
},