From 5953113240802cd0545fb94e6c4e6d413ece74cc Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 24 三月 2026 11:50:07 +0800
Subject: [PATCH] WMS新增缺失前端页面并接入路由
---
Code/WMS/WIDESEA_WMSClient/src/extension/stock/stock.js | 41 ++
Code/WMS/WIDESEA_WMSClient/src/router/viewGird.js | 22 +
Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Tenant.js | 41 ++
Code/WMS/WIDESEA_WMSClient/.yarn/install-state.gz | 0
.omc/sessions/e6b9225b-2892-4ba9-8585-7ee1b6e2ef6f.json | 8
Code/WMS/WIDESEA_WMSClient/src/views/system/PDA.vue | 128 +++++++
/dev/null | 1
Code/WMS/AGENTS.md | 10
Code/WMS/WIDESEA_WMSClient/src/views/outbound/outStockLockInfo.vue | 134 +++++++
Code/WMS/WIDESEA_WMSClient/src/extension/outbound/outStockLockInfo.js | 41 ++
Code/WMS/WIDESEA_WMSClient/src/views/system/Sys_Tenant.vue | 102 +++++
Code/WCS/WIDESEAWCS_Client/src/views/Index.vue | 220 +++++++----
Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json | 182 ++++++++++
Code/WMS/WIDESEA_WMSClient/src/views/stock/stock.vue | 111 ++++++
14 files changed, 951 insertions(+), 90 deletions(-)
diff --git a/.omc/sessions/e6b9225b-2892-4ba9-8585-7ee1b6e2ef6f.json b/.omc/sessions/e6b9225b-2892-4ba9-8585-7ee1b6e2ef6f.json
new file mode 100644
index 0000000..3611296
--- /dev/null
+++ b/.omc/sessions/e6b9225b-2892-4ba9-8585-7ee1b6e2ef6f.json
@@ -0,0 +1,8 @@
+{
+ "session_id": "e6b9225b-2892-4ba9-8585-7ee1b6e2ef6f",
+ "ended_at": "2026-03-24T03:25:50.783Z",
+ "reason": "other",
+ "agents_spawned": 0,
+ "agents_completed": 0,
+ "modes_used": []
+}
\ No newline at end of file
diff --git a/.omc/state/hud-state.json b/.omc/state/hud-state.json
deleted file mode 100644
index c1a86d9..0000000
--- a/.omc/state/hud-state.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "timestamp": "2026-03-24T02:39:49.050Z",
- "backgroundTasks": [],
- "sessionStartTimestamp": "2026-03-24T02:33:23.593Z",
- "sessionId": "4cd1f4b9-ad6a-4b8f-8a01-8260579d1f66"
-}
\ No newline at end of file
diff --git a/.omc/state/hud-stdin-cache.json b/.omc/state/hud-stdin-cache.json
deleted file mode 100644
index e02c35e..0000000
--- a/.omc/state/hud-stdin-cache.json
+++ /dev/null
@@ -1 +0,0 @@
-{"session_id":"4cd1f4b9-ad6a-4b8f-8a01-8260579d1f66","transcript_path":"C:\\Users\\29028\\.claude\\projects\\D--Git-ShanMeiXinNengYuan-Code-WMS\\4cd1f4b9-ad6a-4b8f-8a01-8260579d1f66.jsonl","cwd":"D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS","model":{"id":"glm-4.7","display_name":"glm-4.7"},"workspace":{"current_dir":"D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS","project_dir":"D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS","added_dirs":[]},"version":"2.1.72","output_style":{"name":"default"},"cost":{"total_cost_usd":1.441715,"total_duration_ms":453632,"total_api_duration_ms":376045,"total_lines_added":298,"total_lines_removed":110},"context_window":{"total_input_tokens":153210,"total_output_tokens":8441,"context_window_size":200000,"current_usage":{"input_tokens":3040,"output_tokens":292,"cache_creation_input_tokens":0,"cache_read_input_tokens":96384},"used_percentage":50,"remaining_percentage":50},"exceeds_200k_tokens":false}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json b/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json
new file mode 100644
index 0000000..729851a
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json
@@ -0,0 +1,182 @@
+{
+ "version": "1.0.0",
+ "lastScanned": 1774322743799,
+ "projectRoot": "d:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Client",
+ "techStack": {
+ "languages": [
+ {
+ "name": "JavaScript/TypeScript",
+ "version": null,
+ "confidence": "high",
+ "markers": [
+ "package.json"
+ ]
+ }
+ ],
+ "frameworks": [
+ {
+ "name": "vue",
+ "version": "3.2.37",
+ "category": "frontend"
+ },
+ {
+ "name": "vite",
+ "version": "5.0.0",
+ "category": "build"
+ }
+ ],
+ "packageManager": "pnpm",
+ "runtime": null
+ },
+ "build": {
+ "buildCommand": "pnpm build",
+ "testCommand": null,
+ "lintCommand": "pnpm lint",
+ "devCommand": null,
+ "scripts": {
+ "serve": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint --ext .js,.vue src"
+ }
+ },
+ "conventions": {
+ "namingStyle": null,
+ "importStyle": null,
+ "testPattern": null,
+ "fileOrganization": "type-based"
+ },
+ "structure": {
+ "isMonorepo": false,
+ "workspaces": [],
+ "mainDirectories": [
+ "public",
+ "src",
+ "tests"
+ ],
+ "gitBranches": {
+ "defaultBranch": "master",
+ "branchingStrategy": null
+ }
+ },
+ "customNotes": [],
+ "directoryMap": {
+ "config": {
+ "path": "config",
+ "purpose": "Configuration files",
+ "fileCount": 1,
+ "lastAccessed": 1774322743642,
+ "keyFiles": [
+ "buttons.js"
+ ]
+ },
+ "dist": {
+ "path": "dist",
+ "purpose": "Distribution/build output",
+ "fileCount": 3,
+ "lastAccessed": 1774322743642,
+ "keyFiles": [
+ "index.html",
+ "wcslogo.png",
+ "wms_d.png"
+ ]
+ },
+ "public": {
+ "path": "public",
+ "purpose": "Public files",
+ "fileCount": 3,
+ "lastAccessed": 1774322743680,
+ "keyFiles": [
+ "index.html",
+ "wcslogo.png",
+ "wms_d.png"
+ ]
+ },
+ "src": {
+ "path": "src",
+ "purpose": "Source code",
+ "fileCount": 2,
+ "lastAccessed": 1774322743680,
+ "keyFiles": [
+ "App.vue",
+ "main.js"
+ ]
+ },
+ "tests": {
+ "path": "tests",
+ "purpose": "Test files",
+ "fileCount": 0,
+ "lastAccessed": 1774322743682,
+ "keyFiles": []
+ },
+ "dist\\assets": {
+ "path": "dist\\assets",
+ "purpose": "Static assets",
+ "fileCount": 80,
+ "lastAccessed": 1774322743684,
+ "keyFiles": [
+ "401-D9QhAVFF.js",
+ "404-DCIcd6re.js",
+ "Audit-C52MvHzW.css"
+ ]
+ },
+ "dist\\static": {
+ "path": "dist\\static",
+ "purpose": "Static files",
+ "fileCount": 1,
+ "lastAccessed": 1774322743684,
+ "keyFiles": [
+ "login_bg.png"
+ ]
+ },
+ "public\\static": {
+ "path": "public\\static",
+ "purpose": "Static files",
+ "fileCount": 1,
+ "lastAccessed": 1774322743685,
+ "keyFiles": [
+ "login_bg.png"
+ ]
+ },
+ "src\\api": {
+ "path": "src\\api",
+ "purpose": "API routes",
+ "fileCount": 3,
+ "lastAccessed": 1774322743686,
+ "keyFiles": [
+ "http.js",
+ "permission.js",
+ "useTest.js"
+ ]
+ },
+ "src\\assets": {
+ "path": "src\\assets",
+ "purpose": "Static assets",
+ "fileCount": 1,
+ "lastAccessed": 1774322743687,
+ "keyFiles": [
+ "logo.png"
+ ]
+ },
+ "src\\components": {
+ "path": "src\\components",
+ "purpose": "UI components",
+ "fileCount": 0,
+ "lastAccessed": 1774322743688,
+ "keyFiles": []
+ },
+ "src\\views": {
+ "path": "src\\views",
+ "purpose": "View templates",
+ "fileCount": 3,
+ "lastAccessed": 1774322743689,
+ "keyFiles": [
+ "Home.vue",
+ "Index.vue",
+ "Login.vue"
+ ]
+ }
+ },
+ "hotPaths": [],
+ "userDirectives": []
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/Index.vue b/Code/WCS/WIDESEAWCS_Client/src/views/Index.vue
index 553d045..68fe0a1 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/views/Index.vue
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/Index.vue
@@ -59,25 +59,25 @@
<span style="display: none">{{ navIndex }}</span>
</el-tab-pane>
</el-tabs>
- <!-- 鍙抽敭鑿滃崟 -->
+ <!-- 閸欐娊鏁懣婊冨礋 -->
<div v-show="contextMenuVisible">
<ul :style="{ left: menuLeft + 'px', top: menuTop + 'px' }" class="contextMenu">
<li v-show="visibleItem.all">
<el-button link @click="closeTabs()">
<i class="el-icon-close"></i>
{{
- navigation.length == 2 ? "鍏抽棴鑿滃崟" : "鍏抽棴鎵�鏈�"
+ navigation.length == 2 ? "閸忔娊妫撮懣婊冨礋" : "閸忔娊妫撮幍鈧張?
}}</el-button>
</li>
<li v-show="visibleItem.left">
- <el-button link @click="closeTabs('left')"><i class="el-icon-back"></i>鍏抽棴宸﹁竟</el-button>
+ <el-button link @click="closeTabs('left')"><i class="el-icon-back"></i>閸忔娊妫村锕佺珶</el-button>
</li>
<li v-show="visibleItem.right">
<el-button link @click="closeTabs('right')">
- <i class="el-icon-right"></i>鍏抽棴鍙宠竟</el-button>
+ <i class="el-icon-right"></i>閸忔娊妫撮崣瀹犵珶</el-button>
</li>
<li v-show="visibleItem.other">
- <el-button link @click="closeTabs('other')"><i class="el-icon-right"></i>鍏抽棴鍏朵粬
+ <el-button link @click="closeTabs('other')"><i class="el-icon-right"></i>閸忔娊妫撮崗鏈电铂
</el-button>
</li>
</ul>
@@ -96,7 +96,7 @@
</el-scrollbar>
</div>
</div>
- <el-drawer title="閫夋嫨涓婚" v-model="drawer_model" direction="rtl" destroy-on-close>
+ <el-drawer title="闁瀚ㄦ稉濠氼暯" v-model="drawer_model" direction="rtl" destroy-on-close>
<div class="theme-selector">
<div @click="changeTheme(item.name)" class="item" v-for="(item, index) in theme_color" :key="index"
:style="{ background: item.color }">
@@ -107,7 +107,7 @@
</div>
</el-drawer>
- <el-drawer title="娑堟伅鍒楄〃" v-model="messageModel" direction="rtl" destroy-on-close>
+ <el-drawer title="濞戝牊浼呴崚妤勩��" v-model="messageModel" direction="rtl" destroy-on-close>
<Message :list="messageList"></Message>
</el-drawer>
</div>
@@ -151,14 +151,14 @@
otherTabs: true,
menuLeft: 0,
menuTop: 0,
- // contextMenuVisible: false, // 鍙抽敭鍏抽棴鏄�/闅�
+ // contextMenuVisible: false, // 閸欐娊鏁崗鎶芥4閺�?闂�?
};
},
setup(props, context) {
- // 鑾峰彇鍏ㄥ眬灞炴�у拰鏂规硶
+ // 閼惧嘲褰囬崗銊ョ湰鐏炵偞鈧冩嫲閺傝纭�
const { proxy } = getCurrentInstance();
- // 鑿滃崟瀵艰埅榛樿瀹藉害
+ // 閼挎粌宕熺�佃壈鍩呮妯款吇鐎硅棄瀹�
const menuWidth = ref(200);
const contextMenuVisible = ref(false);
const isCollapse = ref(false);
@@ -178,23 +178,23 @@
]);
const links = ref([
// {
- // text: "妗嗘灦瑙嗛",
+ // text: "濡楀棙鐏︾憴鍡涱暥",
// path: "https://www.cctalk.com/m/group/90268531",
// id: -3,
// },
- // { text: "澶у睆鏁版嵁", path: "/bigdata", id: -3 },
+ // { text: "婢堆冪潌閺佺増宓�", path: "/bigdata", id: -3 },
// {
- // text: "妗嗘灦鏂囨。",
+ // text: "濡楀棙鐏﹂弬鍥ㄣ��",
// path: "http://v2.volcore.xyz/document/guide",
// id: -2,
// }, {
- // text: "妗嗘灦浼佷笟鐗�",
+ // text: "濡楀棙鐏︽导浣风瑹閻�?,
// path: "http://pro.volcore.xyz/",
// id: 10,
// },
- { text: "涓汉涓績", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
+ { text: "娑擃亙姹夋稉顓炵妇", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
{
- text: "瀹夊叏閫�鍑�",
+ text: "鐎瑰鍙忛柅鈧崙?,
path: "/login",
id: -4,
icon: "el-icon-switch-button",
@@ -204,9 +204,9 @@
'this.src="' + errorImgSrc + '"'
);
const selectId = ref("1");
- // 銆愰椤点�戞爣绛惧簭鍙�(褰撳墠鍙抽敭閫変腑鐨勮彍鍗�)
+ // 閵嗘劙顩绘い鐐光偓鎴炵垼缁涙儳绨崣?瑜版挸澧犻崣鎶芥暛闁鑵戦惃鍕綅閸�?
const selectMenuIndex = ref("0");
- //2022.05.29澧炲姞tab閫夐」涓庤彍鍗曡仈鍔ㄥ姛鑳�
+ //2022.05.29婢х偛濮瀟ab闁銆嶆稉搴ゅ綅閸楁洝浠堥崝銊ュ閼�?
const currentMenuId = ref(0);
const userName = ref("--");
const userInfo = ref({});
@@ -218,7 +218,7 @@
});
const userImg = ref("");
const navigation = reactive([
- { orderNo: "0", id: "1", name: "棣栭〉", path: "/home" },
+ { orderNo: "0", id: "1", name: "妫f牠銆�", path: "/home" },
]);
const logo = ref(imgUrl);
const theme = ref("blue2");
@@ -231,7 +231,7 @@
isCollapse.value = !isCollapse.value;
menuWidth.value = isCollapse.value ? 63 : 200;
};
- //2021.08.28寮�鏀炬墜鍔ㄦ姌鍙犺彍鍗曟柟娉�
+ //2021.08.28瀵偓閺�鐐閸斻劍濮岄崣鐘哄綅閸楁洘鏌熷▔?
_config.menu = {
show() {
toggleLeft();
@@ -247,14 +247,14 @@
localStorage.setItem("vol3_theme", name);
};
const to = (item) => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
if (item.path.indexOf("http") != -1) {
window.open(item.path);
return;
}
if (typeof item == "string" || item.path == "/login") {
if (item == "/login" || item.path == "/login") {
- //纭鏄惁閫�鍑�
+ //绾喛顓婚弰顖氭儊闁偓閸�?
store.commit("clearUserInfo", "");
window.location.href = "/";
return;
@@ -266,59 +266,59 @@
open(item);
};
const open = (item, useRoute) => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
let _index = navigation.findIndex((x) => {
return x.path == item.path;
});
if (_index == -1) {
navigation.push({
- // orderNo: String(navigation.length),// 搴忓彿
+ // orderNo: String(navigation.length),// 鎼村繐褰�
id: item.id + "",
- name: item.name || item.text || "鏃犳爣棰�",
+ name: item.name || item.text || "閺冪姵鐖f0?,
path: item.path,
- query: item.query, //2021.03.20淇鑷畾涔変簩娆℃墦寮�$tabs鏃跺弬鏁颁涪澶辩殑闂
+ query: item.query, //2021.03.20娣囶喖顦查懛顏勭暰娑斿绨╁▎鈩冨ⅵ瀵偓$tabs閺冭泛寮弫棰佹丢婢惰京娈戦梻顕�顣�
});
- //鏂版墦寮�鐨則ab绉昏嚦鏈�鍚庝竴涓�夐」
+ //閺傜増澧﹀鈧惃鍓嘺b缁夋槒鍤﹂張鈧崥搴濈娑擃亪鈧銆�
selectId.value = navigation.length - 1 + "";
} else {
selectId.value = _index + "";
}
if (useRoute === undefined) {
- //闈炴爣鍑嗚彍鍗曪紝璁板綍鏈�鍚庝竴娆¤烦杞殑椤甸潰锛岀敤浜庡埛鏂�
+ //闂堢偞鐖i崙鍡氬綅閸楁洩绱濈拋鏉跨秿閺堚偓閸氬簼绔村▎陇鐑︽潪顒傛畱妞ょ敻娼伴敍宀�鏁ゆ禍搴″煕閺�?
setItem(item);
router.push(item);
// this.$router.push(item);
}
currentMenuId.value = item.id * 1;
- // tab鑿滃崟缁戝畾鍙抽敭浜嬩欢
+ // tab閼挎粌宕熺紒鎴濈暰閸欐娊鏁禍瀣╂
proxy.$nextTick(function (e) {
proxy.bindRightClickMenu(true);
});
};
const close = (path) => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
let index = navigation.findIndex((x) => {
return x.path == path;
});
if (index == -1) {
- return _config.$Message.error("鏈壘鍒拌彍鍗�");
+ return _config.$Message.error("閺堫亝澹橀崚鎷屽綅閸�?);
}
removeNav(index);
};
const setItem = (item) => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
localStorage.setItem(
window.location.origin + "_tabs",
JSON.stringify(item)
);
};
const getItem = () => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
let nav = localStorage.getItem(window.location.origin + "_tabs");
return nav ? JSON.parse(nav) : null;
};
const selectNav = (item) => {
- //鍗囩骇element姝e紡鐗堜慨鏀�
+ //閸楀洨楠噀lement濮濓絽绱¢悧鍫滄叏閺�?
selectId.value = item.props.name;
let _path = navigation[item.index].path;
currentMenuId.value = (
@@ -335,13 +335,13 @@
const removeNav = (_index) => {
return new Promise(() => {
- //鍏抽棴鐨勫綋鍓嶉」,璺宠浆鍒板墠涓�涓〉闈�
+ //閸忔娊妫撮惃鍕秼閸撳秹銆�,鐠哄疇娴嗛崚鏉垮娑撯偓娑擃亪銆夐棃?
if (selectId.value == _index + "") {
console.log(navigation[_index - 1]);
setItem(navigation[_index - 1]);
router.push({
path: navigation[_index - 1].path,
- //2022.06.27淇tabs浜屾鍒囨崲鍚庡弬鏁颁涪澶辩殑闂
+ //2022.06.27娣囶喖顦瞭abs娴滃本顐奸崚鍥ㄥ床閸氬骸寮弫棰佹丢婢惰京娈戦梻顕�顣�
query: navigation[_index - 1].query,
});
navigation.splice(_index, 1);
@@ -366,28 +366,28 @@
});
};
const onSelect = (treeId) => {
- /* 2020.07.31澧炲姞鎵嬪姩鎵撳紑tabs*/
+ /* 2020.07.31婢х偛濮為幍瀣З閹垫挸绱憈abs*/
var item = getSelectMenuName(treeId);
open(item, false);
};
/**
- * 鏄剧ず鍙抽敭鑿滃崟
- * @param {*} e 浜嬩欢瀵硅薄
+ * 閺勫墽銇氶崣鎶芥暛閼挎粌宕�
+ * @param {*} e 娴滃娆㈢�电钖�
*/
const openTabsMenu = function (e) {
- e.preventDefault(); // 闃叉榛樿鑿滃崟寮瑰嚭
+ e.preventDefault(); // 闂冨弶顒涙妯款吇閼挎粌宕熷鐟板毉
let tabId = e.target.id.split("-")[1] * 1;
- //璁板綍褰撳墠閫変腑鐨勮彍鍗昳ndex
+ //鐠佹澘缍嶈ぐ鎾冲闁鑵戦惃鍕綅閸楁槼ndex
selectMenuIndex.value =
document.getElementById("pane-" + tabId).children[0].textContent * 1;
- //鍙湁棣栭〉鏃朵笉鏄剧ず
+ //閸欘亝婀佹#鏍�夐弮鏈电瑝閺勫墽銇�
if (navigation.length == 1) {
return;
}
- //棣栭〉璁剧疆鏄剧ず鍏抽棴鍙宠竟鑿滃崟
+ //妫f牠銆夌拋鍓х枂閺勫墽銇氶崗鎶芥4閸欏疇绔熼懣婊冨礋
if (!selectMenuIndex.value) {
visibleItem.all = false;
visibleItem.right = true;
@@ -395,22 +395,22 @@
visibleItem.other = false;
} else {
visibleItem.all = true;
- //涓嶆槸鏈�鍚庝竴涓樉绀哄叧闂彸杈硅彍鍗�
+ //娑撳秵妲搁張鈧崥搴濈娑擃亝妯夌粈鍝勫彠闂傤厼褰告潏纭呭綅閸�?
visibleItem.right = selectMenuIndex.value != navigation.length - 1;
- //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴宸﹁竟
+ //閸欘亝婀佹稉銈勯嚋閼挎粌宕熼弮鏈电瑝閺勫墽銇氶崗鎶芥4瀹革箒绔�
visibleItem.left = navigation.length != 2;
- //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴鍏朵粬
+ //閸欘亝婀佹稉銈勯嚋閼挎粌宕熼弮鏈电瑝閺勫墽銇氶崗鎶芥4閸忔湹绮�
visibleItem.other = navigation.length != 2;
}
contextMenuVisible.value = true;
- // 璁剧疆鍙抽敭鑿滃崟鏄剧ず鐨勪綅缃�
+ // 鐠佸墽鐤嗛崣鎶芥暛閼挎粌宕熼弰鍓с仛閻ㄥ嫪缍呯純?
proxy.menuLeft =
e.target.getBoundingClientRect().left - (isCollapse.value ? 63 : 198); //-e.target.clientWidth
proxy.menuTop = 36;
};
/**
- * 鍏抽棴鍙抽敭鑿滃崟
+ * 閸忔娊妫撮崣鎶芥暛閼挎粌宕�
*/
const closeTabsMenu = () => {
contextMenuVisible.value = false;
@@ -422,25 +422,25 @@
});
};
/**
- * 鍏抽棴鍏跺畠鏍囩椤�
- * @param {*} par 鍏抽棴绫诲瀷(left,right,other)
+ * 閸忔娊妫撮崗璺虹暊閺嶅洨顒锋い?
+ * @param {*} par 閸忔娊妫寸猾璇茬��(left,right,other)
*/
const closeTabs = (value) => {
let _menuId = navigation[selectId.value * 1].id;
let currnetIndex = selectId.value * 1; // navigation.findIndex(c => { return c.id == selectId.value });
switch (value) {
case "left": {
- // 鍒犻櫎宸︿晶tab鏍囩
- navigation.splice(1, currnetIndex - 1); // 鍒犻櫎宸︿晶tab鏍囩
+ // 閸掔娀娅庡锔挎櫠tab閺嶅洨顒�
+ navigation.splice(1, currnetIndex - 1); // 閸掔娀娅庡锔挎櫠tab閺嶅洨顒�
break;
}
case "right": {
- // 鍒犻櫎鍙充晶tab鏍囩
+ // 閸掔娀娅庨崣鍏呮櫠tab閺嶅洨顒�
if (selectMenuIndex.value == 0) {
- navigation.splice(currnetIndex); // 鍒犻櫎鍙充晶tab鏍囩
+ navigation.splice(currnetIndex); // 閸掔娀娅庨崣鍏呮櫠tab閺嶅洨顒�
toHome();
} else {
- navigation.splice(currnetIndex + 1); // 鍒犻櫎鍙充晶tab鏍囩
+ navigation.splice(currnetIndex + 1); // 閸掔娀娅庨崣鍏呮櫠tab閺嶅洨顒�
if (selectMenuIndex.value < currnetIndex) {
navigation.splice(
selectMenuIndex.value,
@@ -451,13 +451,13 @@
break;
}
case "other": {
- // 鍒犻櫎鍏朵粬鎵�鏈塼ab鏍囩
- navigation.splice(currnetIndex + 1); // 鍒犻櫎鍙充晶tab鏍囩(杩欓噷蹇呴』鎸夌収鍙斥啋宸﹂『搴忓垹闄�)
- navigation.splice(1, currnetIndex - 1); // 鍒犻櫎宸︿晶tab鏍囩
+ // 閸掔娀娅庨崗鏈电铂閹碘偓閺堝〖ab閺嶅洨顒�
+ navigation.splice(currnetIndex + 1); // 閸掔娀娅庨崣鍏呮櫠tab閺嶅洨顒�(鏉╂瑩鍣疯箛鍛淬�忛幐澶屽弾閸欐枼鍟嬪锕傘�庢惔蹇撳灩闂�?
+ navigation.splice(1, currnetIndex - 1); // 閸掔娀娅庡锔挎櫠tab閺嶅洨顒�
break;
}
default: {
- //鍏抽棴鎵�鏈�
+ //閸忔娊妫撮幍鈧張?
navigation.splice(1, navigation.length);
toHome();
break;
@@ -473,7 +473,7 @@
watch(
() => contextMenuVisible.value,
(newVal, oldVal) => {
- // 鐩戣
+ // 閻╂垼顫�
if (newVal) {
document.body.addEventListener("click", closeTabsMenu);
} else {
@@ -483,8 +483,63 @@
);
/**
- * 绯荤粺鍒涘缓寮�濮�
+ * 缁崵绮洪崚娑樼紦瀵偓婵�?
*/
+ /**
+ * 鏂规硶鐩殑锛氳ˉ榻愬悗绔彍鍗曟湭閰嶇疆鏃剁殑鏂伴〉闈㈠叆鍙o紝閬垮厤鏂板椤甸潰鏃犲叆鍙c��
+ * 鍙傛暟鍚箟锛歞ata 涓哄悗绔繑鍥炵殑鑿滃崟鏁扮粍銆�
+ * 杩斿洖鍊硷細杩斿洖琛ラ綈鍚庣殑鑿滃崟鏁扮粍銆�
+ * 鍏抽敭閫昏緫锛氫粎鍦ㄨ彍鍗曚腑涓嶅瓨鍦ㄧ浉鍚� url 鏃惰拷鍔犻粯璁よ彍鍗曪紝閬垮厤瑕嗙洊宸叉湁閰嶇疆銆�
+ * 寮傚父澶勭悊锛氳鏂规硶浠呮搷浣滃唴瀛樻暟鎹紝涓嶆秹鍙婂閮ㄨ皟鐢紝寮傚父鐢变笂灞傛祦绋嬬粺涓�鎹曡幏銆�
+ */
+ const ensureBuiltinMenus = (data) => {
+ const menus = Array.isArray(data) ? data : [];
+ const exists = (url) => menus.some((m) => (m.url || "") === url);
+ const maxId = menus.reduce((max, item) => {
+ const current = Number(item.id);
+ return Number.isFinite(current) ? Math.max(max, current) : max;
+ }, 0);
+
+ const defaultMenus = [
+ {
+ id: maxId + 1001,
+ name: "绉熸埛绠$悊",
+ url: "/Sys_Tenant",
+ parentId: 0,
+ icon: "el-icon-office-building",
+ enable: 1,
+ tableName: "Sys_Tenant",
+ permission: ["Search", "Add", "Update", "Delete"],
+ },
+ {
+ id: maxId + 1002,
+ name: "浠诲姟鍘嗗彶",
+ url: "/taskHty",
+ parentId: 0,
+ icon: "el-icon-time",
+ enable: 1,
+ tableName: "taskHty",
+ permission: ["Search", "Export"],
+ },
+ {
+ id: maxId + 1003,
+ name: "璋冨害鎺у埗",
+ url: "/scheduler",
+ parentId: 0,
+ icon: "el-icon-video-play",
+ enable: 1,
+ tableName: "scheduler",
+ permission: ["Search", "Update"],
+ },
+ ];
+
+ defaultMenus.forEach((menu) => {
+ if (!exists(menu.url)) {
+ menus.push(menu);
+ }
+ });
+ return menus;
+ };
const created = () => {
let _theme = localStorage.getItem("vol3_theme");
if (_theme) {
@@ -501,7 +556,8 @@
Object.assign(_config.$tabs, { open: open, close: close });
http.get("api/Sys_Menu/getTreeMenu", {}, true).then((data) => {
- data.push({ id: "1", name: "棣栭〉", url: "/home" }); // 涓轰簡鑾峰彇閫変腑id浣跨敤
+ data = ensureBuiltinMenus(data);
+ data.push({ id: "1", name: "妫f牠銆�", url: "/home" }); // 娑撹桨绨¢懢宄板絿闁鑵慽d娴h法鏁�
data.forEach((d) => {
d.path = (d.url || "").replace("/Manager", "");
d.to = (d.url || "").replace("/Manager", "");
@@ -513,7 +569,7 @@
menuOptions.value = data;
permissionInited.value = true;
- //寮�鍚秷鎭帹閫侊紙main.js涓缃槸鍚﹀紑鍚痵ignalR锛�2022.05.05
+ //瀵偓閸氼垱绉烽幁顖涘腹闁緤绱檓ain.js娑擃叀顔曠純顔芥Ц閸氾箑绱戦崥鐥礽gnalR閿�?022.05.05
if (_config.$global.signalR) {
MessageConfig(http, (result) => {
messageList.unshift(result);
@@ -521,18 +577,18 @@
});
}
- //褰撳墠鍒锋柊鏄笉鏄椤�
+ //瑜版挸澧犻崚閿嬫煀閺勵垯绗夐弰顖烆浕妞�?
if (router.currentRoute.value.path != navigation[0].path) {
- //鏌ユ壘绯荤粺鑿滃崟
+ //閺屻儲澹樼化鑽ょ埠閼挎粌宕�
let item = menuOptions.value.find((x) => {
return x.path == router.currentRoute.value.path; //this.$route.path;
});
if (item) return onSelect(item.id);
- //鏌ユ壘椤堕儴蹇嵎杩炴帴
+ //閺屻儲澹樻い鍫曞劥韫囶偅宓庢潻鐐村复
item = links.value.find((x) => {
return x.path == router.currentRoute.value.path; //this.$route.path;
});
- //鏌ユ壘鏈�鍚庝竴娆¤烦杞殑椤甸潰
+ //閺屻儲澹橀張鈧崥搴濈濞喡ょ儲鏉烆剛娈戞い鐢告桨
if (!item) {
item = getItem();
}
@@ -579,7 +635,7 @@
};
},
/**
- * 鎸傝浇閽╁瓙鍑芥暟
+ * 閹稿倽娴囬柦鈺佺摍閸戣姤鏆�
*/
mounted() {
let _date = showTime();
@@ -594,14 +650,14 @@
methods: {
/**
- * 缁戝畾鍙抽敭浜嬩欢
- * @param {*} enable 鏄惁鍚敤鍙抽敭浜嬩欢[true:鍚敤;false:绂佺敤;]
- * @param {*} $event 浜嬩欢
+ * 缂佹垵鐣鹃崣鎶芥暛娴滃娆�
+ * @param {*} enable 閺勵垰鎯侀崥顖滄暏閸欐娊鏁禍瀣╂[true:閸氼垳鏁�;false:缁備胶鏁�;]
+ * @param {*} $event 娴滃娆�
*/
bindRightClickMenu(enable) {
if (!enable) return;
let that = this;
- // 浣跨敤鍘熺敓js 涓哄崟涓猟om缁戝畾榧犳爣鍙冲嚮浜嬩欢
+ // 娴h法鏁ら崢鐔烘晸js 娑撳搫宕熸稉鐚無m缂佹垵鐣炬Η鐘崇垼閸欏啿鍤禍瀣╂
that.$nextTick(() => {
let tab_top_dom = Object.assign(
[],
@@ -615,7 +671,7 @@
},
/**
- * 閿�姣侀挬瀛愬嚱鏁�
+ * 闁库偓濮d線鎸�涙劕鍤遍弫?
*/
destroyed() {
$this = null;
@@ -623,13 +679,13 @@
},
});
const week = new Array(
- "鏄熸湡涓�",
- "鏄熸湡浜�",
- "鏄熸湡涓�",
- "鏄熸湡鍥�",
- "鏄熸湡浜�",
- "鏄熸湡鍏�",
- "鏄熸湡鏃�"
+ "閺勭喐婀℃稉鈧�",
+ "閺勭喐婀℃禍?,
+ "閺勭喐婀℃稉?,
+ "閺勭喐婀¢崶?,
+ "閺勭喐婀℃禍?,
+ "閺勭喐婀¢崗?,
+ "閺勭喐婀¢弮?
);
function showTime() {
let date = new Date();
@@ -645,7 +701,7 @@
"." +
(month < 10 ? "0" + month : month) +
"." +
- (day < 10 ? "0" + day : day) + //202.08.08淇鏃ユ湡澶╂暟灏忎簬10鏃舵坊鍔�0
+ (day < 10 ? "0" + day : day) + //202.08.08娣囶喖顦查弮銉︽埂婢垛晜鏆熺亸蹇庣艾10閺冭埖鍧婇崝?
"" +
" " +
(hour < 10 ? "0" + hour : hour) +
@@ -653,7 +709,7 @@
(minutes < 10 ? "0" + minutes : minutes) +
":" +
(second < 10 ? "0" + second : second) +
- " " + //2020.08.30淇棣栭〉鏃ユ湡鏄熸湡澶╀笉鏄剧ず鐨勯棶棰�
+ " " + //2020.08.30娣囶喖顦叉#鏍�夐弮銉︽埂閺勭喐婀℃径鈺�绗夐弰鍓с仛閻ㄥ嫰妫舵0?
(week[date.getDay() - 1] || week[6])
);
}
diff --git a/Code/WMS/AGENTS.md b/Code/WMS/AGENTS.md
index bce6547..5497ed3 100644
--- a/Code/WMS/AGENTS.md
+++ b/Code/WMS/AGENTS.md
@@ -14,12 +14,10 @@
- `dotnet run --project WIDESEA_WMSServer/WIDESEA_WMSServer.csproj`:本地启动 API。
前端(在 `WIDESEA_WMSClient` 目录执行):
-- `yarn install`:安装依赖。
-- `yarn dev`:启动 Vite 开发服务。
-- `yarn build`:构建生产包。
-- `yarn preview`:预览生产构建结果。
-- `yarn test:unit`:运行单元测试。
-- `yarn lint`:执行代码检查。
+- `npm install`:安装依赖。
+- `npm run serve`:启动本地开发服务(Vite)。
+- `npm run build`:构建生产资源。
+- `npm run lint`:执行 ESLint 检查。
## 开发流程强制规范
diff --git a/Code/WMS/WIDESEA_WMSClient/.yarn/install-state.gz b/Code/WMS/WIDESEA_WMSClient/.yarn/install-state.gz
index d31774c..9bf8470 100644
--- a/Code/WMS/WIDESEA_WMSClient/.yarn/install-state.gz
+++ b/Code/WMS/WIDESEA_WMSClient/.yarn/install-state.gz
Binary files differ
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/outbound/outStockLockInfo.js b/Code/WMS/WIDESEA_WMSClient/src/extension/outbound/outStockLockInfo.js
new file mode 100644
index 0000000..e954850
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/outbound/outStockLockInfo.js
@@ -0,0 +1,41 @@
+锘�// 椤甸潰鎵╁睍閰嶇疆锛氶鐣欑粰涓氬姟浜屾鎵╁睍閫昏緫銆�
+let extension = {
+ components: {
+ gridHeader: "",
+ gridBody: "",
+ gridFooter: "",
+ modelHeader: "",
+ modelBody: "",
+ modelFooter: "",
+ },
+ tableAction: "",
+ buttons: { view: [], box: [], detail: [] },
+ methods: {
+ onInit() {
+ return true;
+ },
+ onInited() {
+ return true;
+ },
+ searchBefore(param) {
+ return true;
+ },
+ searchAfter(result) {
+ return true;
+ },
+ addBefore(formData) {
+ return true;
+ },
+ updateBefore(formData) {
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ return true;
+ },
+ modelOpenAfter(row) {
+ return true;
+ },
+ },
+};
+
+export default extension;
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stock.js b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stock.js
new file mode 100644
index 0000000..4f4e439
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stock.js
@@ -0,0 +1,41 @@
+锘�// 椤甸潰鎵╁睍閰嶇疆锛氶鐣欑粰搴撳瓨椤甸潰浜屾寮�鍙戙��
+let extension = {
+ components: {
+ gridHeader: "",
+ gridBody: "",
+ gridFooter: "",
+ modelHeader: "",
+ modelBody: "",
+ modelFooter: "",
+ },
+ tableAction: "",
+ buttons: { view: [], box: [], detail: [] },
+ methods: {
+ onInit() {
+ return true;
+ },
+ onInited() {
+ return true;
+ },
+ searchBefore(param) {
+ return true;
+ },
+ searchAfter(result) {
+ return true;
+ },
+ addBefore(formData) {
+ return true;
+ },
+ updateBefore(formData) {
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ return true;
+ },
+ modelOpenAfter(row) {
+ return true;
+ },
+ },
+};
+
+export default extension;
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Tenant.js b/Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Tenant.js
new file mode 100644
index 0000000..4f832e7
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Tenant.js
@@ -0,0 +1,41 @@
+锘�// 椤甸潰鎵╁睍閰嶇疆锛氶鐣欑粰绉熸埛涓氬姟閫昏緫鎵╁睍銆�
+let extension = {
+ components: {
+ gridHeader: "",
+ gridBody: "",
+ gridFooter: "",
+ modelHeader: "",
+ modelBody: "",
+ modelFooter: "",
+ },
+ tableAction: "",
+ buttons: { view: [], box: [], detail: [] },
+ methods: {
+ onInit() {
+ return true;
+ },
+ onInited() {
+ return true;
+ },
+ searchBefore(param) {
+ return true;
+ },
+ searchAfter(result) {
+ return true;
+ },
+ addBefore(formData) {
+ return true;
+ },
+ updateBefore(formData) {
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ return true;
+ },
+ modelOpenAfter(row) {
+ return true;
+ },
+ },
+};
+
+export default extension;
diff --git a/Code/WMS/WIDESEA_WMSClient/src/router/viewGird.js b/Code/WMS/WIDESEA_WMSClient/src/router/viewGird.js
index ccb09c9..b4a1714 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/router/viewGird.js
+++ b/Code/WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -1,4 +1,4 @@
-
+锘�
let viewgird = [
{
path: '/Sys_Log',
@@ -181,6 +181,26 @@
name: 'mesOutboundOrder',
component: () => import('@/views/outbound/mesOutboundOrder.vue')
}
+ , {
+ path: '/OutStockLockInfo',
+ name: 'OutStockLockInfo',
+ component: () => import('@/views/outbound/outStockLockInfo.vue')
+ }
+ , {
+ path: '/Sys_Tenant',
+ name: 'Sys_Tenant',
+ component: () => import('@/views/system/Sys_Tenant.vue')
+ }
+ , {
+ path: '/Stock',
+ name: 'Stock',
+ component: () => import('@/views/stock/stock.vue')
+ }
+ , {
+ path: '/PDA',
+ name: 'PDA',
+ component: () => import('@/views/system/PDA.vue')
+ }
]
export default viewgird
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/outbound/outStockLockInfo.vue b/Code/WMS/WIDESEA_WMSClient/src/views/outbound/outStockLockInfo.vue
new file mode 100644
index 0000000..4467fac
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/outbound/outStockLockInfo.vue
@@ -0,0 +1,134 @@
+锘�<template>
+ <view-grid
+ ref="grid"
+ :columns="columns"
+ :detail="detail"
+ :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions"
+ :searchFormFields="searchFormFields"
+ :searchFormOptions="searchFormOptions"
+ :table="table"
+ :extend="extend"
+ >
+ </view-grid>
+</template>
+<script>
+import extend from "@/extension/outbound/outStockLockInfo.js";
+import { ref, defineComponent } from "vue";
+
+export default defineComponent({
+ setup() {
+ // 椤甸潰鏍稿績閰嶇疆锛氱粦瀹氬悗绔� OutStockLockInfo 鎺у埗鍣ㄣ��
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "鍑哄簱閿佸畾鏄庣粏",
+ name: "outStockLockInfo",
+ url: "/OutStockLockInfo/",
+ sortName: "id",
+ });
+
+ // 鏂板/缂栬緫琛ㄥ崟瀛楁锛氫笌鍚庣瀹炰綋瀛楁淇濇寔涓�鑷达紝閬垮厤瀛楁涓㈠け銆�
+ const editFormFields = ref({
+ orderNo: "",
+ orderDetailId: "",
+ orderType: "",
+ batchNo: "",
+ materielCode: "",
+ materielName: "",
+ stockId: "",
+ orderQuantity: "",
+ originalQuantity: "",
+ assignQuantity: "",
+ locationCode: "",
+ palletCode: "",
+ unit: "",
+ taskNum: "",
+ status: "",
+ remark: "",
+ });
+
+ const editFormOptions = ref([
+ [
+ { field: "orderNo", title: "鍗曟嵁缂栧彿", type: "string", required: true },
+ { field: "orderType", title: "鍗曟嵁绫诲瀷", type: "select", dataKey: "outOrderType", data: [] },
+ { field: "batchNo", title: "鎵规鍙�", type: "string" },
+ { field: "materielCode", title: "鐗╂枡缂栧彿", type: "string" },
+ { field: "materielName", title: "鐗╂枡鍚嶇О", type: "string" },
+ ],
+ [
+ { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string" },
+ { field: "locationCode", title: "璐т綅缂栧彿", type: "string" },
+ { field: "assignQuantity", title: "鍒嗛厤鍑哄簱閲�", type: "decimal" },
+ { field: "status", title: "鐘舵��", type: "select", dataKey: "outStockStatus", data: [] },
+ { field: "remark", title: "澶囨敞", type: "textarea" },
+ ],
+ ]);
+
+ // 鏌ヨ瀛楁锛氭彁渚涗笟鍔″畾浣嶅父鐢ㄦ潯浠躲��
+ const searchFormFields = ref({
+ orderNo: "",
+ batchNo: "",
+ materielCode: "",
+ palletCode: "",
+ locationCode: "",
+ status: "",
+ });
+
+ const searchFormOptions = ref([
+ [
+ { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+ { title: "鎵规鍙�", field: "batchNo", type: "like" },
+ { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+ ],
+ [
+ { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
+ { title: "璐т綅缂栧彿", field: "locationCode", type: "like" },
+ { title: "鐘舵��", field: "status", type: "select", dataKey: "outStockStatus", data: [] },
+ ],
+ ]);
+
+ const columns = ref([
+ { field: "id", title: "Id", type: "int", width: 90, hidden: true, readonly: true, require: true, align: "left" },
+ { field: "orderNo", title: "鍗曟嵁缂栧彿", type: "string", width: 160, align: "left" },
+ { field: "orderType", title: "鍗曟嵁绫诲瀷", type: "int", width: 110, align: "left", bind: { key: "outOrderType", data: [] } },
+ { field: "orderDetailId", title: "鍗曟嵁鏄庣粏涓婚敭", type: "int", width: 120, align: "left", hidden: true },
+ { field: "batchNo", title: "鎵规鍙�", type: "string", width: 120, align: "left" },
+ { field: "materielCode", title: "鐗╂枡缂栧彿", type: "string", width: 130, align: "left" },
+ { field: "materielName", title: "鐗╂枡鍚嶇О", type: "string", width: 180, align: "left" },
+ { field: "stockId", title: "搴撳瓨涓婚敭", type: "int", width: 110, align: "left", hidden: true },
+ { field: "orderQuantity", title: "鍗曟嵁鏁伴噺", type: "decimal", width: 110, align: "left" },
+ { field: "originalQuantity", title: "鍘熷搴撳瓨閲�", type: "decimal", width: 110, align: "left" },
+ { field: "assignQuantity", title: "鍒嗛厤鍑哄簱閲�", type: "decimal", width: 120, align: "left" },
+ { field: "locationCode", title: "璐т綅缂栧彿", type: "string", width: 120, align: "left" },
+ { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", width: 120, align: "left" },
+ { field: "unit", title: "鍗曚綅", type: "string", width: 90, align: "left" },
+ { field: "taskNum", title: "浠诲姟鍙�", type: "int", width: 100, align: "left" },
+ { field: "status", title: "鐘舵��", type: "int", width: 100, align: "left", bind: { key: "outStockStatus", data: [] } },
+ { field: "creater", title: "鍒涘缓浜�", type: "string", width: 100, align: "left" },
+ { field: "createDate", title: "鍒涘缓鏃堕棿", type: "datetime", width: 160, align: "left" },
+ { field: "modifier", title: "淇敼浜�", type: "string", width: 100, align: "left", hidden: true },
+ { field: "modifyDate", title: "淇敼鏃堕棿", type: "datetime", width: 160, align: "left", hidden: true },
+ { field: "remark", title: "澶囨敞", type: "string", width: 120, align: "left", hidden: true },
+ ]);
+
+ const detail = ref({
+ cnName: "#detailCnName",
+ table: "",
+ columns: [],
+ sortName: "",
+ });
+
+ return {
+ table,
+ extend,
+ editFormFields,
+ editFormOptions,
+ searchFormFields,
+ searchFormOptions,
+ columns,
+ detail,
+ };
+ },
+});
+</script>
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/stock/stock.vue b/Code/WMS/WIDESEA_WMSClient/src/views/stock/stock.vue
new file mode 100644
index 0000000..d1973a1
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/stock/stock.vue
@@ -0,0 +1,111 @@
+锘�<template>
+ <view-grid
+ ref="grid"
+ :columns="columns"
+ :detail="detail"
+ :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions"
+ :searchFormFields="searchFormFields"
+ :searchFormOptions="searchFormOptions"
+ :table="table"
+ :extend="extend"
+ >
+ </view-grid>
+</template>
+<script>
+import extend from "@/extension/stock/stock.js";
+import { ref, defineComponent } from "vue";
+
+export default defineComponent({
+ setup() {
+ // 搴撳瓨鍩虹椤碉細瀵规帴 Stock 鎺у埗鍣紝鏀寔搴撳瓨涓昏褰曟煡璇㈢淮鎶ゃ��
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "搴撳瓨",
+ name: "stock",
+ url: "/Stock/",
+ sortName: "id",
+ });
+
+ const editFormFields = ref({
+ palletCode: "",
+ palletType: "",
+ locationId: "",
+ locationCode: "",
+ warehouseId: "",
+ stockStatus: "",
+ outboundDate: "",
+ remark: "",
+ });
+
+ const editFormOptions = ref([
+ [
+ { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", required: true },
+ { field: "palletType", title: "鎵樼洏绫诲瀷", type: "number" },
+ { field: "locationCode", title: "璐т綅缂栧彿", type: "string" },
+ ],
+ [
+ { field: "warehouseId", title: "浠撳簱", type: "select", dataKey: "warehouses", data: [] },
+ { field: "stockStatus", title: "搴撳瓨鐘舵��", type: "select", dataKey: "stockStatusEmun", data: [] },
+ { field: "outboundDate", title: "鍑哄簱鏃ユ湡", type: "datetime" },
+ ],
+ [{ field: "remark", title: "澶囨敞", type: "textarea" }],
+ ]);
+
+ const searchFormFields = ref({
+ palletCode: "",
+ locationCode: "",
+ warehouseId: "",
+ stockStatus: "",
+ outboundDate: "",
+ });
+
+ const searchFormOptions = ref([
+ [
+ { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
+ { title: "璐т綅缂栧彿", field: "locationCode", type: "like" },
+ { title: "浠撳簱", field: "warehouseId", type: "select", dataKey: "warehouses", data: [] },
+ ],
+ [
+ { title: "搴撳瓨鐘舵��", field: "stockStatus", type: "select", dataKey: "stockStatusEmun", data: [] },
+ { title: "鍑哄簱鏃ユ湡", field: "outboundDate", type: "datetime" },
+ ],
+ ]);
+
+ const columns = ref([
+ { field: "id", title: "Id", type: "int", width: 90, hidden: true, readonly: true, require: true, align: "left" },
+ { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", width: 130, align: "left" },
+ { field: "palletType", title: "鎵樼洏绫诲瀷", type: "int", width: 110, align: "left" },
+ { field: "locationId", title: "璐т綅ID", type: "int", width: 110, align: "left", hidden: true },
+ { field: "locationCode", title: "璐т綅缂栧彿", type: "string", width: 130, align: "left" },
+ { field: "warehouseId", title: "浠撳簱", type: "select", width: 110, align: "left", bind: { key: "warehouses", data: [] } },
+ { field: "stockStatus", title: "搴撳瓨鐘舵��", type: "int", width: 120, align: "left", bind: { key: "stockStatusEmun", data: [] } },
+ { field: "outboundDate", title: "鍑哄簱鏃ユ湡", type: "datetime", width: 160, align: "left" },
+ { field: "creater", title: "鍒涘缓浜�", type: "string", width: 100, align: "left" },
+ { field: "createDate", title: "鍒涘缓鏃堕棿", type: "datetime", width: 160, align: "left" },
+ { field: "modifier", title: "淇敼浜�", type: "string", width: 100, align: "left", hidden: true },
+ { field: "modifyDate", title: "淇敼鏃堕棿", type: "datetime", width: 160, align: "left", hidden: true },
+ { field: "remark", title: "澶囨敞", type: "string", width: 140, align: "left" },
+ ]);
+
+ const detail = ref({
+ cnName: "#detailCnName",
+ table: "",
+ columns: [],
+ sortName: "",
+ });
+
+ return {
+ table,
+ extend,
+ editFormFields,
+ editFormOptions,
+ searchFormFields,
+ searchFormOptions,
+ columns,
+ detail,
+ };
+ },
+});
+</script>
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/system/PDA.vue b/Code/WMS/WIDESEA_WMSClient/src/views/system/PDA.vue
new file mode 100644
index 0000000..91feef9
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/system/PDA.vue
@@ -0,0 +1,128 @@
+锘�<template>
+ <div class="pda-container">
+ <el-card class="pda-card" shadow="hover">
+ <template #header>
+ <div class="card-header">PDA 搴旂敤绠$悊</div>
+ </template>
+
+ <el-form label-width="120px">
+ <el-form-item label="褰撳墠鐗堟湰鍙�">
+ <el-input v-model="clientVersion" placeholder="璇疯緭鍏ュ綋鍓峆DA鐗堟湰鍙�" style="max-width: 280px" />
+ <el-button type="primary" style="margin-left: 10px" @click="checkVersion">妫�鏌ユ洿鏂�</el-button>
+ </el-form-item>
+
+ <el-form-item label="鏈嶅姟绔増鏈粨鏋�">
+ <span>{{ checkResult }}</span>
+ </el-form-item>
+
+ <el-form-item label="涓嬭浇瀹夎鍖�">
+ <el-button type="success" @click="downloadApp">涓嬭浇鏈�鏂� APK</el-button>
+ </el-form-item>
+
+ <el-form-item label="涓婁紶瀹夎鍖�">
+ <el-upload
+ :action="uploadUrl"
+ :headers="uploadHeaders"
+ name="fileInput"
+ :show-file-list="true"
+ :before-upload="beforeUpload"
+ :on-success="onUploadSuccess"
+ :on-error="onUploadError"
+ >
+ <el-button type="warning">涓婁紶鏂� APK</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-form>
+ </el-card>
+ </div>
+</template>
+
+<script>
+import { defineComponent, ref, computed, getCurrentInstance } from "vue";
+import store from "@/store/index";
+import http from "@/api/http";
+
+export default defineComponent({
+ setup() {
+ const clientVersion = ref("");
+ const checkResult = ref("鏈鏌�");
+ const { proxy } = getCurrentInstance();
+
+ // 涓婁紶鍦板潃锛氬鐢ㄥ叏灞� http 鍩虹鍦板潃锛屼繚璇佷笌褰撳墠鐜涓�鑷淬��
+ const uploadUrl = computed(() => `${http.ipAddress}api/PDA/UploadApp`);
+
+ // 涓婁紶閴存潈锛氭部鐢ㄧ幇鏈� token 鏈哄埗锛岄伩鍏嶆帴鍙� 401銆�
+ const uploadHeaders = computed(() => ({
+ Authorization: store.getters.getToken(),
+ }));
+
+ const checkVersion = () => {
+ if (!clientVersion.value) {
+ proxy.$message.warning("璇疯緭鍏ョ増鏈彿");
+ return;
+ }
+
+ http
+ .get(`api/PDA/GetPDAVersion?version=${encodeURIComponent(clientVersion.value)}`, {}, true)
+ .then((res) => {
+ if (!res.status) {
+ checkResult.value = res.message || "妫�鏌ュけ璐�";
+ return;
+ }
+ checkResult.value = res.data ? "闇�瑕佹洿鏂�" : "宸叉槸鏈�鏂扮増鏈�";
+ });
+ };
+
+ const downloadApp = () => {
+ window.open(`${http.ipAddress}api/PDA/DownLoadApp`, "_blank");
+ };
+
+ // 涓婁紶鍓嶆牎楠岋細闄愬埗涓婁紶 apk锛屽噺灏戞棤鏁堣姹傘��
+ const beforeUpload = (file) => {
+ if (!file || !file.name || !file.name.toLowerCase().endsWith(".apk")) {
+ proxy.$message.error("鍙厑璁镐笂浼� .apk 鏂囦欢");
+ return false;
+ }
+ return true;
+ };
+
+ const onUploadSuccess = (response) => {
+ proxy.$message[response && response.status ? "success" : "error"](
+ (response && response.message) || "涓婁紶瀹屾垚"
+ );
+ };
+
+ const onUploadError = () => {
+ proxy.$message.error("涓婁紶澶辫触");
+ };
+
+ return {
+ clientVersion,
+ checkResult,
+ uploadUrl,
+ uploadHeaders,
+ checkVersion,
+ downloadApp,
+ beforeUpload,
+ onUploadSuccess,
+ onUploadError,
+ };
+ },
+});
+</script>
+
+<style lang="less" scoped>
+.pda-container {
+ height: 100%;
+ padding: 12px;
+}
+
+.pda-card {
+ max-width: 920px;
+}
+
+.card-header {
+ font-size: 16px;
+ font-weight: 600;
+}
+</style>
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/system/Sys_Tenant.vue b/Code/WMS/WIDESEA_WMSClient/src/views/system/Sys_Tenant.vue
new file mode 100644
index 0000000..d0bd301
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/system/Sys_Tenant.vue
@@ -0,0 +1,102 @@
+锘�<template>
+ <view-grid
+ ref="grid"
+ :columns="columns"
+ :detail="detail"
+ :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions"
+ :searchFormFields="searchFormFields"
+ :searchFormOptions="searchFormOptions"
+ :table="table"
+ :extend="extend"
+ >
+ </view-grid>
+</template>
+<script>
+import extend from "@/extension/system/Sys_Tenant.js";
+import { ref, defineComponent } from "vue";
+
+export default defineComponent({
+ setup() {
+ // 绉熸埛绠$悊涓婚厤缃細瀵规帴 api/tenant銆�
+ const table = ref({
+ key: "tenantId",
+ footer: "Foots",
+ cnName: "绉熸埛绠$悊",
+ name: "sys_Tenant",
+ url: "/tenant/",
+ sortName: "tenantId",
+ });
+
+ const editFormFields = ref({
+ tenantName: "",
+ tenantType: "",
+ dbType: "",
+ connectionString: "",
+ status: "",
+ remark: "",
+ });
+
+ const editFormOptions = ref([
+ [
+ { field: "tenantName", title: "绉熸埛鍚嶇О", type: "string", required: true },
+ { field: "tenantType", title: "绉熸埛绫诲瀷", type: "number", required: true },
+ { field: "dbType", title: "鏁版嵁搴撶被鍨�", type: "number", required: true },
+ ],
+ [
+ { field: "status", title: "鐘舵��", type: "select", dataKey: "enableStatusEnum", data: [] },
+ { field: "connectionString", title: "杩炴帴瀛楃涓�", type: "textarea" },
+ { field: "remark", title: "澶囨敞", type: "textarea" },
+ ],
+ ]);
+
+ const searchFormFields = ref({
+ tenantName: "",
+ tenantType: "",
+ dbType: "",
+ status: "",
+ });
+
+ const searchFormOptions = ref([
+ [
+ { title: "绉熸埛鍚嶇О", field: "tenantName", type: "like" },
+ { title: "绉熸埛绫诲瀷", field: "tenantType", type: "number" },
+ { title: "鏁版嵁搴撶被鍨�", field: "dbType", type: "number" },
+ { title: "鐘舵��", field: "status", type: "select", dataKey: "enableStatusEnum", data: [] },
+ ],
+ ]);
+
+ const columns = ref([
+ { field: "tenantId", title: "绉熸埛ID", type: "int", width: 90, align: "left" },
+ { field: "tenantName", title: "绉熸埛鍚嶇О", type: "string", width: 180, align: "left" },
+ { field: "tenantType", title: "绉熸埛绫诲瀷", type: "int", width: 110, align: "left" },
+ { field: "dbType", title: "鏁版嵁搴撶被鍨�", type: "int", width: 110, align: "left" },
+ { field: "status", title: "鐘舵��", type: "int", width: 100, align: "left", bind: { key: "enableStatusEnum", data: [] } },
+ { field: "connectionString", title: "杩炴帴瀛楃涓�", type: "string", width: 280, align: "left" },
+ { field: "creater", title: "鍒涘缓浜�", type: "string", width: 100, align: "left" },
+ { field: "createDate", title: "鍒涘缓鏃堕棿", type: "datetime", width: 160, align: "left" },
+ { field: "modifier", title: "淇敼浜�", type: "string", width: 100, align: "left", hidden: true },
+ { field: "modifyDate", title: "淇敼鏃堕棿", type: "datetime", width: 160, align: "left", hidden: true },
+ { field: "remark", title: "澶囨敞", type: "string", width: 180, align: "left" },
+ ]);
+
+ const detail = ref({
+ cnName: "#detailCnName",
+ table: "",
+ columns: [],
+ sortName: "",
+ });
+
+ return {
+ table,
+ extend,
+ editFormFields,
+ editFormOptions,
+ searchFormFields,
+ searchFormOptions,
+ columns,
+ detail,
+ };
+ },
+});
+</script>
--
Gitblit v1.9.3