Browse Source

修改编号未自动生成

qin_s6
herenshan112 6 days ago
parent
commit
6cabe5a520
  1. 26
      src/components/DesignForm/printHtmlRender.ts
  2. 17
      src/components/DesignForm/public/form/formItem.vue
  3. 5
      src/directive/permission/button.ts
  4. 12
      src/utils/request.ts
  5. 664
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow copy.vue
  6. 343
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/simulateTaskFlow.vue
  7. 5
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue
  8. 10
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  9. 6
      src/views/sysworkflow/lowcodepage/appPage/index.vue
  10. 14
      src/widget/number/index.vue

26
src/components/DesignForm/printHtmlRender.ts

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

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

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

5
src/directive/permission/button.ts

@ -99,7 +99,10 @@ export const appHasPower = (signCode:string,buttonKey:string) => {
@ 时间: 2025-12-12 09:33:21 @ 时间: 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(); const userStore = useUserStore();
//console.log("判断表单级权限-1111-->",signCode,userStore.myPower.appSystemPower) //console.log("判断表单级权限-1111-->",signCode,userStore.myPower.appSystemPower)
if(userStore.myPower.appSystemPower && Array.isArray(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) data: sm4EncryptMethod(JSON.stringify(data), randomString)
} }
} }
// console.log('请求拦截---------->', randomString) console.log('请求拦截---------->', randomString)
// console.log('请求拦截----headers------>', headers) console.log('请求拦截----headers------>', headers)
// console.log('请求拦截----config---url--->', config.url) console.log('请求拦截----config---url--->', config.url)
// console.log('请求拦截----data------>', data) console.log('请求拦截----data------>', data)
// console.log('请求拦截----config------>', config) console.log('请求拦截----config------>', config)
// console.log('请求拦截----content-type------>', config.headers['Content-Type']) // console.log('请求拦截----content-type------>', config.headers['Content-Type'])
// console.log('请求拦截----config------>', config.headers) // console.log('请求拦截----config------>', config.headers)
@ -88,7 +88,7 @@ service.interceptors.response.use(
let jsonData = sm4DecryptMethod(data.data, authKey) let jsonData = sm4DecryptMethod(data.data, authKey)
response.data.data = JSON.parse(jsonData) response.data.data = JSON.parse(jsonData)
} }
// console.log('行营结果----解密结构------>', response.data) console.log('行营结果----解密结构------>', response.data)
const { code, msg } = response.data; const { code, msg } = response.data;
if (code === 0 || code === 200 || code === 10001) { if (code === 0 || code === 200 || code === 10001) {
return response.data; return response.data;

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>

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

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

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

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

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

@ -159,6 +159,7 @@ onBeforeMount(() => {
types: 3, types: 3,
}; };
if (props.isNew) { if (props.isNew) {
// tabsActive.value = 3;
state.formData.list = []; state.formData.list = [];
formVersion.value = ""; formVersion.value = "";
appPageKey.value = ""; appPageKey.value = "";
@ -237,10 +238,10 @@ onBeforeMount(() => {
@tab-click="handleClick" @tab-click="handleClick"
> >
<el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane> <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,'lc',2,props.isNew)" 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,'lb',2,props.isNew)" 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,'sj',2,props.isNew)" 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,'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-tab-pane v-if="formHasPower(props.formKey,props.signCode,'nc',2)" label="⑥ 内容呈现设计" :name="6"> </-el-tab-pane-->
</el-tabs> </el-tabs>
</div> </div>
@ -284,6 +285,7 @@ onBeforeMount(() => {
:form-key="props.formKey" :form-key="props.formKey"
:app-cont="props.appCont" :app-cont="props.appCont"
:menu-id="menuId" :menu-id="menuId"
:drawer-with="props.drawerWith"
:group-key="props.groupKey" :group-key="props.groupKey"
/> />
<PageList <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 squareUrl = "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png";
const drawerOpenOrClose = ref(false); const drawerOpenOrClose = ref(false);
const tabsActive = ref(1); const tabsActive = ref(3);
const menusTree = ref<appMenuTreeInfo[]>([]); const menusTree = ref<appMenuTreeInfo[]>([]);
const appCont = reactive<appSetInfo>({ const appCont = reactive<appSetInfo>({
appKey: "1", appKey: "1",
@ -74,8 +74,8 @@ const handleClick = () => {};
*/ */
const closeAppDraw = () => { const closeAppDraw = () => {
emits("update:isShow", false); emits("update:isShow", false);
emits("refreshPage"); // emits("refreshPage");
tabsActive.value = 1; // tabsActive.value = 1;
checkedMenu.value = ""; checkedMenu.value = "";
appPageKey.value = ""; appPageKey.value = "";
props.formKey = ""; props.formKey = "";

14
src/widget/number/index.vue

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

Loading…
Cancel
Save