Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-05-06 19:42:22 +08:00
38 changed files with 1237 additions and 245 deletions
@@ -15,7 +15,7 @@
<script>
module.exports = {
name: "h5",
name: "h5-signature",
components: {
signature: httpVueLoader("/components/plugins/sysSignature/index.vue?v=" + new Date().getTime())
},
@@ -97,6 +97,7 @@ const user = {
<el-table-column prop="sender" label="申请人" width="120">
<template slot-scope="{row}">{{row.variable.initiatorName}}</template>
</el-table-column>
<el-table-column prop="taskName" label="当前流程节点" width="140" show-overflow-tooltip></el-table-column>
<el-table-column prop="date" label="发起日期" width="120">
<template slot-scope="{row}">
{{$moment(row.createdAt).format('YYYY-MM-DD')}}
@@ -36,7 +36,7 @@ const UNIT_LEADER_MANAGE_TEMPLATE = {
<el-dialog title="添加" :visible.sync="dialogFormVisible" width="600px" :close-on-click-modal="false">
<el-form :model="formData" ref="form" size="small" label-width="60px">
<el-form-item prop="roleCode" label="角色">
<dict-select placeholder="请选择角色" v-model="formData.roleCode" code="UNIT_ROLES"></dict-select>
<dict-select placeholder="请选择角色" v-model="formData.roleCode" code="UNIT_ROLES" @change="onRoleChange"></dict-select>
</el-form-item>
<el-form-item prop="userId" label="人员">
<user-select
@@ -44,7 +44,7 @@ const UNIT_LEADER_MANAGE_TEMPLATE = {
style="width: 100%"
v-model="formData.userId"
api="/platform/sys/unit/listUserSelect"
:api_params="{ unitId: currentData?.id }"
:api_params="{ unitId: currentData?.id, roleCode: formData.roleCode }"
:option_label_func="
(item) => {
return item.username + item.loginname + '(' + item.unitName + ')'
@@ -86,6 +86,9 @@ const UNIT_LEADER_MANAGE_TEMPLATE = {
},
computed: {},
methods: {
onRoleChange() {
this.$set(this.formData, "userId", "")
},
doDelete({ userId, roleCode }) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
@@ -67,6 +67,7 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
<el-switch
@change="(val)=>{activityStatusChange(row.id,row.isUnseal)}"
active-color="#13ce66"
:disabled="isUnsealDisabled(row)"
inactive-color="#ff4949"
v-model="row.isUnseal">
</el-switch>
@@ -194,6 +195,10 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
this.$message.error(resp.msg)
}
},
isUnsealDisabled(row) {
// 流程类活动只有在流程结束后才允许开启或关闭,非流程类活动保持原有开关逻辑。
return (row.activity_type === 40002 || row.activity_type === 40003) && row.instanceState !== 20
},
dropdownCommand(command) {
const {type, row} = command
if (type === "view") {
@@ -126,11 +126,11 @@ layout("/layouts/platform.html"){
<el-col class="pt5 pb5">
<el-row class="pb5" v-for="(worksType,worksIndex) in type.worksTypes" :key="worksType.id">
<el-col :span="18">
<el-col :span="4">
<el-col :span="2">
<span class="el-form-item__label" v-if="worksIndex === 0">作品类型</span>
<span v-else>&nbsp;</span>
</el-col>
<el-col :span="20">
<el-col :span="22">
<el-input placeholder="请输入名称" v-model="worksType.worksTypeName"></el-input>
</el-col>
</el-col>
@@ -113,7 +113,7 @@ layout("/layouts/platform.html"){
},
listActivity() {
this.$axios.post("/platform/activity/worksCollection/upload/listPerMissionActivity").then((res) => {
this.$axios.post("/platform/activity/worksCollection/upload/listPerMissionActivity", {year: this.pageForm.year}).then((res) => {
if (res.code === 0) {
this.activityOptions = res.data
}
@@ -128,10 +128,10 @@
</el-form-item>
<el-form-item prop="roleCode" label="身份">
<el-checkbox-group v-model="roleCodeFormData.roleCode">
<el-checkbox label="CLUB_PRESIDENT">社团会长</el-checkbox>
<el-checkbox label="CLUB_VICE_PRESIDENT">社团副会长</el-checkbox>
<el-checkbox label="CLUB_SECRETARY">社团秘书长</el-checkbox>
<el-checkbox label="CLUB_VICE_SECRETARY">社团副秘书长</el-checkbox>
<el-checkbox label="CLUB_PRESIDENT" disabled>社团会长</el-checkbox>
<el-checkbox label="CLUB_VICE_PRESIDENT" disabled>社团副会长</el-checkbox>
<el-checkbox label="CLUB_SECRETARY" disabled>社团秘书长</el-checkbox>
<el-checkbox label="CLUB_VICE_SECRETARY" disabled>社团副秘书长</el-checkbox>
<el-checkbox label="CLUB_OPERATOR">社团操作员</el-checkbox>
<el-checkbox label="CLUB_REIMBURSEMENT_MANAGER">社团报销负责人</el-checkbox>
<el-checkbox label="CLUB_MEMBER">社团会员</el-checkbox>
@@ -136,6 +136,8 @@ layout("/layouts/platform.html"){
this.$axios.post("/platform/club/join/apply/checkApplyClub", { clubId: row.id }).then((res) => {
if (res.code === 0) {
commonUtil.pjaxPush('/platform/club/join/apply?clubId=' + row.id)
} else {
this.$message.warning(res.msg)
}
})
},
@@ -32,7 +32,7 @@ layout("/layouts/platform.html"){
<table-tool label="社团列表">
<!-- <el-button @click="openAdd" size="medium" type="primary">社团注册</el-button>-->
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" :default-sort="{ prop: 'clubCode', order: 'ascending' }">
<el-table-column :index="indexMethod" label="序号" type="index" width="80px"></el-table-column>
<el-table-column label="社团编码" prop="clubCode" sortable></el-table-column>
<el-table-column label="社团名称" prop="clubName" sortable show-overflow-tooltip></el-table-column>
@@ -108,6 +108,11 @@ layout("/layouts/platform.html"){
<!-- </el-table-column>-->
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column label="审核时间" prop="finishTime" width="160">
<template slot-scope="{row}">
<span v-if="row.finishTime">{{$moment(row.finishTime).format('YYYY-MM-DD HH:mm:ss')}}</span>
</template>
</el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
@@ -105,6 +105,11 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column label="审核时间" prop="finishTime" width="160">
<template slot-scope="{row}">
<span v-if="row.finishTime">{{$moment(row.finishTime).format('YYYY-MM-DD HH:mm:ss')}}</span>
</template>
</el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
@@ -69,6 +69,50 @@ layout("/layouts/platform_h5.html"){
@confirm="onReimburseProjectConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 经费来源 -->
<van-field
v-model="formData.reimburseFundSourceName"
name="reimburseFundSourceName"
label="经费来源"
readonly
placeholder="请选择经费来源"
@click="showReimburseFundSourcePicker = true"
:rules="[{ required: true, message: '请选择经费来源' }]"
clickable
required
is-link
></van-field>
<van-popup position="bottom" round v-model:show="showReimburseFundSourcePicker">
<van-picker :columns="reimburseFundSourceColumns" @cancel="showReimburseFundSourcePicker = false"
@confirm="onReimburseFundSourceConfirm" show-toolbar></van-picker>
</van-popup>
<van-field
v-if="formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'"
v-model="formData.clubName"
name="clubName"
label="所属社团"
readonly
placeholder="请选择所属社团"
@click="showClubPicker = true"
:rules="[{ required: true, message: '请选择所属社团' }]"
clickable
required
is-link
></van-field>
<van-popup position="bottom" round v-model:show="showClubPicker">
<van-picker :columns="clubColumns" @cancel="showClubPicker = false"
@confirm="onClubConfirm" show-toolbar></van-picker>
</van-popup>
<van-field
v-if="formData.reimburseFundSource"
label="余额"
v-model="formData.fundBalance"
readonly
placeholder="自动查询"
></van-field>
<!-- 联系方式 -->
<van-field label="联系方式" v-model="formData.mobile" required placeholder="请输入联系方式"
:rules="[{ required: true, message: '请输入联系方式' }]"></van-field>
@@ -128,9 +172,8 @@ layout("/layouts/platform_h5.html"){
required>
</van-field>
</template>
<!-- 活动相关字段 (当报销项目不为慰问时显示) -->
<template>
<template v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
<van-field label="活动名称"
v-model="formData.activityName"
placeholder="请输入活动名称"
@@ -455,6 +498,19 @@ layout("/layouts/platform_h5.html"){
onReimburseFundSourceConfirm(o) {
this.$set(this.formData, "reimburseFundSourceName", o.text) // 显示名称
this.$set(this.formData, "reimburseFundSource", o.value) // 字典值
if (o.value !== "UNION_REIMBURSE_FUND_SOURCE_3") {
this.$set(this.formData, "clubId", "")
this.$set(this.formData, "clubName", "")
this.queryFundBalance()
} else if (this.clubColumns.length === 1) {
this.$set(this.formData, "clubId", this.clubColumns[0].value)
this.$set(this.formData, "clubName", this.clubColumns[0].text)
this.queryFundBalance()
} else {
this.$set(this.formData, "clubId", "")
this.$set(this.formData, "clubName", "")
this.$set(this.formData, "fundBalance", "")
}
this.showReimburseFundSourcePicker = false
},
onClubConfirm(o) {
@@ -586,6 +642,11 @@ layout("/layouts/platform_h5.html"){
this.clubColumns = res.map(item => {
return { text: item.clubName, value: item.id }
})
if (res && res.length === 1 && this.formData.reimburseFundSource === "UNION_REIMBURSE_FUND_SOURCE_3" && !this.formData.clubId) {
this.$set(this.formData, "clubId", res[0].id)
this.$set(this.formData, "clubName", res[0].clubName)
this.queryFundBalance()
}
})
},
// 查询经费余额
@@ -654,33 +715,53 @@ layout("/layouts/platform_h5.html"){
},
// 添加经费来源区分
async filterReimburseFundSources() {
// 如果是系统管理员或校工会管理员,可以使用所有经费来源
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
// 不需要过滤,使用所有选项
return
}
const filteredSources = []
// 根据用户角色过滤经费来源选项
if (this.$auth.hasRoleOr(["SCHOOL_OUTLAY_ADMIN", "SCHOOL_UNION_ADMIN"])) {
this.reimburseFundSourceColumns.map(item => {
// 原角色过滤逻辑保留如下,手机端现统一改为按权限控制,与 PC 端保持一致
// if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
// return
// }
// if (this.$auth.hasRoleOr(["SCHOOL_OUTLAY_ADMIN", "SCHOOL_UNION_ADMIN"])) {
// this.reimburseFundSourceColumns.map(item => {
// if (item.value === "UNION_REIMBURSE_FUND_SOURCE_1") {
// filteredSources.push(item)
// }
// })
// }
// if (this.$auth.hasRoleOr(["BRANCH_UNION_CHAIRMAN", "BRANCH_UNION_ADMIN"])) {
// this.reimburseFundSourceColumns.map(item => {
// if (item.value === "UNION_REIMBURSE_FUND_SOURCE_2") {
// filteredSources.push(item)
// }
// })
// }
// if (this.$auth.hasRoleOr(["CLUB_MANAGER", "CLUB_PRESIDENT"])) {
// this.reimburseFundSourceColumns.map(item => {
// if (item.value === "UNION_REIMBURSE_FUND_SOURCE_3") {
// filteredSources.push(item)
// }
// })
// }
// 手机端经费来源权限必须使用 h5. 前缀,和 PC 端经费来源项保持一一对应
if (this.$auth.hasPermission("h5.unionReimburse.xgh")) {
this.reimburseFundSourceColumns.forEach(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_1") {
filteredSources.push(item)
}
})
}
if (this.$auth.hasRoleOr(["BRANCH_UNION_CHAIRMAN", "BRANCH_UNION_ADMIN"])) {
this.reimburseFundSourceColumns.map(item => {
if (this.$auth.hasPermission("h5.unionReimburse.fgh")) {
this.reimburseFundSourceColumns.forEach(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_2") {
filteredSources.push(item)
}
})
}
if (this.$auth.hasRoleOr(["CLUB_MANAGER", "CLUB_PRESIDENT"])) {
this.reimburseFundSourceColumns.map(item => {
if (this.$auth.hasPermission("h5.unionReimburse.club")) {
this.reimburseFundSourceColumns.forEach(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_3") {
filteredSources.push(item)
}