From 4a1a5b96689ce49cba56f7b668d73ed5edc7ff2c Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期三, 01 五月 2024 14:24:52 +0800 Subject: [PATCH] 工艺路线更新 --- src/views/tigerprojects/mes/eng/route/index.vue | 541 +++++++++++++++++++++++++++-------------------------- 1 files changed, 272 insertions(+), 269 deletions(-) diff --git a/src/views/tigerprojects/mes/eng/route/index.vue b/src/views/tigerprojects/mes/eng/route/index.vue index 65e8a47..44ebc95 100644 --- a/src/views/tigerprojects/mes/eng/route/index.vue +++ b/src/views/tigerprojects/mes/eng/route/index.vue @@ -1,48 +1,47 @@ <template> <PageWrapper title="宸ヨ壓娴佺▼鍥�" content="鏍规嵁鐢熶骇宸ヨ壓璁捐宸ヨ壓娴佺▼" contentFullHeight fixedHeight> <Layout class="h-full"> - <LayoutContent> - <FlowChart :data="demoData" @save-data="handleSave" @add-lf="handleAddlf" /> + <LayoutContent :style="{ overflow: 'initial' }"> + <FlowChart + :data="routeData" + @save-data="handleSave" + @add-lf="handleAddlf" + @select-node="handleSelect" + @click-blank="clickBlank" + @init="init" + /> </LayoutContent> <LayoutSider :class="`right`" collapsible :reverseArrow="true" collapsedWidth="0" - width="450" + width="300" style="background: #fafafa; border-left: 1px solid #d9d9d9; padding: 10px" :zeroWidthTriggerStyle="{ 'margin-top': '-70px', 'background-color': 'gray' }" > - <PropsPanel ref="propsPanel" :activeKey="activeKey"> - <template v-for="item of schemas" #[`${item.component}Props`]="data"> + <PropsPanel ref="propsPanel" :activeKey="routeConfig.activeKey"> + <!-- <template v-for="item of formConfig.schemas" #[`${item.component}Props`]="data"> <slot :name="`${item.component}Props`" v-bind="{ formItem: data, props: data.componentProps }" ></slot> - </template> + </template> --> </PropsPanel> - <!-- <BasicForm - autoFocusFirstItem - :labelWidth="120" - :schemas="schemas" - :actionColOptions="{ span: 24 }" - :submitButtonOptions="{ text: '纭畾' }" - @submit="handleSubmit" - @reset="handleReset" - /> --> </LayoutSider> </Layout> <RouteDrawer @register="registerDrawer" @success="handleSuccess" /> + <RouteModal @register="registerModal" @success="modalSuccess" /> </PageWrapper> </template> <script lang="ts" setup> import { FlowChart } from '/@/components/FlowChart'; import { PageWrapper } from '/@/components/Page'; - import { BasicForm, FormSchema } from '/@/components/Form/index'; - import { getOperAllList } from '/@/api/tigerapi/mes/oper'; - import { SaveRouteData } from '/@/api/tigerapi/mes/router'; - import { ref, unref } from 'vue'; + import { SaveRouteData, getRouteData } from '/@/api/tigerapi/mes/router'; + import { useModal } from '/@/components/Modal'; + import RouteModal from './RouteModal.vue'; + import { onMounted, ref, unref, Ref, provide, reactive, nextTick } from 'vue'; import { Layout, LayoutContent, LayoutSider } from 'ant-design-vue'; import { RouteData, @@ -50,190 +49,49 @@ edge, MES_ROUTE_NODE, MES_ROUTE_EDGE, + MES_ROUTE_NODE_ACT, + MES_ROUTE, } from '/@/api/tigerapi/model/router'; import { useUserStore } from '/@/store/modules/user'; import { buildUUID } from '/@/utils/uuid'; import RouteDrawer from './RouteDrawer.vue'; import { useDrawer } from '/@/components/Drawer'; import PropsPanel from './components/PropsPanel.vue'; + import { IRouteConfig } from './typings/v-form-component'; + import { useMessage } from '/@/hooks/web/useMessage'; + import { useI18n } from '/@/hooks/web/useI18n'; + import { isNullOrEmpty } from '/@/utils/is'; + import { useRoute } from 'vue-router'; + import { useTabs } from '/@/hooks/web/useTabs'; const [registerDrawer, { openDrawer }] = useDrawer(); - const isRute = (type: string) => type === '0'; - const isOper = (type: string) => type === '1'; - const activeKey = ref(1); - const schemas: FormSchema[] = [ - { - field: 'func_type', - label: '灞炴�ч〉', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '宸ヨ壓娴佺▼', value: '0' }, - { label: '宸ュ簭', value: '1' }, - ], - }, - colProps: { lg: 24, md: 24 }, - }, - { - field: 'OPER_CODE', - component: 'ApiSelect', - label: '閫夋嫨宸ュ簭', - componentProps: { - api: getOperAllList, - // params: { - // id: 1, - // }, - resultField: 'items', - labelField: 'OPER_NAME', - valueField: 'OPER_CODE', - // not request untill to select - immediate: false, - onChange: (e) => { - console.log('selected:', e); - }, - // atfer request callback - onOptionsChange: (options) => { - console.log('get options', options.length, options); - }, - }, - ifShow: ({ values }) => isOper(values.func_type), - }, - { - field: 'field2', - component: 'Input', - label: '宸ュ簭绫诲瀷', - // componentProps:{}, - // can func - componentProps: ({ schema, formModel }) => { - console.log('form:', schema); - console.log('formModel:', formModel); - return { - placeholder: '娴嬭瘯', - onChange: (e: any) => { - console.log(e); - }, - }; - }, - renderComponentContent: () => { - return { - prefix: () => '宸ュ簭', - suffix: () => '绫诲瀷', - }; - }, - ifShow: ({ values }) => isOper(values.func_type), - }, - { - field: 'field3', - component: 'Select', - label: '宸ュ簭琛屼负', - componentProps: { - options: [ - { - label: '瀛樺偍杩囩▼', - value: '1', - key: '1', - }, - { - label: '鏉$爜瑙勫垯', - value: '2', - key: '2', - }, - { - label: '琛屼负涓�', - value: '3', - key: '3', - }, - { - label: '琛屼负浜�', - value: '4', - key: '4', - }, - { - label: '琛屼负涓�', - value: '5', - key: '5', - }, - ], - }, - ifShow: ({ values }) => isOper(values.func_type), - }, - { - field: 'field4', - component: 'Switch', - label: '鏄惁璁$畻鐩撮�氱巼', - colProps: { - span: 16, - }, - labelWidth: 200, - ifShow: ({ values }) => isOper(values.func_type), - }, - { - field: 'field5', - component: 'Switch', - label: '鏄惁鍙烦绔�', - colProps: { - span: 16, - }, - labelWidth: 200, - ifShow: ({ values }) => isOper(values.func_type), - }, - { - field: 'ROT_CODE', - label: '宸ヨ壓璺嚎缂栫爜', - required: true, - component: 'Input', - colProps: { span: 16 }, - ifShow: ({ values }) => isRute(values.func_type), - }, - { - field: 'ROT_NAME', - label: '宸ヨ壓璺嚎鍚嶇О', - required: true, - component: 'Input', - colProps: { span: 16 }, - ifShow: ({ values }) => isRute(values.func_type), - }, - { - field: 'ROT_TYPE', - label: '宸ヨ壓璺嚎绫诲瀷', - required: true, - component: 'Input', - colProps: { span: 16 }, - ifShow: ({ values }) => isRute(values.func_type), - }, - { - field: 'ROT_VER', - label: '宸ヨ壓璺嚎鐗堟湰', - required: true, - component: 'Input', - colProps: { span: 16 }, - ifShow: ({ values }) => isRute(values.func_type), - }, - { - field: 'IS_ACTIVE', - label: '鏄惁鍚敤', - required: true, - component: 'Select', - colProps: { span: 16 }, - componentProps: { - options: [ - { - label: '鏄�', - value: 'Y', - key: 'Y', - }, - { - label: '鍚�', - value: 'N', - key: 'N', - }, - ], - }, - ifShow: ({ values }) => isRute(values.func_type), - }, - ]; - const demoData = ref({}); + const [registerModal, { openModal }] = useModal(); + const { t } = useI18n(); + const route = useRoute(); + const { setTitle } = useTabs(); + const { notification, createErrorModal } = useMessage(); + const routeConfig = reactive({ + // 琛ㄥ崟閰嶇疆 + schemas: [], + layout: 'horizontal', + labelLayout: 'flex', + labelWidth: 100, + labelCol: {}, + wrapperCol: {}, + currentItem: {} as MES_ROUTE_NODE, + activeKey: 1, + } as IRouteConfig); + const currRoute = ref({} as MES_ROUTE); + const routeData = ref({ + nodes: [], + edges: [], + }); + provide<Ref<IRouteConfig>>('routeConfig', routeConfig); + provide<Ref<MES_ROUTE>>('mesRoute', currRoute); + const selectnode = ref({} as node); + const currRotId = ref(route.params?.id); + + console.log(currRotId.value); // const demoData1 = ref({ // nodes: [ // { @@ -353,94 +211,239 @@ // }, // ], // }); - function handleReset() {} - function handleSubmit(_values: any) { - try { - } catch {} + + if (!isNullOrEmpty(currRotId.value)) { + setTitle('璁捐锛氬伐鑹鸿矾绾�' + currRotId.value); + } + + async function init(lf) { + //閫氳繃宸ヨ壓璺嚎ID鑾峰彇鍥惧舰鏁版嵁锛屽苟娓叉煋 + var _data = await getRouteData(currRotId.value); + console.log('缁勪欢宸叉寕杞�', _data); + currRoute.value = _data.Data.route; + _data.Data.nodes.forEach((n) => { + n.node.properties = JSON.parse(n.node.properties); + routeData.value.nodes.push(n.node); + }); + console.log('111', routeData.value); + _data.Data.edges.forEach((e) => { + e.edge.properties = JSON.parse(e.edge.properties); + routeData.value.edges.push(e.edge); + }); + _data.Data.acts.forEach((act) => { + act.node.properties = JSON.parse(act.node.properties); + routeData.value.nodes.push(act.node); + }); + console.log('init', unref(lf).getGraphData(), JSON.parse(JSON.stringify(routeData.value))); + unref(lf).render(routeData.value); } async function handleSave(lf) { console.log('handleSave', unref(lf).getGraphData().nodes[0]); - var _routeData: RouteData = { - route: { - ID: buildUUID(), - CREATE_TIME: new Date(), - CREATE_USER: useUserStore().getUserInfo.userId as string, - UPDATE_TIME: new Date(), - UPDATE_USER: useUserStore().getUserInfo.userId as string, - GHOST_ROW: false, - ROT_CODE: 'R001', - ROT_NAME: 'R001', - ROT_TYPE: '', - ROT_VER: '01', - IS_ACTIVE: 'Y', - REMARK: 'R001', - }, - nodes: [], - edges: [], - }; - var _nodes = unref(lf).getGraphData().nodes as node[]; - var _edges = unref(lf).getGraphData().edges as edge[]; - _nodes.forEach((n) => { - var node: MES_ROUTE_NODE = { - ID: '', - CREATE_TIME: _routeData.route.CREATE_TIME, - CREATE_USER: useUserStore().getUserInfo.userId as string, - UPDATE_TIME: _routeData.route.UPDATE_TIME, - UPDATE_USER: useUserStore().getUserInfo.userId as string, - GHOST_ROW: false, - NODE_CODE: 'N001', - NODE_NAME: 'N001', - ROT_CODE: _routeData.route.ROT_CODE, - SEGMENT: '', - OPER_CODE: '', - GPH_TYPE: n.type, - GPH_X: n.x, - GPH_Y: n.y, - GPH_PROP: '', - GPH_TEXT: n.text.value, - IS_ACTIVE: 'Y', - IS_CALC_FPY: 'N', - CAN_SKIP: 'N', - REMARK: '', + if (isNullOrEmpty(currRoute.value.ROT_CODE)) { + createErrorModal({ + title: t('鏈�夋嫨'), + content: t('鏈�夋嫨宸ヨ壓璺嚎鎴栬�呮柊澧炲伐鑹鸿矾绾�'), + getContainer: () => document.body, + }); + } else { + var _routeData: RouteData = { + route: { + ID: currRoute.value.ID, + CREATE_TIME: new Date(), + CREATE_USER: useUserStore().getUserInfo.userId as string, + UPDATE_TIME: new Date(), + UPDATE_USER: useUserStore().getUserInfo.userId as string, + GHOST_ROW: false, + ROT_CODE: currRoute.value.ROT_CODE, + ROT_NAME: currRoute.value.ROT_NAME, + ROT_TYPE: currRoute.value.ROT_TYPE, + ROT_VER: currRoute.value.ROT_VER, + IS_ACTIVE: currRoute.value.IS_ACTIVE, + REMARK: currRoute.value.REMARK, + AUTH_ORG: '', + AUTH_PROD: '', + AUTH_WH: '', + }, + nodes: [], + edges: [], + acts: [], }; - _routeData.nodes.push(node); - }); - _edges.forEach((e) => { - var edge: MES_ROUTE_EDGE = { - ID: '', - CREATE_TIME: _routeData.route.CREATE_TIME, - CREATE_USER: useUserStore().getUserInfo.userId as string, - UPDATE_TIME: _routeData.route.UPDATE_TIME, - UPDATE_USER: useUserStore().getUserInfo.userId as string, - GHOST_ROW: false, - EDGE_CODE: 'E001', - EDGE_NAME: 'E001', - ROT_CODE: _routeData.route.ROT_CODE, - SRC_NODE: e.sourceNodeId, - TGT_NODE: e.targetNodeId, - GPH_TYPE: e.type, - GPH_SRC_X: e.startPoint.x, - GPH_SRC_Y: e.startPoint.y, - GPH_TGT_X: e.endPoint.x, - GPH_TGT_Y: e.endPoint.y, - GPH_PROP: '', - GPH_POTS: JSON.stringify(e.pointsList), - REMARK: '', - }; - _routeData.edges.push(edge); - }); - await SaveRouteData(_routeData); + var _nodes = unref(lf).getGraphData().nodes as node[]; + var _edges = unref(lf).getGraphData().edges as edge[]; + var _num = 1; + _nodes.forEach((n) => { + if (n.properties.operType && n.properties.operType == 'Action') { + var act: MES_ROUTE_NODE_ACT = { + ID: n.id, + CREATE_TIME: _routeData.route.CREATE_TIME, + CREATE_USER: useUserStore().getUserInfo.userId as string, + UPDATE_TIME: _routeData.route.UPDATE_TIME, + UPDATE_USER: useUserStore().getUserInfo.userId as string, + GHOST_ROW: false, + ROT_ID: _routeData.route.ID, + GPH_TYPE: n.type, + GPH_X: n.x, + GPH_Y: n.y, + GPH_PROP: JSON.stringify(n.properties), + GPH_TEXT: n.text.value, + REMARK: '', + AUTH_ORG: '', + AUTH_PROD: '', + AUTH_WH: '', + OPTION_1: '', + OPTION_2: '', + OPTION_3: '', + OPTION_4: '', + OPTION_5: '', + ACT_NAME: `${_routeData.route.ROT_CODE}_${n.text.value}_${_num}`, + NODE_ID: '', + ACT_TYPE: 0, + DO_TYPE: 0, + DO_METHOD: '', + DO_IF_PASS: '', + DO_IF_FAIL: '', + RULE_CODE: '', + ITEM_CODE: '', + PROD_CODE: '', + TEST_CODE: '', + SAPL_CODE: '', + LABEL_CODE: '', + }; + var pnode = [n]; + while (pnode[0].properties.operType == 'Action') { + pnode = unref(lf).getNodeIncomingNode(pnode[0].id); + if (pnode[0].properties.operType != 'Action') { + act.NODE_ID = pnode[0].id; + break; + } + } + _routeData.acts.push(act); + } else { + var node: MES_ROUTE_NODE = { + ID: n.id, + CREATE_TIME: _routeData.route.CREATE_TIME, + CREATE_USER: useUserStore().getUserInfo.userId as string, + UPDATE_TIME: _routeData.route.UPDATE_TIME, + UPDATE_USER: useUserStore().getUserInfo.userId as string, + GHOST_ROW: false, + NODE_NAME: `${_routeData.route.ROT_CODE}_${n.text.value}_${_num}`, + ROT_ID: _routeData.route.ID, + SEGMENT: '', + OPER_CODE: '', + GPH_TYPE: n.type, + GPH_X: n.x, + GPH_Y: n.y, + GPH_PROP: JSON.stringify(n.properties), + GPH_TEXT: n.text.value, + IS_ACTIVE: 'Y', + IS_CALC_FPY: 'N', + CAN_SKIP: 'N', + REMARK: '', + AUTH_ORG: '', + AUTH_PROD: '', + AUTH_WH: '', + IS_FIRST_NODE: 'N', + IS_INPUT: '', + IS_OUTPUT: '', + OPTION_1: '', + OPTION_2: '', + OPTION_3: '', + OPTION_4: '', + OPTION_5: '', + }; + if (unref(lf).getNodeIncomingNode(n.id).length == 0) { + node.IS_FIRST_NODE = 'Y'; + } + _routeData.nodes.push(node); + } + _num++; + }); + _edges.forEach((e) => { + var edge: MES_ROUTE_EDGE = { + ID: e.id, + CREATE_TIME: _routeData.route.CREATE_TIME, + CREATE_USER: useUserStore().getUserInfo.userId as string, + UPDATE_TIME: _routeData.route.UPDATE_TIME, + UPDATE_USER: useUserStore().getUserInfo.userId as string, + GHOST_ROW: false, + EDGE_NAME: `${_routeData.route.ROT_CODE}_${e.id}`, + ROT_ID: _routeData.route.ID, + SRC_NODE: e.sourceNodeId, + TGT_NODE: e.targetNodeId, + GPH_TYPE: e.type, + GPH_SRC_X: e.startPoint.x, + GPH_SRC_Y: e.startPoint.y, + GPH_TGT_X: e.endPoint.x, + GPH_TGT_Y: e.endPoint.y, + GPH_PROP: JSON.stringify(e.properties), + GPH_POTS: JSON.stringify(e.pointsList), + REMARK: '', + AUTH_ORG: '', + AUTH_PROD: '', + AUTH_WH: '', + EDGE_TYPE: 0, + OPTION_1: '', + OPTION_2: '', + OPTION_3: '', + OPTION_4: '', + OPTION_5: '', + }; + _routeData.edges.push(edge); + }); + await SaveRouteData(_routeData); + } } async function handleAddlf(lf) { - openDrawer(true, { + // openDrawer(true, { + // isUpdate: false, + // lf: lf, + // }); + openModal(true, { isUpdate: false, lf: lf, }); } + function handleSelect(data) { + selectnode.value = data.data; + routeConfig.currentItem = { + ID: selectnode.value.id, + CREATE_TIME: currRoute.value.CREATE_TIME, + CREATE_USER: useUserStore().getUserInfo.userId as string, + UPDATE_TIME: currRoute.value.UPDATE_TIME, + UPDATE_USER: useUserStore().getUserInfo.userId as string, + GHOST_ROW: false, + NODE_NAME: 'N001', + ROT_ID: currRoute.value.ID, + SEGMENT: '', + OPER_CODE: '', + GPH_TYPE: selectnode.value.type, + GPH_X: selectnode.value.x, + GPH_Y: selectnode.value.y, + GPH_PROP: '', + GPH_TEXT: selectnode.value.text.value, + IS_ACTIVE: 'Y', + IS_CALC_FPY: 'N', + CAN_SKIP: 'N', + REMARK: '', + }; + console.log(routeConfig.currentItem); + routeConfig.activeKey = 2; + } + function handleSuccess(lfInstance) { unref(lfInstance).render({}); } + + function clickBlank() { + routeConfig.activeKey = 1; + } + + async function modalSuccess(lfInstance, route) { + unref(lfInstance).render({}); + currRoute.value = route; + currRotId.value = currRoute.value.ID; + } </script> -- Gitblit v1.9.3