diff --git a/frontent/ops_vue_js/index.html b/frontent/ops_vue_js/index.html
index b19040a..bb4ca71 100644
--- a/frontent/ops_vue_js/index.html
+++ b/frontent/ops_vue_js/index.html
@@ -2,7 +2,7 @@
-
+
Vite App
diff --git a/frontent/ops_vue_js/package-lock.json b/frontent/ops_vue_js/package-lock.json
index 37c25a8..0fdec13 100644
--- a/frontent/ops_vue_js/package-lock.json
+++ b/frontent/ops_vue_js/package-lock.json
@@ -32,6 +32,7 @@
"cropperjs": "^2.1.0",
"litepicker": "^2.0.12",
"pinia": "^3.0.4",
+ "tom-select": "^2.4.3",
"vue": "^3.5.22",
"vue-cropper": "^0.6.5",
"vue-i18n": "^11.1.12",
@@ -78,6 +79,7 @@
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -1076,6 +1078,7 @@
"resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.19.tgz",
"integrity": "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"preact": "~10.12.1"
}
@@ -1222,6 +1225,21 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@orchidjs/sifter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@orchidjs/sifter/-/sifter-1.1.0.tgz",
+ "integrity": "sha512-mYwHCfr736cIWWdhhSZvDbf90AKt2xyrJspKFC3qyIJG1LtrJeJunYEqCGG4Aq2ijENbc4WkOjszcvNaIAS/pQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@orchidjs/unicode-variants": "^1.1.2"
+ }
+ },
+ "node_modules/@orchidjs/unicode-variants": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@orchidjs/unicode-variants/-/unicode-variants-1.1.2.tgz",
+ "integrity": "sha512-5DobW1CHgnBROOEpFlEXytED5OosEWESFvg/VYmH0143oXcijYTprRYJTs+55HzGM4IqxiLFSuqEzu9mPNwVsA==",
+ "license": "Apache-2.0"
+ },
"node_modules/@parcel/watcher": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
@@ -1544,6 +1562,7 @@
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"license": "MIT",
+ "peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
@@ -2271,6 +2290,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751",
@@ -3415,6 +3435,7 @@
"integrity": "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@bufbuild/protobuf": "^2.5.0",
"buffer-builder": "^0.2.0",
@@ -3883,6 +3904,23 @@
"node": ">=8.0"
}
},
+ "node_modules/tom-select": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tom-select/-/tom-select-2.4.3.tgz",
+ "integrity": "sha512-MFFrMxP1bpnAMPbdvPCZk0KwYxLqhYZso39torcdoefeV/NThNyDu8dV96/INJ5XQVTL3O55+GqQ78Pkj5oCfw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@orchidjs/sifter": "^1.1.0",
+ "@orchidjs/unicode-variants": "^1.1.2"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/tom-select"
+ }
+ },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
@@ -3961,6 +3999,7 @@
"integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -4139,6 +4178,7 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz",
"integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.24",
"@vue/compiler-sfc": "3.5.24",
diff --git a/frontent/ops_vue_js/package.json b/frontent/ops_vue_js/package.json
index 67440e2..ecda95f 100644
--- a/frontent/ops_vue_js/package.json
+++ b/frontent/ops_vue_js/package.json
@@ -36,6 +36,7 @@
"cropperjs": "^2.1.0",
"litepicker": "^2.0.12",
"pinia": "^3.0.4",
+ "tom-select": "^2.4.3",
"vue": "^3.5.22",
"vue-cropper": "^0.6.5",
"vue-i18n": "^11.1.12",
diff --git a/frontent/ops_vue_js/public/logo.svg b/frontent/ops_vue_js/public/logo.svg
new file mode 100644
index 0000000..74a149f
--- /dev/null
+++ b/frontent/ops_vue_js/public/logo.svg
@@ -0,0 +1,491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontent/ops_vue_js/src/assets/logo.svg b/frontent/ops_vue_js/src/assets/logo.svg
index 7565660..74a149f 100644
--- a/frontent/ops_vue_js/src/assets/logo.svg
+++ b/frontent/ops_vue_js/src/assets/logo.svg
@@ -1 +1,491 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontent/ops_vue_js/src/assets/logo1.svg b/frontent/ops_vue_js/src/assets/logo1.svg
new file mode 100644
index 0000000..7565660
--- /dev/null
+++ b/frontent/ops_vue_js/src/assets/logo1.svg
@@ -0,0 +1 @@
+
diff --git a/frontent/ops_vue_js/src/components/tagadder.vue b/frontent/ops_vue_js/src/components/tagadder.vue
new file mode 100644
index 0000000..2015164
--- /dev/null
+++ b/frontent/ops_vue_js/src/components/tagadder.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontent/ops_vue_js/src/i18n/en.json b/frontent/ops_vue_js/src/i18n/en.json
index 8ced4a7..50aaf22 100644
--- a/frontent/ops_vue_js/src/i18n/en.json
+++ b/frontent/ops_vue_js/src/i18n/en.json
@@ -3,7 +3,8 @@
"404_title": "404 Resource Not Found",
"404_msg_title": "Oops… You just found an error page",
"404_msg": "We are sorry but the page you are looking for was not found",
- "404_back_home": "Take me home"
+ "404_back_home": "Take me home",
+ "404_previous_page": "previous page"
},
"appname": {
"home": "Home",
@@ -14,6 +15,11 @@
"purchase": "Purchase",
"warehouse": "Warehouse"
},
+ "tagadder": {
+ "not_fund_item": "No matching items found",
+ "loding": "Loading...",
+ "add": "Add new option: "
+ },
"cropper": {
"select_image": "Select Image",
"select_File": "Select File",
diff --git a/frontent/ops_vue_js/src/i18n/zh-CN.json b/frontent/ops_vue_js/src/i18n/zh-CN.json
index 84075c6..5efd208 100644
--- a/frontent/ops_vue_js/src/i18n/zh-CN.json
+++ b/frontent/ops_vue_js/src/i18n/zh-CN.json
@@ -3,7 +3,8 @@
"404_title": "404 资源未找到",
"404_msg_title": "抱歉…您刚刚发现了一个错误页面",
"404_msg": "您所查找的页面不存在",
- "404_back_home": "返回首页"
+ "404_back_home": "返回首页",
+ "404_previous_page": "上一页"
},
"appname": {
"home": "主页",
@@ -14,6 +15,11 @@
"purchase": "采购",
"warehouse": "仓库"
},
+ "tagadder":{
+ "not_fund_item":"没有找到匹配项",
+ "loding":"正在加载...",
+ "add":"添加新选项: "
+ },
"cropper": {
"select_image": "选择图片",
"select_File": "选择文件",
diff --git a/frontent/ops_vue_js/src/router/index.js b/frontent/ops_vue_js/src/router/index.js
index 87e8e6a..ab1133e 100644
--- a/frontent/ops_vue_js/src/router/index.js
+++ b/frontent/ops_vue_js/src/router/index.js
@@ -13,25 +13,21 @@ const router = createRouter({
name: "home",
component: HomeView,
},
- {
- path: "/404",
- name: "404",
- component: () => import("../views/404.vue"),
- },
+
{
path: "/settings/account",
name: "settings account",
- component: () => import("../views/settings/account.vue"),
+ component: () => import("@/views/settings/account.vue"),
},
{
path: "/settings/contact",
name: "settings contact",
- component: () => import("../views/settings/contact.vue"),
+ component: () => import("@/views/settings/contact.vue"),
},
{
path: "/settings/security",
name: "settings security",
- component: () => import("../views/settings/security.vue"),
+ component: () => import("@/views/settings/security.vue"),
},
{
path: "/about",
@@ -39,53 +35,64 @@ const router = createRouter({
// route level code-splitting
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
- component: () => import("../views/AboutView.vue"),
+ component: () => import("@/views/AboutView.vue"),
},
{
path: "/test",
name: "test",
- component: () => import("../views/test.vue"),
+ component: () => import("@/views/test.vue"),
},
{
path: "/login",
name: "login",
- component: () => import("../views/loginView.vue"),
+ component: () => import("@/views/loginView.vue"),
},
{
path: "/forgot_password",
name: "forgot password",
- component: () => import("../views/forgotPassword.vue"),
+ component: () => import("@/views/forgotPassword.vue"),
},
{
path: "/register",
name: "Register",
- component: () => import("../views/registerView.vue"),
+ component: () => import("@/views/registerView.vue"),
},
{
path: "/admin",
name: "admin",
- component: () => import("../views/adminView.vue"),
+ component: () => import("@/views/adminView.vue"),
},
{
path: "/schedule",
name: "schedule",
- component: () => import("../views/scheduleView.vue"),
+ component: () => import("@/views/scheduleView.vue"),
},
{
path: "/purchase",
name: "purchase",
- component: () => import("../views/purchase/purchase.vue"),
+ component: () => import("@/views/purchase/purchase.vue"),
},
- {
+ {
path: "/purchase/addorder",
- name: "purchase",
- component: () => import("../views/purchase/addorder.vue"),
+ name: "purchase/addorder",
+ component: () => import("@/views/purchase/addorder.vue"),
},
{
path: "/warehouse",
name: "warehouse",
- component: () => import("../views/warehouse.vue"),
+ component: () => import("@/views/warehouse.vue"),
+ },
+ {
+ path: "/404",
+ name: "404",
+ component: () => import("@/views/404.vue"),
+ },
+ // 404 页面 - 放在最后
+ {
+ path: "/:pathMatch(.*)*", // 通配符,匹配所有路由
+ name: "NotFound",
+ component: () => import("@/views/404.vue"),
},
],
});
diff --git a/frontent/ops_vue_js/src/views/404.vue b/frontent/ops_vue_js/src/views/404.vue
index f5ff451..02ead87 100644
--- a/frontent/ops_vue_js/src/views/404.vue
+++ b/frontent/ops_vue_js/src/views/404.vue
@@ -3,6 +3,10 @@ import { onMounted, watch, ref } from "vue";
import { useI18n } from "vue-i18n";
import { useRouter } from "vue-router";
const { t, locale } = useI18n();
+const router = useRouter();
+function goback() {
+ router.back();
+}
function functionupdataTitle() {
document.title = "Operations." + t("errorpage.404_title");
@@ -30,25 +34,44 @@ onMounted(() => {
{{ t("errorpage.404_msg") }}
-
-
+
+ {{ t("errorpage.404_previous_page") }}
+
+
+
+
+
+
+
+
{{ t("errorpage.404_back_home") }}
diff --git a/frontent/ops_vue_js/src/views/purchase/addorder.vue b/frontent/ops_vue_js/src/views/purchase/addorder.vue
index cfbf8a9..6ece80e 100644
--- a/frontent/ops_vue_js/src/views/purchase/addorder.vue
+++ b/frontent/ops_vue_js/src/views/purchase/addorder.vue
@@ -1,21 +1,284 @@
-add_part
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+ 标题
+
+
+
+ 用途 0/100
+
+
+
+
+
+
+
+
URL
+
+
+ 样式备注
+
+
+
+
+
+
成本
+
+
+
+
+ 类型
+ 数量
+ 费用
+ 总价
+ 货币
+ 操作
+
+
+
+
+ {{value.type}}
+ {{value.int}}
+ {{value.cost}}
+ {{value.cost*value.int}}
+ {{value.currency_type}}
+
+ Del
+
+
+
+
+
+
+
+
+ 类型
+
+ 单价
+ 运输
+
+
+
+ 数量
+
+
+
+ 费用
+
+
+
+ 货币
+
+ RMB
+ MOP
+ HKD
+ USD
+
+
+
+ 操作
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+
+
+ 更新时间
+
+
+
+ 快递单号
+
+
+
+ 订单状态
+
+ 待下单
+ 已下单
+ 运输中
+ 已完成
+ 申请退款
+ 退回中
+ 已退款
+
+
+
+
+
+
+
+
+
+
+
+
+
+