first commit
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<snaker-start slot="header" label="思政申报" define_key="SZBKSB"></snaker-start>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
|
||||
<el-descriptions-item label="归属项目" :span="1.5">
|
||||
<el-form-item prop="manageId">
|
||||
<el-select v-model="formData.manageId" placeholder="请选择项目名称" clearable>
|
||||
<el-option v-for="o in projectList" :label="o.manageName" :value="o.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="项目名称" :span="1.5">
|
||||
<el-form-item prop="projectName">
|
||||
<el-input placeholder="请填写项目名称" v-model="formData.projectName" maxlength="100"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="申报单位">
|
||||
<el-form-item prop="applyUnitName">
|
||||
<el-input placeholder="申报单位" readonly v-model="formData.applyUnitName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联合单位">
|
||||
<el-form-item prop="jointUnitId">
|
||||
<el-select placeholder="联合单位" v-model="formData.jointUnitId"
|
||||
style="width: 100%;"
|
||||
@change="changeJointUnit"
|
||||
clearable filterable>
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="申报时间">
|
||||
<el-form-item prop="applyTime">
|
||||
<el-date-picker
|
||||
readonly
|
||||
placeholder="申报时间"
|
||||
type="date"
|
||||
v-model="formData.applyTime"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="负责人">
|
||||
<el-form-item prop="headName">
|
||||
<el-input placeholder="负责人" readonly v-model="formData.headName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input placeholder="联系方式" v-model="formData.mobile" maxlength="11"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input placeholder="邮箱" v-model="formData.email" maxlength="20"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="项目规模(人数)">
|
||||
<el-form-item prop="numberPeople">
|
||||
<el-input-number placeholder="项目规模(人数)" v-model="formData.numberPeople"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="领导参加人数">
|
||||
<el-form-item prop="numberLeader">
|
||||
<el-input-number placeholder="领导参加人数" v-model="formData.numberLeader"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="骨干教师参加人数">
|
||||
<el-form-item prop="numberTeacher">
|
||||
<el-input-number placeholder="骨干教师参加人数" v-model="formData.numberTeacher"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="单位人数占比">
|
||||
<el-form-item prop="unitPercentage">
|
||||
<el-input-number placeholder="占本单位人数百分比" v-model="formData.unitPercentage"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="领导人数占比">
|
||||
<el-form-item prop="leaderPercentage">
|
||||
<el-input-number placeholder="占本领导人数百分比" v-model="formData.leaderPercentage"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="骨干教师人数占比">
|
||||
<el-form-item prop="teacherPercentage">
|
||||
<el-input placeholder="占本骨干教师人数百分比" v-model="formData.teacherPercentage"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="项目类别">
|
||||
<el-form-item prop="typeId">
|
||||
<el-select v-model="formData.typeId" placeholder="请选择项目类别" clearable>
|
||||
<el-option v-for="o in typeList" :label="o.typeName" :value="o.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="项目主题" :span="2">
|
||||
<el-form-item prop="projectTheme">
|
||||
<el-input placeholder="项目主题" v-model="formData.projectTheme" maxlength="255"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="项目经费预算" :span="3">
|
||||
<el-form-item prop="leadThoughtFunds">
|
||||
<el-table :data="formData.leadThoughtFunds" border size="small">
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="开支科目" prop="expenseAccount">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.expenseAccount" maxlength="100"
|
||||
placeholder="请填写开支科目"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="向校工会申请经费(元)" prop="applySchoolMoney">
|
||||
<template slot-scope="{row}">
|
||||
<el-input @input="changNum(row)" v-model="row.applySchoolMoney"
|
||||
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="请填写向校工会申请经费"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="部门配套经费(元)" prop="deptMoney">
|
||||
<template slot-scope="{row}">
|
||||
<el-input @input="changNum(row)" v-model="row.deptMoney"
|
||||
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="请填写部门配套经费"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="合计(元)" prop="amountTo">
|
||||
<template slot-scope="{row}">
|
||||
<el-input readonly v-model="row.amountTo" placeholder="填写前两项后自动计算"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini"
|
||||
@click="formData.leadThoughtFunds.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete" size="mini"
|
||||
:disabled="formData.leadThoughtFunds.length===0"
|
||||
@click="formData.leadThoughtFunds.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="项目主要内容/进度安排">
|
||||
<el-form-item prop="content">
|
||||
<text-editor v-model="formData.content"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
|
||||
<el-row type="flex" justify="end" class="mt20">
|
||||
<el-button type="primary" plain @click="onSave">保存</el-button>
|
||||
<el-button type="primary" @click="onSubmit" v-if="!taskId">提交</el-button>
|
||||
<el-button type="primary" @click="onFinishTask" v-else>提交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
id: GetQueryString("bizId"),
|
||||
taskId: GetQueryString("taskId"),
|
||||
formData: {
|
||||
leadThoughtFunds: []
|
||||
},
|
||||
formRules: {
|
||||
manageId: [{required: true, message: '请选择归属项目', trigger: ['blur', 'change']}],
|
||||
projectName: [{required: true, message: '请填写项目名称', trigger: ['blur', 'change']}],
|
||||
applyUnitName: [{required: true, message: '请填写申报单位', trigger: ['blur', 'change']}],
|
||||
headName: [{required: true, message: '请填写项目负责人', trigger: ['blur', 'change']}],
|
||||
mobile: [{required: true, message: '请填写手机', trigger: ['blur', 'change']}],
|
||||
email: [{required: true, message: '请填写邮箱', trigger: ['blur', 'change']}],
|
||||
numberPeople: [{required: true, message: '请填写项目规模(人数)', trigger: ['blur', 'change']}],
|
||||
numberLeader: [{required: true, message: '请填写领导参加人数', trigger: ['blur', 'change']}],
|
||||
numberTeacher: [{required: true, message: '请填写骨干教师参加人数', trigger: ['blur', 'change']}],
|
||||
unitPercentage: [{required: true, message: '请填写占本单位人数%比', trigger: ['blur', 'change']}],
|
||||
leaderPercentage: [{required: true, message: '请填写占本领导人数%比', trigger: ['blur', 'change']}],
|
||||
teacherPercentage: [{required: true, message: '请填写占本骨干教师人数%比', trigger: ['blur', 'change']}],
|
||||
projectTheme: [{required: true, message: '请填写项目主题', trigger: ['blur', 'change']}],
|
||||
typeId: [{required: true, message: '请选择项目类别', trigger: ['blur', 'change']}],
|
||||
leadThoughtFunds: [{required: true, message: '请填写项目经费预算', trigger: ['blur', 'change']}],
|
||||
content: [{required: true, message: '请填写项目主要内容/进度安排', trigger: ['blur', 'change']}],
|
||||
},
|
||||
projectList: [],
|
||||
typeList: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changNum(value) {
|
||||
value.amountTo = null
|
||||
if (!isNaN(value.applySchoolMoney) && value.applySchoolMoney !== undefined && value.applySchoolMoney !== '' &&
|
||||
!isNaN(value.deptMoney) && value.deptMoney !== undefined && value.deptMoney !== '') {
|
||||
value.amountTo = parseInt(value.applySchoolMoney) + parseInt(value.deptMoney)
|
||||
}
|
||||
},
|
||||
changeJointUnit(val) {
|
||||
const data = this.units.find(item => item.id === val)
|
||||
this.$set(this.formData, "jointUnitName", data?.name)
|
||||
},
|
||||
onSave() {
|
||||
this.$confirm("您确定保存吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post('/platform/leadThought/apply/save', {data: JSON.stringify(this.formData)}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
commonUtil.pjaxPush('/platform/leadThought/mine')
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
onSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post('/platform/leadThought/apply/submit', {
|
||||
data: JSON.stringify(this.formData)
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
commonUtil.pjaxPush('/platform/leadThought/mine')
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
onFinishTask() {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post('/platform/leadThought/apply/submitAgain', {
|
||||
data: JSON.stringify(this.formData),
|
||||
taskId: this.taskId,
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
commonUtil.pjaxPush('/platform/leadThought/mine')
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.$axios.post("/platform/leadThought/apply/findWriteInfo", {id: this.id})
|
||||
.then(res => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const user = this.$store.state.user
|
||||
this.$set(this.formData, 'mobile', user.mobile)
|
||||
this.$set(this.formData, 'email', user.email)
|
||||
this.$set(this.formData, 'headName', user.username)
|
||||
this.$set(this.formData, 'applyUnitId', user.unit.id)
|
||||
this.$set(this.formData, 'applyUnitName', user.unit.name)
|
||||
this.$set(this.formData, 'applyTime', moment().format('YYYY-MM-DD'))
|
||||
}
|
||||
},
|
||||
async getProjectList() {
|
||||
const resp = await this.$axios.post('/platform/leadThought/basic/manage/getProjectList')
|
||||
this.projectList = resp.data
|
||||
},
|
||||
async getAllType() {
|
||||
const resp = await this.$axios.post('/platform/leadThought/basic/type/findAllType')
|
||||
this.typeList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.init()
|
||||
await this.getProjectList()
|
||||
await this.getAllType()
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,185 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.dialog-footer .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
@change="doSearch"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="项目名称">
|
||||
<el-input placeholder="请输入项目名称" clearable v-model="pageForm.projectName"
|
||||
@keyup.enter.native="doSearch">
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="项目列表">
|
||||
<el-button @click="openAdd" size="medium" type="primary">新建项目</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='isOpen'">
|
||||
<el-switch @change="switchChange(row)" v-model="row.isOpen"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="doDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :title="title" :visible.sync="dialogVisible" :close-on-click-modal="false" width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
<el-form-item label="项目名称" prop="manageName">
|
||||
<el-input type="text" v-model="formData.manageName" maxlength="50" placeholder="请输入项目名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否开启" prop="isOpen">
|
||||
<el-switch v-model="formData.isOpen" active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="operation">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
title: "",
|
||||
subDis: false,
|
||||
dialogVisible: false,
|
||||
tabLoading: false,
|
||||
pageForm: {},
|
||||
formRules: {
|
||||
manageName: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
formData: {},
|
||||
tableColumns: [
|
||||
{label: '名称', prop: 'manageName', sortable: true},
|
||||
{label: '创建时间', prop: 'createTime', sortable: true},
|
||||
{label: '是否开启', prop: 'isOpen'},
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd() {
|
||||
this.title = "添加项目"
|
||||
this.formData = {
|
||||
isOpen: true
|
||||
}
|
||||
this.dialogVisible = true;
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
openEdit(data) {
|
||||
this.title = "编辑项目"
|
||||
this.formData = data
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: "正在提交中。。。",
|
||||
spinner: "el-icon-loading",
|
||||
background: "rgba(0, 0, 0, 0.7)"
|
||||
});
|
||||
const resp = await this.$axios.post(loc() + method, this.formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.dialogVisible = false
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async doDelete(row) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await this.$axios.post(loc() + "/doDelete", {id: row.id})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async switchChange(data) {
|
||||
this.formData = data
|
||||
const resp = await this.$axios.post(loc() + "/doEdit", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,179 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="类别名称">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入类别名称"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.typeName">
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="类别列表">
|
||||
<el-button @click="openAdd" size="medium" type="primary">新建类别</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='isOpen'">
|
||||
<el-switch @change="switchChange(row)" v-model="row.isOpen"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="doDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog :title="title" :visible.sync="dialogVisible" :close-on-click-modal="false" width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
<el-form-item label="类别编码" prop="typeCode">
|
||||
<el-input type="text" v-model="formData.typeCode" maxlength="50" placeholder="请填写类别编码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序编号" prop="sortNum">
|
||||
<el-input type="text" v-model="formData.sortNum" maxlength="50" placeholder="请填写排序编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="类别名称" prop="typeName">
|
||||
<el-input type="text" v-model="formData.typeName" maxlength="50" placeholder="请填写类别名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否开启" prop="isOpen">
|
||||
<el-switch v-model="formData.isOpen" active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="operation">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {},
|
||||
title: '',
|
||||
dialogVisible: false,
|
||||
subDis: false,
|
||||
tableColumns: [
|
||||
{label: '类别编码', prop: 'typeCode', sortable: true},
|
||||
{label: '排序编号', prop: 'sortNum', sortable: true},
|
||||
{label: '类别名称', prop: 'typeName', sortable: true},
|
||||
{label: '是否开启', prop: 'isOpen'},
|
||||
],
|
||||
formData: {},
|
||||
formRules: {
|
||||
typeName: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
typeCode: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
sortNum: [{required: false, message: '必选', trigger: ['blur', 'change']}],
|
||||
isOpen: [{required: false, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd() {
|
||||
this.title = "添加类别"
|
||||
this.formData = {
|
||||
isOpen: true
|
||||
}
|
||||
this.dialogVisible = true;
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
openEdit(data) {
|
||||
this.title = "编辑类别"
|
||||
this.formData = data
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: "正在提交中。。。",
|
||||
spinner: "el-icon-loading",
|
||||
background: "rgba(0, 0, 0, 0.7)"
|
||||
});
|
||||
const resp = await this.$axios.post(loc() + method, this.formData)
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.dialogVisible = false
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
loading.close()
|
||||
}
|
||||
});
|
||||
},
|
||||
async doDelete(row) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await this.$axios.post(loc() + "/doDelete", {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async switchChange(data) {
|
||||
this.formData = data
|
||||
const resp = await this.$axios.post(loc() + "/doEdit", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,193 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool>
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" fixed="right" width="300">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
<template #edit>
|
||||
<info ref="infoRef">
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">
|
||||
{{formData.taskName}}
|
||||
</div>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":"
|
||||
class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
|
||||
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
|
||||
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: 'projectName', label: '项目名称', sortable: true},
|
||||
{ prop: 'applyUnitName', label: '申报单位', sortable: true},
|
||||
{ prop: 'headName', label: '项目负责人', sortable: true},
|
||||
{ prop: 'projectTheme', label: '项目主题', sortable: true},
|
||||
{ prop: 'numberPeople', label: '项目规模(人数)', sortable: true},
|
||||
{ prop: 'numberLeader', label: '领导人数', sortable: true},
|
||||
{ prop: 'numberTeacher', label: '骨干教师人数', sortable: true},
|
||||
{ prop: "curTaskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
|
||||
// 审核相关
|
||||
showApprovalForm: false,
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.edit(()=>{
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.edit(()=>{
|
||||
this.showApprovalForm = true
|
||||
this.formData = {
|
||||
processTaskId: row.taskId,
|
||||
taskName: row.curTaskName
|
||||
}
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
handleTaskAction(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
...this.formData,
|
||||
submitType: val
|
||||
})
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(()=>{
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,82 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
@change="doSearch"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="项目名称">
|
||||
<el-input placeholder="请选择项目名称" clearable v-model="pageForm.projectName"
|
||||
@keyup.enter.native="doSearch">
|
||||
</el-input>
|
||||
</search-item>
|
||||
|
||||
<search-item label="归属专题">
|
||||
<el-select v-model="pageForm.manageId" placeholder="请选择归属专题"
|
||||
style="width: 100%;"
|
||||
clearable
|
||||
@change="doSearch()"
|
||||
filterable>
|
||||
<el-option v-for="o in projectList"
|
||||
:label="o.manageName"
|
||||
:value="o.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="归属类目">
|
||||
<el-select v-model="pageForm.typeId" placeholder="请选择归属类目"
|
||||
style="width: 100%;" clearable @change="doSearch()" filterable>
|
||||
<el-option v-for="o in typeList"
|
||||
:label="o.typeName"
|
||||
:value="o.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
year: moment().format('YYYY'),
|
||||
projectName: '',
|
||||
manageId: '',
|
||||
typeId: ''
|
||||
},
|
||||
typeList: [],
|
||||
projectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
getProjectList() {
|
||||
this.$axios.post('/platform/leadThought/basic/manage/getProjectList')
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.projectList = resp.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getAllType() {
|
||||
this.$axios.post('/platform/leadThought/basic/type/findAllType')
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.typeList = resp.data
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getProjectList()
|
||||
this.getAllType()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
const INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<div class="process-title">
|
||||
申报信息
|
||||
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
|
||||
</div>
|
||||
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="归属项目" :span="1.5">{{ viewData.manageName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目名称" :span="1.5">{{ viewData.projectName }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="申报单位">{{ viewData.applyUnitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联合单位">{{ viewData.jointUnitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="申报时间">{{ viewData.applyTime }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="负责人">{{ viewData.headName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="项目规模(人数)">{{ viewData.numberPeople }}</el-descriptions-item>
|
||||
<el-descriptions-item label="领导参加人数">{{ viewData.numberLeader }}</el-descriptions-item>
|
||||
<el-descriptions-item label="骨干教师参加人数">{{ viewData.numberTeacher }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="占单位人数比">{{ viewData.unitPercentage }}</el-descriptions-item>
|
||||
<el-descriptions-item label="占领导人数比">{{ viewData.numberLeader }}</el-descriptions-item>
|
||||
<el-descriptions-item label="占骨干教师人数比">{{ viewData.teacherPercentage }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="项目类别">{{ viewData.typeName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目主题" :span="2">{{ viewData.projectTheme }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="项目经费预算" :span="3">
|
||||
<el-table v-if="viewData.leadThoughtFunds && viewData.leadThoughtFunds.length"
|
||||
:data="viewData.leadThoughtFunds" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="expenseAccount" label="开支科目" align="center"></el-table-column>
|
||||
<el-table-column prop="applySchoolMoney" label="向校工会申请经费" align="center"></el-table-column>
|
||||
<el-table-column prop="deptMoney" label="部门配套经费" align="center"></el-table-column>
|
||||
<el-table-column prop="amountTo" label="合计" align="center"></el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动内容与形式" :span="3">
|
||||
<div class="text-left" v-html="viewData.content"></div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<template v-for="task in doneTasks">
|
||||
<div class="mt10">
|
||||
<div class="process-title">{{ task.displayName }}</div>
|
||||
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
|
||||
v-if="task.ext.isFirstTaskNode">
|
||||
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
|
||||
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName
|
||||
}}({{task.taskFormData.loginName}})
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="办理意见" :span="3" v-if="!task.ext.isFirstTaskNode">{{
|
||||
task.taskFormData.opinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<slot></slot>
|
||||
|
||||
<snaker-chart ref="snakerChartRef"></snaker-chart>
|
||||
</div>
|
||||
`,
|
||||
store,
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
data() {
|
||||
return {
|
||||
row: {},
|
||||
viewData: {},
|
||||
doneTasks: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen(row) {
|
||||
this.row = row
|
||||
this.info()
|
||||
this.getDoneTasks()
|
||||
},
|
||||
info() {
|
||||
this.$axios.post("/platform/leadThought/mine/findOne", { id: this.row.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
this.viewData.leadThoughtFunds = JSON.parse(res.data.leadThoughtFunds)
|
||||
}
|
||||
})
|
||||
},
|
||||
getDoneTasks() {
|
||||
this.$axios.post("/flow/common/doneTasks", { bizId: this.row.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doneTasks = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
// 查看流程图
|
||||
openChart(){
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool></table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="220" fixed="right">
|
||||
<template slot-scope="{row}">
|
||||
<!-- <el-button size="mini" @click="openView(row)">查看</el-button>-->
|
||||
<!-- <el-button size="mini" v-if="[6250].includes(row.state)"-->
|
||||
<!-- @click="exportInfo(row.id)">导出-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button @click="openEdit(row)" size="mini" type="primary"-->
|
||||
<!-- v-if="[6000,6100,6125,6200].includes(row.state)">-->
|
||||
<!-- 编辑-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-button @click="doDelete(row.id)" size="mini" type="danger"-->
|
||||
<!-- v-if="[6000,6100,6125,6200].includes(row.state)">删除-->
|
||||
<!-- </el-button>-->
|
||||
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId"
|
||||
@click="onEdit(row)" size="mini" type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId"
|
||||
@click="onDelete(row.id)" size="mini" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: 'projectName', label: '项目名称', sortable: true},
|
||||
{ prop: 'manageName', label: '专题名称', sortable: true},
|
||||
{ prop: 'applyUnitName', label: '申报单位', sortable: true},
|
||||
{ prop: 'headName', label: '项目负责人', sortable: true},
|
||||
{ prop: 'typeName', label: '归属类目', sortable: true},
|
||||
{ prop: 'projectTheme', label: '项目主题', sortable: true},
|
||||
{ prop: 'numberPeople', label: '项目规模(人数)', sortable: true},
|
||||
{ prop: 'numberLeader', label: '领导人数', sortable: true},
|
||||
{ prop: 'numberTeacher', label: '骨干教师人数', sortable: true},
|
||||
{ prop: "taskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
onEdit(row) {
|
||||
commonUtil.pjaxPush('/platform/leadThought/apply?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id)
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/flow/common/revokeTask", { taskId: row.startTaskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
onDelete(id) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/platform/leadThought/mine/onDelete", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
exportInfo(id) {
|
||||
window.open('/platform/leadThought/stat/exportInfo?id=' + id)
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,117 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool>
|
||||
<!-- <el-button size="mini" type="primary" @click="exportAllInfo">导出全部</el-button>-->
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" fixed="right" width="180">
|
||||
<template slot-scope="{row}">
|
||||
<el-button size="mini" @click="openView(row)">查看</el-button>
|
||||
<el-button size="mini" type="primary" @click="exportInfo(row.id)">导出</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: 'projectName', label: '项目名称', sortable: true},
|
||||
{ prop: 'manageName', label: '专题名称', sortable: true},
|
||||
{ prop: 'applyUnitName', label: '申报单位', sortable: true},
|
||||
{ prop: 'headName', label: '项目负责人', sortable: true},
|
||||
{ prop: 'typeName', label: '归属类目', sortable: true},
|
||||
{ prop: 'projectTheme', label: '项目主题', sortable: true},
|
||||
{ prop: 'numberPeople', label: '项目规模(人数)', sortable: true},
|
||||
{ prop: 'numberLeader', label: '领导人数', sortable: true},
|
||||
{ prop: 'numberTeacher', label: '骨干教师人数', sortable: true},
|
||||
// { prop: "curTaskName", label: "当前节点" },
|
||||
// { prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
exportAllInfo() {
|
||||
// const {searchName, searchKeyword, year, manageId, typeId, projectName} = this.pageForm
|
||||
// window.open('/platform/leadThought/stat/exportAllInfo?searchName=' + searchName +
|
||||
// "&searchKeyword=" + searchKeyword +
|
||||
// "&year=" + year +
|
||||
// "&manageId=" + manageId +
|
||||
// "&typeId=" + typeId +
|
||||
// "&projectName=" + projectName)
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
exportInfo(id) {
|
||||
this.$downLoad('/platform/leadThought/query/exportInfo', {id})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,196 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool>
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" fixed="right" width="300">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
<template #edit>
|
||||
<info ref="infoRef">
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">
|
||||
{{formData.taskName}}
|
||||
</div>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":"
|
||||
class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
|
||||
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
|
||||
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: 'projectName', label: '项目名称', sortable: true},
|
||||
{ prop: 'manageName', label: '专题名称', sortable: true},
|
||||
{ prop: 'applyUnitName', label: '申报单位', sortable: true},
|
||||
{ prop: 'headName', label: '项目负责人', sortable: true},
|
||||
{ prop: 'typeName', label: '归属类目', sortable: true},
|
||||
{ prop: 'projectTheme', label: '项目主题', sortable: true},
|
||||
{ prop: 'numberPeople', label: '项目规模(人数)', sortable: true},
|
||||
{ prop: 'numberLeader', label: '领导人数', sortable: true},
|
||||
{ prop: 'numberTeacher', label: '骨干教师人数', sortable: true},
|
||||
{ prop: "curTaskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
|
||||
// 审核相关
|
||||
showApprovalForm: false,
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.edit(()=>{
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.edit(()=>{
|
||||
this.showApprovalForm = true
|
||||
this.formData = {
|
||||
processTaskId: row.taskId,
|
||||
taskName: row.curTaskName
|
||||
}
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
handleTaskAction(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
...this.formData,
|
||||
submitType: val
|
||||
})
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
const loading = createLoading()
|
||||
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(()=>{
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
debugger
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user