Browse Source

Merge branch 'q_v1'

lwx_v12
herenshan112 1 week ago
parent
commit
34b76d4e3e
  1. 5
      src/api/lowCode/form/type.ts
  2. 20
      src/api/taskapi/types.ts
  3. 20
      src/api/workFlow/type.ts
  4. 80
      src/components/formTable/formItemGroup.vue
  5. 77
      src/components/lowCode/assistant/cascader.vue
  6. 113
      src/components/lowCode/assistant/checkboxPage.vue
  7. 2
      src/components/lowCode/assistant/colorPickerPage.vue
  8. 88
      src/components/lowCode/assistant/digitpage.vue
  9. 132
      src/components/lowCode/assistant/inputPage.vue
  10. 14
      src/components/lowCode/assistant/lowcodeImage.vue
  11. 64
      src/components/lowCode/assistant/orgCitys.vue
  12. 114
      src/components/lowCode/assistant/radioPage.vue
  13. 101
      src/components/lowCode/assistant/selectPage.vue
  14. 90
      src/components/lowCode/assistant/textareaPage.vue
  15. 5
      src/components/lowCode/assistant/timePickerPage.vue
  16. 65
      src/components/lowCode/assistant/uploadPage.vue
  17. 126
      src/components/lowCode/formItem.vue
  18. 122
      src/components/lowCode/newFormItem.vue
  19. 5
      src/utils/pinia/stores/lowCode/entry.ts
  20. 16
      src/utils/pinia/stores/modules/userOrders.ts
  21. 12
      src/views/common/header/formTable/header.vue
  22. 9
      src/views/formTable/page/cardPage.vue
  23. 17
      src/views/formTable/page/cardPageNew.vue
  24. 2
      src/views/formTable/page/flowAndLog.vue
  25. 297
      src/views/formTable/taskList.vue
  26. 75
      src/views/formTable/taskListPage.vue
  27. 2
      src/views/home/scanQrCodeInput.vue
  28. 19
      src/views/login/index.vue

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

@ -42,7 +42,8 @@ export interface tableFormStruct {
columns: any[];
config: Object;
controlBtn:any[];
operateBtn:any[]
operateBtn:any[];
columnsCheck?:any;
},
searchData: any[];
loading: boolean;
@ -54,7 +55,7 @@ export interface tableFormStruct {
openPageMode:string
},
tagList: Object,
formId: string;
formId: string|any;
formList: any[], // 所有可选表单数据源
name: string,
treeData: Object, // 左侧树相关

20
src/api/taskapi/types.ts

@ -0,0 +1,20 @@
//节点赋权
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[];
}

20
src/api/workFlow/type.ts

@ -92,4 +92,24 @@ export interface appFormInfo{
userpermit: string;
version: 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[];
}

80
src/components/formTable/formItemGroup.vue

@ -12,6 +12,8 @@ import { constFormBtnEvent,constFormProps } from '@/api/lowCode/utils';
import { useDesignFormStore } from '@/utils/pinia/stores/lowCode/designForm'
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { useAttrs,computed, onMounted, nextTick,ref,watch,onBeforeMount} from 'vue'
import { nodePoweInfo,powerAryInfo } from "@/api/taskapi/types";
import { formTableInfo } from '@/utils/pinia/stores/lowCode/entry'
const props = withDefaults(
defineProps<{
@ -539,6 +541,50 @@ const linksIf = (obj: FormList) => {
}
return 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
}
}
</script>
<template>
@ -551,17 +597,19 @@ const linksIf = (obj: FormList) => {
v-bind="element.control"
:class="[element.config?.className]"
>
<el-tab-pane
v-for="(item, tIndex) in element.columns"
:label="item.label"
:key="tIndex"
>
<FormItemGroup :data="item.list" :tableinfo="tableinfo" :org-and-man-tree="orgAndManTree" data-type="not-nested" />
</el-tab-pane>
<template v-for="(item, tIndex) in element.columns">
<el-tab-pane
:label="item.label"
:key="tIndex"
v-if="judgeIsShow(item.name)"
>
<FormItemGroup :data="item.list" :tableinfo="tableinfo" :org-and-man-tree="orgAndManTree" data-type="not-nested" />
</el-tab-pane>
</template>
</el-tabs>
</template>
<template v-else-if="element.type === 'title'">
<template v-else-if="element.type === 'title' && judgeIsShow(element.name)">
<!--标题-->
<div
class="title"
@ -576,7 +624,7 @@ const linksIf = (obj: FormList) => {
/>
</div>
</template>
<template v-else-if="element.type === 'txt'">
<template v-else-if="element.type === 'txt' && judgeIsShow(element.name)">
<!--文字-->
<div
v-bind="element.control"
@ -585,12 +633,12 @@ const linksIf = (obj: FormList) => {
>
</div>
</template>
<template v-else-if="element.type === 'table'">
<template v-else-if="element.type === 'table' && judgeIsShow(element.name)">
<el-divider v-if="element.item&&element.item.label" content-position="left" >{{element.item.label}}</el-divider>
<!-- <el-text class="tableTitle" v-if="element.item&&element.item.label">{{element.item.label}}</el-text> -->
<TablePage :data="element" :tableinfo="tableinfo" :org-and-man-tree="orgAndManTree" :type="type" @asf-value-changed="asfValueChanged" />
</template>
<template v-else-if="element.type === 'grid'">
<template v-else-if="element.type === 'grid' && judgeIsShow(element.name)">
<el-row class="form-row" :style="type === 15?'padding: 0 0 20px 0;':''" :class="[element.className]">
<el-col
@ -617,7 +665,7 @@ const linksIf = (obj: FormList) => {
</el-col>
</el-row>
</template>
<template v-else-if="element.type === 'card'">
<template v-else-if="element.type === 'card' && judgeIsShow(element.name)">
<el-collapse model-value="1">
<el-collapse-item :title="element.item.label" name="1">
<template #title v-if="element.help">
@ -628,11 +676,11 @@ const linksIf = (obj: FormList) => {
</el-collapse-item>
</el-collapse>
</template>
<template v-else-if="element.type === 'divider'">
<template v-else-if="element.type === 'divider' && judgeIsShow(element.name)">
<!--分割线-->
<el-divider v-bind="element.control">{{ element.item && element.item.label }}</el-divider>
</template>
<template v-else-if="element.type === 'div'">
<template v-else-if="element.type === 'div' && judgeIsShow(element.name)">
<!--div容器-->
<div
class="div-layout "
@ -648,7 +696,7 @@ const linksIf = (obj: FormList) => {
</div>
</template>
<template v-else-if="element.type === 'flex'">
<template v-else-if="element.type === 'flex' && judgeIsShow(element.name)">
<!---->
<FormItemGroup :tableinfo="props.tableinfo" :data="element.list" :alldata="props.alldata" data-type="not-flex" v-if="type === 15" />

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

@ -4,6 +4,9 @@
@ 备注: 级联选择器
-->
<script lang='ts' setup>
import { FormList } from '@/api/lowCode/form/type';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
modelValue?: string
@ -13,8 +16,8 @@ const props = withDefaults(
fileList?: Object
control?: Object
config?: Object
data?: Object
options?: Object
data?: FormList
options?: any
types?: number
}>(),
{}
@ -49,7 +52,7 @@ const handleChange = () => {
@ 时间: 2025-06-11 09:06:05
@ 功能: 获取值
*/
const valPrint = (val:string,orgList:any[]) => {
const valPrint = (val:string,orgList:any) => {
let title = treeData(orgList)
let nameAry = new Array
console.log("递归查询-2--->",val,title)
@ -105,7 +108,7 @@ interface TreeNodeInfo {
label: string;
}
function treeData(node: TreeNode[],title: TreeNodeInfo[]){
function treeData(node: TreeNode[],title?: TreeNodeInfo[]){
// let title = new Array
if(Array.isArray(node)){
@ -135,12 +138,76 @@ function treeData(node: TreeNode[],title: TreeNodeInfo[]){
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>
<template>
<el-cascader
v-if="props.types!=3"
v-if="props.types!=3&&judgeIsShow(data.name)"
v-model="value"
:options="props.options"
:disabled="judgeIsEdit(data.name)"
@change="handleChange"
/>
<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>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import {
formatNumber,
constFormProps
constFormProps,
constGetControlByName
} from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
data: FormList
@ -67,13 +70,73 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
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
@ 功能: 判断是否禁用
*/
const judgeIsDisabled = (key:string) => {
return false
// return false
if (type.value === 3) {
return true //
}
@ -83,32 +146,20 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
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 getControlByName = inject(constGetControlByName) as any
/****input slot处理***/
const getInputSlot = (key?: string) => {
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
@ 功能: 输出结果
*/
const valPrint = (val:any[],orgList:any[]) => {
const valPrint = (val:any[],orgList:any) => {
let title = new Array
if(Array.isArray(val)){
if(Array.isArray(orgList)){
@ -157,10 +208,14 @@ const valPrint = (val:any[],orgList:any[]) => {
}
return title.join("、")
}
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
</script>
<template>
<el-checkbox-group
v-if="props.types!=3||props.data.control.showAll"
v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="control"
v-model="value"
:style="getFormItemInputStyle(configStyle,4)"

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

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

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

@ -5,6 +5,8 @@
-->
<script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
data: FormList
@ -79,9 +81,93 @@ const valPrint = (val:any,dateVal:any) => {
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>
<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">
<div v-if="getInputSlot('p')">

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

@ -5,9 +5,13 @@
-->
<script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import {
constFormProps
} from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
data: FormList
@ -72,7 +76,7 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
@ 功能: 判断是否禁用
*/
const judgeIsDisabled = (key:string) => {
return false
// return false
if (type.value === 3) {
return true //
}
@ -82,31 +86,43 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
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
}
// 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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
// 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;
}
// })
// return isShow
// }
// }else{
// return false;
// }
}
/****input slot处理***/
const getInputSlot = (key?: string) => {
@ -122,8 +138,73 @@ const getInputSlot = (key?: string) => {
}
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>
<template>
<div class="boxCass">
<el-input
v-if="props.types!=3"
v-bind="control"
@ -132,6 +213,7 @@ const getInputSlot = (key?: string) => {
:style="getFormItemInputStyle(configStyle,2)"
:input-style="getFormItemInputStyle(configStyle,3)"
:placeholder="data.control.placeholder?data.control.placeholder:'请输入'+getLabel(data.item)"
:disabled="judgeIsDisabled(data.name)"
>
<template #prepend v-if="config.prepend">
<div v-if="getInputSlot('p')">
@ -159,9 +241,13 @@ const getInputSlot = (key?: string) => {
</template>
</el-input>
<el-text v-else class="wordColor">{{value}}</el-text>
</div>
</template>
<style lang='scss' scoped>
.wordColor{
color:#000000;
}
.boxCass{
width:100%;
}
</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 { uploadFiledTinymce } from '@/api/common/public'
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 type { UploadProps, UploadUserFile } from 'element-plus'
@ -18,7 +18,7 @@ const props = withDefaults(
modelValue?: string
disabled?: boolean
tablekey?: Object
data?: Object
data?: any
formTableSetUp?: Object
imgUrl?: string
}>(),
@ -52,7 +52,7 @@ const imgLoading = ref(false)
const imgPath = ref(errimg)
//
const beforeAvatarUpload = (rawFile) => {
const beforeAvatarUpload = (rawFile: { type: string; size: number }) => {
//imgLoading.value = true
// console.log("",rawFile.type)
let imgType = ['image/jpeg','image/jpg','image/png','image/gif','image/svg']
@ -75,8 +75,8 @@ const beforeAvatarUpload = (rawFile) => {
}
//
const handleAvatarSuccess = (
response,
uploadFile
response: { data: { url: string } },
uploadFile: any
) => {
// imageUrl.value = URL.createObjectURL(uploadFile.raw!)
// console.log("",value)
@ -112,7 +112,7 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
}
const fileUpload = ref(null);
const fileUpload = ref();
// capture="camera"
const addCaptureAttribute = () => {
@ -148,7 +148,7 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
//console.log(uploadFile, uploadFiles)
let arrStr = ''
uploadFiles.forEach((element) => {
uploadFiles.forEach((element:any) => {
//console.log(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 { FormList,FormItem } from "@/api/lowCode/form/type"
import AreaObj from '@/utils/orgcitys/pca.json'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
data: FormList
@ -243,6 +246,67 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
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>
<template>
<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>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import {
formatNumber,
constFormProps
constFormProps,
constGetControlByName
} from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
data: FormList
@ -67,13 +70,73 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
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
@ 功能: 判断是否禁用
*/
const judgeIsDisabled = (key:string) => {
return false
// return false
if (type.value === 3) {
return true //
}
@ -83,32 +146,20 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
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 getControlByName = inject(constGetControlByName) as any
/****input slot处理***/
const getInputSlot = (key?: string) => {
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
@ 功能: 输出结果
*/
const valPrint = (val:any,orgList:any[]) => {
const valPrint = (val:any,orgList:any) => {
let title = ""
if(Array.isArray(orgList)){
orgList.forEach((item: any) => {
@ -153,14 +204,19 @@ const valPrint = (val:any,orgList:any[]) => {
}
return title
}
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
</script>
<template>
<el-radio-group
v-if="props.types!=3"
v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="control"
v-model="value"
:style="getFormItemInputStyle(configStyle,4)"
:disabled="judgeIsDisabled(data.name)"
>
<el-radio
:key="index"

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

@ -5,10 +5,15 @@
-->
<script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import { FormList } from '@/api/lowCode/form/type';
import {
formatNumber,
constFormProps
constFormProps,
constGetControlByName
} from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
import { debounce } from '@/utils/lowCode/item';
const props = withDefaults(
defineProps<{
data: FormList
@ -67,6 +72,66 @@ const getFormItemInputStyle = (ele: any,sty:number) => {
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
@ -83,32 +148,9 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
}
})
}
}
})
return isShow
}
}else{
return false;
}
judgeIsEdit(key)
}
const getControlByName = inject(constGetControlByName) as any
/****input slot处理***/
const getInputSlot = (key?: string) => {
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
@ 功能: 输出结果
*/
const valPrint = (val:any[],orgList:any[]) => {
const valPrint = (val:any[],orgList:any) => {
if(Array.isArray(val)){
let title = new Array
@ -174,10 +216,13 @@ const valPrint = (val:any[],orgList:any[]) => {
}
}
const getAxiosOptions = debounce((data?: any) => {
})
</script>
<template>
<SelectDesign
v-if="props.types!=3"
v-if="props.types!=3&&judgeIsShow(data.name)"
:data="data"
:disabled="judgeIsDisabled(data.name)"
v-model="value"

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

@ -4,9 +4,11 @@
@ 备注: 多行文本
-->
<script lang='ts' setup>
import { FormList } from '@/api/lowCode/form/type';
import {
constFormProps
} from '@/api/lowCode/utils';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
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>
<template>
<el-input
v-if="props.types!=3"
v-if="props.types!=3&&judgeIsShow(data.name)"
v-bind="props.control"
v-model="value"
type="textarea"
: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>
</template>

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

@ -8,6 +8,7 @@ import dayJs from 'dayjs'
import {
constFormProps
} from '@/api/lowCode/utils';
import { FormList } from '@/api/lowCode/form/type';
const props = withDefaults(
defineProps<{
data: FormList
@ -50,12 +51,12 @@ const getLabel = (val:any) => {
}
//
const handleClick = (event) => {
const handleClick = (event: { target: { readOnly: boolean; }; }) => {
//
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');
}
</script>

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

@ -16,6 +16,7 @@ import {
} from '@/api/lowCode/utils';
import { computed } from 'vue';
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
const props = withDefaults(
defineProps<{
@ -164,12 +165,73 @@ function openUrl1(url:string) {
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>
<template><!-- {'{types}} -->
<div style="width: 100%;
display: inline;">
<el-upload
v-if="props.types!=3"
v-if="props.types!=3&&judgeIsShow(props.name)"
v-bind="props.control"
:action="uploadUrl"
:name="props.name"
@ -179,6 +241,7 @@ function openUrl1(url:string) {
:on-error="uploadError"
:on-success="uploadSuccess"
:on-remove="uploadRemove"
>
<i class="icon-plus" v-if="props.control?.listType=='picture-card'">
<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 { debounce } from '@/utils/lowCode/item/index'
import { uploadUrl } from '@/api/lowCode/form/fieldUnit'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
//
import OrgCitys from '@/components/lowCode/assistant/orgCitys.vue'
import UploadPage from '@/components/lowCode/assistant/uploadPage.vue'
@ -331,31 +334,46 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
let myPower = curNodePowerAry()
// console.log("-3-->",myPower)
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
}
// 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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
// 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;
}
// })
// return isShow
// }
// }else{
// return false;
// }
}
/****input slot处理***/
const getInputSlot = (key?: string) => {
@ -567,6 +585,67 @@ const handleClick = (event) => {
//
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>
<template>
<div>
@ -583,6 +662,7 @@ const handleClick = (event) => {
:class="config.className"
:rules="itemRules as any"
:label="getLabel(data.item as FormItem)"
v-if="judgeIsShow(data.name)"
>
<template #label v-if="config.help">
<span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span>
@ -599,7 +679,7 @@ const handleClick = (event) => {
:type="data.type === 'password' ? 'password' : 'text'"
:style="getFormItemInputStyle(configStyle,2)"
: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)"
>
<template #prepend v-if="config.prepend">

122
src/components/lowCode/newFormItem.vue

@ -16,6 +16,7 @@ import {
import validate from "@/api/lowCode/form/validate"
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo' //
import { useAttrs,computed, onMounted, nextTick,ref,watch,onBeforeMount} from 'vue'
import { nodePoweInfo,powerAryInfo } from '@/api/workFlow/type'
//
import InputPage from '@/components/lowCode/assistant/inputPage.vue'
import DigitpagePage from '@/components/lowCode/assistant/digitpage.vue'
@ -222,31 +223,44 @@ const judgeIsDisabled = (key:string) => {
if (type.value === 2 && config.value.editDisabled) {
return true //
}
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){
let myPower = curNodePowerAry()
// console.log("-3-->",myPower)
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
}
// 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){
item.powerAry.forEach((itm)=>{
if(itm.id == key){
console.log("判断此组件是否禁用",itm,itm.id == key,"--------->",itm.isLook)
isShow = !itm.isEdit
// 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;
}
// })
// return isShow
// }
// }else{
// return false;
// }
}
/**
@ 作者: 秦东
@ -425,7 +439,66 @@ const labelMaxWidth = computed(()=>{
} */
})
//
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>
<template>
<el-form-item
@ -435,6 +508,7 @@ const labelMaxWidth = computed(()=>{
:label="getLabel(data.item as FormItem)"
:rules="itemRules"
class="rlabel"
v-if="judgeIsShow(data.name)"
>
<template #label v-if="config.help">
<span :style="getFormItemLableStyle(configStyle)">{{ getLabel(data.item) }}</span>
@ -446,7 +520,7 @@ const labelMaxWidth = computed(()=>{
<!-- {{ data.type }} -->
<!--关联表单-->
<component
v-if="['associatedForms'].includes(data.type)"
v-if="['associatedForms'].includes(data.type) && judgeIsShow(data.name)"
:is="currentComponent"
:data="data"
:formProps = "formProps"
@ -462,7 +536,7 @@ const labelMaxWidth = computed(()=>{
/>
<!--视频-->
<component
v-if="['videoUpAndPlay'].includes(data.type)"
v-if="['videoUpAndPlay'].includes(data.type) && judgeIsShow(data.name)"
:types="type"
:is="currentComponent"
:data="data"

5
src/utils/pinia/stores/lowCode/entry.ts

@ -0,0 +1,5 @@
export interface formTableInfo{
size?: any;
name?:any,
formName?:any
}

16
src/utils/pinia/stores/modules/userOrders.ts

@ -28,15 +28,23 @@ export const userStror = defineStore("user",() => {
loginApi(val)
.then((data:any) => {
console.log("登陆使用",data);
userKeying.value = data.data.key;
userToken.value = data.data.token;
tokenIng.value = data.data.key;
if(data.code != 0){
ElMessage.error(data.msg ||"登录失败");
reject(data);
return data
}else{
ElMessage.success(data.msg ||"登录成功");
userKeying.value = data.data.key;
userToken.value = data.data.token;
tokenIng.value = data.data.key;
}
console.log("登陆使用---userKeying----->",userKeying.value,"===>", data.data.key);
console.log("登陆使用---userToken----->",userToken.value,"===>", data.data.token);
console.log("登陆使用---tokenIng----->",tokenIng.value,"===>", data.data.key);
resolve();
resolve(data);
return data
})
.catch((error:any) => {

12
src/views/common/header/formTable/header.vue

@ -4,7 +4,7 @@
@ 备注: 自定义应用头部
-->
<script lang='ts' setup>
import { useRouter } from 'vue-router'
import { LocationQueryValueRaw, useRouter } from 'vue-router'
import { menuTree } from '@/api/lowCode/type'
const router = useRouter()
@ -33,8 +33,9 @@ const props = defineProps({
//
const emits = defineEmits(["routerPage"])
const activeIndex = ref(1)
const menuList = ref<menuTree[]>(props.menuTree)
const menuDrop = ref(null) //
// const menuList = ref<menuTree[]>(props.menuTree)
const menuListTree = computed(() => props.menuTree)
// const menuDrop = ref(null) //
/**
@ 作者: 秦东
@ 时间: 2024-10-30 15:09:45
@ -43,6 +44,9 @@ const menuDrop = ref(null) //下拉菜单属性
interface Tree {
type: number
isLock: number
isMain: LocationQueryValueRaw | LocationQueryValueRaw[]
label: string
children?: Tree[]
}
@ -50,7 +54,7 @@ interface Tree {
const handleNodeClick = (data: Tree) => {
console.log(data)
if(data.type!=1){
menuDrop.value.handleClose()
// menuDrop.value.handleClose()
if(data.isLock==1){
router.push({ path: "/form_table/taskList",query:{id: props.appKey,class:data.isMain}});
}

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

@ -74,7 +74,7 @@ const appContent = reactive<any>({
})
const lookInfo = ref<any>({})
const loadingList = ref(false) //
const taskScrollbar = ref(null) //
const taskScrollbar = ref() //
const loadText = ref("数据加载中,请稍后......")
const _scrollTop = ref<number>(0)
const emits = defineEmits(['update:pageIdAry'])
@ -82,7 +82,8 @@ const pageIdAry = ref<any[]>([])
const tableDataList = ref<any[]>([]); //
const state = reactive({
page:1,
pagesize: props.stateListInfo.config?.pageSize || 2
pagesize: props.stateListInfo.config?.pageSize || 2,
loading:false
})
const isOne = ref(props.stateListInfo.isOne)
const pageTotal = ref<number>(0) //
@ -275,7 +276,7 @@ const columns = computed({
get() {
return props.stateListInfo.tableData.columns
},
set(val: formStruct) {
set(val: any) {
// emits('update:state', val)
}
});
@ -724,7 +725,7 @@ const delTask = (val:any) => {
id: [val.masters_key],
isTrue: 2,
};
softDeletion(sendData).then((data) => {
softDeletion(sendData).then((data:any) => {
ElNotification({
title: "系统提示!",
message: data.mag ? data.mag : "删除成功",

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

@ -5,12 +5,10 @@
-->
<script lang='ts' setup>
import request from '@/utils/axios/index'
import { gainAppPageInfo,judgeSubmitCancel,gainFormPageListCont,recalSendMsg,tableCusterField } from '@/api/lowCode/form/index'
import{ json2string,string2json } from '@/utils/lowCode/form'
import { recalSendMsg,tableCusterField } from '@/api/lowCode/form/index'
import{ json2string } from '@/utils/lowCode/form'
import { softDeletion,retractRunWorkFlow } from '@/api/lowCode/taskapi/management'
import { Picture as IconPicture } from '@element-plus/icons-vue'
import SearchSelect from '@/components/lowCode/selectSearch.vue'
import AppPageInfo from '@/views/formTable/pageInfo.vue'
const props = defineProps({
@ -59,7 +57,7 @@ const props = defineProps({
}
});
const lookInfo = ref<any>({})
const taskScrollbar = ref(null) //
const taskScrollbar = ref() //
const loadingList = ref(false) //
const emits = defineEmits(['update:pageIdAry',"searchData"])
const loadText = ref("数据加载中,请稍后......")
@ -68,10 +66,12 @@ const _scrollTop = ref<number>(0)
const pageTotal = ref<number>(0) //
const state = reactive({
page:1,
pagesize: props.stateListInfo.config?.pageSize || 2
pagesize: props.stateListInfo.config?.pageSize || 2,
loading:false
})
const listPage = ref<any[]>([])
const openAppPage = ref(false)
const asflookPageInfoIsShow = ref(false)
const currentAsfTableDataList = ref([])//
const asfAppContent = reactive<any>({
appKey:props.appKey,
@ -455,7 +455,7 @@ const delTask = (val:any) => {
tableKey:val.tableKey,
isTrue: 2,
};
softDeletion(sendData).then((data) => {
softDeletion(sendData).then((data: any) => {
ElNotification({
title: "系统提示!",
message: data.mag ? data.mag : "删除成功",
@ -473,10 +473,12 @@ const delTask = (val:any) => {
<el-card v-for="item in listPage" :key="item.id" class="taskCardBox" shadow="always">
<template #header>
<div class="card-header contentBetween">
<div>
<el-checkbox v-if="item.isMyMsg" label="" :value="item.masters_key" />
<span class="cardInfoTitle">{{ item.title }}</span>
</div>
<div v-if="item.flowIsOpens==1" class="carHeadStaus">
<el-tag v-if="item.taskStatus==1" type="warning">草稿</el-tag>
@ -484,6 +486,7 @@ const delTask = (val:any) => {
<el-tag v-if="item.taskStatus==3" type="primary">审批中</el-tag>
<el-tag v-if="item.taskStatus==4" type="info">归档</el-tag>
</div>
</div>
</template>

2
src/views/formTable/page/flowAndLog.vue

@ -614,7 +614,7 @@ defineExpose({
<el-step v-for="item in flowMap" :key="item.step">
<template #title>
{{ item.nodeName }}<span v-if="item.examinemode==1"> 依次审批</span><span v-if="item.examinemode==2"> 会签</span><span v-if="item.examinemode==3"> 或签</span>
{{ item.nodeName }}<span v-if="item.examinemode==1&&item.type!=2"> 依次审批</span><span v-if="item.examinemode==2&&item.type!=2"> 会签</span><span v-if="item.examinemode==3&&item.type!=2"> 或签</span>
<el-tooltip
v-if="item.helpTips!=''&&item.helpTips!='<p><br></p>'"
:content="item.helpTips"

297
src/views/formTable/taskList.vue

@ -19,38 +19,45 @@ import Header from '@/views/common/header/formTable/header.vue'
import SearchSelect from '@/components/lowCode/selectSearch.vue'
import CardPage from '@/views/formTable/page/cardPage.vue'
import { getFieldRecord } from '@/api/lowCode'
import { tableButton } from '@/api/common/tableButton'
import { FormInstance } from 'element-plus'
const route = useRoute()
const router = useRouter()
const appKey = ref<number>(route.query.key)
const appId = ref<number>(route.query.id)
const taskTitle = ref<number>(route.query.title)
const taskId = ref<number>(route.query.formid)
const taskKey = ref<number>(route.query.formKey)
const appKey = ref<string>(String(route.query.key))
const appId = ref<string>(String(route.query.id))
const taskTitle = ref<string>(String(route.query.title))
const taskId = ref<string>(String(route.query.formid))
const taskKey = ref<string>(String(route.query.formKey))
const listLoading = ref(false)
const appInitData = ref<appPageDataInit>("")
const appInitData = ref<appPageDataInit>()
const mastesformjson = ref("") //
const activeName = ref('1')
const activeName = ref('1')
const taskScrollbar = ref() //
const loadingList = ref(false) //
const loadText = ref("数据加载中,请稍后......")
const _scrollTop = ref<number>(0)
//
const stateList = reactive<tableFormStruct>({
tableData: {
// tableProps: {}, //
columns: [],
config: {},
controlBtn:[],
operateBtn:[]
// tableProps: {}, //
columns: [],
config: {},
controlBtn: [],
operateBtn: []
},
searchData: [],
loading: false,
attrObj: {},
config: {
pageSize:10,
searchIsShow:true,
searchFormIsShow:true,
openPageMode:"drawer"
},
pageSize: 10,
searchIsShow: true,
searchFormIsShow: true,
openPageMode: "drawer"
},
tagList: {},
formId: taskId || '',
formList: [], //
@ -59,88 +66,88 @@ const stateList = reactive<tableFormStruct>({
previewVisible: false,
tabsName: 'second',
formFieldList: [], //
formApi:{
type:"1",
addApiUrl:"",
editApiUrl:"",
delApiUrl:"",
lookApiUrl:""
},
formApi: {
type: "1",
addApiUrl: "",
editApiUrl: "",
delApiUrl: "",
lookApiUrl: ""
},
dict: {},
refreshTable: true,
view:{
list:{
status:true,
isClick:false,
form:{
sortWord:"",
sortClass:1,
title:[]
}
},
date:{
status:false,
isClick:false,
form:{
startTime:"",
endTime:"",
dayType:1,
title:[]
}
}
,
time:{
status:false,
isClick:false,
form:{
sortWord:"",
sort:1,
title:[]
}
}
,
gantt:{
status:false,
isClick:false,
form:{
startTime:"",
endTime:"",
dayType:2,
sortWord:"",
sort:1,
title:[]
}
}
,
map:{
status:false,
isClick:false,
form:{
mapWord:"",
sortWord:"",
sort:1,
title:[]
}
},
card:{
status:false,
isClick:false,
form:{
sort:1,
sortWord:"",
imgWork:"",
imgWidth:50,
imgHeight:50,
imgBorderRadius:5,
imgPadding:2,
titleWork:"",
describe:"",
ranks:3,
title:[]
}
}
}
view: {
list: {
status: true,
isClick: false,
form: {
sortWord: "",
sortClass: 1,
title: []
}
},
date: {
status: false,
isClick: false,
form: {
startTime: "",
endTime: "",
dayType: 1,
title: []
}
},
time: {
status: false,
isClick: false,
form: {
sortWord: "",
sort: 1,
title: []
}
},
gantt: {
status: false,
isClick: false,
form: {
startTime: "",
endTime: "",
dayType: 2,
sortWord: "",
sort: 1,
title: []
}
},
map: {
status: false,
isClick: false,
form: {
mapWord: "",
sortWord: "",
sort: 1,
title: []
}
},
card: {
status: false,
isClick: false,
form: {
sort: 1,
sortWord: "",
imgWork: "",
imgWidth: 50,
imgHeight: 50,
imgBorderRadius: 5,
imgPadding: 2,
titleWork: "",
describe: "",
ranks: 3,
title: []
}
}
},
isOpen: false
})
/**
@ -317,8 +324,8 @@ const unitIsShow = (val:tableButton,unitName:string) => {
@ 时间: 2024-11-04 13:59:42
@ 功能: 功能按钮动作
*/
const setUpClick = (val:string,id:string) => {
console.log("功能按钮动作",val,"----id----->",id,"-----formId---->")
const setUpClick = (val:any) => {
console.log("功能按钮动作",val,"----id----->-----formId---->")
if(val.key == "newAdd"){
}else{
@ -332,7 +339,7 @@ const setUpClick = (val:string,id:string) => {
id: pageIdAry.value,
isTrue: 2,
};
softDeletion(sendData).then((data) => {
softDeletion(sendData).then((data: { mag: any }) => {
// console.log('cancel!',data)
ElNotification({
title: "温馨提示!",
@ -483,11 +490,76 @@ const getPageData = () => {
const openLook = (val:any) => {
console.log("查看表单详情--->",val)
}
const transformOption = (val:any,dataVal:any) => {}
/**
@ 作者: 秦东
@ 时间: 2025-12-22 11:10:54
@ 功能: 监听滚动条状态
*/
const onHandleAppTaskScroll = (event:any) => {
console.log("onHandleScroll",loadingList.value, event)
if (loadingList.value === true) {
return
}
let wrapRef = taskScrollbar.value.wrapRef
taskScrollbar.value.moveY = wrapRef.scrollTop * 100 / wrapRef.clientHeight
taskScrollbar.value.moveX = wrapRef.scrollLeft * 100 / wrapRef.clientWidth
let poor = wrapRef.scrollHeight - wrapRef.clientHeight
if (event.scrollTop + 2 >= poor) {
_scrollTop.value = event.scrollTop
loadingList.value=true
state.currentPage++
// console.log("searchInfo.page",searchInfo.page++)
getPageData()
}
}
const requeryList = () => {
console.log("重置查询列表:")
state.currentPage = 1
tableDataList.value = []
nextTick(() => {
getPageData()
})
}
/**
@ 作者: 秦东
@ 时间: 2024-11-06 14:23:25
@ 功能: 删除按钮
*/
const delTask = (val:any) => {
console.log("删除按钮", val,val.masters_key)
ElMessageBox.confirm(
'是否要删除此信息?已经删除将不可恢复!请慎重操作',
'删除提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
let sendData = {
id: [val.masters_key],
tableKey:val.tableKey,
isTrue: 2,
};
softDeletion(sendData).then((data: any) => {
ElNotification({
title: "系统提示!",
message: data.mag ? data.mag : "删除成功",
type: "success",
});
requeryList()
})
})
.catch(() => {})
}
</script>
<template>
<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 class="contentBetween">
@ -502,7 +574,7 @@ const openLook = (val:any) => {
{{ item.label }}
</el-button>
</div>
<SvgIcon icon-class="search" :size="20" @click="openSearch" />
<SvgIcon icon-class="search" :size="'20px'" @click="openSearch" />
<el-drawer
v-model="drawerOpen"
@ -523,7 +595,7 @@ const openLook = (val:any) => {
v-model="item.value"
type="datetime"
:placeholder="'请选择'+item.label"
:shortcuts="shortcuts"
v-if="unitIsShow(item,'time')"
/>
<SearchSelect
@ -648,24 +720,9 @@ const openLook = (val:any) => {
</table>
</el-card>
<el-card class="taskCardBox" shadow="always">
<table>
<tbody @click="openLook(item)">
<tr>
<td class="cardInfoTitle">发起人</td>
<td class="cardInfoTitle"></td>
</tr>
</tbody>
</table>
<div class="cardFoot contentBetween">
<el-checkbox label="" value="Value B" />
<el-button-group>
<el-button type="warning" size="small">修改</el-button>
<el-button type="danger" size="small" @click="delTask(item)">删除</el-button>
</el-button-group>
</div>
</el-card>
</el-checkbox-group>
<div v-if="loadingList" class="loading">{{loadText}}</div>
</el-scrollbar>
</div>
</template>

75
src/views/formTable/taskListPage.vue

@ -6,14 +6,12 @@
<script lang='ts' setup>
import { useRoute,useRouter } from 'vue-router'
import request from '@/utils/axios/index'
import { appPageDataInit } from '@/api/common/type'
import { tableFormStruct } from '@/api/lowCode/form/type'
import { gainAppPageInfo,judgeSubmitCancel,gainFormPageListCont } from '@/api/lowCode/form/index'
import { gainAppPageInfo,judgeSubmitCancel } from '@/api/lowCode/form/index'
import { inputUnit,timeUnit,choiceUnit,switchUnit,orgUnit,checkboxUnit } from '@/api/lowCode/form/fieldUnit'
import { useDesignFormStore } from '@/utils/pinia/stores/lowCode/designForm'
import{ json2string,string2json,stringToObj } from '@/utils/lowCode/form'
import{ string2json,stringToObj } from '@/utils/lowCode/form'
import{ submitButton,submitFlowButton } from '@/utils/lowCode/const'
import { appWorkFlow } from '@/api/workFlow/type'
import { appWorkFlow,nodePoweInfo } from '@/api/workFlow/type'
import { softDeletion } from '@/api/lowCode/taskapi/management'
import SvgIcon from '@/components/svgIcon/index.vue'
@ -26,20 +24,25 @@ import TimeAxis from '@/views/formTable/page/timeAxis.vue'
import Calendar from '@/views/formTable/page/calendar.vue'
import MapPage from '@/views/formTable/page/mapPage.vue'
import AppPageInfo from '@/views/formTable/pageInfo.vue'
import { tableButton } from '@/api/common/tableButton'
import { FormInstance } from 'element-plus'
const route = useRoute()
const router = useRouter()
const appKey = ref<string>(route.query.key)
const appId = ref<string>(route.query.id)
const taskTitle = ref<string>(route.query.title)
const taskId = ref<string>(route.query.formid)
const taskKey = ref<string>(route.query.formKey)
const appKey = ref<any>(route.query.key)
const appId = ref<any>(route.query.id)
const taskTitle = ref<any>(route.query.title)
const taskId = ref<any>(route.query.formid)
const taskKey = ref<any>(route.query.formKey)
const activeName = ref('1')
const pageIdAry = ref<string[]>([])
const formTableStr = ref<string>('')
const cardPageRef = ref(null) //
const appFlowInfo = ref<appWorkFlow>(""); //
const cardPageRef = ref() //
const appFlowInfo = ref<appWorkFlow>(); //
const currterNodePower = ref<nodePoweInfo[]>([])
const nodeKey = ref<string>("");
const appContent = reactive<any>({
appKey:route.query.key,
@ -190,11 +193,16 @@ const initLoadData = () => {
// console.log(":",taskId)
gainAppPageInfo({id:taskKey.value})
.then((data) => {
// console.log(":",data)
console.log("获取初始化表单数据:",data)
// appInitData.value = data.data
// console.log("---!",appInitData.value)
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 != ''){
let stateData = string2json(data.data.appForm.listjson)
let holeControlAndConfigStateData = string2json(data.data.appForm.mastesformjson)
@ -278,7 +286,7 @@ const initLoadData = () => {
if(stateData.view&&stateData.view.card){
stateData.view.card.status=true
stateData.view.card.isClick = true
activeName.value = 2
activeName.value = "2"
}
// console.log("--------------<",stateData.view)
stateList.view = stateData.view
@ -396,6 +404,13 @@ const unitIsShow = (val:tableButton,unitName:string) => {
const getNewAppForm = () => {
gainAppPageInfo({id:taskKey.value})
.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.dict = string2json(data.data.appForm.dict);
stateForm.formData.powerstr = string2json(data.data.appForm.powerstr);
@ -428,7 +443,7 @@ const getNewAppForm = () => {
@ 时间: 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)
if(val.key == "newAdd"){
getNewAppForm()
@ -445,7 +460,7 @@ const setUpClick = (val:string,id:string) => {
id: pageIdAry.value,
isTrue: 2,
};
softDeletion(sendData).then((data) => {
softDeletion(sendData).then((data: { mag: any }) => {
// console.log('cancel!',data)
ElNotification({
title: "温馨提示!",
@ -492,7 +507,7 @@ const resetFields = (formEl: FormInstance | undefined) => {
@ 时间: 2024-11-06 14:45:29
@ 功能: 切换视图
*/
const switchTabs = (val:string) => {
const switchTabs = (val:string|number) => {
activeName.value = val.toString()
}
@ -501,12 +516,16 @@ const switchTabs = (val:string) => {
@ 时间: 2024-11-21 13:33:52
@ 功能: 执行操作
*/
const performAction = (val) => {}
const performAction = () => {}
const transformOption = (val:any,dataVal:any) => {}
//
provide('flowNodePower', currterNodePower)
provide('currentNodeKey', nodeKey)
</script>
<template>
<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 class="contentBetween">
<div v-if="stateList.tableData.controlBtn.length > 0">
@ -521,31 +540,31 @@ const performAction = (val) => {}
</div>
<div class="listStely">
<el-space wrap>
<SvgIcon icon-class="search" :size="20" @click="openSearch" />
<SvgIcon icon-class="search" :size="'20'" @click="openSearch" />
<el-dropdown>
<span class="el-dropdown-link">
视图<SvgIcon icon-class="arrow-down" :size="15" />
视图<SvgIcon icon-class="arrow-down" :size="'15'" />
</span>
<template #dropdown>
<el-dropdown-menu>
<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 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 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 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 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 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-menu>
@ -584,7 +603,7 @@ const performAction = (val) => {}
v-model="item.value"
type="datetime"
:placeholder="'请选择'+item.label"
:shortcuts="shortcuts"
v-if="unitIsShow(item,'time')"
/>
<SearchSelect

2
src/views/home/scanQrCodeInput.vue

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

19
src/views/login/index.vue

@ -101,7 +101,8 @@ const submitLoginForm = () => {
loginForm.value.validate((valid: any) => {
if (valid) {
userPinia.login(loginInfo)
.then(()=>{
.then((data:any)=>{
console.log("登陆输出:",data);
const query: LocationQuery = route.query;
const redirect = (query.redirect as LocationQueryValue) ?? "/";
@ -141,14 +142,16 @@ const submitLoginForm = () => {
*/
const judgingEnvironment = () => {
let huanjing = window.navigator.userAgent.toLowerCase()
if( (huanjing.match(/MicroMessenger/i) == 'micromessenger') && (huanjing.match(/wxwork/i) == 'wxwork') ){
return 3;
}else if( huanjing.match(/MicroMessenger/i) == 'micromessenger' ){
return 2;
const isWechat = huanjing.match(/micromessenger/i) !== null
const isWxWork = huanjing.match(/wxwork/i) !== null
if( isWechat && isWxWork ){
return 3; //
}else if( isWechat ){
return 2; //
}else{
return 1;
return 1; //
}
return 3;
}
</script>
<template>
@ -171,7 +174,7 @@ const judgingEnvironment = () => {
<el-input v-model="loginInfo.username" clearable />
</el-form-item>
<el-form-item label="密码:" prop="password">
<el-input v-model="loginInfo.password" type="password" autocomplete="off" clearable />
<el-input v-model="loginInfo.password" type="password" autocomplete="off" clearable show-password />
</el-form-item>
<el-form-item label="验证码:" prop="captcha">
<el-row>

Loading…
Cancel
Save