Showing
5 changed files
with
165 additions
and
2 deletions
| ... | @@ -302,6 +302,12 @@ | ... | @@ -302,6 +302,12 @@ |
| 302 | <span style="font-size: 12px; transform: scale(0.8); margin-top: 2px;">复制</span> | 302 | <span style="font-size: 12px; transform: scale(0.8); margin-top: 2px;">复制</span> |
| 303 | </div> | 303 | </div> |
| 304 | </el-tooltip> | 304 | </el-tooltip> |
| 305 | + <el-tooltip content="节点排序"> | ||
| 306 | + <div class="vue-flow-editor-toolbar-item" @click="sortData"> | ||
| 307 | + <i class="el-icon-sort" style=" margin-top: 4px;" /> | ||
| 308 | + <span style="font-size: 12px; transform: scale(0.8); margin-top: 2px;">排序</span> | ||
| 309 | + </div> | ||
| 310 | + </el-tooltip> | ||
| 305 | <!-- <el-tooltip content="保存流程图数据"> | 311 | <!-- <el-tooltip content="保存流程图数据"> |
| 306 | <div class="vue-flow-editor-toolbar-item" @click="saveData"> | 312 | <div class="vue-flow-editor-toolbar-item" @click="saveData"> |
| 307 | <i class="el-icon-coin" style=" margin-top: 4px;" /> | 313 | <i class="el-icon-coin" style=" margin-top: 4px;" /> |
| ... | @@ -440,6 +446,34 @@ | ... | @@ -440,6 +446,34 @@ |
| 440 | @close="onCloseUserView" | 446 | @close="onCloseUserView" |
| 441 | @confirm="onConfirmUserView" | 447 | @confirm="onConfirmUserView" |
| 442 | /> | 448 | /> |
| 449 | + | ||
| 450 | + <el-dialog v-model="state.dialogSortVisible" title="节点排序" width="30%" center> | ||
| 451 | + <draggable | ||
| 452 | + v-model="state.sortNodes" | ||
| 453 | + tag="transition-group" | ||
| 454 | + item-key="id" | ||
| 455 | + style="overflow: scroll;" | ||
| 456 | + :component-data="{name:'fade'}" | ||
| 457 | + > | ||
| 458 | + <template #item="{ element, index }"> | ||
| 459 | + <div :class="['sort-item', state.sortNodes.length - 1 !== index ? 'sort-item-border' : '' ]"> | ||
| 460 | + <div> | ||
| 461 | + <i class="el-icon-d-caret"></i> | ||
| 462 | + | ||
| 463 | + {{ element.name }} | ||
| 464 | + | ||
| 465 | + <span class="sort-item-index">索引:{{element.idx}}</span> | ||
| 466 | + </div> | ||
| 467 | + </div> | ||
| 468 | + </template> | ||
| 469 | + </draggable> | ||
| 470 | + <template #footer> | ||
| 471 | + <span class="dialog-footer"> | ||
| 472 | + <el-button @click="state.dialogSortVisible = false">取消</el-button> | ||
| 473 | + <el-button color="#009688" @click="confirmSort">确认</el-button> | ||
| 474 | + </span> | ||
| 475 | + </template> | ||
| 476 | + </el-dialog> | ||
| 443 | </template> | 477 | </template> |
| 444 | 478 | ||
| 445 | <script lang="ts"> | 479 | <script lang="ts"> |
| ... | @@ -459,7 +493,8 @@ import type { FormInstance, FormRules } from 'element-plus' | ... | @@ -459,7 +493,8 @@ import type { FormInstance, FormRules } from 'element-plus' |
| 459 | import qs from 'qs' | 493 | import qs from 'qs' |
| 460 | import { after } from 'lodash-es'; | 494 | import { after } from 'lodash-es'; |
| 461 | // import { VueSpinner } from 'vue3-spinners'; | 495 | // import { VueSpinner } from 'vue3-spinners'; |
| 462 | -import { flowVersionAPI, saveFlowAPI, flowNodesAPI, enableFlowVersionAPI, flowNodePropertyAPI, checkAllFlowNodePropertyAPI, saveAllFlowNodePropertyAPI } from "./api"; | 496 | +import { flowVersionAPI, saveFlowAPI, flowNodesAPI, enableFlowVersionAPI, flowNodePropertyAPI, checkAllFlowNodePropertyAPI, saveAllFlowNodePropertyAPI, saveNodeSortAPI } from "./api"; |
| 497 | +import draggable from 'vuedraggable' | ||
| 463 | 498 | ||
| 464 | const G6 = (window as any).G6.default as any | 499 | const G6 = (window as any).G6.default as any |
| 465 | 500 | ||
| ... | @@ -499,6 +534,7 @@ export default { | ... | @@ -499,6 +534,7 @@ export default { |
| 499 | Calendar, | 534 | Calendar, |
| 500 | Search, | 535 | Search, |
| 501 | SelectUserView, | 536 | SelectUserView, |
| 537 | + draggable, | ||
| 502 | // VueSpinner, | 538 | // VueSpinner, |
| 503 | }, | 539 | }, |
| 504 | setup(props, context) { | 540 | setup(props, context) { |
| ... | @@ -565,7 +601,9 @@ export default { | ... | @@ -565,7 +601,9 @@ export default { |
| 565 | }, | 601 | }, |
| 566 | }, | 602 | }, |
| 567 | search_auth_value: '', | 603 | search_auth_value: '', |
| 604 | + dialogSortVisible: false, | ||
| 568 | dialogUserFormVisible: false, | 605 | dialogUserFormVisible: false, |
| 606 | + sortNodes: [], | ||
| 569 | dialogUserTags: [], // 同步到用户列表的数据 | 607 | dialogUserTags: [], // 同步到用户列表的数据 |
| 570 | activeName: 'node', | 608 | activeName: 'node', |
| 571 | attr_radio: '基础属性', | 609 | attr_radio: '基础属性', |
| ... | @@ -1927,6 +1965,49 @@ export default { | ... | @@ -1927,6 +1965,49 @@ export default { |
| 1927 | const model = e.item.get('model') | 1965 | const model = e.item.get('model') |
| 1928 | } | 1966 | } |
| 1929 | 1967 | ||
| 1968 | + /** | ||
| 1969 | + * 排序节点 | ||
| 1970 | + * | ||
| 1971 | + */ | ||
| 1972 | + const sortData = () => { | ||
| 1973 | + state.sortNodes = []; | ||
| 1974 | + let { nodes } = editor.editorState.graph.save(); | ||
| 1975 | + // console.warn(nodes); | ||
| 1976 | + // let data = [ | ||
| 1977 | + // '1f6b88b0-b864-47bc-8903-c72e5014ac75', | ||
| 1978 | + // '5e22f525-1d02-4456-8d3e-0d088f99f9d6', | ||
| 1979 | + // 'end-node', | ||
| 1980 | + // 'start-node', | ||
| 1981 | + // ]; | ||
| 1982 | + // let node_data = _.map(data, (n) => { return { id: n } }); | ||
| 1983 | + | ||
| 1984 | + // let node_arr = _.intersectionBy(node_data, nodes, 'id'); | ||
| 1985 | + // let new_node_arr = _.differenceBy(node_data, nodes, 'id'); | ||
| 1986 | + // console.warn(node_arr); | ||
| 1987 | + // console.warn(new_node_arr); | ||
| 1988 | + | ||
| 1989 | + if (nodes.length > 0) { | ||
| 1990 | + nodes.forEach((element, idx) => { | ||
| 1991 | + state.sortNodes.push({ | ||
| 1992 | + idx, | ||
| 1993 | + id: element.id, | ||
| 1994 | + name: element.text, | ||
| 1995 | + }) | ||
| 1996 | + }); | ||
| 1997 | + } | ||
| 1998 | + state.dialogSortVisible = true; | ||
| 1999 | + } | ||
| 2000 | + | ||
| 2001 | + const confirmSort = async () => { | ||
| 2002 | + state.dialogSortVisible = false; | ||
| 2003 | + | ||
| 2004 | + let arr = _.map(state.sortNodes, 'id'); | ||
| 2005 | + const { code, data } = await saveNodeSortAPI({ id: getFlowId(), data: JSON.stringify(arr) }) | ||
| 2006 | + if (code) { | ||
| 2007 | + ElNotification.success('保存成功') | ||
| 2008 | + } | ||
| 2009 | + } | ||
| 2010 | + | ||
| 1930 | const copyData = () => { // 复制节点回调 | 2011 | const copyData = () => { // 复制节点回调 |
| 1931 | if (state.detailModel.control !== 'start' && state.detailModel.control !== 'end') { | 2012 | if (state.detailModel.control !== 'start' && state.detailModel.control !== 'end') { |
| 1932 | let copy_node = _.cloneDeep(state.node_tree[state.detailModel.id]); // 复制节点的属性 | 2013 | let copy_node = _.cloneDeep(state.node_tree[state.detailModel.id]); // 复制节点的属性 |
| ... | @@ -2129,6 +2210,8 @@ export default { | ... | @@ -2129,6 +2210,8 @@ export default { |
| 2129 | onCloseUserView, | 2210 | onCloseUserView, |
| 2130 | onConfirmUserView, | 2211 | onConfirmUserView, |
| 2131 | 2212 | ||
| 2213 | + sortData, | ||
| 2214 | + confirmSort, | ||
| 2132 | copyData, | 2215 | copyData, |
| 2133 | saveData, | 2216 | saveData, |
| 2134 | startFlow, | 2217 | startFlow, |
| ... | @@ -2391,4 +2474,16 @@ body { | ... | @@ -2391,4 +2474,16 @@ body { |
| 2391 | .el-tabs__item:hover { | 2474 | .el-tabs__item:hover { |
| 2392 | color: #009688 !important; | 2475 | color: #009688 !important; |
| 2393 | } | 2476 | } |
| 2477 | + | ||
| 2478 | +.sort-item { | ||
| 2479 | + padding: 1rem; border: 1px solid #ebeef5; cursor: move; | ||
| 2480 | + background-color: #fff; | ||
| 2481 | + .sort-item-index { | ||
| 2482 | + background-color: #f5f6f8; padding: 2px 5px; border: 1px solid #d7d9dc; border-radius: 3px; color: #141e31; font-size: 12px; font-weight: 400; line-height: 22px; text-align: center; | ||
| 2483 | + } | ||
| 2484 | +} | ||
| 2485 | +.sort-item-border { | ||
| 2486 | + border-bottom: 0 !important; | ||
| 2487 | +} | ||
| 2488 | + | ||
| 2394 | </style> | 2489 | </style> | ... | ... |
| 1 | /* | 1 | /* |
| 2 | * @Date: 2023-11-30 10:34:01 | 2 | * @Date: 2023-11-30 10:34:01 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2023-12-08 13:11:15 | 4 | + * @LastEditTime: 2023-12-14 15:43:53 |
| 5 | * @FilePath: /vue-flow-editor/doc/api/index.js | 5 | * @FilePath: /vue-flow-editor/doc/api/index.js |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | */ | 7 | */ |
| ... | @@ -16,6 +16,7 @@ const Api = { | ... | @@ -16,6 +16,7 @@ const Api = { |
| 16 | SAVE_FLOW_NODE_PROPERTY: '/admin/?a=save_node_property', | 16 | SAVE_FLOW_NODE_PROPERTY: '/admin/?a=save_node_property', |
| 17 | SAVE_ALL_FLOW_NODE_PROPERTY: '/admin/?a=save_all_node_property', | 17 | SAVE_ALL_FLOW_NODE_PROPERTY: '/admin/?a=save_all_node_property', |
| 18 | CHECK_ALL_FLOW_NODE_PROPERTY: '/admin/?a=check_all_node_property', | 18 | CHECK_ALL_FLOW_NODE_PROPERTY: '/admin/?a=check_all_node_property', |
| 19 | + SAVE_NODE_SORT: '/admin/?a=save_node_sort', | ||
| 19 | } | 20 | } |
| 20 | 21 | ||
| 21 | /** | 22 | /** |
| ... | @@ -81,3 +82,10 @@ export const saveAllFlowNodePropertyAPI = (params) => fn(fetch.stringifyPost(Api | ... | @@ -81,3 +82,10 @@ export const saveAllFlowNodePropertyAPI = (params) => fn(fetch.stringifyPost(Api |
| 81 | * @returns | 82 | * @returns |
| 82 | */ | 83 | */ |
| 83 | export const checkAllFlowNodePropertyAPI = (params) => fn(fetch.get(Api.CHECK_ALL_FLOW_NODE_PROPERTY, params)); | 84 | export const checkAllFlowNodePropertyAPI = (params) => fn(fetch.get(Api.CHECK_ALL_FLOW_NODE_PROPERTY, params)); |
| 85 | + | ||
| 86 | +/** | ||
| 87 | + * @description: 保存节点排序 | ||
| 88 | + * @param {*} id 流程 ID | ||
| 89 | + * @returns | ||
| 90 | + */ | ||
| 91 | +export const saveNodeSortAPI = (params) => fn(fetch.stringifyPost(Api.SAVE_NODE_SORT, params)); | ... | ... |
| ... | @@ -38,6 +38,7 @@ | ... | @@ -38,6 +38,7 @@ |
| 38 | "vue-router": "^4.0.0-0", | 38 | "vue-router": "^4.0.0-0", |
| 39 | "vue-template-compiler": "^2.6.14", | 39 | "vue-template-compiler": "^2.6.14", |
| 40 | "vue3-spinners": "^1.2.2", | 40 | "vue3-spinners": "^1.2.2", |
| 41 | + "vuedraggable": "^4.1.0", | ||
| 41 | "vuex": "^4.0.0-0" | 42 | "vuex": "^4.0.0-0" |
| 42 | }, | 43 | }, |
| 43 | "devDependencies": { | 44 | "devDependencies": { | ... | ... |
publish_dev.sh
0 → 100644
| 1 | +#!/usr/bin/env sh | ||
| 2 | +# ----------------------------------------------- | ||
| 3 | +# Filename: publish.sh | ||
| 4 | +# Revision: 1.0 | ||
| 5 | +# Date: 2022年5月20日 | ||
| 6 | +# Author: Hooke | ||
| 7 | +# Description: **** 根据php项目相应特征书写项目发布流程 | ||
| 8 | +# ----------------------------------------------- | ||
| 9 | + | ||
| 10 | +# 当发生错误时中止脚本 | ||
| 11 | +set -e | ||
| 12 | + | ||
| 13 | +# 本地Git服务器目录路径 | ||
| 14 | +PHP_PATH=/Users/huyirui/program/itomix/git/isp/f/custom_form | ||
| 15 | + | ||
| 16 | +# 编译输出文件夹 | ||
| 17 | +OUTPUT=front | ||
| 18 | + | ||
| 19 | +# 打包 | ||
| 20 | +npm run build | ||
| 21 | + | ||
| 22 | +# 移除Git服务器目录下项目文件夹 | ||
| 23 | +rm -r $PHP_PATH"/${OUTPUT:?}" | ||
| 24 | + | ||
| 25 | +# 把本地编译输出文件夹添加到服务器目录 | ||
| 26 | +mv "${OUTPUT:?}/" $PHP_PATH | ||
| 27 | + | ||
| 28 | +# 提交到Git服务器 | ||
| 29 | +cd $PHP_PATH"/${OUTPUT:?}" | ||
| 30 | +git checkout custom_form | ||
| 31 | +git pull | ||
| 32 | +git add -A | ||
| 33 | +git commit -m '自定义表单-前端网页更新' | ||
| 34 | +git push | ||
| 35 | + | ||
| 36 | +git checkout develop; | ||
| 37 | +git pull origin develop; | ||
| 38 | +git merge --no-edit custom_form; | ||
| 39 | +git push origin develop; | ||
| 40 | + | ||
| 41 | +# 更新SSH服务器上文件 | ||
| 42 | +ssh -p 22 itomix@ipadbiz.cn ' | ||
| 43 | + cd /opt/space-dev/; | ||
| 44 | + git pull origin develop; | ||
| 45 | +' | ||
| 46 | + | ||
| 47 | +git checkout custom_form; |
| ... | @@ -7868,6 +7868,11 @@ sort-keys@^1.0.0: | ... | @@ -7868,6 +7868,11 @@ sort-keys@^1.0.0: |
| 7868 | dependencies: | 7868 | dependencies: |
| 7869 | is-plain-obj "^1.0.0" | 7869 | is-plain-obj "^1.0.0" |
| 7870 | 7870 | ||
| 7871 | +sortablejs@1.14.0: | ||
| 7872 | + version "1.14.0" | ||
| 7873 | + resolved "https://mirrors.cloud.tencent.com/npm/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" | ||
| 7874 | + integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== | ||
| 7875 | + | ||
| 7871 | source-list-map@^2.0.0: | 7876 | source-list-map@^2.0.0: |
| 7872 | version "2.0.1" | 7877 | version "2.0.1" |
| 7873 | resolved "https://registry.nlark.com/source-list-map/download/source-list-map-2.0.1.tgz" | 7878 | resolved "https://registry.nlark.com/source-list-map/download/source-list-map-2.0.1.tgz" |
| ... | @@ -8840,6 +8845,13 @@ vue@^3.0.0: | ... | @@ -8840,6 +8845,13 @@ vue@^3.0.0: |
| 8840 | "@vue/runtime-dom" "3.2.2" | 8845 | "@vue/runtime-dom" "3.2.2" |
| 8841 | "@vue/shared" "3.2.2" | 8846 | "@vue/shared" "3.2.2" |
| 8842 | 8847 | ||
| 8848 | +vuedraggable@^4.1.0: | ||
| 8849 | + version "4.1.0" | ||
| 8850 | + resolved "https://mirrors.cloud.tencent.com/npm/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270" | ||
| 8851 | + integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww== | ||
| 8852 | + dependencies: | ||
| 8853 | + sortablejs "1.14.0" | ||
| 8854 | + | ||
| 8843 | vuex@^4.0.0-0: | 8855 | vuex@^4.0.0-0: |
| 8844 | version "4.0.2" | 8856 | version "4.0.2" |
| 8845 | resolved "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvuex%2Fdownload%2Fvuex-4.0.2.tgz" | 8857 | resolved "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvuex%2Fdownload%2Fvuex-4.0.2.tgz" | ... | ... |
-
Please register or login to post a comment