| | |
| | | <template> |
| | | <div class="h-full" :class="prefixCls"> |
| | | <div ref="lfElRef" class="h-full"></div> |
| | | <div ref="lfElVRef" class="h-full"></div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import type { Ref } from 'vue'; |
| | | import type { Definition } from '@logicflow/core'; |
| | | import { ref, onMounted, unref, nextTick, computed, watch } from 'vue'; |
| | | import FlowChartToolbar from './FlowChartToolbar.vue'; |
| | | import LogicFlow from '@logicflow/core'; |
| | | import { Snapshot, BpmnElement, Menu, DndPanel, SelectionSelect } from '@logicflow/extension'; |
| | | import { useDesign } from '@/hooks/web/useDesign'; |
| | |
| | | import { createFlowChartContext } from './useFlowContext'; |
| | | import { toLogicFlowData } from './adpterForTurbo'; |
| | | import { useModal, BasicModal } from '@/components/Modal'; |
| | | import { JsonPreview } from '@/components/CodeEditor'; |
| | | import { configDefaultDndPanel } from './config'; |
| | | import '@logicflow/core/dist/style/index.css'; |
| | | import '@logicflow/extension/lib/style/index.css'; |
| | | import { useGlobSetting } from '/@/hooks/setting'; |
| | | import customEdge from './customEdge'; |
| | | import { useMessage } from '/@/hooks/web/useMessage'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import actionRect from './actionRect'; |
| | | import TestNode from './TestNode'; |
| | | import CollectNode from './CollectNode'; |
| | |
| | | 'undo', |
| | | 'redo', |
| | | ]); |
| | | const lfElRef = ref(null); |
| | | const lfElVRef = ref(null); |
| | | const graphData = ref({}); |
| | | |
| | | const lfInstance = ref(null) as Ref<LogicFlow | null>; |
| | |
| | | async function init() { |
| | | await nextTick(); |
| | | |
| | | const lfEl = unref(lfElRef); |
| | | const lfEl = unref(lfElVRef); |
| | | if (!lfEl) { |
| | | return; |
| | | } |
| | |
| | | lf.register(RepairNode); |
| | | lf.register(customEdge); |
| | | onRender(); |
| | | lf?.setPatternItems(props.patternItems || configDefaultDndPanel(lf)); |
| | | // lf?.setPatternItems(props.patternItems || configDefaultDndPanel(lf)); |
| | | } |
| | | |
| | | async function onRender() { |
| | |
| | | if (!lf) { |
| | | return; |
| | | } |
| | | const lFData = toLogicFlowData(props.data); |
| | | lf.render(lFData); |
| | | // const lFData = toLogicFlowData(props.data); |
| | | lf.render(props.data); |
| | | |
| | | lf.on('anchor:drop', (data) => { |
| | | const nodeData = data.nodeModel.getData(); |
| | | if (nodeData.properties.isReturn === true) { |
| | | console.log(11, nodeData.properties.isReturn); |
| | | data.nodeModel.graphModel.edges.forEach((element) => { |
| | | if (element.sourceNodeId === data.nodeModel.id) { |
| | | lf.changeEdgeType(element.id, 'custom-edge'); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | lf.on('node:click,edge:click', (data) => { |
| | | if (data.isSelected) { |
| | | console.log(data.data.text.value, data.isSelected); |
| | | // notification.success({ |
| | | // message: t('ç¹å»äºèç¹'), |
| | | // description: `${data.data.text.value}: ${data.isSelected}`, |
| | | // duration: 3, |
| | | // }); |
| | | emit('select-node', data, lf); |
| | | } else { |
| | | console.log(data.data.type); |
| | | } |
| | | }); |
| | | // lf.on('anchor:drop', (data) => { |
| | | // const nodeData = data.nodeModel.getData(); |
| | | // if (nodeData.properties.isReturn === true) { |
| | | // console.log(11, nodeData.properties.isReturn); |
| | | // data.nodeModel.graphModel.edges.forEach((element) => { |
| | | // if (element.sourceNodeId === data.nodeModel.id) { |
| | | // lf.changeEdgeType(element.id, 'custom-edge'); |
| | | // } |
| | | // }); |
| | | // } |
| | | // }); |
| | | // lf.on('node:click,edge:click', (data) => { |
| | | // if (data.isSelected) { |
| | | // console.log(data.data.text.value, data.isSelected); |
| | | // // notification.success({ |
| | | // // message: t('ç¹å»äºèç¹'), |
| | | // // description: `${data.data.text.value}: ${data.isSelected}`, |
| | | // // duration: 3, |
| | | // // }); |
| | | // emit('select-node', data, lf); |
| | | // } else { |
| | | // console.log(data.data.type); |
| | | // } |
| | | // }); |
| | | |
| | | lf.on('blank:mousedown', (e) => { |
| | | emit('click-blank'); |
| | | }); |
| | | // lf.on('blank:mousedown', (e) => { |
| | | // emit('click-blank'); |
| | | // }); |
| | | |
| | | lf.on('node:dnd-add', (data, e) => { |
| | | console.log('node:dnd-add', data); |
| | | emit('select-node', data, lf); |
| | | }); |
| | | // lf.on('node:dnd-add', (data, e) => { |
| | | // console.log('node:dnd-add', data); |
| | | // emit('select-node', data, lf); |
| | | // }); |
| | | |
| | | emit('init', lf); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * @Description: çæ¬¡ç¸å
³ |
| | | * @Author: Ben Lin |
| | | * @version: |
| | | * @Date: 2024-06-19 20:34:27 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-07-01 12:33:25 |
| | | */ |
| | | |
| | | import { Ref, h, unref } from 'vue'; |
| | | import { DeleteEntity, GetEnum, getEntity } from '/@/api/tigerapi/system'; |
| | | import { ActionItem, BasicColumn } from '/@/components/Table'; |
| | | import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is'; |
| | | import { buildUUID } from '/@/utils/uuid'; |
| | | import { useUserStore } from '/@/store/modules/user'; |
| | | import { formatToDateTime } from '/@/utils/dateUtil'; |
| | | import { Tag } from 'ant-design-vue'; |
| | | import { useLocale } from '/@/locales/useLocale'; |
| | | |
| | | const { getLocale } = useLocale(); |
| | | function _default() { |
| | | const ActionColumn: BasicColumn = { |
| | | width: 80, |
| | | title: 'æä½', |
| | | dataIndex: 'action', |
| | | slots: { customRender: 'action' }, |
| | | fixed: undefined, |
| | | }; |
| | | |
| | | /** |
| | | * @description: äºèªå®ä¹æ¹æ³ |
| | | * @return {*} |
| | | */ |
| | | const methods = { |
| | | /** |
| | | * @description: è·åæ°å¢æé®çè¡ä¸º |
| | | * @return {*} |
| | | */ |
| | | CreateAction: (fnName: string) => { |
| | | return { |
| | | action: 'drawer', //drawer(æå¼å·¦ä¾§æ½å±æ¡) | go(è·³è½¬å°æ°ç页é¢) |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: æä½å段èªå®ä¹æé® |
| | | * @return {*} |
| | | */ |
| | | ActionItem: (params: Recordable<any>, data, ...args): ActionItem[] => { |
| | | if (!isNullOrUnDef(data[1])) { |
| | | data[1].popConfirm.confirm = Del.bind(null, args, params); |
| | | } |
| | | return data; |
| | | }, |
| | | /** |
| | | * @description: é«çº§è¡¨åå详æ
页é¢è¿å主页é¢çurl |
| | | * @return {*} |
| | | */ |
| | | GetHomeUrl: () => { |
| | | const param = { ID: 'MES_SHIFT_SYS', colSlots: [], crudColSlots: [] }; |
| | | return `/MES_SHIFT_SYS/LC/${encodeURI(JSON.stringify(param))}`; |
| | | }, |
| | | GetBaseColumns: () => { |
| | | return [ |
| | | { |
| | | title: 'çæ¬¡ç¼ç ', |
| | | dataIndex: 'SFT_CODE', |
| | | // ifShow: false, |
| | | width: 180, |
| | | }, |
| | | { |
| | | title: 'çæ¬¡åç§°', |
| | | dataIndex: 'SFT_NAME', |
| | | }, |
| | | { |
| | | title: 'çå¶ç¼ç ', |
| | | dataIndex: 'SFTS_CODE', |
| | | }, |
| | | { |
| | | title: 'çæ¬¡å¼å§æ¶é´', |
| | | dataIndex: 'SFT_BEGIN', |
| | | }, |
| | | { |
| | | title: 'çæ¬¡ç»ææ¶é´', |
| | | dataIndex: 'SFT_END', |
| | | }, |
| | | { |
| | | title: 'æ¯å¦è·¨å¤©', |
| | | dataIndex: 'IS_ACROSS_DAY', |
| | | customRender: ({ record }) => { |
| | | const type = record.IS_ACROSS_DAY; |
| | | var text = ''; |
| | | var color = 'green'; |
| | | switch (type) { |
| | | case 'Y': |
| | | text = 'æ¯'; |
| | | break; |
| | | case 'N': |
| | | color = 'blue'; |
| | | text = 'å¦'; |
| | | break; |
| | | } |
| | | return h(Tag, { color: color }, () => text); |
| | | }, |
| | | }, |
| | | { |
| | | title: '夿³¨', |
| | | dataIndex: 'REMARK', |
| | | }, |
| | | { |
| | | title: 'æ´æ°æ¶é´', |
| | | dataIndex: 'UPDATE_TIME', |
| | | }, |
| | | { |
| | | title: 'æ´æ°äºº', |
| | | dataIndex: 'UPDATE_USER', |
| | | }, |
| | | ]; |
| | | }, |
| | | GetSearchForm: () => { |
| | | return [ |
| | | { |
| | | field: 'SFT_CODE', |
| | | label: 'çæ¬¡ç¼ç ', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çæ¬¡åç§°', |
| | | field: 'SFT_NAME', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | }, |
| | | ]; |
| | | }, |
| | | GetCrudForm: () => { |
| | | return [ |
| | | { |
| | | field: 'SFT_CODE', |
| | | label: 'çæ¬¡ç¼ç ', |
| | | component: 'Input', |
| | | required: true, |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çæ¬¡åç§°', |
| | | field: 'SFT_NAME', |
| | | component: 'Input', |
| | | required: true, |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çå¶ç¼ç ', |
| | | field: 'SFTS_CODE', |
| | | component: 'ApiSelect', |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | componentProps: { |
| | | api: getEntity, |
| | | params: { entityName: 'MES_SHIFT_SYS', sqlcmd: ' 1=1 ' }, |
| | | resultField: 'Data.Items', |
| | | labelField: 'SFTS_NAME', |
| | | valueField: 'SFTS_CODE', |
| | | }, |
| | | dynamicDisabled: ({ values }) => { |
| | | return true; |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çæ¬¡å¼å§æ¶é´', |
| | | field: 'SFT_BEGIN', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çæ¬¡ç»ææ¶é´', |
| | | field: 'SFT_END', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'æ¯å¦è·¨å¤©', |
| | | field: 'IS_ACROSS_DAY', |
| | | component: 'Select', |
| | | required: true, |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: 'æ¯', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: 'å¦', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | // { |
| | | // field: 'LOGIN_TIME', |
| | | // label: 'ç»å½æ¶é´', |
| | | // defaultValue: '', |
| | | // component: 'RangePicker', |
| | | // ifShow: true, |
| | | // colProps: { span: 8 }, |
| | | // }, |
| | | { |
| | | label: '夿³¨', |
| | | field: 'REMARK', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'ID', |
| | | field: 'ID', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 24, |
| | | }, |
| | | show: false, |
| | | }, |
| | | ]; |
| | | }, |
| | | /** |
| | | * @description: è·åä¸»ä¿¡æ¯ |
| | | * @return {*} |
| | | */ |
| | | GetBaseForm: () => { |
| | | return [ |
| | | { |
| | | field: 'SFTS_CODE', |
| | | label: 'çå¶ç¼ç ', |
| | | component: 'Input', |
| | | required: true, |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'çå¶åç§°', |
| | | field: 'SFTS_NAME', |
| | | required: true, |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'æ¯å¦å¯ç¨', |
| | | field: 'IS_ACTIVE', |
| | | required: true, |
| | | component: 'Select', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | componentProps: { |
| | | options: [ |
| | | { |
| | | label: 'å¯ç¨', |
| | | value: 'Y', |
| | | key: 'Y', |
| | | }, |
| | | { |
| | | label: 'ç¦ç¨', |
| | | value: 'N', |
| | | key: 'N', |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | { |
| | | label: '夿³¨', |
| | | field: 'REMARK', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | }, |
| | | { |
| | | label: 'ID', |
| | | field: 'ID', |
| | | component: 'Input', |
| | | colProps: { |
| | | span: 8, |
| | | }, |
| | | show: false, |
| | | }, |
| | | ]; |
| | | }, |
| | | /** |
| | | * @description: è·åå¡çå
é
ç½®å表ï¼ä»¥å¾ªç¯æ¾ç¤ºå¤ä¸ªå¡çå¹¶é
ç½®å¤ä¸ªææ§½ |
| | | * @return {*} |
| | | */ |
| | | GetBaseCards: (type: string) => { |
| | | return [ |
| | | { |
| | | name: 'BaseForm', |
| | | slots: [], |
| | | preIcons: {}, |
| | | title: 'çå¶ä¿¡æ¯', |
| | | entityName: 'MES_SHIFT_SYS', |
| | | }, |
| | | // { |
| | | // name: 'prodinfo', |
| | | // slots: ['addRot', 'setRot'], |
| | | // preIcons: { addRot: 'search|svg', setRot: 'config|svg' }, |
| | | // title: '产åä¿¡æ¯', |
| | | // }, |
| | | // { name: 'rotinfo', slots: ['add'], preIcons: { add: 'search|svg' }, title: 'å·¥èºä¿¡æ¯' }, |
| | | ]; |
| | | }, |
| | | OthersValues: (val: string, id: string) => { |
| | | return { SFTS_CODE: val }; |
| | | } /** |
| | | * @description: èªå®ä¹æç»è¡¨ä¸ç¼è¾è¿åæ¹æ³ |
| | | * @param {string} type |
| | | * @param {*} d |
| | | * @param {*} u |
| | | * @return {*} |
| | | */, |
| | | EditOperation: (data: Ref<any[]>, d, u) => { |
| | | if (u.isUpdate) { |
| | | //æ´æ° |
| | | var _data = data.value.map((item) => { |
| | | if (item['ID'] == d.ID) |
| | | return { |
| | | ...item, |
| | | SFT_CODE: d.SFT_CODE, |
| | | SFT_NAME: d.SFT_NAME, |
| | | SFT_BEGIN: d.SFT_BEGIN, |
| | | SFT_END: d.SFT_END, |
| | | IS_ACROSS_DAY: d.IS_ACROSS_DAY, |
| | | REMARK: d.REMARK, |
| | | }; |
| | | return item; |
| | | }); |
| | | data.value = _data; |
| | | } else { |
| | | //æ°å¢ |
| | | d.ID = buildUUID(); |
| | | d.CREATE_USER = useUserStore().getUserInfo.userId as string; |
| | | d.UPDATE_TIME = formatToDateTime(new Date()); |
| | | d.UPDATE_USER = useUserStore().getUserInfo.userId as string; |
| | | var _data2: any[] = []; |
| | | if (!isNullOrEmpty(data.value)) { |
| | | _data2 = data.value.map((item) => { |
| | | return item; |
| | | }); |
| | | } |
| | | _data2.push(d); |
| | | data.value = _data2; |
| | | } |
| | | }, |
| | | /** |
| | | * @description: è·åæ é¢ä¿¡æ¯ |
| | | * @param {string} type |
| | | * @return {*} |
| | | */ |
| | | GetTitle: () => { |
| | | return { |
| | | pageTitle: 'çå¶ç®¡ç', |
| | | pageContent: 'è¿éå¯ä»¥æ·»å åä¿®æ¹çå¶åçæ¬¡åæ¶æ®µã', |
| | | baseTableTitle: 'çæ¬¡ç®¡ç', |
| | | }; |
| | | }, |
| | | }; |
| | | |
| | | /** |
| | | * @description: èªå®ä¹å 餿¹æ³ |
| | | * @param {Fn} args |
| | | * @param {*} params |
| | | * @return {*} |
| | | */ |
| | | function Del(args: Fn[], params: {}) { |
| | | if (!isNullOrEmpty(params['data'])) { |
| | | var _data = params['data'].value.filter((item) => item['ID'] != params['record']['ID']); |
| | | params['data'].value = _data; |
| | | args[6]({ |
| | | dataSource: [], |
| | | }); |
| | | args[6]({ |
| | | dataSource: params['data'], |
| | | }); |
| | | args[1](); |
| | | } else { |
| | | DeleteEntity(params['record'], params['entityName']).then((action) => { |
| | | if (action.IsSuccessed) { |
| | | args[1](); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | return [methods, ActionColumn]; |
| | | } |
| | | |
| | | export default _default; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * @Description: çå¶ç¸å
³ |
| | | * @Author: Ben Lin |
| | | * @version: |
| | | * @Date: 2024-06-19 20:34:27 |
| | | * @LastEditors: Ben Lin |
| | | * @LastEditTime: 2024-07-01 12:17:23 |
| | | */ |
| | | |
| | | import { ActionItem, BasicColumn } from '/@/components/Table'; |
| | | import { buildUUID } from '/@/utils/uuid'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { isNullOrUnDef } from '/@/utils/is'; |
| | | |
| | | const { t } = useI18n(); |
| | | function _default() { |
| | | const ActionColumn: BasicColumn = { |
| | | width: 100, |
| | | title: 'æä½', |
| | | dataIndex: 'action', |
| | | slots: { customRender: 'action' }, |
| | | fixed: 'right', |
| | | }; |
| | | /** |
| | | * @description: ä¸äºèªå®ä¹æ¹æ³ |
| | | * @return {*} |
| | | */ |
| | | const methods = { |
| | | /** |
| | | * @description: è·åæ°å¢æé®çè¡ä¸º |
| | | * @return {*} |
| | | */ |
| | | CreateAction: (fnName: string) => { |
| | | return { |
| | | action: 'go', //drawer(æå¼å·¦ä¾§æ½å±æ¡) | go(è·³è½¬å°æ°ç页é¢) |
| | | url: 'MES_SHIFT/High', |
| | | params: { |
| | | CODE: '0', |
| | | ID: buildUUID(), |
| | | Name: 'MES_SHIFT', |
| | | Title: 'æ°å¢çå¶', |
| | | pCode: 'SFTS_CODE', |
| | | IsID: false, |
| | | }, |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: æä½å段èªå®ä¹æé® |
| | | * @return {*} |
| | | */ |
| | | ActionItem: (params: Recordable<any>, data, ...args): ActionItem[] => { |
| | | if (!isNullOrUnDef(data[0])) { |
| | | data[0].onClick = Edit.bind(null, args, params); |
| | | } |
| | | return data; |
| | | }, |
| | | /** |
| | | * @description: å¼¹åºéæ©æ¡æåè¿åæ¹æ³ |
| | | * @param {*} d |
| | | * @param {*} u |
| | | * @return {*} |
| | | */ |
| | | GetSelectSuccess: (d, u) => { |
| | | return { |
| | | ITEM_CODE: d.values['val'], |
| | | }; |
| | | }, |
| | | /** |
| | | * @description: å¼¹åºéæ©æ¡æå¼æ¹æ³ |
| | | * @param {Fn} openItemModal |
| | | * @return {*} |
| | | */ |
| | | OpenSelectItem: (openItemModal: Fn, ...args) => { |
| | | openItemModal(true, { |
| | | title: 'ç©æå表', |
| | | schemas: [ |
| | | { |
| | | field: 'ITEM_CODE', |
| | | component: 'Input', |
| | | label: 'ç©æç¼ç ', |
| | | colProps: { |
| | | span: 12, |
| | | }, |
| | | }, |
| | | ], |
| | | ItemColumns: [ |
| | | { |
| | | title: t('ç©æç¼ç '), |
| | | dataIndex: 'ITEM_CODE', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 200, |
| | | }, |
| | | { |
| | | title: t('ç©æåç§°'), |
| | | dataIndex: 'ITEM_NAME', |
| | | resizable: true, |
| | | sorter: true, |
| | | width: 180, |
| | | }, |
| | | ], |
| | | tableName: 'BAS_ITEM', |
| | | rowKey: 'ITEM_CODE', |
| | | searchInfo: { TABLE_NAME: 'BAS_ITEM' }, |
| | | }); |
| | | }, |
| | | }; |
| | | |
| | | /* 以䏿¯å
鍿¹æ³ï¼ä¸exportï¼ä¾ä¸é¢çæ¹æ³è°ç¨ */ |
| | | |
| | | /** |
| | | * @description: èªå®ä¹ç¼è¾æ¹æ³ |
| | | * @param {Fn} args |
| | | * @param {*} params |
| | | * @return {*} |
| | | */ |
| | | function Edit(args: Fn[], params: {}) { |
| | | const param = { |
| | | CODE: params['record']['SFTS_CODE'], |
| | | ID: params['record']['ID'], |
| | | Name: 'MES_SHIFT', |
| | | Title: `ç¼è¾çå¶ï¼${params['record']['SFTS_CODE']}`, |
| | | pCode: 'SFTS_CODE', |
| | | IsID: false, |
| | | }; |
| | | args[5](`/MES_SHIFT/High/${encodeURI(JSON.stringify(param))}`); |
| | | } |
| | | |
| | | return [methods, ActionColumn]; |
| | | } |
| | | |
| | | export default _default; |
| | |
| | | title: 'æä½', |
| | | dataIndex: 'action', |
| | | slots: { customRender: 'action' }, |
| | | fixed: undefined, |
| | | fixed: 'right', |
| | | }, //èªå®ä¹æä½å |
| | | }); |
| | | // watch( |