Browse Source

修改工作流

qin_18
herenshan112 3 weeks ago
parent
commit
150437af5f
  1. 11
      src/api/hr/org/index.ts
  2. 5
      src/api/hr/org/type.ts
  3. 309
      src/components/lowCode/assistant/departmentOrg copy.vue
  4. 90
      src/components/lowCode/assistant/departmentOrg.vue
  5. 7
      src/components/lowCode/newFormItem.vue
  6. 2
      src/utils/axios/index.ts
  7. 2
      src/views/formTable/page/cardPageNew.vue
  8. 515
      src/views/formTable/page/flowAndLog.vue
  9. 25
      src/views/formTable/pageInfo.vue
  10. 14
      src/views/formTable/taskListPage.vue
  11. 7
      tsconfig.app.json
  12. 3
      tsconfig.node.json

11
src/api/hr/org/index.ts

@ -1,6 +1,6 @@
import request from '@/utils/axios/index'
import { AxiosPromise } from 'axios';
import { searchFormTitle,orgClassListCont,addOrgTypesCont,orgClassCont,editOrgTypeEditOrDel,searchOrgCont,orgInfo,addOrgInfo,editOrgDel,searchTeamList,orgTeamListCont,orgFormTree,archivesList,getContId,dimissionRateQuery,orgAndPeople,sendOrgCont,eduStruCont,outputOrgAndUser,orgId,targetCanShu,dlTargetTbHbfenxi,dlTargetTbHbfenxis,orgGardes,attributePage } from './type';
import { searchFormTitle,orgClassListCont,addOrgTypesCont,orgClassCont,editOrgTypeEditOrDel,searchOrgCont,orgInfo,addOrgInfo,editOrgDel,searchTeamList,orgTeamListCont,orgFormTree,archivesList,getContId,dimissionRateQuery,orgAndPeople,sendOrgCont,eduStruCont,outputOrgAndUser,orgId,targetCanShu,dlTargetTbHbfenxi,dlTargetTbHbfenxis,orgGardes,attributePage,searchUserListForm } from './type';
import { pageId } from "@/api/common/type"
@ -418,3 +418,12 @@ export function getpositioncont(data: getContId){
data: data
});
}
//自定义表单搜索人员
export function searchUserList(data: searchUserListForm){
return request({
url: '/systemapi/task_flow/searchUserList',
method: 'post',
data: data
});
}

5
src/api/hr/org/type.ts

@ -291,3 +291,8 @@ export interface attributePage extends pageTurning{
}
export interface searchUserListForm extends orgFormSeachUsers{
name?: string;
department?:number;
}

309
src/components/lowCode/assistant/departmentOrg copy.vue

@ -0,0 +1,309 @@
<!--
@ 作者: 秦东
@ 时间: 2024-11-17 15:51:05
@ 备注: 所属部门
-->
<script lang='ts' setup>
import { AnalysisCss,AnalysisInputCss } from '@/api/common/cssInfo'
import {
constControlChange,
constFormProps,
} from '@/api/lowCode/utils';
import validate from "@/api/lowCode/form/validate"
import { getPeopleKey,getUserCont } from '@/api/hr/user/index'
import { orgAndPeople } from '@/api/hr/org/type'
import { getOrgEveryonePeople,getOrgTreeList } from '@/api/hr/org/index'
const props = withDefaults(
defineProps<{
data: FormList
tablekey: any
numrun?: number
modelValue?: any //
tProp?: string // form-itemprop
types?: string
}>(),
{}
)
const orgPeople = ref<orgAndPeople[]>()
const formProps = inject(constFormProps, {}) as any
const config = computed(() => {
return props.data.config || {}
})
const type = computed(() => {
return formProps.value.type
})
// item
const itemRules = computed(() => {
let temp
const itemR: any = props.data.item?.rules || []
const customR = formatCustomRules()
// undefined
if (itemR?.length || customR?.length) {
temp = [...customR, ...itemR]
}
return temp
})
// customRulesrules
const formatCustomRules = () => {
const rulesReg: any = {}
validate &&
validate.forEach(item => {
rulesReg[item.type] = item.regExp
})
// 使provide
const temp: any = []
props.data.customRules?.forEach((item: any) => {
if (!item.message && item.type !== 'methods') {
return //
}
let obj = {}
if (item.type === 'required') {
obj = { required: true }
} else if (item.type === 'rules') {
//
obj = { pattern: item.rules }
} else if (item.type === 'methods') {
//
const methods: any = item.methods
if (methods) {
obj = { validator: inject(methods, {}) }
}
} else if (item.type) {
obj = { pattern: rulesReg[item.type as string] }
}
// push
let message: any = { message: item.message }
if (!item.message) {
// 使validatormessage使 callback(new Error('x'));
message = {}
}
temp.push(
Object.assign(
{
trigger: item.trigger || 'blur'
},
obj,
message
)
)
})
return temp
}
const getLabel = (ele: FormItem) => {
const showColon = formProps.value.showColon ? ':' : ''
if (ele) {
return ele.showLabel ? '' : ele.label + showColon
} else {
return ''
}
}
//css
const configStyle = computed(() => {
return props.data.styles || {}
})
/**
@ 作者: 秦东
@ 时间: 2024-03-01 09:07:11
@ 功能: 布局处理
*/
const getFormItemLableStyle = (ele: any) => {
if(ele?.labelStyle){
// console.log("3",AnalysisCss(ele?.labelStyle))
return AnalysisCss(ele?.labelStyle)
}
}
const getFormItemInputStyle = (ele: any,sty:number) => {
if(ele?.inputStyle){
// console.log("4",AnalysisInputCss(ele?.inputStyle,sty))
return AnalysisInputCss(ele?.inputStyle,sty)
}
}
const value = computed({
get() {
if (props.modelValue != "" && props.modelValue != undefined){
//
return props.modelValue*1
} else {
return formProps.value.model[props.data.name]
}
},
set(newVal: any) {
if (props.tProp) {
emits('update:modelValue', newVal)
}
updateModel(newVal)
}
})
const changeEvent = inject(constControlChange, '') as any
const updateModel = (val: any) => {
let controlAttribute = ""
if(props.data.control){
if(props.data.control.type){
controlAttribute = props.data.control.type
}
}
changeEvent &&
changeEvent({
key: props.data.name,
value: val,
data: props.data,
tProp: props.tProp,
type: props.data.type,
attribute: controlAttribute
})
}
const peopleLoading = ref(false)
const selectList = ref<TreeNodeInfo[]>([]);
onMounted(()=>{
peopleLoading.value = true
getUserCont()
.then((data:any)=>{
// myconfig.value = data.data
selectList.value=[];
if(data.data.organization != "" && data.data.organizationgname != ""){
selectList.value.push({
value: data.data.organization,
label: data.data.organizationgname,
})
value.value = data.data.organization
}else if(data.data.department != "" && data.data.departmentname != ""){
selectList.value.push({
value: data.data.department,
label: data.data.departmentname,
})
value.value = data.data.department
}else if(data.data.company != "" && data.data.companyname != ""){
selectList.value.push({
value: data.data.company,
label: data.data.companyname,
})
value.value = data.data.company
}
let orgId = data.data.company
let userId = data.data.organization*1
if(orgId == null || orgId == ""){
orgId = "309"
}
// nextTick(()=>{
// getOrgTreeList({"orgid":orgId*1})
// // getOrgEveryonePeople({"id":orgId.toString()})
// .then(({data})=>{
// orgPeople.value = data
// if(value.value == null || value.value == "" || value.value == undefined){
// nextTick(()=>{
// value.value = userId
// })
// }
// })
// .finally(()=>{
// peopleLoading.value = false
// })
// });
})
});
const orgTreeProps ={
label: 'name',
children:'child',
}
interface TreeNodeInfo {
value: number;
label: string;
}
function treeData(node: orgInfo[],title: TreeNodeInfo[]){
// let title = new Array
if(Array.isArray(node)){
node.forEach((item:TreeNode) => {
if(Array.isArray(title)){
title.push({
value:item.id,
label:item.name
});
}else{
title =[{
value:item.id,
label:item.name
}];
}
if (item.child) {
if(Array.isArray(item.child)){
treeData(item.child,title)
// for (const child of item.children) {
// treeData(child,title)
// }
}
}
})
}
return title;
}
/**
@ 作者: 秦东
@ 时间: 2025-06-10 11:13:06
@ 功能: 输出结果
*/
const valPrint = (val:any,orgList:orgInfo[]) => {
let titlaAry = new Array
// console.log(val,"=======>orgList------------>",orgList)
// if(Array.isArray(orgList)){
// console.log(val,"=======>orgList-------2----->",orgList)
// orgList.forEach((item: any) => {
// console.log(val,"=======>orgList-----3------->",item.id)
// if(item.id==val){
// console.log(val,"=======>orgList----1-------->",orgList)
// title = item.name
// }
// })
// }
if(val != "" && val != undefined){
let orgAry = treeData(orgList)
console.log(val,"=======>orgList------------>",orgAry)
if(Array.isArray(orgAry)){
orgAry.forEach((item:orgInfo) => {
if(item.value == val){
titlaAry.push(item.label)
}
})
}
}
return titlaAry.join("、")
}
</script>
<template>
<div class="inputbox" v-if="props.types!=3">
{{ myconfig }}
<el-tree-select
v-loading="peopleLoading"
element-loading-text="Loading..."
v-model="value"
:data="orgPeople"
:props="orgTreeProps"
:render-after-expand="false"
:filterable="true"
node-key="id"
clearable
disabled
/>
</div>
<el-text v-else class="wordColor">{{valPrint(value,orgPeople)}}</el-text>
</template>
<style lang='scss' scoped>
.inputbox{
width:100%;
}
.wordColor{
color:#000000;
}
</style>

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

@ -155,30 +155,66 @@ const updateModel = (val: any) => {
attribute: controlAttribute
})
}
const myOrg = ref("")
const peopleLoading = ref(false)
const selectList = ref<TreeNodeInfo[]>([]);
onMounted(()=>{
peopleLoading.value = true
getUserCont()
.then((data:any)=>{
// myconfig.value = data.data
selectList.value=[];
if(data.data.organization != "" && data.data.organizationgname != ""){
selectList.value.push({
value: data.data.organization*1,
label: data.data.organizationgname,
})
value.value = data.data.organization
myOrg.value = data.data.organizationgname
}else if(data.data.department != "" && data.data.departmentname != ""){
selectList.value.push({
value: data.data.department*1,
label: data.data.departmentname,
})
value.value = data.data.department
myOrg.value = data.data.department
}else if(data.data.company != "" && data.data.companyname != ""){
selectList.value.push({
value: data.data.company*1,
label: data.data.companyname,
})
value.value = data.data.company
myOrg.value = data.data.companyname
}else{
selectList.value.push({
value: 309,
label: "恒信高科",
})
value.value = "309"
myOrg.value = "恒信高科"
}
let orgId = data.data.company
let userId = data.data.organization*1
if(orgId == null || orgId == ""){
orgId = "309"
}
}
nextTick(()=>{
getOrgTreeList({"orgid":orgId*1})
// getOrgEveryonePeople({"id":orgId.toString()})
.then(({data})=>{
orgPeople.value = data
if(value.value == null || value.value == "" || value.value == undefined){
nextTick(()=>{
value.value = userId
})
}
})
.finally(()=>{
peopleLoading.value = false
})
// getOrgTreeList({"orgid":orgId*1})
// // getOrgEveryonePeople({"id":orgId.toString()})
// .then(({data})=>{
// orgPeople.value = data
// if(value.value == null || value.value == "" || value.value == undefined){
// nextTick(()=>{
// value.value = userId
// })
// }
// })
// .finally(()=>{
// peopleLoading.value = false
// })
// peopleLoading.value = false
});
})
@ -189,10 +225,11 @@ const orgTreeProps ={
}
interface TreeNodeInfo {
value: number;
value: number|string;
label: string;
}
function treeData(node: orgInfo[],title: TreeNodeInfo[]){
// let title = new Array
@ -258,20 +295,17 @@ const valPrint = (val:any,orgList:orgInfo[]) => {
</script>
<template>
<div class="inputbox" v-if="props.types!=3">
<el-tree-select
v-loading="peopleLoading"
element-loading-text="Loading..."
v-model="value"
:data="orgPeople"
:props="orgTreeProps"
:render-after-expand="false"
:filterable="true"
node-key="id"
clearable
disabled
/>
<el-select v-model="value" disabled placeholder="所属行政组织" style="width: 100%">
<el-option
v-for="item in selectList"
:key="item.value"
:label="item.label"
:value="item.value"
loading="peopleLoading"
/>
</el-select>
</div>
<el-text v-else class="wordColor">{{valPrint(value,orgPeople)}}</el-text>
<el-text v-else class="wordColor">{{ myOrg }}</el-text>
</template>
<style lang='scss' scoped>
.inputbox{

7
src/components/lowCode/newFormItem.vue

@ -92,9 +92,13 @@ const control = computed(() => {
})
const options = ref(props.data.options) //
const changeEvent = inject(constControlChange, '') as any
//
//
const value = computed({
get() {
// console.log("formProps.value.model",formProps.value.model)
// console.log("props.data.name",props.data.name)
if (props.tProp) {
//
return props.modelValue
@ -459,6 +463,7 @@ const testPage = (val:any) =>{
@testPage = "testPage"
/>
<!--单行文本及密码组件-->
<component
v-else
:types="type"

2
src/utils/axios/index.ts

@ -58,7 +58,7 @@ service.interceptors.response.use((response: AxiosResponse) => {
}
console.log("系统出错===>",response)
// ElMessage.error(msg || '系统出错');
return response.data;
return Promise.reject(new Error(msg || 'Error'));
}, (error: any) => {
// 超出 2xx 范围的状态码都会触发该函数。

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

@ -61,7 +61,7 @@ const props = defineProps({
const lookInfo = ref<any>({})
const taskScrollbar = ref(null) //
const loadingList = ref(false) //
const emits = defineEmits(['update:pageIdAry'])
const emits = defineEmits(['update:pageIdAry',"searchData"])
const loadText = ref("数据加载中,请稍后......")
const pageIdAry = ref<any[]>([])
const _scrollTop = ref<number>(0)

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

@ -4,6 +4,8 @@
@ 备注: 流程和历史记录
-->
<script lang='ts' setup>
import { orgform,searchUserListForm } from '@/api/hr/org/type'
import { getOrgFormTree,searchUserList } from '@/api/hr/org/index'
import { gainRunFlowStart,gainRunTaskFlow,startRunFlow,runTaskFlow,afreshRunWorkflow,realTimeUpdateFlow } from '@/api/lowCode/taskapi/management'
import squareUrl from '@/assets/image/1.png'
@ -67,7 +69,13 @@ const pageLog = computed({
return val
}
});
//
const orgTreeAry = ref<orgform[]>([])
const orgProps = {
value: "id",
label: "name",
children: "children",
};
//
const flowLoading = ref(false) //loading
const flowMap = ref<any[]>([]); //
@ -83,10 +91,10 @@ onBeforeMount(() => {
newAddPageData()
})
const emits = defineEmits(["searchcontent"])
watch(()=>props.stateForm,(val)=>{
newAddPageData()
},{tree:true})
},{deep:true})
/**
@ 作者: 秦东
@ -95,6 +103,7 @@ watch(()=>props.stateForm,(val)=>{
*/
const newAddPageData = () => {
flowLoading.value = true
console.log("新增时获取流程列表3--->",types.value)
if(types.value == 1){
console.log("新增时获取流程列表3",props.stateForm)
console.log("新增时获取流程列表1",props.stateForm.flowIsTrue,props.stateForm.flowKey)
@ -120,11 +129,11 @@ const newAddPageData = () => {
console.log("获取流程==2=1=>",props)
console.log("获取流程==2=2==1=>",props.appPageInfo)
console.log("获取流程==2=2==2=>",props.appPageInfo.runFlowId)
console.log("获取流程==2=2==2=>",props.appPageInfo.runFlowInfo)
// console.log("==2=2==1=>",flowRunId)
if(props.appPageInfo && props.appPageInfo.runFlowId && props.appPageInfo.runFlowId != "0" && props.appPageInfo.runFlowId != ""){
let flowRunId = props.appPageInfo.runFlowId?props.appPageInfo.runFlowId:props.appPageInfo.runFlowIdStr?props.appPageInfo.runFlowIdStr:"0";
if(props.appPageInfo && props.appPageInfo.runFlowInfo && props.appPageInfo.runFlowInfo != "0" && props.appPageInfo.runFlowInfo != ""){
let flowRunId = props.appPageInfo.runFlowInfo?props.appPageInfo.runFlowInfo:props.appPageInfo.runFlowIdStr?props.appPageInfo.runFlowIdStr:"0";
console.log("获取流程==2=2=>",flowRunId)
gainRunTaskFlow({id:flowRunId})
.then(({data})=>{
@ -152,6 +161,8 @@ const handleClick = () => {
@ 时间: 2024-11-20 13:28:04
@ 功能: 启动流程
*/
const messagesss = inject('searchList')
const runWorkFlow = (val:any) => {
// console.log("--------1---------->",val)
let sendInfo ={
@ -161,7 +172,11 @@ const runWorkFlow = (val:any) => {
}
startRunFlow(sendInfo)
.then((data:any)=>{
// console.log("--------1---------->",data)
console.log("流程提交成功--------1---------->",typeof messagesss)
if (typeof messagesss === 'function') {
messagesss(); //
}
console.log("刷新页面------3----------->")
})
}
/**
@ -208,7 +223,7 @@ const butLoad = ref(false)
const yesOrNo = (val:string,agreeOrRefuse:number) => {
butLoad.value = true;
let sendInfo = {
id:props.appPageInfo.runFlowIdStr,
id:props.appPageInfo.runFlowInfo,
agreeOrRefuse:agreeOrRefuse,
suggest:sendFlowInfo.value,
flowlist:flowMap.value
@ -216,11 +231,19 @@ const yesOrNo = (val:string,agreeOrRefuse:number) => {
runTaskFlow(sendInfo)
.then((data:any)=>{
// console.log("----22222->",data)
ElMessage({
message: '处理完成!',
type: 'success'
})
console.log("提交审批----22222->",data)
if(data.code == 0){
ElMessage({
message: '处理完成!',
type: 'success'
})
}else{
ElMessage({
message: data.msg,
type: 'error'
})
}
})
.finally(()=>{
@ -234,7 +257,7 @@ const yesOrNo = (val:string,agreeOrRefuse:number) => {
@ 时间: 2025-05-12 10:15:03
@ 功能: 刷新流程
*/
const refreshWorkFlow = (taskKey,flowFactor,nodelUserList) => {
const refreshWorkFlow = (taskKey: any,flowFactor: any,nodelUserList: any) => {
console.log("获取工作流不进图-new--刷新>", props.types);
let gainFlowChart = {
id:props.stateForm.flowKey.toString(),
@ -255,7 +278,326 @@ const refreshWorkFlow = (taskKey,flowFactor,nodelUserList) => {
}
}
//
const judgeAddUser = (val:any):boolean =>{
// console.log("val----->",val)
if(val.customNode == "beginnode"){
val.runscope = val.runscope!=0?val.runscope:1
return true
}
switch(val.runtype){
case 1:
val.runscope = val.runscope!=0?val.runscope:1
return true
break;
case 3:
if(val.customNode == nodeKey.value){
val.runscope = val.runscope!=0?val.runscope:1
return true
}
break;
case 4:
if(val.runscope==1){
val.runscope = val.runscope!=0?val.runscope:1
return true
}
break;
default:
if(val.runscope != 0){
return true
}
return false
}
return false
}
//
const getOrgTreeAry = (orgId:number) => {
getOrgFormTree({id:orgId})
.then(({ data }) => {
console.log(data)
orgTreeAry.value = data.list
}).finally(()=>{
pageSetup.page = 1
pageSetup.department = orgId
getUserListAry()
})
}
const presetPersonnel = ref<any>([]); //
const selectedPeople = ref<any>([]); //
const openclosebox = ref(false)
const openOrClose = ref(false)
const packNodeInfo = ref()
const drawerRefBox = ref()
const scrollbarHeight = ref("100px")
const unPickUSerList = ref<any[]>([])
const myPickUs = ref<any[]>([])
const myPickUsCode = ref<string[]>([])
const pageSetup = reactive({
page:1,
pageSize:10,
total:0,
name:"",
department:0
})
const treeSelectOrgId = ref("")
const loadUser = ref(false)
//
const getUserListAry = () => {
loadUser.value = true
const params = {
page: pageSetup.page,
pagesize: pageSetup.pageSize,
name: pageSetup.name,
department: pageSetup.department*1
}
// unPickUSerList.value = []
// pageSetup.total = 0
searchUserList(params).then(({ data })=>{ myPickUsCode
if(Array.isArray(data.list) && data.list.length > 0){
if(Array.isArray(myPickUsCode.value) && myPickUsCode.value.length > 0){
data.list.forEach((item:any)=>{
if(myPickUsCode.value.includes(item.number)){
item.isPick = true
}else{
item.isPick = false
}
})
}
unPickUSerList.value = data.list
}else{
unPickUSerList.value = data.list
}
pageSetup.total = data.total
console.log("获取人员列表",unPickUSerList.value)
}).finally(()=>{
callBackWritePick()
pickHuiXie()
loadUser.value = false
})
}
let zhiXingStep = 1
const oldPickUSer = ref([])
//
const addPeople = (val:any) =>{
//
packNodeInfo.value = val
zhiXingStep = val.step
presetPersonnel.value = val.pendpers
selectedPeople.value = val.operator
if(val.runscope == 1){
openclosebox.value = true
}else{
openOrClose.value = true
}
openclosebox.value = true
oldPickUSer.value = []
nextTick(()=>{
oldPickUSer.value = val.operator
console.log("userDrwaer==========>",drawerRefBox.value.offsetHeight)
if(packNodeInfo.value.runscope == 1){
scrollbarHeight.value = (drawerRefBox.value.offsetHeight - 100 ) + "px"
getOrgTreeAry(0)
}else{
scrollbarHeight.value = (drawerRefBox.value.offsetHeight ) + "px"
unPickUSerList.value = val.pendpers
if(val.pendpers.length){
pageSetup.total = val.pendpers.length
}else{
pageSetup.total = 0
}
if(Array.isArray(val.operator) && val.operator.length && val.operator.length > 0){
callBackWritePick()
}
}
})
console.log("PresetPersonnel.value--------1-------->",val)
// console.log("PresetPersonnel.value--------2-------->",val.runscope)
// console.log("PresetPersonnel.value--------3-------->",val.operator)
// console.log("PresetPersonnel.value--------4-------->",selectedPeople.value)
}
//
const callBackWritePick = () => {
if(Array.isArray(oldPickUSer.value) && oldPickUSer.value.length > 0){
oldPickUSer.value.forEach((item:any)=>{
// if(!myPickUsCode.value.includes(item.number)){
// myPickUsCode.value.push(item.number)
// }
pickUserCont(item)
})
}
}
const pickHuiXie = () => {
if(Array.isArray(unPickUSerList.value) && unPickUSerList.value.length > 0){
unPickUSerList.value.forEach((item:any)=>{
if(myPickUsCode.value.includes(item.number)){
item.isPick = true
}else{
item.isPick = false
}
})
}
}
const serachVal = ref("")
//
const openOrClosePick = ref(false)
const openPickBox = () => {
openOrClosePick.value = true
}
//
const closePickUserAry = () => {
openOrClosePick.value = false
}
//
const pickPageTion = (val:number) => {
pageSetup.page = val
getUserListAry()
}
//
const searchUserCont = (val:any) => {
console.log("搜索内容--------1-------->",val)
pageSetup.name = val
getUserListAry()
}
//
watch(()=>treeSelectOrgId,(val:any)=>{
console.log("监听行政组织--------1-------->",val.value)
if(val.value){
pageSetup.department = val.value
}
getUserListAry()
},{deep:true})
//
const piclAllToale = ref(0)
const pickUserCont = (val:any) => {
if(Array.isArray(myPickUs.value) && myPickUs.value.length > 0){
let isIn = false
myPickUs.value.forEach((item:any,index:number)=>{
if(item.number == val.number){
isIn = true
myPickUs.value.splice(index,1)
val.isPick = false
}
})
if(!isIn){
val.isPick = true
myPickUs.value.push(val)
}
}else{
val.isPick = true
myPickUs.value.push(val)
}
if(Array.isArray(myPickUsCode.value) && myPickUsCode.value.length > 0){
if(myPickUsCode.value.includes(val.number)){
let goTo:any = []
myPickUsCode.value.forEach((item:any)=>{
if(item.number != val.number){
goTo.push(item)
}
})
myPickUsCode.value = goTo
}else{
myPickUsCode.value.push(val.number)
}
}else{
myPickUsCode.value.push(val.number)
}
piclAllToale.value = myPickUs.value.length
}
//
const delMyPickUser = (val:string) => {
if(Array.isArray(myPickUs.value) && myPickUs.value.length > 0){
myPickUs.value.forEach((item:any,index:number)=>{
if(item.number == val){
myPickUs.value.splice(index,1)
}
})
}
if(Array.isArray(myPickUsCode.value) && myPickUsCode.value.length > 0){
myPickUsCode.value.forEach((item:string,index:number)=>{
if(item == val){
myPickUsCode.value.splice(index,1)
}
})
}
if(Array.isArray(unPickUSerList.value) && unPickUSerList.value.length > 0){
unPickUSerList.value.forEach((item:any)=>{
if(myPickUsCode.value.includes(item.number)){
item.isPick = true
}else{
item.isPick = false
}
})
}
}
//
const cancelClose = () => {
openclosebox.value = false;
openOrClosePick.value = false;
piclAllToale.value = 0
myPickUsCode.value = []
myPickUs.value = []
oldPickUSer.value = []
if(Array.isArray(unPickUSerList.value) && unPickUSerList.value.length > 0){
unPickUSerList.value.forEach((item:any)=>{
item.isPick = false
})
}
unPickUSerList.value = []
}
//
const clearPick = () => {
openOrClosePick.value = false;
piclAllToale.value = 0
myPickUs.value = []
if(Array.isArray(unPickUSerList.value) && unPickUSerList.value.length > 0){
unPickUSerList.value.forEach((item:any)=>{
item.isPick = false
})
}
}
//
const updateNode = () => {
let yixuanz = unref(myPickUs)
flowMap.value.forEach((item:any)=>{
if(item.step == zhiXingStep){
// console.log("P---1-->",item.step , zhiXingStep)
item.operator = yixuanz
}
})
cancelClose()
}
defineExpose({
runWorkFlow,
reapplyWorkFlow,
@ -264,7 +606,7 @@ defineExpose({
})
</script>
<template>
<div>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane v-if="flowMap&&flowMap.length > 0" label="审批流程" name="flow">
@ -319,7 +661,7 @@ defineExpose({
</tr>
<tr>
<td>
<div v-if="item.judgelist" class="addUser" @click="addPeople(item)">
<div v-if="judgeAddUser(item)" class="addUser" @click="addPeople(item)">
<svg-icon icon-class="addxuxian" size="50" />
</div>
</td>
@ -327,10 +669,96 @@ defineExpose({
</tr>
</tbody>
</table>
</div>
</template>
</el-step>
</el-steps>
<el-drawer
ref="userDrwaer"
v-model="openclosebox"
title="选择人员"
direction="btt"
size="60%"
>
<div ref="drawerRefBox" class="drawerBox">
<div v-if="packNodeInfo.runscope==1" class="">
<el-tree-select
ref="flowOrgTree"
style="width: 100%; "
v-model="treeSelectOrgId"
:data="orgTreeAry"
:props="orgProps"
node-key="id"
check-strictly
placeholder="请选择行政组织"
clearable
/>
<el-input v-model="serachVal" clearable placeholder="请输入人们或工号" @input="searchUserCont"/>
</div>
<el-scrollbar class="scroBox" :height="scrollbarHeight" v-loading="loadUser">
<div v-for="item in unPickUSerList" :class="item.isPick?'userBox active':'userBox'" @click="pickUserCont(item)">
<el-avatar shape="square" :size="50" :src="item.icon?item.icon:item.iconbase64?item.iconbase64:squareUrl" />
<div class="userInfBox">
<div>{{item.name}}{{item.number}}</div>
<div>{{item.departmentname}}{{item.postname}}</div>
</div>
<div class="delSvg">
</div>
</div>
</el-scrollbar>
<el-pagination
v-if="packNodeInfo.runscope==1"
:page-size="pageSetup.pageSize"
:pager-count="7"
layout="prev, pager, next"
:total="pageSetup.total"
@change="pickPageTion"
/>
</div>
<template #footer>
<div class="pickUserFootBox">
<el-text @click="openPickBox">已选择{{piclAllToale}}</el-text>
<div style="flex: auto">
<el-button @click="cancelClose">取消</el-button>
<el-button type="primary" @click="updateNode" >确定选择</el-button>
</div>
</div>
</template>
</el-drawer>
<el-dialog
v-model:="openOrClosePick"
title="已选中的人员"
:before-close="closePickUserAry"
>
<el-scrollbar class="scroBox" :height="scrollbarHeight">
<div v-for="item in myPickUs" class="userBox " >
<el-avatar shape="square" :size="50" :src="item.icon?item.icon:item.iconbase64?item.iconbase64:squareUrl" />
<div class="userInfBox">
<div>{{item.name}}{{item.number}}</div>
<div>{{item.departmentname}}{{item.postname}}</div>
</div>
<div class="delSvg">
<svg-icon icon-class="delet" :size="'15px'" @click="delMyPickUser(item.number)" />
</div>
</div>
</el-scrollbar>
<template #footer>
<el-button type="primary" @click="clearPick">清空</el-button>
</template>
</el-dialog>
<el-affix v-if="flowOpinion" position="bottom" :offset="0">
<div class="approvalBoard">
<el-text size="large" class="appBoardTitle">审批意见</el-text>
@ -346,8 +774,8 @@ defineExpose({
</el-row>
<el-row :gutter="20">
<el-col :span="4"></el-col>
<el-col :span="8" class="juzhong"><el-button v-loading="butLoad" type="primary" style="width:100%" @click="yesOrNo(props.flowKey,1)">同意</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button v-loading="butLoad" type="danger" style="width:100%" @click="yesOrNo(props.flowKey,2)">驳回</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button v-loading="butLoad" type="primary" style="width:100%" @click="yesOrNo(props.stateForm.flowKey,1)">同意</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button v-loading="butLoad" type="danger" style="width:100%" @click="yesOrNo(props.stateForm.flowKey,2)">驳回</el-button></el-col>
<el-col :span="4"></el-col>
</el-row>
</div>
@ -367,7 +795,7 @@ defineExpose({
</tbody>
</table>
<el-tabs v-if="item.sunData" type="border-card" style="margin-top:20px;">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunData" :label="sonIndex" :key="sonIndex">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunData" :label="sonIndex.toString()" :key="sonIndex">
<el-card v-for="(sunItem,sunIndex) in sonItem" :key="sunIndex" class="logCard" style="margin-top:10px;">
<table cellspacing="0" >
<tbody>
@ -395,7 +823,7 @@ defineExpose({
</el-tab-pane>
</el-tabs>
</div>
</template>
<style lang='scss' scoped>
.logCard{
@ -435,4 +863,51 @@ defineExpose({
display: block;
}
}
.demo-tabs{
:deep .el-drawer__footer {
border-top: 1px solid #EBEEF5;
}
:deep .el-drawer__header{
border-bottom: 1px solid #EBEEF5;
}
}
.pickUserFootBox{
display: flex;
align-items: center;
justify-content: space-between;
}
.scroBox{
width: 100%;
height: auto;
}
.pageBox{
width: 100%;
text-align: center;
}
.drawerBox{
width: 100%;
height: 100%;
}
.userBox{
width: 100%;
padding: 5px 10px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px dotted #EBEEF5;
.userInfBox{
width: calc(100% - 90px);
padding: 2px 0;
}
.delSvg{
width: 30px;
height: 100%;
}
}
.active{
color: #000000;
background-color:rgb(233, 233, 235);
}
</style>

25
src/views/formTable/pageInfo.vue

@ -110,6 +110,7 @@ watch(() => openPage.value,(val:boolean) => {
if(props.stateForm.type != 1){
formDesign.value.setValue(data.tableData);
}
});
})
.finally(() => {
@ -151,6 +152,13 @@ watch(() => openPage.value,(val:boolean) => {
}
},{deep: true})
//
const reastSearchPage = () => {
console.log("刷新页面------1----------->")
emits("searchData")
console.log("刷新页面---------2------------->")
}
/**
@ 作者: 秦东
@ 时间: 2024-04-07 10:55:34
@ -161,27 +169,30 @@ const afterSubmit = (type: string,val?:any) => {
switch (type) {
case "success":
emits("searchData")
reastSearchPage()
handleClose()
break;
case "runFlow":
// reastSearchPage()
flowLogPage.value.runWorkFlow(val)
emits("searchData")
handleClose()
nextTick(()=>{
handleClose()
})
break
case "reapplyFlow":
flowLogPage.value.reapplyWorkFlow(val)
handleClose()
emits("searchData")
reastSearchPage()
break;
case "draftRunFlow":
flowLogPage.value.rundraftWorkFlow(val)
handleClose()
emits("searchData")
reastSearchPage()
break;
case "closePage":
emits("searchData")
reastSearchPage()
handleClose()
break;
default:
@ -401,7 +412,7 @@ const changeKeyVal = (key: any, val: any, type: any, attribute: any) => {
:after-submit="afterSubmit"
:change-key-val="changeKeyVal"
/>
<FlowAndLog ref="flowLogPage" v-if="openPage" :types="props.stateForm.type" :app-flow-info="props.appFlowInfo" :app-info="props.appInfo" :log-list="pageLog" :app-page-info="props.appPageInfo" :state-form="props.stateForm" />
<FlowAndLog ref="flowLogPage" v-if="openPage" :types="props.stateForm.type" :app-flow-info="props.appFlowInfo" :app-info="props.appInfo" :log-list="pageLog" :app-page-info="props.appPageInfo" :state-form="props.stateForm" @searchcontent="reastSearchPage" />
<!-- {{stateForm.flowIsTrue}}<br>
{{pageLog}} -->
<!-- {{ props.appInfo }}<br><br><br><br>

14
src/views/formTable/taskListPage.vue

@ -462,16 +462,18 @@ const setUpClick = (val:string,id:string) => {
}
}
}
/**
@ 作者: 秦东
@ 时间: 2024-11-06 11:46:28
@ 功能: 查询数据
*/
const chaxunData = () => {
console.log("查询数据重置查询列表:")
console.log("查询数据重置查询列表:------------------------>")
cardPageRef.value.requeryList();
drawerOpen.value = false;
}
provide("searchList",chaxunData)
/**
@ 作者: 秦东
@ 时间: 2024-03-28 13:17:46
@ -650,11 +652,11 @@ const performAction = (val) => {}
</div>
</div>
<TabelFormList v-if="activeName=='1'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" />
<CardPage v-if="activeName=='2'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" />
<Calendar v-if="activeName=='3'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" />
<TimeAxis v-if="activeName=='4'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" />
<mapPage v-if="activeName=='6'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" />
<TabelFormList v-if="activeName=='1'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
<CardPage v-if="activeName=='2'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
<Calendar v-if="activeName=='3'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
<TimeAxis v-if="activeName=='4'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
<mapPage v-if="activeName=='6'" ref="cardPageRef" v-model:page-id-ary="pageIdAry" :app-key="appKey" :app-id="appId" :task-id="taskId" :task-key="taskKey" :task-title="taskTitle" :stateList-info="stateList" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
<AppPageInfo v-model:is-show="openAppPage" :app-info="appContent" :app-page-info="lookInfo" :state-form="stateForm" :app-flow-info="appFlowInfo" :form-table-str="formTableStr" @searchData="chaxunData" />
</div>

7
tsconfig.app.json

@ -1,11 +1,14 @@
{
"compilerOptions": {
"target": "ES2020",
"outDir": "build",
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"paths":{
"@/*":["./src/*"]
},
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,

3
tsconfig.node.json

@ -1,6 +1,7 @@
{
"compilerOptions": {
"target": "ES2022",
"outDir": "build",
"target": "ESNext",
"lib": ["ES2023","DOM","DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,

Loading…
Cancel
Save