adminuser增删改查

This commit is contained in:
xielue 2022-11-01 22:13:21 +08:00
parent 8d6c97d6ba
commit 22beb2ce31
19 changed files with 854 additions and 203 deletions

2
.env
View File

@ -15,7 +15,7 @@ VUE_APP_TBAS_TITLES_KEY=admin.tabs.titles
VUE_APP_LAYOUT_KEY=admin.layout VUE_APP_LAYOUT_KEY=admin.layout
VUE_APP_THEME_MODE_KEY=admin.theme.mode VUE_APP_THEME_MODE_KEY=admin.theme.mode
VUE_APP_THEME_COLOR_KEY=admin.theme.color VUE_APP_THEME_COLOR_KEY=admin.theme.color
VUE_APP_API_BASE_URL=http://zxx4.f3322.net:16680 VUE_APP_API_BASE_URL=http://zxx4.f3322.net:46000
VUE_APP_USER_MODEL=AdminUser VUE_APP_USER_MODEL=AdminUser
VUE_APP_BEID=1 VUE_APP_BEID=1
VUE_APP_PTYID=0 VUE_APP_PTYID=0

View File

@ -1,2 +1,2 @@
VUE_APP_API_BASE_URL=http://zxx4.f3322.net:16680 VUE_APP_API_BASE_URL=http://zxx4.f3322.net:46000

View File

@ -31,7 +31,9 @@
"vue-i18n": "^8.18.2", "vue-i18n": "^8.18.2",
"vue-router": "^3.3.4", "vue-router": "^3.3.4",
"vuedraggable": "^2.23.2", "vuedraggable": "^2.23.2",
"vuex": "^3.4.0" "vuex": "^3.4.0",
"vxe-table": "^3.6.6",
"xe-utils": "^3.5.7"
}, },
"devDependencies": { "devDependencies": {
"@ant-design/colors": "^4.0.1", "@ant-design/colors": "^4.0.1",

12
src/application/index.js Normal file
View File

@ -0,0 +1,12 @@
// 跟业务系统相关的
import mk from './mk'
export default {
install(Vue) {
Vue.prototype.$mk = mk;
}
}

View File

@ -0,0 +1,58 @@
<template>
<vxe-modal class="vxe-table--ignore-clear" id="myModal" @close="modalClose" v-model="visible" :width="width" :height="height"
min-width="600" min-height="400" show-zoom resize remember storage transfer>
<template #title>
<span>{{ title }}</span>
</template>
<template #default>
<component :is="app" :dataId="dataId" :pageMode="pageMode" @callback="handleCallback"></component>
</template>
</vxe-modal>
</template>
<script>
export default {
name: "myDialog",
data() {
return {
width:800,
height:500,
visible: false,
title: "提示",
callback: null,
dataId: "",
pageMode: "", //add edit select
app: null
};
},
methods: {
open(options) {
const { page, title, callback, pageMode, dataId,width = 800,height = 500 } = options || {};
this.width = width;
this.height = height;
this.dataId = dataId;
this.pageMode = pageMode;
this.title = title;
this.app = page;
this.callback = callback;
this.visible = true;
},
handleCallback(e) {
const { callback } = this;
if (callback) {
callback(e);
this.$destroy();
}
},
modalClose() {
this.$destroy();
}
},
};
</script>

View File

@ -0,0 +1,17 @@
import Vue from 'vue'
import promptComponent from './dialog.vue'
export default {
open: function (args) {
const promptConstructor = Vue.extend(promptComponent);
let instance = new promptConstructor().$mount('');
document.body.appendChild(instance.$el);
instance.open(args);
}
};

View File

@ -0,0 +1,50 @@
export default {
defaults: {
gridOptions: {
rowConfig: {
keyField: "id",
isCurrent: true,
isHover: true
},
columnConfig: {
resizable: true
},
sortConfig: {
trigger: 'cell',
remote: true
},
pagerConfig: {
pageSize: 50,
pageSizes: [50, 100, 200, 500, 1000]
},
__toolbarConfig: {
buttons: [
],
refresh: true,
import: false,
export: false,
print: false,
zoom: false,
custom: true
},
checkboxConfig: {
reserve: true,
highlight: true,
range: true
}
},
formOptions: {
}
}
};

View File

@ -0,0 +1,18 @@
import modal from './libs/function/modal'
import apis from './libs/function/apis'
import config from './config'
import dialog from './components/dialog'
var mk = {
...modal,
...apis,
config: config,
dialog: dialog
};
export default mk;

View File

@ -0,0 +1,87 @@
import { request } from '@/utils/request'
import modal from './modal'
export default {
post : function({url, data,loading , config}){
return new Promise((resolve, reject)=>{
if(loading){
modal.loading(loading);
}
request(url, 'post', data, config).then(response=>{
if(!response){
reject && reject(response);
return;
}
var result = response.data;
if(!result){
reject && reject(response);
return;
}
if(loading){
modal.hideLoading();
}
if(result.code != 200){
if(reject){
reject(response);
}else{
modal.error(result.msg);
}
return;
}
resolve(result.data);
}).catch((error)=>{
if(loading){
modal.hideLoading();
}
modal.error(error.toString());
});
});
},
getPagedData: function({url, method = 'post', data, config}){
return new Promise((resolve, reject)=>{
if(data.start_time && typeof(data.start_time) == "string"){
data.start_time = parseInt(new Date(data.start_time).getTime()/1000);
}
if(data.end_time && typeof(data.end_time) == "string"){
data.end_time =parseInt(new Date(data.end_time).getTime()/1000);
}
console.log(data)
request(url, method, data, config).then(response=>{
if(!response){
reject && reject(response);
return;
}
var result = response.data;
if(!result){
reject && reject(response);
return;
}
if(result.code != 200){
if(reject){
reject(response);
}else{
modal.error(result.msg);
}
return;
}
resolve(result.data);
}).catch((error)=>{
resolve({
total:0,
list :[]
});
modal.error(error.toString());
});
});
}
}

View File

@ -0,0 +1,63 @@
import VXETable from 'vxe-table'
/**
* 函数 - 弹窗
*/
const msgs = {
title: "提示",
confirmText: "确定",
cancelText: "取消",
placeholderText: "请输入"
};
export default {
/**
this.$mk.alert({ content: '基本提示框', title: '标题1' });
*/
alert: function (options = {}) {
options = Object.assign({ title: msgs.title }, options);
return VXETable.modal.alert(options);
},
/**
this.$mk.msg(消息提示);
*/
msg: function (content) {
return VXETable.modal.message({ content: content });
},
info: function (content) {
return VXETable.modal.message({ content: content, status: 'info' });
},
warning: function (content) {
return VXETable.modal.message({ content: content, status: 'warning' });
},
question: function (content) {
return VXETable.modal.message({ content: content, status: 'question' });
},
success: function (content) {
return VXETable.modal.message({ content: content, status: 'success' });
},
error: function (content) {
return VXETable.modal.message({ content: content, status: 'error' });
},
loading: function (content) {
return VXETable.modal.message({ content: content, status: 'loading', duration: -1, id: 'loading' });
},
hideLoading: function () {
VXETable.modal.close("loading");
},
/*
this.$mk.confirm('您确定要删除吗?').then(type => {
this.$mk.msg("点击了确定")
});
*/
confirm: VXETable.modal.confirm
}

View File

@ -0,0 +1,18 @@
.ant-btn {
margin-right: 8px;
margin-bottom: 12px;
}
.vxe-checkbox--input{
display: none;
}
.vxe-toolbar .vxe-custom--footer button {
background-color: transparent;
width: 50%;
height: 2.5em;
border: 0;
color: #606266;
text-align: center;
cursor: pointer;
}

View File

@ -10,11 +10,15 @@ import 'animate.css/source/animate.css' // 引入animate.css 动画库
import Plugins from '@/plugins' // 引入插件 import Plugins from '@/plugins' // 引入插件
import {initI18n} from '@/utils/i18n' // 引入国际化方法 import {initI18n} from '@/utils/i18n' // 引入国际化方法
import bootstrap from '@/bootstrap' // 引入启动引导方法 import bootstrap from '@/bootstrap' // 引入启动引导方法
import 'moment/locale/zh-cn' // 引入moment 本地化 import 'moment/locale/zh-cn' // 引入moment 本地化
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
const router = initRouter(store.state.setting.asyncRoutes) // 初始化路由 加载动态路由 const router = initRouter(store.state.setting.asyncRoutes) // 初始化路由 加载动态路由
const i18n = initI18n('CN', 'US') // 初始化国际化 加载中英文 语言包 const i18n = initI18n('CN', 'US') // 初始化国际化 加载中英文 语言包
Vue.use(VXETable)
Vue.use(Antd) // 注册ant-design-vue 组件库 Vue.use(Antd) // 注册ant-design-vue 组件库
Vue.config.productionTip = false // 关闭生产模式下给出的提示 Vue.config.productionTip = false // 关闭生产模式下给出的提示
Vue.use(Viser) // 注册viser-vue 组件库 Vue.use(Viser) // 注册viser-vue 组件库
@ -22,6 +26,11 @@ Vue.use(Plugins) // 注册插件
bootstrap({router, store, i18n, message: Vue.prototype.$message}) // 启动引导方法 bootstrap({router, store, i18n, message: Vue.prototype.$message}) // 启动引导方法
import application from './application';
import './application/mk/style/main.css';
Vue.use(application);
new Vue({ new Vue({
router, // 注入路由 router, // 注入路由
store, // 注入vuex store store, // 注入vuex store

View File

@ -0,0 +1,5 @@
<template>
<div>
user detail
</div>
</template>

View File

@ -0,0 +1,185 @@
<template>
<div class="page-body">
<vxe-form :data="formOptions.data" ref="xForm" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign" :rules="formOptions.rules" :items="formOptions.items" titleColon>
<template #myregion="{}">
<a-input-search placeholder="input search text" enter-button />
</template>
</vxe-form>
<div>
<a-button type="primary" @click="ok">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/base/api.js';
export default {
name: 'AdminUserEdit',
i18n: require('./i18n'),
props: {
pageMode: {
type: String,
default: "edit"
},
dataId: {
}
},
data() {
//
var pageData = {
actions: {
create: `${BASE_URL.BASE_URL}/AdminUser/v1/create`,
update: `${BASE_URL.BASE_URL}/AdminUser/v1/update`,
get: `${BASE_URL.BASE_URL}/AdminUser/v1/detail`
},
formOptions: {
data: {
"name": "",
"nick_name": "",
"avatar": "",
"email": "",
"mobile": "",
"password": "",
"status": 1,
"is_super": 0,
"level": 1,
"token": ""
},
titleWidth: 100,
titleAlign: 'right',
rules: {
name: [
{ required: true, message: '请输入名称' }
],
email: [
{
validator({ itemValue }) {
//
if (itemValue && !/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/.test(itemValue)) {
return new Error('email格式不正确')
}
}
}
],
mobile: [
{ required: true, message: '请输入手机号' } ,
{
validator({ itemValue }) {
//
if (itemValue && !/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(itemValue)) {
return new Error('手机号格式不正确')
}
}
}
],
},
items: [
{
title: '左侧',
children: [
{ field: 'name', title: '名称', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入名称' } } },
{ field: 'mobile', title: '联系电话', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入联系电话' } } },
{ field: 'nick_name', title: '昵称', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入昵称' } } },
{ field: 'email', title: 'email', span: 24, itemRender: { name: '$input', props: { placeholder: '请输入email' } } }
]
}
]
}
};
pageData.formOptions = Object.assign(this.$mk.config.defaults.formOptions, pageData.formOptions);
return pageData;
},
created() {
if (this.dataId) {
this.$mk.post({
url: this.actions.get,
loading : "加载中...",
data : {
id: this.dataId
}
}).then(a => {
this.formOptions.data = a.AdminUser;
}).catch((a)=>{
this.$mk.error(a.data.msg);
});
}
},
//
methods: {
loadData() {
},
ok() {
let save = () => {
let action = this.pageMode == "add" ? this.actions.create : this.actions.update;
let postdata = this.pageMode == "add" ? Object.assign({ id: this.dataId }, this.formOptions.data) : Object.assign({}, this.formOptions.data);
if (this.pageMode == "add") {
postdata.password = "123456";
}
this.$mk.post({
url: action,
loading: "保存中...",
data: postdata
}).then(() => {
this.$mk.success("保存成功");
this.$emit("callback", { success: true });
}).catch((a)=>{
this.$mk.error(a.data.msg);
});
};
this.$refs.xForm.validate((a) => {
if (a) {
let count = 0;
for (let name in a) {
a[name];
count++;
}
this.$mk.error(`存在${count}项错误,请检查`);
} else {
save();
}
});
},
cancel() {
this.$emit("callback", {});
}
},
//
watch: {
}
};
</script>
<style>
</style>

View File

@ -1,103 +1,282 @@
<template> <template>
<a-card :body-style="{padding: '24px 32px'}" :bordered="false"> <div class="page-body">
<a-form>
<a-form-item <!-- 工具条 -->
:label="$t('title')" <div class="mk-toolbar">
:labelCol="{span: 7}" <a-button type="primary" @click="pageAdd">
:wrapperCol="{span: 10}" 新增
> </a-button>
<a-input :placeholder="$t('titleInput')" /> <a-button @click="pageEdit">编辑</a-button>
<a-dropdown>
<a-menu slot="overlay" @click="handleMenuClick">
<a-menu-item key="delete">
删除
</a-menu-item>
</a-menu>
<a-button> 操作
<a-icon type="down" />
</a-button>
</a-dropdown>
</div>
<!-- 搜索区 -->
<vxe-form :data="searchFormData" :items="searchFormItems" titleColon @submit="onSearch">
<template #date="{}">
<a-form-item label="创建时间" :style="{ display: 'inline-block',width:120 }">
</a-form-item> </a-form-item>
<a-form-item <a-form-item :style="{ display: 'inline-block', width: 'calc(100% - 120px )' }">
:label="$t('date')" <a-range-picker @change="onDateChange" />
:labelCol="{span: 7}"
:wrapperCol="{span: 10}"
>
<a-range-picker style="width: 100%" />
</a-form-item> </a-form-item>
<a-form-item
:label="$t('describe')"
:labelCol="{span: 7}"
:wrapperCol="{span: 10}" </template>
> </vxe-form>
<a-textarea rows="4" :placeholder="$t('describeInput')"/>
</a-form-item>
<a-form-item <!-- 表格区 -->
:label="$t('metrics')" <vxe-grid ref='xGrid' v-bind="gridOptions"></vxe-grid>
:labelCol="{span: 7}"
:wrapperCol="{span: 10}" </div>
> </template>
<a-textarea rows="4" :placeholder="$t('metricsInput')"/>
</a-form-item> <script>
<a-form-item import BASE_URL from '@/services/base/api.js';
:label="$t('customer')"
:labelCol="{span: 7}" let editPage = () => import("./UserEdit");
:wrapperCol="{span: 10}"
:required="false" export default {
> name: 'AdminUserList',
<a-input :placeholder="$t('customerInput')"/> i18n: require('./i18n'),
</a-form-item> data() {
<a-form-item
:label="$t('critics')" //
:labelCol="{span: 7}" var pageData = {
:wrapperCol="{span: 10}"
:required="false" keyName : 'id',
> actions: {
<a-input :placeholder="$t('criticsInput')"/> getList: `${BASE_URL.BASE_URL}/AdminUser/v1/list`,
</a-form-item> delete: `${BASE_URL.BASE_URL}/AdminUser/v1/batchDelete`
<a-form-item },
:label="$t('weight')"
:labelCol="{span: 7}" start_time :0,
:wrapperCol="{span: 10}" end_time :0,
:required="false"
> //
<a-input-number :min="0" :max="100"/> searchFormData: {
<span>%</span> name: '',
</a-form-item> nick_name: '',
<a-form-item },
:label="$t('disclosure')" searchRules: [
:labelCol="{span: 7}" { key: "name", mode: "like" },
:wrapperCol="{span: 10}" { key: "nick_name", mode: "like" }
:required="false" ],
:help="$t('disclosureDesc')"
>
<a-radio-group v-model="value">
<a-radio :value="1">{{$t('public')}}</a-radio> searchFormItems: [
<a-radio :value="2">{{$t('partially')}}</a-radio> {
<a-radio :value="3">{{$t('private')}}</a-radio> title: '左侧',
</a-radio-group> span: 20,
<a-select mode="multiple" v-if="value === 2"> children: [
<a-select-option value="4">{{$t('colleague1')}}</a-select-option> { field: 'name', title: '名称', span: 7, itemRender: { name: '$input', props: { placeholder: '请输入名称' } } },
<a-select-option value="5">{{$t('colleague2')}}</a-select-option> { field: 'nick_name', title: '昵称', span: 7, itemRender: { name: '$input', props: { placeholder: '请输入昵称' } } },
<a-select-option value="6">{{$t('colleague3')}}</a-select-option> { span: 10, slots: { default: 'date' } }
</a-select> ]
</a-form-item> },
<a-form-item style="margin-top: 24px" :wrapperCol="{span: 10, offset: 7}"> { align: 'right', span: 4, itemRender: { name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, { props: { type: 'reset', content: '重置' } }] } }
<a-button type="primary">{{$t('submit')}}</a-button> ],
<a-button style="margin-left: 8px">{{$t('save')}}</a-button>
</a-form-item>
</a-form>
</a-card> //
</template> gridOptions: {
height: 600,
<script> id: 'datagrid_1',
export default {
name: 'AdminUserList', proxyConfig: {
i18n: require('./i18n'), sort: true, // query
data () { filter: true, // query
return { props: {
value: 1 result: 'list', //
total: 'total' //
},
// Promise
ajax: {
// queryreload
query: (options) => {
const { page, sorts } = options;
var params = {};
params.page = page.currentPage;
params.limit = page.pageSize;
params.order_bys = [];
params.search_rules = this.getSearchParms();
if (sorts) {
sorts.forEach((v) => {
params.order_bys.push({
column: v.property,
order: v.order
})
});
}
return this.loadData({ params });
}
}
},
columns: [
{ type: 'checkbox', width: 50 },
{ type: 'seq', width: 50 },
{ field: 'name', sortable: true, title: '名称' },
{ field: 'nick_name', sortable: true, title: '昵称', showHeaderOverflow: true },
{ field: 'email', sortable: true, title: 'email', showHeaderOverflow: true },
{ field: 'mobile', sortable: true, title: '电话', showHeaderOverflow: true }
]
}
};
pageData.gridOptions = Object.assign(this.$mk.config.defaults.gridOptions, pageData.gridOptions);
return pageData;
},
// -
onLoad() {
},
//
methods: {
onDateChange(date) {
if(date && date.length){
this.start_time = parseInt(date[0]._d.getTime()/ 1000);
this.end_time = parseInt(date[1]._d.getTime()/ 1000);
}else{
this.start_time = 0;
this.end_time = 0;
}
},
getSearchParms() {
var rules = [];
let findMode = k => {
for (let i in this.searchRules) {
if (this.searchRules[i].key == k) return this.searchRules[i].mode;
}
return "equal";
};
for (let key in this.searchFormData) {
let value = this.searchFormData[key];
if (value) {
let mode = findMode(key);
if(mode == "like"){
value = "%" + value +"%";
}
rules.push({
column: key,
mode: mode,
value: value
});
}
}
return rules;
},
getSelectdRow() {
let row = this.$refs.xGrid.getCurrentRecord();
if (!row) {
let rows = this.$refs.xGrid.getCheckboxRecords();
if (rows && rows.length) { row = rows[0]; }
}
return row;
},
loadData({ params }) {
params.start_time = this.start_time;
params.end_time = this.end_time;
return this.$mk.getPagedData({ url: this.actions.getList, data: params });
},
pageAdd() {
this.$mk.dialog.open({
page: editPage,
title: "新增用户信息",
pageMode: "add",
dataId: 0,
callback: ({ success }) => {
success && this.$refs.xGrid.commitProxy('query')
}
})
},
pageEdit() {
let row = this.getSelectdRow();
if (!row) {
this.$mk.msg("请选择行");
return;
}
this.$mk.dialog.open({
page: editPage,
title: "编辑用户信息",
pageMode: "edit",
dataId: row[this.keyName],
callback: ({ success }) => {
success && this.$refs.xGrid.commitProxy('query')
}
})
},
handleMenuClick(e) {
if (e.key == "delete") {
let rows = this.$refs.xGrid.getCheckboxRecords();
let ids = [];
rows.forEach((row) => {
ids.push(row[this.keyName]);
});
if (!ids.length) {
this.$mk.error("请选择行");
return;
}
this.$mk.confirm('您确定要删除吗?').then(type => {
if (type == 'confirm') {
this.$mk.post({
url: this.actions.delete,
loading: "删除中...",
data: {
ids: ids
}
}).then(() => {
this.$mk.success("删除成功");
this.onSearch();
}).catch((a) => {
this.$mk.error(a.data.msg);
});
}
});
} }
}, },
computed: { onSearch() {
desc() { this.$refs.xGrid.commitProxy('query')
return this.$t('pageDesc')
}
} }
},
//
watch: {
} }
</script> };
<style scoped> </script>
<style>
</style> .page-body {
padding: 10px 10px;
background: white;
}
</style>

View File

@ -1,79 +1,12 @@
module.exports = { module.exports = {
messages: { messages: {
CN: { CN: {
pageDesc: '表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。',
title: '标题',
titleInput: '给目标起个名字',
date: '起止日期',
describe: '目标描述',
describeInput: '请输入你阶段性工作目标',
metrics: '衡量标准',
metricsInput: '请输入衡量标准',
customer: '客户',
customerInput: '请描述你服务的客户,内部客户直接 @姓名/工号',
critics: '邀评人',
criticsInput: '请直接 @姓名/工号,最多可邀请 5 人',
weight: '权重',
disclosure: '目标公开',
disclosureDesc: '客户、邀评人默认被分享',
public: '公开',
partially: '部分公开',
private: '不公开',
submit: '提交',
save: '保存',
colleague1: '同事甲',
colleague2: '同事乙',
colleague3: '同事丙'
}, },
HK: { HK: {
pageDesc: '表單頁用於向用戶收集或驗證信息,基礎表單常見於數據項較少的表單場景。',
title: '標題',
titleInput: '給目標起個名字',
date: '起止日期',
describe: '目標描述',
describeInput: '請輸入你階段性的工作目標',
metrics: '衡量標準',
metricsInput: '請輸入衡量標準',
customer: '客戶',
customerInput: '請描述你服務的客戶,內部客戶直接 @姓名/工號',
critics: '邀評人',
criticsInput: '請直接 @姓名/工號,最多可邀請 5 人',
weight: '圈中人',
disclosure: '目標公開',
disclosureDesc: '客戶、邀評人默認被分享',
public: '公開',
partially: '部分公開',
private: '不公開',
submit: '提交',
save: '保存',
colleague1: '同事甲',
colleague2: '同事乙',
colleague3: '同事丙'
}, },
US: { US: {
pageDesc: 'Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.',
title: 'Title',
titleInput: 'Give the target a name',
date: 'Start and end date',
describe: 'Goal description',
describeInput: 'Please enter your work goals',
metrics: 'Metrics',
metricsInput: 'Please enter a metric',
customer: 'Customer',
customerInput: 'Please describe your customer service, internal customers directly @ Name / job number',
critics: 'Inviting critics',
criticsInput: 'Please direct @ Name / job number, you can invite up to 5 people',
weight: 'Weight',
disclosure: 'Target disclosure',
disclosureDesc: 'Customers and invitees are shared by default',
public: 'Public',
partially: 'Partially public',
private: 'Private',
submit: 'Submit',
save: 'Save',
colleague1: 'Colleague A',
colleague2: 'Colleague B',
colleague3: 'Colleague C'
} }
} }
} }

View File

@ -15,7 +15,7 @@ const AdminUserRouterMap = {
icon: 'idcard', icon: 'idcard',
component: view.page, component: view.page,
meta: { meta: {
invisible:true, // 不在菜单中显示 //invisible:true, // 不在菜单中显示
}, },
authority: { authority: {
permission:['AdminUser-All'], permission:['AdminUser-All'],
@ -72,7 +72,7 @@ const AdminUserRouterMap = {
path: '/AdminUser/AdminUserSettings', path: '/AdminUser/AdminUserSettings',
component: () => import('@/pages/Middle/Admin/AdminUser/UserSettings'), component: () => import('@/pages/Middle/Admin/AdminUser/UserSettings'),
meta: { meta: {
invisible:true, // 不在菜单中显示 //invisible:true, // 不在菜单中显示
}, },
authority: { authority: {
permission:['AdminUser-All','AdminUser-Settings'], permission:['AdminUser-All','AdminUser-Settings'],

View File

@ -68,6 +68,7 @@ function parseRoutes(routesConfig, routerMap) { // 解析路由
} }
}) })
Object.assign(meta, cfgMeta) // 合并路由元信息和路由配置元信息 Object.assign(meta, cfgMeta) // 合并路由元信息和路由配置元信息
const route = { const route = {
path: routeCfg.path || router.path || routeCfg.router, // 路由路径 path: routeCfg.path || router.path || routeCfg.router, // 路由路径
name: routeCfg.name || router.name, // 路由名称 name: routeCfg.name || router.name, // 路由名称
@ -156,8 +157,10 @@ function loadRoutes(routesConfig) { // 加载路由
const asyncRoutes = store.state.setting.asyncRoutes // 获取store的setting模块的asyncRoutes const asyncRoutes = store.state.setting.asyncRoutes // 获取store的setting模块的asyncRoutes
if (asyncRoutes) { // 如果动态路由存在 if (asyncRoutes) { // 如果动态路由存在
console.log("routesConfig && routesConfig.length > 0", routesConfig.length > 0) console.log("routesConfig && routesConfig.length > 0", routesConfig.length > 0)
if (routesConfig && routesConfig.length > 0) { // 如果本地路由配置存在 并且 数量大于0 if (routesConfig && routesConfig.length > 0) { // 如果本地路由配置存在 并且 数量大于0
const routes = parseRoutes(routesConfig, routerMap) // 解析路由 const routes = parseRoutes(routesConfig, routerMap) // 解析路由
// 合并路由 生成路由表 // 合并路由 生成路由表
const finalRoutes = mergeRoutes(basicOptions.routes, routes) const finalRoutes = mergeRoutes(basicOptions.routes, routes)
// 格式化路由 // 格式化路由
@ -165,10 +168,12 @@ function loadRoutes(routesConfig) { // 加载路由
console.log('最终路由表finalRoutes:', finalRoutes) // 最终路由表 console.log('最终路由表finalRoutes:', finalRoutes) // 最终路由表
router.options = { ...router.options, routes: finalRoutes } // 路由配置 router.options = { ...router.options, routes: finalRoutes } // 路由配置
router.matcher = new Router({ ...router.options, routes: [] }).matcher // 重置路由 router.matcher = new Router({ ...router.options, routes: [] }).matcher // 重置路由
// router.addRoutes(finalRoutes) // 添加路由 router.addRoutes(finalRoutes) // 添加路由
for (let x of finalRoutes) {
router.addRoute(x)
} //for (let x of finalRoutes) {
// router.addRoute(x)
//}
} }
} }
// 提取路由国际化数据 // 提取路由国际化数据

View File

@ -1898,7 +1898,7 @@
"anymatch@~3.1.2": "anymatch@~3.1.2":
"integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
"resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" "resolved" "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz"
"version" "3.1.2" "version" "3.1.2"
dependencies: dependencies:
"normalize-path" "^3.0.0" "normalize-path" "^3.0.0"
@ -2307,8 +2307,8 @@
"fill-range" "^7.0.1" "fill-range" "^7.0.1"
"brorand@^1.0.1": "brorand@^1.0.1":
"integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
"resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" "resolved" "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz"
"version" "1.1.0" "version" "1.1.0"
"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": "browserify-aes@^1.0.0", "browserify-aes@^1.0.4":
@ -2719,7 +2719,7 @@
"chokidar@^3.4.1": "chokidar@^3.4.1":
"integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
"resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" "resolved" "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz"
"version" "3.5.3" "version" "3.5.3"
dependencies: dependencies:
"anymatch" "~3.1.2" "anymatch" "~3.1.2"
@ -3830,7 +3830,7 @@
"delegate@^3.1.2": "delegate@^3.1.2":
"integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" "integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
"resolved" "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz" "resolved" "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz"
"version" "3.2.0" "version" "3.2.0"
"depd@~1.1.2": "depd@~1.1.2":
@ -4076,7 +4076,7 @@
"elliptic@^6.0.0", "elliptic@^6.5.2": "elliptic@^6.0.0", "elliptic@^6.5.2":
"integrity" "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==" "integrity" "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw=="
"resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz" "resolved" "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.3.tgz"
"version" "6.5.3" "version" "6.5.3"
dependencies: dependencies:
"bn.js" "^4.4.0" "bn.js" "^4.4.0"
@ -4126,7 +4126,7 @@
"enhanced-resolve@^4.5.0": "enhanced-resolve@^4.5.0":
"integrity" "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==" "integrity" "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg=="
"resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz" "resolved" "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz"
"version" "4.5.0" "version" "4.5.0"
dependencies: dependencies:
"graceful-fs" "^4.1.2" "graceful-fs" "^4.1.2"
@ -4982,7 +4982,7 @@
"glob-parent@~5.1.2": "glob-parent@~5.1.2":
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
"resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" "resolved" "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
"version" "5.1.2" "version" "5.1.2"
dependencies: dependencies:
"is-glob" "^4.0.1" "is-glob" "^4.0.1"
@ -5069,8 +5069,8 @@
"slash" "^2.0.0" "slash" "^2.0.0"
"good-listener@^1.2.2": "good-listener@^1.2.2":
"integrity" "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=" "integrity" "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw=="
"resolved" "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz" "resolved" "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz"
"version" "1.2.2" "version" "1.2.2"
dependencies: dependencies:
"delegate" "^3.1.2" "delegate" "^3.1.2"
@ -5226,7 +5226,7 @@
"hash.js@^1.0.0", "hash.js@^1.0.3": "hash.js@^1.0.0", "hash.js@^1.0.3":
"integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="
"resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" "resolved" "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz"
"version" "1.1.7" "version" "1.1.7"
dependencies: dependencies:
"inherits" "^2.0.3" "inherits" "^2.0.3"
@ -5253,8 +5253,8 @@
"version" "9.18.1" "version" "9.18.1"
"hmac-drbg@^1.0.0": "hmac-drbg@^1.0.0":
"integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="
"resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" "resolved" "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz"
"version" "1.0.1" "version" "1.0.1"
dependencies: dependencies:
"hash.js" "^1.0.3" "hash.js" "^1.0.3"
@ -6429,7 +6429,7 @@
"lodash@^4.17.11", "lodash@^4.17.13", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.3", "lodash@^4.17.4", "lodash@^4.17.5": "lodash@^4.17.11", "lodash@^4.17.13", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.3", "lodash@^4.17.4", "lodash@^4.17.5":
"integrity" "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" "integrity" "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
"resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz" "resolved" "https://registry.npmmirror.com/lodash/-/lodash-4.17.19.tgz"
"version" "4.17.19" "version" "4.17.19"
"log-symbols@^2.2.0": "log-symbols@^2.2.0":
@ -6736,12 +6736,12 @@
"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": "minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1":
"integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
"resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" "resolved" "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"
"version" "1.0.1" "version" "1.0.1"
"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": "minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1":
"integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
"resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" "resolved" "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"
"version" "1.0.1" "version" "1.0.1"
"minimatch@^3.0.4": "minimatch@^3.0.4":
@ -8039,7 +8039,7 @@
"prismjs@^1.13.0": "prismjs@^1.13.0":
"integrity" "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==" "integrity" "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw=="
"resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz" "resolved" "https://registry.npmmirror.com/prismjs/-/prismjs-1.21.0.tgz"
"version" "1.21.0" "version" "1.21.0"
optionalDependencies: optionalDependencies:
"clipboard" "^2.0.0" "clipboard" "^2.0.0"
@ -8313,7 +8313,7 @@
"readdirp@~3.6.0": "readdirp@~3.6.0":
"integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
"resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" "resolved" "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
"version" "3.6.0" "version" "3.6.0"
dependencies: dependencies:
"picomatch" "^2.2.1" "picomatch" "^2.2.1"
@ -8717,8 +8717,8 @@
"version" "2.0.0" "version" "2.0.0"
"select@^1.1.2": "select@^1.1.2":
"integrity" "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" "integrity" "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
"resolved" "https://registry.npmjs.org/select/-/select-1.1.2.tgz" "resolved" "https://registry.npmmirror.com/select/-/select-1.1.2.tgz"
"version" "1.1.2" "version" "1.1.2"
"selfsigned@^1.10.7": "selfsigned@^1.10.7":
@ -9667,7 +9667,7 @@
"tiny-emitter@^2.0.0": "tiny-emitter@^2.0.0":
"integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
"resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" "resolved" "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
"version" "2.1.0" "version" "2.1.0"
"tinycolor2@^1.4.1": "tinycolor2@^1.4.1":
@ -10241,7 +10241,7 @@
"resolved" "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz" "resolved" "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz"
"version" "1.9.1" "version" "1.9.1"
"vue@^2.0.0", "vue@^2.5.3", "vue@^2.6.10", "vue@^2.6.11", "vue@>=2.5.0", "vue@>=2.6.0": "vue@^2.0.0", "vue@^2.5.3", "vue@^2.6.0", "vue@^2.6.10", "vue@^2.6.11", "vue@>=2.5.0", "vue@>=2.6.0":
"integrity" "sha1-dllNh31LEiNEBuhONSdcbVFBJcU=" "integrity" "sha1-dllNh31LEiNEBuhONSdcbVFBJcU="
"resolved" "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz?cache=0&sync_timestamp=1592000011428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.11.tgz" "resolved" "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz?cache=0&sync_timestamp=1592000011428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.11.tgz"
"version" "2.6.11" "version" "2.6.11"
@ -10297,6 +10297,11 @@
"resolved" "https://registry.npm.taobao.org/vuex/download/vuex-3.4.0.tgz" "resolved" "https://registry.npm.taobao.org/vuex/download/vuex-3.4.0.tgz"
"version" "3.4.0" "version" "3.4.0"
"vxe-table@^3.6.6":
"integrity" "sha512-DKifb0ekFYCu0UkTE0r1BmkRhabnCnS1+ilnTwciuTyC/DzGfwi8s+8LjX7YMV+Jp+hr4CJubIzHPcP41M+JTg=="
"resolved" "https://registry.npmmirror.com/vxe-table/-/vxe-table-3.6.6.tgz"
"version" "3.6.6"
"warning@^4.0.0": "warning@^4.0.0":
"integrity" "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=" "integrity" "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM="
"resolved" "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz" "resolved" "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz"
@ -10306,14 +10311,14 @@
"watchpack-chokidar2@^2.0.1": "watchpack-chokidar2@^2.0.1":
"integrity" "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==" "integrity" "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww=="
"resolved" "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" "resolved" "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz"
"version" "2.0.1" "version" "2.0.1"
dependencies: dependencies:
"chokidar" "^2.1.8" "chokidar" "^2.1.8"
"watchpack@^1.7.4": "watchpack@^1.7.4":
"integrity" "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==" "integrity" "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ=="
"resolved" "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" "resolved" "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz"
"version" "1.7.5" "version" "1.7.5"
dependencies: dependencies:
"graceful-fs" "^4.1.2" "graceful-fs" "^4.1.2"
@ -10446,14 +10451,14 @@
"webpack-theme-color-replacer@1.3.18": "webpack-theme-color-replacer@1.3.18":
"integrity" "sha512-z7qM3opvuSjAyJd0eLMOpZhH56r+fFctczWG6xnhUSeRsvbCg/EnFdsYoGL3xYJZNANvwLlggpJxnAcuFV5a6Q==" "integrity" "sha512-z7qM3opvuSjAyJd0eLMOpZhH56r+fFctczWG6xnhUSeRsvbCg/EnFdsYoGL3xYJZNANvwLlggpJxnAcuFV5a6Q=="
"resolved" "https://registry.npmjs.org/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.3.18.tgz" "resolved" "https://registry.npmmirror.com/webpack-theme-color-replacer/-/webpack-theme-color-replacer-1.3.18.tgz"
"version" "1.3.18" "version" "1.3.18"
dependencies: dependencies:
"webpack-sources" "*" "webpack-sources" "*"
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.3.0", "webpack@^4.4.0", "webpack@^4.8.1", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0": "webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.3.0", "webpack@^4.4.0", "webpack@^4.8.1", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
"integrity" "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==" "integrity" "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q=="
"resolved" "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz" "resolved" "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz"
"version" "4.46.0" "version" "4.46.0"
dependencies: dependencies:
"@webassemblyjs/ast" "1.9.0" "@webassemblyjs/ast" "1.9.0"
@ -10626,6 +10631,11 @@
"resolved" "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-4.0.0.tgz" "resolved" "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-4.0.0.tgz"
"version" "4.0.0" "version" "4.0.0"
"xe-utils@^3.5.0", "xe-utils@^3.5.7":
"integrity" "sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew=="
"resolved" "https://registry.npmmirror.com/xe-utils/-/xe-utils-3.5.7.tgz"
"version" "3.5.7"
"xtend@^4.0.0", "xtend@~4.0.1": "xtend@^4.0.0", "xtend@~4.0.1":
"integrity" "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=" "integrity" "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q="
"resolved" "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz" "resolved" "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz"