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 }} {{ item.label }}
</el-button> </el-button>
</div> </div>
<div> <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>
</el-col> </el-col>

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

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

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

@ -65,12 +65,12 @@ const beforeAvatarUpload = (rawFile) => {
// //
const handleAvatarSuccess = (response, uploadFile) => { const handleAvatarSuccess = (response, uploadFile) => {
// imageUrl.value = URL.createObjectURL(uploadFile.raw!) // imageUrl.value = URL.createObjectURL(uploadFile.raw!)
console.log("上传成功回调", value); // console.log("", value);
emits("update:modelValue", response.data.url); emits("update:modelValue", response.data.url);
imgPath.value = response.data.url; imgPath.value = response.data.url;
value.value = response.data.url; value.value = response.data.url;
console.log("上传成功回调---------->", value.value); // console.log("---------->", value.value);
// let oldFormSetUp = props.formTableSetUp // let oldFormSetUp = props.formTableSetUp
// if(props.formTableSetUp && props.formTableSetUp.list && props.formTableSetUp.list.length > 0){ // if(props.formTableSetUp && props.formTableSetUp.list && props.formTableSetUp.list.length > 0){
// oldFormSetUp.list.forEach((item)=>{ // oldFormSetUp.list.forEach((item)=>{
@ -92,7 +92,7 @@ const handleAvatarSuccess = (response, uploadFile) => {
}; };
const getFormItemInputStyle = (ele: any, sty: number) => { const getFormItemInputStyle = (ele: any, sty: number) => {
if (ele?.inputStyle) { if (ele?.inputStyle) {
console.log("返回栅格宽度4", AnalysisInputCss(ele?.inputStyle, sty)); // console.log("4", AnalysisInputCss(ele?.inputStyle, sty));
return 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; // versionId?: string; //
mastesformjson?: string; // mastesformjson?: string; //
isWeb: boolean; // isWeb: boolean; //
nodeKey?: string;
purview?: any[];
}>(), }>(),
{ {
type: 1, // 123 4 5 type: 1, // 123 4 5
@ -76,7 +78,7 @@ const props = withDefaults(
labelStyle: {}, labelStyle: {},
inputStyle: {}, inputStyle: {},
}, },
aiConfig:[] aiConfig: [],
}; };
}, },
dict: () => { dict: () => {
@ -158,12 +160,18 @@ const resultDict = ref({});
const model = ref<any>({}); const model = ref<any>({});
// model // model
const getInitModel = () => { const getInitModel = () => {
if(props.formData.aiConfig?.length>0){ if (props.formData.aiConfig?.length > 0) {
props.formData.aiConfig?.forEach(item=>{ props.formData.aiConfig?.forEach((item) => {
currentAgent.value.push({name:"test",model:false,uuid:item.library,fields:item.title,trigger:item.trigger,params:{}}) currentAgent.value.push({
}) name: "test",
model: false,
uuid: item.library,
fields: item.title,
trigger: item.trigger,
params: {},
});
});
} }
const obj = {}; const obj = {};
forEachGetFormModel(props.formData.list, obj); forEachGetFormModel(props.formData.list, obj);
@ -495,35 +503,45 @@ watch(
//-----------------------AI setting-------------------------- //-----------------------AI setting--------------------------
//AIform //AIform
const currentAgent=ref<{model:boolean,name:string,uuid:string[],fields:string[],trigger:number,params:{[key: string]: any}}[]>([]) const currentAgent = ref<
const aiassistRef=ref() {
model: boolean;
name: string;
uuid: string[];
fields: string[];
trigger: number;
params: { [key: string]: any };
}[]
>([]);
const aiassistRef = ref();
//AI //AI
provide(constAiEffect, ({ key, value, field}: any) => { provide(constAiEffect, ({ key, value, field }: any) => {
//ai_envents //ai_envents
const ai_events: Array<{ uuids: string[]; params: { [key: string]: any } }> = []; const ai_events: Array<{ uuids: string[]; params: { [key: string]: any } }> = [];
currentAgent.value.forEach(ag=>{ currentAgent.value.forEach((ag) => {
if(ag.fields.includes(key)){ //trigger: 1: 2 3 if (ag.fields.includes(key)) {
ag.params[field]=value;//keyfieldName //trigger: 1: 2 3
switch(ag.trigger){ ag.params[field] = value; //keyfieldName
switch (ag.trigger) {
case 2: case 2:
if(Object.keys(ag.params).length>=ag.fields.length/2){ if (Object.keys(ag.params).length >= ag.fields.length / 2) {
ai_events.push({uuids:ag.uuid,params:ag.params}) ai_events.push({ uuids: ag.uuid, params: ag.params });
} }
break; break;
case 3: case 3:
if(Object.keys(ag.params).length==ag.fields.length){ if (Object.keys(ag.params).length == ag.fields.length) {
ai_events.push({uuids:ag.uuid,params:ag.params}) ai_events.push({ uuids: ag.uuid, params: ag.params });
} }
break; break;
default: default:
ai_events.push({uuids:ag.uuid,params:ag.params}) ai_events.push({ uuids: ag.uuid, params: ag.params });
} }
} }
}) });
if(ai_events.length>0){ if (ai_events.length > 0) {
aiassistRef.value.onSendParamToAI(props.formData.form.formName,ai_events) aiassistRef.value.onSendParamToAI(props.formData.form.formName, ai_events);
} }
}) });
//------------------------------------------------------------ //------------------------------------------------------------
// tProp // tProp
@ -535,7 +553,7 @@ provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any)
// console.log("----------5--------->", type); // console.log("----------5--------->", type);
// console.log("----------6--------->", attribute); // console.log("----------6--------->", attribute);
// console.log("----------11--------->", model.value); // console.log("----------11--------->", model.value);
let fieldVal = {}; let fieldVal = {};
for (let i in model.value) { for (let i in model.value) {
if (i == key) { if (i == key) {
@ -2183,8 +2201,17 @@ const webPage = computed({
<slot></slot> <slot></slot>
</el-form> </el-form>
</div> </div>
<div v-else v-loading="loading" class="pcBox" :class="{boxAI:type!=5 && currentAgent.length>0}"> <div
<Aiassist ref="aiassistRef" v-if="type!=5 && currentAgent.length>0" :agent="currentAgent"></Aiassist> 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 <el-form
v-bind="formData.form" v-bind="formData.form"
ref="ruleForm" ref="ruleForm"
@ -2201,14 +2228,14 @@ const webPage = computed({
:numrun="numrun" :numrun="numrun"
:data="formData.list" :data="formData.list"
:alldata="formData" :alldata="formData"
:node-key="nodeKey"
:purview="purview"
@optionsValue3Get2="optionsValue3Get2" @optionsValue3Get2="optionsValue3Get2"
/> />
<slot></slot> <slot></slot>
</el-form> </el-form>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.webBox { .webBox {
@ -2230,20 +2257,20 @@ const webPage = computed({
position: relative; position: relative;
} }
.boxAI{ .boxAI {
display: grid; display: grid;
grid-template-columns:1fr 4fr; grid-template-columns: 1fr 4fr;
} }
.t_ask{ .t_ask {
align-self: end; align-self: end;
line-height: 34px; line-height: 34px;
background-color: rgb(188 211 241); background-color: rgb(188 211 241);
padding: 0 30px; padding: 0 30px;
border-radius:10px; border-radius: 10px;
margin: 15px; margin: 15px;
} }
.t_resp{ .t_resp {
align-self: start; align-self: start;
line-height: 30px; line-height: 30px;
margin: 20px 33px; 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 UploadPage from "@/components/DesignForm/public/expand/uploadPage.vue";
import UploadPageList from "@/components/DesignForm/public/expand/uploadPageList.vue"; import UploadPageList from "@/components/DesignForm/public/expand/uploadPageList.vue";
import OrgCitys from "@/components/DesignForm/public/expand/orgCitys.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 DatePickerPage from "@/components/DesignForm/public/expand/datePicker.vue";
import CascaderPage from "@/components/DesignForm/public/expand/cascader.vue"; import CascaderPage from "@/components/DesignForm/public/expand/cascader.vue";
import AssociatedForms from "@/widget/associatedforms/index.vue"; import AssociatedForms from "@/widget/associatedforms/index.vue";
@ -126,11 +126,15 @@ const updateModel = (val: any) => {
//----------by han2015: support AI event emitting---------------- //----------by han2015: support AI event emitting----------------
//changeEventchangeEventfieldChange //changeEventchangeEventfieldChange
const fieldChangeEnt = inject(constAiEffect, '') as any const fieldChangeEnt = inject(constAiEffect, "") as any;
function onValueChange(_type:string){ function onValueChange(_type: string) {
if(_type=="password") return; if (_type == "password") return;
fieldChangeEnt && 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") { if (props.data.type === "organization") {
//return markRaw(OrgCitys); //return markRaw(OrgCitys);
return markRaw(Region) return markRaw(Region);
} }
if (props.data.type === "datePicker") { if (props.data.type === "datePicker") {
props.data.control.valueFormat = "x"; props.data.control.valueFormat = "x";
@ -250,7 +254,7 @@ const currentComponent = computed(() => {
// if (props.data.type === 'timePicker') { // if (props.data.type === 'timePicker') {
// props.data.control.valueFormat="timestamp" // props.data.control.valueFormat="timestamp"
// } // }
console.log("自定义组件", props.data.tye); // console.log("", props.data.tye);
return `el-${props.data.type}`; return `el-${props.data.type}`;
}); });
// //
@ -622,7 +626,8 @@ const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API + "/api/upordown";
@ 功能: 判断此组件是否可见 @ 功能: 判断此组件是否可见
*/ */
const judgeIsShow = (key: string) => { const judgeIsShow = (key: string) => {
// console.log("---->",key) console.log("判断此组件是否可见--nodeKey-->", props.nodeKey);
console.log("判断此组件是否可见--purview-->", props.purview);
if ( if (
props.nodeKey != undefined && props.nodeKey != undefined &&
props.purview != undefined && props.purview != undefined &&
@ -641,7 +646,13 @@ const judgeIsShow = (key: string) => {
if (item.powerAry && item.powerAry.length > 0) { if (item.powerAry && item.powerAry.length > 0) {
item.powerAry.forEach((itm) => { item.powerAry.forEach((itm) => {
if (itm.id == key) { if (itm.id == key) {
// console.log("",itm,itm.id == key,"--------->",itm.isLook) // console.log(
// "",
// itm,
// itm.id == key,
// "--------->",
// itm.isLook
// );
isShow = itm.isLook; isShow = itm.isLook;
} }
}); });
@ -662,6 +673,8 @@ const judgeIsShow = (key: string) => {
@ 功能: 判断是否禁用 @ 功能: 判断是否禁用
*/ */
const judgeIsDisabled = (key: string) => { const judgeIsDisabled = (key: string) => {
// console.log("", key);
if (type.value === 3) { if (type.value === 3) {
return true; // return true; //
} }
@ -671,6 +684,7 @@ const judgeIsDisabled = (key: string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true; // return true; //
} }
// console.log("-------props.nodeKey----------->", props.purview);
if ( if (
props.nodeKey != undefined && props.nodeKey != undefined &&
props.purview != undefined && props.purview != undefined &&
@ -688,13 +702,13 @@ const judgeIsDisabled = (key: string) => {
if (item.powerAry && item.powerAry.length > 0) { if (item.powerAry && item.powerAry.length > 0) {
item.powerAry.forEach((itm) => { item.powerAry.forEach((itm) => {
if (itm.id == key) { if (itm.id == key) {
console.log( // console.log(
"判断此组件是否禁用", // "",
itm, // itm,
itm.id == key, // itm.id == key,
"--------->", // "--------->",
itm.isLook // itm.isLook
); // );
isShow = !itm.isEdit; isShow = !itm.isEdit;
} }
}); });
@ -947,11 +961,11 @@ function asfValueChanged(val: any) {
@ 功能: 解析下载图片 @ 功能: 解析下载图片
*/ */
const uploadPic = (val: any) => { const uploadPic = (val: any) => {
console.log("解析下载图片-->", val); // console.log("-->", val);
if (val != "") { if (val != "") {
let urlAry = string2json(val); let urlAry = string2json(val);
// let urlAry = val.toString().split(",") // let urlAry = val.toString().split(",")
console.log("解析下载图片-2->", urlAry); // console.log("-2->", urlAry);
return urlAry; return urlAry;
} else { } else {
return []; return [];
@ -964,11 +978,11 @@ const uploadPic = (val: any) => {
@ 功能: 获取级联选择值 @ 功能: 获取级联选择值
*/ */
const judjeCascader = (val: any[], options: 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 == undefined || val == null) return "";
if (val && val.length < 0) return ""; if (val && val.length < 0) return "";
let valAry = stringToObj(val); let valAry = stringToObj(val);
console.log("获取级联选择值", stringToObj(val), val.length, options); // console.log("", stringToObj(val), val.length, options);
if (!Array.isArray(valAry)) { if (!Array.isArray(valAry)) {
return diGuiJilian(val, options); return diGuiJilian(val, options);
} }
@ -976,7 +990,7 @@ const judjeCascader = (val: any[], options: any[]) => {
valAry.forEach((item: any) => { valAry.forEach((item: any) => {
// console.log("item", item); // console.log("item", item);
console.log(item + "=============:", item, diGuiJilian(item, options)); // console.log(item + "=============:", item, diGuiJilian(item, options));
if (title == "") { if (title == "") {
title = title + diGuiJilian(item, options); title = title + diGuiJilian(item, options);
} else { } else {

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

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

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

@ -73,7 +73,7 @@ const gainAppContent = () => {
id: props.pickAppInfo.signCodeStr, id: props.pickAppInfo.signCodeStr,
}; };
gainAppEditPsge(sendInfo).then((data) => { gainAppEditPsge(sendInfo).then((data) => {
console.log("获取app信息---》", data); // console.log("app---", data);
menusTree.value = data.data.menuTree; menusTree.value = data.data.menuTree;
appCont.appKey = data.data.appKey; appCont.appKey = data.data.appKey;
appCont.appName = data.data.appName; appCont.appName = data.data.appName;
@ -108,7 +108,7 @@ const closeAppDraw = () => {
*/ */
const openAppPageForm = (val: appMenuTreeInfo) => { const openAppPageForm = (val: appMenuTreeInfo) => {
checkedMenu.value = val; 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 nextStep = ref<number>(0);
const currentProgress = ref<number>(1); const currentProgress = ref<number>(1);
const nodeKey = ref<string>(""); const nodeKey = ref<string>("");
const purviewAry = ref<any[]>([]);
// //
const gainFlowChart = reactive<nodeFlow>({ const gainFlowChart = reactive<nodeFlow>({
id: "0", id: "0",
@ -123,6 +124,8 @@ const getTaskFormData = () => {
isFlowTable.value = false; isFlowTable.value = false;
drawbox.value = 800; drawbox.value = 800;
} }
nodeKey.value = data.flowPage.nodeKey;
purviewAry.value = data.tableFormPage.powerAry;
gainFlowChart.id = data.tableFormPage.flowkeystr; gainFlowChart.id = data.tableFormPage.flowkeystr;
console.log("表单数据--->1", data.flowPage.flowList); console.log("表单数据--->1", data.flowPage.flowList);
flowMap.value = data.flowPage.flowList; flowMap.value = data.flowPage.flowList;
@ -640,6 +643,8 @@ function optionsValue3Get3(data: any, fieldName: string) {
:close-app-submit="closeAppSubmit" :close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal" :change-key-val="changeKeyVal"
:save-draft-page="saveDraftPage" :save-draft-page="saveDraftPage"
:node-key="nodeKey"
:purview="purviewAry"
/> />
</el-main> </el-main>
<el-aside <el-aside

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

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

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

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

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

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

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

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

Loading…
Cancel
Save