Compare commits

...

3 Commits

Author SHA1 Message Date
herenshan112 86247cf5f6 修改BUG 5 days ago
herenshan112 1e67982e6d 修改关联表单隐藏设置 6 days ago
herenshan112 6cabe5a520 修改编号未自动生成 6 days ago
  1. 16
      src/components/DesignForm/printHtmlRender.ts
  2. 17
      src/components/DesignForm/public/form/formItem.vue
  3. 103
      src/components/DesignForm/public/form/newForm.vue
  4. 5
      src/directive/permission/button.ts
  5. 12
      src/utils/request.ts
  6. 2
      src/views/hr/archives/unitpage/batchImport.vue
  7. 1
      src/views/sysworkflow/lowcodepage/appCardPage.vue
  8. 664
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow copy.vue
  9. 265
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow.vue
  10. 5
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue
  11. 10
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  12. 6
      src/views/sysworkflow/lowcodepage/appPage/index.vue
  13. 13
      src/widget/lowcodeimage/lowcodeImage.vue
  14. 14
      src/widget/number/index.vue

16
src/components/DesignForm/printHtmlRender.ts

@ -27,6 +27,9 @@ export const printHtmlPage = async (pformid:string,pappkey:string,pversionid:str
let noTemplate:boolean=false
await getPrintTemplate({"versionid":pversionid,"formkey":pappkey}).then(resp=>{
title=resp.data.title
console.log("打印表单---->resp",resp.data.formtemplatejson)
if(resp.data.formtemplatejson!=""){
data=JSON.parse(resp.data.formtemplatejson)
}else{
@ -54,6 +57,10 @@ export const printHtmlPage = async (pformid:string,pappkey:string,pversionid:str
let qrstr=`https://wab.hxgk.group/#/form_table/taskListPage?id=${pformid}&key=${pappkey}&
formid=${pversionid}&formKey=${pformkey}&qrDetailId=${row.id}`
data.forEach(node=>{
deepLoopForm(node,row)
})
@ -89,6 +96,9 @@ export const printHtmlPage = async (pformid:string,pappkey:string,pversionid:str
};
const deepLoopForm=(node:fieldTree, row: Record<string, any>)=>{
console.log("打印表单---->node",node)
if(Array.isArray(node)){
node.forEach(item=>{deepLoopForm(item,row)})
return
@ -99,6 +109,9 @@ const deepLoopForm=(node:fieldTree, row: Record<string, any>)=>{
return
}
if(node.field!=""){
if (row.hasOwnProperty(node.field!)){// 有这个字段
if (node.type=="table"){
@ -106,12 +119,15 @@ const deepLoopForm=(node:fieldTree, row: Record<string, any>)=>{
}else if(node.type=="select"||node.type=="checkbox"){
const val=row[node.field!]
node.field=""
if(node.options){
for(let op of node.options!){
if(op.value==val){
node.field=op.label
break;
}
}
}
}else{
node.field=row[node.field!]
}

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

@ -1117,7 +1117,7 @@ const diGuiJilian = (val: any, options: any[]) => {
</script>
<template>
<template>{{ data.type }}
<BaiduMap
v-if="judgeIsShow(data.name) && data.type === 'baidumap' && type != 4"
:data="data"
@ -1143,7 +1143,7 @@ const diGuiJilian = (val: any, options: any[]) => {
:tablekey="props.tablekey"
:numrun="props.numrun"
/>
<!--创建人- Marcus 的全部常用数据能力接入stock-daily-report agent同时让这个Agent也接入浏览器skill能力 ->
<!--创建人- Marcus 的全部常用数据能力接入stock-daily-report agent同时让这个Agent也接入浏览器skill能力 -->
<FounderForm
v-else-if="judgeIsShow(data.name) && data.type === 'founder'"
:data="data"
@ -1305,7 +1305,7 @@ const diGuiJilian = (val: any, options: any[]) => {
<div class="form-value" v-else-if="data.type == 'upload'">
<UploadPageList :img-list="value" :control="control" :data="data" />
</div>
<div class="form-value" v-else-if="data.type == 'tinymce'" v-html="value"></div>
<template class="form-value" v-else-if="data.type == 'signaturemap'">
<el-image style="width: 100%; height: 100%" :src="value" />
</template>
@ -1658,7 +1658,7 @@ const diGuiJilian = (val: any, options: any[]) => {
<template v-if="data.type === 'tinymce' ">
<!-- 设计模式时拖动会出现异常设计模式暂用图片代替-->
<div class="app-container" v-if="[1, 2, 3].includes(type as number)">
<div class="app-container" v-if="[1, 2].includes(type as number)">
<editor
v-if="[1, 2, 3].includes(type as number)"
v-bind="control"
@ -1668,6 +1668,7 @@ const diGuiJilian = (val: any, options: any[]) => {
style="height: 500px"
/>
</div>
<div v-else class="fuwenbenBox" v-html="value"></div>
<img alt="" :src="TextImg" v-if="type === 5" style="max-width: 100%" />
</template>
</template>
@ -1676,7 +1677,13 @@ const diGuiJilian = (val: any, options: any[]) => {
<style lang="scss">
.fuwenbenBox{
width: 100%;
border: 1px solid #e4e7ed;
padding: 10px;
background-color: #f5f7fa;
border-radius: 5px;
}
.el-checkbox {
--el-checkbox-disabled-checked-input-fill: #eaf2ff;

103
src/components/DesignForm/public/form/newForm.vue

@ -249,6 +249,45 @@ interface hideFieldConditionArritem {
conditions: any[];
}
function funWait(trueValue,conditionFieldValueArr,x,hideFieldsFromCheckbox,toshow){
if(trueValue){
if (trueValue.length > 0 && arrayEqual(trueValue, conditionFieldValueArr)) {
//,conditionField.,x.
//alert("")
/* console.log(conditionField)
console.log(toshow) */
let flag = false; //.,
//conditionField,x++
/* for(let a = 0;a<hideFieldConditionArr.length;a++){
if(hideFieldConditionArr[a].toShow==conditionField){//conditions.length>1,=1.
for(let b = 0;b<hideFieldConditionArr[a].conditions.length;b++){
for(let c = 0;c<hideFieldConditionArr[a].conditions[b].condition.length;c++){
if(hideFieldConditionArr[a].conditions[b].condition[c]==conditionField){
//,.
//console.log(1)
}
}
}
}
} */
if (flag == false) {
x++;
hideFieldsFromCheckbox.push(toshow);
//console.log(hideFieldArr)
/* for(let i = 0;i<hideFieldsFromCheckbox.length;i++){
hideFieldArr = hideFieldArr.filter((item: string) => item!=hideFieldsFromCheckbox[i])
//emits('refresh')
} */
}
}
}else{
setTimeout(()=>{
funWait(trueValue,conditionFieldValueArr,x,hideFieldsFromCheckbox,toshow)
},100)
}
}
const recursionToGetFinallyHideFields = (
hideFieldArr: any[],
radioSelectArr3: string | any[],
@ -354,35 +393,41 @@ const recursionToGetFinallyHideFields = (
if (modelKeyArr[n] == conditionField) {
//let count_1 = 0;
let trueValue = model.value[modelKeyArr[n]];
if (trueValue.length > 0 && arrayEqual(trueValue, conditionFieldValueArr)) {
//,conditionField.,x.
//alert("")
/* console.log(conditionField)
console.log(toshow) */
let flag = false; //.,
//conditionField,x++
/* for(let a = 0;a<hideFieldConditionArr.length;a++){
if(hideFieldConditionArr[a].toShow==conditionField){//conditions.length>1,=1.
for(let b = 0;b<hideFieldConditionArr[a].conditions.length;b++){
for(let c = 0;c<hideFieldConditionArr[a].conditions[b].condition.length;c++){
if(hideFieldConditionArr[a].conditions[b].condition[c]==conditionField){
//,.
//console.log(1)
}
}
}
}
} */
if (flag == false) {
x++;
hideFieldsFromCheckbox.push(toshow);
//console.log(hideFieldArr)
/* for(let i = 0;i<hideFieldsFromCheckbox.length;i++){
hideFieldArr = hideFieldArr.filter((item: string) => item!=hideFieldsFromCheckbox[i])
//emits('refresh')
} */
}
}
funWait(trueValue,conditionFieldValueArr,x,hideFieldsFromCheckbox,toshow)
// if (trueValue.length > 0 && arrayEqual(trueValue, conditionFieldValueArr)) {
// //,conditionField.,x.
// //alert("")
// /* console.log(conditionField)
// console.log(toshow) */
// let flag = false; //.,
// //conditionField,x++
// /* for(let a = 0;a<hideFieldConditionArr.length;a++){
// if(hideFieldConditionArr[a].toShow==conditionField){//conditions.length>1,=1.
// for(let b = 0;b<hideFieldConditionArr[a].conditions.length;b++){
// for(let c = 0;c<hideFieldConditionArr[a].conditions[b].condition.length;c++){
// if(hideFieldConditionArr[a].conditions[b].condition[c]==conditionField){
// //,.
// //console.log(1)
// }
// }
// }
// }
// } */
// if (flag == false) {
// x++;
// hideFieldsFromCheckbox.push(toshow);
// //console.log(hideFieldArr)
// /* for(let i = 0;i<hideFieldsFromCheckbox.length;i++){
// hideFieldArr = hideFieldArr.filter((item: string) => item!=hideFieldsFromCheckbox[i])
// //emits('refresh')
// } */
// }
// }
}
}
} else {

5
src/directive/permission/button.ts

@ -99,7 +99,10 @@ export const appHasPower = (signCode:string,buttonKey:string) => {
@ 时间: 2025-12-12 09:33:21
@ 功能: 判断表单级权限
*/
export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:number) => {
export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:number,isNew:boolean) => {
if(isNew){
return true;
}
const userStore = useUserStore();
//console.log("判断表单级权限-1111-->",signCode,userStore.myPower.appSystemPower)
if(userStore.myPower.appSystemPower && Array.isArray(userStore.myPower.appSystemPower)){

12
src/utils/request.ts

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

2
src/views/hr/archives/unitpage/batchImport.vue

@ -108,7 +108,7 @@ const uploadTrue = (response: any, uploadFile: UploadFile, uploadFiles: UploadFi
rewPunYearsIng.value = response.data.rewPunYearsIng;
redisListKey.value = response.data.redisListKey;
totalNum.value = response.data.totalNum;
// console.log("===>", staffChengji);
console.log("上传成功=111==>", response);
insetPeopleCont();
}
}

1
src/views/sysworkflow/lowcodepage/appCardPage.vue

@ -379,6 +379,7 @@ const handleCurrentChange = (val: any) => {
<template>
<div>
<div v-loading="loadingApp" class="content1 flex flex-wrap gap-4">
<el-card v-for="item in contList" :key="item.id" v-hasApp="[item.signCodeStr]" class="cardBox">
<template v-if="item.isEdit" #header>
<el-dropdown v-if="item.classify == 3">

664
src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow copy.vue

@ -0,0 +1,664 @@
<!--
@ 作者: 秦东
@ 时间: 2025-05-08 08:34:12
@ 备注: 模拟任务
-->
<script lang="ts" setup>
import { Check, Delete, Edit, Message, Search, Star } from "@element-plus/icons-vue";
import {
haveCustomerFormVersion,
generateFlow,
echoTableFormPage,
realTimeUpdateFlow,
} from "@/api/taskapi/management";
import { nodeFlow, conditionInfo, nodelPeoples } from "@/api/taskapi/types";
import {
notAsA_BasisForJudgment,
asAnApprovalActionControl,
fixedValueControl,
timeControl,
timeEquation,
submitButton,
afreshSubmitButton,
} from "@/utils/workflow/const";
import { judgeSubmitCancel, startRunFlow } from "@/api/DesignForm/requestapi";
import { string2json, stringToObj } from "@/utils/DesignForm/form";
import FlowStep from "@/views/taskplatform/taskmanagement/flowStep.vue";
import { orgform, criteriaForPeopleList } from "@/api/hr/org/type";
import {
getOrgFormTree,
getOrgFormUserList,
searchUserCustomerFormList,
} from "@/api/hr/org/index";
const props = defineProps({
simuIsTrue: {
type: Boolean,
default: true,
},
formVersion: {
type: String,
default: "",
},
});
const squareUrl = "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png";
const emits = defineEmits(["update:simuIsTrue"]);
const isShow = computed({
get: () => {
getTaskFormData();
return props.simuIsTrue;
},
set: (val) => {
emits("update:simuIsTrue", val);
},
});
/**
@ 作者: 秦东
@ 时间: 2024-04-08 15:35:54
@ 功能: 表单基本数据结构
*/
const state = reactive<any>({
type: 1, // 123 4 5
formData: {
list: [],
form: {},
config: {},
powerstr: {},
},
dict: {},
formId: props.versionid,
id: 0,
loading: true,
});
const nodelUserList = reactive<nodelPeoples[]>([]);
const flowFactor = reactive<conditionInfo[]>([]); //
const formLoading = ref(false); //loading
const flowLoading = ref(false); //loading
const flowMap = ref<any[]>(); //
const nextStep = ref<number>(0);
const currentProgress = ref<number>(1);
const nodeKey = ref<string>("");
//
const gainFlowChart = reactive<nodeFlow>({
id: "0",
isRun: 1,
userKey: "",
});
/**
@ 作者: 秦东
@ 时间: 2024-04-09 16:49:09
@ 功能: 表单前置数据
*/
const beforeSubmit = (params: any) => {
params.formId = props.versionid;
params.id = "";
// emits("update:isopen", false);
return params;
};
/**
@ 作者: 秦东
@ 时间: 2024-04-09 16:41:20
@ 功能: 提交成功回调
*/
const afterSubmit = (type: string, val?: any) => {
// console.log("------------------>",type,val)
// console.log("------------------>",flowMap)
if (type === "success") {
}
};
/**
@ 作者: 秦东
@ 时间: 2024-04-09 16:50:01
@ 功能: 关闭操作
*/
const closeAppSubmit = () => {
emits("update:simuIsTrue", false);
};
//
const changeKeyVal = (key: any, val: any, type: any, attribute: any) => {
// console.log("--key--->",key)
// console.log("--val--->",val,Array.isArray(val))
// console.log("--type--->",type)
// console.log("--attribute--->",attribute)
// console.log("--type-1-true->",notAsA_BasisForJudgment.indexOf(type))
// console.log("--flowFactor--->",flowFactor)
// if(notAsA_BasisForJudgment.indexOf(type) != -1){
// console.log("--type--true->",notAsA_BasisForJudgment.indexOf(type))
// }
let unitsVal = val;
let isUpdateFlowChart = false;
//
if (notAsA_BasisForJudgment.indexOf(type) === -1) {
let isWrite = true;
flowFactor.forEach((item: any) => {
if (item.factorid == key) {
isWrite = false;
item.type = 3;
if (type == "checkbox") {
item.isCheckbox = true;
item.answers = val.map(String);
} else {
item.isCheckbox = false;
item.oneanswer = val.toString();
}
if (notAsA_BasisForJudgment.indexOf(type) === -1) {
isUpdateFlowChart = true;
}
}
});
if (isWrite) {
if (type == "checkbox") {
flowFactor.push({
factorid: key,
type: 3,
isCheckbox: true,
answers: val.map(String),
});
} else {
flowFactor.push({
factorid: key,
type: 3,
isCheckbox: false,
oneanswer: val.toString(),
});
}
isUpdateFlowChart = true;
}
// console.log("--flowFactor--->",flowFactor)
}
// console.log("--flowFactor--1->",unitsVal,timeControl,type)
//
if (
timeControl.indexOf(type) > -1 ||
fixedValueControl.indexOf(type) > -1 ||
type == "input"
) {
// console.log("--flowFactor--3->",unitsVal)
let addNewTime = true; //
flowFactor.forEach((item: any) => {
// console.log("--flowFactor--5->",item.type)
if (item.type == 2) {
addNewTime = false;
// console.log("--flowFactor--5====1->",item.type)
// console.log("--flowFactor--5====3->",item.customFields,item.customFields.length)
if (item.customFields && item.customFields.length > 0) {
// console.log("--flowFactor--5====2->",item.customFields)
let sunNewAdd = true;
item.customFields.forEach((sunItem: any) => {
// console.log("--flowFactor-4->",sunItem.wordfield , key,sunItem.wordfield == key)
if (sunItem.wordfield == key) {
sunNewAdd = false;
isUpdateFlowChart = true;
if (timeEquation.indexOf(attribute) === -1) {
//
sunItem.leftval = val.toString();
} else {
//
if (Array.isArray(val)) {
if (val.length >= 2) {
sunItem.leftval = val[0].toString();
sunItem.rightval = val[val.length - 1].toString();
}
}
}
}
});
if (sunNewAdd) {
isUpdateFlowChart = true;
if (timeEquation.indexOf(attribute) === -1) {
//
let customFieldInfo = {
wordfield: key,
optType: "1",
leftval: val.toString(),
};
item.customFields.push(customFieldInfo);
} else {
//
if (Array.isArray(val)) {
if (val.length >= 2) {
let customFieldInfo = {
wordfield: key,
optType: "6",
leftval: val[0].toString(),
leftoptType: "3",
rightoptType: "3",
rightval: val[val.length - 1].toString(),
};
item.customFields.push(customFieldInfo);
}
}
}
}
}
}
});
if (addNewTime) {
//
isUpdateFlowChart = true;
if (timeEquation.indexOf(attribute) === -1) {
//
let customFieldInfo = {
wordfield: key,
optType: "1",
leftval: val.toString(),
};
let condInfo = {
factorid: "customFields",
type: 2,
isCheckbox: false,
customFields: [customFieldInfo],
};
flowFactor.push(condInfo);
} else {
//
if (Array.isArray(val)) {
if (val.length >= 2) {
let customFieldInfo = {
wordfield: key,
optType: "6",
leftval: val[0].toString(),
leftoptType: "3",
rightoptType: "3",
rightval: val[val.length - 1].toString(),
};
let condInfo = {
factorid: "customFields",
type: 2,
isCheckbox: false,
customFields: [customFieldInfo],
};
flowFactor.push(condInfo);
}
}
}
}
}
//
if (asAnApprovalActionControl.indexOf(type) > -1) {
isUpdateFlowChart = true;
let isWriteUs = true;
nodelUserList.forEach((item: any) => {
if (item.factorid == key) {
isWriteUs = false;
item.userList = val;
}
});
if (isWriteUs) {
nodelUserList.push({
factorid: key,
userList: val,
});
}
}
// console.log("--flowFactor--->", isUpdateFlowChart);
let isTrue = false
if(changeFlowPick.value && Array.isArray(changeFlowPick.value) && changeFlowPick.value.includes(key)){
isTrue = true
}
//
if (isUpdateFlowChart && isTrue) {
flowLoading.value = true;
//
gainFlowChart.conditionList = flowFactor;
gainFlowChart.nodelPeople = nodelUserList;
gainFlowChart.oldFlow = flowMap;
// console.log("--gainFlowChart--->",gainFlowChart)
realTimeUpdateFlow(gainFlowChart).then((data: any) => {
// console.log("-new-->",data)
flowMap.value = data.data.flowList;
nextStep.value = data.data.nextStep;
currentProgress.value = data.data.Step;
nodeKey.value = data.data.nodeKey;
// // console.log("-1-->",flowMap.value)
flowLoading.value = false;
});
}
};
/**
@ 作者: 秦东
@ 时间: 2024-04-09 16:50:37
@ 功能: 保存草稿
*/
const saveDraftPage = (type: string, val?: any) => {
if (type === "success") {
}
};
const changeFlowPick = ref<string[]>([])
const isFlowTable = ref(false); //
//
const getTaskFormData = () => {
formLoading.value = true;
flowLoading.value = true;
echoTableFormPage({ id: props.formVersion.toString() })
.then(({ data }) => {
// console.log("",data)
if (data.tableFormPage.flowIsOpen == 1 && data.tableFormPage.flowkeystr != "0") {
isFlowTable.value = true;
} else {
isFlowTable.value = false;
}
changeFlowPick.value = data.channerUpdate
gainFlowChart.id = data.tableFormPage.flowkeystr;
console.log("表单数据--->1", data.flowPage.flowList);
flowMap.value = data.flowPage.flowList;
state.id = props.versionid;
state.formData = stringToObj(data.tableFormPage.mastesform);
state.formData.config.hideField = []; //:confighideField,
// console.log("tableFlow---echoTableFormPage---data.tableFormPage.mastesform",data.tableFormPage.mastesform)
state.dict = string2json(data.tableFormPage.dict);
state.formData.powerstr = string2json(data.tableFormPage.powerstr);
// judgeSubmitCancel({ name: data.tableFormPage.mastesformjson }).then(
// (datajud: any) => {
// if (datajud.code == 0) {
// if (datajud.data == 3 || datajud.data == 4) {
// state.formData.list.push(submitButton);
// }
// }
// }
// );
})
.finally(() => {
formLoading.value = false;
flowLoading.value = false;
});
};
/**********************************************************
* 关于选择发起人问题 *
* *
***********************************************************/
const treeData = ref<orgform[]>([]);
const tableData = ref<criteriaForPeopleList[]>();
const openManBox = ref(false);
const searchPeopel = reactive({
orgId: 309,
title: "",
page: 1,
pageSize: 8,
total: 50,
});
const defaultProps = {
children: "children",
label: "name",
};
const pickSimMan = reactive({
name: "",
num: "",
userKey: "",
icon: "",
});
const loadPeople = ref(false);
/**
@ 作者: 秦东
@ 时间: 2025-05-08 14:02:21
@ 功能: 搜索人员
*/
const serachPeople = () => {
loadPeople.value = true;
const params = {
pageInfo: {
pageIndex: searchPeopel.page,
pageSize: searchPeopel.pageSize,
},
name: searchPeopel.title,
department: searchPeopel.orgId,
};
getOrgFormUserList(params)
.then(({ data }) => {
tableData.value = data.list;
searchPeopel.total = data.total;
})
.finally(() => {
loadPeople.value = false;
});
};
const searckButPick = () => {
searchPeopel.page = 1;
serachPeople();
};
/**
@ 作者: 秦东
@ 时间: 2025-05-08 10:59:08
@ 功能: 打开发起人选择器
*/
const pickOnePeople = () => {
openManBox.value = true;
getTreeData();
serachPeople();
};
/**
@ 作者: 秦东
@ 时间: 2025-05-08 11:34:32
@ 功能: 关闭弹窗
*/
const handleClose = () => {
openManBox.value = false;
};
/**
@ 作者: 秦东
@ 时间: 2025-05-08 13:52:50
@ 功能: 翻页操作
*/
const fanyeSerace = (val: number) => {
searchPeopel.page = val;
serachPeople();
};
const getTreeData = () => {
// getRequest('deptList', {}).then((res: any) => {
// treeData.value = formatResult(res.data, 'transformDataToChild')
// })
getOrgFormTree({ id: 309 })
.then(({ data }) => {
// console.log(data)
treeData.value = data.list;
})
.finally(() => {});
};
/**
@ 作者: 秦东
@ 时间: 2025-05-08 15:09:00
@ 功能: 我选中的人
*/
const pickManInfo = (val: any) => {
console.log("我选中的人----------》", val);
gainFlowChart.isRun = 2;
gainFlowChart.userKey = val.userkey;
pickSimMan.name = val.name;
pickSimMan.num = val.number;
pickSimMan.userKey = val.userkey;
pickSimMan.icon = val.icon
? val.icon
: val.icon_photo != null
? val.icon_photo
: squareUrl;
realTimeUpdateFlow(gainFlowChart).then((data: any) => {
// console.log("-new-->",data)
flowMap.value = data.data.flowList;
nextStep.value = data.data.nextStep;
currentProgress.value = data.data.Step;
nodeKey.value = data.data.nodeKey;
// // console.log("-1-->",flowMap.value)
flowLoading.value = false;
});
handleClose();
};
</script>
<template>
<div>
<el-drawer v-model="isShow" title="模拟测试流程" direction="rtl" size="900">
<template #header="{ close, titleId, titleClass }">
<h4 :id="titleId" :class="titleClass">模拟测试流程</h4>
<div>
<el-text v-if="pickSimMan.name != ''"
>当前执行人{{ pickSimMan.name
}}<el-text v-if="pickSimMan.num != ''"
>No.{{ pickSimMan.num }}</el-text
></el-text
>
<el-button type="primary" size="small" @click="pickOnePeople"
>选择发起人</el-button
>
</div>
</template>
<div class="common-layout">
<el-container>
<el-main
v-loading="formLoading"
class="asMain"
element-loading-text="Loading..."
>
<ak-form
ref="formEl"
:numrun="formType"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:save-draft-page="saveDraftPage"
/>
</el-main>
<el-aside
v-loading="flowLoading"
width="300px"
class="asBox"
element-loading-text="Loading..."
>
<el-text size="large">审批流程</el-text>
<FlowStep
v-model:flow-map="flowMap"
:next-step="nextStep"
:current-progress="currentProgress"
:node-key="nodeKey"
/>
</el-aside>
</el-container>
</div>
</el-drawer>
<el-dialog
v-model="openManBox"
title="请选择流程发起人"
width="500"
:before-close="handleClose"
:overflow="true"
>
<el-row>
<el-col :span="24">
<el-row :gutter="5">
<el-col :span="12">
<el-tree-select
v-model="searchPeopel.orgId"
:data="treeData"
node-key="id"
:props="defaultProps"
highlight-current
check-strictly
clearable
@node-click="handleNodeClick"
/>
</el-col>
<el-col :span="8">
<el-input
v-model="searchPeopel.title"
placeholder="请输入姓名或工号"
clearable
/>
</el-col>
<el-col :span="4">
<el-button type="primary" :icon="Search" @click="searckButPick"
>查询</el-button
>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-scrollbar
v-loading="loadPeople"
height="400px"
element-loading-text="Loading..."
>
<div
v-for="item in tableData"
class="userListBox active"
@click="pickManInfo(item)"
>
<el-avatar
shape="square"
:size="40"
:src="
item.icon != ''
? item.icon
: item.icon_photo != null
? item.icon_photo
: squareUrl
"
/>
<el-text class="userText">{{ item.name }}{{ item.number }}</el-text>
</div>
</el-scrollbar>
</el-col>
<el-col :span="24" class="footPage">
<el-pagination
v-model:current-page="searchPeopel.page"
v-model:page-size="searchPeopel.pageSize"
size="small"
layout="prev, pager, next"
:total="searchPeopel.total"
@current-change="fanyeSerace"
/>
</el-col>
</el-row>
<!-- <template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleClose">确定</el-button>
</div>
</template> -->
</el-dialog>
</div>
</template>
<style lang="scss" scoped>
.asBox {
border-left: 1px solid #ececec;
height: calc(100vh - 60px);
padding: 0px 5px;
}
.userListBox {
display: flex;
align-items: center;
cursor: pointer;
width: 100%;
height: 40px;
margin: 10px 0px 0px 0px;
// border-bottom: 1px solid #ececec;
.userText {
margin-left: 10px;
}
}
.userListBox:hover {
background-color: #a0cfff;
}
.footPage {
display: flex;
justify-content: center;
}
</style>

265
src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow.vue

@ -31,6 +31,10 @@ import {
searchUserCustomerFormList,
} from "@/api/hr/org/index";
import RunFlowStep from "@/views/taskplatform/taskmanagement/runNewFlowStep.vue";
import AiPage from "@/views/sysworkflow/lowcodepage/pageFlow/aiPage.vue";
const props = defineProps({
simuIsTrue: {
type: Boolean,
@ -40,6 +44,20 @@ const props = defineProps({
type: String,
default: "",
},
drawerWith: {
type: Number,
default: 0,
},
pageInfo: {
type: Object,
default() {
return {};
},
},
tablePageClass: {
type: Number,
default: 1,
},
});
const squareUrl = "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png";
const emits = defineEmits(["update:simuIsTrue"]);
@ -52,13 +70,15 @@ const isShow = computed({
emits("update:simuIsTrue", val);
},
});
const drawBodyWidth = ref(props.drawerWith)
//
/**
@ 作者: 秦东
@ 时间: 2024-04-08 15:35:54
@ 功能: 表单基本数据结构
*/
const state = reactive<any>({
const formState = reactive<any>({
type: 1, // 123 4 5
formData: {
list: [],
@ -86,6 +106,10 @@ const gainFlowChart = reactive<nodeFlow>({
userKey: "",
});
const drawLoading = ref(false)
const aiConfigArea =ref(false) //AI
const isFlowTable = ref(false); //
/**
@ 作者: 秦东
@ 时间: 2024-04-09 16:49:09
@ -333,7 +357,7 @@ const saveDraftPage = (type: string, val?: any) => {
}
};
const changeFlowPick = ref<string[]>([])
const isFlowTable = ref(false); //
//
const getTaskFormData = () => {
formLoading.value = true;
@ -350,14 +374,14 @@ const getTaskFormData = () => {
gainFlowChart.id = data.tableFormPage.flowkeystr;
console.log("表单数据--->1", data.flowPage.flowList);
flowMap.value = data.flowPage.flowList;
state.id = props.versionid;
state.formData = stringToObj(data.tableFormPage.mastesform);
state.formData.config.hideField = []; //:confighideField,
formState.id = props.versionid;
formState.formData = stringToObj(data.tableFormPage.mastesform);
formState.formData.config.hideField = []; //:confighideField,
// console.log("tableFlow---echoTableFormPage---data.tableFormPage.mastesform",data.tableFormPage.mastesform)
state.dict = string2json(data.tableFormPage.dict);
formState.dict = string2json(data.tableFormPage.dict);
state.formData.powerstr = string2json(data.tableFormPage.powerstr);
formState.formData.powerstr = string2json(data.tableFormPage.powerstr);
// judgeSubmitCancel({ name: data.tableFormPage.mastesformjson }).then(
// (datajud: any) => {
// if (datajud.code == 0) {
@ -498,7 +522,7 @@ const pickManInfo = (val: any) => {
</script>
<template>
<div>
<el-drawer v-model="isShow" title="模拟测试流程" direction="rtl" size="900">
<el-drawer v-model="isShow" title="模拟测试流程" direction="rtl" :size="drawBodyWidth">
<template #header="{ close, titleId, titleClass }">
<h4 :id="titleId" :class="titleClass">模拟测试流程</h4>
<div>
@ -513,19 +537,20 @@ const pickManInfo = (val: any) => {
>
</div>
</template>
<div class="common-layout">
<el-container>
<el-main
v-loading="formLoading"
class="asMain"
element-loading-text="Loading..."
>
<ak-form
<div v-loading="drawLoading" :class="aiConfigArea&&isFlowTable?'drawBody treePage':(aiConfigArea&&!isFlowTable)?'drawBody twoPageAi':(!aiConfigArea&&isFlowTable)?'drawBody twoPageFlow':'drawBody'">
<AiPage
v-if="formState.type != 5 && aiConfigArea"
ref="aiassistRef"
:agent="currentAgent"
/>
<AppForm
ref="formEl"
:numrun="formType"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
:draw-title="drawTitle"
:form-data="formState.formData"
:masters_key="props.pageInfo.masters_key"
:type="props.tablePageClass"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
@ -533,24 +558,21 @@ const pickManInfo = (val: any) => {
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:save-draft-page="saveDraftPage"
:anew-submit="anewSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit="sendDraftSubmit"
:submit-edit="submitEdit"
@options-value3-get3="optionsValue3Get3"
/>
</el-main>
<el-aside
v-loading="flowLoading"
width="300px"
class="asBox"
element-loading-text="Loading..."
>
<el-text size="large">审批流程</el-text>
<FlowStep
v-model:flow-map="flowMap"
:next-step="nextStep"
:current-progress="currentProgress"
:node-key="nodeKey"
/>
</el-aside>
</el-container>
</div>
</el-drawer>
@ -637,28 +659,183 @@ const pickManInfo = (val: any) => {
</div>
</template>
<style lang="scss" scoped>
.asBox {
border-left: 1px solid #ececec;
height: calc(100vh - 60px);
padding: 0px 5px;
.drawerClass{
:deep .el-drawer__header{
border-bottom: 1px solid #ECECEC;
}
}
.userListBox {
.drawHeader {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
.drawBody{
width: 100%;
height: 100%;
padding: 10px 10px;
:deep .el-card{
border-radius: 15px;
}
:deep .el-card__header{
padding: 15px 15px;
}
:deep .el-card__body{
padding: 0;
}
:deep .el-card__footer{
padding: 10px 10px;
}
:deep .el-steps--vertical{
padding: 10px 0;
height: auto;
}
}
.twoPageAi{
display: grid;
grid-template-columns: minmax(150px, 300px) 1fr; /* 左右最小150px,最大250px,中间自适应 */
// grid-template-columns: 4fr 6fr; /* 150px250px */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.twoPageFlow{
display: grid;
grid-template-columns: 1fr minmax(150px, 300px); /* 左右最小150px,最大250px,中间自适应 */
// grid-template-columns: 4fr 1fr; /* 150px250px */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.treePage{
display: grid;
grid-template-columns: minmax(150px, 300px) 1fr minmax(150px, 300px); /* 左右最小150px,最大250px,中间自适应 */
// grid-template-columns: 2fr 6fr 2fr; /* 150px250px */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
}
.svgBox{
background: linear-gradient(135deg, #0020C2, #4d6cff);
color: white;
width: 40px;
height: 40px;
margin: 10px 0px 0px 0px;
// border-bottom: 1px solid #ececec;
.userText {
margin-left: 10px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
}
.card-header{
font-size: 1.4rem;
font-weight: 700;
color: #0020C2;
display: flex;
align-items: center;
gap: 10px;
}
.scroBox{
padding: 10px 15px;
height: calc(100vh - 200px);
}
.formBody{
width: 100%;
overflow-x: auto;
}
.flowBody{
padding: 10px 15px;
height: calc(100vh - 260px);
}
.bootemWorkFlow{
width: 100%;
text-align: center;
.bootemWorkFlowBut{
width: 100%;
padding: 10px 0;
text-align: center;
}
.userListBox:hover {
background-color: #a0cfff;
}
.footPage {
.btn {
padding: 14px 16px;
border-radius: 10px;
font-weight: 600;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s;
border: none;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 32, 194, 0.15);
}
.approve-btn {
background: linear-gradient(135deg, #00cc66, #33dd88);
color: white;
}
.reject-btn {
background: linear-gradient(135deg, #ff3366, #ff5588);
color: white;
}
.bootemAi{
display: grid;
grid-template-columns: 1fr 50px; /* 左右最小150px,最大250px,中间自适应 */
grid-template-rows: auto;
gap: 10px;
max-width: 100%;
margin: 0 auto;
:deep .el-input__wrapper{
border-radius: 10px;
}
}
.ai-send-btn {
background: linear-gradient(135deg, #0020C2, #4d6cff);
color: white;
border: none;
width: 46px;
border-radius: 10px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s;
}
.ai-send-btn:hover {
background: linear-gradient(135deg, #0019a0, #3a5aff);
transform: translateY(-2px);
}
.ai-conversation {
flex: 1;
display: flex;
flex-direction: column;
gap: 15px;
margin-bottom: 20px;
}
.message {
padding: 12px 16px;
border-radius: 12px;
max-width: 90%;
line-height: 1.5;
}
.user-message {
background: #eef2ff;
align-self: flex-end;
border-top-right-radius: 4px;
border: 1px solid rgba(0, 32, 194, 0.2);
}
.ai-message {
background: linear-gradient(to right, #f0f5ff, #ffffff);
align-self: flex-start;
border-top-left-radius: 4px;
border: 1px solid rgba(0, 32, 194, 0.1);
}
</style>

5
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue

@ -56,6 +56,10 @@ const props = defineProps({
return {};
},
},
drawerWith: {
type: Number,
default: 0,
},
});
const emits = defineEmits<{
(e: "update:state", val: formStruct): void;
@ -605,6 +609,7 @@ const simulateFlow = () => {
<SimulateTaskFlow
v-if="simuIsTrue"
v-model:simu-is-true="simuIsTrue"
:drawer-with="props.drawerWith"
:form-version="props.formVersion"
/>

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

@ -159,6 +159,7 @@ onBeforeMount(() => {
types: 3,
};
if (props.isNew) {
// tabsActive.value = 3;
state.formData.list = [];
formVersion.value = "";
appPageKey.value = "";
@ -237,10 +238,10 @@ onBeforeMount(() => {
@tab-click="handleClick"
>
<el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lc',2)" label="② 流程设计" :name="2"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lb',2)" label="③ 列表设计" :name="3"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'sj',2)" label="④ 数据看板" :name="4"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'dy',2)" label="⑤ 打印设计" :name="5"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lc',2,props.isNew)" label="② 流程设计" :name="2"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lb',2,props.isNew)" label="③ 列表设计" :name="3"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'sj',2,props.isNew)" label="④ 数据看板" :name="4"> </el-tab-pane>
<el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'dy',2,props.isNew)" label="⑤ 打印设计" :name="5"> </el-tab-pane>
<!--el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'nc',2)" label="⑥ 内容呈现设计" :name="6"> </-el-tab-pane-->
</el-tabs>
</div>
@ -284,6 +285,7 @@ onBeforeMount(() => {
:form-key="props.formKey"
:app-cont="props.appCont"
:menu-id="menuId"
:drawer-with="props.drawerWith"
:group-key="props.groupKey"
/>
<PageList

6
src/views/sysworkflow/lowcodepage/appPage/index.vue

@ -48,7 +48,7 @@ const emits = defineEmits([
]);
const squareUrl = "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png";
const drawerOpenOrClose = ref(false);
const tabsActive = ref(1);
const tabsActive = ref(3);
const menusTree = ref<appMenuTreeInfo[]>([]);
const appCont = reactive<appSetInfo>({
appKey: "1",
@ -74,8 +74,8 @@ const handleClick = () => {};
*/
const closeAppDraw = () => {
emits("update:isShow", false);
emits("refreshPage");
tabsActive.value = 1;
// emits("refreshPage");
// tabsActive.value = 1;
checkedMenu.value = "";
appPageKey.value = "";
props.formKey = "";

13
src/widget/lowcodeimage/lowcodeImage.vue

@ -219,7 +219,7 @@ watch(
]"
@click="handleLink(props.data?.control)"
/>
<img
<!-- <img
v-else
referrerpolicy="no-referrer"
:src="url"
@ -232,8 +232,8 @@ watch(
floatFlag ? floatStyle : '',
]"
@click="handleLink(props.data?.control)"
/>
<!-- <el-upload
/> -->
<el-upload
v-bind="$props"
class="upload-demo"
:action="uploadUrl"
@ -242,9 +242,10 @@ watch(
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
>
<img referrerpolicy="no-referrer" :src="url" :style="styleObject" :fit="fit" :class="[boderAndShadowClassIsActive ? boderAndShadowClass : '', radiusClassIsActive ? radiusClass : '',mp, floatFlag ? floatStyle : '']" />
<img referrerpolicy="no-referrer" :src="url" :style="styleObject" :fit="fit" :class="[boderAndShadowClassIsActive ? boderAndShadowClass : '', radiusClassIsActive ? radiusClass : '',mp, floatFlag ? floatStyle : '']" />
</el-upload> -->
<img v-if="url == errimg" referrerpolicy="no-referrer" :src="url" :style="styleObject" :fit="fit" :class="[boderAndShadowClassIsActive ? boderAndShadowClass : '', radiusClassIsActive ? radiusClass : '',mp, floatFlag ? floatStyle : '']" />
<!-- <img referrerpolicy="no-referrer" :src="url" :style="styleObject" :fit="fit" :class="[boderAndShadowClassIsActive ? boderAndShadowClass : '', radiusClassIsActive ? radiusClass : '',mp, floatFlag ? floatStyle : '']" /> -->
</el-upload>
</div>
</template>

14
src/widget/number/index.vue

@ -87,10 +87,7 @@ const updateModel = (val: any) => {
});
};
onMounted(() => {
console.log("编码组件---》", props.numrun, props.data, props.data.control.config);
// if (props.numrun == 2) {
// getNumber();
// }
if (props.data.config && props.data.config.automatic) {
getNumber();
editDisabled.value = true;
@ -101,14 +98,19 @@ onMounted(() => {
//
const getNumber = () => {
let tablekeyStr = ""
if(props.tablekey?.name){
tablekeyStr = props.tablekey.name
}
let sendData = {
table: props.tablekey,
table: tablekeyStr,
automatic: props.data.config.automatic,
customRules: props.data.config.customRules,
};
console.log("编码组件2--1-》",sendData)
editDisabled.value = props.data.config.automatic;
gainNumber(sendData).then((data: any) => {
// console.log("2---",data,sendData)
console.log("编码组件2---》",data,sendData)
value.value = data.data;
});
};

Loading…
Cancel
Save