first commit

This commit is contained in:
2026-09-08 19:49:21 +08:00
commit ebffbab428
7320 changed files with 1477614 additions and 0 deletions
@@ -0,0 +1,401 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.yearDatePickerItemLabel .el-select {
background-color: #f5f7fa;
color: #909399;
}
.yearDatePickerItemLabel .el-input__inner {
border-bottom-right-radius: unset;
border-top-right-radius: unset;
/*border-right: 0;*/
}
.yearDatePickerItemOption .el-input__inner {
border-bottom-left-radius: unset;
border-top-left-radius: unset;
border-left: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label yearDatePickerItemLabel" style="width: 100%;margin-right: 0">
<el-select v-model="pageForm.yearType" placeholder="年度类型"
style="width: 100%">
<el-option label="申报年度" value="sbyear"></el-option>
<el-option label="结题年度" value="jtyear"></el-option>
</el-select>
</div>
<div class="search-item-option yearDatePickerItemOption"
style="width: calc(100% - 160px);min-width:calc(100% - 160px)">
<el-date-picker
style="width: 100%"
v-model="pageForm.year"
type="year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">项目名称:</div>
<div class="search-item-option">
<el-input v-model="pageForm.xmmc" placeholder="请输入项目名称查询" style="width: 100%;"></el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">申报人:</div>
<div class="search-item-option">
<el-input v-model="pageForm.searchKeyword" placeholder="请输入内容" @keyup.enter.native="doSearch">
<el-select slot="prepend" v-model="pageForm.searchName" placeholder="查询类型"
style="width: 120px;">
<el-option label="申报人姓名" value="u.username"></el-option>
<el-option label="申报人工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">院级工会:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unionid" clearable filterable placeholder="请选择院级工会"
@change="getUnitList()"
style="width: 100%">
<el-option
v-for="item in unionList"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">单位:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unitid" clearable filterable placeholder="请选择单位"
style="width: 100%">
<el-option
v-for="item in unitList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<slot name="search-group">
<!--不同页面的查询条件自定义-->
</slot>
<div class="search-query">
<el-button icon="el-icon-search" type="primary" @click="doSearch"></el-button>
</div>
</div>
<!--<template v-show="!hasNotghdwUrl.includes(request)">
<div class="btn-group tool-button mt5">
<el-select v-model="pageForm.unionid" clearable filterable placeholder="请选择院级工会" @change="getUnitList()">
<el-option
v-for="item in unionList"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-select v-model="pageForm.unitid" clearable filterable placeholder="请选择单位">
<el-option
v-for="item in unitList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</template>-->
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="选题列表">
<template #func>
<el-radio-group @change="doSearch" class="mr10" size="small" v-model="pageForm.isAudit">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
<el-dropdown @command="groupClick" size="small" split-button type="primary">
分配评委
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="batch">批量分组</el-dropdown-item>
<!-- <el-dropdown-item command="auto">自动分组</el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
</template>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder" ref="table">
<el-table-column
:selectable="(row)=>{return row.isaudit && row.state === 40 && row.pwhasauditcount === 0}"
type="selection"
width="55">
</el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
></el-table-column>
<el-table-column label="操作" width="200px">
<template slot-scope="{row}">
<el-button size="mini" :type="row.state>30?null:'primary'"
@click="openView(row,row.state>30)">
{{row.state>30?'查看':'审核'}}
</el-button>
<el-button size="mini" type="danger" v-if="row.state>30 && row.state<=40"
@click="doRollBack(row)">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<syr-info-new ref="auditInfo">
<template #handle>
<el-tab-pane label="校工会审核" name="xjsh">
<el-form :model="formData" label-suffix="" label-width="100px" ref="auditForm">
<el-form-item label="审核人">
${@shiro.getPrincipalProperty('username')}
</el-form-item>
<el-form-item label="审核时间">
{{moment().format('YYYY-MM-DD')}}
</el-form-item>
<el-form-item :rules="[{required: true, message: '请输入审核意见', trigger: ['blur']}]"
label="审核意见"
prop="stxghyj">
<el-input maxlength="300" rows="5" type="textarea"
v-model="formData.stxghyj"></el-input>
</el-form-item>
<!-- <el-form-item label="签字" prop="stxghfzrqz" :rules="[{required: true, message: '请签字', trigger: ['change']}]">
<sign :qz.sync="formData.stxghfzrqz" prefix="syrxjsh"></sign>
</el-form-item>-->
</el-form>
<el-row class="mt20 text-center">
<el-button @click="doHandle(false)" type="danger">拒 绝</el-button>
<el-button @click="doHandle(true)" type="success">通 过</el-button>
</el-row>
</el-tab-pane>
</template>
</syr-info-new>
</template>
<template #view>
<syr-info-new ref="viewInfo"></syr-info-new>
</template>
<el-dialog :close-on-click-modal="false" :visible.sync="distributionDialogVisible" title="批量分配评委" width="45%">
<vi-title title="勾选选题"></vi-title>
<el-table :data="tableSelection" max-height="300px">
<el-table-column header-align="center" label="序号" type="index" width="80px"></el-table-column>
<el-table-column header-align="center" label="项目名称" prop="xmmc"></el-table-column>
<el-table-column header-align="center" label="申报人" prop="username"></el-table-column>
</el-table>
<vi-title class="mt10" title="评委期数"></vi-title>
<el-select v-model="distributionPeriod" clearable filterable placeholder="请选择评委期数"
@change="getGroupNameOptions(distributionPeriod)"
style="width: 100%">
<el-option
v-for="item in periodOptions"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
<!--<el-radio-group size="small" v-model="distributionPeriod" @change="getGroupNameOptions(distributionPeriod)">
<el-radio :label="item" border v-for="item in periodOptions">{{item}}</el-radio>
</el-radio-group>-->
<vi-title class="mt10" title="评委组别"></vi-title>
<el-radio-group size="small" v-model="distributionGroupName">
<el-radio :label="item" border v-for="item in groupNameOptions">{{item}}</el-radio>
</el-radio-group>
<div slot="footer">
<el-button @click="distributionDialogVisible = false">取消</el-button>
<el-button @click="doBatchDistribution" type="primary">确定</el-button>
</div>
</el-dialog>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
unionList: [],
unitList: [],
periodOptions:[],
groupNameOptions: [],
formData: {},
pageForm: {
year: moment().format('YYYY'),
isAudit: false,
yearType: 'sbyear'
},
tableColumns: [
{prop: 'xmmc', label: '项目名称'},
{prop: 'username', label: '申报人', sortable: true},
{prop: 'sex', label: '性别', sortable: true},
{prop: 'dwname', label: '申报单位', sortable: true},
{prop: 'ghname', label: '院级工会', sortable: true},
{prop: 'zwzc', label: '职务职称', sortable: true},
{prop: 'statename', label: '状态', sortable: true},
{prop: 'sbrq', label: '申报日期', sortable: true},
{prop: 'period', label: '评委期数', sortable: true},
{prop: 'groupname', label: '评委分组', sortable: true},
],
distributionPeriod:null,
distributionGroupName: null,
distributionDialogVisible: false,
tableSelection: []
}
},
components: {
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
openView(row, isView) {
if (isView) {
this.$refs.guava.view()
this.$refs.viewInfo.openView(row.id)
} else {
this.$refs.guava.edit()
this.$refs.auditInfo.openView(row.id, 'xjsh')
this.formData = {
id: row.id,
stxghyj: null,
stxghfzrqz: null
}
}
},
async doHandle(res) {
const valid = await this.$refs['auditForm'].validate()
if (!valid) return
this.formData.state = res ? 40 : 35
const resp = await $.post('/platfotm/syr/info/xjsh/doHandle', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.notifySuccess(resp.msg)
this.pageData()
}
},
groupClick(command) {
if ('batch' === command) {
const selection = this.$refs.table.selection
if (selection.length === 0) {
this.notifyWarning('请先勾选需要批量分配评委的选题')
return
}
this.tableSelection = selection
this.distributionGroupName = null
this.distributionDialogVisible = true
}
},
async doBatchDistribution() {
const distributionPeriod = this.distributionPeriod
const distributionGroupName = this.distributionGroupName
if (!distributionPeriod) {
this.notifyWarning('请选择需要分配的评委期数')
return
}
if (!distributionGroupName) {
this.notifyWarning('请选择需要分配的评委组别')
return
}
const projectIds = this.$refs.table.selection.map(v => v.id)
const resp = await $.post(loc() + '/doBatchDistribution', {
distributionPeriod,
distributionGroupName,
projectIds: JSON.stringify(projectIds)
})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.tableSelection = []
this.distributionGroupName = null
this.distributionDialogVisible = false
this.$refs.table.clearSelection()
this.pageData()
} else {
this.notifyWarning(resp.msg)
}
},
async getUnitList() {
this.pageForm.unitid = ''
this.unitList = await getUnits(this.pageForm.unionid)
},
async getGroupNameOptions(distributionPeriod) {
const resp = await $.get('/platform/syr/basic/pwgl/getGroupNameOptions',{period:distributionPeriod})
if (resp.code === 0) {
this.groupNameOptions = resp.data
} else {
this.notifyWarning(resp.msg)
}
},
async doRollBack(row){
const resp = await $.get('/platfotm/syr/info/yjsh/doRollBack',{id:row.id,state:row.state})
if (resp.code === 0){
this.notifySuccess(resp.msg)
this.pageData()
}
},
async getPeriodOptions() {
const resp = await $.get('/platform/syr/basic/pwgl/getPeriodOptions')
if (resp.code === 0) {
this.periodOptions = resp.data
} else {
this.notifyWarning(resp.msg)
}
},
},
async created() {
this.pageData()
this.unionList = await getUnions(null)
await this.getPeriodOptions();
//await this.getGroupNameOptions();
}
})
</script>
<!--#
}
#-->