数通智联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

552 lines
14 KiB

<!--
@ 作者: 秦东
@ 时间: 2023-09-22 15:26:36
@ 备注: 回显表单
-->
<script lang='ts' setup>
import { ref, reactive, onMounted, computed, nextTick } from 'vue'
import { useRouter } from 'vue-router'
import { notAsA_BasisForJudgment,asAnApprovalActionControl,fixedValueControl,timeControl,timeEquation } from '@/utils/workflow/const'
import {
string2json,
stringToObj
} from '@/utils/DesignForm/form'
import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
import { haveCustomerFormVersion,generateFlow } from '@/api/taskapi/management'
import { judgeSubmitCancel } from '@/api/DesignForm/requestapi'
import '@/assets/scss/element-var.scss'
import '@/assets/scss/index.scss'
import '@/assets/iconfont/iconfont.css'
import 'element-plus/dist/index.css'
import FlowStep from '@/views/taskplatform/taskmanagement/flowStep.vue'
const props = defineProps({
isopen:{
type:Boolean,
default:true
},
versionid:{
type:String,
default:""
},
versiontitle:{
type:String,
default:""
},
infoid:{
type:String,
default:""
},
drawerwith:{
type:Number,
default:0
}
})
const submitButton = {
type: "div",
control:
{},
config:
{
textAlign: "center",
span: ""
},
list: [
{
type: "button",
control:
{
label: "保存",
type: "primary",
key: "submit"
},
config:
{
textAlign: "center"
}
}]
}
const flowOpinion = ref(false); //审批窗口
const isFlowForm = ref(false)
const loadingData = ref(false)
const formEl = ref()
const router = useRouter()
const state = reactive<any>({
type: 1, // 1新增;2修改;3查看(表单模式) ;4查看; 5设计
formData: {
list: [],
form: {},
config: {}
},
dict: {},
formId: props.versionid,
id: 0,
loading: true
})
//获取工作流条件
const gainFlowChart = reactive<nodeFlow>({
id:0
})
const flowFactor = reactive<conditionInfo[]>([]) //表单组件
const nodelUserList = reactive<nodelPeoples[]>([])
//工作流数据
const flowMap = ref<any[]>();
const nextStep = ref<number>(0);
const currentProgress = ref<number>(1);
const nodeKey = ref<string>('');
const formType = computed(() => {
// 带有参数id为编辑状态
if (props.infoid) {
return 2
} else {
return 1
}
})
const emits = defineEmits(["update:isopen","searchquery"]);
const drawerOpenOrClose = computed({
get: () => props.isopen,
set: (val) => {
emits("update:isopen", val);
},
});
//获取表单数据
const getTaskFormData = () =>{
loadingData.value = true;
haveCustomerFormVersion({id:props.versionid})
.then(({ data }) =>{
console.log("表单数据",data)
if(data.classify == 2){
isFlowForm.value = true;
}else{
isFlowForm.value = false;
}
state.id=props.versionid
state.formData = stringToObj(data.mastesform)
state.dict = string2json(data.dict)
judgeSubmitCancel({"name":data.mastesformjson})
.then((data:any) =>{
if(data.code == 0){
if (data.data == 3 || data.data == 4){
state.formData.list.push(submitButton)
}
}
})
//获取工作流不进图
gainFlowChart.id=data.flowkeystr
// generateFlow(gainFlowChart)
// .then((data:any) =>{
// console.log("获取工作流不进图",data.data)
// flowMap.value = data.data.flowList
// console.log("获取工作流不进图--->",flowMap.value)
// })
})
.finally(()=>{
loadingData.value = false;
})
}
const drawerWith = ref<number>(0);
onMounted(()=>{
drawerWith.value = window.innerWidth - 220
});
window.addEventListener("resize", function(){
drawerWith.value = window.innerWidth -220
})
const beforeSubmit = (params: any) => {
params.formId = props.versionid
params.id = ""
// emits("update:isopen", false);
return params
}
const afterSubmit = (type: string) => {
if (type === 'success') {
// router.go(-1)
console.log("表单提交成功")
emits("searchquery");
closeAppSubmit();
}
}
const closeAppSubmit = () => {
emits("update:isopen", false);
initData();
}
const initData = () => {
state.formData = {
list: [],
form: {},
config: {}
};
state.dict = {};
state.formId = 0;
state.id = 0;
state.loading = true;
let aryLen = flowFactor.length
if(aryLen > 0) flowFactor.splice(0,aryLen);
}
watch(()=>props.isopen,()=>{
if(props.isopen){
getTaskFormData();
}else{
initData()
}
})
const changeKeyVal = (key:any,val:any,type:any,attribute:any) => {
// console.log("改变表单值--key--->",key)
// console.log("改变表单值--val--->",val,Array.isArray(val))
// console.log("改变表单值--type--->",type)
// console.log("改变表单值--attribute--->",attribute)
// console.log("改变表单值--type-1-true->",notAsA_BasisForJudgment.indexOf(type))
// if(notAsA_BasisForJudgment.indexOf(type) != -1){
// console.log("改变表单值--type--true->",notAsA_BasisForJudgment.indexOf(type))
// }
let unitsVal = val
let isUpdateFlowChart = false
//单选,多选,下拉菜单
if(notAsA_BasisForJudgment.indexOf(type) === -1){
let isWrite = true
flowFactor.forEach((item:any)=>{
if(item.factorid == key){
isWrite = false
isUpdateFlowChart = true
item.type=3
if(type == "checkbox"){
item.isCheckbox = true
item.answers = val.map(String)
}else{
item.isCheckbox = false
item.oneanswer = val.toString()
}
}
})
if(isWrite){
if(type == "checkbox"){
flowFactor.push({
factorid:key,
type:3,
isCheckbox:true,
answers:val.map(String)
})
}else{
flowFactor.push({
factorid:key,
type:3,
isCheckbox:false,
oneanswer:val.toString()
})
}
isUpdateFlowChart = true
}
// console.log("改变表单值--flowFactor--->",flowFactor)
}
// console.log("改变表单值--flowFactor--1->",unitsVal,timeControl,type)
//时间类空间附加判断条件
if(timeControl.indexOf(type) > -1 || fixedValueControl.indexOf(type) > -1 || type == "input"){
// console.log("改变表单值--flowFactor--3->",unitsVal)
let addNewTime = true //判断是否新增
flowFactor.forEach((item:any)=>{
// console.log("改变表单值--flowFactor--5->",item.type)
if(item.type == 2){
addNewTime = false
// console.log("改变表单值--flowFactor--5====1->",item.type)
// console.log("改变表单值--flowFactor--5====3->",item.customFields,item.customFields.length)
if(item.customFields && item.customFields.length > 0){
// console.log("改变表单值--flowFactor--5====2->",item.customFields)
let sunNewAdd = true
item.customFields.forEach((sunItem:any)=>{
// console.log("改变表单值--flowFactor-4->",sunItem.wordfield , key,sunItem.wordfield == key)
if(sunItem.wordfield == key){
sunNewAdd = false
isUpdateFlowChart = true
if(timeEquation.indexOf(attribute) === -1){ //非区间性时间
sunItem.leftval = val.toString()
}else{ //区间性时间
if(Array.isArray(val)){
if(val.length >= 2){
sunItem.leftval = val[0].toString()
sunItem.rightval = val[val.length - 1].toString()
}
}
}
}
})
if(sunNewAdd){
isUpdateFlowChart = true
if(timeEquation.indexOf(attribute) === -1){//非区间性时间
let customFieldInfo = {
wordfield: key,
optType: "1",
leftval: val.toString()
}
item.customFields.push(customFieldInfo)
}else{ //区间性时间
if(Array.isArray(val)){
if(val.length >= 2){
let customFieldInfo = {
wordfield: key,
optType: "6",
leftval: val[0].toString(),
leftoptType:"3",
rightoptType:"3",
rightval:val[val.length - 1].toString()
}
item.customFields.push(customFieldInfo)
}
}
}
}
}
}
})
if(addNewTime){ //新增自定义类数据判断
isUpdateFlowChart = true
if(timeEquation.indexOf(attribute) === -1){ //非区间性时间
let customFieldInfo = {
wordfield: key,
optType: "1",
leftval: val.toString()
}
let condInfo = {
factorid:"customFields",
type:2,
isCheckbox:false,
customFields:[customFieldInfo]
}
flowFactor.push(condInfo)
}else{ //区间性时间
if(Array.isArray(val)){
if(val.length >= 2){
let customFieldInfo = {
wordfield: key,
optType: "6",
leftval: val[0].toString(),
leftoptType:"3",
rightoptType:"3",
rightval:val[val.length - 1].toString()
}
let condInfo = {
factorid:"customFields",
type:2,
isCheckbox:false,
customFields:[customFieldInfo]
}
flowFactor.push(condInfo)
}
}
}
}
}
//操作人
if(asAnApprovalActionControl.indexOf(type) > -1){
isUpdateFlowChart = true
let isWriteUs = true
nodelUserList.forEach((item:any)=>{
if(item.factorid == key){
isWriteUs = false
item.userList = val
}
})
if(isWriteUs){
nodelUserList.push({
factorid:key,
userList:val
})
}
}
console.log("改变表单值--flowFactor--->",flowFactor)
//更新工作流图
if(isUpdateFlowChart){
//获取工作流不进图
gainFlowChart.conditionList=flowFactor
gainFlowChart.nodelPeople=nodelUserList
console.log("获取工作流不进图--gainFlowChart--->",gainFlowChart)
generateFlow(gainFlowChart)
.then((data:any) =>{
console.log("获取工作流不进图-new-->",data)
flowMap.value = data.data.flowList
nextStep.value = data.data.nextStep;
currentProgress.value = data.data.Step;
nodeKey.value = data.data.nodeKey;
console.log("获取工作流不进图-1-->",flowMap.value)
})
}
}
watch(()=>flowMap,(val:any)=>{
console.log("工作流在变化-->",flowMap.value)
})
const sendFlowInfo = ref<any>()
</script>
<template>
<el-drawer v-model="drawerOpenOrClose" v-loading="loadingData" :title="versiontitle" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerwith" class="drawerClass" >
<table border="0" v-if="isFlowForm" class="tableFlowBox">
<tr>
<td valign="top">
<div class="drawerFormBox boxLeft">
<ak-form
ref="formEl"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
/>
</div>
</td>
<td valign="top" width="350">
<div class="drawerFormBox boxRight">
<div class="flowBox">
<el-affix :offset="20">
<el-text size="large">审批流程</el-text>
</el-affix>
<FlowStep v-model:flow-map="flowMap" :next-step="nextStep" :current-progress="currentProgress" :node-key="nodeKey" />
</div>
<el-affix v-if="flowOpinion" position="bottom" :offset="0">
<div class="approvalBoard">
<el-text size="large" class="appBoardTitle">审批意见</el-text>
<el-row :gutter="20">
<el-col :span="24">
<el-input
v-model="sendFlowInfo"
:autosize="{ minRows: 2, maxRows: 6 }"
type="textarea"
placeholder="请输入审批意见"
/>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4"></el-col>
<el-col :span="8" class="juzhong"><el-button type="primary" style="width:100%">同意</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button type="danger" style="width:100%">驳回</el-button></el-col>
<el-col :span="4"></el-col>
</el-row>
</div>
</el-affix>
</div>
</td>
</tr>
</table>
<!--无流程表单-->
<div v-else class="drawerBody">
<ak-form
ref="formEl"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
/>
</div>
</el-drawer>
</template>
<style lang='scss' scoped>
.tableFlowBox{
width: 100%;
height: 100%;
// background-color: #000000;
.drawerFormBox{
width: 100%;
height: 100%;
// background-color: #ff0000;
}
}
.boxLeft{
padding: 0 10px 0 15px;
overflow: hidden;
overflow-y: auto;
}
.flowBox{
padding: 0 5px 0 10px;
}
.boxRight{
overflow: hidden;
overflow-y: auto;
border-left: 1px solid #EEEEEE;
}
.approvalBoard{
padding: 5px 10px;
background-color: #FFFFFF;
border-top: 1px solid #EEEEEE;
.juzhong{
padding: 10px 0;
text-align: center;
}
.appBoardTitle{
padding: 5px 0 10px 0;
display: block;
}
}
</style>
<style lang='scss'>
.drawerClass ::v-deep.el-drawer__header {
font-size: 22px;
text-align: center;
margin-bottom: 0px;
padding: 0;
.el-drawer__close-btn{
background-color: rgb(255, 77, 79);
color: white;
}
}
::v-deep .el-drawer__body {
padding: 0px;
}
.details {
width: 80%;
margin-right: 0px;
margin-left: 20%;
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
}
.drawerBody{
padding: 20px;
}
</style>
<style>
.demo-tabs > .el-tabs__content {
padding: 0px 20px 20px 20px;
overflow: hidden;
overflow-y: auto;
}
.el-tabs--right .el-tabs__content,
.el-tabs--left .el-tabs__content {
height: 100%;
}
</style>
<style scoped>
.affix-container {
text-align: center;
height: 400px;
border-radius: 4px;
background: var(--el-color-primary-light-9);
}
</style>