Browse Source

修改审批节点可见权限

space2
herenshan112 3 months ago
parent
commit
15f358f611
  1. 118
      src/components/DesignForm/app/index.vue
  2. 185
      src/components/DesignForm/public/expand/datePicker.vue
  3. 6
      src/components/DesignForm/public/expand/lowcodeImage.vue
  4. 95
      src/components/DesignForm/public/form/form.vue
  5. 56
      src/components/DesignForm/public/form/formItem.vue
  6. 573
      src/views/sysworkflow/lowcodepage/index.vue
  7. 4
      src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue
  8. 5
      src/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue
  9. 6
      src/views/sysworkflow/lowcodepage/pageFlow/tableFlow.vue
  10. 111
      src/views/sysworkflow/lowcodepage/runApp/regularPage.vue
  11. 396
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue
  12. 441
      src/views/taskplatform/taskmanagement/lookFlowInfoApp.vue

118
src/components/DesignForm/app/index.vue

@ -1902,123 +1902,7 @@ const readerColumnSun = (column: any) => {
{{ item.label }}
</el-button>
</div>
<div>
<el-button-group class="ml-4">
<el-tooltip
v-if="config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-button
size="small"
@click="config.searchIsShow = !config.searchIsShow"
class="fa fa-search"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.list.status"
class="box-item"
effect="dark"
content="列表视图"
placement="top"
>
<el-button
size="small"
class="fa fa-table"
:color="props.viewPage.list.isClick ? '#a0cfff' : ''"
@click="tabsView(props.viewPage.list, 1)"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.card && props.viewPage.card.status"
class="box-item"
effect="dark"
content="卡片视图"
placement="top"
>
<el-button
size="small"
class="fa fa-id-card-o"
:color="
props.viewPage.card && props.viewPage.card.isClick ? '#a0cfff' : ''
"
@click="tabsView(props.viewPage.card, 6)"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.date.status"
class="box-item"
effect="dark"
content="日历视图"
placement="top"
>
<el-button
size="small"
class="fa fa-calendar"
:color="props.viewPage.date.isClick ? '#a0cfff' : ''"
@click="tabsView(props.viewPage.date, 2)"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.time.status"
class="box-item"
effect="dark"
content="时间轴"
placement="top"
>
<el-button
size="small"
class="fa fa-clock-o"
:color="props.viewPage.time.isClick ? '#a0cfff' : ''"
@click="tabsView(props.viewPage.time, 3)"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.gantt.status"
class="box-item"
effect="dark"
content="甘特图"
placement="top"
>
<el-button
size="small"
class="fa fa-bar-chart"
:color="props.viewPage.gantt.isClick ? '#a0cfff' : ''"
@click="tabsView(props.viewPage.gantt, 4)"
/>
</el-tooltip>
<el-tooltip
v-if="props.viewPage.map.status"
class="box-item"
effect="dark"
content="地图视图"
placement="top"
>
<el-button
size="small"
class="fa fa-map-signs"
:color="props.viewPage.map.isClick ? '#a0cfff' : ''"
@click="tabsView(props.viewPage.map, 5)"
/>
</el-tooltip>
<el-tooltip
v-if="viewPage.chart.status"
class="box-item"
effect="dark"
content="BI报表"
placement="top"
>
<el-button
size="small"
class="fa fa-line-chart"
:color="viewPage.chart.isClick ? '#a0cfff' : ''"
@click="tabsView(viewPage.chart, 7)"
/>
</el-tooltip>
</el-button-group>
</div>
<div></div>
</div>
</el-col>

185
src/components/DesignForm/public/expand/datePicker.vue

@ -3,118 +3,111 @@
@ 时间: 2024-09-25 15:01:57
@ 备注: 时间控件
-->
<script lang='ts' setup>
<script lang="ts" setup>
const props = withDefaults(
defineProps<{
modelValue?: string
disabled?: boolean
data?:any
}>(),
{}
)
defineProps<{
modelValue?: string;
disabled?: boolean;
data?: any;
}>(),
{}
);
const emits = defineEmits<{
(e: 'update:modelValue', value: string): void
}>()
(e: "update:modelValue", value: string): void;
}>();
const value = computed({
get: () => {
return props.modelValue
},
set: (newVal: any) => {
emits('update:modelValue', newVal)
},
get: () => {
return props.modelValue;
},
set: (newVal: any) => {
emits("update:modelValue", newVal);
},
});
const shichangShowFlag = computed(() => {
if(props.data.control.type=="datetimerange"||props.data.control.type=="daterange"){//monthrange
if(value.value){
return true
}else{
return false
}
}else{
return false
}
})
if (
props.data.control.type == "datetimerange" ||
props.data.control.type == "daterange"
) {
//monthrange
if (value.value) {
return true;
} else {
return false;
}
} else {
return false;
}
});
function calculateTimeDiff(startTimestamp: string, endTimestamp: string) {
//
const start = parseInt(startTimestamp, 10);
const end = parseInt(endTimestamp, 10);
//
const diffMs = Math.abs(end - start);
//
const totalMinutes = Math.round(diffMs / 60000);
//
const totalHours = totalMinutes / 60;
//
if (totalHours < 24) {
//
return `${Math.round(totalHours)} 小时`;
} else {
//
const days = Math.floor(totalHours / 24);
//
const remainingHours = Math.round(totalHours % 24);
// 24
if (remainingHours === 24) {
return `${days + 1} 天 0 小时`;
}
return `${days}${remainingHours} 小时`;
//
const start = parseInt(startTimestamp, 10);
const end = parseInt(endTimestamp, 10);
//
const diffMs = Math.abs(end - start);
//
const totalMinutes = Math.round(diffMs / 60000);
//
const totalHours = totalMinutes / 60;
//
if (totalHours < 24) {
//
return `${Math.round(totalHours)} 小时`;
} else {
//
const days = Math.floor(totalHours / 24);
//
const remainingHours = Math.round(totalHours % 24);
// 24
if (remainingHours === 24) {
return `${days + 1} 天 0 小时`;
}
return `${days}${remainingHours} 小时`;
}
}
const valueFormat = "x"
const valueFormat = "x";
const shichang = computed(() => {
console.log(value.value)
let start = value.value[0]
let end = value.value[1]
console.log(start)
console.log(end)
let a = calculateTimeDiff(start,end)
return a
})
// console.log(value.value)
let start = value.value[0];
let end = value.value[1];
// console.log(start)
// console.log(end)
let a = calculateTimeDiff(start, end);
return a;
});
</script>
<template>
<el-date-picker
align="left"
v-model="value"
:type="props.data.control.type"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:teleported="true"
:placeholder="props.data.control.placeholder"
:value-format="valueFormat"
:format="props.data.control.format"
/>
<!-- 2 3 小时 -->
<div v-if="shichangShowFlag" class="duration-text">时长 {{shichang}}</div>
<el-date-picker
align="left"
v-model="value"
:type="props.data.control.type"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:teleported="true"
:placeholder="props.data.control.placeholder"
:value-format="valueFormat"
:format="props.data.control.format"
/>
<!-- 2 3 小时 -->
<div v-if="shichangShowFlag" class="duration-text">时长 {{ shichang }}</div>
</template>
<style lang='scss' scoped>
<style lang="scss" scoped>
.duration-text {
margin-left: 20px;
margin-right: 60px;
color: #A8ABB2;
font-size: 13px;
z-index: 10;
pointer-events: none;
}
margin-left: 20px;
margin-right: 60px;
color: #a8abb2;
font-size: 13px;
z-index: 10;
pointer-events: none;
}
</style>

6
src/components/DesignForm/public/expand/lowcodeImage.vue

@ -65,12 +65,12 @@ const beforeAvatarUpload = (rawFile) => {
//
const handleAvatarSuccess = (response, uploadFile) => {
// imageUrl.value = URL.createObjectURL(uploadFile.raw!)
console.log("上传成功回调", value);
// console.log("", value);
emits("update:modelValue", response.data.url);
imgPath.value = response.data.url;
value.value = response.data.url;
console.log("上传成功回调---------->", value.value);
// console.log("---------->", value.value);
// let oldFormSetUp = props.formTableSetUp
// if(props.formTableSetUp && props.formTableSetUp.list && props.formTableSetUp.list.length > 0){
// oldFormSetUp.list.forEach((item)=>{
@ -92,7 +92,7 @@ const handleAvatarSuccess = (response, uploadFile) => {
};
const getFormItemInputStyle = (ele: any, sty: number) => {
if (ele?.inputStyle) {
console.log("返回栅格宽度4", AnalysisInputCss(ele?.inputStyle, sty));
// console.log("4", AnalysisInputCss(ele?.inputStyle, sty));
return AnalysisInputCss(ele?.inputStyle, sty);
}
};

95
src/components/DesignForm/public/form/form.vue

@ -60,6 +60,8 @@ const props = withDefaults(
versionId?: string; //
mastesformjson?: string; //
isWeb: boolean; //
nodeKey?: string;
purview?: any[];
}>(),
{
type: 1, // 123 4 5
@ -76,7 +78,7 @@ const props = withDefaults(
labelStyle: {},
inputStyle: {},
},
aiConfig:[]
aiConfig: [],
};
},
dict: () => {
@ -158,12 +160,18 @@ const resultDict = ref({});
const model = ref<any>({});
// model
const getInitModel = () => {
if(props.formData.aiConfig?.length>0){
props.formData.aiConfig?.forEach(item=>{
currentAgent.value.push({name:"test",model:false,uuid:item.library,fields:item.title,trigger:item.trigger,params:{}})
})
if (props.formData.aiConfig?.length > 0) {
props.formData.aiConfig?.forEach((item) => {
currentAgent.value.push({
name: "test",
model: false,
uuid: item.library,
fields: item.title,
trigger: item.trigger,
params: {},
});
});
}
const obj = {};
forEachGetFormModel(props.formData.list, obj);
@ -495,35 +503,45 @@ watch(
//-----------------------AI setting--------------------------
//AIform
const currentAgent=ref<{model:boolean,name:string,uuid:string[],fields:string[],trigger:number,params:{[key: string]: any}}[]>([])
const aiassistRef=ref()
const currentAgent = ref<
{
model: boolean;
name: string;
uuid: string[];
fields: string[];
trigger: number;
params: { [key: string]: any };
}[]
>([]);
const aiassistRef = ref();
//AI
provide(constAiEffect, ({ key, value, field}: any) => {
provide(constAiEffect, ({ key, value, field }: any) => {
//ai_envents
const ai_events: Array<{ uuids: string[]; params: { [key: string]: any } }> = [];
currentAgent.value.forEach(ag=>{
if(ag.fields.includes(key)){ //trigger: 1: 2 3
ag.params[field]=value;//keyfieldName
switch(ag.trigger){
currentAgent.value.forEach((ag) => {
if (ag.fields.includes(key)) {
//trigger: 1: 2 3
ag.params[field] = value; //keyfieldName
switch (ag.trigger) {
case 2:
if(Object.keys(ag.params).length>=ag.fields.length/2){
ai_events.push({uuids:ag.uuid,params:ag.params})
if (Object.keys(ag.params).length >= ag.fields.length / 2) {
ai_events.push({ uuids: ag.uuid, params: ag.params });
}
break;
case 3:
if(Object.keys(ag.params).length==ag.fields.length){
ai_events.push({uuids:ag.uuid,params:ag.params})
if (Object.keys(ag.params).length == ag.fields.length) {
ai_events.push({ uuids: ag.uuid, params: ag.params });
}
break;
default:
ai_events.push({uuids:ag.uuid,params:ag.params})
default:
ai_events.push({ uuids: ag.uuid, params: ag.params });
}
}
})
if(ai_events.length>0){
aiassistRef.value.onSendParamToAI(props.formData.form.formName,ai_events)
}
})
});
if (ai_events.length > 0) {
aiassistRef.value.onSendParamToAI(props.formData.form.formName, ai_events);
}
});
//------------------------------------------------------------
// tProp
@ -535,7 +553,7 @@ provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any)
// console.log("----------5--------->", type);
// console.log("----------6--------->", attribute);
// console.log("----------11--------->", model.value);
let fieldVal = {};
for (let i in model.value) {
if (i == key) {
@ -2183,8 +2201,17 @@ const webPage = computed({
<slot></slot>
</el-form>
</div>
<div v-else v-loading="loading" class="pcBox" :class="{boxAI:type!=5 && currentAgent.length>0}">
<Aiassist ref="aiassistRef" v-if="type!=5 && currentAgent.length>0" :agent="currentAgent"></Aiassist>
<div
v-else
v-loading="loading"
class="pcBox"
:class="{ boxAI: type != 5 && currentAgent.length > 0 }"
>
<Aiassist
ref="aiassistRef"
v-if="type != 5 && currentAgent.length > 0"
:agent="currentAgent"
></Aiassist>
<el-form
v-bind="formData.form"
ref="ruleForm"
@ -2201,14 +2228,14 @@ const webPage = computed({
:numrun="numrun"
:data="formData.list"
:alldata="formData"
:node-key="nodeKey"
:purview="purview"
@optionsValue3Get2="optionsValue3Get2"
/>
<slot></slot>
</el-form>
</div>
</template>
<style lang="scss" scoped>
.webBox {
@ -2230,20 +2257,20 @@ const webPage = computed({
position: relative;
}
.boxAI{
.boxAI {
display: grid;
grid-template-columns:1fr 4fr;
grid-template-columns: 1fr 4fr;
}
.t_ask{
.t_ask {
align-self: end;
line-height: 34px;
background-color: rgb(188 211 241);
padding: 0 30px;
border-radius:10px;
border-radius: 10px;
margin: 15px;
}
.t_resp{
.t_resp {
align-self: start;
line-height: 30px;
margin: 20px 33px;

56
src/components/DesignForm/public/form/formItem.vue

@ -32,7 +32,7 @@ import LowcodeImagePage from "@/components/DesignForm/public/expand/lowcodeImage
import UploadPage from "@/components/DesignForm/public/expand/uploadPage.vue";
import UploadPageList from "@/components/DesignForm/public/expand/uploadPageList.vue";
import OrgCitys from "@/components/DesignForm/public/expand/orgCitys.vue";
import Region from '@/widget/region/region.vue'
import Region from "@/widget/region/region.vue";
import DatePickerPage from "@/components/DesignForm/public/expand/datePicker.vue";
import CascaderPage from "@/components/DesignForm/public/expand/cascader.vue";
import AssociatedForms from "@/widget/associatedforms/index.vue";
@ -126,11 +126,15 @@ const updateModel = (val: any) => {
//----------by han2015: support AI event emitting----------------
//changeEventchangeEventfieldChange
const fieldChangeEnt = inject(constAiEffect, '') as any
function onValueChange(_type:string){
if(_type=="password") return;
const fieldChangeEnt = inject(constAiEffect, "") as any;
function onValueChange(_type: string) {
if (_type == "password") return;
fieldChangeEnt &&
fieldChangeEnt({key:props.data.name,value:props.modelValue, field:props.data.item.label})
fieldChangeEnt({
key: props.data.name,
value: props.modelValue,
field: props.data.item.label,
});
}
//--------------------------------------
@ -217,7 +221,7 @@ const currentComponent = computed(() => {
}
if (props.data.type === "organization") {
//return markRaw(OrgCitys);
return markRaw(Region)
return markRaw(Region);
}
if (props.data.type === "datePicker") {
props.data.control.valueFormat = "x";
@ -250,7 +254,7 @@ const currentComponent = computed(() => {
// if (props.data.type === 'timePicker') {
// props.data.control.valueFormat="timestamp"
// }
console.log("自定义组件", props.data.tye);
// console.log("", props.data.tye);
return `el-${props.data.type}`;
});
//
@ -622,7 +626,8 @@ const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API + "/api/upordown";
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
// console.log("---->",key)
console.log("判断此组件是否可见--nodeKey-->", props.nodeKey);
console.log("判断此组件是否可见--purview-->", props.purview);
if (
props.nodeKey != undefined &&
props.purview != undefined &&
@ -641,7 +646,13 @@ const judgeIsShow = (key: string) => {
if (item.powerAry && item.powerAry.length > 0) {
item.powerAry.forEach((itm) => {
if (itm.id == key) {
// console.log("",itm,itm.id == key,"--------->",itm.isLook)
// console.log(
// "",
// itm,
// itm.id == key,
// "--------->",
// itm.isLook
// );
isShow = itm.isLook;
}
});
@ -662,6 +673,8 @@ const judgeIsShow = (key: string) => {
@ 功能: 判断是否禁用
*/
const judgeIsDisabled = (key: string) => {
// console.log("", key);
if (type.value === 3) {
return true; //
}
@ -671,6 +684,7 @@ const judgeIsDisabled = (key: string) => {
if (type.value === 2 && config.value.editDisabled) {
return true; //
}
// console.log("-------props.nodeKey----------->", props.purview);
if (
props.nodeKey != undefined &&
props.purview != undefined &&
@ -688,13 +702,13 @@ const judgeIsDisabled = (key: string) => {
if (item.powerAry && item.powerAry.length > 0) {
item.powerAry.forEach((itm) => {
if (itm.id == key) {
console.log(
"判断此组件是否禁用",
itm,
itm.id == key,
"--------->",
itm.isLook
);
// console.log(
// "",
// itm,
// itm.id == key,
// "--------->",
// itm.isLook
// );
isShow = !itm.isEdit;
}
});
@ -947,11 +961,11 @@ function asfValueChanged(val: any) {
@ 功能: 解析下载图片
*/
const uploadPic = (val: any) => {
console.log("解析下载图片-->", val);
// console.log("-->", val);
if (val != "") {
let urlAry = string2json(val);
// let urlAry = val.toString().split(",")
console.log("解析下载图片-2->", urlAry);
// console.log("-2->", urlAry);
return urlAry;
} else {
return [];
@ -964,11 +978,11 @@ const uploadPic = (val: any) => {
@ 功能: 获取级联选择值
*/
const judjeCascader = (val: any[], options: any[]) => {
console.log("val===========>", val);
// console.log("val===========>", val);
if (val == "" || val == undefined || val == null) return "";
if (val && val.length < 0) return "";
let valAry = stringToObj(val);
console.log("获取级联选择值", stringToObj(val), val.length, options);
// console.log("", stringToObj(val), val.length, options);
if (!Array.isArray(valAry)) {
return diGuiJilian(val, options);
}
@ -976,7 +990,7 @@ const judjeCascader = (val: any[], options: any[]) => {
valAry.forEach((item: any) => {
// console.log("item", item);
console.log(item + "=============:", item, diGuiJilian(item, options));
// console.log(item + "=============:", item, diGuiJilian(item, options));
if (title == "") {
title = title + diGuiJilian(item, options);
} else {

573
src/views/sysworkflow/lowcodepage/index.vue

@ -3,201 +3,198 @@
@ 时间: 2024-07-20 15:31:12
@ 备注: 应用设置
-->
<script lang='ts' setup>
import { SearchForm,customerFormCont,customerFormConfig } from "@/api/DesignForm/type";
import { customerFormGroupList,editFormGroupState,createApp,gainAppEditPsge } from '@/api/DesignForm/requestapi'
<script lang="ts" setup>
import { SearchForm, customerFormCont, customerFormConfig } from "@/api/DesignForm/type";
import {
customerFormGroupList,
editFormGroupState,
createApp,
gainAppEditPsge,
} from "@/api/DesignForm/requestapi";
import { Search } from '@element-plus/icons-vue'
import { Search } from "@element-plus/icons-vue";
//
import AppCardPage from "@/views/sysworkflow/lowcodepage/appCardPage.vue"
import AppListPage from "@/views/sysworkflow/lowcodepage/appListPage.vue"
import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue"
import LowCodeFormGroupPage from "@/views/sysworkflow/lowcodepage/lowCodeFormGroupPage.vue"
import DesignAPPpage from "@/views/sysworkflow/lowcodepage/appPage/index.vue" //
import AppCardPage from "@/views/sysworkflow/lowcodepage/appCardPage.vue";
import AppListPage from "@/views/sysworkflow/lowcodepage/appListPage.vue";
import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue";
import LowCodeFormGroupPage from "@/views/sysworkflow/lowcodepage/lowCodeFormGroupPage.vue";
import DesignAPPpage from "@/views/sysworkflow/lowcodepage/appPage/index.vue"; //
const contbody = ref() //
const carPage = ref()
const appListPage = ref()
const appGroup = ref("1")
const page = ref<number>(1) //
const pageSize = ref<number>(12000) //
const pageTotal = ref<number>(0) //
const groupFormList = ref<any[]>([]) //
const drawerWith = ref(); //
const appPageShow = ref(false)
const addFormGroupIsShow = ref(false)
const formKey = ref<string>("") //
const formGroupKey = ref<string>("") //
const drawerGroupWith = ref(); //
const groupKey = ref<string>("") //
const squareUrl = ref<string>('https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png')
const contbody = ref(); //
const carPage = ref();
const appListPage = ref();
const appGroup = ref("1");
const page = ref<number>(1); //
const pageSize = ref<number>(12000); //
const pageTotal = ref<number>(0); //
const groupFormList = ref<any[]>([]); //
const drawerWith = ref(); //
const appPageShow = ref(false);
const addFormGroupIsShow = ref(false);
const formKey = ref<string>(""); //
const formGroupKey = ref<string>(""); //
const drawerGroupWith = ref(); //
const groupKey = ref<string>(""); //
const squareUrl = ref<string>(
"https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png"
);
const searchQuery = reactive({
page:1,
pagesize:20,
searchWork:""
})
const isClick = ref(1)
page: 1,
pagesize: 20,
searchWork: "",
});
const isClick = ref(1);
/**
@ 作者: 秦东
@ 时间: 2024-03-21 09:30:27
@ 功能: 获取表单分组
*/
const isUpdate = ref(false)
const isUpdate = ref(false);
const gainFormGroup = () => {
let sendInfo = {
page:page.value,
pagesize:pageSize.value,
state:1
}
customerFormGroupList(sendInfo)
.then((data) =>{
pageTotal.value = data.data.total
// pageTotal.value = 400
groupFormList.value = data.data.list
console.log("重新排序",groupFormList.value)
isUpdate.value = true
if(data.data.list&&data.data.list.length > 0){
let otherGroup = true
data.data.list.forEach((item,index)=>{
if(item.isTrue){
appGroup.value = item.idStr.toString()
otherGroup = false
}
})
if(otherGroup){
let lengNum = data.data.list.length
data.data.list.forEach((item,index)=>{
if(lengNum > 1){
if(index == 1){
appGroup.value = item.idStr.toString()
}
}else{
if(index == 0){
appGroup.value = item.idStr.toString()
}
}
})
}
}
nextTick(()=>{
searchSub()
})
})
}
const handleClick = (val:any) => {
// console.log("",val,appGroup)
}
let sendInfo = {
page: page.value,
pagesize: pageSize.value,
state: 1,
};
customerFormGroupList(sendInfo).then((data) => {
pageTotal.value = data.data.total;
// pageTotal.value = 400
groupFormList.value = data.data.list;
// console.log("", groupFormList.value);
isUpdate.value = true;
if (data.data.list && data.data.list.length > 0) {
let otherGroup = true;
data.data.list.forEach((item, index) => {
if (item.isTrue) {
appGroup.value = item.idStr.toString();
otherGroup = false;
}
});
if (otherGroup) {
let lengNum = data.data.list.length;
data.data.list.forEach((item, index) => {
if (lengNum > 1) {
if (index == 1) {
appGroup.value = item.idStr.toString();
}
} else {
if (index == 0) {
appGroup.value = item.idStr.toString();
}
}
});
}
}
nextTick(() => {
searchSub();
});
});
};
const handleClick = (val: any) => {
// console.log("",val,appGroup)
};
/**
@ 作者: 秦东
@ 时间: 2024-07-22 08:50:03
@ 功能: 改变视图展示模式
*/
const viewChannel = (val:number) =>{
isClick.value = val;
}
const viewChannel = (val: number) => {
isClick.value = val;
};
onMounted(()=>{
drawerWith.value = contbody.value?.clientWidth
gainFormGroup()
})
onMounted(() => {
drawerWith.value = contbody.value?.clientWidth;
gainFormGroup();
});
/**
@ 作者: 秦东
@ 时间: 2024-07-20 16:19:45
@ 功能: 获取表单数据
*/
const handleCurrentChange = (val:any) => {}
const handleCurrentChange = (val: any) => {};
/**
@ 作者: 秦东
@ 时间: 2024-07-22 10:08:33
@ 功能: 搜索
*/
const searchSub = () =>{
if(isClick.value == 1){
carPage.value.getFormAppList(searchQuery)
}else{
appListPage.value.getFormAppList(searchQuery)
}
}
const searchSub = () => {
if (isClick.value == 1) {
carPage.value.getFormAppList(searchQuery);
} else {
appListPage.value.getFormAppList(searchQuery);
}
};
/**
@ 作者: 秦东
@ 时间: 2024-04-01 14:27:51
@ 功能: 获取容器宽度
*/
const getRongQiAttr = () => {
drawerWith.value = contbody.value?.clientWidth
}
drawerWith.value = contbody.value?.clientWidth;
};
/**
@ 作者: 秦东
@ 时间: 2024-03-09 09:06:32
@ 功能: 选择添加项目
*/
const handleCommand = (command: string,groupId: string) => {
// ElMessage(`click on item ${command}`)
if (command == "addForm"){
formKey.value = ""
formGroupKey.value = groupId
// addFormIsShow.value = true
drawerWith.value = contbody.value?.clientWidth
addFormIsShow.value = true;
}else if(command == "addFormApp"){
drawerWith.value = contbody.value?.clientWidth
let sendInfo = {
id:groupId.toString()
}
createApp(sendInfo)
.then((data)=>{
formKey.value = data.data.uuid
groupKey.value = groupId.toString()
nextTick(() =>{
appPageShow.value = true
});
})
.finally(() => {
})
}else{
groupKey.value = ""
addFormGroupIsShow.value = true
drawerGroupWith.value = 400
}
}
const handleCommand = (command: string, groupId: string) => {
// ElMessage(`click on item ${command}`)
if (command == "addForm") {
formKey.value = "";
formGroupKey.value = groupId;
// addFormIsShow.value = true
drawerWith.value = contbody.value?.clientWidth;
addFormIsShow.value = true;
} else if (command == "addFormApp") {
drawerWith.value = contbody.value?.clientWidth;
let sendInfo = {
id: groupId.toString(),
};
createApp(sendInfo)
.then((data) => {
formKey.value = data.data.uuid;
groupKey.value = groupId.toString();
nextTick(() => {
appPageShow.value = true;
});
})
.finally(() => {});
} else {
groupKey.value = "";
addFormGroupIsShow.value = true;
drawerGroupWith.value = 400;
}
};
/**
@ 作者: 秦东
@ 时间: 2024-03-21 13:53:29
@ 功能: 编辑分组
*/
const editFormGroup = (id: string) =>{
groupKey.value = id
addFormGroupIsShow.value = true
drawerGroupWith.value = 400
}
const editFormGroup = (id: string) => {
groupKey.value = id;
addFormGroupIsShow.value = true;
drawerGroupWith.value = 400;
};
/**
@ 作者: 秦东
@ 时间: 2024-03-09 09:06:44
@ 功能: 刷新页面
*/
const refreshPage = (pageType:string) =>{
if(pageType == "formPage"){
addFormIsShow.value = false;
}else{
addFormGroupIsShow.value = false;
}
console.log("刷新页面")
gainFormGroup()
}
const refreshPage = (pageType: string) => {
if (pageType == "formPage") {
addFormIsShow.value = false;
} else {
addFormGroupIsShow.value = false;
}
// console.log("");
gainFormGroup();
};
/**
@ 作者: 秦东
@ -205,134 +202,188 @@ const refreshPage = (pageType:string) =>{
@ 功能: 改变分组状态
*/
const eidtGroupStatus = (id: string, state: number) => {
ElMessageBox.confirm(
'您确定要删除此分组吗?一经删除!数据将不可恢复!请慎重执行此操作!!!',
'温馨提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
let sendInfo = {
id: id.toString(),
status: state
}
editFormGroupState(sendInfo)
.then((data) =>{
ElMessageBox.alert(data.msg, '温馨提示!', {
confirmButtonText: '确定',
callback: (action: Action) => {
gainFormGroup()
}
});
})
})
}
ElMessageBox.confirm(
"您确定要删除此分组吗?一经删除!数据将不可恢复!请慎重执行此操作!!!",
"温馨提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
).then(() => {
let sendInfo = {
id: id.toString(),
status: state,
};
editFormGroupState(sendInfo).then((data) => {
ElMessageBox.alert(data.msg, "温馨提示!", {
confirmButtonText: "确定",
callback: (action: Action) => {
gainFormGroup();
},
});
});
});
};
</script>
<template>
<div ref="contbody" class="tab-box">
<el-tabs v-model="appGroup" :key="isUpdate" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane v-for="item in groupFormList" :label="item.title" :name="item.idStr"></el-tab-pane>
</el-tabs>
<div ref="contbody" class="tab-box">
<el-tabs
v-model="appGroup"
:key="isUpdate"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane
v-for="item in groupFormList"
:label="item.title"
:name="item.idStr"
></el-tab-pane>
</el-tabs>
<div class="appSubButton">
<el-input
v-model="searchQuery.searchWork"
style="max-width: 150px; margin: 15px 10px 15px 0"
placeholder="请输入名称"
class="input-with-select"
clearable
>
<template #append>
<el-button :icon="Search" @click="searchSub()" />
</template>
</el-input>
<el-button-group class="butGroup">
<el-button
class="fa fa-object-group"
:color="isClick == 1 ? '#a0cfff' : ''"
@click="viewChannel(1)"
/>
<el-button
class="fa fa-table"
:color="isClick != 1 ? '#a0cfff' : ''"
@click="viewChannel(2)"
/>
<div class="appSubButton">
<el-input
v-model="searchQuery.searchWork"
style="max-width: 150px;margin: 15px 10px 15px 0;"
placeholder="请输入名称"
class="input-with-select"
clearable
>
<template #append>
<el-button :icon="Search" @click="searchSub()" />
</template>
</el-input>
<el-button-group class="butGroup">
<el-button class="fa fa-object-group" :color="isClick==1?'#a0cfff':''" @click="viewChannel(1)" />
<el-button class="fa fa-table" :color="isClick!=1?'#a0cfff':''" @click="viewChannel(2)" />
<el-dropdown>
<el-button class="fa fa-reorder leftLink" />
<template #dropdown>
<el-dropdown-item @click="handleCommand('addFormGroup',appGroup)" >新增分组</el-dropdown-item>
<el-dropdown-item @click="handleCommand('addForm',appGroup)" style="display:none" >添加表单</el-dropdown-item>
<el-dropdown-item @click="handleCommand('addFormApp',appGroup)" >添加应用</el-dropdown-item>
<el-dropdown-item @click="editFormGroup(appGroup)" divided>编辑</el-dropdown-item>
<el-dropdown-item @click="eidtGroupStatus(appGroup,3)">删除</el-dropdown-item>
</template>
</el-dropdown>
</el-button-group>
</div>
</div>
<div class="app-container">
<AppCardPage ref="carPage" v-if="isClick==1" :app-group="appGroup" :search-query="searchQuery" :drawer-with="drawerWith" @getRongQiAttr="getRongQiAttr" />
<AppListPage ref="appListPage" v-else :app-group="appGroup" :search-query="searchQuery" :drawer-with="drawerWith" @getRongQiAttr="getRongQiAttr" />
</div>
<DesignAPPpage v-model:is-show="appPageShow" :drawer-with="drawerWith" v-model:form-key="formKey" :group-key="groupKey" @refreshPage="refreshPage" />
<LowCodeFormPage v-if="addFormIsShow" :drawer-with="drawerWith" v-model:form-key="formKey" :form-group-key="formGroupKey" @refreshPage="refreshPage" />
<LowCodeFormGroupPage v-if="addFormGroupIsShow" :drawer-with="drawerGroupWith" :group-key="groupKey" @refreshPage="refreshPage" />
<el-dropdown>
<el-button class="fa fa-reorder leftLink" />
<template #dropdown>
<el-dropdown-item @click="handleCommand('addFormGroup', appGroup)"
>新增分组</el-dropdown-item
>
<el-dropdown-item
@click="handleCommand('addForm', appGroup)"
style="display: none"
>添加表单</el-dropdown-item
>
<el-dropdown-item @click="handleCommand('addFormApp', appGroup)"
>添加应用</el-dropdown-item
>
<el-dropdown-item @click="editFormGroup(appGroup)" divided
>编辑</el-dropdown-item
>
<el-dropdown-item @click="eidtGroupStatus(appGroup, 3)"
>删除</el-dropdown-item
>
</template>
</el-dropdown>
</el-button-group>
</div>
</div>
<div class="app-container">
<AppCardPage
ref="carPage"
v-if="isClick == 1"
:app-group="appGroup"
:search-query="searchQuery"
:drawer-with="drawerWith"
@getRongQiAttr="getRongQiAttr"
/>
<AppListPage
ref="appListPage"
v-else
:app-group="appGroup"
:search-query="searchQuery"
:drawer-with="drawerWith"
@getRongQiAttr="getRongQiAttr"
/>
</div>
<DesignAPPpage
v-model:is-show="appPageShow"
:drawer-with="drawerWith"
v-model:form-key="formKey"
:group-key="groupKey"
@refreshPage="refreshPage"
/>
<LowCodeFormPage
v-if="addFormIsShow"
:drawer-with="drawerWith"
v-model:form-key="formKey"
:form-group-key="formGroupKey"
@refreshPage="refreshPage"
/>
<LowCodeFormGroupPage
v-if="addFormGroupIsShow"
:drawer-with="drawerGroupWith"
:group-key="groupKey"
@refreshPage="refreshPage"
/>
</template>
<style lang='scss' scoped>
<style lang="scss" scoped>
.app-container {
height: calc(100% - 125px);
width: calc(100% - 40px);
overflow: hidden;
overflow-y: auto;
padding-bottom:10px;
height: calc(100% - 125px);
width: calc(100% - 40px);
overflow: hidden;
overflow-y: auto;
padding-bottom: 10px;
}
.tab-box{
margin: 20px;
.tab-box {
margin: 20px;
height: 63px;
background: #fff;
border-radius: 5px;
padding: 0 20px;
display: flex;
justify-content: space-between;
.appSubButton {
display: flex;
justify-content: space-between;
.butGroup {
margin-top: 15px;
}
.leftLink {
border-left: 1px solid #ccc;
}
}
::v-deep(.el-tabs) {
height: 63px;
width: calc(100% - 300px);
}
::v-deep(.el-tabs__nav) {
height: 63px;
background: #fff;
border-radius: 5px;
padding: 0 20px;
display: flex;
justify-content: space-between;
.appSubButton{
display: flex;
justify-content: space-between;
.butGroup{
margin-top: 15px;
}
.leftLink{
border-left : 1px solid #ccc;
}
}
::v-deep(.el-tabs){
height: 63px;
width: calc(100% - 300px);
}
::v-deep(.el-tabs__nav){
height: 63px;
font-size: 16px;
}
::v-deep(.el-tabs__item){
margin-top: 15px;
font-size: 16px;
}
::v-deep(.el-tabs__nav-prev){
line-height:0px;
margin-top:30px;
}
::v-deep(.el-tabs__nav-next){
line-height:0px;
margin-top:30px;
}
font-size: 16px;
}
::v-deep(.el-tabs__item) {
margin-top: 15px;
font-size: 16px;
}
::v-deep(.el-tabs__nav-prev) {
line-height: 0px;
margin-top: 30px;
}
::v-deep(.el-tabs__nav-next) {
line-height: 0px;
margin-top: 30px;
}
}
.el-dropdown-link{
font-size:30px;
margin-top: 20px;
margin-left: 10px;
.el-dropdown-link {
font-size: 30px;
margin-top: 20px;
margin-left: 10px;
}
</style>

4
src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue

@ -73,7 +73,7 @@ const gainAppContent = () => {
id: props.pickAppInfo.signCodeStr,
};
gainAppEditPsge(sendInfo).then((data) => {
console.log("获取app信息---》", data);
// console.log("app---", data);
menusTree.value = data.data.menuTree;
appCont.appKey = data.data.appKey;
appCont.appName = data.data.appName;
@ -108,7 +108,7 @@ const closeAppDraw = () => {
*/
const openAppPageForm = (val: appMenuTreeInfo) => {
checkedMenu.value = val;
console.log("操作表单页面", val);
// console.log("", val);
};
/**
@ 作者: 秦东

5
src/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue

@ -64,6 +64,7 @@ const flowMap = ref<any[]>(); //工作流
const nextStep = ref<number>(0);
const currentProgress = ref<number>(1);
const nodeKey = ref<string>("");
const purviewAry = ref<any[]>([]);
//
const gainFlowChart = reactive<nodeFlow>({
id: "0",
@ -123,6 +124,8 @@ const getTaskFormData = () => {
isFlowTable.value = false;
drawbox.value = 800;
}
nodeKey.value = data.flowPage.nodeKey;
purviewAry.value = data.tableFormPage.powerAry;
gainFlowChart.id = data.tableFormPage.flowkeystr;
console.log("表单数据--->1", data.flowPage.flowList);
flowMap.value = data.flowPage.flowList;
@ -640,6 +643,8 @@ function optionsValue3Get3(data: any, fieldName: string) {
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:save-draft-page="saveDraftPage"
:node-key="nodeKey"
:purview="purviewAry"
/>
</el-main>
<el-aside

6
src/views/sysworkflow/lowcodepage/pageFlow/tableFlow.vue

@ -56,6 +56,7 @@ const flowMap = ref<any[]>(); //工作流
const nextStep = ref<number>(0);
const currentProgress = ref<number>(1);
const nodeKey = ref<string>("");
const purviewAry = ref<any[]>([]);
//
const gainFlowChart = reactive<nodeFlow>({
id: "0",
@ -114,6 +115,9 @@ const getTaskFormData = () => {
} else {
isFlowTable.value = false;
}
nodeKey.value = data.flowPage.nodeKey;
purviewAry.value = data.tableFormPage.powerAry;
gainFlowChart.id = data.tableFormPage.flowkeystr;
// console.log("--->1",data.flowPage.flowList)
flowMap.value = data.flowPage.flowList;
@ -550,6 +554,8 @@ function optionsValue3Get3(data: any, fieldName: string) {
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:save-draft-page="saveDraftPage"
:node-key="nodeKey"
:purview="purviewAry"
/>
</el-main>
<el-aside

111
src/views/sysworkflow/lowcodepage/runApp/regularPage.vue

@ -3,63 +3,80 @@
@ 时间: 2024-05-31 09:20:58
@ 备注: 固定App项目
-->
<script lang='ts' setup>
import { taskflowquery } from '@/api/DesignForm/type'
<script lang="ts" setup>
import { taskflowquery } from "@/api/DesignForm/type";
//
import MyToDoPage from '@/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue'
import CompletedMattersPage from '@/views/sysworkflow/lowcodepage/runApp/regularPage/completedMattersPage.vue'
import SendCopy from '@/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue'
import MyCreate from '@/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue'
import MyDrafts from '@/views/sysworkflow/lowcodepage/runApp/regularPage/myDrafts.vue'
import MyToDoPage from "@/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue";
import CompletedMattersPage from "@/views/sysworkflow/lowcodepage/runApp/regularPage/completedMattersPage.vue";
import SendCopy from "@/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue";
import MyCreate from "@/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue";
import MyDrafts from "@/views/sysworkflow/lowcodepage/runApp/regularPage/myDrafts.vue";
const props = defineProps({
pickAppMenu:{
type:Object,
default(){
return {}
}
},
drawerWith:{
type:Number,
default:0
}
pickAppMenu: {
type: Object,
default() {
return {};
},
},
drawerWith: {
type: Number,
default: 0,
},
});
const loadingTd = ref(false)
const searckFormRefTd = ref(ElForm); //
const taskFlowAryTd = ref<any>([]) //
const loadingTd = ref(false);
const searckFormRefTd = ref(ElForm); //
const taskFlowAryTd = ref<any>([]); //
//
const selectInfoTd = reactive<taskflowquery>({
page: 1,
pagesize: 20,
class: 2
})
const totalstd = ref<number>(0) //
page: 1,
pagesize: 20,
class: 2,
});
const totalstd = ref<number>(0); //
//
const initData = () =>{
selectInfoTd.page = 1;
selectInfoTd.pagesize = 15;
selectInfoTd.title = ""
selectInfoTd.class = 2;
selectInfoTd.state = 0;
}
const initData = () => {
selectInfoTd.page = 1;
selectInfoTd.pagesize = 15;
selectInfoTd.title = "";
selectInfoTd.class = 2;
selectInfoTd.state = 0;
};
//
const resetQueryTd = () =>{
searckFormRefTd.value.resetFields();
initData();
}
const resetQueryTd = () => {
searckFormRefTd.value.resetFields();
initData();
};
</script>
<template>
<el-scrollbar class="scroBox">
<MyToDoPage v-if="props.pickAppMenu.isMain==1" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
<CompletedMattersPage v-if="props.pickAppMenu.isMain==2" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
<SendCopy v-if="props.pickAppMenu.isMain==3" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
<MyCreate v-if="props.pickAppMenu.isMain==4" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
<MyDrafts v-if="props.pickAppMenu.isMain==5" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
</el-scrollbar>
<el-scrollbar class="scroBox">
<MyToDoPage
v-if="props.pickAppMenu.isMain == 1"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
<CompletedMattersPage
v-if="props.pickAppMenu.isMain == 2"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
<SendCopy
v-if="props.pickAppMenu.isMain == 3"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
<MyCreate
v-if="props.pickAppMenu.isMain == 4"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
<MyDrafts
v-if="props.pickAppMenu.isMain == 5"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
</el-scrollbar>
</template>
<style lang='scss' scoped>
</style>
<style lang="scss" scoped></style>

396
src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue

@ -3,230 +3,238 @@
@ 时间: 2024-05-31 10:50:09
@ 备注: 待我处理
-->
<script lang='ts' setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi"
import { taskflowquery } from '@/api/DesignForm/type'
import LookAndOperateLogInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue'
<script lang="ts" setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi";
import { taskflowquery } from "@/api/DesignForm/type";
import LookAndOperateLogInfo from "@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue";
const props = defineProps({
pickAppMenu:{
type:Object,
default(){
return {}
}
},
drawerWith:{
type:Number,
default:0
}
pickAppMenu: {
type: Object,
default() {
return {};
},
},
drawerWith: {
type: Number,
default: 0,
},
});
const loadingTd = ref(false)
const searckFormRefTd = ref(ElForm); //
const taskFlowAryTd = ref<any>([]) //
const loadingTd = ref(false);
const searckFormRefTd = ref(ElForm); //
const taskFlowAryTd = ref<any>([]); //
//
const selectInfoTd = reactive<taskflowquery>({
page: 1,
pagesize: 20,
class: 2,
id:props.pickAppMenu.appkey
})
const totalstd = ref<number>(0) //
page: 1,
pagesize: 20,
class: 2,
id: props.pickAppMenu.appkey,
});
const totalstd = ref<number>(0); //
//
const initData = () =>{
selectInfoTd.page = 1;
selectInfoTd.pagesize = 15;
selectInfoTd.title = ""
selectInfoTd.class = 2;
selectInfoTd.state = 0;
}
const initData = () => {
selectInfoTd.page = 1;
selectInfoTd.pagesize = 15;
selectInfoTd.title = "";
selectInfoTd.class = 2;
selectInfoTd.state = 0;
};
//
const resetQueryTd = () =>{
searckFormRefTd.value.resetFields();
initData();
}
const resetQueryTd = () => {
searckFormRefTd.value.resetFields();
initData();
};
/**
@ 作者: 秦东
@ 时间: 2024-06-07 09:28:35
@ 功能: 加载数据
*/
const getToDoList = () =>{
gainAppTaskList(selectInfoTd)
.then((data) =>{
// console.log("--->",data)
totalstd.value = data.data.total
taskFlowAryTd.value = data.data.list
})
}
onMounted(() =>{
getToDoList()
})
const getToDoList = () => {
gainAppTaskList(selectInfoTd).then((data) => {
// console.log("--->",data)
totalstd.value = data.data.total;
taskFlowAryTd.value = data.data.list;
});
};
onMounted(() => {
getToDoList();
});
/**
@ 作者: 秦东
@ 时间: 2024-06-17 08:13:56
@ 功能: 搜索
*/
const getToDoListTd = () =>{
getToDoList()
}
const getToDoListTd = () => {
getToDoList();
};
const flowLogInfo = ref<any>()
const darwOpenOrClose = ref(false)
const flowLogInfo = ref<any>();
const darwOpenOrClose = ref(false);
/**
@ 作者: 秦东
@ 时间: 2024-06-17 14:46:51
@ 功能: 查看表单详情
*/
const lookFlowInfo = (val:any,types:number) =>{
flowLogInfo.value = val
darwOpenOrClose.value = true
}
const searchQuery = () =>{}
const lookFlowInfo = (val: any, types: number) => {
console.log("查看表单详情", val);
flowLogInfo.value = val;
darwOpenOrClose.value = true;
};
const searchQuery = () => {};
</script>
<template>
<div ref="myappbox" class="app_box">
<LookAndOperateLogInfo v-if="darwOpenOrClose" v-model:isshow="darwOpenOrClose" :flow-log-info="flowLogInfo" :drawer-with="props.drawerWith" @getmytodolist="getToDoListTd" />
<div class="app-container">
<div class="search">
<div class="titleBox">
代办事宜
</div>
<el-form ref="searckFormRefTd" :model="selectInfoTd" :inline="true">
<el-form-item label="任务标题" prop="name">
<el-input
v-model="selectInfoTd.title"
placeholder="请输入任务标题"
clearable
@keyup.enter="searchQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getToDoListTd()"><i-ep-search />搜索</el-button>
<el-button @click="resetQueryTd()"><i-ep-refresh />重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card shadow="never">
<el-table
v-loading="loadingTd"
element-loading-text="Loading..."
highlight-current-row
:data="taskFlowAryTd"
border
class="table_box"
>
<el-table-column fixed label="标题" prop="title" width="500" />
<el-table-column label="创建人" prop="creater" width="150" align="center">
<template #default="scope">
{{ scope.row.creatorInfo.name }}<el-text type="info">{{ scope.row.creatorInfo.number }}</el-text>
</template>
</el-table-column>
<el-table-column label="发起日期" prop="startDate" align="center" min-width="200" />
<el-table-column label="状态" prop="status" align="center" width="120" >
<template #default="scope">
<el-tag
v-if="scope.row.status==1"
class="mx-1"
effect="plain"
round
>
草稿
</el-tag>
<el-tag
v-else-if="scope.row.status==2"
type="danger"
class="mx-1"
effect="plain"
round
>
驳回
</el-tag>
<el-tag
v-else-if="scope.row.status==3"
type="success"
class="mx-1"
effect="plain"
round
>
审批中
</el-tag>
<el-tag
v-else-if="scope.row.status==4"
type="info"
class="mx-1"
effect="plain"
round
>
归档
</el-tag>
<el-tag
v-else
type="info"
class="mx-1"
effect="plain"
round
>
删除
</el-tag>
</template>
</el-table-column>
<el-table-column label="当前节点及操作人" prop="currentStep" width="200" >
<template #default="scope">
<el-text v-if="scope.row.currentNodeName" type="success">{{ scope.row.currentNodeName }}:</el-text><el-text v-for="(item,index) in scope.row.currentNodeUser" :key="index" type="warning">{{ item.name }}({{ item.number }})</el-text>
</template>
</el-table-column>
<el-table-column fixed="right" align="center" label="操作" width="100" >
<template #default="scope">
<el-tooltip
class="box-item"
effect="dark"
content="查看详情"
placement="top-end"
>
<el-button type="primary" size="small" class="fa fa-eye" @click="lookFlowInfo(scope.row,2)" />
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination
v-model:total="totalstd"
v-model:page="selectInfoTd.page"
v-model:limit="selectInfoTd.pagesize"
@pagination="getToDoListTd"
/>
</el-card>
</div>
</div>
<div ref="myappbox" class="app_box">
<LookAndOperateLogInfo
v-if="darwOpenOrClose"
v-model:isshow="darwOpenOrClose"
:flow-log-info="flowLogInfo"
:drawer-with="props.drawerWith"
@getmytodolist="getToDoListTd"
/>
<div class="app-container">
<div class="search">
<div class="titleBox">代办事宜</div>
<el-form ref="searckFormRefTd" :model="selectInfoTd" :inline="true">
<el-form-item label="任务标题" prop="name">
<el-input
v-model="selectInfoTd.title"
placeholder="请输入任务标题"
clearable
@keyup.enter="searchQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getToDoListTd()"
><i-ep-search />搜索</el-button
>
<el-button @click="resetQueryTd()"><i-ep-refresh />重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card shadow="never">
<el-table
v-loading="loadingTd"
element-loading-text="Loading..."
highlight-current-row
:data="taskFlowAryTd"
border
class="table_box"
>
<el-table-column fixed label="标题" prop="title" width="200" />
<el-table-column label="创建人" prop="creater" width="150" align="center">
<template #default="scope">
{{ scope.row.creatorInfo.name }}<el-text type="info">{{
scope.row.creatorInfo.number
}}</el-text
>
</template>
</el-table-column>
<el-table-column
label="发起日期"
prop="startDate"
align="center"
min-width="200"
/>
<el-table-column label="状态" prop="status" align="center" width="120">
<template #default="scope">
<el-tag v-if="scope.row.status == 1" class="mx-1" effect="plain" round>
草稿
</el-tag>
<el-tag
v-else-if="scope.row.status == 2"
type="danger"
class="mx-1"
effect="plain"
round
>
驳回
</el-tag>
<el-tag
v-else-if="scope.row.status == 3"
type="success"
class="mx-1"
effect="plain"
round
>
审批中
</el-tag>
<el-tag
v-else-if="scope.row.status == 4"
type="info"
class="mx-1"
effect="plain"
round
>
归档
</el-tag>
<el-tag v-else type="info" class="mx-1" effect="plain" round> 删除 </el-tag>
</template>
</el-table-column>
<el-table-column label="当前节点及操作人" prop="currentStep" width="200">
<template #default="scope">
<el-text v-if="scope.row.currentNodeName" type="success"
>{{ scope.row.currentNodeName }}</el-text
><el-text
v-for="(item, index) in scope.row.currentNodeUser"
:key="index"
type="warning"
>{{ item.name }}({{ item.number }})</el-text
>
</template>
</el-table-column>
<el-table-column fixed="right" align="center" label="操作" width="100">
<template #default="scope">
<el-tooltip
class="box-item"
effect="dark"
content="查看详情"
placement="top-end"
>
<el-button
type="primary"
size="small"
class="fa fa-eye"
@click="lookFlowInfo(scope.row, 2)"
/>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination
v-model:total="totalstd"
v-model:page="selectInfoTd.page"
v-model:limit="selectInfoTd.pagesize"
@pagination="getToDoListTd"
/>
</el-card>
</div>
</div>
</template>
<style lang='scss' scoped>
.app_box{
width:100%;
overflow: hidden;
overflow-y: auto;
.app-container{
margin: 10px;
}
.search{
display: flex;
align-items: center;
justify-content: space-between;
}
.titleBox{
font-size: 20px;
margin-top: -20px;
}
<style lang="scss" scoped>
.app_box {
width: 100%;
overflow: hidden;
overflow-y: auto;
.app-container {
margin: 10px;
}
.search {
display: flex;
align-items: center;
justify-content: space-between;
}
.titleBox {
font-size: 20px;
margin-top: -20px;
}
}
.box-card {
width: 100%;
width: 100%;
}
.table_box{
width: 100%;
height: calc(100vh - 230px);
.table_box {
width: 100%;
height: calc(100vh - 230px);
}
</style>

441
src/views/taskplatform/taskmanagement/lookFlowInfoApp.vue

@ -3,216 +3,273 @@
@ 时间: 2024-06-17 15:30:36
@ 备注: App执行任务
-->
<script lang='ts' setup>
import { submitButton, afreshSubmitButton,editFormCont,draftSubmitButton,editLookFormCont } from "@/utils/workflow/const";
<script lang="ts" setup>
import {
json2string,
objToStringify,
string2json,
stringToObj
} from '@/utils/DesignForm/form'
import { haveCustomerFormVersion,generateFlow,gainTaskFormInfo,gainEditDataLog } from '@/api/taskapi/management'
submitButton,
afreshSubmitButton,
editFormCont,
draftSubmitButton,
editLookFormCont,
} from "@/utils/workflow/const";
import {
json2string,
objToStringify,
string2json,
stringToObj,
} from "@/utils/DesignForm/form";
import RunFlowStepApp from '@/views/taskplatform/taskmanagement/runFlowStepApp.vue'
import {
haveCustomerFormVersion,
generateFlow,
gainTaskFormInfo,
gainEditDataLog,
} from "@/api/taskapi/management";
import { judgeSubmitCancel,startRunFlow,afreshRunFlow,onlyPublishFlow,gainEditFormFlowInfo } from '@/api/DesignForm/requestapi'
import RunFlowStepApp from "@/views/taskplatform/taskmanagement/runFlowStepApp.vue";
import {
judgeSubmitCancel,
startRunFlow,
afreshRunFlow,
onlyPublishFlow,
gainEditFormFlowInfo,
} from "@/api/DesignForm/requestapi";
import FlowStep from '@/views/taskplatform/taskmanagement/flowStep.vue'
import FlowStep from "@/views/taskplatform/taskmanagement/flowStep.vue";
const props = defineProps({
isshow:{
type:Boolean,
default:true
},
drawerWith:{
type:Number,
default:0
},
flowLogInfo:{
type:Object,
default(){
return {}
}
},
operState:{
type:Number,
default:1
}
})
isshow: {
type: Boolean,
default: true,
},
drawerWith: {
type: Number,
default: 0,
},
flowLogInfo: {
type: Object,
default() {
return {};
},
},
operState: {
type: Number,
default: 1,
},
});
const flowAry = ref<any[]>();
const emits = defineEmits(["update:isshow","getmytodolist"]);
const isOpen = computed({
get: () => props.isshow,
set: (val) => {
emits("update:isshow", val);
},
const emits = defineEmits(["update:isshow", "getmytodolist"]);
const isOpen = computed({
get: () => props.isshow,
set: (val) => {
emits("update:isshow", val);
},
});
const logistrue = ref(false)
const formLoading = ref(false)
const loadingData = ref(false) //
const flowLoading = ref(false) //
const versiontitle = ref<any>("")
const flowMap = ref<any>()
const nextStep = ref(0)
const nodeKey = ref<string>('');
const currentProgress = ref<number>(1);
const newLogAry = ref<any>("")
const oldLogAry = ref<any>("")
const newDataLen = ref<number>(0);
const logistrue = ref(false);
const formLoading = ref(false);
const loadingData = ref(false); //
const flowLoading = ref(false); //
const versiontitle = ref<any>("");
const flowMap = ref<any>();
const nextStep = ref(0);
const nodeKey = ref<string>("");
const purviewAry = ref<any[]>([]);
const currentProgress = ref<number>(1);
const newLogAry = ref<any>("");
const oldLogAry = ref<any>("");
const newDataLen = ref<number>(0);
//
const formState = reactive({
formData: {
list: [],
form: {},
config: {}
},
dict: {},
formId: 25,
id: 1,
loading: true
})
const formEl = ref<any>()
formData: {
list: [],
form: {},
config: {},
},
dict: {},
formId: 25,
id: 1,
loading: true,
});
const formEl = ref<any>();
const drawerBeforeClose = () => {
// console.log("",false)
emits("getmytodolist")
emits("update:isshow", false);
}
// console.log("",false)
emits("getmytodolist");
emits("update:isshow", false);
};
onMounted(()=>{
versiontitle.value = props.flowLogInfo.title
flowMap.value = JSON.parse(props.flowLogInfo.flowcont)
// console.log("",props.flowLogInfo)
gainFormData()
})
const pageLog = ref<any[]>([])
onMounted(() => {
versiontitle.value = props.flowLogInfo.title;
flowMap.value = JSON.parse(props.flowLogInfo.flowcont);
// console.log("",props.flowLogInfo)
gainFormData();
});
const pageLog = ref<any[]>([]);
//
const gainFormData = () =>{
formLoading.value = true;
// console.log("--->",props.flowLogInfo)
nextStep.value = props.flowLogInfo.nextStep
nodeKey.value = props.flowLogInfo.nodeKey;
currentProgress.value = props.flowLogInfo.currentStep
// console.log("props.flowLogInfo--5-------->",props.flowLogInfo.mastesform)
formState.formData = stringToObj(props.flowLogInfo.mastesform)
const gainFormData = () => {
formLoading.value = true;
console.log("获取表单内容--->", props.flowLogInfo);
nextStep.value = props.flowLogInfo.nextStep;
nodeKey.value = props.flowLogInfo.currentNodeKey;
purviewAry.value = props.flowLogInfo.powerAry;
currentProgress.value = props.flowLogInfo.currentStep;
// console.log("props.flowLogInfo--5-------->",props.flowLogInfo.mastesform)
formState.formData = stringToObj(props.flowLogInfo.mastesform);
gainTaskFormInfo({ id: props.flowLogInfo.mastersKeyStr})
.then((data:any)=>{
if(data.data.logistrue){
formState.formData.list.push(editLookFormCont)
}
// console.log("res----------->",data)
formEl.value.setValue(data.data.masterDataInfo)
newLogAry.value = data.data.newData
oldLogAry.value = data.data.oldData
logistrue.value = data.data.logistrue
newDataLen.value = data.data.newDataLen
formLoading.value = false;
nextTick(()=>{
// console.log("-1111-->",data.data.tableData)
formEl.value.setValue(data.data.tableData)
})
})
.finally(()=>{
formLoading.value = false;
gainEditDataLog({id:props.flowLogInfo.mastersKeyStr})
.then(({data})=>{
// console.log("-1111-->",data)
pageLog.value = data
});
})
// haveCustomerFormVersion({id:props.flowLogInfo.version_id.toString()})
// .then(({ data }) =>{
// formState.dict = string2json(data.dict)
// judgeSubmitCancel({"name":data.mastesformjson})
// .then((dataBut:any) =>{
// if(dataBut.code == 0){
// formState.formData.list.push(afreshSubmitButton)
// // console.log("res----------->",dataBut,props.operState)
// // if (dataBut.data == 3 || dataBut.data == 4){
// // formInfo.formData.list.push(editFormCont)
// // }
// }
// })
// })
// .finally(() => {
// formLoading.value = false;
// formEl
// })
}
gainTaskFormInfo({ id: props.flowLogInfo.mastersKeyStr })
.then((data: any) => {
if (data.data.logistrue) {
formState.formData.list.push(editLookFormCont);
}
// console.log("res----------->",data)
formEl.value.setValue(data.data.masterDataInfo);
newLogAry.value = data.data.newData;
oldLogAry.value = data.data.oldData;
logistrue.value = data.data.logistrue;
newDataLen.value = data.data.newDataLen;
formLoading.value = false;
nextTick(() => {
// console.log("-1111-->",data.data.tableData)
formEl.value.setValue(data.data.tableData);
});
})
.finally(() => {
formLoading.value = false;
gainEditDataLog({ id: props.flowLogInfo.mastersKeyStr }).then(({ data }) => {
// console.log("-1111-->",data)
pageLog.value = data;
});
});
// haveCustomerFormVersion({id:props.flowLogInfo.version_id.toString()})
// .then(({ data }) =>{
// formState.dict = string2json(data.dict)
// judgeSubmitCancel({"name":data.mastesformjson})
// .then((dataBut:any) =>{
// if(dataBut.code == 0){
// formState.formData.list.push(afreshSubmitButton)
// // console.log("res----------->",dataBut,props.operState)
// // if (dataBut.data == 3 || dataBut.data == 4){
// // formInfo.formData.list.push(editFormCont)
// // }
// }
// })
// })
// .finally(() => {
// formLoading.value = false;
// formEl
// })
};
</script>
<template>
<el-drawer v-model="isOpen" v-loading="loadingData" element-loading-my-text="Loading..." :title="versiontitle" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith" class="drawerClass" :before-close="drawerBeforeClose">
<table border="0" class="tableFlowBox">
<tr>
<td valign="top">
<div class="drawerFormBox boxLeft">
<ak-form
ref="formEl"
v-loading="formLoading" element-loading-text="Loading..."
:form-data="formState.formData"
:type="formType"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:anew-submit = "anewSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史2记录</el-divider>
<el-timeline>
<el-timeline-item v-for="(item,index) in pageLog" :key="index" :timestamp="item.time+' 操作人:'+item.creater" placement="top">
<el-card>
<el-descriptions border>
<el-descriptions-item v-for="(mastItem,mastIndex) in item.masterdata" :key="mastIndex" :label="mastIndex">
{{mastItem}}
</el-descriptions-item>
</el-descriptions>
<el-tabs v-if="item.sunList" type="border-card" style="margin-top:20px;">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunList" :label="sonIndex" :key="sonIndex">
<el-descriptions v-for="(sonVal,sonIndex) in sonItem" :key="sonIndex" border>
<el-descriptions-item v-for="(sonCentor,sonKey) in sonVal" :key="sonKey" :label="sonKey"> {{sonCentor}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table style="margin-top:20px;">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{item.explicate}}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
<el-drawer
v-model="isOpen"
v-loading="loadingData"
element-loading-my-text="Loading..."
:title="versiontitle"
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
:size="props.drawerWith"
class="drawerClass"
:before-close="drawerBeforeClose"
>
<table border="0" class="tableFlowBox">
<tr>
<td valign="top">
<div class="drawerFormBox boxLeft">
<ak-form
ref="formEl"
v-loading="formLoading"
element-loading-text="Loading..."
:form-data="formState.formData"
:type="formType"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:anew-submit="anewSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit="sendDraftSubmit"
:node-key="nodeKey"
:purview="purviewAry"
/>
</div>
</td>
<td valign="top" width="350">
<RunFlowStepApp ref="runstep" v-model:flowary="flowAry" :flow-key="props.flowLogInfo.idStr" :current-progress="currentProgress" @updatelist="drawerBeforeClose" />
</td>
</tr>
</table>
</el-drawer>
<el-divider v-if="pageLog && pageLog.length > 0" content-position="left"
>历史记录</el-divider
>
<el-timeline>
<el-timeline-item
v-for="(item, index) in pageLog"
:key="index"
:timestamp="item.time + ' 操作人:' + item.creater"
placement="top"
>
<el-card>
<el-descriptions border>
<el-descriptions-item
v-for="(mastItem, mastIndex) in item.masterdata"
:key="mastIndex"
:label="mastIndex"
>
{{ mastItem }}
</el-descriptions-item>
</el-descriptions>
<el-tabs
v-if="item.sunList"
type="border-card"
style="margin-top: 20px"
>
<el-tab-pane
v-for="(sonItem, sonIndex) in item.sunList"
:label="sonIndex"
:key="sonIndex"
>
<el-descriptions
v-for="(sonVal, sonIndex) in sonItem"
:key="sonIndex"
border
>
<el-descriptions-item
v-for="(sonCentor, sonKey) in sonVal"
:key="sonKey"
:label="sonKey"
>
{{ sonCentor }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table style="margin-top: 20px">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{ item.explicate }}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</td>
<td valign="top" width="350">
<RunFlowStepApp
ref="runstep"
v-model:flowary="flowAry"
:flow-key="props.flowLogInfo.idStr"
:current-progress="currentProgress"
@updatelist="drawerBeforeClose"
/>
</td>
</tr>
</table>
</el-drawer>
</template>
<style lang='scss' scoped>
.biankuang{
border: 1px solid #D4D7DE;
padding:10px 10px;
<style lang="scss" scoped>
.biankuang {
border: 1px solid #d4d7de;
padding: 10px 10px;
}
</style>

Loading…
Cancel
Save