Browse Source

修改

qin_18
herenshan112 1 day ago
parent
commit
1cc14d8a1b
  1. 2
      src/api/lowCode/form/type.ts
  2. 20
      src/api/workFlow/type.ts
  3. 77
      src/components/lowCode/assistant/cascader.vue
  4. 113
      src/components/lowCode/assistant/checkboxPage.vue
  5. 2
      src/components/lowCode/assistant/colorPickerPage.vue
  6. 88
      src/components/lowCode/assistant/digitpage.vue
  7. 132
      src/components/lowCode/assistant/inputPage.vue
  8. 14
      src/components/lowCode/assistant/lowcodeImage.vue
  9. 64
      src/components/lowCode/assistant/orgCitys.vue
  10. 114
      src/components/lowCode/assistant/radioPage.vue
  11. 101
      src/components/lowCode/assistant/selectPage.vue
  12. 90
      src/components/lowCode/assistant/textareaPage.vue
  13. 5
      src/components/lowCode/assistant/timePickerPage.vue
  14. 65
      src/components/lowCode/assistant/uploadPage.vue
  15. 126
      src/components/lowCode/formItem.vue
  16. 122
      src/components/lowCode/newFormItem.vue
  17. 9
      src/views/formTable/page/cardPageNew.vue
  18. 69
      src/views/formTable/taskListPage.vue
  19. 2
      src/views/home/scanQrCodeInput.vue

2
src/api/lowCode/form/type.ts

@ -54,7 +54,7 @@ export interface tableFormStruct {
openPageMode:string openPageMode:string
}, },
tagList: Object, tagList: Object,
formId: string; formId: string|any;
formList: any[], // 所有可选表单数据源 formList: any[], // 所有可选表单数据源
name: string, name: string,
treeData: Object, // 左侧树相关 treeData: Object, // 左侧树相关

20
src/api/workFlow/type.ts

@ -92,4 +92,24 @@ export interface appFormInfo{
userpermit: string; userpermit: string;
version: number; version: number;
visibility: number; visibility: number;
}
//节点赋权
export interface nodePoweInfo {
nodeKey:string;
powerAry:powerAryInfo[];
apiSetup?:apiSetupInfo
}
//节点福泉结构体
export interface powerAryInfo{
id:string;
isEdit:boolean;
isLook:boolean;
name:string;
status?:number
}
//节点福泉补充
export interface apiSetupInfo{
library?:any[];
title?:any[];
} }

77
src/components/lowCode/assistant/cascader.vue

@ -4,6 +4,9 @@
@ 备注: 级联选择器 @ 备注: 级联选择器
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { FormList } from '@/api/lowCode/form/type';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue?: string modelValue?: string
@ -13,8 +16,8 @@ const props = withDefaults(
fileList?: Object fileList?: Object
control?: Object control?: Object
config?: Object config?: Object
data?: Object data?: FormList
options?: Object options?: any
types?: number types?: number
}>(), }>(),
{} {}
@ -49,7 +52,7 @@ const handleChange = () => {
@ 时间: 2025-06-11 09:06:05 @ 时间: 2025-06-11 09:06:05
@ 功能: 获取值 @ 功能: 获取值
*/ */
const valPrint = (val:string,orgList:any[]) => { const valPrint = (val:string,orgList:any) => {
let title = treeData(orgList) let title = treeData(orgList)
let nameAry = new Array let nameAry = new Array
console.log("递归查询-2--->",val,title) console.log("递归查询-2--->",val,title)
@ -105,7 +108,7 @@ interface TreeNodeInfo {
label: string; label: string;
} }
function treeData(node: TreeNode[],title: TreeNodeInfo[]){ function treeData(node: TreeNode[],title?: TreeNodeInfo[]){
// let title = new Array // let title = new Array
if(Array.isArray(node)){ if(Array.isArray(node)){
@ -135,12 +138,76 @@ function treeData(node: TreeNode[],title: TreeNodeInfo[]){
return title; return title;
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
const data = computed(() => {
return props.data || {name:""}
})
</script> </script>
<template> <template>
<el-cascader <el-cascader
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(data.name)"
v-model="value" v-model="value"
:options="props.options" :options="props.options"
:disabled="judgeIsEdit(data.name)"
@change="handleChange" @change="handleChange"
/> />
<el-text v-else class="wordColor">{{valPrint(value,props.options)}}</el-text> <el-text v-else class="wordColor">{{valPrint(value,props.options)}}</el-text>

113
src/components/lowCode/assistant/checkboxPage.vue

@ -5,10 +5,13 @@
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import { import {
formatNumber, formatNumber,
constFormProps constFormProps,
constGetControlByName
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -67,13 +70,73 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty) return AnalysisInputCss(ele?.inputStyle,sty)
} }
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-07-27 15:11:42 @ 时间: 2024-07-27 15:11:42
@ 功能: 判断是否禁用 @ 功能: 判断是否禁用
*/ */
const judgeIsDisabled = (key:string) => { const judgeIsDisabled = (key:string) => {
return false // return false
if (type.value === 3) { if (type.value === 3) {
return true // return true //
} }
@ -83,32 +146,20 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") { let myPower = curNodePowerAry() //
if(props.purview.length < 1){ if(Array.isArray(myPower) && myPower.length > 0){
return false; let isOk = false
}else{ myPower.forEach((item:powerAryInfo) => {
let isShow = true; if(key == item.id){
props.purview.forEach((item)=>{ isOk = !item.isEdit
if(item.nodeKey == props.nodeKey){ }
})
if(item.powerAry && item.powerAry.length > 0){ return isOk
item.powerAry.forEach((itm)=>{ }else{
if(itm.id == key){ return false
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook) }
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
} }
const getControlByName = inject(constGetControlByName) as any
/****input slot处理***/ /****input slot处理***/
const getInputSlot = (key?: string) => { const getInputSlot = (key?: string) => {
const slot = key === 'p' ? config.value.prepend : config.value.append const slot = key === 'p' ? config.value.prepend : config.value.append
@ -142,7 +193,7 @@ const transformOption = (val: string | number, type?: string) => {
@ 时间: 2025-06-10 11:13:06 @ 时间: 2025-06-10 11:13:06
@ 功能: 输出结果 @ 功能: 输出结果
*/ */
const valPrint = (val:any[],orgList:any[]) => { const valPrint = (val:any[],orgList:any) => {
let title = new Array let title = new Array
if(Array.isArray(val)){ if(Array.isArray(val)){
if(Array.isArray(orgList)){ if(Array.isArray(orgList)){
@ -157,10 +208,14 @@ const valPrint = (val:any[],orgList:any[]) => {
} }
return title.join("、") return title.join("、")
} }
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
</script> </script>
<template> <template>
<el-checkbox-group <el-checkbox-group
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="control" v-bind="control"
v-model="value" v-model="value"
:style="getFormItemInputStyle(configStyle,4)" :style="getFormItemInputStyle(configStyle,4)"

2
src/components/lowCode/assistant/colorPickerPage.vue

@ -4,6 +4,8 @@
@ 备注: 取色器 @ 备注: 取色器
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { uploadUrl } from '@/api/lowCode/form/fieldUnit';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue?: string modelValue?: string

88
src/components/lowCode/assistant/digitpage.vue

@ -5,6 +5,8 @@
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -79,9 +81,93 @@ const valPrint = (val:any,dateVal:any) => {
return val return val
} }
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
const judgeIsDisabled = (key:string) => {
// return false
if (type.value === 3) {
return true //
}
if (type.value === 1 && config.value.addDisabled) {
return true
}
if (type.value === 2 && config.value.editDisabled) {
return true //
}
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template> <template>
<el-input v-if="props.types!=3" v-bind="$props" v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" oninput ="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '')" placeholder="请输入"> <el-input v-if="props.types!=3&&judgeIsShow(data.name)" v-bind="$props" v-model="value" :style="getFormItemInputStyle(configStyle,2)" :input-style="getFormItemInputStyle(configStyle,3)" oninput ="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '')" placeholder="请输入">
<template #prepend v-if="config.prepend"> <template #prepend v-if="config.prepend">
<div v-if="getInputSlot('p')"> <div v-if="getInputSlot('p')">

132
src/components/lowCode/assistant/inputPage.vue

@ -5,9 +5,13 @@
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import { import {
constFormProps constFormProps
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -72,7 +76,7 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
@ 功能: 判断是否禁用 @ 功能: 判断是否禁用
*/ */
const judgeIsDisabled = (key:string) => { const judgeIsDisabled = (key:string) => {
return false // return false
if (type.value === 3) { if (type.value === 3) {
return true // return true //
} }
@ -82,31 +86,43 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") { let myPower = curNodePowerAry() //
if(props.purview.length < 1){ if(Array.isArray(myPower) && myPower.length > 0){
return false; let isOk = false
}else{ myPower.forEach((item:powerAryInfo) => {
let isShow = true; if(key == item.id){
props.purview.forEach((item)=>{ isOk = !item.isEdit
if(item.nodeKey == props.nodeKey){ }
})
return isOk
}else{
return false
}
// if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") {
// if(props.purview.length < 1){
// return false;
// }else{
// let isShow = true;
// props.purview.forEach((item)=>{
// if(item.nodeKey == props.nodeKey){
if(item.powerAry && item.powerAry.length > 0){ // if(item.powerAry && item.powerAry.length > 0){
item.powerAry.forEach((itm)=>{ // item.powerAry.forEach((itm)=>{
if(itm.id == key){ // if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook) // console.log("",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit // isShow = !itm.isEdit
} // }
}) // })
} // }
} // }
}) // })
return isShow // return isShow
} // }
}else{ // }else{
return false; // return false;
} // }
} }
/****input slot处理***/ /****input slot处理***/
const getInputSlot = (key?: string) => { const getInputSlot = (key?: string) => {
@ -122,8 +138,73 @@ const getInputSlot = (key?: string) => {
} }
return control return control
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
</script> </script>
<template> <template>
<div class="boxCass">
<el-input <el-input
v-if="props.types!=3" v-if="props.types!=3"
v-bind="control" v-bind="control"
@ -132,6 +213,7 @@ const getInputSlot = (key?: string) => {
:style="getFormItemInputStyle(configStyle,2)" :style="getFormItemInputStyle(configStyle,2)"
:input-style="getFormItemInputStyle(configStyle,3)" :input-style="getFormItemInputStyle(configStyle,3)"
:placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)" :placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)"
:disabled="judgeIsDisabled(data.name)"
> >
<template #prepend v-if="config.prepend"> <template #prepend v-if="config.prepend">
<div v-if="getInputSlot('p')"> <div v-if="getInputSlot('p')">
@ -159,9 +241,13 @@ const getInputSlot = (key?: string) => {
</template> </template>
</el-input> </el-input>
<el-text v-else class="wordColor">{{value}}</el-text> <el-text v-else class="wordColor">{{value}}</el-text>
</div>
</template> </template>
<style lang='scss' scoped> <style lang='scss' scoped>
.wordColor{ .wordColor{
color:#000000; color:#000000;
} }
.boxCass{
width:100%;
}
</style> </style>

14
src/components/lowCode/assistant/lowcodeImage.vue

@ -8,7 +8,7 @@ import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { uploadUrl } from '@/api/lowCode/form/fieldUnit' import { uploadUrl } from '@/api/lowCode/form/fieldUnit'
import { uploadFiledTinymce } from '@/api/common/public' import { uploadFiledTinymce } from '@/api/common/public'
import errimg from '@/assets/image/404_images/imgNotFound.png' import errimg from '@/assets/image/404_images/imgNotFound.png'
import { ref,useAttrs,computed,onMounted } from 'vue' import { useAttrs,computed,onMounted } from 'vue'
import { Plus } from '@element-plus/icons-vue' import { Plus } from '@element-plus/icons-vue'
import type { UploadProps, UploadUserFile } from 'element-plus' import type { UploadProps, UploadUserFile } from 'element-plus'
@ -18,7 +18,7 @@ const props = withDefaults(
modelValue?: string modelValue?: string
disabled?: boolean disabled?: boolean
tablekey?: Object tablekey?: Object
data?: Object data?: any
formTableSetUp?: Object formTableSetUp?: Object
imgUrl?: string imgUrl?: string
}>(), }>(),
@ -52,7 +52,7 @@ const imgLoading = ref(false)
const imgPath = ref(errimg) const imgPath = ref(errimg)
// //
const beforeAvatarUpload = (rawFile) => { const beforeAvatarUpload = (rawFile: { type: string; size: number }) => {
//imgLoading.value = true //imgLoading.value = true
// console.log("",rawFile.type) // console.log("",rawFile.type)
let imgType = ['image/jpeg','image/jpg','image/png','image/gif','image/svg'] let imgType = ['image/jpeg','image/jpg','image/png','image/gif','image/svg']
@ -75,8 +75,8 @@ const beforeAvatarUpload = (rawFile) => {
} }
// //
const handleAvatarSuccess = ( const handleAvatarSuccess = (
response, response: { data: { url: string } },
uploadFile uploadFile: any
) => { ) => {
// imageUrl.value = URL.createObjectURL(uploadFile.raw!) // imageUrl.value = URL.createObjectURL(uploadFile.raw!)
// console.log("",value) // console.log("",value)
@ -112,7 +112,7 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
} }
const fileUpload = ref(null); const fileUpload = ref();
// capture="camera" // capture="camera"
const addCaptureAttribute = () => { const addCaptureAttribute = () => {
@ -148,7 +148,7 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
//console.log(uploadFile, uploadFiles) //console.log(uploadFile, uploadFiles)
let arrStr = '' let arrStr = ''
uploadFiles.forEach((element) => { uploadFiles.forEach((element:any) => {
//console.log(element.response.data.url) //console.log(element.response.data.url)
arrStr+= element.response.data.url+"," arrStr+= element.response.data.url+","
}); });

64
src/components/lowCode/assistant/orgCitys.vue

@ -12,6 +12,9 @@ import {
import validate from "@/api/lowCode/form/validate" import validate from "@/api/lowCode/form/validate"
import { FormList,FormItem } from "@/api/lowCode/form/type" import { FormList,FormItem } from "@/api/lowCode/form/type"
import AreaObj from '@/utils/orgcitys/pca.json' import AreaObj from '@/utils/orgcitys/pca.json'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -243,6 +246,67 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty) return AnalysisInputCss(ele?.inputStyle,sty)
} }
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template> <template>
<div v-if="type === 3" class="form-value" v-html="value"></div> <div v-if="type === 3" class="form-value" v-html="value"></div>

114
src/components/lowCode/assistant/radioPage.vue

@ -5,10 +5,13 @@
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import { import {
formatNumber, formatNumber,
constFormProps constFormProps,
constGetControlByName
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -67,13 +70,73 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty) return AnalysisInputCss(ele?.inputStyle,sty)
} }
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-07-27 15:11:42 @ 时间: 2024-07-27 15:11:42
@ 功能: 判断是否禁用 @ 功能: 判断是否禁用
*/ */
const judgeIsDisabled = (key:string) => { const judgeIsDisabled = (key:string) => {
return false // return false
if (type.value === 3) { if (type.value === 3) {
return true // return true //
} }
@ -83,32 +146,20 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") { let myPower = curNodePowerAry() //
if(props.purview.length < 1){ if(Array.isArray(myPower) && myPower.length > 0){
return false; let isOk = false
}else{ myPower.forEach((item:powerAryInfo) => {
let isShow = true; if(key == item.id){
props.purview.forEach((item)=>{ isOk = !item.isEdit
if(item.nodeKey == props.nodeKey){ }
})
if(item.powerAry && item.powerAry.length > 0){ return isOk
item.powerAry.forEach((itm)=>{ }else{
if(itm.id == key){ return false
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook) }
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
} }
const getControlByName = inject(constGetControlByName) as any
/****input slot处理***/ /****input slot处理***/
const getInputSlot = (key?: string) => { const getInputSlot = (key?: string) => {
const slot = key === 'p' ? config.value.prepend : config.value.append const slot = key === 'p' ? config.value.prepend : config.value.append
@ -142,7 +193,7 @@ const transformOption = (val: string | number, type?: string) => {
@ 时间: 2025-06-10 11:13:06 @ 时间: 2025-06-10 11:13:06
@ 功能: 输出结果 @ 功能: 输出结果
*/ */
const valPrint = (val:any,orgList:any[]) => { const valPrint = (val:any,orgList:any) => {
let title = "" let title = ""
if(Array.isArray(orgList)){ if(Array.isArray(orgList)){
orgList.forEach((item: any) => { orgList.forEach((item: any) => {
@ -153,14 +204,19 @@ const valPrint = (val:any,orgList:any[]) => {
} }
return title return title
} }
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
</script> </script>
<template> <template>
<el-radio-group <el-radio-group
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="control" v-bind="control"
v-model="value" v-model="value"
:style="getFormItemInputStyle(configStyle,4)" :style="getFormItemInputStyle(configStyle,4)"
:disabled="judgeIsDisabled(data.name)"
> >
<el-radio <el-radio
:key="index" :key="index"

101
src/components/lowCode/assistant/selectPage.vue

@ -5,10 +5,15 @@
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import { import {
formatNumber, formatNumber,
constFormProps constFormProps,
constGetControlByName
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
import { debounce } from '@/utils/lowCode/item';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -67,6 +72,66 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
return AnalysisInputCss(ele?.inputStyle,sty) return AnalysisInputCss(ele?.inputStyle,sty)
} }
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-07-27 15:11:42 @ 时间: 2024-07-27 15:11:42
@ -83,32 +148,9 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") { judgeIsEdit(key)
if(props.purview.length < 1){
return false;
}else{
let isShow = true;
props.purview.forEach((item)=>{
if(item.nodeKey == props.nodeKey){
if(item.powerAry && item.powerAry.length > 0){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
} }
const getControlByName = inject(constGetControlByName) as any
/****input slot处理***/ /****input slot处理***/
const getInputSlot = (key?: string) => { const getInputSlot = (key?: string) => {
const slot = key === 'p' ? config.value.prepend : config.value.append const slot = key === 'p' ? config.value.prepend : config.value.append
@ -142,7 +184,7 @@ const transformOption = (val: string | number, type?: string) => {
@ 时间: 2025-06-10 11:13:06 @ 时间: 2025-06-10 11:13:06
@ 功能: 输出结果 @ 功能: 输出结果
*/ */
const valPrint = (val:any[],orgList:any[]) => { const valPrint = (val:any[],orgList:any) => {
if(Array.isArray(val)){ if(Array.isArray(val)){
let title = new Array let title = new Array
@ -174,10 +216,13 @@ const valPrint = (val:any[],orgList:any[]) => {
} }
} }
const getAxiosOptions = debounce((data?: any) => {
})
</script> </script>
<template> <template>
<SelectDesign <SelectDesign
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(data.name)"
:data="data" :data="data"
:disabled="judgeIsDisabled(data.name)" :disabled="judgeIsDisabled(data.name)"
v-model="value" v-model="value"

90
src/components/lowCode/assistant/textareaPage.vue

@ -4,9 +4,11 @@
@ 备注: 多行文本 @ 备注: 多行文本
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { FormList } from '@/api/lowCode/form/type';
import { import {
constFormProps constFormProps
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -49,16 +51,100 @@ const getLabel = (val:any) => {
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
const judgeIsDisabled = (key:string) => {
// return false
if (type.value === 3) {
return true //
}
if (type.value === 1 && config.value.addDisabled) {
return true
}
if (type.value === 2 && config.value.editDisabled) {
return true //
}
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template> <template>
<el-input <el-input
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="props.control" v-bind="props.control"
v-model="value" v-model="value"
type="textarea" type="textarea"
:autosize="{ minRows: 2, maxRows: 20 }" :autosize="{ minRows: 2, maxRows: 20 }"
:placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)" :placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)"
:disabled="judgeIsDisabled(data.name)"
/> />
<el-text v-else class="wordColor">{{value}}</el-text> <el-text v-else class="wordColor">{{value}}</el-text>
</template> </template>

5
src/components/lowCode/assistant/timePickerPage.vue

@ -8,6 +8,7 @@ import dayJs from 'dayjs'
import { import {
constFormProps constFormProps
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { FormList } from '@/api/lowCode/form/type';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
@ -50,12 +51,12 @@ const getLabel = (val:any) => {
} }
// //
const handleClick = (event) => { const handleClick = (event: { target: { readOnly: boolean; }; }) => {
// //
event.target.readOnly = true; event.target.readOnly = true;
}; };
// //
const valPrint = (val:number,group:string,type:string) => { const valPrint = (val:number,group?:string,type?:string) => {
return dayJs(val).format('HH:mm:ss'); return dayJs(val).format('HH:mm:ss');
} }
</script> </script>

65
src/components/lowCode/assistant/uploadPage.vue

@ -16,6 +16,7 @@ import {
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import { computed } from 'vue'; import { computed } from 'vue';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@ -164,12 +165,73 @@ function openUrl1(url:string) {
window.open(url, '_blank') window.open(url, '_blank')
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template><!-- {'{types}} --> <template><!-- {'{types}} -->
<div style="width: 100%; <div style="width: 100%;
display: inline;"> display: inline;">
<el-upload <el-upload
v-if="props.types!=3" v-if="props.types!=3&&judgeIsShow(props.name)"
v-bind="props.control" v-bind="props.control"
:action="uploadUrl" :action="uploadUrl"
:name="props.name" :name="props.name"
@ -179,6 +241,7 @@ function openUrl1(url:string) {
:on-error="uploadError" :on-error="uploadError"
:on-success="uploadSuccess" :on-success="uploadSuccess"
:on-remove="uploadRemove" :on-remove="uploadRemove"
> >
<i class="icon-plus" v-if="props.control?.listType=='picture-card'"> <i class="icon-plus" v-if="props.control?.listType=='picture-card'">
<i class="fa fa-paperclip"></i> <i class="fa fa-paperclip"></i>

126
src/components/lowCode/formItem.vue

@ -21,6 +21,9 @@ import request from '@/utils/axios/index'
import { Md5 } from 'ts-md5' import { Md5 } from 'ts-md5'
import { debounce } from '@/utils/lowCode/item/index' import { debounce } from '@/utils/lowCode/item/index'
import { uploadUrl } from '@/api/lowCode/form/fieldUnit' import { uploadUrl } from '@/api/lowCode/form/fieldUnit'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
// //
import OrgCitys from '@/components/lowCode/assistant/orgCitys.vue' import OrgCitys from '@/components/lowCode/assistant/orgCitys.vue'
import UploadPage from '@/components/lowCode/assistant/uploadPage.vue' import UploadPage from '@/components/lowCode/assistant/uploadPage.vue'
@ -331,31 +334,46 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") {
if(props.purview.length < 1){ let myPower = curNodePowerAry()
return false; // console.log("-3-->",myPower)
}else{ if(Array.isArray(myPower) && myPower.length > 0){
let isShow = true; let isOk = false
props.purview.forEach((item)=>{ myPower.forEach((item:powerAryInfo) => {
if(item.nodeKey == props.nodeKey){ if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
// if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") {
// if(props.purview.length < 1){
// return false;
// }else{
// let isShow = true;
// props.purview.forEach((item)=>{
// if(item.nodeKey == props.nodeKey){
if(item.powerAry && item.powerAry.length > 0){ // if(item.powerAry && item.powerAry.length > 0){
item.powerAry.forEach((itm)=>{ // item.powerAry.forEach((itm)=>{
if(itm.id == key){ // if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook) // console.log("",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit // isShow = !itm.isEdit
} // }
}) // })
} // }
} // }
}) // })
return isShow // return isShow
} // }
}else{
return false; // }else{
} // return false;
// }
} }
/****input slot处理***/ /****input slot处理***/
const getInputSlot = (key?: string) => { const getInputSlot = (key?: string) => {
@ -567,6 +585,67 @@ const handleClick = (event) => {
// //
event.target.readOnly = true; event.target.readOnly = true;
}; };
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template> <template>
<div> <div>
@ -583,6 +662,7 @@ const handleClick = (event) => {
:class="config.className" :class="config.className"
:rules="itemRules as any" :rules="itemRules as any"
:label="getLabel(data.item as FormItem)" :label="getLabel(data.item as FormItem)"
v-if="judgeIsShow(data.name)"
> >
<template #label v-if="config.help"> <template #label v-if="config.help">
<span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span> <span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span>
@ -599,7 +679,7 @@ const handleClick = (event) => {
:type="data.type === 'password' ? 'password' : 'text'" :type="data.type === 'password' ? 'password' : 'text'"
:style="getFormItemInputStyle(configStyle,2)" :style="getFormItemInputStyle(configStyle,2)"
:input-style="getFormItemInputStyle(configStyle,3)" :input-style="getFormItemInputStyle(configStyle,3)"
v-if="['password','input'].includes(data.type)" v-if="['password','input'].includes(data.type) && judgeIsShow(data.name)"
:placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)" :placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)"
> >
<template #prepend v-if="config.prepend"> <template #prepend v-if="config.prepend">

122
src/components/lowCode/newFormItem.vue

@ -15,6 +15,7 @@ import {
} from '@/api/lowCode/utils'; } from '@/api/lowCode/utils';
import validate from "@/api/lowCode/form/validate" import validate from "@/api/lowCode/form/validate"
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' // import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' //
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
// //
import InputPage from '@/components/lowCode/assistant/inputPage.vue' import InputPage from '@/components/lowCode/assistant/inputPage.vue'
import DigitpagePage from '@/components/lowCode/assistant/digitpage.vue' import DigitpagePage from '@/components/lowCode/assistant/digitpage.vue'
@ -219,31 +220,44 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) { if (type.value === 2 && config.value.editDisabled) {
return true // return true //
} }
if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") { let myPower = curNodePowerAry()
if(props.purview.length < 1){ // console.log("-3-->",myPower)
return false; if(Array.isArray(myPower) && myPower.length > 0){
}else{ let isOk = false
let isShow = true; myPower.forEach((item:powerAryInfo) => {
props.purview.forEach((item)=>{ if(key == item.id){
if(item.nodeKey == props.nodeKey){ isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
// if(props.nodeKey != undefined && props.purview != undefined && props.purview != null && props.purview != null && props.purview != "" && props.purview != "") {
// if(props.purview.length < 1){
// return false;
// }else{
// let isShow = true;
// props.purview.forEach((item)=>{
// if(item.nodeKey == props.nodeKey){
if(item.powerAry && item.powerAry.length > 0){ // if(item.powerAry && item.powerAry.length > 0){
item.powerAry.forEach((itm)=>{ // item.powerAry.forEach((itm)=>{
if(itm.id == key){ // if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook) // console.log("",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit // isShow = !itm.isEdit
} // }
}) // })
} // }
} // }
}) // })
return isShow // return isShow
} // }
}else{ // }else{
return false; // return false;
} // }
} }
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ -410,7 +424,66 @@ const testPage = (val:any) =>{
console.log("刷新数据-------->", val); console.log("刷新数据-------->", val);
} }
//
const allNodePwoer = inject('flowNodePower') as any
const currentNodePowerKey = inject('currentNodeKey') as any
//
const curNodePowerAry = () => {
if(currentNodePowerKey && currentNodePowerKey.value && currentNodePowerKey.value != ""){
if(allNodePwoer.value && Array.isArray(allNodePwoer.value) && allNodePwoer.value.length > 0){
let powerAry: any[] = []
allNodePwoer.value.forEach((item:nodePoweInfo) => {
if(item.nodeKey == currentNodePowerKey.value){
powerAry = item.powerAry
}
})
return powerAry
}else{
return []
}
}else{
return []
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可见
*/
const judgeIsShow = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = true
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = item.isLook
}
})
return isOk
}else{
return true
}
}
/**
@ 作者: 秦东
@ 时间: 2025-11-06 14:03:21
@ 功能: 判断此组件是否可编辑
*/
const judgeIsEdit = (key: string) => {
let myPower = curNodePowerAry() //
if(Array.isArray(myPower) && myPower.length > 0){
let isOk = false
myPower.forEach((item:powerAryInfo) => {
if(key == item.id){
isOk = !item.isEdit
}
})
return isOk
}else{
return false
}
}
</script> </script>
<template> <template>
<el-form-item <el-form-item
@ -420,6 +493,7 @@ const testPage = (val:any) =>{
:label="getLabel(data.item as FormItem)" :label="getLabel(data.item as FormItem)"
:rules="itemRules" :rules="itemRules"
class="rlabel" class="rlabel"
v-if="judgeIsShow(data.name)"
> >
<template #label v-if="config.help"> <template #label v-if="config.help">
<span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span> <span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span>
@ -431,7 +505,7 @@ const testPage = (val:any) =>{
<!-- {{ data.type }} --> <!-- {{ data.type }} -->
<!--关联表单--> <!--关联表单-->
<component <component
v-if="['associatedForms'].includes(data.type)" v-if="['associatedForms'].includes(data.type) && judgeIsShow(data.name)"
:is="currentComponent" :is="currentComponent"
:data="data" :data="data"
:formProps = "formProps" :formProps = "formProps"
@ -447,7 +521,7 @@ const testPage = (val:any) =>{
/> />
<!--视频--> <!--视频-->
<component <component
v-if="['videoUpAndPlay'].includes(data.type)" v-if="['videoUpAndPlay'].includes(data.type) && judgeIsShow(data.name)"
:types="type" :types="type"
:is="currentComponent" :is="currentComponent"
:data="data" :data="data"

9
src/views/formTable/page/cardPageNew.vue

@ -12,6 +12,7 @@ import { softDeletion,retractRunWorkFlow } from '@/api/lowCode/taskapi/managemen
import { Picture as IconPicture } from '@element-plus/icons-vue' import { Picture as IconPicture } from '@element-plus/icons-vue'
import SearchSelect from '@/components/lowCode/selectSearch.vue' import SearchSelect from '@/components/lowCode/selectSearch.vue'
import AppPageInfo from '@/views/formTable/pageInfo.vue' import AppPageInfo from '@/views/formTable/pageInfo.vue'
import { EpPropMergeType } from 'element-plus/es/utils/index.mjs'
const props = defineProps({ const props = defineProps({
@ -59,7 +60,7 @@ const props = defineProps({
} }
}); });
const lookInfo = ref<any>({}) const lookInfo = ref<any>({})
const taskScrollbar = ref(null) // const taskScrollbar = ref() //
const loadingList = ref(false) // const loadingList = ref(false) //
const emits = defineEmits(['update:pageIdAry',"searchData"]) const emits = defineEmits(['update:pageIdAry',"searchData"])
const loadText = ref("数据加载中,请稍后......") const loadText = ref("数据加载中,请稍后......")
@ -68,10 +69,12 @@ const _scrollTop = ref<number>(0)
const pageTotal = ref<number>(0) // const pageTotal = ref<number>(0) //
const state = reactive({ const state = reactive({
page:1, page:1,
pagesize: props.stateListInfo.config?.pageSize || 2 pagesize: props.stateListInfo.config?.pageSize || 2,
loading:false
}) })
const listPage = ref<any[]>([]) const listPage = ref<any[]>([])
const openAppPage = ref(false) const openAppPage = ref(false)
const asflookPageInfoIsShow = ref(false)
const currentAsfTableDataList = ref([])// const currentAsfTableDataList = ref([])//
const asfAppContent = reactive<any>({ const asfAppContent = reactive<any>({
appKey:props.appKey, appKey:props.appKey,
@ -455,7 +458,7 @@ const delTask = (val:any) => {
tableKey:val.tableKey, tableKey:val.tableKey,
isTrue: 2, isTrue: 2,
}; };
softDeletion(sendData).then((data) => { softDeletion(sendData).then((data: any) => {
ElNotification({ ElNotification({
title: "系统提示!", title: "系统提示!",
message: data.mag ? data.mag : "删除成功", message: data.mag ? data.mag : "删除成功",

69
src/views/formTable/taskListPage.vue

@ -13,7 +13,7 @@ import { inputUnit,timeUnit,choiceUnit,switchUnit,orgUnit,checkboxUnit } from '@
import { useDesignFormStore } from '@/utils/pinia/stores/lowCode/designForm' import { useDesignFormStore } from '@/utils/pinia/stores/lowCode/designForm'
import{ json2string,string2json,stringToObj } from '@/utils/lowCode/form' import{ json2string,string2json,stringToObj } from '@/utils/lowCode/form'
import{ submitButton,submitFlowButton } from '@/utils/lowCode/const' import{ submitButton,submitFlowButton } from '@/utils/lowCode/const'
import { appWorkFlow } from '@/api/workFlow/type' import { appWorkFlow,nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
import { softDeletion } from '@/api/lowCode/taskapi/management' import { softDeletion } from '@/api/lowCode/taskapi/management'
import SvgIcon from '@/components/svgIcon/index.vue' import SvgIcon from '@/components/svgIcon/index.vue'
@ -26,20 +26,25 @@ import TimeAxis from '@/views/formTable/page/timeAxis.vue'
import Calendar from '@/views/formTable/page/calendar.vue' import Calendar from '@/views/formTable/page/calendar.vue'
import MapPage from '@/views/formTable/page/mapPage.vue' import MapPage from '@/views/formTable/page/mapPage.vue'
import AppPageInfo from '@/views/formTable/pageInfo.vue' import AppPageInfo from '@/views/formTable/pageInfo.vue'
import { tableButton } from '@/api/common/tableButton'
import { FormInstance } from 'element-plus'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const appKey = ref<string>(route.query.key) const appKey = ref<any>(route.query.key)
const appId = ref<string>(route.query.id) const appId = ref<any>(route.query.id)
const taskTitle = ref<string>(route.query.title) const taskTitle = ref<any>(route.query.title)
const taskId = ref<string>(route.query.formid) const taskId = ref<any>(route.query.formid)
const taskKey = ref<string>(route.query.formKey) const taskKey = ref<any>(route.query.formKey)
const activeName = ref('1') const activeName = ref('1')
const pageIdAry = ref<string[]>([]) const pageIdAry = ref<string[]>([])
const formTableStr = ref<string>('') const formTableStr = ref<string>('')
const cardPageRef = ref(null) // const cardPageRef = ref() //
const appFlowInfo = ref<appWorkFlow>(""); // const appFlowInfo = ref<appWorkFlow>(); //
const currterNodePower = ref<nodePoweInfo[]>([])
const nodeKey = ref<string>("");
const appContent = reactive<any>({ const appContent = reactive<any>({
appKey:route.query.key, appKey:route.query.key,
@ -190,11 +195,16 @@ const initLoadData = () => {
// console.log(":",taskId) // console.log(":",taskId)
gainAppPageInfo({id:taskKey.value}) gainAppPageInfo({id:taskKey.value})
.then((data) => { .then((data) => {
// console.log(":",data) console.log("获取初始化表单数据:",data)
// appInitData.value = data.data // appInitData.value = data.data
// console.log("---!",appInitData.value) // console.log("---!",appInitData.value)
formTableStr.value = data.data.appForm.mastesformjson formTableStr.value = data.data.appForm.mastesformjson
if(data.data.powerAry && Array.isArray(data.data.powerAry) && data.data.powerAry.length > 0){
currterNodePower.value = data.data.powerAry
}
nodeKey.value = data.data.nodeKey?data.data.nodeKey:"";
if(data.data.appForm.listjson!=null && data.data.appForm.listjson != ''){ if(data.data.appForm.listjson!=null && data.data.appForm.listjson != ''){
let stateData = string2json(data.data.appForm.listjson) let stateData = string2json(data.data.appForm.listjson)
let holeControlAndConfigStateData = string2json(data.data.appForm.mastesformjson) let holeControlAndConfigStateData = string2json(data.data.appForm.mastesformjson)
@ -278,7 +288,7 @@ const initLoadData = () => {
if(stateData.view&&stateData.view.card){ if(stateData.view&&stateData.view.card){
stateData.view.card.status=true stateData.view.card.status=true
stateData.view.card.isClick = true stateData.view.card.isClick = true
activeName.value = 2 activeName.value = "2"
} }
// console.log("--------------<",stateData.view) // console.log("--------------<",stateData.view)
stateList.view = stateData.view stateList.view = stateData.view
@ -396,6 +406,13 @@ const unitIsShow = (val:tableButton,unitName:string) => {
const getNewAppForm = () => { const getNewAppForm = () => {
gainAppPageInfo({id:taskKey.value}) gainAppPageInfo({id:taskKey.value})
.then((data) => { .then((data) => {
console.log("获取初始化表单数据:==========>",data)
if(data.data.powerAry && Array.isArray(data.data.powerAry) && data.data.powerAry.length > 0){
currterNodePower.value = data.data.powerAry
}
nodeKey.value = data.data.nodeKey?data.data.nodeKey:"";
stateForm.formData = stringToObj(data.data.appForm.mastesform); stateForm.formData = stringToObj(data.data.appForm.mastesform);
stateForm.dict = string2json(data.data.appForm.dict); stateForm.dict = string2json(data.data.appForm.dict);
stateForm.formData.powerstr = string2json(data.data.appForm.powerstr); stateForm.formData.powerstr = string2json(data.data.appForm.powerstr);
@ -428,7 +445,7 @@ const getNewAppForm = () => {
@ 时间: 2024-11-04 13:59:42 @ 时间: 2024-11-04 13:59:42
@ 功能: 功能按钮动作 @ 功能: 功能按钮动作
*/ */
const setUpClick = (val:string,id:string) => { const setUpClick = (val:any,id?:string) => {
// console.log("",val,"----id----->",id,"-----formId---->",pageIdAry.value) // console.log("",val,"----id----->",id,"-----formId---->",pageIdAry.value)
if(val.key == "newAdd"){ if(val.key == "newAdd"){
getNewAppForm() getNewAppForm()
@ -445,7 +462,7 @@ const setUpClick = (val:string,id:string) => {
id: pageIdAry.value, id: pageIdAry.value,
isTrue: 2, isTrue: 2,
}; };
softDeletion(sendData).then((data) => { softDeletion(sendData).then((data: { mag: any }) => {
// console.log('cancel!',data) // console.log('cancel!',data)
ElNotification({ ElNotification({
title: "温馨提示!", title: "温馨提示!",
@ -492,7 +509,7 @@ const resetFields = (formEl: FormInstance | undefined) => {
@ 时间: 2024-11-06 14:45:29 @ 时间: 2024-11-06 14:45:29
@ 功能: 切换视图 @ 功能: 切换视图
*/ */
const switchTabs = (val:string) => { const switchTabs = (val:string|number) => {
activeName.value = val.toString() activeName.value = val.toString()
} }
@ -501,12 +518,16 @@ const switchTabs = (val:string) => {
@ 时间: 2024-11-21 13:33:52 @ 时间: 2024-11-21 13:33:52
@ 功能: 执行操作 @ 功能: 执行操作
*/ */
const performAction = (val) => {} const performAction = () => {}
const transformOption = (val:any,dataVal:any) => {}
//
provide('flowNodePower', currterNodePower)
provide('currentNodeKey', nodeKey)
</script> </script>
<template> <template>
<div> <div>
<Header :header-title="taskTitle" :app-key="appKey" menu-tree="" :call-back-click="true" /> <Header :header-title="taskTitle" :app-key="appKey" :call-back-click="true" />
<div ref="container" class="table-list-comm"> <div ref="container" class="table-list-comm">
<div class="contentBetween"> <div class="contentBetween">
<div v-if="stateList.tableData.controlBtn.length > 0"> <div v-if="stateList.tableData.controlBtn.length > 0">
@ -521,31 +542,31 @@ const performAction = (val) => {}
</div> </div>
<div class="listStely"> <div class="listStely">
<el-space wrap> <el-space wrap>
<SvgIcon icon-class="search" :size="20" @click="openSearch" /> <SvgIcon icon-class="search" :size="'20'" @click="openSearch" />
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
视图<SvgIcon icon-class="arrow-down" :size="15" /> 视图<SvgIcon icon-class="arrow-down" :size="'15'" />
</span> </span>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-if="stateList.view.list.status" @click="switchTabs(1)"> <el-dropdown-item v-if="stateList.view.list.status" @click="switchTabs(1)">
<div :class="activeName=='1' ? 'pickMenu' : ''"><SvgIcon icon-class="liebiao" :size="15" />列表</div> <div :class="activeName=='1' ? 'pickMenu' : ''"><SvgIcon icon-class="liebiao" :size="'15'" />列表</div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="stateList.view.card.status" @click="switchTabs(2)"> <el-dropdown-item v-if="stateList.view.card.status" @click="switchTabs(2)">
<div :class="activeName=='2' ? 'pickMenu' : ''"><SvgIcon icon-class="kapian" :size="15" />卡片</div> <div :class="activeName=='2' ? 'pickMenu' : ''"><SvgIcon icon-class="kapian" :size="'15'" />卡片</div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="stateList.view.date.status" @click="switchTabs(3)"> <el-dropdown-item v-if="stateList.view.date.status" @click="switchTabs(3)">
<div :class="activeName=='3' ? 'pickMenu' : ''"><SvgIcon icon-class="rili" :size="15" />日历</div> <div :class="activeName=='3' ? 'pickMenu' : ''"><SvgIcon icon-class="rili" :size="'15'" />日历</div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="stateList.view.time.status" @click="switchTabs(4)"> <el-dropdown-item v-if="stateList.view.time.status" @click="switchTabs(4)">
<div :class="activeName=='4' ? 'pickMenu' : ''"><SvgIcon icon-class="shijianzhou" :size="15" />时间轴</div> <div :class="activeName=='4' ? 'pickMenu' : ''"><SvgIcon icon-class="shijianzhou" :size="'15'" />时间轴</div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="stateList.view.gantt.status" @click="switchTabs(5)"> <el-dropdown-item v-if="stateList.view.gantt.status" @click="switchTabs(5)">
<div :class="activeName=='5' ? 'pickMenu' : ''"><SvgIcon icon-class="gantetu" :size="15" />甘特图</div> <div :class="activeName=='5' ? 'pickMenu' : ''"><SvgIcon icon-class="gantetu" :size="'15'" />甘特图</div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="stateList.view.map.status" @click="switchTabs(6)"> <el-dropdown-item v-if="stateList.view.map.status" @click="switchTabs(6)">
<div :class="activeName=='6' ? 'pickMenu' : ''"><SvgIcon icon-class="ditu" :size="15" />地图</div> <div :class="activeName=='6' ? 'pickMenu' : ''"><SvgIcon icon-class="ditu" :size="'15'" />地图</div>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
@ -584,7 +605,7 @@ const performAction = (val) => {}
v-model="item.value" v-model="item.value"
type="datetime" type="datetime"
:placeholder="'请选择'+item.label" :placeholder="'请选择'+item.label"
:shortcuts="shortcuts"
v-if="unitIsShow(item,'time')" v-if="unitIsShow(item,'time')"
/> />
<SearchSelect <SearchSelect

2
src/views/home/scanQrCodeInput.vue

@ -29,7 +29,7 @@
</div> </div>
</template> </template>
<script> <script >
// WebRTC ok // WebRTC ok
import 'webrtc-adapter' import 'webrtc-adapter'
import { BrowserMultiFormatReader } from '@zxing/library' import { BrowserMultiFormatReader } from '@zxing/library'

Loading…
Cancel
Save