Compare commits

...

8 Commits

  1. 3
      src/api/DesignForm/type.ts
  2. 16
      src/components/DesignForm/assembly/index.ts
  3. 2
      src/components/DesignForm/public/form/formItem.vue
  4. 1
      src/components/DesignForm/tableListPage/newFormPageCont.vue
  5. 2
      src/views/sysworkflow/codepage/createform.vue
  6. 4
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFormNew.vue
  7. 305
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/previewPage.vue
  8. 338
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue
  9. 14
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/design.vue
  10. 1
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  11. 2
      src/views/sysworkflow/lowcodepage/pageFlow/flowStep.vue
  12. 1
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue
  13. 19
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue
  14. 1
      src/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue
  15. 21
      src/views/taskplatform/taskmanagement/lookFlowInfoNewApp.vue
  16. 2
      src/views/taskplatform/taskmanagement/runNewFlowStep.vue

3
src/api/DesignForm/type.ts

@ -195,7 +195,8 @@ export interface searchUserListForm extends PageQuery{
export interface taskflowquery extends PageQuery{
title?: string; //任务标题
class?:number; //类型:1、我的请求;2、待办事宜;3、已办事宜;4:草稿箱
state?:number; //状态:状态:1、草稿;2:驳回;3:审批中;4:归档;5:删除
state?:number; //状态:状态:1、草稿;2:驳回;3:审批中;4:归档;5:删除
id?:string | number;
}
//编辑表单状态
export interface editFlowFormStatus{

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

@ -308,8 +308,8 @@ export default [
},
{
type: 'select',
label: '下拉选择',
unitName: '下拉选择',
label: '下拉选择',
unitName: '下拉选择',
icon: 'select',
iconFont: 'fa-toggle-down',
control: {
@ -337,8 +337,8 @@ export default [
},
{
type: 'cascader',
label: '级联选择',
unitName: '级联选择',
label: '级联选择',
unitName: '级联选择',
icon: 'cascader',
iconFont: 'fa-sitemap',
control: {
@ -358,8 +358,8 @@ export default [
},
{
type: 'datePicker',
label: '日期选择',
unitName: '日期选择',
label: '日期选择',
unitName: '日期选择',
icon: 'todo',
iconFont: 'fa-calendar',
control: {
@ -379,8 +379,8 @@ export default [
},
{
type: 'timePicker',
label: '时间选择',
unitName: '时间选择',
label: '时间选择',
unitName: '时间选择',
icon: 'time',
iconFont: 'fa-clock-o',
control: {

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

@ -1144,7 +1144,7 @@ const diGuiJilian = (val: any, options: any[]) => {
:tablekey="props.tablekey"
:numrun="props.numrun"
/>
<!--创建人-->
<!--创建人- Marcus 的全部常用数据能力接入stock-daily-report agent同时让这个Agent也接入浏览器skill能力 ->
<FounderForm
v-else-if="judgeIsShow(data.name) && data.type === 'founder'"
:data="data"

1
src/components/DesignForm/tableListPage/newFormPageCont.vue

@ -361,6 +361,7 @@ const saveEditFormInfo = (type: string, val?: any) => {
@ 功能: 关闭操作
*/
const closeAppSubmit = () => {
console.log("关闭操作")
emits("update:isShow", false)
};
//

2
src/views/sysworkflow/codepage/createform.vue

@ -933,7 +933,7 @@ const editversionstaus = (id:string) =>{
<el-drawer
v-model="state.previewVisible"
title="预览"
title="c"
:append-to-body="true"
size="50%"
>

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

@ -57,6 +57,10 @@ const props = defineProps({
type: String,
default: "",
},
drawerWith: {
type: Number,
default: 900
},
formconfigcont: {
type: Object,
default() {

305
src/views/sysworkflow/lowcodepage/appPage/appPageForm/previewPage.vue

@ -4,7 +4,12 @@
@ 备注: 预览页面
-->
<script lang='ts' setup>
import { formStruct } from '@/api/DesignForm/types';
import { constAiEffect } from '@/api/DesignForm/utils';
import { nodePoweInfo } from '@/api/taskapi/types';
import FormDesign from '@/components/DesignForm/public/form/form.vue'
import FlowStep from "@/views/sysworkflow/lowcodepage/pageFlow/flowStep.vue";
import AiPage from "@/views/sysworkflow/lowcodepage/pageFlow/aiPage.vue";
const props = defineProps({
state:{
type:Object,
@ -12,6 +17,14 @@ const props = defineProps({
return {}
}
},
versiontitle: {
type: String,
default: "",
},
drawerwith: {
type: Number,
default: 900
},
isWeb:{
type:Boolean,
default(){
@ -21,7 +34,7 @@ const props = defineProps({
});
const emits = defineEmits<{
(e: 'update:state', val: any): void
(e: 'clickClose'): void
(e: 'clickClose', val: boolean): void
}>()
const state = computed({
get() {
@ -56,39 +69,305 @@ const previewSubmit = () => {
@ 时间: 2024-05-15 13:16:09
@ 功能: 关闭预览
*/
const clickClose = () => {
const clickClosePick = () => {
// console.log("")
emits('clickClose', false)
}
const formType = ref(1)
const drawTitle = computed(() => state.value.formData.form.formName)
const drawLoading = ref(false)
const aiConfigArea =ref(false)
const isFlowTable = ref(false); //
const currterNodePower = ref<nodePoweInfo[]>([])
const nodeKey = ref<string>("");
const flowLoading = ref(false); //loading
const flowMap = ref<any[]>(); //
const nextStep = ref<number>(0);
const drawBodyWidth = ref(props.drawerwith)
//-----------------------AI setting--------------------------
//AIform
//params subparams ; rowdex:
const currentAgent = ref<
{
model: boolean;
name: string;
rowdex:number,
uuid: string[];
fields: string[];
trigger: number;
params: { [key: string]: any };
subparams:{[key: string]: any}[];
}[]
>([]);
const aiassistRef = ref();
//AI
provide(constAiEffect, ({ key, value, field,rowdex}: any) => {
//ai_envents
const ai_events: Array<{ uuids: string[]; params: { [key: string]: any } }> = [];
currentAgent.value.forEach(ag=>{
if(ag.fields.includes(key)){ //trigger: 1: 2 3
if (rowdex!=null){//
ag.rowdex=rowdex //rowdex
if(rowdex>=ag.subparams.length){
ag.subparams.push({[field]:value})
}else{
ag.subparams[rowdex][field]=value
}
}else{ //, params
ag.params[field]=value; //keyfieldName
}
let mergedObj;
if(ag.subparams.length>0){
mergedObj = Object.assign({}, ag.params, ag.subparams[ag.rowdex]); //
}else{
mergedObj = ag.params
}
switch(ag.trigger){
case 2:
if(Object.keys(mergedObj).length>=ag.fields.length/2){
ai_events.push({uuids:ag.uuid,params:mergedObj })
}
break;
case 3:
if(Object.keys(mergedObj).length==ag.fields.length){
ai_events.push({uuids:ag.uuid,params:mergedObj})
}
break;
default:
ai_events.push({uuids:ag.uuid,params:mergedObj})
}
}
})
if(ai_events.length>0){
aiassistRef.value.onSendParamToAI(ai_events)
}
})
provide('flowNodePower', currterNodePower)
provide('currentNodeKey', nodeKey)
onMounted(()=>{
if(state.value.formData&&state.value.formData.aiConfig&&state.value.formData.aiConfig.length>0){
aiConfigArea.value=true
drawBodyWidth.value = 1080
}else{
drawBodyWidth.value = 780
}
})
</script>
<template>
<div>
<el-drawer
v-model="state.previewVisible"
title="预览"
:append-to-body="true"
size="1170"
:size="drawBodyWidth"
:with-header="false"
>
<FormDesign
ref="previewForm"
:type="1"
:form-data="state.formDataPreview"
:dict="state.formDict"
:is-web="props.isWeb"
/>
<template #footer>
<div v-loading="drawLoading" :class="aiConfigArea&&isFlowTable?'drawBody treePage':(aiConfigArea&&!isFlowTable)?'drawBody twoPageAi':(!aiConfigArea&&isFlowTable)?'drawBody twoPageFlow':'drawBody'">
<AiPage
v-if="state.type != 5 && aiConfigArea"
ref="aiassistRef"
:agent="currentAgent"
/>
<AppForm
ref="formEl"
:drawTitle="drawTitle"
:numrun="formType"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
:close-app-submit="clickClosePick"
/>
</div>
<!-- <template #footer>
<div class="dialog-footer">
<el-button size="small" type="primary" @click="previewSubmit">
提交
</el-button>
<el-button size="small" @click="clickClose">
<el-button size="small" @click="clickClosePick">
取消
</el-button>
</div>
</template>
</template> -->
</el-drawer>
</div>
</template>
<style lang='scss' scoped>
.drawerClass{
:deep .el-drawer__header{
border-bottom: 1px solid #ECECEC;
}
}
.drawHeader {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.drawBody{
width: 100%;
height: 100%;
padding: 10px 10px;
:deep .el-card{
border-radius: 15px;
}
:deep .el-card__header{
padding: 15px 15px;
}
:deep .el-card__body{
padding: 0;
}
:deep .el-card__footer{
padding: 10px 10px;
}
}
.twoPageAi{
display: grid;
grid-template-columns: minmax(150px, 300px) 1fr; /* 左右最小150px,最大250px,中间自适应 */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.twoPageFlow{
display: grid;
grid-template-columns: 1fr minmax(150px, 300px); /* 左右最小150px,最大250px,中间自适应 */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.treePage{
display: grid;
grid-template-columns: minmax(150px, 300px) 1fr minmax(150px, 300px); /* 左右最小150px,最大250px,中间自适应 */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.svgBox{
background: linear-gradient(135deg, #0020C2, #4d6cff);
color: white;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
}
.card-header{
font-size: 1.4rem;
font-weight: 700;
color: #0020C2;
display: flex;
align-items: center;
gap: 10px;
}
.scroBox{
padding: 10px 15px;
height: calc(100vh - 200px);
}
.formBody{
width: 100%;
overflow-x: auto;
}
.flowBody{
padding: 10px 15px;
height: calc(100vh - 260px);
}
.bootemWorkFlow{
width: 100%;
text-align: center;
.bootemWorkFlowBut{
width: 100%;
padding: 10px 0;
text-align: center;
}
}
.btn {
padding: 14px 16px;
border-radius: 10px;
font-weight: 600;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s;
border: none;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 32, 194, 0.15);
}
.approve-btn {
background: linear-gradient(135deg, #00cc66, #33dd88);
color: white;
}
.reject-btn {
background: linear-gradient(135deg, #ff3366, #ff5588);
color: white;
}
.bootemAi{
display: grid;
grid-template-columns: 1fr 50px; /* 左右最小150px,最大250px,中间自适应 */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
:deep .el-input__wrapper{
border-radius: 10px;
}
}
.ai-send-btn {
background: linear-gradient(135deg, #0020C2, #4d6cff);
color: white;
border: none;
width: 46px;
border-radius: 10px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s;
}
.ai-send-btn:hover {
background: linear-gradient(135deg, #0019a0, #3a5aff);
transform: translateY(-2px);
}
.ai-conversation {
flex: 1;
display: flex;
flex-direction: column;
gap: 15px;
margin-bottom: 20px;
}
.message {
padding: 12px 16px;
border-radius: 12px;
max-width: 90%;
line-height: 1.5;
}
.user-message {
background: #eef2ff;
align-self: flex-end;
border-top-right-radius: 4px;
border: 1px solid rgba(0, 32, 194, 0.2);
}
.ai-message {
background: linear-gradient(to right, #f0f5ff, #ffffff);
align-self: flex-start;
border-top-left-radius: 4px;
border: 1px solid rgba(0, 32, 194, 0.1);
}
</style>

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

@ -4,6 +4,7 @@
@ 备注: 属性
-->
<script lang='ts' setup>
import { reactive, computed, toRefs, ref, watch, inject, onBeforeMount, onMounted } from "vue";
import validateConfig from "@/components/DesignForm/validate";
import { useDesignFormStore } from "@/store/DesignForm/designForm";
import { getRequest, uploadUrl } from "@/api/DesignForm";
@ -15,7 +16,7 @@ import type { UploadInstance, UploadProps, UploadRawFile,ElTree } from "element-
import { ElMessage, genFileId } from "element-plus";
import { getAssociatedFormsCurrentFieldTree, getAssociatedFormsOrgAndManTree, getCustomerFormList, getAsfasfFieldTree, getAsfasfFieldTreeOptionsValue3, getPersonByRoleId, getAllRole,getQrCodeImgInside, getAssociatedFormsRoleTree } from "@/api/javaRequest";
import Draggable from "vuedraggable-es";
import AssociatedformsForCreate from "@/widget/associatedforms/associatedFormsForCreate.vue";
//
import MathFormula from "@/components/DesignForm/math/mathFormula.vue";
import { orgInfo } from "@/api/hr/org/type";
@ -42,8 +43,8 @@ import errimg from "@/assets/404_images/untilUploadImg.png";
const transferSelectUserRangeData = ref({"type":"lowcodeTransfer","unitName":"请选择","iconFont":"fa-arrows-h","control":{"modelValue":[],"fixedOptions":[{"id":"thefirstrootnode","label":"根节点1","unitName":"","disabled":false,"children":[]},{"id":"thesecondrootnode","label":"根节点2","unitName":"","disabled":false,"children":[]}]},"config":{"transferName":"请选择","transferDataSource":"数据源","apiUrl":"/javasys/lowCode/transfer/getOrgAndManTree","method":"post"},"name":"lowcodeTransfer1758525493710","item":{"label":"穿梭框"},"styles":{"divStyle":{"divbox":"all","transparency":100},"labelStyle":{"divbox":"all","transparency":100},"inputStyle":{"transparency":100}}})
const preFillDialogFlag = ref(false)
const upload = ref<UploadInstance>();
const props = withDefaults(
//
defineProps<{
@ -93,10 +94,12 @@ const emits = defineEmits<{
const { formConfig, formData, formInfo } = toRefs(props);
const dataSourceOption = ref([]);
const designType = inject("formDesignType");
const resDataForGlxxszExceptself= ref<any>([]);
////////////////////////////////////////////////
const userRangeDialogFlag = ref(false)
// Local ref for AI config to avoid direct prop modification
const localAiConfig = ref(props.formInfo.aiConfig || []);
const fileSignAry = reactive<any>([]);
// Watch for changes in formInfo.aiConfig and update local ref
watch(() => formInfo.value?.aiConfig, (newVal) => {
localAiConfig.value = newVal || [];
@ -104,7 +107,7 @@ watch(() => formInfo.value?.aiConfig, (newVal) => {
// Watch for changes in localAiConfig and emit back to parent
watch(() => localAiConfig.value, (newVal) => {
console.log("localAiConfig.value",newVal)
// console.log("localAiConfig.value",newVal)
if (formInfo.value) {
const updatedFormInfo = { ...formInfo.value };
updatedFormInfo.aiConfig = newVal;
@ -132,6 +135,7 @@ const total = ref(10)
const aft = ref();
const aftRange = ref();
const roleTree = ref<Tree[]>([]);
const associatedFormsHideDialogFlag = ref(false);
//
const page = ref<number>(1);
const pageSize = ref<number>(200000);
@ -145,6 +149,8 @@ const roleTreeFilterText = ref("");
const fieldTreeRef = ref<InstanceType<typeof ElTree>>();
const orgTreeRef = ref<InstanceType<typeof ElTree>>();
const roleTreeRef = ref<InstanceType<typeof ElTree>>();
let resDataForGlxxszExceptself1: any[] = [];
const videoIndex = ref(0);
watch(fieldTreeFilterText, (val) => {
fieldTreeRef.value!.filter(val);
});
@ -154,6 +160,48 @@ watch(orgTreeFilterText, (val) => {
watch(roleTreeFilterText, (val) => {
roleTreeRef.value!.filter(val);
});
const treeRefcsk = ref<TreeInstance>();
const multipleSelection = ref<User[]>([])
const defaultProps = {
children: 'children',
label: 'label',
disabled: 'disabled',
}
/**
@ 作者: 秦东
@ 时间: 2026-03-03 08:41:39
@ 功能: 原始选项数组标题行=索引列=将空值选项放在末尾键改为'未选择'
*/
const titleOptions = computed(() => {
const options = currentTitleColumnNode.value?.options || []
// ''
return [...options, { label: '未选择', value: 'notChosen' }]
})
const indexOptions = computed(() => {
const options = currentIndexColumnNode.value?.options || []
// ''
return [...options, { label: '未选择', value: 'notChosen' }]
})
interface User {
id: number
name: string
number: string
key: string
}
const componentKey = ref(0);
const showImagePreview = ref(false);
//
const customerFormTree = ref<Tree[]>([]);
const fieldTreeSearchFlag = ref(false);
const roleTreeSearchFlag = ref(false);
// 使 ref computed使
const zdtcszTableData = ref([])
const multipleTableRef = ref<TableInstance>()
// treeSelectRef
const treeSelectRef = ref();
const unitFormList = ref<optionsInfo[]>([]);
/**
@ 作者: 秦东
@ 时间: 2026-02-25 11:36:09
@ -1371,7 +1419,7 @@ const formidChangedOptionsValue3 = () => {
}
let resDataForGlxxszExceptself1: any[] = [];
/**
@ 作者: 秦东
@ 时间: 2026-02-25 15:57:30
@ -1467,7 +1515,7 @@ watch(() => store.activeKey, (val: string) => {
// // resDataForGlxxszExceptself1 = JSON.parse(JSON.stringify(resDataForGlxxszExceptself.value));
// }
// console.log(resDataForGlxxszExceptself1)
resDataForGlxxszExceptself1 = JSON.parse(JSON.stringify(resDataForGlxxszExceptself.value));
for (let i = 0; i < resDataForGlxxszExceptself1.length; i++) {
let strArr: [string] = resDataForGlxxszExceptself1[i].id.split(":");
// console.log(strArr)
@ -1479,7 +1527,7 @@ watch(() => store.activeKey, (val: string) => {
i--; //
}
}
//console.log(resDataForGlxxszExceptself1);
console.log("getAssociatedFormsCurrentFieldTreeData.value--->",getAssociatedFormsCurrentFieldTreeData.value);
if (
getAssociatedFormsCurrentFieldTreeData.value &&
getAssociatedFormsCurrentFieldTreeData.value.treeAttrs &&
@ -1504,7 +1552,7 @@ watch(() => store.activeKey, (val: string) => {
immediate: true,
})
const fileSignAry = reactive<any>([]);
/**
@ 作者: 秦东
@ 时间: 2026-02-25 16:28:28
@ -1921,7 +1969,7 @@ const beforeRemove = ():boolean => {
@ 功能: 上传成功钩子
*/
//videoMsg[videoIndex]
const videoIndex = ref(0);
const videoUploadOk = (response: any) => {
const { control = {} }: { control: any } = controlData.value;
control.videoMsg[videoIndex.value].url = response.data.url;
@ -1951,7 +1999,7 @@ const videoUploadErr = (error: Error) => {
@ 功能: 检查文件类型
更改已上传的视频:el-upload中设置 limit on-exceed 可以在选中时自动替换上一个文件
*/
const upload = ref<UploadInstance>();
const handleExceed: UploadProps["onExceed"] = (files) => {
upload.value!.clearFiles();
const file = files[0] as UploadRawFile;
@ -1988,7 +2036,7 @@ const lowcodeImageUploadSuccess = (
@ 时间: 2026-02-26 13:24:24
@ 功能: 子表预填充设置
*/
const preFillDialogFlag = ref(false)
const preFillDialogShow = () => {
preFillDialogFlag.value = true
console.log("子表预填充设置----->",preFillDialogFlag.value)
@ -2002,7 +2050,7 @@ const preFillDialogDetermine = () => {
@ 时间: 2026-02-26 13:27:17
@ 功能: 用户组织联动选择 showSelectOrgConnectUser
*/
const selectOrgConnectUserDialogFlag = ref(false)
const showSelectOrgConnectUser = () => {
console.log("showSelectOrgConnectUser--------->",selectOrgConnectUserDialogFlag.value)
selectOrgConnectUserDialogFlag.value = true
@ -2047,7 +2095,7 @@ const queryAllRole = () => {
@ 时间: 2026-02-26 13:34:01
@ 功能: 选择用户数据范围
*/
const userRangeDialogFlag = ref(false)
const handleUserRangeDialogFlag = () => {
userRangeDialogFlag.value = true
if(controlData.value.control.queryBy=='role'){
@ -2071,7 +2119,7 @@ const formatTooltip = (val: number) => {
@ 功能: 点击开启隐藏设置
*/
//flag
const associatedFormsHideDialogFlag = ref(false);
const associatedFormsHideDialoghandle = () => {
associatedFormsHideDialogFlag.value = true
controlData.value.control.hideConditionHtmlCopy = controlData.value.control.hideConditionHtml;
@ -2088,7 +2136,7 @@ watch(()=>associatedFormsHideDialogFlag.value, (val) => {
}
});
//
const associatedFormsChooseDialogFlag = ref(false);
const chooseAssociatedForm = () => {
getCustomerFormTree();
associatedFormsChooseDialogFlag.value = true;
@ -2136,7 +2184,7 @@ const associatedFormsCurrentFormFieldTree = ref<Tree[]>();
const associatedFormsCurrentFormFieldTree1 = ref<Tree[]>();
const currentFormChildTableFieldsForFillRole = ref<Tree[]>();
const associatedFormsCurrentFormFieldTreeNoTable1 = ref<any>([]);
const resDataForGlxxszExceptself= ref<any>([]);
const associatedFormsCurrentFormFieldTreeForGlxxsz = ref<Tree[]>();
const associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf = ref<Tree[]>();
let currentChildTableCount = 0
@ -3014,7 +3062,7 @@ const beforeAvatarUpload: UploadProps["beforeUpload"] = (rawFile) => {
const getAssociatedFormsCurrentFieldTree1 = () => {
getAssociatedFormsCurrentFieldTree(props.customerformid).then(({ data }) => {
// console.log(data)
console.log("获取关联表单字段--------------------->",data)
getAssociatedFormsCurrentFieldTreeData.value = JSON.parse(JSON.stringify(data));
// console.log(getAssociatedFormsCurrentFieldTreeData)
if (data.id === "cfid为空" || data.id === "masterTable为null") {
@ -3260,7 +3308,7 @@ const getDataSource = () => {
//----bug
//穿退----bug
*/
const showAssociatedFormsFillRole = ref(true);
const saveRefreshFormControlAttr = () => {
getAssociatedFormsCurrentFieldTree1();
showAssociatedFormsFillRole.value = false;
@ -3308,10 +3356,7 @@ const addPickTracn = () => {
const unitFormList = ref<optionsInfo[]>([]);
const currentAsfChangeCount = ref(0);
const asfsExpectCurrent = ref<any>([]);
const asfs = ref<any>([]);
/**
@ 作者: 秦东
@ 时间: 2026-02-27 13:58:13
@ -3499,16 +3544,7 @@ const handleExpandTabChange = () => {
}
}
const multipleSelection = ref<User[]>([])
interface User {
id: number
name: string
number: string
key: string
}
const componentKey = ref(0);
const reRenderComponent = () => {
componentKey.value++;
@ -3666,7 +3702,7 @@ const changeCurrentUploadImgid = (clickedRow: any) => {
};
//
const showImagePreview = ref(false);
/**
@ 作者: 秦东
@ 时间: 2026-02-28 15:37:09
@ -3769,10 +3805,11 @@ const append = (data: Tree) => {
const changeLabel = (node: TreeNode, data: Tree) => {
let favDrink = prompt("请输入:");
if (favDrink != null && favDrink.length > 0) {
const parent = node.parent;
const children: Tree[] = parent.data.children || [parent.data];
const index = children.findIndex((d) => d.id === data.id);
children[index].label = favDrink;
data.label = favDrink;
// const parent = node.parent;
// const children: Tree[] = parent.data.children || [parent.data];
// const index = children.findIndex((d) => d.id === data.id);
// children[index].label = favDrink;
dataSource.value = [...dataSource.value];
}
};
@ -3782,37 +3819,53 @@ const changeLabel = (node: TreeNode, data: Tree) => {
@ 功能: 设为可选/不可选
*/
const setNodeEnable = (node: TreeNode, data: Tree) => {
const parent = node.parent;
const children: Tree[] = parent.data.children || [parent.data];
console.log("设为可选/不可选------->",children)
console.log("设为可选/不可选--node----->",node)
console.log("设为可选/不可选---data---->",data)
const index = children.findIndex((d) => d.id === data.id);
node.data.disabled = !node.data.disabled;
// const parent = node.parent;
// const children: Tree[] = parent.data.children || [parent.data];
// console.log("/------->",children)
// const index = children.findIndex((d) => d.id === data.id);
if(children[index].disabled){
children[index].disabled = !children[index].disabled;
}
// if(children[index].disabled){
// children[index].disabled = !children[index].disabled;
// }
// console.log("/---2---->",children)
dataSource.value = [...dataSource.value];
};
/**
@ 作者: 秦东
@ 时间: 2026-02-28 16:08:04
@ 功能: 删除节点
*/
const remove = (node: TreeNode, data: Tree) => {
// console.log("--node----->",node)
// console.log("---data---->",data)
let really = confirm("确认删除吗?\n将删除本节点与本节点的所有子孙节点!1111");
if (really) {
const parent = node.parent;
const children: Tree[] = parent.data.children || [parent.data];
const index = children.findIndex((d) => d.id === data.id);
children.splice(index, 1);
treeRefcsk.value?.remove(data)
// if(controlData.value.control.fixedOptions&&Array.isArray(controlData.value.control.fixedOptions)){
// controlData.value.control.fixedOptions.forEach((item: any,index:number) => {
// if(item.id !== data.id){
// controlData.value.control.fixedOptions.splice(index, 1);
// }
// });
// }
// const parent = node.parent;
// const children: Tree[] = parent.data.children || [parent.data];
// const index = children.findIndex((d) => d.id === data.id);
// children.splice(index, 1);
dataSource.value = [...dataSource.value];
}
};
//
const customerFormTree = ref<Tree[]>([]);
/**
@ 作者: 秦东
@ 时间: 2026-02-28 16:47:42
@ -3871,7 +3924,7 @@ const treeDefaultProps = {
children: "children",
label: "label",
};
const fieldTreeSearchFlag = ref(false);
const filterNode = (value: string, data: any) => {
if (!value) return true;
return data.label ? data.label.includes(value) : false;
@ -3920,7 +3973,6 @@ const getRoleTree = async () => {
});
};
const roleTreeSearchFlag = ref(false);
const handleRoleTreeExpand = () => {
roleTreeSearchFlag.value = true;
}
@ -4332,6 +4384,97 @@ const titleColumnLabel = computed(() => {
const leftTopLabel = computed(() => {
return `${indexColumnLabel.value}\\${titleColumnLabel.value}`
})
//
watch([titleOptions, indexOptions], ([newTitleOptions, newIndexOptions]) => {
//
if (!newTitleOptions.length && !newIndexOptions.length) {
console.log("如果都没有选择,清空表格数据")
zdtcszTableData.value = []
return
}
// controlData
const savedData = controlData.value?.control?.zdtcsz?.tableData || {}
// ''
const convertOldData = (data) => {
const converted = {}
Object.keys(data).forEach(rowKey => {
const newRowKey = rowKey === '' ? 'notChosen' : rowKey
converted[newRowKey] = {}
Object.keys(data[rowKey]).forEach(colKey => {
const newColKey = colKey === '' ? 'notChosen' : colKey
converted[newRowKey][newColKey] = data[rowKey][colKey]
})
})
return converted
}
const convertedSavedData = convertOldData(savedData)
// 1
if (newTitleOptions.length && !newIndexOptions.length) {
// ''
const rowKey = 'notChosen'
const rowObj = {
rowKey: rowKey,
rowLabel: '未选择' // ""
}
// 使
newTitleOptions.forEach(colItem => {
const colKey = colItem.value
const savedValue = convertedSavedData[rowKey]?.[colKey] || ''
rowObj[`col_${colKey}`] = savedValue
})
zdtcszTableData.value = [rowObj]
}
// 2
else if (!newTitleOptions.length && newIndexOptions.length) {
//
const newTableData = newIndexOptions.map(rowItem => {
const rowKey = rowItem.value
const rowObj = {
rowKey: rowKey,
rowLabel: rowItem.label
}
//
const defaultColKey = 'notChosen'
const savedValue = convertedSavedData[rowKey]?.[defaultColKey] || ''
rowObj[`col_${defaultColKey}`] = savedValue
return rowObj
})
zdtcszTableData.value = newTableData
}
// 3
else if (newTitleOptions.length && newIndexOptions.length) {
//
const newTableData = newIndexOptions.map(rowItem => {
const rowKey = rowItem.value
const rowObj = {
rowKey: rowKey,
rowLabel: rowItem.label
}
// 使
newTitleOptions.forEach(colItem => {
const colKey = colItem.value
const savedValue = convertedSavedData[rowKey]?.[colKey] || ''
rowObj[`col_${colKey}`] = savedValue
})
return rowObj
})
zdtcszTableData.value = newTableData
}
}, { immediate: true })
/**
@ 作者: 秦东
@ 时间: 2026-03-02 16:53:00
@ -4782,18 +4925,9 @@ const asfPropsData = computed(()=>{
});
return result
})
/**
@ 作者: 秦东
@ 时间: 2026-03-03 08:41:39
@ 功能: 原始选项数组标题行=索引列=将空值选项放在末尾键改为'未选择'
*/
const titleOptions = computed(() => {
const options = currentTitleColumnNode.value?.options || []
// ''
return [...options, { label: '未选择', value: 'notChosen' }]
})
// 使 ref computed使
const zdtcszTableData = ref([])
/**
@ 作者: 秦东
@ 时间: 2026-03-02 16:53:31
@ -5085,6 +5219,9 @@ const glxxszTree = computed(()=>{
}
console.log(datapropsformList)
console.log(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value)
if(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children.length>0){
@ -5576,7 +5713,9 @@ function mergeFormTrees(treeA: any[], treeB: any[]) {
return cTree;
}
const multipleTableRef = ref<TableInstance>()
/**
* 提取字符串中最后一个英文冒号后的内容无冒号则返回原字符串
* @param {string} str - 输入的字符串
@ -5606,12 +5745,17 @@ const xTree = computed(()=>{
if(datapropsformList&&datapropsformList.length==0){
datapropsformList = JSON.parse(JSON.stringify(props.formList))
}
console.log("datapropsformList------------------>",datapropsformList)
console.log("associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf------------------>",associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value)
console.log("datapropsformList------------------>",associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children.length>0)
if(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children && associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children.length>0){
let datab = JSON.parse(JSON.stringify(associatedFormsCurrentFormFieldTreeForGlxxszExceptSelf.value[0].children))
let currentCompId = controlData.value.name
//console.log(currentCompId)
console.log(currentCompId)
const treeC = mergeAndFilterAssociatedForms(datapropsformList, datab);
console.log(treeC)
return treeC
}else{
return []
@ -6020,27 +6164,31 @@ function mergeAndFilterAssociatedForms(treeA, treeB) {
return cTree;
}
const asfsCurrentTable = computed(()=>{
let currentTable: any[] = []
let count = 0
let result = []
xTree.value.forEach((element:any) => {
const asfsCurrentTable = computed(() => {
const matchingNodes: any[] = [];
if(getAfterLastColon(element.value) == controlData.value.name){
currentTable.push(element)
count++
}
});
if(count>0){
result = currentTable[0].children
}else{
result = []
//
function traverse(nodes: any[]) {
for (const node of nodes) {
//
if (getAfterLastColon(node.value) === controlData.value.name) {
matchingNodes.push(node);
}
//
if (node.children && node.children.length > 0) {
traverse(node.children);
}
}
}
traverse(xTree.value);
// children
return matchingNodes.length > 0 ? matchingNodes[0].children || [] : [];
});
return result
})
// treeSelectRef
const treeSelectRef = ref();
const handleTreeSelectChange = (value: any) => {
console.log(value)
@ -6105,7 +6253,13 @@ const saveChanges = () => {
controlData.value.options = mergeArrays(controlData.value.options,options.value);
options.value = [];
};
//
const zdtcszTableColumns = computed(() => {
return titleOptions.value.map(item => ({
label: item.label,
value: item.value
}))
})
/**
@ 作者: 秦东
@ 时间: 2026-03-03 08:28:29
@ -7832,7 +7986,7 @@ const updataBase = (val: any) => {
title="创建穿梭框选项树"
top="150px"
style="margin-top: 70px"
width="50%"
width="80%"
>
<div v-if="controlData.type == 'lowcodeTransfer'">
<el-button
@ -7845,16 +7999,19 @@ const updataBase = (val: any) => {
</el-button>
<!-- 建立树 -->
<div class="custom-tree-container">
<el-tree
ref="treeRefcsk"
:data="controlData.control.fixedOptions"
show-checkbox
node-key="id"
:default-expand-all="false"
:expand-on-click-node="true"
:expand-on-click-node="false"
:props="defaultProps"
>
<template #default="{ node, data }">
<span class="custom-tree-node">
<span>{{ node.label }}</span>
<span>{{ node.label }}-->{{ node.id }}</span>
<span style="float: right">
<a style="color: green" @click="append(data)"> 新增子节点 </a>
<a style="margin-left: 8px" @click="changeLabel(node, data)">编辑节点名</a>
@ -8543,6 +8700,7 @@ const updataBase = (val: any) => {
/>
</div>
<div style="width: 100%; padding: 20px; overflow-x: auto;">
<el-table
:data="zdtcszTableData"
border

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

@ -1955,13 +1955,13 @@ const setValue = (obj: { [key: string]: any }, filter?: boolean) => {
// tProp
provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any) => {
console.log("表单组件值改变事件----------1--------->", key);
console.log("表单组件值改变事件----------2--------->", value);
console.log("表单组件值改变事件----------3--------->", data);
console.log("表单组件值改变事件----------4--------->", tProp);
console.log("表单组件值改变事件----------5--------->", type);
console.log("表单组件值改变事件----------6--------->", attribute);
console.log("表单组件值改变事件----------11--------->", model.value);
// console.log("----------1--------->", key);
// console.log("----------2--------->", value);
// console.log("----------3--------->", data);
// console.log("----------4--------->", tProp);
// console.log("----------5--------->", type);
// console.log("----------6--------->", attribute);
// console.log("----------11--------->", model.value);
let fieldVal: Record<string, string> = {};
for (let i in model.value) {

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

@ -262,6 +262,7 @@ onBeforeMount(() => {
:menu-id="menuId"
:group-key="props.groupKey"
:formconfigcont="formConfigCont"
:drawer-with="props.drawerWith"
/>
<!-- <PageForm
v-if="tabsActive == 1"

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

@ -192,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}}{{ props.currentProgress }}</h3>
<h3 class="step-title">{{item.nodeName}}</h3>
<div v-for="items in item.operator" :key="items.id" class="flowLogBox">
<div >

1
src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue

@ -17,6 +17,7 @@ import { gainAppAllTaskList } from "@/api/DesignForm/requestapi";
import NewFormPageCont from "@/components/DesignForm/tableListPage/newFormPageCont.vue";
import FormPageCont from "@/components/DesignForm/tableListPage/formPageContApp.vue";
import TableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue";
import { taskflowquery } from "@/api/DesignForm/type";
const props = defineProps({
pickAppMenu: {

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

@ -4,7 +4,7 @@
@ 备注: 待我处理
-->
<script lang="ts" setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi";
import { gainAppTaskList, taskFlowList } from "@/api/DesignForm/requestapi";
import { taskflowquery } from "@/api/DesignForm/type";
import LookAndOperateLogInfo from "@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue";
@ -70,7 +70,7 @@ onMounted(() => {
@ 时间: 2024-06-17 08:13:56
@ 功能: 搜索
*/
const getToDoListTd = () => {
const v = () => {
getToDoList();
};
@ -87,6 +87,21 @@ const lookFlowInfo = (val: any, types: number) => {
darwOpenOrClose.value = true;
};
const searchQuery = () => {};
//
const getToDoListTd = () => {
loadingTd.value = true
taskFlowList(selectInfoTd)
.then((data:any)=>{
// console.log("",data)
totalstd.value = data.data.total
taskFlowAryTd.value = data.data.list
})
.finally(()=>{
loadingTd.value = false
})
}
</script>
<template>
<div ref="myappbox" class="app_box">

1
src/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue

@ -5,6 +5,7 @@
-->
<script lang='ts' setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi"
import { taskflowquery } from "@/api/DesignForm/type";
import LookAndOperateLogInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue'
import LookAndOperateLogNewInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoNewApp.vue'
const props = defineProps({

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

@ -5,37 +5,19 @@
-->
<script lang='ts' setup>
import {
submitButton,
afreshSubmitButton,
editFormCont,
draftSubmitButton,
editLookFormCont,
} from "@/utils/workflow/const";
import {
json2string,
objToStringify,
string2json,
stringToObj,
} from "@/utils/DesignForm/form";
import {
haveCustomerFormVersion,
generateFlow,
gainTaskFormInfo,
gainEditDataLog,
} from "@/api/taskapi/management";
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 { constAiEffect } from "@/api/DesignForm/utils";
import RunFlowStep from "@/views/taskplatform/taskmanagement/runNewFlowStep.vue";
@ -308,6 +290,7 @@ const submitEdit = () => {
:destroy-on-close="true"
:size="drawBodyWidth"
:close="drawerBeforeClose"
:with-header="false"
>
<template #header>
<div class="drawHeader">
@ -333,7 +316,7 @@ const submitEdit = () => {
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:close-app-submit="drawerBeforeClose"
:change-key-val="changeKeyVal"
:anew-submit="anewSubmit"
:save-edit-form-info="saveEditFormInfo"

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

@ -239,7 +239,7 @@ defineExpose({gainRunFlowTask,anewSubmit})
<el-text v-if="logItem.cause" type="success" size="small">{{logItem.cause}}</el-text>
<el-text v-else type="success" size="small" >已同意</el-text>
</div>
<div v-if="logItem.state==3" class="step-info">
<div v-else-if="logItem.state==3" class="step-info">
<el-text v-if="logItem.cause" type="danger" size="small">{{logItem.cause}}</el-text>
<el-text v-else type="danger" size="small" >已驳回</el-text>
</div>

Loading…
Cancel
Save