Browse Source

Merge branch 'qin_s4'

qin_s5
herenshan112 3 weeks ago
parent
commit
e71fa0b671
  1. 2
      assets/myToDoPage-952c20f8.js
  2. 9
      src/api/DesignForm/types.ts
  3. 2
      src/api/doc/space.ts
  4. 125
      src/api/javaRequest.ts
  5. 14
      src/components/DesignForm/app/index.vue
  6. 5
      src/components/DesignForm/app/index_20260129.vue
  7. 182
      src/components/DesignForm/assembly/index.ts
  8. 1
      src/components/DesignForm/dragControlApp.vue
  9. 6
      src/components/DesignForm/formControlPropertiNew.vue
  10. 14
      src/components/DesignForm/formVersion.vue
  11. 2
      src/components/DesignForm/public/expand/rangedUserTree.vue
  12. 2
      src/components/DesignForm/public/form/childTable.vue
  13. 6
      src/components/DesignForm/public/form/formGroup.vue
  14. 8
      src/components/DesignForm/public/form/formItem.vue
  15. 2
      src/components/DesignForm/public/headToolsApp.vue
  16. 53
      src/components/DesignForm/validateText.ts
  17. 2
      src/utils/DesignForm/index.ts
  18. 6
      src/utils/request.ts
  19. 1
      src/utils/workflow/const.ts
  20. 2
      src/views/dashboard/components/allorgyear.vue
  21. 1
      src/views/login/index.vue
  22. 3
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue
  23. 862
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFormNew.vue
  24. 8527
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue
  25. 257
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/control.vue
  26. 3520
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/design.vue
  27. 8
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  28. 23
      src/views/sysworkflow/lowcodepage/pageFlow/flowStep.vue
  29. 37
      src/views/sysworkflow/lowcodepage/pageFlow/newTableFlow.vue
  30. 2
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue
  31. 2
      src/views/taskplatform/taskmanagement/lookFlowInfoNewApp.vue
  32. 215
      vite.config.ts.timestamp-1772586397203-879cadf7fb034.mjs

2
assets/myToDoPage-952c20f8.js

@ -1 +1 @@
import{d as W,r as d,ao as C,ax as q,G as H,a as r,f as F,h as l,c as i,I as D,$ as L,q as v,e as o,b as t,as as Y,H as s,Y as J,t as m,F as X,g as Z,f_ as ee,aj as te,an as oe,ab as ae,b3 as ne,aF as le,cz as se,N as re,b4 as ie,aA as pe,at as de,p as ce,m as _e,_ as ue}from"./index-e450010e.js";import{_ as fe}from"./index-c5018719.js";import{_ as me}from"./refresh-f1723430.js";import{_ as ge}from"./search-71444aff.js";import we from"./lookFlowInfoApp-293e6f1f.js";import"./runFlowStepApp-c2ddd4a0.js";const ye=c=>(ce("data-v-7bd64948"),c=c(),_e(),c),be={ref:"myappbox",class:"app_box"},ke={class:"app-container"},ve={class:"search"},xe=ye(()=>v("div",{class:"titleBox"}," 办事宜 ",-1)),he=W({__name:"myToDoPage",props:{pickAppMenu:{type:Object,default(){return{}}},drawerWith:{type:Number,default:0}},setup(c){const x=c,V=d(!1),h=d(C),T=d([]),n=q({page:1,pagesize:20,class:2,id:x.pickAppMenu.appkey}),g=d(0),z=()=>{n.page=1,n.pagesize=15,n.title="",n.class=2,n.state=0},A=()=>{h.value.resetFields(),z()},I=()=>{ee(n).then(u=>{g.value=u.data.total,T.value=u.data.list})};H(()=>{I()});const w=()=>{I()},E=d(),_=d(!1),B=(u,a)=>{E.value=u,_.value=!0},U=()=>{};return(u,a)=>{const S=te,N=oe,M=ge,y=ae,O=me,P=C,p=ne,b=le,f=se,$=re,R=ie,j=fe,G=pe,K=de;return r(),F("div",be,[l(_)?(r(),i(we,{key:0,isshow:l(_),"onUpdate:isshow":a[0]||(a[0]=e=>D(_)?_.value=e:null),"flow-log-info":l(E),"drawer-with":x.drawerWith,onGetmytodolist:w},null,8,["isshow","flow-log-info","drawer-with"])):L("",!0),v("div",ke,[v("div",ve,[xe,o(P,{ref_key:"searckFormRefTd",ref:h,model:l(n),inline:!0},{default:t(()=>[o(N,{label:"任务标题",prop:"name"},{default:t(()=>[o(S,{modelValue:l(n).title,"onUpdate:modelValue":a[1]||(a[1]=e=>l(n).title=e),placeholder:"请输入任务标题",clearable:"",onKeyup:Y(U,["enter"])},null,8,["modelValue"])]),_:1}),o(N,null,{default:t(()=>[o(y,{type:"primary",onClick:a[2]||(a[2]=e=>w())},{default:t(()=>[o(M),s("搜索")]),_:1}),o(y,{onClick:a[3]||(a[3]=e=>A())},{default:t(()=>[o(O),s("重置")]),_:1})]),_:1})]),_:1},8,["model"])]),o(G,{shadow:"never"},{default:t(()=>[J((r(),i(R,{"element-loading-text":"Loading...","highlight-current-row":"",data:l(T),border:"",class:"table_box"},{default:t(()=>[o(p,{fixed:"",label:"标题",prop:"title",width:"500"}),o(p,{label:"创建人",prop:"creater",width:"150",align:"center"},{default:t(e=>[s(m(e.row.creatorInfo.name)+"(",1),o(b,{type:"info"},{default:t(()=>[s(m(e.row.creatorInfo.number),1)]),_:2},1024),s(") ")]),_:1}),o(p,{label:"发起日期",prop:"startDate",align:"center","min-width":"200"}),o(p,{label:"状态",prop:"status",align:"center",width:"120"},{default:t(e=>[e.row.status==1?(r(),i(f,{key:0,class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 草稿 ")]),_:1})):e.row.status==2?(r(),i(f,{key:1,type:"danger",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 驳回 ")]),_:1})):e.row.status==3?(r(),i(f,{key:2,type:"success",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 审批中 ")]),_:1})):e.row.status==4?(r(),i(f,{key:3,type:"info",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 归档 ")]),_:1})):(r(),i(f,{key:4,type:"info",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 删除 ")]),_:1}))]),_:1}),o(p,{label:"当前节点及操作人",prop:"currentStep",width:"200"},{default:t(e=>[e.row.currentNodeName?(r(),i(b,{key:0,type:"success"},{default:t(()=>[s(m(e.row.currentNodeName)+":",1)]),_:2},1024)):L("",!0),(r(!0),F(X,null,Z(e.row.currentNodeUser,(k,Q)=>(r(),i(b,{key:Q,type:"warning"},{default:t(()=>[s(m(k.name)+"("+m(k.number)+")",1)]),_:2},1024))),128))]),_:1}),o(p,{fixed:"right",align:"center",label:"操作",width:"100"},{default:t(e=>[o($,{class:"box-item",effect:"dark",content:"查看详情",placement:"top-end"},{default:t(()=>[o(y,{type:"primary",size:"small",class:"fa fa-eye",onClick:k=>B(e.row,2)},null,8,["onClick"])]),_:2},1024)]),_:1})]),_:1},8,["data"])),[[K,l(V)]]),o(j,{total:l(g),"onUpdate:total":a[4]||(a[4]=e=>D(g)?g.value=e:null),page:l(n).page,"onUpdate:page":a[5]||(a[5]=e=>l(n).page=e),limit:l(n).pagesize,"onUpdate:limit":a[6]||(a[6]=e=>l(n).pagesize=e),onPagination:w},null,8,["total","page","limit"])]),_:1})])],512)}}});const De=ue(he,[["__scopeId","data-v-7bd64948"]]);export{De as default};
import{d as W,r as d,ao as C,ax as q,G as H,a as r,f as F,h as l,c as i,I as D,$ as L,q as v,e as o,b as t,as as Y,H as s,Y as J,t as m,F as X,g as Z,f_ as ee,aj as te,an as oe,ab as ae,b3 as ne,aF as le,cz as se,N as re,b4 as ie,aA as pe,at as de,p as ce,m as _e,_ as ue}from"./index-e450010e.js";import{_ as fe}from"./index-c5018719.js";import{_ as me}from"./refresh-f1723430.js";import{_ as ge}from"./search-71444aff.js";import we from"./lookFlowInfoApp-293e6f1f.js";import"./runFlowStepApp-c2ddd4a0.js";const ye=c=>(ce("data-v-7bd64948"),c=c(),_e(),c),be={ref:"myappbox",class:"app_box"},ke={class:"app-container"},ve={class:"search"},xe=ye(()=>v("div",{class:"titleBox"}," 办事宜 ",-1)),he=W({__name:"myToDoPage",props:{pickAppMenu:{type:Object,default(){return{}}},drawerWith:{type:Number,default:0}},setup(c){const x=c,V=d(!1),h=d(C),T=d([]),n=q({page:1,pagesize:20,class:2,id:x.pickAppMenu.appkey}),g=d(0),z=()=>{n.page=1,n.pagesize=15,n.title="",n.class=2,n.state=0},A=()=>{h.value.resetFields(),z()},I=()=>{ee(n).then(u=>{g.value=u.data.total,T.value=u.data.list})};H(()=>{I()});const w=()=>{I()},E=d(),_=d(!1),B=(u,a)=>{E.value=u,_.value=!0},U=()=>{};return(u,a)=>{const S=te,N=oe,M=ge,y=ae,O=me,P=C,p=ne,b=le,f=se,$=re,R=ie,j=fe,G=pe,K=de;return r(),F("div",be,[l(_)?(r(),i(we,{key:0,isshow:l(_),"onUpdate:isshow":a[0]||(a[0]=e=>D(_)?_.value=e:null),"flow-log-info":l(E),"drawer-with":x.drawerWith,onGetmytodolist:w},null,8,["isshow","flow-log-info","drawer-with"])):L("",!0),v("div",ke,[v("div",ve,[xe,o(P,{ref_key:"searckFormRefTd",ref:h,model:l(n),inline:!0},{default:t(()=>[o(N,{label:"任务标题",prop:"name"},{default:t(()=>[o(S,{modelValue:l(n).title,"onUpdate:modelValue":a[1]||(a[1]=e=>l(n).title=e),placeholder:"请输入任务标题",clearable:"",onKeyup:Y(U,["enter"])},null,8,["modelValue"])]),_:1}),o(N,null,{default:t(()=>[o(y,{type:"primary",onClick:a[2]||(a[2]=e=>w())},{default:t(()=>[o(M),s("搜索")]),_:1}),o(y,{onClick:a[3]||(a[3]=e=>A())},{default:t(()=>[o(O),s("重置")]),_:1})]),_:1})]),_:1},8,["model"])]),o(G,{shadow:"never"},{default:t(()=>[J((r(),i(R,{"element-loading-text":"Loading...","highlight-current-row":"",data:l(T),border:"",class:"table_box"},{default:t(()=>[o(p,{fixed:"",label:"标题",prop:"title",width:"500"}),o(p,{label:"创建人",prop:"creater",width:"150",align:"center"},{default:t(e=>[s(m(e.row.creatorInfo.name)+"(",1),o(b,{type:"info"},{default:t(()=>[s(m(e.row.creatorInfo.number),1)]),_:2},1024),s(") ")]),_:1}),o(p,{label:"发起日期",prop:"startDate",align:"center","min-width":"200"}),o(p,{label:"状态",prop:"status",align:"center",width:"120"},{default:t(e=>[e.row.status==1?(r(),i(f,{key:0,class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 草稿 ")]),_:1})):e.row.status==2?(r(),i(f,{key:1,type:"danger",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 驳回 ")]),_:1})):e.row.status==3?(r(),i(f,{key:2,type:"success",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 审批中 ")]),_:1})):e.row.status==4?(r(),i(f,{key:3,type:"info",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 归档 ")]),_:1})):(r(),i(f,{key:4,type:"info",class:"mx-1",effect:"plain",round:""},{default:t(()=>[s(" 删除 ")]),_:1}))]),_:1}),o(p,{label:"当前节点及操作人",prop:"currentStep",width:"200"},{default:t(e=>[e.row.currentNodeName?(r(),i(b,{key:0,type:"success"},{default:t(()=>[s(m(e.row.currentNodeName)+":",1)]),_:2},1024)):L("",!0),(r(!0),F(X,null,Z(e.row.currentNodeUser,(k,Q)=>(r(),i(b,{key:Q,type:"warning"},{default:t(()=>[s(m(k.name)+"("+m(k.number)+")",1)]),_:2},1024))),128))]),_:1}),o(p,{fixed:"right",align:"center",label:"操作",width:"100"},{default:t(e=>[o($,{class:"box-item",effect:"dark",content:"查看详情",placement:"top-end"},{default:t(()=>[o(y,{type:"primary",size:"small",class:"fa fa-eye",onClick:k=>B(e.row,2)},null,8,["onClick"])]),_:2},1024)]),_:1})]),_:1},8,["data"])),[[K,l(V)]]),o(j,{total:l(g),"onUpdate:total":a[4]||(a[4]=e=>D(g)?g.value=e:null),page:l(n).page,"onUpdate:page":a[5]||(a[5]=e=>l(n).page=e),limit:l(n).pagesize,"onUpdate:limit":a[6]||(a[6]=e=>l(n).pagesize=e),onPagination:w},null,8,["total","page","limit"])]),_:1})])],512)}}});const De=ue(he,[["__scopeId","data-v-7bd64948"]]);export{De as default};

9
src/api/DesignForm/types.ts

@ -52,6 +52,11 @@ export interface FormData {
beforeSubmit?: Function
afterSubmit?: Function
change?: Function
saveEditFormInfo?: Function
saveDraftPage?: Function
sendDraftSubmit?: Function
submitEdit?: Function
anewSubmit?: Function
}
styles:{
divStyle:{},
@ -153,6 +158,8 @@ export interface formOtherData{
}
//表单结构体
export interface formStruct{
tooltip: any
isSearch: any
formData:formData;
editor: any;
loading: boolean;
@ -196,6 +203,8 @@ export interface PublicAtrr{
isNum?:boolean;
inputStyle?:string;
vIf?:any;
selectvalue?:any;
control?:any;
}
//低代码视频单个属性对象
export interface VideoMsg {

2
src/api/doc/space.ts

@ -356,4 +356,4 @@ export function newShareChat(data: any){
},
data: data
});
}
}

125
src/api/javaRequest.ts

@ -0,0 +1,125 @@
import request from "@/utils/request";
const getAssociatedFormsCurrentFieldTree = (data:any) => {
return request({
url: "/javasys/lowCode/AssociatedForms/getFieldTree",
method: "post",
data: {
//cfid:'13'
cfid: data,
},
});
}
const getAssociatedFormsOrgAndManTree = () => {
return request({
url: "/javasys/lowCode/transfer/getOrgAndManTree",
method: "post",
});
}
const getCustomerFormList = () => {
return request({
url: "/javasys/lowCode/AssociatedForms/getCustomerFormList",
method: "post",
});
}
const getAssociatedFormsRoleTree = () => {
return request({
url: "/javasys/lowCode/AssociatedForms/getRoleList",
method: "post",
});
}
const getAsfasfFieldTree = (data:any) => {
return request({
url: "/javasys/lowCode/AssociatedForms/getFieldTree",
method: "post",
data: {
//cfid:'13'
cfid: data,
},
});
}
const getAsfasfFieldTreeOptionsValue3 = (data:any) => {
return request({
url: "/javasys/lowCode/AssociatedForms/getFieldTree",
method: "post",
data: {
//cfid:'13'
cfid: data,
},
});
}
const getQrCodeImgInside = (data:any) => {
return request({
url: "/javasys/lowCode/QrCode/getQrCodeImgInside",
method: "post",
data: {
cfid: data,
},
});
}
const getAllRole = () => {
return request({
url: "/javasys/lowCode/manCont/getAllRole",
method: "get",
});
}
const getPersonByRoleId = (id:any,pageNum:any,pageSize:any,number:any,names:any) => {
return request({
url: "/javasys/lowCode/manCont/getPersonByRoleId",
method: "post",
data: {
id: id,
pageNum: pageNum,
pageSize: pageSize,
number:number,
name:names
},
});
}
const queryIfOrgOrPerson = (obj: { left: string; operator: string; right: string }) => {
return request({
url: "/javasys/lowCode/AssociatedForms/queryIfOrgOrPerson",
method: "post",
data: obj,
});
}
const queryHideRoleCondition = (obj: { left: string; operator: string; right: string }) => {
return request({
url: "/javasys/lowCode/AssociatedForms/queryHideRoleCondition",
method: "post",
data: obj,
});
}
const getMainOrgByWorkNumber = (obj: { workNumber: string}) => {
return request({
url: "/javasys/lowCode/manCont/getMainOrgByWorkNumber",
method: "post",
data: obj,
});
}
const treeUrl = '/javasys/lowCode/transfer/getOrgAndManTree'
const getOrgAndManTree = () => {
return request({
url: treeUrl,
method: 'post',
});
}
export {
getAssociatedFormsCurrentFieldTree,
getAssociatedFormsOrgAndManTree,
getCustomerFormList,
getAssociatedFormsRoleTree,
getAsfasfFieldTree,
getAsfasfFieldTreeOptionsValue3,
getQrCodeImgInside,
getAllRole,
getPersonByRoleId,
queryIfOrgOrPerson,
queryHideRoleCondition,
getMainOrgByWorkNumber,
getOrgAndManTree
}

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

@ -1137,10 +1137,10 @@ watch(
const timeAxisRef = ref(null);
const groupPageRef = ref(null);
const calendarPageRef = ref(null);
const cardPageRef = ref(null);
const timeAxisRef = ref();
const groupPageRef = ref();
const calendarPageRef = ref();
const cardPageRef = ref();
const searchSend = reactive({
formId: props.formId,
page: state.currentPage,
@ -2476,9 +2476,9 @@ const getNonValue = () => {
sortable="custom"
align="center"
>
<template #default="scope">
<template v-for="sunItem in item.children" v-if="item.pattern == 'table'">
<el-table-column v-if="sunItem.fieldClass == ''" :prop="sunItem.field" :label="sunItem.label" header-align="center" align="center" :min-width="readerColumnSun(sunItem)">
<template v-if="item.pattern == 'table'" #default>
<template v-for="sunItem in item.children" :key="sunItem.field">
<el-table-column v-if="sunItem.fieldClass == ''" v-bind="sunItem" :prop="sunItem.field" :label="sunItem.label" header-align="center" align="center" :min-width="readerColumnSun(sunItem)">
<template #default="scopeChilder">
<div v-html="tableChildren(sunItem.field,scopeChilder.row[item.field])"></div>
</template>

5
src/components/DesignForm/app/index_20260129.vue

@ -51,7 +51,7 @@ const props = withDefaults(
formBasicConfig?: any;
fieldsDetailList?: any;
orgAndManTree?: any;
echatsViews: echatsViewStruct;
echatsViews: echatsViewStruct[];
}>(),
{
showPage: true,
@ -173,6 +173,9 @@ const props = withDefaults(
pickAppMenu: () => {
return {};
},
echatsViews: () => {
return [];
},
beforeRequest: (params: any, rout: any):any => {
return
},

182
src/components/DesignForm/assembly/index.ts

@ -306,97 +306,97 @@ export default [
inputStyle: {}
}
},
// {
// type: 'select',
// label: '下拉选择框',
// unitName: '下拉选择框',
// icon: 'select',
// iconFont: 'fa-toggle-down',
// control: {
// modelValue: '',
// appendToBody: true,
// glxxsz: [],
// zdtcsz: {
// tbx: '',
// tby: ''
// },
// optionsValue3Formid:'',
// optionsValue3Field:'',
// },
// options: selectOption,
// config: config,
// styles: {
// divStyle: {
// marginBot: "15"
// },
// labelStyle: {
// //paddingLeft: "7",
// },
// inputStyle: {}
// }
// },
// {
// type: 'cascader',
// label: '级联选择器',
// unitName: '级联选择器',
// icon: 'cascader',
// iconFont: 'fa-sitemap',
// control: {
// modelValue: []
// },
// options: [],
// config: config,
// styles: {
// divStyle: {
// marginBot: "15"
// },
// labelStyle: {
// //paddingLeft: "7",
// },
// inputStyle: {}
// }
// },
// {
// type: 'datePicker',
// label: '日期选择器',
// unitName: '日期选择器',
// icon: 'todo',
// iconFont: 'fa-calendar',
// control: {
// modelValue: '',
// type: 'date'
// },
// config: {},
// styles: {
// divStyle: {
// marginBot: "15"
// },
// labelStyle: {
// //paddingLeft: "7",
// },
// inputStyle: {}
// }
// },
// {
// type: 'timePicker',
// label: '时间选择器',
// unitName: '时间选择器',
// icon: 'time',
// iconFont: 'fa-clock-o',
// control: {
// modelValue: ''
// },
// config: {},
// styles: {
// divStyle: {
// marginBot: "15"
// },
// labelStyle: {
// //paddingLeft: "7",
// },
// inputStyle: {}
// }
// },
{
type: 'select',
label: '下拉选择框',
unitName: '下拉选择框',
icon: 'select',
iconFont: 'fa-toggle-down',
control: {
modelValue: '',
appendToBody: true,
glxxsz: [],
zdtcsz: {
tbx: '',
tby: ''
},
optionsValue3Formid:'',
optionsValue3Field:'',
},
options: selectOption,
config: config,
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
//paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'cascader',
label: '级联选择器',
unitName: '级联选择器',
icon: 'cascader',
iconFont: 'fa-sitemap',
control: {
modelValue: []
},
options: [],
config: config,
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
//paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'datePicker',
label: '日期选择器',
unitName: '日期选择器',
icon: 'todo',
iconFont: 'fa-calendar',
control: {
modelValue: '',
type: 'date'
},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
//paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'timePicker',
label: '时间选择器',
unitName: '时间选择器',
icon: 'time',
iconFont: 'fa-clock-o',
control: {
modelValue: ''
},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
//paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'txt',
label: '文字描述',

1
src/components/DesignForm/dragControlApp.vue

@ -117,6 +117,7 @@ const clone = (origin: any) => {
</script>
<template>
<div class="components-list">
{{props}}
<div v-for="(list, index) in controlList" :key="index" v-memo="[index]">
<div class="title">
{{ list.title }}

6
src/components/DesignForm/formControlPropertiNew.vue

@ -8,7 +8,7 @@ import { reactive, computed, toRefs, ref, watch, inject, onBeforeMount, onMounte
import { getRequest } from "@/api/DesignForm";
import { useDesignFormStore } from "@/store/DesignForm/designForm";
import validate from "./validate";
import validateText from "./validateText";
import { validateTextConfig } from "./validateText";
import validateInt from "./validateInt";
import { ValidateTextTypes } from "@/components/DesignForm/validateText";
import { ElMessage } from "element-plus";
@ -180,7 +180,7 @@ const ValidateText = reactive<ValidateTextTypes>({
*/
const radioVerify = reactive<ValidateTextTypes>({});
const textUinrVerfy = reactive([...validateText]);
const textUinrVerfy = reactive([...validateTextConfig]);
const numberUinrVerfy = reactive([...validateInt]);
const formAttr = computed(() => {
@ -6453,7 +6453,7 @@ const formatTooltip = (val: number) => {
<!-- <div class=""><h3>通用属性</h3></div> -->
<el-divider content-position="left">通用属性</el-divider>
<template v-for="(item, index) in attrList" :key="index">
<template v-for="(item, index) in attrList" :key="icndex">
<!-- <template v-if="item.label == '添加时间水印'">
<el-form-item :label="item.label" v-if="controlData.control.onSiteShot=='1'" class="form_cont">

14
src/components/DesignForm/formVersion.vue

@ -137,16 +137,24 @@ const setColor = (val:number) => {
</template>
<style lang='scss' scoped>
.use-template{
width:250px;
width:310px;
top: 40px;
.list{
padding: 30px 5px;
:deep .el-timeline-item__node--normal{
left: 5px;
top: 10px;
}
:deep .el-card__body{
padding:15px;
// color: #FFF;
}
}
}
.timeLineBox{
height: calc(100vh - 80px);
::v-deep .el-card__body{
padding:5px;
:deep .el-card__body{
padding:15px;
// color: #FFF;
}
}

2
src/components/DesignForm/public/expand/rangedUserTree.vue

@ -25,7 +25,7 @@ const treeData = ref([]) // 存储懒加载的数据
const isDataLoaded = ref(false) //
const loading = ref(false) //
const treeSelectRef = ref() //
const { location, updateLocation } = inject('location')
// const { location, updateLocation } = inject('location')
//
const lastSelectedValue = ref(null)

2
src/components/DesignForm/public/form/childTable.vue

@ -387,7 +387,7 @@ function optionsValue3Get1(data: any, fieldName: string) {
*/
const jisuanTableWidth = (data: any) => {
let width = 0;
console.log("jisuanTableWidth--->计算宽度",data.item.label.length,"---------->",data)
// console.log("jisuanTableWidth--->",data.item.label.length,"---------->",data)
// data.item.label.forEach((item: any) => {
// // width += item.item.span?item.item.span:120;
// });

6
src/components/DesignForm/public/form/formGroup.vue

@ -764,8 +764,8 @@ const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
console.log("获取当前节点授权",currentNodePowerKey)
console.log("获取当前节点授权",allNodePwoer)
// console.log("",currentNodePowerKey)
// console.log("",allNodePwoer)
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
@ -789,7 +789,7 @@ const curNodePowerAry = () => {
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
console.log("判断此组件是否可见",myPower)
// console.log("",myPower)
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {

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

@ -739,7 +739,7 @@ const judgeIsShow = (key: string) => {
@ 功能: 判断是否禁用
*/
const judgeIsDisabled = (key: string) => {
console.log("判断是否禁用", key);
// console.log("", key);
// console.log("-1-->",allNodePwoer)
// console.log("-2-->",currentNodePowerKey)
if (type.value === 3) {
@ -755,7 +755,7 @@ const judgeIsDisabled = (key: string) => {
let myPower = curNodePowerAry()
console.log("测试是否获取授权-3-->",Array.isArray(myPower),myPower)
// console.log("-3-->",Array.isArray(myPower),myPower)
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
@ -764,8 +764,8 @@ const judgeIsDisabled = (key: string) => {
}
})
console.log("判断是否禁用------key------->", key);
console.log("判断是否禁用------isOk------->", isOk);
// console.log("------key------->", key);
// console.log("------isOk------->", isOk);
return isOk
}else{

2
src/components/DesignForm/public/headToolsApp.vue

@ -23,7 +23,7 @@ const props = withDefaults(
}
)
const emits = defineEmits<{(e: 'click', value: string): void}>();
const btnList = computed(() => {
const btnList = computed(() => {
const list = [
{ icon: 'monitor',iconFont:"fa-desktop", label: 'PC端', key: 101 },
{ icon: 'iphone',iconFont:"fa-mobile", label: '手机端', key: 102 },

53
src/components/DesignForm/validateText.ts

@ -57,4 +57,55 @@ const validateTextConfig: ValidateTextTypes[] = [
}
]
export default validateTextConfig
const transferDataSourceOptions = [
{
value: "数据源",
label: "数据源",
},
{
value: "固定选项",
label: "固定选项",
},
];
const locationLevelOptions = [
{
value: "省级",
label: "省级",
},
{
value: "市级",
label: "市级",
},
{
value: "区县级",
label: "区县级",
},
{
value: "详细地址",
label: "详细地址",
},
]
const scanTypes = [
{
value: "QrCode",
label: "二维码",
},
{
value: "OCR",
label: "光学字符识别",
},
];
const optionsCss = [
{ label: "无样式", value: "" },
{ label: "每行两列", value: "form-row-2" },
{ label: "每行三列", value: "form-row-3" },
{ label: "每行四列", value: "form-row-4" },
];
export {
transferDataSourceOptions,
locationLevelOptions,
validateTextConfig,
scanTypes,
optionsCss
}

2
src/utils/DesignForm/index.ts

@ -72,7 +72,7 @@ export const randomString = (len: number) => {
}
export const jsonParseStringify = (val: any) => {
if (typeof val === 'object') {
if (typeof val === 'object') {
return JSON.parse(JSON.stringify(val))
} else {
return val

6
src/utils/request.ts

@ -60,8 +60,8 @@ service.interceptors.request.use(
}
// console.error('请求拦截---------->', randomString)
// console.error('请求拦截----headers------>', headers)
console.log('请求拦截----config---url--->', config.url)
console.log('请求拦截----data------>', data)
// console.log('请求拦截----config---url--->', config.url)
// console.log('请求拦截----data------>', data)
// console.error('请求拦截----config------>', config)
// console.log('请求拦截----content-type------>', config.headers['Content-Type'])
@ -88,7 +88,7 @@ service.interceptors.response.use(
let jsonData = sm4DecryptMethod(data.data, authKey)
response.data.data = JSON.parse(jsonData)
}
console.log('行营结果----解密结构------>', response.data)
// console.log('行营结果----解密结构------>', response.data)
const { code, msg } = response.data;
if (code === 0 || code === 200 || code === 10001) {
return response.data;

1
src/utils/workflow/const.ts

@ -57,7 +57,6 @@ export let notAsA_BasisForJudgment = [
"textarea",
"timePicker",
"colorPicker",
"switch",
"inputNumber",
"cascader",
"rate",

2
src/views/dashboard/components/allorgyear.vue

@ -38,7 +38,7 @@ const orgChartDrowData = () => {
yearsInfo.value = timeYears;
let sendInfo = {
orgid: curreorgId.value.toString(),
years: timeYears
years: timeYears.toString()
};
orgTargetAnnualStatistics(sendInfo).then((data: any) => {
// console.log(" props.dlyear.data", data)

1
src/views/login/index.vue

@ -38,6 +38,7 @@
:type="passwordVisible === false ? 'password' : 'input'"
size="large"
name="password"
show-password
@keyup="checkCapslock"
@keyup.enter="handleLogin"
/>

3
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue

@ -29,6 +29,7 @@ import {
previewAppFormVersion,
} from "@/api/DesignForm/requestapi";
import { treeStruct } from "@/api/DesignForm/type";
import { afterResponse, beforeRequest, onChange } from '@/api/DesignForm/utils'
//
import DragControlApp from "@/components/DesignForm/dragControlApp.vue";
@ -97,7 +98,7 @@ const state = computed({
},
});
const formControlAttrEl = ref(null);
const formControlAttrEl = ref();
provide("formDesignType", state.value.designType);
const appFormKeyVal = computed({

862
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFormNew.vue

@ -4,7 +4,31 @@
@ 备注: 表单编辑页面
-->
<script lang='ts' setup>
import { FormData, formStruct, DrawerStruct, VideoMsg } from "@/api/DesignForm/types";
import { formStruct, DrawerStruct } from "@/api/DesignForm/types";
import {
json2string,
objToStringify,
string2json,
stringToObj,
} from "@/utils/DesignForm/form";
import {
createAppForm,
editAppPageInfo,
getOneProductionForm,
haveCustomerFormVersion,
previewAppFormVersion,
saveOtherVersion,
} from "@/api/DesignForm/requestapi";
import { afterResponse, beforeRequest, onChange } from '@/api/DesignForm/utils'
import Control from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/control.vue";
import Design from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/design.vue";
import Attribute from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue";
import { customerFormVersionCont, treeStruct } from "@/api/DesignForm/type";
import { useRoute } from "vue-router";
import { useDesignFormStore } from "@/store/DesignForm/designForm";
import PreviewPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/previewPage.vue";
const props = defineProps({
appCont: {
@ -40,9 +64,28 @@ const props = defineProps({
},
},
state: {
type: Object,
type: Object as () => formStruct,
default() {
return {};
return {
tooltip: {},
isSearch: false,
formData: {
list: [],
form: {},
config: {},
styles: {},
purview: [],
aiConfig: [],
},
editor: {},
loading: false,
formDataPreview: {},
previewVisible: false,
designType: '',
formDict: {},
formOtherData: {},
echatsViews: [],
};
},
},
});
@ -56,34 +99,711 @@ const emits = defineEmits<{
(e: "runNextWindows", val: number): void;
(e: "closeFormPage"): void;
}>();
const isWeb = ref(false);
const route: any = useRoute().query || {};
const versionCont = ref<customerFormVersionCont[]>([]); //
const formControlAttrEl = ref();
const isEdit = ref(false);
const versionId = ref<string>(""); //
const state = computed({
get() {
return props.state;
},
set(val: formStruct) {
emits("update:state", val);
},
});
const appFormKeyVal = computed({
get() {
return props.formKey;
},
set(val: string) {
emits("update:formKey", val);
},
});
const controlData = computed(() => {
// console.log("----------------->",props.formInfo)
// console.log("--------1--------->",store.controlAttr)
// console.log("---------3-------->",controlData.value.customRules)
return store.controlAttr;
});
const formFieldAry = ref<string[]>([]);
const sunFormFieldAry = ref<string[]>([]);
const drawer = reactive<DrawerStruct>({
visible: false,
type: "",
title: "",
codeType: "",
direction: undefined, //rtl / ltr
callback: "",
});
const store = useDesignFormStore() as any;
/**
@ 作者: 秦东
@ 时间: 2026-02-24 13:39:25
@ 功能: 获取表单内容
*/
const gainTableForm = () => {
if (props.appPageKey) {
isEdit.value = true;
state.value.loading = true;
getOneProductionForm({ id: props.appPageKey.toString() })
.then((res: any) => {
if (res.code == 0) {
const result = res.data;
// console.log("--1--->", result);
formFieldAry.value = result.formField;
sunFormFieldAry.value = result.tableStructureMap;
// res.data=''
if (result.mastesform) {
state.value.formData = stringToObj(result.mastesform);
}
// console.log("",state.value.formData)
if (result.mastesformjson) {
let kjdkjksd = string2json(result.mastesformjson);
// console.log("-begin-->",state.value.formData.purview)
state.value.formData.purview = kjdkjksd.purview;
if (kjdkjksd.aiConfig) {
state.value.formData.aiConfig = kjdkjksd.aiConfig;
} else {
state.value.formData.aiConfig = [];
}
// console.log("--->",kjdkjksd)
}
state.value.formData.config.groupKey = result.groupKey;
state.value.formData.config.classify = result.classify;
// console.log("--end->",state.value.formData)
state.value.formDict = string2json(result.dict);
//
state.value.formOtherData.source = result.source;
state.value.formOtherData.formName = result.name;
state.value.formOtherData.formName = result.name;
state.value.formData.form.name = result.tablekey;
state.value.formData.form.formName = result.name;
if (result.source && state.value.designType !== "search") {
//
formControlAttrEl.value.getFormFieldBySource(result.source);
}
if (result.flowIsOpen != 1) {
emits("judgeFormIsEdit", false);
} else {
emits("judgeFormIsEdit", true);
}
emits("update:formVersion", result.id.toString());
} else {
ElMessage.error(res.msg || "加载异常");
}
state.value.loading = false;
})
.finally(() => {
haveCustomerFormVersion({ id: state.value.formData.form.name }).then(
({ data }) => {
versionCont.value = data;
if (data.length > 0) {
data.forEach((item: any) => {
if (item.status == 1) {
versionId.value = item.id.toString();
emits("update:formVersion", item.id.toString());
}
});
}
}
);
})
.catch((res: any) => {
// console.log(res)
ElMessage.error(res.msg || "加载异常");
state.value.loading = false;
});
}
};
/**
@ 作者: 秦东
@ 时间: 2024-05-09 14:29:06
@ 功能: 根据启用版本进行加载页面
*/
const versionUpdateForm = (val: string) => {
// console.log("-------111------->",val)
versionId.value = val;
gainTableForm();
};
/**
@ 作者: 秦东
@ 时间: 2026-02-24 13:42:25
@ 功能: 预览版本
*/
const versionPreviewPage = (val: string) => {
if (val) {
versionId.value = val;
previewAppFormVersion({ id: val }).then((res: any) => {
if (res.code == 0) {
const result = res.data;
// console.log("--1--->",result)
formFieldAry.value = result.formField;
sunFormFieldAry.value = result.tableStructureMap;
// res.data=''
if (result.mastesform) {
state.value.formData = stringToObj(result.mastesform);
}
// console.log("",state.value.formData)
if (result.mastesformjson) {
let kjdkjksd = string2json(result.mastesformjson);
// console.log("-begin-->",state.value.formData.purview)
state.value.formData.purview = kjdkjksd.purview;
// console.log("--->",kjdkjksd)
}
state.value.formData.config.groupKey = result.groupKey;
// console.log("--end->",state.value.formData)
state.value.formDict = string2json(result.dict);
//
state.value.formOtherData.source = result.source;
state.value.formOtherData.formName = result.name;
state.value.formOtherData.formName = result.name;
state.value.formData.form.name = result.tablekey;
state.value.formData.form.formName = result.name;
if (result.source && state.value.designType !== "search") {
//
formControlAttrEl.value.getFormFieldBySource(result.source);
}
if (result.flowIsOpen != 1) {
emits("judgeFormIsEdit", false);
} else {
emits("judgeFormIsEdit", true);
}
} else {
ElMessage.error(res.msg || "加载异常");
}
state.value.loading = false;
});
}
};
/**
@ 作者: 秦东
@ 时间: 2026-02-24 15:41:53
@ 功能: 关联选项设置
*/
function optionsValue3Get3(data: any, fieldName: string) {
/* console.log("pageForm", "optionsValue3Get3");
console.log(state.value.formData.list);
console.log(data);
console.log(fieldName); */
for (let i = 0; i < state.value.formData.list.length; i++) {
if (state.value.formData.list[i].name == fieldName) {
state.value.formData.list[i].options = [];
for (let j = 0; j < data.length; j++) {
state.value.formData.list[i].options.push(data[j]);
}
}
}
}
/**
@ 作者: 秦东
@ 时间: 2024-05-15 14:07:39
@ 功能: 编辑App自定义表单
*/
interface AsfRelation {
bgldbdId: string;
asfByTablekey: string;
glbdzjm: string;
}
function saveRefreshFormControlAttr1() {
formControlAttrEl.value.saveRefreshFormControlAttr();//
}
const asfHandler = () => {
/*
relationArr
当relationArr不为空时,说明本表单关联了其他表单,可以获取到所有被关联的表单id
1.按照被关联的表单id更新asf_relation表,用glbdzjm和asf_by_tablekey可以唯一确定一个关联关系,如果没有该关联关系,则新增,如果有,则update
2.按照被关联的表单id更新asf_config表,若无该id对应记录,则新增
*/
/*
asf_config.datatitle ####################
因为当前保存的表单并不是以被关联表单身份提供的datatitle,而数据库表中的datatitle是被关联表单身份的
所以把这个datatitle传到后端,并查询asf_config表中是否已存在本表,若已存在,则更新相应的数据标题记录
asf_config.all_fields ####################
表单的所有字段标识数组,["a","b","c"]的形式存储
注意:即使保存的表单没有关联其他表单,也应执行上述操作
*/
let configDataTitle_arr = state.value.formData.form.dataTitle
let configDataTitle = configDataTitle_arr.join(',');
// console.log("config----->"+configDataTitle_arr)
let relationArr: AsfRelation[] = []
let configAllFields_arr:String[] = []
state.value.formData.list.forEach((element:any) => {
if(element.type=="associatedForms"){
let obj:AsfRelation = {
bgldbdId: element.control.formid,
asfByTablekey: element.control.glbbddbd,
glbdzjm: element.name,
}
relationArr.push(obj)
}
configAllFields_arr.push(element.name)
});
let configAllFields = configAllFields_arr.join(',');
// console.log("config----->"+configAllFields_arr)
let configBgldbdtableKey = state.value.formData.form.name
// console.log("configtablekey----->"+configBgldbdtableKey)
// console.log(relationArr)
const attrActiveTab = ref("first");
/*
当state.value.formData.list中存在state.value.formData.list[i].type=="associatedForms"
对每个符合条件的元素进行条件拼装,成为一个对象数组
*/
// console.log(state.value.formData)
}
const editAppFormTable = () => {
asfHandler()
let sendData: any = {
jsondata: JSON.stringify(state.value.formData),
data: objToStringify(state.value.formData),
source: state.value.formOtherData.source, //
name: state.value.formOtherData.formName, //
type: 4, // 1 2
dict: json2string(state.value.formDict),
appKey: appFormKeyVal.value,
groupKey: props.groupKey,
id: props.appPageKey.toString(),
version: versionId.value.toString(),
menuId: props.menuId,
};
state.value.loading = true;
// console.log("App",sendData)
editAppPageInfo(sendData)
.then((data: any) => {
state.value.loading = false;
// console.log("App--->",data)
emits("update:formVersion", versionId.value.toString());
gainTableForm();
})
.finally(() => {
state.value.loading = false;
saveRefreshFormControlAttr1();
});
};
/**
@ 作者: 秦东
@ 时间: 2024-05-15 13:58:21
@ 功能: 写入自建应用App表单
*/
const saveAppFormData = () => {
let sendData: any = {
jsondata: JSON.stringify(state.value.formData),
data: objToStringify(state.value.formData),
source: state.value.formOtherData.source, //
name: state.value.formOtherData.formName, //
type: 4, // 1 2 3:app 4app
dict: json2string(state.value.formDict),
appKey: appFormKeyVal.value,
groupKey: props.groupKey,
menuId: props.menuId,
appSignCode: props.formconfigcont.signCode,
};
state.value.loading = true;
// console.log("App",sendData)
createAppForm(sendData)
.then((data: any) => {
state.value.loading = false;
// console.log("App--->",data)
// appPageKey.value = data.data.customerFormCont.id
// appPageKey.set(data.data.customerFormCont.id.toString())
versionId.value = data.data.formVersion.id.toString();
emits("update:formVersion", data.data.formVersion.id.toString());
emits("update:appPageKey", data.data.customerFormCont.id.toString());
// emits('update:formVersion', data.data.version.toString())
// console.log("App-11111-->",data.data.customerFormCont.id)
// console.log("App-2222-->",props.appPageKey)
// emits('update:appPageKey', data.data.customerFormCont.id.toString())
gainTableForm();
})
.finally(() => {
state.value.loading = false;
});
};
/**
@ 作者: 秦东
@ 时间: 2024-05-20 16:24:23
@ 功能: 保存为其他版本
*/
const saveOtherVersionIng = () => {
let sendData: any = {
jsondata: JSON.stringify(state.value.formData),
data: objToStringify(state.value.formData),
source: state.value.formOtherData.source, //
name: state.value.formOtherData.formName, //
type: 4, // 1 2 3:app 4app
dict: json2string(state.value.formDict),
appKey: appFormKeyVal.value,
groupKey: props.groupKey,
menuId: props.menuId,
appSignCode: props.formconfigcont.signCode,
};
state.value.loading = true;
saveOtherVersion(sendData)
.then((data: any) => {
state.value.loading = false;
// console.log("--->",data)
emits("update:formVersion", data.data.version.toString());
gainTableForm();
})
.finally(() => {
state.value.loading = false;
});
};
/**
@ 作者: 秦东
@ 时间: 2026-02-25 10:51:57
@ 功能: 执行哪个按钮的操作
*/
const buttonCallbackEvent = (type: string) => {
console.log("执行哪个按钮的操作",type);
switch (type) {
case "del": //
state.value.formData.list = [];
store.setActiveKey("");
store.setControlAttr({});
break;
case "eye": //
store.setActiveKey("");
store.setControlAttr({});
let stringPreview = objToStringify(state.value.formData); //
const formName = state.value.formData.form.name;
const reg = new RegExp(`get${formName}ControlByName`, "g");
stringPreview = stringPreview.replace(reg, `getPreview${formName}ControlByName`);
state.value.formDataPreview = stringToObj(stringPreview);
state.value.formDataPreview.form.name = `Preview${formName}`; //
// console.log("",state.value.formDataPreview);
state.value.previewVisible = true;
break;
case "json": //
openAceEditDrawer({
direction: "rtl",
content: state.value.formData,
title: "可编辑修改或将已生成的脚本粘贴进来",
});
break;
case "save": //
if (props.appPageKey && props.appPageKey != "") {
//
editAppFormTable();
} else {
//
saveAppFormData();
}
break;
case "branch": //
saveOtherVersionIng();
case "monitor":
isWeb.value = false;
// console.log("monitor",isWeb); //
break;
case "iphone":
isWeb.value = true;
// console.log("iphone",isWeb); //
break;
}
}
/**
@ 作者: 秦东
@ 时间: 2026-02-25 11:22:02
@ 功能: 打开脚本预览
*/
const openAceEditDrawer = (params: any) => {
// console.log("====:", params);
const { type, direction, codeType, title, callback, content } = params;
drawer.direction = direction; // ltr/rtl
drawer.type = type; // type
drawer.codeType = codeType || ""; //
drawer.title = title ? `提示:${title}` : "";
drawer.visible = true;
drawer.callback = callback;
let editData =
codeType === "json" ? json2string(content, true) : objToStringify(content, true);
// console.log("===1=:", type, editData);
switch (type) {
case "css":
editData = state.value.formData.config?.style || "";
break;
case "dict":
//
editData = json2string(state.value.formDict, true);
break;
case "cascader":
// console.log("==2=2=:", stringToObj(editData));
editData = stringToObj(editData);
break;
case "treeSelect":
let kvjData = stringToObj(editData);
// console.log("==2=2=:", editData, kvjData);
// editData = stringToObj(editData);
if (kvjData == "" || kvjData == null || kvjData == undefined) {
editData = [];
// console.log("==2=4=:", kvjData);
} else {
editData = stringToObj(editData);
// console.log("==2=5=:", editData);
}
// console.log("==2=3=:", editData);
break;
case "beforeRequest":
case "beforeSubmit":
case "afterResponse":
case "afterSubmit":
case "change":
// eslint-disable-next-line no-case-declarations
const beforeData = state.value.formData.events || {};
if (beforeData[type]) {
editData = objToStringify(beforeData[type], true);
} else {
if (["afterResponse", "afterSubmit"].includes(type)) {
editData = afterResponse;
} else if (type === "change") {
editData = onChange;
} else {
editData = beforeRequest;
}
}
break;
// case 'afterResponse':
// case 'afterSubmit':
// const newData = state.formData.events || {}
// if (newData[type]) {
// editData = objToStringify(newData[type], true)
// } else {
// editData = afterResponse
// }
// break
case "optionsParams":
if (!content) {
editData = beforeRequest;
}
break;
case "optionsResult":
if (!content) {
editData = afterResponse;
}
break;
}
drawer.content = editData;
// console.log("==2=222=:", drawer.content);
};
/**
@ 作者: 李文轩
@ 时间: 2026-02-25 11:26:46
@ 功能: 关联选项设置 修复bug:当字段标识改变时关联选项设置的字段标识未同步更改
*/
const formNameChanged = (param1: any) => {
for (let i = 0; i < state.value.formData.list.length; i++) {
if (
state.value.formData.list[i].type == "radio" ||
state.value.formData.list[i].type == "select" ||
state.value.formData.list[i].type == "checkbox"
) {
if (
state.value.formData.list[i].control.glxxsz != undefined &&
state.value.formData.list[i].control.glxxsz.length > 0
) {
state.value.formData.list[i].control.glxxsz = [];
state.value.formData.list[i].options.push({
label: "",
value: "",
});
state.value.formData.list[i].options.pop();
}
if (
state.value.formData.list[i].control.glxxszForCheckBox != undefined &&
state.value.formData.list[i].control.glxxszForCheckBox.length > 0
) {
state.value.formData.list[i].control.glxxszForCheckBox = [];
}
}
}
// ElMessage({
// message: '',
// type: 'warning',
// })
};
/**
@ 作者: 秦东
@ 时间: 2024-05-15 13:14:40
@ 功能: 关闭预览
*/
const closePreviewPage = () => {
// console.log("")
state.value.previewVisible = false;
};
/**
@ 作者: 秦东
@ 时间: 2024-05-15 13:28:57
@ 功能: 关闭脚本预览窗并初始化脚本预览参数
*/
const dialogCancel = () => {
drawer.visible = false;
drawer.type = "";
drawer.title = "";
drawer.codeType = "";
drawer.callback = "";
drawer.content = "";
};
// 3174.15 2924.57 3326.15 3119.33
const dialogConfirm = (editVal: string) => {
// jsonstate.formData
// console.log("", editVal);
// console.log(
// "----->",
// drawer.type,
// "==========",
// drawer.callback,
// "==========",
// drawer
// );
// console.log("===========>", state.value.formData);
try {
if (typeof drawer.callback === "function") {
// console.log("1======2========>", drawer.codeType, stringToObj(editVal));
// callback
const newObj =
drawer.codeType === "json" ? string2json(editVal) : stringToObj(editVal);
drawer.callback(newObj);
// console.log("1==============>");
} else {
switch (drawer.type) {
case "css":
//
if (!state.value.formData.config) {
state.value.formData.config = {};
}
state.value.formData.config.style = editVal;
// console.log("2==============>");
break;
case "dict":
state.value.formDict = string2json(editVal);
break;
case "beforeRequest":
case "beforeSubmit":
case "afterResponse":
case "afterSubmit":
case "closeSubmit":
case "change":
if (!state.value.formData.events) {
state.value.formData.events = {};
}
state.value.formData.events[drawer.type] = stringToObj(editVal);
// console.log("3==============>");
break;
default:
state.value.formData = stringToObj(editVal);
// console.log("4==============>");
}
}
dialogCancel();
} catch (res:any) {
// console.log(res.message)
ElMessage.error(res.message);
}
};
/**
@ 作者: 秦东
@ 时间: 2024-09-27 16:53:30
@ 功能: 级联选择与树
*/
const dialogConfirmTree = (content: string) => {
// console.log("", content);
try {
const newObj = drawer.codeType === 'json' ? string2json(content) : stringToObj(content);
// console.log("--->", controlData);
if (typeof drawer.callback === "function") {
drawer.callback(newObj);
} else {
//
// newObj
controlData.value.control = {};
Object.assign(controlData.value.control, newObj);
}
} catch (error) {
console.error("处理树选择数据失败:", error);
}
drawer.visible = false;
};
defineExpose({
gainTableForm,
});
onMounted(() => {
if (route.source) {
formControlAttrEl.value.getFormFieldBySource(route.source);
}
gainTableForm();
});
</script>
<template>
<ace-drawer
v-model="drawer.visible"
:title="drawer.title"
:direction="drawer.direction"
:content="drawer.content"
:code-type="drawer.codeType"
:data="drawer"
@before-close="dialogCancel"
@confirm="dialogConfirm"
@confirm-tree="dialogConfirmTree"
/>
<PreviewPage v-model:state="state" :is-web="isWeb" @click-close="closePreviewPage" />
<div class="form-content">
<el-card shadow="always">
<template #header>
<div class="card-header">控件库</div>
</template>
<el-scrollbar ref="scrollbarRef" class="scroBox ">
</el-scrollbar>
</el-card>
<el-card shadow="always">
<template #header>
<div class="card-header">控件库</div>
</template>
</el-card>
<el-card shadow="always">
<template #header>
<div class="card-header">控件库</div>
</template>
<el-tabs v-model="attrActiveTab">
<el-tab-pane label="字段设置" name="first">字段设置</el-tab-pane>
<el-tab-pane label="表单设置" name="second">表单设置</el-tab-pane>
<el-tab-pane label="AI设置" name="third">AI设置</el-tab-pane>
</el-tabs>
</el-card>
<Control
:table-key="state.formData.form.name"
@version-update-form="versionUpdateForm"
@version-preview-page="versionPreviewPage"
/>
<Design
v-model:is-web="isWeb"
:type="5"
:form-data="state.formData"
:dict="state.formDict"
@options-value3-get3="optionsValue3Get3"
@click="buttonCallbackEvent"
/>
<Attribute
ref="formControlAttrEl"
v-model:formOtherData="state.formOtherData"
:form-data="state.formData.form"
:form-config="state.formData.config"
:customerformid="props.appPageKey"
:form-list="state.formData.list"
:form-info="state.formData"
:is-edit="isEdit"
:form-field="formFieldAry"
:sun-form-field="sunFormFieldAry"
:state="state"
@open-dialog="openAceEditDrawer"
@form-name-change="formNameChanged"
/>
</div>
</template>
<style lang='scss' scoped>
@ -94,7 +814,30 @@ const attrActiveTab = ref("first");
grid-template-rows: auto;
gap: 10px;
padding: 10px 10px 0 10px;
height: calc(100vh - 50px);
:deep .el-tabs--border-card{
border: 0;
}
:deep .el-card__header{
padding: 10px 15px;
background-color: #f5f7fa;
}
:deep .el-card__body{
padding: 0;
}
:deep .el-tabs__header{
justify-content: space-between;
// width: 100%;
}
:deep .is-active{
border-bottom: 1px solid var(--el-color-primary);
}
}
.cardHeader{
display: flex;
justify-content: space-between;
align-items: center;
}
.card-header{
font-size: 1.4rem;
@ -104,20 +847,63 @@ const attrActiveTab = ref("first");
align-items: center;
gap: 10px;
}
:deep .el-card__header{
padding: 10px 15px;
}
:deep .el-card__body{
padding: 0;
}
:deep .el-tabs__header{
justify-content: space-between;
width: 100%;
.category-title {
font-size: 14px;
font-weight: 600;
color: #165DFF;
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom: 1px solid #ebeef5;
}
.scroBox{
height: calc(100vh - 110px);
overflow: auto;
}
//
.unitBox{
padding: 10px 15px;
}
.unitBody{
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}
.unitItem{
background: #f5f7fa;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 10px 5px; /* 减小内边距以适应3列布局 */
text-align: center;
cursor: grab;
transition: all 0.2s;
display: flex;
flex-direction: column;
align-items: center;
&:hover{
background: #ecf5ff;
transform: translateY(-2px);
box-shadow: 0 2px 12px 0 rgba(22, 93, 255, 0.1);
border-color: #b3d8ff;
color: #165DFF;
}
}
.control-icon {
font-size: 25px; /* 减小图标大小以适应3列布局 */
color: #165DFF;
margin-bottom: 3px; /* 减小间距以适应3列布局 */
}
.control-name {
font-size: 12px; /* 减小字体大小以适应3列布局 */
color: #606266;
line-height: 1.2;
}
//
//
</style>

8527
src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue

File diff suppressed because it is too large

257
src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/control.vue

@ -0,0 +1,257 @@
<!--
@ 作者: 秦东
@ 时间: 2026-02-24 13:22:18
@ 备注: 控件库
-->
<script lang='ts' setup>
import controlListData from "@/components/DesignForm/assembly";
import { jsonParseStringify } from "@/utils/DesignForm";
import Draggable from "vuedraggable-es";
import "@/assets/iconfont/iconfont.css";
import SvgIcon from "@/components/SvgIcon/index.vue";
import FormVersion from "@/components/DesignForm/formVersion.vue";
const props = defineProps({
tableKey: {
type: String,
default: ""
},
signCode: {
type: String,
default: ""
}
})
// const props = withDefaults(
// defineProps<{
// tableKey?: number | string;
// signCode?: number | string;
// }>(),
// {}
// );
const emits = defineEmits<{
(e: "versionUpdateForm", value: string): void;
(e: "versionPreviewPage", value: string): void;
}>();
const designType = inject("formDesignType") as string; // ( app.provide())
const versionActiveTab = ref(false);
const tableVersion = ref(); //
const isSearch = computed(() => {
return designType === "search";
});
//
const searchField = [
"input",
"radio",
"checkbox",
"select",
"datePicker",
"timePicker",
"inputNumber",
"cascader",
"component",
"button",
];
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:36:59
@ 功能: 启用和禁用版本
*/
const enableOrDisable = (val?: any) => {
// console.log("",val)
emits("versionUpdateForm", val);
};
/**
@ 作者: 秦东
@ 时间: 2024-05-21 09:05:20
@ 功能: 预览版本
*/
const previewPage = (val?: any) => {
emits("versionPreviewPage", val);
};
/**
@ 作者: 秦东
@ 时间: 2026-02-24 13:45:38
@ 功能: 表单组件数据
*/
const controlList = computed(() => {
if (designType === "search") {
//
const temp: any = [];
controlListData.forEach((item: any) => {
if (item.children) {
const filter = item.children.filter((ch: any) => {
return searchField.includes(ch.type);
});
if (filter && filter.length) {
temp.push({ title: item.title, children: filter });
}
}
});
return temp;
} else {
return controlListData;
}
});
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:40:15
@ 功能: 打开版本选择页面
*/
const useVersionClick = () => {
tableVersion.value.open();
};
/**
@ 作者: 秦东
@ 时间: 2024-05-15 10:15:14
@ 功能: 克隆选中的组件数据结构
*/
const clone = (origin: any) => {
// console.log("",origin)
return jsonParseStringify(origin);
};
</script>
<template>
<el-card shadow="always">
<template #header>
<div class="cardHeader">
<div class="card-header">控件库</div>
<div v-if="!isSearch" class="card-headerRight" @click="useVersionClick">版本管理</div>
</div>
</template>
<el-scrollbar ref="scrollbarRef" class="scroBox ">
<div v-for="(list, index) in controlList" :key="index" v-memo="[index]" class="unitBox">
<el-text class="category-title">{{ list.title }}</el-text>
<el-divider style="margin: 5px 0 10px 0;" />
<div class="unitBody">
<Draggable
v-model="list.children"
tag="ul"
:group="{ name: 'form', pull: 'clone', put: false }"
ghost-class="ghost"
:sort="false"
:clone="clone"
itemKey="unitListKey"
>
<template #item="{ element }">
<div class="unitItem">
<SvgIcon v-if="element.iconFont == ''" icon-class="caogaoxiang" class="control-icon" />
<i v-if="element.iconFont != ''" :class="`fa ${element.iconFont} `"></i>
<el-text class="control-name">{{element.label}}</el-text>
</div>
</template>
</Draggable>
</div>
</div>
</el-scrollbar>
<FormVersion
ref="tableVersion"
:table-key="props.tableKey"
:sign-code="props.signCode"
@enable-or-disable="enableOrDisable"
@preview-page="previewPage"
/>
</el-card>
</template>
<style lang='scss' scoped>
.form-content {
width: 100%;
display: grid;
grid-template-columns: 300px 1fr 300px;
grid-template-rows: auto;
gap: 10px;
padding: 10px 10px 0 10px;
:deep .el-tabs--border-card{
border: 0;
}
:deep .el-card__header{
padding: 10px 15px;
background-color: #f5f7fa;
}
:deep .el-card__body{
padding: 0;
}
:deep .el-tabs__header{
justify-content: space-between;
width: 100%;
}
:deep .is-active{
border-bottom: 1px solid var(--el-color-primary);
}
}
.cardHeader{
display: flex;
justify-content: space-between;
align-items: center;
}
.card-header{
font-size: 1.4rem;
font-weight: 700;
color: #0020C2;
display: flex;
align-items: center;
gap: 10px;
}
.category-title {
font-size: 14px;
font-weight: 600;
color: #165DFF;
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom: 1px solid #ebeef5;
}
.scroBox{
height: calc(100vh - 110px);
overflow: auto;
}
//
.unitBox{
padding: 10px 15px;
}
.unitBody ul{
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}
.unitItem{
background: #f5f7fa;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 10px 5px; /* 减小内边距以适应3列布局 */
text-align: center;
cursor: grab;
transition: all 0.2s;
display: flex;
flex-direction: column;
align-items: center;
&:hover{
background: #ecf5ff;
transform: translateY(-2px);
box-shadow: 0 2px 12px 0 rgba(22, 93, 255, 0.1);
border-color: #b3d8ff;
color: #165DFF;
}
i{
font-size: 20px; /* 减小图标大小以适应3列布局 */
color: #165DFF;
margin: 5px 0; /* 减小间距以适应3列布局 */
}
}
.control-icon {
font-size: 25px; /* 减小图标大小以适应3列布局 */
color: #165DFF;
margin-bottom: 3px; /* 减小间距以适应3列布局 */
}
.control-name {
font-size: 12px; /* 减小字体大小以适应3列布局 */
color: #606266;
line-height: 1.2;
}
</style>

3520
src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/design.vue

File diff suppressed because it is too large

8
src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue

@ -251,7 +251,7 @@ onBeforeMount(() => {
</div>
</el-header>
<el-container>
<!-- <NewPageForm
<NewPageForm
v-if="tabsActive == 1"
ref="appPageInfo"
v-model:state="state"
@ -262,8 +262,8 @@ onBeforeMount(() => {
:menu-id="menuId"
:group-key="props.groupKey"
:formconfigcont="formConfigCont"
/> -->
<PageForm
/>
<!-- <PageForm
v-if="tabsActive == 1"
ref="appPageInfo"
v-model:state="state"
@ -274,7 +274,7 @@ onBeforeMount(() => {
:menu-id="menuId"
:group-key="props.groupKey"
:formconfigcont="formConfigCont"
/>
/> -->
<PageFlow
v-if="tabsActive == 2"
v-model:state="state"

23
src/views/sysworkflow/lowcodepage/pageFlow/flowStep.vue

@ -37,6 +37,10 @@ const props = defineProps({
nextStep:{
type:Number,
default:0
},
loading:{
type:Boolean,
default:false
}
})
const presetPersonnel = ref<any>([]); //
@ -49,6 +53,7 @@ const flowList = computed<any>({
emits("update:flowMap", val);
},
});
const flowLoading = computed(() => props.loading)
watch(()=>props.flowMap,(val:any)=>{
emits("update:flowMap", val);
@ -58,11 +63,15 @@ onMounted(()=>{
})
//
const judgeAddUser = (val:any):boolean =>{
console.log("val----->",val)
console.log("判断是否有增加人员按钮----->",val)
if(val.customNode == "beginnode"){
val.runscope = val.runscope!=0?val.runscope:1
return true
}
console.log("判断是否有增加人员按钮--isArray--->",Array.isArray(val.operator))
if(!Array.isArray(val.operator)){
return true
}
switch(val.runtype){
case 1:
val.runscope = val.runscope!=0?val.runscope:1
@ -104,6 +113,8 @@ const addPeople = (val:any) =>{
selectedPeople.value = val.operator
if(val.runscope == 1){
openclosebox.value = true
}if(val.runscope == 0){
openclosebox.value = true
}else{
openOrClose.value = true
}
@ -131,7 +142,7 @@ const updateNode = (val:any) =>{
@ 功能: 判断审批节点样式
*/
const judgeNodeClass = (val:number,stepVal:number):string => {
console.log("判断审批节点样式",val,stepVal)
// console.log("",val,stepVal)
switch(val){
case 1:
if(props.currentProgress == stepVal){
@ -160,7 +171,7 @@ const judgeNodeClass = (val:number,stepVal:number):string => {
}
</script>
</script>
<template >
<el-card shadow="always">
<template #header>
@ -169,9 +180,9 @@ const judgeNodeClass = (val:number,stepVal:number):string => {
审批流程
</div>
</template>
<el-scrollbar :class="ifSendFlow?'flowBody':'flowBodyNofoot'">
<el-scrollbar v-loading="flowLoading" element-loading-text="Loading..." element-loading-background="rgba(122, 122, 122, 0.8)" :class="ifSendFlow?'flowBody':'flowBodyNofoot'">
<div class="approval-steps">
<div class="approval-steps">
<div v-for="item in flowList" :key="item.step" :class="['step', judgeNodeClass(item.type,item.step)]">
<div class="step-icon">
<SvgIcon v-if="item.type==0" icon-class="faqiren" size="25" />
@ -181,7 +192,7 @@ const judgeNodeClass = (val:number,stepVal:number):string => {
<!--SvgIcon v-else icon-class="shenpi" size="25" /-->
</div>
<div class="step-content">
<h3 class="step-title">{{item.nodeName}}</h3>
<h3 class="step-title">{{item.nodeName}}{{ props.currentProgress }}</h3>
<div v-for="items in item.operator" :key="items.id" class="flowLogBox">
<div >

37
src/views/sysworkflow/lowcodepage/pageFlow/newTableFlow.vue

@ -142,16 +142,16 @@ const getTaskFormData = () => {
drawLoading.value = true
echoTableFormPage({ id: props.versionid.toString() })
.then(({ data }) => {
console.log("表单数据",data)
// console.log("",data)
let extraW=0;
if (data.tableFormPage.flowIsOpen == 1 && data.tableFormPage.flowkeystr != "0") {
isFlowTable.value = true;
// drawbox.value = 800 + 350;
console.error("存在流程----》",extraW)
// console.error("----",extraW)
} else {
isFlowTable.value = false;
// drawbox.value = 800;
console.error("不存在流程----》",extraW)
// console.error("----",extraW)
}
if(isFlowTable.value){
@ -167,7 +167,7 @@ const getTaskFormData = () => {
nodeKey.value = data.flowPage.nodeKey?data.flowPage.nodeKey:"";
purviewAry.value = data.tableFormPage.powerAry;
gainFlowChart.id = data.tableFormPage.flowkeystr;
console.log("表单数据--->1", data.flowPage.flowList);
// console.log("--->1", data.flowPage.flowList);
flowMap.value = data.flowPage.flowList;
state.id = props.versionid;
state.formData = stringToObj(data.tableFormPage.mastesform);
@ -176,7 +176,7 @@ const getTaskFormData = () => {
state.formData.powerstr = string2json(data.tableFormPage.powerstr);
judgeSubmitCancel({ name: data.tableFormPage.mastesformjson }).then(
(datajud: any) => {
console.error("不存在流程--1-datajud-》",datajud)
// console.error("--1-datajud-",datajud)
if (datajud.code == 0) {
if (datajud.data.buttonIsTrue == 3 || datajud.data.buttonIsTrue == 4) {
state.formData.list.push(submitButton);
@ -184,8 +184,8 @@ const getTaskFormData = () => {
}
}
);
console.log("表单数据--state.formData->1", state.formData);
console.error("不存在流程--1--》",state.formData.aiConfig)
// console.log("--state.formData->1", state.formData);
// console.error("--1--",state.formData.aiConfig)
if(state.formData&&state.formData.aiConfig&&state.formData.aiConfig.length>0){
aiConfigArea.value=true
@ -209,7 +209,7 @@ const getTaskFormData = () => {
extraW = extraW + 300
}
console.error("不存在流程--extraW--》",extraW)
// console.error("--extraW--",extraW)
if (aiConfigArea.value && isFlowTable.value){
pageType.value = 3
pageBody.value = "treePage"
@ -255,9 +255,9 @@ const initData = () => {
state.id = 0;
state.loading = true;
let aryLen = flowFactor.length;
console.log("改变表单值--flowMap.value--1- >", flowMap.value);
// console.log("--flowMap.value--1- >", flowMap.value);
flowMap.value = [];
console.log("改变表单值--flowMap.value--->", flowMap.value);
// console.log("--flowMap.value--->", flowMap.value);
if (aryLen > 0) flowFactor.splice(0, aryLen);
}
/**
@ -459,10 +459,10 @@ const closeAppSubmit = () => {
};
//
const changeKeyVal = (key: any, val: any, type: any, attribute: any) => {
// console.log("--key--->",key)
// console.log("--val--->",val,Array.isArray(val))
// console.log("--type--->",type)
// console.log("--attribute--->",attribute)
console.log("改变表单值--key--->",key)
console.log("改变表单值--val--->",val,Array.isArray(val))
console.log("改变表单值--type--->",type)
console.log("改变表单值--attribute--->",attribute)
let isUpdateFlowChart = false;
console.log("改变表单值--notAsA_BasisForJudgment--->",notAsA_BasisForJudgment.indexOf(type))
@ -627,17 +627,21 @@ const changeKeyVal = (key: any, val: any, type: any, attribute: any) => {
}
}
let isTrue = false
console.log("changeFlowPick--->",changeFlowPick.value)
if(changeFlowPick.value && Array.isArray(changeFlowPick.value) && changeFlowPick.value.includes(key)){
isTrue = true
}
console.log("更新工作流图--->",isUpdateFlowChart,isTrue)
//
if (isUpdateFlowChart && isTrue) {
if (isUpdateFlowChart || isTrue) {
flowLoading.value = true;
//
gainFlowChart.conditionList = flowFactor;
gainFlowChart.nodelPeople = nodelUserList;
gainFlowChart.oldFlow = flowMap;
// console.log("--gainFlowChart--->",gainFlowChart)
console.log("获取工作流不进图--gainFlowChart--->",gainFlowChart)
realTimeUpdateFlow(gainFlowChart).then((data: any) => {
// console.log("-new-->",data)
flowMap.value = data.data.flowList;
@ -764,6 +768,7 @@ provide('currentNodeKey', nodeKey)
<FlowStep
v-if="isFlowTable"
:loading="flowLoading"
v-model:flow-map="flowMap"
:next-step="nextStep"
:current-progress="currentProgress"

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

@ -106,7 +106,7 @@ const searchQuery = () => {};
/>
<div class="app-container">
<div class="search">
<div class="titleBox">办事宜</div>
<div class="titleBox">办事宜</div>
<el-form ref="searckFormRefTd" :model="selectInfoTd" :inline="true">
<el-form-item label="任务标题" prop="name">
<el-input

2
src/views/taskplatform/taskmanagement/lookFlowInfoNewApp.vue

@ -1,7 +1,7 @@
<!--
@ 作者: 秦东
@ 时间: 2026-02-05 13:51:29
@ 备注: 办事宜
@ 备注: 办事宜
-->
<script lang='ts' setup>
import {

215
vite.config.ts.timestamp-1772586397203-879cadf7fb034.mjs

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save