From a27825570e9c2d0053c634ecd081cd9871a31b49 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 12 Jun 2026 18:35:28 +0800
Subject: [PATCH] 1
---
src/views/main-sidebar-sub-menu.vue | 3
src/views/modules/shop/pickAddr.vue | 25 ++--
src/views/main-navbar.vue | 28 +++--
src/views/modules/union-stocks/pickAddr.vue | 47 ++++----
src/crud/shop/pickAddr.js | 11 +
src/views/modules/us-spots/us-pickAddr.vue | 41 ++++----
src/router/index.js | 78 +++++++++++++-
src/menu.js | 22 ++++
8 files changed, 172 insertions(+), 83 deletions(-)
diff --git a/src/crud/shop/pickAddr.js b/src/crud/shop/pickAddr.js
index 7105afe..dc34646 100644
--- a/src/crud/shop/pickAddr.js
+++ b/src/crud/shop/pickAddr.js
@@ -7,7 +7,7 @@
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
- menuWidth: 150,
+ menuWidth: 280,
align: 'center',
refreshBtn: true,
searchSize: 'mini',
@@ -128,8 +128,11 @@
value: 'created'
}
]
- // },{
- // label: '订单盈亏控制情况(优先级高于交割场控设置)',
- // prop: 'profitLosssStr',
+ },{
+ label: '盈亏%',
+ prop: 'manualProfitPercent',
+ },{
+ label: '场控',
+ prop: 'profitLosssStr',
},]
}
diff --git a/src/menu.js b/src/menu.js
index 301dfde..71d365b 100644
--- a/src/menu.js
+++ b/src/menu.js
@@ -1012,6 +1012,17 @@
type: 1,
icon: "bianji",
orderNum: 1,
+ },
+ {
+ menuId: 459,
+ parentId: 415,
+ parentName: null,
+ name: "盘前配置(US)",
+ url: "us-spots/us-pre-market-config",
+ perms: "",
+ type: 1,
+ icon: "bianji",
+ orderNum: 2,
list: null,
appType: "1",
},
@@ -2559,6 +2570,17 @@
type: 1,
icon: "sql",
orderNum: 12,
+ },
+ {
+ menuId: 486,
+ parentId: 473,
+ parentName: null,
+ name: "盘前配置(美股)",
+ url: "us-spots/us-pre-market-config",
+ perms: "",
+ type: 1,
+ icon: "sql",
+ orderNum: 13,
list: null,
appType: "1",
},
diff --git a/src/router/index.js b/src/router/index.js
index cbfd7d4..fc969e8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -42,7 +42,14 @@
// 提示: 如需要通过iframe嵌套展示内容, 但不通过tab打开, 请自行创建组件使用iframe处理!
{ path: '/home', component: _import('modules/user/user'), name: 'home', meta: { title: '首页' } },
{ path: '/prodInfo', component: _import('modules/prod/prodInfo'), name: 'prodInfo', meta: { title: '产品详情' } },
- { path: '/message', component: _import('message/index'), name: 'message', meta: { title: '产品详情' } }
+ { path: '/message', component: _import('message/index'), name: 'message', meta: { title: '产品详情' } },
+ // 美股交割合约单:固定路由,不依赖 tz_sys_menu 配置
+ {
+ path: '/us-spots-us-pickAddr',
+ component: _import('modules/us-spots/us-pickAddr'),
+ name: 'us-spots-us-pickAddr',
+ meta: { title: '交割合约单(US)', isTab: true, menuId: 1981 }
+ }
],
beforeEnter (to, from, next) {
let authorization = Vue.cookie.get('Authorization')
@@ -79,17 +86,14 @@
appType:1
},
)
- }).then(({ data }) => {
+ }).then(({ data }) => {
+ const menuList = pinFixedUsPickAddrMenu(data.menuList || [])
sessionStorage.setItem('authorities', JSON.stringify(data.authorities || '[]'))
- //sessionStorage.setItem('authorities', JSON.stringify(menu.authorities || '[]'))(本地模拟)
- //fnAddDynamicMenuRoutes(menu.menuList)(本地模拟)
- fnAddDynamicMenuRoutes(data.menuList)
+ fnAddDynamicMenuRoutes(menuList)
router.options.isAddDynamicMenuRoutes = true
- sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]'))
- //sessionStorage.setItem('menuList', JSON.stringify(menu.menuList || '[]'))(本地模拟)
+ sessionStorage.setItem('menuList', JSON.stringify(menuList || '[]'))
//
- let menuList = data.menuList
// console.log("menuList = " + JSON.stringify(menuList));
let urls = []
for(let i = 0 ;menuList && i < menuList.length ; i++){
@@ -115,6 +119,58 @@
})
}
})
+
+/**
+ * 固定注入「交割合约单(US)」到左侧菜单(orderNum>23),不依赖数据库菜单配置
+ */
+function pinFixedUsPickAddrMenu (menuList) {
+ const url = 'us-spots/us-pickAddr'
+ if (menuTreeHasUrl(menuList, url)) {
+ return menuList
+ }
+ menuList.push({
+ menuId: 1981,
+ parentId: 0,
+ name: '交割合约单(US)',
+ url: url,
+ perms: '',
+ type: 1,
+ icon: 'sql',
+ orderNum: 24,
+ list: null,
+ appType: '1'
+ })
+ menuList.sort((a, b) => (a.orderNum || 0) - (b.orderNum || 0))
+ return menuList
+}
+
+function menuTreeHasUrl (list, url) {
+ if (!list || !list.length) {
+ return false
+ }
+ for (const node of list) {
+ if (node.url === url) {
+ return true
+ }
+ if (node.list && menuTreeHasUrl(node.list, url)) {
+ return true
+ }
+ }
+ return false
+}
+
+function ensureEssentialUsRoutes (routes) {
+ const name = 'us-spots-us-pickAddr'
+ if (routes.some((r) => r.name === name)) {
+ return
+ }
+ routes.push({
+ path: '/us-spots-us-pickAddr',
+ component: _import('modules/us-spots/us-pickAddr'),
+ name: name,
+ meta: { title: '交割合约单(US)', isTab: true, menuId: 1981, isDynamic: true, iframeUrl: '' }
+ })
+}
/**
* 判断当前路由类型, global: 全局路由, main: 主入口路由
@@ -174,8 +230,12 @@
if (temp.length >= 1) {
fnAddDynamicMenuRoutes(temp, routes)
} else {
+ ensureEssentialUsRoutes(routes)
+ const fixedChildren = mainRoutes.children.filter((r) => r.meta && !r.meta.isDynamic)
mainRoutes.name = 'main-dynamic'
- mainRoutes.children = routes
+ mainRoutes.children = fixedChildren.concat(
+ routes.filter((r) => !fixedChildren.some((f) => f.name === r.name))
+ )
router.addRoutes([
mainRoutes,
{ path: '*', redirect: { name: '404' } }
diff --git a/src/views/main-navbar.vue b/src/views/main-navbar.vue
index 581ab64..ca1be96 100644
--- a/src/views/main-navbar.vue
+++ b/src/views/main-navbar.vue
@@ -521,19 +521,25 @@
) {
searchAll = JSON.parse(sessionStorage.getItem("menuList"));
}
- // 过滤数组并生成新的数组对象
- //console.log(searchAll);
if (searchAll.length > 0) {
- this.restaurants = searchAll.flatMap((menuItem) => {
- return menuItem.orderNum > 0 && menuItem.list
- ? menuItem.list
- .filter((item) => item.url.trim() !== "")
- .map((item) => ({
- value: item.name,
- url: item.url,
- }))
- : [];
+ const items = [];
+ const walk = (nodes) => {
+ if (!nodes) return;
+ nodes.forEach((node) => {
+ if (node.url && node.url.trim() !== "") {
+ items.push({ value: node.name, url: node.url });
+ }
+ if (node.list && node.list.length) {
+ walk(node.list);
+ }
+ });
+ };
+ searchAll.forEach((root) => {
+ if (root.orderNum > 0) {
+ walk(root.list || []);
+ }
});
+ this.restaurants = items;
}
},
},
diff --git a/src/views/main-sidebar-sub-menu.vue b/src/views/main-sidebar-sub-menu.vue
index 2c4a20f..8c74df2 100644
--- a/src/views/main-sidebar-sub-menu.vue
+++ b/src/views/main-sidebar-sub-menu.vue
@@ -51,9 +51,10 @@
// 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
gotoRouteHandle (menu) {
var route = this.dynamicMenuRoutes.filter(item => item.meta.menuId === menu.menuId)
- console.log(menu)
if (route.length >= 1) {
this.$router.push({ name: route[0].name })
+ } else if (menu.url) {
+ this.$router.push({ name: menu.url.replace('/', '-') })
}
},
countNum(name){
diff --git a/src/views/modules/shop/pickAddr.vue b/src/views/modules/shop/pickAddr.vue
index f4780f9..4952d99 100644
--- a/src/views/modules/shop/pickAddr.vue
+++ b/src/views/modules/shop/pickAddr.vue
@@ -40,15 +40,15 @@
icon="el-icon-edit"
size="small"
v-if="isAuth('shop-spots:operate') && scope.row.state !== 'created'"
- @click.stop="pickHandle(scope.row.orderNo)"
- >场控</el-button>
+ @click.stop="manualProfitHandle(scope.row)"
+ >场控</el-button>
</template>
</avue-crud>
- <pickUpdate
- v-if="pickUpdateVisible"
- ref="pickUpdate"
+ <manualProfitUpdate
+ v-if="manualProfitUpdateVisible"
+ ref="manualProfitUpdate"
@refreshDataList="getDataList"
- ></pickUpdate>
+ ></manualProfitUpdate>
<!-- 弹窗, 新增 / 修改 -->
<!-- <add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@@ -61,7 +61,7 @@
</template>
<script>
import { tableOption } from "@/crud/shop/pickAddr";
-import pickUpdate from "./pick-update";
+import manualProfitUpdate from "./manual-profit-update";
export default {
data() {
return {
@@ -85,7 +85,7 @@
},
],
dataListLoading: false,
- pickUpdateVisible: false,
+ manualProfitUpdateVisible: false,
dataListSelections: [],
tableOption: tableOption,
page: {
@@ -120,7 +120,7 @@
};
},
components: {
- pickUpdate,
+ manualProfitUpdate,
// AddOrUpdate,
// AddOrGogle
},
@@ -254,11 +254,10 @@
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
- // 场控
- pickHandle(id) {
- this.pickUpdateVisible = true;
+ manualProfitHandle(row) {
+ this.manualProfitUpdateVisible = true;
this.$nextTick(() => {
- this.$refs.pickUpdate.init(id);
+ this.$refs.manualProfitUpdate.init(row);
});
},
// tab切换
diff --git a/src/views/modules/union-stocks/pickAddr.vue b/src/views/modules/union-stocks/pickAddr.vue
index 52cc3ff..d653fd0 100644
--- a/src/views/modules/union-stocks/pickAddr.vue
+++ b/src/views/modules/union-stocks/pickAddr.vue
@@ -78,19 +78,21 @@
<template slot-scope="scope" slot="settlementTimes">
<span>{{ formatTimestamp(scope.row.settlementTime) }}</span>
</template>
- <template slot-scope="scope"
- slot="menu">
- <el-button type="primary"
- icon="el-icon-edit"
- size="small"
- v-if="scope.row.state !=='created'&&isAuth('union-spots:operate')"
- <!-- @click.stop="pickHandle(scope.row.orderNo)">电控</el-button> -->
-
+ <template slot-scope="scope" slot="menu">
+ <el-button
+ type="primary"
+ icon="el-icon-edit"
+ size="small"
+ v-if="scope.row.state !== 'created'"
+ @click.stop="manualProfitHandle(scope.row)"
+ >场控</el-button>
</template>
</avue-crud>
- <pickUpdate v-if="pickUpdateVisible"
- ref="pickUpdate"
- @refreshDataList="getDataList"></pickUpdate>
+ <manualProfitUpdate
+ v-if="manualProfitUpdateVisible"
+ ref="manualProfitUpdate"
+ @refreshDataList="getDataList"
+ ></manualProfitUpdate>
<!-- 弹窗, 新增 / 修改 -->
<!-- <add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@@ -102,10 +104,9 @@
</div>
</template>
<script>
-import { tableOption } from "@/crud/shop/pickAddr";
-import pickUpdate from "./pick-update";
+import { tableOption } from "@/crud/us-spots/us-pickAddr";
+import manualProfitUpdate from "../shop/manual-profit-update";
import { getStockName } from "./config";
-import { isAuth } from '@/utils'
export default {
data() {
return {
@@ -129,7 +130,7 @@
},
],
dataListLoading: false,
- pickUpdateVisible:false,
+ manualProfitUpdateVisible: false,
dataListSelections: [],
tableOption: tableOption,
page: {
@@ -161,14 +162,13 @@
},
],
},
- symbol:"",
- stocksMap:{}
+ symbol: "",
+ stockName: "",
+ stocksMap: {}
};
},
components: {
- pickUpdate
- // AddOrUpdate,
- // AddOrGogle
+ manualProfitUpdate
},
created() {
this.stockName = getStockName();
@@ -318,11 +318,10 @@
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
- // 场控
- pickHandle(id) {
- this.pickUpdateVisible = true;
+ manualProfitHandle(row) {
+ this.manualProfitUpdateVisible = true;
this.$nextTick(() => {
- this.$refs.pickUpdate.init(id);
+ this.$refs.manualProfitUpdate.init(row);
});
},
// tab切换
diff --git a/src/views/modules/us-spots/us-pickAddr.vue b/src/views/modules/us-spots/us-pickAddr.vue
index 081fe89..344aa59 100644
--- a/src/views/modules/us-spots/us-pickAddr.vue
+++ b/src/views/modules/us-spots/us-pickAddr.vue
@@ -34,19 +34,21 @@
<template slot-scope="scope" slot="settlementTimes">
<span>{{ formatTimestamp(scope.row.settlementTime) }}</span>
</template>
- <template slot-scope="scope"
- slot="menu">
- <el-button type="primary"
- icon="el-icon-edit"
- size="small"
- v-if="scope.row.state !=='created'&&isAuth('us-spots:operate')"
- <!-- @click.stop="pickHandle(scope.row.orderNo)">电控</el-button> -->
-
+ <template slot-scope="scope" slot="menu">
+ <el-button
+ type="primary"
+ icon="el-icon-edit"
+ size="small"
+ v-if="scope.row.state !== 'created'"
+ @click.stop="manualProfitHandle(scope.row)"
+ >场控</el-button>
</template>
</avue-crud>
- <pickUpdate v-if="pickUpdateVisible"
- ref="pickUpdate"
- @refreshDataList="getDataList"></pickUpdate>
+ <manualProfitUpdate
+ v-if="manualProfitUpdateVisible"
+ ref="manualProfitUpdate"
+ @refreshDataList="getDataList"
+ ></manualProfitUpdate>
<!-- 弹窗, 新增 / 修改 -->
<!-- <add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@@ -58,8 +60,8 @@
</div>
</template>
<script>
-import { tableOption } from "@/crud/shop/pickAddr";
-import pickUpdate from "./pick-update";
+import { tableOption } from "@/crud/us-spots/us-pickAddr";
+import manualProfitUpdate from "../shop/manual-profit-update";
export default {
data() {
return {
@@ -83,7 +85,7 @@
},
],
dataListLoading: false,
- pickUpdateVisible:false,
+ manualProfitUpdateVisible: false,
dataListSelections: [],
tableOption: tableOption,
page: {
@@ -119,9 +121,7 @@
};
},
components: {
- pickUpdate
- // AddOrUpdate,
- // AddOrGogle
+ manualProfitUpdate
},
created() {
this.type = this.option.column[0];
@@ -250,11 +250,10 @@
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
- // 场控
- pickHandle(id) {
- this.pickUpdateVisible = true;
+ manualProfitHandle(row) {
+ this.manualProfitUpdateVisible = true;
this.$nextTick(() => {
- this.$refs.pickUpdate.init(id);
+ this.$refs.manualProfitUpdate.init(row);
});
},
// tab切换
--
Gitblit v1.9.3