first commit

This commit is contained in:
2026-09-20 15:46:34 +08:00
parent 72fb5eae10
commit e558339dcc
3340 changed files with 671310 additions and 251 deletions
@@ -0,0 +1,157 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-date-picker
placeholder="年份"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入项目名称查询" style="width: 250px;" v-model="pageForm.xmmc"></el-input>
</div>
<div class="btn-group tool-button mt5">
<el-input @keyup.enter.native="doSearch" placeholder="请输入内容" v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 120px;"
v-model="pageForm.searchName">
<el-option label="申报人姓名" value="u.username"></el-option>
<el-option label="申报人工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select @change="getUnitList()" clearable filterable placeholder="请选择院级工会"
v-model="pageForm.unionid">
<el-option
:key="item.id"
:label="item.unionname"
:value="item.id"
v-for="item in unionList">
</el-option>
</el-select>
<el-select clearable filterable placeholder="请选择单位" v-model="pageForm.unitid">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in unitList">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<el-table :data="tableData" @sort-change='pageOrder'>
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column label="项目名称" prop="xmmc" show-overflow-tooltip width="400"></el-table-column>
<el-table-column label="申报人" prop="username"></el-table-column>
<el-table-column label="性别" prop="sex" width="100"></el-table-column>
<el-table-column label="申报单位" prop="dwname" show-overflow-tooltip width="150"></el-table-column>
<el-table-column label="职务职称" prop="zwzc" width="100"></el-table-column>
<el-table-column label="状态" prop="statename" sortable width="200"></el-table-column>
<el-table-column label="申报日期" prop="sbrq" sortable width="100"></el-table-column>
<el-table-column fixed="right" label="操作" width="200">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini">查看</el-button>
<!--# if(@shiro.hasRole('sysadmin')){ #-->
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除
</el-button>
<!--# } #-->
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
layout="total, prev, pager, next, jumper">
</el-pagination>
</el-row>
</el-card>
<template #view>
<syr-info-new ref="viewInfo"></syr-info-new>
</template>
</guava>
</div>
<script>
let vm = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
smm: {
status: 'table'
},
unionList: [],
unitList: [],
tableShow: true,
pageForm: {
searchName: 'u.username',
searchKeyword: '',
xmmc: '',
unionid: '',
unitid: '',
year: new Date().getFullYear().toString()
},
tableData: [],
xmid: '',
}
},
components: {
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
async pageData() {
const {data} = await POST('/platform/syr/cxtj/dgncx/pageData', this.pageForm, true)
this.tableData = data.list
this.pageForm.totalCount = data.totalCount
},
async openView(row) {
this.$refs.guava.view()
this.$refs.viewInfo.openView(row.id)
},
async getUnitList() {
this.unitList = []
this.pageForm.unitid = ''
this.unitList = await getUnit(this.pageForm.unionid)
},
doDelete(id) {
this.$confirm('是否确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
await POST('/platfotm/syr/info/mykt/doDelete', {id: id})
this.doSearch()
}).catch(() => {
})
}
},
async created() {
this.pageData()
this.unionList = await getUnion()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,178 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.aa > div {
flex-direction: row;
flex-wrap: nowrap;
white-space: nowrap;
margin: 5px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-input @keyup.enter.native="doSearch" placeholder="请输入内容" v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 120px;"
v-model="pageForm.searchName">
<el-option label="申报人姓名" value="u.username"></el-option>
<el-option label="申报人工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select @change="getUnitList()" clearable filterable placeholder="请选择院级工会"
v-model="pageForm.unionid">
<el-option
:key="item.id"
:label="item.unionname"
:value="item.id"
v-for="item in unionList">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-select clearable filterable placeholder="请选择单位" v-model="pageForm.unitid">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in unitList">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-date-picker
clearable="false"
placeholder="选择年份"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button @click="exportSummary" type="primary">
<i aria-hidden="true" class="fa fa-file-word-o"></i>
优秀课题汇总表
</el-button>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change='pageOrder'>
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column label="项目名称" prop="xmmc" show-overflow-tooltip width="400"></el-table-column>
<el-table-column label="申报人" prop="username"></el-table-column>
<el-table-column label="性别" prop="sex" width="100"></el-table-column>
<el-table-column label="申报单位" prop="dwname" show-overflow-tooltip width="150"></el-table-column>
<el-table-column label="职务职称" prop="zwzc" width="100"></el-table-column>
<el-table-column label="状态" prop="statename" sortable width="200"></el-table-column>
<el-table-column label="申报日期" prop="sbrq" sortable width="100"></el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini">查看</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
layout="total, prev, pager, next, jumper">
</el-pagination>
</el-row>
</el-card>
<template #view>
<syr-info-new ref="viewInfo"></syr-info-new>
</template>
</guava>
</div>
<script>
let vm = new Vue({
el: '#app',
data() {
return {
unionList: [],
unitList: [],
tableShow: true,
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: '',
pageOrderBy: '',
searchName: 'u.username',
searchKeyword: '',
xmmc: '',
unionid: '',
unitid: '',
year: ''
},
tableData: [],
xmid: '',
hasAdminRole:${@shiro.hasRole('sysadmin')}
}
},
components: {
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
async pageData() {
const {data} = await POST('/platform/syr/cxtj/goodkt/pageData', this.pageForm, true)
this.tableData = data.list
this.pageForm.totalCount = data.totalCount
},
pageOrder(column) {
this.pageForm.pageOrderName = column.prop
this.pageForm.pageOrderBy = column.order
this.pageData()
},
pageNumberChange(val) {
this.pageForm.pageNumber = val
this.pageData()
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
async openView(row) {
this.$refs.guava.view()
this.$refs.viewInfo.openView(row.id)
},
async getUnitList() {
this.unitList = []
this.pageForm.unitid = ''
this.unitList = await getUnit(this.pageForm.unionid)
},
exportSummary() {
if (this.pageForm.year === '') {
this.$message.info('请先选择年份!')
return
}
window.location.href = '/platform/syr/cxtj/goodkt/exportSummary?year=' + this.pageForm.year
}
},
async created() {
this.pageData()
this.unionList = await getUnion()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,165 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.nav-card .el-card__body {
padding: 5px !important;
}
</style>
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<div class="btn-group tool-button mt5" style="width: 100%">
<el-date-picker
clearable="false"
placeholder="选择年份"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<v-chart :options="stateOptions" @click="stateClick" ref="stateChart" style="width: 100%"
theme="mine"></v-chart>
</el-card>
<el-card class="mt10" shadow="never">
<el-row class="pl5 pr5">
<el-table :data="tableData">
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column label="项目名称" prop="xmmc" show-overflow-tooltip width="400"></el-table-column>
<el-table-column label="申报人" prop="username"></el-table-column>
<el-table-column label="性别" prop="sex" width="100"></el-table-column>
<el-table-column label="申报单位" prop="dwname" show-overflow-tooltip width="150"></el-table-column>
<el-table-column label="职务职称" prop="zwzc" width="100"></el-table-column>
<el-table-column label="状态" prop="statename" sortable width="200"></el-table-column>
<el-table-column label="申报日期" prop="sbrq" sortable width="100"></el-table-column>
<el-table-column fixed="right" label="操作">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini">查看</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
layout="total, prev, pager, next, jumper">
</el-pagination>
</el-row>
</el-card>
<template #view>
<syr-info-new ref="viewInfo"></syr-info-new>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
data() {
return {
smm: {
status: 'table'
},
statePlotData: [],
tableData: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
state: null,
year: ''
},
dataList: [],
stateOptions: {
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: []
},
series: [
{
name: '状态',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
}
},
components: {
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
async initStatePlot() {
const {data} = await GET('/platform/syr/cxtj/statetj/statePlotData', {year: this.pageForm.year})
this.dataList = data
let legendData = []
for (let o of data) {
legendData.push(o.name)
}
this.stateOptions.legend.data = legendData
this.stateOptions.series[0].data = data
},
stateClick(e) {
let stateObj = this.dataList.find(o => {
return o.name === e.data.name
})
this.pageForm.state = stateObj.id
this.pageData()
},
async pageData() {
const {data} = await POST('/platform/syr/cxtj/statetj/pageData', this.pageForm, true)
this.tableData = data.list
this.pageForm.totalCount = data.totalCount
},
pageNumberChange(val) {
this.pageForm.pageNumber = val
this.pageData()
},
doSearch() {
this.pageForm.state = null
this.pageData()
this.initStatePlot()
},
async openView(row) {
this.$refs.guava.view()
this.$refs.viewInfo.openView(row.id)
}
},
mounted() {
this.initStatePlot()
},
created() {
this.pageForm.year = moment().format('YYYY')
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,164 @@
<!--#
layout("/layouts/platform.html"){
#-->
<script src="https://cdn.jsdelivr.net/npm/echarts@4.1.0/dist/echarts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@4.0.2"></script>
<style>
/*.el-card__body{*/
/* height: 100%;*/
/*}*/
.echarts {
width: 100%;
height: 100%;
}
</style>
<div id="app" v-cloak class="p10">
<el-card>
<v-chart style="width: 100%;height: 800px" theme="mine" :options="yearOptions2"></v-chart>
</el-card>
</div>
<script>
let vm = new Vue({
el:'#app',
data(){
return{
yearOptions2:{
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
legend: {
data: ['结题优秀','结题通过','立项','总申报']
},
grid: {
left: '3%',
right: '3%',
bottom: '15%',
containLabel: true
},
xAxis: {
type: 'value'
},
yAxis: {
type: 'category',
data: []
},
series: [
{
name: '结题优秀',
type: 'bar',
stack: '结题优秀数',
label: {
show: true,
position: 'insideRight'
},
data: []
},
{
name: '结题通过',
type: 'bar',
stack: '结题通过数',
label: {
show: true,
position: 'insideRight'
},
data: []
},
{
name: '立项',
type: 'bar',
stack: '立项数',
label: {
show: true,
position: 'insideRight'
},
data: []
},
{
name: '总申报',
type: 'bar',
stack: '总申报数',
label: {
show: true,
position: 'insideRight'
},
data: []
}
]
},
unionList:[],
yearList:[],
dataList:[]
}
},
methods:{
dataFormatter(year){
let o = {}
let totalArr = []
for (let y of this.yearList){
for (let d of this.dataList[y]){
const v = {name:d.unionname,value:d.totalnum}
totalArr.push(v)
}
}
o.total = totalArr
let lxArr = []
for (let y of this.yearList){
for (let d of this.dataList[y]){
const v = {name:d.unionname,value:d.lxnum}
lxArr.push(v)
}
}
o.lx = lxArr
let passArr = []
for (let y of this.yearList){
for (let d of this.dataList[y]){
const v = {name:d.unionname,value:d.passnum}
passArr.push(v)
}
}
o.pass = passArr
let goodArr = []
for (let y of this.yearList){
for (let d of this.dataList[y]){
const v = {name:d.unionname,value:d.goodnum}
goodArr.push(v)
}
}
o.good = goodArr
console.log(o)
return o
},
async getUnionList(){
const {data} = await GET('/platform/syr/cxtj/yeartj/getUnionList',{})
for (let o of data){
this.unionList.push(o.unionname)
}
},
async getDataList(){
const {data} = await GET('/platform/syr/cxtj/yeartj/data',{})
this.yearList = Object.keys(data)
this.dataList = data
},
async inita(){
this.yearOptions2.yAxis.data = this.unionList
this.yearOptions2.series[0].data = this.dataFormatter(2020).good
this.yearOptions2.series[1].data = this.dataFormatter(2020).pass
this.yearOptions2.series[2].data = this.dataFormatter(2020).lx
this.yearOptions2.series[3].data = this.dataFormatter(2020).total
}
},
async created(){
await this.getUnionList()
await this.getDataList()
await this.inita()
}
})
</script>
<!--#
}
#-->