刘妍 2024-06-12 08:53:29 +08:00
commit 0dae092fe1
18 changed files with 372 additions and 171 deletions

BIN
public/huichuang_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-left" viewBox="0 0 16 16">
<path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m.646 2.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L4.293 8 2.646 6.354a.5.5 0 0 1 0-.708M7 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m-5 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>
</svg>

After

Width:  |  Height:  |  Size: 512 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-right" viewBox="0 0 16 16">
<path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m10.646 2.146a.5.5 0 0 1 .708.708L11.707 8l1.647 1.646a.5.5 0 0 1-.708.708l-2-2a.5.5 0 0 1 0-.708zM2 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>
</svg>

After

Width:  |  Height:  |  Size: 495 B

View File

@ -427,7 +427,7 @@
}
}
async function getIssueInfo() {
console.log(props.issueId);
console.log("111",props.issueId);
}
defineExpose({
getForm,

View File

@ -231,6 +231,7 @@
isInit: true,
formTitle: '',
issueCode: '',
mapConfig:{},
};
break;
case 'bpmn:EndEvent':
@ -433,7 +434,6 @@
// 2.
let auth = await authRef.value.getForm();
let wfData = flowWfDataStore.getWfData;
console.log(wfData);
var startIndex = (wfData || []).findIndex(
(element: { type?: string }) => element.type == 'bpmn:StartEvent',
);
@ -496,7 +496,7 @@
}
},
);
console.log(wfData);
let scheme = {
wfData: wfData,

View File

@ -216,6 +216,7 @@
formName: string;
issueOpen: boolean;
issueName: string;
mapConfig:string;
}
const data: dataType = reactive({
columns: [
@ -347,9 +348,13 @@
const issueRef = ref<any>();
async function issueHandleOk() {
let obj = issueRef.value.getRow();
let formPublishInfo = JSON.parse(obj[0].scheme)
let mapConfig = formPublishInfo.table.maps;
node.value.issueId = obj[0].id;
node.value.mapConfig = mapConfig
data.issueName = obj[0].name;
data.issueOpen = false;
data.mapConfig = mapConfig;
}
//
async function getIssueFormList() {

View File

@ -1076,8 +1076,8 @@
//
async function getIssueFormList() {
const list = await fun_GetPageList({
page: 1,
limit: 1000,
page:1,
limit:1000,
});
list.items.forEach((element) => {
if (element.id == node.value.issueId) {

View File

@ -95,6 +95,31 @@
</a-tab-pane>
</a-tabs>
</template>
<template v-else-if="['CardGroup'].includes(schema.component)">
<div style="width: 100%">
<div style="display: flex">
{{ schema.label }}
<div style="margin-left: 10px">
<a-radio-group
v-model:value="noTitleKey"
:options="schema.componentProps.options"
/>
</div>
</div>
<template v-for="(item, index) in schema.componentProps.options" :key="index">
<a-card style="width: 100%" v-show="noTitleKey === item.value">
<FormRender
v-for="(childItem, k) in item.children"
:key="k"
:schema="childItem"
:formData="formData"
:formConfig="formConfig"
:setFormModel="setFormModel"
/>
</a-card>
</template>
</div>
</template>
<template v-else>
<VFormItem
v-if="(isCreateOrModifyComponent && schema.display) || !isCreateOrModifyComponent"
@ -162,6 +187,10 @@
let subTableId = ref(null);
let subTableData = ref([]);
let subTableList = ref([]);
const noTitleKey = ref('0')
if(props.schema.component === 'CardGroup'){
noTitleKey.value = props.schema.componentProps.options[0].value
}
// if (props.formConfig.schemas) {
// props.formConfig.schemas.forEach((item) => {

View File

@ -4,15 +4,21 @@
:class="`left ${prefixCls}-sider`"
collapsible
collapsedWidth="0"
width="300"
width="345"
:zeroWidthTriggerStyle="{
'margin-top': '-70px',
'background-color': 'gray',
'background-color': 'white',
width: '35px',
height: '35px',
'background-image': `url(/iocn/text-indent-right.svg)`,
'background-position': 'center',
'background-repeat': 'no-repeat',
'border-radius:': '15px',
}"
breakpoint="md"
>
<div class="collapseItem-box">
<CollapseContainer title="基础控件" ghost>
<CollapseContainer title="基础控件">
<CollapseItem
:list="baseComponents"
:handleListPush="handleListPushDrag"
@ -57,8 +63,17 @@
collapsible
:reverseArrow="true"
collapsedWidth="0"
width="270"
:zeroWidthTriggerStyle="{ 'margin-top': '-70px', 'background-color': 'gray' }"
width="320"
:zeroWidthTriggerStyle="{
'margin-top': '-70px',
'background-color': 'white',
width: '35px',
height: '35px',
'background-image': `url(/iocn/text-indent-left.svg)`,
'background-position': 'center',
'background-repeat': 'no-repeat',
'border-radius:': '15px',
}"
breakpoint="lg"
>
<PropsPanel ref="propsPanel" :activeKey="formConfig.activeKey">
@ -433,7 +448,7 @@
}
.collapseItem-box {
height: calc(100vh - 60px);
height: calc(100vh - 55px);
overflow: auto;
}
</style>

View File

@ -5,21 +5,21 @@
<div class="operating-area">
<!-- 头部操作按钮区域 start -->
<!-- 操作左侧区域 start -->
<div class="left-btn-box">
<div class="left-btn-box" style="text-indent: 20px">
<Tooltip v-for="item in toolbarsConfigs" :title="item.title" :key="item.icon">
<a @click="$emit(item.event)" class="toolbar-text">
<Icon :icon="item.icon" />
<Icon :icon="item.icon" :style="{ fontSize: '21px' }" />
</a>
</Tooltip>
<Divider type="vertical" />
<Tooltip title="撤销">
<a :class="{ disabled: !canUndo }" :disabled="!canUndo" @click="undo">
<Icon icon="ant-design:undo-outlined" />
<Icon icon="ant-design:undo-outlined" :style="{ fontSize: '21px' }" />
</a>
</Tooltip>
<Tooltip title="重做">
<a :class="{ disabled: !canRedo }" :disabled="!canRedo" @click="redo">
<Icon icon="ant-design:redo-outlined" />
<Icon icon="ant-design:redo-outlined" :style="{ fontSize: '21px' }" />
</a>
</Tooltip>
</div>
@ -80,7 +80,7 @@
title: '生成代码',
type: 'exportCode',
event: 'handleOpenCodeModal',
icon: 'ant-design:code-filled',
icon: 'bi:code-slash',
},
{
title: '清空',

View File

@ -5,7 +5,7 @@ import { IVFormComponent } from '../typings/v-form-component';
import { isArray } from 'lodash-es';
import { componentMap as VbenCmp, add } from '@/components/Form/src/componentMap';
import { ComponentType } from '@/components/Form/src/types';
import { uploadApi,fileUploadApi } from '@/api/sys/upload';
import { uploadApi, fileUploadApi } from '@/api/sys/upload';
import { componentMap as Cmp } from '../components';
import { Component } from 'vue';
import { getDeptList, getAccountList, getPosGroupList } from '@/api/demo/system';
@ -106,7 +106,7 @@ export const customComponents: IVFormComponent[] = [
{
component: 'InputGuid',
label: 'GUID主键',
icon: 'bi:input-cursor-text',
icon: 'bi:braces-asterisk',
field: '',
colProps: { span: 24 },
componentProps: {},
@ -114,7 +114,7 @@ export const customComponents: IVFormComponent[] = [
{
component: 'TreeSelect',
label: '职级选择',
icon: 'gg:select',
icon: 'bi:list-stars',
field: '',
colProps: { span: 24 },
componentProps: {
@ -129,7 +129,7 @@ export const customComponents: IVFormComponent[] = [
{
component: 'TreeSelect',
label: '部门选择',
icon: 'clarity:tree-view-line',
icon: 'bi:people',
field: '',
colProps: { span: 24 },
componentProps: {
@ -144,7 +144,7 @@ export const customComponents: IVFormComponent[] = [
{
component: 'Select',
label: '人员选择',
icon: 'gg:select',
icon: 'bi:person',
field: '',
colProps: { span: 24 },
componentProps: {
@ -158,7 +158,7 @@ export const customComponents: IVFormComponent[] = [
{
component: 'MapGeom',
label: '图斑',
icon: 'ant-design:heat-map-outlined',
icon: 'bi:box-arrow-in-up-left',
field: 'MapGeom',
colProps: { span: 24 },
componentProps: {},
@ -167,7 +167,7 @@ export const customComponents: IVFormComponent[] = [
field: '',
component: 'Grid',
label: '设计子表',
icon: 'ant-design:snippets-outlined',
icon: 'bi:list-ul',
type: 'subTable',
componentProps: {},
columns: [
@ -190,7 +190,7 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'InputCountDown',
label: '倒计时输入',
icon: 'line-md:iconify2',
icon: 'ant-design:hourglass-outlined',
colProps: { span: 24 },
field: '',
componentProps: {},
@ -198,7 +198,7 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'IconPicker',
label: '图标选择器',
icon: 'line-md:iconify2',
icon: 'bi:grid',
colProps: { span: 24 },
field: '',
componentProps: {},
@ -214,7 +214,7 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'AutoComplete',
label: '自动完成',
icon: 'wpf:password1',
icon: 'bi:check2-circle',
colProps: { span: 24 },
field: '',
componentProps: {
@ -242,36 +242,10 @@ export const baseComponents: IVFormComponent[] = [
dashed: true,
},
},
{
component: 'Checkbox',
label: '复选框',
icon: 'ant-design:check-circle-outlined',
colProps: { span: 24 },
field: '',
},
{
component: 'CheckboxGroup',
label: '复选框-组',
icon: 'ant-design:check-circle-filled',
field: '',
colProps: { span: 24 },
componentProps: {
options: [
{
label: '选项1',
value: '1',
},
{
label: '选项2',
value: '2',
},
],
},
},
{
component: 'Input',
label: '输入框',
icon: 'bi:input-cursor-text',
icon: 'bi:braces',
field: '',
colProps: { span: 24 },
componentProps: {
@ -289,15 +263,23 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'InputTextArea',
label: '文本域',
icon: 'ant-design:file-text-filled',
icon: 'ant-design:file-text-outlined',
field: '',
colProps: { span: 24 },
componentProps: {},
},
{
component: 'Select',
label: '下拉选择',
icon: 'gg:select',
component: 'Radio',
label: '单选框',
icon: 'carbon:radio-button-checked',
field: '',
colProps: { span: 24 },
componentProps: {},
},
{
component: 'RadioGroup',
label: '单选框-组',
icon: 'bi:ui-radios-grid',
field: '',
colProps: { span: 24 },
componentProps: {
@ -313,19 +295,17 @@ export const baseComponents: IVFormComponent[] = [
],
},
},
{
component: 'Radio',
label: '单选框',
icon: 'ant-design:check-circle-outlined',
field: '',
component: 'Checkbox',
label: '复选框',
icon: 'bi:check-square',
colProps: { span: 24 },
componentProps: {},
field: '',
},
{
component: 'RadioGroup',
label: '选框-组',
icon: 'carbon:radio-button-checked',
component: 'CheckboxGroup',
label: '选框-组',
icon: 'bi:ui-checks-grid',
field: '',
colProps: { span: 24 },
componentProps: {
@ -396,11 +376,45 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'Switch',
label: '开关',
icon: 'entypo:switch',
icon: 'bi:toggle-off',
field: '',
colProps: { span: 24 },
componentProps: {},
},
{
component: 'Button',
label: '按钮组件',
icon: 'ant-design:build-outlined',
field: '',
colProps: { span: 24 },
hiddenLabel: true,
componentProps: {
type: 'default',
shape: 'default',
size: 'middle',
icon: '',
clickCode: '',
},
},
{
component: 'Select',
label: '下拉选择',
icon: 'gg:select',
field: '',
colProps: { span: 24 },
componentProps: {
options: [
{
label: '选项1',
value: '1',
},
{
label: '选项2',
value: '2',
},
],
},
},
{
component: 'TreeSelect',
label: '树形选择',
@ -461,21 +475,6 @@ export const baseComponents: IVFormComponent[] = [
],
},
},
{
component: 'Button',
label: '按钮组件',
icon: 'ant-design:build-outlined',
field: '',
colProps: { span: 24 },
hiddenLabel: true,
componentProps: {
type: 'default',
shape: 'default',
size: 'middle',
icon: '',
clickCode: '',
},
},
// {
// component: 'ColorPicker',
// label: '颜色选择器',
@ -490,7 +489,7 @@ export const baseComponents: IVFormComponent[] = [
{
component: 'slot',
label: '插槽',
icon: 'vs:timeslot-question',
icon: 'bi:inboxes',
field: '',
colProps: { span: 24 },
componentProps: {
@ -498,7 +497,7 @@ export const baseComponents: IVFormComponent[] = [
},
},
{
component:'CreateUser',
component: 'CreateUser',
type: 'createuser',
label: '创建人员',
icon: 'mdi:account-check',
@ -507,7 +506,7 @@ export const baseComponents: IVFormComponent[] = [
componentProps: {},
},
{
component:'ModifyUser',
component: 'ModifyUser',
type: 'modifyuser',
label: '修改人员',
icon: 'mdi:account-edit',
@ -516,7 +515,7 @@ export const baseComponents: IVFormComponent[] = [
componentProps: {},
},
{
component:'CreateTime',
component: 'CreateTime',
type: 'createtime',
label: '创建时间',
icon: 'ic:outline-event-available',
@ -525,70 +524,74 @@ export const baseComponents: IVFormComponent[] = [
componentProps: {},
},
{
component:'ModifyTime',
component: 'ModifyTime',
type: 'modifytime',
label: '修改时间',
icon: 'ic:outline-event',
colProps: { span: 24 },
field: '',
componentProps: {},
},{
},
{
component: 'FileUpload',
label: '文件上传',
icon: 'ant-design:file-add-outlined',
field: '',
colProps: { span: 24 },
componentProps: {
api:fileUploadApi,
maxNumber:10,
api: fileUploadApi,
maxNumber: 10,
maxSize: 2,
name:"files",
action:"/api/Files/Upload",
server:"http://192.168.10.102:9023"
name: 'files',
action: '/api/Files/Upload',
server: 'http://192.168.10.102:9023',
},
},{
},
{
component: 'ImageUpload',
label: '图片上传',
icon: 'ant-design:file-image-outlined',
field: '',
colProps: { span: 24 },
componentProps: {
api:fileUploadApi,
maxNumber:10,
api: fileUploadApi,
maxNumber: 10,
accept: ['png', 'jpeg', 'jpg'],
maxSize: 2,
name:"files",
action:"/api/Files/Upload",
server:"http://192.168.10.102:9023"
name: 'files',
action: '/api/Files/Upload',
server: 'http://192.168.10.102:9023',
},
},{
},
{
component: 'VideoUpload',
label: '视频上传',
icon: 'ant-design:video-camera-outlined',
field: '',
colProps: { span: 24 },
componentProps: {
api:fileUploadApi,
maxNumber:10,
api: fileUploadApi,
maxNumber: 10,
accept: ['mp4', 'mov', 'avi'],
maxSize: 100,
name:"files",
action:"/api/Files/Upload",
server:"http://192.168.10.102:9023"
name: 'files',
action: '/api/Files/Upload',
server: 'http://192.168.10.102:9023',
},
},{
},
{
component: 'Location',
label: '获取位置',
icon: 'ant-design:environment-outlined',
field: '',
colProps: { span: 24 },
componentProps: {
api:()=>1,
maxNumber:10,
api: () => 1,
maxNumber: 10,
accept: ['mp4', 'mov', 'avi'],
maxSize: 100,
},
}
},
];
// https://next.antdv.com/components/transfer-cn
@ -632,7 +635,7 @@ export const layoutComponents: IVFormComponent[] = [
field: '',
component: 'Grid',
label: '栅格布局',
icon: 'icon-grid',
icon: 'bi:border-all',
componentProps: {},
columns: [
{
@ -649,7 +652,7 @@ export const layoutComponents: IVFormComponent[] = [
field: '',
component: 'Card',
label: '卡片布局',
icon: 'ant-design:tags-outlined',
icon: 'bi:card-text',
componentProps: {},
columns: [
{
@ -665,7 +668,7 @@ export const layoutComponents: IVFormComponent[] = [
{
component: 'CardGroup',
label: '卡片组',
icon: 'ic:round-auto-awesome-motion',
icon: 'bi:card-list',
colProps: { span: 24 },
field: '',
componentProps: {
@ -673,12 +676,12 @@ export const layoutComponents: IVFormComponent[] = [
{
label: '卡片1',
value: '1',
field:`use_card_1`,
field: 'use_card_1',
children: [],
},
{
label: '卡片2',
field:`use_card_2`,
field: 'use_card_2',
value: '2',
children: [],
},

View File

@ -64,7 +64,7 @@
width="100%"
wrap-class-name="full-modal"
v-model:open="previewOpen"
title="流程发起"
title="11"
:destroyOnClose="true"
>
<template #footer> </template>
@ -388,6 +388,12 @@
afterSaveEvent: '',
changeDataEvent: '',
});
interface GeomParams {
TableName:string;
FieldName:string;
FiledValue:Array<any>;
}
const handleClickForm = (status) => {
const config = cloneDeep(formConfig.value);
@ -513,6 +519,7 @@
if (rows.length == 0) {
return createMessage.warn('请选择一条数据查看详情');
}
console.log("DetailsRow",rows);
let toProps = {
isDetail: true,
isUpdate: false,
@ -529,19 +536,37 @@
openShowFormModal.value = true;
// ids
let getGeomPrams = {
TableName:"",
FieldName:"",
FieldValue:[],
try{
let getGeomPrams:GeomParams = {
TableName:"drone_shp_data",
FieldName:"geom",
// FieldValue:row[].split(","),
FiledValue:[1315,1308],
}
getGeom(getGeomPrams).then(res=>{
let geoms = [];
if(res){
if(res.items?.length>0){
res.items.forEach((item,index)=>{
let geom = {
key:item.gid,
mapgeom:item.geom
}
geoms.push(geom);
})
}
// MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
MapboxComponent.value.handlerDraw(status,geoms, false)
}else{
createMessage.error("当前数据没有图斑!");
}
})
}catch(e){
createMessage.error("当前数据没有图斑!");
}
// getGeom(getGeomPrams).then(res=>{
// if(res.code == 200){
// }
// })
MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
} else {
openModal(true, toProps);
@ -555,6 +580,8 @@
break;
}
};
function handleSelect(selectedKeys: any, selected: any) {
const rel = selected.node.dataRef;
const obj: any = {};
@ -805,9 +832,11 @@
// Add
if(status == "Add"){
let geoms:string[] = [];
mapgemoList.value?.forEach((item,index)=>{
console.log("mapgeoms",item);
})
let addForm = {
"tableName": "drone_shp_data",
"guidFieldName": "id",

View File

@ -11,7 +11,9 @@
>
<div :class="`${prefixCls}`">
<div :class="`${prefixCls}-header`">
<div :class="`${prefixCls}-header-logo`"> 慧创 表单设计 </div>
<div :class="`${prefixCls}-header-logo`">
<img src="/huichuang_logo.png" alt="慧创科技" /> <span>表单设计</span>
</div>
<div :class="`${prefixCls}-header-stepsBox`">
<a-steps
:current="stepsCurrent"

View File

@ -17,22 +17,23 @@
</a-button>
</div>
<a-tabs v-model:activeKey="activeName" @change="changeActive">
<a-tab-pane
key="form"
:tab="
designerData.formCurrentNode.formTitle
? designerData.formCurrentNode.formTitle
: '表单信息'
"
v-if="formVisble"
>
<FormViewer
ref="formBoxRef"
:formConfig="formConfig"
:formVerison="designerData.formCurrentNode.formVerison"
:issueId="designerData.formCurrentNode.issueId"
v-if="formVisble"
/>
<a-tab-pane key="form" tab="表单信息" v-if="formVisble">
<div :class="mapConfig?.isShowMap?'form-container':''">
<FormViewer
ref="formBoxRef"
:formConfig="formConfig"
:formVerison="designerData.formCurrentNode.formVerison"
v-if="formVisble"
/>
</div>
<div class="maper-container" v-if="mapConfig?.isShowMap">
<MapboxMap
:mapConfig="mapConfig"
@handlerDrawComplete="handlerDrawComplete"
@mapOnLoad="mapOnLoad"
ref="MapboxComponent"
/>
</div>
</a-tab-pane>
<a-tab-pane
key="form"
@ -104,6 +105,8 @@
import { IFormConfig } from '@/views/demo/form-design/typings/v-form-component';
import { useMessage } from '@/hooks/web/useMessage';
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
const mapConfig = ref({});
const { createMessage } = useMessage();
const formBoxRef = ref<any>();
const userStore = useUserStore();
@ -173,6 +176,7 @@
processVisble.value = true;
}
}
async function getDetailInfo() {
let data = await getDetail({ code: props.code });
flowContent.value = data.scheme.flowContent;
@ -180,7 +184,10 @@
let content = JSON.parse(data.scheme.content);
let wfData = content.wfData;
const currentNode = wfData.find((t) => t.type == 'bpmn:StartEvent');
console.log(currentNode);
console.log("currentNode",currentNode);
mapConfig.value = currentNode.mapConfig
console.log("mapConfig",mapConfig.value);
designerData.isCustmerTitle = currentNode.isCustmerTitle;
if (currentNode.authFields.length > 0) {
//
@ -210,6 +217,8 @@
}
formConfig.value = currentNode.authFields;
console.log("formConfigConfig",formConfig.value);
designerData.formCurrentNode = currentNode;
getFormHistory();
}
@ -412,4 +421,15 @@
.form-box {
width: 480px;
}
.form-container{
float:left;
width:60%
}
.maper-container{
float:left;
width:40%;
padding:20px;
height:100%;
}
</style>

View File

@ -714,4 +714,9 @@
margin-right: 8px;
}
}
::v-deep .full-modal .ant-modal-body{
height:95%!important;
}
</style>

View File

@ -51,7 +51,7 @@
async function onSave(type) {
let validateData = await modelDesigner.value.validateFlow();
let formData = await modelDesigner.value.getFlow();
console.log(formData);
console.log("formData",formData);
if (validateData) {
// 1 2稿
formData.scheme.type = Number(type);

View File

@ -8,27 +8,29 @@
</div>
<a-layout>
<a-layout>
<a-layout-content>
<a-tabs v-model:activeKey="activeName" @change="changeActive">
<a-tab-pane
key="form"
:tab="
designerData.formCurrentNode.formTitle
? designerData.formCurrentNode.formTitle
: '表单信息'
"
v-if="formVisble"
>
<FormViewer
ref="formBoxRef"
:formConfig="formConfig"
:processId="designerData.process.id"
:formVerison="designerData.formCurrentNode.formVerison"
:formRelationId="designerData.formCurrentNode.formRelationId"
:instanceInfo="designerData.process.instanceInfo"
:issueId="designerData.formCurrentNode.issueId"
v-if="formVisble"
/>
<a-layout-content>
<a-tabs v-model:activeKey="activeName" @change="changeActive" type="card">
<a-tab-pane key="form" tab="表单信息" v-if="formVisble">
<div :class="mapConfig?.isShowMap?'form-container':''">
<FormViewer
ref="formBoxRef"
:formConfig="formConfig"
:processId="designerData.process.id"
:formVerison="designerData.formCurrentNode.formVerison"
:formRelationId="designerData.formCurrentNode.formRelationId"
:instanceInfo="designerData.process.instanceInfo"
v-if="formVisble"
/>
</div>
<div class="maper-container" v-if="mapConfig?.isShowMap">
<MapboxMap
:mapConfig="mapConfig"
@handlerDrawComplete="handlerDrawComplete"
ref="MapboxComponent"
/>
</div>
</a-tab-pane>
<a-tab-pane
key="form"
@ -77,16 +79,21 @@
</a-timeline>
</a-tab-pane>
</a-tabs>
</a-layout-content>
<!-- <a-divider type="vertical" /> -->
<a-layout-sider v-if="props.isRead == 0">
<a-tabs v-model:activeKey="auditName">
<!-- <a-layout-sider >
</a-layout-sider> -->
<a-layout-footer :style="footerStyle">
<a-tabs v-if="props.isRead == 0" v-model:activeKey="auditName">
<a-tab-pane key="audit" :tab="auditTitleVal">
<div class="approval-column">
<a-form
ref="formRef"
:rules="rules"
:model="formData"
size="small"
labelAlign="left"
:label-col="labelCol"
:wrapper-col="wrapperCol"
@ -114,7 +121,7 @@
</div>
</a-tab-pane>
</a-tabs>
</a-layout-sider>
</a-layout-footer>
</a-layout>
</a-layout>
@ -175,6 +182,7 @@
import { PageWrapper } from '@/components/Page';
import { createAgain, signAudit, audit, ReadFlow } from '@/api/sys/WFProcess';
import { getBPMNTask } from '@/api/sys/WFTask';
import { getGeom } from '@/api/sys/layerManagement'
import { dateFormat } from '@/utils/base';
import { flowStore } from '@/store/modules/flow';
import { functionsaveForm, LoadFormScheme } from '@/api/demo/formScheme';
@ -190,7 +198,9 @@
import { IFormConfig } from '@/views/demo/form-design/typings/v-form-component';
import { useMessage } from '@/hooks/web/useMessage';
import { buildGUID } from '@/utils/uuid';
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
const mapConfig = ref({isShowMap:false});
const MapboxComponent = ref();
const { createMessage } = useMessage();
const formBoxRef = ref<any>();
const emit = defineEmits(['closeModel']);
@ -224,6 +234,14 @@
const rules: any = ref({
des: [{ required: true, message: '请填写审批意见', trigger: 'blur' }],
});
const footerStyle = ref({
height:"440px",
overFlow:"auto",
color: '#fff',
backgroundColor: '#ffffff',
zIndex:"9999999999",
})
if (props.type == 4) {
rules.value = {};
}
@ -329,6 +347,10 @@
let currentNode;
if (auditNode.isInherit) {
currentNode = wfData.find((t) => t.type == 'bpmn:StartEvent');
mapConfig.value = currentNode.mapConfig;
if(mapConfig.value?.isShowMap){
handlerShowGeomtrys();
}
} else {
currentNode = auditNode;
}
@ -726,6 +748,39 @@
return createMessage.error('失败');
}
}
function handlerShowGeomtrys(){
// ids
try{
let getGeomPrams = {
TableName:"drone_shp_data",
FieldName:"geom",
// FieldValue:row[].split(","),
FiledValue:[1315,1308],
}
getGeom(getGeomPrams).then(res=>{
let geoms = [];
if(res){
if(res.items?.length>0){
res.items.forEach((item,index)=>{
let geom = {
key:item.gid,
mapgeom:item.geom
}
geoms.push(geom);
})
}
// MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
MapboxComponent.value.handlerDraw("Detail",geoms, false)
}else{
createMessage.error("当前数据没有图斑!");
}
})
}catch(e){
createMessage.error("当前数据没有图斑!");
}
}
//
async function rejectHandleOk() {
const data = await audit(props.taskId, {
@ -744,6 +799,7 @@
onBeforeMount(() => {
getTaskInfo();
});
</script>
<style lang="less" scoped>
::v-deep .ant-tabs-nav-wrap {
@ -761,7 +817,7 @@
}
.info-box {
display: inline-block;
width: 300px;
width: 0px;
position: absolute;
right: 0;
margin-top: 40px;
@ -793,6 +849,7 @@
padding: 10px;
justify-content: flex-end;
display: flex;
display:none;
}
}
::v-deep .vben-page-wrapper-content {
@ -824,7 +881,31 @@
margin-right: 8px;
}
}
::v-deep .ant-modal-footer{
display:none!important;
height:0px!important;
}
::v-deep .ant-layout-footer{
padding:0px !important;
overflow: auto!important;
}
.form-container{
float:left;
width:60%
}
.maper-container{
float:left;
width:40%;
padding:20px;
height:100%;
}
.l-from-body {
padding: 10px 30px;
}
</style>

View File

@ -19,6 +19,7 @@
wrap-class-name="full-modal"
v-model:open="auditOpen"
title="审核"
footer=""
:destroyOnClose="true"
>
<template #footer> </template>
@ -191,4 +192,9 @@
height: 85%;
}
}
::v-deep .full-modal .ant-modal-body{
height:95%!important;
}
</style>