Merge remote-tracking branch 'aros/main' into remote-aros

This commit is contained in:
faiqahzaman
2022-12-18 12:12:25 +08:00
31 changed files with 1498 additions and 1151 deletions
+309 -6
View File
@@ -16,6 +16,9 @@
"bootstrap": "^5.1.3",
"bootstrap-icons": "^1.8.1",
"core-js": "^3.8.3",
"html2canvas": "^1.4.1",
"jspdf": "^2.5.1",
"jspdf-autotable": "^3.5.28",
"libphonenumber-js": "^1.10.14",
"maz-ui": "^3.0.7",
"postcss": "^8",
@@ -1614,7 +1617,6 @@
"version": "7.17.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
"integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
@@ -2059,6 +2061,12 @@
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
"dev": true
},
"node_modules/@types/raf": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz",
"integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==",
"optional": true
},
"node_modules/@types/range-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
@@ -3288,6 +3296,17 @@
"node": ">= 4.0.0"
}
},
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"bin": {
"atob": "bin/atob.js"
},
"engines": {
"node": ">= 4.5.0"
}
},
"node_modules/autoprefixer": {
"version": "10.4.4",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz",
@@ -3415,6 +3434,14 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -3609,6 +3636,17 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/btoa": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
"integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
"bin": {
"btoa": "bin/btoa.js"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -3719,6 +3757,25 @@
}
]
},
"node_modules/canvg": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
"integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
"optional": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@types/raf": "^3.4.0",
"core-js": "^3.8.3",
"raf": "^3.4.1",
"regenerator-runtime": "^0.13.7",
"rgbcolor": "^1.0.1",
"stackblur-canvas": "^2.0.0",
"svg-pathdata": "^6.0.3"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -4296,6 +4353,14 @@
"postcss": "^8.0.9"
}
},
"node_modules/css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/css-loader": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
@@ -4879,6 +4944,12 @@
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/dompurify": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.1.tgz",
"integrity": "sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA==",
"optional": true
},
"node_modules/domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
@@ -5653,6 +5724,11 @@
"node": ">=0.8.0"
}
},
"node_modules/fflate": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
"integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
},
"node_modules/figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -6132,6 +6208,18 @@
"webpack": "^5.20.0"
}
},
"node_modules/html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"dependencies": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -6625,6 +6713,31 @@
"graceful-fs": "^4.1.6"
}
},
"node_modules/jspdf": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
"integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==",
"dependencies": {
"@babel/runtime": "^7.14.0",
"atob": "^2.1.2",
"btoa": "^1.2.1",
"fflate": "^0.4.8"
},
"optionalDependencies": {
"canvg": "^3.0.6",
"core-js": "^3.6.0",
"dompurify": "^2.2.0",
"html2canvas": "^1.0.0-rc.5"
}
},
"node_modules/jspdf-autotable": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.28.tgz",
"integrity": "sha512-eNYt5mUxCGa1Y0bmOhGXU+Va/P2jNkgOgUPGIpZp2rbZUauU34s0q3S59Jps5zi2u90nQy7DmD/D+sdesJLIEA==",
"peerDependencies": {
"jspdf": "^2.5.1"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -7890,6 +8003,12 @@
"node": ">=8"
}
},
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"optional": true
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -8630,6 +8749,15 @@
}
]
},
"node_modules/raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
"optional": true,
"dependencies": {
"performance-now": "^2.1.0"
}
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -8760,8 +8888,7 @@
"node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
"dev": true
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
},
"node_modules/regenerator-transform": {
"version": "0.15.0",
@@ -8919,6 +9046,15 @@
"node": ">=0.10.0"
}
},
"node_modules/rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
"integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
"optional": true,
"engines": {
"node": ">= 0.8.15"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -9364,6 +9500,15 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
"dev": true
},
"node_modules/stackblur-canvas": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz",
"integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==",
"optional": true,
"engines": {
"node": ">=0.1.14"
}
},
"node_modules/stackframe": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
@@ -9491,6 +9636,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/svg-pathdata": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
"integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
"optional": true,
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -9639,6 +9793,14 @@
"node": ">= 8"
}
},
"node_modules/text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -9882,6 +10044,14 @@
"node": ">= 0.4.0"
}
},
"node_modules/utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"dependencies": {
"base64-arraybuffer": "^1.0.2"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
@@ -11846,7 +12016,6 @@
"version": "7.17.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
"integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -12226,6 +12395,12 @@
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
"dev": true
},
"@types/raf": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz",
"integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==",
"optional": true
},
"@types/range-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
@@ -13202,6 +13377,11 @@
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"autoprefixer": {
"version": "10.4.4",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz",
@@ -13293,6 +13473,11 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -13435,6 +13620,11 @@
"picocolors": "^1.0.0"
}
},
"btoa": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
"integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -13506,6 +13696,22 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001328.tgz",
"integrity": "sha512-Ue55jHkR/s4r00FLNiX+hGMMuwml/QGqqzVeMQ5thUewznU2EdULFvI3JR7JJid6OrjJNfFvHY2G2dIjmRaDDQ=="
},
"canvg": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
"integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
"optional": true,
"requires": {
"@babel/runtime": "^7.12.5",
"@types/raf": "^3.4.0",
"core-js": "^3.8.3",
"raf": "^3.4.1",
"regenerator-runtime": "^0.13.7",
"rgbcolor": "^1.0.1",
"stackblur-canvas": "^2.0.0",
"svg-pathdata": "^6.0.3"
}
},
"case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -13940,6 +14146,14 @@
"dev": true,
"requires": {}
},
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": {
"utrie": "^1.0.2"
}
},
"css-loader": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
@@ -14346,6 +14560,12 @@
"domelementtype": "^2.2.0"
}
},
"dompurify": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.1.tgz",
"integrity": "sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA==",
"optional": true
},
"domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
@@ -14859,6 +15079,11 @@
"websocket-driver": ">=0.5.1"
}
},
"fflate": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
"integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
},
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -15211,6 +15436,15 @@
"tapable": "^2.0.0"
}
},
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -15562,6 +15796,27 @@
"universalify": "^2.0.0"
}
},
"jspdf": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
"integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==",
"requires": {
"@babel/runtime": "^7.14.0",
"atob": "^2.1.2",
"btoa": "^1.2.1",
"canvg": "^3.0.6",
"core-js": "^3.6.0",
"dompurify": "^2.2.0",
"fflate": "^0.4.8",
"html2canvas": "^1.0.0-rc.5"
}
},
"jspdf-autotable": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.28.tgz",
"integrity": "sha512-eNYt5mUxCGa1Y0bmOhGXU+Va/P2jNkgOgUPGIpZp2rbZUauU34s0q3S59Jps5zi2u90nQy7DmD/D+sdesJLIEA==",
"requires": {}
},
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -16509,6 +16764,12 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"optional": true
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -16986,6 +17247,15 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
"optional": true,
"requires": {
"performance-now": "^2.1.0"
}
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -17090,8 +17360,7 @@
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
"dev": true
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
},
"regenerator-transform": {
"version": "0.15.0",
@@ -17214,6 +17483,12 @@
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
"rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
"integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
"optional": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -17586,6 +17861,12 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
"dev": true
},
"stackblur-canvas": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz",
"integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==",
"optional": true
},
"stackframe": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
@@ -17671,6 +17952,12 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
},
"svg-pathdata": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
"integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
"optional": true
},
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -17769,6 +18056,14 @@
}
}
},
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": {
"utrie": "^1.0.2"
}
},
"thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -17952,6 +18247,14 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
},
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+3
View File
@@ -15,6 +15,9 @@
"bootstrap": "^5.1.3",
"bootstrap-icons": "^1.8.1",
"core-js": "^3.8.3",
"html2canvas": "^1.4.1",
"jspdf": "^2.5.1",
"jspdf-autotable": "^3.5.28",
"libphonenumber-js": "^1.10.14",
"maz-ui": "^3.0.7",
"postcss": "^8",
+1 -1
View File
@@ -11,7 +11,7 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap');
</style>
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
<title>ArrahnBid</title>
<title>ArrahnBid - Lelongan Atas Talian</title>
</head>
<body>
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

@@ -13,7 +13,7 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">
Terma & Syarat Sistem Lelong
Terma & Syarat
</h5>
<button
type="button"
@@ -23,85 +23,14 @@
></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12 lg:col-6 paragraph-align">
<ol class="pr-3">
<li>Daftar secara atas talian.</li>
<li>Berumur 18 tahun ke atas.</li>
<li>
Marhun lelongan boleh dilihat dalam sistem untuk dibida.
</li>
<li>
Harga yang disenaraikan dalam web kami adalah
<strong>muktamad</strong> dan tidak boleh dirunding.
</li>
<li>
Harga <strong>minimum bidaan</strong> adalah
<strong>RM1.00</strong> dari Harga Asas.
</li>
<li>
<strong>Nilai bidaan hendaklah genap</strong> dan penggunaan
<strong>nilaian sen adalah tidak dibenarkan.</strong>
</li>
<li>
Waktu <strong>tamat lelongan</strong> adalah
<strong>2 jam</strong> selepas waktu dibuka.
</li>
<li>
Sebelum meningggalkan premis, sila semak dan pastikan marhun
yang <strong>diterima adalah betul.</strong> Sekiranya
terdapat kekurangan dan masalah
<strong>setelah marhun dibawa keluar</strong> dari premis,
pihak Permodalan Kelantan Berhad
<strong
>tidak akan bertanggungjawab dan marhun tidak boleh
dikembalikan</strong
>.
</li>
<li>
Setiap bidaan atas talian yang telah dihantar tidak boleh
diubah, sila pastikan nombor siri dan harga yang dibida diisi
secara atas talian adalah betul, pihak kami tidak akan
bertanggungjawab atas kesilapan pelanggan mengisi harga bidaan
atas talian.
</li>
</ol>
</div>
<div class="col-12 lg:col-6 paragraph-align">
<ol class="pr-3" start="10">
<li style="text-transform: uppercase">
<strong
>Kaedah pembayaran melalui perbankan atas talian (Online
Banking).</strong
>
</li>
<li>
Pembayaran bidaan hendaklah diselesaikan
<strong>sebelum jam 4.00</strong>
petang pada hari lelongan.
</li>
<li>
Sila serahkan bukti pembayaran semasa menuntut marhun lelongan
(di kaunter atau melalui media elektronik sama ada emel atau
whatsapp dan marhun lelong hendaklah dituntut sebelum jam 4.00
petang).
</li>
<li>
Pembida yang menang di dalam bidaan tetapi gagal melakukan
pembayaran pada hari lelongan akan
<strong>disenarai hitamkan.</strong>
</li>
<li>
Semua terma dan syarat di atas adalah tertakluk kepada pindaan
dan boleh diubah dari masa ke semasa tanpa dimaklumkan kepada
pembida.
</li>
</ol>
</div>
</div>
<terms-and-conditions-details></terms-and-conditions-details>
</div>
<div class="modal-footer">
<Button data-bs-dismiss="modal" class="p-button-sm" label="Kembali"></Button>
<Button
data-bs-dismiss="modal"
class="p-button-sm"
label="Kembali"
></Button>
</div>
</div>
</div>
@@ -109,7 +38,12 @@
</template>
<script>
export default {};
import TermsAndConditionsDetails from './TermsAndConditionsDetails.vue'
export default {
components: {
"terms-and-conditions-details": TermsAndConditionsDetails,
}
};
</script>
<style scoped>
@@ -0,0 +1,56 @@
<template>
<div class="row text-left">
<div class="col-12 lg:col-6 paragraph-align">
<p>
Para pembida yang dihargai, anda dinasihatkan untuk memahami segala
terma dan syarat bidaan sebelum membuat sebarang bidaan secara atas
talian.
</p>
<ol class="pr-3">
<li>Pendaftaran adalah secara atas talian.</li>
<li>
Bidaan terbuka kepada semua warganegara berumur 18 tahun ke atas dan
syarikat/koperasi yang berdaftar di Malaysia.
</li>
<li>
Nilai bidaan hendaklah genap dan penggunaan nilaian sen adalah tidak
dibenarkan.
</li>
<li>
Waktu tamat bidaan adalah pada jam 12.30 petang (bergantung kepada
perubahan dari masa ke semasa).
</li>
<li>
Pembida berjaya hendaklah menyelesaikan keseluruhan amaun bidaan dan
mengambil marhun pada/sebelum jam 4.00 petang.
</li>
<li>
Setiap bidaan atas talian yang telah dihantar tidak boleh diubah. Sila
pastikan nombor siri dan harga bidaan adalah betul. Pihak kami tidak
akan bertanggungjawab di atas kesilapan pelanggan mengisi harga
bidaan.
</li>
</ol>
</div>
<div class="col-12 lg:col-6 paragraph-align">
<ol class="pr-3" start="7">
<li>
Kaedah pembayaran adalah melalui perbankan atas talian (Online
Banking) sahaja.
</li>
<li>
Sila serahkan bukti pembayaran semasa menuntut marhun bidaan (di
kaunter atau melalui media elektronik sama ada emel atau Whatsapp).
</li>
<li>
Pembida yang menang di dalam bidaan tetapi gagal melakukan pembayaran
pada masa yang telah ditetapkan akan disenarai hitamkan.
</li>
<li>
Semua Terma & Syarat diatas adalah tertakluk kepada pindaan dan boleh
diubah dari masa ke semasa tanpa dimaklumkan kepada pembida.
</li>
</ol>
</div>
</div>
</template>
@@ -20,6 +20,7 @@
md:w-10
lg:w-8
xl:w-7
content-bg
"
>
<div class="text-center mb-5">
@@ -211,10 +212,16 @@ export default {
#9599e2 100%
),
url("/src/assets/background_arrahn.jpg"); */
/* background: url("/src/assets/bg1.jpg"); */
background: url("/src/assets/bg3.JPG");
background-position: center;
background-size: cover;
}
.content-bg {
background: #fff9f9eb !important;
}
.logo-img {
width: 84px;
height: 44px;
+283 -391
View File
@@ -1,203 +1,45 @@
<template>
<Toast :breakpoints="{ '767px': { width: '100%', right: '0', left: '0' } }" />
<div
class="
flex
main-container
min-h-screen
align-items-center
justify-content-center
m-5
"
>
<div class="main-container">
<div
class="
surface-card
fadein
p-4
shadow-2
border-round
w-11
md:w-10
lg:w-10
xl:w-8
"
class="flex min-h-screen align-items-center justify-content-center p-5"
>
<div class="text-center mb-5">
<div class="text-900 text-3xl font-semibold mb-3">
ArrahnBid
<img class="logo-img" src="img/logo_arrahn.png" alt="arrahn-logo" />
</div>
<span class="text-600 font-medium line-height-3"
>Sudah punyai akaun?</span
>
<router-link
v-bind:to="{ name: 'login' }"
class="font-medium no-underline ml-2 text-blue-500 cursor-pointer"
>Log masuk sekarang!</router-link
>
</div>
<h5>Daftar Akaun</h5>
<div class="grid">
<div class="col-12 lg:col-6">
<div class="field">
<label for="name">Nama</label>
<InputText
id="name"
type="text"
v-model="form.name"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.name.$error"
>Nama diperlukan</InlineMessage
>
<div
class="
surface-card
fadein
p-4
shadow-2
border-round
w-11
md:w-10
lg:w-10
xl:w-8
"
>
<div class="text-center mb-5">
<div class="text-900 text-3xl font-semibold mb-3">
ArrahnBid
<img class="logo-img" src="img/logo_arrahn.png" alt="arrahn-logo" />
</div>
<span class="text-600 font-medium line-height-3"
>Sudah punyai akaun?</span
>
<router-link
v-bind:to="{ name: 'login' }"
class="font-medium no-underline ml-2 text-blue-500 cursor-pointer"
>Log masuk sekarang!</router-link
>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<!-- <label for="nokp">No Kad Pengenalan</label> -->
<select
class="p-0 mb-2 form-select"
style="width: 190px; border: none"
>
<option selected value="nokp">No Kad Pengenalan</option>
<option value="passpor">No Passport</option>
</select>
<InputText
id="nokp"
type="text"
v-model="form.nokp"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.nokp.$error"
>No KP diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<label for="notelbimbit">No Telefon</label>
<!-- <InputText
id="notelbimbit"
type="text"
v-model="form.notelbimbit"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
></InputText> -->
<MazPhoneNumberInput
v-model="form.notelbimbit"
show-code-on-list
:preferred-countries="['MY']"
:translations="{
countrySelector: {
placeholder: 'Pilih Negara',
error: 'Choose country',
},
phoneInput: {
placeholder: 'Nombor Telefon',
},
}"
:no-example="true"
@update="results = $event"
/>
<InlineMessage class="mt-1" v-if="v$.form.notelbimbit.$error"
>No telefon diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<label for="email">Emel</label>
<InputText
id="email"
type="text"
v-model="form.email"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
h-match-phone-number
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.email.$error"
>Sila isi emel yang sah</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<p class="mb-0" for="username">Username</p>
<InputText
id="username"
type="text"
v-model="form.username"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
h-match-password
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.username.$error"
>Username diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<p class="mb-0">Kata Laluan</p>
<div class="p-input-icon-right">
<i class="pi pi-user" />
<!-- <InputText
id="password"
<h5>Daftar Akaun</h5>
<div class="grid">
<div class="col-12 lg:col-6">
<div class="field">
<label for="name">Nama</label>
<InputText
id="name"
type="text"
v-model="form.password"
v-model="form.name"
class="
text-base text-color
surface-overlay
@@ -210,240 +52,264 @@
focus:border-primary
w-full
"
></InputText> -->
<Password
v-model="form.password"
toggleMask
:feedback="false"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.name.$error"
>Nama diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<label for="nokp">No Kad Pengenalan</label>
<!-- <select
class="p-0 mb-2 form-select"
style="width: 190px; border: none"
>
<option selected value="nokp">No Kad Pengenalan</option>
<option value="passpor">No Passport</option>
</select> -->
<InputText
id="nokp"
type="text"
v-model="form.nokp"
class="
text-base text-color
surface-overlay surface-border
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
/>
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.nokp.$error"
>Semak No KP</InlineMessage
>
</div>
<InlineMessage class="mt-1" v-if="v$.form.password.$error"
>Kata laluan diperlukan & mestilah 8 huruf</InlineMessage
>
</div>
</div>
<!-- <div class="col-12 lg:col-6">
<div class="field">
<label for="confirmpassword">Tetapkan Kata Laluan</label>
<InputText
id="confirmpassword"
type="text"
v-model="form.password_confirmation"
disabled
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
></InputText>
<InlineMessage class="mt-1"
>Tetapkan kata laluan diperlukan</InlineMessage
>
<div class="col-12">
<div class="field">
<label for="alamat">Alamat</label>
<Textarea
id="alamat"
v-model="form.alamat"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
></Textarea>
<InlineMessage class="mt-1" v-if="v$.form.alamat.$error"
>Alamat diperlukan</InlineMessage
>
</div>
</div>
</div> -->
<div class="col-12">
<div class="field">
<label for="frontic">Kad Pengenalan Hadapan</label>
<!-- <FileUpload
name="demo[]"
url="./upload"
:maxFileSize="1500000"
:fileLimit="1"
:multiple="false"
:showUploadButton="false"
:showCancelButton="false"
v-model="form.images.file1"
/> -->
<input
class="form-control"
type="file"
id="formFile"
ref="formFileRef"
@change="readImage()"
/>
<!-- <InlineMessage class="mt-1" v-if="v$.form.images.file1.$error"
<div class="col-12 lg:col-6">
<div class="field">
<label for="notelbimbit">No Telefon</label>
<MazPhoneNumberInput
v-model="form.notelbimbit"
show-code-on-list
:fetch-country="true"
:preferred-countries="['MY']"
:translations="{
countrySelector: {
placeholder: 'Pilih Negara',
error: 'Choose country',
},
phoneInput: {
placeholder: 'Nombor Telefon',
},
}"
:no-example="true"
@update="results = $event"
/>
<InlineMessage class="mt-1" v-if="v$.form.notelbimbit.$error"
>No telefon diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<label for="email">Emel</label>
<InputText
id="email"
type="text"
v-model="form.email"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
h-match-phone-number
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.email.$error"
>Sila isi emel yang sah</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<p class="mb-0" for="username">Username</p>
<InputText
id="username"
type="text"
v-model="form.username"
class="
text-base text-color
surface-overlay
p-2
border-1 border-solid
surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
h-match-password
"
></InputText>
<InlineMessage class="mt-1" v-if="v$.form.username.$error"
>Username diperlukan</InlineMessage
>
</div>
</div>
<div class="col-12 lg:col-6">
<div class="field">
<p class="mb-0">Kata Laluan</p>
<div class="p-input-icon-right">
<i class="pi pi-user" />
<Password
v-model="form.password"
toggleMask
:feedback="false"
class="
text-base text-color
surface-overlay surface-border
border-round
appearance-none
outline-none
focus:border-primary
w-full
"
/>
</div>
<InlineMessage class="mt-1" v-if="v$.form.password.$error"
>Kata laluan diperlukan & mestilah 8 huruf</InlineMessage
>
</div>
</div>
<!-- <div class="col-12">
<div class="field">
<label for="frontic">Kad Pengenalan Hadapan</label>
<input
class="form-control"
type="file"
id="formFile"
ref="formFileRef"
@change="readImage()"
/>
<InlineMessage class="mt-1" v-if="v$.form.images.file1.$error"
>Kad pengenalan hadapan diperlukan</InlineMessage
> -->
>
</div>
</div>
</div>
<div class="col-12">
<div class="field">
<label for="backic">Kad Pengenalan Belakang</label>
<input class="form-control" type="file" />
<!-- <InlineMessage class="mt-1" v-if="v$.form.images.file2.$error"
<div class="col-12">
<div class="field">
<label for="backic">Kad Pengenalan Belakang</label>
<input class="form-control" type="file" />
<InlineMessage class="mt-1" v-if="v$.form.images.file2.$error"
>Kad pengenalan belakang diperlukan</InlineMessage
> -->
>
</div>
</div> -->
<div class="col-12">
<div class="mt-3 mb-1">
<label>
<input type="checkbox" v-model="form.register_agree" />
Setuju Dengan <terms-and-conditions></terms-and-conditions>
</label>
</div>
<InlineMessage v-if="v$.form.register_agree.$error"
>Anda mestilah bersetuju dengan terma & syarat.</InlineMessage
>
</div>
<div class="col-12 text-center">
<Button
class="p-button-sm"
label="Teruskan"
icon="pi pi-sign-in"
iconPos="right"
@click="openModalTNC()"
/>
</div>
</div>
<div class="col-12">
<div class="mt-3 mb-1">
<label>
<input type="checkbox" v-model="form.register_agree" />
Setuju Dengan <terms-and-conditions></terms-and-conditions>
</label>
</div>
<InlineMessage v-if="v$.form.register_agree.$error"
>Anda mestilah bersetuju dengan terma & syarat.</InlineMessage
>
</div>
<Dialog
header="Terma & Syarat"
v-model:visible="isDisplayTNC"
:style="{ width: '80vw' }"
:modal="true"
>
<div>
<terms-and-conditions-details></terms-and-conditions-details>
</div>
<div class="col-12 text-center">
<template #footer>
<Button
label="Batal Pendaftaran"
icon="pi pi-times"
iconPos="right"
@click="closeModalTNC()"
class="p-button-text"
/>
<Button
class="p-button-sm"
label="Daftar"
label="Daftar Sekarang"
:loading="isLoading"
icon="pi pi-sign-in"
iconPos="right"
@click="doRegister()"
></Button>
</div>
</div>
</template>
</Dialog>
</div>
</div>
<!-- <div class="container-fluid p-2">
<div class="row justify-content-center p-5 rounded">
<h1 class="mb-5 text-primary">Sistem Lelong</h1>
<h4>Daftar Akaun</h4>
<form @submit.prevent="submit">
<div class="row">
<div class="col-6 mb-1">
<div class="form-floating">
<input type="text" class="form-control" v-model="form.name" />
<label>Nama</label>
</div>
<div style="font-size: 15px" class="fst-italic text-danger">
<div class="text-start">
*Minimum tambahan harga bida adalah RM1.
</div>
</div>
</div>
<div class="col-6 mb-1">
<div class="form-floating">
<input type="text" class="form-control" v-model="form.nokp" />
<label>No KP</label>
</div>
</div>
</div>
<div class="row">
<div class="col-6 mb-1">
<div class="form-floating">
<input
type="text"
class="form-control"
v-model="form.notelbimbit"
/>
<label>No. Telefon</label>
</div>
</div>
<div class="col-6 mb-1">
<div class="form-floating">
<input type="email" class="form-control" v-model="form.email" />
<label>E-mel</label>
</div>
</div>
</div>
<div class="row">
<div class="col-6 mb-1">
<div class="form-floating">
<input
type="text"
class="form-control"
autocomplete="off"
v-model="form.username"
/>
<label>Username</label>
</div>
</div>
<div class="col-6 mb-1">
<div class="form-floating"></div>
</div>
</div>
<div class="row">
<div class="col-6 mb-1">
<div class="form-floating">
<input
type="password"
class="form-control"
v-model="form.password"
/>
<label>Password</label>
</div>
</div>
<div class="col-6 mb-1">
<div class="form-floating">
<input
type="password"
class="form-control"
v-model="form.password_confirmation"
/>
<label>Password Confirmation</label>
</div>
</div>
</div>
<div class="row">
<div class="col-6 mb-1">
<label>Kad Pengenalan Hadapan</label>
<input type="file" class="form-control" />
</div>
<div class="col-6 mb-1">
<label>Kad Pengenalan Belakang</label>
<input type="file" class="form-control" />
</div>
</div>
<div class="row">
<div class="checkbox mt-3 mb-3">
<label>
<input type="checkbox" value="1" id="register_agree" /> Setuju
Dengan
<terms-and-conditions></terms-and-conditions>
</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-3">
<button
@click="doRegister"
class="w-100 mt-4 mb-5 btn btn-primary"
type="submit"
>
Daftar
</button>
</div>
</div>
</form>
<router-link to="/login">Log Masuk</router-link>
</div>
</div> -->
</template>
<script>
import axios from "axios";
import useVuelidate from "@vuelidate/core";
import { required, email, minLength } from "@vuelidate/validators";
import { required, email, minLength, maxLength } from "@vuelidate/validators";
import TermsAndConditionsDetails from "./TermsAndConditionsDetails.vue";
export default {
name: "Register",
components: {
"terms-and-conditions-details": TermsAndConditionsDetails,
},
data() {
return {
v$: useVuelidate(),
alertMessages: Array,
isLoading: false,
isDisplayTNC: false,
form: {
name: "",
username: "",
@@ -452,6 +318,7 @@ export default {
email: "",
notelbimbit: "",
register_agree: null,
alamat: "",
// password_confirmation: "",
images: {
file1: {
@@ -478,8 +345,8 @@ export default {
axios
.post("/register", this.form)
.then((response) => {
// console.log("doRegister", response);
if (response.data.success == true) {
console.log(response);
localStorage.setItem("token", response.data.token);
localStorage.setItem("id", response.data.user.id);
localStorage.setItem("nokp", response.data.user.nokp);
@@ -494,6 +361,7 @@ export default {
this.isLoading = false;
} else if (response.data.success == false) {
this.isLoading = false;
this.isDisplayTNC = false;
this.alertMessages = response.data.message;
Object.values(this.alertMessages).forEach((val) =>
this.$toast.add({
@@ -502,6 +370,14 @@ export default {
detail: val[0],
})
);
} else if (response.data.success == "Staff") {
this.isLoading = false;
this.isDisplayTNC = false;
this.$toast.add({
severity: "warn",
summary: "Failed to register!",
detail: response.data.message,
});
} else {
this.isLoading = false;
alert(response);
@@ -515,6 +391,15 @@ export default {
});
}
},
openModalTNC() {
this.v$.$validate();
if (!this.v$.$error) {
this.isDisplayTNC = true;
}
},
closeModalTNC() {
this.isDisplayTNC = false;
},
readImage() {},
},
validations() {
@@ -522,11 +407,12 @@ export default {
form: {
name: { required },
username: { required },
nokp: { required },
nokp: { required, minLengthValue: minLength(12), maxLengthValue: maxLength(12) },
password: { required, minLengthValue: minLength(8) },
email: { required, email },
notelbimbit: { required },
notelbimbit: { required, minLengthValue: minLength(8) },
register_agree: { required },
alamat: { required },
// images: {
// file1: {
// filename: { required },
@@ -542,6 +428,12 @@ export default {
</script>
<style scoped>
.main-container {
background: url("/src/assets/bg3.JPG");
background-position: center;
background-size: cover;
}
.logo-img {
width: 84px;
height: 44px;
+55 -85
View File
@@ -8,11 +8,7 @@
</div>
</div>
</div>
<div
v-else
style="min-height: 70vh"
class="fadein animation-duration-400"
>
<div v-else style="min-height: 70vh" class="fadein animation-duration-400">
<div v-if="isSuccess" class="grid justify-content-center">
<div class="col-12 lg:col-11">
<Card>
@@ -23,7 +19,18 @@
<Accordion :multiple="true">
<AccordionTab v-for="bid in listBid" v-bind:key="bid">
<template #header>
<span>{{ bid.caw_name }}</span>
<div class="flex justify-content-between w-100">
<div class="align-self-center" style="margin: 5px">
{{ bid.caw_name }}
</div>
<div class="style-info">
Jumlah RM{{
bid.total_bidaan
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</div>
</div>
</template>
<div class="overflow-x-auto">
<table class="table text-center table-bordered table-hover">
@@ -61,12 +68,14 @@
</tr>
<tr style="text-transform: uppercase">
<th colspan="3">Jumlah</th>
<th>{{bid.total_berat}}g</th>
<th>RM{{
<th>{{ bid.total_berat }}g</th>
<th>
RM{{
bid.total_bidaan
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}</th>
}}
</th>
</tr>
</tbody>
</table>
@@ -76,70 +85,6 @@
</template>
</Card>
</div>
<!-- <div class="accordion" id="accordionExample">
<div v-for="bid in listBid" v-bind:key="bid" class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button
class="accordion-button"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapseOne"
aria-expanded="true"
aria-controls="collapseOne"
>
{{ bid.caw_name }}
</button>
</h2>
<div
id="collapseOne"
class="accordion-collapse collapse show"
aria-labelledby="headingOne"
data-bs-parent="#accordionExample"
>
<div class="accordion-body">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th scope="col">Bil</th>
<th scope="col">No Rujukan</th>
<th scope="col">Tarikh/Masa Bidaan</th>
<th scope="col">Berat</th>
<th scope="col">Harga Bida</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in bid.lelongbid" v-bind:key="item">
<td>{{ index + 1 }}</td>
<td>
<a
href="#"
data-bs-toggle="modal"
data-bs-target="#marhunModal"
v-on:click="marhunModal(item)"
>{{ item.norujukan }}</a
>
</td>
<td>{{ item.masa_bidaan }}</td>
<td>{{ item.berat }}g</td>
<td>
RM{{
item.hargabida
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
</tr>
<tr style="text-transform: uppercase">
<th colspan="3">Jumlah</th>
<th>xxxg</th>
<th>RMxxxxx</th>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div> -->
</div>
<div v-else>
<div
@@ -156,7 +101,7 @@
<span class="text-400"
>Sila rujuk halaman
<router-link v-bind:to="{ name: 'home' }">Utama</router-link>
untuk jadual lelong.</span
untuk jadual lelongan.</span
>
</div>
</div>
@@ -193,25 +138,32 @@
display: flex;
justify-content: center;
align-items: center;
border: 1px solid rgba(0, 0, 0, 0.125);
min-height: 300px;
min-width: 300px;
max-height: 600px;
max-width: 600px;
"
>
-gambar marhun-
<item-master-image-modal
v-if="theData.filemarhun"
v-bind:key="reloadImageComponent"
v-bind:norujukan="theData.norujukan"
v-bind:filemarhun_id="theData.filemarhun[0].id"
></item-master-image-modal>
<p v-else style="text-align: center; width: 100%">
Image Unavailable
</p>
</div>
<div class="col-12 text-center lg:col-6">
<div class="overflow-x-auto">
<table class="table table-bordered">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td style="min-width: 115px">Jenis Marhun</td>
<td style="min-width: 42px">Karat</td>
<td style="min-width: 42px">Berat</td>
<td style="min-width: 102px">Harga Asas</td>
<th>Bil</th>
<th style="min-width: 115px">Jenis Marhun</th>
<th style="min-width: 42px">Karat</th>
<th style="min-width: 42px">Berat</th>
<th style="min-width: 102px">Harga Asas</th>
</tr>
<tr
v-for="(marhun, index) in theData.lelongbidmarhun"
@@ -276,9 +228,13 @@
<script>
import axios from "axios";
import ItemMasterImageModal from "../list/ItemMasterImageModal.vue";
export default {
name: "BidDetail",
components: {
"item-master-image-modal": ItemMasterImageModal
},
data() {
return {
listBid: [],
@@ -286,6 +242,7 @@ export default {
isSuccess: false,
theData: "",
date: "",
reloadImageComponent: 0,
// userId: localStorage.getItem("id"),
};
},
@@ -300,7 +257,7 @@ export default {
var mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0!
var yyyy = today.getFullYear();
today = yyyy + "-" + mm + "-" + dd;
today = dd + "-" + mm + "-" + yyyy;
this.date = today;
},
bidRecord() {
@@ -310,11 +267,9 @@ export default {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
params: {
lelongId: localStorage.getItem("lelong_id"),
},
})
.then((response) => {
// console.log("bidRecord", response);
if (response.data.success == true) {
this.isLoading = false;
this.isSuccess = true;
@@ -330,6 +285,7 @@ export default {
},
marhunModal(value) {
this.theData = value;
this.reloadImageComponent += 1;
console.log(value);
},
},
@@ -340,4 +296,18 @@ export default {
.container-height {
min-height: 70vh;
}
.style-info {
background: #e4f8f0;
border: solid #1ea97c;
border-width: 0px;
color: #1ea97c;
font-size: 1rem;
align-items: center;
display: flex;
padding: 0.4rem 0.9rem;
margin: 0;
border-radius: 6px;
font-weight: 400;
}
</style>
+45 -250
View File
@@ -15,108 +15,6 @@
>
<div v-if="isSuccess" class="row">
<div class="col-12 lg:col-9">
<!-- <div class="card">
<div class="card-header"><h5>SENARAI TROLI</h5></div>
<div class="accordion" id="accordionExample">
<div
v-for="item in listItems"
v-bind:key="item"
class="accordion-item"
>
<h2 class="accordion-header" id="headingOne">
<button
class="accordion-button"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapseOne"
aria-expanded="true"
aria-controls="collapseOne"
>
{{ item.caw_name }}
</button>
</h2>
<div
id="collapseOne"
class="accordion-collapse collapse show"
aria-labelledby="headingOne"
data-bs-parent="#accordionExample"
>
<div class="accordion-body">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Bil</th>
<th>No Rujukan</th>
<th>Berat</th>
<th>Harga Asas</th>
<th>Harga Bida</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
<tr
v-for="(surat, index) in item.lelongbid"
v-bind:key="surat"
>
<td>{{ index + 1 }}</td>
<td>
<a
href="#"
data-bs-toggle="modal"
data-bs-target="#marhunModal"
v-on:click="openModal(surat)"
>
{{ surat.norujukan }}
</a>
</td>
<td>{{ surat.berat }}g</td>
<td>
RM{{
surat.hargaasas
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
<td>
RM{{
surat.hargabida
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
<td>
<button
class="btn me-1 ms-1 btn-warning"
data-bs-toggle="modal"
data-bs-target="#editModal"
v-on:click="openModal(surat)"
>
Ubah Bidaan
</button>
<button
class="btn me-1 ms-1 btn-danger"
data-bs-toggle="modal"
data-bs-target="#deleteModal"
v-on:click="openModal(surat)"
>
Padam Surat
</button>
</td>
</tr>
<tr style="text-transform: uppercase">
<th colspan="2">JUMLAH</th>
<th>xxxg</th>
<th></th>
<th>RMxxxxxx</th>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div> -->
<Card>
<template #title>
<div class="font-normal">Senarai Troli</div>
@@ -125,8 +23,18 @@
<Accordion :multiple="true">
<AccordionTab v-for="item in listItems" v-bind:key="item">
<template #header>
<span>{{ item.caw_name }}</span>
<!-- <span class="ml-2">Jumlah:RMXXXX</span> -->
<div class="flex justify-content-between w-100">
<div class="align-self-center" style="margin: 5px">
{{ item.caw_name }}
</div>
<div class="style-info">
Jumlah RM{{
item.total_bidaan
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</div>
</div>
</template>
<div class="overflow-x-auto">
<table class="table text-center table-bordered table-hover">
@@ -232,12 +140,6 @@
}}
</p>
</div>
<!-- <Button
label="Teruskan"
class="p-button-sm w-full"
data-bs-toggle="modal"
data-bs-target="#bidModal"
/> -->
<Button
label="Teruskan"
class="p-button-sm w-full"
@@ -299,18 +201,23 @@
display: flex;
justify-content: center;
align-items: center;
border: 1px solid rgba(0, 0, 0, 0.125);
min-height: 300px;
min-width: 300px;
max-height: 600px;
max-width: 600px;
"
>
-gambar marhun-
<item-master-image-modal
v-if="theSurat.filemarhun"
v-bind:key="reloadImageComponent"
v-bind:norujukan="theSurat.norujukan"
v-bind:filemarhun_id="theSurat.filemarhun[0].id"
></item-master-image-modal>
<p v-else style="text-align: center; width: 100%">
Image Unavailable
</p>
</div>
<div class="col-12 text-center lg:col-6">
<!-- <p>Marhun: {{ theSurat.marhun }}</p>
<p>Jumlah Berat: {{ theSurat.berat }}g</p> -->
<div class="overflow-x-auto">
<table class="table table-bordered">
<tbody>
@@ -351,62 +258,6 @@
</tbody>
</table>
</div>
<!-- <div class="row justify-content-center">
<div class="col-3">
<label class="col-form-label text-end"
>Jumlah Harga Asas</label
>
</div>
<div class="col-4">
<div class="input-group mb-3">
<span class="input-group-text">RM</span>
<div
style="background-color: #e9ecef; padding-bottom: 0px"
class="form-control text-start justify-content-start"
disabled
>
{{ theSurat.hargaasas }}
</div>
</div>
</div>
</div>
<div class="row justify-content-center mb-3">
<div class="col-3">
<label class="col-form-label">Tambahan Harga Bida</label>
</div>
<div class="col-4">
<div class="input-group">
<span class="input-group-text">RM</span>
<input
type="text"
id="tambahanbida"
class="form-control"
@keyup="calcTotal()"
/>
</div>
</div>
<div class="col-7">
<div style="font-size: 15px" class="fst-italic text-danger">
<div class="text-end">
*Minimum tambahan harga bida adalah RM1.
</div>
<div class="text-end">
*Gandaan ringgit sahaja dibenarkan.
</div>
</div>
</div>
</div>
<div class="row justify-content-center">
<div class="col-3">
<label class="col-form-label">Jumlah Harga Bida</label>
</div>
<div class="col-4">
<div class="input-group mb-3">
<span class="input-group-text">RM</span>
<input type="text" class="form-control" disabled />
</div>
</div>
</div> -->
<div class="row justify-content-center">
<div class="col-6">
<label class="col-form-label">Jumlah Harga Bida</label>
@@ -440,23 +291,6 @@
v-on:click="openModal(theSurat)"
class="p-button-warning p-button-text"
/>
<!-- <button
class="btn me-1 ms-1 btn-warning"
data-bs-toggle="modal"
data-bs-target="#editModal"
v-on:click="openModal(theSurat)"
>
Ubah Bidaan
</button>
<button
class="btn me-1 ms-1 btn-danger"
data-bs-toggle="modal"
data-bs-target="#deleteModal"
v-on:click="openModal(theSurat)"
>
Padam Surat
</button> -->
</div>
</div>
</div>
@@ -465,20 +299,7 @@
class="p-button-sm"
label="Kembali"
data-bs-dismiss="modal"
icon="pi pi-angle-right"
iconPos="right"
/>
<!-- <button
type="submit"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Kembali
</button> -->
<!-- <button type="submit" class="btn btn-success" @click="updateItem()">
Terima
</button> -->
</div>
</div>
</div>
@@ -597,20 +418,6 @@
:loading="isLoadingUbah"
@click="updateItem(theSurat)"
/>
<!-- <button
type="submit"
class="btn btn-danger me-2"
data-bs-dismiss="modal"
>
Batal
</button>
<button
type="submit"
class="btn btn-success"
@click="updateItem(theSurat)"
>
Ubah
</button> -->
</div>
</div>
</div>
@@ -680,20 +487,6 @@
:loading="isLoadingPadam"
@click="deleteItem(theSurat)"
/>
<!-- <button
type="submit"
class="btn btn-secondary me-2"
data-bs-dismiss="modal"
>
Kembali
</button>
<button
type="submit"
class="btn btn-danger"
@click="deleteItem(theSurat)"
>
Padam
</button> -->
</div>
</div>
</div>
@@ -742,19 +535,6 @@
<p class="text-danger">
<i>*Bidaan tidak dapat diubah selepas dihantar.</i>
</p>
<!-- <table class="table table-bordered">
<tbody>
<tr class="bg-light">
<th>Jumlah Surat</th>
<th>Jumlah Bidaan</th>
</tr>
<tr>
<td>{{ total_sag }}</td>
<td>RM{{ total_bidaan }}</td>
</tr>
</tbody>
</table> -->
</div>
<div class="modal-footer">
<button
@@ -774,10 +554,7 @@
<p
class="fst-italic mt-3 fw-lighter"
style="text-align: right; font-size: small"
>
<!-- *Pelayar akan dialihkan ke halaman pembayaran jika butang 'Bayar'
ditekan. -->
</p>
></p>
</div>
</div>
</div>
@@ -893,9 +670,13 @@
import axios from "axios";
import useVuelidate from "@vuelidate/core";
import { required, integer, numeric, minValue } from "@vuelidate/validators";
import ItemMasterImageModal from "../list/ItemMasterImageModal.vue";
export default {
emits: ["reloadComponent"],
components: {
"item-master-image-modal": ItemMasterImageModal,
},
data() {
return {
v$: useVuelidate(),
@@ -910,6 +691,7 @@ export default {
listItems: "",
theSurat: "",
tambahanBidaan: "",
reloadImageComponent: 0,
jumlahBidaan: "",
akadLelong: null,
hargaAsas: "",
@@ -955,9 +737,9 @@ export default {
},
})
.then((response) => {
// console.log("listCart", response);
this.isLoading = false;
if (response.data.success == true) {
console.log(response);
this.isSuccess = true;
this.listItems = response.data.cart;
this.masterTotalSurat = response.data.master_total_surat;
@@ -965,7 +747,6 @@ export default {
} else if (response.data.success == false) {
this.isSuccess = false;
}
console.log(response);
})
.catch((error) => {
console.log(error);
@@ -976,6 +757,7 @@ export default {
this.tambahanBidaan = value.hargabida - value.hargaasas;
this.jumlahBidaan = parseFloat(value.hargabida);
this.hargaAsas = value.hargaasas;
this.reloadImageComponent += 1;
},
deleteItem(value) {
this.isLoadingPadam = true;
@@ -1041,10 +823,10 @@ export default {
},
})
.then((response) => {
// console.log("updateItem", response);
this.isLoadingUbah = false;
// this.isLoading = true;
this.$refs.editClose.click();
console.log(response);
this.$swal.fire({
icon: "success",
title: "Bidaan Berjaya Diubah",
@@ -1087,7 +869,7 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log("bidderSelectBidItem", response);
if (response.data.success == "success") {
this.isLoadingDaftar = false;
this.$refs.daftarBidaanClose.click();
@@ -1101,7 +883,6 @@ export default {
allowEscapeKey: false,
});
// this.loading = false;
console.log(response);
this.$emit("reloadComponent");
} else {
this.isLoadingDaftar = false;
@@ -1156,4 +937,18 @@ export default {
.container-height {
min-height: 70vh;
}
.style-info {
background: #e4f8f0;
border: solid #1ea97c;
border-width: 0px;
color: #1ea97c;
font-size: 1rem;
align-items: center;
display: flex;
padding: 0.4rem 0.9rem;
margin: 0;
border-radius: 6px;
font-weight: 400;
}
</style>
+7 -6
View File
@@ -8,15 +8,17 @@
</div>
<div v-else>
<div v-if="responseData" class="fadein animation-duration-400">
<InlineMessage class="mb-2" severity="info">Kemaskini pada {{ updatedTime }}</InlineMessage>
<InlineMessage class="mb-2" severity="info"
>Kemaskini pada {{ updatedTime }}</InlineMessage
>
<div class="overflow-x-auto">
<table class="table table-bordered table-hover">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td>Karat</td>
<td style="min-width: 100px">Harga</td>
<th>Bil</th>
<th>Karat</th>
<th style="min-width: 100px">Harga</th>
</tr>
<tr v-for="(data, index) in listKarat" v-bind:key="data.id">
<td>{{ index + 1 }}</td>
@@ -69,7 +71,7 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log("getKarat", response);
if (response.data.success == true) {
this.updatedTime = response.data.update_time;
this.listKarat = response.data.karat;
@@ -79,7 +81,6 @@ export default {
this.isLoading = false;
this.responseData = false;
}
//
})
.catch((error) => {
console.log(error);
+5 -6
View File
@@ -14,14 +14,14 @@
>
<tbody>
<tr class="table-light">
<td>Bil</td>
<td style="min-width: 200px">Cawangan</td>
<td style="min-width: 120px">Tarikh</td>
<th>Bil</th>
<th style="min-width: 200px">Cawangan</th>
<th style="min-width: 120px" class="text-center">Tarikh</th>
</tr>
<tr v-for="(data, index) in response" :key="data.id">
<td>{{ index + 1 }}</td>
<td>{{ data.caw_name }}</td>
<td>{{ data.tarikh_lelong }}</td>
<td class="text-center">{{ data.tarikh_lelong }}</td>
</tr>
</tbody>
</table>
@@ -65,11 +65,10 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log("liveData", response);
if (response.data.success == true) {
this.responseData = true;
this.response = response.data.lelong;
// console.log(response.data);
this.isLoading = false;
} else {
this.isLoading = false;
+1 -1
View File
@@ -43,7 +43,7 @@ export default {
var mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0!
var yyyy = today.getFullYear();
today = yyyy + "-" + mm + "-" + dd;
today = dd + "-" + mm + "-" + yyyy;
this.date = today;
},
},
+7 -7
View File
@@ -12,16 +12,16 @@
<table class="table table-sm table-bordered table-hover">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td style="min-width: 200px">Cawangan</td>
<td style="min-width: 120px">Masa Mula</td>
<td style="min-width: 120px">Masa Tamat</td>
<th>Bil</th>
<th style="min-width: 200px">Cawangan</th>
<th style="min-width: 120px" class="text-center">Masa Mula</th>
<th style="min-width: 120px" class="text-center">Masa Tamat</th>
</tr>
<tr v-for="(item, index) in response" :key="item.id">
<td>{{ index + 1 }}</td>
<td>{{ item.caw_name }}</td>
<td>{{ item.masamula_lelong }}</td>
<td>{{ item.masatamat_lelong }}</td>
<td class="text-center">{{ item.masamula_lelong }}</td>
<td class="text-center">{{ item.masatamat_lelong }}</td>
</tr>
</tbody>
</table>
@@ -70,6 +70,7 @@ export default {
},
})
.then((response) => {
console.log("liveData", response);
if (response.data.success == true) {
this.responseData = true;
this.response = response.data.lelong;
@@ -80,7 +81,6 @@ export default {
this.isLoading = false;
} else {
this.isLoading = false;
console.log(response.data.success);
}
})
.catch((error) => {
+7 -5
View File
@@ -2,10 +2,12 @@
<div v-if="isSuccess">
<div v-if="notPay">
<Message severity="success" :closable="false">
<div class="font-bold">Tahniah, bidaan anda menang!
<a class="ml-1 text-blue" @click="toResult()" href="#">
<span class="underline">Selesaikan pembayaran sekarang.</span>
</a></div>
<div class="font-bold">
Tahniah, bidaan anda menang!
<a class="ml-1 text-blue" @click="toResult()" href="#">
<span class="underline">Selesaikan pembayaran sekarang.</span>
</a>
</div>
</Message>
</div>
</div>
@@ -43,7 +45,7 @@ export default {
.then((response) => {
this.loading = false;
console.log(response);
// console.log("getLelong", response);
if (response.data.success === true) {
this.isSuccess = true;
if (response.data.lelong[0].status == null) {
+1 -1
View File
@@ -51,7 +51,7 @@
</footer> -->
<div class="layout-footer">
<div class="layout-footer-left">
<span>Sistem ArrahnBid</span>
<span>ArrahnBid</span>
</div>
<div class="layout-footer-right">
+87 -16
View File
@@ -1,7 +1,9 @@
<template>
<!-- Navbar for laptop screen size (width>992px) -->
<Toast :breakpoints="{ '500px': { width: '100%', right: '0', left: '0' } }" />
<div class="card sticky-top lg:flex hidden border-none">
<Toast
:breakpoints="{ '992px': { display: 'none' }, }"
/>
<div
class="
flex
@@ -36,8 +38,8 @@
<router-link class="nav-button" v-bind:to="{ name: 'result' }"
>Keputusan</router-link
>
<router-link class="nav-button" v-bind:to="{ name: 'login' }"
>Login</router-link
<router-link class="nav-button" v-bind:to="{ name: 'policy' }"
>Polisi</router-link
>
</nav>
</div>
@@ -92,6 +94,11 @@
"
>
<div class="flex align-items-center justify-content-center">
<i
class="pi pi-bars text-white lg:hidden mr-3"
style="cursor: pointer"
@click="visibleRight = true"
></i>
<div class="company-title" type="button" v-on:click="toHome()">
<div class="logo-title">ArrahnBid</div>
<img class="logo-img" src="img/logo_arrahn.png" alt="arrahn-logo" />
@@ -99,19 +106,40 @@
</div>
<div class="flex align-items-center justify-content-center">
<i
class="pi pi-bars text-white lg:hidden"
<!-- <i
class="pi pi-shopping-cart text-white lg:hidden"
style="cursor: pointer"
@click="visibleRight = true"
></i> -->
<!-- <i
class="pi pi-shopping-cart mr-1 p-text-primary"
style="font-size: 1.5rem; color: #eaf0f9"
v-badge.success="itemInCart"
v-on:click="toCart()"
v-if="isSuccessCart"
></i> -->
<i
class="pi pi-shopping-cart mr-1 p-text-primary"
style="font-size: 1.5rem; color: #eaf0f9"
v-on:click="toCart()"
></i>
</div>
</div>
<!-- <div>
<div class="flex justify-content-center h-2rem bg-red-500">
Countdown 00:00:00
<div v-if="lelongOnline != ''">
<div
class="
flex
align-items-center
justify-content-center
notification-mobile
"
>
<i class="pi pi-info-circle mr-2"></i> Lelongan akan tamat pada
{{ lelongOnline }}
</div>
</div> -->
</div>
</div>
<Sidebar v-model:visible="visibleRight" position="right">
<Sidebar v-model:visible="visibleRight" position="left">
<div class="grid">
<div class="col-12">
<div class="text-center">
@@ -156,16 +184,23 @@
<div class="col-12">
<router-link
class="main-nav-link main-nav-link-sidebar"
v-bind:to="{ name: 'profile' }"
>Profil</router-link
v-bind:to="{ name: 'policy' }"
>Polisi</router-link
>
</div>
<div class="col-12">
<router-link
class="main-nav-link main-nav-link-sidebar"
v-bind:to="{ name: 'profile' }"
>Profil</router-link
>
</div>
<div class="col-12">
<!-- <router-link
class="main-nav-link main-nav-link-sidebar"
v-bind:to="{ name: 'login' }"
>Login</router-link
>
> -->
</div>
<div class="col-12">
<a
@@ -187,10 +222,13 @@ export default {
username: localStorage.getItem("username"),
visibleRight: false,
lelongOnline: "",
isSuccessCart: false,
itemInCart: 0,
};
},
mounted: function () {
this.getLelongOnline();
// this.getItemInCart();
},
methods: {
doLogout() {
@@ -218,6 +256,9 @@ export default {
toProfile() {
this.$router.push({ name: "profile" });
},
toCart() {
this.$router.push({ name: "cart" });
},
getLelongOnline() {
axios
.get("/lelongOnline", {
@@ -227,13 +268,13 @@ export default {
})
.then((response) => {
console.log(response);
// console.log('getLelongOnline', response);
if (response.data.success === true) {
this.lelongOnline = response.data.lelong.masatamat_lelong;
this.$toast.add({
severity: "info",
summary: "Informasi",
detail: "Lelong akan tamat pada " + this.lelongOnline,
detail: "Lelongan akan tamat pada " + this.lelongOnline,
});
} else {
}
@@ -242,6 +283,31 @@ export default {
console.log(error);
});
},
getItemInCart() {
this.loading = true;
axios
.get("/itemInCart", {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
params: {
user_id: localStorage.getItem("id"),
},
})
.then((response) => {
// console.log('getItemInCart', response);
if (response.data.success === true) {
this.isSuccessCart = true;
this.itemInCart = response.data.cart;
} else {
this.isSuccessCart = false;
}
})
.catch((error) => {
console.log(error);
});
},
},
};
</script>
@@ -279,7 +345,12 @@ export default {
router-link:hover {
color: blue;
} */
.notification-mobile {
background: #e9e9ff;
color: #696cff;
height: 2.5rem;
padding: 25px 10px;
}
.main-color {
background-color: #1e417b;
}
+38 -5
View File
@@ -1,23 +1,56 @@
<template>
<Image :src="dataUrl" alt="Gambar Marhun" width="250" preview>
<template #indicator> Preview Content </template>
<div v-if="isLoading" class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<Image v-else :src="dataUrl" alt="Gambar Marhun" width="250" preview>
<template #indicator> Lihat Gambar </template>
</Image>
</template>
<script>
import axios from "axios";
export default {
props: {
gambarMain: "",
norujukan: "",
filemarhun_id: "",
},
data() {
return {
image: "",
isLoading: false,
componentKey: 0
};
},
computed: {
dataUrl() {
this.image = this.gambarMain.filename;
return "data:image/jpeg;base64," + this.image;
return "data:image/png;base64, " + this.image;
},
},
mounted: function () {
this.getPhotoMarhun();
},
methods: {
getPhotoMarhun() {
this.isLoading = true;
axios
.get("/photoMarhun", {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
params: {
norujukan: this.norujukan,
filemarhun_id: this.filemarhun_id,
},
})
.then((response) => {
this.isLoading = false;
this.image = response.data;
})
.catch((error) => {
console.log(error);
this.isLoading = false;
});
},
},
};
@@ -0,0 +1,68 @@
<template>
<div v-if="isLoading" class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div v-else style="overflow-x:auto">
<Image :src="dataUrl" alt="Gambar Marhun" width="400" preview>
<template #indicator> Lihat Gambar </template>
</Image>
</div>
</template>
<script>
import axios from "axios";
export default {
props: {
norujukan: "",
filemarhun_id: "",
},
data() {
return {
image: "",
isLoading: false,
componentKey: 0,
};
},
computed: {
dataUrl() {
return "data:image/png;base64, " + this.image;
},
},
mounted: function () {
this.getPhotoMarhun();
},
methods: {
getPhotoMarhun() {
this.isLoading = true;
axios
.get("/photoMarhun", {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
params: {
norujukan: this.norujukan,
filemarhun_id: this.filemarhun_id,
},
})
.then((response) => {
this.isLoading = false;
this.image = response.data;
})
.catch((error) => {
console.log(error);
this.isLoading = false;
});
},
},
};
</script>
<style scoped>
.product-image {
min-height: 200px;
min-width: 200px;
max-height: 350px;
max-width: 350px;
}
</style>
+83 -58
View File
@@ -16,46 +16,35 @@
<div v-else class="fadein animation-duration-400">
<div v-if="this.status">
<!-- <div class="text-center">
<InlineMessage class="m-1" severity="info">
Jumlah Surat: {{ numberSag }}
</InlineMessage>
<InlineMessage class="m-1" severity="info">
Masa Mula Lelong: {{ lelong_details.masamula_lelong }}
</InlineMessage>
<InlineMessage class="m-1" severity="info">
Masa Tamat Lelong: {{ lelong_details.masatamat_lelong }}
</InlineMessage>
</div> -->
<div class="text-center">
<Message severity="info" :closable="false"
>Jumlah Surat Lelongan: {{ numberSag }}
</Message>
</div>
<div class="row justify-content-center">
<div
v-for="sag in sags"
:key="sag.id"
class="col-10 sm:col-8 md:col-6 lg:col-4"
>
<Card>
<Card class="style-card">
<template #content>
<div class="overflow-x-auto">
<div class="flex justify-content-center">
<div
class="flex align-items-center"
style="
border: 1px solid rgba(0, 0, 0, 0.125);
height: 250px;
width: 250px;
min-height: 250px;
min-width: 250px;
"
>
<!-- <img :src="dataUrl" class="product-image" /> -->
<item-master-image
v-if="sag.filemarhun"
v-bind:gambarMain="sag.filemarhun[0]"
></item-master-image>
<p v-else style="text-align: center; width: 100%">
Image Unavailable
</p>
</div>
<div class="style-photo-div">
<!-- <div
class=""
style="min-height: 180px; min-width: 255px"
> -->
<!-- <img :src="dataUrl" class="product-image" /> -->
<item-master-image
v-if="sag.filemarhun"
v-bind:norujukan="sag.norujukan"
v-bind:filemarhun_id="sag.filemarhun[0].id"
></item-master-image>
<p v-else style="text-align: center; width: 100%">
Image Unavailable
</p>
<!-- </div> -->
</div>
<div class="">
<div class="product_details">
@@ -92,23 +81,39 @@
</div>
<div v-else>
<div class="row">
<Message severity="info" :closable="false"
>Sila isi ruangan pilih cawangan di atas.
</Message>
<div class="grid justify-content-center">
<div
class="
flex
align-items-center
justify-content-center
container-height
"
>
<div class="grid justify-content-center">
<div class="col-12 mb-4 text-center">
<i class="pi pi-arrow-up text-8xl text-400"></i>
</div>
<div class="col-12 text-center">
<span class="text-400"
>Sila isi ruangan pilih cawangan di atas.</span
>
</div>
</div>
</div>
<div class="grid justify-content-center" style="visibility:hidden">
<div class="col-12 p-3 lg:col-4">
<div class="card p-2">
<div class="field">
<div class="custom-skeleton">
<div class="flex mb-3"></div>
<Skeleton width="100%" height="150px"></Skeleton>
<div class="flex justify-content-center mt-3">
<Skeleton width="100%" height="1px"></Skeleton>
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-center mt-1">
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-between mt-3">
<div class="flex justify-content-between">
<Skeleton width="4rem" height="2rem"></Skeleton>
<Skeleton width="4rem" height="2rem"></Skeleton>
</div>
@@ -121,14 +126,14 @@
<div class="field">
<div class="custom-skeleton">
<div class="flex mb-3"></div>
<Skeleton width="100%" height="150px"></Skeleton>
<div class="flex justify-content-center mt-3">
<Skeleton width="100%" height="1px"></Skeleton>
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-center mt-1">
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-between mt-3">
<div class="flex justify-content-between">
<Skeleton width="4rem" height="2rem"></Skeleton>
<Skeleton width="4rem" height="2rem"></Skeleton>
</div>
@@ -141,14 +146,14 @@
<div class="field">
<div class="custom-skeleton">
<div class="flex mb-3"></div>
<Skeleton width="100%" height="150px"></Skeleton>
<div class="flex justify-content-center mt-3">
<Skeleton width="100%" height="1px"></Skeleton>
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-center mt-1">
<div class="flex justify-content-center">
<Skeleton width="10rem"></Skeleton>
</div>
<div class="flex justify-content-between mt-3">
<div class="flex justify-content-between">
<Skeleton width="4rem" height="2rem"></Skeleton>
<Skeleton width="4rem" height="2rem"></Skeleton>
</div>
@@ -161,6 +166,7 @@
</div>
</div>
<ScrollTop :threshold="200"/>
<!-- modal marhun -->
<div
class="modal fade"
@@ -188,12 +194,18 @@
<div class="modal-body">
<div class="grid">
<div class="col-12 lg:col-6" style="">
<item-multiple-image
<div class="col-12 lg:col-6 style-photo-div p-2">
<!-- <item-multiple-image
v-if="filemarhun"
v-bind:gambarMultiple="filemarhun"
v-bind:key="reloadImageComponent"
></item-multiple-image>
></item-multiple-image> -->
<item-master-image-modal
v-if="filemarhun"
v-bind:key="reloadImageComponent"
v-bind:norujukan="norujukan.norujukan"
v-bind:filemarhun_id="norujukan.filemarhun[0].id"
></item-master-image-modal>
<p
v-else
style="
@@ -201,7 +213,6 @@
display: flex;
justify-content: center;
align-items: center;
border: 1px solid rgba(0, 0, 0, 0.125);
min-width: 300px;
max-width: 300px;
"
@@ -214,11 +225,11 @@
<table class="table table-bordered">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td style="min-width: 115px">Jenis Marhun</td>
<td style="min-width: 42px">Karat</td>
<td style="min-width: 42px">Berat</td>
<td style="min-width: 102px">Harga Asas</td>
<th>Bil</th>
<th style="min-width: 115px">Jenis Marhun</th>
<th style="min-width: 42px">Karat</th>
<th style="min-width: 42px">Berat</th>
<th style="min-width: 102px">Harga Asas</th>
</tr>
<tr v-for="(marhun, index) in marhuns" :key="marhun.id">
<td>{{ index + 1 }}</td>
@@ -477,11 +488,13 @@ import { mapGetters, mapActions } from "vuex";
import { read } from "@popperjs/core";
import ItemMasterImage from "./ItemMasterImage.vue";
import ItemMultipleImage from "./ItemMultipleImage.vue";
import ItemMasterImageModal from "./ItemMasterImageModal.vue";
export default {
components: {
"item-master-image": ItemMasterImage,
"item-multiple-image": ItemMultipleImage,
"item-master-image-modal": ItemMasterImageModal,
},
emits: ["reloadComponent"],
props: {
@@ -551,7 +564,7 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log("liveData", response);
if (response.data.success == true) {
// let readImage = response.data.message.lelongbid[7].filemarhun[0].filename;
// this.image = readImage;
@@ -666,4 +679,16 @@ export default {
.disabled-bg {
background-color: rgb(233, 236, 239);
}
.style-photo-div {
display: flex;
justify-content: center;
align-items: center;
min-height: 180px;
min-width: 255px;
}
.container-height {
min-height: 70vh;
}
</style>
+2 -10
View File
@@ -35,14 +35,6 @@
<input type="hidden" />
</select>
</div>
<!-- <h6>
<button
class="badge m-2 btn-secondary"
@click="toggleReloadComponent"
>
Reload <i class="bi bi-arrow-down"></i>
</button>
</h6> -->
<list-item
v-bind:key="componentKey"
v-bind:selectedCawangan="selectCawangan"
@@ -70,7 +62,7 @@
<span class="text-400"
>Sila rujuk halaman
<router-link v-bind:to="{ name: 'home' }">Utama</router-link>
untuk jadual lelong.</span
untuk jadual lelongan.</span
>
</div>
</div>
@@ -119,7 +111,7 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log('getIdCawangan', response);
if (response.data.success == true) {
this.isSuccess = true;
this.listCawangan = response.data.lelong;
+98 -50
View File
@@ -81,18 +81,32 @@
<div class="overflow-x-auto">
<table class="table text-center table-bordered">
<tbody>
<tr class="table-light">
<td style="min-width: 240px">Cawangan</td>
<td style="min-width: 120px">Harga Bida</td>
<tr>
<td>Cawangan</td>
<td>{{ cawanganPilihan }}</td>
</tr>
<tr>
<th>{{ cawanganPilihan }}</th>
<th>
<td>Harga Bida</td>
<td style="min-width: 150px">
RM{{
hargaBidaanPilihan
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
</tr>
<tr>
<td>Fi Pengurusan</td>
<td>RM1.00</td>
</tr>
<tr>
<th>Jumlah Keseluruhan</th>
<th>
RM{{
hargaBidaanPilihanTambahFi
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</th>
</tr>
</tbody>
@@ -106,66 +120,67 @@
@click="closeModal()"
class="p-button-text"
/>
<Button
<!-- <Button
label="Ya"
icon="pi pi-check"
iconPos="right"
:loading="isLoading"
@click="doPayment()"
/> -->
<Button
label="Teruskan"
icon="pi pi-check"
iconPos="right"
@click="openModalTNC()"
/>
</template>
</Dialog>
<Dialog
header="Terma & Syarat"
v-model:visible="isDisplayTNC"
:breakpoints="{ '960px': '75vw', '640px': '90vw' }"
:style="{ width: '50vw' }"
:modal="true"
>
<div>
<terms-and-conditions-details></terms-and-conditions-details>
</div>
<template #footer>
<Button
label="Batal Pembayaran"
icon="pi pi-times"
iconPos="right"
@click="closeModalTNC()"
class="p-button-text"
/>
<!-- <Button
label="Ya"
icon="pi pi-check"
iconPos="right"
:loading="isLoading"
@click="doPayment()"
/> -->
<Button
label="Teruskan Bayaran"
icon="pi pi-check"
iconPos="right"
:loading="isLoading"
@click="doPayment()"
/>
</template>
</Dialog>
<!-- <div class="container">
<div class="row justify-content-center">
<div class="col-7">
<div v-if="!nextButton">
<h5>Pilih Cawangan</h5>
<table class="table table-bordered">
<tbody>
<tr v-for="data in namaCawangan" v-bind:key="data">
<td>
<input
type="radio"
v-bind:value="data"
v-model="selectRadio"
/>
</td>
<td>{{ data.cawangan }}</td>
</tr>
</tbody>
</table>
<div class="d-flex justify-content-between">
<button class="btn btn-danger" v-on:click="clickCancelButton()">
Cancel
</button>
<button
ref="nextButton"
v-on:click="clickNextButton()"
class="btn btn-primary"
>
Teruskan
</button>
</div>
</div>
<div v-else>
<select-id
v-bind:selectedRadio="selectRadio"
v-on:back-is-click="backIsClick"
></select-id>
</div>
</div>
</div>
</div> -->
</template>
<script>
import { integer } from "@vuelidate/validators";
import SelectId from "./SelectId.vue";
import TermsAndConditionsDetails from "../authentication/TermsAndConditionsDetails.vue";
import axios from "axios";
export default {
components: {
"select-id": SelectId,
"terms-and-conditions-details": TermsAndConditionsDetails,
},
props: {
namaCawangan: "",
@@ -179,9 +194,12 @@ export default {
selectCawangan: this.namaCawangan,
selectRadio: "",
isDisplay: false,
isDisplayTNC: false,
isLoading: false,
cawanganPilihan: "",
hargaBidaanPilihan: "",
hargaBidaanPilihanTambahFi: "",
lelongDetails: "",
form: {
email: localStorage.getItem("email"),
notel: localStorage.getItem("notelbimbit"),
@@ -223,11 +241,12 @@ export default {
},
})
.then((response) => {
console.log(response);
// console.log("getInvoice", response);
if (response.data.success == true) {
this.form.invoice_id = response.data.invoice.id;
this.form.invoice_no = response.data.invoice.invoice_no;
this.form.lelong_id = this.lelongIdProps;
this.lelongDetails = response.data.lelong;
} else if (response.data.success == false) {
alert("No Invoice Id");
}
@@ -238,21 +257,50 @@ export default {
});
},
openModal(value) {
var date = new Date();
var current_time = date.toLocaleString();
var limit_masa_bayaran = "15:00:00";
var limit_datetime_bayaran = this.lelongDetails.tarikh_lelong + ", " + limit_masa_bayaran;
console.log(current_time, '\n', limit_datetime_bayaran);
// if (current_time < limit_datetime_bayaran === true) {
this.isDisplay = true;
this.cawanganPilihan = value.cawangan;
this.hargaBidaanPilihan = value.total_hargabida;
let convertHargaBidaanPilihan =
parseFloat(value.total_hargabida.replace(/,/g, "")) + 1;
this.hargaBidaanPilihanTambahFi = convertHargaBidaanPilihan.toFixed(2);
this.form.total = parseFloat(value.total_hargabida.replace(/,/g, ""));
let convertData = JSON.parse(JSON.stringify(value.sag));
this.form.sag = convertData;
console.log(this.form);
// } else {
// this.$swal.fire({
// icon: "error",
// title: "Gagal",
// text: "Pembayaran mesti diselesaikan sebelum 3:00pm.",
// confirmButtonColor: "#344871",
// confirmButtonText: "Kembali",
// allowOutsideClick: false,
// allowEscapeKey: false,
// });
// }
},
closeModal() {
this.isDisplay = false;
this.form.total = "";
this.form.sag = "";
},
openModalTNC() {
this.isDisplay = false;
this.isDisplayTNC = true;
},
closeModalTNC() {
this.isDisplayTNC = false;
this.form.total = "";
this.form.sag = "";
},
clickRadio(value) {
console.log(value);
// console.log(value);
this.selectRadio = value;
},
clickCancelButton() {
+1 -1
View File
@@ -120,11 +120,11 @@ export default {
}
)
.then((response) => {
// console.log("liveData", response);
this.isLoading = false;
if (response.data.success == true) {
this.isSuccess = true;
this.lists = response.data.data;
console.log(this.lists);
this.tarikhLelong = response.data.tarikh_lelong;
} else {
}
+40
View File
@@ -0,0 +1,40 @@
<template>
<the-template>
<div class="col-12 lg:col-11 fadein animation-duration-400">
<Card>
<template #title>
<div class="font-normal">Polisi</div>
</template>
<template #content>
<TabView>
<TabPanel :header="'Terma & Syarat'">
<terms-and-conditions-details></terms-and-conditions-details>
</TabPanel>
<TabPanel :header="'Hubungi Kami'">
<div class="grid justify-content-center" style="height: 50vh">
<div class="col-12 mb-4 text-center" style="align-self:end">
<i class="pi pi-wrench text-8xl text-400"></i>
</div>
<div class="col-12 text-center">
<span class="text-400">Sedang Dikemaskini.</span>
</div>
</div>
</TabPanel>
</TabView>
</template>
</Card>
</div>
<ScrollTop :threshold="200"/>
</the-template>
</template>
<script>
import TermsAndConditionsDetails from "../authentication/TermsAndConditionsDetails.vue";
export default {
components: {
"terms-and-conditions-details": TermsAndConditionsDetails,
},
};
</script>
+12
View File
@@ -59,6 +59,18 @@
<div class="col-12 lg:col-6 text-start value-form">
{{ data.notelbimbit }}
</div>
<div class="col-12 lg:col-5 text-start text-400">
Emel
</div>
<div class="col-12 lg:col-6 text-start value-form">
{{ data.email }}
</div>
<div class="col-12 lg:col-5 text-start text-400">
Alamat
</div>
<div class="col-12 lg:col-6 text-start value-form">
{{ data.alamat }}
</div>
</div>
</div>
</div>
+243 -167
View File
@@ -1,6 +1,5 @@
<template>
<the-template>
<!-- <base-card> -->
<div
v-if="loading"
style="min-height: 70vh; display: grid; place-items: center"
@@ -28,17 +27,17 @@
class="font-normal"
style="font-size: 1.5rem; font-weight: 700"
>
Keputusan Tarikh Lelong: {{ tarikhLelong }}
Keputusan Tarikh Lelongan: {{ tarikhLelong }}
</div>
</template>
<template #end>
<Button
<!-- <Button
label="Resit Bayaran"
icon="pi pi-list"
iconPos="right"
class="p-button-sm p-button-outlined mr-2"
/>
/> -->
<Button
label="Pembayaran"
icon="pi pi-money-bill"
@@ -56,9 +55,28 @@
<Accordion :multiple="true">
<AccordionTab v-for="list in lists" v-bind:key="list">
<template #header>
<span>{{ list.cawangan }}</span>
<!-- <span class="ml-2">Jumlah:RMXXXX</span> -->
<div class="flex justify-content-between w-100">
<div class="align-self-center" style="margin: 5px">
{{ list.cawangan }}
</div>
<div class="style-info">
Jumlah RM{{
list.total_hargabida
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</div>
</div>
</template>
<Button
label="Surat Hak Kepemilikan Barang"
icon="pi pi-verified"
iconPos="right"
class="p-button-sm mb-3"
v-on:click="downloadPdf(list.kodcaw)"
v-if="list.status_payment_cawangan == 1"
v-tooltip="'Muat Turun'"
/>
<div class="overflow-x-auto">
<table class="table text-center table-bordered">
<tbody>
@@ -118,124 +136,22 @@
></Tag>
</td>
</tr>
<tr style="text-transform: uppercase">
<td colspan="2">Jumlah</td>
<td>
RM{{
list.total_hargabida
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
<td class="table-light"></td>
</tr>
</tbody>
</table>
</div>
</AccordionTab>
</Accordion>
<!-- <div class="">
<div class="row">
<div class="col">
<div class="d-flex justify-content-between">
<router-link
v-bind:to="{ name: 'result' }"
class="btn btn-secondary m-3 ms-0"
>Kembali</router-link
>
<h5 class="m-3">
Keputusan Tarikh Lelong: {{ tarikhLelong }}
</h5>
<button
v-if="!statusPayment"
v-on:click="clickPayButton(lelongId)"
class="btn btn-primary m-3 me-0"
>
Bayar
</button>
</div>
<div class="d-flex justify-content-end">
<router-link
v-bind:to="{ name: 'receipt' }"
class="btn btn-outline-primary m-2 me-0"
>Resit Bayaran</router-link
>
</div>
<div>
<div class="accordion" id="accordionExample">
<div
v-for="list in lists"
v-bind:key="list"
class="accordion-item"
>
<h2 class="accordion-header" id="headingOne">
<button
class="accordion-button"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapseOne"
aria-expanded="true"
aria-controls="collapseOne"
>
{{ list.cawangan }}
</button>
</h2>
<div
id="collapseOne"
class="accordion-collapse collapse show"
aria-labelledby="headingOne"
data-bs-parent="#accordionExample"
>
<div class="accordion-body">
<table class="table table-bordered">
<thead>
<tr>
<th scope="col">Bil</th>
<th scope="col">No Rujukan</th>
<th scope="col">Harga Bidaan</th>
<th scope="col">Status Bayaran</th>
</tr>
</thead>
<tbody>
<tr
v-for="(data, index) in list.sag"
v-bind:key="data"
>
<td>{{ index + 1 }}</td>
<td>
<a
href="#"
data-bs-toggle="modal"
data-bs-target="#marhunModal"
v-on:click="marhunModal(data)"
>{{ data.norujukan }}
</a>
</td>
<td>RM {{ data.total_payment }}</td>
<td
class="m-1 badge rounded-pill bg-danger"
v-if="
data.status_payment === null ||
data.status_payment == 0
"
>
Belum Bayar
</td>
<td
class="m-1 badge rounded-pill bg-warning"
v-if="data.status_payment === 2"
>
Tunggu Pengesahan
</td>
<td
class="m-1 badge rounded-pill bg-success"
v-if="data.status_payment === 1"
>
Selesai
</td>
</tr>
</tbody>
</table>
<h5 class="mt-4 mb-5">
Jumlah Harga Bida: RM{{ list.total_hargabida }}
</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div> -->
</template>
</Card>
<div
@@ -246,12 +162,9 @@
aria-hidden="true"
data-bs-backdrop="static"
>
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<!-- <h5 class="modal-title" id="marhunModalLabel">
{{ theData.norujukan }}
</h5> -->
<button
type="button"
class="btn-close"
@@ -260,35 +173,92 @@
></button>
</div>
<div class="modal-body">
<table class="table table-bordered">
<thead>
<tr>
<th scope="col">Bil</th>
<th scope="col">Jenis</th>
<th scope="col">Karat</th>
<th scope="col">Berat</th>
<th scope="col">Nota</th>
<th scope="col">Harga Asas</th>
</tr>
</thead>
<!-- <tbody>
<tr
v-for="(marhun, index) in theData.lelongbidmarhun"
v-bind:key="marhun"
<div class="grid">
<div
class="col-12 lg:col-6"
style="
display: flex;
justify-content: center;
align-items: center;
min-height: 300px;
min-width: 300px;
max-height: 600px;
max-width: 600px;
"
>
<td>{{ index + 1 }}</td>
<td>{{ marhun.marhun }}</td>
<td>{{ marhun.karat }}</td>
<td>{{ marhun.berat }}g</td>
<td>{{ marhun.nota }}</td>
<td>RM{{ marhun.hargaasas }}</td>
</tr>
<tr style="text-transform: uppercase">
<th colspan="5">Jumlah</th>
<th>RM{{ theData.hargaasas }}</th>
</tr>
</tbody> -->
</table>
<item-master-image-modal
v-if="theData.filemarhun"
v-bind:key="reloadImageComponent"
v-bind:norujukan="theData.norujukan"
v-bind:filemarhun_id="theData.filemarhun[0].id"
></item-master-image-modal>
<p v-else style="text-align: center; width: 100%">
Image Unavailable
</p>
</div>
<div class="col-12 text-center lg:col-6">
<div class="overflow-x-auto">
<table class="table table-bordered">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td style="min-width: 115px">Jenis Marhun</td>
<td style="min-width: 42px">Karat</td>
<td style="min-width: 42px">Berat</td>
<td style="min-width: 102px">Harga Asas</td>
</tr>
<tr
v-for="(data, index) in theData.lelongbidmarhun"
v-bind:key="data"
>
<td>{{ index + 1 }}</td>
<td>{{ data.marhun }}</td>
<td>{{ data.karat }}</td>
<td>{{ data.berat }}g</td>
<td>
RM{{
data.hargaasas
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
</tr>
<tr style="text-transform: uppercase">
<td colspan="3">Jumlah</td>
<td>{{ theData.berat }}g</td>
<td>
RM{{
theData.hargaasas
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}
</td>
</tr>
</tbody>
</table>
</div>
<div class="row justify-content-center">
<div class="col-6">
<label class="col-form-label"
>Jumlah Harga Bida</label
>
</div>
<div class="col-6">
<div class="input-group mb-3">
<span class="input-group-text">RM</span>
<span
class="form-control font-bold input-group-text"
>{{
theData.hargabida
?.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") || ""
}}</span
>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button
@@ -332,15 +302,65 @@
</div>
</div>
</div>
<Dialog
header="Surat Hak Kepemilikan Barang"
v-model:visible="isDisplay"
:breakpoints="{ '960px': '75vw', '640px': '90vw' }"
:style="{ width: '50vw' }"
:modal="true"
>
<div class="text-center">
<p id="hakbarang">SURAT KETERANGAN KEPEMILIKAN BARANG</p>
<p>
Bahawasanya barang tersebut adalah hak milik
{{ suratHak.user.name }} ({{ suratHak.user.nokp }})
</p>
<table class="table text-center table-bordered">
<tbody>
<tr class="table-light">
<td>Bil</td>
<td>No Rujukan</td>
<td>Jenis Barang</td>
<td>Berat</td>
<td>Harga Bidaan</td>
</tr>
<tr v-for="(data, index) in suratHak.lelongbid" v-bind:key="data">
<td>{{ index + 1 }}</td>
<td>{{ data.norujukan }}</td>
<td>
<div v-for="berat in data.lelongbidmarhun" v-bind:key="berat">
<p>{{ berat.marhun_desc }}</p>
</div>
</td>
<td>
<div v-for="berat in data.lelongbidmarhun" v-bind:key="berat">
<p>{{ berat.berat }}g</p>
</div>
</td>
<td>RM{{ data.hargabida }}</td>
</tr>
</tbody>
</table>
</div>
<template #footer>
<Button label="Muat Turun" @click="muatTurunPdf()" />
</template>
</Dialog>
</div>
<!-- </base-card> -->
</the-template>
</template>
<script>
import jsPDF from "jspdf";
import "jspdf-autotable";
import html2canvas from "html2canvas";
import axios from "axios";
import ItemMasterImageModal from "../list/ItemMasterImageModal.vue";
export default {
components: {
"item-master-image-modal": ItemMasterImageModal,
},
data() {
return {
lists: [],
@@ -350,10 +370,14 @@ export default {
statusPayment: "",
disabled: 0,
isSuccess: false,
theData: "",
reloadImageComponent: "",
isDisplay: false,
suratHak: "",
isSuccessHak: false,
};
},
created() {
console.log(this.$route.params.lelongId);
this.lelongId = this.$route.params.lelongId;
this.statusPayment = this.$route.params.statusPayment;
},
@@ -372,23 +396,16 @@ export default {
liveData() {
this.loading = true;
axios
.get(
"/bayar/" +
localStorage.getItem("id") +
// "/1",
"/" +
this.lelongId,
{
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
}
)
.get("/bayar/" + localStorage.getItem("id") + "/" + this.lelongId, {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
})
.then((response) => {
// console.log("liveData", response);
if (response.data.success == true) {
this.isSuccess = true;
this.loading = false;
console.log(response);
this.lists = response.data.data;
this.tarikhLelong = response.data.tarikh_lelong;
} else {
@@ -407,7 +424,52 @@ export default {
this.$router.push({ name: "result" });
},
marhunModal(value) {
console.log(value);
this.theData = value;
this.reloadImageComponent += 1;
},
downloadPdf(value) {
axios
.get("/resultInCawangan", {
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
},
params: {
lelong_id: this.lelongId,
user_id: localStorage.getItem("id"),
kodcaw: value,
},
})
.then((response) => {
this.suratHak = response.data;
this.isDisplay = true;
this.isSuccessHak = true;
})
.catch((error) => {
console.log(error);
});
},
muatTurunPdf() {
// const doc = new jsPDF();
// doc.autoTable({ html: "#hak-barang" });
// const html = this.$refs.hakbarang.innerHTML;
// doc.fromHTML(html, 15, 15, {
// width: 150,
// });
// var canvas = document.getElementById("hakbarang");
// html2canvas(canvas).then(function (canvas) {
// var imgdata = canvas.toDataURL("image/png");
// var doc = new jsPDF();
// doc.addImage(imgdata, "PNG", 500, 500);
// doc.save("test.pdf");
// });
// window.html2canvas = html2canvas;
// var doc = new jsPDF("p", "pt", "a4");
// doc.html(document.querySelector(#hakbarang), {
// callback: function(pdf) {
// pdf.save("thehehehe.pdf")
// }
// })
// doc.save("table.pdf");
},
},
};
@@ -426,4 +488,18 @@ export default {
.container-height {
min-height: 70vh;
}
.style-info {
background: #e4f8f0;
border: solid #1ea97c;
border-width: 0px;
color: #1ea97c;
font-size: 1rem;
align-items: center;
display: flex;
padding: 0.4rem 0.9rem;
margin: 0;
border-radius: 6px;
font-weight: 400;
}
</style>
+5 -5
View File
@@ -26,7 +26,7 @@
<td style="min-width: 115px">Tarikh</td>
<td style="min-width: 100px">Jumlah</td>
<td style="min-width: 145px">Status Bayaran</td>
<td style="min-width: 150px">Penyata</td>
<!-- <td style="min-width: 150px">Penyata</td> -->
</tr>
<tr v-for="(data, index) in lelong" v-bind:key="data">
<td>{{ index + 1 }}</td>
@@ -58,11 +58,11 @@
severity="danger"
></Tag>
</td>
<td>
<!-- <td>
<span class="text-primary underline cursor-pointer"
>Muat Turun <i class="pi pi-cloud-download"></i>
</span>
</td>
</td> -->
</tr>
</tbody>
</table>
@@ -85,7 +85,7 @@
<span class="text-400"
>Sila rujuk halaman
<router-link v-bind:to="{ name: 'home' }">Utama</router-link>
untuk jadual lelong</span
untuk jadual lelongan.</span
>
</div>
</div>
@@ -127,7 +127,7 @@ export default {
.then((response) => {
this.loading = false;
console.log(response);
// console.log("getLelong", response);
if (response.data.success === true) {
this.isSuccess = true;
this.lelong = response.data.lelong;
+9
View File
@@ -43,6 +43,10 @@ import TabPanel from 'primevue/tabpanel';
import Tag from 'primevue/tag';
import Image from 'primevue/image';
import Galleria from 'primevue/galleria';
import BadgeDirective from 'primevue/badgedirective';
import Textarea from 'primevue/textarea';
import Tooltip from 'primevue/tooltip';
import ScrollTop from 'primevue/scrolltop';
import 'maz-ui/css/main.css'
import MazPhoneNumberInput from 'maz-ui/components/MazPhoneNumberInput'
@@ -84,6 +88,11 @@ app.component('TabPanel', TabPanel);
app.component('Tag', Tag);
app.component('Image', Image);
app.component('Galleria', Galleria);
app.directive('badge', BadgeDirective);
app.component('Textarea', Textarea);
app.directive('tooltip', Tooltip);
app.component('ScrollTop', ScrollTop);
app.component('MazPhoneNumberInput', MazPhoneNumberInput)
+12 -1
View File
@@ -131,6 +131,7 @@ import TheList from "../components/list/TheList.vue";
import ResultDetail from "../components/result/ResultDetail.vue";
import ResultReceipt from "../components/result/ResultReceipt.vue"
import ThePay from "../components/pay/ThePay.vue";
import ThePolicy from "../components/policy/ThePolicy.vue"
import {
createRouter,
@@ -157,6 +158,11 @@ const routes = [
},
{
path: "/",
name: "login",
component: TheLogin,
},
{
path: "/home",
name: "home",
component: TheHome,
},
@@ -191,7 +197,7 @@ const routes = [
// meta: { requiresAuth: true }
},
{
path: "/result/detail",
path: "/result-detail",
name: "detail",
component: ResultDetail,
// meta: { requiresAuth: true }
@@ -207,6 +213,11 @@ const routes = [
name: "pay",
component: ThePay,
},
{
path: "/policy",
name: "policy",
component: ThePolicy,
},
];
const router = createRouter({