ScientificSystem/ruoyi-ui/src/views/scientific/handbook_query_bak.vue
2024-08-07 00:36:49 +08:00

446 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="流程标识" prop="processKey">
<el-input
v-model="queryParams.processKey"
placeholder="请输入流程标识"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="流程名称" prop="processName">
<el-input
v-model="queryParams.processName"
placeholder="请输入流程名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="流程分类" prop="category">
<el-select v-model="queryParams.category" clearable placeholder="请选择" size="small">
<el-option
v-for="item in categoryOptions"
:key="item.categoryId"
:label="item.categoryName"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="提交时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
v-hasPermi="['workflow:process:ownExport']"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="showList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="申报信息名称" align="center" width="280px" :min-width="280">
<template slot-scope="scope">
<el-tag size="medium">{{ scope.row.projectName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="发布人" align="center" prop="directorName" />
<el-table-column label="指南类别" align="center">
<template slot-scope="scope">
{{ scope.row.handbookclass }}
</template>
</el-table-column>
<el-table-column label="指南级别" align="center">
<template slot-scope="scope">
{{ scope.row.handbooklevel }}
</template>
</el-table-column>
<el-table-column label="申报结束日期" align="center">
<template slot-scope="scope">
{{ scope.row.handbookdate }}
</template>
</el-table-column>
<el-table-column label="指南文件" align="center">
<template slot-scope="scope">
<el-button class="file"
type="text"
icon="el-icon-download"
@click="handbookDownload(scope.row.handbookfile)"
>下载</el-button>
</template>
</el-table-column>
<el-table-column label="项目申报" align="center">
<template slot-scope="scope">
<el-button class="file"
type="text"
icon="el-icon-top"
@click="projectApply(scope.row)"
>进入申报</el-button>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button class="file"
type="text"
icon="el-icon-folder-checked"
@click="listProject(scope.row)"
>已申报项目</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import {
stopProcess,
delProcess,
listHandbook,
detailProcesses,
listProcess
} from '@/api/workflow/process';
import { listAllCategory } from '@/api/workflow/category';
import Parser from '@/utils/generator/parser'
import {getToken} from "@/utils/auth";
import {listProject} from "@/api/scientific/project";
export default {
name: "handbookQuery",
dicts: ['wf_process_status'],
components: {
Parser,
},
data() {
return {
// 遮罩层
loading: true,
processLoading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
categoryOptions: [],
processTotal:0,
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
src: "",
definitionList:[],
// 日期范围
dateRange: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
processKey: undefined,
processName: undefined,
category: "007"
},
// 表单参数
form: {},
// 表单校验
rules: {
},
// 从后端查询的原始列表数据
handbookList: [],
// 解析用于显示的数据
showList: [],
};
},
async created() {
await this.getList();
await this.getProcessDetails();
},
methods: {
// 文件下载
handbookDownload(handbookfile) {
handbookfile.forEach( file => {
if(file.response.code === 200 && file.ossId) {
this.$download.oss(file.ossId);
}
})
},
projectApply(row) {
let queryParams = {
pageNum: 1,
pageSize: 10,
processKey: undefined,
processName: "项目申报",
category: "002"
};
// 跳转到项目申报
listProcess(queryParams).then(response => {
const apply = response.rows[0];
if(apply) {
this.$router.push({
path: '/scientific/projectApply/' + apply.deploymentId,
query: {
definitionId: apply.definitionId,
processName: row.handbookname,
handbookId: row.procInsId,
}
})
}
});
},
listProject(row) {
if(row.procInsId) {
this.$router.push({
path: '/scientific/handbookProjectQuery/' + row.procInsId,
query: {
processName: row.handbookname,
handbookId: row.procInsId,
}
})
}
},
/** 查询流程定义列表 */
getList() {
// zqjia:这个解析要模仿parser.js重写
return new Promise((resolve,reject)=>{
this.showList = [];
this.loading = true;
// 先列出所有的指南流程
listHandbook(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.handbookList = response.rows;
this.total = response.total;
this.loading = false;
resolve();
});
})
},
// 流程任务重获取变量表单
getProcessDetails() {
return new Promise((resolve, reject)=>{
let pId = [];
let tId = [];
this.handbookList.forEach(handbook => {
pId.push(handbook.procInsId);
tId.push(undefined);
})
const params = {procInsIds: pId};
detailProcesses(pId).then(res => {
res.rows.forEach(row => {
let processForm = row.processFormList[0];
let formData = [];
// 从原始表单中筛选解析的数据显示
this.parseFormData(processForm.fields, formData);
formData["procInsId"] = row.procInsId;
this.showList.push(formData);
})
})
})
},
/** 查询流程分类列表 */
getCategoryList() {
listAllCategory().then(response => this.categoryOptions = response.data)
},
/**
* 从原始的流程表单中解析字段数据
* @author zqjia
*/
parseFormData(componentList, formData) {
componentList.forEach(cur => {
this.buildOptionMethod(cur)
const config = cur.__config__;
if (cur.__vModel__) {
if(cur.__slot__ && 'options' in cur.__slot__) {
formData[cur.__vModel__] = cur.__slot__.options[config.defaultValue-1].label;
}
else {
formData[cur.__vModel__] = config.defaultValue;
}
}
if (config.children) {
this.parseFormData(config.children, formData);
}
})
},
// 特殊处理的 Option
buildOptionMethod(scheme) {
const config = scheme.__config__;
if (config && config.tag === 'el-cascader') {
if (config.dataType === 'dynamic') {
this.$axios({
method: config.method,
url: config.url
}).then(resp => {
var { data } = resp
scheme[config.dataConsumer] = data[config.dataKey]
});
}
}
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
name: null,
category: null,
key: null,
tenantId: null,
deployTime: null,
derivedFrom: null,
derivedFromRoot: null,
parentDeploymentId: null,
engineVersion: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.procInsId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
handleAgain(row) {
this.$router.push({
path: '/workflow/process/start/' + row.deployId,
query: {
definitionId: row.procDefId,
procInsId: row.procInsId
}
})
},
/** 取消流程申请 */
handleStop(row){
const params = {
procInsId: row.procInsId
}
stopProcess(params).then( res => {
this.$modal.msgSuccess(res.msg);
this.getList();
});
},
/** 流程流转记录 */
handleFlowRecord(row) {
this.$router.push({
path: '/workflow/process/detail/' + row.procInsId,
query: {
processed: false
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.procInsId || this.ids;
this.$confirm('是否确认删除流程定义编号为"' + ids + '"的数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function() {
return delProcess(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
},
/** 导出按钮操作 */
handleExport() {
this.download('workflow/process/ownExport', {
...this.queryParams
}, `wf_own_process_${new Date().getTime()}.xlsx`)
},
categoryFormat(row, column) {
return this.categoryOptions.find(k => k.code === row.category)?.categoryName ?? '';
}
}
};
</script>
<style scoped>
.file {
border: none;
background: none;
/* 取消其他默认样式 */
box-shadow: none;
padding: 0;
margin: 0;
}
.file:hover {
background: none; /* 去掉鼠标悬停时的背景 */
/* 如果需要可以添加其他hover效果 */
}
</style>