Commit d9605614 authored by heduo's avatar heduo

feat(hd): 合并代码

parents ec3a0183 2c097084
This diff is collapsed.
import { tmallabHttp } from '/@/utils/http/axios';
enum Api {
List = '/system/productNegotiated/getList',
BrandList = '/regionalSpotManage/commit',
GetAreaList = '/system/opsProduct/getAreaList',
OpsAddProduct = '/system/opsProduct/opsAddProduct',
GetGhsAreaList = '/system/opsProduct/getGhsAreaList',
OpsDeleteProduct = '/system/opsProduct/opsDeleteProduct',
OpsEditProduct = '/system/opsProduct/opsEditProduct',
UploadOpsProduct = '/excel/excelNew/uploadOpsProduct',
RevokeExcelUpload = '/system/logProductManager/revokeExcelUpload',
PlatformProBatchList = '/system/logNegotiationProductOperate/getList',
PlatformProBatchGetDetail = '/system/logNegotiationProductOperate/getList',
}
/**
* @description: 区域现货管理列表
*/
export const regionalSpotManageListApi = (data) =>
tmallabHttp.post({ url: Api.List, data }, { errorMessageMode: 'message'});
/**
* @description: 获取品牌列表
*/
export const regionalSpotManageBrandListApi = (data) =>
tmallabHttp.post({ url: Api.BrandList,data }, { errorMessageMode: 'message'});
/**
* @description: 获取现货区域列表
*/
export const regionalSpotManageGetAreaListApi = (data) =>
tmallabHttp.post({ url: Api.GetAreaList,data },{ errorMessageMode: 'message' });
/**
* @description: 新增商品接口
*/
export const regionalSpotManageOpsAddProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsAddProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 获取已开通区域
*/
export const regionalSpotManageGetGhsAreaListApi = (data) =>
tmallabHttp.post({ url: Api.GetGhsAreaList, data },{ errorMessageMode: 'message' });
/**
* @description: 单条/批量删除
*/
export const regionalSpotManageOpsDeleteProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsDeleteProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 增加区域
*/
export const regionalSpotManageOpsEditProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsEditProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 批量上传
*/
export const regionalSpotManageUploadOpsProductApi = (data) =>
tmallabHttp.post({ url: Api.UploadOpsProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表
*/
export const taskCenterQueryListApi = (data) =>
tmallabHttp.post({ url: Api.RevokeExcelUpload, data },{ errorMessageMode: 'message' });
/**
* @description: 撤销
*/
export const taskCenterRevokeExcelUploadApi = (data) =>
tmallabHttp.post({ url: Api.RevokeExcelUpload, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表--平台商品批量页签
*/
export const platformProBatchGetListApi = (data) =>
tmallabHttp.post({ url: Api.PlatformProBatchList, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表--平台商品批量页签--操作记录详情
*/
export const platformProBatchGetDetailApi = (data) =>
tmallabHttp.post({ url: Api.PlatformProBatchGetDetail, data },{ errorMessageMode: 'message' });
......@@ -14,10 +14,11 @@ import { setupStore } from '/@/store';
import { setupGlobDirectives } from '/@/directives';
import { setupI18n } from '/@/locales/setupI18n';
import { registerGlobComp } from '/@/components/registerGlobComp';
//全局组件注册
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.less';
// if (import.meta.env.DEV) {
// import('ant-design-vue/dist/antd.less');
// }
async function bootstrap() {
const app = createApp(App);
......@@ -40,6 +41,7 @@ async function bootstrap() {
app.use(Antd);
app.mount('#app');
app.use(Antd)
}
bootstrap();
import type { AppRouteModule } from '/@/router/types';
import { LAYOUT } from '/@/router/constant';
const product: AppRouteModule = {
path: '/product',
name: 'Product',
component: LAYOUT,
redirect: '/product/regionalSpot',
meta: {
hideChildrenInMenu: false,
orderNo: 500,
icon: 'ion:grid-outline',
title: '商品管理',
},
children: [
{
path: 'regionalSpot',
name: 'RegionalSpot',
component: () => import('/@/views/regionalSpotManage/index.vue'),
meta: {
title: '区域现货管理',
},
},
{
path: 'taskCenter',
name: 'TaskCenter',
component: () => import('/@/views/regionalSpotManage/taskCenter.vue'),
meta: {
title: '任务中心',
},
}
],
};
export default product;
/* eslint-disable */
import { saveAs } from 'file-saver'
import XLSX from 'xlsx'
function generateArray(table) {
var out = [];
var rows = table.querySelectorAll('tr');
var ranges = [];
for (var R = 0; R < rows.length; ++R) {
var outRow = [];
var row = rows[R];
var columns = row.querySelectorAll('td');
for (var C = 0; C < columns.length; ++C) {
var cell = columns[C];
var colspan = cell.getAttribute('colspan');
var rowspan = cell.getAttribute('rowspan');
var cellValue = cell.innerText;
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
//Skip ranges
ranges.forEach(function (range) {
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
}
});
//Handle Row Span
if (rowspan || colspan) {
rowspan = rowspan || 1;
colspan = colspan || 1;
ranges.push({
s: {
r: R,
c: outRow.length
},
e: {
r: R + rowspan - 1,
c: outRow.length + colspan - 1
}
});
};
//Handle Value
outRow.push(cellValue !== "" ? cellValue : null);
//Handle Colspan
if (colspan)
for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
}
out.push(outRow);
}
return [out, ranges];
};
function datenum(v, date1904) {
if (date1904) v += 1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts) {
var ws = {};
var range = {
s: {
c: 10000000,
r: 10000000
},
e: {
c: 0,
r: 0
}
};
for (var R = 0; R != data.length; ++R) {
for (var C = 0; C != data[R].length; ++C) {
if (range.s.r > R) range.s.r = R;
if (range.s.c > C) range.s.c = C;
if (range.e.r < R) range.e.r = R;
if (range.e.c < C) range.e.c = C;
var cell = {
v: data[R][C]
};
if (cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({
c: C,
r: R
});
if (typeof cell.v === 'number') cell.t = 'n';
else if (typeof cell.v === 'boolean') cell.t = 'b';
else if (cell.v instanceof Date) {
cell.t = 'n';
cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
} else cell.t = 's';
ws[cell_ref] = cell;
}
}
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
function Workbook() {
if (!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
export function export_table_to_excel(id) {
var theTable = document.getElementById(id);
var oo = generateArray(theTable);
var ranges = oo[1];
/* original data */
var data = oo[0];
var ws_name = "SheetJS";
var wb = new Workbook(),
ws = sheet_from_array_of_arrays(data);
/* add ranges to worksheet */
// ws['!cols'] = ['apple', 'banan'];
ws['!merges'] = ranges;
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: false,
type: 'binary'
});
saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), "test.xlsx")
}
export function export_json_to_excel({
searchList,
multiHeader = [],
header,
data,
filename,
merges = [],
autoWidth = true,
bookType = 'xlsx',
XlsWidth
} = {}) {
/* original data */
filename = filename || 'excel-list'
data = [...data]
data.unshift(header);
if (searchList) {
data.unshift([])
data.unshift(searchList)
}
for (let i = multiHeader.length - 1; i > -1; i--) {
data.unshift(multiHeader[i])
}
var ws_name = "SheetJS";
var wb = new Workbook(),
ws = sheet_from_array_of_arrays(data);
if (merges.length > 0) {
if (!ws['!merges']) ws['!merges'] = [];
merges.forEach(item => {
ws['!merges'].push(XLSX.utils.decode_range(item))
})
}
if (autoWidth) {
/*设置worksheet每列的最大宽度*/
const colWidth = data.map(row => row.map(val => {
/*先判断是否为null/undefined*/
if (val == null) {
return {
'wch': 10
};
}
/*再判断是否为中文*/
else if (val.toString().charCodeAt(0) > 255) {
return {
'wch': val.toString().length * 2
};
} else {
return {
'wch': val.toString().length
};
}
}))
/*以第一行为初始值*/
let result = colWidth[0];
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j]['wch'] < colWidth[i][j]['wch']) {
result[j]['wch'] = colWidth[i][j]['wch'];
}
}
}
ws['!cols'] = result;
if (XlsWidth) {
ws['!cols'] = XlsWidth;
}
}
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, {
bookType: bookType,
bookSST: false,
type: 'binary'
});
saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), `${filename}.${bookType}`);
}
This diff is collapsed.
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
const config = import.meta.env
import {
taskCenterQueryListApi,
} from '/@/api/regionalSpotManage';
onMounted(async () => {
getList()
});
let list = ref<any[]>([])
let listLoading = ref(false)
const downLoad = (url) => {
window.open(config.VITE_GLOB_API_URL + '/system/' + url, '_blank')
}
const getList = async () => {
listLoading.value = true
const res = await taskCenterQueryListApi({type:1})
if (res.code === 20000) {
list.value = res.data
} else {
list.value = []
}
listLoading.value = false
}
</script>
<template>
<div>
<a-button @click="getList" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="导出状态" align="center" :width="100">
<template v-slot="{record}">
<p>{{ record.status == 0 ? '待进行 ': (record.status == 1 ? '进行中' : '已完成') }}</p>
</template>
</a-table-column>
<a-table-column title="数据量" align="center" :width="100">
<template v-slot="{record}">
{{ record.successNum }}
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.createName }}
</template>
</a-table-column>
<a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}">
<Button v-if="record.fileUrl" type="link" @click="downLoad(record.fileUrl)">下载文件</Button>
<span v-else>——</span>
</template>
</a-table-column>
</a-table>
</template>
<style lang="less" scoped>
</style>
This diff is collapsed.
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import {
platformProBatchGetListApi,
platformProBatchGetDetailApi
} from '/@/api/regionalSpotManage';
import { message } from 'ant-design-vue';
onMounted(async () => {
getList()
});
let list = ref<any[]>([
{
createTime: '2024/12/12 12:22:22',
operateModule: '平台商品管理-议价商品',
type: '批量导入议价商品',
operateNum: 8882,
successNum: 8882,
failNum: 0,
operateName: '赵欣雨'
}
])
let listLoading = ref(false)
const pagination = ref({
pageSize: 10,
current: 1,
total: 0,
showTotal: total => `共 ${total} 条`,
hideOnSinglePage: false,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => {
pagination.value.current = current
getList()
},
onShowSizeChange: (size) => {
pagination.value.pageSize = size
getList()
}
})
const search = () => {
pagination.value.current = 1
getList()
}
const getList = async () => {
const param = ref<{ [key: string]: any }>({
currentPage: pagination.value.current,
pageSize: pagination.value.pageSize
})
listLoading.value = true
const res = await platformProBatchGetListApi(param)
if (res.code === 20000) {
list.value = res.data
pagination.value.total = res.data[0].total
} else {
list.value = []
pagination.value.total = 0
}
listLoading.value = false
}
let curItem = ref<{ [key: string]: any }>({});
let visible = ref(false)
let operationList = ref<any[]>([])
let detailLoading = ref(false)
const viewRecord = (item) => {
curItem.value = item
visible.value = true
getDetails(item)
}
const getDetails = async (item) => {
const param = ref<{ [key: string]: any }>({
sysid: item.sysid,
type: ''
})
detailLoading.value = true
const res = await platformProBatchGetDetailApi(param)
if (res.code === 20000) {
operationList.value = res.data
} else {
operationList.value = []
}
detailLoading.value = false
}
// =================导出========================
let exportLoading = ref(false)
const exportExcel = async () => {
handleDownload([
{
"brand": "生工",
"category": "",
"createTime": "2024-03-29 14:42:35",
"discount": null,
"expirationDate": null,
"failReason": "该商品在商品目录不存在;",
"identificationType": "商品议价",
"itemNo": "G508013-0001",
"negotiationPrice": 5000,
"operateSysid": 13877,
"platforms": [
"北京协和医院"
],
"productName": "微孔板迷你离心机,500~3000 rpm",
"spec": "1 /PK",
"status": false,
"sysid": 83466873,
"total": 32,
"type": 2
}
])
const param = ref<{ [key: string]: any }>({
sysid: curItem.value.sysid,
type: ''
})
exportLoading.value = true
const res = await platformProBatchGetDetailApi(param)
if (res.code === 20000) {
handleDownload(res.data)
} else {
message.error('暂无数据')
}
exportLoading.value = false
}
const handleDownload = (list) => {
import('/@/vendor/Export2Excel').then(excel => {
let tHeader = ['商品名称', '品牌', '货号', '包装规格', '平台', '状态', '失败原因', '执行时间']
let filterVal = ['productName', 'brand', 'itemNo', 'spec', 'platforms', 'status', 'failReason', 'createTime']
list.forEach(item => {
if(item.status) {
item.status = '成功'
} else {
item.status = '失败'
}
if(item.platforms) {
item.platforms = item.platforms.join(',')
} else {
item.platforms = ''
}
});
const data = formatJson(filterVal, list)
excel.export_json_to_excel({
header: tHeader as any,
data: data as any,
filename: '操作记录详情' as any,
autoWidth: true as any,
bookType: 'xlsx' as any,
XlsWidth: null as any,
searchList: [] as any
})
})
}
const formatJson = (filterVal, jsonData) => {
return jsonData.map(v => filterVal.map(j => {
return v[j]
}))
}
</script>
<template>
<div>
<a-button @click="search" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
:pagination="pagination"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="功能模块" align="center" :width="100">
<template v-slot="{record}">
{{ record.operateModule }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="操作数量" align="center" :width="100">
<template v-slot="{record}">
<a-button v-if="record.operateNum" type="link" @click="viewRecord(record)">{{ record.operateNum }}</a-button>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="解析成功数量" align="center" :width="100">
<template v-slot="{record}">
<span v-if="record.successNum">{{ record.successNum }}</span>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="解析失败数量" align="center" :width="100">
<template v-slot="{record}">
<span v-if="record.failNum">{{ record.failNum }}</span>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.operateName }}
</template>
</a-table-column>
</a-table>
<a-modal v-model:visible="visible" title="操作记录详情" :width="1200" :maskClosable="false" :keyboard="false">
<template #footer>
<a-button type="primary" :loading="exportLoading" @click="exportExcel">导出数据</a-button>
</template>
<a-table
:data-source="operationList"
:loading="detailLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: -15px"
>
<a-table-column title="商品名称" align="center" :width="100">
<template v-slot="{record}">
{{ record.productName }}
</template>
</a-table-column>
<a-table-column title="品牌" align="center" :width="100">
<template v-slot="{record}">
{{ record.brand }}
</template>
</a-table-column>
<a-table-column title="货号" align="center" :width="100">
<template v-slot="{record}">
{{ record.itemNo }}
</template>
</a-table-column>
<a-table-column title="包装规格" align="center" :width="100">
<template v-slot="{record}">
{{ record.spec }}
</template>
</a-table-column>
<a-table-column title="平台" align="center" :width="150">
<template v-slot="{record}">
<span v-if="record.platforms && record.platforms.length > 1" :title="record.platforms.join(',')">{{ record.platforms[0] + '...' }}</span>
<span v-else>{{ record.platforms ? record.platforms[0] : '' }}</span>
</template>
</a-table-column>
<a-table-column title="状态" align="center" :width="100">
<template v-slot="{record}">
{{ record.status ? '成功' : '失败' }}
</template>
</a-table-column>
<a-table-column title="失败原因" :width="150">
<template v-slot="{record}">
<span class="opinionClass" :title="record.failReason">{{ record.failReason }}</span>
</template>
</a-table-column>
<a-table-column title="执行时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
</a-table>
</a-modal>
</template>
<style lang="less" scoped>
.opinionClass {
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import {
message,
} from 'ant-design-vue';
const config = import.meta.env
import {
taskCenterQueryListApi,
taskCenterRevokeExcelUploadApi,
} from '/@/api/regionalSpotManage';
onMounted(async () => {
getList()
});
let list = ref<any[]>([])
let listLoading = ref(false)
const downLoad = (url) => {
window.open(config.VITE_GLOB_API_URL + '/system/excelFile/' + url, '_blank')
}
const downloadFail = (record) => {
if(record.failNum === 0) return
let href = config.VITE_GLOB_API_URL + '/excel/excelNew/fail/download?sysid=' + record.sysid+'&type='+record.type.slice(2,6)
window.open(href,'blank')
}
const cancel = async (record) => {
const param = ref<{ [key: string]: any }>({
sysid: record.sysid
})
const res = await taskCenterRevokeExcelUploadApi(param.value)
if (res.code === 20000) {
message.success('操作成功')
getList()
} else {
message.error(res.message)
}
}
const getList = async () => {
listLoading.value = true
const res = await taskCenterQueryListApi({type:0})
if (res.code === 20000) {
list.value = res.data
} else {
list.value = []
}
listLoading.value = false
}
</script>
<template>
<div>
<a-button @click="getList" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="状态" align="center" :width="100">
<template v-slot="{record}">
<p>{{ record.isRevoke ? '已撤销' : record.status == 0 ? '待进行':(record.status == 1 ? '进行中':'已完成') }}</p>
</template>
</a-table-column>
<a-table-column title="操作数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.sproductNumpec }}
</template>
</a-table-column>
<a-table-column title="成功数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.successNum }}
</template>
</a-table-column>
<a-table-column title="错误数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.failNum }}
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.createName }}
</template>
</a-table-column>
<a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}">
<Button type="link" @click="downLoad(record.fileUrl)">下载源文件</Button>
<Button type="link" v-if="record.failNum" @click="downloadFail(record)">下载错误数据</Button>
<Button type="link" v-if="record.status == 0 && !record.isRevoke" @click="cancel(record)">撤销</Button>
</template>
</a-table-column>
</a-table>
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
import ManageList from './components/list.vue';
</script>
<template>
<ManageList />
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
import { ref } from 'vue';
import uploadTask from './components/upLoadTask.vue'
import downLoadTask from './components/downLoadTask.vue'
import platformProBatch from './components/platformProBatch.vue'
const activeKey = ref('1')
const callback = (val) => {
activeKey.value = val
}
</script>
<template>
<a-tabs @change="callback" v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="上传任务数据">
<uploadTask v-if="activeKey === '1'"></uploadTask>
</a-tab-pane>
<a-tab-pane key="2" tab="下载任务数据" force-render>
<downLoadTask v-if="activeKey === '2'"></downLoadTask>
</a-tab-pane>
<a-tab-pane key="3" tab="平台商品批量">
<platformProBatch v-if="activeKey === '3'"></platformProBatch>
</a-tab-pane>
</a-tabs>
</template>
<style lang="less" scoped>
</style>
......@@ -3071,16 +3071,27 @@ bin-version@^3.0.0:
execa "^1.0.0"
find-versions "^3.0.0"
bin-wrapper@^4.0.0, bin-wrapper@^4.0.1:
version "0.1.0"
resolved "https://registry.npmmirror.com/bin-wrapper-china/-/bin-wrapper-china-0.1.0.tgz"
integrity sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg==
bin-wrapper@^4.0.0:
version "4.1.0"
resolved "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz"
integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
dependencies:
bin-check "^4.1.0"
bin-version-check "^4.0.0"
binary-mirror-config "^1"
download "^7.1.0"
import-lazy "^4.0.0"
import-lazy "^3.1.0"
os-filter-obj "^2.0.0"
pify "^4.0.1"
bin-wrapper@^4.0.1:
version "4.1.0"
resolved "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz"
integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
dependencies:
bin-check "^4.1.0"
bin-version-check "^4.0.0"
download "^7.1.0"
import-lazy "^3.1.0"
os-filter-obj "^2.0.0"
pify "^4.0.1"
......@@ -3089,11 +3100,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
binary-mirror-config@^1:
version "1.41.0"
resolved "https://registry.npmmirror.com/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz"
integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==
bl@^1.0.0:
version "1.2.3"
resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz"
......@@ -5416,6 +5422,11 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
file-saver@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.2.tgz"
integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==
file-type@^10.4.0:
version "10.11.0"
resolved "https://registry.npmmirror.com/file-type/-/file-type-10.11.0.tgz"
......@@ -6452,6 +6463,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
import-lazy@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz"
integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
import-lazy@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz"
......@@ -9501,6 +9517,11 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
raw-loader@~0.5.1:
version "0.5.1"
resolved "https://registry.npmmirror.com/raw-loader/-/raw-loader-0.5.1.tgz"
integrity sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==
react-is@^17.0.1:
version "17.0.2"
resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz"
......@@ -9876,13 +9897,20 @@ rollup-plugin-visualizer@^5.5.2:
source-map "^0.7.4"
yargs "^17.5.1"
"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1, rollup@^2.60.2, "rollup@>=2.59.0 <2.78.0", "rollup@2.x || 3.x || 4.x":
"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1, rollup@^2.60.2, "rollup@2.x || 3.x || 4.x":
version "2.79.1"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz"
integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
optionalDependencies:
fsevents "~2.3.2"
"rollup@>=2.59.0 <2.78.0":
version "2.77.3"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz"
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
optionalDependencies:
fsevents "~2.3.2"
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz"
......@@ -9955,6 +9983,13 @@ saxes@^5.0.1:
dependencies:
xmlchars "^2.2.0"
script-loader@^0.7.2:
version "0.7.2"
resolved "https://registry.npmmirror.com/script-loader/-/script-loader-0.7.2.tgz"
integrity sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==
dependencies:
raw-loader "~0.5.1"
scroll-into-view-if-needed@^2.2.25:
version "2.2.31"
resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment