Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Hooke
/
vue-flow-editor
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
hookehuyr
2023-10-31 09:46:15 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e8439667d4dcc3a21639c5eee85004fe3865addc
e8439667
1 parent
29c115e4
新增成员列表功能
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
533 additions
and
48 deletions
build/docs.js
doc/App.vue
doc/axios.js
doc/main.ts
package.json
yarn.lock
build/docs.js
View file @
e843966
/*
* @Date: 2021-08-18 12:47:05
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2023-10-2
6 10:10:07
* @FilePath: /vue-flow-editor
-for-vue3.0-master
/build/docs.js
* @LastEditTime: 2023-10-2
7 11:05:12
* @FilePath: /vue-flow-editor/build/docs.js
* @Description: 文件描述
*/
const
$utils
=
require
(
'./build.utils'
)
...
...
@@ -10,9 +10,6 @@ const $utils = require('./build.utils')
module
.
exports
=
{
publicPath
:
'./'
,
outputDir
:
'docs'
,
devServer
:
{
port
:
'4488'
},
pages
:
{
index
:
{
entry
:
$utils
.
resolve
(
'doc/main.ts'
),
...
...
@@ -33,4 +30,33 @@ module.exports = {
]
}
},
devServer
:
{
open
:
true
,
// open: process.platform === 'darwin',
host
:
'0.0.0.0'
,
port
:
4418
,
https
:
false
,
hotOnly
:
false
,
compress
:
true
,
// 设置代理
proxy
:
{
'/srv/'
:
{
// filter: ['/op/', '/fi/', '/de/', '/st/', '/fr/', '/pr/', '/pu/', '/dl/', '/b/', '/t/', '/rpt/', '/mm/', '/mp/'],
target
:
'https://oa.onwall.cn'
,
changeOrigin
:
true
,
// pathRewrite: {
// '^/api': ''
// },
onProxyReq
:
function
(
proxyReq
,
req
,
res
,
options
)
{
proxyReq
.
setHeader
(
'X-Proxy-Host'
,
req
.
header
(
'host'
));
proxyReq
.
setHeader
(
'X-Proxy-Request-URI'
,
req
.
url
);
}
}
},
before
:
app
=>
{},
overlay
:
{
warnings
:
false
,
errors
:
true
}
},
}
...
...
doc/App.vue
View file @
e843966
...
...
@@ -2,6 +2,7 @@
<div class="app" style="height: 100vh">
<vue-flow-editor
ref="editor"
modelWidth="30%"
:data="state.data"
:grid="showGrid"
:miniMap="showMiniMap"
...
...
@@ -50,17 +51,49 @@
v-if="!!state.detailModel"
ref="form"
:model="state.detailModel"
label-position="top"
label-width="100px"
>
<template v-if="state.detailModel.activity === undefined">
<el-form-item label="节点名称" prop="label">
<el-input v-model="state.detailModel.label" />
</el-form-item>
<el-form-item label="测试属性" prop="label">
<el-input v-model="state.detailModel.data.test" />
</el-form-item>
<template v-if="state.detailModel.type !== 'edge'">
<el-tabs v-model="state.activeName" class="" @tab-change="handleActiveChange" stretch>
<el-tab-pane label="节点属性" name="node" style="padding: 0 1rem">
<el-form-item prop="label">
<div slot="label">节点名称 <span style="color: red;">*</span></div>
<el-input v-model="state.detailModel.label" />
</el-form-item>
<el-form-item prop="attr">
<el-radio-group v-model="state.attr_radio" size="large" class="attr-radio-group">
<el-radio-button label="基础属性"/>
<el-radio-button label="更多属性" />
</el-radio-group>
</el-form-item>
<el-form-item v-if="state.attr_radio === '基础属性'" prop="">
<div slot="label">字段权限 <span style="color: red;">*</span></div>
<el-row style="width: 100%; background-color: #f0f1f4; padding-left: 10px;">
<el-col :span="12">字段</el-col>
<el-col :span="6">可见</el-col>
<el-col :span="6">可编辑</el-col>
</el-row>
<el-row style="width: 100%; padding-left: 10px;">
<el-col :span="12" style="color: #409eff;">全选</el-col>
<el-col :span="6" style="padding-left: 5px;"><el-checkbox @change="onAuthAllChange" v-model="state.auth_all_checked" label="" size="large" /></el-col>
<el-col :span="6" style="padding-left: 5px;"><el-checkbox @change="onAuthAllEditChange" v-model="state.auth_all_edit" label="" size="large" /></el-col>
</el-row>
<el-row v-for="(field, index) in state.field_auths" :key="index" style="width: 100%; padding-left: 10px;">
<el-col :span="12" style="">{{ field.name }}</el-col>
<el-col :span="6" style="padding-left: 5px;"><el-checkbox v-model="field.visible.checked" :disabled="field.visible.disabled" label="" size="large" /></el-col>
<el-col :span="6" style="padding-left: 5px;"><el-checkbox v-model="field.editable.checked" :disabled="field.editable.disabled" label="" size="large" /></el-col>
</el-row>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="流程属性" name="flow" style="padding: 0 1rem">
<el-form-item prop="label">
<div slot="label">测试属性 <span style="color: red;">*</span></div>
<el-input v-model="state.detailModel.data.test" />
</el-form-item>
</el-tab-pane>
</el-tabs>
<!-- <template v-if="state.detailModel.type !== 'edge'">
<el-form-item label="节点背景色" prop="style.fill">
<el-color-picker v-model="state.detailModel.style.fill" />
</el-form-item>
...
...
@@ -72,7 +105,10 @@
v-model="state.detailModel.labelCfg.style.fill"
/>
</el-form-item>
</template>
</template> -->
<div style="margin-left: 20px;">
<el-button type="primary" @click="state.dialogUserFormVisible = true"> 设置人员配置 </el-button>
</div>
</template>
<template v-else>
<el-form-item label="活动标题">
...
...
@@ -109,13 +145,118 @@
</template>
</vue-flow-editor>
</div>
<el-dialog v-model="state.dialogUserFormVisible" title="成员列表">
<div style="border: 1px dashed #DCDFE6; padding: 10px;">
<el-tag
v-for="tag in state.tags"
:key="tag.name"
class="mx-1"
style="margin-left: 0.25rem; margin-right: 0.25rem;"
closable
:type="tag.type"
>
{{ tag.name }}
</el-tag>
</div>
<div style="border: 1px solid #DCDFE6; padding: 10px; margin-top: 10px;">
<div style="height: 40px">
<div style="padding: 0; position: relative; margin: 0 0 15px;">
<div v-if="!state.is_active_search">
<div class="flow-tabs__nav-wrap">
<div class="flow-tabs__nav-scroll">
<div class="flow-tabs__nav is-top">
<div ref_key="barRef" class="flow-tabs__active-bar" :style="{ width: state.tabTextWidth, transform: 'translateX' + '(' + state.tabOffset + ')' }"></div>
<div
v-for="(item, index) in state.userTabs" :key="index"
:class="['flow-tabs__item', 'is-top', item.id === state.activeTabId ? 'is-active' : '']"
:id="item.id" @click="handleTabClick(item, $event, index)">
{{ item.label }}
</div>
</div>
</div>
</div>
<div class="flow-tab-search" @click="state.is_active_search = !state.is_active_search">
<el-icon :size="15"><Search /></el-icon> 搜索框
</div>
</div>
<div v-else>
<el-input v-model="state.search_input" class="w-50 m-2" placeholder="请输入关键字">
<template #prefix>
<el-icon class="el-input__icon"><search /></el-icon>
</template>
<template #append>
<el-button @click="state.is_active_search = !state.is_active_search">取消</el-button>
</template>
</el-input>
</div>
</div>
</div>
<div v-if="!state.is_active_search">
<div v-if="state.userTabType === 'tree'">
<el-row>
<el-col :span="8">
<el-tree :data="state.tree_data" :props="state.defaultProps" empty-text="暂无数据" @node-click="handleNodeClick" />
</el-col>
<el-col :span="16">
<div style="border-left: 2px solid #e4e7ed; width: 2px; height: 100%; padding-left: 10px;">
<el-checkbox-group class="flow-checkbox-group" v-model="state.checkList">
<el-checkbox label="1">选项 A</el-checkbox>
<el-checkbox label="2">选项 B</el-checkbox>
<el-checkbox label="3">选项 C</el-checkbox>
<el-checkbox label="4" disabled>禁用</el-checkbox>
<el-checkbox label="5" disabled>选中和禁用</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
</el-row>
</div>
<div v-if="state.userTabType === 'list'">
<el-tabs tab-position="left" style="" class="demo-tabs" v-model="activeTabContent" @tab-click="handleTabContentClick">
<el-tab-pane label="流程发起人">
<el-checkbox-group class="flow-checkbox-group" v-model="state.checkList">
<el-checkbox label="1">选项 A</el-checkbox>
<el-checkbox label="2">选项 B</el-checkbox>
<el-checkbox label="3">选项 C</el-checkbox>
<el-checkbox label="4" disabled>禁用</el-checkbox>
<el-checkbox label="5" disabled>选中和禁用</el-checkbox>
</el-checkbox-group>
</el-tab-pane>
<el-tab-pane label="成员字段">成员字段</el-tab-pane>
<el-tab-pane label="部门字段">部门字段</el-tab-pane>
<el-tab-pane label="主管">主管</el-tab-pane>
</el-tabs>
</div>
</div>
<div v-else>
<el-checkbox-group class="flow-checkbox-group" style="padding-left: 10px;" v-model="state.checkList">
<el-checkbox label="1">选项 A</el-checkbox>
<el-checkbox label="2">选项 B</el-checkbox>
<el-checkbox label="3">选项 C</el-checkbox>
<el-checkbox label="4" disabled>禁用</el-checkbox>
<el-checkbox label="5" disabled>选中和禁用</el-checkbox>
</el-checkbox-group>
</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="state.dialogUserFormVisible = false">取消</el-button>
<el-button type="primary" @click="state.dialogUserFormVisible = false">
确定
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts">
import { reactive, onMounted } from "vue";
import { reactive, onMounted
, watch, nextTick
} from "vue";
import { AppData } from "./data.js";
import { staticPath } from "./utils";
import { ElNotification } from 'element-plus'
import axios from './axios';
import $ from 'jquery'
import { Calendar, Search } from '@element-plus/icons-vue'
const G6 = (window as any).G6.default as any;
...
...
@@ -177,33 +318,181 @@ export default {
img: 'https://cdn.ipadbiz.cn/oa/crowd-node.svg',
},
},
dialogUserFormVisible: true,
activeName: "node",
attr_radio: "基础属性",
auth_all_checked: false,
auth_all_edit: false,
field_auths: [{
name: "字段1",
visible: {
checked: true,
disabled: false,
},
editable: {
checked: false,
disabled: true,
}
}, {
name: "字段2",
visible: {
checked: true,
disabled: false,
},
editable: {
checked: false,
disabled: false,
}
}, {
name: "字段3",
visible: {
checked: true,
disabled: false,
},
editable: {
checked: false,
disabled: false,
}
}],
tags: [
{ name: '成员1', id: '1' },
{ name: '成员2', id: '2' },
{ name: '成员3', id: '3' },
{ name: '成员4', id: '4' },
],
activeTabId: 'tab-1', // TODO: 需要获取默认第一个ID
userTabs: [
{ id: 'tab-1', label: '组织架构', type: 'tree' },
{ id: 'tab-2', label: '角色', type: 'list' },
// { id: 'tab-3', label: '成员' },
// { id: 'tab-4', label: '动态负责人' },
// { id: 'tab-5', label: '组织架构' },
// { id: 'tab-6', label: '角色' },
// { id: 'tab-7', label: '成员' },
// { id: 'tab-8', label: '动态负责人' },
// { id: 'tab-9', label: '角色' },
// { id: 'tab-10', label: '成员' },
// { id: 'tab-11', label: '动态负责人' },
],
userTabType: 'tree',
tabOffset: '0px',
tabTextWidth: '76px', // 文字宽度需要打开弹框时重新计算
is_active_search: false,
search_input: '',
checkList: ['1' , '5'],
tree_data: [
{
label: '上级部门 1',
children: [
{
label: '部门名称 1-1',
children: [],
},
],
},
{
label: '上级部门 2',
children: [
{
label: '部门名称 2-1',
children: [],
},
],
},
],
defaultProps: {
children: 'children',
label: 'label',
}
});
function handleActiveChange(name) {
console.warn(name)
}
const onAuthAllChange = (val) => { // 全选可见按钮回调
if (val) {
// 全部选中
state.field_auths.forEach(ele => {
ele.visible.checked = true;
});
} else {
// 全部取消选中
state.field_auths.forEach(ele => {
ele.visible.checked = false;
});
}
}
const onAuthAllEditChange = (val) => { // 全选可编辑按钮回调
console.warn(val);
}
const handleTabClick = (tab, event, idx) => { // 点击Tab切换回调
console.log(tab, event);
// 设置当前激活的tab
state.userTabType = tab.type;
state.activeTabId = tab.id;
// 子容器相对于父容器的相对x轴位移, 第一项为0
if (idx) {
state.tabOffset = $('#'+tab.id).position().left + 20 + 'px';
} else {
state.tabOffset = '0px'
}
// 文字宽度
state.tabTextWidth = $('#'+tab.id).width() + 'px';
}
const handleTabContentClick = (tab, event) => {
console.log(tab);
console.log(event);
}
const handleNodeClick = (data) => {
console.log(data)
}
onMounted(() => {
// 显示提示框的标志位
var showConfirmation = true;
// 监听 beforeunload 事件
window.addEventListener('beforeunload', function (event) {
if (showConfirmation) {
// 取消事件的默认行为(弹出确认对话框)
event.preventDefault();
// Chrome 和 Firefox 需要返回一个值以显示确认对话框
event.returnValue = '';
// 显示自定义的提示信息
var confirmationMessage = '确定要离开此页面吗?';
(event || window.event).returnValue = confirmationMessage; // 兼容旧版浏览器
return confirmationMessage;
}
});
// // 显示提示框的标志位
// var showConfirmation = true;
// // 监听 beforeunload 事件
// window.addEventListener('beforeunload', function (event) {
// if (showConfirmation) {
// // 取消事件的默认行为(弹出确认对话框)
// event.preventDefault();
// // Chrome 和 Firefox 需要返回一个值以显示确认对话框
// event.returnValue = '';
// // 显示自定义的提示信息
// var confirmationMessage = '确定要离开此页面吗?';
// (event || window.event).returnValue = confirmationMessage; // 兼容旧版浏览器
// return confirmationMessage;
// }
// });
// // 监听 unload 事件
// window.addEventListener('unload', function () {
// // 设置标志位为 false,避免在刷新页面时再次显示提示框
// showConfirmation = false;
// });
// axios.get('/srv/?a=query_form_all_field')
// .then(res => {
// console.warn(res.data);
// });
// $('.el-tabs__nav')
});
// 监听 unload 事件
window.addEventListener('unload', function () {
// 设置标志位为 false,避免在刷新页面时再次显示提示框
showConfirmation = false;
});
watch(() => state.dialogUserFormVisible, (val) => {
if (val) {
nextTick(() => {
state.tabTextWidth = $('#'+ state.activeTabId).width() + 'px';
})
}
});
let editor;
...
...
@@ -331,6 +620,12 @@ export default {
handleAfterDelete,
handleBeforeAdd,
handleAfterAdd,
handleActiveChange,
onAuthAllChange,
onAuthAllEditChange,
handleTabClick,
handleTabContentClick,
handleNodeClick,
logData,
...
...
@@ -358,4 +653,82 @@ body {
}
}
}
.attr-radio-group {
width: 100% !important;
.el-radio-button.el-radio-button--large {
width: 50% !important;
span {
width: 100% !important;
}
}
}
.demo-tabs > .el-tabs__content {
/* padding: 32px; */
}
.flow-tabs__nav-wrap {
overflow: hidden;
margin-bottom: -1px;
position: relative;
}
.flow-tabs__nav-wrap::after {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 2px;
background-color: #e4e7ed;
/* z-index: 1; */
}
.flow-tabs__nav-scroll {
/* overflow: hidden; */
overflow: scroll;
}
.flow-tabs__active-bar {
position: absolute; bottom: 0; left: 0; height: 2px; background-color: #409eff; z-index: 1; transition: width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); list-style: none;
}
.flow-tabs__nav {
display: flex; white-space: nowrap; position: relative; transition: transformX(0px); float: left;
.flow-tabs__item {
padding: 0 20px; height: 40px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; list-style: none; font-size: 14px; font-weight: 500; color: #303133; position: relative;
&:hover {
color: #409EFF;
cursor: pointer;
}
&.is-active {
color: #409EFF;
}
&.is-top:nth-child(2) {
padding-left: 0;
}
}
}
.flow-tab-search {
position: absolute;
top: 0;
right: 0; width: 100px;
display: flex;
align-items: center;
background-color: #e4e7ed;
padding: 5px 5px 5px 15px;
border-radius: 15px;
color: #b1b3b8;
&:hover {
cursor: pointer;
}
}
.flow-checkbox-group {
.el-checkbox {
display: flex !important;
}
}
</style>
...
...
doc/axios.js
0 → 100644
View file @
e843966
/*
* @Date: 2023-10-27 11:12:24
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2023-10-27 11:13:00
* @FilePath: /vue-flow-editor/doc/axios.js
* @Description: 文件描述
*/
import
axios
from
'axios'
;
axios
.
defaults
.
params
=
{
f
:
'custom_form'
,
};
/**
* @description 请求拦截器
*/
axios
.
interceptors
.
request
.
use
(
config
=>
{
// const url_params = parseQueryString(location.href);
// GET请求默认打上时间戳,避免从缓存中拿数据。
const
timestamp
=
config
.
method
===
'get'
?
(
new
Date
()).
valueOf
()
:
''
;
/**
* POST PHP需要修改数据格式
* 序列化POST请求时需要屏蔽上传相关接口,上传相关接口序列化后报错
*/
// 绑定默认请求头
config
.
params
=
{
...
config
.
params
,
timestamp
}
return
config
;
},
error
=>
{
// 请求错误处理
return
Promise
.
reject
(
error
);
});
/**
* @description 响应拦截器
*/
axios
.
interceptors
.
response
.
use
(
response
=>
{
return
response
;
},
error
=>
{
return
Promise
.
reject
(
error
);
});
export
default
axios
;
doc/main.ts
View file @
e843966
/*
* @Date: 2021-08-18 12:47:05
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2023-10-
26 10:01:48
* @FilePath: /vue-flow-editor
-for-vue3.0-master
/doc/main.ts
* @LastEditTime: 2023-10-
30 14:36:13
* @FilePath: /vue-flow-editor/doc/main.ts
* @Description: 文件描述
*/
import
{
createApp
,
h
}
from
'vue'
;
...
...
@@ -12,15 +12,19 @@ import App from './App.vue'
import
VueFlowEditor
from
'../src/index'
import
element
from
'element-plus'
import
'element-plus/dist/index.css'
import
*
as
ElementPlusIconsVue
from
'@element-plus/icons-vue'
const
Vue
=
createApp
({
render
:
()
=>
h
(
App
)
});
const
app
=
createApp
(
App
);
for
(
const
[
key
,
component
]
of
Object
.
entries
(
ElementPlusIconsVue
))
{
app
.
component
(
key
,
component
)
}
Vue
.
use
(
VueFlowEditor
)
// 屏蔽警告信息
app
.
config
.
warnHandler
=
()
=>
null
;
app
.
use
(
VueFlowEditor
).
use
(
element
)
// @ts-ignore
//Vue.use(window.ELEMENT)
//Vue.config.productionTip = false
Vue
.
use
(
element
)
Vue
.
mount
(
"#app"
)
app
.
mount
(
"#app"
)
...
...
package.json
View file @
e843966
...
...
@@ -22,9 +22,12 @@
"编辑器"
],
"dependencies"
:
{
"@element-plus/icons-vue"
:
"^2.1.0"
,
"@vue/composition-api"
:
"^1.7.2"
,
"axios"
:
"^1.6.0"
,
"echarts"
:
"^5.1.2"
,
"element-plus"
:
"^2.4.1"
,
"jquery"
:
"^3.7.1"
,
"sass"
:
"^1.69.4"
,
"sass-loader"
:
"10.1.1"
,
"vue"
:
"^3.0.0"
,
...
...
yarn.lock
View file @
e843966
...
...
@@ -958,7 +958,7 @@
resolved "https://mirrors.cloud.tencent.com/npm/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
"@element-plus/icons-vue@^2.0.6":
"@element-plus/icons-vue@^2.0.6"
, "@element-plus/icons-vue@^2.1.0"
:
version "2.1.0"
resolved "https://mirrors.cloud.tencent.com/npm/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz#7ad90d08a8c0d5fd3af31c4f73264ca89614397a"
integrity sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==
...
...
@@ -2236,6 +2236,15 @@ aws4@^1.8.0:
resolved "https://registry.nlark.com/aws4/download/aws4-1.11.0.tgz"
integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=
axios@^1.6.0:
version "1.6.0"
resolved "https://mirrors.cloud.tencent.com/npm/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102"
integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
babel-code-frame@^6.22.0:
version "6.26.0"
resolved "https://registry.nlark.com/babel-code-frame/download/babel-code-frame-6.26.0.tgz?cache=0&sync_timestamp=1618847032171&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-code-frame%2Fdownload%2Fbabel-code-frame-6.26.0.tgz"
...
...
@@ -2940,7 +2949,7 @@ colorette@^1.2.1, colorette@^1.2.2:
resolved "https://registry.nlark.com/colorette/download/colorette-1.3.0.tgz"
integrity sha1-/0XS8O2yRAadO3cq3rBP7TjQoK8=
combined-stream@^1.0.6, combined-stream@~1.0.6:
combined-stream@^1.0.6, combined-stream@
^1.0.8, combined-stream@
~1.0.6:
version "1.0.8"
resolved "https://registry.nlark.com/combined-stream/download/combined-stream-1.0.8.tgz"
integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=
...
...
@@ -4280,6 +4289,11 @@ follow-redirects@^1.0.0:
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz"
integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M=
follow-redirects@^1.15.0:
version "1.15.3"
resolved "https://mirrors.cloud.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.nlark.com/for-in/download/for-in-1.0.2.tgz"
...
...
@@ -4321,6 +4335,15 @@ fork-ts-checker-webpack-plugin@^3.1.1:
tapable "^1.0.0"
worker-rpc "^0.1.0"
form-data@^4.0.0:
version "4.0.0"
resolved "https://mirrors.cloud.tencent.com/npm/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.nlark.com/form-data/download/form-data-2.3.3.tgz"
...
...
@@ -5389,6 +5412,11 @@ jest-worker@^27.0.2:
merge-stream "^2.0.0"
supports-color "^8.0.0"
jquery@^3.7.1:
version "3.7.1"
resolved "https://mirrors.cloud.tencent.com/npm/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
js-message@1.0.7:
version "1.0.7"
resolved "https://registry.nlark.com/js-message/download/js-message-1.0.7.tgz"
...
...
@@ -7075,6 +7103,11 @@ proxy-addr@~2.0.5:
forwarded "0.2.0"
ipaddr.js "1.9.1"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.nlark.com/prr/download/prr-1.0.1.tgz"
...
...
Please
register
or
login
to post a comment